PageSourceSearch

https://www.vorotex.ru/assets/app-v2.js?v=1769179307

js vorotex.ru collected 2026-10-09 23:05:07 UTC 1,252,494 bytes, 3,045 lines download raw bytes

1!(function(){function u(){const c=document.getElementById("sync-status-container");if(!c||c.dataset.loaded)return;fetch("/api/sync_price.php?get_log=1").then(r=>r.json()).then(l=>{if(l&&l.length>0){const s=l[0],t=document.getElementById("sync-time"),r=document.getElementById("sync-result"),d=document.getElementById("sync-details"),i=document.getElementById("sync-indicator");t&&(t.innerText=s.timestamp),r&&(r.innerText=s.status==="success"?"УСПЕШНО":"ОШИБКА",r.className="font-bold "+(s.status==="success"?"text-green-600":"text-red-600")),d&&(d.innerText=s.status==="success"?"Обновлено: "+s.count:s.message),i&&(i.className="w-2 h-2 rounded-full "+(s.status==="success"?"bg-green-500":"bg-red-500")),c.dataset.loaded="true"}})["catch"](e=>console.log(e))}setInterval(u,2000)})() ;(function(){const o=document.createElement("link").relList;if(o&&o.supports&&o.supports("modulepreload"))return;for(const h of document.querySelectorAll('link[rel="modulepreload"]'))c(h);new MutationObserver(h=>{for(const m of h)if(m.type==="childList")for(const y of m.addedNodes)y.tagName==="LINK"&&y.rel==="modulepreload"&&c(y)}).observe(document,{childList:!0,subtree:!0});function d(h){const m={};return h.integrity&&(m.integrity=h.integrity),h.referrerPolicy&&(m.referrerPolicy=h.referrerPolicy),h.crossOrigin==="use-credentials"?m.credentials="include":h.crossOrigin==="anonymous"?m.credentials="omit":m.credentials="same-origin",m}function c(h){if(h.ep)return;h.ep=!0;const m=d(h);fetch(h.href,m)}})();
2
3
4/* Admin menu shortcut: "Изменить URL" -> /api/rename_product_ui.php */
5;(function(){
6  try{
7    if(window.__vxAdminRenameUrlLinkInstalled)return;
8    window.__vxAdminRenameUrlLinkInstalled=true;
9    const isAdmin=()=>String(location.pathname||"").indexOf("/admin")!==-1;
10    if(!isAdmin())return;
11    // Cleanup leftovers from previous experiments (cached old bundle)
12    try{ const b=document.getElementById("vx-id-helper-badge"); if(b) b.remove(); }catch(e){}
13    try{ const p=document.getElementById("vx-prod-id-inline"); if(p) p.remove(); }catch(e){}
14    const LINK_ID="vx-admin-rename-url-link";
15    const txt=(el)=>String(el&&el.textContent||"").trim();
16    const low=(s)=>String(s||"").trim().toLowerCase();
17    const isVisible=(el)=>{
18      try{
19        if(!el||el.nodeType!==1)return false;
20        const cs=getComputedStyle(el);
21        if(cs.display==="none"||cs.visibility==="hidden")return false;
22        return (el.getClientRects&&el.getClientRects().length>0);
23      }catch(e){return true}
24    };
25    const sidebarTabLinks=()=>{
26      try{
27        const links=[...document.querySelectorAll("a[href*='/admin?tab='],a[href*='/admin/?tab=']")].filter(isVisible);
28        return links.filter(a=>{
29          try{
30            const r=a.getBoundingClientRect();
31            // left sidebar items are on the left and relatively narrow
32            if(r.left>260) return false;
33            if(r.width>520) return false;
34            if(r.height<22) return false;
35            return true;
36          }catch(e){return false}
37        });
38      }catch(e){return []}
39    };
40
41    const pickSupportLink=()=>{
42      try{
43        const links=sidebarTabLinks();
44        for(const a of links){
45          const href=String(a.getAttribute("href")||"");
46          if(href.includes("tab=support") || href.includes("tab=Support") || href.includes("tab=drivers")) return a;
47          if(href.includes("/support")) return a; // fallback
48        }
49      }catch(e){}
50      return null;
51    };
52
53    const findMenuContainerFrom=(el)=>{
54      try{
55        if(!el) return null;
56        let best=null, bestCnt=0;
57        let node=el;
58        for(let i=0;i<10 && node;i++){
59          if(node.nodeType===1){
60            const cnt = node.querySelectorAll ? node.querySelectorAll("a[href*='/admin?tab='],a[href*='/admin/?tab=']").length : 0;
61            if(cnt>=3 && cnt>bestCnt){
62              best=node; bestCnt=cnt;
63            }
64          }
65          node=node.parentElement;
66        }
67        if(best) return best;
68      }catch(e){}
69      // fallback: find any nav/aside on the left
70      try{
71        const links=sidebarTabLinks();
72        if(links.length){
73          // pick common ancestor that contains many of these links
74          const first=links[0];
75          let node=first;
76          for(let i=0;i<10 && node;i++){
77            if(node.nodeType===1){
78              const cnt = node.querySelectorAll ? node.querySelectorAll("a[href*='/admin?tab='],a[href*='/admin/?tab=']").length : 0;
79              if(cnt>=Math.min(6,links.length)) return node;
80            }
81            node=node.parentElement;
82          }
83        }
84      }catch(e){}
85      return null;
86    };
87
88    const pickInsertAfterLink=()=>{
89      const sup=pickSupportLink();
90      if(sup) return sup;
91      // If there is no "support" tab in this admin, insert after "Интеграции" (closest to your Support-like area)
92      const links=sidebarTabLinks();
93      const byText=(needle)=>{
94        const n=low(needle);
95        for(const a of links){
96          const t=low(txt(a));
97          if(t.includes(n)) return a;
98        }
99        return null;
100      };
101      const integrations = byText("интеграц") || links.find(a=>String(a.getAttribute("href")||"").includes("tab=integrations"));
102      if(integrations) return integrations;
103      const content = byText("контент") || links.find(a=>String(a.getAttribute("href")||"").includes("tab=content"));
104      if(content) return content;
105      // fallback: after last sidebar tab link
106      return links.length ? links[links.length-1] : null;
107    };
108    const ensure=()=>{
109      if(!isAdmin())return;
110      if(document.getElementById(LINK_ID))return;
111      const afterA = pickInsertAfterLink();
112      const container = findMenuContainerFrom(afterA || (sidebarTabLinks()[0]||null)) || null;
113      if(!container) return;
114      const base = afterA || null;
115      const item = base ? (base.closest("li") || base.parentElement) : null;
116
117      const a=document.createElement("a");
118      a.id=LINK_ID;
119      a.href="/api/rename_product_ui.php";
120      a.target="_blank";
121      a.rel="noopener noreferrer";
122      a.textContent="Изменить URL";
123      // Try to match styles of the existing item; fallback to sane defaults
124      try{ a.className = (base && base.className) ? base.className : ""; }catch(e){}
125      a.style.display = "flex";
126      a.style.alignItems = "center";
127      a.style.gap = "8px";
128      a.style.padding = "10px 12px";
129      a.style.borderRadius = "10px";
130      a.style.fontWeight = "900";
131      a.style.textTransform = "uppercase";
132      a.style.letterSpacing = ".08em";
133
134      const wrap = document.createElement(item && item.tagName ? item.tagName.toLowerCase() : "div");
135      try{ if(item && item.className) wrap.className=item.className; }catch(e){}
136      wrap.appendChild(a);
137
138      // Insert after chosen item if we can, otherwise append to menu container
139      if(item && item.parentElement){
140        item.parentElement.insertBefore(wrap, item.nextSibling);
141      } else {
142        container.appendChild(wrap);
143      }
144    };
145    // Debounced observer (sidebar is SPA-rendered)
146    let scheduled=false;
147    const schedule=()=>{
148      if(scheduled)return;
149      scheduled=true;
150      setTimeout(()=>{scheduled=false;ensure();},300);
151    };
152    ensure();
153    new MutationObserver(schedule).observe(document.documentElement,{subtree:true,childList:true});
154    window.addEventListener("popstate", schedule);
155  }catch(e){}
156})();
157
158/* Product editor shortcut: add "Изменить URL" link inside editor (above "Краткое описание (для категории)") */
159;(function(){
160  try{
161    const VX_VER=5;
162    // bump version to force-run after deploy
163    if((window.__vxProductEditorLinksVersion||0)>=VX_VER)return;
164    window.__vxProductEditorLinksVersion=VX_VER;
165
166    const LINK_ID="vx-product-rename-url-link";
167    const WRAP_ID="vx-product-rename-url-wrap";
168    const COLOR_LINK_ID="vx-product-color-values-link";
169    const STATUS_LINK_ID="vx-product-status-values-link";
170    const isAdmin=()=>String(location.pathname||"").indexOf("/admin")!==-1;
171    if(!isAdmin())return;
172    const getParams=()=>{
173      try{
174        const q = String(location.search||"").replace(/^\?/, "");
175        let hq = "";
176        const h = String(location.hash||"");
177        const i = h.indexOf("?");
178        if(i>=0) hq = h.slice(i+1);
179        return new URLSearchParams(q || hq || "");
180      }catch(e){ return new URLSearchParams(""); }
181    };
182    const getEditIdFromUrl=()=>{
183      try{
184        const sp=getParams();
185        return String(sp.get("edit")||"").trim();
186      }catch(e){return ""}
187    };
188    const getEditIdFromDom=()=>{
189      // On your screenshot there is a small label like "ID: ms-m6" near badges.
190      try{
191        const nodes=[...document.querySelectorAll("div,span,p")];
192        for(const n of nodes){
193          if(!isVisible(n))continue;
194          const t=String(n.textContent||"").trim();
195          const m=t.match(/\bID\s*:\s*([a-z0-9][a-z0-9-]{1,80}[a-z0-9])\b/i);
196          if(m && m[1]) return String(m[1]).toLowerCase();
197        }
198      }catch(e){}
199      return "";
200    };
201    const getEditId=()=> getEditIdFromUrl() || getEditIdFromDom();
202    const isVisible=(el)=>{
203      try{
204        if(!el||el.nodeType!==1)return false;
205        const cs=getComputedStyle(el);
206        if(cs.display==="none"||cs.visibility==="hidden"||cs.opacity==="0")return false;
207        return (el.getClientRects&&el.getClientRects().length>0);
208      }catch(e){return true}
209    };
210    const low=(s)=>String(s||"").trim().toLowerCase();
211    const findActionButton=(needles)=>{
212      try{
213        const ns = (Array.isArray(needles)?needles:[needles]).map(n=>low(n));
214        const btns=[...document.querySelectorAll("button,[role='button'],a,input[type='button'],input[type='submit']")];
215        let best=null,bestScore=-1;
216        for(const b of btns){
217          if(!isVisible(b))continue;
218          const t=low(b.textContent||b.value||b.getAttribute&&b.getAttribute("aria-label")||"");
219          if(!t)continue;
220          let ok=false;
221          for(const n of ns){ if(t.includes(n)) { ok=true; break; } }
222          if(!ok)continue;
223          // Avoid sidebar buttons
224          try{
225            const r=b.getBoundingClientRect();
226            if(r.left<200 && r.width<520) continue;
227          }catch(e){}
228          let sc=0;
229          try{
230            const r=b.getBoundingClientRect();
231            const area=Math.max(0,r.width)*Math.max(0,r.height);
232            sc+=Math.min(10, area/2200);
233            if(r.top>=-10 && r.top<window.innerHeight) sc+=1;
234          }catch(e){}
235          if(sc>bestScore){bestScore=sc;best=b;}
236        }
237        return best;
238      }catch(e){return null}
239    };
240
241    const findAnchorForShortDesc=()=>{
242      // Find the "Краткое описание (для категории)" label/text.
243      const NEEDLE="краткое описание";
244      try{
245        const nodes=[...document.querySelectorAll("label,[role='heading'],h1,h2,h3,h4,div,span,p")];
246        let best=null,bestScore=-1;
247        for(const n of nodes){
248          if(!isVisible(n))continue;
249          const t=low(n.textContent||"");
250          if(!t.includes(NEEDLE))continue;
251          // make sure it's the category short description, not "полное описание"
252          if(t.includes("полное описание"))continue;
253          if(!(t.includes("категор") || t.includes("category")))continue;
254          // avoid sidebar/menus
255          try{
256            const r=n.getBoundingClientRect();
257            if(r.left<200)continue;
258            if(r.width<120)continue;
259            if(r.height<10)continue;
260            // Prefer label-like compact nodes
261            let sc=0;
262            sc += Math.min(4, (r.width||0)/250);
263            sc += (r.top>=-20 && r.top<window.innerHeight) ? 2 : 0;
264            if(n.tagName==="LABEL") sc += 3;
265            try{ if(String(n.getAttribute&&n.getAttribute("role")||"").toLowerCase()==="heading") sc += 2; }catch(e){}
266            if(n.closest && n.closest("main,[role='main'],#root")) sc += 1;
267            if(sc>bestScore){bestScore=sc;best=n;}
268          }catch(e){}
269        }
270        if(!best)return null;
271        return best;
272      }catch(e){return null}
273    };
274
275    const getAdminToken=()=>{
276      // Admin on this site uses legacy token header; for opening tools in a new tab we must pass ?token=...
277      const wantKeys = [
278        "admin_token","admintoken","vorotex_admin_token","adminToken",
279        "x-admin-token","x_admin_token","ADMIN_TOKEN"
280      ];
281      const looksToken=(v)=>{
282        v=String(v||"").trim();
283        if(!v) return false;
284        // sha256 hex or typical opaque token
285        if(/^[a-f0-9]{32,128}$/i.test(v)) return true;
286        if(/^[A-Za-z0-9_-]{16,256}$/.test(v)) return true;
287        return false;
288      };
289      const scan=(st)=>{
290        try{
291          if(!st) return "";
292          // exact keys first
293          for(const k of wantKeys){
294            try{
295              const v=st.getItem(k);
296              if(looksToken(v)) return String(v).trim();
297            }catch(e){}
298          }
299          // heuristic scan
300          for(let i=0;i<st.length;i++){
301            const k=String(st.key(i)||"");
302            const lk=k.toLowerCase();
303            if(!(lk.includes("token") || lk.includes("admin"))) continue;
304            let v="";
305            try{ v=String(st.getItem(k)||""); }catch(e){}
306            if(looksToken(v) && (lk.includes("admin") || lk.includes("x-admin"))) return String(v).trim();
307          }
308          // last resort: any token-looking value in an auth-ish key
309          for(let i=0;i<st.length;i++){
310            const k=String(st.key(i)||"");
311            const lk=k.toLowerCase();
312            if(!(lk.includes("auth") || lk.includes("session") || lk.includes("admin"))) continue;
313            let v="";
314            try{ v=String(st.getItem(k)||""); }catch(e){}
315            if(looksToken(v)) return String(v).trim();
316          }
317        }catch(e){}
318        return "";
319      };
320      return scan(localStorage) || scan(sessionStorage) || "";
321    };
322    const addToken=(url)=>{
323      try{
324        const t=getAdminToken();
325        if(!t) return url;
326        return url + (url.indexOf("?")>=0 ? "&" : "?") + "token=" + encodeURIComponent(String(t));
327      }catch(e){ return url; }
328    };
329
330    const ensure=()=>{
331      // Remove if anchor is not present on this view
332      const anchor=findAnchorForShortDesc();
333      if(!anchor){
334        const w=document.getElementById(WRAP_ID);
335        if(w)try{w.remove()}catch(e){}
336        const l=document.getElementById(LINK_ID);
337        if(l)try{l.remove()}catch(e){}
338        const c=document.getElementById(COLOR_LINK_ID);
339        if(c)try{c.remove()}catch(e){}
340        return;
341      }
342      if(document.getElementById(WRAP_ID))return;
343
344      // Clean up leftovers from older versions (single links without wrapper)
345      try{
346        const l=document.getElementById(LINK_ID);
347        if(l && l.parentElement && l.parentElement.id!==WRAP_ID) l.remove();
348      }catch(e){}
349      try{
350        const c=document.getElementById(COLOR_LINK_ID);
351        if(c && c.parentElement && c.parentElement.id!==WRAP_ID) c.remove();
352      }catch(e){}
353
354      const editId=getEditId();
355      const href=addToken("/api/rename_product_ui.php" + (editId ? ("?old="+encodeURIComponent(editId)) : ""));
356      const hrefColors=addToken("/api/color_value_ui.php" + (editId ? ("?productId="+encodeURIComponent(editId)) : ""));
357      const hrefStatus=addToken("/api/product_status_ui.php" + (editId ? ("?productId="+encodeURIComponent(editId)) : ""));
358
359      const mkLink=(id,text,href)=>{
360        const a=document.createElement("a");
361        a.id=id;
362        a.href=href;
363        a.target="_blank";
364        a.rel="noopener noreferrer";
365        a.textContent=text;
366        try{ a.className=""; }catch(e){}
367        a.style.display="inline-flex";
368        a.style.alignItems="center";
369        a.style.justifyContent="center";
370        a.style.gap="8px";
371        a.style.whiteSpace="nowrap";
372        a.style.padding="8px 10px";
373        a.style.borderRadius="10px";
374        a.style.border="1px solid rgba(255,59,48,.35)";
375        a.style.background="rgba(255,59,48,.08)";
376        a.style.color="#ff3b30";
377        a.style.fontWeight="900";
378        a.style.textTransform="uppercase";
379        a.style.letterSpacing=".08em";
380        a.style.textDecoration="none";
381        a.style.fontSize="12px";
382        return a;
383      };
384
385      const wrap=document.createElement("span");
386      wrap.id=WRAP_ID;
387      try{ wrap.className=""; }catch(e){}
388      wrap.style.display="inline-flex";
389      wrap.style.alignItems="center";
390      wrap.style.gap="10px";
391      wrap.style.marginLeft="12px";
392      wrap.style.verticalAlign="middle";
393
394      wrap.appendChild(mkLink(LINK_ID,"Изменить URL",href));
395      wrap.appendChild(mkLink(COLOR_LINK_ID,"Цвета",hrefColors));
396      wrap.appendChild(mkLink(STATUS_LINK_ID,"Статусы",hrefStatus));
397
398      try{ anchor.appendChild(wrap); }catch(e){}
399    };
400
401    let scheduled=false;
402    const schedule=()=>{
403      if(scheduled)return;
404      scheduled=true;
405      setTimeout(()=>{scheduled=false;ensure();},250);
406    };
407
408    ensure();
409    new MutationObserver(schedule).observe(document.documentElement,{subtree:true,childList:true});
410    window.addEventListener("popstate", schedule);
411  }catch(e){}
412})();
413
414/* Mobile UX: make "Оплатить онлайн" button fit inside order card (user cabinet orders list) */
415;(function(){
416  try{
417    const VX_VER=1;
418    if((window.__vxMobilePayBtnFixVersion||0)>=VX_VER)return;
419    window.__vxMobilePayBtnFixVersion=VX_VER;
420
421    const isAdmin=()=>String(location.pathname||"").indexOf("/admin")!==-1;
422    if(isAdmin())return;
423
424    const isMobile=()=>{ try{ return window.matchMedia && window.matchMedia("(max-width: 540px)").matches; }catch(e){ return false; } };
425    const low=(s)=>String(s||"").toLowerCase();
426    const isVisible=(el)=>{
427      try{
428        if(!el||el.nodeType!==1)return false;
429        const cs=getComputedStyle(el);
430        if(cs.display==="none"||cs.visibility==="hidden"||cs.opacity==="0")return false;
431        return (el.getClientRects&&el.getClientRects().length>0);
432      }catch(e){return true}
433    };
434
435    const withinOrderCard=(btn)=>{
436      try{
437        let cur=btn;
438        for(let i=0;i<10;i++){
439          if(!cur||!cur.parentElement)break;
440          cur=cur.parentElement;
441          const t=low(cur.textContent||"");
442          // very characteristic for the orders list cards
443          if(t.includes("заказ #") && (t.includes("ожидает") || t.includes("оплат"))) return cur;
444        }
445      }catch(e){}
446      return null;
447    };
448
449    const styleBtn=(btn)=>{
450      try{
451        if(!btn || btn.__vxPayStyled) return;
452        btn.__vxPayStyled = true;
453        btn.classList && btn.classList.add("vx-mobile-pay-btn");
454
455        // Reduce size a bit
456        btn.style.padding = "10px 14px";
457        btn.style.fontSize = "12px";
458        btn.style.lineHeight = "1";
459        btn.style.letterSpacing = ".06em";
460        btn.style.borderRadius = "9999px";
461        btn.style.minHeight = "auto";
462
463        // Nudge inside the card (if positioned absolutely)
464        const cs = getComputedStyle(btn);
465        if(cs && (cs.position==="absolute" || cs.position==="fixed")){
466          btn.style.left = "16px";
467          // lift a bit from the bottom edge
468          btn.style.bottom = "26px";
469          btn.style.right = "auto";
470          btn.style.top = "auto";
471          btn.style.transform = "none";
472          btn.style.maxWidth = "calc(100% - 32px)";
473        } else {
474          // If it's in normal flow, just add spacing so it doesn't touch the border
475          btn.style.marginLeft = "12px";
476          btn.style.marginTop = "12px";
477          // more air under the button
478          btn.style.marginBottom = "16px";
479        }
480      }catch(e){}
481    };
482
483    const ensure=()=>{
484      if(!isMobile())return;
485      const candidates=[...document.querySelectorAll("button,a")];
486      for(const el of candidates){
487        if(!isVisible(el))continue;
488        const txt=low(el.textContent||"");
489        if(!txt)continue;
490        // match "Оплатить онлайн"/"Оплатить заказ"/etc.
491        if(!(txt.includes("оплат") && (txt.includes("онлайн") || txt.includes("заказ") || txt.length<=30))) continue;
492        const card=withinOrderCard(el);
493        if(!card)continue;
494        styleBtn(el);
495      }
496    };
497
498    let scheduled=false;
499    const schedule=()=>{
500      if(scheduled)return;
501      scheduled=true;
502      setTimeout(()=>{scheduled=false;ensure();},250);
503    };
504    ensure();
505    new MutationObserver(schedule).observe(document.documentElement,{subtree:true,childList:true});
506    window.addEventListener("resize", schedule);
507    window.addEventListener("popstate", schedule);
508  }catch(e){}
509})();
510
511/* Admin UX: hide useless ▲/▼ arrows in Product SEO block */
512;(function(){
513  try{
514    const VX_VER=1;
515    if((window.__vxHideSeoArrowsVersion||0)>=VX_VER)return;
516    window.__vxHideSeoArrowsVersion=VX_VER;
517
518    const isAdmin=()=>String(location.pathname||"").indexOf("/admin")!==-1;
519    if(!isAdmin())return;
520
521    const low=(s)=>String(s||"").toLowerCase();
522    const isVisible=(el)=>{
523      try{
524        if(!el||el.nodeType!==1)return false;
525        const cs=getComputedStyle(el);
526        if(cs.display==="none"||cs.visibility==="hidden"||cs.opacity==="0")return false;
527        return (el.getClientRects&&el.getClientRects().length>0);
528      }catch(e){return true}
529    };
530
531    const hideArrowsIn=(root)=>{
532      try{
533        if(!root||root.__vxSeoArrowsHidden) return;
534        const btns=[...root.querySelectorAll("button,[role='button']")];
535        let hidden=0;
536        for(const b of btns){
537          if(hidden>=2) break;
538          if(!isVisible(b)) continue;
539          const t=String(b.textContent||"").trim();
540          const al=String((b.getAttribute&&b.getAttribute("aria-label"))||"");
541          if(t==="▲"||t==="▼"||t==="▴"||t==="▾"||t==="△"||t==="▽"||/move\s*(up|down)/i.test(al)){
542            b.style.display="none";
543            b.style.visibility="hidden";
544            b.style.pointerEvents="none";
545            hidden++;
546          }
547        }
548        root.__vxSeoArrowsHidden = true;
549      }catch(e){}
550    };
551
552    const findSeoCard=()=>{
553      try{
554        const heads=[...document.querySelectorAll("[role='heading'],h1,h2,h3,h4")];
555        for(const h of heads){
556          if(!isVisible(h)) continue;
557          const t=low(h.textContent||"").replace(/\s+/g," ").trim();
558          if(!(t.includes("seo") && t.includes("настро"))) continue;
559          // climb to find a reasonable "card" container with inputs
560          let cur=h;
561          let best=null;
562          for(let i=0;i<10 && cur;i++){
563            try{
564              const r=cur.getBoundingClientRect();
565              if(r.left>160 && r.width>260 && r.height>80) best=cur;
566            }catch(e){}
567            try{
568              const hasInputs = !!(cur.querySelector && cur.querySelector("input,textarea"));
569              const bcount = cur.querySelectorAll ? cur.querySelectorAll("button,[role='button']").length : 0;
570              if(hasInputs && bcount>=2){ best=cur; break; }
571            }catch(e){}
572            cur=cur.parentElement;
573          }
574          if(best) return best;
575        }
576      }catch(e){}
577      return null;
578    };
579
580    const ensure=()=>{
581      const card=findSeoCard();
582      if(card) hideArrowsIn(card);
583    };
584
585    let scheduled=false;
586    const schedule=()=>{
587      if(scheduled) return;
588      scheduled=true;
589      setTimeout(()=>{scheduled=false;ensure();},250);
590    };
591    ensure();
592    new MutationObserver(schedule).observe(document.documentElement,{subtree:true,childList:true});
593    window.addEventListener("popstate", schedule);
594  }catch(e){}
595})();
596
597/* Admin UX: remove "Скрыть" pill from product badges row (it belongs to visibility, not to badges) */
598;(function(){
599  try{
600    const VX_VER=3;
601    if((window.__vxAdminHideProductHidePillVer||0)>=VX_VER)return;
602    window.__vxAdminHideProductHidePillVer=VX_VER;
603
604    const isAdmin=()=>String(location.pathname||"").indexOf("/admin")!==-1;
605    if(!isAdmin())return;
606
607    const getParams=()=>{
608      try{
609        const q = String(location.search||"").replace(/^\?/, "");
610        let hq = "";
611        const h = String(location.hash||"");
612        const i = h.indexOf("?");
613        if(i>=0) hq = h.slice(i+1);
614        return new URLSearchParams(q || hq || "");
615      }catch(e){ return new URLSearchParams(""); }
616    };
617    const isProductEdit=()=>{
618      try{
619        const sp=getParams();
620        const tab=String(sp.get("tab")||"");
621        const edit=String(sp.get("edit")||"");
622        return tab==="catalog" && !!edit;
623      }catch(e){ return false; }
624    };
625    const low=(s)=>String(s||"").toLowerCase().replace(/\s+/g," ").trim();
626    const isVisible=(el)=>{
627      try{
628        if(!el||el.nodeType!==1)return false;
629        const cs=getComputedStyle(el);
630        if(cs.display==="none"||cs.visibility==="hidden"||cs.opacity==="0")return false;
631        return (el.getClientRects&&el.getClientRects().length>0);
632      }catch(e){return true}
633    };
634
635    const hidePill=(el)=>{
636      try{
637        if(!el || el.__vxHideDone) return;
638        el.__vxHideDone = true;
639        el.style.display="none";
640        el.style.visibility="hidden";
641        el.style.pointerEvents="none";
642      }catch(e){}
643    };
644
645    const findBadgesRow=()=>{
646      // Find the row that contains badge toggles: "Новинка", "Хит", "Sale" (+ the unwanted "Скрыть").
647      try{
648        const nodes=[...document.querySelectorAll("div,section,form")];
649        let best=null,bestArea=1e18;
650        for(const n of nodes){
651          if(!isVisible(n)) continue;
652          const t=low(n.textContent||"");
653          if(!(t.includes("новин") && t.includes("хит") && t.includes("sale"))) continue;
654          if(!(t.includes("скры"))) continue; // we want the row that also includes the unwanted pill
655          let area=0;
656          try{
657            const r=n.getBoundingClientRect();
658            area=Math.max(0,r.width)*Math.max(0,r.height);
659          }catch(e){ area=1e18; }
660          // prefer smaller container (more specific)
661          if(area>0 && area<bestArea){ best=n; bestArea=area; }
662        }
663        return best;
664      }catch(e){}
665      return null;
666    };
667
668    const ensure=()=>{
669      if(!isProductEdit()) return;
670      const row=findBadgesRow();
671      if(!row) return;
672      // Hide any pill/label/button inside that row which contains "скры"
673      try{
674        const nodes=[...row.querySelectorAll("label,button,div,span")];
675        for(const n of nodes){
676          if(!isVisible(n)) continue;
677          const t=low(n.textContent||"");
678          if(!t || !t.includes("скры")) continue;
679          let cur=n;
680          for(let i=0;i<6 && cur;i++){
681            const tag=(cur.tagName||"").toUpperCase();
682            const hasInput = !!(cur.querySelector && cur.querySelector("input[type='checkbox']"));
683            if(tag==="LABEL" || tag==="BUTTON" || hasInput){
684              hidePill(cur);
685              break;
686            }
687            cur=cur.parentElement;
688          }
689        }
690      }catch(e){}
691    };
692
693    let scheduled=false;
694    const schedule=()=>{
695      if(scheduled) return;
696      scheduled=true;
697      setTimeout(()=>{scheduled=false;ensure();},250);
698    };
699    ensure();
700    new MutationObserver(schedule).observe(document.documentElement,{subtree:true,childList:true});
701    window.addEventListener("popstate", schedule);
702    // Fallback: sometimes the editor re-renders without DOM mutations being observed reliably.
703    setInterval(schedule, 1200);
704  }catch(e){}
705})();
706
707/* Catalog UX: prevent color tooltip clipping in filters (without breaking category banner rounding) */
708;(function(){
709  try{
710    const VX_VER=11;
711    if((window.__vxFilterColorTooltipFixVersion||0)>=VX_VER)return;
712    window.__vxFilterColorTooltipFixVersion=VX_VER;
713
714    const isAdmin=()=>String(location.pathname||"").indexOf("/admin")!==-1;
715    if(isAdmin())return;
716
717    const low=(s)=>String(s||"").toLowerCase();
718    const isVisible=(el)=>{
719      try{
720        if(!el||el.nodeType!==1)return false;
721        const cs=getComputedStyle(el);
722        if(cs.display==="none"||cs.visibility==="hidden"||cs.opacity==="0")return false;
723        return (el.getClientRects&&el.getClientRects().length>0);
724      }catch(e){return true}
725    };
726
727    const setOverflowXVisible=(el)=>{
728      try{
729        if(!el||el.nodeType!==1) return;
730        const cs=getComputedStyle(el);
731        const cn=String(el.className||"");
732        const isHiddenX = (cs.overflowX==="hidden") || cn.indexOf("overflow-x-hidden")!==-1;
733        if(!isHiddenX) return;
734        // Only relax horizontal clipping (keep vertical behavior intact)
735        el.style.overflowX = "visible";
736      }catch(e){}
737    };
738
739    const findFilterOverflowWrappers=()=>{
740      const out=[];
741      try{
742        const wraps=[...document.querySelectorAll("[class*='overflow-x-hidden']")];
743        for(const w of wraps){
744          if(!isVisible(w)) continue;
745          const t=low(w.textContent||"");
746          // filters panel content typically contains multiple sections, including "Цена" and "Цвет"
747          if(!(t.includes("цена") && t.includes("цвет"))) continue;
748          const btns=w.querySelectorAll("button");
749          if(!btns || btns.length<10) continue;
750          out.push(w);
751        }
752      }catch(e){}
753      return out.slice(0, 6);
754    };
755
756    const fixCategoryBannerClip=()=>{
757      // Restore clip for category hero/banner (rounded corners must clip hover-zoom).
758      try{
759        const labels=[...document.querySelectorAll("div,span,p")].filter(n=>{
760          if(!isVisible(n)) return false;
761          const t=low(n.textContent||"").replace(/\s+/g," ").trim();
762          return t==="категория" || t==="category";
763        });
764        for(const lab of labels){
765          let cur=lab;
766          for(let i=0;i<10 && cur;i++){
767            const cs=getComputedStyle(cur);
768            let rad=0;
769            try{ rad=parseFloat(cs.borderTopLeftRadius||"0")||0; }catch(e){}
770            const cn=String(cur.className||"");
771            const hasRoundedClass = cn.indexOf("rounded")!==-1;
772            let okSize=false, hasImg=false;
773            try{
774              const r=cur.getBoundingClientRect();
775              okSize = r.width>360 && r.height>120 && r.top<window.innerHeight;
776            }catch(e){}
777            try{
778              hasImg = !!(cs.backgroundImage && cs.backgroundImage!=="none") || !!cur.querySelector("img,video,picture");
779            }catch(e){}
780            // Sometimes border-radius is applied on a child, but clipping must happen on the parent.
781            let childRad=0;
782            if(rad<10){
783              try{
784                const kids=[...cur.querySelectorAll("*")];
785                for(let k=0;k<kids.length && k<25;k++){
786                  const kcs=getComputedStyle(kids[k]);
787                  const rr=parseFloat(kcs.borderTopLeftRadius||"0")||0;
788                  if(rr>childRad) childRad=rr;
789                }
790              }catch(e){}
791            }
792            const roundedEnough = (rad>=10) || hasRoundedClass || (childRad>=10);
793            if(okSize && hasImg && roundedEnough){
794              cur.style.overflow = "hidden";
795              // If parent has no radius but child does, copy it so the clip is rounded.
796              if(rad<10 && childRad>=10){
797                try{ cur.style.borderRadius = childRad + "px"; }catch(e){}
798              }
799              break;
800            }
801            cur=cur.parentElement;
802          }
803        }
804      }catch(e){}
805    };
806
807    const ensure=()=>{
808      // 1) Only relax overflow inside filter content wrappers (no ancestor walking).
809      const wraps=findFilterOverflowWrappers();
810      for(const w of wraps){
811        setOverflowXVisible(w);
812        try{
813          const inner=[...w.querySelectorAll("[class*='overflow-x-hidden']")];
814          for(const el of inner) setOverflowXVisible(el);
815        }catch(e){}
816      }
817      // 2) Ensure category banner remains clipped by rounded container.
818      fixCategoryBannerClip();
819    };
820
821    let scheduled=false;
822    const schedule=()=>{
823      if(scheduled) return;
824      scheduled=true;
825      setTimeout(()=>{scheduled=false;ensure();},250);
826    };
827    ensure();
828    new MutationObserver(schedule).observe(document.documentElement,{subtree:true,childList:true});
829    window.addEventListener("resize", schedule);
830    window.addEventListener("popstate", schedule);
831  }catch(e){}
832})();
833
834/* Catalog UX: hide products marked hidden + render custom badges (from /api/product_flags.php) */
835;(function(){
836  try{
837    const VX_VER=4;
838    if((window.__vxCustomBadgesRenderVer||0)>=VX_VER)return;
839    window.__vxCustomBadgesRenderVer=VX_VER;
840
841    const isAdmin=()=>String(location.pathname||"").indexOf("/admin")!==-1;
842    if(isAdmin())return;
843
844    const low=(s)=>String(s||"").toLowerCase();
845    const isVisible=(el)=>{
846      try{
847        if(!el||el.nodeType!==1)return false;
848        const cs=getComputedStyle(el);
849        if(cs.display==="none"||cs.visibility==="hidden"||cs.opacity==="0")return false;
850        return (el.getClientRects&&el.getClientRects().length>0);
851      }catch(e){return true}
852    };
853
854    const getPidFromHref=(href)=>{
855      try{
856        const m=String(href||"").match(/\/product\/([^?#]+)/i);
857        if(!m||!m[1]) return "";
858        return decodeURIComponent(m[1]).trim();
859      }catch(e){return "";}
860    };
861
862    const findCardRoot=(a)=>{
863      try{
864        let cur=a;
865        let best=null, bestScore=-1;
866        for(let i=0;i<14 && cur;i++){
867          if(cur.nodeType!==1) { cur=cur.parentElement; continue; }
868          const cs=getComputedStyle(cur);
869          let rad=0; try{ rad=parseFloat(cs.borderRadius||cs.borderTopLeftRadius||"0")||0; }catch(e){}
870          const cn=String(cur.className||"");
871          let w=0,h=0, left=0;
872          try{ const r=cur.getBoundingClientRect(); w=r.width; h=r.height; left=r.left; }catch(e){}
873          const ok = w>200 && h>160 && left>=-20 && left<window.innerWidth+20;
874          if(ok){
875            let sc=0;
876            sc += Math.min(12, (w*h)/60000);
877            sc += rad>=10 ? 3 : 0;
878            sc += (String(cs.backgroundColor||"")!=="rgba(0, 0, 0, 0)") ? 1 : 0;
879            // Tailwind-ish classes for cards
880            if(cn.indexOf("rounded")!==-1) sc += 2;
881            if(cn.indexOf("shadow")!==-1) sc += 2;
882            if(cn.indexOf("border")!==-1) sc += 1;
883            // Contains image and price marker
884            try{ if(cur.querySelector && cur.querySelector("img")) sc += 2; }catch(e){}
885            try{ if(String(cur.textContent||"").indexOf("₽")!==-1) sc += 1; }catch(e){}
886            if(sc>bestScore){ bestScore=sc; best=cur; }
887          }
888          cur=cur.parentElement;
889        }
890        return best;
891      }catch(e){ return null; }
892    };
893
894    const findBiggerContainer=(el)=>{
895      // Fallback when card root points to a small inner element.
896      try{
897        let cur=el;
898        let best=null;
899        for(let i=0;i<10 && cur;i++){
900          if(cur.nodeType!==1){ cur=cur.parentElement; continue; }
901          let w=0,h=0;
902          try{ const r=cur.getBoundingClientRect(); w=r.width; h=r.height; }catch(e){}
903          if(w>240 && h>180) { best=cur; }
904          cur=cur.parentElement;
905        }
906        return best;
907      }catch(e){ return null; }
908    };
909
910    const ensureRelative=(el)=>{
911      try{
912        const cs=getComputedStyle(el);
913        if(cs.position==="static" || !cs.position){
914          el.style.position="relative";
915        }
916      }catch(e){}
917    };
918
919    const isLikelyProductCard=(el)=>{
920      try{
921        if(!el || el.nodeType!==1) return false;
922        // Avoid category/catalog hero banners and headers
923        const t=low(el.textContent||"");
924        if(t.includes("категория")) return false;
925        if(t.includes("в каталог") || t.includes("на главную")) return false;
926
927        // Must have a price marker
928        if(t.indexOf("₽")===-1 && !t.includes("руб")) return false;
929
930        // Reasonable card dimensions (banner is usually very wide)
931        let w=0,h=0;
932        try{
933          const r=el.getBoundingClientRect();
934          w=r.width; h=r.height;
935        }catch(e){}
936        if(w && w>680) return false;
937        if(h && h<220) return false;
938
939        // Typically has an image inside
940        try{
941          if(!(el.querySelector && el.querySelector("img"))) return false;
942        }catch(e){ return false; }
943        return true;
944      }catch(e){ return false; }
945    };
946
947    const findNativeBadgeContainer=(card)=>{
948      // Try to locate existing badge stack (НОВИНКА/ХИТ/SALE) and append custom ones there.
949      try{
950        if(!card || !card.querySelector) return null;
951        const divs=[...card.querySelectorAll("div")];
952        for(const d of divs){
953          const cn=String(d.className||"");
954          // typical tailwind: absolute top-3 left-3 z-30 flex flex-col gap-2
955          if(cn.indexOf("absolute")===-1) continue;
956          if(!(cn.indexOf("top-")!==-1 && cn.indexOf("left-")!==-1)) continue;
957          if(!(cn.indexOf("flex")!==-1 && cn.indexOf("flex-col")!==-1)) continue;
958          // Don't require specific badge text (container exists even if no standard badges are enabled)
959          return d;
960        }
961      }catch(e){}
962      return null;
963    };
964
965    const renderBadges=(card, pid, flags)=>{
966      try{
967        if(!card) return;
968        if(!isLikelyProductCard(card)) return;
969        const item = flags && flags.items ? flags.items[pid] : null;
970        // Create a stable key, so we can re-apply after flags change (no "stuck" state).
971        let key = pid + "|";
972        try{
973          key += String(flags.updatedAt||"") + "|";
974          if(item){
975            key += (item.hidden ? "1" : "0") + "|";
976            key += Array.isArray(item.badges) ? item.badges.map(b=>String((b&&b.text)||"")).join(",") : "";
977          } else {
978            key += "noitem";
979          }
980        }catch(e){}
981        if(card.__vxBadgesAppliedKey === key) return;
982        card.__vxBadgesAppliedKey = key;
983
984        if(!item){
985          // nothing for this product; keep existing custom badges if any
986          return;
987        }
988        // If we previously hid it but now it's visible, restore.
989        try{
990          if(card.__vxWasHidden && (!item || !item.hidden)){
991            card.style.display="";
992            card.__vxWasHidden=false;
993          }
994        }catch(e){}
995
996        if(item.hidden){
997          card.style.display="none";
998          card.__vxWasHidden = true;
999          return;
1000        }
1001        const badges = Array.isArray(item.badges) ? item.badges : [];
1002        if(badges.length===0){
1003          // remove any old custom badges if they exist
1004          try{
1005            const existing=card.querySelector && card.querySelector("[data-vx-custom-badges='1']");
1006            if(existing) existing.remove();
1007          }catch(e){}
1008          return;
1009        }
1010
1011        ensureRelative(card);
1012        // Avoid duplicating if React re-renders
1013        const existing=card.querySelector && card.querySelector("[data-vx-custom-badges='1']");
1014        if(existing){
1015          // update pills in-place
1016          try{ existing.remove(); }catch(e){}
1017        }
1018
1019        const wrap=document.createElement("div");
1020        wrap.setAttribute("data-vx-custom-badges","1");
1021        // Prefer native container position, otherwise absolute overlay
1022        const native = findNativeBadgeContainer(card);
1023        if(native){
1024          wrap.style.display="flex";
1025          wrap.style.flexDirection="column";
1026          wrap.style.gap="8px";
1027          wrap.style.pointerEvents="none";
1028          wrap.style.zIndex="40";
1029        } else {
1030          wrap.style.position="absolute";
1031          // Place slightly below default badges area
1032          wrap.style.top="44px";
1033          wrap.style.left="12px";
1034          wrap.style.pointerEvents="none";
1035          wrap.style.zIndex="60";
1036          wrap.style.display="flex";
1037          wrap.style.gap="8px";
1038          wrap.style.flexWrap="wrap";
1039        }
1040
1041        for(let i=0;i<badges.length && i<3;i++){
1042          const b=badges[i]||{};
1043          const txt=String(b.text||"").trim();
1044          if(!txt) continue;
1045          const pill=document.createElement("span");
1046          pill.textContent=txt.toUpperCase();
1047          pill.style.display="inline-flex";
1048          pill.style.alignItems="center";
1049          pill.style.padding="6px 10px";
1050          pill.style.borderRadius="8px";
1051          pill.style.fontSize="11px";
1052          pill.style.fontWeight="900";
1053          pill.style.letterSpacing=".08em";
1054          pill.style.textTransform="uppercase";
1055          pill.style.boxShadow="0 6px 18px rgba(0,0,0,.18)";
1056          pill.style.background=String(b.bg||"#111111");
1057          pill.style.color=String(b.fg||"#ffffff");
1058          wrap.appendChild(pill);
1059        }
1060        if(wrap.childNodes.length){
1061          try{
1062            if(native) native.appendChild(wrap);
1063            else card.appendChild(wrap);
1064          }catch(e){
1065            try{ card.appendChild(wrap); }catch(e2){}
1066          }
1067        }
1068      }catch(e){}
1069    };
1070
1071    const fetchFlags=async()=>{
1072      // Cache in sessionStorage for 5 minutes
1073      try{
1074        const k="vx_product_flags_v1";
1075        const tsK=k+"_ts";
1076        const atK=k+"_at";
1077        const now=Date.now();
1078        const ts=parseInt(sessionStorage.getItem(tsK)||"0",10)||0;
1079        const cachedAt = sessionStorage.getItem(atK) || "";
1080        // always refetch in background at least every 60s; don't "stick" for long
1081        const canUseCache = ts && (now-ts)<(60*1000);
1082        if(canUseCache){
1083          const cached=sessionStorage.getItem(k);
1084          if(cached){
1085            try{ return JSON.parse(cached); }catch(e){}
1086          }
1087        }
1088        const r=await fetch("/api/product_flags.php?ts="+String(now),{credentials:"same-origin"});
1089        const ct=r.headers.get("content-type")||"";
1090        if(!r.ok) throw new Error("http "+r.status);
1091        if(ct.indexOf("application/json")===-1) throw new Error("not json");
1092        const j=await r.json();
1093        try{
1094          sessionStorage.setItem(k, JSON.stringify(j));
1095          sessionStorage.setItem(tsK, String(now));
1096          sessionStorage.setItem(atK, String(j && j.updatedAt ? j.updatedAt : cachedAt));
1097        }catch(e){}
1098        return j;
1099      }catch(e){
1100        return null;
1101      }
1102    };
1103
1104    let flags=null;
1105    let flagsPromise=null;
1106    const getPidsFromContainer=(el)=>{
1107      try{
1108        if(!el || !el.querySelectorAll) return [];
1109        const as=[...el.querySelectorAll("a[href*='/product/']")];
1110        const out=[];
1111        for(const a of as){
1112          const pid=getPidFromHref(a.getAttribute("href")||a.href||"");
1113          if(pid) out.push(pid);
1114        }
1115        return out;
1116      }catch(e){ return []; }
1117    };
1118
1119    const pickCardFromAnchor=(a, pid)=>{
1120      // Choose the smallest reasonable container that contains ONLY this product link.
1121      try{
1122        let cur=a;
1123        for(let i=0;i<14 && cur;i++){
1124          cur = cur.parentElement;
1125          if(!cur || cur.nodeType!==1) continue;
1126          let w=0,h=0;
1127          try{ const r=cur.getBoundingClientRect(); w=r.width; h=r.height; }catch(e){}
1128          if(w<240 || h<180) continue;
1129          const pids=getPidsFromContainer(cur);
1130          if(pids.length===0) continue;
1131          // if container includes multiple product links, it's probably a grid/wrapper → skip
1132          const uniq={};
1133          for(const x of pids){ uniq[x]=1; if(Object.keys(uniq).length>1) break; }
1134          const onlyOne = Object.keys(uniq).length===1;
1135          if(onlyOne && uniq[pid] && isLikelyProductCard(cur)) return cur;
1136        }
1137      }catch(e){}
1138      return null;
1139    };
1140
1141    const ensure=async()=>{
1142      // Find product links on the page
1143      const links=[...document.querySelectorAll("a[href*='/product/']")];
1144      if(!flagsPromise) flagsPromise=fetchFlags();
1145      if(!flags) flags=await flagsPromise;
1146      if(!flags || !flags.items) return;
1147
1148      for(const a of links){
1149        const pid=getPidFromHref(a.getAttribute("href")||a.href||"");
1150        if(!pid) continue;
1151        // Only apply to products that actually have flags; avoids random application via slider links etc.
1152        if(!flags.items[pid]) continue;
1153
1154        // Prefer deterministic pick: container with only this product link
1155        let card=pickCardFromAnchor(a, pid);
1156        if(!card) card=findCardRoot(a);
1157        if(!card) card=findBiggerContainer(a);
1158        if(!card) continue;
1159        if(!isLikelyProductCard(card)) continue;
1160        // If we hit a tiny element, prefer a bigger wrapper.
1161        try{
1162          const r=card.getBoundingClientRect();
1163          if(r.width<240 || r.height<180){
1164            const big=findBiggerContainer(card);
1165            if(big) card=big;
1166          }
1167        }catch(e){}
1168        renderBadges(card, pid, flags);
1169      }
1170    };
1171
1172    let scheduled=false;
1173    const schedule=()=>{
1174      if(scheduled) return;
1175      scheduled=true;
1176      setTimeout(()=>{scheduled=false;ensure();},250);
1177    };
1178    ensure();
1179    new MutationObserver(schedule).observe(document.documentElement,{subtree:true,childList:true});
1180    window.addEventListener("popstate", schedule);
1181  }catch(e){}
1182})();
1183
1184/* Product page UX: render custom badges under product title (from /api/product_flags.php) */
1185;(function(){
1186  try{
1187    const VX_VER=1;
1188    if((window.__vxProductPageCustomBadgesVer||0)>=VX_VER)return;
1189    window.__vxProductPageCustomBadgesVer=VX_VER;
1190
1191    const isAdmin=()=>String(location.pathname||"").indexOf("/admin")!==-1;
1192    if(isAdmin())return;
1193
1194    const path=String(location.pathname||"");
1195    if(path.indexOf("/product/")!==0) return;
1196    const pid=decodeURIComponent(path.replace(/^\/product\//,"").replace(/\/.*$/,"")).trim();
1197    if(!pid) return;
1198
1199    const isVisible=(el)=>{
1200      try{
1201        if(!el||el.nodeType!==1)return false;
1202        const cs=getComputedStyle(el);
1203        if(cs.display==="none"||cs.visibility==="hidden"||cs.opacity==="0")return false;
1204        return (el.getClientRects&&el.getClientRects().length>0);
1205      }catch(e){return true}
1206    };
1207
1208    const fetchFlags=async()=>{
1209      try{
1210        const r=await fetch("/api/product_flags.php?ts="+String(Date.now()),{credentials:"same-origin"});
1211        const ct=r.headers.get("content-type")||"";
1212        if(!r.ok) return null;
1213        if(ct.indexOf("application/json")===-1) return null;
1214        return await r.json();
1215      }catch(e){ return null; }
1216    };
1217
1218    const ensure=async()=>{
1219      try{
1220        const flags=await fetchFlags();
1221        const item = flags && flags.items ? flags.items[pid] : null;
1222        if(!item) return;
1223        const badges = Array.isArray(item.badges) ? item.badges : [];
1224        if(!badges.length) return;
1225
1226        // Find a title node to attach under (prefer main h1/h2)
1227        let title = null;
1228        try{
1229          title = document.querySelector("main h1") || document.querySelector("main h2") || document.querySelector("h1") || document.querySelector("h2");
1230        }catch(e){}
1231        if(!title || !isVisible(title)) return;
1232        if(title.parentElement && title.parentElement.querySelector("[data-vx-product-badges='1']")) return;
1233
1234        const wrap=document.createElement("div");
1235        wrap.setAttribute("data-vx-product-badges","1");
1236        wrap.style.display="flex";
1237        wrap.style.gap="8px";
1238        wrap.style.flexWrap="wrap";
1239        wrap.style.marginTop="10px";
1240        wrap.style.marginBottom="6px";
1241
1242        for(let i=0;i<badges.length && i<4;i++){
1243          const b=badges[i]||{};
1244          const txt=String(b.text||"").trim();
1245          if(!txt) continue;
1246          const pill=document.createElement("span");
1247          pill.textContent=txt.toUpperCase();
1248          pill.style.display="inline-flex";
1249          pill.style.alignItems="center";
1250          pill.style.padding="6px 10px";
1251          pill.style.borderRadius="8px";
1252          pill.style.fontSize="11px";
1253          pill.style.fontWeight="900";
1254          pill.style.letterSpacing=".08em";
1255          pill.style.textTransform="uppercase";
1256          pill.style.boxShadow="0 6px 18px rgba(0,0,0,.18)";
1257          pill.style.background=String(b.bg||"#111111");
1258          pill.style.color=String(b.fg||"#ffffff");
1259          wrap.appendChild(pill);
1260        }
1261        if(!wrap.childNodes.length) return;
1262
1263        // Insert right after title
1264        try{
1265          const p=title.parentElement;
1266          if(p) p.insertBefore(wrap, title.nextSibling);
1267        }catch(e){
1268          try{ title.after(wrap); }catch(e2){}
1269        }
1270      }catch(e){}
1271    };
1272
1273    // run once + on SPA navigation
1274    let scheduled=false;
1275    const schedule=()=>{
1276      if(scheduled) return;
1277      scheduled=true;
1278      setTimeout(()=>{scheduled=false;ensure();},250);
1279    };
1280    schedule();
1281    // Note: MutationObserver for badges kept as is - doesn't affect software section
1282    new MutationObserver(schedule).observe(document.documentElement,{subtree:true,childList:true});
1283    window.addEventListener("popstate", schedule);
1284  }catch(e){}
1285})();
1286
1287/* Product page UX: move "Программное обеспечение" block below "Характеристики" - DISABLED */
1288;(function(){
1289  try{
1290    // DISABLED: Let React handle software section rendering
1291    return;
1292    const VX_VER=7;
1293    if((window.__vxMoveSoftwareBelowSpecsVer||0)>=VX_VER)return;
1294    window.__vxMoveSoftwareBelowSpecsVer=VX_VER;
1295
1296    const isAdmin=()=>String(location.pathname||"").indexOf("/admin")!==-1;
1297    if(isAdmin())return;
1298    const getPid=()=>{
1299      try{
1300        const path=String(location.pathname||"");
1301        if(path.indexOf("/product/")!==0) return "";
1302        return decodeURIComponent(path.replace(/^\/product\//,"").replace(/\/.*$/,"")).trim();
1303      }catch(e){ return ""; }
1304    };
1305
1306    const low=(s)=>String(s||"").toLowerCase().replace(/\s+/g," ").trim();
1307    const isVisible=(el)=>{
1308      try{
1309        if(!el||el.nodeType!==1)return false;
1310        const cs=getComputedStyle(el);
1311        if(cs.display==="none"||cs.visibility==="hidden"||cs.opacity==="0")return false;
1312        return (el.getClientRects&&el.getClientRects().length>0);
1313      }catch(e){return true}
1314    };
1315
1316    const norm=(s)=>String(s||"").replace(/\s+/g," ").trim().toLowerCase();
1317    const uniq=(arr)=>{
1318      const out=[];
1319      const seen=new Set();
1320      for(const x of arr){
1321        if(!x || x.nodeType!==1) continue;
1322        if(seen.has(x)) continue;
1323        seen.add(x); out.push(x);
1324      }
1325      return out;
1326    };
1327
1328    const findBlocksByHeading=(needle)=>{
1329      const nd=norm(needle);
1330      const out=[];
1331      try{
1332        const hs=[...document.querySelectorAll("h1,h2,h3")];
1333        for(const h of hs){
1334          const t=norm(h.textContent||"");
1335          if(!t) continue;
1336          if(!(t===nd || t.indexOf(nd)!==-1)) continue;
1337          let cur=h;
1338          let picked=null;
1339          for(let i=0;i<10 && cur;i++){
1340            if(cur.nodeType!==1){ cur=cur.parentElement; continue; }
1341            const tag=(cur.tagName||"").toUpperCase();
1342            if(tag==="SECTION"){ picked=cur; break; }
1343            // Prefer larger semantic blocks if section isn't used
1344            if(tag==="ARTICLE" || tag==="ASIDE"){ picked=cur; break; }
1345            cur=cur.parentElement;
1346          }
1347          if(!picked){
1348            picked=h.parentElement || null;
1349          }
1350          if(picked) out.push(picked);
1351        }
1352      }catch(e){}
1353      return uniq(out);
1354    };
1355
1356    const findSpecsBlock=()=>{
1357      // Old products often use section.bg-gray-50; new/mobile can differ.
1358      try{
1359        const secs=[...document.querySelectorAll("section.bg-gray-50")];
1360        for(const sec of secs){
1361          const h2=sec.querySelector("h2");
1362          if(!h2) continue;
1363          const t=norm(h2.textContent||"");
1364          if(t && (t==="характеристики" || t.indexOf("характеристики")!==-1)) return sec;
1365        }
1366      }catch(e){}
1367      const blocks=findBlocksByHeading("характеристики");
1368      // Prefer a SECTION if present
1369      for(const b of blocks){
1370        try{ if(String(b.tagName||"").toUpperCase()==="SECTION") return b; }catch(e){}
1371      }
1372      return blocks[0] || null;
1373    };
1374
1375    const findSoftwareBlocks=()=>{
1376      const blocks=findBlocksByHeading("программное обеспечение");
1377      // Keep only likely sections/blocks
1378      return blocks.slice(0, 4);
1379    };
1380
1381    // Hide software sections ASAP to avoid initial "wrong" design flash.
1382    const STYLE_ID="vx-sw-pending-style";
1383    try{
1384      if(!document.getElementById(STYLE_ID)){
1385        const st=document.createElement("style");
1386        st.id=STYLE_ID;
1387        st.textContent="[data-vx-sw-pending='1']{display:none!important;visibility:hidden!important}";
1388        (document.head || document.documentElement) && (document.head || document.documentElement).appendChild(st);
1389      }
1390    }catch(e){}
1391
1392    const preHideSoftware=()=>{
1393      try{
1394        const swBlocks=findSoftwareBlocks();
1395        for(const sec of swBlocks){
1396          if(!sec || sec.__vxHidePrep) continue;
1397          sec.__vxHidePrep = true;
1398          try{ sec.setAttribute("data-vx-sw-pending","1"); }catch(e){}
1399          try{ sec.style.display="none"; sec.style.visibility="hidden"; }catch(e){}
1400        }
1401      }catch(e){}
1402    };
1403
1404    const unhideAllPending=()=>{
1405      try{
1406        const secs=[...document.querySelectorAll("[data-vx-sw-pending='1']")];
1407        for(const sec of secs){
1408          try{ sec.removeAttribute("data-vx-sw-pending"); }catch(e){}
1409          try{ sec.style.display=""; sec.style.visibility=""; }catch(e){}
1410        }
1411      }catch(e){}
1412    };
1413    // Safety net: never let the section disappear forever.
1414    setTimeout(unhideAllPending, 6000);
1415
1416    let support=null;
1417    let supportPromise=null;
1418    const fetchSupport=async()=>{
1419      try{
1420        const r=await fetch("/api/get_data.php?ts="+String(Date.now()),{credentials:"same-origin"});
1421        const ct=r.headers.get("content-type")||"";
1422        if(!r.ok) throw new Error("http "+r.status);
1423        if(ct.indexOf("application/json")===-1) throw new Error("not json");
1424        const j=await r.json();
1425        return j && j.supportSettings ? j.supportSettings : null;
1426      }catch(e){ return null; }
1427    };
1428    const getSupportItemsForPid=(sup, pid)=>{
1429      try{
1430        if(!sup) return [];
1431        const items = Array.isArray(sup.items) ? sup.items : (Array.isArray(sup) ? sup : []);
1432        return items.filter(it=>it && String(it.productId||"")===String(pid));
1433      }catch(e){ return []; }
1434    };
1435    let _vxIsNormalizing=false;
1436    const normalizeSoftwareSection=(sec, items)=>{
1437      try{
1438        if(!sec) return;
1439        const its = Array.isArray(items) ? items : [];
1440        let key="";
1441        try{
1442          key = its.map(it=>
1442String((it&& (it.id||it.name||"")))).join("|") + "||" +
1443                its.map(it=>String((it&&(it.version||"")))).join("|") + "||" +
1444                its.map(it=>String((it&&(it.size||"")))).join("|") + "||" +
1445                its.map(it=>String((it&&(it.description||"")))).join("|");
1446        }catch(e){ key = String(its.length); }
1447        try{
1448          const marker = sec.querySelector && sec.querySelector("[data-vx-software-normalized='1']");
1449          if(marker && sec.__vxSwKey === key) return;
1450          sec.__vxSwKey = key;
1451        }catch(e){}
1452        _vxIsNormalizing=true;
1453
1454        // Build unified download list UI (no extra images)
1455        const wrap=document.createElement("div");
1456        wrap.setAttribute("data-vx-software-normalized","1");
1457        wrap.style.maxWidth="56rem";
1458        wrap.style.margin="0 auto";
1459
1460        const head=document.createElement("div");
1461        head.style.textAlign="center";
1462        head.style.marginBottom="48px";
1463
1464        const h2=document.createElement("h2");
1465        h2.textContent="Программное обеспечение";
1466        h2.style.fontSize="30px";
1467        h2.style.fontWeight="900";
1468        h2.style.textTransform="uppercase";
1469        h2.style.letterSpacing="-.02em";
1470        h2.style.margin="0 0 12px";
1471
1472        const p=document.createElement("p");
1473        p.textContent="Официальные драйверы и утилиты для устройства";
1474        p.style.margin="0";
1475        p.style.color="rgba(156,163,175,1)";
1476
1477        head.appendChild(h2);
1478        head.appendChild(p);
1479        wrap.appendChild(head);
1480
1481        const list=document.createElement("div");
1482        list.style.display="flex";
1483        list.style.flexDirection="column";
1484        list.style.gap="12px";
1485
1486        if(its.length===0){
1487          const empty=document.createElement("div");
1488          empty.textContent="Загружаем файлы для скачивания…";
1489          empty.style.background="rgba(255,255,255,.06)";
1490          empty.style.border="1px solid rgba(255,255,255,.12)";
1491          empty.style.borderRadius="16px";
1492          empty.style.padding="16px";
1493          empty.style.color="rgba(229,231,235,1)";
1494          list.appendChild(empty);
1495        } else {
1496          for(let i=0;i<its.length && i<6;i++){
1497            const it=its[i]||{};
1498            const row=document.createElement("div");
1499            row.style.display="flex";
1500            row.style.alignItems="center";
1501            row.style.gap="16px";
1502            row.style.background="rgba(255,255,255,.05)";
1503            row.style.border="1px solid rgba(255,255,255,.10)";
1504            row.style.borderRadius="16px";
1505            row.style.padding="16px";
1506
1507            const icon=document.createElement("div");
1508            icon.style.width="48px";
1509            icon.style.height="48px";
1510            icon.style.borderRadius="12px";
1511            icon.style.background="rgba(0,0,0,.6)";
1512            icon.style.border="1px solid rgba(255,255,255,.10)";
1513            icon.style.display="flex";
1514            icon.style.alignItems="center";
1515            icon.style.justifyContent="center";
1516            icon.style.color="#ff3b30";
1517            icon.style.fontWeight="900";
1518            icon.textContent="↓";
1519
1520            const info=document.createElement("div");
1521            info.style.minWidth="0";
1522            info.style.flex="1";
1523
1524            const name=document.createElement("div");
1525            name.textContent=String(it.name||"Файл");
1526            name.style.fontSize="16px";
1527            name.style.fontWeight="900";
1528            name.style.textTransform="uppercase";
1529            name.style.whiteSpace="nowrap";
1530            name.style.overflow="hidden";
1531            name.style.textOverflow="ellipsis";
1532            name.style.marginBottom="4px";
1533
1534            // Optional note/description (e.g. "Запуск программы должен осуществляться от имени администратора.")
1535            const descTxt = String(it.description||"").trim();
1536            info.appendChild(name);
1537            if(descTxt){
1538              const desc=document.createElement("div");
1539              desc.textContent=descTxt;
1540              desc.style.marginTop="8px";
1541              desc.style.fontSize="12px";
1542              desc.style.lineHeight="1.35";
1543              desc.style.color="rgba(209,213,219,1)";
1544              desc.style.fontWeight="600";
1545              desc.style.whiteSpace="pre-line";
1546              info.appendChild(desc);
1547            }
1548
1549            const meta=document.createElement("div");
1550            meta.style.marginTop = descTxt ? "8px" : "4px";
1551            meta.style.fontSize="12px";
1552            meta.style.color="rgba(156,163,175,1)";
1553            meta.style.fontFamily="ui-monospace, SFMono-Regular, Menlo, monospace";
1554            meta.style.textTransform="uppercase";
1555            meta.textContent=[it.version,it.size].filter(Boolean).join(" • ");
1556            info.appendChild(meta);
1557
1558            const a=document.createElement("a");
1559            a.href=String(it.link||"#");
1560            a.target="_blank";
1561            a.rel="noopener noreferrer";
1562            a.textContent="Скачать";
1563            a.style.display="inline-flex";
1564            a.style.alignItems="center";
1565            a.style.justifyContent="center";
1566            a.style.gap="8px";
1567            a.style.padding="10px 12px";
1568            a.style.borderRadius="12px";
1569            a.style.background="#ff3b30";
1570            a.style.color="#fff";
1571            a.style.fontWeight="900";
1572            a.style.textTransform="uppercase";
1573            a.style.fontSize="12px";
1574            a.style.whiteSpace="nowrap";
1575            a.style.textDecoration="none";
1576
1577            row.appendChild(icon);
1578            row.appendChild(info);
1579            row.appendChild(a);
1580            list.appendChild(row);
1581          }
1582        }
1583
1584        wrap.appendChild(list);
1585
1586        // Clear section content and re-mount, keep section styling
1587        while(sec.firstChild) sec.removeChild(sec.firstChild);
1588        sec.style.background="#111";
1589        sec.style.color="#fff";
1590        sec.style.padding="80px 16px";
1591        sec.appendChild(wrap);
1592      }catch(e){}finally{_vxIsNormalizing=false;}
1593    };
1594
1595    const showSection=(sec)=>{
1596      try{
1597        sec.removeAttribute && sec.removeAttribute("data-vx-sw-pending");
1598        sec.style.display="";
1599        sec.style.visibility="";
1600      }catch(e){}
1601    };
1602
1603    const startTs = Date.now();
1604    let lastPid="";
1605    const ensure=()=>{
1606      try{
1607        if(_vxIsNormalizing) return;
1608        const pid=getPid();
1609        if(!pid){
1610          lastPid="";
1611          return;
1612        }
1613        if(pid!==lastPid){
1614          lastPid=pid;
1615          // reset caches on product change
1616          support=null;
1617          supportPromise=null;
1618        }
1619        const swSecs = findSoftwareBlocks();
1620        if(!swSecs || !swSecs.length) return;
1621
1622        // Hide immediately to prevent wrong design flash.
1623        preHideSoftware();
1624
1625        const spSec = findSpecsBlock();
1626        // If specs isn't mounted yet (mobile), keep hidden briefly; if it never appears, render in-place.
1627        if(!spSec){
1628          if(Date.now()-startTs > 900){
1629            // Normalize in-place with placeholder and show (better than disappearing).
1630            for(const swSec of swSecs){
1631              normalizeSoftwareSection(swSec, []);
1632              showSection(swSec);
1633            }
1634          }
1635          return;
1636        }
1637
1638        const parent = spSec.parentElement;
1639        if(!parent) return;
1640
1641        for(const swSec of swSecs){
1642          if(!swSec || swSec===spSec) continue;
1643          // Ensure pending-hide is applied
1644          try{
1645            if(!swSec.__vxHidePrep){
1646              swSec.__vxHidePrep = true;
1647              swSec.setAttribute && swSec.setAttribute("data-vx-sw-pending","1");
1648              swSec.style.display="none";
1649              swSec.style.visibility="hidden";
1650            }
1651          }catch(e){}
1652
1653          // If already after specs, skip
1654          try{
1655            const pos = spSec.compareDocumentPosition(swSec);
1656            const after = !!(pos & Node.DOCUMENT_POSITION_FOLLOWING);
1657            if(after) {
1658              swSec.__vxMovedBelowSpecs=true;
1659              // We'll normalize + show below
1660            }
1661          }catch(e){}
1662
1663          // Move after specs section (if needed)
1664          try{
1665            const pos = spSec.compareDocumentPosition(swSec);
1666            const after = !!(pos & Node.DOCUMENT_POSITION_FOLLOWING);
1667            if(!after){
1668              parent.insertBefore(swSec, spSec.nextSibling);
1669              try{ swSec.style.marginTop = "18px"; }catch(e){}
1670            }
1671            try{ swSec.__vxMovedBelowSpecs = true; }catch(e){}
1672          }catch(e){}
1673        }
1674
1675        // Normalize immediately (placeholder), then update from support when loaded.
1676        for(const swSec of swSecs){
1677          normalizeSoftwareSection(swSec, []);
1678          showSection(swSec);
1679        }
1680
1681        if(!supportPromise) supportPromise=fetchSupport();
1682        supportPromise && supportPromise.then((sup)=>{
1683          try{
1684            support = sup;
1685            const items = (pid && support) ? getSupportItemsForPid(support, pid) : [];
1686            for(const swSec of swSecs){
1687              normalizeSoftwareSection(swSec, items);
1688              showSection(swSec);
1689            }
1690          }catch(e){
1691            for(const swSec of swSecs){
1692              showSection(swSec);
1693            }
1694          }
1695        });
1696      }catch(e){}
1697    };
1698
1699    let scheduled=false;
1700    const schedule=()=>{
1701      if(scheduled||_vxIsNormalizing) return;
1702      scheduled=true;
1703      setTimeout(()=>{scheduled=false;ensure();},0);
1704    };
1705    // Run ASAP to avoid any visible jump
1706    // DISABLED: let React handle software section rendering
1707    // ensure();
1708    // schedule();
1709    // new MutationObserver((muts)=>{
1710    //   for(const m of muts){
1711    //     let node=m.target;
1712    //     let el=node&&node.nodeType===1?node:node&&node.parentElement;
1713    //     while(el){
1714    //       if(el.getAttribute&&el.getAttribute("data-vx-software-normalized")==="1") return;
1715    //       el=el.parentElement;
1716    //     }
1717    //   }
1718    //   schedule();
1719    // }).observe(document.documentElement,{subtree:true,childList:true,characterData:true});
1720    // window.addEventListener("popstate", schedule);
1721    // SPA navigations typically use history.pushState (no popstate). Hook it.
1722    try{
1723      // DISABLED: let React handle software section rendering
1724      // if(!window.__vxSwHistoryHooked){
1725      //   window.__vxSwHistoryHooked=true;
1726      //   const _ps=history.pushState;
1727      //   const _rs=history.replaceState;
1728      //   history.pushState=function(){
1729      //     const r=_ps.apply(this, arguments);
1730      //     try{ schedule(); }catch(e){}
1731      //     return r;
1732      //   };
1733      //   history.replaceState=function(){
1734      //     const r=_rs.apply(this, arguments);
1735      //     try{ schedule(); }catch(e){}
1736      //     return r;
1737      //   };
1738      //   window.addEventListener("hashchange", schedule);
1739      // }
1740    }catch(e){}
1741    // Mobile/slow devices: retry for a short window to catch late React renders.
1742    // DISABLED: let React handle software section rendering
1743    // let tries=0;
1744    // const int=setInterval(()=>{tries++; if(_vxIsNormalizing)return; try{ensure();}catch(e){} if(tries>40) try{clearInterval(int)}catch(e){} }, 250);
1745  }catch(e){}
1746})();
1747
1748/* Product page: mark rich-content images for parsers (data-vx="rich-image") */
1749;(function(){
1750  try{
1751    const VX_VER=1;
1752    if((window.__vxRichImagesMarkVer||0)>=VX_VER)return;
1753    window.__vxRichImagesMarkVer=VX_VER;
1754
1755    const isAdmin=()=>String(location.pathname||"").indexOf("/admin")!==-1;
1756    if(isAdmin())return;
1757
1758    const onProduct=()=>String(location.pathname||"").indexOf("/product/")===0;
1759
1760    const isVisible=(el)=>{
1761      try{
1762        if(!el||el.nodeType!==1)return false;
1763        const cs=getComputedStyle(el);
1764        if(cs.display==="none"||cs.visibility==="hidden"||cs.opacity==="0")return false;
1765        return (el.getClientRects&&el.getClientRects().length>0);
1766      }catch(e){return true}
1767    };
1768
1769    const mark=(img)=>{
1770      try{
1771        if(!img || img.nodeType!==1) return;
1772        if(img.getAttribute("data-vx")==="rich-image") return;
1773        img.setAttribute("data-vx","rich-image");
1774        const cn=String(img.className||"");
1775        if(cn.indexOf("vx-rich-image")===-1){
1776          img.className = (cn ? (cn+" ") : "") + "vx-rich-image";
1777        }
1778      }catch(e){}
1779    };
1780
1781    const isSmallIcon=(img)=>{
1782      try{
1783        const r=img.getBoundingClientRect();
1784        return (r.width>0 && r.height>0 && (r.width<=80 || r.height<=80));
1785      }catch(e){ return false; }
1786    };
1787
1788    const pickGalleryRoot=(imgs)=>{
1789      // Heuristic: product gallery is near top and contains multiple large images/thumbnails.
1790      try{
1791        const topImgs = imgs.filter(im=>{
1792          try{
1793            if(!isVisible(im)) return false;
1794            const r=im.getBoundingClientRect();
1795            if(r.top<0 || r.top>700) return false;
1796            if(r.width<140 && r.height<140) return false;
1797            return true;
1798          }catch(e){ return false; }
1799        });
1800        if(topImgs.length<2) return null;
1801        // find a common ancestor containing many imgs
1802        const countImgs=(node)=>{
1803          try{ return node && node.querySelectorAll ? node.querySelectorAll("img").length : 0; }catch(e){ return 0; }
1804        };
1805        let best=null, bestCount=0;
1806        for(const im of topImgs){
1807          let cur=im.parentElement;
1808          for(let i=0;i<10 && cur;i++){
1809            const c=countImgs(cur);
1810            if(c>=3 && c>bestCount){
1811              best=cur; bestCount=c;
1812            }
1813            cur=cur.parentElement;
1814          }
1815        }
1816        return bestCount>=3 ? best : null;
1817      }catch(e){ return null; }
1818    };
1819
1820    const ensure=()=>{
1821      try{
1822        if(!onProduct()) return;
1823        const main=document.querySelector("main") || document.body;
1824        if(!main) return;
1825        const imgs=[...main.querySelectorAll("img")].filter(isVisible);
1826        if(!imgs.length) return;
1827
1828        const galleryRoot = pickGalleryRoot(imgs);
1829
1830        for(const img of imgs){
1831          try{
1832            if(!img || img.nodeType!==1) continue;
1833            // Skip tiny UI icons/logos
1834            if(isSmallIcon(img)) continue;
1835            // Skip anything inside detected gallery root
1836            if(galleryRoot && galleryRoot.contains(img)) continue;
1837            // Skip if it looks like a product-card/catalog image (not product page rich)
1838            const a = img.closest ? img.closest("a[href*='/product/']") : null;
1839            if(a && a !== document.querySelector("a[href='"+location.pathname+"']")) {
1840              // If nested inside another product link, it's not rich content of current product.
1841              continue;
1842            }
1843            mark(img);
1844          }catch(e){}
1845        }
1846      }catch(e){}
1847    };
1848
1849    let scheduled=false;
1850    const schedule=()=>{
1851      if(scheduled) return;
1852      scheduled=true;
1853      setTimeout(()=>{scheduled=false;ensure();},50);
1854    };
1855
1856    ensure();
1857    new MutationObserver(schedule).observe(document.documentElement,{subtree:true,childList:true,attributes:true});
1858    window.addEventListener("popstate", schedule);
1859    try{
1860      if(!window.__vxRichHistoryHooked){
1861        window.__vxRichHistoryHooked=true;
1862        const _ps=history.pushState;
1863        const _rs=history.replaceState;
1864        history.pushState=function(){
1865          const r=_ps.apply(this, arguments);
1866          try{ schedule(); }catch(e){}
1867          return r;
1868        };
1869        history.replaceState=function(){
1870          const r=_rs.apply(this, arguments);
1871          try{ schedule(); }catch(e){}
1872          return r;
1873        };
1874        window.addEventListener("hashchange", schedule);
1875      }
1876    }catch(e){}
1877  }catch(e){}
1878})();
1879
1880/* Product page: inject hidden social assets block for parsing (img[data-vx="social-image"]) */
1881;(function(){
1882  try{
1883    const VX_VER=2;
1884    if((window.__vxSocialAssetsInjectVer||0)>=VX_VER)return;
1885    window.__vxSocialAssetsInjectVer=VX_VER;
1886
1887    const isAdmin=()=>String(location.pathname||"").indexOf("/admin")!==-1;
1888    if(isAdmin())return;
1889
1890    const getPid=()=>{
1891      try{
1892        const path=String(location.pathname||"");
1893        if(path.indexOf("/product/")!==0) return "";
1894        return decodeURIComponent(path.replace(/^\/product\//,"").replace(/\/.*$/,"")).trim();
1895      }catch(e){ return ""; }
1896    };
1897
1898    const absUrl=(u)=>{
1899      try{
1900        const s=String(u||"").trim();
1901        if(!s) return "";
1902        if(/^https?:\/\//i.test(s)) return s;
1903        if(s.indexOf("//")===0) return location.protocol + s;
1904        if(s[0]==="/") return location.origin + s;
1905        return location.origin + "/" + s;
1906      }catch(e){ return ""; }
1907    };
1908
1909    const getRichImageSrcs=()=>{
1910      try{
1911        const main=document.querySelector("main") || document.body;
1912        if(!main) return [];
1913        const imgs=[...main.querySelectorAll("img[data-vx='rich-image'],img.vx-rich-image")];
1914        const out=[];
1915        for(const im of imgs){
1916          try{
1917            if(!im) continue;
1918            const src = absUrl(im.currentSrc || im.getAttribute("src") || "");
1919            if(!src) continue;
1920            if(out.indexOf(src)===-1) out.push(src);
1921          }catch(e){}
1922        }
1923        return out;
1924      }catch(e){ return []; }
1925    };
1926
1927    const ensure=(pid, list)=>{
1928      try{
1929        // remove old block to avoid stale data between SPA navigations
1930        const olds=[...document.querySelectorAll(".vx-social-assets[data-vx-social='1']")];
1931        for(const o of olds){ try{ o.remove(); }catch(e){} }
1932        if(!pid) return;
1933        if(!list || !list.length) return;
1934
1935        const wrap=document.createElement("div");
1936        wrap.className="vx-social-assets";
1937        wrap.setAttribute("data-vx-social","1");
1938        wrap.style.display="none";
1939
1940        for(let i=0;i<list.length && i<24;i++){
1941          const src=absUrl(list[i]);
1942          if(!src) continue;
1943          const img=document.createElement("img");
1944          img.setAttribute("data-vx","social-image");
1945          img.setAttribute("data-vx-product", pid);
1946          img.src=src;
1947          img.alt="social asset";
1948          wrap.appendChild(img);
1949        }
1950        if(!wrap.childNodes.length) return;
1951        (document.body || document.documentElement).appendChild(wrap);
1952      }catch(e){}
1953    };
1954
1955    let lastPid="";
1956    const run=async()=>{
1957      try{
1958        const pid=getPid();
1959        if(!pid){
1960          lastPid="";
1961          ensure("", []);
1962          return;
1963        }
1964        if(pid===lastPid){
1965          // still ensure exists (in case React wiped body children)
1966        } else {
1967          lastPid=pid;
1968        }
1969        const list = getRichImageSrcs();
1970        ensure(pid, list);
1971      }catch(e){}
1972    };
1973
1974    let scheduled=false;
1975    const schedule=()=>{
1976      if(scheduled) return;
1977      scheduled=true;
1978      setTimeout(()=>{scheduled=false;run();},100);
1979    };
1980
1981    schedule();
1982    new MutationObserver(schedule).observe(document.documentElement,{subtree:true,childList:true});
1983    window.addEventListener("popstate", schedule);
1984    try{
1985      if(!window.__vxSocialHistoryHooked){
1986        window.__vxSocialHistoryHooked=true;
1987        const _ps=history.pushState;
1988        const _rs=history.replaceState;
1989        history.pushState=function(){
1990          const r=_ps.apply(this, arguments);
1991          try{ schedule(); }catch(e){}
1992          return r;
1993        };
1994        history.replaceState=function(){
1995          const r=_rs.apply(this, arguments);
1996          try{ schedule(); }catch(e){}
1997          return r;
1998        };
1999        window.addEventListener("hashchange", schedule);
2000      }
2001    }catch(e){}
2002  }catch(e){}
2003})();
2004
2005function Yx(r){return r&&r.__esModule&&Object.prototype.hasOwnProperty.call(r,"default")?r.default:r}var Ed={exports:{}},hn={};/**
2006 * @license React
2007 * react-jsx-runtime.production.js
2008 *
2009 * Copyright (c) Meta Platforms, Inc. and affiliates.
2010 *
2011 * This source code is licensed under the MIT license found in the
2012 * LICENSE file in the root directory of this source tree.
2013 */var ox;function eb(){if(ox)return hn;ox=1;var r=Symbol.for("react.transitional.element"),o=Symbol.for("react.fragment");function d(c,h,m){var y=null;if(m!==void 0&&(y=""+m),h.key!==void 0&&(y=""+h.key),"key"in h){m={};for(var u in h)u!=="key"&&(m[u]=h[u])}else m=h;return h=m.ref,{$$typeof:r,type:c,key:y,ref:h!==void 0?h:null,props:m}}return hn.Fragment=o,hn.jsx=d,hn.jsxs=d,hn}var cx;function tb(){return cx||(cx=1,Ed.exports=eb()),Ed.exports}var t=tb(),Cd={exports:{}},Ve={};/**
2014 * @license React
2015 * react.production.js
2016 *
2017 * Copyright (c) Meta Platforms, Inc. and affiliates.
2018 *
2019 * This source code is licensed under the MIT license found in the
2020 * LICENSE file in the root directory of this source tree.
2021 */var dx;function ab(){if(dx)return Ve;dx=1;var r=Symbol.for("react.transitional.element"),o=Symbol.for("react.portal"),d=Symbol.for("react.fragment"),c=Symbol.for("react.strict_mode"),h=Symbol.for("react.profiler"),m=Symbol.for("react.consumer"),y=Symbol.for("react.context"),u=Symbol.for("react.forward_ref"),f=Symbol.for("react.suspense"),x=Symbol.for("react.memo"),N=Symbol.for("react.lazy"),b=Symbol.for("react.activity"),C=Symbol.iterator;function g(w){return w===null||typeof w!="object"?null:(w=C&&w[C]||w["@@iterator"],typeof w=="function"?w:null)}var O={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},E=Object.assign,_={};function k(w,V,M){this.props=w,this.context=V,this.refs=_,this.updater=M||O}k.prototype.isReactComponent={},k.prototype.setState=function(w,V){if(typeof w!="object"&&typeof w!="function"&&w!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,w,V,"setState")},k.prototype.forceUpdate=function(w){this.updater.enqueueForceUpdate(this,w,"forceUpdate")};function R(){}R.prototype=k.prototype;function D(w,V,M){this.props=w,this.context=V,this.refs=_,this.updater=M||O}var te=D.prototype=new R;te.constructor=D,E(te,k.prototype),te.isPureReactComponent=!0;var W=Array.isArray;function $(){}var H={H:null,A:null,T:null,S:null},J=Object.prototype.hasOwnProperty;function Y(w,V,M){var X=M.ref;return{$$typeof:r,type:w,key:V,ref:X!==void 0?X:null,props:M}}function G(w,V){return Y(w.type,V,w.props)}function U(w){return typeof w=="object"&&w!==null&&w.$$typeof===r}function q(w){var V={"=":"=0",":":"=2"};return"$"+w.replace(/[=:]/g,function(M){return V[M]})}var P=/\/+/g;function pe(w,V){return typeof w=="object"&&w!==null&&w.key!=null?q(""+w.key):V.toString(36)}function B(w){switch(w.status){case"fulfilled":return w.value;case"rejected":throw w.reason;default:switch(typeof w.status=="string"?w.then($,$):(w.status="pending",w.then(function(V){w.status==="pending"&&(w.status="fulfilled",w.value=V)},function(V){w.status==="pending"&&(w.status="rejected",w.reason=V)})),w.status){case"fulfilled":return w.value;case"rejected":throw w.reason}}throw w}function z(w,V,M,X,le){var xe=typeof w;(xe==="undefined"||xe==="boolean")&&(w=null);var ge=!1;if(w===null)ge=!0;else switch(xe){case"bigint":case"string":case"number":ge=!0;break;case"object":switch(w.$$typeof){case r:case o:ge=!0;break;case N:return ge=w._init,z(ge(w._payload),V,M,X,le)}}if(ge)return le=le(w),ge=X===""?"."+pe(w,0):X,W(le)?(M="",ge!=null&&(M=ge.replace(P,"$&/")+"/"),z(le,V,M,"",function(Ee){return Ee})):le!=null&&(U(le)&&(le=G(le,M+(le.key==null||w&&w.key===le.key?"":(""+le.key).replace(P,"$&/")+"/")+ge)),V.push(le)),1;ge=0;var je=X===""?".":X+":";if(W(w))for(var Ne=0;Ne<w.length;Ne++)X=w[Ne],xe=je+pe(X,Ne),ge+=z(X,V,M,xe,le);else if(Ne=g(w),typeof Ne=="function")for(w=Ne.call(w),Ne=0;!(X=w.next()).done;)X=X.value,xe=je+pe(X,Ne++),ge+=z(X,V,M,xe,le);else if(xe==="object"){if(typeof w.then=="function")return z(B(w),V,M,X,le);throw V=String(w),Error("Objects are not valid as a React child (found: "+(V==="[object Object]"?"object with keys {"+Object.keys(w).join(", ")+"}":V)+"). If you meant to render a collection of children, use an array instead.")}return ge}function v(w,V,M){if(w==null)return w;var X=[],le=0;return z(w,X,"","",function(xe){return V.call(M,xe,le++)}),X}function T(w){if(w._status===-1){var V=w._result;V=V(),V.then(function(M){(w._status===0||w._status===-1)&&(w._status=1,w._result=M)},function(M){(w._status===0||w._status===-1)&&(w._status=2,w._result=M)}),w._status===-1&&(w._status=0,w._result=V)}if(w._status===1)return w._result.default;throw w._result}var A=typeof reportError=="function"?reportError:function(w){if(typeof window=="object"&&typeof window.ErrorEvent=="function"){var V=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:typeof w=="object"&&w!==null&&typeof w.message=="string"?String(w.message):String(w),error:w});if(!window.dispatchEvent(V))return}else if(typeof process=="object"&&typeof process.emit=="function"){process.emit("uncaughtException",w);return}console.error(w)},K={map:v,forEach:function(w,V,M){v(w,function(){V.apply(this,arguments)},M)},count:function(w){var V=0;return v(w,function(){V++}),V},toArray:function(w){return v(w,function(V){return V})||[]},only:function(w){if(!U(w))throw Error("React.Children.only expected to receive a single React element child.");return w}};return Ve.Activity=b,Ve.Children=K,Ve.Component=k,Ve.Fragment=d,Ve.Profiler=h,Ve.PureComponent=
vendor: 14,859 bytes, lines 2021-2045
2021D,Ve.StrictMode=c,Ve.Suspense=f,Ve.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=H,Ve.__COMPILER_RUNTIME={__proto__:null,c:function(w){return H.H.useMemoCache(w)}},Ve.cache=function(w){return function(){return w.apply(null,arguments)}},Ve.cacheSignal=function(){return null},Ve.cloneElement=function(w,V,M){if(w==null)throw Error("The argument must be a React element, but you passed "+w+".");var X=E({},w.props),le=w.key;if(V!=null)for(xe in V.key!==void 0&&(le=""+V.key),V)!J.call(V,xe)||xe==="key"||xe==="__self"||xe==="__source"||xe==="ref"&&V.ref===void 0||(X[xe]=V[xe]);var xe=arguments.length-2;if(xe===1)X.children=M;else if(1<xe){for(var ge=Array(xe),je=0;je<xe;je++)ge[je]=arguments[je+2];X.children=ge}return Y(w.type,le,X)},Ve.createContext=function(w){return w={$$typeof:y,_currentValue:w,_currentValue2:w,_threadCount:0,Provider:null,Consumer:null},w.Provider=w,w.Consumer={$$typeof:m,_context:w},w},Ve.createElement=function(w,V,M){var X,le={},xe=null;if(V!=null)for(X in V.key!==void 0&&(xe=""+V.key),V)J.call(V,X)&&X!=="key"&&X!=="__self"&&X!=="__source"&&(le[X]=V[X]);var ge=arguments.length-2;if(ge===1)le.children=M;else if(1<ge){for(var je=Array(ge),Ne=0;Ne<ge;Ne++)je[Ne]=arguments[Ne+2];le.children=je}if(w&&w.defaultProps)for(X in ge=w.defaultProps,ge)le[X]===void 0&&(le[X]=ge[X]);return Y(w,xe,le)},Ve.createRef=function(){return{current:null}},Ve.forwardRef=function(w){return{$$typeof:u,render:w}},Ve.isValidElement=U,Ve.lazy=function(w){return{$$typeof:N,_payload:{_status:-1,_result:w},_init:T}},Ve.memo=function(w,V){return{$$typeof:x,type:w,compare:V===void 0?null:V}},Ve.startTransition=function(w){var V=H.T,M={};H.T=M;try{var X=w(),le=H.S;le!==null&&le(M,X),typeof X=="object"&&X!==null&&typeof X.then=="function"&&X.then($,A)}catch(xe){A(xe)}finally{V!==null&&M.types!==null&&(V.types=M.types),H.T=V}},Ve.unstable_useCacheRefresh=function(){return H.H.useCacheRefresh()},Ve.use=function(w){return H.H.use(w)},Ve.useActionState=function(w,V,M){return H.H.useActionState(w,V,M)},Ve.useCallback=function(w,V){return H.H.useCallback(w,V)},Ve.useContext=function(w){return H.H.useContext(w)},Ve.useDebugValue=function(){},Ve.useDeferredValue=function(w,V){return H.H.useDeferredValue(w,V)},Ve.useEffect=function(w,V){return H.H.useEffect(w,V)},Ve.useEffectEvent=function(w){return H.H.useEffectEvent(w)},Ve.useId=function(){return H.H.useId()},Ve.useImperativeHandle=function(w,V,M){return H.H.useImperativeHandle(w,V,M)},Ve.useInsertionEffect=function(w,V){return H.H.useInsertionEffect(w,V)},Ve.useLayoutEffect=function(w,V){return H.H.useLayoutEffect(w,V)},Ve.useMemo=function(w,V){return H.H.useMemo(w,V)},Ve.useOptimistic=function(w,V){return H.H.useOptimistic(w,V)},Ve.useReducer=function(w,V,M){return H.H.useReducer(w,V,M)},Ve.useRef=function(w){return H.H.useRef(w)},Ve.useState=function(w){return H.H.useState(w)},Ve.useSyncExternalStore=function(w,V,M){return H.H.useSyncExternalStore(w,V,M)},Ve.useTransition=function(){return H.H.useTransition()},Ve.version="19.2.3",Ve}var ux;function ru(){return ux||(ux=1,Cd.exports=ab()),Cd.exports}var j=ru();const oo=Yx(j);var Td={exports:{}},xn={},_d={exports:{}},Rd={};/**
2022 * @license React
2023 * scheduler.production.js
2024 *
2025 * Copyright (c) Meta Platforms, Inc. and affiliates.
2026 *
2027 * This source code is licensed under the MIT license found in the
2028 * LICENSE file in the root directory of this source tree.
2029 */var mx;function lb(){return mx||(mx=1,(function(r){function o(z,v){var T=z.length;z.push(v);e:for(;0<T;){var A=T-1>>>1,K=z[A];if(0<h(K,v))z[A]=v,z[T]=K,T=A;else break e}}function d(z){return z.length===0?null:z[0]}function c(z){if(z.length===0)return null;var v=z[0],T=z.pop();if(T!==v){z[0]=T;e:for(var A=0,K=z.length,w=K>>>1;A<w;){var V=2*(A+1)-1,M=z[V],X=V+1,le=z[X];if(0>h(M,T))X<K&&0>h(le,M)?(z[A]=le,z[X]=T,A=X):(z[A]=M,z[V]=T,A=V);else if(X<K&&0>h(le,T))z[A]=le,z[X]=T,A=X;else break e}}return v}function h(z,v){var T=z.sortIndex-v.sortIndex;return T!==0?T:z.id-v.id}if(r.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var m=performance;r.unstable_now=function(){return m.now()}}else{var y=Date,u=y.now();r.unstable_now=function(){return y.now()-u}}var f=[],x=[],N=1,b=null,C=3,g=!1,O=!1,E=!1,_=!1,k=typeof setTimeout=="function"?setTimeout:null,R=typeof clearTimeout=="function"?clearTimeout:null,D=typeof setImmediate<"u"?setImmediate:null;function te(z){for(var v=d(x);v!==null;){if(v.callback===null)c(x);else if(v.startTime<=z)c(x),v.sortIndex=v.expirationTime,o(f,v);else break;v=d(x)}}function W(z){if(E=!1,te(z),!O)if(d(f)!==null)O=!0,$||($=!0,q());else{var v=d(x);v!==null&&B(W,v.startTime-z)}}var $=!1,H=-1,J=5,Y=-1;function G(){return _?!0:!(r.unstable_now()-Y<J)}function U(){if(_=!1,$){var z=r.unstable_now();Y=z;var v=!0;try{e:{O=!1,E&&(E=!1,R(H),H=-1),g=!0;var T=C;try{t:{for(te(z),b=d(f);b!==null&&!(b.expirationTime>z&&G());){var A=b.callback;if(typeof A=="function"){b.callback=null,C=b.priorityLevel;var K=A(b.expirationTime<=z);if(z=r.unstable_now(),typeof K=="function"){b.callback=K,te(z),v=!0;break t}b===d(f)&&c(f),te(z)}else c(f);b=d(f)}if(b!==null)v=!0;else{var w=d(x);w!==null&&B(W,w.startTime-z),v=!1}}break e}finally{b=null,C=T,g=!1}v=void 0}}finally{v?q():$=!1}}}var q;if(typeof D=="function")q=function(){D(U)};else if(typeof MessageChannel<"u"){var P=new MessageChannel,pe=P.port2;P.port1.onmessage=U,q=function(){pe.postMessage(null)}}else q=function(){k(U,0)};function B(z,v){H=k(function(){z(r.unstable_now())},v)}r.unstable_IdlePriority=5,r.unstable_ImmediatePriority=1,r.unstable_LowPriority=4,r.unstable_NormalPriority=3,r.unstable_Profiling=null,r.unstable_UserBlockingPriority=2,r.unstable_cancelCallback=function(z){z.callback=null},r.unstable_forceFrameRate=function(z){0>z||125<z?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):J=0<z?Math.floor(1e3/z):5},r.unstable_getCurrentPriorityLevel=function(){return C},r.unstable_next=function(z){switch(C){case 1:case 2:case 3:var v=3;break;default:v=C}var T=C;C=v;try{return z()}finally{C=T}},r.unstable_requestPaint=function(){_=!0},r.unstable_runWithPriority=function(z,v){switch(z){case 1:case 2:case 3:case 4:case 5:break;default:z=3}var T=C;C=z;try{return v()}finally{C=T}},r.unstable_scheduleCallback=function(z,v,T){var A=r.unstable_now();switch(typeof T=="object"&&T!==null?(T=T.delay,T=typeof T=="number"&&0<T?A+T:A):T=A,z){case 1:var K=-1;break;case 2:K=250;break;case 5:K=1073741823;break;case 4:K=1e4;break;default:K=5e3}return K=T+K,z={id:N++,callback:v,priorityLevel:z,startTime:T,expirationTime:K,sortIndex:-1},T>A?(z.sortIndex=T,o(x,z),d(f)===null&&z===d(x)&&(E?(R(H),H=-1):E=!0,B(W,T-A))):(z.sortIndex=K,o(f,z),O||g||(O=!0,$||($=!0,q()))),z},r.unstable_shouldYield=G,r.unstable_wrapCallback=function(z){var v=C;return function(){var T=C;C=v;try{return z.apply(this,arguments)}finally{C=T}}}})(Rd)),Rd}var hx;function sb(){return hx||(hx=1,_d.exports=lb()),_d.exports}var Md={exports:{}},Wt={};/**
2030 * @license React
2031 * react-dom.production.js
2032 *
2033 * Copyright (c) Meta Platforms, Inc. and affiliates.
2034 *
2035 * This source code is licensed under the MIT license found in the
2036 * LICENSE file in the root directory of this source tree.
2037 */var xx;function rb(){if(xx)return Wt;xx=1;var r=ru();function o(f){var x="https://react.dev/errors/"+f;if(1<arguments.length){x+="?args[]="+encodeURIComponent(arguments[1]);for(var N=2;N<arguments.length;N++)x+="&args[]="+encodeURIComponent(arguments[N])}return"Minified React error #"+f+"; visit "+x+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}function d(){}var c={d:{f:d,r:function(){throw Error(o(522))},D:d,C:d,L:d,m:d,X:d,S:d,M:d},p:0,findDOMNode:null},h=Symbol.for("react.portal");function m(f,x,N){var b=3<arguments.length&&arguments[3]!==void 0?arguments[3]:null;return{$$typeof:h,key:b==null?null:""+b,children:f,containerInfo:x,implementation:N}}var y=r.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;function u(f,x){if(f==="font")return"";if(typeof x=="string")return x==="use-credentials"?x:""}return Wt.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=c,Wt.createPortal=function(f,x){var N=2<arguments.length&&arguments[2]!==void 0?arguments[2]:null;if(!x||x.nodeType!==1&&x.nodeType!==9&&x.nodeType!==11)throw Error(o(299));return m(f,x,null,N)},Wt.flushSync=function(f){var x=y.T,N=c.p;try{if(y.T=null,c.p=2,f)return f()}finally{y.T=x,c.p=N,c.d.f()}},Wt.preconnect=function(f,x){typeof f=="string"&&(x?(x=x.crossOrigin,x=typeof x=="string"?x==="use-credentials"?x:"":void 0):x=null,c.d.C(f,x))},Wt.prefetchDNS=function(f){typeof f=="string"&&c.d.D(f)},Wt.preinit=function(f,x){if(typeof f=="string"&&x&&typeof x.as=="string"){var N=x.as,b=u(N,x.crossOrigin),C=typeof x.integrity=="string"?x.integrity:void 0,g=typeof x.fetchPriority=="string"?x.fetchPriority:void 0;N==="style"?c.d.S(f,typeof x.precedence=="string"?x.precedence:void 0,{crossOrigin:b,integrity:C,fetchPriority:g}):N==="script"&&c.d.X(f,{crossOrigin:b,integrity:C,fetchPriority:g,nonce:typeof x.nonce=="string"?x.nonce:void 0})}},Wt.preinitModule=function(f,x){if(typeof f=="string")if(typeof x=="object"&&x!==null){if(x.as==null||x.as==="script"){var N=u(x.as,x.crossOrigin);c.d.M(f,{crossOrigin:N,integrity:typeof x.integrity=="string"?x.integrity:void 0,nonce:typeof x.nonce=="string"?x.nonce:void 0})}}else x==null&&c.d.M(f)},Wt.preload=function(f,x){if(typeof f=="string"&&typeof x=="object"&&x!==null&&typeof x.as=="string"){var N=x.as,b=u(N,x.crossOrigin);c.d.L(f,N,{crossOrigin:b,integrity:typeof x.integrity=="string"?x.integrity:void 0,nonce:typeof x.nonce=="string"?x.nonce:void 0,type:typeof x.type=="string"?x.type:void 0,fetchPriority:typeof x.fetchPriority=="string"?x.fetchPriority:void 0,referrerPolicy:typeof x.referrerPolicy=="string"?x.referrerPolicy:void 0,imageSrcSet:typeof x.imageSrcSet=="string"?x.imageSrcSet:void 0,imageSizes:typeof x.imageSizes=="string"?x.imageSizes:void 0,media:typeof x.media=="string"?x.media:void 0})}},Wt.preloadModule=function(f,x){if(typeof f=="string")if(x){var N=u(x.as,x.crossOrigin);c.d.m(f,{as:typeof x.as=="string"&&x.as!=="script"?x.as:void 0,crossOrigin:N,integrity:typeof x.integrity=="string"?x.integrity:void 0})}else c.d.m(f)},Wt.requestFormReset=function(f){c.d.r(f)},Wt.unstable_batchedUpdates=function(f,x){return f(x)},Wt.useFormState=function(f,x,N){return y.H.useFormState(f,x,N)},Wt.useFormStatus=function(){return y.H.useHostTransitionStatus()},Wt.version="19.2.3",Wt}var px;function nb(){if(px)return Md.exports;px=1;function r(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(r)}catch(o){console.error(o)}}return r(),Md.exports=rb(),Md.exports}/**
2038 * @license React
2039 * react-dom-client.production.js
2040 *
2041 * Copyright (c) Meta Platforms, Inc. and affiliates.
2042 *
2043 * This source code is licensed under the MIT license found in the
2044 * LICENSE file in the root directory of this source tree.
2045 */var fx;function ib(){if(fx)return xn;fx=1;var r=sb(),o=ru(),d=nb();function c(e){var a="https://react.dev/errors/"+e;if(1<arguments.length){a+="?args[]="+encodeURIComponent(arguments[1]);for(var l=2;l<arguments.length;l++)a+="&args[]="+encodeURIComponent(arguments[l])}return"Minified React error #"+e+"; visit "+a+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}function h(e){return!(!e||e.nodeType!==1&&e.nodeType!==9&&e.nodeType!==11)}function m(e){var a=e,l=e;if(e.alternate)for(;a.return;)a=a.return;else{e=a;do a=e,(a.flags&4098)!==0&&(l=a.return),e=a.return;while(e)}return a.tag===3?l:null}function y(e){if(e.tag===13){var a=e.memoizedState;if(a===null&&(e=e.alternate,e!==null&&(a=e.memoizedState)),a!==null)return a.dehydrated}return null}function u(e){if(e.tag===31){var a=e.memoizedState;if(a===null&&(e=e.alternate,e!==null&&(a=e.memoizedState)),a!==null)return a.dehydrated}return null}function f(e){if(m(e)!==e)throw Error(c(188))}function x(e){var a=e.alternate;if(!a){if(a=m(e),a===null)throw Error(c(188));return a!==e?null:e}for(var l=e,s=a;;){var n=l.return;if(n===null)break;var i=n.alternate;if(i===null){if(s=n.return,s!==null){l=s;continue}break}if(n.child===i.child){for(i=n.child;i;){if(i===l)return f(n),e;if(i===s)return f(n),a;i=i.sibling}throw Error(c(188))}if(l.return!==s.return)l=n,s=i;else{for(var p=!1,S=n.child;S;){if(S===l){p=!0,l=n,s=i;break}if(S===s){p=!0,s=n,l=i;break}S=S.sibling}if(!p){for(S=i.child;S;){if(S===l){p=!0,l=i,s=n;break}if(S===s){p=!0,s=i,l=n;break}S=S.sibling}if(!p)throw Error(c(189))}}if(l.alternate!==s)throw Error(c(190))}if(l.tag!==3)throw Error(c(188));return l.stateNode.current===l?e:a}function N(e){var a=e.tag;if(a===5||a===26||a===27||a===6)return e;for(e=e.child;e!==null;){if(a=N(e),a!==null)return a;e=e.sibling}return null}var b=Object.assign,C=Symbol.for("react.element"),g=Symbol.for("react.transitional.element"),O=Symbol.for("react.portal"),E=Symbol.for("react.fragment"),_=Symbol.for("react.strict_mode"),k=Symbol.for("react.profiler"),R=Symbol.for("react.consumer"),D=Symbol.for("react.context"),te=Symbol.for("react.forward_ref"),W=Symbol.for("react.suspense"),$=Symbol.for("react.suspense_list"),H=Symbol.for("react.memo"),J=Symbol.for("react.lazy"),Y=Symbol.for("react.activity"),G=Symbol.for("react.memo_cache_sentinel"),U=Symbol.iterator;function q(e){return e===null||typeof e!="object"?null:(e=U&&e[U]||e["@@iterator"],typeof e=="function"?e:null)}var P=Symbol.for("react.client.reference");function pe(e){if(e==null)return null;if(typeof e=="function")return e.$$typeof===P?null:e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case E:return"Fragment";case k:return"Profiler";case _:return"StrictMode";case W:return"Suspense";case $:return"SuspenseList";case Y:return"Activity"}if(typeof e=="object")switch(e.$$typeof){case O:return"Portal";case D:return e.displayName||"Context";case R:return(e._context.displayName||"Context")+".Consumer";case te:var a=e.render;return e=e.displayName,e||(e=a.displayName||a.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case H:return a=e.displayName||null,a!==null?a:pe(e.type)||"Memo";case J:a=e._payload,e=e._init;try{return pe(e(a))}catch{}}return null}var B=Array.isArray,z=o.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,v=d.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,T={pending:!1,data:null,method:null,action:null},A=[],K=-1;function w(e){return{current:e}}function V(e){0>K||(e.current=A[K],A[K]=null,K--)}function M(e,a){K++,A[K]=e.current,e.current=a}var X=w(null),le=w(null),xe=w(null),ge=w(null);function je(e,a){switch(M(xe,a),M(le,e),M(X,null),a.nodeType){case 9:case 11:e=(e
vendor: 10,057 bytes, lines 2045-2052
2045=a.documentElement)&&(e=e.namespaceURI)?Rh(e):0;break;default:if(e=a.tagName,a=a.namespaceURI)a=Rh(a),e=Mh(a,e);else switch(e){case"svg":e=1;break;case"math":e=2;break;default:e=0}}V(X),M(X,e)}function Ne(){V(X),V(le),V(xe)}function Ee(e){e.memoizedState!==null&&M(ge,e);var a=X.current,l=Mh(a,e.type);a!==l&&(M(le,e),M(X,l))}function Ge(e){le.current===e&&(V(X),V(le)),ge.current===e&&(V(ge),cn._currentValue=T)}var it,Ua;function ce(e){if(it===void 0)try{throw Error()}catch(l){var a=l.stack.trim().match(/\n( *(at )?)/);it=a&&a[1]||"",Ua=-1<l.stack.indexOf(`
2046    at`)?" (<anonymous>)":-1<l.stack.indexOf("@")?"@unknown:0:0":""}return`
2047`+it+e+Ua}var ve=!1;function be(e,a){if(!e||ve)return"";ve=!0;var l=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{var s={DetermineComponentFrameRoot:function(){try{if(a){var he=function(){throw Error()};if(Object.defineProperty(he.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(he,[])}catch(re){var ae=re}Reflect.construct(e,[],he)}else{try{he.call()}catch(re){ae=re}e.call(he.prototype)}}else{try{throw Error()}catch(re){ae=re}(he=e())&&typeof he.catch=="function"&&he.catch(function(){})}}catch(re){if(re&&ae&&typeof re.stack=="string")return[re.stack,ae.stack]}return[null,null]}};s.DetermineComponentFrameRoot.displayName="DetermineComponentFrameRoot";var n=Object.getOwnPropertyDescriptor(s.DetermineComponentFrameRoot,"name");n&&n.configurable&&Object.defineProperty(s.DetermineComponentFrameRoot,"name",{value:"DetermineComponentFrameRoot"});var i=s.DetermineComponentFrameRoot(),p=i[0],S=i[1];if(p&&S){var L=p.split(`
2048`),ee=S.split(`
2049`);for(n=s=0;s<L.length&&!L[s].includes("DetermineComponentFrameRoot");)s++;for(;n<ee.length&&!ee[n].includes("DetermineComponentFrameRoot");)n++;if(s===L.length||n===ee.length)for(s=L.length-1,n=ee.length-1;1<=s&&0<=n&&L[s]!==ee[n];)n--;for(;1<=s&&0<=n;s--,n--)if(L[s]!==ee[n]){if(s!==1||n!==1)do if(s--,n--,0>n||L[s]!==ee[n]){var ne=`
2050`+L[s].replace(" at new "," at ");return e.displayName&&ne.includes("<anonymous>")&&(ne=ne.replace("<anonymous>",e.displayName)),ne}while(1<=s&&0<=n);break}}}finally{ve=!1,Error.prepareStackTrace=l}return(l=e?e.displayName||e.name:"")?ce(l):""}function Oe(e,a){switch(e.tag){case 26:case 27:case 5:return ce(e.type);case 16:return ce("Lazy");case 13:return e.child!==a&&a!==null?ce("Suspense Fallback"):ce("Suspense");case 19:return ce("SuspenseList");case 0:case 15:return be(e.type,!1);case 11:return be(e.type.render,!1);case 1:return be(e.type,!0);case 31:return ce("Activity");default:return""}}function Je(e){try{var a="",l=null;do a+=Oe(e,l),l=e,e=e.return;while(e);return a}catch(s){return`
2051Error generating stack: `+s.message+`
2052`+s.stack}}var gt=Object.prototype.hasOwnProperty,Fe=r.unstable_scheduleCallback,Ht=r.unstable_cancelCallback,Xt=r.unstable_shouldYield,Pe=r.unstable_requestPaint,se=r.unstable_now,ye=r.unstable_getCurrentPriorityLevel,De=r.unstable_ImmediatePriority,et=r.unstable_UserBlockingPriority,Me=r.unstable_NormalPriority,tt=r.unstable_LowPriority,st=r.unstable_IdlePriority,$t=r.log,Kt=r.unstable_setDisableYieldValue,He=null,dt=null;function Lt(e){if(typeof $t=="function"&&Kt(e),dt&&typeof dt.setStrictMode=="function")try{dt.setStrictMode(He,e)}catch{}}var bt=Math.clz32?Math.clz32:ke,vl=Math.log,Ta=Math.LN2;function ke(e){return e>>>=0,e===0?32:31-(vl(e)/Ta|0)|0}var ie=256,We=262144,Re=4194304;function Xe(e){var a=e&42;if(a!==0)return a;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&261888;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function Ie(e,a,l){var s=e.pendingLanes;if(s===0)return 0;var n=0,i=e.suspendedLanes,p=e.pingedLanes;e=e.warmLanes;var S=s&134217727;return S!==0?(s=S&~i,s!==0?n=Xe(s):(p&=S,p!==0?n=Xe(p):l||(l=S&~e,l!==0&&(n=Xe(l))))):(S=s&~i,S!==0?n=Xe(S):p!==0?n=Xe(p):l||(l=s&~e,l!==0&&(n=Xe(l)))),n===0?0:a!==0&&a!==n&&(a&i)===0&&(i=n&-n,l=a&-a,i>=l||i===32&&(l&4194048)!==0)?a:n}function Be(e,a){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&a)===0}function Ot(e,a){switch(e){case 1:case 2:case 4:case 8:case 64:return a+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return a+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Ze(){var e=Re;return Re<<=1,(Re&62914560)===0&&(Re=4194304),e}function _a(e){for(var a=[],l=0;31>l;l++)a.push(e);return a}function Ra(e,a){e.pendingLanes|=a,a!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function es(e,a,l,s,n,i){var p=e.pendingLanes;e.pendingLanes=l,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=l,e.entangledLanes&=l,e.errorRecoveryDisabledLanes&=l,e.shellSuspendCounter=0;var S=e.entanglements,L=e.expirationTimes,ee=e.hiddenUpdates;for(l=p&~l;0<l;){var ne=31-bt(l),he=1<<ne;S[ne]=0,L[ne]=-1;var ae=ee[ne];if(ae!==null)for(ee[ne]=null,ne=0;ne<ae.length;ne++){var re=ae[ne];re!==null&&(re.lane&=-536870913)}l&=~he}s!==0&&wl(e,s,0),i!==0&&n===0&&e.tag!==0&&(e.suspendedLanes|=i&~(p&~a))}function wl(e,a,l){e.pendingLanes|=a,e.suspendedLanes&=~a;var s=31-bt(a);e.entangledLanes|=a,e.entanglements[s]=e.entanglements[s]|1073741824|l&261930}function jl(e,a){var l=e.entangledLanes|=a;for(e=e.entanglements;l;){var s=31-bt(l),n=1<<s;n&a|e[s]&a&&(e[s]|=a),l&=~n}}function Nl(e,a){var l=a&-a;return l=(l&42)!==0?1:Z(l),(l&(e.suspendedLanes|a))!==0?0:l}function Z(e){switch(e){case 2:e=1;break;case 8:e=4;break;case 32:e=16;break;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:e=128;break;case 268435456:e=134217728;break;default:e=0}return e}function me(e){return e&=-e,2<e?8<e?(e&134217727)!==0?32:268435456:8:2}function fe(){var e=v.p;return e!==0?e:(e=window.event,e===void 0?32:tx(e.type))}function Ae(e,a){var l=v.p;try{return v.p=e,a()}finally{v.p=l}}var yt=Math.random().toString(36).slice(2),Nt="__reactFiber$"+yt,Tt="__reactProps$"+yt,Ma="__reactContainer$"+yt,Ss="__reactEvents$"+yt,Rn="__reactListeners$"+yt,Gp="__reactHandles$"+yt,bu="__reactResources$"+yt,Nr="__reactMarker$"+yt;function yo(e){delete e[Nt],delete e[Tt],delete e[Ss],delete e[Rn],delete e[Gp]}function Os(e){var a=e[Nt];if(a)return a;for(var l=e.parentNode;l;){if(a=l[Ma]||l[Nt]){if(l=a.alternate,a.child!==null||l!==null&&l.child!==null)for(e=Uh(e);e!==null;){if(l=e[Nt])return l;e=Uh(e)}return a}e=l,l=e.parentNode}return null}function Es(e){if(e=e[Nt]||e[Ma]){var a=e.tag;if(a===5||a===6||a===13||a===31||a===26||a===27||a===3)return e}return null}function kr(e){var a=e.tag;if(a===5||a===26||a===27||a===6)return e.stateNode;throw Error(c(33))}function Cs(e){var a=e[bu];return a||(a=e[bu]={hoistableStyles:new Map,hoistableScripts:new Map}),a}function It(e){e[Nr]=!0}var yu=new Set,vu={};function ts(e,a){Ts(e,a),Ts(e+"Capture",a)}function Ts(e,a){for(vu[e]=a,e=0;e<a.length;e++)yu.add(a[e])}var $p=RegExp("^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"),wu={},ju={};function Kp(e){return gt.call(ju,e)?!0:gt.call(wu,e)?!1:$p.test(e)?ju[e]=!0:(wu[e]=!0,!1)}function Mn(e,a,l){if(Kp(a))if(l===null)e.removeAttribute(a);else{switch(typeof l){case"undefined":case"function":case"symbol":e.removeAttribute(a);return;case"boolean":var s=a.toLowerCase().slice(0,5);if(s!=="data-"&&s!=="aria-"){e.removeAttribute(a);return}}e.setAttribute(a,""+l)}}function An(e,a,l){if(l===null)e.removeAttribute(a);else{switch(typeof l){case"undefined":case"function":case"symbol":case"boolean":e.removeAttribute(a);return}e.setAttribute(a,""+l)}}function Qa(e,a,l,s){if(s===null)e.removeAttribute(l);else{switch(typeof s){case"undefined":case"function":case"symbol":case"boolean":e.removeAttribute(l);return}e.setAttributeNS(a,l,""+s)}}function fa(e){switch(typeof e){case"bigint":case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function Nu(e){var a=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(a==="checkbox"||a==="radio")}function qp(e,a,l){var s=Object.getOwnPropertyDescriptor(e.constructor.prototype,a);if(!e.hasOwnProperty(a)&&typeof s<"u"&&typeof s.get=="function"&&typeof s.set=="function"){var n=s.get,i=s.set;return Object.defineProperty(e,a,{configurable:!0,get:function(){return n.call(this)},set:function(p){l=""+p,i.call(this,p)}}),Object.defineProperty(e,a,{enumerable:s.enumerable}),{getValue:function(){return l},setValue:function(p){l=""+p},stopTracking:function(){e._valueTracker=null,delete e[a]}}}}function vo(e){if(!e._valueTracker){var a=Nu(e)?"checked":"value";e._valueTracker=qp(e,a,""+e[a])}}function ku(e){if(!e)return!1;var a=e._valueTracker;if(!a)return!0;var l=a.getValue(),s="";return e&&(s=Nu(e)?e.checked?"true":"false":e.value),e=s,e!==l?(a.setValue(e),!0):!1}function Dn(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}var Yp=/[\n"\\]/g;function ga(e){return e.replace(Yp,function(a){return"\\"+a.charCo
vendor: 4,417 bytes, line 2052
2052deAt(0).toString(16)+" "})}function wo(e,a,l,s,n,i,p,S){e.name="",p!=null&&typeof p!="function"&&typeof p!="symbol"&&typeof p!="boolean"?e.type=p:e.removeAttribute("type"),a!=null?p==="number"?(a===0&&e.value===""||e.value!=a)&&(e.value=""+fa(a)):e.value!==""+fa(a)&&(e.value=""+fa(a)):p!=="submit"&&p!=="reset"||e.removeAttribute("value"),a!=null?jo(e,p,fa(a)):l!=null?jo(e,p,fa(l)):s!=null&&e.removeAttribute("value"),n==null&&i!=null&&(e.defaultChecked=!!i),n!=null&&(e.checked=n&&typeof n!="function"&&typeof n!="symbol"),S!=null&&typeof S!="function"&&typeof S!="symbol"&&typeof S!="boolean"?e.name=""+fa(S):e.removeAttribute("name")}function Su(e,a,l,s,n,i,p,S){if(i!=null&&typeof i!="function"&&typeof i!="symbol"&&typeof i!="boolean"&&(e.type=i),a!=null||l!=null){if(!(i!=="submit"&&i!=="reset"||a!=null)){vo(e);return}l=l!=null?""+fa(l):"",a=a!=null?""+fa(a):l,S||a===e.value||(e.value=a),e.defaultValue=a}s=s??n,s=typeof s!="function"&&typeof s!="symbol"&&!!s,e.checked=S?e.checked:!!s,e.defaultChecked=!!s,p!=null&&typeof p!="function"&&typeof p!="symbol"&&typeof p!="boolean"&&(e.name=p),vo(e)}function jo(e,a,l){a==="number"&&Dn(e.ownerDocument)===e||e.defaultValue===""+l||(e.defaultValue=""+l)}function _s(e,a,l,s){if(e=e.options,a){a={};for(var n=0;n<l.length;n++)a["$"+l[n]]=!0;for(l=0;l<e.length;l++)n=a.hasOwnProperty("$"+e[l].value),e[l].selected!==n&&(e[l].selected=n),n&&s&&(e[l].defaultSelected=!0)}else{for(l=""+fa(l),a=null,n=0;n<e.length;n++){if(e[n].value===l){e[n].selected=!0,s&&(e[n].defaultSelected=!0);return}a!==null||e[n].disabled||(a=e[n])}a!==null&&(a.selected=!0)}}function Ou(e,a,l){if(a!=null&&(a=""+fa(a),a!==e.value&&(e.value=a),l==null)){e.defaultValue!==a&&(e.defaultValue=a);return}e.defaultValue=l!=null?""+fa(l):""}function Eu(e,a,l,s){if(a==null){if(s!=null){if(l!=null)throw Error(c(92));if(B(s)){if(1<s.length)throw Error(c(93));s=s[0]}l=s}l==null&&(l=""),a=l}l=fa(a),e.defaultValue=l,s=e.textContent,s===l&&s!==""&&s!==null&&(e.value=s),vo(e)}function Rs(e,a){if(a){var l=e.firstChild;if(l&&l===e.lastChild&&l.nodeType===3){l.nodeValue=a;return}}e.textContent=a}var Pp=new Set("animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp".split(" "));function Cu(e,a,l){var s=a.indexOf("--")===0;l==null||typeof l=="boolean"||l===""?s?e.setProperty(a,""):a==="float"?e.cssFloat="":e[a]="":s?e.setProperty(a,l):typeof l!="number"||l===0||Pp.has(a)?a==="float"?e.cssFloat=l:e[a]=(""+l).trim():e[a]=l+"px"}function Tu(e,a,l){if(a!=null&&typeof a!="object")throw Error(c(62));if(e=e.style,l!=null){for(var s in l)!l.hasOwnProperty(s)||a!=null&&a.hasOwnProperty(s)||(s.indexOf("--")===0?e.setProperty(s,""):s==="float"?e.cssFloat="":e[s]="");for(var n in a)s=a[n],a.hasOwnProperty(n)&&l[n]!==s&&Cu(e,n,s)}else for(var i in a)a.hasOwnProperty(i)&&Cu(e,i,a[i])}function No(e){if(e.indexOf("-")===-1)return!1;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var Zp=new Map([["acceptCharset","accept-charset"],["htmlFor","for"],["httpEquiv","http-equiv"],["crossOrigin","crossorigin"],["accentHeight","accent-height"],["alignmentBaseline","alignment-baseline"],["arabicForm","arabic-form"],["baselineShift","baseline-shift"],["capHeight","cap-height"],["clipPath","clip-path"],["clipRule","clip-rule"],["colorInterpolation","color-interpolation"],["colorInterpolationFilters","color-interpolation-filters"],["colorProfile","color-profile"],["colorRen
2052dering","color-rendering"],["dominantBaseline","dominant-baseline"],["enableBackground","enable-background"],["fillOpacity","fill-opacity"],["fillRule","fill-rule"],["floodColor","flood-color"],["floodOpacity","flood-opacity"],["fontFamily","font-family"],["fontSize","font-size"],["fontSizeAdjust","font-size-adjust"],["fontStretch","font-stretch"],["fontStyle","font-style"],["fontVariant","font-variant"],["fontWeight","font-weight"],["glyphName","glyph-name"],["glyphOrientationHorizontal","glyph-orientation-horizontal"],["glyphOrientationVertical","glyph-orientation-vertical"],["horizAdvX","horiz-adv-x"],["horizOriginX","horiz-origin-x"],["imageRendering","image-rendering"],["letterSpacing","letter-spacing"],["lightingColor","lighting-color"],["markerEnd","marker-end"],["markerMid","marker-mid"],["markerStart","marker-start"],["overlinePosition","overline-position"],["overlineThickness","overline-thickness"],["paintOrder","paint-order"],["panose-1","panose-1"],["pointerEvents","pointer-events"],["renderingIntent","rendering-intent"],["shapeRendering","shape-rendering"],["stopColor","stop-color"],["stopOpacity","stop-opacity"],["strikethroughPosition","strikethrough-position"],["strikethroughThickness","strikethrough-thickness"],["strokeDasharray","stroke-dasharray"],["strokeDashoffset","stroke-dashoffset"],["strokeLinecap","stroke-linecap"],["strokeLinejoin","stroke-linejoin"],["strokeMiterlimit","stroke-miterlimit"],["strokeOpacity","stroke-opacity"],["strokeWidth","stroke-width"],["textAnchor","text-anchor"],["textDecoration","text-decoration"],["textRendering","text-rendering"],["transformOrigin","transform-origin"],["underlinePosition","underline-position"],["underlineThickness","underline-thickness"],["unicodeBidi","unicode-bidi"],["unicodeRange","unicode-range"],["unitsPerEm","units-per-em"],["vAlphabetic","v-alphabetic"],["vHanging","v-hanging"],["vIdeographic","v-ideographic"],["vMathematical","v-mathematical"],["vectorEffect","vector-effect"],["vertAdvY","vert-adv-y"],["vertOriginX","vert-origin-x"],["vertOriginY","vert-origin-y"],["wordSpacing","word-spacing"],["writingMode","writing-mode"],["xmlnsXlink","xmlns:xlink"],["xHeight","x-height"]]),Qp=/^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*:/i;function zn(e){return Qp.test(""+e)?"javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')":e}function Ja(){}var ko=null;function So(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var Ms=null,As=null;function _u(e){var a=Es(e);
vendor: 9,968 bytes, line 2052
2052if(a&&(e=a.stateNode)){var l=e[Tt]||null;e:switch(e=a.stateNode,a.type){case"input":if(wo(e,l.value,l.defaultValue,l.defaultValue,l.checked,l.defaultChecked,l.type,l.name),a=l.name,l.type==="radio"&&a!=null){for(l=e;l.parentNode;)l=l.parentNode;for(l=l.querySelectorAll('input[name="'+ga(""+a)+'"][type="radio"]'),a=0;a<l.length;a++){var s=l[a];if(s!==e&&s.form===e.form){var n=s[Tt]||null;if(!n)throw Error(c(90));wo(s,n.value,n.defaultValue,n.defaultValue,n.checked,n.defaultChecked,n.type,n.name)}}for(a=0;a<l.length;a++)s=l[a],s.form===e.form&&ku(s)}break e;case"textarea":Ou(e,l.value,l.defaultValue);break e;case"select":a=l.value,a!=null&&_s(e,!!l.multiple,a,!1)}}}var Oo=!1;function Ru(e,a,l){if(Oo)return e(a,l);Oo=!0;try{var s=e(a);return s}finally{if(Oo=!1,(Ms!==null||As!==null)&&(ji(),Ms&&(a=Ms,e=As,As=Ms=null,_u(a),e)))for(a=0;a<e.length;a++)_u(e[a])}}function Sr(e,a){var l=e.stateNode;if(l===null)return null;var s=l[Tt]||null;if(s===null)return null;l=s[a];e:switch(a){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(s=!s.disabled)||(e=e.type,s=!(e==="button"||e==="input"||e==="select"||e==="textarea")),e=!s;break e;default:e=!1}if(e)return null;if(l&&typeof l!="function")throw Error(c(231,a,typeof l));return l}var Wa=!(typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Eo=!1;if(Wa)try{var Or={};Object.defineProperty(Or,"passive",{get:function(){Eo=!0}}),window.addEventListener("test",Or,Or),window.removeEventListener("test",Or,Or)}catch{Eo=!1}var kl=null,Co=null,Bn=null;function Mu(){if(Bn)return Bn;var e,a=Co,l=a.length,s,n="value"in kl?kl.value:kl.textContent,i=n.length;for(e=0;e<l&&a[e]===n[e];e++);var p=l-e;for(s=1;s<=p&&a[l-s]===n[i-s];s++);return Bn=n.slice(e,1<s?1-s:void 0)}function Vn(e){var a=e.keyCode;return"charCode"in e?(e=e.charCode,e===0&&a===13&&(e=13)):e=a,e===10&&(e=13),32<=e||e===13?e:0}function Ln(){return!0}function Au(){return!1}function ta(e){function a(l,s,n,i,p){this._reactName=l,this._targetInst=n,this.type=s,this.nativeEvent=i,this.target=p,this.currentTarget=null;for(var S in e)e.hasOwnProperty(S)&&(l=e[S],this[S]=l?l(i):i[S]);return this.isDefaultPrevented=(i.defaultPrevented!=null?i.defaultPrevented:i.returnValue===!1)?Ln:Au,this.isPropagationStopped=Au,this}return b(a.prototype,{preventDefault:function(){this.defaultPrevented=!0;var l=this.nativeEvent;l&&(l.preventDefault?l.preventDefault():typeof l.returnValue!="unknown"&&(l.returnValue=!1),this.isDefaultPrevented=Ln)},stopPropagation:function(){var l=this.nativeEvent;l&&(l.stopPropagation?l.stopPropagation():typeof l.cancelBubble!="unknown"&&(l.cancelBubble=!0),this.isPropagationStopped=Ln)},persist:function(){},isPersistent:Ln}),a}var as={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},Un=ta(as),Er=b({},as,{view:0,detail:0}),Jp=ta(Er),To,_o,Cr,Hn=b({},Er,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:Mo,button:0,buttons:0,relatedTarget:function(e){return e.relatedTarget===void 0?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==Cr&&(Cr&&e.type==="mousemove"?(To=e.screenX-Cr.screenX,_o=e.screenY-Cr.screenY):_o=To=0,Cr=e),To)},movementY:function(e){return"movementY"in e?e.movementY:_o}}),Du=ta(Hn),Wp=b({},Hn,{dataTransfer:0}),Fp=ta(Wp),ef=b({},Er,{relatedTarget:0}),Ro=ta(ef),tf=b({},as,{animationName:0,elapsedTime:0,pseudoElement:0}),af=ta(tf),lf=b({},as,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),sf=ta(lf),rf=b({},as,{data:0}),zu=ta(rf),nf={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},of={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},cf={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function df(e){var a=this.nativeEvent;return a.getModifierState?a.getModifierState(e):(e=cf[e])?!!a[e]:!1}function Mo(){return df}var uf=b({},Er,{key:function(e){if(e.key){var a=nf[e.key]||e.key;if(a!=="Unidentified")return a}return e.type==="keypress"?(e=Vn(e),e===13?"Enter":String.fromCharCode(e)):e.type==="keydown"||e.type==="keyup"?of[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:Mo,charCode:function(e){return e.type==="keypress"?Vn(e):0},keyCode:function(e){return e.type==="keydown"||e.type==="keyup"?e.keyCode:0},which:function(e){return e.type==="keypress"?Vn(e):e.type==="keydown"||e.type==="keyup"?e.keyCode:0}}),mf=ta(uf),hf=b({},Hn,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0}),Bu=ta(hf),xf=b({},Er,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:Mo}),pf=ta(xf),ff=b({},as,{propertyName:0,elapsedTime:0,pseudoElement:0}),gf=ta(ff),bf=b({},Hn,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),yf=ta(bf),vf=b({},as,{newState:0,oldState:0}),wf=ta(vf),jf=[9,13,27,32],Ao=Wa&&"CompositionEvent"in window,Tr=null;Wa&&"documentMode"in document&&(Tr=document.documentMode);var Nf=Wa&&"TextEvent"in window&&!Tr,Vu=Wa&&(!Ao||Tr&&8<Tr&&11>=Tr),Lu=" ",Uu=!1;function Hu(e,a){switch(e){case"keyup":return jf.indexOf(a.keyCode)!==-1;case"keydown":return a.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Xu(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Ds=!1;function kf(e,a){switch(e){case"compositionend":return Xu(a);case"keypress":return a.which!==32?null:(Uu=!0,Lu);case"textInput":return e=a.data,e===Lu&&Uu?null:e;default:return null}}function Sf(e,a){if(Ds)return e==="compositionend"||!Ao&&Hu(e,a)?(e=Mu(),Bn=Co=kl=null,Ds=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(a.ctrlKey||a.altKey||a.metaKey)||a.ctrlKey&&a.altKey){if(a.char&&1<a.char.length)return a.char;if(a.which)return String.fromCharCode(a.which)}return null;case"compositionend":return Vu&&a.locale!=="ko"?null:a.data;default:return null}}var Of={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Iu(e){var a=e&&e.nodeName&&e.nodeName.toLowerCase();return a==="input"?!!Of[e.type]:a==="textarea"}function Gu(e,a,l,s){Ms?As?As.push(s):As=[s]:Ms=s,a=Ti(a,"onChange"),0<a.length&&(l=new Un("onChange","change",null,l,s),e.push({event:l,listeners:a}))}var _r=null,Rr=null;function Ef(e){Sh(e,0)}function Xn(e){var a=kr(e);if(ku(a))return e}function $u(e,a){if(e==="change")return a}var Ku=!1;if(Wa){var Do;if(Wa){var zo="oninput"in document;if(!zo){var qu=document.createElement("div");qu.setAttribute("oninput","return;"),zo=typeof qu.oninput=="function"}Do=zo}else Do=!1;Ku=Do&&(!document.documentMode||9<document.documentMode)}function Yu(){_r&&(_r.detachEvent("onpropertychange",Pu),Rr=_r=null)}function Pu(e){if(e.propertyName==="value"&&Xn(Rr)){var a=[];Gu(a,Rr,e,So(e)),Ru(Ef,a)}}function Cf(e,a,l){e==="focusin"?(Yu(),_r=a,Rr=l,_r.attachEvent("onpropertychange",Pu)):e==="focusout"&&Yu()}function Tf(e){if(e==="selectionchange"||e==="keyup"||e==="keydown")return Xn(Rr)}function _f(e,a){if(e==="click")return Xn(a)}function Rf(e,a){if(e==="input"||e==="change")return Xn(a)}function Mf(e,a){return e===a&&(e!==0||1/e===1/a)||e!==e&&a!==a}var ia=typeof Object.is=="function"?Object.is:Mf;function Mr(e,a){if(ia(e,a))return!0;if(typeof e!="object"||e===null||typeof a!="object"||a===null)return!1;var l=Object.keys(e),s=Object.keys(a);if(l.length!==s.length)return!1;for(s=0;s<l.length;s++){var n=l[s];if(!gt.call(a,n)||!ia(e[n],a[n]))return!1}return!0}function Zu(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function Qu(e,a){var l=Zu(e);e=0;for(var s;l;){if(l.nodeType===3){if(s=e+l.textContent.length,e<=a&&s>=a)return{node:l,offset:a-e};e=s}e:{for(;l;){if(l.nextSibling){l=l.nextSibling;break e}l=l.parentNode}l=void 0}l=Zu(l)}}function Ju(e,a){return e&&a?e===a?!0:e&&e.nodeType===3?!1:a&&a.nodeType===3?Ju(e,a.parentNode):"contains"in e?e.contains(a):e.compareDocumentPosition?!!(e.compareDocumentPosition(a)&16):!1:!1}function Wu(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var a=Dn(e.document);a instanceof e.HTMLIFrameElement;){try{var l=typeof a.contentWindow.location.href=="string"}catch{l=!1}if(l)e=a.contentWindow;else break;a=Dn(e.document)}return a}function Bo(e){var a=e&&e.nodeName&&e.nodeName.toLowerCase();return a&&(a==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||a==="textarea"||e.contentEditable==="true")}var Af=Wa&&"documentMode"in document&&11>=document.documentMode,zs=null,Vo=null,Ar=null,Lo=!1;function Fu(e,a,l){var s=l.window===l?l.document:l.nodeType===9?l:l.ownerDocument;Lo||zs==null||zs!==Dn(s)||(s=zs,"selectionStart"in s&&Bo(s)?s={start:s.selectionStart,end:s.selectionEnd}:(s=(s.ownerDocument&&s.ownerDocument.defaultView||window).getSelection(),s={anchorNode:s.anchorNode,anchorOffset:s.anchorOffset,focu
vendor: 19,256 bytes, line 2052
2052sNode:s.focusNode,focusOffset:s.focusOffset}),Ar&&Mr(Ar,s)||(Ar=s,s=Ti(Vo,"onSelect"),0<s.length&&(a=new Un("onSelect","select",null,a,l),e.push({event:a,listeners:s}),a.target=zs)))}function ls(e,a){var l={};return l[e.toLowerCase()]=a.toLowerCase(),l["Webkit"+e]="webkit"+a,l["Moz"+e]="moz"+a,l}var Bs={animationend:ls("Animation","AnimationEnd"),animationiteration:ls("Animation","AnimationIteration"),animationstart:ls("Animation","AnimationStart"),transitionrun:ls("Transition","TransitionRun"),transitionstart:ls("Transition","TransitionStart"),transitioncancel:ls("Transition","TransitionCancel"),transitionend:ls("Transition","TransitionEnd")},Uo={},e0={};Wa&&(e0=document.createElement("div").style,"AnimationEvent"in window||(delete Bs.animationend.animation,delete Bs.animationiteration.animation,delete Bs.animationstart.animation),"TransitionEvent"in window||delete Bs.transitionend.transition);function ss(e){if(Uo[e])return Uo[e];if(!Bs[e])return e;var a=Bs[e],l;for(l in a)if(a.hasOwnProperty(l)&&l in e0)return Uo[e]=a[l];return e}var t0=ss("animationend"),a0=ss("animationiteration"),l0=ss("animationstart"),Df=ss("transitionrun"),zf=ss("transitionstart"),Bf=ss("transitioncancel"),s0=ss("transitionend"),r0=new Map,Ho="abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");Ho.push("scrollEnd");function Aa(e,a){r0.set(e,a),ts(a,[e])}var In=typeof reportError=="function"?reportError:function(e){if(typeof window=="object"&&typeof window.ErrorEvent=="function"){var a=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:typeof e=="object"&&e!==null&&typeof e.message=="string"?String(e.message):String(e),error:e});if(!window.dispatchEvent(a))return}else if(typeof process=="object"&&typeof process.emit=="function"){process.emit("uncaughtException",e);return}console.error(e)},ba=[],Vs=0,Xo=0;function Gn(){for(var e=Vs,a=Xo=Vs=0;a<e;){var l=ba[a];ba[a++]=null;var s=ba[a];ba[a++]=null;var n=ba[a];ba[a++]=null;var i=ba[a];if(ba[a++]=null,s!==null&&n!==null){var p=s.pending;p===null?n.next=n:(n.next=p.next,p.next=n),s.pending=n}i!==0&&n0(l,n,i)}}function $n(e,a,l,s){ba[Vs++]=e,ba[Vs++]=a,ba[Vs++]=l,ba[Vs++]=s,Xo|=s,e.lanes|=s,e=e.alternate,e!==null&&(e.lanes|=s)}function Io(e,a,l,s){return $n(e,a,l,s),Kn(e)}function rs(e,a){return $n(e,null,null,a),Kn(e)}function n0(e,a,l){e.lanes|=l;var s=e.alternate;s!==null&&(s.lanes|=l);for(var n=!1,i=e.return;i!==null;)i.childLanes|=l,s=i.alternate,s!==null&&(s.childLanes|=l),i.tag===22&&(e=i.stateNode,e===null||e._visibility&1||(n=!0)),e=i,i=i.return;return e.tag===3?(i=e.stateNode,n&&a!==null&&(n=31-bt(l),e=i.hiddenUpdates,s=e[n],s===null?e[n]=[a]:s.push(a),a.lane=l|536870912),i):null}function Kn(e){if(50<tn)throw tn=0,Jc=null,Error(c(185));for(var a=e.return;a!==null;)e=a,a=e.return;return e.tag===3?e.stateNode:null}var Ls={};function Vf(e,a,l,s){this.tag=e,this.key=l,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.refCleanup=this.ref=null,this.pendingProps=a,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=s,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function oa(e,a,l,s){return new Vf(e,a,l,s)}function Go(e){return e=e.prototype,!(!e||!e.isReactComponent)}function Fa(e,a){var l=e.alternate;return l===null?(l=oa(e.tag,a,e.key,e.mode),l.elementType=e.elementType,l.type=e.type,l.stateNode=e.stateNode,l.alternate=e,e.alternate=l):(l.pendingProps=a,l.type=e.type,l.flags=0,l.subtreeFlags=0,l.deletions=null),l.flags=e.flags&65011712,l.childLanes=e.childLanes,l.lanes=e.lanes,l.child=e.child,l.memoizedProps=e.memoizedProps,l.memoizedState=e.memoizedState,l.updateQueue=e.updateQueue,a=e.dependencies,l.dependencies=a===null?null:{lanes:a.lanes,firstContext:a.firstContext},l.sibling=e.sibling,l.index=e.index,l.ref=e.ref,l.refCleanup=e.refCleanup,l}function i0(e,a){e.flags&=65011714;var l=e.alternate;return l===null?(e.childLanes=0,e.lanes=a,e.child=null,e.subtreeFlags=0,e.memoizedProps=null,e.memoizedState=null,e.updateQueue=null,e.dependencies=null,e.stateNode=null):(e.childLanes=l.childLanes,e.lanes=l.lanes,e.child=l.child,e.subtreeFlags=0,e.deletions=null,e.memoizedProps=l.memoizedProps,e.memoizedState=l.memoizedState,e.updateQueue=l.updateQueue,e.type=l.type,a=l.dependencies,e.dependencies=a===null?null:{lanes:a.lanes,firstContext:a.firstContext}),e}function qn(e,a,l,s,n,i){var p=0;if(s=e,typeof e=="function")Go(e)&&(p=1);else if(typeof e=="string")p=Ig(e,l,X.current)?26:e==="html"||e==="head"||e==="body"?27:5;else e:switch(e){case Y:return e=oa(31,l,a,n),e.elementType=Y,e.lanes=i,e;case E:return ns(l.children,n,i,a);case _:p=8,n|=24;break;case k:return e=oa(12,l,a,n|2),e.elementType=k,e.lanes=i,e;case W:return e=oa(13,l,a,n),e.elementType=W,e.lanes=i,e;case $:return e=oa(19,l,a,n),e.elementType=$,e.lanes=i,e;default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case D:p=10;break e;case R:p=9;break e;case te:p=11;break e;case H:p=14;break e;case J:p=16,s=null;break e}p=29,l=Error(c(130,e===null?"null":typeof e,"")),s=null}return a=oa(p,l,a,n),a.elementType=e,a.type=s,a.lanes=i,a}function ns(e,a,l,s){return e=oa(7,e,s,a),e.lanes=l,e}function $o(e,a,l){return e=oa(6,e,null,a),e.lanes=l,e}function o0(e){var a=oa(18,null,null,0);return a.stateNode=e,a}function Ko(e,a,l){return a=oa(4,e.children!==null?e.children:[],e.key,a),a.lanes=l,a.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},a}var c0=new WeakMap;function ya(e,a){if(typeof e=="object"&&e!==null){var l=c0.get(e);return l!==void 0?l:(a={value:e,source:a,stack:Je(a)},c0.set(e,a),a)}return{value:e,source:a,stack:Je(a)}}var Us=[],Hs=0,Yn=null,Dr=0,va=[],wa=0,Sl=null,Ha=1,Xa="";function el(e,a){Us[Hs++]=Dr,Us[Hs++]=Yn,Yn=e,Dr=a}function d0(e,a,l){va[wa++]=Ha,va[wa++]=Xa,va[wa++]=Sl,Sl=e;var s=Ha;e=Xa;var n=32-bt(s)-1;s&=~(1<<n),l+=1;var i=32-bt(a)+n;if(30<i){var p=n-n%5;i=(s&(1<<p)-1).toString(32),s>>=p,n-=p,Ha=1<<32-bt(a)+n|l<<n|s,Xa=i+e}else Ha=1<<i|l<<n|s,Xa=e}function qo(e){e.return!==null&&(el(e,1),d0(e,1,0))}function Yo(e){for(;e===Yn;)Yn=Us[--Hs],Us[Hs]=null,Dr=Us[--Hs],Us[Hs]=null;for(;e===Sl;)Sl=va[--wa],va[wa]=null,Xa=va[--wa],va[wa]=null,Ha=va[--wa],va[wa]=null}function u0(e,a){va[wa++]=Ha,va[wa++]=Xa,va[wa++]=Sl,Ha=a.id,Xa=a.overflow,Sl=e}var qt=null,vt=null,Qe=!1,Ol=null,ja=!1,Po=Error(c(519));function El(e){var a=Error(c(418,1<arguments.length&&arguments[1]!==void 0&&arguments[1]?"text":"HTML",""));throw zr(ya(a,e)),Po}function m0(e){var a=e.stateNode,l=e.type,s=e.memoizedProps;switch(a[Nt]=e,a[Tt]=s,l){case"dialog":Ke("cancel",a),Ke("close",a);break;case"iframe":case"object":case"embed":Ke("load",a);break;case"video":case"audio":for(l=0;l<ln.length;l++)Ke(ln[l],a);break;case"source":Ke("error",a);break;case"img":case"image":case"link":Ke("error",a),Ke("load",a);break;case"details":Ke("toggle",a);break;case"input":Ke("invalid",a),Su(a,s.value,s.defaultValue,s.checked,s.defaultChecked,s.type,s.name,!0);break;case"select":Ke("invalid",a);break;case"textarea":Ke("invalid",a),Eu(a,s.value,s.defaultValue,s.children)}l=s.children,typeof l!="string"&&typeof l!="number"&&typeof l!="bigint"||a.textContent===""+l||s.suppressHydrationWarning===!0||Th(a.textContent,l)?(s.popover!=null&&(Ke("beforetoggle",a),Ke("toggle",a)),s.onScroll!=null&&Ke("scroll",a),s.onScrollEnd!=null&&Ke("scrollend",a),s.onClick!=null&&(a.onclick=Ja),a=!0):a=!1,a||El(e,!0)}function h0(e){for(qt=e.return;qt;)switch(qt.tag){case 5:case 31:case 13:ja=!1;return;case 27:case 3:ja=!0;return;default:qt=qt.return}}function Xs(e){if(e!==qt)return!1;if(!Qe)return h0(e),Qe=!0,!1;var a=e.tag,l;if((l=a!==3&&a!==27)&&((l=a===5)&&(l=e.type,l=!(l!=="form"&&l!=="button")||md(e.type,e.memoizedProps)),l=!l),l&&vt&&El(e),h0(e),a===13){if(e=e.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(c(317));vt=Lh(e)}else if(a===31){if(e=e.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(c(317));vt=Lh(e)}else a===27?(a=vt,Xl(e.type)?(e=gd,gd=null,vt=e):vt=a):vt=qt?ka(e.stateNode.nextSibling):null;return!0}function is(){vt=qt=null,Qe=!1}function Zo(){var e=Ol;return e!==null&&(ra===null?ra=e:ra.push.apply(ra,e),Ol=null),e}function zr(e){Ol===null?Ol=[e]:Ol.push(e)}var Qo=w(null),os=null,tl=null;function Cl(e,a,l){M(Qo,a._currentValue),a._currentValue=l}function al(e){e._currentValue=Qo.current,V(Qo)}function Jo(e,a,l){for(;e!==null;){var s=e.alternate;if((e.childLanes&a)!==a?(e.childLanes|=a,s!==null&&(s.childLanes|=a)):s!==null&&(s.childLanes&a)!==a&&(s.childLanes|=a),e===l)break;e=e.return}}function Wo(e,a,l,s){var n=e.child;for(n!==null&&(n.return=e);n!==null;){var i=n.dependencies;if(i!==null){var p=n.child;i=i.firstContext;e:for(;i!==null;){var S=i;i=n;for(var L=0;L<a.length;L++)if(S.context===a[L]){i.lanes|=l,S=i.alternate,S!==null&&(S.lanes|=l),Jo(i.return,l,e),s||(p=null);break e}i=S.next}}else if(n.tag===18){if(p=n.return,p===null)throw Error(c(341));p.lanes|=l,i=p.alternate,i!==null&&(i.lanes|=l),Jo(p,l,e),p=null}else p=n.child;if(p!==null)p.return=n;else for(p=n;p!==null;){if(p===e){p=null;break}if(n=p.sibling,n!==null){n.return=p.return,p=n;break}p=p.return}n=p}}function Is(e,a,l,s){e=null;for(var n=a,i=!1;n!==null;){if(!i){if((n.flags&524288)!==0)i=!0;else if((n.flags&262144)!==0)break}if(n.tag===10){var p=n.alternate;if(p===null)throw Error(c(387));if(p=p.memoizedProps,p!==null){var S=n.type;ia(n.pendingProps.value,p.value)||(e!==null?e.push(S):e=[S])}}else if(n===ge.current){if(p=n.alternate,p===null)throw Error(c(387));p.memoizedState.memoizedState!==n.memoizedState.memoizedState&&(e!==null?e.push(cn):e=[cn])}n=n.return}e!==null&&Wo(a,e,l,s),a.flags|=262144}function Pn(e){for(e=e.firstContext;e!==null;){if(!ia(e.context._currentValue,e.memoizedValue))return!0;e=e.next}return!1}function cs(e){os=e,tl=null,e=e.dependencies,e!==null&&(e.firstContext=null)}function Yt(e){return x0(os,e)}function Zn(e,a){return os===null&&cs(e),x0(e,a)}function x0(e,a){var l=a._currentValue;if(a={context:a,memoizedValue:l,next:null},tl===null){if(e===null)throw Error(c(308));tl=a,e.dependencies={lanes:0,firstContext:a},e.flags|=524288}else tl=tl.next=a;return l}var Lf=typeof AbortController<"u"?AbortController:function(){var e=[],a=this.signal={aborted:!1,addEventListener:function(l,s){e.push(s)}};this.abort=function(){a.aborted=!0,e.forEach(function(l){return l()})}},Uf=r.unstable_scheduleCallback,Hf=r.unstable_NormalPriority,Dt={$$typeof:D,Consumer:null,Provider:null,_currentValue:null,_currentValue2:null,_threadCount:0};function Fo(){return{controller:new Lf,data:new Map,refCount:0}}function Br(e){e.refCount--,e.refCount===0&&Uf(Hf,function(){e.controller.abort()})}var Vr=null,ec=0,Gs=0,$s=null;function Xf(e,a){if(Vr===null){var l=Vr=[];ec=0,Gs=ld(),$s={status:"pending",value:void 0,then:function(s){l.push(s)}}}return ec++,a.then(p0,p0),a}function p0(){if(--ec===0&&Vr!==null){$s!==null&&($s.status="fulfilled");var e=Vr;Vr=null,Gs=0,$s=null;for(var a=0;a<e.length;a++)(0,e[a])()}}function If(e,a){var l=[],s={status:"pending",value:null,reason:null,then:function(n){l.push(n)}};return e.then(function(){s.status="fulfilled",s.value=a;for(var n=0;n<l.length;n++)(0,l[n])(a)},function(n){for(s.status="rejected",s.reason=n,n=0;n<l.length;n++)(0,l[n])(void 0)}),s}var f0=z.S;z.S=function(e,a){Fm=se(),typeof a=="object"&&a!==null&&typeof a.then=="function"&&Xf(e,a),f0!==null&&f0(e,a)};var ds=w(null);function tc(){var e=ds.current;return e!==null?e:pt.pooledCache}function Qn(e,a){a===null?M(ds,ds.current):M(ds,a.pool)}function g0(){var e=tc();return e===null?null:{parent:Dt._currentValue,pool:e}}var Ks=Error(c(460)),ac=Error(c(474)),Jn=Error(c(542)),Wn={then:function(){}};function b0(e){return e=e.status,e==="fulfilled"||e==="rejected"}function y0(e,a,l){switch(l=e[l],l===void 0?e.push(a):l!==a&&(a.then(Ja,Ja),a=l),a.status){case"fulfilled":return a.value;case"rejected":throw e=a.reason,w0(e),e;default:if(typeof a.status=="string")a.then(Ja,Ja);else{if(e=pt,e!==null&&100<e.shellSuspendCounter)throw Error(c(482));e=a,e.status="pending",e.then(function(s){if(a.status==="pending"){var n=a;n.status="fulfilled",n.value=s}},function(s){if(a.status==="pending"){var n=a;n.status="rejected",n.reason=s}})}switch(a.status){case"fulfilled":return a.value;case"rejected":throw e=a.reason,w0(e),e}throw ms=a,Ks}}function us(e){try{var a=e._init;return a(e._payload)}catch(l){throw l!==null&&typeof l=="object"&&typeof l.then=="function"?(ms=l,Ks):l}}var ms=null;function v0(){if(ms===null)throw Error(c(459));var e=ms;return ms=null,e}function w0(e){if(e===Ks||e===Jn)throw Error(c(483))}var qs=null,Lr=0;function Fn(e){var a=Lr;return Lr+=1,qs===null&&(qs=[]),y0(qs,e,a)}function Ur(e,a){a=a.props.ref,e.ref=a!==void 0?a:null}function ei(e,a){throw a.$$typeof===C?Error(c(525)):(e=Object.prototype.toString.call(a),Error(c(31,e==="[object Object]"?"object with keys {"+Object.keys(a).join(", ")+"}":e)))}function j0(e){function a(Q,I){if(e){var F=Q.deletions;F===null?(Q.deletions=[I],Q.flags|=16):F.push(I)}}function l(Q,I){if(!e)return null;for(;I!==null;)a(Q,I),I=I.sibling;return null}function s(Q){for(var I=new Map;Q!==null;)Q.key!==null?I.set(Q.key,Q):I.set(Q.index,Q),Q=Q.sibling;return I}function n(Q,I){return Q=Fa(Q,I),Q.index=0,Q.sibling=null,Q}function i(Q,I,F){return Q.index=F,e?(F=Q.alternate,F!==null?(F=F.index,F<I?(Q.flags|=67108866,I):F):(Q.flags|=67108866,I)):(Q.flags|=1048576,I)}function p(Q){return e&&Q.alternate===null&&(Q.flags|=67108866),Q}function S(Q,I,F,ue){return I===null||I.tag!==6?(I=$o(F,Q.mode,ue),I.return=Q,I):(I=n(I,F),I.return=Q,I)}function L(Q,I,F,ue){var Ce=F.type;return Ce===E?ne(Q,I,F.props.children,ue,F.key):I!==null&&(I.elementType===Ce||typeof Ce=="object"&&Ce!==null&&Ce.$$typeof===J&&us(Ce)===I.type)?(I=n(I,F.props),Ur(I,F),I.return=Q,I):(I=qn(F.type,F.key,F.props,null,Q.mode,ue),Ur(I,F),I.return=Q,I)}function ee(Q,I,F,ue){return I===null||I.tag!==4||I.stateNode.containerInfo!==F.containerInfo||I.stateNode.implementation!==F.implementation?(I=Ko(F,Q.mode,ue),I.return=Q,I):(I=n(I,F.children||[]),I.return=Q,I)}function ne(Q,I,F,ue,Ce){return I===null||I.tag!==7?(I=ns(F,Q.mode,ue,Ce),I.return=Q,I):(I=n(I,F),I.return=Q,I)}function he(Q,I,F){if(typeof I=="string"&&I!==""||typeof I=="number"||typeof I=="bigint")return I=$o(""+I,Q.mode,F),I.return=Q,I;if(typeof I=="object"&&I!==null){switch(I.$$typeof){case g:return F=qn(I.type,I.key,I.props,null,Q.mode,F),Ur(F,I),F.return=Q,F;case O:return I=Ko(I,Q.mode,F),I.return=Q,I;case J:return I=us(I),he(Q,I,F)}if(B(I)||q(I))return I=ns(I,Q.mode,F,null),I.return=Q,I;if(typeof I.then=="function")return he(Q,Fn(I),F);if(I.$$typeof===D)return he(Q,Zn(Q,I),F);ei(Q,I)}return null}function ae(Q,I,F,ue){var Ce=I!==null?I.key:null;if(typeof F=="string"&&F!==""||typeof F=="number"||typeof F=="bigint")return Ce!==null?null:S(Q,I,""+F,ue);if(typeof F=="object"&&F!==null){switch(F.$$typeof){case g:return F.key===Ce?L(Q,I,F,ue):null;case O:return F.key===Ce?ee(Q,I,F,ue):null;case J:return F=us(F),ae(Q,I,F,ue)}if(B(F)||q(F))return Ce!==null?null:ne(Q,I,F,ue,null);if(typeof F.then=="function")return ae(Q,I,Fn(F),ue);if(F.$$typeof===D)return ae(Q,I,Zn(Q,F),ue);ei(Q,F)}return null}function re(Q,I,F,ue,Ce){if(typeof ue=="string"&&ue!==""||typeof ue=="number"||typeof ue=="bigint")return Q=Q.get(F)||null,S(I,Q,""+ue,Ce);if(typeof ue=="object"&&ue!==null){switch(ue.$$typeof){case g:return Q=Q.get(ue.key===null?F:ue.key)||null,L(I,Q,ue,Ce);case O:return Q=Q.get(ue.key===null?F:ue.key)||null,ee(I,Q,ue,Ce);case J:return ue=us(ue),re(Q,I,F,ue,Ce)}if(B(ue)||q(ue))return Q=Q.get(F)||null,ne(I,Q,ue,Ce,null);if(typeof ue.then=="function")return re(Q,I,F,Fn(ue),Ce);if(ue.$$typeof===D)return re(Q,I,F,Zn(I,ue),Ce);ei(I,ue)}return null}function we(Q,I,F,ue){for(var Ce=null,at=null,Se=I,Ue=I=0,Ye=null;Se!==null&&Ue<F.length;Ue++){Se.index>Ue?(Ye=Se,Se=null):Ye=Se.sibling;var lt=ae(Q,Se,F[Ue],ue);if(lt===null){Se===null&&(Se=Ye);break}e&&Se&&lt.alternate===null&&a(Q,Se),I=i(lt,I,Ue),at===null?Ce=lt:at.sibling=lt,at=lt,Se=Ye}if(Ue===F.length)return l(Q,Se),Qe&&el(Q,Ue),Ce;if(Se===null){for(;Ue<F.length;Ue++)Se=he(Q,F[Ue],ue),Se!==null&&(I=i(Se,I,Ue),at===null?Ce=Se:at.sibling=Se,at=Se);return Qe&&el(Q,Ue),Ce}for(Se=s(Se);Ue<F.length;Ue++)Ye=re(Se,Q,Ue,F[Ue],ue),Ye!==null&&(e&&Ye.alternate!==null&&Se.delete(Ye.key===null?Ue:Ye.key),I=i(Ye,I,Ue),at===null?Ce=Ye:at.sibling=Ye,at=Ye);return e&&Se.forEach(function(ql){return a(Q,ql)}),Qe&&el(Q,Ue),Ce}function _e(Q,I,F,ue){if(F==null)throw Error(c(151));for(var Ce=null,at=null,Se=I,Ue=I=0,Ye=null,lt=F.next();Se!==null&&!lt.done;Ue++,lt=F.next()){Se.index>Ue?(Ye=Se,Se=null):Ye=Se.sibling;var ql=ae(Q,Se,lt.value,ue);if(ql===null){Se===null&&(Se=Ye);break}e&&Se&&ql.alternate===null&&a(Q,Se),I=i(ql,I,Ue),at===null?Ce=ql:at.sibling=ql,at=ql,Se=Ye}if(lt.done)return l(Q,Se),Qe&&el(Q,Ue),Ce;if(Se===null){for(;!lt.done;Ue++,lt=F.next())lt=he(Q,lt.value,ue),lt!==null&&(I=i(lt,I,Ue),at===null?Ce=lt:at.sibling=lt,at=lt);return Qe&&el(Q,Ue),Ce}for(Se=s(Se);!lt.done;Ue++,lt=F.next())lt=re(Se,Q,Ue,lt.value,ue),lt!==null&&(e&&lt.alternate!==null&&Se.delete(lt.key===null?Ue:lt.key),I=i(lt,I,Ue),at===null?Ce=lt:at.sibling=lt,at=lt);return e&&Se.forEach(function(Fg){return a(Q,Fg)}),Qe&&el(Q,Ue),Ce}function ht(Q,I,F,ue){if(typeof F=="object"&&F!==null&&F.type===E&&F.key===null&&(F=F.props.children),typeof F=="object"&&F!==null){switch(F.$$typeof){case g:e:{for(var Ce=F.key;I!==null;){if(I.key===Ce){if(Ce=F.type,Ce===E){if(I.tag===7){l(Q,I.sibling),ue=n(I,F.props.children),ue.return=Q,Q=ue;break e}}else if(I.elementType===Ce||typeof Ce=="object"&&Ce!==null&&Ce.$$typeof===J&&us(Ce)===I.type){l(Q,I.sibling),ue=n(I,F.props),Ur(ue,F),ue.return=Q,Q=ue;break e}l(Q,I);break}else a(Q,I);I=I.sibling}F.type===E?(ue=ns(F.props.children,Q.mode,ue,F.key),ue.return=Q,Q=ue):(ue=qn(F.type,F.key,F.props,null,Q.mode,ue),Ur(ue,F),ue.return=Q,Q=ue)}return p(Q);case O:e:{for(Ce=F.key;I!==null;){if(I.key===Ce)if(I.tag===4&&I.stateNode.containerInfo===F.containerInfo&&I.stateNode.implementation===F.implementation){l(Q,I.sibling),ue=n(I,F.children||[]),ue.return=Q,Q=ue;break e}else{l(Q,I);break}else a(Q,I);I=I.sibling}ue=Ko(F,Q.mode,ue),ue.return=Q,Q=ue}return p(Q);case J:return F=us(F),ht(Q,I,F,ue)}if(B(F))return we(Q,I,F,ue);if(q(F)){if(Ce=q(F),typeof Ce!="function")throw Error(c(150));return F=Ce.call(F),_e(Q,I,F,ue)}if(typeof F.then=="function")return ht(Q,I,Fn(F),ue);if(F.$$typeof===D)return ht(Q,I,Zn(Q,F),ue);ei(Q,F)}return typeof F=="string"&&F!==""||typeof F=="number"||typeof F=="bigint"?(F=""+F,I!==null&&I.tag===6?(l(Q,I.sibling),ue=n(I,F),ue.return=Q,Q=ue):(l(Q,I),ue=$o(
vendor: 4,818 bytes, line 2052
2052F,Q.mode,ue),ue.return=Q,Q=ue),p(Q)):l(Q,I)}return function(Q,I,F,ue){try{Lr=0;var Ce=ht(Q,I,F,ue);return qs=null,Ce}catch(Se){if(Se===Ks||Se===Jn)throw Se;var at=oa(29,Se,null,Q.mode);return at.lanes=ue,at.return=Q,at}finally{}}}var hs=j0(!0),N0=j0(!1),Tl=!1;function lc(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function sc(e,a){e=e.updateQueue,a.updateQueue===e&&(a.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function _l(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function Rl(e,a,l){var s=e.updateQueue;if(s===null)return null;if(s=s.shared,(rt&2)!==0){var n=s.pending;return n===null?a.next=a:(a.next=n.next,n.next=a),s.pending=a,a=Kn(e),n0(e,null,l),a}return $n(e,s,a,l),Kn(e)}function Hr(e,a,l){if(a=a.updateQueue,a!==null&&(a=a.shared,(l&4194048)!==0)){var s=a.lanes;s&=e.pendingLanes,l|=s,a.lanes=l,jl(e,l)}}function rc(e,a){var l=e.updateQueue,s=e.alternate;if(s!==null&&(s=s.updateQueue,l===s)){var n=null,i=null;if(l=l.firstBaseUpdate,l!==null){do{var p={lane:l.lane,tag:l.tag,payload:l.payload,callback:null,next:null};i===null?n=i=p:i=i.next=p,l=l.next}while(l!==null);i===null?n=i=a:i=i.next=a}else n=i=a;l={baseState:s.baseState,firstBaseUpdate:n,lastBaseUpdate:i,shared:s.shared,callbacks:s.callbacks},e.updateQueue=l;return}e=l.lastBaseUpdate,e===null?l.firstBaseUpdate=a:e.next=a,l.lastBaseUpdate=a}var nc=!1;function Xr(){if(nc){var e=$s;if(e!==null)throw e}}function Ir(e,a,l,s){nc=!1;var n=e.updateQueue;Tl=!1;var i=n.firstBaseUpdate,p=n.lastBaseUpdate,S=n.shared.pending;if(S!==null){n.shared.pending=null;var L=S,ee=L.next;L.next=null,p===null?i=ee:p.next=ee,p=L;var ne=e.alternate;ne!==null&&(ne=ne.updateQueue,S=ne.lastBaseUpdate,S!==p&&(S===null?ne.firstBaseUpdate=ee:S.next=ee,ne.lastBaseUpdate=L))}if(i!==null){var he=n.baseState;p=0,ne=ee=L=null,S=i;do{var ae=S.lane&-536870913,re=ae!==S.lane;if(re?(qe&ae)===ae:(s&ae)===ae){ae!==0&&ae===Gs&&(nc=!0),ne!==null&&(ne=ne.next={lane:0,tag:S.tag,payload:S.payload,callback:null,next:null});e:{var we=e,_e=S;ae=a;var ht=l;switch(_e.tag){case 1:if(we=_e.payload,typeof we=="function"){he=we.call(ht,he,ae);break e}he=we;break e;case 3:we.flags=we.flags&-65537|128;case 0:if(we=_e.payload,ae=typeof we=="function"?we.call(ht,he,ae):we,ae==null)break e;he=b({},he,ae);break e;case 2:Tl=!0}}ae=S.callback,ae!==null&&(e.flags|=64,re&&(e.flags|=8192),re=n.callbacks,re===null?n.callbacks=[ae]:re.push(ae))}else re={lane:ae,tag:S.tag,payload:S.payload,callback:S.callback,next:null},ne===null?(ee=ne=re,L=he):ne=ne.next=re,p|=ae;if(S=S.next,S===null){if(S=n.shared.pending,S===null)break;re=S,S=re.next,re.next=null,n.lastBaseUpdate=re,n.shared.pending=null}}while(!0);ne===null&&(L=he),n.baseState=L,n.firstBaseUpdate=ee,n.lastBaseUpdate=ne,i===null&&(n.shared.lanes=0),Bl|=p,e.lanes=p,e.memoizedState=he}}function k0(e,a){if(typeof e!="function")throw Error(c(191,e));e.call(a)}function S0(e,a){var l=e.callbacks;if(l!==null)for(e.callbacks=null,e=0;e<l.length;e++)k0(l[e],a)}var Ys=w(null),ti=w(0);function O0(e,a){e=ul,M(ti,e),M(Ys,a),ul=e|a.baseLanes}function ic(){M(ti,ul),M(Ys,Ys.current)}function oc(){ul=ti.current,V(Ys),V(ti)}var ca=w(null),Na=null;function Ml(e){var a=e.alternate;M(_t,_t.current&1),M(ca,e),Na===null&&(a===null||Ys.current!==null||a.memoizedState!==null)&&(Na=e)}function cc(e){M(_t,_t.current),M(ca,e),Na===null&&(Na=e)}function E0(e){e.tag===22?(M(_t,_t.current),M(ca,e),Na===null&&(Na=e)):Al()}function Al(){M(_t,_t.current),M(ca,ca.current)}function da(e){V(ca),Na===e&&(Na=null),V(_t)}var _t=w(0);function ai(e){for(var a=e;a!==null;){if(a.tag===13){var l=a.memoizedState;if(l!==null&&(l=l.dehydrated,l===null||pd(l)||fd(l)))return a}else if(a.tag===19&&(a.memoizedProps.revealOrder==="forwards"||a.memoizedProps.revealOrder==="backwards"||a.memoizedProps.revealOrder==="unstable_legacy-backwards"||a.memoizedProps.revealOrder==="together")){if((a.flags&128)!==0)return a}else if(a.child!==null){a.child.return=a,a=a.child;continue}if(a===e)break;for(;a.sibling===null;){if(a.return===null||a.return===e)return null;a=a.return}a.sibling.return=a.return,a=a.sibling}return null}var ll=0,Le=null,ut=null,zt=null,li=!1,Ps=!1,xs=!1,si=0,Gr=0,Zs=null,Gf=0;function Et(){throw Error(c(321))}function dc(e,a){if(a===null)return!1;for(var l=0;l<a.length&&l<e.length;l++)if(!ia(e[l],a[l]))return!1;return!0}function uc(e,a,l,s,n,i){return ll=i,Le=a,a.memoizedState=null,a.updateQueue=null,a.lanes=0,z.H=e===null||e.memoizedState===null?dm:Oc,xs=!1,i=l(s,n),xs=!1,Ps&&(i=T0(a,l,s,n)),C0(e),i}function C0(e){z.H=qr;var a=ut!==null&&ut.next!==null;if(ll=0,zt=ut=Le=null,li=!1,Gr=0,Zs=null,a)throw Error(c(300));
vendor: 18,659 bytes, line 2052
2052e===null||Bt||(e=e.dependencies,e!==null&&Pn(e)&&(Bt=!0))}function T0(e,a,l,s){Le=e;var n=0;do{if(Ps&&(Zs=null),Gr=0,Ps=!1,25<=n)throw Error(c(301));if(n+=1,zt=ut=null,e.updateQueue!=null){var i=e.updateQueue;i.lastEffect=null,i.events=null,i.stores=null,i.memoCache!=null&&(i.memoCache.index=0)}z.H=um,i=a(l,s)}while(Ps);return i}function $f(){var e=z.H,a=e.useState()[0];return a=typeof a.then=="function"?$r(a):a,e=e.useState()[0],(ut!==null?ut.memoizedState:null)!==e&&(Le.flags|=1024),a}function mc(){var e=si!==0;return si=0,e}function hc(e,a,l){a.updateQueue=e.updateQueue,a.flags&=-2053,e.lanes&=~l}function xc(e){if(li){for(e=e.memoizedState;e!==null;){var a=e.queue;a!==null&&(a.pending=null),e=e.next}li=!1}ll=0,zt=ut=Le=null,Ps=!1,Gr=si=0,Zs=null}function ea(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return zt===null?Le.memoizedState=zt=e:zt=zt.next=e,zt}function Rt(){if(ut===null){var e=Le.alternate;e=e!==null?e.memoizedState:null}else e=ut.next;var a=zt===null?Le.memoizedState:zt.next;if(a!==null)zt=a,ut=e;else{if(e===null)throw Le.alternate===null?Error(c(467)):Error(c(310));ut=e,e={memoizedState:ut.memoizedState,baseState:ut.baseState,baseQueue:ut.baseQueue,queue:ut.queue,next:null},zt===null?Le.memoizedState=zt=e:zt=zt.next=e}return zt}function ri(){return{lastEffect:null,events:null,stores:null,memoCache:null}}function $r(e){var a=Gr;return Gr+=1,Zs===null&&(Zs=[]),e=y0(Zs,e,a),a=Le,(zt===null?a.memoizedState:zt.next)===null&&(a=a.alternate,z.H=a===null||a.memoizedState===null?dm:Oc),e}function ni(e){if(e!==null&&typeof e=="object"){if(typeof e.then=="function")return $r(e);if(e.$$typeof===D)return Yt(e)}throw Error(c(438,String(e)))}function pc(e){var a=null,l=Le.updateQueue;if(l!==null&&(a=l.memoCache),a==null){var s=Le.alternate;s!==null&&(s=s.updateQueue,s!==null&&(s=s.memoCache,s!=null&&(a={data:s.data.map(function(n){return n.slice()}),index:0})))}if(a==null&&(a={data:[],index:0}),l===null&&(l=ri(),Le.updateQueue=l),l.memoCache=a,l=a.data[a.index],l===void 0)for(l=a.data[a.index]=Array(e),s=0;s<e;s++)l[s]=G;return a.index++,l}function sl(e,a){return typeof a=="function"?a(e):a}function ii(e){var a=Rt();return fc(a,ut,e)}function fc(e,a,l){var s=e.queue;if(s===null)throw Error(c(311));s.lastRenderedReducer=l;var n=e.baseQueue,i=s.pending;if(i!==null){if(n!==null){var p=n.next;n.next=i.next,i.next=p}a.baseQueue=n=i,s.pending=null}if(i=e.baseState,n===null)e.memoizedState=i;else{a=n.next;var S=p=null,L=null,ee=a,ne=!1;do{var he=ee.lane&-536870913;if(he!==ee.lane?(qe&he)===he:(ll&he)===he){var ae=ee.revertLane;if(ae===0)L!==null&&(L=L.next={lane:0,revertLane:0,gesture:null,action:ee.action,hasEagerState:ee.hasEagerState,eagerState:ee.eagerState,next:null}),he===Gs&&(ne=!0);else if((ll&ae)===ae){ee=ee.next,ae===Gs&&(ne=!0);continue}else he={lane:0,revertLane:ee.revertLane,gesture:null,action:ee.action,hasEagerState:ee.hasEagerState,eagerState:ee.eagerState,next:null},L===null?(S=L=he,p=i):L=L.next=he,Le.lanes|=ae,Bl|=ae;he=ee.action,xs&&l(i,he),i=ee.hasEagerState?ee.eagerState:l(i,he)}else ae={lane:he,revertLane:ee.revertLane,gesture:ee.gesture,action:ee.action,hasEagerState:ee.hasEagerState,eagerState:ee.eagerState,next:null},L===null?(S=L=ae,p=i):L=L.next=ae,Le.lanes|=he,Bl|=he;ee=ee.next}while(ee!==null&&ee!==a);if(L===null?p=i:L.next=S,!ia(i,e.memoizedState)&&(Bt=!0,ne&&(l=$s,l!==null)))throw l;e.memoizedState=i,e.baseState=p,e.baseQueue=L,s.lastRenderedState=i}return n===null&&(s.lanes=0),[e.memoizedState,s.dispatch]}function gc(e){var a=Rt(),l=a.queue;if(l===null)throw Error(c(311));l.lastRenderedReducer=e;var s=l.dispatch,n=l.pending,i=a.memoizedState;if(n!==null){l.pending=null;var p=n=n.next;do i=e(i,p.action),p=p.next;while(p!==n);ia(i,a.memoizedState)||(Bt=!0),a.memoizedState=i,a.baseQueue===null&&(a.baseState=i),l.lastRenderedState=i}return[i,s]}function _0(e,a,l){var s=Le,n=Rt(),i=Qe;if(i){if(l===void 0)throw Error(c(407));l=l()}else l=a();var p=!ia((ut||n).memoizedState,l);if(p&&(n.memoizedState=l,Bt=!0),n=n.queue,vc(A0.bind(null,s,n,e),[e]),n.getSnapshot!==a||p||zt!==null&&zt.memoizedState.tag&1){if(s.flags|=2048,Qs(9,{destroy:void 0},M0.bind(null,s,n,l,a),null),pt===null)throw Error(c(349));i||(ll&127)!==0||R0(s,a,l)}return l}function R0(e,a,l){e.flags|=16384,e={getSnapshot:a,value:l},a=Le.updateQueue,a===null?(a=ri(),Le.updateQueue=a,a.stores=[e]):(l=a.stores,l===null?a.stores=[e]:l.push(e))}function M0(e,a,l,s){a.value=l,a.getSnapshot=s,D0(a)&&z0(e)}function A0(e,a,l){return l(function(){D0(a)&&z0(e)})}function D0(e){var a=e.getSnapshot;e=e.value;try{var l=a();return!ia(e,l)}catch{return!0}}function z0(e){var a=rs(e,2);a!==null&&na(a,e,2)}function bc(e){var a=ea();if(typeof e=="function"){var l=e;if(e=l(),xs){Lt(!0);try{l()}finally{Lt(!1)}}}return a.memoizedState=a.baseState=e,a.queue={pending:null,lanes:0,dispatch:null,lastRenderedReducer:sl,lastRenderedState:e},a}function B0(e,a,l,s){return e.baseState=l,fc(e,ut,typeof s=="function"?s:sl)}function Kf(e,a,l,s,n){if(di(e))throw Error(c(485));if(e=a.action,e!==null){var i={payload:n,action:e,next:null,isTransition:!0,status:"pending",value:null,reason:null,listeners:[],then:function(p){i.listeners.push(p)}};z.T!==null?l(!0):i.isTransition=!1,s(i),l=a.pending,l===null?(i.next=a.pending=i,V0(a,i)):(i.next=l.next,a.pending=l.next=i)}}function V0(e,a){var l=a.action,s=a.payload,n=e.state;if(a.isTransition){var i=z.T,p={};z.T=p;try{var S=l(n,s),L=z.S;L!==null&&L(p,S),L0(e,a,S)}catch(ee){yc(e,a,ee)}finally{i!==null&&p.types!==null&&(i.types=p.types),z.T=i}}else try{i=l(n,s),L0(e,a,i)}catch(ee){yc(e,a,ee)}}function L0(e,a,l){l!==null&&typeof l=="object"&&typeof l.then=="function"?l.then(function(s){U0(e,a,s)},function(s){return yc(e,a,s)}):U0(e,a,l)}function U0(e,a,l){a.status="fulfilled",a.value=l,H0(a),e.state=l,a=e.pending,a!==null&&(l=a.next,l===a?e.pending=null:(l=l.next,a.next=l,V0(e,l)))}function yc(e,a,l){var s=e.pending;if(e.pending=null,s!==null){s=s.next;do a.status="rejected",a.reason=l,H0(a),a=a.next;while(a!==s)}e.action=null}function H0(e){e=e.listeners;for(var a=0;a<e.length;a++)(0,e[a])()}function X0(e,a){return a}function I0(e,a){if(Qe){var l=pt.formState;if(l!==null){e:{var s=Le;if(Qe){if(vt){t:{for(var n=vt,i=ja;n.nodeType!==8;){if(!i){n=null;break t}if(n=ka(n.nextSibling),n===null){n=null;break t}}i=n.data,n=i==="F!"||i==="F"?n:null}if(n){vt=ka(n.nextSibling),s=n.data==="F!";break e}}El(s)}s=!1}s&&(a=l[0])}}return l=ea(),l.memoizedState=l.baseState=a,s={pending:null,lanes:0,dispatch:null,lastRenderedReducer:X0,lastRenderedState:a},l.queue=s,l=im.bind(null,Le,s),s.dispatch=l,s=bc(!1),i=Sc.bind(null,Le,!1,s.queue),s=ea(),n={state:a,dispatch:null,action:e,pending:null},s.queue=n,l=Kf.bind(null,Le,n,i,l),n.dispatch=l,s.memoizedState=e,[a,l,!1]}function G0(e){var a=Rt();return $0(a,ut,e)}function $0(e,a,l){if(a=fc(e,a,X0)[0],e=ii(sl)[0],typeof a=="object"&&a!==null&&typeof a.then=="function")try{var s=$r(a)}catch(p){throw p===Ks?Jn:p}else s=a;a=Rt();var n=a.queue,i=n.dispatch;return l!==a.memoizedState&&(Le.flags|=2048,Qs(9,{destroy:void 0},qf.bind(null,n,l),null)),[s,i,e]}function qf(e,a){e.action=a}function K0(e){var a=Rt(),l=ut;if(l!==null)return $0(a,l,e);Rt(),a=a.memoizedState,l=Rt();var s=l.queue.dispatch;return l.memoizedState=e,[a,s,!1]}function Qs(e,a,l,s){return e={tag:e,create:l,deps:s,inst:a,next:null},a=Le.updateQueue,a===null&&(a=ri(),Le.updateQueue=a),l=a.lastEffect,l===null?a.lastEffect=e.next=e:(s=l.next,l.next=e,e.next=s,a.lastEffect=e),e}function q0(){return Rt().memoizedState}function oi(e,a,l,s){var n=ea();Le.flags|=e,n.memoizedState=Qs(1|a,{destroy:void 0},l,s===void 0?null:s)}function ci(e,a,l,s){var n=Rt();s=s===void 0?null:s;var i=n.memoizedState.inst;ut!==null&&s!==null&&dc(s,ut.memoizedState.deps)?n.memoizedState=Qs(a,i,l,s):(Le.flags|=e,n.memoizedState=Qs(1|a,i,l,s))}function Y0(e,a){oi(8390656,8,e,a)}function vc(e,a){ci(2048,8,e,a)}function Yf(e){Le.flags|=4;var a=Le.updateQueue;if(a===null)a=ri(),Le.updateQueue=a,a.events=[e];else{var l=a.events;l===null?a.events=[e]:l.push(e)}}function P0(e){var a=Rt().memoizedState;return Yf({ref:a,nextImpl:e}),function(){if((rt&2)!==0)throw Error(c(440));return a.impl.apply(void 0,arguments)}}function Z0(e,a){return ci(4,2,e,a)}function Q0(e,a){return ci(4,4,e,a)}function J0(e,a){if(typeof a=="function"){e=e();var l=a(e);return function(){typeof l=="function"?l():a(null)}}if(a!=null)return e=e(),a.current=e,function(){a.current=null}}function W0(e,a,l){l=l!=null?l.concat([e]):null,ci(4,4,J0.bind(null,a,e),l)}function wc(){}function F0(e,a){var l=Rt();a=a===void 0?null:a;var s=l.memoizedState;return a!==null&&dc(a,s[1])?s[0]:(l.memoizedState=[e,a],e)}function em(e,a){var l=Rt();a=a===void 0?null:a;var s=l.memoizedState;if(a!==null&&dc(a,s[1]))return s[0];if(s=e(),xs){Lt(!0);try{e()}finally{Lt(!1)}}return l.memoizedState=[s,a],s}function jc(e,a,l){return l===void 0||(ll&1073741824)!==0&&(qe&261930)===0?e.memoizedState=a:(e.memoizedState=l,e=th(),Le.lanes|=e,Bl|=e,l)}function tm(e,a,l,s){return ia(l,a)?l:Ys.current!==null?(e=jc(e,l,s),ia(e,a)||(Bt=!0),e):(ll&42)===0||(ll&1073741824)!==0&&(qe&261930)===0?(Bt=!0,e.memoizedState=l):(e=th(),Le.lanes|=e,Bl|=e,a)}function am(e,a,l,s,n){var i=v.p;v.p=i!==0&&8>i?i:8;var p=z.T,S={};z.T=S,Sc(e,!1,a,l);try{var L=n(),ee=z.S;if(ee!==null&&ee(S,L),L!==null&&typeof L=="object"&&typeof L.then=="function"){var ne=If(L,s);Kr(e,a,ne,ha(e))}else Kr(e,a,s,ha(e))}catch(he){Kr(e,a,{then:function(){},status:"rejected",reason:he},ha())}finally{v.p=i,p!==null&&S.types!==null&&(p.types=S.types),z.T=p}}function Pf(){}function Nc(e,a,l,s){if(e.tag!==5)throw Error(c(476));var n=lm(e).queue;am(e,n,a,T,l===null?Pf:function(){return sm(e),l(s)})}function lm(e){var a=e.memoizedState;if(a!==null)return a;a={memoizedState:T,baseState:T,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:sl,lastRenderedState:T},next:null};var l={};return a.next={memoizedState:l,baseState:l,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:sl,lastRenderedState:l},next:null},e.memoizedState=a,e=e.alternate,e!==null&&(e.memoizedState=a),a}function sm(e){var a=lm(e);a.next===null&&(a=e.alternate.memoizedState),Kr(e,a.next.queue,{},ha())}function kc(){return Yt(cn)}function rm(){return Rt().memoizedState}function nm(){return Rt().memoizedState}function Zf(e){for(var a=e.return;a!==null;){switch(a.tag){case 24:case 3:var l=ha();e=_l(l);var s=Rl(a,e,l);s!==null&&(na(s,a,l),Hr(s,a,l)),a={cache:Fo()},e.payload=a;return}a=a.return}}function Qf(e,a,l){var s=ha();l={lane:s,revertLane:0,gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null},di(e)?om(a,l):(l=Io(e,a,l,s),l!==null&&(na(l,e,s),cm(l,a,s)))}function im(e,a,l){var s=ha();Kr(e,a,l,s)}function Kr(e,a,l,s){var n={lane:s,revertLane:0,gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null};if(di(e))om(a,n);else{var i=e.alternate;if(e.lanes===0&&(i===null||i.lanes===0)&&(i=a.lastRenderedReducer,i!==null))try{var p=a.lastRenderedState,S=i(p,l);if(n.hasEagerState=!0,n.eagerState=S,ia(S,p))return $n(e,a,n,0),pt===null&&Gn(),!1}catch{}finally{}if(l=Io(e,a,n,s),l!==null)return na(l,e,s),cm(l,a,s),!0}return!1}function Sc(e,a,l,s){if(s={lane:2,revertLane:ld(),gesture:null,action:s,hasEagerState:!1,eagerState:null,next:null},di(e)){if(a)throw Error(c(479))}else a=Io(e,l,s,2),a!==null&&na(a,e,2)}function di(e){var a=e.alternate;return e===Le||a!==null&&a===Le}function om(e,a){Ps=li=!0;var l=e.pending;l===null?a.next=a:(a.next=l.next,l.next=a),e.pending=a}function cm(e,a,l){if((l&4194048)!==0){var s=a.lanes;s&=e.pendingLanes,l|=s,a.lanes=l,jl(e,l)}}var qr={readContext:Yt,use:ni,useCallback:Et,useContext:Et,useEffect:Et,useImperativeHandle:Et,useLayoutEffect:Et,useInsertionEffect:Et,useMemo:Et,useReducer:Et,useRef:Et,useState:Et,useDebugValue:Et,useDeferredValue:Et,useTransition:Et,useSyncExternalStore:Et,useId:Et,useHostTransitionStatus:Et,useFormState:Et,useActionState:Et,useOptimistic:Et,useMemoCache:Et,useCacheRefresh:Et};qr.useEffectEvent=Et;var dm={readContext:Yt,use:ni,useCallback:function(e,a){return ea().memoizedState=[e,a===void 0?null:a],e},useContext:Yt,useEffect:Y0,useImperativeHandle:function(e,a,l){l=l!=null?l.concat([e]):null,oi(4194308,4,J0.bind(null,a,e),l)},useLayoutEffect:function(e,a){return oi(4194308,4,e,a)},useInsertionEffect:function(e,a){oi(4,2,e,a)},useMemo:function(e,a){var l=ea();a=a===void 0?null:a;var s=e();if(xs){Lt(!0);try{e()}finally{Lt(!1)}}return l.memoizedState=[s,a],s},useReducer:function(e,a,l){var s=ea();if(l!==void 0){var n=l(a);if(xs){Lt(!0);try{l(a)}finally{Lt(!1)}}}else n=a;return s.memoizedState=s.baseState=n,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:n},s.queue=e,e=e.dispatch=Qf.bind(null,Le,e),[s.memoizedState,e]},useRef:function(e){var a=ea();return e={current:e},a.memoizedState=e},useState:function(e){e=bc(e);var a=e.queue,l=im.bind(null,Le,a);return a.dispatch=l,[e.memoizedState,l]},useDebugValue:wc,useDeferredValue:function(e,a){var l=ea();return jc(l,e,a)},useTransition:function(){var e=bc(!1);return e=am.bind(null,Le,e.queue,!0,!1),ea().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,a,l){var s=Le,n=ea();if(Qe){if(l===void 0)throw Error(c(407));l=l()}else{if(l=a(),pt===null)throw Error(c(349));(qe&127)!==0||R0(s,a,l)}n.memoizedState=l;var i={value:l,getSnapshot:a};return n.queue=i,Y0(A0.bind(null,s,i,e),[e]),s.flags|=2048,Qs(9,{destroy:void 0},M0.bind(null,s,i,l,a),null),l},useId:function(){var e=ea(),a=pt.identifierPrefix;if(Qe){var l=Xa,s=Ha;l=(s&~(1<<32-bt(s)-1)).toString(32)+l,a="_"+a+"R_"+l,l=si++,0<l&&(a+="H"+l.toString(32)),a+="_"}else l=Gf++,a="_"+a+"r_"+l.toString(32)+"_";return e.memoizedState=a},useHostTransitionStatus:kc,useFormState:I0,useActionState:I0,useOptimistic:function(e){var a=ea();a.memoizedState=a.baseState=e;var l={pending:null,lanes:0,dispatch:null,lastRenderedReducer:null,lastRenderedState:null};return a.queue=l,a=Sc.bind(null,Le,!0,l),l.dispatch=a,[e,a]},useMemoCache:pc,useCacheRefresh:function(){return ea().memoizedState=Zf.bind(null,Le)},useEffectEvent:function(e){var a=ea(),l={impl:e};return a.memoizedState=l,function(){if((rt&2)!==0)throw Error(c(440));return l.impl.apply(void 0,arguments)}}},Oc={readContext:Yt,use:ni,useCallback:F0,useContext:Yt,useEffect:vc,useImperativeHandle:W0,useInsertionEffect:Z0,useLayoutEffect:Q0,useMemo:em,useReducer:ii,useRef:q0,useState:function(){return ii(sl)},useDebugValue:wc,useDeferredValue:function(e,a){var l=Rt();return tm(l,ut.memoizedState,e,a)},useTransition:function(){var e=ii(sl)[0],a=Rt().memoizedState;return[typeof e=="boolean"?e:$r(e),a]},useSyncExternalStore:_0,useId:rm,useHostTransitionStatus:kc,useFormState:G0,useActionState:G0,useOptimistic:function(e,a){var l=Rt();return B0(l,ut,e,a)},useMemoCache:pc,useCacheRefresh:nm};Oc.useEffectEvent=P0;var um={readContext:Yt,use:ni,useCallback:F0,useContext:Yt,useEffect:vc,useImperativeHandle:W0,useInsertionEffect:Z0,useLayoutEffect:Q0,useMemo:em,useReducer:gc,useRef:q0,useState:function(){return gc(sl)},useDebugValue:wc,useDeferredValue:function(e,a){var l=Rt();return ut===null?jc(l,e,a):tm(l,ut.memoizedState,e,a)},useTransition:function(){var e=gc(sl)[0],a=Rt().memoizedState;return[typeof e=="boolean"?e:$r(e),a]},useSyncExternalStore:_0,useId:rm,useHostTransitionStatus:kc,useFormState:K0,useActionState:K0,useOptimistic:function(e,a){var l=Rt();return ut!==null?B0(l,ut,e,a):(l.baseState=e,[e,l.queue.dispatch])},useMemoCache:pc,useCacheRefresh:nm};um.useEffectEvent=P0;function Ec(e,a,l,s){a=e.memoizedState,l=l(s,a),l=l==null?a:b({},a,l),e.memoizedState=l,e.lanes===0&&(e.updateQueue.baseState=l)}var Cc={enqueueSetState:function(e,a,l){e=e._reactInternals;var s=ha(),n=_l(s);n.payload=a,l!=null&&(n.callback=l),a=Rl(e,n,s),a!==null&&(na(a,e,s),Hr(a,e,s))},enqueueReplaceState:function(e,a,l){e=e._reactInternals;var s=ha(),n=_l(s);n.tag=1,n.payload=a,l!=null&&(n.callback=l),a=Rl(e,n,s),a!==null&&(na(a,e,s),Hr(a,e,s))},enqueueForceUpdate:function(e,a){e=e._reactInternals;var l=ha(),s=_l(l);s.tag=2,a!=null&&(s.callback=a),a=Rl(e,s,l),a!==null&&(na(a,e,l),Hr(a,e,l))}};function mm(e,a,l,s,n,i,p){return e=e.stateNode,typeof e.shouldComponentUpdate=="function"?e.shouldComponentUpdate(s,i,p):a.prototype&&a.prototype.isPureReactComponent?!Mr(l,s)||!Mr(n,i):!0}function hm(e,a,l,s){e=a.state,typeof a.componentWillReceiveProps=="function"&&a.componentWillReceiveProps(l,s),typeof a.UNSAFE_componentWillReceiveProps=="function"&&a.UNSAFE_componentWillReceiveProps(l,s),a.state!==e&&Cc.enqueueReplaceState(a,a.state,null)}function ps(e,a){var l=a;if("ref"in a){l={};for(var s in a)s!=="ref"&&(l[s]=a[s])}if(e=e.defaultProps){l===a&&(l=b({},l));for(var n in e)l[n]===void 0&&(l[n]=e[n])}return l}function xm(e){In(e)}function pm(e){console.error(e)}function fm(e){In(e)}function ui(e,a){try{var l=e.onUncaughtError;l(a.value,{componentStack:a.stack})}catch(s){setTimeout(function(){throw s})}}function gm(e,a,l){try{var s=e.onCaughtError;s(l.value,{componentStack:l.stack,errorBoundary:a.tag===1?a.stateNode:null})}catch(n){setTimeout(function(){throw n})}}function Tc(e,a,l){return l=_l(l),l.tag=3,l.payload={element:null},l.callback=function(){ui(e,a)},l}function bm(e){return e=_l(e),e.tag=3,e}function ym(e,a,l,s){var n=l.type.getDerivedStateFromError;if(typeof n=="function"){var i=s.value;e.payload=function(){return n(i)},e.callback=function(){gm(a,l,s)}}var p=l.stateNode;p!==null&&typeof p.componentDidCatch=="function"&&(e.callback=function(){gm(a,l,s),typeof n!="function"&&(Vl===null?Vl=new Set([this]):Vl.add(this));var S=s.stack;this.componentDidCatch(s.value,{componentStack:S!==null?S:""})})}function Jf(e,a,l,s,n){if(l.flags|=32768,s!==null&&typeof s=="object"&&typeof s.then=="function"){if(a=l.alternate,a!==null&&Is(a,l,n,!0),l=ca.current,l!==null){switch(l.tag){case 31:case 13:return Na===null?Ni():l.alternate===null&&Ct===0&&(Ct=3),l.flags&=-257,l.flags|=65536,l.lanes=n,s===Wn?l.flags|=16384:(a=l.updateQueue,a===null?l.updateQueue=new Set([s]):a.add(s),ed(e,s,n)),!1;case 22:return l.flags|=65536,s===Wn?l.flags|=16384:(a=l.updateQueue,a===null?(a={transitions:null,markerInstances:null,retryQueue:new Set([s])},l.updateQueue=a):(l=a.retryQueue,l===null?a.retryQueue=new Set([s]):l.add(s)),ed(e,s,n)),!1}throw Error(c(435,l.tag))}return ed(e,s,n),Ni(),!1}if(Qe)return a=ca.current,a!==null?((a.flags&65536)===0&&(a.flags|=256),a.flags|=65536,a.lanes=n,s!==Po&&(e=Error(c(422),{cause:s}),zr(ya(e,l)))):(s!==Po&&(a=Error(c(423),{cause:s}),zr(ya(a,l))),e=e.current.alternate,e.flags|=65536,n&=-n,e.lanes|=n,s=ya(s,l),n=Tc(e.stateNode,s,n),rc(e,n
vendor: 14,704 bytes, line 2052
2052),Ct!==4&&(Ct=2)),!1;var i=Error(c(520),{cause:s});if(i=ya(i,l),en===null?en=[i]:en.push(i),Ct!==4&&(Ct=2),a===null)return!0;s=ya(s,l),l=a;do{switch(l.tag){case 3:return l.flags|=65536,e=n&-n,l.lanes|=e,e=Tc(l.stateNode,s,e),rc(l,e),!1;case 1:if(a=l.type,i=l.stateNode,(l.flags&128)===0&&(typeof a.getDerivedStateFromError=="function"||i!==null&&typeof i.componentDidCatch=="function"&&(Vl===null||!Vl.has(i))))return l.flags|=65536,n&=-n,l.lanes|=n,n=bm(n),ym(n,e,l,s),rc(l,n),!1}l=l.return}while(l!==null);return!1}var _c=Error(c(461)),Bt=!1;function Pt(e,a,l,s){a.child=e===null?N0(a,null,l,s):hs(a,e.child,l,s)}function vm(e,a,l,s,n){l=l.render;var i=a.ref;if("ref"in s){var p={};for(var S in s)S!=="ref"&&(p[S]=s[S])}else p=s;return cs(a),s=uc(e,a,l,p,i,n),S=mc(),e!==null&&!Bt?(hc(e,a,n),rl(e,a,n)):(Qe&&S&&qo(a),a.flags|=1,Pt(e,a,s,n),a.child)}function wm(e,a,l,s,n){if(e===null){var i=l.type;return typeof i=="function"&&!Go(i)&&i.defaultProps===void 0&&l.compare===null?(a.tag=15,a.type=i,jm(e,a,i,s,n)):(e=qn(l.type,null,s,a,a.mode,n),e.ref=a.ref,e.return=a,a.child=e)}if(i=e.child,!Lc(e,n)){var p=i.memoizedProps;if(l=l.compare,l=l!==null?l:Mr,l(p,s)&&e.ref===a.ref)return rl(e,a,n)}return a.flags|=1,e=Fa(i,s),e.ref=a.ref,e.return=a,a.child=e}function jm(e,a,l,s,n){if(e!==null){var i=e.memoizedProps;if(Mr(i,s)&&e.ref===a.ref)if(Bt=!1,a.pendingProps=s=i,Lc(e,n))(e.flags&131072)!==0&&(Bt=!0);else return a.lanes=e.lanes,rl(e,a,n)}return Rc(e,a,l,s,n)}function Nm(e,a,l,s){var n=s.children,i=e!==null?e.memoizedState:null;if(e===null&&a.stateNode===null&&(a.stateNode={_visibility:1,_pendingMarkers:null,_retryCache:null,_transitions:null}),s.mode==="hidden"){if((a.flags&128)!==0){if(i=i!==null?i.baseLanes|l:l,e!==null){for(s=a.child=e.child,n=0;s!==null;)n=n|s.lanes|s.childLanes,s=s.sibling;s=n&~i}else s=0,a.child=null;return km(e,a,i,l,s)}if((l&536870912)!==0)a.memoizedState={baseLanes:0,cachePool:null},e!==null&&Qn(a,i!==null?i.cachePool:null),i!==null?O0(a,i):ic(),E0(a);else return s=a.lanes=536870912,km(e,a,i!==null?i.baseLanes|l:l,l,s)}else i!==null?(Qn(a,i.cachePool),O0(a,i),Al(),a.memoizedState=null):(e!==null&&Qn(a,null),ic(),Al());return Pt(e,a,n,l),a.child}function Yr(e,a){return e!==null&&e.tag===22||a.stateNode!==null||(a.stateNode={_visibility:1,_pendingMarkers:null,_retryCache:null,_transitions:null}),a.sibling}function km(e,a,l,s,n){var i=tc();return i=i===null?null:{parent:Dt._currentValue,pool:i},a.memoizedState={baseLanes:l,cachePool:i},e!==null&&Qn(a,null),ic(),E0(a),e!==null&&Is(e,a,s,!0),a.childLanes=n,null}function mi(e,a){return a=xi({mode:a.mode,children:a.children},e.mode),a.ref=e.ref,e.child=a,a.return=e,a}function Sm(e,a,l){return hs(a,e.child,null,l),e=mi(a,a.pendingProps),e.flags|=2,da(a),a.memoizedState=null,e}function Wf(e,a,l){var s=a.pendingProps,n=(a.flags&128)!==0;if(a.flags&=-129,e===null){if(Qe){if(s.mode==="hidden")return e=mi(a,s),a.lanes=536870912,Yr(null,e);if(cc(a),(e=vt)?(e=Vh(e,ja),e=e!==null&&e.data==="&"?e:null,e!==null&&(a.memoizedState={dehydrated:e,treeContext:Sl!==null?{id:Ha,overflow:Xa}:null,retryLane:536870912,hydrationErrors:null},l=o0(e),l.return=a,a.child=l,qt=a,vt=null)):e=null,e===null)throw El(a);return a.lanes=536870912,null}return mi(a,s)}var i=e.memoizedState;if(i!==null){var p=i.dehydrated;if(cc(a),n)if(a.flags&256)a.flags&=-257,a=Sm(e,a,l);else if(a.memoizedState!==null)a.child=e.child,a.flags|=128,a=null;else throw Error(c(558));else if(Bt||Is(e,a,l,!1),n=(l&e.childLanes)!==0,Bt||n){if(s=pt,s!==null&&(p=Nl(s,l),p!==0&&p!==i.retryLane))throw i.retryLane=p,rs(e,p),na(s,e,p),_c;Ni(),a=Sm(e,a,l)}else e=i.treeContext,vt=ka(p.nextSibling),qt=a,Qe=!0,Ol=null,ja=!1,e!==null&&u0(a,e),a=mi(a,s),a.flags|=4096;return a}return e=Fa(e.child,{mode:s.mode,children:s.children}),e.ref=a.ref,a.child=e,e.return=a,e}function hi(e,a){var l=a.ref;if(l===null)e!==null&&e.ref!==null&&(a.flags|=4194816);else{if(typeof l!="function"&&typeof l!="object")throw Error(c(284));(e===null||e.ref!==l)&&(a.flags|=4194816)}}function Rc(e,a,l,s,n){return cs(a),l=uc(e,a,l,s,void 0,n),s=mc(),e!==null&&!Bt?(hc(e,a,n),rl(e,a,n)):(Qe&&s&&qo(a),a.flags|=1,Pt(e,a,l,n),a.child)}function Om(e,a,l,s,n,i){return cs(a),a.updateQueue=null,l=T0(a,s,l,n),C0(e),s=mc(),e!==null&&!Bt?(hc(e,a,i),rl(e,a,i)):(Qe&&s&&qo(a),a.flags|=1,Pt(e,a,l,i),a.child)}function Em(e,a,l,s,n){if(cs(a),a.stateNode===null){var i=Ls,p=l.contextType;typeof p=="object"&&p!==null&&(i=Yt(p)),i=new l(s,i),a.memoizedState=i.state!==null&&i.state!==void 0?i.state:null,i.updater=Cc,a.stateNode=i,i._reactInternals=a,i=a.stateNode,i.props=s,i.state=a.memoizedState,i.refs={},lc(a),p=l.contextType,i.context=typeof p=="object"&&p!==null?Yt(p):Ls,i.state=a.memoizedState,p=l.getDerivedStateFromProps,typeof p=="function"&&(Ec(a,l,p,s),i.state=a.memoizedState),typeof l.getDerivedStateFromProps=="function"||typeof i.getSnapshotBeforeUpdate=="function"||typeof i.UNSAFE_componentWillMount!="function"&&typeof i.componentWillMount!="function"||(p=i.state,typeof i.componentWillMount=="function"&&i.componentWillMount(),typeof i.UNSAFE_componentWillMount=="function"&&i.UNSAFE_componentWillMount(),p!==i.state&&Cc.enqueueReplaceState(i,i.state,null),Ir(a,s,i,n),Xr(),i.state=a.memoizedState),typeof i.componentDidMount=="function"&&(a.flags|=4194308),s=!0}else if(e===null){i=a.stateNode;var S=a.memoizedProps,L=ps(l,S);i.props=L;var ee=i.context,ne=l.contextType;p=Ls,typeof ne=="object"&&ne!==null&&(p=Yt(ne));var he=l.getDerivedStateFromProps;ne=typeof he=="function"||typeof i.getSnapshotBeforeUpdate=="function",S=a.pendingProps!==S,ne||typeof i.UNSAFE_componentWillReceiveProps!="function"&&typeof i.componentWillReceiveProps!="function"||(S||ee!==p)&&hm(a,i,s,p),Tl=!1;var ae=a.memoizedState;i.state=ae,Ir(a,s,i,n),Xr(),ee=a.memoizedState,S||ae!==ee||Tl?(typeof he=="function"&&(Ec(a,l,he,s),ee=a.memoizedState),(L=Tl||mm(a,l,L,s,ae,ee,p))?(ne||typeof i.UNSAFE_componentWillMount!="function"&&typeof i.componentWillMount!="function"||(typeof i.componentWillMount=="function"&&i.componentWillMount(),typeof i.UNSAFE_componentWillMount=="function"&&i.UNSAFE_componentWillMount()),typeof i.componentDidMount=="function"&&(a.flags|=4194308)):(typeof i.componentDidMount=="function"&&(a.flags|=4194308),a.memoizedProps=s,a.memoizedState=ee),i.props=s,i.state=ee,i.context=p,s=L):(typeof i.componentDidMount=="function"&&(a.flags|=4194308),s=!1)}else{i=a.stateNode,sc(e,a),p=a.memoizedProps,ne=ps(l,p),i.props=ne,he=a.pendingProps,ae=i.context,ee=l.contextType,L=Ls,typeof ee=="object"&&ee!==null&&(L=Yt(ee)),S=l.getDerivedStateFromProps,(ee=typeof S=="function"||typeof i.getSnapshotBeforeUpdate=="function")||typeof i.UNSAFE_componentWillReceiveProps!="function"&&typeof i.componentWillReceiveProps!="function"||(p!==he||ae!==L)&&hm(a,i,s,L),Tl=!1,ae=a.memoizedState,i.state=ae,Ir(a,s,i,n),Xr();var re=a.memoizedState;p!==he||ae!==re||Tl||e!==null&&e.dependencies!==null&&Pn(e.dependencies)?(typeof S=="function"&&(Ec(a,l,S,s),re=a.memoizedState),(ne=Tl||mm(a,l,ne,s,ae,re,L)||e!==null&&e.dependencies!==null&&Pn(e.dependencies))?(ee||typeof i.UNSAFE_componentWillUpdate!="function"&&typeof i.componentWillUpdate!="function"||(typeof i.componentWillUpdate=="function"&&i.componentWillUpdate(s,re,L),typeof i.UNSAFE_componentWillUpdate=="function"&&i.UNSAFE_componentWillUpdate(s,re,L)),typeof i.componentDidUpdate=="function"&&(a.flags|=4),typeof i.getSnapshotBeforeUpdate=="function"&&(a.flags|=1024)):(typeof i.componentDidUpdate!="function"||p===e.memoizedProps&&ae===e.memoizedState||(a.flags|=4),typeof i.getSnapshotBeforeUpdate!="function"||p===e.memoizedProps&&ae===e.memoizedState||(a.flags|=1024),a.memoizedProps=s,a.memoizedState=re),i.props=s,i.state=re,i.context=L,s=ne):(typeof i.componentDidUpdate!="function"||p===e.memoizedProps&&ae===e.memoizedState||(a.flags|=4),typeof i.getSnapshotBeforeUpdate!="function"||p===e.memoizedProps&&ae===e.memoizedState||(a.flags|=1024),s=!1)}return i=s,hi(e,a),s=(a.flags&128)!==0,i||s?(i=a.stateNode,l=s&&typeof l.getDerivedStateFromError!="function"?null:i.render(),a.flags|=1,e!==null&&s?(a.child=hs(a,e.child,null,n),a.child=hs(a,null,l,n)):Pt(e,a,l,n),a.memoizedState=i.state,e=a.child):e=rl(e,a,n),e}function Cm(e,a,l,s){return is(),a.flags|=256,Pt(e,a,l,s),a.child}var Mc={dehydrated:null,treeContext:null,retryLane:0,hydrationErrors:null};function Ac(e){return{baseLanes:e,cachePool:g0()}}function Dc(e,a,l){return e=e!==null?e.childLanes&~l:0,a&&(e|=ma),e}function Tm(e,a,l){var s=a.pendingProps,n=!1,i=(a.flags&128)!==0,p;if((p=i)||(p=e!==null&&e.memoizedState===null?!1:(_t.current&2)!==0),p&&(n=!0,a.flags&=-129),p=(a.flags&32)!==0,a.flags&=-33,e===null){if(Qe){if(n?Ml(a):Al(),(e=vt)?(e=Vh(e,ja),e=e!==null&&e.data!=="&"?e:null,e!==null&&(a.memoizedState={dehydrated:e,treeContext:Sl!==null?{id:Ha,overflow:Xa}:null,retryLane:536870912,hydrationErrors:null},l=o0(e),l.return=a,a.child=l,qt=a,vt=null)):e=null,e===null)throw El(a);return fd(e)?a.lanes=32:a.lanes=536870912,null}var S=s.children;return s=s.fallback,n?(Al(),n=a.mode,S=xi({mode:"hidden",children:S},n),s=ns(s,n,l,null),S.return=a,s.return=a,S.sibling=s,a.child=S,s=a.child,s.memoizedState=Ac(l),s.childLanes=Dc(e,p,l),a.memoizedState=Mc,Yr(null,s)):(Ml(a),zc(a,S))}var L=e.memoizedState;if(L!==null&&(S=L.dehydrated,S!==null)){if(i)a.flags&256?(Ml(a),a.flags&=-257,a=Bc(e,a,l)):a.memoizedState!==null?(Al(),a.child=e.child,a.flags|=128,a=null):(Al(),S=s.fallback,n=a.mode,s=xi({mode:"visible",children:s.children},n),S=ns(S,n,l,null),S.flags|=2,s.return=a,S.return=a,s.sibling=S,a.child=s,hs(a,e.child,null,l),s=a.child,s.memoizedState=Ac(l),s.childLanes=Dc(e,p,l),a.memoizedState=Mc,a=Yr(null,s));else if(Ml(a),fd(S)){if(p=S.nextSibling&&S.nextSibling.dataset,p)var ee=p.dgst;p=ee,s=Error(c(419)),s.stack="",s.digest=p,zr({value:s,source:null,stack:null}),a=Bc(e,a,l)}else if(Bt||Is(e,a,l,!1),p=(l&e.childLanes)!==0,Bt||p){if(p=pt,p!==null&&(s=Nl(p,l),s!==0&&s!==L.retryLane))throw L.retryLane=s,rs(e,s),na(p,e,s),_c;pd(S)||Ni(),a=Bc(e,a,l)}else pd(S)?(a.flags|=192,a.child=e.child,a=null):(e=L.treeContext,vt=ka(S.nextSibling),qt=a,Qe=!0,Ol=null,ja=!1,e!==null&&u0(a,e),a=zc(a,s.children),a.flags|=4096);return a}return n?(Al(),S=s.fallback,n=a.mode,L=e.child,ee=L.sibling,s=Fa(L,{mode:"hidden",children:s.children}),s.subtreeFlags=L.subtreeFlags&65011712,ee!==null?S=Fa(ee,S):(S=ns(S,n,l,null),S.flags|=2),S.return=a,s.return=a,s.sibling=S,a.child=s,Yr(null,s),s=a.child,S=e.child.memoizedState,S===null?S=Ac(l):(n=S.cachePool,n!==null?(L=Dt._currentValue,n=n.parent!==L?{parent:L,pool:L}:n):n=g0(),S={baseLanes:S.baseLanes|l,cachePool:n}),s.memoizedState=S,s.childLanes=Dc(e,p,l),a.memoizedState=Mc,Yr(e.child,s)):(Ml(a),l=e.child,e=l.sibling,l=Fa(l,{mode:"visible",children:s.children}),l.return=a,l.sibling=null,e!==null&&(p=a.deletions,p===null?(a.deletions=[e],a.flags|=16):p.push(e)),a.child=l,a.memoizedState=null,l)}function zc(e,a){return a=xi({mode:"visible",children:a},e.mode),a.return=e,e.child=a}function xi(e,a){return e=oa(22,e,null,a),e.lanes=0,e}function Bc(e,a,l){return hs(a,e.child,null,l),e=zc(a,a.pendingProps.children),e.flags|=2,a.memoizedState=null,e}function _m(e,a,l){e.lanes|=a;var s=e.alternate;s!==null&&(s.lanes|=a),Jo(e.return,a,l)}function Vc(e,a,l,s,n,i){var p=e.memoizedState;p===null?e.memoizedState={isBackwards:a,rendering:null,renderingStartTime:0,last:s,tail:l,tailMode:n,treeForkCount:i}:(p.isBackwards=a,p.rendering=null,p.renderingStartTime=0,p.last=s,p.tail=l,p.tailMode=n,p.treeForkCount=i)}function Rm(e,a,l){var s=a.pendingProps,n=s.revealOrder,i=s.tail;s=s.children;var p=_t.current,S=(p&2)!==0;if(S?(p=p&1|2,a.flags|=128):p&=1,M(_t,p),Pt(e,a,s,l),s=Qe?Dr:0,!S&&e!==null&&(e.flags&128)!==0)e:for(e=a.child;e!==null;){if(e.tag===13)e.memoizedState!==null&&_m(e,l,a);else if(e.tag===19)_m(e,l,a);else if(e.child!==null){e.child.return=e,e=e.child;continue}if(e===a)break e;for(;e.sibling===null;){if(e.return===null||e.return===a)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}switch(n){case"forwards":for(l=a.child,n=null;l!==null;)e=l.alternate,e!==null&&ai(e)===null&&(n=l),l=l.sibling;l=n,l===null?(n=a.child,a.child=null):(n=l.sibling,l.sibling=null),Vc(a,!1,n,l,i,s);break;case"backwards":case"unstable_legacy-backwards":for(l=null,n=a.child,a.child=null;n!==null;){if(e=n.alternate,e!==null&&ai(e)===null){a.child=n;break}e=n.sibling,n.sibling=l,l=n,n=e}Vc(a,!0,l,null,i,s);break;case"together":Vc(a,!1,null,null,void 0,s);break;default:a.memoizedState=null}return a.child}function rl(e,a,l){if(e!==null&&(a.dependencies=e.dependencies),Bl|=a.lanes,(l&a.childLanes)===0)if(e!==null){if(Is(e,a,l,!1),(l&a.childLanes)===0)return null}else return null;if(e!==null&&a.child!==e.child)throw Error(c(153));if(a.child!==null){for(e=a.child,l=Fa(e,e.pendingProps),a.child=l,l.return=a;e.sibling!==null;)e=e.sibling,l=l.sibling=Fa(e,e.pendingProps),l.return=a;l.sibling=null}return a.child}function Lc(e,a){return(e.lanes&a)!==0?!0:(e=e.dependencies,!!(e!==null&&Pn(e)))}function Ff(e,a,l){switch(a.tag){case 3:je(a,a.stateNode.containerInfo),Cl(a,Dt,e.memoizedState.cache),is();break;case 27:case 5:Ee(a);break;case 4:je(a,a.stateNode.containerInfo);break;case 10:Cl(a,a.type,a.memoizedProps.value);break;case 31:if(a.memoizedState!==null)return a.flags|=128,cc(a),null;break;case 13:var s=a.memoizedState;if(s!==null)return s.dehydrated!==null?(Ml(a),a.flags|=128,null):(l&a.child.childLanes)!==0?Tm(e,a,l):(Ml(a),e=rl(e,a,l),e!==null?e.sibling:null);Ml(a);break;case 19:var n=(e.flags&128)!==0;if(s=(l&a.childLanes)!==0,s||(Is(e,a,l,!1),s=(l&a.childLanes)!==0),n){if(s)return Rm(e,a,l);a.flags|=128}if(n=a.memoizedState,n!==null&&(n.rendering=null,n.tail=null,n.lastEffect=null),M(_t,_t.current),s)break;return null;case 22:return a.lanes=0,Nm(e,a,l,a.pendingProps);case 24:Cl(a,Dt,e.memoizedState.cache)}return rl(e,a,l)}function Mm(e,a,l){if(e!==null)if(e.memoizedProps!==a.pendingProps)Bt=!0;else{if(!Lc(e,l)&&(a.flags&128)===0)return Bt=!1,Ff(e,a,l);Bt=(e.flags&131072)!==0}else Bt=!1,Qe&&(a.flags&1048576)!==0&&d0(a,Dr,a.index);switch(a.lanes=0,a.tag){case 16:e:{var s=a.pendingProps;if(e=us(a.elementType),a.type=e,typeof e=="function")Go(e)?(s=ps(e,s),a.tag=1,a=Em(null,a,e,s,l)):(a.tag=0,a=Rc(null,a,e,s,l));else{if(e!=null){var n=e.$$typeof;if(n===te){a.tag=11,a=vm(null,a,e,s,l);break e}else if(n===H){a.tag=14,a=wm(null,a,e,s,l);break e}}throw a=pe(e)||e,Error(c(306,a,""))}}return a;case 0:return Rc(e,a,a.type,a.pendingProps,l);case 1:return s=a.type,n=ps(s,a.pendingProps),Em(e,a,s,n,l);case 3:e:{if(je(a,a.stateNode.containerInfo),e===null)throw Error(c(387));s=a.pendingProps;var i=a.memoizedState;n=i.element,sc(e,a),Ir(a,s,null,l);var p=a.memoizedState;
vendor: 4,884 bytes, line 2052
2052if(s=p.cache,Cl(a,Dt,s),s!==i.cache&&Wo(a,[Dt],l,!0),Xr(),s=p.element,i.isDehydrated)if(i={element:s,isDehydrated:!1,cache:p.cache},a.updateQueue.baseState=i,a.memoizedState=i,a.flags&256){a=Cm(e,a,s,l);break e}else if(s!==n){n=ya(Error(c(424)),a),zr(n),a=Cm(e,a,s,l);break e}else{switch(e=a.stateNode.containerInfo,e.nodeType){case 9:e=e.body;break;default:e=e.nodeName==="HTML"?e.ownerDocument.body:e}for(vt=ka(e.firstChild),qt=a,Qe=!0,Ol=null,ja=!0,l=N0(a,null,s,l),a.child=l;l;)l.flags=l.flags&-3|4096,l=l.sibling}else{if(is(),s===n){a=rl(e,a,l);break e}Pt(e,a,s,l)}a=a.child}return a;case 26:return hi(e,a),e===null?(l=Gh(a.type,null,a.pendingProps,null))?a.memoizedState=l:Qe||(l=a.type,e=a.pendingProps,s=_i(xe.current).createElement(l),s[Nt]=a,s[Tt]=e,Zt(s,l,e),It(s),a.stateNode=s):a.memoizedState=Gh(a.type,e.memoizedProps,a.pendingProps,e.memoizedState),null;case 27:return Ee(a),e===null&&Qe&&(s=a.stateNode=Hh(a.type,a.pendingProps,xe.current),qt=a,ja=!0,n=vt,Xl(a.type)?(gd=n,vt=ka(s.firstChild)):vt=n),Pt(e,a,a.pendingProps.children,l),hi(e,a),e===null&&(a.flags|=4194304),a.child;case 5:return e===null&&Qe&&((n=s=vt)&&(s=Tg(s,a.type,a.pendingProps,ja),s!==null?(a.stateNode=s,qt=a,vt=ka(s.firstChild),ja=!1,n=!0):n=!1),n||El(a)),Ee(a),n=a.type,i=a.pendingProps,p=e!==null?e.memoizedProps:null,s=i.children,md(n,i)?s=null:p!==null&&md(n,p)&&(a.flags|=32),a.memoizedState!==null&&(n=uc(e,a,$f,null,null,l),cn._currentValue=n),hi(e,a),Pt(e,a,s,l),a.child;case 6:return e===null&&Qe&&((e=l=vt)&&(l=_g(l,a.pendingProps,ja),l!==null?(a.stateNode=l,qt=a,vt=null,e=!0):e=!1),e||El(a)),null;case 13:return Tm(e,a,l);case 4:return je(a,a.stateNode.containerInfo),s=a.pendingProps,e===null?a.child=hs(a,null,s,l):Pt(e,a,s,l),a.child;case 11:return vm(e,a,a.type,a.pendingProps,l);case 7:return Pt(e,a,a.pendingProps,l),a.child;case 8:return Pt(e,a,a.pendingProps.children,l),a.child;case 12:return Pt(e,a,a.pendingProps.children,l),a.child;case 10:return s=a.pendingProps,Cl(a,a.type,s.value),Pt(e,a,s.children,l),a.child;case 9:return n=a.type._context,s=a.pendingProps.children,cs(a),n=Yt(n),s=s(n),a.flags|=1,Pt(e,a,s,l),a.child;case 14:return wm(e,a,a.type,a.pendingProps,l);case 15:return jm(e,a,a.type,a.pendingProps,l);case 19:return Rm(e,a,l);case 31:return Wf(e,a,l);case 22:return Nm(e,a,l,a.pendingProps);case 24:return cs(a),s=Yt(Dt),e===null?(n=tc(),n===null&&(n=pt,i=Fo(),n.pooledCache=i,i.refCount++,i!==null&&(n.pooledCacheLanes|=l),n=i),a.memoizedState={parent:s,cache:n},lc(a),Cl(a,Dt,n)):((e.lanes&l)!==0&&(sc(e,a),Ir(a,null,null,l),Xr()),n=e.memoizedState,i=a.memoizedState,n.parent!==s?(n={parent:s,cache:s},a.memoizedState=n,a.lanes===0&&(a.memoizedState=a.updateQueue.baseState=n),Cl(a,Dt,s)):(s=i.cache,Cl(a,Dt,s),s!==n.cache&&Wo(a,[Dt],l,!0))),Pt(e,a,a.pendingProps.children,l),a.child;case 29:throw a.pendingProps}throw Error(c(156,a.tag))}function nl(e){e.flags|=4}function Uc(e,a,l,s,n){if((a=(e.mode&32)!==0)&&(a=!1),a){if(e.flags|=16777216,(n&335544128)===n)if(e.stateNode.complete)e.flags|=8192;else if(rh())e.flags|=8192;else throw ms=Wn,ac}else e.flags&=-16777217}function Am(e,a){if(a.type!=="stylesheet"||(a.state.loading&4)!==0)e.flags&=-16777217;else if(e.flags|=16777216,!Ph(a))if(rh())e.flags|=8192;else throw ms=Wn,ac}function pi(e,a){a!==null&&(e.flags|=4),e.flags&16384&&(a=e.tag!==22?Ze():536870912,e.lanes|=a,er|=a)}function Pr(e,a){if(!Qe)switch(e.tailMode){case"hidden":a=e.tail;for(var l=null;a!==null;)a.alternate!==null&&(l=a),a=a.sibling;l===null?e.tail=null:l.sibling=null;break;case"collapsed":l=e.tail;for(var s=null;l!==null;)l.alternate!==null&&(s=l),l=l.sibling;s===null?a||e.tail===null?e.tail=null:e.tail.sibling=null:s.sibling=null}}function wt(e){var a=e.alternate!==null&&e.alternate.child===e.child,l=0,s=0;if(a)for(var n=e.child;n!==null;)l|=n.lanes|n.childLanes,s|=n.subtreeFlags&65011712,s|=n.flags&65011712,n.return=e,n=n.sibling;else for(n=e.child;n!==null;)l|=n.lanes|n.childLanes,s|=n.subtreeFlags,s|=n.flags,n.return=e,n=n.sibling;return e.subtreeFlags|=s,e.childLanes=l,a}function eg(e,a,l){var s=a.pendingProps;switch(Yo(a),a.tag){case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return wt(a),null;case 1:return wt(a),null;case 3:return l=a.stateNode,s=null,e!==null&&(s=e.memoizedState.cache),a.memoizedState.cache!==s&&(a.flags|=2048),al(Dt),Ne(),l.pendingContext&&(l.context=l.pendingContext,l.pendingContext=null),(e===null||e.child===null)&&(Xs(a)?nl(a):e===null||e.memoizedState.isDehydrated&&(a.flags&256)===0||(a.flags|=1024,Zo())),wt(a),null;case 26:var n=a.type,i=a.memoizedState;return e===null?(nl(a),i!==null?(wt(a),Am(a,i)):(wt(a),Uc(a,n,null,s,l))):i?i!==e.memoizedState?(nl(a),wt(a),Am(a,i)):(wt(a),a.flags&=-16777217):(e=e.memoizedProps,e!==s&&nl(a),wt(a),Uc(a,n,e,s,l)),null;case 27:if(Ge(a),l=xe.current,n=a.type,e!==null&&a.stateNode!=null)e.memoizedProps!==s&&nl(a);
vendor: 4,486 bytes, line 2052
2052else{if(!s){if(a.stateNode===null)throw Error(c(166));return wt(a),null}e=X.current,Xs(a)?m0(a):(e=Hh(n,s,l),a.stateNode=e,nl(a))}return wt(a),null;case 5:if(Ge(a),n=a.type,e!==null&&a.stateNode!=null)e.memoizedProps!==s&&nl(a);else{if(!s){if(a.stateNode===null)throw Error(c(166));return wt(a),null}if(i=X.current,Xs(a))m0(a);else{var p=_i(xe.current);switch(i){case 1:i=p.createElementNS("http://www.w3.org/2000/svg",n);break;case 2:i=p.createElementNS("http://www.w3.org/1998/Math/MathML",n);break;default:switch(n){case"svg":i=p.createElementNS("http://www.w3.org/2000/svg",n);break;case"math":i=p.createElementNS("http://www.w3.org/1998/Math/MathML",n);break;case"script":i=p.createElement("div"),i.innerHTML="<script><\/script>",i=i.removeChild(i.firstChild);break;case"select":i=typeof s.is=="string"?p.createElement("select",{is:s.is}):p.createElement("select"),s.multiple?i.multiple=!0:s.size&&(i.size=s.size);break;default:i=typeof s.is=="string"?p.createElement(n,{is:s.is}):p.createElement(n)}}i[Nt]=a,i[Tt]=s;e:for(p=a.child;p!==null;){if(p.tag===5||p.tag===6)i.appendChild(p.stateNode);else if(p.tag!==4&&p.tag!==27&&p.child!==null){p.child.return=p,p=p.child;continue}if(p===a)break e;for(;p.sibling===null;){if(p.return===null||p.return===a)break e;p=p.return}p.sibling.return=p.return,p=p.sibling}a.stateNode=i;e:switch(Zt(i,n,s),n){case"button":case"input":case"select":case"textarea":s=!!s.autoFocus;break e;case"img":s=!0;break e;default:s=!1}s&&nl(a)}}return wt(a),Uc(a,a.type,e===null?null:e.memoizedProps,a.pendingProps,l),null;case 6:if(e&&a.stateNode!=null)e.memoizedProps!==s&&nl(a);else{if(typeof s!="string"&&a.stateNode===null)throw Error(c(166));if(e=xe.current,Xs(a)){if(e=a.stateNode,l=a.memoizedProps,s=null,n=qt,n!==null)switch(n.tag){case 27:case 5:s=n.memoizedProps}e[Nt]=a,e=!!(e.nodeValue===l||s!==null&&s.suppressHydrationWarning===!0||Th(e.nodeValue,l)),e||El(a,!0)}else e=_i(e).createTextNode(s),e[Nt]=a,a.stateNode=e}return wt(a),null;case 31:if(l=a.memoizedState,e===null||e.memoizedState!==null){if(s=Xs(a),l!==null){if(e===null){if(!s)throw Error(c(318));if(e=a.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(c(557));e[Nt]=a}else is(),(a.flags&128)===0&&(a.memoizedState=null),a.flags|=4;wt(a),e=!1}else l=Zo(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=l),e=!0;if(!e)return a.flags&256?(da(a),a):(da(a),null);if((a.flags&128)!==0)throw Error(c(558))}return wt(a),null;case 13:if(s=a.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(n=Xs(a),s!==null&&s.dehydrated!==null){if(e===null){if(!n)throw Error(c(318));if(n=a.memoizedState,n=n!==null?n.dehydrated:null,!n)throw Error(c(317));n[Nt]=a}else is(),(a.flags&128)===0&&(a.memoizedState=null),a.flags|=4;wt(a),n=!1}else n=Zo(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=n),n=!0;if(!n)return a.flags&256?(da(a),a):(da(a),null)}return da(a),(a.flags&128)!==0?(a.lanes=l,a):(l=s!==null,e=e!==null&&e.memoizedState!==null,l&&(s=a.child,n=null,s.alternate!==null&&s.alternate.memoizedState!==null&&s.alternate.memoizedState.cachePool!==null&&(n=s.alternate.memoizedState.cachePool.pool),i=null,s.memoizedState!==null&&s.memoizedState.cachePool!==null&&(i=s.memoizedState.cachePool.pool),i!==n&&(s.flags|=2048)),l!==e&&l&&(a.child.flags|=8192),pi(a,a.updateQueue),wt(a),null);case 4:return Ne(),e===null&&id(a.stateNode.containerInfo),wt(a),null;case 10:return al(a.type),wt(a),null;case 19:if(V(_t),s=a.memoizedState,s===null)return wt(a),null;if(n=(a.flags&128)!==0,i=s.rendering,i===null)if(n)Pr(s,!1);else{if(Ct!==0||e!==null&&(e.flags&128)!==0)for(e=a.child;e!==null;){if(i=ai(e),i!==null){for(a.flags|=128,Pr(s,!1),e=i.updateQueue,a.updateQueue=e,pi(a,e),a.subtreeFlags=0,e=l,l=a.child;l!==null;)i0(l,e),l=l.sibling;return M(_t,_t.current&1|2),Qe&&el(a,s.treeForkCount),a.child}e=e.sibling}s.tail!==null&&se()>vi&&(a.flags|=128,n=!0,Pr(s,!1),a.lanes=4194304)}else{if(!n)if(e=ai(i),e!==null){if(a.flags|=128,n=!0,e=e.updateQueue,a.updateQueue=e,pi(a,e),Pr(s,!0),s.tail===null&&s.tailMode==="hidden"&&!i.alternate&&!Qe)return wt(a),null}else 2*se()-s.renderingStartTime>vi&&l!==536870912&&(a.flags|=128,n=!0,Pr(s,!1),a.lanes=4194304);s.isBackwards?(i.sibling=a.child,a.child=i):(e=s.last,e!==null?e.sibling=i:a.child=i,s.last=i)}return s.tail!==null?(e=s.tail,s.rendering=e,s.tail=e.sibling,s.renderingStartTime=se(),e.sibling=null,l=_t.current,M(_t,n?l&1|2:l&1),Qe&&el(a,s.treeForkCount),e):(wt(
vendor: 23,022 bytes, line 2052
2052a),null);case 22:case 23:return da(a),oc(),s=a.memoizedState!==null,e!==null?e.memoizedState!==null!==s&&(a.flags|=8192):s&&(a.flags|=8192),s?(l&536870912)!==0&&(a.flags&128)===0&&(wt(a),a.subtreeFlags&6&&(a.flags|=8192)):wt(a),l=a.updateQueue,l!==null&&pi(a,l.retryQueue),l=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(l=e.memoizedState.cachePool.pool),s=null,a.memoizedState!==null&&a.memoizedState.cachePool!==null&&(s=a.memoizedState.cachePool.pool),s!==l&&(a.flags|=2048),e!==null&&V(ds),null;case 24:return l=null,e!==null&&(l=e.memoizedState.cache),a.memoizedState.cache!==l&&(a.flags|=2048),al(Dt),wt(a),null;case 25:return null;case 30:return null}throw Error(c(156,a.tag))}function tg(e,a){switch(Yo(a),a.tag){case 1:return e=a.flags,e&65536?(a.flags=e&-65537|128,a):null;case 3:return al(Dt),Ne(),e=a.flags,(e&65536)!==0&&(e&128)===0?(a.flags=e&-65537|128,a):null;case 26:case 27:case 5:return Ge(a),null;case 31:if(a.memoizedState!==null){if(da(a),a.alternate===null)throw Error(c(340));is()}return e=a.flags,e&65536?(a.flags=e&-65537|128,a):null;case 13:if(da(a),e=a.memoizedState,e!==null&&e.dehydrated!==null){if(a.alternate===null)throw Error(c(340));is()}return e=a.flags,e&65536?(a.flags=e&-65537|128,a):null;case 19:return V(_t),null;case 4:return Ne(),null;case 10:return al(a.type),null;case 22:case 23:return da(a),oc(),e!==null&&V(ds),e=a.flags,e&65536?(a.flags=e&-65537|128,a):null;case 24:return al(Dt),null;case 25:return null;default:return null}}function Dm(e,a){switch(Yo(a),a.tag){case 3:al(Dt),Ne();break;case 26:case 27:case 5:Ge(a);break;case 4:Ne();break;case 31:a.memoizedState!==null&&da(a);break;case 13:da(a);break;case 19:V(_t);break;case 10:al(a.type);break;case 22:case 23:da(a),oc(),e!==null&&V(ds);break;case 24:al(Dt)}}function Zr(e,a){try{var l=a.updateQueue,s=l!==null?l.lastEffect:null;if(s!==null){var n=s.next;l=n;do{if((l.tag&e)===e){s=void 0;var i=l.create,p=l.inst;s=i(),p.destroy=s}l=l.next}while(l!==n)}}catch(S){ct(a,a.return,S)}}function Dl(e,a,l){try{var s=a.updateQueue,n=s!==null?s.lastEffect:null;if(n!==null){var i=n.next;s=i;do{if((s.tag&e)===e){var p=s.inst,S=p.destroy;if(S!==void 0){p.destroy=void 0,n=a;var L=l,ee=S;try{ee()}catch(ne){ct(n,L,ne)}}}s=s.next}while(s!==i)}}catch(ne){ct(a,a.return,ne)}}function zm(e){var a=e.updateQueue;if(a!==null){var l=e.stateNode;try{S0(a,l)}catch(s){ct(e,e.return,s)}}}function Bm(e,a,l){l.props=ps(e.type,e.memoizedProps),l.state=e.memoizedState;try{l.componentWillUnmount()}catch(s){ct(e,a,s)}}function Qr(e,a){try{var l=e.ref;if(l!==null){switch(e.tag){case 26:case 27:case 5:var s=e.stateNode;break;case 30:s=e.stateNode;break;default:s=e.stateNode}typeof l=="function"?e.refCleanup=l(s):l.current=s}}catch(n){ct(e,a,n)}}function Ia(e,a){var l=e.ref,s=e.refCleanup;if(l!==null)if(typeof s=="function")try{s()}catch(n){ct(e,a,n)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof l=="function")try{l(null)}catch(n){ct(e,a,n)}else l.current=null}function Vm(e){var a=e.type,l=e.memoizedProps,s=e.stateNode;try{e:switch(a){case"button":case"input":case"select":case"textarea":l.autoFocus&&s.focus();break e;case"img":l.src?s.src=l.src:l.srcSet&&(s.srcset=l.srcSet)}}catch(n){ct(e,e.return,n)}}function Hc(e,a,l){try{var s=e.stateNode;Ng(s,e.type,l,a),s[Tt]=a}catch(n){ct(e,e.return,n)}}function Lm(e){return e.tag===5||e.tag===3||e.tag===26||e.tag===27&&Xl(e.type)||e.tag===4}function Xc(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||Lm(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.tag===27&&Xl(e.type)||e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Ic(e,a,l){var s=e.tag;if(s===5||s===6)e=e.stateNode,a?(l.nodeType===9?l.body:l.nodeName==="HTML"?l.ownerDocument.body:l).insertBefore(e,a):(a=l.nodeType===9?l.body:l.nodeName==="HTML"?l.ownerDocument.body:l,a.appendChild(e),l=l._reactRootContainer,l!=null||a.onclick!==null||(a.onclick=Ja));else if(s!==4&&(s===27&&Xl(e.type)&&(l=e.stateNode,a=null),e=e.child,e!==null))for(Ic(e,a,l),e=e.sibling;e!==null;)Ic(e,a,l),e=e.sibling}function fi(e,a,l){var s=e.tag;if(s===5||s===6)e=e.stateNode,a?l.insertBefore(e,a):l.appendChild(e);else if(s!==4&&(s===27&&Xl(e.type)&&(l=e.stateNode),e=e.child,e!==null))for(fi(e,a,l),e=e.sibling;e!==null;)fi(e,a,l),e=e.sibling}function Um(e){var a=e.stateNode,l=e.memoizedProps;try{for(var s=e.type,n=a.attributes;n.length;)a.removeAttributeNode(n[0]);Zt(a,s,l),a[Nt]=e,a[Tt]=l}catch(i){ct(e,e.return,i)}}var il=!1,Vt=!1,Gc=!1,Hm=typeof WeakSet=="function"?WeakSet:Set,Gt=null;function ag(e,a){if(e=e.containerInfo,dd=Vi,e=Wu(e),Bo(e)){if("selectionStart"in e)var l={start:e.selectionStart,end:e.selectionEnd};else e:{l=(l=e.ownerDocument)&&l.defaultView||window;var s=l.getSelection&&l.getSelection();if(s&&s.rangeCount!==0){l=s.anchorNode;var n=s.anchorOffset,i=s.focusNode;s=s.focusOffset;try{l.nodeType,i.nodeType}catch{l=null;break e}var p=0,S=-1,L=-1,ee=0,ne=0,he=e,ae=null;t:for(;;){for(var re;he!==l||n!==0&&he.nodeType!==3||(S=p+n),he!==i||s!==0&&he.nodeType!==3||(L=p+s),he.nodeType===3&&(p+=he.nodeValue.length),(re=he.firstChild)!==null;)ae=he,he=re;for(;;){if(he===e)break t;if(ae===l&&++ee===n&&(S=p),ae===i&&++ne===s&&(L=p),(re=he.nextSibling)!==null)break;he=ae,ae=he.parentNode}he=re}l=S===-1||L===-1?null:{start:S,end:L}}else l=null}l=l||{start:0,end:0}}else l=null;for(ud={focusedElem:e,selectionRange:l},Vi=!1,Gt=a;Gt!==null;)if(a=Gt,e=a.child,(a.subtreeFlags&1028)!==0&&e!==null)e.return=a,Gt=e;else for(;Gt!==null;){switch(a=Gt,i=a.alternate,e=a.flags,a.tag){case 0:if((e&4)!==0&&(e=a.updateQueue,e=e!==null?e.events:null,e!==null))for(l=0;l<e.length;l++)n=e[l],n.ref.impl=n.nextImpl;break;case 11:case 15:break;case 1:if((e&1024)!==0&&i!==null){e=void 0,l=a,n=i.memoizedProps,i=i.memoizedState,s=l.stateNode;try{var we=ps(l.type,n);e=s.getSnapshotBeforeUpdate(we,i),s.__reactInternalSnapshotBeforeUpdate=e}catch(_e){ct(l,l.return,_e)}}break;case 3:if((e&1024)!==0){if(e=a.stateNode.containerInfo,l=e.nodeType,l===9)xd(e);else if(l===1)switch(e.nodeName){case"HEAD":case"HTML":case"BODY":xd(e);break;default:e.textContent=""}}break;case 5:case 26:case 27:case 6:case 4:case 17:break;default:if((e&1024)!==0)throw Error(c(163))}if(e=a.sibling,e!==null){e.return=a.return,Gt=e;break}Gt=a.return}}function Xm(e,a,l){var s=l.flags;switch(l.tag){case 0:case 11:case 15:cl(e,l),s&4&&Zr(5,l);break;case 1:if(cl(e,l),s&4)if(e=l.stateNode,a===null)try{e.componentDidMount()}catch(p){ct(l,l.return,p)}else{var n=ps(l.type,a.memoizedProps);a=a.memoizedState;try{e.componentDidUpdate(n,a,e.__reactInternalSnapshotBeforeUpdate)}catch(p){ct(l,l.return,p)}}s&64&&zm(l),s&512&&Qr(l,l.return);break;case 3:if(cl(e,l),s&64&&(e=l.updateQueue,e!==null)){if(a=null,l.child!==null)switch(l.child.tag){case 27:case 5:a=l.child.stateNode;break;case 1:a=l.child.stateNode}try{S0(e,a)}catch(p){ct(l,l.return,p)}}break;case 27:a===null&&s&4&&Um(l);case 26:case 5:cl(e,l),a===null&&s&4&&Vm(l),s&512&&Qr(l,l.return);break;case 12:cl(e,l);break;case 31:cl(e,l),s&4&&$m(e,l);break;case 13:cl(e,l),s&4&&Km(e,l),s&64&&(e=l.memoizedState,e!==null&&(e=e.dehydrated,e!==null&&(l=ug.bind(null,l),Rg(e,l))));break;case 22:if(s=l.memoizedState!==null||il,!s){a=a!==null&&a.memoizedState!==null||Vt,n=il;var i=Vt;il=s,(Vt=a)&&!i?dl(e,l,(l.subtreeFlags&8772)!==0):cl(e,l),il=n,Vt=i}break;case 30:break;default:cl(e,l)}}function Im(e){var a=e.alternate;a!==null&&(e.alternate=null,Im(a)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(a=e.stateNode,a!==null&&yo(a)),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}var kt=null,aa=!1;function ol(e,a,l){for(l=l.child;l!==null;)Gm(e,a,l),l=l.sibling}function Gm(e,a,l){if(dt&&typeof dt.onCommitFiberUnmount=="function")try{dt.onCommitFiberUnmount(He,l)}catch{}switch(l.tag){case 26:Vt||Ia(l,a),ol(e,a,l),l.memoizedState?l.memoizedState.count--:l.stateNode&&(l=l.stateNode,l.parentNode.removeChild(l));break;case 27:Vt||Ia(l,a);var s=kt,n=aa;Xl(l.type)&&(kt=l.stateNode,aa=!1),ol(e,a,l),rn(l.stateNode),kt=s,aa=n;break;case 5:Vt||Ia(l,a);case 6:if(s=kt,n=aa,kt=null,ol(e,a,l),kt=s,aa=n,kt!==null)if(aa)try{(kt.nodeType===9?kt.body:kt.nodeName==="HTML"?kt.ownerDocument.body:kt).removeChild(l.stateNode)}catch(i){ct(l,a,i)}else try{kt.removeChild(l.stateNode)}catch(i){ct(l,a,i)}break;case 18:kt!==null&&(aa?(e=kt,zh(e.nodeType===9?e.body:e.nodeName==="HTML"?e.ownerDocument.body:e,l.stateNode),or(e)):zh(kt,l.stateNode));break;case 4:s=kt,n=aa,kt=l.stateNode.containerInfo,aa=!0,ol(e,a,l),kt=s,aa=n;break;case 0:case 11:case 14:case 15:Dl(2,l,a),Vt||Dl(4,l,a),ol(e,a,l);break;case 1:Vt||(Ia(l,a),s=l.stateNode,typeof s.componentWillUnmount=="function"&&Bm(l,a,s)),ol(e,a,l);break;case 21:ol(e,a,l);break;case 22:Vt=(s=Vt)||l.memoizedState!==null,ol(e,a,l),Vt=s;break;default:ol(e,a,l)}}function $m(e,a){if(a.memoizedState===null&&(e=a.alternate,e!==null&&(e=e.memoizedState,e!==null))){e=e.dehydrated;try{or(e)}catch(l){ct(a,a.return,l)}}}function Km(e,a){if(a.memoizedState===null&&(e=a.alternate,e!==null&&(e=e.memoizedState,e!==null&&(e=e.dehydrated,e!==null))))try{or(e)}catch(l){ct(a,a.return,l)}}function lg(e){switch(e.tag){case 31:case 13:case 19:var a=e.stateNode;return a===null&&(a=e.stateNode=new Hm),a;case 22:return e=e.stateNode,a=e._retryCache,a===null&&(a=e._retryCache=new Hm),a;default:throw Error(c(435,e.tag))}}function gi(e,a){var l=lg(e);a.forEach(function(s){if(!l.has(s)){l.add(s);var n=mg.bind(null,e,s);s.then(n,n)}})}function la(e,a){var l=a.deletions;if(l!==null)for(var s=0;s<l.length;s++){var n=l[s],i=e,p=a,S=p;e:for(;S!==null;){switch(S.tag){case 27:if(Xl(S.type)){kt=S.stateNode,aa=!1;break e}break;case 5:kt=S.stateNode,aa=!1;break e;case 3:case 4:kt=S.stateNode.containerInfo,aa=!0;break e}S=S.return}if(kt===null)throw Error(c(160));Gm(i,p,n),kt=null,aa=!1,i=n.alternate,i!==null&&(i.return=null),n.return=null}if(a.subtreeFlags&13886)for(a=a.child;a!==null;)qm(a,e),a=a.sibling}var Da=null;function qm(e,a){var l=e.alternate,s=e.flags;switch(e.tag){case 0:case 11:case 14:case 15:la(a,e),sa(e),s&4&&(Dl(3,e,e.return),Zr(3,e),Dl(5,e,e.return));break;case 1:la(a,e),sa(e),s&512&&(Vt||l===null||Ia(l,l.return)),s&64&&il&&(e=e.updateQueue,e!==null&&(s=e.callbacks,s!==null&&(l=e.shared.hiddenCallbacks,e.shared.hiddenCallbacks=l===null?s:l.concat(s))));break;case 26:var n=Da;if(la(a,e),sa(e),s&512&&(Vt||l===null||Ia(l,l.return)),s&4){var i=l!==null?l.memoizedState:null;if(s=e.memoizedState,l===null)if(s===null)if(e.stateNode===null){e:{s=e.type,l=e.memoizedProps,n=n.ownerDocument||n;t:switch(s){case"title":i=n.getElementsByTagName("title")[0],(!i||i[Nr]||i[Nt]||i.namespaceURI==="http://www.w3.org/2000/svg"||i.hasAttribute("itemprop"))&&(i=n.createElement(s),n.head.insertBefore(i,n.querySelector("head > title"))),Zt(i,s,l),i[Nt]=e,It(i),s=i;break e;case"link":var p=qh("link","href",n).get(s+(l.href||""));if(p){for(var S=0;S<p.length;S++)if(i=p[S],i.getAttribute("href")===(l.href==null||l.href===""?null:l.href)&&i.getAttribute("rel")===(l.rel==null?null:l.rel)&&i.getAttribute("title")===(l.title==null?null:l.title)&&i.getAttribute("crossorigin")===(l.crossOrigin==null?null:l.crossOrigin)){p.splice(S,1);break t}}i=n.createElement(s),Zt(i,s,l),n.head.appendChild(i);break;case"meta":if(p=qh("meta","content",n).get(s+(l.content||""))){for(S=0;S<p.length;S++)if(i=p[S],i.getAttribute("content")===(l.content==null?null:""+l.content)&&i.getAttribute("name")===(l.name==null?null:l.name)&&i.getAttribute("property")===(l.property==null?null:l.property)&&i.getAttribute("http-equiv")===(l.httpEquiv==null?null:l.httpEquiv)&&i.getAttribute("charset")===(l.charSet==null?null:l.charSet)){p.splice(S,1);break t}}i=n.createElement(s),Zt(i,s,l),n.head.appendChild(i);break;default:throw Error(c(468,s))}i[Nt]=e,It(i),s=i}e.stateNode=s}else Yh(n,e.type,e.stateNode);else e.stateNode=Kh(n,s,e.memoizedProps);else i!==s?(i===null?l.stateNode!==null&&(l=l.stateNode,l.parentNode.removeChild(l)):i.count--,s===null?Yh(n,e.type,e.stateNode):Kh(n,s,e.memoizedProps)):s===null&&e.stateNode!==null&&Hc(e,e.memoizedProps,l.memoizedProps)}break;case 27:la(a,e),sa(e),s&512&&(Vt||l===null||Ia(l,l.return)),l!==null&&s&4&&Hc(e,e.memoizedProps,l.memoizedProps);break;case 5:if(la(a,e),sa(e),s&512&&(Vt||l===null||Ia(l,l.return)),e.flags&32){n=e.stateNode;try{Rs(n,"")}catch(we){ct(e,e.return,we)}}s&4&&e.stateNode!=null&&(n=e.memoizedProps,Hc(e,n,l!==null?l.memoizedProps:n)),s&1024&&(Gc=!0);break;case 6:if(la(a,e),sa(e),s&4){if(e.stateNode===null)throw Error(c(162));s=e.memoizedProps,l=e.stateNode;try{l.nodeValue=s}catch(we){ct(e,e.return,we)}}break;case 3:if(Ai=null,n=Da,Da=Ri(a.containerInfo),la(a,e),Da=n,sa(e),s&4&&l!==null&&l.memoizedState.isDehydrated)try{or(a.containerInfo)}catch(we){ct(e,e.return,we)}Gc&&(Gc=!1,Ym(e));break;case 4:s=Da,Da=Ri(e.stateNode.containerInfo),la(a,e),sa(e),Da=s;break;case 12:la(a,e),sa(e);break;case 31:la(a,e),sa(e),s&4&&(s=e.updateQueue,s!==null&&(e.updateQueue=null,gi(e,s)));break;case 13:la(a,e),sa(e),e.child.flags&8192&&e.memoizedState!==null!=(l!==null&&l.memoizedState!==null)&&(yi=se()),s&4&&(s=e.updateQueue,s!==null&&(e.updateQueue=null,gi(e,s)));break;case 22:n=e.memoizedState!==null;var L=l!==null&&l.memoizedState!==null,ee=il,ne=Vt;if(il=ee||n,Vt=ne||L,la(a,e),Vt=ne,il=ee,sa(e),s&8192)e:for(a=e.stateNode,a._visibility=n?a._visibility&-2:a._visibility|1,n&&(l===null||L||il||Vt||fs(e)),l=null,a=e;;){if(a.tag===5||a.tag===26){if(l===null){L=l=a;try{if(i=L.stateNode,n)p=i.style,typeof p.setProperty=="function"?p.setProperty("display","none","important"):p.display="none";else{S=L.stateNode;var he=L.memoizedProps.style,ae=he!=null&&he.hasOwnProperty("display")?he.display:null;S.style.display=ae==null||typeof ae=="boolean"?"":(""+ae).trim()}}catch(we){ct(L,L.return,we)}}}else if(a.tag===6){if(l===null){L=a;try{L.stateNode.nodeValue=n?"":L.memoizedProps}catch(we){ct(L,L.return,we)}}}else if(a.tag===18){if(l===null){L=a;try{var re=L.stateNode;n?Bh(re,!0):Bh(L.stateNode,!1)}catch(we){ct(L,L.return,we)}}}else if((a.tag!==22&&a.tag!==23||a.memoizedState===null||a===e)&&a.child!==null){a.child.return=a,a=a.child;continue}if(a===e)break e;for(;a.sibling===null;){if(a.return===null||a.return===e)break e;l===a&&(l=null),a=a.return}l===a&&(l=null),a.sibling.return=a.return,a=a.sibling}s&4&&(s=e.updateQueue,s!==null&&(l=s.retryQueue,l!==null&&(s.retryQueue=null,gi(e,l))));break;case 19:la(a,e),sa(e),s&4&&(s=e.updateQueue,s!==null&&(e.updateQueue=null,gi(e,s)));break;case 30:break;case 21:break;default:la(a,e),sa(e)}}function sa(e){var a=e.flags;if(a&2){try{for(var l,s=e.return;s!==null;){if(Lm(s)){l=s;break}s=s.return}if(l==null)throw Error(c(160));switch(l.tag){case 27:var n=l.stateNode,i=Xc(e);fi(e,i,n);break;case 5:var p=l.stateNode;l.flags&32&&(Rs(p,""),l.flags&=-33);var S=Xc(e);fi(e,S,p);break;case 3:case 4:var L=l.stateNode.containerInfo,ee=Xc(e);Ic(e,ee,L);break;default:throw Error(c(161))}}catch(ne){ct(e,e.return,ne)}e.flags&=-3}a&4096&&(e.flags&=-4097)}function Ym(e){if(e.subtreeFlags&1024)for(e=e.child;e!==null;){var a=e;Ym(a),a.tag===5&&a.flags&1024&&a.stateNode.reset(),e=e.sibling}}function cl(e,a){if(a.subtreeFlags&8772)for(a=a.child;a!==null;)Xm(e,a.alternate,a),a=a.sibling}function fs(e){for(e=e.child;e!==null;){var a=e;switch(a.tag){case 0:case 11:case 14:case 15:Dl(4,a,a.return),fs(a);break;case 1:Ia(a,a.return);var l=a.stateNode;typeof l.componentWillUnmount=="function"&&Bm(a,a.return,l),fs(a);break;case 27:rn(a.stateNode);case 26:case 5:Ia(a,a.return),fs(a);break;case 22:a.memoizedState===null&&fs(a);break;case 30:fs(a);break;default:fs(a)}e=e.sibling}}function dl(e,a,l){for(l=l&&(a.subtreeFlags&8772)!==0,a=a.child;a!==null;){var s=a.alternate,n=e,i=a,p=i.flags;switch(i.tag){case 0:case 11:case 15:dl(n,i,l),Zr(4,i);break;case 1:if(dl(n,i,l),s=i,n=s.stateNode,typeof n.componentDidMount=="function")try{n.componentDidMount()}catch(ee){ct(s,s.return,ee)}if(s=i,n=s.updateQueue,n!==null){var S=s.stateNode;try{var L=n.shared.hiddenCallbacks;if(L!==null)for(n.shared.hiddenCallbacks=null,n=0;n<L.length;n++)k0(L[n],S)}catch(ee){ct(s,s.return,ee)}}l&&p&64&&zm(i),Qr(i,i.return);break;case 27:Um(i);case 26:case 5:dl(n,i,l),l&&s===null&&p&4&&Vm(i),Qr(i,i.return);break;case 12:dl(n,i,l);break;case 31:dl(n,i,l),l&&p&4&&$m(n,i);break;case 13:dl(n,i,l),l&&p&4&&Km(n,i);break;case 22:i.memoizedState===null&&dl(n,i,l),Qr(i,i.return);break;case 30:break;default:dl(n,i,l)}a=a.sibling}}function $c(e,a){var l=null;e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(l=e.memoizedState.cachePool.pool),e=null,a.memoizedState!==null&&a.memoizedState.cachePool!==null&&(e=a.memoizedState.cachePool.pool),e!==l&&(e!=null&&e.refCount++,l!=null&&Br(l))}function Kc(e,a){e=null,a.alternate!==null&&(e=a.alternate.memoizedState.cache),a=a.memoizedState.cache,a!==e&&(a.refCount++,e!=null&&Br(e))}function za(e,a,l,s){if(a.subtreeFlags&10256)for(a=a.child;a!==null;)Pm(e,a,l,s),a=a.sibling}function Pm(e,a,l,s){var n=a.flags;switch(a.tag){case 0:case 11:case 15:za(e,a,l,s),n&2048&&Zr(9,a);break;case 1:za(e,a,l,s);break;case 3:za(e,a,l,s),n&2048&&(e=null,a.alternate!==null&&(e=a.alternate.memoizedState.cache),a=a.memoizedState.cache,a!==e&&(a.refCount++,e!=null&&Br(e)));break;case 12:if(n&2048){za(e,a,l,s),e=a.stateNode;try{var i=a.memoizedProps,p=i.id,S=i.onPostCommit;typeof S=="function"&&S(p,a.alternate===null?"mount":"update",e.passiveEffectDuration,-0)}catch(L){ct(a,a.return,L)}}else za(e,a,l,s);break;case 31:za(e,a,l,s);break;case 13:za(e,a,l,s);break;case 23:break;case 22:i=a.stateNode,p=a.alternate,a.memoizedState!==null?i._visibility&2?za(e,a,l,s):Jr(e,a):i._visibility&2?za(e,a,l,s):(i._visibility|=2,Js(e,a,l,s,(a.subtreeFlags&10256)!==0||!1)),n&2048&&$c(p,a);break;case 24:za(e,a,l,s),n&2048&&Kc(a.alternate,a);break;default:za(e,a,l,s)}}function Js(e,a,l,s,n){for(n=n&&((a.subtreeFlags&10256)!==0||!1),a=a.child;a!==null;){var i=e,p=a,S=l,L=s,ee=p.flags;switch(p.tag){case 0:case 11:case 15:Js(i,p,S,L,n),Zr(8,p);break;case 23:break;case 22:var ne=p.stateNode;p.memoizedState!==null?ne._visibility&2?Js(i,p,S,L,n):Jr(i,p):(ne._visibility|=2,Js(i,p,S,L,n)),n&&ee&2048&&$c(p.alternate,p);break;case 24:Js(i,p,S,L,n),n&&ee&2048&&Kc(p.alternate,p);break;default:Js(i,p,S,L,n)}a=a.sibling}}function Jr(e,a){if(a.subtreeFlags&10256)for(a=a.child;a!==null;){var l=e,s=a,n=s.flags;switch(s.tag){case 22:Jr(l,s),n&2048&&$c(s.alternate,s);break;case 24:Jr(l,s),n&2048&&Kc(s.alternate,s);break;default:Jr(l,s)}a=a.sibling}}var Wr=8192;function Ws(e,a,l){if(e.subtreeFlags&Wr)for(e=e.child;e!==null;)Zm(e,a,l),e=e.sibling}function Zm(e,a,l){switch(e.tag){case 26:Ws(e,a,l),e.flags&Wr&&e.memoizedState!==null&&Gg(l,Da,e.memoizedState,e.memoizedProps);break;case 5:Ws(e,a,l);break;case 3:case 4:var s=Da;Da=Ri(e.stateNode.containerInfo),Ws(e,a,l),Da=s;break;case 22:e.memoizedState===null&&(s=e.alternate,s!==null&&s.memoizedState!==null?(s=Wr,Wr=16777216,Ws(e,a,l),Wr=s):Ws(e,a,l));break;default:Ws(e,a,l)}}function Qm(e){var a=e.alternate;if(a!==null&&(e=a.child,e!==null)){a.child=null;do a=e.sibling,e.sibling=null,e=a;while(e!==null)}}function Fr(e){var a=e.deletions;if((e.flags&16)!==0){if(a!==null)for(var l=0;l<a.length;l++){var s=a[l];Gt=s,Wm(s,e)}Qm(e)}if(e.subtreeFlags&10256)for(e=e.child;e!==null;)Jm(e),e=e.sibling}function Jm(e){switch(e.tag){case 0:case 11:case 15:Fr(e),e.flags&2048&&Dl(9,e,e.return);break;case 3:Fr(e);break;case 12:Fr(e);break;case 22:var a=e.stateNode;e.memoizedState!==null&&a._visibility&2&&(e.return===null||e.return.tag!==13)?(a._visibility&=-3,bi(e)):Fr(e);break;default:Fr(e)}}function bi(e){var a=e.deletions;if((e.flags&16)!==0){if(a!==null)for(var l=0;l<a.length;l++){var s=a[l];Gt=s,Wm(s,e)}Qm(e)}for(e=e.child;e!==null;){switch(a=e,a.tag){case 0:case 11:case 15:Dl(8,a,a.return),bi(a);break;case 22:l=a.stateNode,l._visibility&2&&(l._visibility&=-3,bi(a));break;default:bi(a)}e=e.sibling}}function Wm(e,a){for(;Gt!==null;){var l=Gt;switch(l.tag){case 0:case 11:case 15:Dl(8,l,a);break;case 23:case 22:if(l.memoizedState!==null&&l.memoizedState.cachePool!==null){var s=l.memoizedState.cachePool.pool;s!=null&&s.refCount++}break;case 24:Br(l.memoizedState.cache)}if(s=l.child,s!==null)s.return=l,Gt=s;else e:for(l=e;Gt!==null;){s=Gt;var n=s.sibling,i=s.return;if(Im(s),s===l){Gt=null;break e}if(n!==null){n.return=i,Gt=n;break e}Gt=i}}}var sg={getCacheForType:function(e){var a=Yt(Dt),l=a.data.get(e);return l===void 0&&(l=e(),a.data.set(e,l)),l},cacheSignal:function(){return Yt(Dt).controller.signal}},rg=typeof WeakMap=="function"?WeakMap:Map,rt=0,pt=null,$e=null,qe=0,ot=0,ua=null,zl=!1,Fs=!1,qc=!1,ul=0,Ct=0,Bl=0,gs=0,Yc=0,ma=0,er=0,en=null,ra=null,Pc=!1,yi=0,Fm=0,vi=1/0,wi=null,Vl=null,Ut=0,Ll=null,tr=null,ml=0,Zc=0,Qc=null,eh=null,tn=0,Jc=null;function ha(){return(rt&2)!==0&&qe!==0?qe&-qe:z.T!==null?ld():fe()}function th(){if(ma===0)if((qe&536870912)===0||Qe){var e=We;We<<=1,(We&3932160)===0&&(We=262144),ma=e}else ma=536870912;return e=ca.current,e!==null&&(e.flags|=32),ma}function na(e,a,l){(e===pt&&(ot===2||ot===9)||e.cancelPendingCommit!==null)&&(ar(e,0),Ul(e,qe,ma,!1)),Ra(e,l),((rt&2)===0||e!==pt)&&(e===pt&&((rt&2)===0&&(gs|=l),Ct===4&&Ul(e,qe,ma,!1)),Ga(e))}function ah(e,a,l){if((rt&6)!==0)throw Error(c(327));var s=!l&&(a&127)===0&&(a&e.expiredLanes)===0||Be(e,a),n=s?og(e,a):Fc(e,a,!0),i=s;do{if(n===0){Fs&&!s&&Ul(e,a,0,!1);break}else{if(l=e.current.alternate,i&&!ng(l)){n=Fc(e,a,!1),i=!1;continue}if(n===2){if(i=a,e.errorRecoveryDisabledLanes&i)var p=0;else p=e.pendingLanes&-536870913,p=p!==0?p:p&536870912?536870912:0;if(p!==0){a=p;e:{var S=e;n=en;var L=S.current.memoizedState.isDehydrated;if(L&&(ar(S,p).flags|=256),p=Fc(S,p,!1),p!==2){if(qc&&!L){S.errorRecoveryDisabledLanes|=i,gs|=i,n=4;break e}i=ra,ra=n,i!==null&&(ra===null?ra=i:ra.push.apply(ra,i))}n=p}if(i=!1,n!==2)continue}}if(n===1){ar(e,0),Ul(e,a,0,!0);break}e:{switch(s=e,i=n,i){case 0:case 1:throw Error(c(345));case 4:if((a&4194048)!==a)break;case 6:Ul(s,a,ma,!zl);break e;case 2:ra=null;break;case 3:case 5:break;default:throw Error(c(329))}if((a&62914560)===a&&(n=yi+300-se(),10<n)){if(Ul(s,a,ma,!zl),Ie(s,0,!0)!==0)break e;ml=a,s.timeoutHandle=Ah(lh.bind(null,s,l,ra,wi,Pc,a,ma,gs,er,zl,i,"Throttled",-0,0),n);break e}lh(s,l,ra,wi,Pc,a,ma,gs,er,zl,i,null,-0,0)}}break}while(!0);Ga(e)}function lh(e,a,l,s,n,i,p,S,L,ee,ne,he,ae,re){if(e.timeoutHandle=-1,he=a.subtreeFlags,he&8192||(he&16785408)===16785408){he={stylesheets:null,count:0,imgCount:0,imgBytes:0,suspenseyImages:[],waitingForImages:!0,waitingForViewTransition:!1,unsuspend:Ja},Zm(a,i,he);var we=(i&62914560)===i?yi-se():(i&4194048)===i?Fm-se():0;if(we=$g(he,we),we!==null){ml=i,e.cancelPendingCommit=we(uh.bind(null,e,a,i,l,s,n,p,S,L,ne,he,null,ae,re)),Ul(e,i,p,!ee);return}}uh(e,a,i,l,s,n,p,S,L)}function ng(e){for(var a=e;;){var l=a.tag;
vendor: 22,809 bytes, lines 2052-2053
2052if((l===0||l===11||l===15)&&a.flags&16384&&(l=a.updateQueue,l!==null&&(l=l.stores,l!==null)))for(var s=0;s<l.length;s++){var n=l[s],i=n.getSnapshot;n=n.value;try{if(!ia(i(),n))return!1}catch{return!1}}if(l=a.child,a.subtreeFlags&16384&&l!==null)l.return=a,a=l;else{if(a===e)break;for(;a.sibling===null;){if(a.return===null||a.return===e)return!0;a=a.return}a.sibling.return=a.return,a=a.sibling}}return!0}function Ul(e,a,l,s){a&=~Yc,a&=~gs,e.suspendedLanes|=a,e.pingedLanes&=~a,s&&(e.warmLanes|=a),s=e.expirationTimes;for(var n=a;0<n;){var i=31-bt(n),p=1<<i;s[i]=-1,n&=~p}l!==0&&wl(e,l,a)}function ji(){return(rt&6)===0?(an(0),!1):!0}function Wc(){if($e!==null){if(ot===0)var e=$e.return;else e=$e,tl=os=null,xc(e),qs=null,Lr=0,e=$e;for(;e!==null;)Dm(e.alternate,e),e=e.return;$e=null}}function ar(e,a){var l=e.timeoutHandle;l!==-1&&(e.timeoutHandle=-1,Og(l)),l=e.cancelPendingCommit,l!==null&&(e.cancelPendingCommit=null,l()),ml=0,Wc(),pt=e,$e=l=Fa(e.current,null),qe=a,ot=0,ua=null,zl=!1,Fs=Be(e,a),qc=!1,er=ma=Yc=gs=Bl=Ct=0,ra=en=null,Pc=!1,(a&8)!==0&&(a|=a&32);var s=e.entangledLanes;if(s!==0)for(e=e.entanglements,s&=a;0<s;){var n=31-bt(s),i=1<<n;a|=e[n],s&=~i}return ul=a,Gn(),l}function sh(e,a){Le=null,z.H=qr,a===Ks||a===Jn?(a=v0(),ot=3):a===ac?(a=v0(),ot=4):ot=a===_c?8:a!==null&&typeof a=="object"&&typeof a.then=="function"?6:1,ua=a,$e===null&&(Ct=1,ui(e,ya(a,e.current)))}function rh(){var e=ca.current;return e===null?!0:(qe&4194048)===qe?Na===null:(qe&62914560)===qe||(qe&536870912)!==0?e===Na:!1}function nh(){var e=z.H;return z.H=qr,e===null?qr:e}function ih(){var e=z.A;return z.A=sg,e}function Ni(){Ct=4,zl||(qe&4194048)!==qe&&ca.current!==null||(Fs=!0),(Bl&134217727)===0&&(gs&134217727)===0||pt===null||Ul(pt,qe,ma,!1)}function Fc(e,a,l){var s=rt;rt|=2;var n=nh(),i=ih();(pt!==e||qe!==a)&&(wi=null,ar(e,a)),a=!1;var p=Ct;e:do try{if(ot!==0&&$e!==null){var S=$e,L=ua;switch(ot){case 8:Wc(),p=6;break e;case 3:case 2:case 9:case 6:ca.current===null&&(a=!0);var ee=ot;if(ot=0,ua=null,lr(e,S,L,ee),l&&Fs){p=0;break e}break;default:ee=ot,ot=0,ua=null,lr(e,S,L,ee)}}ig(),p=Ct;break}catch(ne){sh(e,ne)}while(!0);return a&&e.shellSuspendCounter++,tl=os=null,rt=s,z.H=n,z.A=i,$e===null&&(pt=null,qe=0,Gn()),p}function ig(){for(;$e!==null;)oh($e)}function og(e,a){var l=rt;rt|=2;var s=nh(),n=ih();pt!==e||qe!==a?(wi=null,vi=se()+500,ar(e,a)):Fs=Be(e,a);e:do try{if(ot!==0&&$e!==null){a=$e;var i=ua;t:switch(ot){case 1:ot=0,ua=null,lr(e,a,i,1);break;case 2:case 9:if(b0(i)){ot=0,ua=null,ch(a);break}a=function(){ot!==2&&ot!==9||pt!==e||(ot=7),Ga(e)},i.then(a,a);break e;case 3:ot=7;break e;case 4:ot=5;break e;case 7:b0(i)?(ot=0,ua=null,ch(a)):(ot=0,ua=null,lr(e,a,i,7));break;case 5:var p=null;switch($e.tag){case 26:p=$e.memoizedState;case 5:case 27:var S=$e;if(p?Ph(p):S.stateNode.complete){ot=0,ua=null;var L=S.sibling;if(L!==null)$e=L;else{var ee=S.return;ee!==null?($e=ee,ki(ee)):$e=null}break t}}ot=0,ua=null,lr(e,a,i,5);break;case 6:ot=0,ua=null,lr(e,a,i,6);break;case 8:Wc(),Ct=6;break e;default:throw Error(c(462))}}cg();break}catch(ne){sh(e,ne)}while(!0);return tl=os=null,z.H=s,z.A=n,rt=l,$e!==null?0:(pt=null,qe=0,Gn(),Ct)}function cg(){for(;$e!==null&&!Xt();)oh($e)}function oh(e){var a=Mm(e.alternate,e,ul);e.memoizedProps=e.pendingProps,a===null?ki(e):$e=a}function ch(e){var a=e,l=a.alternate;switch(a.tag){case 15:case 0:a=Om(l,a,a.pendingProps,a.type,void 0,qe);break;case 11:a=Om(l,a,a.pendingProps,a.type.render,a.ref,qe);break;case 5:xc(a);default:Dm(l,a),a=$e=i0(a,ul),a=Mm(l,a,ul)}e.memoizedProps=e.pendingProps,a===null?ki(e):$e=a}function lr(e,a,l,s){tl=os=null,xc(a),qs=null,Lr=0;var n=a.return;try{if(Jf(e,n,a,l,qe)){Ct=1,ui(e,ya(l,e.current)),$e=null;return}}catch(i){if(n!==null)throw $e=n,i;Ct=1,ui(e,ya(l,e.current)),$e=null;return}a.flags&32768?(Qe||s===1?e=!0:Fs||(qe&536870912)!==0?e=!1:(zl=e=!0,(s===2||s===9||s===3||s===6)&&(s=ca.current,s!==null&&s.tag===13&&(s.flags|=16384))),dh(a,e)):ki(a)}function ki(e){var a=e;do{if((a.flags&32768)!==0){dh(a,zl);return}e=a.return;var l=eg(a.alternate,a,ul);if(l!==null){$e=l;return}if(a=a.sibling,a!==null){$e=a;return}$e=a=e}while(a!==null);Ct===0&&(Ct=5)}function dh(e,a){do{var l=tg(e.alternate,e);if(l!==null){l.flags&=32767,$e=l;return}if(l=e.return,l!==null&&(l.flags|=32768,l.subtreeFlags=0,l.deletions=null),!a&&(e=e.sibling,e!==null)){$e=e;return}$e=e=l}while(e!==null);Ct=6,$e=null}function uh(e,a,l,s,n,i,p,S,L){e.cancelPendingCommit=null;do Si();while(Ut!==0);if((rt&6)!==0)throw Error(c(327));if(a!==null){if(a===e.current)throw Error(c(177));if(i=a.lanes|a.childLanes,i|=Xo,es(e,l,i,p,S,L),e===pt&&($e=pt=null,qe=0),tr=a,Ll=e,ml=l,Zc=i,Qc=n,eh=s,(a.subtreeFlags&10256)!==0||(a.flags&10256)!==0?(e.callbackNode=null,e.callbackPriority=0,hg(Me,function(){return fh(),null})):(e.callbackNode=null,e.callbackPriority=0),s=(a.flags&13878)!==0,(a.subtreeFlags&13878)!==0||s){s=z.T,z.T=null,n=v.p,v.p=2,p=rt,rt|=4;try{ag(e,a,l)}finally{rt=p,v.p=n,z.T=s}}Ut=1,mh(),hh(),xh()}}function mh(){if(Ut===1){Ut=0;var e=Ll,a=tr,l=(a.flags&13878)!==0;if((a.subtreeFlags&13878)!==0||l){l=z.T,z.T=null;var s=v.p;v.p=2;var n=rt;rt|=4;try{qm(a,e);var i=ud,p=Wu(e.containerInfo),S=i.focusedElem,L=i.selectionRange;if(p!==S&&S&&S.ownerDocument&&Ju(S.ownerDocument.documentElement,S)){if(L!==null&&Bo(S)){var ee=L.start,ne=L.end;if(ne===void 0&&(ne=ee),"selectionStart"in S)S.selectionStart=ee,S.selectionEnd=Math.min(ne,S.value.length);else{var he=S.ownerDocument||document,ae=he&&he.defaultView||window;if(ae.getSelection){var re=ae.getSelection(),we=S.textContent.length,_e=Math.min(L.start,we),ht=L.end===void 0?_e:Math.min(L.end,we);!re.extend&&_e>ht&&(p=ht,ht=_e,_e=p);var Q=Qu(S,_e),I=Qu(S,ht);if(Q&&I&&(re.rangeCount!==1||re.anchorNode!==Q.node||re.anchorOffset!==Q.offset||re.focusNode!==I.node||re.focusOffset!==I.offset)){var F=he.createRange();F.setStart(Q.node,Q.offset),re.removeAllRanges(),_e>ht?(re.addRange(F),re.extend(I.node,I.offset)):(F.setEnd(I.node,I.offset),re.addRange(F))}}}}for(he=[],re=S;re=re.parentNode;)re.nodeType===1&&he.push({element:re,left:re.scrollLeft,top:re.scrollTop});for(typeof S.focus=="function"&&S.focus(),S=0;S<he.length;S++){var ue=he[S];ue.element.scrollLeft=ue.left,ue.element.scrollTop=ue.top}}Vi=!!dd,ud=dd=null}finally{rt=n,v.p=s,z.T=l}}e.current=a,Ut=2}}function hh(){if(Ut===2){Ut=0;var e=Ll,a=tr,l=(a.flags&8772)!==0;if((a.subtreeFlags&8772)!==0||l){l=z.T,z.T=null;var s=v.p;v.p=2;var n=rt;rt|=4;try{Xm(e,a.alternate,a)}finally{rt=n,v.p=s,z.T=l}}Ut=3}}function xh(){if(Ut===4||Ut===3){Ut=0,Pe();var e=Ll,a=tr,l=ml,s=eh;(a.subtreeFlags&10256)!==0||(a.flags&10256)!==0?Ut=5:(Ut=0,tr=Ll=null,ph(e,e.pendingLanes));var n=e.pendingLanes;if(n===0&&(Vl=null),me(l),a=a.stateNode,dt&&typeof dt.onCommitFiberRoot=="function")try{dt.onCommitFiberRoot(He,a,void 0,(a.current.flags&128)===128)}catch{}if(s!==null){a=z.T,n=v.p,v.p=2,z.T=null;try{for(var i=e.onRecoverableError,p=0;p<s.length;p++){var S=s[p];i(S.value,{componentStack:S.stack})}}finally{z.T=a,v.p=n}}(ml&3)!==0&&Si(),Ga(e),n=e.pendingLanes,(l&261930)!==0&&(n&42)!==0?e===Jc?tn++:(tn=0,Jc=e):tn=0,an(0)}}function ph(e,a){(e.pooledCacheLanes&=a)===0&&(a=e.pooledCache,a!=null&&(e.pooledCache=null,Br(a)))}function Si(){return mh(),hh(),xh(),fh()}function fh(){if(Ut!==5)return!1;var e=Ll,a=Zc;Zc=0;var l=me(ml),s=z.T,n=v.p;try{v.p=32>l?32:l,z.T=null,l=Qc,Qc=null;var i=Ll,p=ml;if(Ut=0,tr=Ll=null,ml=0,(rt&6)!==0)throw Error(c(331));var S=rt;if(rt|=4,Jm(i.current),Pm(i,i.current,p,l),rt=S,an(0,!1),dt&&typeof dt.onPostCommitFiberRoot=="function")try{dt.onPostCommitFiberRoot(He,i)}catch{}return!0}finally{v.p=n,z.T=s,ph(e,a)}}function gh(e,a,l){a=ya(l,a),a=Tc(e.stateNode,a,2),e=Rl(e,a,2),e!==null&&(Ra(e,2),Ga(e))}function ct(e,a,l){if(e.tag===3)gh(e,e,l);else for(;a!==null;){if(a.tag===3){gh(a,e,l);break}else if(a.tag===1){var s=a.stateNode;if(typeof a.type.getDerivedStateFromError=="function"||typeof s.componentDidCatch=="function"&&(Vl===null||!Vl.has(s))){e=ya(l,e),l=bm(2),s=Rl(a,l,2),s!==null&&(ym(l,s,a,e),Ra(s,2),Ga(s));break}}a=a.return}}function ed(e,a,l){var s=e.pingCache;if(s===null){s=e.pingCache=new rg;var n=new Set;s.set(a,n)}else n=s.get(a),n===void 0&&(n=new Set,s.set(a,n));n.has(l)||(qc=!0,n.add(l),e=dg.bind(null,e,a,l),a.then(e,e))}function dg(e,a,l){var s=e.pingCache;s!==null&&s.delete(a),e.pingedLanes|=e.suspendedLanes&l,e.warmLanes&=~l,pt===e&&(qe&l)===l&&(Ct===4||Ct===3&&(qe&62914560)===qe&&300>se()-yi?(rt&2)===0&&ar(e,0):Yc|=l,er===qe&&(er=0)),Ga(e)}function bh(e,a){a===0&&(a=Ze()),e=rs(e,a),e!==null&&(Ra(e,a),Ga(e))}function ug(e){var a=e.memoizedState,l=0;a!==null&&(l=a.retryLane),bh(e,l)}function mg(e,a){var l=0;switch(e.tag){case 31:case 13:var s=e.stateNode,n=e.memoizedState;n!==null&&(l=n.retryLane);break;case 19:s=e.stateNode;break;case 22:s=e.stateNode._retryCache;break;default:throw Error(c(314))}s!==null&&s.delete(a),bh(e,l)}function hg(e,a){return Fe(e,a)}var Oi=null,sr=null,td=!1,Ei=!1,ad=!1,Hl=0;function Ga(e){e!==sr&&e.next===null&&(sr===null?Oi=sr=e:sr=sr.next=e),Ei=!0,td||(td=!0,pg())}function an(e,a){if(!ad&&Ei){ad=!0;do for(var l=!1,s=Oi;s!==null;){if(e!==0){var n=s.pendingLanes;if(n===0)var i=0;else{var p=s.suspendedLanes,S=s.pingedLanes;i=(1<<31-bt(42|e)+1)-1,i&=n&~(p&~S),i=i&201326741?i&201326741|1:i?i|2:0}i!==0&&(l=!0,jh(s,i))}else i=qe,i=Ie(s,s===pt?i:0,s.cancelPendingCommit!==null||s.timeoutHandle!==-1),(i&3)===0||Be(s,i)||(l=!0,jh(s,i));s=s.next}while(l);ad=!1}}function xg(){yh()}function yh(){Ei=td=!1;var e=0;Hl!==0&&Sg()&&(e=Hl);for(var a=se(),l=null,s=Oi;s!==null;){var n=s.next,i=vh(s,a);i===0?(s.next=null,l===null?Oi=n:l.next=n,n===null&&(sr=l)):(l=s,(e!==0||(i&3)!==0)&&(Ei=!0)),s=n}Ut!==0&&Ut!==5||an(e),Hl!==0&&(Hl=0)}function vh(e,a){for(var l=e.suspendedLanes,s=e.pingedLanes,n=e.expirationTimes,i=e.pendingLanes&-62914561;0<i;){var p=31-bt(i),S=1<<p,L=n[p];L===-1?((S&l)===0||(S&s)!==0)&&(n[p]=Ot(S,a)):L<=a&&(e.expiredLanes|=S),i&=~S}if(a=pt,l=qe,l=Ie(e,e===a?l:0,e.cancelPendingCommit!==null||e.timeoutHandle!==-1),s=e.callbackNode,l===0||e===a&&(ot===2||ot===9)||e.cancelPendingCommit!==null)return s!==null&&s!==null&&Ht(s),e.callbackNode=null,e.callbackPriority=0;if((l&3)===0||Be(e,l)){if(a=l&-l,a===e.callbackPriority)return a;switch(s!==null&&Ht(s),me(l)){case 2:case 8:l=et;break;case 32:l=Me;break;case 268435456:l=st;break;default:l=Me}return s=wh.bind(null,e),l=Fe(l,s),e.callbackPriority=a,e.callbackNode=l,a}return s!==null&&s!==null&&Ht(s),e.callbackPriority=2,e.callbackNode=null,2}function wh(e,a){if(Ut!==0&&Ut!==5)return e.callbackNode=null,e.callbackPriority=0,null;var l=e.callbackNode;if(Si()&&e.callbackNode!==l)return null;var s=qe;return s=Ie(e,e===pt?s:0,e.cancelPendingCommit!==null||e.timeoutHandle!==-1),s===0?null:(ah(e,s,a),vh(e,se()),e.callbackNode!=null&&e.callbackNode===l?wh.bind(null,e):null)}function jh(e,a){if(Si())return null;ah(e,a,!0)}function pg(){Eg(function(){(rt&6)!==0?Fe(De,xg):yh()})}function ld(){if(Hl===0){var e=Gs;e===0&&(e=ie,ie<<=1,(ie&261888)===0&&(ie=256)),Hl=e}return Hl}function Nh(e){return e==null||typeof e=="symbol"||typeof e=="boolean"?null:typeof e=="function"?e:zn(""+e)}function kh(e,a){var l=a.ownerDocument.createElement("input");return l.name=a.name,l.value=a.value,e.id&&l.setAttribute("form",e.id),a.parentNode.insertBefore(l,a),e=new FormData(e),l.parentNode.removeChild(l),e}function fg(e,a,l,s,n){if(a==="submit"&&l&&l.stateNode===n){var i=Nh((n[Tt]||null).action),p=s.submitter;p&&(a=(a=p[Tt]||null)?Nh(a.formAction):p.getAttribute("formAction"),a!==null&&(i=a,p=null));var S=new Un("action","action",null,s,n);e.push({event:S,listeners:[{instance:null,listener:function(){if(s.defaultPrevented){if(Hl!==0){var L=p?kh(n,p):new FormData(n);Nc(l,{pending:!0,data:L,method:n.method,action:i},null,L)}}else typeof i=="function"&&(S.preventDefault(),L=p?kh(n,p):new FormData(n),Nc(l,{pending:!0,data:L,method:n.method,action:i},i,L))},currentTarget:n}]})}}for(var sd=0;sd<Ho.length;sd++){var rd=Ho[sd],gg=rd.toLowerCase(),bg=rd[0].toUpperCase()+rd.slice(1);Aa(gg,"on"+bg)}Aa(t0,"onAnimationEnd"),Aa(a0,"onAnimationIteration"),Aa(l0,"onAnimationStart"),Aa("dblclick","onDoubleClick"),Aa("focusin","onFocus"),Aa("focusout","onBlur"),Aa(Df,"onTransitionRun"),Aa(zf,"onTransitionStart"),Aa(Bf,"onTransitionCancel"),Aa(s0,"onTransitionEnd"),Ts("onMouseEnter",["mouseout","mouseover"]),Ts("onMouseLeave",["mouseout","mouseover"]),Ts("onPointerEnter",["pointerout","pointerover"]),Ts("onPointerLeave",["pointerout","pointerover"]),ts("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),ts("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),ts("onBeforeInput",["compositionend","keypress","textInput","paste"]),ts("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),ts("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),ts("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var ln="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),yg=new Set("beforetoggle cancel close invalid load scroll scrollend toggle".split(" ").concat(ln));function Sh(e,a){a=(a&4)!==0;for(var l=0;l<e.length;l++){var s=e[l],n=s.event;s=s.listeners;e:{var i=void 0;if(a)for(var p=s.length-1;0<=p;p--){var S=s[p],L=S.instance,ee=S.currentTarget;if(S=S.listener,L!==i&&n.isPropagationStopped())break e;i=S,n.currentTarget=ee;try{i(n)}catch(ne){In(ne)}n.currentTarget=null,i=L}else for(p=0;p<s.length;p++){if(S=s[p],L=S.instance,ee=S.currentTarget,S=S.listener,L!==i&&n.isPropagationStopped())break e;i=S,n.currentTarget=ee;try{i(n)}catch(ne){In(ne)}n.currentTarget=null,i=L}}}}function Ke(e,a){var l=a[Ss];l===void 0&&(l=a[Ss]=new Set);var s=e+"__bubble";l.has(s)||(Oh(a,e,2,!1),l.add(s))}function nd(e,a,l){var s=0;a&&(s|=4),Oh(l,e,s,a)}var Ci="_reactListening"+Math.random().toString(36).slice(2);function id(e){if(!e[Ci]){e[Ci]=!0,yu.forEach(function(l){l!=="selectionchange"&&(yg.has(l)||nd(l,!1,e),nd(l,!0,e))});var a=e.nodeType===9?e:e.ownerDocument;a===null||a[Ci]||(a[Ci]=!0,nd("selectionchange",!1,a))}}function Oh(e,a,l,s){switch(tx(a)){case 2:var n=Yg;break;case 8:n=Pg;break;default:n=jd}l=n.bind(null,a,l,e),n=void 0,!Eo||a!=="touchstart"&&a!=="touchmove"&&a!=="wheel"||(n=!0),s?n!==void 0?e.addEventListener(a,l,{capture:!0,passive:n}):e.addEventListener(a,l,!0):n!==void 0?e.addEventListener(a,l,{passive:n}):e.addEventListener(a,l,!1)}function od(e,a,l,s,n){var i=s;if((a&1)===0&&(a&2)===0&&s!==null)e:for(;;){if(s===null)return;var p=s.tag;if(p===3||p===4){var S=s.stateNode.containerInfo;if(S===n)break;if(p===4)for(p=s.return;p!==null;){var L=p.tag;if((L===3||L===4)&&p.stateNode.containerInfo===n)return;p=p.return}for(;S!==null;){if(p=Os(S),p===null)return;if(L=p.tag,L===5||L===6||L===26||L===27){s=i=p;continue e}S=S.parentNode}}s=s.return}Ru(function(){var ee=i,ne=So(l),he=[];e:{var ae=r0.get(e);if(ae!==void 0){var re=Un,we=e;switch(e){case"keypress":if(Vn(l)===0)break e;case"keydown":case"keyup":re=mf;break;case"focusin":we="focus",re=Ro;break;case"focusout":we="blur",re=Ro;break;case"beforeblur":case"afterblur":re=Ro;break;case"click":if(l.button===2)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":re=Du;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":re=Fp;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":re=pf;break;case t0:case a0:case l0:re=af;break;case s0:re=gf;break;case"scroll":case"scrollend":re=Jp;break;case"wheel":re=yf;break;case"copy":case"cut":case"paste":re=sf;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":re=Bu;break;case"toggle":case"beforetoggle":re=wf}var _e=(a&4)!==0,ht=!_e&&(e==="scroll"||e==="scrollend"),Q=_e?ae!==null?ae+"Capture":null:ae;_e=[];for(var I=ee,F;I!==null;){var ue=I;if(F=ue.stateNode,ue=ue.tag,ue!==5&&ue!==26&&ue!==27||F===null||Q===null||(ue=Sr(I,Q),ue!=null&&_e.push(sn(I,ue,F))),ht)break;I=I.return}0<_e.length&&(ae=new re(ae,we,null,l,ne),he.push({event:ae,listeners:_e}))}}if((a&7)===0){e:{if(ae=e==="mouseover"||e==="pointerover",re=e==="mouseout"||e==="pointerout",ae&&l!==ko&&(we=l.relatedTarget||l.fromElement)&&(Os(we)||we[Ma]))break e;if((re||ae)&&(ae=ne.window===ne?ne:(ae=ne.ownerDocument)?ae.defaultView||ae.parentWindow:window,re?(we=l.relatedTarget||l.toElement,re=ee,we=we?Os(we):null,we!==null&&(ht=m(we),_e=we.tag,we!==ht||_e!==5&&_e!==27&&_e!==6)&&(we=null)):(re=null,we=ee),re!==we)){if(_e=Du,ue="onMouseLeave",Q="onMouseEnter",I="mouse",(e==="pointerout"||e==="pointerover")&&(_e=Bu,ue="onPointerLeave",Q="onPointerEnter",I="pointer"),ht=re==null?ae:kr(re),F=we==null?ae:kr(we),ae=new _e(ue,I+"leave",re,l,ne),ae.target=ht,ae.relatedTarget=F,ue=null,Os(ne)===ee&&(_e=new _e(Q,I+"enter",we,l,ne),_e.target=F,_e.relatedTarget=ht,ue=_e),ht=ue,re&&we)t:{for(_e=vg,Q=re,I=we,F=0,ue=Q;ue;ue=_e(ue))F++;ue=0;for(var Ce=I;Ce;Ce=_e(Ce))ue++;for(;0<F-ue;)Q=_e(Q),F--;for(;0<ue-F;)I=_e(I),ue--;for(;F--;){if(Q===I||I!==null&&Q===I.alternate){_e=Q;break t}Q=_e(Q),I=_e(I)}_e=null}else _e=null;re!==null&&Eh(he,ae,re,_e,!1),we!==null&&ht!==null&&Eh(he,ht,we,_e,!0)}}e:{if(ae=ee?kr(ee):window,re=ae.nodeName&&ae.nodeName.toLowerCase(),re==="select"||re==="input"&&ae.type==="file")var at=$u;else if(Iu(ae))if(Ku)at=Rf;else{at=Tf;var Se=Cf}else re=ae.nodeName,!re||re.toLowerCase()!=="input"||ae.type!=="checkbox"&&ae.type!=="radio"?ee&&No(ee.elementType)&&(at=$u):at=_f;if(at&&(at=at(e,ee))){Gu(he,at,l,ne);break e}Se&&Se(e,ae,ee),e==="focusout"&&ee&&ae.type==="number"&&ee.memoizedProps.value!=null&&jo(ae,"number",ae.value)}switch(Se=ee?kr(ee):window,e){case"focusin":(Iu(Se)||Se.contentEditable==="true")&&(zs=Se,Vo=ee,Ar=null);break;case"focusout":Ar=Vo=zs=null;break;case"mousedown":Lo=!0;break;case"contextmenu":case"mouseup":case"dragend":Lo=!1,Fu(he,l,ne);break;case"selectionchange":if(Af)break;case"keydown":case"keyup":Fu(he,l,ne)}var Ue;if(Ao)e:{switch(e){case"compositionstart":var Ye="onCompositionStart";break e;case"compositionend":Ye="onCompositionEnd";break e;case"compositionupdate":Ye="onCompositionUpdate";break e}Ye=void 0}else Ds?Hu(e,l)&&(Ye="onCompositionEnd"):e==="keydown"&&l.keyCode===229&&(Ye="onCompositionStart");Ye&&(Vu&&l.locale!=="ko"&&(Ds||Ye!=="onCompositionStart"?Ye==="onCompositionEnd"&&Ds&&(Ue=Mu()):(kl=ne,Co="value"in kl?kl.value:kl.textContent,Ds=!0)),Se=Ti(ee,Ye),0<Se.length&&(Ye=new zu(Ye,e,null,l,ne),he.push({event:Ye,listeners:Se}),Ue?Ye.data=Ue:(Ue=Xu(l),Ue!==null&&(Ye.data=Ue)))),(Ue=Nf?kf(e,l):Sf(e,l))&&(Ye=Ti(ee,"onBeforeInput"),0<Ye.length&&(Se=new zu("onBeforeInput","beforeinput",null,l,ne),he.push({event:Se,listeners:Ye}),Se.data=Ue)),fg(he,e,ee,l,ne)}Sh(he,a)})}function sn(e,a,l){return{instance:e,listener:a,currentTarget:l}}function Ti(e,a){for(var l=a+"Capture",s=[];e!==null;){var n=e,i=n.stateNode;if(n=n.tag,n!==5&&n!==26&&n!==27||i===null||(n=Sr(e,l),n!=null&&s.unshift(sn(e,n,i)),n=Sr(e,a),n!=null&&s.push(sn(e,n,i))),e.tag===3)return s;e=e.return}return[]}function vg(e){if(e===null)return null;do e=e.return;while(e&&e.tag!==5&&e.tag!==27);return e||null}function Eh(e,a,l,s,n){for(var i=a._reactName,p=[];l!==null&&l!==s;){var S=l,L=S.alternate,ee=S.stateNode;if(S=S.tag,L!==null&&L===s)break;S!==5&&S!==26&&S!==27||ee===null||(L=ee,n?(ee=Sr(l,i),ee!=null&&p.unshift(sn(l,ee,L))):n||(ee=Sr(l,i),ee!=null&&p.push(sn(l,ee,L)))),l=l.return}p.length!==0&&e.push({event:a,listeners:p})}var wg=/\r\n?/g,jg=/\u0000|\uFFFD/g;function Ch(e){return(typeof e=="string"?e:""+e).replace(wg,`
2053`).replace(jg,"")}function Th(e,a){return a=Ch(a),Ch(e)===a}function mt(e,a,l,s,n,i){switch(l){case"children":typeof s=="string"?a==="body"||a==="textarea"&&s===""||Rs(e,s):(typeof s=="number"||typeof s=="bigint")&&a!=="body"&&Rs(e,""+s);break;case"className":An(e,"class",s);break;case"tabIndex":An(e,"tabindex",s);break;case"dir":case"role":case"viewBox":case"width":case"height":An(e,l,s);break;case"style":Tu(e,s,i);break;case"data":if(a!=="object"){An(e,"data",s);break}case"src":case"href":if(s===""&&(a!=="a"||l!=="href")){e.removeAttribute(l);break}if(s==null||typeof s=="function"||typeof s=="symbol"||typeof s=="boolean"){e.removeAttribute(l);break}s=zn(""+s),e.setAttribute(l,s);break;case"action":case"formAction":if(typeof s=="function"){e.setAttribute(l,"javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')");break}else typeof i=="function"&&(l==="formAction"?(a!=="input"&&mt(e,a,"name",n.name,n,null),mt(e,a,"formEncType",n.formEncType,n,null),mt(e,a,"formMethod",n.formMethod,n,null),mt(e,a,"formTarget",n.formTarget,n,null)):(mt(e,a,"encType",n.encType,n,null),mt(e,a,"method",n.method,n,null),mt(e,a,"target",n.target,n,null)));if(s==null||typeof s=="symbol"||typeof s=="boolean"){e.removeAttribute(l);break}s=zn(""+s),e.setAttribute(l,s);break;case"onClick":s!=null&&(e.onclick=Ja);break;case"onScroll":s!=null&&Ke("scroll",e);break;case"onScrollEnd":s!=null&&Ke("scrollend",e);break;case"dangerouslySetInnerHTML":if(s!=null){if(typeof s!="object"||!("__html"in s))throw Error(c(61));if(l=s.__html,l!=null){if(n.children!=null)throw Error(c(60));e.innerHTML=l}}break;case"multiple":e.multiple=s&&typeof s!="function"&&typeof s!="symbol";break;case"muted":e.muted=s&&typeof s!="function"&&typeof s!="symbol";break;case"suppressContentEditableWarning":case"suppressHydrationWarning":case"defaultValue":case"defaultChecked":case"innerHTML":case"ref":break;case"autoFocus":break;case"xlinkHref":if(s==null||typeof s=="function"||typeof s=="boolean"||typeof s=="symbol"){e.removeAttribute("xlink:href");break}l=zn(""+s),e.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",l);break;case"contentEditable":case"spellCheck":case"draggable":case"value":case"autoReverse":case"externalResourcesRequired":case"focusable":case"preserveAlpha":s!=null&&typeof s!="function"&&typeof s!="symbol"?e.setAttribute(l,""+s):e.removeAttribute(l);break;case"inert":case"allowFullScreen":case"async":case"autoPlay":case"controls":case"default":case"defer":case"disabled":case"disablePictureInPicture":case"disableRemotePlayback":case"formNoValidate":case"hidden":case"loop":case"noModule":case"noValidate":case"open":case"playsInl
2053ine":case"readOnly":case"required":case"reversed":case"scoped":case"seamless":case"itemScope":s&&typeof s!="function"&&typeof s!="symbol"?e.setAttribute(l,""):e.removeAttribute(l);break;case"capture":case"download":s===!0?e.setAttribute(l,""):s!==!1&&s!=null&&typeof s!="function"&&typeof s!="symbol"?e.setAttribute(l,s):e.removeAttribute(l);break;case"cols":case"rows":case"size":case"span":s!=null&&typeof s!="function"&&typeof s!="symbol"&&!isNaN(s)&&1<=s?e.setAttribute(l,s):e.removeAttribute(l);break;case"rowSpan":case"start":s==null||typeof s=="function"||typeof s=="symbol"||isNaN(s)?e.removeAttribute(l):e.setAttribute(l,s);break;case"popover":Ke("beforetoggle",e),Ke("toggle",e),Mn(e,"popover",s);break;case"xlinkActuate":Qa(e,"http://www.w3.org/1999/xlink","xlink:actuate",s);break;case"xlinkArcrole":Qa(e,"http://www.w3.org/1999/xlink","xlink:arcrole",s);break;case"xlinkRole":Qa(e,"http://www.w3.org/1999/xlink","xlink:role",s);break;case"xlinkShow":Qa(e,"http://www.w3.org/1999/xlink","xlink:show",s);break;case"xlinkTitle":Qa(e,"http://www.w3.org/1999/xlink","xlink:title",s);break;case"xlinkType":Qa(e,"http://www.w3.org/1999/xlink","xlink:type",s);break;case"xmlBase":Qa(e,"http://www.w3.org/XML/1998/namespace","xml:base",s);break;case"xmlLang":Qa(e,"http://www.w3.org/XML/1998/namespace","xml:lang",s);break;case"xmlSpace":Qa(e,"http://www.w3.org/XML/1998/namespace","xml:space",s);break;case"is":Mn(e,"is",s);break;case"innerText":case"textContent":break;default:(!(2<l.length)||l[0]!=="o"&&l[0]!=="O"||l[1]!=="n"&&l[1]!=="N")&&(l=Zp.get(l)||l,Mn(e,l,s))}}function cd(e,a,l,s,n,i){switch(l){case"style":Tu(e,s,i);break;case"dangerouslySetInnerHTML":if(s!=null){if(typeof s!="object"||!("__html"in s))throw Error(c(61));if(l=s.__html,l!=null){if(n.children!=null)throw Error(c(60));e.innerHTML=l}}break;case"children":typeof s=="string"?Rs(e,s):(typeof s=="number"||typeof s=="bigint")&&Rs(e,""+s);break;case"onScroll":s!=null&&Ke("scroll",e);break;case"onScrollEnd":s!=null&&Ke("scrollend",e);break;case"onClick":s!=null&&(e.onclick=Ja);break;case"suppressContentEditableWarning":case"suppressHydrationWarning":case"innerHTML":case"ref":break;case"innerText":case"textContent":break;default:if(!vu.hasOwnProperty(l))e:{if(l[0]==="o"&&l[1]==="n"&&(n=l.endsWith("Capture"),a=l.slice(2,n?l.length-7:void 0),i=e[Tt]||null,i=i!=null?i[l]:null,typeof i=="function"&&e.removeEventListener(a,i,n),typeof s=="function")){typeof i!="function"&&i!==null&&(l in e?e[l]=null:e.hasAttribute(l)&&e.removeAttribute(l)),e.addEventListener(a,s,n);break e}l in e?e[l]=s:s===!0?e.setAttribute(l,""):Mn(e,l,s)}}}function Zt(e,a,l){switch(a){case"div":case"span":case"svg":case"path":case"a":case"g":case"p":case"li":break;case"img":Ke("error",e),Ke("load",e);var s=!1,n=!1,i;for(i in l)if(l.hasOwnProperty(i)){var p=l[i];if(p!=null)switch(i){case"src":s=!0;break;case"srcSet":n=!0;break;case"children":case"dangerouslySetInnerHTML":throw Error(c(137,a));default:mt(e,a,i,p,l,null)}}n&&mt(e,a,"srcSet",l.srcSet,l,null),s&&mt(e,a,"src",l.src,l,null);return;case"input":Ke("invalid",e);var S=i=p=n=null,L=null,ee=null;for(s in l)if(l.hasOwnProperty(s)){var ne=l[s];if(ne!=null)switch(s){case"name":n=ne;break;case"type":p=ne;break;case"checked":L=ne;break;case"defaultChecked":ee=ne;break;case"value":i=ne;break;case"defaultValue":S=ne;break;case"children":case"dangerouslySetInnerHTML":if(ne!=null)throw Error(c(137,a));break;default:mt(e,a,s,ne,l,null)}}Su(e,i,S,L,ee,p,n,!1);return;case"select":Ke("invalid",e),s=p=i=null;for(n in l)if(l.hasOwnProperty(n)&&(S=l[n],S!=null))switch(n){case"value":i=S;break;case"defaultValue":p=S;break;case"multiple":s=S;default:mt(e,a,n,S,l,null)}a=i,l=p,e.multiple=!!s,a!=null?_s(e,!!s,a,!1):l!=null&&_s(e,!!s,l,!0);return;case"textarea":Ke("invalid",e),i=n=s=null;for(p in l)if(l.hasOwnProperty(p)&&(S=l[p],S!=null))switch(p){case"value":s=S;break;case"defaultValue":n=S;break;case"children":i=S;break;case"dangerouslySetInnerHTML":if(S!=null)throw Error(c(91));break;default:mt(e,a,p,S,l,null)}Eu(e,s,n,i);return;case"option":for(L in l)if(l.hasOwnProperty(L)&&(s=l[L],s!=null))switch(L){case"selected":e.selected=s&&typeof s!="function"&&typeof s!="symbol";break;default:mt(e,a,L,s,l,null)}return;case"dialog":Ke("beforetoggle",e),Ke("toggle",e),Ke("cancel",e),Ke("close",e);break;case"iframe":case"object":Ke("load",e);break;case"video":case"audio":for(s=0;s<ln.length;s++)Ke(ln[s],e);break;case"image":Ke("error",e),Ke("load",e);break;case"details":Ke("toggle",e);break;case"embed":case"source":case"link":Ke("error",e),Ke("load",e);case"area":case"base":case"br":case"col":case"hr":case"keygen":case"meta":case"param":case"track":case"wbr":case"menuitem":for(ee in l)if(l.hasOwnProperty(ee)&&(s=l[ee],s!=null))switch(ee){case"children":case"dangerouslySetInnerHTML":throw Error(c(137,a));default:mt(e,a,ee,s,l,null)}return;default:if(No(a)){for(ne in l)l.hasOwnProperty(ne)&&(s=l[ne],s!==void 0&&cd(e,a,ne,s,l,void 0));return}}for(S in l)l.hasOwnProperty(S)&&(s=l[S],s!=null&&mt(e,a,S,s,l,null))}function Ng(e,a,l,s){switch(a){case"div":case"span":case"svg":case"path":case"a":case"g":case"p":case"li":break;case"input":var n=null,i=null,p=null,S=null,L=null,ee=null,ne=null;for(re in l){var he=l[re];if(l.hasOwnProperty(re)&&he!=null)switch(re){case"checked":break;case"value":break;case"defaultValue":L=he;default:s.hasOwnProperty(re)||mt(e,a,re,null,s,he)}}for(var ae in s){var re=s[ae];if(he=l[ae],s.hasOwnProperty(ae)&&(re!=null||he!=null))switch(ae){case"type":i=re;break;case"name":n=re;break;case"checked":ee=re;break;case"defaultChecked":ne=re;break;case"value":p=re;break;case"defaultValue":S=re;break;case"children":case"dangerouslySetInnerHTML":if(re!=null)throw Error(c(137,a));break;default:re!==he&&mt(e,a,ae,re,s,he)}}wo(e,p,S,L,ee,ne,i,n);return;case"select":re=p=S=ae=null;for(i in l)if(L=l[i],l.hasOwnProperty(i)&&L!=null)switch(i){case"value":break;case"multiple":re=L;default:s.hasOwnProperty(i)||mt(e,a,i,null,s,L)}for(n in s)if(i=s[n],L=l[n],s.hasOwnProperty(n)&&(i!=null||L!=null))switch(n){case"value":ae=i;break;case"defaultValue":S=i;break;case"multiple":p=i;default:i!==L&&mt(e,a,n,i,s,L)}a=S,l=p,s=re,ae!=null?_s(e,!!l,ae,!1):!!s!=!!l&&(a!=null?_s(e,!!l,a,!0):_s(e,!!l,l?[]:"",!1));return;case"textarea":re=ae=null;for(S in l)if(n=l[S],l.hasOwnProperty(S)&&n!=null&&!s.hasOwnProperty(S))switch(S){case"value":break;case"children":break;default:mt(e,a,S,null,s,n)}for(p in s)if(n=s[p],i=l[p],s.hasOwnProperty(p)&&(n!=null||i!=null))switch(p){case"value":ae=n;break;case"defaultValue":re=n;break;case"children":break;case"dangerouslySetInnerHTML":if(n!=null)throw Error(c(91));break;default:n!==i&&mt(e,a,p,n,s,i)}Ou(e,ae,re);return;case"option":for(var we in l)if(ae=l[we],l.hasOwnProperty(we)&&ae!=null&&!s.hasOwnProperty(we))switch(we){case"selected":e.selected=!1;break;default:mt(e,a,we,null,s,ae)}for(L in s)if(ae=s[L],re=l[L],s.hasOwnProperty(L)&&ae!==re&&(ae!=null||re!=null))switch(L){case"selected":e.selected=ae&&typeof ae!="function"&&typeof ae!="symbol";break;default:mt(e,a,L,ae,s,re)}return;case"img":case"link":case"area":case"base":case"br":case"col":case"embed":case"hr":case"keygen":case"meta":case"param":case"source":case"track":case"wbr":case"menuitem":for(var _e in l)ae=l[_e],l.hasOwnProperty(_e)&&ae!=null&&!s.hasOwnProperty(_e)&&mt(e,a,_e,null,s,ae);for(ee in s)if(ae=s[ee],re=l[ee],s.hasOwnProperty(ee)&&ae!==re&&(ae!=null||re!=null))switch(ee){case"children":case"dangerouslySetInnerHTML":if(ae!=null)throw Error(c(137,a));break;default:mt(e,a,ee,ae,s,re)}return;default:if(No(a)){for(var ht in l)ae=l[ht],l.hasOwnProperty(ht)&&ae!==void 0&&!s.hasOwnProperty(ht)&&cd(e,a,ht,void 0,s,ae);for(ne in s)ae=s[ne],re=l[ne],!s.hasOwnProperty(ne)||ae===re||ae===void 0&&re===void 0||cd(e,a,ne,ae,s,re);return}}for(var Q in l)ae=l[Q],l.hasOwnProperty(Q)&&ae!=null&&!s.hasOwnProperty(Q)&&mt(e,a,Q,null,s,ae);for(he in s)ae=s[he],re=l[he],!s.hasOwnProperty(he)||ae===re||ae==null&&re==null||mt(e,a,he,ae,s,re)}function _h(e){switch(e){case"css":case"script":case"font":case"img":case"image":case"input":case"link":return!0;default:return!1}}function kg(){if(typeof performance.getEntriesByType=="function"){for(var e=0,a=0,l=performance.getEntriesByType("resource"),s=0;s<l.length;s++){var n=l[s],i=n.transferSize,p=n.initiatorType,S=n.duration;if(i&&S&&_h(p)){for(p=0,S=n.responseEnd,s+=1;s<l.length;s++){var L=l[s],ee=L.startTime;if(ee>S)break;var ne=L.transferSize,he=L.initiatorType;ne&&_h(he)&&(L=L.responseEnd,p+=ne*(L<S?1:(S-ee)/(L-ee)))}if(--s,a+=8*(i+p)/(n.duration/1e3),e++,10<e)break}}if(0<e)return a/e/1e6}return navigator.connection&&(e=navigator.connection.downlink,typeof e=="number")?e:5}var dd=null,ud=null;
vendor: 14,018 bytes, line 2053
2053function _i(e){return e.nodeType===9?e:e.ownerDocument}function Rh(e){switch(e){case"http://www.w3.org/2000/svg":return 1;case"http://www.w3.org/1998/Math/MathML":return 2;default:return 0}}function Mh(e,a){if(e===0)switch(a){case"svg":return 1;case"math":return 2;default:return 0}return e===1&&a==="foreignObject"?0:e}function md(e,a){return e==="textarea"||e==="noscript"||typeof a.children=="string"||typeof a.children=="number"||typeof a.children=="bigint"||typeof a.dangerouslySetInnerHTML=="object"&&a.dangerouslySetInnerHTML!==null&&a.dangerouslySetInnerHTML.__html!=null}var hd=null;function Sg(){var e=window.event;return e&&e.type==="popstate"?e===hd?!1:(hd=e,!0):(hd=null,!1)}var Ah=typeof setTimeout=="function"?setTimeout:void 0,Og=typeof clearTimeout=="function"?clearTimeout:void 0,Dh=typeof Promise=="function"?Promise:void 0,Eg=typeof queueMicrotask=="function"?queueMicrotask:typeof Dh<"u"?function(e){return Dh.resolve(null).then(e).catch(Cg)}:Ah;function Cg(e){setTimeout(function(){throw e})}function Xl(e){return e==="head"}function zh(e,a){var l=a,s=0;do{var n=l.nextSibling;if(e.removeChild(l),n&&n.nodeType===8)if(l=n.data,l==="/$"||l==="/&"){if(s===0){e.removeChild(n),or(a);return}s--}else if(l==="$"||l==="$?"||l==="$~"||l==="$!"||l==="&")s++;else if(l==="html")rn(e.ownerDocument.documentElement);else if(l==="head"){l=e.ownerDocument.head,rn(l);for(var i=l.firstChild;i;){var p=i.nextSibling,S=i.nodeName;i[Nr]||S==="SCRIPT"||S==="STYLE"||S==="LINK"&&i.rel.toLowerCase()==="stylesheet"||l.removeChild(i),i=p}}else l==="body"&&rn(e.ownerDocument.body);l=n}while(l);or(a)}function Bh(e,a){var l=e;e=0;do{var s=l.nextSibling;if(l.nodeType===1?a?(l._stashedDisplay=l.style.display,l.style.display="none"):(l.style.display=l._stashedDisplay||"",l.getAttribute("style")===""&&l.removeAttribute("style")):l.nodeType===3&&(a?(l._stashedText=l.nodeValue,l.nodeValue=""):l.nodeValue=l._stashedText||""),s&&s.nodeType===8)if(l=s.data,l==="/$"){if(e===0)break;e--}else l!=="$"&&l!=="$?"&&l!=="$~"&&l!=="$!"||e++;l=s}while(l)}function xd(e){var a=e.firstChild;for(a&&a.nodeType===10&&(a=a.nextSibling);a;){var l=a;switch(a=a.nextSibling,l.nodeName){case"HTML":case"HEAD":case"BODY":xd(l),yo(l);continue;case"SCRIPT":case"STYLE":continue;case"LINK":if(l.rel.toLowerCase()==="stylesheet")continue}e.removeChild(l)}}function Tg(e,a,l,s){for(;e.nodeType===1;){var n=l;if(e.nodeName.toLowerCase()!==a.toLowerCase()){if(!s&&(e.nodeName!=="INPUT"||e.type!=="hidden"))break}else if(s){if(!e[Nr])switch(a){case"meta":if(!e.hasAttribute("itemprop"))break;return e;case"link":if(i=e.getAttribute("rel"),i==="stylesheet"&&e.hasAttribute("data-precedence"))break;if(i!==n.rel||e.getAttribute("href")!==(n.href==null||n.href===""?null:n.href)||e.getAttribute("crossorigin")!==(n.crossOrigin==null?null:n.crossOrigin)||e.getAttribute("title")!==(n.title==null?null:n.title))break;return e;case"style":if(e.hasAttribute("data-precedence"))break;return e;case"script":if(i=e.getAttribute("src"),(i!==(n.src==null?null:n.src)||e.getAttribute("type")!==(n.type==null?null:n.type)||e.getAttribute("crossorigin")!==(n.crossOrigin==null?null:n.crossOrigin))&&i&&e.hasAttribute("async")&&!e.hasAttribute("itemprop"))break;return e;default:return e}}else if(a==="input"&&e.type==="hidden"){var i=n.name==null?null:""+n.name;if(n.type==="hidden"&&e.getAttribute("name")===i)return e}else return e;if(e=ka(e.nextSibling),e===null)break}return null}function _g(e,a,l){if(a==="")return null;for(;e.nodeType!==3;)if((e.nodeType!==1||e.nodeName!=="INPUT"||e.type!=="hidden")&&!l||(e=ka(e.nextSibling),e===null))return null;return e}function Vh(e,a){for(;e.nodeType!==8;)if((e.nodeType!==1||e.nodeName!=="INPUT"||e.type!=="hidden")&&!a||(e=ka(e.nextSibling),e===null))return null;return e}function pd(e){return e.data==="$?"||e.data==="$~"}function fd(e){return e.data==="$!"||e.data==="$?"&&e.ownerDocument.readyState!=="loading"}function Rg(e,a){var l=e.ownerDocument;if(e.data==="$~")e._reactRetry=a;else if(e.data!=="$?"||l.readyState!=="loading")a();else{var s=function(){a(),l.removeEventListener("DOMContentLoaded",s)};l.addEventListener("DOMContentLoaded",s),e._reactRetry=s}}function ka(e){for(;e!=null;e=e.nextSibling){var a=e.nodeType;if(a===1||a===3)break;if(a===8){if(a=e.data,a==="$"||a==="$!"||a==="$?"||a==="$~"||a==="&"||a==="F!"||a==="F")break;if(a==="/$"||a==="/&")return null}}return e}var gd=null;function Lh(e){e=e.nextSibling;for(var a=0;e;){if(e.nodeType===8){var l=e.data;if(l==="/$"||l==="/&"){if(a===0)return ka(e.nextSibling);a--}else l!=="$"&&l!=="$!"&&l!=="$?"&&l!=="$~"&&l!=="&"||a++}e=e.nextSibling}return null}function Uh(e){e=e.previousSibling;for(var a=0;e;){if(e.nodeType===8){var l=e.data;if(l==="$"||l==="$!"||l==="$?"||l==="$~"||l==="&"){if(a===0)return e;a--}else l!=="/$"&&l!=="/&"||a++}e=e.previousSibling}return null}function Hh(e,a,l){switch(a=_i(l),e){case"html":if(e=a.documentElement,!e)throw Error(c(452));return e;case"head":if(e=a.head,!e)throw Error(c(453));return e;case"body":if(e=a.body,!e)throw Error(c(454));return e;default:throw Error(c(451))}}function rn(e){for(var a=e.attributes;a.length;)e.removeAttributeNode(a[0]);yo(e)}var Sa=new Map,Xh=new Set;function Ri(e){return typeof e.getRootNode=="function"?e.getRootNode():e.nodeType===9?e:e.ownerDocument}var hl=v.d;v.d={f:Mg,r:Ag,D:Dg,C:zg,L:Bg,m:Vg,X:Ug,S:Lg,M:Hg};function Mg(){var e=hl.f(),a=ji();return e||a}function Ag(e){var a=Es(e);a!==null&&a.tag===5&&a.type==="form"?sm(a):hl.r(e)}var rr=typeof document>"u"?null:document;function Ih(e,a,l){var s=rr;if(s&&typeof a=="string"&&a){var n=ga(a);n='link[rel="'+e+'"][href="'+n+'"]',typeof l=="string"&&(n+='[crossorigin="'+l+'"]'),Xh.has(n)||(Xh.add(n),e={rel:e,crossOrigin:l,href:a},s.querySelector(n)===null&&(a=s.createElement("link"),Zt(a,"link",e),It(a),s.head.appendChild(a)))}}function Dg(e){hl.D(e),Ih("dns-prefetch",e,null)}function zg(e,a){hl.C(e,a),Ih("preconnect",e,a)}function Bg(e,a,l){hl.L(e,a,l);var s=rr;if(s&&e&&a){var n='link[rel="preload"][as="'+ga(a)+'"]';a==="image"&&l&&l.imageSrcSet?(n+='[imagesrcset="'+ga(l.imageSrcSet)+'"]',typeof l.imageSizes=="string"&&(n+='[imagesizes="'+ga(l.imageSizes)+'"]')):n+='[href="'+ga(e)+'"]';var i=n;switch(a){case"style":i=nr(e);break;case"script":i=ir(e)}Sa.has(i)||(e=b({rel:"preload",href:a==="image"&&l&&l.imageSrcSet?void 0:e,as:a},l),Sa.set(i,e),s.querySelector(n)!==null||a==="style"&&s.querySelector(nn(i))||a==="script"&&s.querySelector(on(i))||(a=s.createElement("link"),Zt(a,"link",e),It(a),s.head.appendChild(a)))}}function Vg(e,a){hl.m(e,a);var l=rr;if(l&&e){var s=a&&typeof a.as=="string"?a.as:"script",n='link[rel="modulepreload"][as="'+ga(s)+'"][href="'+ga(e)+'"]',i=n;switch(s){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":i=ir(e)}if(!Sa.has(i)&&(e=b({rel:"modulepreload",href:e},a),Sa.set(i,e),l.querySelector(n)===null)){switch(s){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(l.querySelector(on(i)))return}s=l.createElement("link"),Zt(s,"link",e),It(s),l.head.appendChild(s)}}}function Lg(e,a,l){hl.S(e,a,l);var s=rr;if(s&&e){var n=Cs(s).hoistableStyles,i=nr(e);a=a||"default";var p=n.get(i);if(!p){var S={loading:0,preload:null};if(p=s.querySelector(nn(i)))S.loading=5;else{e=b({rel:"stylesheet",href:e,"data-precedence":a},l),(l=Sa.get(i))&&bd(e,l);var L=p=s.createElement("link");It(L),Zt(L,"link",e),L._p=new Promise(function(ee,ne){L.onload=ee,L.onerror=ne}),L.addEventListener("load",function(){S.loading|=1}),L.addEventListener("error",function(){S.loading|=2}),S.loading|=4,Mi(p,a,s)}p={type:"stylesheet",instance:p,count:1,state:S},n.set(i,p)}}}function Ug(e,a){hl.X(e,a);var l=rr;if(l&&e){var s=Cs(l).hoistableScripts,n=ir(e),i=s.get(n);i||(i=l.querySelector(on(n)),i||(e=b({src:e,async:!0},a),(a=Sa.get(n))&&yd(e,a),i=l.createElement("script"),It(i),Zt(i,"link",e),l.head.appendChild(i)),i={type:"script",instance:i,count:1,state:null},s.set(n,i))}}function Hg(e,a){hl.M(e,a);var l=rr;if(l&&e){var s=Cs(l).hoistableScripts,n=ir(e),i=s.get(n);i||(i=l.querySelector(on(n)),i||(e=b({src:e,async:!0,type:"module"},a),(a=Sa.get(n))&&yd(e,a),i=l.createElement("script"),It(i),Zt(i,"link",e),l.head.appendChild(i)),i={type:"script",instance:i,count:1,state:null},s.set(n,i))}}function Gh(e,a,l,s){var n=(n=xe.current)?Ri(n):null;if(!n)throw Error(c(446));switch(e){case"meta":case"title":return null;case"style":return typeof l.precedence=="string"&&typeof l.href=="string"?(a=nr(l.href),l=Cs(n).hoistableStyles,s=l.get(a),s||(s={type:"style",instance:null,count:0,state:null},l.set(a,s)),s):{type:"void",instance:null,count:0,state:null};case"link":if(l.rel==="stylesheet"&&typeof l.href=="string"&&typeof l.precedence=="string"){e=nr(l.href);var i=Cs(n).hoistableStyles,p=i.get(e);if(p||(n=n.ownerDocument||n,p={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},i.set(e,p),(i=n.querySelector(nn(e)))&&!i._p&&(p.instance=i,p.state.loading=5),Sa.has(e)||(l={rel:"preload",as:"style",href:l.href,crossOrigin:l.crossOrigin,integrity:l.integrity,media:l.media,hrefLang:l.hrefLang,referrerPolicy:l.referrerPolicy},Sa.set(e,l),i||Xg(n,e,l,p.state))),a&&s===null)throw Error(c(528,""));return p}if(a&&s!==null)throw Error(c(529,""));return null;case"script":return a=l.async,l=l.src,typeof l=="string"&&a&&typeof a!="function"&&typeof a!="symbol"?(a=ir(l),l=Cs(n).hoistableScripts,s=l.get(a),s||(s={type:"script",instance:null,count:0,state:null},l.set(a,s)),s):{type:"void",instance:null,count:0,state:null};default:throw Error(c(444,e))}}function nr(e){return'href="'+ga(e)+'"'}function nn(e){return'link[rel="stylesheet"]['+e+"]"}function $h(e){return b({},e,{"data-precedence":e.precedence,precedence:null})}function Xg(e,a,l,s){e.querySelector('link[rel="preload"][as="style"]['+a+"]")?s.loading=1:(a=e.createElement("link"),s.preload=a,a.addEventListener("load",function(){return s.loading|=1}),a.addEventListener("error",function(){return s.loading|=2}),Zt(a,"link",l),It(a),e.head.appendChild(a))}function ir(e){return'[src="'+ga(e)+'"]'}function on(e){return"script[async]"+e}function Kh(e,a,l){if(a.count++,a.instance===null)switch(a.type){case"style":var s=e.querySelector('style[data-href~="'+ga(l.href)+'"]');if(s)return a.instance=s,It(s),s;var n=b({},l,{"data-href":l.href,"data-precedence":l.precedence,href:null,precedence:null});return s=(e.ownerDocument||e).createElement("style"),It(s),Zt(s,"style",n),Mi(s,l.precedence,e),a.instance=s;case"stylesheet":n=nr(l.href);var i=e.querySelector(nn(n));if(i)return a.state.loading|=4,a.instance=i,It(i),i;s=$h(l),(n=Sa.get(n))&&bd(s,n),i=(e.ownerDocument||e).createElement("link"),It(i);var p=i;return p._p=new Promise(function(S,L){p.onload=S,p.onerror=L}),Zt(i,"link",s),a.state.loading|=4,Mi(i,l.precedence,e),a.instance=i;case"script":return i=ir(l.src),(n=e.querySelector(on(i)))?(a.instance=n,It(n),n):(s=l,(n=Sa.get(i))&&(s=b({},l),yd(s,n)),e=e.ownerDocument||e,n=e.createElement("script"),It(n),Zt(n,"link",s),e.head.appendChild(n),a.instance=n);case"void":return null;default:throw Error(c(443,a.type))}else a.type==="stylesheet"&&(a.state.loading&4)===0&&(s=a.instance,a.state.loading|=4,Mi(s,l.precedence,e));return a.instance}function Mi(e,a,l){for(var s=l.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),n=s.length?s[s.length-1]:null,i=n,p=0;p<s.length;p++){var S=s[p];if(S.dataset.precedence===a)i=S;else if(i!==n)break}i?i.parentNode.insertBefore(e,i.nextSibling):(a=l.nodeType===9?l.head:l,a.insertBefore(e,a.firstChild))}function bd(e,a){e.crossOrigin==null&&(e.crossOrigin=a.crossOrigin),e.referrerPolicy==null&&(e.referrerPolicy=a.referrerPolicy),e.title==null&&(e.title=a.title)}function yd(e,a){e.crossOrigin==null&&(e.crossOrigin=a.crossOrigin),e.referrerPolicy==null&&(e.referrerPolicy=a.referrerPolicy),e.integrity==null&&(e.integrity=a.integrity)}var Ai=null;function qh(e,a,l){if(Ai===null){var s=new Map,n=Ai=new Map;n.set(l,s)}else n=Ai,s=n.get(l),s||(s=new Map,n.set(l,s));if(s.has(e))return s;for(s.set(e,null),l=l.getElementsByTagName(e),n=0;n<l.length;n++){var i=l[n];if(!(i[Nr]||i[Nt]||e==="link"&&i.getAttribute("rel")==="stylesheet")&&i.namespaceURI!=="http://www.w3.org/2000/svg"){var p=i.getAttribute(a)||"";p=e+p;var S=s.get(p);S?S.push(i):s.set(p,[i])}}return s}function Yh(e,a,l){e=e.ownerDocument||e,e.head.insertBefore(l,a==="title"?e.querySelector("head > title"):null)}function Ig(e,a,l){if(l===1||a.itemProp!=null)return!1;switch(e){case"meta":case"title":return!0;case"style":if(typeof a.precedence!="string"||typeof a.href!="string"||a.href==="")break;return!0;case"link":if(typeof a.rel!="string"||typeof a.href!="string"||a.href===""||a.onLoad||a.onError)break;switch(a.rel){case"stylesheet":return e=a.disabled,typeof a.precedence=="string"&&e==null;default:return!0}case"script":if(a.async&&typeof a.async!="function"&&typeof a.async!="symbol"&&!a.onLoad&&!a.onError&&a.src&&typeof a.src=="string")return!0}return!1}function Ph(e){return!(e.type==="stylesheet"&&(e.state.loading&3)===0)}function Gg(e,a,l,s){if(l.type==="stylesheet"&&(typeof s.media!="string"||matchMedia(s.media).matches!==!1)&&(l.state.loading&4)===0){if(l.instance===null){var n=nr(s.href),i=a.querySelector(nn(n));if(i){a=i._p,a!==null&&typeof a=="object"&&typeof a.then=="function"&&(e.count++,e=Di.bind(e),a.then(e,e)),l.state.loading|=4,l.instance=i,It(i);return}i=a.ownerDocument||a,s=$h(s),(n=Sa.get(n))&&bd(s,n),i=i.createElement("link"),It(i);var p=i;p._p=new Promise(function(S,L){p.onload=S,p.onerror=L}),Zt(i,"link",s),l.instance=i}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(l,a),(a=l.state.preload)&&(l.state.loading&3)===0&&(e.count++,l=Di.bind(e),a.addEventListener("load",l),a.addEventListener("error",l))}}var vd=0;function $g(e,a){return e.stylesheets&&e.count===0&&Bi(e,e.stylesheets),0<e.count||0<e.imgCount?function(l){var s=setTimeout(function(){if(e.stylesheets&&Bi(e,e.stylesheets),e.unsu
vendor: 10,529 bytes, line 2053
2053spend){var i=e.unsuspend;e.unsuspend=null,i()}},6e4+a);0<e.imgBytes&&vd===0&&(vd=62500*kg());var n=setTimeout(function(){if(e.waitingForImages=!1,e.count===0&&(e.stylesheets&&Bi(e,e.stylesheets),e.unsuspend)){var i=e.unsuspend;e.unsuspend=null,i()}},(e.imgBytes>vd?50:800)+a);return e.unsuspend=l,function(){e.unsuspend=null,clearTimeout(s),clearTimeout(n)}}:null}function Di(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)Bi(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var zi=null;function Bi(e,a){e.stylesheets=null,e.unsuspend!==null&&(e.count++,zi=new Map,a.forEach(Kg,e),zi=null,Di.call(e))}function Kg(e,a){if(!(a.state.loading&4)){var l=zi.get(e);if(l)var s=l.get(null);else{l=new Map,zi.set(e,l);for(var n=e.querySelectorAll("link[data-precedence],style[data-precedence]"),i=0;i<n.length;i++){var p=n[i];(p.nodeName==="LINK"||p.getAttribute("media")!=="not all")&&(l.set(p.dataset.precedence,p),s=p)}s&&l.set(null,s)}n=a.instance,p=n.getAttribute("data-precedence"),i=l.get(p)||s,i===s&&l.set(null,n),l.set(p,n),this.count++,s=Di.bind(this),n.addEventListener("load",s),n.addEventListener("error",s),i?i.parentNode.insertBefore(n,i.nextSibling):(e=e.nodeType===9?e.head:e,e.insertBefore(n,e.firstChild)),a.state.loading|=4}}var cn={$$typeof:D,Provider:null,Consumer:null,_currentValue:T,_currentValue2:T,_threadCount:0};function qg(e,a,l,s,n,i,p,S,L){this.tag=1,this.containerInfo=e,this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.next=this.pendingContext=this.context=this.cancelPendingCommit=null,this.callbackPriority=0,this.expirationTimes=_a(-1),this.entangledLanes=this.shellSuspendCounter=this.errorRecoveryDisabledLanes=this.expiredLanes=this.warmLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=_a(0),this.hiddenUpdates=_a(null),this.identifierPrefix=s,this.onUncaughtError=n,this.onCaughtError=i,this.onRecoverableError=p,this.pooledCache=null,this.pooledCacheLanes=0,this.formState=L,this.incompleteTransitions=new Map}function Zh(e,a,l,s,n,i,p,S,L,ee,ne,he){return e=new qg(e,a,l,p,L,ee,ne,he,S),a=1,i===!0&&(a|=24),i=oa(3,null,null,a),e.current=i,i.stateNode=e,a=Fo(),a.refCount++,e.pooledCache=a,a.refCount++,i.memoizedState={element:s,isDehydrated:l,cache:a},lc(i),e}function Qh(e){return e?(e=Ls,e):Ls}function Jh(e,a,l,s,n,i){n=Qh(n),s.context===null?s.context=n:s.pendingContext=n,s=_l(a),s.payload={element:l},i=i===void 0?null:i,i!==null&&(s.callback=i),l=Rl(e,s,a),l!==null&&(na(l,e,a),Hr(l,e,a))}function Wh(e,a){if(e=e.memoizedState,e!==null&&e.dehydrated!==null){var l=e.retryLane;e.retryLane=l!==0&&l<a?l:a}}function wd(e,a){Wh(e,a),(e=e.alternate)&&Wh(e,a)}function Fh(e){if(e.tag===13||e.tag===31){var a=rs(e,67108864);a!==null&&na(a,e,67108864),wd(e,67108864)}}function ex(e){if(e.tag===13||e.tag===31){var a=ha();a=Z(a);var l=rs(e,a);l!==null&&na(l,e,a),wd(e,a)}}var Vi=!0;function Yg(e,a,l,s){var n=z.T;z.T=null;var i=v.p;try{v.p=2,jd(e,a,l,s)}finally{v.p=i,z.T=n}}function Pg(e,a,l,s){var n=z.T;z.T=null;var i=v.p;try{v.p=8,jd(e,a,l,s)}finally{v.p=i,z.T=n}}function jd(e,a,l,s){if(Vi){var n=Nd(s);if(n===null)od(e,a,s,Li,l),ax(e,s);else if(Qg(n,e,a,l,s))s.stopPropagation();else if(ax(e,s),a&4&&-1<Zg.indexOf(e)){for(;n!==null;){var i=Es(n);if(i!==null)switch(i.tag){case 3:if(i=i.stateNode,i.current.memoizedState.isDehydrated){var p=Xe(i.pendingLanes);if(p!==0){var S=i;for(S.pendingLanes|=2,S.entangledLanes|=2;p;){var L=1<<31-bt(p);S.entanglements[1]|=L,p&=~L}Ga(i),(rt&6)===0&&(vi=se()+500,an(0))}}break;case 31:case 13:S=rs(i,2),S!==null&&na(S,i,2),ji(),wd(i,2)}if(i=Nd(s),i===null&&od(e,a,s,Li,l),i===n)break;n=i}n!==null&&s.stopPropagation()}else od(e,a,s,null,l)}}function Nd(e){return e=So(e),kd(e)}var Li=null;function kd(e){if(Li=null,e=Os(e),e!==null){var a=m(e);if(a===null)e=null;else{var l=a.tag;if(l===13){if(e=y(a),e!==null)return e;e=null}else if(l===31){if(e=u(a),e!==null)return e;e=null}else if(l===3){if(a.stateNode.current.memoizedState.isDehydrated)return a.tag===3?a.stateNode.containerInfo:null;e=null}else a!==e&&(e=null)}}return Li=e,null}function tx(e){switch(e){case"beforetoggle":case"cancel":case"click":case"close":case"contextmenu":case"copy":case"cut":case"auxclick":case"dblclick":case"dragend":case"dragstart":case"drop":case"focusin":case"focusout":case"input":case"invalid":case"keydown":case"keypress":case"keyup":case"mousedown":case"mouseup":case"paste":case"pause":case"play":case"pointercancel":case"pointerdown":case"pointerup":case"ratechange":case"reset":case"resize":case"seeked":case"submit":case"toggle":case"touchcancel":case"touchend":case"touchstart":case"volumechange":case"change":case"selectionchange":case"textInput":case"compositionstart":case"compositionend":case"compositionupdate":case"beforeblur":case"afterblur":case"beforeinput":case"blur":case"fullscreenchange":case"focus":case"hashchange":case"popstate":case"select":case"selectstart":return 2;case"drag":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"mousemove":case"mouseout":case"mouseover":case"pointermove":case"pointerout":case"pointerover":case"scroll":case"touchmove":case"wheel":case"mouseenter":case"mouseleave":case"pointerenter":case"pointerleave":return 8;case"message":switch(ye()){case De:return 2;case et:return 8;case Me:case tt:return 32;case st:return 268435456;default:return 32}default:return 32}}var Sd=!1,Il=null,Gl=null,$l=null,dn=new Map,un=new Map,Kl=[],Zg="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset".split(" ");function ax(e,a){switch(e){case"focusin":case"focusout":Il=null;break;case"dragenter":case"dragleave":Gl=null;break;case"mouseover":case"mouseout":$l=null;break;case"pointerover":case"pointerout":dn.delete(a.pointerId);break;case"gotpointercapture":case"lostpointercapture":un.delete(a.pointerId)}}function mn(e,a,l,s,n,i){return e===null||e.nativeEvent!==i?(e={blockedOn:a,domEventName:l,eventSystemFlags:s,nativeEvent:i,targetContainers:[n]},a!==null&&(a=Es(a),a!==null&&Fh(a)),e):(e.eventSystemFlags|=s,a=e.targetContainers,n!==null&&a.indexOf(n)===-1&&a.push(n),e)}function Qg(e,a,l,s,n){switch(a){case"focusin":return Il=mn(Il,e,a,l,s,n),!0;case"dragenter":return Gl=mn(Gl,e,a,l,s,n),!0;case"mouseover":return $l=mn($l,e,a,l,s,n),!0;case"pointerover":var i=n.pointerId;return dn.set(i,mn(dn.get(i)||null,e,a,l,s,n)),!0;case"gotpointercapture":return i=n.pointerId,un.set(i,mn(un.get(i)||null,e,a,l,s,n)),!0}return!1}function lx(e){var a=Os(e.target);if(a!==null){var l=m(a);if(l!==null){if(a=l.tag,a===13){if(a=y(l),a!==null){e.blockedOn=a,Ae(e.priority,function(){ex(l)});return}}else if(a===31){if(a=u(l),a!==null){e.blockedOn=a,Ae(e.priority,function(){ex(l)});return}}else if(a===3&&l.stateNode.current.memoizedState.isDehydrated){e.blockedOn=l.tag===3?l.stateNode.containerInfo:null;return}}}e.blockedOn=null}function Ui(e){if(e.blockedOn!==null)return!1;for(var a=e.targetContainers;0<a.length;){var l=Nd(e.nativeEvent);if(l===null){l=e.nativeEvent;var s=new l.constructor(l.type,l);ko=s,l.target.dispatchEvent(s),ko=null}else return a=Es(l),a!==null&&Fh(a),e.blockedOn=l,!1;a.shift()}return!0}function sx(e,a,l){Ui(e)&&l.delete(a)}function Jg(){Sd=!1,Il!==null&&Ui(Il)&&(Il=null),Gl!==null&&Ui(Gl)&&(Gl=null),$l!==null&&Ui($l)&&($l=null),dn.forEach(sx),un.forEach(sx)}function Hi(e,a){e.blockedOn===a&&(e.blockedOn=null,Sd||(Sd=!0,r.unstable_scheduleCallback(r.unstable_NormalPriority,Jg)))}var Xi=null;function rx(e){Xi!==e&&(Xi=e,r.unstable_scheduleCallback(r.unstable_NormalPriority,function(){Xi===e&&(Xi=null);for(var a=0;a<e.length;a+=3){var l=e[a],s=e[a+1],n=e[a+2];if(typeof s!="function"){if(kd(s||l)===null)continue;break}var i=Es(l);i!==null&&(e.splice(a,3),a-=3,Nc(i,{pending:!0,data:n,method:l.method,action:s},s,n))}}))}function or(e){function a(L){return Hi(L,e)}Il!==null&&Hi(Il,e),Gl!==null&&Hi(Gl,e),$l!==null&&Hi($l,e),dn.forEach(a),un.forEach(a);for(var l=0;l<Kl.length;l++){var s=Kl[l];s.blockedOn===e&&(s.blockedOn=null)}for(;0<Kl.length&&(l=Kl[0],l.blockedOn===null);)lx(l),l.blockedOn===null&&Kl.shift();if(l=(e.ownerDocument||e).$$reactFormReplay,l!=null)for(s=0;s<l.length;s+=3){var n=l[s],i=l[s+1],p=n[Tt]||null;if(typeof i=="function")p||rx(l);else if(p){var S=null;if(i&&i.hasAttribute("formAction")){if(n=i,p=i[Tt]||null)S=p.formAction;else if(kd(n)!==null)continue}else S=p.action;typeof S=="function"?l[s+1]=S:(l.splice(s,3),s-=3),rx(l)}}}function nx(){function e(i){i.canIntercept&&i.info==="react-transition"&&i.intercept({handler:function(){return new Promise(function(p){return n=p})},focusReset:"manual",scroll:"manual"})}function a(){n!==null&&(n(),n=null),s||setTimeout(l,20)}function l(){if(!s&&!navigation.transition){var i=navigation.currentEntry;i&&i.url!=null&&navigation.navigate(i.url,{state:i.getState(),info:"react-transition",history:"replace"})}}if(typeof navigation=="object"){var s=!1,n=null;return navigation.addEventListener("navigate",e),navigation.addEventListener("navigatesuccess",a),navigation.addEventListener("navigateerror",a),setTimeout(l,100),function(){s=!0,navigation.removeEventListener("navigate",e),navigation.removeEventListener("navigatesuccess",a),navigation.removeEventListener("navigateerror",a),n!==null&&(n(),n=null)}}}function Od(e){this._internalRoot=e}Ii.prototype.render=Od.prototype.render=function(e){var a=this._internalRoot;if(a===null)throw Error(c(409));var l=a.current,s=ha();Jh(l,s,e,a,null,null)},Ii.prototype.unmount=Od.prototype.unmount=function(){var e=this._internalRoot;if(e!==null){this._internalRoot=null;var a=e.containerInfo;Jh(e.current,2,null,e,null,null),ji(),a[Ma]=null}};function Ii(e){this._internalRoot=e}Ii.prototype.unstable_scheduleHydration=function(e){if(e){var a=fe();e={blockedOn:null,target:e,priority:a};for(var l=0;l<Kl.length&&a!==0&&a<Kl[l].priority;l++);Kl.splice(l,0,e),l===0&&lx(e)}};var ix=o.version;if(ix!=="19.2.3")throw Error(c(527,ix,"19.2.3"));v.findDOMNode=function(e){var a=e._reactInternals;if(a===void 0)throw typeof e.render=="function"?Error(c(188)):(e=Object.keys(e).join(","),Error(c(268,e)));return e=x(a),e=e!==null?N(e):null,e=e===null?null:e.stateNode,e};var Wg={bundleType:0,version:"19.2.3",rendererPackageName:"react-dom",currentDispatcherRef:z,reconcilerVersion:"19.2.3"};
2053if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"){var Gi=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!Gi.isDisabled&&Gi.supportsFiber)try{He=Gi.inject(Wg),dt=Gi}catch{}}return xn.createRoot=function(e,a){if(!h(e))throw Error(c(299));var l=!1,s="",n=xm,i=pm,p=fm;return a!=null&&(a.unstable_strictMode===!0&&(l=!0),a.identifierPrefix!==void 0&&(s=a.identifierPrefix),a.onUncaughtError!==void 0&&(n=a.onUncaughtError),a.onCaughtError!==void 0&&(i=a.onCaughtError),a.onRecoverableError!==void 0&&(p=a.onRecoverableError)),a=Zh(e,1,!1,null,null,l,s,null,n,i,p,nx),e[Ma]=a.current,id(e),new Od(a)},xn.hydrateRoot=function(e,a,l){if(!h(e))throw Error(c(299));var s=!1,n="",i=xm,p=pm,S=fm,L=null;return l!=null&&(l.unstable_strictMode===!0&&(s=!0),l.identifierPrefix!==void 0&&(n=l.identifierPrefix),l.onUncaughtError!==void 0&&(i=l.onUncaughtError),l.onCaughtError!==void 0&&(p=l.onCaughtError),l.onRecoverableError!==void 0&&(S=l.onRecoverableError),l.formState!==void 0&&(L=l.formState)),a=Zh(e,1,!0,a,l??null,s,n,L,i,p,S,nx),a.context=Qh(null),l=a.current,s=ha(),s=Z(s),n=_l(s),n.callback=null,Rl(l,n,s),l=s,a.current.lanes=l,Ra(a,l),Ga(a),e[Ma]=a.current,id(e),new Ii(a)},xn.version="19.2.3",xn}var gx;function ob(){if(gx)return Td.exports;gx=1;function r(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(r)}catch(o){console.error(o)}}return r(),Td.exports=ib(),Td.exports}var cb=ob();const db=Yx(cb);let ub={data:""},mb=r=>{if(typeof window=="object"){let o=(r?r.querySelector("#_goober"):window._goober)||Object.assign(document.createElement("style"),{innerHTML:" ",id:"_goober"});return o.nonce=window.__nonce__,o.parentNode||(r||document.head).appendChild(o),o.firstChild}return r||ub},hb=/(?:([\u0080-\uFFFF\w-%@]+) *:? *([^{;]+?);|([^;}{]*?) *{)|(}\s*)/g,xb=/\/\*[^]*?\*\/|  +/g,bx=/\n+/g,Zl=(r,o)=>{let d="",c="",h="";for(let m in r){let y=r[m];m[0]=="@"?m[1]=="i"?d=m+" "+y+";":c+=m[1]=="f"?Zl(y,m):m+"{"+Zl(y,m[1]=="k"?"":o)+"}":typeof y=="object"?c+=Zl(y,o?o.replace(/([^,])+/g,u=>m.replace(/([^,]*:\S+\([^)]*\))|([^,])+/g,f=>/&/.test(f)?f.replace(/&/g,u):u?u+" "+f:f)):m):y!=null&&(m=/^--/.test(m)?m:m.replace(/[A-Z]/g,"-$&").toLowerCase(),h+=Zl.p?Zl.p(m,y):m+":"+y+";")}return d+(o&&h?o+"{"+h+"}":h)+c},xl={},Px=r=>{if(typeof r=="object"){let o="";for(let d in r)o+=d+Px(r[d]);return o}return r},pb=(r,o,d,c,h)=>{let m=Px(r),y=xl[m]||(xl[m]=(f=>{let x=0,N=11;for(;x<f.length;)N=101*N+f.charCodeAt(x++)>>>0;return"go"+N})(m));if(!xl[y]){let f=m!==r?r:(x=>{let N,b,C=[{}];for(;N=hb.exec(x.replace(xb,""));)N[4]?C.shift():N[3]?(b=N[3].replace(bx," ").trim(),C.unshift(C[0][b]=C[0][b]||{})):C[0][N[1]]=N[2].replace(bx," ").trim();return C[0]})(r);xl[y]=Zl(h?{["@keyframes "+y]:f}:f,d?"":"."+y)}let u=d&&xl.g?xl.g:null;return d&&(xl.g=xl[y]),((f,x,N,b)=>{b?x.data=x.data.replace(b,f):x.data.indexOf(f)===-1&&(x.data=N?f+x.data:x.data+f)})(xl[y],o,c,u),y},fb=(r,o,d)=>r.reduce((c,h,m)=>{let y=o[m];if(y&&y.call){let u=y(d),f=u&&u.props&&u.props.className||/^go/.test(u)&&u;y=f?"."+f:u&&typeof u=="object"?u.props?"":Zl(u,""):u===!1?"":u}return c+h+(y??"")},"");function co(r){let o=this||{},d=r.call?r(o.p):r;return pb(d.unshift?d.raw?fb(d,[].slice.call(arguments,1),o.p):d.reduce((c,h)=>Object.assign(c,h&&h.call?h(o.p):h),{}):d,mb(o.target),o.g,o.o,o.k)}let Zx,Kd,qd;co.bind({g:1});let gl=co.bind({k:1});function gb(r,o,d,c){Zl.p=o,Zx=r,Kd=d,qd=c}function Fl(r,o){let d=this||{};return function(){let c=arguments;function h(m,y){let u=Object.assign({},m),f=u.className||h.className;d.p=Object.assign({theme:Kd&&Kd()},u),d.o=/ *go\d+/.test(f),u.className=co.apply(d,c)+(f?" "+f:"");let x=r;return r[0]&&(x=u.as||r,delete u.as),qd&&x[0]&&qd(u),Zx(x,u)}return h}}var bb=r=>typeof r=="function",Wi=(r,o)=>bb(r)?r(o):r,yb=(()=>{let r=0;return()=>(++r).toString()})(),Qx=(()=>{let r;return()=>{if(r===void 0&&typeof window<"u"){let o=matchMedia("(prefers-reduced-motion: reduce)");r=!o||o.matches}return r}})(),vb=20,nu="default",Jx=(r,o)=>{let{toastLimit:d}=r.settings;switch(o.type){case 0:return{...r,toasts:[o.toast,...r.toasts].slice(0,d)};case 1:return{...r,toasts:r.toasts.map(y=>y.id===o.toast.id?{...y,...o.toast}:y)};case 2:let{toast:c}=o;return Jx(r,{type:r.toasts.find(y=>y.id===c.id)?1:0,toast:c});case 3:let{toastId:h}=o;return{...r,toasts:r.toasts.map(y=>y.id===h||h===void 0?{...y,dismissed:!0,visible:!1}:y)};case 4:return o.toastId===void 0?{...r,toasts:[]}:{...r,toasts:r.toasts.filter(y=>y.id!==o.toastId)};case 5:return{...r,pausedAt:o.time};case 6:let m=o.time-(r.pausedAt||0);return{...r,pausedAt:void 0,toasts:r.toasts.map(y=>({...y,pauseDuration:y.pauseDuration+m}))}}},Zi=[],Wx={toasts:[],pausedAt:void 0,settings:{toastLimit:vb}},qa={},Fx=(r,o=nu)=>{qa[o]=Jx(qa[o]||Wx,r),Zi.forEach(([d,c])=>{d===o&&c(qa[o])})},ep=r=>
2053Object.keys(qa).forEach(o=>Fx(r,o)),wb=r=>Object.keys(qa).find(o=>qa[o].toasts.some(d=>d.id===r)),uo=(r=nu)=>o=>{Fx(o,r)},jb={blank:4e3,error:4e3,success:2e3,loading:1/0,custom:4e3},Nb=(r={},o=nu)=>{let[d,c]=j.useState(qa[o]||Wx),h=j.useRef(qa[o]);j.useEffect(()=>(h.current!==qa[o]&&c(qa[o]),Zi.push([o,c]),()=>{let y=Zi.findIndex(([u])=>u===o);y>-1&&Zi.splice(y,1)}),[o]);let m=d.toasts.map(y=>{var u,f,x;return{...r,...r[y.type],...y,removeDelay:y.removeDelay||((u=r[y.type])==null?void 0:u.removeDelay)||(r==null?void 0:r.removeDelay),duration:y.duration||((f=r[y.type])==null?void 0:f.duration)||(r==null?void 0:r.duration)||jb[y.type],style:{...r.style,...(x=r[y.type])==null?void 0:x.style,...y.style}}});return{...d,toasts:m}},kb=(r,o="blank",d)=>({createdAt:Date.now(),visible:!0,dismissed:!1,type:o,ariaProps:{role:"status","aria-live":"polite"},message:r,pauseDuration:0,...d,id:(d==null?void 0:d.id)||yb()}),Sn=r=>(o,d)=>{let c=kb(o,r,d);return uo(c.toasterId||wb(c.id))({type:2,toast:c}),c.id},ft=(r,o)=>Sn("blank")(r,o);ft.error=Sn("error");ft.success=Sn("success");ft.loading=Sn("loading");ft.custom=Sn("custom");ft.dismiss=(r,o)=>{let d={type:3,toastId:r};o?uo(o)(d):ep(d)};ft.dismissAll=r=>ft.dismiss(void 0,r);ft.remove=(r,o)=>{let d={type:4,toastId:r};o?uo(o)(d):ep(d)};ft.removeAll=r=>ft.remove(void 0,r);ft.promise=(r,o,d)=>{let c=ft.loading(o.loading,{...d,...d==null?void 0:d.loading});return typeof r=="function"&&(r=r()),r.then(h=>{let m=o.success?Wi(o.success,h):void 0;return m?ft.success(m,{id:c,...d,...d==null?void 0:d.success}):ft.dismiss(c),h}).catch(h=>{let m=o.error?Wi(o.error,h):void 0;m?ft.error(m,{id:c,...d,...d==null?void 0:d.error}):ft.dismiss(c)}),r};var Sb=1e3,Ob=(r,o="default")=>{let{toasts:d,pausedAt:c}=Nb(r,o),h=j.useRef(new Map).current,m=j.useCallback((b,C=Sb)=>{if(h.has(b))return;let g=setTimeout(()=>{h.delete(b),y({type:4,toastId:b})},C);h.set(b,g)},[]);j.useEffect(()=>{if(c)return;let b=Date.now(),C=d.map(g=>{if(g.duration===1/0)return;let O=(g.duration||0)+g.pauseDuration-(b-g.createdAt);if(O<0){g.visible&&ft.dismiss(g.id);return}return setTimeout(()=>ft.dismiss(g.id,o),O)});return()=>{C.forEach(g=>g&&clearTimeout(g))}},[d,c,o]);let y=j.useCallback(uo(o),[o]),u=j.useCallback(()=>{y({type:5,time:Date.now()})},[y]),f=j.useCallback((b,C)=>{y({type:1,toast:{id:b,height:C}})},[y]),x=j.useCallback(()=>{c&&y({type:6,time:Date.now()})},[c,y]),N=j.useCallback((b,C)=>{let{reverseOrder:g=!1,gutter:O=8,defaultPosition:E}=C||{},_=d.filter(D=>(D.position||E)===(b.position||E)&&D.height),k=_.findIndex(D=>D.id===b.id),R=_.filter((D,te)=>te<k&&D.visible).length;return _.filter(D=>D.visible).slice(...g?[R+1]:[0,R]).reduce((D,te)=>D+(te.height||0)+O,0)},[d]);return j.useEffect(()=>{d.forEach(b=>{if(b.dismissed)m(b.id,b.removeDelay);else{let C=h.get(b.id);
vendor: 4,275 bytes, lines 2053-2224
2053C&&(clearTimeout(C),h.delete(b.id))}})},[d,m]),{toasts:d,handlers:{updateHeight:f,startPause:u,endPause:x,calculateOffset:N}}},Eb=gl`
2054from {
2055  transform: scale(0) rotate(45deg);
2056	opacity: 0;
2057}
2058to {
2059 transform: scale(1) rotate(45deg);
2060  opacity: 1;
2061}`,Cb=gl`
2062from {
2063  transform: scale(0);
2064  opacity: 0;
2065}
2066to {
2067  transform: scale(1);
2068  opacity: 1;
2069}`,Tb=gl`
2070from {
2071  transform: scale(0) rotate(90deg);
2072	opacity: 0;
2073}
2074to {
2075  transform: scale(1) rotate(90deg);
2076	opacity: 1;
2077}`,_b=Fl("div")`
2078  width: 20px;
2079  opacity: 0;
2080  height: 20px;
2081  border-radius: 10px;
2082  background: ${r=>r.primary||"#ff4b4b"};
2083  position: relative;
2084  transform: rotate(45deg);
2085
2086  animation: ${Eb} 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275)
2087    forwards;
2088  animation-delay: 100ms;
2089
2090  &:after,
2091  &:before {
2092    content: '';
2093    animation: ${Cb} 0.15s ease-out forwards;
2094    animation-delay: 150ms;
2095    position: absolute;
2096    border-radius: 3px;
2097    opacity: 0;
2098    background: ${r=>r.secondary||"#fff"};
2099    bottom: 9px;
2100    left: 4px;
2101    height: 2px;
2102    width: 12px;
2103  }
2104
2105  &:before {
2106    animation: ${Tb} 0.15s ease-out forwards;
2107    animation-delay: 180ms;
2108    transform: rotate(90deg);
2109  }
2110`,Rb=gl`
2111  from {
2112    transform: rotate(0deg);
2113  }
2114  to {
2115    transform: rotate(360deg);
2116  }
2117`,Mb=Fl("div")`
2118  width: 12px;
2119  height: 12px;
2120  box-sizing: border-box;
2121  border: 2px solid;
2122  border-radius: 100%;
2123  border-color: ${r=>r.secondary||"#e0e0e0"};
2124  border-right-color: ${r=>r.primary||"#616161"};
2125  animation: ${Rb} 1s linear infinite;
2126`,Ab=gl`
2127from {
2128  transform: scale(0) rotate(45deg);
2129	opacity: 0;
2130}
2131to {
2132  transform: scale(1) rotate(45deg);
2133	opacity: 1;
2134}`,Db=gl`
21350% {
2136	height: 0;
2137	width: 0;
2138	opacity: 0;
2139}
214040% {
2141  height: 0;
2142	width: 6px;
2143	opacity: 1;
2144}
2145100% {
2146  opacity: 1;
2147  height: 10px;
2148}`,zb=Fl("div")`
2149  width: 20px;
2150  opacity: 0;
2151  height: 20px;
2152  border-radius: 10px;
2153  background: ${r=>r.primary||"#61d345"};
2154  position: relative;
2155  transform: rotate(45deg);
2156
2157  animation: ${Ab} 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275)
2158    forwards;
2159  animation-delay: 100ms;
2160  &:after {
2161    content: '';
2162    box-sizing: border-box;
2163    animation: ${Db} 0.2s ease-out forwards;
2164    opacity: 0;
2165    animation-delay: 200ms;
2166    position: absolute;
2167    border-right: 2px solid;
2168    border-bottom: 2px solid;
2169    border-color: ${r=>r.secondary||"#fff"};
2170    bottom: 6px;
2171    left: 6px;
2172    height: 10px;
2173    width: 6px;
2174  }
2175`,Bb=Fl("div")`
2176  position: absolute;
2177`,Vb=Fl("div")`
2178  position: relative;
2179  display: flex;
2180  justify-content: center;
2181  align-items: center;
2182  min-width: 20px;
2183  min-height: 20px;
2184`,Lb=gl`
2185from {
2186  transform: scale(0.6);
2187  opacity: 0.4;
2188}
2189to {
2190  transform: scale(1);
2191  opacity: 1;
2192}`,Ub=Fl("div")`
2193  position: relative;
2194  transform: scale(0.6);
2195  opacity: 0.4;
2196  min-width: 20px;
2197  animation: ${Lb} 0.3s 0.12s cubic-bezier(0.175, 0.885, 0.32, 1.275)
2198    forwards;
2199`,Hb=({toast:r})=>{let{icon:o,type:d,iconTheme:c}=r;return o!==void 0?typeof o=="string"?j.createElement(Ub,null,o):o:d==="blank"?null:j.createElement(Vb,null,j.createElement(Mb,{...c}),d!=="loading"&&j.createElement(Bb,null,d==="error"?j.createElement(_b,{...c}):j.createElement(zb,{...c})))},Xb=r=>`
22000% {transform: translate3d(0,${r*-200}%,0) scale(.6); opacity:.5;}
2201100% {transform: translate3d(0,0,0) scale(1); opacity:1;}
2202`,Ib=r=>`
22030% {transform: translate3d(0,0,-1px) scale(1); opacity:1;}
2204100% {transform: translate3d(0,${r*-150}%,-1px) scale(.6); opacity:0;}
2205`,Gb="0%{opacity:0;} 100%{opacity:1;}",$b="0%{opacity:1;} 100%{opacity:0;}",Kb=Fl("div")`
2206  display: flex;
2207  align-items: center;
2208  background: #fff;
2209  color: #363636;
2210  line-height: 1.3;
2211  will-change: transform;
2212  box-shadow: 0 3px 10px rgba(0, 0, 0, 0.1), 0 3px 3px rgba(0, 0, 0, 0.05);
2213  max-width: 350px;
2214  pointer-events: auto;
2215  padding: 8px 10px;
2216  border-radius: 8px;
2217`,qb=Fl("div")`
2218  display: flex;
2219  justify-content: center;
2220  margin: 4px 10px;
2221  color: inherit;
2222  flex: 1 1 auto;
2223  white-space: pre-line;
2224`,Yb=(r,o)=>{let d=r.includes("top")?1:-1,[c,h]=Qx()?[Gb,$b]:[Xb(d),Ib(d)];return{animation:o?`${gl(c)} 0.35s cubic-bezier(.21,1.02,.73,1) forwards`:`${gl(h)} 0.4s forwards cubic-bezier(.06,.71,.55,1)`}},Pb=j.memo(({toast:r,position:o,style:d,children:c})=>{let h=r.height?Yb(r.position||o||"top-center",r.visible):{opacity:0}
2224,m=j.createElement(Hb,{toast:r}),y=j.createElement(qb,{...r.ariaProps},Wi(r.message,r));return j.createElement(Kb,{className:r.className,style:{...h,...d,...r.style}},typeof c=="function"?c({icon:m,message:y}):j.createElement(j.Fragment,null,m,y))});gb(j.createElement);var Zb=({id:r,className:o,style:d,onHeightUpdate:c,children:h})=>{let m=j.useCallback(y=>{if(y){let u=()=>{let f=y.getBoundingClientRect().height;c(r,f)};u(),new MutationObserver(u).observe(y,{subtree:!0,childList:!0,characterData:!0})}},[r,c]);return j.createElement("div",{ref:m,className:o,style:d},h)},Qb=(r,o)=>{let d=r.includes("top"),c=d?{top:0}:{bottom:0},h=r.includes("center")?{justifyContent:"center"}:r.includes("right")?{justifyContent:"flex-end"}:{};return{left:0,right:0,display:"flex",position:"absolute",transition:Qx()?void 0:"all 230ms cubic-bezier(.21,1.02,.73,1)",transform:`translateY(${o*(d?1:-1)}px)`,...c,...h}},Jb=co`
2225  z-index: 9999;
2226  > * {
2227    pointer-events: auto;
2228  }
2229`,$i=16,Wb=({reverseOrder:r,position:o="top-center",toastOptions:d,gutter:c,children:h,toasterId:m,containerStyle:y,containerClassName:u})=>{let{toasts:f,handlers:x}=Ob(d,m);return j.createElement("div",{"data-rht-toaster":m||"",style:{position:"fixed",zIndex:9999,top:$i,left:$i,right:$i,bottom:$i,pointerEvents:"none",...y},className:u,onMouseEnter:x.startPause,onMouseLeave:x.endPause},f.map(N=>{let b=N.position||o,C=x.calculateOffset(N,{reverseOrder:r,gutter:c,defaultPosition:o}),g=Qb(b,C);return j.createElement(Zb,{id:N.id,key:N.id,onHeightUpdate:x.updateHeight,className:N.visible?Jb:"",style:g},N.type==="custom"?Wi(N.message,N):h?h(N):j.createElement(Pb,{toast:N,position:b}))}))},oe=ft;/**
2230 * react-router v7.10.1
2231 *
2232 * Copyright (c) Remix Software Inc.
2233 *
2234 * This source code is licensed under the MIT license found in the
2235 * LICENSE.md file in the root directory of this source tree.
2236 *
2237 * @license MIT
2238 */var yx="popstate";function Fb(r={}){function o(c,h){let{pathname:m,search:y,hash:u}=c.location;return Yd("",{pathname:m,search:y,hash:u},h.state&&h.state.usr||null,h.state&&h.state.key||"default")}function d(c,h){return typeof h=="string"?h:bn(h)}return ty(o,d,null,r)}function St(r,o){if(r===!1||r===null||typeof r>"u")throw new Error(o)}function pa(r,o){if(!r){typeof console<"u"&&console.warn(o);try{throw new Error(o)}catch{}}}function ey(){return Math.random().toString(36).substring(2,10)}function vx(r,o){return{usr:r.state,key:r.key,idx:o}}function Yd(r,o,d=null,c){return{pathname:typeof r=="string"?r:r.pathname,search:"",hash:"",...typeof o=="string"?yr(o):o,state:d,key:o&&o.key||c||ey()}}function bn({pathname:r="/",search:o="",hash:d=""}){return o&&o!=="?"&&(r+=o.charAt(0)==="?"?o:"?"+o),d&&d!=="#"&&(r+=d.charAt(0)==="#"?d:"#"+d),r}function yr(r){let o={};if(r){let d=r.indexOf("#");d>=0&&(o.hash=r.substring(d),r=r.substring(0,d));let c=r.indexOf("?");c>=0&&(o.search=r.substring(c),r=r.substring(0,c)),r&&(o.pathname=r)}return o}function ty(r,o,d,c={}){let{window:h=document.defaultView,v5Compat:m=!1}=c,y=h.history,u="POP",f=null,x=N();x==null&&(x=0,y.replaceState({...y.state,idx:x},""));function N(){return(y.state||{idx:null}).idx}function b(){u="POP";let _=N(),k=_==null?null:_-x;x=_,f&&f({action:u,location:E.location,delta:k})}function C(_,k){u="PUSH";let R=Yd(E.location,_,k);x=N()+1;let D=vx(R,x),te=E.createHref(R);try{y.pushState(D,"",te)}catch(W){if(W instanceof DOMException&&W.name==="DataCloneError")throw W;h.location.assign(te)}m&&f&&f({action:u,location:E.location,delta:1})}function g(_,k){u="REPLACE";let R=Yd(E.location,_,k);x=N();let D=vx(R,x),te=E.createHref(R);y.replaceState(D,"",te),m&&f&&f({action:u,location:E.location,delta:0})}function O(_){return ay(_)}let E={get action(){return u},get location(){return r(h,y)},listen(_){if(f)throw new Error("A history only accepts one active listener");return h.addEventListener(yx,b),f=_,()=>{h.removeEventListener(yx,b),f=null}},createHref(_){return o(h,_)},createURL:O,encodeLocation(_){let k=O(_);return{pathname:k.pathname,search:k.search,hash:k.hash}},push:C,replace:g,go(_){return y.go(_)}};return E}function ay(r,o=!1){let d="http://localhost";
2238typeof window<"u"&&(d=window.location.origin!=="null"?window.location.origin:window.location.href),St(d,"No window.location.(origin|href) available to create URL");let c=typeof r=="string"?r:bn(r);return c=c.replace(/ $/,"%20"),!o&&c.startsWith("//")&&(c=d+c),new URL(c,d)}function tp(r,o,d="/"){return ly(r,o,d,!1)}function ly(r,o,d,c){let h=typeof o=="string"?yr(o):o,m=bl(h.pathname||"/",d);if(m==null)return null;let y=ap(r);sy(y);let u=null;for(let f=0;u==null&&f<y.length;++f){let x=py(m);u=hy(y[f],x,c)}return u}function ap(r,o=[],d=[],c="",h=!1){let m=(y,u,f=h,x)=>{let N={relativePath:x===void 0?y.path||"":x,caseSensitive:y.caseSensitive===!0,childrenIndex:u,route:y};if(N.relativePath.startsWith("/")){if(!N.relativePath.startsWith(c)&&f)return;St(N.relativePath.startsWith(c),`Absolute route path "${N.relativePath}" nested under path "${c}" is not valid. An absolute child route path must start with the combined path of all its parent routes.`),N.relativePath=N.relativePath.slice(c.length)}let b=fl([c,N.relativePath]),C=d.concat(N);y.children&&y.children.length>0&&(St(y.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${b}".`),ap(y.children,o,C,b,f)),!(y.path==null&&!y.index)&&o.push({path:b,score:uy(b,y.index),routesMeta:C})};return r.forEach((y,u)=>{var f;if(y.path===""||!((f=y.path)!=null&&f.includes("?")))m(y,u);else for(let x of lp(y.path))m(y,u,!0,x)}),o}function lp(r){let o=r.split("/");if(o.length===0)return[];let[d,...c]=o,h=d.endsWith("?"),m=d.replace(/\?$/,"");if(c.length===0)return h?[m,""]:[m];let y=lp(c.join("/")),u=[];return u.push(...y.map(f=>f===""?m:[m,f].join("/"))),h&&u.push(...y),u.map(f=>r.startsWith("/")&&f===""?"/":f)}function sy(r){r.sort((o,d)=>o.score!==d.score?d.score-o.score:my(o.routesMeta.map(c=>c.childrenIndex),d.routesMeta.map(c=>c.childrenIndex)))}var ry=/^:[\w-]+$/,ny=3,iy=2,oy=1,cy=10,dy=-2,wx=r=>r==="*";function uy(r,o){let d=r.split("/"),c=d.length;return d.some(wx)&&(c+=dy),o&&(c+=iy),d.filter(h=>!wx(h)).reduce((h,m)=>h+(ry.test(m)?ny:m===""?oy:cy),c)}function my(r,o){return r.length===o.length&&r.slice(0,-1).every((c,h)=>c===o[h])?r[r.length-1]-o[o.length-1]:0}function hy(r,o,d=!1){let{routesMeta:c}=r,h={},m="/",y=[];for(let u=0;u<c.length;++u){let f=c[u],x=u===c.length-1,N=m==="/"?o:o.slice(m.length)||"/",b=Fi({path:f.relativePath,caseSensitive:f.caseSensitive,end:x},N),C=f.route;if(!b&&x&&d&&!c[c.length-1].route.index&&(b=Fi({path:f.relativePath,caseSensitive:f.caseSensitive,end:!1},N)),!b)return null;
2238Object.assign(h,b.params),y.push({params:h,pathname:fl([m,b.pathname]),pathnameBase:vy(fl([m,b.pathnameBase])),route:C}),b.pathnameBase!=="/"&&(m=fl([m,b.pathnameBase]))}return y}function Fi(r,o){typeof r=="string"&&(r={path:r,caseSensitive:!1,end:!0});let[d,c]=xy(r.path,r.caseSensitive,r.end),h=o.match(d);if(!h)return null;let m=h[0],y=m.replace(/(.)\/+$/,"$1"),u=h.slice(1);return{params:c.reduce((x,{paramName:N,isOptional:b},C)=>{if(N==="*"){let O=u[C]||"";y=m.slice(0,m.length-O.length).replace(/(.)\/+$/,"$1")}const g=u[C];return b&&!g?x[N]=void 0:x[N]=(g||"").replace(/%2F/g,"/"),x},{}),pathname:m,pathnameBase:y,pattern:r}}function xy(r,o=!1,d=!0){pa(r==="*"||!r.endsWith("*")||r.endsWith("/*"),`Route path "${r}" will be treated as if it were "${r.replace(/\*$/,"/*")}" because the \`*\` character must always follow a \`/\` in the pattern. To get rid of this warning, please change the route path to "${r.replace(/\*$/,"/*")}".`);let c=[],h="^"+r.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(y,u,f)=>(c.push({paramName:u,isOptional:f!=null}),f?"/?([^\\/]+)?":"/([^\\/]+)")).replace(/\/([\w-]+)\?(\/|$)/g,"(/$1)?$2");return r.endsWith("*")?(c.push({paramName:"*"}),h+=r==="*"||r==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):d?h+="\\/*$":r!==""&&r!=="/"&&(h+="(?:(?=\\/|$))"),[new RegExp(h,o?void 0:"i"),c]}function py(r){try{return r.split("/").map(o=>decodeURIComponent(o).replace(/\//g,"%2F")).join("/")}catch(o){return pa(!1,`The URL path "${r}" could not be decoded because it is a malformed URL segment. This is probably due to a bad percent encoding (${o}).`),r}}function bl(r,o){if(o==="/")return r;if(!r.toLowerCase().startsWith(o.toLowerCase()))return null;let d=o.endsWith("/")?o.length-1:o.length,c=r.charAt(d);return c&&c!=="/"?null:r.slice(d)||"/"}var fy=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,gy=r=>fy.test(r);function by(r,o="/"){let{pathname:d,search:c="",hash:h=""}=typeof r=="string"?yr(r):r,m;if(d)if(gy(d))m=d;else{if(d.includes("//")){let y=d;d=d.replace(/\/\/+/g,"/"),pa(!1,`Pathnames cannot have embedded double slashes - normalizing ${y} -> ${d}`)}d.startsWith("/")?m=jx(d.substring(1),"/"):m=jx(d,o)}else m=o;return{pathname:m,search:wy(c),hash:jy(h)}}function jx(r,o){let d=o.replace(/\/+$/,"").split("/");return r.split("/").forEach(h=>{h===".."?d.length>1&&d.pop():h!=="."&&d.push(h)}),d.length>1?d.join("/"):"/"}function Ad(r,o,d,c){return`Cannot include a '${r}' character in a manually specified \`to.${o}\` field [${JSON.stringify(c)}].  Please separate it out to the \`to.${d}\` field. Alternatively you may provide the full path as a string in <Link to="..."> and the router will parse it for you.`}function yy(r){return r.filter((o,d)=>d===0||o.route.path&&o.route.path.length>0)}function iu(r){let o=yy(r);return o.map((d,c)=>c===o.length-1?d.pathname:d.pathnameBase)}function ou(r,o,d,c=!1){let h;typeof r=="string"?h=yr(r):(h={...r},St(!h.pathname||!h.pathname.includes("?"),Ad("?","pathname","search",h)),St(!h.pathname||!h.pathname.includes("#"),Ad("#","pathname","hash",h)),St(!h.search||!h.search.includes("#"),Ad("#","search","hash",h)));let m=r===""||h.pathname==="",y=m?"/":h.pathname,u;if(y==null)u=d;else{let b=o.length-1;if(!c&&y.startsWith("..")){let C=y.split("/");for(;C[0]==="..";)C.shift(),b-=1;h.pathname=C.join("/")}u=b>=0?o[b]:"/"}let f=by(h,u),x=y&&y!=="/"&&y.endsWith("/"),N=(m||y===".")&&d.endsWith("/");return!f.pathname.endsWith("/")&&(x||N)&&(f.pathname+="/"),f}var fl=r=>r.join("/").replace(/\/\/+/g,"/"),vy=r=>r.replace(/\/+$/,"").replace(/^\/*/,"/"),wy=r=>!r||r==="?"?"":r.startsWith("?")?r:"?"+r,jy=r=>!r||r==="#"?"":r.startsWith("#")?r:"#"+r;function Ny(r){return r!=null&&typeof r.status=="number"&&typeof r.statusText=="string"&&typeof r.internal=="boolean"&&"data"in r}function ky(r){return r.map(o=>o.route.path).filter(Boolean).join("/").replace(/\/\/*/g,"/")||"/"}Object.getOwnPropertyNames(Object.prototype).sort().join("\0");var sp=["POST","PUT","PATCH","DELETE"];new Set(sp);var Sy=["GET",...sp];new Set(Sy);var vr=j.createContext(null);vr.displayName="DataRouter";var mo=j.createContext(null);mo.displayName="DataRouterState";j.createContext(!1);var rp=j.createContext({isTransitioning:!1});rp.displayName="ViewTransition";var Oy=j.createContext(new Map);Oy.displayName="Fetchers";var Ey=j.createContext(null);Ey.displayName="Await";var Ea=j.createContext(null);Ea.displayName="Navigation";var On=j.createContext(null);On.displayName="Location";var La=j.createContext({outlet:null,matches:[],isDataRoute:!1});La.displayName="Route";var cu=j.createContext(null);cu.displayName="RouteError";function Cy(r,{relative:o}={}){St(wr(),"useHref() may be used only in the context of a <Router> component.");let{basename:d,navigator:c}=j.useContext(Ea),{hash:h,pathname:m,search:y}=En(r,{relative:o}),u=m;return d!=="/"&&(u=m==="/"?d:fl([d,m])),c.createHref({pathname:u,search:y,hash:h})}function wr(){return j.useContext(On)!=null}function Za(){return St(wr(),"useLocation() may be used only in the context of a <Router> component."),j.useContext(On).location}var np="You should call navigate() in a React.useEffect(), not when your component is first rendered.";function ip(r){j.useContext(Ea).static||j.useLayoutEffect(r)}function ho(){let{isDataRoute:r}=j.useContext(La);return r?Xy():Ty()}function Ty(){St(wr(),"useNavigate() may be used only in the context of a <Router> component.");let r=j.useContext(vr),{basename:o,navigator:d}=j.useContext(Ea),{matches:c}=j.useContext(La),{pathname:h}=Za(),m=JSON.stringify(iu(c)),y=j.useRef(!1);return ip(()=>{y.current=!0}),j.useCallback((f,x={})=>
2238{if(pa(y.current,np),!y.current)return;if(typeof f=="number"){d.go(f);return}let N=ou(f,JSON.parse(m),h,x.relative==="path");r==null&&o!=="/"&&(N.pathname=N.pathname==="/"?o:fl([o,N.pathname])),(x.replace?d.replace:d.push)(N,x.state,x)},[o,d,m,h,r])}j.createContext(null);function du(){let{matches:r}=j.useContext(La),o=r[r.length-1];return o?o.params:{}}function En(r,{relative:o}={}){let{matches:d}=j.useContext(La),{pathname:c}=Za(),h=JSON.stringify(iu(d));return j.useMemo(()=>ou(r,JSON.parse(h),c,o==="path"),[r,h,c,o])}function _y(r,o){return op(r,o)}function op(r,o,d,c,h){var R;St(wr(),"useRoutes() may be used only in the context of a <Router> component.");let{navigator:m}=j.useContext(Ea),{matches:y}=j.useContext(La),u=y[y.length-1],f=u?u.params:{},x=u?u.pathname:"/",N=u?u.pathnameBase:"/",b=u&&u.route;{let D=b&&b.path||"";cp(x,!b||D.endsWith("*")||D.endsWith("*?"),`You rendered descendant <Routes> (or called \`useRoutes()\`) at "${x}" (under <Route path="${D}">) but the parent route path has no trailing "*". This means if you navigate deeper, the parent won't match anymore and therefore the child routes will never render.
2239
2240Please change the parent <Route path="${D}"> to <Route path="${D==="/"?"*":`${D}/*`}">.`)}let C=Za(),g;if(o){let D=typeof o=="string"?yr(o):o;St(N==="/"||((R=D.pathname)==null?void 0:R.startsWith(N)),`When overriding the location using \`<Routes location>\` or \`useRoutes(routes, location)\`, the location pathname must begin with the portion of the URL pathname that was matched by all parent routes. The current pathname base is "${N}" but pathname "${D.pathname}" was given in the \`location\` prop.`),g=D}else g=C;let O=g.pathname||"/",E=O;if(N!=="/"){let D=N.replace(/^\//,"").split("/");E="/"+O.replace(/^\//,"").split("/").slice(D.length).join("/")}let _=tp(r,{pathname:E});pa(b||_!=null,`No routes matched location "${g.pathname}${g.search}${g.hash}" `),pa(_==null||_[_.length-1].route.element!==void 0||_[_.length-1].route.Component!==void 0||_[_.length-1].route.lazy!==void 0,`Matched leaf route at location "${g.pathname}${g.search}${g.hash}" does not have an element or Component. This means it will render an <Outlet /> with a null value by default resulting in an "empty" page.`);let k=zy(_&&_.map(D=>Object.assign({},D,{params:Object.assign({},f,D.params),pathname:fl([N,m.encodeLocation?m.encodeLocation(D.pathname.replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:D.pathname]),pathnameBase:D.pathnameBase==="/"?N:fl([N,m.encodeLocation?m.encodeLocation(D.pathnameBase.replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:D.pathnameBase])})),y,d,c,h);return o&&k?j.createElement(On.Provider,{value:{location:{pathname:"/",search:"",hash:"",state:null,key:"default",...g},navigationType:"POP"}},k):k}function Ry(){let r=Hy(),o=Ny(r)?`${r.status} ${r.statusText}`:r instanceof Error?r.message:JSON.stringify(r),d=r instanceof Error?r.stack:null,c="rgba(200,200,200, 0.5)",h={padding:"0.5rem",backgroundColor:c},m={padding:"2px 4px",backgroundColor:c},y=null;return console.error("Error handled by React Router default ErrorBoundary:",r),y=j.createElement(j.Fragment,null,j.createElement("p",null,"💿 Hey developer 👋"),j.createElement("p",null,"You can provide a way better UX than this when your app throws errors by providing your own ",j.createElement("code",{style:m},"ErrorBoundary")," or"," ",j.createElement("code",{style:m},"errorElement")," prop on your route.")),j.createElement(j.Fragment,null,j.createElement("h2",null,"Unexpected Application Error!"),j.createElement("h3",{style:{fontStyle:"italic"}},o),d?j.createElement("pre",{style:h},d):null,y)}var My=j.createElement(Ry,null),Ay=class extends j.Component{constructor(r){super(r),this.state={location:r.location,revalidation:r.revalidation,error:r.error}}static getDerivedStateFromError(r){return{error:r}}static getDerivedStateFromProps(r,o){return o.location!==r.location||o.revalidation!=="idle"&&r.revalidation==="idle"?{error:r.error,location:r.location,revalidation:r.revalidation}:{error:r.error!==void 0?r.error:o.error,location:o.location,revalidation:r.revalidation||o.revalidation}}componentDidCatch(r,o){this.props.onError?this.props.onError(r,o):console.error("React Router caught the following error during render",r)}render(){return this.state.error!==void 0?j.createElement(La.Provider,{value:this.props.routeContext},j.createElement(cu.Provider,{value:this.state.error,children:this.props.component})):this.props.children}};function Dy({routeContext:r,match:o,children:d}){let c=j.useContext(vr);return c&&c.static&&c.staticContext&&(o.route.errorElement||o.route.ErrorBoundary)&&(c.staticContext._deepestRenderedBoundaryId=o.route.id),j.createElement(La.Provider,{value:r},d)}function zy(r,o=[],d=null,c=null,h=null){if(r==null){if(!d)return null;if(d.errors)r=d.matches;else if(o.length===0&&!d.initialized&&d.matches.length>0)r=d.matches;else return null}let m=r,y=d==null?void 0:d.errors;if(y!=null){let N=m.findIndex(b=>b.route.id&&(y==null?void 0:y[b.route.id])!==void 0);St(N>=0,`Could not find a matching route for errors on route IDs: ${Object.keys(y).join(",")}`),m=m.slice(0,Math.min(m.length,N+1))}let u=!1,f=-1;if(d)for(let N=0;N<m.length;N++){let b=m[N];if((b.route.HydrateFallback||b.route.hydrateFallbackElement)&&(f=N),b.route.id){let{loaderData:C,errors:g}
2240=d,O=b.route.loader&&!C.hasOwnProperty(b.route.id)&&(!g||g[b.route.id]===void 0);if(b.route.lazy||O){u=!0,f>=0?m=m.slice(0,f+1):m=[m[0]];break}}}let x=d&&c?(N,b)=>{var C,g;c(N,{location:d.location,params:((g=(C=d.matches)==null?void 0:C[0])==null?void 0:g.params)??{},unstable_pattern:ky(d.matches),errorInfo:b})}:void 0;return m.reduceRight((N,b,C)=>{let g,O=!1,E=null,_=null;d&&(g=y&&b.route.id?y[b.route.id]:void 0,E=b.route.errorElement||My,u&&(f<0&&C===0?(cp("route-fallback",!1,"No `HydrateFallback` element provided to render during initial hydration"),O=!0,_=null):f===C&&(O=!0,_=b.route.hydrateFallbackElement||null)));let k=o.concat(m.slice(0,C+1)),R=()=>{let D;return g?D=E:O?D=_:b.route.Component?D=j.createElement(b.route.Component,null):b.route.element?D=b.route.element:D=N,j.createElement(Dy,{match:b,routeContext:{outlet:N,matches:k,isDataRoute:d!=null},children:D})};return d&&(b.route.ErrorBoundary||b.route.errorElement||C===0)?j.createElement(Ay,{location:d.location,revalidation:d.revalidation,component:E,error:g,children:R(),routeContext:{outlet:null,matches:k,isDataRoute:!0},onError:x}):R()},null)}function uu(r){return`${r} must be used within a data router.  See https://reactrouter.com/en/main/routers/picking-a-router.`}function By(r){let o=j.useContext(vr);return St(o,uu(r)),o}function Vy(r){let o=j.useContext(mo);return St(o,uu(r)),o}function Ly(r){let o=j.useContext(La);return St(o,uu(r)),o}function mu(r){let o=Ly(r),d=o.matches[o.matches.length-1];return St(d.route.id,`${r} can only be used on routes that contain a unique "id"`),d.route.id}function Uy(){return mu("useRouteId")}function Hy(){var c;let r=j.useContext(cu),o=Vy("useRouteError"),d=mu("useRouteError");return r!==void 0?r:(c=o.errors)==null?void 0:c[d]}function Xy(){let{router:r}=By("useNavigate"),o=mu("useNavigate"),d=j.useRef(!1);return ip(()=>{d.current=!0}),j.useCallback(async(h,m={})=>{pa(d.current,np),d.current&&(typeof h=="number"?await r.navigate(h):await r.navigate(h,{fromRouteId:o,...m}))},[r,o])}var Nx={};function cp(r,o,d){!o&&!Nx[r]&&(Nx[r]=!0,pa(!1,d))}j.memo(Iy);function Iy({routes:r,future:o,state:d,unstable_onError:c}){return op(r,void 0,d,c,o)}function kx({to:r,replace:o,state:d,relative:c}
2240){St(wr(),"<Navigate> may be used only in the context of a <Router> component.");let{static:h}=j.useContext(Ea);pa(!h,"<Navigate> must not be used on the initial render in a <StaticRouter>. This is a no-op, but you should modify your code so the <Navigate> is only ever rendered in response to some user interaction or state change.");let{matches:m}=j.useContext(La),{pathname:y}=Za(),u=ho(),f=ou(r,iu(m),y,c==="path"),x=JSON.stringify(f);return j.useEffect(()=>{u(JSON.parse(x),{replace:o,state:d,relative:c})},[u,x,c,o,d]),null}function Qt(r){St(!1,"A <Route> is only ever to be used as the child of <Routes> element, never rendered directly. Please wrap your <Route> in a <Routes>.")}function Gy({basename:r="/",children:o=null,location:d,navigationType:c="POP",navigator:h,static:m=!1,unstable_useTransitions:y}){St(!wr(),"You cannot render a <Router> inside another <Router>. You should never have more than one in your app.");let u=r.replace(/^\/*/,"/"),f=j.useMemo(()=>({basename:u,navigator:h,static:m,unstable_useTransitions:y,future:{}}),[u,h,m,y]);typeof d=="string"&&(d=yr(d));let{pathname:x="/",search:N="",hash:b="",state:C=null,key:g="default"}=d,O=j.useMemo(()=>{let E=bl(x,u);return E==null?null:{location:{pathname:E,search:N,hash:b,state:C,key:g},navigationType:c}},[u,x,N,b,C,g,c]);return pa(O!=null,`<Router basename="${u}"> is not able to match the URL "${x}${N}${b}" because it does not start with the basename, so the <Router> won't render anything.`),O==null?null:j.createElement(Ea.Provider,{value:f},j.createElement(On.Provider,{children:o,value:O}))}function $y({children:r,location:o}){return _y(Pd(r),o)}function Pd(r,o=[]){let d=[];return j.Children.forEach(r,(c,h)=>{if(!j.isValidElement(c))return;let m=[...o,h];if(c.type===j.Fragment){d.push.apply(d,Pd(c.props.children,m));return}St(c.type===Qt,`[${typeof c.type=="string"?c.type:c.type.name}] is not a <Route> component. All component children of <Routes> must be a <Route> or <React.Fragment>`),St(!c.props.index||!c.props.children,"An index route cannot have child routes.");let y={id:c.props.id||m.join("-"),caseSensitive:c.props.caseSensitive,element:c.props.element,Component:c.props.Component,index:c.props.index,path:c.props.path,middleware:c.props.middleware,loader:c.props.loader,action:c.props.action,hydrateFallbackElement:c.props.hydrateFallbackElement,HydrateFallback:c.props.HydrateFallback,errorElement:c.props.errorElement,ErrorBoundary:c.props.ErrorBoundary,hasErrorBoundary:c.props.hasErrorBoundary===!0||c.props.ErrorBoundary!=null||c.props.errorElement!=null,shouldRevalidate:c.props.shouldRevalidate,handle:c.props.handle,lazy:c.props.lazy};c.props.children&&(y.children=Pd(c.props.children,m)),d.push(y)}),d}var Qi="get",Ji="application/x-www-form-urlencoded";function xo(r){return typeof HTMLElement<"u"&&r instanceof HTMLElement}function Ky(r){return xo(r)&&r.tagName.toLowerCase()==="button"}function qy(r){return xo(r)&&r.tagName.toLowerCase()==="form"}function Yy(r){return xo(r)&&r.tagName.toLowerCase()==="input"}function Py(r){return!!(r.metaKey||r.altKey||r.ctrlKey||r.shiftKey)}function Zy(r,o){return r.button===0&&(!o||o==="_self")&&!Py(r)}function Zd(r=""){return new URLSearchParams(typeof r=="string"||Array.isArray(r)||r instanceof URLSearchParams?r:Object.keys(r).reduce((o,d)=>{let c=r[d];return o.concat(Array.isArray(c)?c.map(h=>[d,h]):[[d,c]])},[]))}function Qy(r,o){let d=Zd(r);return o&&o.forEach((c,h)=>{d.has(h)||o.getAll(h).forEach(m=>{d.append(h,m)})}),d}var Ki=null;function Jy(){if(Ki===null)try{new FormData(document.createElement("form"),0),Ki=!1}catch{Ki=!0}return Ki}var Wy=new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);function Dd(r){return r!=null&&!Wy.has(r)?(pa(!1,`"${r}" is not a valid \`encType\` for \`<Form>\`/\`<fetcher.Form>\` and will default to "${Ji}"`),null):r}function Fy(r,o){let d,c,h,m,y;if(qy(r)){let u=r.getAttribute("action");c=u?bl(u,o):null,d=r.getAttribute("method")||Qi,h=Dd(r.getAttribute("enctype"))||Ji,m=new FormData(r)}else if(Ky(r)||Yy(r)&&(r.type==="submit"||r.type==="image")){let u=r.form;if(u==null)throw new Error('Cannot submit a <button> or <input type="submit"> without a <form>');let f=r.getAttribute("formaction")||u.getAttribute("action");if(c=f?bl(f,o):null,d=r.getAttribute("formmethod")||u.getAttribute("method")||Qi,h=Dd(r.getAttribute("formenctype"))||Dd(u.getAttribute("enctype"))||Ji,m=new FormData(u,r),!Jy()){let{name:x,type:N,value:b}=r;if(N==="image"){let C=x?`${x}.`:"";m.append(`${C}x`,"0"),m.append(`${C}y`,"0")}else x&&m.append(x,b)}}else{if(xo(r))throw new Error('Cannot submit element that is not <form>, <button>, or <input type="submit|image">');d=Qi,c=null,h=Ji,y=r}return m&&h==="text/plain"&&(y=m,m=void 0),{action:c,method:d.toLowerCase(),encType:h,formData:m,body:y}}Object.getOwnPropertyNames(Object.prototype).sort().join("\0");function hu(r,o){if(r===!1||r===null||typeof r>"u")throw new Error(o)}function e1(r,o,d){let c=typeof r=="string"?new URL(r,typeof window>"u"?"server://singlefetch/":window.location.origin):r;return c.pathname==="/"?c.pathname=`_root.${d}`:o&&bl(c.pathname,o)==="/"?c.pathname=`${o.replace(/\/$/,"")}/_root.${d}`:c.pathname=`${c.pathname.replace(/\/$/,"")}.${d}`,c}
2240async function t1(r,o){if(r.id in o)return o[r.id];try{let d=await import(r.module);return o[r.id]=d,d}catch(d){return console.error(`Error loading route module \`${r.module}\`, reloading page...`),console.error(d),window.__reactRouterContext&&window.__reactRouterContext.isSpaMode,window.location.reload(),new Promise(()=>{})}}function a1(r){return r==null?!1:r.href==null?r.rel==="preload"&&typeof r.imageSrcSet=="string"&&typeof r.imageSizes=="string":typeof r.rel=="string"&&typeof r.href=="string"}async function l1(r,o,d){let c=await Promise.all(r.map(async h=>{let m=o.routes[h.route.id];if(m){let y=await t1(m,d);return y.links?y.links():[]}return[]}));return i1(c.flat(1).filter(a1).filter(h=>h.rel==="stylesheet"||h.rel==="preload").map(h=>h.rel==="stylesheet"?{...h,rel:"prefetch",as:"style"}:{...h,rel:"prefetch"}))}function Sx(r,o,d,c,h,m){let y=(f,x)=>d[x]?f.route.id!==d[x].route.id:!0,u=(f,x)=>{var N;return d[x].pathname!==f.pathname||((N=d[x].route.path)==null?void 0:N.endsWith("*"))&&d[x].params["*"]!==f.params["*"]};return m==="assets"?o.filter((f,x)=>y(f,x)||u(f,x)):m==="data"?o.filter((f,x)=>{var b;let N=c.routes[f.route.id];if(!N||!N.hasLoader)return!1;if(y(f,x)||u(f,x))return!0;if(f.route.shouldRevalidate){let C=f.route.shouldRevalidate({currentUrl:new URL(h.pathname+h.search+h.hash,window.origin),currentParams:((b=d[0])==null?void 0:b.params)||{},nextUrl:new URL(r,window.origin),nextParams:f.params,defaultShouldRevalidate:!0});if(typeof C=="boolean")return C}return!0}):[]}function s1(r,o,{includeHydrateFallback:d}={}){return r1(r.map(c=>{let h=o.routes[c.route.id];if(!h)return[];let m=[h.module];return h.clientActionModule&&(m=m.concat(h.clientActionModule)),h.clientLoaderModule&&(m=m.concat(h.clientLoaderModule)),d&&h.hydrateFallbackModule&&(m=m.concat(h.hydrateFallbackModule)),h.imports&&(m=m.concat(h.imports)),m}).flat(1))}function r1(r){return[...new Set(r)]}function n1(r){let o={},d=Object.keys(r).sort();for(let c of d)o[c]=r[c];return o}function i1(r,o){let d=new Set;return new Set(o),r.reduce((c,h)=>{let m=JSON.stringify(n1(h));return d.has(m)||(d.add(m),c.push({key:m,link:h})),c},[])}function dp(){let r=j.useContext(vr);return hu(r,"You must render this element inside a <DataRouterContext.Provider> element"),r}function o1(){let r=j.useContext(mo);return hu(r,"You must render this element inside a <DataRouterStateContext.Provider> element"),r}var xu=j.createContext(void 0);xu.displayName="FrameworkContext";function up(){let r=j.useContext(xu);return hu(r,"You must render this element inside a <HydratedRouter> element"),r}function c1(r,o){let d=j.useContext(xu),[c,h]=j.useState(!1),[m,y]=j.useState(!1),{onFocus:u,onBlur:f,onMouseEnter:x,onMouseLeave:N,onTouchStart:b}=o,C=j.useRef(null);j.useEffect(()=>{if(r==="render"&&y(!0),r==="viewport"){let E=k=>{k.forEach(R=>{y(R.isIntersecting)})},_=new IntersectionObserver(E,{threshold:.5});return C.current&&_.observe(C.current),()=>{_.disconnect()}}},[r]),j.useEffect(()=>{if(c){let E=setTimeout(()=>{y(!0)},100);return()=>{clearTimeout(E)}}},[c]);let g=()=>{h(!0)},O=()=>{h(!1),y(!1)};return d?r!=="intent"?[m,C,{}]:[m,C,{onFocus:pn(u,g),onBlur:pn(f,O),onMouseEnter:pn(x,g),onMouseLeave:pn(N,O),onTouchStart:pn(b,g)}]:[!1,C,{}]}function pn(r,o){return d=>{r&&r(d),d.defaultPrevented||o(d)}}function d1({page:r,...o}){let{router:d}=dp(),c=j.useMemo(()=>tp(d.routes,r,d.basename),[d.routes,r,d.basename]);return c?j.createElement(m1,{page:r,matches:c,...o}):null}function u1(r){let{manifest:o,routeModules:d}=up(),[c,h]=j.useState([]);return j.useEffect(()=>{let m=!1;return l1(r,o,d).then(y=>{m||h(y)}),()=>{m=!0}},[r,o,d]),c}function m1({page:r,matches:o,...d}){let c=Za(),{manifest:h,routeModules:m}=up(),{basename:y}=dp(),{loaderData:u,matches:f}=o1(),x=j.useMemo(()=>Sx(r,o,f,h,c,"data"),[r,o,f,h,c]),N=j.useMemo(()=>Sx(r,o,f,h,c,"assets"),[r,o,f,h,c]),b=j.useMemo(()=>{if(r===c.pathname+c.search+c.hash)return[];let O=new Set,E=!1;if(o.forEach(k=>{var D;let R=h.routes[k.route.id];!R||!R.hasLoader||(!x.some(te=>te.route.id===k.route.id)&&k.route.id in u&&((D=m[k.route.id])!=null&&D.shouldRevalidate)||R.hasCl
2240ientLoader?E=!0:O.add(k.route.id))}),O.size===0)return[];let _=e1(r,y,"data");return E&&O.size>0&&_.searchParams.set("_routes",o.filter(k=>O.has(k.route.id)).map(k=>k.route.id).join(",")),[_.pathname+_.search]},[y,u,c,h,x,o,r,m]),C=j.useMemo(()=>s1(N,h),[N,h]),g=u1(N);return j.createElement(j.Fragment,null,b.map(O=>j.createElement("link",{key:O,rel:"prefetch",as:"fetch",href:O,...d})),C.map(O=>j.createElement("link",{key:O,rel:"modulepreload",href:O,...d})),g.map(({key:O,link:E})=>j.createElement("link",{key:O,nonce:d.nonce,...E})))}function h1(...r){return o=>{r.forEach(d=>{typeof d=="function"?d(o):d!=null&&(d.current=o)})}}var mp=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";try{mp&&(window.__reactRouterVersion="7.10.1")}catch{}function x1({basename:r,children:o,unstable_useTransitions:d,window:c}){let h=j.useRef();h.current==null&&(h.current=Fb({window:c,v5Compat:!0}));let m=h.current,[y,u]=j.useState({action:m.action,location:m.location}),f=j.useCallback(x=>{d===!1?u(x):j.startTransition(()=>u(x))},[d]);return j.useLayoutEffect(()=>m.listen(f),[m,f]),j.createElement(Gy,{basename:r,children:o,location:y.location,navigationType:y.action,navigator:m,unstable_useTransitions:d===!0})}var hp=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,xp=j.forwardRef(function({onClick:o,discover:d="render",prefetch:c="none",relative:h,reloadDocument:m,replace:y,state:u,target:f,to:x,preventScrollReset:N,viewTransition:b,...C},g){let{basename:O,unstable_useTransitions:E}=j.useContext(Ea),_=typeof x=="string"&&hp.test(x),k,R=!1;if(typeof x=="string"&&_&&(k=x,mp))try{let G=new URL(window.location.href),U=x.startsWith("//")?new URL(G.protocol+x):new URL(x),q=bl(U.pathname,O);U.origin===G.origin&&q!=null?x=q+U.search+U.hash:R=!0}catch{pa(!1,`<Link to="${x}"> contains an invalid URL which will probably break when clicked - please update to a valid URL path.`)}let D=Cy(x,{relative:h}),[te,W,$]=c1(c,C),H=b1(x,{replace:y,state:u,target:f,preventScrollReset:N,relative:h,viewTransition:b,unstable_useTransitions:E});function J(G){o&&o(G),G.defaultPrevented||H(G)}let Y=j.createElement("a",{...C,...$,href:k||D,onClick:R||m?o:J,ref:h1(g,W),target:f,"data-discover":!_&&d==="render"?"true":void 0});return te&&!_?j.createElement(j.Fragment,null,Y,j.createElement(d1,{page:D})):Y});xp.displayName="Link";var p1=j.forwardRef(function({"aria-current":o="page",caseSensitive:d=!1,className:c="",end:h=!1,style:m,to:y,viewTransition:u,children:f,...x},N){let b=En(y,{relative:x.relative}),C=Za(),g=j.useContext(mo),{navigator:O,basename:E}=j.useContext(Ea),_=g!=null&&N1(b)&&u===!0,k=O.encodeLocation?O.encodeLocation(b).pathname:b.pathname,R=C.pathname,D=g&&g.navigation&&g.navigation.location?g.navigation.location.pathname:null;d||(R=R.toLowerCase(),D=D?D.toLowerCase():null,k=k.toLowerCase()),D&&E&&(D=bl(D,E)||D);const te=k!=="/"&&k.endsWith("/")?k.length-1:k.length;let W=R===k||!h&&R.startsWith(k)&&R.charAt(te)==="/",$=D!=null&&(D===k||!h&&D.startsWith(k)&&D.charAt(k.length)==="/"),H={isActive:W,isPending:$,isTransitioning:_},J=W?o:void 0,Y;typeof c=="function"?Y=c(H):Y=[c,W?"active":null,$?"pending":null,_?"transitioning":null].filter(Boolean).join(" ");let G=typeof m=="function"?m(H):m;return j.createElement(xp,{...x,"aria-current":J,className:Y,ref:N,style:G,to:y,viewTransition:u},typeof f=="function"?f(H):f)});p1.displayName="NavLink";var f1=j.forwardRef(({discover:r="render",fetcherKey:o,navigate:d,reloadDocument:c,replace:h,state:m,method:y=Qi,action:u,onSubmit:f,relative:x,preventScrollReset:N,viewTransition:b,...C},g)=>{let{unstable_useTransitions:O}=j.useContext(Ea),E=w1(),_=j1(u,{relative:x}),k=y.toLowerCase()==="get"?"get":"post",R=typeof u=="string"&&hp.test(u),D=te=>{if(f&&f(te),te.defaultPrevented)return;te.preventDefault();let W=te.nativeEvent.submitter,$=(W==null?void 0:W.getAttribute("formmethod"))||y,H=()=>E(W||te.currentTarget,{fetcherKey:o,method:$,navigate:d,replace:h,state:m,relative:x,preventScrollReset:N,viewTransition:b});O&&d!==!1?j.startTransition(()=>H()):H()};return j.createElement("form",{ref:g,method:k,action:_,onSubmit:c?f
2240:D,...C,"data-discover":!R&&r==="render"?"true":void 0})});f1.displayName="Form";function g1(r){return`${r} must be used within a data router.  See https://reactrouter.com/en/main/routers/picking-a-router.`}function pp(r){let o=j.useContext(vr);return St(o,g1(r)),o}function b1(r,{target:o,replace:d,state:c,preventScrollReset:h,relative:m,viewTransition:y,unstable_useTransitions:u}={}){let f=ho(),x=Za(),N=En(r,{relative:m});return j.useCallback(b=>{if(Zy(b,o)){b.preventDefault();let C=d!==void 0?d:bn(x)===bn(N),g=()=>f(r,{replace:C,state:c,preventScrollReset:h,relative:m,viewTransition:y});u?j.startTransition(()=>g()):g()}},[x,f,N,d,c,o,r,h,m,y,u])}function fp(r){pa(typeof URLSearchParams<"u","You cannot use the `useSearchParams` hook in a browser that does not support the URLSearchParams API. If you need to support Internet Explorer 11, we recommend you load a polyfill such as https://github.com/ungap/url-search-params.");let o=j.useRef(Zd(r)),d=j.useRef(!1),c=Za(),h=j.useMemo(()=>Qy(c.search,d.current?null:o.current),[c.search]),m=ho(),y=j.useCallback((u,f)=>{const x=Zd(typeof u=="function"?u(new URLSearchParams(h)):u);d.current=!0,m("?"+x,f)},[m,h]);return[h,y]}var y1=0,v1=()=>`__${String(++y1)}__`;function w1(){let{router:r}=pp("useSubmit"),{basename:o}=j.useContext(Ea),d=Uy(),c=r.fetch,h=r.navigate;return j.useCallback(async(m,y={})=>{let{action:u,method:f,encType:x,formData:N,body:b}=Fy(m,o);if(y.navigate===!1){let C=y.fetcherKey||v1();await c(C,d,y.action||u,{preventScrollReset:y.preventScrollReset,formData:N,body:b,formMethod:y.method||f,formEncType:y.encType||x,flushSync:y.flushSync})}else await h(y.action||u,{preventScrollReset:y.preventScrollReset,formData:N,body:b,formMethod:y.method||f,formEncType:y.encType||x,replace:y.replace,state:y.state,fromRouteId:d,flushSync:y.flushSync,viewTransition:y.viewTransition})},[c,h,o,d])}function j1(r,{relative:o}={}){let{basename:d}=j.useContext(Ea),c=j.useContext(La);St(c,"useFormAction must be used inside a RouteContext");let[h]=c.matches.slice(-1),m={...En(r||".",{relative:o})},y=Za();if(r==null){m.search=y.search;let u=new URLSearchParams(m.search),f=u.getAll("index");if(f.some(N=>N==="")){u.delete("index"),f.filter(b=>b).forEach(b=>u.append("index",b));let N=u.toString();m.search=N?`?${N}`:""}}return(!r||r===".")&&h.route.index&&(m.search=m.search?m.search.replace(/^\?/,"?index&"):"?index"),d!=="/"&&(m.pathname=m.pathname==="/"?d:fl([d,m.pathname])),bn(m)}function N1(r,{relative:o}={}){let d=j.useContext(rp);St(d!=null,"`useViewTransitionState` must be used within `react-router-dom`'s `RouterProvider`.  Did you accidentally import `RouterProvider` from `react-router`?");let{basename:c}=pp("useViewTransitionState"),h=En(r,{relative:o});if(!d.isTransitioning)return!1;let m=bl(d.currentLocation.pathname,c)||d.currentLocation.pathname,y=bl(d.nextLocation.pathname,c)||d.nextLocation.pathname;return Fi(h.pathname,y)!=null||Fi(h.pathname,m)!=null}/**
2241 * @license lucide-react v0.554.0 - ISC
2242 *
2243 * This source code is licensed under the ISC license.
2244 * See the LICENSE file in the root directory of this source tree.
2245 */const k1=r=>r.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),S1=r=>r.replace(/^([A-Z])|[\s-_]+(\w)/g,(o,d,c)=>c?c.toUpperCase():d.toLowerCase()),Ox=r=>{const o=S1(r);return o.charAt(0).toUpperCase()+o.slice(1)},gp=(...r)=>r.filter((o,d,c)=>!!o&&o.trim()!==""&&c.indexOf(o)===d).join(" ").trim(),O1=r=>{for(const o in r)if(o.startsWith("aria-")||o==="role"||o==="title")return!0};/**
2246 * @license lucide-react v0.554.0 - ISC
2247 *
2248 * This source code is licensed under the ISC license.
2249 * See the LICENSE file in the root directory of this source tree.
2250 */var E1={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};/**
2251 * @license lucide-react v0.554.0 - ISC
2252 *
2253 * This source code is licensed under the ISC license.
2254 * See the LICENSE file in the root directory of this source tree.
2255 */const C1=j.forwardRef(({color:r="currentColor",size:o=24,strokeWidth:d=2,absoluteStrokeWidth:c,className:h="",children:m,iconNode:y,...u},f)=>j.createElement("svg",{ref:f,...E1,width:o,height:o,stroke:r,strokeWidth:c?Number(d)*24/Number(o):d,className:gp("lucide",h),...!m&&!O1(u)&&{"aria-hidden":"true"},...u},[...y.map(([x,N])=>j.createElement(x,N)),...Array.isArray(m)?m:[m]]));/**
2256 * @license lucide-react v0.554.0 - ISC
2257 *
2258 * This source code is licensed under the ISC license.
2259 * See the LICENSE file in the root directory of this source tree.
2260 */const de=(r,o)=>{const d=j.forwardRef(({className:c,...h},m)=>j.createElement(C1,{ref:m,iconNode:o,className:gp(`lucide-${k1(Ox(r))}`,`lucide-${r}`,c),...h}));return d.displayName=Ox(r),d};/**
2261 * @license lucide-react v0.554.0 - ISC
2262 *
2263 * This source code is licensed under the ISC license.
2264 * See the LICENSE file in the root directory of this source tree.
2265 */const T1=[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l
2265-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]],_1=de("activity",T1);/**
2266 * @license lucide-react v0.554.0 - ISC
2267 *
2268 * This source code is licensed under the ISC license.
2269 * See the LICENSE file in the root directory of this source tree.
2270 */const R1=[["path",{d:"m3 16 4 4 4-4",key:"1co6wj"}],["path",{d:"M7 20V4",key:"1yoxec"}],["path",{d:"m21 8-4-4-4 4",key:"1c9v7m"}],["path",{d:"M17 4v16",key:"7dpous"}]],bp=de("arrow-down-up",R1);/**
2271 * @license lucide-react v0.554.0 - ISC
2272 *
2273 * This source code is licensed under the ISC license.
2274 * See the LICENSE file in the root directory of this source tree.
2275 */const M1=[["path",{d:"M12 5v14",key:"s699le"}],["path",{d:"m19 12-7 7-7-7",key:"1idqje"}]],yn=de("arrow-down",M1);/**
2276 * @license lucide-react v0.554.0 - ISC
2277 *
2278 * This source code is licensed under the ISC license.
2279 * See the LICENSE file in the root directory of this source tree.
2280 */const A1=[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]],Ca=de("arrow-left",A1);/**
2281 * @license lucide-react v0.554.0 - ISC
2282 *
2283 * This source code is licensed under the ISC license.
2284 * See the LICENSE file in the root directory of this source tree.
2285 */const D1=[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]],Cn=de("arrow-right",D1);/**
2286 * @license lucide-react v0.554.0 - ISC
2287 *
2288 * This source code is licensed under the ISC license.
2289 * See the LICENSE file in the root directory of this source tree.
2290 */const z1=[["path",{d:"M7 7h10v10",key:"1tivn9"}],["path",{d:"M7 17 17 7",key:"1vkiza"}]],B1=de("arrow-up-right",z1);/**
2291 * @license lucide-react v0.554.0 - ISC
2292 *
2293 * This source code is licensed under the ISC license.
2294 * See the LICENSE file in the root directory of this source tree.
2295 */const V1=[["path",{d:"m5 12 7-7 7 7",key:"hav0vg"}],["path",{d:"M12 19V5",key:"x0mq9r"}]],vn=de("arrow-up",V1);/**
2296 * @license lucide-react v0.554.0 - ISC
2297 *
2298 * This source code is licensed under the ISC license.
2299 * See the LICENSE file in the root directory of this source tree.
2300 */const L1=[["path",{d:"M10.268 21a2 2 0 0 0 3.464 0",key:"vwvbt9"}],["path",{d:"M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326",key:"11g9vi"}]],U1=de("bell",L1);/**
2301 * @license lucide-react v0.554.0 - ISC
2302 *
2303 * This source code is licensed under the ISC license.
2304 * See the LICENSE file in the root directory of this source tree.
2305 */const H1=[["path",{d:"M6 12h9a4 4 0 0 1 0 8H7a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h7a4 4 0 0 1 0 8",key:"mg9rjx"}]],X1=de("bold",H1);/**
2306 * @license lucide-react v0.554.0 - ISC
2307 *
2308 * This source code is licensed under the ISC license.
2309 * See the LICENSE file in the root directory of this source tree.
2310 */const I1=[["path",{d:"M16 20V4a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16",key:"jecpp"}],["rect",{width:"20",height:"14",x:"2",y:"6",rx:"2",key:"i6l2r4"}]],G1=de("briefcase",I1);/**
2311 * @license lucide-react v0.554.0 - ISC
2312 *
2313 * This source code is licensed under the ISC license.
2314 * See the LICENSE file in the root directory of this source tree.
2315 */const $1=[["path",{d:"M5 21v-6",key:"1hz6c0"}],["path",{d:"M12 21V3",key:"1lcnhd"}],["path",{d:"M19 21V9",key:"unv183"}]],K1=de("chart-no-axes-column",$1);/**
2316 * @license lucide-react v0.554.0 - ISC
2317 *
2318 * This source code is licensed under the ISC license.
2319 * See the LICENSE file in the root directory of this source tree.
2320 */const q1=[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]],eo=de("check",q1);/**
2321 * @license lucide-react v0.554.0 - ISC
2322 *
2323 * This source code is licensed under the ISC license.
2324 * See the LICENSE file in the root directory of this source tree.
2325 */const Y1=[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]],Mt=de("chevron-down",Y1);/**
2326 * @license lucide-react v0.554.0 - ISC
2327 *
2328 * This source code is licensed under the ISC license.
2329 * See the LICENSE file in the root directory of this source tree.
2330 */const P1=[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]],yp=de("chevron-left",P1);/**
2331 * @license lucide-react v0.554.0 - ISC
2332 *
2333 * This source code is licensed under the ISC license.
2334 * See the LICENSE file in the root directory of this source tree.
2335 */const Z1=[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]],ys=de("chevron-right",Z1);/**
2336 * @license lucide-react v0.554.0 - ISC
2337 *
2338 * This source code is licensed under the ISC license.
2339 * See the LICENSE file in the root directory of this source tree.
2340 */const Q1=[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]],Ft=de("chevron-up",Q1);/**
2341 * @license lucide-react v0.554.0 - ISC
2342 *
2343 * This source code is licensed under the ISC license.
2344 * See the LICENSE file in the root directory of this source tree.
2345 */const J1=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]],to=de("circle-alert",J1);/**
2346 * @license lucide-react v0.554.0 - ISC
2347 *
2348 * This source code is licensed under the ISC license.
2349 * See the LICENSE file in the root directory of this source tree.
2350 */const W1=[["path",{d:"M21.801 10A10 10 0 1 1 17 3.335",key:"yps3ct"}],["path",{d:"m9 11 3 3L22 4",key:"1pflzl"}]],wn=de("circle-check-big",W1);/**
2351 * @license lucide-react v0.554.0 - ISC
2352 *
2353 * This source code is licensed under the ISC license.
2354 * See the LICENSE file in the root directory of this source tree.
2355 */const F1=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]],ev=de("circle-check",F1);/**
2356 * @license lucide-react v0.554.0 - ISC
2357 *
2358 * This source code is licensed under the ISC license.
2359 * See the LICENSE file in the root directory of this source tree.
2360 */const tv=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3",key:"1u773s"}],["path",{d:"M12 17h.01",key:"p32p05"}]],av=de("circle-question-mark",tv);/**
2361 * @license lucide-react v0.554.0 - ISC
2362 *
2363 * This source code is licensed under the ISC license.
2364 * See the LICENSE file in the root directory of this source tree.
2365 */const lv=[["path",{d:"M12 6v6l4 2",key:"mmk7yg"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]],vp=de("clock",lv);/**
2366 * @license lucide-react v0.554.0 - ISC
2367 *
2368 * This source code is licensed under the ISC license.
2369 * See the LICENSE file in the root directory of this source tree.
2370 */const sv=[["path",{d:"M12 13v8",key:"1l5pq0"}],["path",{d:"M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242",key:"1pljnt"}],["path",{d:"m8 17 4-4 4 4",key:"1quai1"}]],rv=de("cloud-upload",sv);/**
2371 * @license lucide-react v0.554.0 - ISC
2372 *
2373 * This source code is licensed under the ISC license.
2374 * See the LICENSE file in the root directory of this source tree.
2375 */const nv=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M12 3v18",key:"108xh3"}]],iv=de("columns-2",nv);/**
2376 * @license lucide-react v0.554.0 - ISC
2377 *
2378 * This source code is licensed under the ISC license.
2379 * See the LICENSE file in the root directory of this source tree.
2380 */const ov=[["path",{d:"M12 2a10 10 0 1 0 10 10 4 4 0 0 1-5-5 4 4 0 0 1-5-5",key:"laymnq"}],["path",{d:"M8.5 8.5v.01",key:"ue8clq"}],["path",{d:"M16 15.5v.01",key:"14dtrp"}],["path",{d:"M12 12v.01",key:"u5ubse"}],["path",{d:"M11 17v.01",key:"1hyl5a"}],["path",{d:"M7 14v.01",key:"uct60s"}]],cv=de("cookie",ov);/**
2381 * @license lucide-react v0.554.0 - ISC
2382 *
2383 * This source code is licensed under the ISC license.
2384 * See the LICENSE file in the root directory of this source tree.
2385 */const dv=[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]],uv=de("copy",dv);/**
2386 * @license lucide-react v0.554.0 - ISC
2387 *
2388 * This source code is licensed under the ISC license.
2389 * See the LICENSE file in the root directory of this source tree.
2390 */const mv=[["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M17 20v2",key:"1rnc9c"}],["path",{d:"M17 2v2",key:"11trls"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M2 17h2",key:"7oei6x"}],["path",{d:"M2 7h2",key:"asdhe0"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"M20 17h2",key:"1fpfkl"}
2390],["path",{d:"M20 7h2",key:"1o8tra"}],["path",{d:"M7 20v2",key:"4gnj0m"}],["path",{d:"M7 2v2",key:"1i4yhu"}],["rect",{x:"4",y:"4",width:"16",height:"16",rx:"2",key:"1vbyd7"}],["rect",{x:"8",y:"8",width:"8",height:"8",rx:"1",key:"z9xiuo"}]],hv=de("cpu",mv);/**
2391 * @license lucide-react v0.554.0 - ISC
2392 *
2393 * This source code is licensed under the ISC license.
2394 * See the LICENSE file in the root directory of this source tree.
2395 */const xv=[["rect",{width:"20",height:"14",x:"2",y:"5",rx:"2",key:"ynyp8z"}],["line",{x1:"2",x2:"22",y1:"10",y2:"10",key:"1b3vmo"}]],po=de("credit-card",xv);/**
2396 * @license lucide-react v0.554.0 - ISC
2397 *
2398 * This source code is licensed under the ISC license.
2399 * See the LICENSE file in the root directory of this source tree.
2400 */const pv=[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 5V19A9 3 0 0 0 21 19V5",key:"1wlel7"}],["path",{d:"M3 12A9 3 0 0 0 21 12",key:"mv7ke4"}]],wp=de("database",pv);/**
2401 * @license lucide-react v0.554.0 - ISC
2402 *
2403 * This source code is licensed under the ISC license.
2404 * See the LICENSE file in the root directory of this source tree.
2405 */const fv=[["line",{x1:"12",x2:"12",y1:"2",y2:"22",key:"7eqyqh"}],["path",{d:"M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6",key:"1b0p4s"}]],jp=de("dollar-sign",fv);/**
2406 * @license lucide-react v0.554.0 - ISC
2407 *
2408 * This source code is licensed under the ISC license.
2409 * See the LICENSE file in the root directory of this source tree.
2410 */const gv=[["path",{d:"M12 15V3",key:"m9g1x1"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["path",{d:"m7 10 5 5 5-5",key:"brsn70"}]],pl=de("download",gv);/**
2411 * @license lucide-react v0.554.0 - ISC
2412 *
2413 * This source code is licensed under the ISC license.
2414 * See the LICENSE file in the root directory of this source tree.
2415 */const bv=[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]],Qd=de("external-link",bv);/**
2416 * @license lucide-react v0.554.0 - ISC
2417 *
2418 * This source code is licensed under the ISC license.
2419 * See the LICENSE file in the root directory of this source tree.
2420 */const yv=[["path",{d:"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49",key:"ct8e1f"}],["path",{d:"M14.084 14.158a3 3 0 0 1-4.242-4.242",key:"151rxh"}],["path",{d:"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143",key:"13bj9a"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]],ao=de("eye-off",yv);/**
2421 * @license lucide-react v0.554.0 - ISC
2422 *
2423 * This source code is licensed under the ISC license.
2424 * See the LICENSE file in the root directory of this source tree.
2425 */const vv=[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]],xr=de("eye",vv);/**
2426 * @license lucide-react v0.554.0 - ISC
2427 *
2428 * This source code is licensed under the ISC license.
2429 * See the LICENSE file in the root directory of this source tree.
2430 */const wv=[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M10 9H8",key:"b1mrlr"}],["path",{d:"M16 13H8",key:"t4e002"}],["path",{d:"M16 17H8",key:"z1uh3a"}]],mr=de("file-text",wv);/**
2431 * @license lucide-react v0.554.0 - ISC
2432 *
2433 * This source code is licensed under the ISC license.
2434 * See the LICENSE file in the root directory of this source tree.
2435 */const jv=[["path",{d:"M12 3q1 4 4 6.5t3 5.5a1 1 0 0 1-14 0 5 5 0 0 1 1-3 1 1 0 0 0 5 0c0-2-1.5-3-1.5-5q0-2 2.5-4",key:"1slcih"}]],Nv=de("flame",jv);/**
2436 * @license lucide-react v0.554.0 - ISC
2437 *
2438 * This source code is licensed under the ISC license.
2439 * See the LICENSE file in the root directory of this source tree.
2440 */const kv=[["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}]],Sv=de("folder",kv);/**
2441 * @license lucide-react v0.554.0 - ISC
2442 *
2443 * This source code is licensed under the ISC license.
2444 * See the LICENSE file in the root directory of this source tree.
2445 */const Ov=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M16 16s-1.5-2-4-2-4 2-4 2",key:"epbg0q"}],["line",{x1:"9",x2:"9.01",y1:"9",y2:"9",key:"yxxnd0"}],["line",{x1:"15",x2:"15.01",y1:"9",y2:"9",key:"1p4y9e"}]],Jd=de("frown",Ov);/**
2446 * @license lucide-react v0.554.0 - ISC
2447 *
2448 * This source code is licensed under the ISC license.
2449 * See the LICENSE file in the root directory of this source tree.
2450 */const Ev=[["path",{d:"M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z",key:"sc7q7i"}]],pr=de("funnel",Ev);/**
2451 * @license lucide-react v0.554.0 - ISC
2452 *
2453 * This source code is licensed under the ISC license.
2454 * See the LICENSE file in the root directory of this source tree.
2455 */const Cv=[["line",{x1:"6",x2:"10",y1:"11",y2:"11",key:"1gktln"}],["line",{x1:"8",x2:"8",y1:"9",y2:"13",key:"qnk9ow"}],["line",{x1:"15",x2:"15.01",y1:"12",y2:"12",key:"krot7o"}],["line",{x1:"18",x2:"18.01",y1:"10",y2:"10",key:"1lcuu1"}],["path",{d:"M17.32 5H6.68a4 4 0 0 0-3.978 3.59c-.006.052-.01.101-.017.152C2.604 9.416 2 14.456 2 16a3 3 0 0 0 3 3c1 0 1.5-.5 2-1l1.414-1.414A2 2 0 0 1 9.828 16h4.344a2 2 0 0 1 1.414.586L17 18c.5.5 1 1 2 1a3 3 0 0 0 3-3c0-1.545-.604-6.584-.685-7.258-.007-.05-.011-.1-.017-.151A4 4 0 0 0 17.32 5z",key:"mfqc10"}]],pu=de("gamepad-2",Cv);/**
2456 * @license lucide-react v0.554.0 - ISC
2457 *
2458 * This source code is licensed under the ISC license.
2459 * See the LICENSE file in the root directory of this source tree.
2460 */const Tv=[["path",{d:"M9 10h.01",key:"qbtxuw"}],["path",{d:"M15 10h.01",key:"1qmjsl"}],["path",{d:"M12 2a8 8 0 0 0-8 8v12l3-3 2.5 2.5L12 19l2.5 2.5L17 19l3 3V10a8 8 0 0 0-8-8z",key:"uwwb07"}]],_v=de("ghost",Tv);/**
2461 * @license lucide-react v0.554.0 - ISC
2462 *
2463 * This source code is licensed under the ISC license.
2464 * See the LICENSE file in the root directory of this source tree.
2465 */const Rv=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20",key:"13o1zl"}],["path",{d:"M2 12h20",key:"9i4pu4"}]],vs=de("globe",Rv);/**
2466 * @license lucide-react v0.554.0 - ISC
2467 *
2468 * This source code is licensed under the ISC license.
2469 * See the LICENSE file in the root directory of this source tree.
2470 */const Mv=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M3 9h18",key:"1pudct"}],["path",{d:"M3 15h18",key:"5xshup"}],["path",{d:"M9 3v18",key:"fh3hqa"}],["path",{d:"M15 3v18",key:"14nvp0"}]],lo=de("grid-3x3",Mv);/**
2471 * @license lucide-react v0.554.0 - ISC
2472 *
2473 * This source code is licensed under the ISC license.
2474 * See the LICENSE file in the root directory of this source tree.
2475 */const Av=[["line",{x1:"22",x2:"2",y1:"12",y2:"12",key:"1y58io"}],["path",{d:"M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z",key:"oot6mr"}],["line",{x1:"6",x2:"6.01",y1:"16",y2:"16",key:"sgf278"}],["line",{x1:"10",x2:"10.01",y1:"16",y2:"16",key:"1l4acy"}
2475]],Dv=de("hard-drive",Av);/**
2476 * @license lucide-react v0.554.0 - ISC
2477 *
2478 * This source code is licensed under the ISC license.
2479 * See the LICENSE file in the root directory of this source tree.
2480 */const zv=[["path",{d:"M3 14h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-7a9 9 0 0 1 18 0v7a2 2 0 0 1-2 2h-1a2 2 0 0 1-2-2v-3a2 2 0 0 1 2-2h3",key:"1xhozi"}]],Bv=de("headphones",zv);/**
2481 * @license lucide-react v0.554.0 - ISC
2482 *
2483 * This source code is licensed under the ISC license.
2484 * See the LICENSE file in the root directory of this source tree.
2485 */const Vv=[["path",{d:"M2 9.5a5.5 5.5 0 0 1 9.591-3.676.56.56 0 0 0 .818 0A5.49 5.49 0 0 1 22 9.5c0 2.29-1.5 4-3 5.5l-5.492 5.313a2 2 0 0 1-3 .019L5 15c-1.5-1.5-3-3.2-3-5.5",key:"mvr1a0"}]],jn=de("heart",Vv);/**
2486 * @license lucide-react v0.554.0 - ISC
2487 *
2488 * This source code is licensed under the ISC license.
2489 * See the LICENSE file in the root directory of this source tree.
2490 */const Lv=[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}],["path",{d:"M12 7v5l4 2",key:"1fdv2h"}]],Ex=de("history",Lv);/**
2491 * @license lucide-react v0.554.0 - ISC
2492 *
2493 * This source code is licensed under the ISC license.
2494 * See the LICENSE file in the root directory of this source tree.
2495 */const Uv=[["path",{d:"M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8",key:"5wwlr5"}],["path",{d:"M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z",key:"r6nss1"}]],Np=de("house",Uv);/**
2496 * @license lucide-react v0.554.0 - ISC
2497 *
2498 * This source code is licensed under the ISC license.
2499 * See the LICENSE file in the root directory of this source tree.
2500 */const Hv=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}],["circle",{cx:"9",cy:"9",r:"2",key:"af1f0g"}],["path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21",key:"1xmnt7"}]],fr=de("image",Hv);/**
2501 * @license lucide-react v0.554.0 - ISC
2502 *
2503 * This source code is licensed under the ISC license.
2504 * See the LICENSE file in the root directory of this source tree.
2505 */const Xv=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 16v-4",key:"1dtifu"}],["path",{d:"M12 8h.01",key:"e9boi3"}]],kp=de("info",Xv);/**
2506 * @license lucide-react v0.554.0 - ISC
2507 *
2508 * This source code is licensed under the ISC license.
2509 * See the LICENSE file in the root directory of this source tree.
2510 */const Iv=[["rect",{width:"20",height:"20",x:"2",y:"2",rx:"5",ry:"5",key:"2e1cvw"}],["path",{d:"M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z",key:"9exkf1"}],["line",{x1:"17.5",x2:"17.51",y1:"6.5",y2:"6.5",key:"r4j83e"}]],Gv=de("instagram",Iv);/**
2511 * @license lucide-react v0.554.0 - ISC
2512 *
2513 * This source code is licensed under the ISC license.
2514 * See the LICENSE file in the root directory of this source tree.
2515 */const $v=[["path",{d:"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z",key:"1s6t7t"}],["circle",{cx:"16.5",cy:"7.5",r:".5",fill:"currentColor",key:"w0ekpg"}]],Kv=de("key-round",$v);/**
2516 * @license lucide-react v0.554.0 - ISC
2517 *
2518 * This source code is licensed under the ISC license.
2519 * See the LICENSE file in the root directory of this source tree.
2520 */const qv=[["path",{d:"m15.5 7.5 2.3 2.3a1 1 0 0 0 1.4 0l2.1-2.1a1 1 0 0 0 0-1.4L19 4",key:"g0fldk"}],["path",{d:"m21 2-9.6 9.6",key:"1j0ho8"}],["circle",{cx:"7.5",cy:"15.5",r:"5.5",key:"yqb3hr"}]],Sp=de("key",qv);/**
2521 * @license lucide-react v0.554.0 - ISC
2522 *
2523 * This source code is licensed under the ISC license.
2524 * See the LICENSE file in the root directory of this source tree.
2525 */const Yv=[["path",{d:"M10 8h.01",key:"1r9ogq"}],["path",{d:"M12 12h.01",key:"1mp3jc"}],["path",{d:"M14 8h.01",key:"1primd"}],["path",{d:"M16 12h.01",key:"1l6xoz"}],["path",{d:"M18 8h.01",key:"emo2bl"}],["path",{d:"M6 8h.01",key:"x9i8wu"}],["path",{d:"M7 16h10",key:"wp8him"}],["path",{d:"M8 12h.01",key:"czm47f"}],["rect",{width:"20",height:"16",x:"2",y:"4",rx:"2",key:"18n3k1"}]],Cx=de("keyboard",Yv);/**
2526 * @license lucide-react v0.554.0 - ISC
2527 *
2528 * This source code is licensed under the ISC license.
2529 * See the LICENSE file in the root directory of this source tree.
2530 */const Pv=[["path",{d:"M18 5a2 2 0 0 1 2 2v8.526a2 2 0 0 0 .212.897l1.068 2.127a1 1 0 0 1-.9 1.45H3.62a1 1 0 0 1-.9-1.45l1.068-2.127A2 2 0 0 0 4 15.526V7a2 2 0 0 1 2-2z",key:"1pdavp"}],["path",{d:"M20.054 15.987H3.946",key:"14rxg9"}]],Zv=de("laptop",Pv);/**
2531 * @license lucide-react v0.554.0 - ISC
2532 *
2533 * This source code is licensed under the ISC license.
2534 * See the LICENSE file in the root directory of this source tree.
2535 */const Qv=[["path",{d:"M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z",key:"zw3jo"}],["path",{d:"M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12",key:"1wduqc"}],["path",{d:"M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17",key:"kqbvx6"}]],gr=de("layers",Qv);/**
2536 * @license lucide-react v0.554.0 - ISC
2537 *
2538 * This source code is licensed under the ISC license.
2539 * See the LICENSE file in the root directory of this source tree.
2540 */const Jv=[["rect",{width:"18",height:"7",x:"3",y:"3",rx:"1",key:"f1a2em"}],["rect",{width:"9",height:"7",x:"3",y:"14",rx:"1",key:"jqznyg"}],["rect",{width:"5",height:"7",x:"16",y:"14",rx:"1",key:"q5h2i8"}]],Op=de("layout-template",Jv);/**
2541 * @license lucide-react v0.554.0 - ISC
2542 *
2543 * This source code is licensed under the ISC license.
2544 * See the LICENSE file in the root directory of this source tree.
2545 */const Wv=[["path",{d:"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71",key:"1cjeqo"}],["path",{d:"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71",key:"19qd67"}]],ks=de("link",Wv);/**
2546 * @license lucide-react v0.554.0 - ISC
2547 *
2548 * This source code is licensed under the ISC license.
2549 * See the LICENSE file in the root directory of this source tree.
2550 */const Fv=[["path",{d:"M3 5h.01",key:"18ugdj"}],["path",{d:"M3 12h.01",key:"nlz23k"}],["path",{d:"M3 19h.01",key:"noohij"}],["path",{d:"M8 5h13",key:"1pao27"}],["path",{d:"M8 12h13",key:"1za7za"}],["path",{d:"M8 19h13",key:"m83p4d"}]],Wd=de("list",Fv);/**
2551 * @license lucide-react v0.554.0 - ISC
2552 *
2553 * This source code is licensed under the ISC license.
2554 * See the LICENSE file in the root directory of this source tree.
2555 */const e2=[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]],so=de("loader-circle",e2);/**
2556 * @license lucide-react v0.554.0 - ISC
2557 *
2558 * This source code is licensed under the ISC license.
2559 * See the LICENSE file in the root directory of this source tree.
2560 */const t2=[["path",{d:"m10 17 5-5-5-5",key:"1bsop3"}],["path",{d:"M15 12H3",key:"6jk70r"}
2560],["path",{d:"M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4",key:"u53s6r"}]],a2=de("log-in",t2);/**
2561 * @license lucide-react v0.554.0 - ISC
2562 *
2563 * This source code is licensed under the ISC license.
2564 * See the LICENSE file in the root directory of this source tree.
2565 */const l2=[["rect",{width:"18",height:"11",x:"3",y:"11",rx:"2",ry:"2",key:"1w4ew1"}],["path",{d:"M7 11V7a5 5 0 0 1 10 0v4",key:"fwvmzm"}]],Tx=de("lock",l2);/**
2566 * @license lucide-react v0.554.0 - ISC
2567 *
2568 * This source code is licensed under the ISC license.
2569 * See the LICENSE file in the root directory of this source tree.
2570 */const s2=[["path",{d:"m16 17 5-5-5-5",key:"1bji2h"}],["path",{d:"M21 12H9",key:"dn1m92"}],["path",{d:"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4",key:"1uf3rs"}]],Ep=de("log-out",s2);/**
2571 * @license lucide-react v0.554.0 - ISC
2572 *
2573 * This source code is licensed under the ISC license.
2574 * See the LICENSE file in the root directory of this source tree.
2575 */const r2=[["path",{d:"m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7",key:"132q7q"}],["rect",{x:"2",y:"4",width:"20",height:"16",rx:"2",key:"izxlao"}]],ro=de("mail",r2);/**
2576 * @license lucide-react v0.554.0 - ISC
2577 *
2578 * This source code is licensed under the ISC license.
2579 * See the LICENSE file in the root directory of this source tree.
2580 */const n2=[["path",{d:"M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0",key:"1r0f0z"}],["circle",{cx:"12",cy:"10",r:"3",key:"ilqhr7"}]],i2=de("map-pin",n2);/**
2581 * @license lucide-react v0.554.0 - ISC
2582 *
2583 * This source code is licensed under the ISC license.
2584 * See the LICENSE file in the root directory of this source tree.
2585 */const o2=[["path",{d:"M14.106 5.553a2 2 0 0 0 1.788 0l3.659-1.83A1 1 0 0 1 21 4.619v12.764a1 1 0 0 1-.553.894l-4.553 2.277a2 2 0 0 1-1.788 0l-4.212-2.106a2 2 0 0 0-1.788 0l-3.659 1.83A1 1 0 0 1 3 19.381V6.618a1 1 0 0 1 .553-.894l4.553-2.277a2 2 0 0 1 1.788 0z",key:"169xi5"}],["path",{d:"M15 5.764v15",key:"1pn4in"}],["path",{d:"M9 3.236v15",key:"1uimfh"}]],c2=de("map",o2);/**
2586 * @license lucide-react v0.554.0 - ISC
2587 *
2588 * This source code is licensed under the ISC license.
2589 * See the LICENSE file in the root directory of this source tree.
2590 */const d2=[["path",{d:"M4 5h16",key:"1tepv9"}],["path",{d:"M4 12h16",key:"1lakjw"}],["path",{d:"M4 19h16",key:"1djgab"}]],Fd=de("menu",d2);/**
2591 * @license lucide-react v0.554.0 - ISC
2592 *
2593 * This source code is licensed under the ISC license.
2594 * See the LICENSE file in the root directory of this source tree.
2595 */const u2=[["path",{d:"M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719",key:"1sd12s"}]],zd=de("message-circle",u2);/**
2596 * @license lucide-react v0.554.0 - ISC
2597 *
2598 * This source code is licensed under the ISC license.
2599 * See the LICENSE file in the root directory of this source tree.
2600 */const m2=[["path",{d:"M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z",key:"18887p"}]],no=de("message-square",m2);/**
2601 * @license lucide-react v0.554.0 - ISC
2602 *
2603 * This source code is licensed under the ISC license.
2604 * See the LICENSE file in the root directory of this source tree.
2605 */const h2=[["path",{d:"M5 12h14",key:"1ays0h"}]],eu=de("minus",h2);/**
2606 * @license lucide-react v0.554.0 - ISC
2607 *
2608 * This source code is licensed under the ISC license.
2609 * See the LICENSE file in the root directory of this source tree.
2610 */const x2=[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21",key:"1svkeh"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21",key:"vw1qmm"}]],Nn=de("monitor",x2);/**
2611 * @license lucide-react v0.554.0 - ISC
2612 *
2613 * This source code is licensed under the ISC license.
2614 * See the LICENSE file in the root directory of this source tree.
2615 */const p2=[["path",{d:"M12.586 12.586 19 19",key:"ea5xo7"}],["path",{d:"M3.688 3.037a.497.497 0 0 0-.651.651l6.5 15.999a.501.501 0 0 0 .947-.062l1.569-6.083a2 2 0 0 1 1.448-1.479l6.124-1.579a.5.5 0 0 0 .063-.947z",key:"277e5u"}]],f2=de("mouse-pointer",p2);
2615/**
2616 * @license lucide-react v0.554.0 - ISC
2617 *
2618 * This source code is licensed under the ISC license.
2619 * See the LICENSE file in the root directory of this source tree.
2620 */const g2=[["rect",{x:"5",y:"2",width:"14",height:"20",rx:"7",key:"11ol66"}],["path",{d:"M12 6v4",key:"16clxf"}]],b2=de("mouse",g2);/**
2621 * @license lucide-react v0.554.0 - ISC
2622 *
2623 * This source code is licensed under the ISC license.
2624 * See the LICENSE file in the root directory of this source tree.
2625 */const y2=[["path",{d:"m16 16 2 2 4-4",key:"gfu2re"}],["path",{d:"M21 10V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l2-1.14",key:"e7tb2h"}],["path",{d:"m7.5 4.27 9 5.15",key:"1c824w"}],["polyline",{points:"3.29 7 12 12 20.71 7",key:"ousv84"}],["line",{x1:"12",x2:"12",y1:"22",y2:"12",key:"a4e8g8"}]],Cp=de("package-check",y2);/**
2626 * @license lucide-react v0.554.0 - ISC
2627 *
2628 * This source code is licensed under the ISC license.
2629 * See the LICENSE file in the root directory of this source tree.
2630 */const v2=[["path",{d:"M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z",key:"1a0edw"}],["path",{d:"M12 22V12",key:"d0xqtd"}],["polyline",{points:"3.29 7 12 12 20.71 7",key:"ousv84"}],["path",{d:"m7.5 4.27 9 5.15",key:"1c824w"}]],ws=de("package",v2);/**
2631 * @license lucide-react v0.554.0 - ISC
2632 *
2633 * This source code is licensed under the ISC license.
2634 * See the LICENSE file in the root directory of this source tree.
2635 */const w2=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M3 9h18",key:"1pudct"}],["path",{d:"M9 21V9",key:"1oto5p"}]],hr=de("panels-top-left",w2);/**
2636 * @license lucide-react v0.554.0 - ISC
2637 *
2638 * This source code is licensed under the ISC license.
2639 * See the LICENSE file in the root directory of this source tree.
2640 */const j2=[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}]],N2=de("pen",j2);/**
2641 * @license lucide-react v0.554.0 - ISC
2642 *
2643 * This source code is licensed under the ISC license.
2644 * See the LICENSE file in the root directory of this source tree.
2645 */const k2=[["path",{d:"M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z",key:"10ikf1"}]],S2=de("play",k2);/**
2646 * @license lucide-react v0.554.0 - ISC
2647 *
2648 * This source code is licensed under the ISC license.
2649 * See the LICENSE file in the root directory of this source tree.
2650 */const O2=[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]],At=de("plus",O2);/**
2651 * @license lucide-react v0.554.0 - ISC
2652 *
2653 * This source code is licensed under the ISC license.
2654 * See the LICENSE file in the root directory of this source tree.
2655 */const E2=[["path",{d:"M12 2v10",key:"mnfbl"}],["path",{d:"M18.4 6.6a9 9 0 1 1-12.77.04",key:"obofu9"}]],C2=de("power",E2);/**
2656 * @license lucide-react v0.554.0 - ISC
2657 *
2658 * This source code is licensed under the ISC license.
2659 * See the LICENSE file in the root directory of this source tree.
2660 */const T2=[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]],Ya=de("refresh-cw",T2);/**
2661 * @license lucide-react v0.554.0 - ISC
2662 *
2663 * This source code is licensed under the ISC license.
2664 * See the LICENSE file in the root directory of this source tree.
2665 */const _2=[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}]],tu=de("rotate-ccw",_2);/**
2666 * @license lucide-react v0.554.0 - ISC
2667 *
2668 * This source code is licensed under the ISC license.
2669 * See the LICENSE file in the root directory of this source tree.
2670 */const R2=[["path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z",key:"1c8476"}],["path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7",key:"1ydtos"}],["path",{d:"M7 3v4a1 1 0 0 0 1 1h7",key:"t51u73"}]],Tn=de("save",R2);/**
2671 * @license lucide-react v0.554.0 - ISC
2672 *
2673 * This source code is licensed under the ISC license.
2674 * See the LICENSE file in the root directory of this source tree.
2675 */const M2=[["path",{d:"m16 16 3-8 3 8c-.87.65-1.92 1-3 1s-2.13-.35-3-1Z",key:"7g6ntu"}],["path",{d:"m2 16 3-8 3 8c-.87.65-1.92 1-3 1s-2.13-.35-3-1Z",key:"ijws7r"}],["path",{d:"M7 21h10",key:"1b0cd5"}],["path",{d:"M12 3v18",key:"108xh3"}
2675],["path",{d:"M3 7h2c2 0 5-1 7-2 2 1 5 2 7 2h2",key:"3gwbw2"}]],br=de("scale",M2);/**
2676 * @license lucide-react v0.554.0 - ISC
2677 *
2678 * This source code is licensed under the ISC license.
2679 * See the LICENSE file in the root directory of this source tree.
2680 */const A2=[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]],xa=de("search",A2);/**
2681 * @license lucide-react v0.554.0 - ISC
2682 *
2683 * This source code is licensed under the ISC license.
2684 * See the LICENSE file in the root directory of this source tree.
2685 */const D2=[["path",{d:"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z",key:"1ffxy3"}],["path",{d:"m21.854 2.147-10.94 10.939",key:"12cjpa"}]],fo=de("send",D2);/**
2686 * @license lucide-react v0.554.0 - ISC
2687 *
2688 * This source code is licensed under the ISC license.
2689 * See the LICENSE file in the root directory of this source tree.
2690 */const z2=[["rect",{width:"20",height:"8",x:"2",y:"2",rx:"2",ry:"2",key:"ngkwjq"}],["rect",{width:"20",height:"8",x:"2",y:"14",rx:"2",ry:"2",key:"iecqi9"}],["line",{x1:"6",x2:"6.01",y1:"6",y2:"6",key:"16zg32"}],["line",{x1:"6",x2:"6.01",y1:"18",y2:"18",key:"nzw8ys"}]],B2=de("server",z2);/**
2691 * @license lucide-react v0.554.0 - ISC
2692 *
2693 * This source code is licensed under the ISC license.
2694 * See the LICENSE file in the root directory of this source tree.
2695 */const V2=[["path",{d:"M14 17H5",key:"gfn3mx"}],["path",{d:"M19 7h-9",key:"6i9tg"}],["circle",{cx:"17",cy:"17",r:"3",key:"18b49y"}],["circle",{cx:"7",cy:"7",r:"3",key:"dfmy0x"}]],L2=de("settings-2",V2);/**
2696 * @license lucide-react v0.554.0 - ISC
2697 *
2698 * This source code is licensed under the ISC license.
2699 * See the LICENSE file in the root directory of this source tree.
2700 */const U2=[["path",{d:"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915",key:"1i5ecw"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]],yl=de("settings",U2);/**
2701 * @license lucide-react v0.554.0 - ISC
2702 *
2703 * This source code is licensed under the ISC license.
2704 * See the LICENSE file in the root directory of this source tree.
2705 */const H2=[["circle",{cx:"18",cy:"5",r:"3",key:"gq8acd"}],["circle",{cx:"6",cy:"12",r:"3",key:"w7nqdw"}],["circle",{cx:"18",cy:"19",r:"3",key:"1xt0gg"}],["line",{x1:"8.59",x2:"15.42",y1:"13.51",y2:"17.49",key:"47mynk"}],["line",{x1:"15.41",x2:"8.59",y1:"6.51",y2:"10.49",key:"1n3mei"}]],X2=de("share-2",H2);/**
2706 * @license lucide-react v0.554.0 - ISC
2707 *
2708 * This source code is licensed under the ISC license.
2709 * See the LICENSE file in the root directory of this source tree.
2710 */const I2=[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]],kn=de("shield-check",I2);/**
2711 * @license lucide-react v0.554.0 - ISC
2712 *
2713 * This source code is licensed under the ISC license.
2714 * See the LICENSE file in the root directory of this source tree.
2715 */const G2=[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}]],io=de("shield",G2);/**
2716 * @license lucide-react v0.554.0 - ISC
2717 *
2718 * This source code is licensed under the ISC license.
2719 * See the LICENSE file in the root directory of this source tree.
2720 */const $2=[["path",{d:"M16 10a4 4 0 0 1-8 0",key:"1ltviw"}],["path",{d:"M3.103 6.034h17.794",key:"awc11p"}],["path",{d:"M3.4 5.467a2 2 0 0 0-.4 1.2V20a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6.667a2 2 0 0 0-.4-1.2l-2-2.667A2 2 0 0 0 17 2H7a2 2 0 0 0-1.6.8z",key:"o988cm"}]],Jt=de("shopping-bag",$2);/**
2721 * @license lucide-react v0.554.0 - ISC
2722 *
2723 * This source code is licensed under the ISC license.
2724 * See the LICENSE file in the root directory of this source tree.
2725 */const K2=[["circle",{cx:"8",cy:"21",r:"1",key:"jimo8o"}
2725],["circle",{cx:"19",cy:"21",r:"1",key:"13723u"}],["path",{d:"M2.05 2.05h2l2.66 12.42a2 2 0 0 0 2 1.58h9.78a2 2 0 0 0 1.95-1.57l1.65-7.43H5.12",key:"9zh506"}]],js=de("shopping-cart",K2);/**
2726 * @license lucide-react v0.554.0 - ISC
2727 *
2728 * This source code is licensed under the ISC license.
2729 * See the LICENSE file in the root directory of this source tree.
2730 */const q2=[["path",{d:"M10 5H3",key:"1qgfaw"}],["path",{d:"M12 19H3",key:"yhmn1j"}],["path",{d:"M14 3v4",key:"1sua03"}],["path",{d:"M16 17v4",key:"1q0r14"}],["path",{d:"M21 12h-9",key:"1o4lsq"}],["path",{d:"M21 19h-5",key:"1rlt1p"}],["path",{d:"M21 5h-7",key:"1oszz2"}],["path",{d:"M8 10v4",key:"tgpxqk"}],["path",{d:"M8 12H3",key:"a7s4jb"}]],Y2=de("sliders-horizontal",q2);/**
2731 * @license lucide-react v0.554.0 - ISC
2732 *
2733 * This source code is licensed under the ISC license.
2734 * See the LICENSE file in the root directory of this source tree.
2735 */const P2=[["rect",{width:"14",height:"20",x:"5",y:"2",rx:"2",ry:"2",key:"1yt0o3"}],["path",{d:"M12 18h.01",key:"mhygvu"}]],Tp=de("smartphone",P2);/**
2736 * @license lucide-react v0.554.0 - ISC
2737 *
2738 * This source code is licensed under the ISC license.
2739 * See the LICENSE file in the root directory of this source tree.
2740 */const Z2=[["path",{d:"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z",key:"1s2grr"}],["path",{d:"M20 2v4",key:"1rf3ol"}
2740],["path",{d:"M22 4h-4",key:"gwowj6"}],["circle",{cx:"4",cy:"20",r:"2",key:"6kqj1y"}]],fu=de("sparkles",Z2);/**
2741 * @license lucide-react v0.554.0 - ISC
2742 *
2743 * This source code is licensed under the ISC license.
2744 * See the LICENSE file in the root directory of this source tree.
2745 */const Q2=[["path",{d:"M21 10.656V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h12.344",key:"2acyp4"}],["path",{d:"m9 11 3 3L22 4",key:"1pflzl"}]],J2=de("square-check-big",Q2);/**
2746 * @license lucide-react v0.554.0 - ISC
2747 *
2748 * This source code is licensed under the ISC license.
2749 * See the LICENSE file in the root directory of this source tree.
2750 */const W2=[["path",{d:"M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7",key:"1m0v6g"}],["path",{d:"M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z",key:"ohrbg2"}]],Ns=de("square-pen",W2);/**
2751 * @license lucide-react v0.554.0 - ISC
2752 *
2753 * This source code is licensed under the ISC license.
2754 * See the LICENSE file in the root directory of this source tree.
2755 */const F2=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}]],ew=de("square",F2);/**
2756 * @license lucide-react v0.554.0 - ISC
2757 *
2758 * This source code is licensed under the ISC license.
2759 * See the LICENSE file in the root directory of this source tree.
2760 */const tw=[["path",{d:"M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z",key:"r04s7s"}]],Va=de("star",tw);/**
2761 * @license lucide-react v0.554.0 - ISC
2762 *
2763 * This source code is licensed under the ISC license.
2764 * See the LICENSE file in the root directory of this source tree.
2765 */const aw=[["path",{d:"M21 9a2.4 2.4 0 0 0-.706-1.706l-3.588-3.588A2.4 2.4 0 0 0 15 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2z",key:"1dfntj"}],["path",{d:"M15 3v5a1 1 0 0 0 1 1h5",key:"6s6qgf"}]],lw=de("sticky-note",aw);/**
2766 * @license lucide-react v0.554.0 - ISC
2767 *
2768 * This source code is licensed under the ISC license.
2769 * See the LICENSE file in the root directory of this source tree.
2770 */const sw=[["path",{d:"M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z",key:"vktsd0"}],["circle",{cx:"7.5",cy:"7.5",r:".5",fill:"currentColor",key:"kqv944"}]],rw=de("tag",sw);/**
2771 * @license lucide-react v0.554.0 - ISC
2772 *
2773 * This source code is licensed under the ISC license.
2774 * See the LICENSE file in the root directory of this source tree.
2775 */const nw=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["circle",{cx:"12",cy:"12",r:"6",key:"1vlfrh"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}]],iw=de("target",nw);/**
2776 * @license lucide-react v0.554.0 - ISC
2777 *
2778 * This source code is licensed under the ISC license.
2779 * See the LICENSE file in the root directory of this source tree.
2780 */const ow=[["path",{d:"M12 19h8",key:"baeox8"}],["path",{d:"m4 17 6-6-6-6",key:"1yngyt"}]],cw=de("terminal",ow);/**
2781 * @license lucide-react v0.554.0 - ISC
2782 *
2783 * This source code is licensed under the ISC license.
2784 * See the LICENSE file in the root directory of this source tree.
2785 */const dw=[["path",{d:"M21 5H3",key:"1fi0y6"}],["path",{d:"M15 12H3",key:"6jk70r"}],["path",{d:"M17 19H3",key:"z6ezky"}]],_x=de("text-align-start",dw);/**
2786 * @license lucide-react v0.554.0 - ISC
2787 *
2788 * This source code is licensed under the ISC license.
2789 * See the LICENSE file in the root directory of this source tree.
2790 */const uw=[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]],jt=de("trash-2",uw);/**
2791 * @license lucide-react v0.554.0 - ISC
2792 *
2793 * This source code is licensed under the ISC license.
2794 * See the LICENSE file in the root directory of this source tree.
2795 */const mw=[["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]],Rx=de("trash",mw);/**
2796 * @license lucide-react v0.554.0 - ISC
2797 *
2798 * This source code is licensed under the ISC license.
2799 * See the LICENSE file in the root directory of this source tree.
2800 */const hw=[["path",{d:"M16 7h6v6",key:"box55l"}],["path",{d:"m22 7-8.5 8.5-5-5L2 17",key:"1t1m79"}]],xw=de("trending-up",hw);/**
2801 * @license lucide-react v0.554.0 - ISC
2802 *
2803 * This source code is licensed under the ISC license.
2804 * See the LICENSE file in the root directory of this source tree.
2805 */const pw=[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]],Ql=de("triangle-alert",pw);/**
2806 * @license lucide-react v0.554.0 - ISC
2807 *
2808 * This source code is licensed under the ISC license.
2809 * See the LICENSE file in the root directory of this source tree.
2810 */const fw=[["path",{d:"M14 18V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v11a1 1 0 0 0 1 1h2",key:"wrbu53"}],["path",{d:"M15 18H9",key:"1lyqi6"}],["path",{d:"M19 18h2a1 1 0 0 0 1-1v-3.65a1 1 0 0 0-.22-.624l-3.48-4.35A1 1 0 0 0 17.52 8H14",key:"lysw3i"}],["circle",{cx:"17",cy:"18",r:"2",key:"332jqn"}],["circle",{cx:"7",cy:"18",r:"2",key:"19iecd"}]],Pa=de("truck",fw);/**
2811 * @license lucide-react v0.554.0 - ISC
2812 *
2813 * This source code is licensed under the ISC license.
2814 * See the LICENSE file in the root directory of this source tree.
2815 */const gw=[["path",{d:"M22 4s-.7 2.1-2 3.4c1.6 10-9.4 17.3-18 11.6 2.2.1 4.4-.6 6-2C3 15.5.5 9.6 3 5c2.2 2.6 5.6 4.1 9 4-.9-4.2 4-6.6 7-3.8 1.1 0 3-1.2 3-1.2z",key:"pff0z6"}]],bw=de("twitter",gw);/**
2816 * @license lucide-react v0.554.0 - ISC
2817 *
2818 * This source code is licensed under the ISC license.
2819 * See the LICENSE file in the root directory of this source tree.
2820 */const yw=[["path",{d:"M12 4v16",key:"1654pz"}],["path",{d:"M4 7V5a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v2",key:"e0r10z"}],["path",{d:"M9 20h6",key:"s66wpe"}]],Mx=de("type",yw);/**
2821 * @license lucide-react v0.554.0 - ISC
2822 *
2823 * This source code is licensed under the ISC license.
2824 * See the LICENSE file in the root directory of this source tree.
2825 */const vw=[["path",{d:"M12 3v12",key:"1x0j5s"}],["path",{d:"m17 8-5-5-5 5",key:"7q97r8"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}]],Ka=de("upload",vw);/**
2826 * @license lucide-react v0.554.0 - ISC
2827 *
2828 * This source code is licensed under the ISC license.
2829 * See the LICENSE file in the root directory of this source tree.
2830 */const ww=[["path",{d:"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2",key:"975kel"}],["circle",{cx:"12",cy:"7",r:"4",key:"17ys0d"}]],Jl=de("user",ww);/**
2831 * @license lucide-react v0.554.0 - ISC
2832 *
2833 * This source code is licensed under the ISC license.
2834 * See the LICENSE file in the root directory of this source tree.
2835 */const jw=[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["path",{d:"M16 3.128a4 4 0 0 1 0 7.744",key:"16gr8j"}],["path",{d:"M22 21v-2a4 4 0 0 0-3-3.87",key:"kshegd"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}]],_p=de("users",jw);/**
2836 * @license lucide-react v0.554.0 - ISC
2837 *
2838 * This source code is licensed under the ISC license.
2839 * See the LICENSE file in the root directory of this source tree.
2840 */const Nw=[["path",{d:"M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z",key:"uqj9uw"}],["path",{d:"M16 9a5 5 0 0 1 0 6",key:"1q6k2b"}],["path",{d:"M19.364 18.364a9 9 0 0 0 0-12.728",key:"ijwkga"}]],kw=de("volume-2",Nw);/**
2841 * @license lucide-react v0.554.0 - ISC
2842 *
2843 * This source code is licensed under the ISC license.
2844 * See the LICENSE file in the root directory of this source tree.
2845 */const Sw=[["path",{d:"m21.64 3.64-1.28-1.28a1.21 1.21 0 0 0-1.72 0L2.36 18.64a1.21 1.21 0 0 0 0 1.72l1.28 1.28a1.2 1.2 0 0 0 1.72 0L21.64 5.36a1.2 1.2 0 0 0 0-1.72",key:"ul74o6"}],["path",{d:"m14 7 3 3",key:"1r5n42"}],["path",{d:"M5 6v4",key:"ilb8ba"}],["path",{d:"M19 14v4",key:"blhpug"}],["path",{d:"M10 2v2",key:"7u0qdc"}],["path",{d:"M7 8H3",key:"zfb6yr"}],["path",{d:"M21 16h-4",key:"1cnmox"}],["path",{d:"M11 3H9",key:"1obp7u"}]],Ow=de("wand-sparkles",Sw);/**
2846 * @license lucide-react v0.554.0 - ISC
2847 *
2848 * This source code is licensed under the ISC license.
2849 * See the LICENSE file in the root directory of this source tree.
2850 */const Ew=[["path",{d:"M12 20h.01",key:"zekei9"}],["path",{d:"M8.5 16.429a5 5 0 0 1 7 0",key:"1bycff"}],["path",{d:"M5 12.859a10 10 0 0 1 5.17-2.69",key:"1dl1wf"}],["path",{d:"M19 12.859a10 10 0 0 0-2.007-1.523",key:"4k23kn"}],["path",{d:"M2 8.82a15 15 0 0 1 4.177-2.643",key:"1grhjp"}],["path",{d:"M22 8.82a15 15 0 0 0-11.288-3.764",key:"z3jwby"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]],Cw=de("wifi-off",Ew);/**
2851 * @license lucide-react v0.554.0 - ISC
2852 *
2853 * This source code is licensed under the ISC license.
2854 * See the LICENSE file in the root directory of this source tree.
2855 */const Tw=[["path",{d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z",key:"1ngwbx"}]],Rp=de("wrench",Tw);/**
2856 * @license lucide-react v0.554.0 - ISC
2857 *
2858 * This source code is licensed under the ISC license.
2859 * See the LICENSE file in the root directory of this source tree.
2860 */const _w=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],xt=de("x",_w);/**
2861 * @license lucide-react v0.554.0 - ISC
2862 *
2863 * This source code is licensed under the ISC license.
2864 * See the LICENSE file in the root directory of this source tree.
2865 */const Rw=[["path",{d:"M2.5 17a24.12 24.12 0 0 1 0-10 2 2 0 0 1 1.4-1.4 49.56 49.56 0 0 1 16.2 0A2 2 0 0 1 21.5 7a24.12 24.12 0 0 1 0 10 2 2 0 0 1-1.4 1.4 49.55 49.55 0 0 1-16.2 0A2 2 0 0 1 2.5 17",key:"1q2vi4"}],["path",{d:"m10 15 5-3-5-3z",key:"1jp15x"}]],Mp=de("youtube",Rw);/**
2866 * @license lucide-react v0.554.0 - ISC
2867 *
2868 * This source code is licensed under the ISC license.
2869 * See the LICENSE file in the root directory of this source tree.
2870 */const Mw=[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]],gu=de("zap",Mw),_n=({className:r,customImage:o,isDarkText:d=!1})=>o?t.jsx("img",{src:o,alt:"Logo",className:`object-contain max-h-[44px] md:max-h-[52px] ${r}`}):t.jsx("span",{className:`font-black text-lg md:text-[1.35rem] lg:text-[2.3rem] tracking-wider ${d?"text-black":"text-white"} ${r} font-montserrat transition-all duration-300`,children:"VOROTEX"}),Aw=({cart:r,onOpenCart:o,onOpenSettings:d,onOpenCatalog:c,onScrollToSection:h,logoImage:m,navLinks:y,navigate:u,currentPath:f,isAdmin:x,enableSales:N,favoritesCount:b=0,onOpenFavorites:C,compareCount:g=0,isUserLoggedIn:O=!1,onUserIconClick:E,products:_=[]})=>{const[k,R]=j.useState(!1),[k_sub,R_sub]=j.useState(null),[D,te]=j.useState(!1),[W,$]=j.useState(""),[H,J]=j.useState([]),[Y,G]=j.useState(!1),U=j.useRef(null),q=j.useRef(null),P=j.useRef(null),pe=r.reduce((M,X)=>M+X.quantity,0),[adminStats,setAdminStats]=j.useState({newOrders:0,newMessages:0}),[isAdminHoverOpen,setIsAdminHoverOpen]=j.useState(!1),adminHoverCloseTimer=j.useRef(null),refreshAdminNotifications=async()=>
2870{if(!x)return;try{const M=await fetch("/api/get_orders_stats.php",{headers:Xx()}),X=M.headers.get("content-type")||"",le=M.ok&&X.includes("application/json")?await M.json():null,xe=le&&le.status==="success"?Number(le.checking)||0:0,ge=await fetch("/api/get_messages_stats.php",{headers:Xx()}),je=ge.headers.get("content-type")||"",Ne=ge.ok&&je.includes("application/json")?await ge.json():null,Ee=Ne&&Ne.status==="success"?Number(Ne.unread)||0:0;setAdminStats({newOrders:xe,newMessages:Ee})}catch{}},handleAdminLogout=()=>{try{localStorage.removeItem("vorotex_admin_session"),localStorage.removeItem("vorotex_admin_token"),localStorage.removeItem("vorotex_admin_csrf")}catch{}window.location.href="/"},hasAdminAlerts=x&&(adminStats.newOrders+adminStats.newMessages)>0;j.useEffect(()=>{if(!x)return;refreshAdminNotifications();const M=window.setInterval(()=>refreshAdminNotifications(),2e4);return()=>window.clearInterval(M)},[x]),j.useEffect(()=>{if(W.length>=2&&_.length>0){const M=W.toLowerCase(),X=_.filter(le=>le.name.toLowerCase().includes(M)||le.category.toLowerCase().includes(M)||(le.options||[]).some(o=>o.values.some(v=>v.name.toLowerCase().includes(M)))||(le.variants||[]).some(v=>v.externalId&&v.externalId.toLowerCase().includes(M))).slice(0,5);J(X)}else J([])},[W,_]),j.useEffect(()=>{const M=X=>{U.current&&!U.current.contains(X.target)&&G(!1)};return document.addEventListener("mousedown",M),()=>document.removeEventListener("mousedown",M)},[]);const B=M=>{if(M.children&&M.children.length>0){ R_sub(M.id===k_sub?null:M.id);return; }R(!1);R_sub(null);const X=M.target;if(X.startsWith("http")){window.open(X,"_blank");return}if(X.startsWith("/")){u(X),window.scrollTo(0,0);return}f!=="/"?(u("/"),setTimeout(()=>{X==="top"?window.scrollTo({top:0,behavior:"smooth"}):h(X)},100)):X==="top"?window.scrollTo({top:0,behavior:"smooth"}):h(X)},z=M=>{try{const X=JSON.parse(localStorage.getItem("vorotex_search_analytics")||"[]");X.push({term:M.trim(),date:new Date().toISOString()}),X.length>1e3&&X.shift(),localStorage.setItem("vorotex_search_analytics",JSON.stringify(X))}catch(X){console.error("Analytics Error",X)}try{fetch("/api/track_event.php",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({type:"search",value:M.trim()})})}catch(X){}},v=M=>{M.key==="Enter"&&W.trim()&&(z(W),u(`/search?q=${encodeURIComponent(W.trim())}`),R(!1),G(!1),te(!1),$(""))},T=()=>{R(!1),te(!0),G(!0),setTimeout(()=>{var M;return(M=q.current)==null?void 0:M.focus()},0)},A=()=>{te(!1),G(!1),J([]),$("")};j.useEffect(()=>{if(!D||typeof window>"u")return;const M=document.body,X=window.scrollY||window.pageYOffset||0;try{document.documentElement&&document.documentElement.style&&document.documentElement.style.setProperty&&document.documentElement.style.setProperty("--scroll-lock-y",X+"px")}catch(ge){}return P.current={y:X,prev:{position:M.style.position,top:M.style.top,left:M.style.left,right:M.style.right,width:M.style.width,overflow:M.style.overflow,overflowX:M.style.overflowX}},M.style.position="fixed",M.style.top=`-${X}px`,M.style.left="0",M.style.right="0",M.style.width="100%",M.style.overflow="hidden",M.style.overflowX="hidden",()=>{const le=P.current;if(!le)return;const xe=le.prev;M.style.position=xe.position||"",M.style.top=xe.top||"",M.style.left=xe.left||"",M.style.right=xe.right||"",M.style.width=xe.width||"",M.style.overflow=xe.overflow||"",M.style.overflowX=xe.overflowX||"",(()=>{try{document.documentElement&&document.documentElement.style&&document.documentElement.style.setProperty&&document.documentElement.style.setProperty("--scroll-lock-y","0px")}catch(ge){}})(),window.scrollTo(0,le.y),P.current=null}},[D]);const K=()=>{const M=W.trim();M&&(z(M),u(`/search?q=${encodeURIComponent(M)}`),A())},w=M=>{W.trim()&&z(W),u(`/product/${M}`),G(!1),te(!1),$("")},V=()=>{E?E():u(x?"/admin":O?"/dashboard":"/login")};return t.jsxs("nav",{className:"fixed-nav fixed top-0 left-0 right-0 w-full z-[1000] bg-[#0a0a0a]/95 backdrop-blur-md text-white border-b border-white/10 shadow-lg",style:{position:"fixed",top:0,left:0,right:0,zIndex:1000,WebkitTransform:"translate3d(0,
28700,0)",transform:"translate3d(0,0,0)"},children:[t.jsx("div",{className:"max-w-[1400px] mx-auto px-6 md:px-4 lg:px-8",style:{paddingLeft:"env(safe-area-inset-left)",paddingRight:"env(safe-area-inset-right)"},children:t.jsxs("div",{className:"flex items-center justify-between h-20 gap-2 md:gap-4 flex-nowrap",children:[t.jsx("div",{className:"flex-shrink-0 flex items-center cursor-pointer z-20",onClick:()=>B({target:"top"}),children:t.jsx(_n,{className:"h-auto w-auto text-white",customImage:m,isDarkText:!1})}),t.jsxs("div",{className:"flex-1 flex items-center justify-center min-w-0 px-2 h-full",children:[t.jsx("div",{className:"hidden xl:flex items-center space-x-8 mr-6 flex-shrink-0 h-full",children:y.map(M=>t.jsxs("div",{className:"relative group h-full flex items-center",children:[t.jsxs("button",{onClick:()=>B(M),className:`
2871                        relative px-2 py-1 text-xs font-black uppercase tracking-[0.15em] transition-all duration-300
2872                        group-hover:text-[#ff3b30] 
2873                        ${f===M.target&&(!M.children||M.children.length===0)?"text-[#ff3b30]":"text-white"}
2874                        ${M.children&&M.children.length>0?"cursor-default":"cursor-pointer"}
2875                        flex items-center gap-1
2876                      `,children:[M.name,t.jsx("span",{className:`
2877                        absolute bottom-0 left-1/2 w-0 h-[2px] bg-[#ff3b30] transition-all duration-300 transform -translate-x-1/2
2878                        group-hover:w-full
2879                        ${f===M.target?"w-full":""}
2880                      `}),M.children&&M.children.length>0&&t.jsx(Mt,{className:"w-3 h-3 group-hover:rotate-180 transition-transform duration-300"})]}),M.children&&M.children.length>0&&t.jsx("div",{className:"absolute top-full left-1/2 -translate-x-1/2 pt-2 invisible opacity-0 group-hover:visible group-hover:opacity-100 transition-all duration-300 transform translate-y-4 group-hover:translate-y-0",children:t.jsx("div",{className:"bg-[#0a0a0a]/95 backdrop-blur-md text-white border border-white/10 shadow-2xl rounded-xl overflow-hidden min-w-[220px] p-1.5",children:M.children.map(X=>t.jsx("button",{onClick:le=>{le.stopPropagation(),B(X)},className:"block w-full text-left px-5 py-3.5 text-[11px] font-black uppercase tracking-widest text-white/80 hover:text-white hover:bg-[#ff3b30] rounded-lg transition-all duration-200 mb-1 last:mb-0",children:X.name},X.id))})})]},M.id))}),t.jsxs("div",{className:"relative w-full max-w-md hidden min-[580px]:block group",ref:U,children:[t.jsx("input",{type:"text",placeholder:"ПОИСК...",value:W,onChange:M=>$(M.target.value),onKeyDown:v,onFocus:()=>G(!0),className:"w-full pl-10 pr-4 py-2.5 bg-white/5 border border-white/10 rounded-sm text-xs font-bold text-white placeholder-gray-500 focus:outline-none focus:border-[#ff3b30] focus:ring-1 focus:ring-[#ff3b30] transition-all uppercase tracking-wider"}),t.jsx(xa,{className:"absolute left-3 top-1/2 transform -translate-y-1/2 w-3.5 h-3.5 text-gray-500 group-focus-within:text-white transition-colors"}),Y&&W.length>=2&&H.length>0&&t.jsx("div",{className:"absolute top-full left-0 right-0 mt-2 bg-[#111] border border-gray-800 rounded-lg shadow-2xl overflow-hidden z-50 animate-fade-in",children:H.map(M=>t.jsxs("button",{onClick:()=>w(M.id),className:"w-full flex items-center gap-4 p-3 hover:bg-white/5 transition-colors border-b border-white/5 last:border-none text-left group/item",children:[t.jsx("div",{className:"w-10 h-10 rounded bg-white border border-gray-700 overflow-hidden flex-shrink-0",children:t.jsx("img",{src:M.image,alt:M.name,className:"w-full h-full object-contain p-1"})}),t.jsxs("div",{className:"flex-1 min-w-0",children:[t.jsx("div",{className:"text-sm font-bold text-white group-hover/item:text-[#ff3b30] transition-colors truncate uppercase",children:M.name}),t.jsx("div",{className:"text-[10px] text-gray-500 uppercase tracking-wider truncate",children:M.category})]})]},M.id))})]})]}),t.jsxs("div",{className:"flex-shrink-0 flex items-center gap-4 md:gap-6 z-20 bg-transparent",children:[t.jsx("button",{onClick:()=>B({target:"marketplaces"}),className:"hidden md:flex relative group items-center justify-center px-6 py-2 overflow-hidden font-black uppercase tracking-wider text-black bg-white hover:bg-[#ff3b30] hover:text-white transition-colors duration-300 transform -skew-x-12 shadow-[0_0_15px_rgba(255,255,255,0.2)]",children:t.jsxs("span",{className:"relative skew-x-12 text-[10px] flex items-center gap-2",children:["Где купить ",t.jsx(Qd,{className:"w-3 h-3"})]})}),t.jsxs("div",{className:"flex items-center gap-1 md:gap-3",children:[t.jsx("button",{onClick:T,className:"min-[580px]:hidden p-2 text-gray-400 hover:text-white transition-all duration-300",title:"Поиск",children:t.jsx(xa,{
2880className:"h-5 w-5"})}),t.jsxs("div",{className:"relative",onMouseEnter:()=>{adminHoverCloseTimer.current&&window.clearTimeout(adminHoverCloseTimer.current),x&&setIsAdminHoverOpen(!0)},onMouseLeave:()=>{x&&(adminHoverCloseTimer.current=window.setTimeout(()=>setIsAdminHoverOpen(!1),120))},children:[t.jsxs("button",{onClick:V,className:"p-2 text-gray-400 hover:text-white transition-all duration-300 relative group",title:x?"Админ панель":O?"Личный кабинет":"Войти",children:[x?t.jsx(yl,{className:"h-5 w-5 group-hover:rotate-90 transition-transform text-[#ff3b30]"}):t.jsx(Jl,{className:"h-5 w-5"}),x&&!hasAdminAlerts&&t.jsx("span",{className:"absolute top-1 right-1 w-2 h-2 bg-green-500 rounded-full border-2 border-black"}),x&&hasAdminAlerts&&t.jsx("span",{className:"absolute -top-1 -right-1 w-4 h-4 rounded-full bg-[#ff3b30] text-white border-2 border-black flex items-center justify-center text-[10px] font-black leading-none",children:"!"}),O&&!x&&t.jsx("span",{className:"absolute top-1 right-1 w-2 h-2 bg-blue-500 rounded-full border-2 border-black"})]}),x&&isAdminHoverOpen&&t.jsx("div",{className:"absolute top-full right-0 mt-2 w-64 bg-[#0b0b0b] border border-white/10 shadow-2xl rounded-xl overflow-hidden z-50",onMouseEnter:()=>{adminHoverCloseTimer.current&&window.clearTimeout(adminHoverCloseTimer.current)},onMouseLeave:()=>{adminHoverCloseTimer.current=window.setTimeout(()=>setIsAdminHoverOpen(!1),120)},children:t.jsxs("div",{children:[t.jsxs("div",{className:"px-4 py-3 border-b border-white/10",children:[t.jsx("div",{className:"text-[11px] font-black uppercase tracking-wider text-white",children:"Уведомления"}),t.jsx("div",{className:"text-[10px] text-white/60 mt-0.5",children:hasAdminAlerts?"Новые события":"Нет новых событий"})]}),t.jsxs("div",{className:"px-4 py-3 space-y-2",children:[t.jsxs("div",{className:"flex items-center justify-between text-xs",children:[t.jsx("span",{className:"text-white/80 font-bold uppercase tracking-wide",children:"Новые заказы"}),t.jsx("span",{className:"text-white font-black",children:adminStats.newOrders})]}),t.jsxs("div",{className:"flex items-center justify-between text-xs",children:[t.jsx("span",{className:"text-white/80 font-bold uppercase tracking-wide",children:"Новые сообщения"}),t.jsx("span",{className:"text-white font-black",children:adminStats.newMessages})]}),t.jsx("div",{className:"pt-2",children:t.jsx("button",{onClick:le=>{le.stopPropagation(),setIsAdminHoverOpen(!1),handleAdminLogout()},className:"w-full px-3 py-2 rounded-lg bg-[#ff3b30] hover:bg-red-600 text-white text-[10px] font-black uppercase tracking-wider transition-colors",children:"Выйти"})})]})]})})]}),t.jsxs("button",{onClick:()=>u("/compare"),className:"relative p-2 text-gray-400 hover:text-white transition-all duration-300 group",title:"Сравнение товаров",children:[t.jsx(br,{className:`h-5 w-5 ${g>0?"text-white":""} group-hover:scale-110 transition-transform`}),g>0&&t.jsx("span",{className:"absolute -top-1 -right-1 inline-flex items-center justify-center w-4 h-4 text-[9px] font-bold leading-none text-black bg-white rounded-full",children:g})]}),t.jsxs("button",{onClick:C,className:"relative p-2 text-gray-400 hover:text-[#ff3b30] transition-all duration-300 group",title:"Избранное",children:[t.jsx(jn,{className:`h-5 w-5 group-hover:scale-110 transition-transform ${b>0?"fill-[#ff3b30] text-[#ff3b30]":""}`}),b>0&&t.jsx("span",{className:"absolute -top-1 -right-1 inline-flex items-center justify-center w-4 h-4 text-[9px] font-bold leading-none text-white bg-[#ff3b30] rounded-full",children:b})]}),N&&t.jsxs("button",{onClick:o,className:"relative p-2 text-gray-400 hover:text-white transition-all duration-300 group",children:[t.jsx(js,{className:"h-5 w-5 group-hover:scale-110 transition-transform"}),pe>0&&t.jsx("span",{className:"absolute -top-1 -right-1 inline-flex items-center justify-center w-4 h-4 text-[9px] font-bold leading-none text-black bg-white rounded-full",children:pe})]}),t.jsx("div",{className:"xl:hidden flex-shrink-0 ml-1 mr-4 md:mr-0",children:t.jsx("button",{onClick:()=>R(!k),className:"p-3 text-white hover:bg-white/10 rounded-lg transition-colors",children:k?t.jsx(xt,{className:"h-6 w-6"}):t.jsx(Fd,{className:"h-6 w-6"})})})]})]})]})}),D&&t.jsx("div",{className:"fixed inset-0 z-[60] bg-black/70 backdrop-blur-sm overflow-x-hidden",onClick:A,children:t.jsx("div",{className:"absolute inset-x-0 top-0 bg-[#0a0a0a] border-b border-white/10 shadow-2xl",onClick:M=>M.stopPropagation(),children:t.jsxs("div",{className:"max-w-[900px] mx-auto px-4 pt-4 pb-5",children:[t.jsxs("div",{className:"flex items-center gap-3",children:[t.jsxs("div",{className:"relative flex-1",children:[t.jsx(xa,{
2880className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-500"}),t.jsx("input",{ref:q,type:"text",placeholder:"ПОИСК...",value:W,onChange:M=>$(M.target.value),onKeyDown:M=>{M.key==="Escape"&&A(),M.key==="Enter"&&K()},className:"w-full pl-10 pr-4 py-3 bg-white/5 border border-white/10 rounded-lg text-sm font-bold focus:outline-none focus:border-[#ff3b30] focus:ring-1 focus:ring-[#ff3b30] text-white uppercase tracking-wider"})]}),t.jsx("button",{onClick:K,className:"px-4 py-3 bg-white text-black font-black uppercase tracking-wider text-xs rounded-lg hover:bg-[#ff3b30] hover:text-white transition-colors",children:"Найти"}),t.jsx("button",{onClick:A,className:"p-2 text-gray-300 hover:text-white transition-colors","aria-label":"Закрыть поиск",children:t.jsx(xt,{className:"w-6 h-6"})})]}),t.jsx("div",{className:"mt-3 text-[11px] text-gray-500 uppercase tracking-wider",children:"Введите минимум 2 символа — покажем подсказки. Enter — поиск."}),W.length>=2&&t.jsx("div",{className:"mt-4 pb-4",children:H.length>0?t.jsxs("div",{className:"bg-[#111] border border-white/10 rounded-xl overflow-hidden",children:[H.map(M=>t.jsxs("button",{onClick:()=>w(M.id),className:"w-full flex items-center gap-3 px-4 py-3 text-left hover:bg-white/5 transition-colors border-b border-white/5 last:border-none",children:[t.jsx("div",{className:"w-12 h-12 rounded bg-white border border-gray-700 overflow-hidden flex-shrink-0",children:t.jsx("img",{src:M.image,alt:M.name,className:"w-full h-full object-contain p-1"})}),t.jsxs("div",{className:"flex-1 min-w-0",children:[t.jsx("div",{className:"text-sm font-black text-white truncate uppercase",children:M.name}),t.jsx("div",{className:"text-[10px] text-gray-500 uppercase tracking-wider truncate",children:M.category})]}),t.jsx(Cn,{className:"w-4 h-4 text-gray-500"})]},M.id)),t.jsx("button",{onClick:K,className:"w-full px-4 py-3 text-left bg-black text-white hover:bg-[#ff3b30] transition-colors text-xs font-black uppercase tracking-widest",children:"Показать все результаты"})]}):t.jsx("div",{className:"text-xs text-gray-400 bg-white/5 border border-white/10 rounded-xl px-4 py-4",children:"Ничего не найдено. Попробуйте другой запрос."})})]})})}),k&&t.jsx("div",{className:"xl:hidden bg-[#0a0a0a]/95 backdrop-blur-xl border-t border-white/10 absolute w-full shadow-2xl top-20 left-0 z-40 h-[calc(100vh-5rem)] overflow-y-auto",children:t.jsxs("div",{className:"px-4 pt-5 pb-8 space-y-2",children:[y.map(M=>{const isSubOpen=k_sub===M.id; return t.jsxs("div",{children:[t.jsxs("button",{onClick:()=>B(M),className:"flex w-full items-center gap-3 px-4 py-3 text-base font-black uppercase tracking-wider bg-white/5 rounded-xl border border-white/10 hover:bg-[#ff3b30]/10 hover:border-[#ff3b30]/40 transition-all duration-200 "+(isSubOpen?"text-[#ff3b30] border-[#ff3b30]/30":"text-white"),children:[t.jsx("span",{className:"w-2 h-2 rounded-full bg-[#ff3b30] flex-shrink-0"}),M.name,M.children&&M.children.length>0&&t.jsx(Mt,{className:"w-5 h-5 ml-auto transition-transform duration-300 "+(isSubOpen?"rotate-180 text-[#ff3b30]":"")})]}),M.children&&M.children.length>0&&t.jsx("div",{className:"ml-3 space-y-1 pl-3 border-l-2 border-[#ff3b30]/30 overflow-hidden transition-all duration-300 "+(isSubOpen?"max-h-[500px] opacity-100 mt-2 mb-4":"max-h-0 opacity-0 mt-0"),children:M.children.map(X=>t.jsx("button",{onClick:()=>B(X),className:"flex items-center gap-2 w-full text-left px-3 py-2 text-xs font-bold text-gray-200 hover:text-white hover:bg-white/10 rounded-lg uppercase tracking-widest transition-colors",children:X.name},X.id))})]},M.id)}),t.jsxs("button",{onClick:()=>B({target:"marketplaces"}),className:"w-full py-3 bg-[#ff3b30] text-white font-black uppercase tracking-widest text-xs flex items-center justify-center gap-2 shadow-lg shadow-red-500/20 mt-6 rounded-xl hover:bg-red-600 transition-colors",children:["Где купить ",t.jsx(Qd,{className:"w-4 h-4"})]})]})})]})},Dw=({onCtaClick:r,slides:o})=>{const[d,c]=j.useState(0),[h,m]=j.useState(null);j.useEffect(()=>{if(o.length<=1)return;const x=setInterval(()=>{c(N=>(N+1)%o.length)},6e3);return()=>clearInterval(x)},[o.length]);const y=x=>{x.startsWith("http")?window.open(x,"_blank"):r(x)},u=x=>{m(x.touches[0].clientX)},f=x=>{if(h===null)return;const N=x.changedTouches[0].clientX-h;Math.abs(N)>40&&o.length>1&&(N<0?c(C=>(C+1)%o.length):c(C=>(C-1+o.length)%o.length)),m(null)};return t.jsxs("div",{className:"relative h-[600px] w-full overflow-hidden bg-black group",onTouchStart:u,onTouchEnd:f,children:[o.map((x,N)=>t.jsxs("div",{className:`absolute inset-0 transition-opacity duration-1000 ease-in-out ${N===d?"opacity-100 z-10":"opacity-0 z-0"}`,children:[t.jsx("div",{className:"absolute inset-0 bg-cover bg-center transform transition-transform duration-[10000ms] ease-linear",style:{backgroundImage:`url('${x.image}')`,transform:N===d?"scale(1.05)":"scale(1)"}}),t.jsx("div",{className:"absolute inset-0 bg-cyber-net opacity-30 pointer-events-none"}),t.jsx("div",{className:"absolute inset-0 bg-gradient-to-r from-black/90 via-black/50 to-transparent"}),t.jsx("div",{className:"absolute inset-0 flex items-center",children:t.jsx("div",{className:"px-8 max-w-[1400px] mx-auto w-full",children:t.jsxs("div",{className:`max-w-2xl text-left transition-all duration-700 delay-300 ${N===d?"opacity-100 translate-y-0":"opacity-0 translate-y-10"}`,children:[x.tagline&&t.jsx("div",{className:"inline-block mb-4 px-4 py-1 bg-[#ff3b30] text-white font-bold tracking-widest text-xs uppercase transform -skew-x-12 shadow-lg shadow-red-900/50 border-l-4 border-white",children:t.jsx("span",{className:"block skew-x-12",children:x.tagline})}),t.jsx("h1",{className:"text-5xl md:text-7xl font-black tracking-tighter mb-6 text-white drop-shadow-2xl leading-[0.95]",dangerouslySetInnerHTML:{__html:x.title}}),t.jsx("p",{className:"text-xl text-gray-200 mb-8 max-w-lg drop-shadow-md font-medium leading-relaxed border-l-2 border-white/20 pl-4",children:x.subtitle}),t.jsxs("button",{onClick:()=>y(x.link),className:"px-10 py-4 bg-white text-black font-black text-lg uppercase tracking-wider rounded-sm hover:bg-[#ff3b30] hover:text-white transition-all duration-300 shadow-[0_0_20px_rgba(255,255,255,0.3)] hover:shadow-[0_0_30px_rgba(255,59,48,0.5)] flex items-center gap-3 group/btn relative overflow-hidden",children:[t.jsxs("span",{className:"relative z-10 flex items-center gap-3",children:[x.buttonText,t.jsx(Cn,{className:"w-5 h-5 group-hover/btn:translate-x-1 transition-transform"})]}),t.jsx("div",{className:"absolute inset-0 bg-gray-100 transform -translate-x-full group-hover/btn:translate-x-0 transition-transform duration-300 z-0 opacity-10"})]})]})})})]},x.id)),o.length>1&&t.jsx("div",{className:"absolute bottom-8 left-0 w-full z-20 flex justify-center gap-3",children:o.map((x,N)=>t.jsx("button",{onClick:()=>c(N),className:`h-1.5 rounded-full transition-all duration-300 shadow-sm ${N===d?"w-12 bg-[#ff3b30]":"w-2 bg-white/30 hover:bg-white hover:w-4"}`,"aria-label":`Go to slide ${N+1}`},N))})]})},zw=({categories:r,navigate:o})=>{const d=c=>{c.startsWith("http")?window.open(c,"_blank"):c.startsWith("/")?o(c):o(`/search?q=${encodeURIComponent(c)}`)};return t.jsx("section",{className:"py-16 bg-white text-black border-b border-gray-100",children:t.jsxs("div",{className:"max-w-[1400px] mx-auto px-4",children:[t.jsxs("div",{className:"text-center mb-12",children:[t.jsx("h2",{className:"text-3xl font-bold text-black uppercase tracking-widest mb-2",children:"Категории"}),t.jsx("div",{className:"w-16 h-1 bg-[#ff3b30] mx-auto rounded-full"})]}),t.jsx("div",{className:"grid grid-cols-2 md:grid-cols-3 lg:grid-cols-6 gap-4",children:r.slice(0,6).map(c=>t.jsxs("div",{onClick:()=>d(c.link),className:"group cursor-pointer",children:[t.jsxs("div",{className:"relative aspect-square rounded-xl overflow-hidden bg-gray-50 mb-3 border border-gray-100 group-hover:border-gray-300 transition-colors",children:[t.jsx("img",{src:c.image,alt:c.name,className:"w-full h-full object-cover transition-all duration-500 brightness-90 group-hover:brightness-110 group-hover:scale-105"}),t.jsx("div",{className:"absolute inset-0 bg-black/25 group-hover:bg-black/5 transition-colors"})]}),t.jsx("h3",{className:"text-center text-xs md:text-sm font-bold uppercase tracking-wide group-hover:text-[#ff3b30] transition-colors",children:c.name})]},c.id))})]})})},Te={KEYBOARD:"keyboards",MOUSE:"mice",HEADSET:"headsets",MICROPHONE:"microphones",ACCESSORY:"accessories",MINI:"mini-keyboards"},au={[Te.KEYBOARD]:"Клавиатуры",[Te.MOUSE]:"Мыши",[Te.HEADSET]:"Гарнитуры",[Te.MICROPHONE]:"Микрофоны",[Te.ACCESSORY]:"Аксессуары",[Te.MINI]:"Мини Клавиатуры"}
2880,Ax=[{id:Te.KEYBOARD,name:"Клавиатуры",slug:"keyboards",image:"/placeholder.svg",link:"/category/keyboards",specFields:[{id:"Тип клавиатуры",name:"Тип клавиатуры",placeholder:"Механическая"},{id:"Форм-фактор",name:"Форм-фактор",placeholder:"TKL / 60% / Full"},{id:"Свитчи",name:"Свитчи",placeholder:"Red / Blue / Brown"},{id:"Подключение",name:"Подключение",placeholder:"USB / Bluetooth"},{id:"Подсветка",name:"Подсветка",placeholder:"RGB"},{id:"Раскладка",name:"Раскладка",placeholder:"RUS/ENG"}],filterSettings:[{key:"Подключение",isVisible:!0,groups:[{id:"wireless",display:"Беспроводное (Hybrid)",variations:["Bluetooth / 2.4G / Проводной","Bluetooth / 2.4G / Проводное","2.4G / проводной","Bluetooth","Wireless","2.4G"]},{id:"wired",display:"Проводное",variations:["Проводное","Проводной USB","Проводное USB Type-C","Проводной USB-C","Проводное USB (съемный)","Проводной USB-C (Боковое)","Проводное USB-C","USB Type-C","Проводной USB (съемный)","Проводной","USB","Wired","USB-C","Проводное (Type-C)"]}]},{key:"Регулятор громкости",isVisible:!0,groups:[{id:"yes-roller",display:"Есть (Роллер)",variations:["Да, удобный роллер","Да, двухрежимный","Двухрежимный регулятор","Роллер (Громкость/Меню)","Роллер (Громкость/Яркость)","Удобный двухрежимный регулятор","Роллер","Да","Есть","Convenient roller"]},{id:"no-roller",display:"Нет",variations:["Нет","Отсутствует","No","-","N
2880one"]}]},{key:"Количество клавиш",isVisible:!0,groups:[{id:"61",display:"61 (60%)",variations:["61"]},{id:"63",display:"63 (60%)",variations:["63"]},{id:"68",display:"68 (65%)",variations:["68"]},{id:"81-82",display:"81-82 (75%)",variations:["81","82"]},{id:"84",display:"84 (75%)",variations:["84"]},{id:"87",display:"87 (TKL)",variations:["87"]},{id:"89",display:"89 (TKL)",variations:["89"]},{id:"94",display:"94 (96%)",variations:["94"]},{id:"98",display:"98 (98%)",variations:["98"]}]},{key:"Свитчи",isVisible:!0,groups:[{id:"tnt-yellow",display:"TNT Yellow",variations:['"TNT" yellow (жёлтый)',"TNT Yellow","TNT Yellow"]},{id:"outemu-red",display:"Outemu Red",variations:['"Outemu" Red (красный)',"RED (Красные)","Outemu Red","Red","Красные"]},{id:"huano-matcha",display:"Huano Matcha",variations:['HUANO "Matcha Latte" V2',"Huano Matcha Latte",'HUANO "Matcha Latte"']},{id:"dreamkey",display:"Dreamkey",variations:['"Dreamkey" (Red/Blue/Brown)',"Dreamkey"]},{id:"jerrzi",display:"Jerrzi Yellow",variations:['"Jerrzi" yellow (жёлтый)',"Jerrzi Yellow"]},{id:"peach",display:"Peach Switch",variations:["Peach Switch (линейные)","Peach Switch"]},{id:"panda",display:"Panda Switch",variations:['Black "Panda"',"Panda Switch"]}]},{key:"Материал клавиш",isVisible:!0,groups:[{id:"abs",display:"ABS-пластик",variations:["АБС-пластик","ABS пластик","ABS","АБС"]},{id:"pbt",display:"PBT-пластик",variations:["PBT-пластик","PBT","ПБТ"]}]},{key:"Подсветка",isVisible:!0,groups:[{id:"rgb",display:"RGB",variations:["RGB","RGB (19 режимов)","RGB (30+ режимов)","RGB (20+ режимов)","Смешанная (11 режимов) + Side RGB","Смешанная (11 режимов)","Смешанная (16 режимов)","RGB настраиваемая","RGB (12 режимов)","3D RGB подсветка","Смешанная (20 режимов) / Dynamic"]},{id:"mono",display:"Монохромная",variations:["Одноцветная монохромная (White)","Одноцветная монохромная (Blue)","White","Blue","Монохромная"]},{id:"no-light",display:"Нет",variations:["Отсутствует","Отсутствует (Строгий стиль)","Нет","No"]}]},{key:"Тип свитчей",isVisible:!0,groups:[{id:"hotswap",display:"Hot-Swap",variations:["Hot-swap","Hot-Swap","Hot Swap","Линейные, Hot-swap"]}]}]},{id:Te.MINI,name:"Мини Клавиатуры",slug:"mini-keyboards",image:"/placeholder.svg",link:"/category/mini-keyboards",specFields:[{id:"Тип клавиатуры",name:"Тип клавиатуры",placeholder:"Кейпад / Макро-пад"},{id:"Количество клавиш",name:"Количество клавиш",placeholder:"2 / 3 / 12"},{id:"Свитчи",name:"Свитчи",placeholder:"Outemu Red"},{id:"Тип свитчей",name:"Тип свитчей",placeholder:"Hot-Swap"},{id:"Подсветка",name:"Подсветка",placeholder:"RGB"},{id:"Подключение",name:"Подключение",placeholder:"USB-C / Bluetooth"},{id:"Наличие софта",name:"Наличие софта",placeholder:"Есть"},{id:"Дисплей",name:"Дисплей",placeholder:"OLED / IPS"},{id:"Размеры",name:"Размеры",placeholder:"70 x 30 x 30 мм"},{id:"Вес",name:"Вес",placeholder:"60 гр"}],filterSettings:[{key:"Подключение",isVisible:!0,groups:[{id:"wireless",display:"Беспроводное",variations:["USB Type-C / Bluetooth / Радиоканал","USB Type-C / Bluetooth / Радиоканал","USB Type-C / Bluetooth 5.0 (в BT версиях)"]},{id:"wired",display:"Проводное",variations:["USB Type-C","Проводное USB Type-C","Проводное USB-C (2 порта)","Проводное USB-C"]}]},{key:"Тип свитчей",isVisible:!0,groups:[{id:"hotswap",display:"Hot-Swap",variations:["Hot-Swap","Hot-swap","Hot-Swap (Magnetic)"]}]}]},{id:Te.MOUSE,name:"Мыши",slug:"mice",image:"/placeholder.svg",link:"/category/mice",specFields:[{id:"Сенсор",n
2880ame:"Сенсор",placeholder:"PixArt 3395"},{id:"DPI",name:"DPI",placeholder:"26000"},{id:"Вес",name:"Вес",placeholder:"54 г"},{id:"Подключение",name:"Подключение",placeholder:"2.4G / Wired"},{id:"Емкость аккумулятора",name:"Емкость аккумулятора",placeholder:"500 mAh"},{id:"Микропереключатели",name:"Микропереключатели",placeholder:"Huano"}],filterSettings:[{key:"Подключение",isVisible:!0,groups:[{id:"wireless",display:"Беспроводное",variations:["2.4G / Bluetooth 5.1 / Wired","Беспроводное 2.4G / Проводное","Беспроводное 2.4G / Проводное USB","Беспроводное"]},{id:"wired",display:"Проводное",variations:["Проводное USB","Проводное"]}]},{key:"Подсветка",isVisible:!0,groups:[{id:"rgb",display:"RGB",variations:["RGB","RGB (6 режимов)","RGB (13 режимов)","RGB (11 режимов)"]}]}]},{id:Te.HEADSET,name:"Гарнитуры",slug:"headsets",image:"/placeholder.svg",link:"/category/headsets",specFields:[{id:"Тип наушников",name:"Тип наушников",placeholder:"Полноразмерные"},{id:"Динамики",name:"Динамики",placeholder:"50 мм"},{id:"Звук",name:"Звук",placeholder:"7.1 / Стерео"},{id:"Микрофон",name:"Микрофон",placeholder:"Съемный"},{id:"Интерфейс",name:"Интерфейс",placeholder:"USB / 3.5mm"}],filterSettings:[{key:"Звук",isVisible:!0,groups:[{id:"71",display:"Виртуальный 7.1",variations:["Виртуальный 7.1","7.1"]},{id:"stereo",display:"Стерео",variations:["Стерео"]}]},{key:"Интерфейс",isVisible:!0,groups:[{id:"usb",display:"USB",variations:["USB"]},{id:"jack",display:"3.5 мм Jack",variations:["3.5 мм Jack (4-pin)","3.5 мм Jack (AUX)"]}]}]},{id:Te.MICROPHONE,name:"Микрофоны",slug:"microphones",image:"/placeholder.svg",link:"/category/microphones",showFilters:!1,specFields:[{id:"Тип микрофона",name:"Тип микрофона",placeholder:"Конденсаторный"},{id:"Направленность",name:"Направленность",placeholder:"Кардиоидная"},{id:"Частота дискретизации",name:"Частота дискретизации",placeholder:"192 кГц / 24 бит"},{id:"Подключение",name:"Подключение",placeholder:"USB"}]},{id:Te.ACCESSORY,name:"Аксессуары",slug:"accessories",image:"/placeholder.svg",link:"/category/accessories",showFilters:!1,specFields:[{id:"Тип товара",name:"Тип товара",placeholder:"Коврик / Кабель"},{id:"Размер",name:"Размер",placeholder:"900x400 мм"},{id:"Материал",name:"Материал",placeholder:"Ткань / Паракорд"}]}],Bw=[{id:"kb-k680-pro",name:"VOROTEX K680 PRO",category:Te.KEYBOARD,price:5190,originalPrice:6490,stock:1077,isNewArrival:!0,image:"/placeholder.svg",gallery:["/placeholder.svg","/placeholder.svg","/placeholder.svg","/placeholder.svg"],description:"Механическая клавиатура высокого класса с шумоизоляцией, Hot-Swap и поддержкой VIA.",longDescription:'VOROTEX K680 PRO — это флагманская модель, созданная для энтузиастов и требовательных геймеров. В основе клавиатуры лежит продвинутая конструкция Gasket Mount с многослойной шумоизоляцией (EVA + IPXE), которая гасит паразитные вибрации и обеспечивает чистый, благородный звук тайпинга. Модель полностью поддерживает программное обеспечение VIA, позволяющее переназначать любую клавишу и создавать сложные макросы. Выбор между премиальными свитчами Black "Panda" (для тишины) и HUANO "Matcha L
2880atte" (для плавности) позволяет настроить девайс под свой стиль игры.',features:["Hot-Swap","RGB","Noise Insulation","VIA Support"],specs:{"Эргономичный дизайн":"Да",Раскладка:"Русская и английская",Конструкция:"Gasket Mount","Тип клавиатуры":"Механическая","Количество клавиш":"68",Свитчи:'Black "Panda" / HUANO "Matcha Latte" V2',"Тип свитчей":"Hot-swap","Ресурс клавиш":"50 миллионов","Регулятор громкости":"Да, удобный роллер",Подсветка:"RGB (19 режимов)","Материал клавиш":"АБС-пластик",Подключение:"Проводное (Type-C)",Вес:"540 гр",Размеры:"330 x 115 x 42 мм","Поддержка ОС":"Windows, MacOS","Наличие софта":"Поддерживается (VIA)"},rating:4.9,seo:{title:"K680 PRO Механическая Клавиатура | RGB, Hot-Swap, VIA | VOROTEX",description:"Купить игровую клавиатуру K680 PRO. Профессиональная механика с шумоизоляцией, смазанными свитчами и поддержкой VIA. Идеальный тайпинг и RGB подсветка.",keywords:"k680 pro, механическая клавиатура, hot-swap, via qmk, игровая клавиатура, тихая механика, vorotex",indexing:!0},options:[{id:"color",name:"Цвет клавиш",type:"color",values:[{id:"graphite",name:"Графит",value:"#383838"},{id:"champagne",name:"Шампань",value:"#f7e7ce"}]},{id:"switch",name:"Свитчи",type:"text",values:[{id:"matcha",name:"HUANO Matcha Latte"},{id:"panda",name:"Panda Switch"}]}],variants:[{id:"00-00002009",externalId:"00-00002009",combination:{color:"graphite",switch:"matcha"},stock:235,price:5190},{id:"00-00002008",externalId:"00-00002008",combination:{color:"champagne",switch:"matcha"},stock:285,price:5190,image:"/placeholder.svg"},{id:"00-00002000",externalId:"00-00002000",combination:{color:"graphite",switch:"panda"},stock:268,price:5190},{id:"00-00001999",externalId:"00-00001999",combination:{color:"champagne",switch:"panda"},stock:289,price:5190,image:"/placeholder.svg"}],marketplaceLinks:{ozon:"https://ozon.ru",wb:"https://wildberries.ru",yandex:"https://market.yandex.ru"},sections:[{id:"sec-features",type:"features",title:"ОСОБЕННОСТИ",theme:"light",items:[{title:"Софт для настройки клавиатуры",text:"",icon:"settings"},{title:"Крутые кастомные HotSwap свитчи",text:"",icon:"cpu"},{title:"Улучшенное внутреннее строение",text:"",icon:"layers"},{title:"Девятнадцать эффектов RGB подсветки",text:"",icon:"zap"},{title:"Не требующее драйверов USB подключение",text:"",icon:"download"},{title:"Удобный регулятор громкости",text:"",icon:"volume"}]},{id:"sec-switches",type:"text-image",title:"ДВА ТИПА ПЕРЕКЛЮЧАТЕЛЕЙ",subtitle:"Выберите свой стиль игры",content:`
2881          <div style="display: grid; grid-template-columns: 1fr 1fr; gap: 20px;">
2882            <div style="background: rgba(255,255,255,0.05); padding: 20px; border-radius: 10px; border: 1px solid rgba(255,255,255,0.1);">
2883                <h4 style="font-weight: bold; font-size: 1.2rem; color: #b0ffb0; margin-bottom: 10px;">HUANO "Matcha Latte" V2</h4>
2884                <p style="font-size: 0.9rem; opacity: 0.8;">Качественные, линейные, смазанные свитчи с огромным ресурсом работы.</p>
2885                <p style="margin-top: 10px; font-weight: bold;">Сила нажатия: 45GF ± 8GF</p>
2886            </div>
2887            <div style="background: rgba(255,255,255,0.05); padding: 20px; border-radius: 10px; border: 1px solid rgba(255,255,255,0.1);">
2888                <h4 style="font-weight: bold; font-size: 1.2rem; color: #ffffff; margin-bottom: 10px;">Black "Panda"</h4>
2889                <p style="font-size: 0.9rem; opacity: 0.8;">Свитчи для любителей "тихих клавиатур". Мягкий, почти бесшумный ход.</p>
2890                <p style="margin-top: 10px; font-weight: bold;">Сила нажатия: 42GF ± 5GF</p>
2891            </div>
2892          </div>
2893        `,image:"/placeholder.svg",alignment:"left",theme:"dark"},{id:"sec-gasket",type:"text-image",title:"GASKET MOUNT",subtitle:"Идеальная шумоизоляция",content:'Конструкция с прокладками (Gasket Mount) и многослойным наполнением (EVA + IPXE) исключает жесткий контакт платы с корпусом. Это убирает паразитные вибрации, делая звук печати чистым, глубоким и "дорогим" (thocky sound).',image:"/placeholder.svg",alignment:"right",theme:"light"},{id:"sec-via",type:"text-image",title:"ПОДДЕРЖКА VIA",subtitle:"Полный контроль",content:"Профессиональное ПО VIA позволяет переназначать любую клавишу, создавать сложные макросы и управлять подсветкой на лету. Настройки сохраняются в памяти клавиатуры.",image:"/placeholder.svg",alignment:"left",theme:"dark"},{id:"sec-reviews",type:"reviews",title:"ОТЗЫВЫ ПОКУПАТЕЛЕЙ",theme:"light"}]},{id:"kb-k680gr",name:"VOROTEX K680GR",category:Te.KEYBOARD,price:4490,originalPrice
2893:5490,stock:688,isNewArrival:!0,image:"/placeholder.svg",gallery:["/placeholder.svg","/placeholder.svg","/placeholder.svg","/placeholder.svg"],description:"Стильная механическая клавиатура с уникальной градиентной расцветкой, Hot-Swap свитчами Outemu Red и монохромной подсветкой.",longDescription:"VOROTEX K680GR сочетает в себе стиль и функциональность. Главная фишка — уникальные градиентные кейкапы от темно-серого к светлому, создающие эффектный переход. Клавиатура оснащена удобным регулятором громкости (роллером) и качественными стабилизаторами. Под капотом — надежные красные свитчи Outemu Red с функцией Hot-Swap, позволяющей легко менять их. Стильная монохромная подсветка (White) дополняет строгий дизайн. Не требует установки драйверов.",features:["Gradient Keycaps","Outemu Red","Hot-Swap","Volume Knob","Monochrome Light"],specs:{"Эргономичный дизайн":"Да",Раскладка:"Русская и английская","Тип клавиатуры":"Механическая","Количество клавиш":"68",Свитчи:'"Outemu" Red (красный)',"Тип свитчей":"Hot-swap","Ресурс клавиш":"50 миллионов","Регулятор громкости":"Да, удобный роллер",Подсветка:"Одноцветная монохромная (White)","Материал клавиш":"АБС-пластик",Подключение:"Проводной USB-C","Рабочий ток":"150 мА",Размеры:"330 x 112 x 42 мм",Вес:"530 гр","Скорость отклика":"0.1 мс","Длина кабеля":"1.5 м.","Поддержка ОС":"Windows, MacOS","Наличие софта":"Отсутствует (не требуется)"},rating:4.8,seo:{title:"K680GR Градиентная Клавиатура | Outemu Red, Монохром | VOROTEX",description:"Купить K680GR - стильная клавиатура с градиентными кейкапами. Outemu Red свитчи, Hot-Swap, роллер громкости и монохромная подсветка.",keywords:"k680gr, градиентная клавиатура, outemu red, hot swap, клавиатура с роллером, vorotex, 65% механика",indexing:!0},options:[{id:"color",name:"Цвет клавиш",type:"color",values:[{id:"gradient-grey",name:"Серый градиент",colors:["#333333","#777777","#cccccc"]}]},{id:"switch",name:"Свитчи",type:"text",values:[{id:"red",name:"Outemu Red"}]}],variants:[{id:"00-00001998",externalId:"00-00001998",combination:{color:"gradient-grey",switch:"red"},stock:688,price:4490}],sections:[{id:"k680gr-features",type:"features",title:"ОСОБЕННОСТИ",theme:"light",items:[{title:"Уникальная градиентная расцветка",icon:"layers"},{title:"Качественные Hot Swap свитчи OUTEMU",icon:"cpu"},{title:"Стильная монохромная подсветка",icon:"zap"},{title:"Удобный регулятор громкости",icon:"volume"},{title:"Не требующее драйверов USB подключение",icon:"download"}]},{id:"k680gr-gradient",type:"text-image",title:"ГРАДИЕНТНЫЙ ДИЗАЙН",subtitle:"Эстетика в деталях",content:"Плавный переход от темно-серого к светлому создает уникальный визуальный стиль, который выделяет K680GR среди стандартных однотонных клавиатур. Кейкапы выполнены из качественного ABS пластика.",image:"/placeholder.svg",alignment:"right",theme:"dark"},{id:"k680gr-knob",type:"text-image",title:"УДОБНЫЙ РОЛЛЕР",subtitle:"Контроль одним движением",content:"Металлический регулятор позволяет мгновенно изменять громкость или яркость подсветки, не отвлекаясь от игры. Тактильно приятный и надежный механизм.",image:"/placeholder.svg",alignment:"left",theme:"light"},{id:"k680gr-switches",type:"text-image",title:"OUTEMU RED",subtitle:"Тихие и плавные",content:"Линейные переключатели Outemu Red обеспечивают мягкий нажатие без щелчка. Идеально подходят для быстрых игр и набора текста в офисе. Поддержка Hot-Swap позволяет заменить их за секунды.",image:"/placeholder.svg",alignment:"right",theme:"dark"},{id:"reviews-k680gr",type:"reviews",title:"ОТЗЫВЫ ПОКУПАТЕЛЕЙ",theme:"light"}]},{id:"kb-k87s",name:"VOROTEX K87S",category:Te.KEYBOARD,price:2990,originalPrice
2893:3990,stock:145,image:"/placeholder.svg",gallery:["/placeholder.svg","/placeholder.svg","/placeholder.svg","/placeholder.svg"],description:"Механическая клавиатура с металлической передней панелью, Hot-Swap свитчами Dreamkey и динамической подсветкой.",longDescription:'VOROTEX K87S — это неубиваемая классика в формате TKL (без цифрового блока). Ключевая особенность модели — металлическая передняя панель ("скелетон"), которая придает конструкции невероятную жесткость и стильный внешний вид. Свитчи "Dreamkey" обладают пылезащитной конструкцией штока, обеспечивая надежность даже в самых суровых игровых условиях. Поддержка Hot-Swap позволяет менять переключатели без пайки за считанные секунды. K87S — идеальный выбор для тех, кто ищет надежный инструмент для киберспорта без лишних переплат.',features:["Metal Panel","Hot-Swap","20 Modes RGB","Dreamkey"],specs:{"Эргономичный дизайн":"Да","Материал корпуса":"Металлическая передняя панель",Раскладка:"Русская и английская","Тип клавиатуры":"Механическая","Количество клавиш":"87",Свитчи:'"Dreamkey" (Red/Blue/Brown)',"Тип свитчей":"Hot-swap","Ресурс клавиш":"50 миллионов","Регулятор громкости":"Нет",Подсветка:"Смешанная (20 режимов) / Dynamic","Материал клавиш":"АБС-пластик",Подключение:"Проводной USB","Длина кабеля":"1.5 м","Рабочий ток":"120 мА",Размеры:"350 x 121 x 35 мм",Вес:"550 гр","Скорость отклика":"0.1 мс","Поддержка ОС":"Windows, MacOS","Наличие софта":"Отсутствует (не требуется)"},rating:4.7,seo:{title:"K87S Игровая Клавиатура | Металл, Hot-Swap, RGB | VOROTEX",description:"Купить K87S - надежную механическую клавиатуру с металлической панелью. Свитчи Dreamkey, 20 режимов подсветки и мгновенный отклик. Лучший выбор для шутеров.",keywords:"k87s, клавиатура металл, tkl клавиатура, dreamkey свитчи, игровая механика, vorotex, hot-swap",indexing:!0},options:[{id:"color",name:"Цвет клавиш",type:"color",values:[{id:"white-black",name:"Белый/Чёрный",colors:["#ffffff","#1a1a1a"]},{id:"black-purple",name:"Чёрный/Фиолетовый",colors:["#1a1a1a","#9933ff"]},{id:"white",name:"Белый",value:"#ffffff"},{id:"grey-white",name:"Серый/Белый",colors:["#999999","#ffffff"]},{id:"black-grey",name:"Чёрный/Серый",colors:["#1a1a1a","#999999"]},{id:"black",name:"Чёрный",value:"#1a1a1a"}]},{id:"switch",name:"Свитчи",type:"text",values:[{id:"red",name:"Red"},{id:"brown",name:"Brown (Tactile)"}]}],variants:[{id:"00-00001905",externalId:"00-00001905",combination:{color:"white-black",switch:"brown"},stock:19,price:2990},{id:"00-00001909",externalId:"00-00001909",combination:{color:"black-purple",switch:"brown"},stock:11,price:2990},{id:"00-00001030",externalId:"00-00001030",combination:{color:"white-black",switch:"red"},stock:59,price:2990},{id:"00-00001148",externalId:"00-00001148",combination:{color:"white",switch:"red"},stock:11,price:2990},{id:"00-00001596",externalId:"00-00001596",combination:{color:"grey-white",switch:"red"},stock:12,price:2990},{id:"00-00001691",externalId:"00-00001691",combination:{color:"black",switch:"red"},stock:9,price:2990},{id:"00-00001693",externalId:"00-00001693",combination:{color:"black-grey",switch:"red"},stock:7,price:2990},{id:"00-00001797",externalId:"00-00001797",combination:{color:"black-purple",switch:"red"},stock:26,price:2990}],sections:[{id:"k87s-features",type:"features",title:"ОСОБЕННОСТИ",theme:"light",items:[{title:"Ресурс до 50 миллионов нажатий",text:"Надежные переключатели Dreamkey",icon:"zap"},{title:"Металлическая передняя панель",text:"Прочность и стиль",icon:"shield"},{title:"Двадцать режимов подсветки",text:"Rainbow / Dynamic Lighting",icon:"star"},{title:"Не требующее драйверов USB подключение",text:"Plug & Play",icon:"download"},{title:"Различные комбинации расцветки клавиш",text:"Кастомизируй свой стиль",icon:"layout"}]},{id:"k87s-metal",type:"text-image",title:"МЕТАЛЛИЧЕСКАЯ ПАНЕЛЬ",subtitle:"Монолитная надежность",content:'Верхняя панель из алюминиевого сплава делает корпус устойчивым к изгибам и ударам. Конструкция "скелетон" облегчает чистку от пыли и крошек, а также позволяет подсветке распространяться более равномерно.',image:"/placeholder.svg",alignment:"right",theme:"dark"}
2893,{id:"k87s-dreamkey",type:"text-image",title:"СВИТЧИ DREAMKEY",subtitle:"Защита от пыли",content:"Специальная конструкция штока переключателей Dreamkey предотвращает попадание пыли внутрь механизма, значительно продлевая срок службы клавиатуры даже в неблагоприятных условиях.",image:"/placeholder.svg",alignment:"left",theme:"light"},{id:"k87s-rgb",type:"text-image",title:"ДИНАМИЧЕСКАЯ ПОДСВЕТКА",subtitle:"20 Режимов",content:'Настраивайте яркость, скорость и эффекты прямо с клавиатуры без установки софта. Режимы "Дыхание", "Волна", "Реакция на нажатие" и многие другие.',image:"/placeholder.svg",alignment:"right",theme:"dark"},{id:"reviews-k87s",type:"reviews",title:"ОТЗЫВЫ",theme:"light"}]},{id:"kb-k870",name:"VOROTEX K870",category:Te.KEYBOARD,price:4990,originalPrice:5990,stock:451,isNewArrival:!0,image:"/placeholder.svg",gallery:["/placeholder.svg","/placeholder.svg","/placeholder.svg"],description:"Эргономичная TKL механика с двухрежимным регулятором и смазанными TNT свитчами.",longDescription:'VOROTEX K870 — это эволюция TKL формата. Главное преимущество модели — удобный мультимедийный роллер, который позволяет регулировать не только громкость, но и яркость подсветки одним движением. Клавиатура поставляется с дополнительным набором цветных кейкапов (Teal/Green) в комплекте, позволяя вам кастомизировать внешний вид. Оснащена смазанными с завода желтыми свитчами "TNT Yellow" для идеально плавного хода.',features:["Hot-Swap","TNT Yellow","Volume Roller","Extra Keycaps"],specs:{"Эргономичный дизайн":"Да",Раскладка:"Русская и английская","Тип клавиатуры":"Механическая","Количество клавиш":"87",Свитчи:'"TNT" yellow (жёлтый)',"Тип свитчей":"Hot-swap","Ресурс клавиш":"50 миллионов","Регулятор громкости":"Двухрежимный регулятор",Подсветка:"RGB (30+ режимов)","Материал клавиш":"АБС-пластик",Подключение:"Проводной","Рабочий ток":"150 мА",Размеры:"360 x 137 x 43 мм",Вес:"840 гр","Скорость отклика":"0.1 мс","Длина кабеля":"1.5 м","Поддержка ОС":"Windows, MacOS","Наличие софта":"Есть"},rating:4.8,seo:{title:"K870 TKL Механическая Клавиатура | TNT Yellow, RGB, Роллер | VOROTEX",description:"VOROTEX K870 - TKL клавиатура с роллером громкости. Желтые свитчи TNT, 30 режимов RGB, Hot-Swap. В комплекте дополнительные цветные кейкапы.",keywords:"k870 клавиатура, tnt yellow switch, клавиатура с роллером, hot swap, rgb механика, vorotex",indexing:!0},options:[{id:"color",name:"Цвет клавиш",type:"color",values:[{id:"beige-green",name:"Бежевый/Зелёный",colors:["#e0d6c2","#00ffaa"]},{id:"grey",name:"Серый",value:"#777777"}]},{id:"switch",name:"Свитчи",type:"text",values:[{id:"yellow",name:"TNT Yellow"}]}],variants:[{id:"00-00001901",externalId:"00-00001901",combination:{color:"beige-green",switch:"yellow"},stock:43,price:4990},{id:"00-00002001",externalId:"00-00002001",combination:{color:"grey",switch:"yellow"},stock:408,price:4990}],sections:[{id:"k870-features",type:"features",title:"ОСОБЕННОСТИ",theme:"light",items:[{title:"Софт для настройки клавиатуры",icon:"settings"},{title:"Крутые HotSwap TNT свитчи жёлтые",icon:"cpu"},{title:"3D RGB подсветка. 30 эффектов",icon:"zap"},{title:"Дополнительные кейкапы в комплекте",icon:"layout"},{title:"Удобный двухрежимный регулятор",icon:"volume"}]},{id:"k870-tnt",type:"text-image",title:"TNT YELLOW SWITCHES",subtitle:"Максимальная плавность",content:"Линейные переключатели TNT Yellow смазаны с завода для минимизации трения. Отсутствие тактильного отклика и легкая сила нажатия делают их идеальными для быстрых повторных нажатий в динамичных играх.",image:"/placeholder.svg",alignment:"left",theme:"light"},{id:"k870-roller",type:"text-image",title:"ДВУХРЕЖИМНЫЙ РОЛЛЕР",subtitle:"Звук и Свет",content:"Уникальный регулятор работает в двух режимах. По умолчанию он меняет громкость системы. При удержании кнопки переключается на управление яркостью подсветки клавиатуры. Индикатор рядом подскажет текущий режим.",image:"/placeholder.svg",alignment:"right",theme:"dark"},{id:"k870-keycaps",type:"text-image",title:"БОНУСНЫЕ КЕЙКАПЫ",subtitle:"Кастомизация из коробки",content:"В комплекте вы найдете набор сменных цветных клавиш (Esc, Space, Enter, стрелки). Смешивайте цвета, чтобы создать свой уникальный стиль без дополнительных трат.",image:"/placeholder.svg",alignment:"left",theme:"light"},{id:"reviews-k870",type:"reviews",title:"ОТЗЫВЫ",theme:"light"}]},{id:"kb-k680-std",name:"VOROTEX K680",category:Te.KEYBOARD,price:4690,originalPrice
2893:5490,stock:1640,isNewArrival:!0,image:"/placeholder.svg",gallery:["/placeholder.svg","/placeholder.svg","/placeholder.svg"],description:"Компактная 65% механика с роллером, яркой RGB подсветкой и линейными свитчами TNT.",longDescription:"VOROTEX K680 (Standard) — это баланс компактности и функционала. Формат 65% (68 клавиш) сохраняет важные стрелки и навигационный блок, но освобождает максимум места на столе для движения мыши. В отличие от многих компактных моделей, здесь установлен полноценный роллер громкости. Под капотом — проверенные желтые свитчи TNT Yellow с ресурсом 50 млн нажатий. Яркая RGB подсветка с возможностью настройки через софт позволяет адаптировать клавиатуру под любой сетап. Отличный старт в мир кастомной механики.",features:["68 Keys","TNT Yellow","Volume Roller","RGB"],specs:{"Эргономичный дизайн":"Да",Раскладка:"Русская и английская","Тип клавиатуры":"Механическая","Количество клавиш":"68",Свитчи:'"TNT" yellow (жёлтый)',"Тип свитчей":"Hot-swap","Ресурс клавиш":"50 миллионов","Регулятор громкости":"Двухрежимный регулятор",Подсветка:"RGB (30+ режимов)","Материал клавиш":"АБС-пластик",Подключение:"Проводной","Рабочий ток":"150 мА",Размеры:"327 x 114 x 43 мм",Вес:"800 гр","Скорость отклика":"0.1 мс","Длина кабеля":"1.5 м","Поддержка ОС":"Windows, MacOS","Наличие софта":"Есть"},rating:4.9,seo:{title:"K680 65% Механическая Клавиатура | TNT Yellow, RGB | VOROTEX",description:"Компактная клавиатура K680 с роллером. Желтые свитчи TNT, яркая RGB подсветка, 68 клавиш. Максимум пространства для мыши.",keywords:"k680 клавиатура, 65% клавиатура, tnt yellow, компактная механика, vorotex, rgb подсветка",indexing:!0},options:[{id:"color",name:"Цвет клавиш",type:"color",values:[{id:"white-purple",name:"Белый/Фиолетовый",colors:["#ffffff","#9933ff"]},{id:"cream-grey",name:"Кремовый/Серый",colors:["#f5f5dc","#777777"]},{id:"grey",name:"Серый",value:"#777777"},{id:"dark-grey-cream",name:"Темно-серый/Кремовый",colors:["#333333","#f5f5dc"]},{id:"purple",name:"Фиолетовый",value:"#9933ff"}]},{id:"switch",name:"Свитчи",type:"text",values:[{id:"yellow",name:"TNT Yellow"}]}],variants:[{id:"00-00001896",externalId:"00-00001896",combination:{color:"white-purple",switch:"yellow"},stock:481,price:4690},{id:"00-00001885",externalId:"00-00001885",combination:{color:"cream-grey",switch:"yellow"},stock:441,price:4690},{id:"00-00001914",externalId:"00-00001914",combination:{color:"grey",switch:"yellow"},stock:334,price:4690},{id:"00-00001897",externalId:"00-00001897",combination:{color:"dark-grey-cream",switch:"yellow"},stock:147,price:4690},{id:"00-00001884",externalId:"00-00001884",combination:{color:"purple",switch:"yellow"},stock:237,price:4690}],sections:[{id:"k680-features",type:"features",title:"ОСОБЕННОСТИ",theme:"light",items:[{title:"Софт для настройки клавиатуры",icon:"settings"},{title:"Крутые HotSwap TNT свитчи жёлтые",icon:"cpu"},{title:"3D RGB подсветка. 30 эффектов",icon:"zap"},{title:"Не требующее драйверов USB подключение",icon:"download"},{title:"Удобный двухрежимный регулятор",icon:"volume"}]},{id:"k680-compact",type:"text-image",title:"КОМПАКТНОСТЬ 65%",subtitle:"Больше места для мыши",content:"Форм-фактор 65% убирает редко используемые клавиши, сохраняя стрелки и Del/PgUp/PgDn. Это освобождает до 30% места на столе по сравнению со стандартной клавиатурой, что критично для геймеров с низкой чувствительностью мыши.",image:"/placeholder.svg",alignment:"right",theme:"dark"},{id:"k680-rgb",type:"text-image",title:"3D RGB ПОДСВЕТКА",subtitle:"Атмосфера игры",content:"Яркие светодиоды под каждой клавишей создают насыщенное свечение. Настройте один из 30 режимов или создайте свой собственный профиль через фирменное ПО.",image:"/placeholder.svg",alignment:"left",theme:"light"},{id:"k680-switch",type:"text-image",title:"TNT YELLOW",subtitle:"Скорость реакции",content:'Линейные свитчи с усилием 45г обеспечивают мгновенный отклик. Смазка с завода убирает эффект "песка", делая каждое нажатие плавным и предсказуемым.',image:"/placeholder.svg",alignment:"right",theme:"dark"},{id:"reviews-k680",type:"reviews",title:"ОТЗЫВЫ",theme:"light"}]},{id:"kb-k630w",name:"VOROTEX K630W",category:Te.KEYBOARD,price:4690,originalPrice
2893:5690,stock:1026,isNewArrival:!0,image:"/placeholder.svg",gallery:["/placeholder.svg","/placeholder.svg","/placeholder.svg"],description:"Беспроводная механическая клавиатура 60% с тремя режимами подключения и емким аккумулятором.",longDescription:"Свобода от проводов с VOROTEX K630W. Эта ультракомпактная (60%) клавиатура поддерживает три режима подключения: Bluetooth 5.0 (для ноутбуков/планшетов), радиоканал 2.4G (для игр без задержек) и классический проводной режим. Встроенный литиевый аккумулятор на 2000 mAh обеспечивает недели работы без подзарядки (с выключенной подсветкой). В комплекте идут дополнительные кейкапы (Blue/Teal), позволяющие освежить внешний вид устройства.",features:["Wireless 3-Mode","TNT Yellow","2000mAh","Extra Keycaps"],specs:{"Эргономичный дизайн":"Да",Раскладка:"Русская и английская","Тип клавиатуры":"Механическая","Количество клавиш":"63",Свитчи:'"TNT" yellow (жёлтый)',"Тип свитчей":"Hot-swap","Ресурс клавиш":"50 миллионов",Подсветка:"RGB (20+ режимов)","Материал клавиш":"АБС-пластик",Подключение:"Bluetooth / 2.4G / Проводной","Литиевый аккумулятор":"2000 mAh","Рабочий ток":"150 мА",Размеры:"300 x 115 x 43 мм",Вес:"530 гр","Скорость отклика":"0.1 мс","Длина кабеля":"1.5 м","Поддержка ОС":"Windows, MacOS","Наличие софта":"Есть","Регулятор громкости":"Нет"},rating:4.8,seo:{title:"K630W Беспроводная Механическая Клавиатура | 3 Режима, RGB | VOROTEX",description:"Беспроводная свобода с VOROTEX K630W. Bluetooth, 2.4G и провод. 63 клавиши, TNT Yellow свитчи, аккумулятор 2000mAh. Компактность и мощь.",keywords:"k630w, беспроводная клавиатура, 3 режима подключения, bluetooth механика, compact 60%, vorotex",indexing:!0},options:[{id:"color",name:"Цвет клавиш",type:"color",values:[{id:"grey",name:"Серый",value:"#777777"},{id:"beige-green",name:"Бежевый/Зелёный",colors:["#e0d6c2","#00ffaa"]},{id:"white-purple",name:"Белый/Фиолетовый",colors:["#ffffff","#9933ff"]}]},{id:"switch",name:"Свитчи",type:"text",values:[{id:"yellow",name:"TNT Yellow"}]}],variants:[{id:"00-00002034",externalId:"00-00002034",combination:{color:"grey",switch:"yellow"},stock:483,price:4690},{id:"00-00001886",externalId:"00-00001886",combination:{color:"beige-green",switch:"yellow"},stock:47,price:4690},{id:"00-00001887",externalId:"00-00001887",combination:{color:"white-purple",switch:"yellow"},stock:496,price:4690}],sections:[{id:"k630w-features",type:"features",title:"ОСОБЕННОСТИ",theme:"light",items:[{title:"Софт для настройки клавиатуры",icon:"settings"},{title:"Крутые HotSwap TNT свитчи жёлтые",icon:"cpu"},{title:"Три режима подключения: USB, BT, Radio",icon:"zap"},{title:"Настраиваемая 3D RGB подсветка",icon:"star"},{title:"Удобный двухрежимный регулятор",icon:"volume"}]},{id:"k630w-conn",type:"text-image",title:"ТРИ РЕЖИМА РАБОТЫ",subtitle:"Универсальность для любых задач",content:"Используйте быстрый радиоканал 2.4G для игр без задержек. Переключайтесь на Bluetooth 5.0 для работы с планшетом или телефоном (до 3 устройств). Подключите кабель для зарядки и работы в проводном режиме.",image:"/placeholder.svg",alignment:"left",theme:"light"},{id:"k630w-battery",type:"text-image",title:"ЕМКАЯ БАТАРЕЯ",subtitle:"2000 mAh",content:"Встроенный аккумулятор обеспечивает длительную автономную работу. Интеллектуальный режим сна автоматически отключает подсветку при бездействии для экономии энергии.",image:"/placeholder.svg",alignment:"right",theme:"dark"},{id:"k630w-60",type:"text-image",title:"ФОРМАТ 60%",subtitle:"Ультракомпактность",content:"Всего 63 клавиши. Ничего лишнего. Этот формат идеален для киберспортсменов, так как позволяет расположить клавиатуру под любым углом и оставляет максимум места для коврика.",image:"/placeholder.svg",alignment:"left",theme:"light"},{id:"reviews-k630w",type:"reviews",title:"ОТЗЫВЫ",theme:"light"}]},{id:"kb-k610-light",name:"VOROTEX K610 LIGHT",category:Te.KEYBOARD,price:2990,originalPrice
2893:3990,stock:583,isNewArrival:!0,image:"/placeholder.svg",gallery:["/placeholder.svg","/placeholder.svg","/placeholder.svg"],description:"Оптимизированная механическая клавиатура 60% с яркой эстетикой и быстрыми красными свитчами.",longDescription:"VOROTEX K610 LIGHT — это яркий акцент на вашем столе. По умолчанию клавиатура выполнена в строгой серо-бежевой гамме (Grey/Beige). Однако в комплекте вы найдете набор ярких оранжевых кейкапов, чтобы добавить акценты по своему вкусу. Формат 60% идеален для шутеров, освобождая место для широких движений мышью. Линейные красные свитчи обеспечивают мгновенный отклик без щелчка.",features:["60% Compact","Red Switches","Extra Keycaps","Hot-Swap"],specs:{"Эргономичный дизайн":"Да",Раскладка:"Русская и английская","Тип клавиатуры":"Механическая","Количество клавиш":"61",Свитчи:"RED (Красные)","Тип свитчей":"Линейные, Hot-swap","Ресурс клавиш":"20 миллионов",Подсветка:"Смешанная (11 режимов) + RGB боковая","Материал клавиш":"АБС-пластик",Подключение:"Проводной USB-C","Рабочий ток":"150 мА",Размеры:"300 x 115 x 43 мм",Вес:"500 гр","Скорость отклика":"0.1 мс","Длина кабеля":"1.5 м","Поддержка ОС":"Windows, MacOS","Наличие софта":"Отсутствует (не требуется)","Регулятор громкости":"Нет"},rating:4.6,seo:{title:"K610 LIGHT Игровая Механическая Клавиатура 60% | Red Switch | VOROTEX",description:"Яркая и компактная K610 LIGHT. 61 клавиша, красные свитчи для скорости, боковая RGB подсветка. В комплекте дополнительные оранжевые кейкапы.",keywords:"k610 light, оранжевая клавиатура, 60% механика, red switch, игровая клавиатура, vorotex,",indexing:!0},options:[{id:"color",name:"Цвет клавиш",type:"color",values:[{id:"beige-grey",name:"Бежевый/Серый",colors:["#e0d6c2","#777777"]},{id:"grey-beige",name:"Серый/Бежевый",colors:["#777777","#e0d6c2"]}]},{id:"switch",name:"Свитчи",type:"text",values:[{id:"red",name:"Red"}]}],variants:[{id:"00-00001991",externalId:"00-00001991",combination:{color:"beige-grey",switch:"red"},stock:291,price:2990},{id:"00-00001992",externalId:"00-00001992",combination:{color:"grey-beige",switch:"red"},stock:292,price:2990}],sections:[{id:"k610-features",type:"features",title:"ОСОБЕННОСТИ",theme:"light",items:[{title:"Одиннадцать режимов Rainbow подсветки",icon:"zap"},{title:"Оптимизированное строение внутренних слоев",icon:"layers"},{title:"Боковая и задняя 3D RGB подсветка",icon:"star"},{title:"Дополнительные кейкапы (Orange) в комплекте",icon:"layout"},{title:"Не требующее драйверов USB подключение",icon:"download"}]},{id:"k610-design",type:"text-image",title:"ЯРКИЙ АКЦЕНТ",subtitle:"Оранжевые кейкапы в комплекте",content:"Хотите освежить вид своего рабочего стола? Просто замените стандартные серые клавиши на яркие оранжевые, которые идут в комплекте. Создайте свой уникальный стиль за пару минут.",image:"/placeholder.svg",alignment:"right",theme:"dark"},{id:"k610-side-rgb",type:"text-image",title:"БОКОВАЯ ПОДСВЕТКА",subtitle:"Сияние со всех сторон",content:"Уникальная особенность серии LIGHT — дополнительные RGB полосы по бокам корпуса. Они создают мягкое свечение на столе, визуально расширяя зону подсветки.",image:"/placeholder.svg",alignment:"left",theme:"light"},{id:"k610-switches",type:"text-image",title:"КРАСНЫЕ СВИТЧÐ
2893˜",subtitle:"Линейная скорость",content:"Классические Red свитчи — выбор киберспортсменов. Отсутствие тактильного щелчка и легкий ход клавиш обеспечивают максимальную скорость реакции в играх.",image:"/placeholder.svg",alignment:"right",theme:"dark"},{id:"reviews-k610",type:"reviews",title:"ОТЗЫВЫ",theme:"light"}]},{id:"kb-k680-light",name:"VOROTEX K680 LIGHT",category:Te.KEYBOARD,price:3390,originalPrice:4190,stock:562,isNewArrival:!0,image:"/placeholder.svg",gallery:["/placeholder.svg","/placeholder.svg","/placeholder.svg"],description:"Компактная 65% механика с роллером и боковой RGB подсветкой.",longDescription:"VOROTEX K680 LIGHT — стиль и функциональность в формате 65%. 68 клавиш, удобный роллер регулировки громкости и подсветки. Корпус выполнен в строгом сером цвете с яркими бирюзовыми акцентами (дополнительные кейкапы в комплекте). Боковая и задняя 3D RGB подсветка создает уникальную атмосферу. Тихие линейные красные свитчи с поддержкой Hot-Swap.",features:["68 Keys","Red Switch","Knob","Side RGB"],specs:{"Эргономичный дизайн":"Да",Раскладка:"Русская и английская","Тип клавиатуры":"Механическая","Количество клавиш":"68",Свитчи:"RED (Красные)","Тип свитчей":"Линейные, Hot-swap","Ресурс клавиш":"20 миллионов","Регулятор громкости":"Да, двухрежимный",Подсветка:"Смешанная (11 режимов) + Side RGB","Материал клавиш":"АБС-пластик",Подключение:"Проводной USB-C","Рабочий ток":"150 мА",Размеры:"327 x 114 x 43 мм",Вес:"600 гр","Скорость отклика":"0.1 мс","Длина кабеля":"1.5 м","Поддержка ОС":"Windows, MacOS","Наличие софта":"Отсутствует (не требуется)"},rating:4.7,seo:{title:"K680 LIGHT Механическая Клавиатура | Роллер, RGB | VOROTEX",description:"VOROTEX K680 LIGHT - 65% клавиатура с роллером. Красные свитчи, боковая RGB подсветка, Hot-Swap. Стильный дизайн Grey/Teal.",keywords:"k680 light, клавиатура с роллером, 65% механика, red switch, vorotex, боковая подсветка",indexing:!0},options:[{id:"color",name:"Цвет клавиш",type:"color",values:[{id:"grey-dark-grey",name:"Серый/Тёмно-серый",colors:["#777777","#333333"]}]},{id:"switch",name:"Свитчи",type:"text",values:[{id:"red",name:"Red"}]}],variants:[{id:"00-00002030",externalId:"00-00002030",combination:{color:"grey-dark-grey",switch:"red"},stock:562,price:3390}],sections:[{id:"k680l-features",type:"features",title:"ОСОБЕННОСТИ",theme:"light",items:[{title:"Одиннадцать режимов Rainbow подсветки",icon:"zap"},{title:"Оптимизированное строение внутренних слоев",icon:"layers"},{title:"Боковая и задняя 3D RGB подсветка",icon:"star"},{title:"Удобный двухрежимный регулятор",icon:"volume"},{title:"Не требующее драйверов USB подключение",icon:"download"}]},{id:"k680l-side",type:"text-image",title:"360° ПОДСВЕТКА",subtitle:"Атмосфера на максимуме",content:"Помимо подсветки клавиш, модель K680 LIGHT оснащена контурной RGB подсветкой по бокам и сзади корпуса. Это создает эффект парения клавиатуры над столом и добавляет стиля вашему сетапу.",image:"/placeholder.svg",alignment:"left",theme:"light"},{id:"k680l-knob",type:"text-image",title:"УПРАВЛЕНИЕ ЗВУКОМ",subtitle:"Встроенный роллер",content:"Редкость для компактных клавиатур — полноценный роллер громкости. Управляйте медиа-контентом быстро и интуитивно, не используя сочетания клавиш.",image:"/placeholder.svg",alignment:"right",theme:"dark"},{id:"k680l-color",type:"text-image",title:"TEAL ACCENTS",subtitle:"Стильная расцветка",content:"Строгий серый корпус оживляют яркие бирюзовые (Teal) кейкапы, идущие в комплекте. Клавиатура выглядит современно и дорого.",image:"/placeholder.svg",alignment:"left",theme:"light"},{id:"reviews-k680l",type:"reviews",title:"ОТЗЫВЫ",theme:"light"}]},{id:"kb-k840-light",name:"VOROTEX K840 LIGHT",category:Te.KEYBOARD,price:3590,originalPrice
2893:4390,stock:132,isNewArrival:!0,image:"/placeholder.svg",gallery:["/placeholder.svg","/placeholder.svg","/placeholder.svg"],description:"Эргономичная 75% клавиатура с роллером. Идеальный баланс размера и функционала.",longDescription:"VOROTEX K840 LIGHT — это формат 75% (84 клавиши), который сочетает компактность с наличием функционального ряда F1-F12. Двухрежимный роллер, боковая RGB подсветка и тихие красные свитчи делают её отличным выбором как для работы, так и для игр. В комплекте набор дополнительных кейкапов для кастомизации.",features:["84 Keys","Red Switch","Knob","Side RGB"],specs:{"Эргономичный дизайн":"Да",Раскладка:"Русская и английская","Тип клавиатуры":"Механическая","Количество клавиш":"84",Свитчи:"RED (Красные)","Тип свитчей":"Линейные, Hot-swap","Ресурс клавиш":"20 миллионов","Регулятор громкости":"Да, двухрежимный",Подсветка:"Смешанная (11 режимов) + Side RGB","Материал клавиш":"АБС-пластик",Подключение:"Проводной USB-C","Рабочий ток":"150 мА",Размеры:"327 x 135 x 43 мм",Вес:"600 гр","Скорость отклика":"0.1 мс","Длина кабеля":"1.5 м","Поддержка ОС":"Windows, MacOS","Наличие софта":"Отсутствует (не требуется)"},rating:4.8,seo:{title:"K840 LIGHT Клавиатура 75% | Роллер, RGB | VOROTEX",description:"Купить K840 LIGHT - 75% механическая клавиатура. 84 клавиши, роллер громкости, боковая подсветка, Red свитчи. Эргономика и стиль.",keywords:"k840 light, клавиатура 75%, 84 клавиши, механика с крутилкой, red switch, vorotex",indexing:!0},options:[{id:"color",name:"Цвет клавиш",type:"color",values:[{id:"grey-dark-grey",name:"Серый/Тёмно-серый",colors:["#777777","#333333"]}]},{id:"switch",name:"Свитчи",type:"text",values:[{id:"red",name:"Red"}]}],variants:[{id:"00-00002031",externalId:"00-00002031",combination:{color:"grey-dark-grey",switch:"red"},stock:132,price:3590}],sections:[{id:"k840l-features",type:"features",title:"ОСОБЕННОСТИ",theme:"light",items:[{title:"Одиннадцать режимов Rainbow подсветки",icon:"zap"},{title:"Оптимизированное строение внутренних слоев",icon:"layers"},{title:"Боковая и задняя 3D RGB подсветка",icon:"star"},{title:"Удобный двухрежимный регулятор",icon:"volume"},{title:"75% формфактор в модном исполнении",icon:"layout"},{title:"Не требующее драйверов USB подключение",icon:"download"}]},{id:"k840l-75",type:"text-image",title:"ЗОЛОТАЯ СЕРЕДИНА",subtitle:"Формат 75%",content:"Вам больше не нужно выбирать между компактностью и F-клавишами. Формат 75% предоставляет полный функционал в корпусе, который лишь немного больше 60% клавиатур. Идеально для работы и MMORPG.",image:"/placeholder.svg",alignment:"right",theme:"dark"}
2893,{id:"k840l-side",type:"text-image",title:"БОКОВАЯ RGB",subtitle:"Стильная подсветка",content:"Как и во всей серии LIGHT, здесь есть боковая контурная подсветка, которая визуально отделяет клавиатуру от поверхности стола.",image:"/placeholder.svg",alignment:"left",theme:"light"},{id:"k840l-knob",type:"text-image",title:"МУЛЬТИМЕДИА РОЛЛЕР",subtitle:"Управление звуком",content:"Выделенный роллер в правом верхнем углу позволяет мгновенно регулировать громкость системы.",image:"/placeholder.svg",alignment:"right",theme:"dark"},{id:"reviews-k840l",type:"reviews",title:"ОТЗЫВЫ",theme:"light"}]},{id:"kb-k980-light",name:"VOROTEX K980 LIGHT",category:Te.KEYBOARD,price:3690,originalPrice:4590,stock:350,isNewArrival:!0,image:"/placeholder.svg",gallery:["/placeholder.svg","/placeholder.svg","/placeholder.svg"],description:"Полноразмерная 98% механика с цифровым блоком и роллером в компактном корпусе.",longDescription:"VOROTEX K980 LIGHT — решение для тех, кто не готов жертвовать NumPad-ом. Формат 98% вмещает 98 клавиш, сохраняя габариты близкие к TKL моделям. Сохранена фирменная стилистика серии LIGHT: роллер громкости, боковая подсветка, тихие красные свитчи и стильная расцветка Grey/Teal. Дополнительные кейкапы в комплекте.",features:["98 Keys","Red Switch","Knob","NumPad"],specs:{"Эргономичный дизайн":"Да",Раскладка:"Русская и английская","Тип клавиатуры":"Механическая","Количество клавиш":"98",Свитчи:"RED (Красные)","Тип свитчей":"Линейные, Hot-swap","Ресурс клавиш":"20 миллионов","Регулятор громкости":"Да, двухрежимный",Подсветка:"Смешанная (11 режимов) + Side RGB","Материал клавиш":"АБС-пластик",Подключение:"Проводной USB-C","Рабочий ток":"150 мА",Размеры:"385 x 135 x 43 мм",Вес:"700 гр","Скорость отклика":"0.1 мс","Длина кабеля":"1.5 м","Поддержка ОС":"Windows, MacOS","Наличие софта":"Отсутствует (не требуется)"},rating:4.9,seo:{title:"K980 LIGHT Полноразмерная Механика 98% | Роллер, RGB | VOROTEX",description:"VOROTEX K980 LIGHT - клавиатура 98% с цифровым блоком. 98 клавиш, роллер, красные свитчи, боковая подсветка. Идеально для работы и игр.",keywords:"k980 light, клавиатура с нампадом, 98% механика, red switch, vorotex, игровая клавиатура",indexing:!0},options:[{id:"color",name:"Цвет клавиш",type:"color",values:[{id:"grey-dark-grey",name:"Серый/Тёмно-серый",colors:["#777777","#333333"]}]},{id:"switch",name:"Свитчи",type:"text",values:[{id:"red",name:"Red"}]}],variants:[{id:"00-00002033",externalId:"00-00002033",combination:{color:"grey-dark-grey",switch:"red"},stock:350,price:3690}],sections:[{id:"k980l-features",type:"features",title:"ОСОБЕННОСТИ",theme:"light",items:[{title:"Одиннадцать режимов Rainbow подсветки",icon:"zap"},{title:"Оптимизированное строение внутренних слоев",icon:"layers"},{title:"Боковая и задняя 3D RGB подсветка",icon:"star"},{title:"Удобный двухрежимный регулятор",icon:"volume"},{title:"Встроенный полноценный нумпад",icon:"layout"},{title:"Не требующее драйверов USB подключение",icon:"download"}]},{id:"k980l-numpad",type:"text-image",title:"ПОЛНЫЙ КОНТРОЛЬ",subtitle:"С цифровым блоком",content:"Идеальна для работы с таблицами, биндов в играх и ввода чисел. Формат 98% уплотняет клавиши, убирая пустое пространство, но сохраняя функционал NumPad.",image:"/placeholder.svg",alignment:"left",theme:"light"},{id:"k980l-side",type:"text-image",title:"SIDE RGB",subtitle:"Фирменная подсветка",content:"Светодиодные полосы по бокам корпуса добавляют объемное свечение, которое можно настроить отдельно от основной подсветки клавиш.",image:"/placeholder.svg",alignment:"right",theme:"dark"},{id:"k980l-switches",type:"text-image",title:"RED SWITCHES",subtitle:"Тихий гейминг",content:"Линейные красные переключатели обеспечивают быстрый и тихий ввод, что особенно важно при использовании клавиатуры в офисе или ночью.",image:"/placeholder.svg",alignment:"left",theme:"light"},{id:"reviews-k980l",type:"reviews",title:"ОТЗЫВЫ",theme:"light"}]},{id:"kb-sk820w",name:"VOROTEX SK820W",category:Te.KEYBOARD,price:6190,originalPrice
2893:7490,stock:63,isNewArrival:!0,image:"/placeholder.svg",gallery:["/placeholder.svg","/placeholder.svg","/placeholder.svg"],description:"Инновационная беспроводная клавиатура с дисплеем уровня заряда, роллером и премиальным тайпингом.",longDescription:"VOROTEX SK820W — это технологический шедевр. Встроенный дисплей отображает точный уровень заряда батареи, чтобы вы всегда были в курсе состояния устройства. Базовая расцветка White/Blue создает чистый и свежий вид, а в комплекте вы найдете дополнительные цветные кейкапы (Pastel/Pink) для создания уникального образа. Три режима подключения (BT/2.4/USB) и огромный аккумулятор на 4000 mAh делают её идеальным спутником.",features:["Battery Display","Gasket Mount","Extra Keycaps","Knob"],specs:{"Эргономичный дизайн":"Да",Дисплей:"Индикатор заряда батареи",Раскладка:"Русская и английская","Тип клавиатуры":"Механическая","Количество клавиш":"82",Свитчи:'"TNT" yellow (жёлтый)',"Тип свитчей":"Hot-swap","Ресурс клавиш":"50 миллионов","Регулятор громкости":"Роллер (Громкость/Меню)",Подсветка:"RGB (20+ режимов)","Материал клавиш":"АБС-пластик",Подключение:"Bluetooth / 2.4G / Проводной","Литиевый аккумулятор":"4000 mAh","Рабочий ток":"150 мА",Размеры:"327 x 132 x 43 мм",Вес:"840 гр","Скорость отклика":"0.1 мс","Длина кабеля":"1.5 м","Поддержка ОС":"Windows, MacOS","Наличие софта":"Есть"},rating:5,seo:{title:"SK820W Клавиатура с Экраном | Gasket Mount, Wireless | VOROTEX",description:"Премиальная SK820W с дисплеем заряда. Беспроводная, Gasket Mount, роллер, аккумулятор 4000mAh. Дополнительные кейкапы в комплекте.",keywords:"sk820w, клавиатура с экраном, индикатор заряда, gasket mount, беспроводная механика, vorotex, премиум клавиатура",indexing:!0},options:[{id:"color",name:"Цвет клавиш",type:"color",values:[{id:"beige-green",name:"Бежевый/Зелёный",colors:["#e0d6c2","#00ffaa"]},{id:"white-purple",name:"Белый/Фиолетовый",colors:["#ffffff","#9933ff"]}]},{id:"switch",name:"Свитчи",type:"text",values:[{id:"yellow",name:"TNT Yellow"}]}
2893],variants:[{id:"00-00001893",externalId:"00-00001893",combination:{color:"beige-green",switch:"yellow"},stock:11,price:6190},{id:"00-00001894",externalId:"00-00001894",combination:{color:"white-purple",switch:"yellow"},stock:52,price:6190}],sections:[{id:"sk820w-features",type:"features",title:"ОСОБЕННОСТИ",theme:"light",items:[{title:"Экран с индикацией заряда батареи",icon:"monitor"},{title:"Крутые HotSwap TNT свитчи жёлтые",icon:"cpu"},{title:"Три режима подключения: USB, BT, Radio",icon:"zap"},{title:"Удобный двухрежимный регулятор",icon:"volume"},{title:"Дополнительные кейкапы в комплекте",icon:"layout"}]},{id:"sk820w-gasket",type:"text-image",title:"GASKET MOUNT СТРУКТУРА",subtitle:"Идеальный звук тайпинга",content:'Многослойная шумоизоляция и крепление платы через прокладки (Gasket) обеспечивают мягкий, "дорогой" звук печати без металлических призвуков. Это премиальный стандарт в мире механических клавиатур.',image:"/placeholder.svg",alignment:"right",theme:"dark"},{id:"sk820w-screen",type:"text-image",title:"ИНФОРМАТИВНЫЙ ДИСПЛЕЙ",subtitle:"Всегда в курсе",content:"Встроенный экран отображает уровень заряда аккумулятора и текущий режим подключения. Вы больше никогда не останетесь без клавиатуры в разгар битвы.",image:"/placeholder.svg",alignment:"left",theme:"light"},{id:"sk820w-battery",type:"text-image",title:"4000 mAh АККУМУЛЯТОР",subtitle:"Долгая работа",content:"Благодаря энергоэффективному чипу и емкой батарее, SK820W может работать неделями без подзарядки в режиме без подсветки.",image:"/placeholder.svg",alignment:"right",theme:"dark"},{id:"reviews-sk820w",type:"reviews",title:"ОТЗЫВЫ",theme:"light"}]},{id:"kb-k980",name:"VOROTEX K980",category:Te.KEYBOARD,price:5490,originalPrice:6490,stock:357,isNewArrival:!0,image:"/placeholder.svg",gallery:["/placeholder.svg","/placeholder.svg","/placeholder.svg"],description:"Полноразмерная (98%) механика с цифровым блоком, роллером и премиальным звуком.",longDescription:"VOROTEX K980 — идеальный решение для тех, кому нужен NumPad, но кто не хочет загромождать стол огромной клавиатурой. Формат 98% (1800 layout) сохраняет все клавиши в более компактном корпусе. Базовая расцветка White/Grey выглядит строго и стильно, а комплектные фиолетовые (Purple) кейкапы позволяют добавить индивидуальности. Оснащена желтыми свитчами TNT для быстрой печати и игр. Двухрежимный роллер позволяет управлять мультимедиа на лету.",features:["98 Keys","NumPad","Volume Roller","Extra Keycaps"],specs:{"Эргономичный дизайн":"Да",Раскладка:"Русская и английская","Тип клавиатуры":"Механическая","Количество клавиш":"98",Свитчи:'"TNT" yellow (жёлтый)',"Тип свитчей":"Hot-swap","Ресурс клавиш":"50 миллионов","Регулятор громкости":"Роллер (Громкость/Яркость)",Подсветка:"RGB (30+ режимов)","Материал клавиш":"АБС-пластик",Подключение:"Проводной USB-C","Рабочий ток":"170 мА",Размеры:"384 x 133 x 40 мм",Вес:"920 гр","Скорость отклика":"0.1 мс","Длина кабеля":"1.5 м","Поддержка ОС":"Windows, MacOS","Наличие софта":"Есть"},rating:4.9,seo:{title:"K980 Полноразмерная Механика 98% | NumPad, RGB | VOROTEX",description:"VOROTEX K980 - клавиатура формата 98% (1800) с цифровым блоком. Компактнее стандартной, но с полным функционалом. Роллер, Hot-Swap, дополнительные кейкапы.",ke
2893ywords:"k980 клавиатура, 1800 layout, 98 клавиш, механика с нампадом, vorotex, tnt yellow",indexing:!0},options:[{id:"color",name:"Цвет клавиш",type:"color",values:[{id:"beige-green",name:"Бежевый/Зелёный",colors:["#e0d6c2","#00ffaa"]},{id:"white-purple",name:"Белый/Фиолетовый",colors:["#ffffff","#9933ff"]}]},{id:"switch",name:"Свитчи",type:"text",values:[{id:"yellow",name:"TNT Yellow"}]}],variants:[{id:"00-00001891",externalId:"00-00001891",combination:{color:"beige-green",switch:"yellow"},stock:206,price:5490},{id:"00-00001892",externalId:"00-00001892",combination:{color:"white-purple",switch:"yellow"},stock:151,price:5490}],sections:[{id:"k980-features",type:"features",title:"ОСОБЕННОСТИ",theme:"light",items:[{title:"Софт для настройки клавиатуры",icon:"settings"},{title:"Крутые HotSwap TNT свитчи жёлтые",icon:"cpu"},{title:"3D RGB подсветка. 30 эффектов подсветки",icon:"zap"},{title:"Встроенный полноценный нумпад",icon:"layout"},{title:"Дополнительные кейкапы в комплекте",icon:"layers"}]},{id:"k980-layout",type:"text-image",title:"ФОРМАТ 1800 (98%)",subtitle:"Идеальная эффективность",content:"Этот формат сохраняет все клавиши стандартной клавиатуры, включая цифровой блок, но убирает пустое пространство. Результат — клавиатура, которая занимает меньше места, но не теряет в функциональности.",image:"/placeholder.svg",alignment:"right",theme:"dark"},{id:"k980-switches",type:"text-image",title:"TNT YELLOW",subtitle:"Плавность в каждом нажатии",content:"Желтые линейные свитчи смазаны на заводе для обеспечения идеально гладкого хода. Они тише синих свитчей и быстрее коричневых.",image:"/placeholder.svg",alignment:"left",theme:"light"},{id:"k980-roller",type:"text-image",title:"МУЛЬТИМЕДИА РОЛЛЕР",subtitle:"Управление звуком",content:"Быстро регулируйте громкость музыки или игры, не сворачивая окна. Прокрутка плавная и точная.",image:"/placeholder.svg",alignment:"right",theme:"dark"},{id:"reviews-k980",type:"reviews",title:"ОТЗЫВЫ",theme:"light"}]},{id:"kb-p61",name:"VOROTEX P61",category:Te.KEYBOARD,price:2690,originalPrice:3490,stock:636,image:"/placeholder.svg",gallery:["/placeholder.svg","/placeholder.svg","/placeholder.svg","/placeholder.svg"],description:'Компактная (60%) механическая клавиатура с уникальными кейкапами "Pudding" для максимальной яркости RGB подсветки.',longDescription:'VOROTEX P61 — это входной билет в мир яркого гейминга. Главная "фишка" модели — кейкапы "Pudding" с полупрозрачными боковыми стенками. Это позволяет RGB подсветке заливать светом все пространство вокруг клавиш, создавая потрясающий визуальный эффект. Формат 60% (всего 61 клавиша) делает её невероятно компактной, оставляя максимум места для движений мышью в шутерах. Поддерживается функция Hot-Swap, так что вы легко сможете заменить свитчи на любые другие (3-pin/5-pin).',features:["Pudding Keycaps","60% Compact","RGB","Hot-Swap"],specs:{"Эргономичный дизайн":"Да",Раскладка:"Русская и английская","Тип кейкапов":"Pudding (с кириллицей)","Тип клавиатуры":"Механическая","Количество клавиш":"61",Свитчи:"Outemu Red","Тип свитчей":"Hot-swap","Ресурс клавиш":"50 миллионов",Подсветка:"Смешанная (11 режимов)","Материал клавиш":"АБС-пластик",Подключение:"Проводной USB (съемный)","Рабочий ток":"
2893100 мА",Размеры:"290 x 101 x 38.5 мм",Вес:"550 гр","Скорость отклика":"0.1 мс","Длина кабеля":"1.5 м","Поддержка ОС":"Windows, MacOS","Наличие софта":"Отсутствует (не требуется)","Регулятор громкости":"Нет"},rating:4.8,seo:{title:"P61 Мини Клавиатура 60% | Pudding Keycaps, RGB | VOROTEX",description:"Купить компактную механику P61 (60%). Уникальные Pudding кейкапы для яркой подсветки, Hot-Swap переключатели, съемный кабель. Идеально для небольших столов.",keywords:"p61 клавиатура, pudding keycaps, 60% клавиатура, мини механика, rgb клавиатура, vorotex, hot swap",indexing:!0},options:[{id:"color",name:"Цвет клавиш",type:"color",values:[{id:"white-black",name:"Белый/Чёрный",colors:["#ffffff","#1a1a1a"]},{id:"black-white",name:"Чёрный/Белый",colors:["#1a1a1a","#ffffff"]}]},{id:"switch",name:"Свитчи",type:"text",values:[{id:"red",name:"Red"}]}],variants:[{id:"00-00001677",externalId:"00-00001677",combination:{color:"white-black",switch:"red"},stock:312,price:2690},{id:"00-00001679",externalId:"00-00001679",combination:{color:"black-white",switch:"red"},stock:324,price:2690}],sections:[{id:"p61-features",type:"features",title:"ОСОБЕННОСТИ",theme:"light",items:[{title:'Клавиши "Pudding" с кириллицей и подсветкой',text:"Максимальная яркость",icon:"layers"},{title:"Качественные Hot Swap свитчи",text:"Быстрая замена без пайки",icon:"settings"},{title:"Одиннадцать режимов Rainbow подсветки",text:"Яркие эффекты",icon:"zap"},{title:"Не требующее драйверов USB подключение",text:"Plug & Play",icon:"download"},{title:"61 клавиша в чёрном и белом цветах",text:"Компактный формат",icon:"layout"}]},{id:"p61-pudding",type:"text-image",title:"PUDDING KEYCAPS",subtitle:"Больше света, больше стиля",content:"Кейкапы с двойным литьем и полупрозрачными боковинами пропускают на 50% больше света, чем стандартные. Ваши RGB эффекты будут выглядеть насыщеннее и ярче.",image:"/placeholder.svg",alignment:"right",theme:"dark"},{id:"p61-compact",type:"text-image",title:"60% КОМПАКТНОСТЬ",subtitle:"Минимум места",content:"Убрав цифровой блок и стрелки, мы получили клавиатуру, которая легко помещается в рюкзак. Идеально для турниров и маленьких столов.",image:"/placeholder.svg",alignment:"left",theme:"light"},{id:"p61-hotswap",type:"text-image",title:"HOT-SWAP",subtitle:"Горячая замена",content:"Хотите попробовать другие свитчи? Система Hot-Swap позволяет заменить их без паяльника. Экспериментируйте с тактильными ощущениями.",image:"/placeholder.svg",alignment:"right",theme:"dark"},{id:"reviews-p61",type:"reviews",title:"ОТЗЫВЫ",theme:"light"}]},{id:"kb-p82",name:"VOROTEX P82",category:Te.KEYBOARD,price:3390,originalPrice:4290,stock:399,image:"/placeholder.svg",gallery:["/placeholder.svg","/placeholder.svg","/placeholder.svg"],description:"82-клавишная механическая клавиатура с кейкапами Pudding и свитчами OUTEMU.",longDescription:"VOROTEX P82 объединяет эстетику Pudding кейкапов с функциональностью формата 75%. Здесь есть ряд F-клавиш и стрелки, при этом клавиатура остается гораздо компактнее стандартных моделей. Используются надежные переключатели OUTEMU с поддержкой Hot-Swap. Это отличный универсальный вариант: достаточно кнопок для работы и учебы, но при этом стильный вид и игровые характеристики. Подключение Plug & Play не требует установки сложного софта — просто подключи и играй.",features:["82 Keys","Pudding Keycaps","OUTEMU Switches","Hot-Swap"],specs:{"Эргономичный дизайн":"Да","Тип кейкапов":"Pudding (с кириллицей)",Раскладка:"Русская и английская","Тип клавиатуры":"Механическая","Количество клавиш":"82",Свитчи:"Outemu Red","Тип свитчей":"Hot-swap","Ресурс клавиш":"50 миллионов",Подсветка:"Смешанная (16 режимов)","Материал клавиш":"АБС-пластик",Подключение:"Проводной USB","Рабочий ток":"
2893150 мА",Размеры:"330 x 135 x 37 мм",Вес:"620 гр","Скорость отклика":"0.1 мс","Длина кабеля":"1.5 м","Поддержка ОС":"Windows, MacOS","Наличие софта":"Отсутствует (не требуется)","Регулятор громкости":"Нет"},rating:4.9,seo:{title:"P82 Механическая Клавиатура TKL | Pudding Keycaps | VOROTEX",description:"Купить P82 - сбалансированную 82-клавишную клавиатуру. Кейкапы Pudding для сочной подсветки, надежные свитчи Outemu, поддержка Hot-Swap.",keywords:"p82 клавиатура, tkl, pudding keycaps, outemu switch, игровая клавиатура, vorotex, 75% клавиатура",indexing:!0},options:[{id:"color",name:"Цвет клавиш",type:"color",values:[{id:"white-grey",name:"Белый/Серый",colors:["#ffffff","#999999"]},{id:"grey-white",name:"Серый/Белый",colors:["#999999","#ffffff"]}]},{id:"switch",name:"Свитчи",type:"text",values:[{id:"red",name:"Outemu Red"}]}],variants:[{id:"00-00001898",externalId:"00-00001898",combination:{color:"white-grey",switch:"red"},stock:171,price:3390},{id:"00-00001899",externalId:"00-00001899",combination:{color:"grey-white",switch:"red"},stock:228,price:3390}],sections:[{id:"p82-features",type:"features",title:"ОСОБЕННОСТИ",theme:"light",items:[{title:'Клавиши "Pudding" с кириллицей и подсветкой',icon:"layers"},{title:"Качественные Hot Swap свитчи OUTEMU",icon:"settings"},{title:"Шестнадцать режимов Rainbow подсветки",icon:"zap"},{title:"Не требующее драйверов USB подключение",icon:"download"},{title:"82 клавиши в сером и белом цветах",icon:"layout"}]},{id:"p82-pudding",type:"text-image",title:"PUDDING STYLE",subtitle:"Молочный слой",content:'Двухслойные кейкапы с прозрачным низом создают эффект "парящих клавиш" и делают подсветку невероятно насыщенной и объемной.',image:"/placeholder.svg",alignment:"left",theme:"light"},{id:"p82-75",type:"text-image",title:"ФОРМАТ 75%",subtitle:"Все необходимое",content:"82 клавиши включают в себя функциональный ряд F1-F12 и стрелки, что делает эту клавиатуру удобной не только для игр, но и для работы с документами.",image:"/placeholder.svg",alignment:"right",theme:"dark"},{id:"p82-outemu",type:"text-image",title:"OUTEMU SWITCHES",subtitle:"Надежность",content:"Проверенные временем переключатели Outemu обеспечивают ресурс в 50 миллионов нажатий. Технология Hot-Swap позволяет легко обслуживать и модифицировать клавиатуру.",image:"/placeholder.svg",alignment:"left",theme:"light"},{id:"reviews-p82",type:"reviews",title:"ОТЗЫВЫ",theme:"light"}]},{id:"kb-mk87r",name:"VOROTEX MK87R",category:Te.KEYBOARD,price:4790,originalPrice:5990,stock:666,isNewArrival:!0,image:"/placeholder.svg",gallery:["/placeholder.svg","/placeholder.svg","/placeholder.svg","/placeholder.svg"],description:"Высококачественная беспроводная механическая клавиатура с PBT кейкапами, шумоизоляцией и смазанными свитчами Jerrzi Yellow.",longDescription:"VOROTEX MK87R — выбор тех, кто ценит эстетику и качество материалов. Клавиатура оснащена PBT-кейкапами, которые не стираются со временем и имеют приятную шероховатую текстуру. Беспроводной модуль 2.4G обеспечивает стабильную связь без задержек, а встроенный аккумулятор на 1200 mAh позволяет забыть о зарядке надолго. Главная особенность — линейные свитчи Jerrzi Yellow, смазанные с завода для идеально плавного хода. Строгий дизайн без лишней подсветки делает её уместной как в игровом сетапе, так и в офисе.",features:["Wireless 2.4G","PBT Keycaps","Jerrzi Yellow","1200mAh"],specs:{"Эргономичный дизайн":"Да","Материал клавиш":"PBT-пластик",Раскладка:"Русская и английская","Тип клавиатуры":"Механическая","Количество клавиш":"89",Свитчи:'"Jerrzi" yellow (жёлтый)',"Тип свитчей":"Hot-swap","Ресурс клавиш":"50 миллионов",Подсветка:"Отсутствует (Строгий стиль)",Подключение:"2.4G / проводной","Литиевый аккумулятор"
2893:"1200 mAh",Размеры:"353 x 123 x 40 мм",Вес:"830 гр","Скорость отклика":"0.1 мс","Длина кабеля":"1.5 м.","Поддержка ОС":"Windows, MacOS","Наличие софта":"Отсутствует (не требуется)","Регулятор громкости":"Нет"},rating:5,seo:{title:"MK87R Беспроводная Механическая Клавиатура | PBT, Jerrzi Yellow | VOROTEX",description:"Премиальная беспроводная клавиатура MK87R. PBT кейкапы, смазанные свитчи Jerrzi Yellow, строгий дизайн без подсветки. Идеально для работы и игр.",keywords:"mk87r, беспроводная механика, pbt кейкапы, jerrzi yellow, тихая клавиатура, vorotex, 2.4g клавиатура",indexing:!0},options:[{id:"color",name:"Цвет клавиш",type:"color",values:[{id:"starry-blue",name:"Звездный синий",colors:["#000033","#ffff00"]},{id:"brown-sugar",name:"Коричневый сахар",colors:["#5c4033","#e0c090"]},{id:"milky-brown",name:"Молочно-коричневый",colors:["#f5f5dc","#8b4513"]}]},{id:"switch",name:"Свитчи",type:"text",values:[{id:"yellow",name:"Jerrzi Yellow"}]}],variants:[{id:"00-00001843",externalId:"00-00001843",combination:{color:"starry-blue",switch:"yellow"},stock:201,price:4790},{id:"00-00001844",externalId:"00-00001844",combination:{color:"brown-sugar",switch:"yellow"},stock:272,price:4790},{id:"00-00001845",externalId:"00-00001845",combination:{color:"milky-brown",switch:"yellow"},stock:193,price:4790}],sections:[{id:"mk87r-features",type:"features",title:"ОСОБЕННОСТИ",theme:"light",items:[{title:"Клавиши из качественного PBT-пластика",icon:"layers"},{title:"Крутые жёлтые HotSwap Jerrzi свитчи",icon:"settings"},{title:"Беспроводной и проводной режим подключения",icon:"zap"},{title:"Не требующее драйверов USB подключение",icon:"download"},{title:"Литиевый аккумулятор 1200 mAh",icon:"cpu"}]},{id:"mk87r-pbt",type:"text-image",title:"PBT КЕЙКАПЫ",subtitle:"Премиальные материалы",content:"Клавиши изготовлены из PBT пластика, который устойчив к износу и не полируется до блеска со временем. Приятная шероховатая текстура обеспечивает отличный контроль при печати.",image:"/placeholder.svg",alignment:"left",theme:"light"},{id:"mk87r-jerrzi",type:"text-image",title:"JERRZI YELLOW",subtitle:"Смазаны с завода",content:"Линейные переключатели Jerrzi Yellow обеспечивают невероятно плавный ход. Заводская смазка устраняет все посторонние шумы пружин.",image:"/placeholder.svg",alignment:"right",theme:"dark"},{id:"mk87r-wireless",type:"text-image",title:"БЕСПРОВОДНАЯ СВЯЗЬ",subtitle:"2.4G Wireless",content:"Надежное подключение через радиоканал гарантирует отсутствие задержек в играх. Аккумулятор 1200 mAh обеспечивает долгую работу.",image:"/placeholder.svg",alignment:"left",theme:"light"},{id:"reviews-mk87r",type:"reviews",title:"ОТЗЫВЫ",theme:"light"}]},{id:"kb-m68",name:"VOROTEX M68",category:Te.KEYBOARD,price:1890,originalPrice:2490,stock:313,isNewArrival:!0,image:"/placeholder.svg",gallery:["/placeholder.svg","/placeholder.svg","/placeholder.svg"],description:"Компактная 65% мембранная клавиатура с яркой RGB подсветкой и тихим ходом клавиш.",longDescription:"VOROTEX M68 — идеальный выбор для тех, кто ищет стильное и бюджетное решение. Формат 65% (68 клавиш) оставляет максимум места для мыши. Мембранные клавиши обеспечивают тихий и мягкий ход, что отлично подходит для ночных игровых сессий или работы. Яркая RGB подсветка с 11 режимами (3 динамических + 8 статических) создает уникальную атмосферу. Прорезиненные ножки гарантируют устойчивость на столе.",features:["68 Keys","Quiet Membrane","RGB 11 Modes","Plug & Play"],specs:{"Эргономичный дизайн":"Да","Тип клавиатуры":"Мембранная",Раскладка:"Русская и английская","Количество клавиш":"68","Материал клавиш":"ABS пластик","Рабочий ток":"
2893110 мА",Подключение:"Проводной USB-C","Ресурс клавиш":"10 млн. кликов",Подсветка:"RGB, 11 эффектов",Размеры:"310 x 101 x 35 мм",Вес:"300 гр","Длина кабеля":"1.7 м","Поддержка ОС":"Windows, MacOS","Наличие софта":"Отсутствует (не требуется)","Регулятор громкости":"Нет"},rating:4.5,seo:{title:"M68 Мембранная Игровая Клавиатура 65% | RGB, Тихая | VOROTEX",description:"Бюджетная игровая клавиатура VOROTEX M68. Тихий мембранный ход, 68 клавиш, яркая RGB подсветка. Идеально для старта.",keywords:"m68 клавиатура, мембранная игровая, 65% клавиатура, тихая клавиатура, rgb подсветка, vorotex",indexing:!0},options:[{id:"color",name:"Цвет",type:"color",values:[{id:"pink",name:"Розовый",value:"#ffb7b2"},{id:"black",name:"Чёрный",value:"#222222"}]}],variants:[{id:"00-00002054",externalId:"00-00002054",combination:{color:"pink"},stock:160,price:1890},{id:"00-00002057",externalId:"00-00002057",combination:{color:"black"},stock:153,price:1890}],sections:[{id:"m68-features",type:"features",title:"ОСОБЕННОСТИ",theme:"light",items:[{title:"Не требующее драйверов USB подключение",icon:"settings"},{title:"Приятный, тихий ход клавиш",icon:"mouse"},{title:"Яркая RGB подсветка. 11 эффектов подсветки",icon:"zap"},{title:"Срок службы клавиш: 10 млн. кликов",icon:"cpu"},{title:"Нестандартное цветовое исполнение",icon:"layout"}]},{id:"m68-membrane",type:"text-image",title:"ТИХАЯ МЕМБРАНА",subtitle:"Бесшумная игра",content:"Мембранные переключатели обеспечивают мягкий ход без характерного щелчка. Идеально для тех, кто играет ночью и не хочет будить близких.",image:"/placeholder.svg",alignment:"right",theme:"dark"},{id:"m68-rgb",type:"text-image",title:"ЯРКАЯ RGB",subtitle:"11 Режимов",content:"Многозонная подсветка с различными эффектами переливания. Создайте нужную атмосферу для игры или работы.",image:"/placeholder.svg",alignment:"left",theme:"light"},{id:"m68-compact",type:"text-image",title:"65% ФОРМАТ",subtitle:"Эргономика",content:"Компактный размер освобождает место на столе для широких движений мышкой, что важно в соревновательных шутерах.",image:"/placeholder.svg",alignment:"right",theme:"dark"},{id:"reviews-m68",type:"reviews",title:"ОТЗЫВЫ",theme:"light"}]},{id:"kb-ak820-pro",name:"VOROTEX AK820 PRO",category:Te.KEYBOARD,price:6690,originalPrice:7990,stock:543,isNewArrival:!0,image:"/placeholder.svg",gallery:["/placeholder.svg","/placeholder.svg","/placeholder.svg"],description:"Премиальная беспроводная механика с цветным TFT экраном, Gasket Mount и кастомными свитчами Peach Switch.",longDescription:'VOROTEX AK820 PRO — вершина инженерной мысли. Главная фишка — цветной 0.85" TFT экран с меню на русском языке, позволяющий управлять настройками, видеть время и заряд, и даже ставить свои GIF. Конструкция Gasket Mount с пятью слоями шумоизоляции обеспечивает невероятно мягкий и "дорогой" звук тайпинга. Линейные свитчи "Peach Switch" работают плавно и тихо. Огромный аккумулятор 4000mAh и три режима подключения (BT/2.4G/USB) делают её универсальным инструментом.',features:["TFT Screen","Gasket Mount","Peach Switch","4000mAh"],specs:{"Эргономичный дизайн":"Да",Конструкция:"Gasket Mount",Раскладка:"Русская и английская",Дисплей:"Цветной мультимедийный TFT-экран","Тип клавиатуры":"Механическая","Количество клавиш":"81","Материал клавиш":"ABS пластик","Рабочий ток":"
2893150 мА",Подключение:"Bluetooth / 2.4G / Проводной","Литиевый аккумулятор":"4000 mAh",Свитчи:"Peach Switch (линейные)","Тип свитчей":"Hot-Swap","Ресурс клавиш":"50 млн. кликов",Подсветка:"RGB настраиваемая","Регулятор громкости":"Да (Роллер)",Размеры:"327 x 136 x 40 мм",Вес:"770 гр","Скорость отклика":"0.1 мс","Длина кабеля":"1.5 м","Поддержка ОС":"Windows, MacOS","Наличие софта":"Есть"},rating:5,seo:{title:"AK820 PRO Клавиатура с Экраном | Gasket Mount, Wireless | VOROTEX",description:"Флагманская AK820 PRO с цветным экраном. Gasket Mount, Peach свитчи, аккумулятор 4000mAh. Полная шумоизоляция и премиум тайпинг.",keywords:"ak820 pro, клавиатура с экраном, gasket mount, peach switch, беспроводная механика, vorotex, премиум",indexing:!0},options:[{id:"color",name:"Цвет",type:"color",values:[{id:"beige-grey",name:"Бежевый/Серый",colors:["#e0d6c2","#777777"]}]},{id:"switch",name:"Свитчи",type:"text",values:[{id:"peach",name:"Peach Switch"}]}],variants:[{id:"00-00002002",externalId:"00-00002002",combination:{color:"beige-grey",switch:"peach"},stock:543,price:6690}],sections:[{id:"ak820-features",type:"features",title:"ОСОБЕННОСТИ",theme:"light",items:[{title:"Софт для настройки клавиатуры",icon:"settings"},{title:"Крутые свитчи Peach Switch, Hot-Swap",icon:"cpu"},{title:"Три режима подключения: USB Type-C, Bluetooth, Радиоканал",icon:"zap"},{title:"Цветной мультимедийный TFT-экран",icon:"monitor"},{title:"Тип крепления: Gasket Mount",icon:"layers"},{title:"Удобный встроенный регулятор",icon:"volume"}]},{id:"ak820-screen",type:"text-image",title:'TFT ЭКРАН 0.85"',subtitle:"Ваш командный центр",content:"Настраивайте подсветку, следите за зарядом батареи, временем и режимом подключения. Или загрузите любимую GIF-анимацию, чтобы придать клавиатуре уникальность. Меню переведено на русский язык.",image:"/placeholder.svg",alignment:"right",theme:"light"},{id:"ak820-peach",type:"text-image",title:"PEACH SWITCH",subtitle:"Премиум тайпинг",content:"Линейные переключатели Peach созданы для ценителей тишины и плавности. Полная заводская смазка и удлиненная пружина создают неповторимый тактильный опыт.",image:"/placeholder.svg",alignment:"left",theme:"dark"},{id:"ak820-gasket",type:"text-image",title:"GASKET MOUNT",subtitle:"5 слоев шумоизоляции",content:'Конструкция клавиатуры включает пять слоев шумопоглощающих материалов (Poron, IXPE, Silicone). Это гасит паразитные резонансы и обеспечивает глубокий, "породистый" звук.',image:"/placeholder.svg",alignment:"right",theme:"light"},{id:"reviews-ak820",type:"reviews",title:"ОТЗЫВЫ",theme:"light"}]},{id:"kb-k940gr",name:"VOROTEX K940GR",category:Te.KEYBOARD,price:4790,originalPrice:5890,stock:410,isNewArrival:!0,image:"/placeholder.svg",gallery:["/placeholder.svg","/placeholder.svg","/placeholder.svg"],description:"Уникальная градиентная расцветка, монохромная подсветка, качественные стабилизаторы.",longDescription:"VOROTEX K940GR - это полноразмерная функциональность в компактном корпусе (94 клавиши). Главная особенность - уникальная градиентная расцветка клавиш и стильная монохромная синяя (Blue) подсветка. Свитчи Outemu Red с поддержкой Hot-Swap обеспечивают тихий и плавный ход. Боковое подключение кабеля USB-C добавляет удобства.",features:["94 Keys","Gradient","Blue Light","Outemu Red"],specs:{"Эргономичный дизайн":"Да",Раскладка:"Русская и английская","Тип клавиатуры":"Механическая","Количество клавиш":"94",Свитчи:'"Outemu" Red (красный)',"Тип свитчей":"Hot-swap","Ресурс клавиш":"50 миллионов",Подсветка:"Одноцветная монохромная (Blue)","Материал клавиш":"АБС-пластик",Подключение:"Проводной USB-C (Боковое)","Рабочий ток":"200 мА",Размеры:"366 x 135 x 37 мм",Вес:"600 гр","Скорость отклика":"0.1 мс","Длина кабеля":"1.5 м","Поддержка ОС":"Windows, MacOS","Наличие софта":"Отсутствует (не требуется)","Регулятор громкости":"Ð
2893ÐµÑ‚"},rating:4.8,seo:{title:"K940GR Механическая Клавиатура 94% | Градиент, Blue Light | VOROTEX",description:"Купить K940GR - стильная клавиатура с градиентом. 94 клавиши, синяя подсветка, Outemu Red свитчи. Боковое подключение.",keywords:"k940gr, градиентная клавиатура, 94 клавиши, outemu red, синяя подсветка, vorotex",indexing:!0},options:[{id:"color",name:"Цвет",type:"color",values:[{id:"gradient-grey",name:"Серый градиент",colors:["#333333","#777777","#cccccc"]}]},{id:"switch",name:"Свитчи",type:"text",values:[{id:"red",name:"Outemu Red"},{id:"brown",name:"Outemu Brown (Tactile)"}]}],variants:[{id:"00-00001694",externalId:"00-00001694",combination:{color:"gradient-grey",switch:"red"},stock:396,price:4790},{id:"00-00001888",externalId:"00-00001888",combination:{color:"gradient-grey",switch:"brown"},stock:14,price:4790}],sections:[{id:"k940gr-features",type:"features",title:"ОСОБЕННОСТИ",theme:"light",items:[{title:"Уникальная градиентная расцветка",icon:"layers"},{title:"Качественные Hot Swap свитчи OUTEMU",icon:"cpu"},{title:"Стильная монохромная подсветка",icon:"zap"},{title:"Встроенный полноценный нумпад",icon:"layout"},{title:"Не требующее драйверов USB подключение",icon:"download"}]},{id:"k940gr-gradient",type:"text-image",title:"BLUE GRADIENT",subtitle:"Стиль воды",content:"Клавиатура выполнена в уникальной градиентной расцветке с голубой монохромной подсветкой. Это создает расслабляющий и стильный вид рабочего места.",image:"/placeholder.svg",alignment:"right",theme:"dark"},{id:"k940gr-94key",type:"text-image",title:"ФОРМАТ 94%",subtitle:"Компактный NumPad",content:"Инженеры VOROTEX смогли уместить полноценный цифровой блок в корпус, который лишь немного шире TKL клавиатур. Это экономит место, но сохраняет функционал.",image:"/placeholder.svg",alignment:"left",theme:"light"},{id:"k940gr-cable",type:"text-image",title:"БОКОВОЙ КАБЕЛЬ",subtitle:"Удобство подключения",content:"Разъем Type-C расположен сбоку, что особенно удобно для пользователей ноутбуков — кабель не мешает экрану и не перегибается.",image:"/placeholder.svg",alignment:"right",theme:"dark"},{id:"reviews-k940gr",type:"reviews",title:"ОТЗЫВЫ",theme:"light"}]},{id:"kb-k870gr",name:"VOROTEX K870GR",category:Te.KEYBOARD,price:4690,originalPrice:5690,stock:728,isNewArrival:!0,image:"/placeholder.svg",gallery:["/placeholder.svg","/placeholder.svg","/placeholder.svg"],description:"Классическая TKL механика в градиентном исполнении с белой подсветкой.",longDescription:"VOROTEX K870GR — это классика жанра. Формат TKL (87 клавиш) без цифрового блока в стильном градиентном дизайне. Свитчи Outemu Red с поддержкой Hot-Swap, качественные стабилизаторы и приятная белая монохромная подсветка делают её отличным выбором для любого сетапа.",features:["87 Keys","Gradient","White Light","Outemu Red"],specs:{"Эргономичный дизайн":"Да",Раскладка:"Русская и английская","Тип клавиатуры":"Механическая","Количество клавиш":"87",Свитчи:'"Outemu" Red (красный)',"Тип свитчей":"Hot-swap","Ресурс клавиш":"50 миллионов",Подсветка:"Одноцветная монохромная (White)","Материал клавиш":"АБС-пластик",Подключение:"Проводной USB-C","Рабочий ток":"
2893150 мА",Размеры:"330 x 112 x 42 мм",Вес:"680 гр","Скорость отклика":"0.1 мс","Длина кабеля":"1.5 м","Поддержка ОС":"Windows, MacOS","Наличие софта":"Отсутствует (не требуется)","Регулятор громкости":"Да, удобный роллер"},rating:4.8,seo:{title:"K870GR TKL Клавиатура | Градиент, White Light | VOROTEX",description:"Купить K870GR - TKL механика с градиентом. 87 клавиш, белая подсветка, Outemu Red свитчи. Стиль и надежность.",keywords:"k870gr, градиентная клавиатура, 87 клавиш, tkl, outemu red, белая подсветка, vorotex",indexing:!0},options:[{id:"color",name:"Цвет",type:"color",values:[{id:"gradient-grey",name:"Серый градиент",colors:["#333333","#999999","#ffffff"]}]},{id:"switch",name:"Свитчи",type:"text",values:[{id:"red",name:"Outemu Red"}]}],variants:[{id:"00-00001997",externalId:"00-00001997",combination:{color:"gradient-grey",switch:"red"},stock:728,price:4690}],sections:[{id:"k870gr-features",type:"features",title:"ОСОБЕННОСТИ",theme:"light",items:[{title:"Уникальная градиентная расцветка",icon:"layers"},{title:"Качественные Hot Swap свитчи OUTEMU",icon:"cpu"},{title:"Стильная монохромная подсветка",icon:"zap"},{title:"Популярный размер клавиатуры - 80%",icon:"layout"},{title:"Не требующее драйверов USB подключение",icon:"download"}]},{id:"k870gr-gradient",type:"text-image",title:"GRADIENT GREY",subtitle:"Строгая классика",content:"Переход от черного к белому через оттенки серого придает клавиатуре премиальный вид. Это универсальный дизайн, который подойдет к любому интерьеру.",image:"/placeholder.svg",alignment:"right",theme:"dark"},{id:"k870gr-light",type:"text-image",title:"БЕЛАЯ ПОДСВЕТКА",subtitle:"Чистота света",content:"Яркие белая подсветка отлично сочетается с градиентными кейкапами. Она обеспечивает отличную читаемость символов в темноте и не утомляет глаза.",image:"/placeholder.svg",alignment:"left",theme:"light"},{id:"k870gr-tkl",type:"text-image",title:"TKL ФОРМАТ",subtitle:"87 клавиш",content:"Отсутствие цифрового блока позволяет держать мышь ближе к клавиатуре, что улучшает эргономику и снижает нагрузку на плечи.",image:"/placeholder.svg",alignment:"right",theme:"dark"},{id:"reviews-k870gr",type:"reviews",title:"ОТЗЫВЫ",theme:"light"}]}],Vw=[{id:"kb-sayodevice-o3c",name:"VOROTEX SayoDevice O3C Series",category:Te.MINI,price:3990,originalPrice:4990,stock:492,isNewArrival:!0,image:"/placeholder.svg",gallery:["/placeholder.svg","/placeholder.svg","/placeholder.svg","/placeholder.svg","/placeholder.svg"],description:"Продвинутый кейпад для OSU! с магнитными свитчами Pink Switch, Rapid Trigger и экраном.",longDescription:"VOROTEX S
2893ayoDevice O3C — это ультимативное решение для ритм-игр (OSU!, Etterna). Главная особенность — магнитные переключатели Outemu Magnetic Pink (Pink Switch) с функцией Rapid Trigger, позволяющей настраивать точку срабатывания с точностью до 0.1 мм. Встроенный цветной IPS экран выводит информацию о статусе, картинки или GIF-анимацию. Настройка производится через удобный веб-интерфейс без установки софта на ПК.",features:["Rapid Trigger","Pink Switch","IPS Screen","8000Hz","Web Driver"],specs:{"Тип клавиатуры":"Магнитная / Rapid Trigger","Количество клавиш":"3 клавиши + 1 Knob (Регулятор)",Свитчи:"Outemu Magnetic Pink","Тип свитчей":"Hot-Swap (Magnetic)",Подсветка:"RGB Настраиваемая",Дисплей:'0.96" IPS Цветной',"Скорость отклика":"0.1 мс (8000Hz)",Функции:"Rapid Trigger, Dynamic Keystroke",Подключение:"USB Type-C","Материал корпуса":"ABS пластик",Размеры:"75 x 35 x 30 мм",Вес:"65 гр","Наличие софта":"Есть (Web-версия)",Совместимость:"Windows, Android, Linux"},rating:5,seo:{title:"SayoDevice O3C Мини Клавиатура | Pink Switch, Rapid Trigger | VOROTEX",description:"Купить VOROTEX SayoDevice O3C / O3C++ с дисплеем. Магнитные свитчи Pink Switch, Rapid Trigger для OSU!, 8000Hz. Белый и черный цвета.",keywords:"sayodevice o3c, o3c++, osu keypad, rapid trigger, pink switch, кейпад с экраном, vorotex, магнитные свитчи",indexing:!0},options:[{id:"model",name:"Модель",type:"text",values:[{id:"o3c",name:"O3C (Standard)"},{id:"o3c-plus",name:"O3C++ (Enhanced)"}]},{id:"color",name:"Цвет",type:"color",values:[{id:"white",name:"Белый",value:"#ffffff"},{id:"black",name:"Чёрный",value:"#111111"}]}],variants:[{id:"00-00001978",externalId:"00-00001978",combination:{model:"o3c",color:"white"},stock:163,price:3990,image:"/placeholder.svg",name:"VOROTEX SayoDevice O3C"},{id:"00-00001970",externalId:"00-00001970",combination:{model:"o3c",color:"black"},stock:245,price:3990,image:"/placeholder.svg",name:"VOROTEX SayoDevice O3C"},{id:"00-00002064",externalId:"00-00002064",combination:{model:"o3c-plus",color:"white"},stock:84,price:4290,image:"/placeholder.svg",name:"VOROTEX SayoDevice O3C++"}],sections:[{id:"o3c-rapid",type:"text-image",title:"RAPID TRIGGER",subtitle:"Магнитные технологии",content:"Технология Rapid Trigger динамически меняет точку активации и деактивации клавиши в зависимости от движения пальца. Это дает огромное преимущество в играх, где важна скорость спама (OSU!) и стрейфов (CS2/Valorant).",image:"/placeholder.svg",alignment:"right",theme:"dark"},{id:"o3c-features",type:"features",title:"ФУНКЦИОНАЛ",theme:"light",items:[{title:"Веб-драйвер (без установки)",icon:"settings",text:"Настройка через браузер"},{title:"Магнитные свитчи Outemu Pink",icon:"cpu",text:"Линейный ход, настройка 0.1-4.0мм"},{title:"Поддержка Rapid Trigger",icon:"zap",text:"Мгновенная реакция"},{title:"Встроенный IPS дисплей",icon:"monitor",text:"Загрузка своих картинок"},{title:"RGB Подсветка",icon:"star",text:"Яркие эффекты"}]},{id:"o3c-screen",type:"text-image",title:"IPS ЭКРАН",subtitle:"Персонализация",content:"Яркий цветной дисплей 0.96 дюйма. Выводите на него слои раскладки, статистику нажатий или просто любимую GIF-анимацию с котиÐ
2893ºÐ¾Ð¼. Полная свобода самовыражения.",image:"/placeholder.svg",alignment:"left",theme:"light"},{id:"o3c-web",type:"text-image",title:"SayoDevice Web",subtitle:"Удобный софт",content:"Забудьте о скачивании подозрительных exe-файлов. Вся настройка клавиатуры (RT, макросы, экран, подсветка) происходит через официальный веб-сайт SayoDevice в браузере Chrome.",image:"/placeholder.svg",alignment:"right",theme:"dark"},{id:"reviews-o3c",type:"reviews",title:"ОТЗЫВЫ",theme:"light"}]},{id:"kb-k-mini",name:"VOROTEX K-Mini Series",category:Te.MINI,price:1590,originalPrice:2290,stock:311,isNewArrival:!1,image:"/placeholder.svg",gallery:["/placeholder.svg","/placeholder.svg","/placeholder.svg","/placeholder.svg","/placeholder.svg"],description:"Миниатюрные программируемые макро-клавиатуры. Идеальны для OSU!, работы и стримов.",longDescription:"VOROTEX K-Mini Series — это универсальная линейка компактных кейпадов. Используйте 2-клавишную версию (K02) для ритм-игр вроде OSU! благодаря мгновенному отклику. Модели с регуляторами (Knob) K03/K04/K06 станут незаменимыми помощниками для дизайнеров, видеомонтажеров и стримеров, позволяя управлять зумом, громкостью и таймлайном. Все клавиатуры поддерживают Hot-Swap (горячую замену свитчей) и полное перепрограммирование клавиш.",features:["OSU! Ready","Bluetooth Option","Outemu Red","Hot-Swap","RGB","Knob Control"],specs:{"Тип клавиатуры":"Макро-пад / Кейпад","Количество клавиш":"2, 3, 4, 6 (зависит от модели)",Свитчи:"Outemu Red (Линейные)","Тип свитчей":"Hot-Swap (3-pin/5-pin)",Подсветка:"RGB Настраиваемая",Подключение:"USB Type-C / Bluetooth 5.0 (в BT версиях)","Материал корпуса":"ABS пластик + Акрил","Наличие софта":"Есть (Настройка макросов и подсветки)",Совместимость:"Windows"},rating:4.9,seo:{title:"K-Mini Series Макро-клавиатуры | OSU!, Bluetooth, Knob | VOROTEX",description:"Мини-клавиатуры VOROTEX K-Mini. Модели K02 для OSU!, версии с Bluetooth и регулятором громкости (Knob). Свитчи Outemu Red, Hot-Swap, RGB.",keywords:"osu keypad, макро клавиатура, k02, k04 knob, bluetooth кейпад, vorotex, outemu red",indexing:!0},options:[{id:"model",name:"Модель",type:"text",values:[{id:"k02",name:"K02 (2 Keys)"},{id:"k02-bt",name:"K02BT (2 Keys + Bluetooth)"},{id:"k03",name:"K03 (3 Keys + Knob)"},{id:"k04",name:"K04 (4 Keys + Knob)"},{id:"k04-bt",name:"K04BT (4 Keys + Knob + BT)"},{id:"k06",name:"K06 (6 Keys + Knob)"}]},{id:"color",name:"Цвет",type:"color",values:[{id:"black",name:"Чёрный",value:"#222222"},{id:"white",name:"Белый",value:"#ffffff"}]}],variants:[{id:"00-00001826",externalId:"00-00001826",combination:{model:"k02",color:"black"},stock:37,price:1590,name:"VOROTEX K02",image:"/placeholder.svg"},{id:"00-00001968",externalId:"00-00001968",combination:{model:"k02",color:"white"},stock:54,price:1590,name:"VOROTEX K02",image:"/placeholder.svg"},{id:"00-00002068",externalId:"00-00002068",combination:{model:"k02-bt",color:"black"},stock:13,price:2290,name:"VOROTEX K02BT",image:"/placeholder.svg"},{id:"00-00002069",externalId:"00-00002069",combination:{model:"k02-bt",color:"white"},stock:14,price:2290,name:"VOROTEX K02BT",image:"/placeholder.svg"},{id:"00-00001979",externalId:"00-00001979",combination:{model:"k03",color:"black"},stock:56,price:1990,name:"VOROTEX K03",image:"/placeholder.svg"},{id:"00-00001980",externalId:"00-00001980",combination:{model:"k03",color:"white"},stock:7,price:1990,name:"VOROTEX K03",image:"/placeholder.svg"},{id:"00-00002067",externalId:"00-00002067",combination:{model:"k04",color:"black"},stock:28,price:2290,name:"VOROTEX K04",image:"/placeholder.svg"},{id:"00-00002066",externalId:"00-00002066",combination:{model:"k04",color:"white"},stock:27,price:2290,name:"VOROTEX K04",image:"/placeholder.svg"},{id:"00-00002070",externalId:"00-00002070",combination:{model:"k04-bt",color:"black"},stock:13,price:2790,name:"VOROTEX K04BT",image:"/placeholder.svg"},{id:"00-00002071",externalId:"00-00002071",combination:{model:"k04-bt",color:"white"},stock:15,price:2790,name:"VOROTEX K04BT",image:"/placeholder.svg"},{id:"00-00001830",externalId:"00-00001830",combination:{model:"k06",color:"black"},stock:40,price:2790,name:"VOROTEX K06",image:"/placeholder.svg"},{id:"00-00001828",externalId:"00-00001828",combination:{model:"k06",color:"white"},stock:7,price:2790,name:"VOROTEX K06",image:"/placeholder.svg"}],sections:[{id:"kmini-osu",type:"text-image",title:"ИДЕАЛЬНО ДЛЯ OSU!",subtitle:"K02 / K02BT",content:"Модель K02 создана специально для ритм-игр. Минимальная задержка ввода, устойчивая база и механические переключатели позволяют выбивать идеальные тайминги и стримить с максимальной скоростью.",image:"/placeholder.svg",alignment:"right",theme:"dark"},{id:"kmini-features",type:"features",title:"ФУНКЦИОНАЛ",theme:"light",items:[{title:"Программируемые макросы",icon:"settings",text:"Любая клавиша - любое действие"},{title:"Hot-Swap (Auto-Switch)",icon:"cpu",text:"Меняй свитчи за секунды"},{title:"RGB Подсветка",icon:"zap",text:"Яркие эффекты"},{title:"Bluetooth 5.0",icon:"download",text:"В моделях с индексом BT"},{title:"Мультимедиа Knob",icon:"volume",text:"Регулятор звука и зума"}]},{id:"kmini-switches",type:"text-image",title:"OUTEMU RED",subtitle:"Линейная скорость",content:'В кейпадах установлены качественные красные свитчи Outemu Red. Они имеют линейный ход без щелчка, нажимаются легко и плавно. Это лучший выбор для быстрого "спама" клавиш в играх или тихой работы с макросами.',image:"/placeholder.svg",alignment:"left",theme:"light"},{id:"kmini-hotswap",type:"text-image",title:"HOT-SWAP",subtitle:"Полная кастомизация",content:"Технология Hot-Swap позволяет вам менять переключатели без пайки. Хотите тактильные ощущения? Поставьте Blue или Brown свитчи. Сломался переключатель? Замените его за 5 секунд. Ваш девайс всегда в строю.",image:"/placeholder.svg",alignment:"right",theme:"dark"},{id:"reviews-kmini",type:"reviews",title:"ОТЗЫВЫ",theme:"light"}]},{id:"kb-k13",name:"VOROTEX K13",category:Te.MINI,price:2490,stock:384,isNewArrival:!0,image:"/placeholder.svg",gallery:["/placeholder.svg","/placeholder.svg","/placeholder.svg"],description:"Механическая мини-клавиатура (12 клавиш) с джойстиком и металлическим Ð
2893ºÐ¾Ð»ÐµÑÐ¾Ð¼ прокрутки.",longDescription:"VOROTEX K13 — это мощный инструмент для геймеров и профессионалов. 12 программируемых клавиш, аналоговый джойстик и металлическое колесо прокрутки обеспечивают полный контроль. Идеальна для макросов, управления медиа или как дополнительный кейпад для стримов. Поддерживается Hot-Swap (свитчи Kailh Long Hua Purple) и имеет 12 режимов RGB подсветки.",features:["12 Keys","Joystick","Scroll Wheel","Hot-Swap","RGB"],specs:{"Тип клавиатуры":"Механическая","Количество клавиш":"12 + Джойстик + Колесо",Свитчи:"Kailh Long Hua Purple","Тип свитчей":"Hot-swap",Подсветка:"RGB (12 режимов)",Управление:"Джойстик, Колесо прокрутки","Материал корпуса":"ABS-пластик",Подключение:"Проводное USB Type-C","Рабочий ток":"150 мА",Размеры:"137 x 75 x 38 мм",Вес:"120 гр","Наличие софта":"Есть",Совместимость:"Windows"},rating:4.8,seo:{title:"K13 Мини Клавиатура с Джойстиком | 12 Клавиш, Hot-Swap | VOROTEX",description:"Купить VOROTEX K13. Макро-клавиатура 12 клавиш с джойстиком и скроллом. Kailh Purple свитчи, RGB подсветка, программируемая.",keywords:"k13 клавиатура, макропад с джойстиком, мини клавиатура 12 клавиш, kailh purple, vorotex",indexing:!0},options:[{id:"color",name:"Цвет",type:"color",values:[{id:"grey-gradient",name:"Серый градиент",colors:["#333333","#777777"]},{id:"green-gradient",name:"Зеленый градиент",colors:["#004400","#00ff00"]},{id:"purple-gradient",name:"Фиолетовый градиент",colors:["#440044","#9900ff"]}]}],variants:[{id:"00-00002014",externalId:"00-00002014",combination:{color:"grey-gradient"},stock:236,price:2490},{id:"00-00002015",externalId:"00-00002015",combination:{color:"green-gradient"},stock:63,price:2490},{id:"00-00002016",externalId:"00-00002016",combination:{color:"purple-gradient"},stock:85,price:2490}],sections:[{id:"k13-features",type:"features",title:"ОСОБЕННОСТИ",theme:"light",items:[{title:"Софт для настройки клавиатуры",icon:"settings"},{title:"Качественные свитчи Kailh Purple",icon:"cpu"},{title:"Двенадцать режимов RGB подсветки",icon:"zap"},{title:"Джойстик для комфортного управления",icon:"target"},{title:"Программирование макросов",icon:"layers"},{title:"Удобный регулятор (Колесо)",icon:"volume"}]},{id:"k13-switch",type:"text-image",title:"KAILH PURPLE",subtitle:"Тактильная тишина",content:"Установлены тактильные переключатели Kailh Long Hua Purple. Они имеют ощутимую точку срабатывания (похожи на Brown свитчи), что дает отличную обратную связь при нажатии, но при этом работают достаточно тихо, не мешая окружающим.",image:"/placeholder.svg",alignment:"left",theme:"light"},{id:"k13-control",type:"text-image",title:"ПОЛНЫЙ КОНТРОЛЬ",subtitle:"Джойстик и Колесо",content:"Уникальная комбинация органов управления. Используйте джойстик для навигации или как дополнительные клавиши, а металлическое колесо для зума, громкости или прокрутки таймлайна.",image:"/placeholder.svg",alignment:"right",theme:"dark"},{id:"reviews-k13",type:"reviews",title:"ОТЗЫВЫ",theme:"light"}]}
2893,{id:"kb-k15-pro",name:"VOROTEX K15 PRO",category:Te.MINI,price:3290,stock:133,isNewArrival:!0,image:"/placeholder.svg",gallery:["/placeholder.svg","/placeholder.svg","/placeholder.svg"],description:"Беспроводная программируемая мини-клавиатура с 15 клавишами, джойстиком и 3 режимами подключения.",longDescription:"VOROTEX K15 PRO — флагман среди макропадов. 15 полностью программируемых клавиш и аналоговый джойстик дают неограниченные возможности для кастомизации. Подключайтесь как удобно: Bluetooth, 2.4G или кабель. Емкий аккумулятор 1000 мАч обеспечивает долгую работу. Надежные свитчи Kailh Long Hua Purple с поддержкой Hot-Swap.",features:["Wireless","15 Keys","Joystick","Hot-Swap","RGB"],specs:{"Тип клавиатуры":"Механическая","Количество клавиш":"15 + Джойстик",Свитчи:"Kailh Long Hua Purple","Тип свитчей":"Hot-swap",Подсветка:"RGB (8 режимов)",Подключение:"USB Type-C / Bluetooth / Радиоканал",Аккумулятор:"1000 мАч","Материал корпуса":"ABS-пластик",Размеры:"153 x 113 x 44 мм",Вес:"230 гр","Наличие софта":"Есть",Совместимость:"Windows"},rating:5,seo:{title:"K15 PRO Беспроводной Макропад 15 Клавиш | Джойстик | VOROTEX",description:"Беспроводная мини-клавиатура K15 PRO. 15 клавиш, джойстик, 3 режима подключения (BT/Radio/USB). Hot-Swap, RGB подсветка.",keywords:"k15 pro, wireless macropad, беспроводной кейпад, 15 клавиш, джойстик, vorotex",indexing:!0},options:[{id:"color",name:"Цвет",type:"color",values:[{id:"black",name:"Чёрный",value:"#222222"}]}],variants:[{id:"00-00002050",externalId:"00-00002050",combination:{color:"black"},stock:133,price:3290}],sections:[{id:"k15pro-features",type:"features",title:"ОСОБЕННОСТИ",theme:"light",items:[{title:"Софт для настройки клавиатуры",icon:"settings"},{title:"Качественные свитчи Kailh Purple",icon:"cpu"},{title:"Восемь режимов RGB подсветки",icon:"zap"},{title:"Три режима подключения: USB, BT, Radio",icon:"download"},{title:"Программирование макросов",icon:"layers"},{title:"Джойстик для комфортного управления",icon:"target"}]},{id:"k15pro-switch",type:"text-image",title:"KAILH PURPLE",subtitle:"Тактильная тишина",content:"Установлены тактильные переключатели Kailh Long Hua Purple. Они имеют ощутимую точку срабатывания (похожи на Brown свитчи), что дает отличную обратную связь при нажатии, но при этом работают достаточно тихо, не мешая окружающим.",image:"/placeholder.svg",alignment:"right",theme:"dark"},{id:"k15pro-wireless",type:"text-image",title:"БЕСПРОВОДНАЯ СВОБОДА",subtitle:"3 Режима",content:"Забудьте о проводах. Подключайтесь к ноутбуку по Bluetooth, к ПК через быстрый радиоканал или используйте кабель для зарядки. Аккумулятор 1000 мАч гарантирует автономность.",image:"/placeholder.svg",alignment:"left",theme:"light"},{id:"reviews-k15pro",type:"reviews",title:"ОТЗЫВЫ",theme:"light"}]},{id:"kb-k12w",name:"VOROTEX K12W",category:Te.MINI,price:2790,stock:396,isNewArrival:!0,image:"/placeholder.svg",gallery:["/placeholder.svg","/placeholder.svg","/placeholder.svg"],description:"Беспроводная мини-клавиатура (12 клавиш) с двумя регуляторами и ярким дизайном.",longDescription:"VOROTEX K12W — стильный беспроводной кейпад. 12 программируемых клавиш и два удобных регулятора (Knobs) позволяют настроить управление под любые задачи: от монтажа видео до сложных макросов в играх. Три режима подключения (USB/BT/Radio) и поддержка Hot-Swap. Доступен в расцветках White-Mint и Black-Orange.",features:["Wireless","12 Keys","2 Knobs","Hot-Swap","RGB"],specs:{"Тип клавиатуры":"Механическая","Количество клавиш":"12 + 2 Регулятора",Свитчи:"Kailh Long Hua Purple","Тип свитчей":"Hot-swap",Подсветка:"RGB (12 режимов)",Подключение:"USB Type-C / Bluetooth / Радиоканал","Материал корпуса":"ABS-пластик",Размеры:"127 x 87 x 29 мм",Вес:"150 гр","Наличие софта":"Есть",Совместимость:"Windows"},rating:4.9,seo:{title:"K12W Беспроводная Мини Клавиатура | 2 Регулятора, 12 Клавиш | VOROTEX",description:"Купить K12W - беспроводной кейпад с 12 клавишами и 2 крутилками. Bluetooth, Radio, USB. Hot-Swap, RGB подсветка. Идеально для дизайнеров.",keywords:"k12w, беспроводной макропад, клавиатура с крутилками, 12 клавиш, vorotex, designer keypad",indexing:!0},options:[{id:"color",name:"Цвет",type:"color",values:[{id:"white",name:"Белый",value:"#ffffff"},{id:"pistachio",name:"Фисташковый (Mint)",colors:["#ffffff","#e0f2f1"]},{id:"black",name:"Чёрный",value:"#222222"}]}
2893],variants:[{id:"00-00002012",externalId:"00-00002012",combination:{color:"white"},stock:92,price:2790},{id:"00-00002011",externalId:"00-00002011",combination:{color:"pistachio"},stock:98,price:2790},{id:"00-00002013",externalId:"00-00002013",combination:{color:"black"},stock:206,price:2790,image:"/placeholder.svg"}],sections:[{id:"k12w-features",type:"features",title:"ОСОБЕННОСТИ",theme:"light",items:[{title:"Софт для настройки клавиатуры",icon:"settings"},{title:"Качественные свитчи Kailh Purple",icon:"cpu"},{title:"Двенадцать режимов RGB подсветки",icon:"zap"},{title:"Три режима подключения: USB, BT, Radio",icon:"download"},{title:"Программирование макросов",icon:"layers"},{title:"Удобный двухрежимный регулятор (x2)",icon:"volume"}]},{id:"k12w-switch",type:"text-image",title:"KAILH PURPLE",subtitle:"Тактильная тишина",content:"Установлены тактильные переключатели Kailh Long Hua Purple. Они имеют ощутимую точку срабатывания (похожи на Brown свитчи), что дает отличную обратную связь при нажатии, но при этом работают достаточно тихо, не мешая окружающим.",image:"/placeholder.svg",alignment:"left",theme:"dark"},{id:"k12w-design",type:"text-image",title:"ДВОЙНОЙ КОНТРОЛЬ",subtitle:"Два регулятора",content:"Два независимых энкодера позволяют управлять сразу несколькими параметрами: громкостью и зумом, размером кисти и прозрачностью. Незаменимый инструмент для творческих задач.",image:"/placeholder.svg",alignment:"right",theme:"light"},{id:"reviews-k12w",type:"reviews",title:"ОТЗЫВЫ",theme:"light"}]},{id:"kb-k12",name:"VOROTEX K12",category:Te.MINI,price:2190,stock:329,image:"/placeholder.svg",gallery:["/placeholder.svg","/placeholder.svg","/placeholder.svg"],description:"Проводная версия популярной мини-клавиатуры с 12 клавишами и 2 регуляторами.",longDescription:"VOROTEX K12 — надежный проводной макропад. Те же 12 программируемых клавиш и 2 регулятора, что и в версии K12W, но с классическим подключением по USB Type-C. Отличный выбор для стационарного рабочего места. Поддержка Hot-Swap, качественные свитчи Kailh Purple и яркая RGB подсветка.",features:["12 Keys","2 Knobs","Hot-Swap","RGB"],specs:{"Тип клавиатуры":"Механическая","Количество клавиш":"12 + 2 Регулятора",Свитчи:"Kailh Long Hua Purple","Тип свитчей":"Hot-swap",Подсветка:"RGB (12 режимов)",Подключение:"Проводное USB Type-C","Материал корпуса":"ABS-пластик",Размеры:"127 x 87 x 29 мм",Вес:"120 гр","Наличие софта":"Есть",Совместимость:"Windows"},rating:4.8,seo:{title:"K12 Макро-клавиатура 12 Клавиш | 2 Крутилки, Hot-Swap | VOROTEX",description:"Проводная мини-клавиатура K12. 12 программируемых клавиш, 2 регулятора, Hot-Swap. Идеально для макросов и стримов.",keywords:"k12 клавиатура, макропад 12 клавиш, keypad with knobs, vorotex, проводной кейпад",indexing:!0},options:[{id:"color",name:"Цвет",type:"color",values:[{id:"white",name:"Белый",value:"#ffffff"},{id:"purple",name:"Фиолетовый",value:"#9933ff"},{id:"black",name:"Чёрный",value:"#222222"}]}],variants:[{id:"00-00001959",externalId:"00-00001959",combination:{color:"white"},stock:102,price:2190,image:"/placeholder.svg"},{id:"00-00001960",externalId:"00-00001960",combination:{color:"purple"},stock:77,price:2190},{id:"00-00001958",externalId:"00-00001958",combination:{color:"black"},stock:150,price:2190}],sections:[{id:"k12-features",type:"features",title:"ОСОБЕННОСТИ",theme:"light",items:[{title:"Софт для настройки клавиатуры",icon:"settings"},{title:"Качественные свитчи Kailh Purple",icon:"cpu"},{title:"Двенадцать режимов RGB подсветки",icon:"zap"},{title:"Программирование макросов",icon:"layers"},{title:"Удобный двухрежимный регулятор (x2)",icon:"volume"}]},{id:"k12-switch",type:"text-image",title:"KAILH PURPLE",subtitle:"Тактильная тишина",content:"Установлены тактильные переключатели Kailh Long Hua Purple. Они имеют ощутимую точку срабатывания (похожи на Brown свитчи), что дает отличную обратную связь при нажатии, но при этом работают достаточно тихо, не мешая окружающим.",image:"/placeholder.svg",alignment:"right",theme:"light"},{id:"k12-wired",type:"text-image",title:"НАДЕЖНОЕ ПОДКЛЮЧЕНИЕ",subtitle:"USB Type-C",content:"Проводное подключение гарантирует отсутствие задержек и стабильную работу. Съемный кабель Type-C позволяет легко транспортировать устройство.",image:"/placeholder.svg",alignment:"left",theme:"dark"},{id:"reviews-k12",type:"reviews",title:"ОТЗЫВЫ",theme:"light"}]},{id:"kb-k08",name:"VOROTEX K08",category:Te.MINI,price:1690,stock:204,image:"/placeholder.svg",gallery:["/placeholder.svg","/placeholder.svg","/placeholder.svg"],description:"Ультракомпактная клавиатура на 8 клавиш с двумя портами подключения.",longDescription:"VOROTEX K08 — минимализм и функциональность. 8 программируемых клавиш в компактном корпусе. Особенность модели — два порта USB-C, позволяющие подключить кабель с любой удобной стороны (сверху или сбоку). Hot-Swap свитчи Kailh Long Hua Purple и RGB подсветка делают её отличным дополнением к основному сетапу.",features:["8 Keys","Dual USB-C","Hot-Swap","RGB"],specs:{"Тип клавиатуры":"Механическая","Количество клавиш":"8",Свитчи:"Kailh Long Hua Purple","Тип свитчей":"Hot-swap",Подсветка:"RGB (12 режимов)",Подключение:"Проводное USB-C (2 порта)","Материал корпуса":"ABS-пластик",Размеры:"126 x 57 x 29 мм",Вес:"150 гр","Наличие софта":"Есть",Совместимость:"Windows"},rating:4.7,seo:{title:"K08 Мини Кейпад 8 Клавиш | Dual USB-C | VOROTEX",description:"Компактная клавиатура K08 на 8 клавиш. Два порта USB-C для удобного подключения. Hot-Swap, RGB, программируемая.",keywords:"k08 клавиатура, макропад 8 клавиш, dual usb-c keypad, vorotex, мини клавиатура",indexing:!0},options:[{id:"color",name:"Цвет",type:"color",values:[{id:"black",name:"Чёрный",value:"#222222"},{id:"white",name:"Белый",value:"#ffffff"}]}],variants:[{id:"00-00001989",externalId:"00-00001989",combination:{color:"black"},stock:183,price:1690},{id:"00-00001990",externalId:"00-00001990",combination:{color:"white"},stock:21,price:1690,image:"/placeholder.svg"}],sections:[{id:"k08-features",type:"features",title:"ОСОБЕННОСТИ",theme:"light",items:[{title:"Софт для настройки клавиатуры",icon:"settings"},{title:"Качественные Hot Swap свитчи Kailh",icon:"cpu"},{title:"Двенадцать режимов RGB подсветки",icon:"zap"},{title:"Программирование макросов",icon:"layers"},{title:"Два USB-C разъема для подключения",icon:"download"}]},{id:"k08-switch",type:"text-image",title:"KAILH PURPLE",subtitle:"Тактильная тишина",content:"Установлены тактильные переключатели Kailh Long Hua Purple. Они имеют ощутимую точку срабатывания (похожи на Brown свитчи), что дает отличную обратную связь при нажатии, но при этом работают достаточно тихо, не мешая окружающим.",image:"/placeholder.svg",alignment:"left",theme:"light"},{id:"k08-dual",type:"text-image",title:"ДВА USB-C РАЗЪЁМА",subtitle:"Удобное подключение",content:"Разместите клавиатуру так, как удобно вам. Два порта USB Type-C (сверху и сбоку) позволяют вывести кабель в нужную сторону, сохраняя порядок на столе.",image:"/placeholder.svg",alignment:"right",theme:"dark"},{id:"reviews-k08",type:"reviews",title:"ОТЗЫВЫ",theme:"light"}]}
2893,{id:"kb-sayodevice-s2s4",name:"VOROTEX SayoDevice S2/S4",category:Te.MINI,price:1590,originalPrice:2190,stock:414,isNewArrival:!0,image:"/placeholder.svg",gallery:["/placeholder.svg","/placeholder.svg","/placeholder.svg","/placeholder.svg"],description:"Компактные макро-клавиатуры на 2 или 4 клавиши. Идеальны для Copy/Paste или OSU!.",longDescription:"VOROTEX SayoDevice S2 и S4 — это воплощение минимализма и эффективности. Модель S2 (2 клавиши) идеально подходит для офисных задач (Copy/Paste, Undo/Redo) или как педаль для Discord. Модель S4 (4 клавиши) часто используется для ритм-игр (OSU! mania) или как блок навигации (стрелки). Клавиатуры поддерживают горячую замену свитчей (Hot-Swap), оснащены качественными красными переключателями Outemu Red и настраиваются через удобный веб-интерфейс.",features:["Web Configurator","2 or 4 Keys","Outemu Red","Hot-Swap","RGB"],specs:{"Тип клавиатуры":"Механическая макро-клавиатура","Количество клавиш":"2 (S2) или 4 (S4)",Свитчи:"Outemu Red (Линейные)","Тип свитчей":"Hot-Swap",Подсветка:"RGB Настраиваемая","Материал корпуса":"ABS пластик",Подключение:"Проводное USB Type-C","Рабочий ток":"150 мА","Ресурс клавиш":"50 миллионов","Скорость отклика":"0.1 мс","Длина кабеля":"2 м","Наличие софта":"Есть (Web-версия)",Совместимость:"Windows, MacOS, Linux",Размеры:"45 x 30 x 25 мм",Вес:"40 гр"},rating:4.8,seo:{title:"SayoDevice S2/S4 Мини Кейпад | 2-4 Клавиши, Web Config | VOROTEX",description:"Купить мини-клавиатуру SayoDevice S2 (2 кнопки) или S4 (4 кнопки). Настройка через браузер, макросы, RGB, Outemu Red свитчи. Для работы и OSU!",keywords:"sayodevice s2, sayodevice s4, макропад 2 кнопки, osu keypad 4 keys, copy paste keyboard, vorotex, outemu red",indexing:!0},options:[{id:"model",name:"Модель",type:"text",values:[{id:"s2",name:"S2 (2 Клавиши)"},{id:"s4",name:"S4 (4 Клавиши)"}]},{id:"color",name:"Цвет",type:"color",values:[{id:"black",name:"Чёрный",value:"#111111"},{id:"white",name:"Белый",value:"#ffffff"}]}],variants:[{id:"00-00002044",externalId:"00-00002044",combination:{model:"s2",color:"black"},stock:177,price:1590,name:"VOROTEX SayoDevice S2",image:"/placeholder.svg"},{id:"00-00002045",externalId:"00-00002045",combination:{model:"s4",color:"black"},stock:141,price:1990,name:"VOROTEX SayoDevice S4",image:"/placeholder.svg"},{id:"00-00002065",externalId:"00-00002065",combination:{model:"s4",color:"white"},stock:96,price:1990,name:"VOROTEX SayoDevice S4",image:"/placeholder.svg"}],sections:[{id:"s2s4-web",type:"text-image",title:"ОНЛАЙН НАСТРОЙКА",subtitle:"SayoDevice Web",content:"Больше не нужно устанавливать драйверы. Подключите клавиатуру, откройте сайт SayoDevice в браузере и настройте макросы, подсветку или переназначьте клавиши за пару кликов. Настройки сохраняются в памяти устройства.",image:"/placeholder.svg",alignment:"right",theme:"light"},{id:"s2s4-features",type:"features",title:"ОСОБЕННОСТИ",theme:"light",items:[{title:"Онлайн-конфигуратор для настройки",icon:"monitor"},{title:"Красные Hot Swap свитчи OUTEMU",icon:"cpu"},{title:"Высокое качество материалов",icon:"shield"},{title:"Программирование макросов",icon:"layers"},{title:"Настраиваемая RGB подсветка",icon:"zap"}]},{id:"s2s4-workflow",type:"text-image",title:"УСКОРЕНИЕ РАБОТЫ",subt
2893itle:"Copy / Paste",content:"Модель S2 — это ваш лучший друг при работе с текстом или кодом. Назначьте на клавиши команды Ctrl+C и Ctrl+V, чтобы копировать и вставлять данные одним нажатием, не ломая пальцы.",image:"/placeholder.svg",alignment:"left",theme:"dark"},{id:"s2s4-osu",type:"text-image",title:"S4 ДЛЯ РИТМ-ИГР",subtitle:"4 Клавиши",content:"Версия S4 отлично подходит для игр типа OSU! Mania (4K режим) или в качестве блока стрелок для компактных клавиатур. Красные свитчи обеспечивают быстрый и плавный отклик.",image:"/placeholder.svg",alignment:"right",theme:"light"},{id:"reviews-s2s4",type:"reviews",title:"ОТЗЫВЫ",theme:"light"}]}],Lw=[{id:"ms-v1-wireless",name:"VOROTEX V1",category:Te.MOUSE,price:2390,originalPrice:3290,stock:150,image:"/placeholder.svg",gallery:["/placeholder.svg","/placeholder.svg","/placeholder.svg","/placeholder.svg"],description:"Трёхрежимная, ультралёгкая (54г), PAW-3311, 18000dpi.",longDescription:"VOROTEX V1 — это новое слово в ультралегком гейминге. Вес всего 54 грамма и эргономичный дизайн позволяют играть часами без усталости. Внутри установлен производительный сенсор PixArt PAW-3311 с разрешением до 18000 DPI. Мышь поддерживает три режима подключения: Bluetooth 5.1, радиоканал 2.4G и проводной режим. Надежные переключатели HUANO (20 млн) обеспечивают четкий клик. В комплекте: грипсы, паракорд-кабель и сменные глайды.",features:["54g Ultra-light","PAW-3311 18K","Tri-Mode","Huano 20M","Grips Included"],rating:4.9,specs:{Сенсор:"PixArt PAW-3311",DPI:"18000",Вес:"54 г",Микропереключатели:"HUANO (20 млн)",Подключение:"2.4G / Bluetooth 5.1 / Wired","Емкость аккумулятора":"500 mAh","Частота опроса":"125-1000 Гц",Размеры:"119 x 62 x 40 мм","Количество кнопок":"6 (Программируемые)",Совместимость:"Windows, MacOS","Наличие софта":"Есть (Web & Offline)"},seo:{title:"VOROTEX V1 Игровая Мышь | 54г, PAW-3311, 18000 DPI",description:"Купить VOROTEX V1. Ультралегкая мышь 54г, сенсор PAW-3311, 18000 DPI. Веб-драйвер, 3 режима подключения. Грипсы в комплекте.",keywords:"vorotex v1, paw-3311, игровая мышь 54г, 18000 dpi, беспроводная мышь, веб драйвер мыши",indexing:!0},options:[{id:"color",name:"Цвет",type:"color",values:[{id:"white",name:"Белый",value:"#ffffff"}]}],variants:[{id:"00-00002055",externalId:"00-00002055",combination:{color:"white"},stock:150,price:2390,image:"/placeholder.svg"}],marketplaceLinks:{ozon:"https://ozon.ru",wb:"https://wildberries.ru"},sections:[{id:"v1-features",type:"features",title:"ОСОБЕННОСТИ",theme:"light",items:[{title:"Игровой сенсор PAW-3311",icon:"target",text:"До 18000 DPI"},{title:"Тип подключения: BT / 2.4G / USB-C",icon:"download",text:"Три режима"},{title:"Ультралегкий вес, всего 54г",icon:"mouse",text:"Комфорт без усталости"},{title:"Надежные переключатели HUANO",icon:"shield",text:"20 млн кликов"},{title:"Программирование макросов",icon:"settings",text:"Полный контроль"},{title:"Шестиступенчатая регулировка DPI",icon:"layers",text:"Адаптация под игру"}]},{id:"v1-comfort",type:"text-image",title:"КОМФОРТНОЕ ИСПОЛЬЗОВАНИЕ",subtitle:"Эргономика победы",content:"Дизайн специально разработан с учетом удобного хвата мыши. Корпус идеально сбалансирован, а вес в 54 грамма позволяет совершать молниеносные движения без нагрузки на кисть. В комплекте идут противоскользящие грипсы для максимального сцепления.",image:"/placeholder.svg",alignment:"left",theme:"light"},{id:"v1-tech",type:"text-image",title:"PAW-3311 & 18000 DPI",subtitle:"Технологическое превосходство",content:"Сердце мыши — игровой чип PAW-33
289311. Он обеспечивает высокую точность отслеживания и поддерживает разрешение до 18000 DPI. Регулируйте частоту опроса от 125 до 1000 Гц для идеальной синхронизации с вашим ПК.",image:"/placeholder.svg",alignment:"right",theme:"dark"},{id:"v1-software",type:"text-image",title:"СОФТ ДЛЯ ПРОГРАММИРОВАНИЯ",subtitle:"Онлайн и Офлайн",content:'Настраивайте мышь где угодно! Доступен уникальный <strong>онлайн-конфигуратор</strong>, который не требует установки и работает прямо через браузер: <a href="https://vorotex-v1.yjx2012.com" target="_blank" class="text-[#ff3b30] hover:underline font-bold">vorotex-v1.yjx2012.com</a>. Для любителей классики доступна и офлайн-версия софта.',image:"/placeholder.svg",alignment:"left",theme:"dark"},{id:"reviews-v1",type:"reviews",title:"ОТЗЫВЫ",theme:"light"}]},{id:"ms-m6",name:"VOROTEX M6",category:Te.MOUSE,price:1590,originalPrice:2190,stock:150,image:"/placeholder.svg",gallery:["/placeholder.svg","/placeholder.svg","/placeholder.svg","/placeholder.svg"],description:"Проводная игровая мышь с перфорированным корпусом, RGB подсветкой и сенсором 8000 DPI.",longDescription:'VOROTEX M6 — это сочетание легкости и функциональности. Перфорированный корпус ("соты") обеспечивает вентиляцию ладони и снижает вес. Оптический сенсор Sunplus 199 с разрешением до 8000 DPI гарантирует точность. 6 программируемых кнопок и поддержка макросов дают преимущество в играх. Яркая RGB подсветка с 6 режимами создает атмосферу.',features:["Honeycomb Design","8000 DPI","RGB 6 Modes","Macro Support"],specs:{Сенсор:"Optical Sunplus 199",DPI:"8000","Количество кнопок":"6 (Программируемые)",Подсветка:"RGB (6 режимов)",Вес:"103 г",Размеры:"125 x 65 x 37 мм",Подключение:"Проводное USB","Длина кабеля":"1.6 м",Ускорение:"10G","Частота опроса":"125 Гц",Микропереключатели:"Huano (20 млн)",Совместимость:"Windows, Mac OS, Linux"},rating:4.8,seo:{title:"M6 Игровая Мышь 8000 DPI | RGB, Honeycomb | VOROTEX",description:"Игровая мышь VOROTEX M6. Сенсор 8000 DPI, перфорированный корпус, RGB подсветка, макросы. Доступна в черном и белом цвете.",keywords:"m6 мышь, honeycomb mouse, мышь с дырками, 8000 dpi, vorotex m6, игровая мышь rgb",indexing:!0},options:[{id:"color",name:"Цвет",type:"color",values:[{id:"white",name:"Белый",value:"#ffffff"},{id:"black",name:"Чёрный",value:"#111111"}]}],variants:[{id:"00-00001933",externalId:"00-00001933",combination:{color:"white"},stock:80,price:1590,image:"/placeholder.svg"},{id:"00-00001934",externalId:"00-00001934",combination:{color:"black"},stock:70,price:1590,image:"/placeholder.svg"}],sections:[{id:"m6-features",type:"features",title:"ОСОБЕННОСТИ",theme:"light",items:[{title:"Разрешение датчика до 8000 dpi",icon:"target"},{title:"Срок службы кнопок: 20 млн. кликов",icon:"shield"},{title:"Шесть режимов RGB подсветки",icon:"zap"},{title:"Программирование макросов",icon:"settings"},{title:"Дизайн для удобного хвата",icon:"mouse"},{title:"Шесть программируемых кнопок",icon:"layers"}]},{id:"m6-comfort",type:"text-image",title:"КОМФОРТНОЕ ИСПОЛЬЗОВАНИЕ",subtitle:"Эргономика",content:"Дизайн специально разработан с учетом удобного хвата мыши. Перфорированная поверхность предотвращает запотевание ладони во время длительных игровых сессий.",image:"/placeholder.svg",alignment:"left",theme:"dark"}
2893,{id:"m6-tech",type:"text-image",title:"ТЕХНОЛОГИИ ПОБЕДЫ",subtitle:"Сенсор и Макросы",content:"Оптический датчик с поддержкой до 8000 DPI обеспечивает точность. Поддержка создания макросов и шестиступенчатая регулировка DPI позволяют адаптировать мышь под любой стиль игры.",image:"/placeholder.svg",alignment:"right",theme:"light"},{id:"m6-software",type:"text-image",title:"ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ",subtitle:"Полная настройка",content:"Специальный софт позволяет переназначать кнопки, записывать макросы, настраивать режимы подсветки и параметры сенсора.",image:"/placeholder.svg",alignment:"left",theme:"dark"},{id:"reviews-m6",type:"reviews",title:"ОТЗЫВЫ",theme:"light"}]},{id:"ms-m3",name:"VOROTEX M3",category:Te.MOUSE,price:1140,originalPrice:1690,stock:180,image:"/placeholder.svg",gallery:["/placeholder.svg","/placeholder.svg","/placeholder.svg","/placeholder.svg"],description:"Проводная, программируемая, сменные панели, 7200dpi",longDescription:"VOROTEX M3 — это кастомизация и удобство. В комплекте идут две дополнительные съемные панели, позволяющие менять внешний вид и тактильные ощущения. Сенсор Instant A725 с разрешением 7200 DPI подходит для большинства жанров. Легкий вес (99г) и эргономичная форма снижают нагрузку на кисть. 13 режимов RGB подсветки создают яркий визуальный стиль.",features:["Interchangeable Panels","7200 DPI","RGB 13 Modes","99g Weight"],specs:{Сенсор:"Optical Instant A725",DPI:"7200","Количество кнопок":"6 (Программируемые)",Подсветка:"RGB (13 режимов)",Вес:"99 г",Размеры:"123 x 65 x 39 мм",Подключение:"Проводное USB","Длина кабеля":"1.5 м",Ускорение:"20G","Частота опроса":"125 Гц",Микропереключатели:"10 млн. кликов",Совместимость:"Windows, Mac OS, Linux",Комплектация:"Мышь, 2 сменные панели"},rating:4.7,seo:{title:"M3 Игровая Мышь со Сменными Панелями | 7200 DPI | VOROTEX",description:"Игровая мышь VOROTEX M3. Сменные панели в комплекте, 7200 DPI, RGB подсветка. Легкий вес 99г. Программируемая.",keywords:"m3 мышь, сменные панели мышь, 7200 dpi, vorotex m3, бюджетная игровая мышь",indexing:!0},options:[{id:"color",name:"Цвет",type:"color",values:[{id:"white",name:"Белый",value:"#ffffff"},{id:"black",name:"Чёрный",value:"#111111"}]}],variants:[{id:"00-00001931",externalId:"00-00001931",combination:{color:"white"},stock:90,price:1140,image:"/placeholder.svg"},{id:"00-00001932",externalId:"00-00001932",combination:{color:"black"},stock:90,price:1140,image:"/placeholder.svg"}],sections:[{id:"m3-features",type:"features",title:"ОСОБЕННОСТИ",theme:"light",items:[{title:"Разрешение датчика до 7200 dpi",icon:"target"},{title:"Две дополнительные съемные панели",icon:"layers"},{title:"Тринадцать режимов RGB подсветки",icon:"zap"},{title:"Программирование макросов",icon:"settings"},{title:"Легкий вес мыши около 99 грамм",icon:"mouse"},{title:"Шесть программируемых кнопок",icon:"download"}]},{id:"m3-style",type:"text-image",title:"ВЫБЕРИ СВОЙ СТИЛЬ",subtitle:"Сменные панели",content:"В комплекте с мышью идут две дополнительные сменные панели. Вы можете изменить внешний вид мыши (соты или сплошная) или просто обновить её вид, когда захочется.",image:"/placeholder.svg",alignment:"center",theme:"light"},{id:"m3-tech",type:"text-image",title:"ФУНКЦИОНАЛЬНОСТЬ",subtitle:"Эргономика и DPI",content:"Шестиступенчатая регулировка DPI позволяет мгновенно менять чувствительность. Эргономичный дизайн и удобный хват обеспечивают комфорт, а RGB подсветка добавляет стиля.",image:"/placeholder.svg",alignment:"right",theme:"dark"},{id:"m3-software",type:"text-image",title:"ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ",subtitle:"Настройка под себя",content:"Используйте фирменный софт для настройки назначения клавиш, записи макросов и управления подсветкой.",image:"/placeholder.svg",alignment:"left",theme:"light"},{id:"reviews-m3",type:"reviews",title:"ОТЗЫВЫ",theme:"light"}]},{id:"ms-g7r",name:"VOROTEX G7R",category:Te.MOUSE,price:2590,originalPrice
2893:3290,stock:120,isNewArrival:!0,image:"/placeholder.svg",gallery:["/placeholder.svg","/placeholder.svg","/placeholder.svg","/placeholder.svg"],description:"Беспроводная игровая мышь с агрессивным дизайном, RGB подсветкой и сенсором PAW3325.",longDescription:'VOROTEX G7R — это стиль и свобода. Яркий дизайн с "механическими" элементами корпуса дополнен 11 режимами RGB подсветки. Сенсор PixArt PAW3325 обеспечивает точность до 10000 DPI. Мышь работает в двух режимах: по радиоканалу 2.4G и по проводу. Встроенный аккумулятор 450 mAh позволяет играть долго, а функция программирования макросов дает преимущество в боях.',features:["Wireless","PAW3325","7 Buttons","RGB 11 Modes"],specs:{Сенсор:"PixArt PAW3325",DPI:"1200-10000","Количество кнопок":"7 (Программируемые)",Подсветка:"RGB (11 режимов)","Емкость аккумулятора":"450 mAh",Вес:"100 г",Размеры:"129 x 74 x 42 мм",Подключение:"Беспроводное 2.4G / Проводное",Микропереключатели:"20 млн. кликов",Совместимость:"Windows, MacOS (базовый функционал)"},rating:4.7,seo:{title:"G7R Беспроводная Мышь 10000 DPI | RGB, Макросы | VOROTEX",description:"Игровая мышь VOROTEX G7R. Беспроводная связь, сенсор PAW3325, 7 кнопок, RGB подсветка. Доступна в белом, желтом и черном цветах.",keywords:"g7r мышь, беспроводная игровая мышь, paw3325, макросы мышь, vorotex, rgb мышка",indexing:!0},options:[{id:"color",name:"Цвет",type:"color",values:[{id:"white",name:"Белый",value:"#ffffff"},{id:"yellow",name:"Желтый",value:"#ffd700"},{id:"black",name:"Чёрный",value:"#111111"}]}],variants:[{id:"00-00001956",externalId:"00-00001956",combination:{color:"white"},stock:40,price:2590},{id:"00-00001955",externalId:"00-00001955",combination:{color:"yellow"},stock:40,price:2590,image:"/placeholder.svg"},{id:"00-00001957",externalId:"00-00001957",combination:{color:"black"},stock:40,price:2590,image:"/placeholder.svg"}],sections:[{id:"g7r-features",type:"features",title:"ОСОБЕННОСТИ",theme:"light",items:[{title:"Разрешение датчика до 10000 dpi",icon:"target"},{title:"Тип подключения: Проводной + 2.4 ГГц",icon:"download"},{title:"Одиннадцать режимов RGB подсветки",icon:"zap"},{title:"Программирование макросов",icon:"settings"},{title:"Дизайн созданный для геймеров",icon:"mouse"},{title:"Семь программируемых кнопок",icon:"layers"}]},{id:"g7r-wireless",type:"text-image",title:"БЫСТРАЯ ЗАРЯДКА",subtitle:"И долгий ресурс",content:"Встроенный аккумулятор на 450 mAh обеспечивает длительную время работы. А если заряд закончился прямо во время катки — просто подключите кабель Type-C и продолжайте играть в проводном режиме, пока мышь заряжается.",image:"/placeholder.svg",alignment:"right",theme:"dark"},{id:"g7r-design",type:"text-image",title:"КИБЕРПАНК ДИЗАЙН",subtitle:"Стиль будущего",content:"Агрессивные линии, прозрачные элементы и яркая RGB подсветка делают G7R настоящим украшением игрового стола.",image:"/placeholder.svg",alignment:"left",theme:"light"},{id:"reviews-g7r",type:"reviews",title:"ОТЗЫВЫ",theme:"light"}]},{id:"ms-diamond",name:"VOROTEX DIAMOND",category:Te.MOUSE,price:1250,originalPrice
2893:1590,stock:200,image:"/placeholder.svg",gallery:["/placeholder.svg","/placeholder.svg","/placeholder.svg"],description:"Проводная игровая мышь в уникальном полностью прозрачном корпусе с RGB подсветкой.",longDescription:"VOROTEX DIAMOND — это мышь, которую невозможно не заметить. Полностью прозрачный корпус из поликарбоната превращает девайс в светящийся кристалл при включении RGB подсветки (13 режимов). Внутри установлен сенсор Instant A825 с разрешением до 12800 DPI, обеспечивающий высокую точность в играх. Переключатели рассчитаны на 20 миллионов нажатий. Идеальный выбор для любителей ярких сетапов.",features:["Transparent Body","12800 DPI","RGB 13 Modes","Instant A825"],specs:{Сенсор:"Instant A825",DPI:"12800","Количество кнопок":"6 (Программируемые)",Подсветка:"RGB (13 режимов)",Вес:"132 г",Размеры:"127 x 63 x 39 мм",Подключение:"Проводное USB","Длина кабеля":"1.65 м",Ускорение:"20G",Микропереключатели:"20 млн. кликов",FPS:"7000"},rating:4.8,seo:{title:"DIAMOND Прозрачная Игровая Мышь | 12800 DPI, RGB | VOROTEX",description:"Уникальная мышь VOROTEX DIAMOND с прозрачным корпусом. 12800 DPI, яркая RGB подсветка, программируемые кнопки. Выбери свой бриллиант.",keywords:"прозрачная мышь, rgb мышка, игровая мышь 12800 dpi, vorotex diamond, красивая мышь",indexing:!0},options:[{id:"color",name:"Цвет",type:"color",values:[{id:"white",name:"Белый (Прозрачный)",value:"#e0f7fa"},{id:"black",name:"Чёрный (Прозрачный)",value:"#333333"}]}],variants:[{id:"00-00001929",externalId:"00-00001929",combination:{color:"white"},stock:100,price:1250,image:"/placeholder.svg"},{id:"00-00001930",externalId:"00-00001930",combination:{color:"black"},stock:100,price:1250,image:"/placeholder.svg"}],sections:[{id:"diamond-features",type:"features",title:"ОСОБЕННОСТИ",theme:"light",items:[{title:"Разрешение датчика до 12800 dpi",icon:"target"},{title:"Срок службы кнопок: 20 млн. кликов",icon:"settings"},{title:"Тринадцать режимов RGB подсветки",icon:"zap"},{title:"Программирование макросов",icon:"layers"},{title:"Полностью прозрачный корпус мыши",icon:"star"},{title:"Шесть программируемых кнопок",icon:"mouse"}]},{id:"diamond-design",type:"text-image",title:"ПРОЗРАЧНЫЙ КОРПУС",subtitle:"Сияние изнутри",content:"Уникальный дизайн корпуса позволяет увидеть внутренние компоненты мыши. Но главное — это подсветка. Свет преломляется в гранях корпуса, создавая потрясающий эффект кристалла на вашем столе.",image:"/placeholder.svg",alignment:"center",theme:"dark"},{id:"diamond-sensor",type:"text-image",title:"ВЫСОКАЯ ТОЧНОСТЬ",subtitle:"Instant A825",content:"Сенсор с разрешением до 12800 DPI и частотой обновления 7000 кадров в секунду обеспечивает плавное и точное отслеживание движений в любых играх.",image:"/placeholder.svg",alignment:"right",theme:"light"},{id:"reviews-diamond",type:"reviews",title:"ОТЗЫВЫ",theme:"light"}]},{id:"ms-g6",name:"VOROTEX G6",category:Te.MOUSE,price:1870,originalPrice:2290,stock:100,image:"/placeholder.svg",gallery:["/placeholder.svg","/placeholder.svg","/placeholder.svg"],description:"Эргономичная проводная мышь с 10 кнопками и агрессивным механическим дизайном.",longDescription:'VOROTEX G6 — это выбор для тех, кому нужно больше контроля. 10 программируемых кнопок позволяют настроить макросы для MMO, MOBA или сложных рабочих задач. Эргономичный корпус с упором под большой палец обеспечивает комфорт при длительном использовании. Сенсор Instant A826 с разрешением 12800 DPI гарантирует точность. "Механический" дизайн корпуса выглядит футуристично и мощно.',features:["10 Buttons","Instant A826","RGB 13 Modes","Ergonomic"],specs:{Сенсор:"Instant A826",DPI:"12800","Количество кнопок":"10 (Программируемые)",Подсветка:"RGB (13 режимов)",Вес:"136 г",Размеры:"129 x 82 x 42 мм",Подключение:"Проводное USB","Длина кабеля":"1.75 м",Ускорение:"60 IPS","Частота опроса":"125-1000 Гц",Микропереключатели:"Бесшумные (20 млн. кликов)"},rating:4.6,seo:{title:"G6 Игровая Мышь 10 Кнопок | 12800 DPI, Макросы | VOROTEX",description:"Многокнопочная мышь VOROTEX G6. 10 программируемых кнопок, эргономичный дизайн, сенсор 12800 DPI. Идеальна для MMO и стратегий.",keywords:"g6 мышь, мышь для mmo, много кнопок мышь, vorotex g6, игровая мышь макросы",indexing:!0},options:[{id:"color",name:"Цвет",type:"color",values:[{id:"white",name:"Белый",value:"#ffffff"},{id:"yellow",name:"Желтый",value:"#ffd700"},{id:"black",name:"Чёрный",value:"#111111"}]}],variants:[{id:"00-00001923",externalId:"00-00001923",combination:{color:"white"},stock:35,price:1870,image:"/placeholder.svg"},{id:"00-00001922",externalId:"00-00001922",combination:{color:"yellow"},stock:30,price:1870,image:"/placeholder.svg"},{id:"00-00001924",externalId:"00-00001924",combination:{color:"black"},stock:35,price:1870,image:"/placeholder.svg"}],sections:[{id:"g6-features",type:"features",title:"ОСОБЕННОСТИ",theme:"light",items:[{title:"Разрешение датчика до 12800 dpi",icon:"target"},{title:"Срок службы кнопок: 20 млн. кликов",icon:"settings"},{title:"Тринадцать режимов RGB подсветки",icon:"zap"},{title:"Программирование макросов",icon:"layers"},{title:"Дизайн созданный для геймеров",icon:"mouse"},{title:"Десять программируемых кнопок",icon:"download"}]},{id:"g6-buttons",type:"text-image",title:"10 КНОПОК",subt
2893itle:"Полный контроль",content:"Назначьте гранаты, скиллы или сложные макросы на дополнительные кнопки. Расположение кнопок продумано так, чтобы они были легко доступны, но не мешали обычному хвату.",image:"/placeholder.svg",alignment:"left",theme:"dark"},{id:"g6-clicks",type:"text-image",title:"ТИХОЕ НАЖАТИЕ",subtitle:"Бесшумные микрики",content:"В модели используются бесшумные механические микропереключатели. Играйте ночью, не беспокоя окружающих громкими кликами, при этом сохраняя четкость срабатывания.",image:"/placeholder.svg",alignment:"right",theme:"dark"},{id:"reviews-g6",type:"reviews",title:"ОТЗЫВЫ",theme:"light"}]},{id:"ms-g8w",name:"VOROTEX G8W",category:Te.MOUSE,price:2290,originalPrice:2890,stock:130,image:"/placeholder.svg",gallery:["/placeholder.svg","/placeholder.svg","/placeholder.svg"],description:'Беспроводная игровая мышь с покрытием "под карбон" и бесшумными переключателями.',longDescription:"VOROTEX G8W сочетает в себе строгий стиль и игровые характеристики. Корпус с текстурой под карбон не собирает отпечатки и обеспечивает надежный хват. Главная фишка — бесшумные нажатия кнопок, что делает её идеальной для ночных сессий. Работает в двух режимах (беспроводной/проводной). Оптический датчик S203 с разрешением до 12800 DPI обеспечивает высокую точность.",features:["Silent Clicks","Wireless","Carbon Texture","12800 DPI"],specs:{Сенсор:"Оптический S203",DPI:"12800 (Регулируемый)","Количество кнопок":"7 (Программируемые)",Подсветка:"RGB",Микропереключатели:"Бесшумные (20 млн. кликов)","Емкость аккумулятора":"500 mAh",Вес:"86 г",Размеры:"127 x 81 x 41 мм",Подключение:"Беспроводное 2.4G / Проводное USB",Совместимость:"Windows"},rating:4.8,seo:{title:"G8W Бесшумная Игровая Мышь | Карбон, Wireless | VOROTEX",description:"Беспроводная мышь VOROTEX G8W. Тихие клики, дизайн под карбон, 12800 DPI. Удобная форма и RGB подсветка.",keywords:"g8w мышь, бесшумная мышь, карбон мышь, wireless gaming mouse, vorotex",indexing:!0},options:[{id:"color",name:"Цвет",type:"color",values:[{id:"carbon",name:"Карбон (Черный)",colors:["#1a1a1a","#333333"]}]}],variants:[{id:"00-00002049",externalId:"00-00002049",combination:{color:"carbon"},stock:130,price:2290}],sections:[{id:"g8w-features",type:"features",title:"ОСОБЕННОСТИ",theme:"light",items:[{title:"Разрешение датчика до 8000 dpi",icon:"target"},{title:"Срок службы кнопок: 20 млн. кликов",icon:"settings"},{title:"Стильная RGB подсветка",icon:"zap"},{title:"Программирование макросов",icon:"layers"},{title:"Дизайн разработан для удобного хвата",icon:"mouse"},{title:"Шесть программируемых кнопок",icon:"download"}]},{id:"g8w-silent",type:"text-image",title:"ТИШИНА И КОМФОРТ",subtitle:"Silent Micro-switches",content:"Наслаждайтесь игрой, не раздражая окружающих кликами. Специальные тихие переключатели обеспечивают тактильную отдачу без громкого звука.",image:"/placeholder.svg",alignment:"right",theme:"dark"},{id:"g8w-style",type:"text-image",title:"СТИЛЬ CARBON",subtitle:"Эргономика",content:'Текстурированная поверхность "под карбон" не только круто выглядит, но и предотвращает выскальзывание мыши из влажных рук в напряженных моментах.',image:"/placeholder.svg",alignment:"left",theme:"light"},{id:"reviews-g8w",type:"reviews",title:"ОТЗЫВЫ",theme:"light"}]}],Uw=[{id:"hs-v2002-plus",name:"VOROTEX V2002 Plus",category:Te.HEADSET,price:2990,originalPrice
2893:3590,stock:150,isNewArrival:!0,image:"/placeholder.svg",gallery:["/placeholder.svg","/placeholder.svg","/placeholder.svg","/placeholder.svg"],description:"Игровая гарнитура с виртуальным звуком 7.1, динамиками 53мм и RGB подсветкой.",longDescription:"VOROTEX V2002 Plus — это погружение в игру на новом уровне. Мощные 53-мм динамики обеспечивают глубокий бас и кристально чистые высокие частоты. Виртуальный объемный звук 7.1 позволяет точно определять положение противника по шагам. Гарнитура оснащена съемным микрофоном с шумоподавлением и удобным пультом управления на кабеле. Стильная RGB подсветка дополняет геймерский образ, а мягкие амбушюры позволяют играть часами без дискомфорта.",features:["7.1 Surround","53mm Drivers","RGB Lighting","USB Connection","Detachable Mic"],specs:{"Тип наушников":"Полноразмерные (Over-ear)",Динамики:"Ø53 мм",Импеданс:"64 ± 15% Ом",Чувствительность:"97 дБ ± 3 дБ","Частотный диапазон":"20 Гц - 20 кГц",Микрофон:"Ø6.0 × 2.7 мм (Съемный)",Интерфейс:"USB","Длина кабеля":"2 м",Звук:"Виртуальный 7.1",Подсветка:"RGB (Статика/Динамика)",Управление:"Пульт на проводе (Громкость, Микрофон, Свет)",Совместимость:"Windows, MacOS, PlayStation","Наличие софта":"Есть (Настройка 7.1 и EQ)"},rating:4.9,seo:{title:"V2002 Plus Игровая Гарнитура 7.1 | USB, RGB, 53мм | VOROTEX",description:"Купить игровую гарнитуру VOROTEX V2002 Plus. Объемный звук 7.1, большие динамики 53мм, съемный микрофон и RGB подсветка. Идеально для шутеров.",keywords:"v2002 plus, игровая гарнитура 7.1, наушники с микрофоном, vorotex headset, rgb наушники",indexing:!0},options:[{id:"color",name:"Цвет",type:"color",values:[{id:"black",name:"Чёрный",value:"#111111"}]}],variants:[{id:"00-00001900",externalId:"00-00001900",combination:{color:"black"},stock:150,price:2990}],sections:[{id:"v2002p-71",type:"text-image",title:"7.1 SURROUND SOUND",subtitle:"Услышь каждый шаг",content:"Встроенная звуковая карта создает эффект объемного звучания. Это позволяет точно позиционировать источники звука в играх, давая тактическое преимущество. Настройте эквалайзер под себя через фирменное ПО.",image:"/placeholder.svg",alignment:"right",theme:"dark"},{id:"v2002p-drivers",type:"text-image",title:"53MM ДИНАМИКИ",subtitle:"Мощный бас",content:"Увеличенные излучатели диаметром 53 мм выдают плотный и насыщенный звук с глубокими басами, которые добавляют эпичности взрывам и выстрелам в играх и фильмах.",image:"/placeholder.svg",alignment:"left",theme:"light"},{id:"reviews-v2002p",type:"reviews",title:"ОТЗЫВЫ",theme:"light"}]},{id:"hs-v2002d",name:"VOROTEX V2002D",category:Te.HEADSET,price:2490,originalPrice:2990,stock:120,image:"/placeholder.svg",gallery:["/placeholder.svg","/placeholder.svg","/placeholder.svg","/placeholder.svg"],description:"Универсальная игровая гарнитура с подключением 3.5мм и съемным микрофоном.",longDescription:"VOROTEX V2002D — классика в современном исполнении. 50-мм динамики, съемный гибкий микрофон и универсальный разъем 3.5 мм (4-pin) делают эту гарнитуру совместимой с ПК, консолями (PS/Xbox) и смартфонами. Легкая конструкция и дышащие амбушюры из эко-кожи обеспечивают комфорт. В комплекте идет разветвитель для ПК.",features:["50mm Drivers","Detachable Mic","3.5mm Jack","Multi-Platform","Lightweight"],specs:{"Тип наушников":"Полноразмерные",Динамики:"Ø50 мм",Импеданс:"32 Ом",Чувствительность:"100 дБ",Микрофон:"Съемный всенаправленный",Интерфейс:"3.5 мм Jack (4-pin)","Длина кабеля":"1.8 м",Звук:"Стерео",Вес:"280 г",Совместимость:"ПК, PS4/5, Xbox, Switch, Mobile"},rating:4.7,seo:{title:"V2002D Игровые Наушники 3.5мм | Съемный Микрофон | VOROTEX",description:"Универсальная гарнитура V2002D. 3.5мм разъем для ПК и консолей. Съемный микрофон, 50мм динамики, легкий вес.",keywords:"v2002d, наушники 3.5мм, игровые наушники для ps5, гарнитура с микрофоном, vorotex",indexing:!0},options:[{id:"color",name:"Цвет",type:"color",values:[{id:"black",name:"Чёрный",value:"#111111"},{id:"white",name:"Белый",value:"#ffffff"}]}],variants:[{id:"00-00001657",externalId:"00-00001657",combination:{color:"black"},stock:70,price:2490,image:"/placeholder.svg"},{id:"00-00001656",externalId:"00-00001656",combination:{color:"white"},stock:50,price:2490,image:"/placeholder.svg"}],sections:[{id:"v2002d-features",type:"features",title:"ОСОБЕННОСТИ",theme:"light",items:[{title:"Универсальный разъем 3.5 мм",icon:"download"},{title:"Большие динамики 50 мм",icon:"volume"}
2893,{title:"Съемный гибкий микрофон",icon:"monitor"},{title:"Совместимость с консолями",icon:"gamepad"},{title:"Легкая конструкция 280г",icon:"layers"}]},{id:"reviews-v2002d",type:"reviews",title:"ОТЗЫВЫ",theme:"light"}]},{id:"hs-v2008d",name:"VOROTEX V2008D",category:Te.HEADSET,price:1990,originalPrice:2590,stock:180,image:"/placeholder.svg",gallery:["/placeholder.svg","/placeholder.svg","/placeholder.svg"],description:"Стильная гарнитура с бронзовыми элементами и съемным микрофоном.",longDescription:'VOROTEX V2008D выделяется своим дизайном с элементами цвета "бронза". Качественный стереозвук, удобное оголовье и мягкие амбушюры делают её отличным выбором для повседневного использования: игр, музыки и общения. Микрофон можно отсоединить, превратив гарнитуру в обычные наушники. Регулятор громкости и выключатель микрофона расположены на кабеле.',features:["Stylish Design","50mm Drivers","Detachable Mic","Inline C
2893ontrol"],specs:{"Тип наушников":"Полноразмерные",Динамики:"Ø50 мм",Импеданс:"32 Ом",Чувствительность:"101 дБ",Микрофон:"Съемный",Интерфейс:"3.5 мм Jack (4-pin)","Длина кабеля":"2 м",Звук:"Стерео",Вес:"295 г",Совместимость:"ПК, Консоли, Мобильные"},rating:4.8,seo:{title:"V2008D Стильная Гарнитура | Съемный Микрофон | VOROTEX",description:"Игровые наушники V2008D. Стильный дизайн, бронзовые вставки. Съемный микрофон, отличный стереозвук. Подключение 3.5мм.",keywords:"v2008d, стильные наушники, гарнитура для пк, игровые наушники с микрофоном, vorotex",indexing:!0},options:[{id:"color",name:"Цвет",type:"color",values:[{id:"black",name:"Чёрный",value:"#111111"},{id:"white",name:"Белый",value:"#ffffff"}]}],variants:[{id:"00-00001658",externalId:"00-00001658",combination:{color:"black"},stock:90,price:1990,image:"/placeholder.svg"},{id:"00-00001849",externalId:"00-00001849",combination:{color:"white"},stock:90,price:1990,image:"/placeholder.svg"}],sections:[{id:"reviews-v2008d",type:"reviews",title:"ОТЗЫВЫ",theme:"light"}]}],Hw=[],Xw=[{id:"acc-case-v75",name:"Кейс для клавиатуры VOROTEX V75",category:Te.ACCESSORY,price:2390,originalPrice:2990,stock:150,isNewArrival:!0,image:"/placeholder.svg",gallery:["/placeholder.svg","/placeholder.svg","/placeholder.svg","/placeholder.svg","/placeholder.svg"],description:"Жесткий водонепроницаемый кейс для транспортировки клавиатур формата 75% и TKL.",longDescription:"Этот жесткий водонепроницаемый кейс VOROTEX V75 — идеальный спутник в путешествиях, командировках и повседневной жизни. Он сочетает стильный дизайн с прочностью и практичностью. Корпус выполнен из современных износостойких материалов EVA, полиуретана и нейлона, которые надёжно защищают содержимое от ударов, сжатия, пыли, грязи и брызг. Внутри достаточно места не только для клавиатуры, но и для зарядных устройств с кабелями. Благодаря сетчатому карману аксессуары не будут болтаться по кейсу. Кейс закрывается прочной молнией с надёжной фурнитурой. Для комфортной переноски предусмотрена эргономичная ручка с резиновой вставкой.",features:["Hard EVA Shell","Waterproof","Accessory Pocket","Shock Protection","Ergonomic Handle"],specs:{"Тип товара":"Кейс для клавиатуры",Совместимость:"Клавиатуры 75%, TKL (87 клавиш)",Материал:"EVA + Нейлон + Полиуретан","Внешние размеры":"350 x 155 x 60 мм","Внутренние размеры":"330 x 135 мм (Посадочное место)",Защита:"От ударов, влаги, пыли",Особенности:"Сетчатый карман для кабеля, Ручка для переноски",Застежка:"Двойная молния",Цвет:"Черный",Вес:"320 гр"},rating:5,seo:{title:"Кейс для клавиатуры VOROTEX V75 | Жесткий чеÑ
2893…ол для механики",description:"Купить жесткий кейс для клавиатуры VOROTEX V75. Водонепроницаемый чехол из EVA для клавиатур 75% и TKL. Защита от ударов, карман для кабеля.",keywords:"кейс для клавиатуры, чехол для механической клавиатуры, сумка для клавиатуры, vorotex case, eva case keyboard",indexing:!0},options:[{id:"color",name:"Цвет",type:"color",values:[{id:"black",name:"Чёрный",value:"#111111"}]}],variants:[{id:"00-00001969",externalId:"00-00001969",combination:{color:"black"},stock:150,price:2390}],sections:[{id:"case-protection",type:"text-image",title:"ЗАЩИТА ОТ УДАРОВ И ВЛАГИ",subtitle:"Высококачественные материалы",content:"Корпус из формованного материала EVA (этиленвинилацетат) обладает амортизирующими свойствами. Он жесткий снаружи, чтобы держать форму, но упругий при ударах. Водоотталкивающее покрытие защитит девайс от дождя или пролитого напитка.",image:"/placeholder.svg",alignment:"right",theme:"dark"},{id:"case-storage",type:"text-image",title:"УДОБНЫЙ КАРМАН",subtitle:"Хранение аксессуаров",content:"На внутренней стороне крышки расположен вместительный сетчатый карман на молнии. Туда легко помещается съемный кабель Type-C, пуллер для кейкапов, флешки или запасные свитчи. Все необходимое всегда под рукой.",image:"/placeholder.svg",alignment:"left",theme:"light"},{id:"case-dimensions",type:"text-image",title:"ИДЕАЛЬНЫЙ РАЗМЕР",subtitle:"Для 75% и TKL",content:"Внутренние габариты (33см x 13.5см) идеально подогнаны под популярные форматы клавиатур VOROTEX (V75, K870, K680 и др.). Клавиатура лежит плотно и не болтается при транспортировке благодаря мягкой внутренней обивке.",image:"/placeholder.svg",alignment:"right",theme:"light"},{id:"reviews-case",type:"reviews",title:"ОТЗЫВЫ",theme:"light"}]},{id:"acc-cable-gx16",name:"Кабель VOROTEX GX16 Aviator",category:Te.ACCESSORY,price:2690,stock:200,isNewArrival:!0,image:"/placeholder.svg",gallery:["/placeholder.svg","/placeholder.svg","/placeholder.svg","/placeholder.svg","/placeholder.svg"],description:"Витой кабель премиум-класса с авиатором GX16 для механических клавиатур.",longDescription:'Кастомный кабель VOROTEX GX16 Aviator — это финальный штрих вашего сетапа. Прочная 4-жильная основа (28 AWG) защищена двойной оплеткой: базовый Paracord 550 покрыт износостойкой сеткой TechFlex Flexo PET. Надежный металлический коннектор GX16 (Aviator) из цинкового сплава позволяет быстро менять интерфейсы и придает кабелю профессиональный вид. Плотная намотка "пружины" (Coil) держит форму и не растягивается со временем. Подходит для всех клавиатур с разъемом Type-C.',features:["Double Sleeve","GX16 Aviator","Coiled Design","USB-C to USB-A","Zinc Alloy"],specs:{Тип:"Витой кабель (Coiled Cable)",Коннекторы:"USB-A -> USB-C",Авиатор:"GX16 (5-pin), цинковый сплав",Оплетка:"Paracord 550 + TechFlex PET",Длина:"1.5м (основа) + 15-18см (койл)","Диаметр койла":"25 мм","Толщина кабеля":"5 мм",Жилы:"4 жилы (28 AWG) + PVC","Стандарт USB":"2.0",Термоусадка:"Полиолефин"},rating:5,seo:{title:"GX16 Aviator Витой Кабель для Клавиатуры | Type-C | VOROTEX",description:"Купить кастомный кабель для клавиатуры с авиатором GX16. Витой кабель Type-C, двойная оплетка TechFlex, металлический коннектор. Премиум качество.",keywords:"gx16 cable, aviator cable, витой кабель для клавиатуры, кабель type-c, coiled cable, vorotex",indexing:!0},options:[{id:"color",name:"Цвет",type:"color",values:[{id:"white",name:"Белый",value:"#ffffff"},{id:"white-pink",name:"Белый/Розовый",colors:["#ffffff","#ffb7b2"]},{id:"blue-pink",name:"Голубой/Розовый",colors:["#00bfff","#ffb7b2"]},{id:"yellow-orange-black",name:"Жёлто-оранжевый/Черный",colors:["#ffcc00","#ff8c00","#000000"]},{id:"blue-black",name:"Синий/Черный",colors:["#0000ff","#000000"]},{id:"cyan-white",name:"Циан/Белый",colors:["#00ffff","#ffffff"]},{id:"black",name:"Чёрный",value:"#111111"},{id:"black-white",name:"Чёрный/Белый",colors:["#000000","#ffffff"]},{id:"black-nickel",name:"Чёрный/Никель",colors:["#000000","#888888"]}]}],variants:[{id:"00-00001490",externalId:"00-00001490",combination:{color:"white"},stock:20,price:2690,image:"/placeholder.svg"},{id:"00-00001547",externalId:"00-00001547",combination:{color:"white-pink"},stock:15,price:2690,image:"/placeholder.svg"}
2893,{id:"00-00001154",externalId:"00-00001154",combination:{color:"blue-pink"},stock:18,price:2690,image:"/placeholder.svg"},{id:"00-00001548",externalId:"00-00001548",combination:{color:"yellow-orange-black"},stock:12,price:2690,image:"/placeholder.svg"},{id:"00-00001650",externalId:"00-00001650",combination:{color:"blue-black"},stock:20,price:2690,image:"/placeholder.svg"},{id:"00-00001545",externalId:"00-00001545",combination:{color:"cyan-white"},stock:15,price:2690,image:"/placeholder.svg"},{id:"00-00001151",externalId:"00-00001151",combination:{color:"black"},stock:30,price:2690,image:"/placeholder.svg"},{id:"00-00001544",externalId:"00-00001544",combination:{color:"black-white"},stock:25,price:2690,image:"/placeholder.svg"},{id:"00-00001491",externalId:"00-00001491",combination:{color:"black-nickel"},stock:20,price:2690,image:"/placeholder.svg"}],sections:[{id:"gx16-build",type:"text-image",title:"ДВОЙНАЯ ОПЛЕТКА",subtitle:"Paracord + TechFlex",content:"Сочетание мягкого паракорда и прочной сетки TechFlex создает уникальную текстуру, защищает кабель от перетирания и придает ему премиальный внешний вид. Кабель держит форму и приятен на ощупь.",image:"/placeholder.svg",alignment:"right",theme:"dark"},{id:"gx16-aviator",type:"text-image",title:"GX16 AVIATOR",subtitle:"Профессиональный стандарт",content:"Массивный 5-контактный коннектор из цинкового сплава надежно соединяет части кабеля. Винтовой замок исключает случайное рассоединение. Это не только функционально, но и очень стильно.",image:"/placeholder.svg",alignment:"left",theme:"light"},{id:"gx16-coil",type:"text-image",title:"ИДЕАЛЬНЫЙ COIL",subtitle:"Плотная намотка",content:"Витая часть кабеля (пружина) диаметром 25 мм прошла профессиональную термообработку. Она упругая, ровная и возвращает форму после растяжения. Длина койла 15-18 см.",image:"/placeholder.svg",alignment:"right",theme:"dark"},{id:"reviews-gx16",type:"reviews",title:"ОТЗЫВЫ",theme:"light"}]},{id:"acc-switches",name:"Набор переключателей (10 шт)",category:Te.ACCESSORY,price:540,stock:1e3,isNewArrival:!0,image:"/placeholder.svg",gallery:["/placeholder.svg","/placeholder.svg","/placeholder.svg","/placeholder.svg"],description:"Наборы премиальных механических переключателей для кастомизации клавиатуры. Заводская смазка.",longDescription:'Обновите ощущения от тайпинга с наборами переключателей VOROTEX. В ассортименте три топовые модели: ZF Panda для любителей мягкого хода, Huano Matcha Latte V2 для фанатов "thocky" звука и HMX Citrus Grape для максимальной отзывчивости. Все свитчи смазаны с завода и имеют 5-pin крепление для надежной фиксации в Hot-Swap сокетах. Упаковка 10 штук.',features:["Pack of 10","Factory Lubed","5-Pin","Tactile","Gold Plated Spring"],specs:{"Количество в наборе":"10 шт","Тип крепления":"5-pin (PCB Mount)","Материал стема":"POM","Материал корпуса":"PC (верх) / Nylon (низ)",Смазка:"Заводская (Krytox)",Совместимость:"Любые механические клавиатуры (MX style)"},rating:5,seo:{title:"Набор Свитчей для Клавиатуры (10шт) | Panda, Matcha, HMX | VOROTEX",description:"Купить свитчи для механической клавиатуры. Наборы по 10 штук: ZF Panda, Huano Matcha, HMX Citrus. Смазанные, 5-pin.",ke
2893ywords:"свитчи для клавиатуры, купить свитчи, huano matcha latte, zf panda, hmx switches, mechanical switches",indexing:!0},options:[{id:"model",name:"Модель",type:"text",values:[{id:"panda",name:"ZF Panda (42g)"},{id:"matcha",name:"Huano Matcha Latte V2 (45g)"},{id:"citrus",name:"HMX Citrus Grape (45g)"}]}],variants:[{id:"00-00002051",externalId:"00-00002051",combination:{model:"panda"},stock:300,price:540,name:"Набор свитчей ZF Panda",image:"/placeholder.svg"},{id:"acc-sw-matcha",externalId:"acc-sw-matcha",combination:{model:"matcha"},stock:0,price:540,image:"/placeholder.svg"},{id:"00-00002052",externalId:"00-00002052",combination:{model:"citrus"},stock:250,price:540,name:"Набор свитчей HMX Citrus Grape",image:"/placeholder.svg"}],sections:[{id:"sw-panda",type:"text-image",title:"ZF PANDA",subtitle:"Black & White",content:"Классический линейный переключатель с укороченным ходом (3.5мм). Идеален для быстрой печати. Сила нажатия 42г обеспечивает легкость, а удлиненная пружина дает быстрый возврат.",image:"/placeholder.svg",alignment:"right",theme:"light"},{id:"sw-matcha",type:"text-image",title:"MATCHA LATTE V2",subtitle:"Huano Custom",content:"Любимец энтузиастов. Глубокий, насыщенный звук без паразитных звонов. Стем из POM-пластика и заводская смазка делают ход невероятно плавным.",image:"/placeholder.svg",alignment:"left",theme:"light"},{id:"reviews-sw",type:"reviews",title:"ОТЗЫВЫ",theme:"light"}]},{id:"acc-mousepad-xxl",name:"Игровой коврик VOROTEX XXL",category:Te.ACCESSORY,price:1390,stock:500,isNewArrival:!0,image:"/placeholder.svg",gallery:["/placeholder.svg","/placeholder.svg","/placeholder.svg","/placeholder.svg","/placeholder.svg"],description:"Огромный игровой коврик 900x400 мм с влагоотталкивающим покрытием Jacquard.",longDescription:'Игровой коврик VOROTEX XXL формата (900x400 мм) покрывает большую часть стола, создавая единую рабочую поверхность для клавиатуры и мыши. Покрытие "Jacquard Speed/Control" обеспечивает идеальный баланс: мышь скользит легко, но останавливается мгновенно для точных хедшотов. Края прошиты усиленным оверлоком, что предотвращает расслаивание. Нескользящее резиновое основание намертво фиксирует коврик на столе. Толщина 4 мм сглаживает неровности поверхности.',features:["900x400x4 mm","Jacquard Fabric","Anti-Slip Base","Stitched Edges","Water Resistant"],specs:{Размер:"900 x 400 мм",Толщина:"4 мм","Тип поверхности":"Speed + Control (Гибрид)","Материал покрытия":"Жаккардовая ткань",Основание:"Натуральная резина (Anti-slip)","Обработка краев":"Оверлок (Прошитые)",Влагозащита:"Да"},rating:4.9,seo:{title:"Игровой коврик для мыши XXL (900x400) | VOROTEX",description:"Большой коврик для мыши и клавиатуры 900x400мм. Толщина 4мм, прошитые края, покрытие Jacquard Speed/Control. Стильные принты.",keywords:"коврик для мыши 900x400, игровой коврик xxl, коврик на весь стол, vorotex mousepad, большой коврик",indexing:!0},options:[{id:"design",name:"Дизайн",type:"image",values:[{id:"beige-green",name:"Бежево-зелёный",image:"/placeholder.svg"}
2893,{id:"black-lines",name:"Черный с белыми линиями",image:"/placeholder.svg"},{id:"blue-smoke",name:"Синий дым",image:"/placeholder.svg"},{id:"corners-white",name:"Уголки на белом",image:"/placeholder.svg"},{id:"grey-gradient",name:"Серый градиент",image:"/placeholder.svg"},{id:"keyboard-grey",name:"Клавиатура на сером",image:"/placeholder.svg"},{id:"maze-black",name:"Лабиринт на чёрном",image:"/placeholder.svg"},{id:"orange-planet",name:"Оранжевая планета",image:"/placeholder.svg"},{id:"purple-gradient",name:"Фиолетовый градиент",image:"/placeholder.svg"},{id:"red-white-black",name:"Красная,белая,черная краска",image:"/placeholder.svg"},{id:"white-grey-waves",name:"Белые,серые,черные волны",image:"/placeholder.svg"}]}],variants:[{id:"00-00002024",externalId:"00-00002024",combination:{design:"beige-green"},stock:50,price:1390,image:"/placeholder.svg"},{id:"00-00002017",externalId:"00-00002017",combination:{design:"black-lines"},stock:50,price:1390,image:"/placeholder.svg"},{id:"00-00002021",externalId:"00-00002021",combination:{design:"blue-smoke"},stock:50,price:1390,image:"/placeholder.svg"},{id:"00-00002020",externalId:"00-00002020",combination:{design:"corners-white"},stock:50,price:1390,image:"/placeholder.svg"},{id:"00-00002022",externalId:"00-00002022",combination:{design:"grey-gradient"},stock:50,price:1390,image:"/placeholder.svg"},{id:"00-00002025",externalId:"00-00002025",combination:{design:"keyboard-grey"},stock:50,price:1390,image:"/placeholder.svg"},{id:"00-00002019",externalId:"00-00002019",combination:{design:"maze-black"},stock:50,price:1390,image:"/placeholder.svg"},{id:"00-00002018",externalId:"00-00002018",combination:{design:"orange-planet"},stock:50,price:1390,image:"/placeholder.svg"},{id:"00-00002023",externalId:"00-00002023",combination:{design:"purple-gradient"},stock:50,price:1390,image:"/placeholder.svg"}
2893,{id:"00-00001972",externalId:"00-00001972",combination:{design:"red-white-black"},stock:50,price:1390,image:"/placeholder.svg"},{id:"00-00001975",externalId:"00-00001975",combination:{design:"white-grey-waves"},stock:50,price:1390,image:"/placeholder.svg"}],sections:[{id:"mp-jacquard",type:"text-image",title:"JACQUARD SPEED",subtitle:"Идеальный баланс",content:"Специальное плетение нитей жаккард создает поверхность, которая не слишком гладкая (как Speed) и не слишком шершавая (как Control). Это универсальное решение для любых сенсоров и стилей игры.",image:"/placeholder.svg",alignment:"right",theme:"dark"},{id:"mp-edges",type:"text-image",title:"УСИЛЕННЫЕ КРАЯ",subtitle:"Долговечность",content:"Плотный оверлок по периметру предотвращает отслоение ткани от резиновой основы даже после многочисленных стирок и активного использования.",image:"/placeholder.svg",alignment:"left",theme:"light"},{id:"mp-base",type:"text-image",title:"НЕСКОЛЬЗЯЩАЯ ОСНОВА",subtitle:"Rubber Base",content:"Основание из натуральной резины с текстурным рисунком намертво прилипает к столу. Коврик не сдвинется с места даже во время самых резких фликов.",image:"/placeholder.svg",alignment:"right",theme:"dark"},{id:"reviews-mp",type:"reviews",title:"ОТЗЫВЫ",theme:"light"}]}],Iw=[{id:"mic-a6t",name:"VOROTEX A6T",category:Te.MICROPHONE,price:4190,originalPrice:5190,stock:120,isNewArrival:!0,image:"/placeholder.svg",gallery:["/placeholder.svg","/placeholder.svg","/placeholder.svg","/placeholder.svg"],description:"Конденсаторный USB микрофон с пантографом, RGB подсветкой и сенсорным мутом.",longDescription:"VOROTEX A6T — это готовое решение для стримера. В комплекте идет надежный пантограф (стойка), который крепится к столу и позволяет разместить микрофон идеально. Микрофон оснащен капсюлем с частотой дискретизации 192 кГц/24 бит для кристально чистого голоса. Сенсорная кнопка отключения звука (Mute) на верхней грани позволяет мгновенно заглушить микрофон одним касанием. Яркая RGB подсветка создает атмосферу, а регулятор громкости на дне позволяет быстро подстроить уровень сигнала.",features:["Pantograph Included","192kHz/24bit","Touch Mute","RGB Lighting","Gain Knob"],specs:{"Тип микрофона":"Конденсаторный",Направленность:"Кардиоидная","Частота дискретизации":"192 кГц / 24 бит","Частотный диапазон":"20 Гц - 20 кГц",Чувствительность:"40 дБ ± 3 дБ","Соотношение сигнал/шум":"> 85 дБ",Подключение:"USB Type-C / USB-A","Выход на наушники":"3.5 мм (Мониторинг)",Комплектация:"Микрофон, Пантограф, Поп-фильтр, Кабель",Размеры:"55 x 130 мм",Вес:"116 г (микрофон) / 578 г (в сборе)",Материал:"ABS + Металл",Совместимость:"Windows, MacOS, Linux, Android"},rating:5,seo:{title:"A6T Игровой Микрофон с Пантографом | RGB, 192kHz | VOROTEX",description:"Купить микрофон VOROTEX A6T с пантографом. Студийное качество 192kHz/24bit, RGB подсветка, сенсорный Mute. Идеален для стримов и подкастов.",keywords:"микрофон с пантографом, vorotex a6t, игровой микрофон, usb микрофон, стрим микрофон",
2893indexing:!0},options:[{id:"color",name:"Цвет",type:"color",values:[{id:"black",name:"Чёрный",value:"#111111"},{id:"white",name:"Белый",value:"#ffffff"}]}],variants:[{id:"00-00001919",externalId:"00-00001919",combination:{color:"black"},stock:70,price:4190,image:"/placeholder.svg"},{id:"00-00001920",externalId:"00-00001920",combination:{color:"white"},stock:50,price:4190,image:"/placeholder.svg"}],sections:[{id:"a6t-quality",type:"text-image",title:"СТУДИЙНЫЙ ЗВУК",subtitle:"192 кГц / 24 бит",content:"Высокая частота дискретизации обеспечивает захват голоса с мельчайшими деталями. Кардиоидная направленность отсекает лишние шумы сзади и по бокам, фокусируясь на вашем голосе.",image:"/placeholder.svg",alignment:"right",theme:"dark"},{id:"a6t-stand",type:"text-image",title:"ПОЛНЫЙ КОМПЛЕКТ",subtitle:"Пантограф в коробке",content:"Забудьте о покупке дополнительных стоек. A6T поставляется с качественным пантографом, который надежно крепится к краю стола и позволяет расположить микрофон в идеальной позиции.",image:"/placeholder.svg",alignment:"left",theme:"light"},{id:"a6t-controls",type:"features",title:"УПРАВЛЕНИЕ",theme:"light",items:[{title:"Сенсорная кнопка Mute сверху",icon:"zap"},{title:"Регулятор усиления (Gain) снизу",icon:"volume"},{title:"RGB подсветка (смена режимов)",icon:"star"},{title:"Подключение без драйверов",icon:"download"}]},{id:"reviews-a6t",type:"reviews",title:"ОТЗЫВЫ",theme:"light"}]},{id:"mic-a6",name:"VOROTEX A6",category:Te.MICROPHONE,price:2690,stock:150,isNewArrival:!0,image:"/placeholder.svg",gallery:["/placeholder.svg","/placeholder.svg","/placeholder.svg","/placeholder.svg"],description:"Настольный USB микрофон с RGB подсветкой и сенсорным управлением. Компактное решение.",longDescription:"VOROTEX A6 — компактный и мощный инструмент для общения. Оснащен тем же высококлассным капсюлем, что и старшая модель A6T, но поставляется с устойчивой настольной подставкой-триподом. Сенсорная кнопка Mute с индикацией, регулировка чувствительности и яркая RGB подсветка делают его отличным выбором для геймеров и начинающих стримеров.",features:["Table Stand","192kHz/24bit","Touch Mute","RGB Lighting"],specs:{"Тип микрофона":"Конденсаторный",Направленность:"Кардиоидная","Частота дискретизации":"192 кГц / 24 бит","Частотный диапазон":"20 Гц - 20 кГц",Чувствительность:"40 дБ ± 3 дБ",Подключение:"USB Type-C","Выход на наушники":"3.5 мм",Комплектация:"Микрофон, Настольная подставка, Шок-маунт",Размеры:"55 x 130 мм",Вес:"116 г (микрофон) / 310 г (со стойкой)",Материал:"ABS + Металл",Совместимость:"Windows, MacOS, Linux, Android"},rating:4.9,seo:{title:"A6 USB Микрофон Настольный | RGB, Сенсорный Mute | VOROTEX",description:"Настольный микрофон VOROTEX A6. Студийный звук, RGB подсветка, удобное управление. Подходит для Discord, Zoom, стримов.",keywords:"vorotex a6, настольный микрофон, микрофон для пк, usb микрофон, rgb микрофон",indexing:!0},options:[{id:"color",name:"Цвет",type:"color",values:[{id:"black",name:"Чёрный",value:"#111111"},{id:"white",name:"Белый",value:"#ffffff"}]}],variants:[{id:"00-00001889",externalId:"00-00001889",combination:{color:"black"},stock:80,price:2690,image:"/placeholder.svg"},{id:"00-00001890",externalId:"00-00001890",combination:{color:"white"},stock:70,price:2690,image:"/placeholder.svg"}],sections:[{id:"a6-compact",type:"text-image",title:"КОМПАКТНОСТЬ",subtitle:"Настольная стойка",content:"Устойчивая подставка с антивибрационным креплением (шок-маунт) гасит вибрации от клавиатуры и ударов по столу. Микрофон занимает минимум места.",image:"/placeholder.svg",alignment:"left",theme:"light"},{id:"a6-rgb",type:"text-image",title:"RGB АТМОСФЕРА",subtitle:"Двухзонная подсветка",content:"Плавные переливы цветов создают нужный вайб. Подсветку можно отключить или изменить режим долгим нажатием на сенсорную кнопку.",image:"/placeholder.svg",alignment:"right",theme:"dark"},{id:"reviews-a6",type:"reviews",title:"ОТЗЫВЫ",theme:"light"}]}],fn=[...Bw,...Vw,...Lw,...Uw,...Iw,...Hw,...Xw],Ap=[{id:"r1",name:"Дмитрий Калинин",source:"(OZON)",text:"Клавиатура просто пушка, превзошла все ожидания! Тайпинг невероятно тихий и приятный, стабилизаторы смазаны идеально с завода — никакого звона или дребезга. За эти деньги лучше механики на рынке сейчас просто не найти. Очень доволен покупкой.",product:"K680 PRO",productId:"kb-k680-pro",stars:5},{id:"r2",name:"Алина В.",source:"(WB)",text:"Взяла белую версию K680 для рабочего места. Подсветка очень яркая и сочная, есть куча режимов, которые легко настроить. Свитчи Matcha - это любовь с первого нажатия, пальцы просто отдыхают при печати текстов.",product:"K680 PRO",productId:"kb-k680-pro",stars:5},{id:"r_k680_3",name:"Евгений С.",source:"(ЯМ)",text:"Шумоизоляция на высоте, корпус совсем не резонирует. Никакого звона пружин, только чистый звук. Поддержка VIA — это вообще отдельная тема, переназначил все клавиши как мÐ
2893½Ðµ удобно для работы и игр.",product:"K680 PRO",productId:"kb-k680-pro",stars:5},{id:"r_k680_4",name:"Сергей Петров",source:"(OZON)",text:"Роллер громкости очень удобный и тактильно приятный, не люфтит. Сама клавиатура компактная, на столе много места не занимает, что критично для шутеров. Свитчи смазаны отлично, ход плавный.",product:"K680 PRO",productId:"kb-k680-pro",stars:5},{id:"r_k680_5",name:"Максим Г.",source:"(WB)",text:"Отличный борд за свой прайс, конкуренты стоят дороже. Смазка присутствует везде где надо, стабилизаторы не гремят, пробел звучит глухо и приятно. Рекомендую всем, кто ищет качественную механику!",product:"K680 PRO",productId:"kb-k680-pro",stars:5},{id:"r_k680gr_1",name:"Максим Власов",source:"(OZON)",text:"Градиент выглядит вживую просто бомба, фотографии не передают всей красоты! Свитчи тихие, смазаны, нажатия очень легкие. Крутилка громкости работает четко, металлический фил.",product:"VOROTEX K680GR",productId:"kb-k680gr",stars:5},{id:"r_k680gr_2",name:"Светлана П.",source:"(WB)",text:"Очень красивая клавиатура, идеально вписалась в интерьер. Белая подсветка не режет глаза даже ночью, очень мягкое свечение. Кнопки нажимаются мягко, пальцы не устают.",product:"VOROTEX K680GR",productId:"kb-k680gr",stars:5},{id:"r_k680gr_3",name:"Александр",source:"(ЯМ)",text:"За такую цену - абсолютный топ. Грейдиент стильный и необычный, все друзья спрашивают модель. Свичи красные тихие, для игр подходят идеально, отклик мгновенный.",product:"VOROTEX K680GR",productId:"kb-k680gr",stars:5},{id:"r_k680gr_4",name:"Кирилл С.",source:"(OZON)",text:"Крутилка - вещь! Удобно регулировать звук в игре, не сворачивая окно. Сама клава тяжеленькая, увесистая, по столу не скользит даже при активном геймплее.",product:"VOROTEX K680GR",productId:"kb-k680gr",stars:5},{id:"r_k680gr_5",name:"Елена Д.",source:"(WB)",text:"Брала мужу в подарок, он доволен как слон. Сказал, что это лучшая клавиатура, которая у него была. Выглядит намного дороже своей цены, пластик качественный.",product:"VOROTEX K680GR",productId:"kb-k680gr",stars:5},{id:"r4",name:"Иван Сергеевич",source:"(OZON)",text:"Металлическая панель на K87S придает невероятной солидности и жесткости конструкции. Свитчи Dreamkey работают четко и предсказуемо, никаких даблкликов за полгода использования.",product:"K87S",productId:"kb-k87s",stars:5},{id:"r_k87s_2",name:"Сергей М.",source:"(WB)",text:"Для CS2 и других шутеров — идеально. Отклик моментальный, никаких задержек. Металл холодит руку, ощущается как премиальный продукт, хотя цена очень демократичная.",product:"K87S",productId:"kb-k87s",stars:5},{id:"r_k87s_3",name:"Павел",source:"(ЯМ)",text:"Действительно неубиваемая клава. Скелетон дизайн позволяет легко чистить от пыли и крошек, просто продул и все. Подсветка яркая, но не слепит глаза.",product:"K87S",productId:"kb-k87s",stars:5},{id:"r_k87s_4",name:"Алексей",source:"(OZON)",text:"Взял на красных свитчах, очень тихие для механики. Стабилизаторы нормальные, пробел не гремит как на дешевых аналогах. За свои деньги — просто огонь!",product:"K87S",productId:"kb-k87s",stars:5},{id:"r_k87s_5",name:"Мария К.",source:"(WB)",text:"Сын доволен подарком. Светится как новогодняя елка, режимов куча, можно настроить под себя. Собрана качественно, ничего не скрипит и не люфтит.",product:"K87S",productId:"kb-k87s",stars:5},{id:"r_k870_1",name:"Владислав Т.",source:"(OZON)",text:"Роллер громкости очень удобный, привык к нему моментально! Сама клавиатура тяжелая, по столу не ездит благодаря хорошим ножкам. TNT свитчи понравились, плавные.",product:"K870",productId:"kb-k870",stars:5},{id:"r_k870_2",name:"Олег",source:"(WB)",text:"Доп кейкапы в комплекте - приятный бонус, сразу поменял Enter и Esc. Желтые свитчи очень плавные, смазаны с завода, печатать одно удовольствие.",product:"K870",productId:"kb-k870",stars:5},{id:"r_k870_3",name:"Дмитрий Орлов",source:"(ЯМ)",text:"TKL формат - золотая середина для геймера. Места на столе больше для мыши, а функционал тот же, что и у полной. Рекомендую всем, кто ценит эргономику.",product:"K870",productId:"kb-k870",stars:5},{id:"r_k870_4",name:"Анна В.",source:"(OZON)",text:'Очень приятный тайпинг, такой глухой благородный звук "thock". Подсветка настраивается легко, софт понятный и не глючит. Выглядит очень стильно.',product:"K870",productId:"kb-k870",stars:5},{id:"r_k870_5",name:"Виктор Г.",source:"(WB)",text:"Для соревновательных шутеров самое то. Быстрые свитчи, срабатывают мгновенно. Ничего не люфтит, сборка монолитная, ощущается надежность.",product:"K870",productId:"kb-k870",stars:5},{id:"r_k680std_1",name:"Артур П.",source:"(ЯМ)",text:"Компактная пушка! Роллер на 65% клаве это большая редкость, и это супер удобно. Свитчи TNT плавные, без эффекта песка. Очень доволен покупкой.",product:"K680",productId:"kb-k680-std",stars:5},{id:"r_k680std_2",name:"Виктория",source:"(OZON)",text:"Взяла фиолетовую расцветку, цвет просто бомба, очень нежный. Очень маленькая, но удобная, все нужные клавиши и стрелки есть. На столе смотрится аккуратно.",product:"K680",productId:"kb-k680-std",stars:5},{id:"r_k680std_3",name:"Максим К.",source:"(WB)",text:"Лучшая бюджетная 65% механика на данный момент. Смазка есть с завода, стабы не звенят. Роллер работает четко, можно регулировать звук и яркость.",product:"K680",productId:"kb-k680-std",stars:5},{id:"r_k680std_4",name:"Егор",source:"(ЯМ)",text:"Перешел с полноразмерной клавиатуры, привык буквально за день. Столько места для мышки освободилось! Теперь играть с низкой сенсой намного удобнее.",product:"K680",productId:"kb-k680-std",stars:5},{id:"r_k680std_5",name:"Никита Р.",source:"(OZON)",text:"Топ за свои деньги. Подсветка яркая, много режимов. Свитчи тихие, соседей не разбудят. Кабель съемный Type-C, можно подключить свой кастомный.",product:"K680",productId:"kb-k680-std",stars:5},{id:"r_k630w_1",name:"Игорь С.",source:"(WB)",text:"Наконец-то беспровод! Никаких проводов на столе, полная свобода. Задержки в играх не заметил вообще (подключаю по 2.4G свистку). Отклик мгновенный.",product:"K630W",productId:"kb-k630w",stars:5},{id:"r_k630w_2",name:"Алексей Иванов",source:"(OZON)",text:"Батарею держит удивительно долго. Подключаю к маку по блютуз для работы, к пк по свистку для игр. Переключается между устройствами мгновенно.",product:"K630W",productId:"kb-k630w",stars:5},{id:"r_k630w_3",name:"Вячеслав",source:"(ЯМ)",text:"Очень компактная, беру с собой с ноутбуком в поездки. Желтые свитчи тихие, в офисе или коворкиÐ
2893½Ð³Ðµ никому не мешаю своим печатанием.",product:"K630W",productId:"kb-k630w",stars:5},{id:"r_k630w_4",name:"Марина Л.",source:"(WB)",text:"Цвет beige-green очень красивый, такой приятный ретро стиль. Работает отлично, без глюков и отвалов связи. Очень довольна покупкой.",product:"K630W",productId:"kb-k630w",stars:5},{id:"r_k630w_5",name:"Денис",source:"(OZON)",text:"За беспроводную механику такого качества цена просто подарок. Сборка на высоте, ничего не скрипит, корпус монолитный. Рекомендую к покупке.",product:"K630W",productId:"kb-k630w",stars:5},{id:"r_k610_1",name:"Денис В.",source:"(OZON)",text:"За такие деньги - это просто имба! Красные свитчи очень мягкие и отзывчивые, играть в быстрые шутеры одно удовольствие. Реакция мгновенная.",product:"VOROTEX K610 LIGHT",productId:"kb-k610-light",stars:5},{id:"r_k610_2",name:"Константин",source:"(WB)",text:"Оранжевые кейкапы в комплекте - топ тема, сразу поставил на WASD и пробел. Сразу преобразил вид клавиатуры. Боковая подсветка тоже радует глаз.",product:"VOROTEX K610 LIGHT",productId:"kb-k610-light",stars:5},{id:"r_k610_3",name:"Андрей П.",source:"(ЯМ)",text:"Маленькая, удобная, ничего лишнего. Для КС и Валоранта самое то. Места на столе теперь вагон, можно махать мышкой как угодно.",product:"VOROTEX K610 LIGHT",productId:"kb-k610-light",stars:5},{id:"r_k610_4",name:"Ольга",source:"(OZON)",text:"Брала сыну в подарок, он в полном восторге. Светится ярко, нажимается приятно. Говорит, что играть стало намного удобнее и приятнее.",product:"VOROTEX K610 LIGHT",productId:"kb-k610-light",stars:5},{id:"r_k610_5",name:"Станислав",source:"(WB)",text:"Топ за свои бабки. Хотсвап есть, можно потом свитчи поменять на какие захочешь. Но стоковые красные тоже вполне норм, смазаны неплохо.",product:"VOROTEX K610 LIGHT",productId:"kb-k610-light",stars:5},{id:"r_k680l_1",name:"Антон К.",source:"(OZON)",text:"Боковая подсветка решает! Выглядит очень футуристично, создает классный эмбиент на столе. Роллер работает четко, без люфтов.",product:"VOROTEX K680 LIGHT",productId:"kb-k680-light",stars:5},{id:"r_k680l_2",name:"Михаил",source:"(WB)",text:"Стильная, компактная клавиатура. Бирюзовые кейкапы (которые идут допом) выглядят свежо и необычно. Свитчи тихие, для ночных каток самое то.",product:"VOROTEX K680 LIGHT",productId:"kb-k680-light",stars:5},{id:"r_k680l_3",name:"Евгений Р.",source:"(ЯМ)",text:"Роллер на такой малютке - это настоящий кайф. Звук регулирую не сворачивая игру и не отрываясь от процесса. Однозначно рекомендую.",product:"VOROTEX K680 LIGHT",productId:"kb-k680-light",stars:5},{id:"r_k680l_4",name:"Алиса М.",source:"(OZON)",text:"Очень красивая контурная подсветка по бокам, создает уютную атмосферу. Сама клавиатура собрана добротно, тяжеленькая, не скользит.",product:"VOROTEX K680 LIGHT",productId:"kb-k680-light",stars:5},{id:"r_k680l_5",name:"Владислав",source:"(WB)",text:"Лучшее соотношение цена/качество/внешний вид. Выглядит намного дороже, чем стоит на самом деле. Покупкой полностью доволен.",product:"VOROTEX K680 LIGHT",productId:"kb-k680-light",stars:5},{id:"r_k840l_1",name:"Артем С.",source:"(WB)",text:"Искал именно 75% с роллером, так как часто пользуюсь F-клавишами. Эта клава идеальна. Места мало занимает, а функционал полный.",product:"VOROTEX K840 LIGHT",productId:"kb-k840-light",stars:5},{id:"r_k840l_2",name:"Сергей П.",source:"(OZON)",text:"Удобная раскладка, привыкать долго не пришлось. Клавиши F1-F12 на месте, для работы нужно. Красные свитчи не шумят, ход плавный.",product:"VOROTEX K840 LIGHT",productId:"kb-k840-light",stars:5},{id:"r_k840l_3",name:"Дмитрий",source:"(ЯМ)",text:"Боковая подсветка - просто огонь. В темноте смотрится шикарно, как космический корабль. Стабилизаторы смазаны, пробел не звенит.",product:"VOROTEX K840 LIGHT",productId:"kb-k840-light",stars:5}
2893,{id:"r_k840l_4",name:"Елена",source:"(OZON)",text:"Отличная клавиатура для домашнего использования. Компактная, но функциональная. Сын доволен, говорит играть стало удобнее.",product:"VOROTEX K840 LIGHT",productId:"kb-k840-light",stars:5},{id:"r_k840l_5",name:"Максим",source:"(WB)",text:"Взял на замену старой мембранке. Это просто небо и земля. Отклик быстрый, печатать приятно, пальцы сами летают по клавишам.",product:"VOROTEX K840 LIGHT",productId:"kb-k840-light",stars:5},{id:"r_k980l_1",name:"Сергей В.",source:"(ЯМ)",text:'Нужен был нампад для работы, но не хотел огромный "гроб" на столе. K980 Light - то что надо, компактная и с цифрами.',product:"VOROTEX K980 LIGHT",productId:"kb-k980-light",stars:5},{id:"r_k980l_2",name:"Ольга Т.",source:"(OZON)",text:"Бухгалтер оценил! Цифровой блок есть, вводить данные удобно, а места занимает мало. Клавиши мягкие, не клацают на весь офис.",product:"VOROTEX K980 LIGHT",productId:"kb-k980-light",stars:5},{id:"r_k980l_3",name:"Виктор",source:"(WB)",text:"Формат 98% самый удобный и сбалансированный. И поиграть с комфортом, и поработать с таблицами. Роллер тоже очень в тему.",product:"VOROTEX K980 LIGHT",productId:"kb-k980-light",stars:5},{id:"r_k980l_4",name:"Антон М.",source:"(OZON)",text:"Боковая подсветка прикольная, добавляет стиля. Сборка крепкая, корпус не скрипит и не люфтит. За эти деньги супер вариант.",product:"VOROTEX K980 LIGHT",productId:"kb-k980-light",stars:5},{id:"r_k980l_5",name:"Кира С.",source:"(ЯМ)",text:"Красивая, удобная, тихая. Что еще нужно для счастья? Рекомендую к покупке, не пожалеете.",product:"VOROTEX K980 LIGHT",productId:"kb-k980-light",stars:5},{id:"r_sk820w_1",name:"Евгений К.",source:"(ЯМ)",text:'Экранчик - это настоящий киллер фича! Показывает заряд в процентах, очень удобно. Поставил гифку с котиком, радует глаз. Тайпинг "thocky" из коробки.',product:"VOROTEX SK820W",productId:"kb-sk820w",stars:5},{id:"r_sk820w_2",name:"Александр Р.",source:"(OZON)",text:'Чувствуется премиум сегмент. Gasket mount реально работает, клавиатура "флексит" при печати. Звук бомба, глубокий и насыщенный.',product:"VOROTEX SK820W",productId:"kb-sk820w",stars:5},{id:"r_sk820w_3",name:"Михаил Б.",source:"(WB)",text:"Батарея держит целую вечность. Забыл когда заряжал последний раз, хотя пользуюсь каждый день. Экранчик информативный и полезный.",product:"VOROTEX SK820W",productId:"kb-sk820w",stars:5},{id:"r_sk820w_4",name:"Екатерина",source:"(OZON)",text:"Очень красивая клавиатура, особенно в белом цвете. Экран можно настроить под себя. Тайпинг тихий и приятный, как ASMR для ушей.",product:"VOROTEX SK820W",productId:"kb-sk820w",stars:5},{id:"r_sk820w_5",name:"Павел Д.",source:"(WB)",text:"Беспроводная связь работает идеально, без лагов и обрывов. Играю в CS на высоком уровне, разницы с проводом не чувствую. Топ!",product:"VOROTEX SK820W",productId:"kb-sk820w",stars:5},{id:"r_k980_1",name:"Константин Л.",source:"(WB)",text:"Наконец-то нашел компактную клаву с нампадом! Для работы в экселе и игр идеально подходит. Сборка монолитная.",product:"VOROTEX K980",productId:"kb-k980",stars:5}
2893,{id:"r_k980_2",name:"Павел С.",source:"(OZON)",text:"Качество материалов отличное, пластик приятный. Тяжелая, на столе стоит как влитая. Свитчи TNT Yellow супер плавные.",product:"VOROTEX K980",productId:"kb-k980",stars:5},{id:"r_k980_3",name:"Ирина В.",source:"(ЯМ)",text:"Мужу очень понравилась. Говорит, что идеальный размер. И кнопки все нужные есть, и места на столе не много занимает.",product:"VOROTEX K980",productId:"kb-k980",stars:5},{id:"r_k980_4",name:"Алексей Г.",source:"(OZON)",text:"Роллер громкости работает четко, без ложных срабатываний. Подсветка настраивается. Тайпинг приятный, смазанный, ничего не гремит.",product:"VOROTEX K980",productId:"kb-k980",stars:5},{id:"r_k980_5",name:"Вадим Т.",source:"(WB)",text:'Хорошая альтернатива полноразмерным "гробам". 1800 раскладка очень удобная, привыкаешь быстро. Рекомендую.',product:"VOROTEX K980",productId:"kb-k980",stars:5},{id:"r5",name:"Григорий",source:"(WB)",text:"P61 - отличный вариант для маленького стола или если часто ездите. Пудинг кейкапы выглядят шикарно, светятся целиком.",product:"P61",productId:"kb-p61",stars:5},{id:"r_p61_2",name:"Даниил К.",source:"(OZON)",text:"Пудинги светятся просто космос! В темноте выглядит нереально круто, заливает светом все вокруг. Свитчи красные, тихие и быстрые.",product:"P61",productId:"kb-p61",stars:5},{id:"r_p61_3",name:"Александр",source:"(ЯМ)",text:"Маленькая, удобная, легкая. Беру с собой в поездки и командировки. Кабель отсоединяется, что очень удобно. Рекомендую.",product:"P61",productId:"kb-p61",stars:5},{id:"r_p61_4",name:"Вероника",source:"(WB)",text:"Брала белую версию, очень красивая и эстетичная. Подсветка заливает всю клавиатуру мягким светом. Нажимается мягко.",product:"P61",productId:"kb-p61",stars:5},{id:"r_p61_5",name:"Олег М.",source:"(OZON)",text:"За эти деньги просто топ. Хотсвап есть, кейкапы качественные, подсветка яркая. Для начала пути в механике - идеально.",product:"P61",productId:"kb-p61",stars:5},{id:"r_p82_1",name:"Виктор С.",source:"(OZON)",text:"P82 — золотая середина по размеру. Компактная, но стрелки и F-ряд есть. Пудинг кейкапы радуют глаз своей яркостью.",product:"P82",productId:"kb-p82",stars:5},{id:"r_p82_2",name:"Андрей Б.",source:"(WB)",text:"Очень нравится подсветка из-за пудинг кейкапов, выглядит очень необычно. Свитчи Outemu Red работают без нареканий, ход плавный.",product:"P82",productId:"kb-p82",stars:5},{id:"r_p82_3",name:"Марина К.",source:"(ЯМ)",text:"Удобный формат 75%. Функциональные клавиши на месте, удобно работать. Выглядит стильно и современно на рабочем столе.",product:"P82",productId:"kb-p82",stars:5},{id:"r_p82_4",name:"Константин",source:"(OZON)",text:"Хорошая сборка, не скрипит при скручивании. Хотсвап рабочий, проверял. Подсветка яркая, много режимов на любой вкус.",product:"P82",productId:"kb-p82",stars:5},{id:"r_p82_5",name:"Илья Р.",source:"(WB)",text:"Отличная клавиатура за свой бюджет. Взял серую с белым, смотрится интересно и Ð
2893½Ðµ скучно. Тайпинг приятный, не громкий.",product:"P82",productId:"kb-p82",stars:5},{id:"r6",name:"Максим П.",source:"(ЯМ)",text:"MK87R в ретро стиле просто бомба. PBT пластик очень приятный на ощупь, шершавый, пальцы не скользят. Выглядит дорого.",product:"MK87R",productId:"kb-mk87r",stars:5},{id:"r_mk87r_2",name:"Роман Т.",source:"(OZON)",text:"Беспровод работает стабильно, никаких отвалов. Батарею держит долго. Свитчи Jerrzi очень плавные, смазаны великолепно.",product:"MK87R",productId:"kb-mk87r",stars:5},{id:"r_mk87r_3",name:"Алина С.",source:"(WB)",text:'Дизайн "Starry Blue" очень красивый и необычный. Клавиши не стираются, PBT же. Звук тихий, глухой и приятный.',product:"MK87R",productId:"kb-mk87r",stars:5},{id:"r_mk87r_4",name:"Денис К.",source:"(ЯМ)",text:"Строгая клавиатура без лишней новогодней елки с подсветкой. Для работы и игр идеально подходит. Качество сборки на высоте.",product:"MK87R",productId:"kb-mk87r",stars:5},{id:"r_mk87r_5",name:"Владимир",source:"(OZON)",text:"Тяжелая, добротная клавиатура. Сразу чувствуется вещь, а не дешевая погремушка. Хотсвап есть, но стоковые свитчи и так отличные.",product:"MK87R",productId:"kb-mk87r",stars:5},{id:"r_m68_1",name:"Наталья В.",source:"(OZON)",text:"Покупала ребенку в подарок, он в полном восторге. Светится ярко, нажимается мягко. Очень компактная, на столе порядок.",product:"VOROTEX M68",productId:"kb-m68",stars:5},{id:"r_m68_2",name:"Сергей О.",source:"(WB)",text:"За свои деньги отличная мембранка. Тихая, никому не мешаю ночью, когда играю. Подсветка красивая, есть разные режимы.",product:"VOROTEX M68",productId:"kb-m68",stars:5},{id:"r_m68_3",name:"Дмитрий",source:"(ЯМ)",text:"Маленькая, легкая. Беру с собой в рюкзак, места не занимает. Работает четко, кнопки не залипают, отклик нормальный.",product:"VOROTEX M68",productId:"kb-m68",stars:5},{id:"r_m68_4",name:"Ольга П.",source:"(OZON)",text:"Розовый цвет очень нежный и приятный. Дочка довольна подарком. Светится разными цветами, можно менять режимы.",product:"VOROTEX M68",productId:"kb-m68",stars:5},{id:"r_m68_5",name:"Максим",source:"(WB)",text:"Как первая игровая клавиатура - супер вариант. Недорогая, но стильная, удобная и выполняет свои функции на 100%.",product:"VOROTEX M68",productId:"kb-m68",stars:5},{id:"r_ak820_1",name:"Борис Л.",source:"(ЯМ)",text:"Экран - это нечто! Поставил гифку с котиком, теперь радуюсь каждый раз. Тайпинг божественный, Peach свитчи очень мягкие и тихие.",product:"VOROTEX AK820 PRO",productId:"kb-ak820-pro",stars:5},{id:"r_ak820_2",name:"Артем К.",source:"(OZON)",text:'Лучшая клавиатура, что у меня была. Gasket mount реально работает, клавиатура "флексит" при печати. Звук бомба, глубокий и насыщенный.',product:"VOROTEX AK820 PRO",productId:"kb-ak820-pro",stars:5},{id:"r_ak820_3",name:"Ксения М.",source:"(WB)",text:"Беспровод работает идеально, заряд держит долго. Ð
2893’ыглядит очень дорого и стильно. Экранчик - любовь с первого взгляда.",product:"VOROTEX AK820 PRO",productId:"kb-ak820-pro",stars:5},{id:"r_ak820_4",name:"Иван Д.",source:"(ЯМ)",text:"Полная шумоизоляция, никаких посторонних звуков и эха корпуса. Свитчи тихие линейные, печатать одно удовольствие. Рекомендую.",product:"VOROTEX AK820 PRO",productId:"kb-ak820-pro",stars:5},{id:"r_ak820_5",name:"Юрий В.",source:"(OZON)",text:"Топ за свои деньги. Конкуренты с экраном и такой начинкой стоят в 2 раза дороже. VOROTEX молодцы, сделали крутой продукт.",product:"VOROTEX AK820 PRO",productId:"kb-ak820-pro",stars:5},{id:"r_k940gr_1",name:"Олег С.",source:"(OZON)",text:"Градиент выглядит шикарно, очень необычно! Нампадом пользуюсь постоянно по работе, очень удобно, что клавиатура при этом компактнее обычной.",product:"VOROTEX K940GR",productId:"kb-k940gr",stars:5},{id:"r_k940gr_2",name:"Мария Ф.",source:"(WB)",text:"Синяя подсветка очень приятная, спокойная, не бьет в глаза. Клавиши нажимаются легко и четко. Градиентная расцветка супер.",product:"VOROTEX K940GR",productId:"kb-k940gr",stars:5},{id:"r_k940gr_3",name:"Андрей В.",source:"(ЯМ)",text:"Хорошая сборка, тяжелая, добротная. Боковое подключение кабеля мне зашло, намного удобнее для подключения к ноуту сбоку.",product:"VOROTEX K940GR",productId:"kb-k940gr",stars:5},{id:"r_k940gr_4",name:"Виталий",source:"(OZON)",text:"94 клавиши - идеальный формат. И компактно, и цифры есть для работы. Свитчи красные, тихие, играть комфортно.",product:"VOROTEX K940GR",productId:"kb-k940gr",stars:5},{id:"r_k940gr_5",name:"Светлана",source:"(WB)",text:"Очень стильная клавиатура, привлекает внимание гостей. Градиент выглядит дорого. Работает отлично, никаких нареканий.",product:"VOROTEX K940GR",productId:"kb-k940gr",stars:5},{id:"r_k870gr_1",name:"Сергей Н.",source:"(WB)",text:"Классический TKL в крутом дизайне. Белая подсветка смотрится стильно и строго, без лишней радуги. Для минималистичного сетапа самое то.",product:"VOROTEX K870GR",productId:"kb-k870gr",stars:5},{id:"r_k870gr_2",name:"Анна Л.",source:"(OZON)",text:"Градиент вживую еще лучше чем на фото, очень плавный переход. Очень красивая. Свитчи мягкие, играть и печатать удобно.",product:"VOROTEX K870GR",productId:"kb-k870gr",stars:5},{id:"r_k870gr_3",name:"Максим Б.",source:"(ЯМ)",text:"Качественная механика за адекватную цену. Хотсвап есть, стабы смазаны, ничего не гремит. Однозначно рекомендую к покупке.",product:"VOROTEX K870GR",productId:"kb-k870gr",stars:5},{id:"r_k870gr_4",name:"Дмитрий К.",source:"(OZON)",text:"Белая подсветка - это топ. Никакой радуги, все строго и со вкусом. Градиент добавляет изюминку во внешний вид. Доволен.",product:"VOROTEX K870GR",productId:"kb-k870gr",stars:5},{id:"r_k870gr_5",name:"Елена С.",source:"(WB)",text:"Брала для работы и иногда поиграть вечером. Очень довольна. Руки не устают благодаря профилю клавиш, звук приятный и не громкий.",product:"VOROTEX K870GR",productId:"kb-k870gr",stars:5}],Dp=[{id:"r_o3c_1",name:"Кирилл О.",source:"(OZON)",text:"Rapid Trigger - это реально читы для OSU! Стримлю 200bpm, задержки ноль. Экранчик топ, поставил свою аву. Розовые свитчи работают идеально.",product:"VOROTEX S
2893ayoDevice O3C",productId:"kb-sayodevice-o3c",stars:5},{id:"r_o3c_2",name:"Максим",source:"(WB)",text:"Магнитные свитчи Pink Switch очень плавные, настраиваются через веб-сайт за секунду. Не нужно качать китайский софт. Крутилка удобная.",product:"VOROTEX SayoDevice O3C",productId:"kb-sayodevice-o3c",stars:5},{id:"r_o3c_3",name:"Алина",source:"(ЯМ)",text:"Маленькая, красивая, функциональная. Использую для макросов в фотошопе и иногда играю в ритм-игры. O3C++ версия с экраном стоит переплаты.",product:"VOROTEX SayoDevice O3C",productId:"kb-sayodevice-o3c",stars:5},{id:"r_o3c_4",name:"Денис К.",source:"(OZON)",text:"Лучший кейпад на рынке. 8000 герц опрос, мгновенная реакция. Сборка качественная, ничего не люфтит. Белый цвет смотрится чисто.",product:"VOROTEX SayoDevice O3C",productId:"kb-sayodevice-o3c",stars:5},{id:"r_o3c_5",name:"Егор",source:"(WB)",text:"Веб-драйвер это киллер-фича! Настроил и забыл. Экран яркий, цвета сочные. Rapid trigger на Pink свитчах работает как надо.",product:"VOROTEX SayoDevice O3C",productId:"kb-sayodevice-o3c",stars:5},{id:"r_s2s4_1",name:"Константин Л.",source:"(OZON)",text:"Взял S2 чисто под копипаст. Это лучшее вложение 1500 рублей в моей жизни. Работаю с текстами, скорость выросла в разы. Кнопки мягкие, не клацают.",product:"VOROTEX SayoDevice S2",productId:"kb-sayodevice-s2s4",stars:5},{id:"r_s2s4_2",name:"Мария В.",source:"(WB)",text:"S4 использую для OSU mania 4K. Намного удобнее, чем долбить по основной клавиатуре. Свитчи быстрые, задержки нет. Веб-интерфейс понятный.",product:"VOROTEX SayoDevice S4",productId:"kb-sayodevice-s2s4",stars:5},{id:"r_s2s4_3",name:"Артем",source:"(ЯМ)",text:"Отличный макропад. Настроил на S4 управление плеером и микрофоном в дискорде. Места на столе не занимает, выглядит стильно.",product:"VOROTEX SayoDevice S4",productId:"kb-sayodevice-s2s4",stars:5},{id:"r_s2s4_4",name:"Виктор Г.",source:"(OZON)",text:"Качество сборки S2 порадовало. Пластик приятный, кабель длинный. Настройка через сайт - это гениально, никаких драйверов не нужно.",product:"VOROTEX SayoDevice S2",productId:"kb-sayodevice-s2s4",stars:5},{id:"r_s2s4_5",name:"Елена",source:"(WB)",text:"Белая S4 идеально подошла к моему сетапу. Подсветка яркая, но не слепит. Кнопки нажимаются очень легко, пальцы не устают.",product:"VOROTEX SayoDevice S4",productId:"kb-sayodevice-s2s4",stars:5},{id:"r_kmini_1",name:"Никита С.",source:"(OZON)",text:"Взял K02 для OSU! — это просто чит-код. Красные свитчи реагируют моментально, база устойчивая, не скользит при спаме.",product:"VOROTEX K-Mini Series",productId:"kb-k-mini",stars:5},{id:"r_kmini_2",name:"Мария",source:"(WB)",text:"K04 с крутилкой очень помогает в фотошопе. Настроила зум на энкодер и смену инструментов на кнопки. Работа пошла быстрее.",product:"VOROTEX K-Mini Series",productId:"kb-k-mini",stars:5},{id:"r_kmini_3",name:"Дмитрий В.",source:"(ЯМ)",text:"Отличный макропад. Софт простой и понятный, бинды сохраняются в памяти устройства. Сборка добротная.",product:"VOROTEX K-Mini Series",productId:"kb-k-mini",stars:5},{id:"r_kmini_4",name:"Алексей",source:"(OZON)",text:"Использую как пульт для стрима (Ð
2893¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ðµ сцен в OBS). Выглядит стильно, подсветка синхронизируется с остальным сетапом.",product:"VOROTEX K-Mini Series",productId:"kb-k-mini",stars:5},{id:"r_kmini_5",name:"Евгения",source:"(WB)",text:"Маленькая, аккуратная клавиатурка. Очень удобно, что можно поменять свитчи, если захочется.",product:"VOROTEX K-Mini Series",productId:"kb-k-mini",stars:5},{id:"r_k13_1",name:"Владислав Р.",source:"(WB)",text:"Джойстик — это киллер-фича! Настроил на него скролл и зум в премьере, монтаж ускорился в разы. Колесо металлическое, приятное на ощупь.",product:"VOROTEX K13",productId:"kb-k13",stars:5},{id:"r_k13_2",name:"Михаил",source:"(OZON)",text:"Брал чисто для макросов под стрим. 12 кнопок хватает с головой, чтобы переключать сцены и мутить звук. Сборка крепкая, стоит уверенно.",product:"VOROTEX K13",productId:"kb-k13",stars:5},{id:"r_k13_3",name:"Андрей К.",source:"(ЯМ)",text:"Свитчи Kailh Purple тактильно очень приятные. Хотсвап работает, поменял пару свитчей на кликающие ради интереса. Софт понятный.",product:"VOROTEX K13",productId:"kb-k13",stars:5},{id:"r_k13_4",name:"Евгений",source:"(WB)",text:"Идеальный макропад за свои деньги. Подсветка яркая, режимов много. Джойстик можно использовать как стрелочки в играх.",product:"VOROTEX K13",productId:"kb-k13",stars:5},{id:"r_k13_5",name:"Алексей",source:"(OZON)",text:"Компактная, на столе стоит уверенно. Кабель тайп-си съемный, что удобно. Для работы с графикой просто маст-хэв.",product:"VOROTEX K13",productId:"kb-k13",stars:5},{id:"r_k15pro_1",name:"Илья М.",source:"(OZON)",text:"Беспроводной макропад — это свобода. Подключил по 2.4G, задержек нет вообще. Батарею держит долго, заряжаю раз в пару недель.",product:"VOROTEX K15 PRO",productId:"kb-k15-pro",stars:5},{id:"r_k15pro_2",name:"Сергей",source:"(WB)",text:"15 кнопок + джойстик = полноценный пульт управления космолетом. Настроил шорткаты для блендера, теперь левая рука не бегает по всей клавиатуре.",product:"VOROTEX K15 PRO",productId:"kb-k15-pro",stars:5},{id:"r_k15pro_3",name:"Дмитрий",source:"(ЯМ)",text:"Качество пластика отличное, ничего не люфтит. Джойстик аналоговый, работает четко. Очень доволен покупкой.",product:"VOROTEX K15 PRO",productId:"kb-k15-pro",stars:5},{id:"r_k15pro_4",name:"Мария",source:"(OZON)",text:"Подключается к айпаду по блютуз без проблем. Использую для рисования в Procreate как пульт. Очень удобно!",product:"VOROTEX K15 PRO",productId:"kb-k15-pro",stars:5},{id:"r_k15pro_5",name:"Виктор",source:"(WB)",text:"Топовый девайс. Хотсвап есть, подсветка есть, беспровод есть. За этот прайс конкурентов просто нет.",product:"VOROTEX K15 PRO",productId:"kb-k15-pro",stars:5},{id:"r_k12w_1",name:"Анна С.",source:"(WB)",text:"Две крутилки — это гениально. На одну повесила громкость, на другую зум. Работает по радиоканалу стабильно.",product:"VOROTEX K12W",productId:"kb-k12w",stars:5},{id:"r_k12w_2",name:"Павел",source:"(OZON)",text:"Цвет Mint выглядит очень свежо и Ð
2893½ÐµÐ¾Ð±Ñ‹Ñ‡Ð½Ð¾. Сама клавиатурка маленькая, аккуратная. Кнопки нажимаются приятно.",product:"VOROTEX K12W",productId:"kb-k12w",stars:5},{id:"r_k12w_3",name:"Константин",source:"(ЯМ)",text:"Использую для фотошопа. Настроил макросы на слои и кисти. Реально ускоряет работу. Беспроводной режим — огромный плюс.",product:"VOROTEX K12W",productId:"kb-k12w",stars:5},{id:"r_k12w_4",name:"Олег",source:"(OZON)",text:"Свитчи смазаны, тайпинг тихий. Крутилки имеют приятные отсечки. Софт скачал с сайта, настроил за 5 минут.",product:"VOROTEX K12W",productId:"kb-k12w",stars:5},{id:"r_k12w_5",name:"Елена",source:"(WB)",text:"Отличный помощник для ноутбука. Кинула в рюкзак и пошла. Места не занимает, а пользы вагон.",product:"VOROTEX K12W",productId:"kb-k12w",stars:5},{id:"r_k12_1",name:"Артем",source:"(ЯМ)",text:"Взял проводную версию для стационарного ПК. Дешевле беспроводной, а функционал тот же. Крутилки работают как надо.",product:"VOROTEX K12",productId:"kb-k12",stars:5},{id:"r_k12_2",name:"Сергей Л.",source:"(OZON)",text:"Сборка хорошая, пластик не воняет. Подсветка RGB настраивается. Для OSU маловато кнопок, а вот для работы с видео — идеально.",product:"VOROTEX K12",productId:"kb-k12",stars:5},{id:"r_k12_3",name:"Максим",source:"(WB)",text:"Провод длинный, тайп-си. Свитчи можно менять, но стоковые вполне годные. За эту цену — подарок.",product:"VOROTEX K12",productId:"kb-k12",stars:5},{id:"r_k12_4",name:"Владислав",source:"(OZON)",text:"Удобно, что 2 энкодера. Раньше пользовался одной крутилкой на основной клаве, теперь их три — полный контроль над звуком и медиа.",product:"VOROTEX K12",productId:"kb-k12",stars:5},{id:"r_k12_5",name:"Денис",source:"(WB)",text:"Простая и надежная вещь. Макросы пишутся легко, память встроенная, настройки не слетают при подключении к другому компу.",product:"VOROTEX K12",productId:"kb-k12",stars:5},{id:"r_k08_1",name:"Никита",source:"(OZON)",text:"Два порта USB — это супер идея! Подключил кабель сбоку, чтобы не мешал монитору. Сама клава крошечная.",product:"VOROTEX K08",productId:"kb-k08",stars:5},{id:"r_k08_2",name:"Игорь",source:"(WB)",text:"8 кнопок как раз хватает для самых частых макросов. Использую для копипаста и управления плеером. Хотсвап рабочий.",product:"VOROTEX K08",productId:"kb-k08",stars:5},{id:"r_k08_3",name:"Алексей",source:"(ЯМ)",text:"Самый бюджетный вход в мир макропадов. Свитчи красные, тихие. Подсветка есть. Что еще нужно?",product:"VOROTEX K08",productId:"kb-k08",stars:5},{id:"r_k08_4",name:"Роман",source:"(OZON)",text:"Маленькая, легкая, удобная. Собрана крепко. Кабель держится плотно в обоих разъемах. Рекомендую.",product:"VOROTEX K08",productId:"kb-k08",stars:5},{id:"r_k08_5",name:"Андрей",source:"(WB)",text:"Взял чисто чтобы биндить гранаты в CS2. Места не занимает, нажимать удобно. Реакция мгновенная.",product:"VOROTEX K08",productId:"kb-k08",stars:5}],zp=[{id:"f1",name:"Алексей Миронов",source:"(OZON)",text:"Взял полный комплект периферии от этого бренда. V1 - это просто пушинка! 54 грамма в руке не чувствуются. Веб-софт - лучшее решение, не надо ничего качать.",product:"VOROTEX V1",productId:"ms-v1-wireless",stars:5},{id:"f4",name:"Ирина Ковалева",source:"(OZON)",text:"Очень легкая мышь, рука не устает даже после 8 часов работы. Сенсор PAW-3311 работает четко, курсор не срывает. Белый цвет шикарен.",product:"VOROTEX V1",productId:"ms-v1-wireless",stars:5},{id:"ms_rev_1",name:"Егор К.",source:"(WB)",text:"За 2390 рублей лучше не найти. Грипсы в комплекте очень цепкие. Настроил DPI и макросы через браузер за минуту. Подсветка минималистичная, не отвлекает.",product:"VOROTEX V1",productId:"ms-v1-wireless",stars:5},{id:"ms_rev_2",name:"Даниил",source:"(ЯМ)",text:"Перешел с тяжелой проводной мыши. Разница колоссальная. 3 режима подключения - это топ, использую 2.4G для пк и блютуз для ноута.",product:"VOROTEX V1",productId:"ms-v1-wireless",stars:5},{id:"ms_rev_3",name:"Максим",source:"(OZON)",text:"Клик четкий, Huano свитчи не подводят. Колесо прокрутки тихое. Форма очень удобная под среднюю руку. Рекомендую!",product:"VOROTEX V1",productId:"ms-v1-wireless",stars:5}
2893,{id:"rev_g7r_1",name:"Виталий С.",source:"(OZON)",text:"Дизайн просто космос, выглядит очень футуристично. В руке лежит удобно, не скользит. Сенсор не срывает даже при резких движениях. Макросы настроил быстро.",product:"VOROTEX G7R",productId:"ms-g7r",stars:5},{id:"rev_g7r_2",name:"Андрей",source:"(WB)",text:"За свои деньги отличная беспроводная мышь. Желтый цвет очень яркий, выделяется на столе. Аккумулятора хватает надолго.",product:"VOROTEX G7R",productId:"ms-g7r",stars:5},{id:"rev_g7r_3",name:"Марина К.",source:"(ЯМ)",text:"Брала сыну, он в восторге от подсветки и формы. Говорит, в играх стала лучше точность. Пластик приятный на ощупь.",product:"VOROTEX G7R",productId:"ms-g7r",stars:5},{id:"rev_dia_1",name:"Кирилл",source:"(WB)",text:"Прозрачный корпус - это что-то! Вечером с подсветкой выглядит нереально красиво. По технике тоже все ок, сенсор адекватный, клики четкие.",product:"VOROTEX DIAMOND",productId:"ms-diamond",stars:5},{id:"rev_dia_2",name:"Елена П.",source:"(OZON)",text:"Очень стильная мышь. Легкая, удобно лежит в маленькой руке. Подсветка настраивается, можно выбрать любимый цвет.",product:"VOROTEX DIAMOND",productId:"ms-diamond",stars:5},{id:"rev_dia_3",name:"Макс",source:"(ЯМ)",text:"За такую цену - подарок. Выглядит в 3 раза дороже. Играю в Доту, кнопок хватает, сенсор не подводит. Рекомендую!",product:"VOROTEX DIAMOND",productId:"ms-diamond",stars:5},{id:"rev_g6_1",name:"Игорь Т.",source:"(OZON)",text:"Много кнопок - это кайф для MMO. Назначил все скиллы, играть стало намного удобнее. В руке лежит плотно, есть упор под палец.",product:"VOROTEX G6",productId:"ms-g6",stars:5},{id:"rev_g6_2",name:"Сергей",source:"(WB)",text:"Тихие клики реально работают, жена больше не ругается ночью. Дизайн агрессивный, геймерский. Сборка качественная.",product:"VOROTEX G6",productId:"ms-g6",stars:5},{id:"rev_g6_3",name:"Владимир",source:"(ЯМ)",text:"Тяжеленькая, уверенно чувствуется в руке. Софт понятный, макросы пишутся легко. За свои деньги топ вариант для RPG.",product:"VOROTEX G6",productId:"ms-g6",stars:5},{id:"rev_g8w_1",name:"Денис",source:"(WB)",text:"Карбоновая текстура приятная, рука не потеет. Клики действительно очень тихие, непривычно сначала, но потом кайфуешь. Беспровод работает стабильно.",product:"VOROTEX G8W",productId:"ms-g8w",stars:5},{id:"rev_g8w_2",name:"Анна",source:"(OZON)",text:"Брала для работы и игр. Очень удобно, что нет проводов. Заряда хватает на несколько дней активного использования. Форма удобная.",product:"VOROTEX G8W",productId:"ms-g8w",stars:5},{id:"rev_g8w_3",name:"Павел Р.",source:"(ЯМ)",text:"Отличная мышь. Сенсор точный, курсор не дрожит. Внешний вид строгий и стильный. Соотношение цена/качество на высоте.",product:"VOROTEX G8W",productId:"ms-g8w",stars:5},{id:"rev_m6_1",name:"Дмитрий К.",source:"(OZON)",text:"Очень удобная форма, рука ложится идеально. Соты не мешают, наоборот рука меньше потеет. Сенсор не срывает, за такую цену топ.",product:"VOROTEX M6",productId:"ms-m6",stars:5},{id:"rev_m6_2",name:"Анна",source:"(WB)",text:"Брала белую версию, выглядит очень стильно. Подсветка яркая, красивая. Провод мягкий, не мешает движениям.",product:"VOROTEX M6",productId:"ms-m6",stars:5},{id:"rev_m6_3",name:"Игорь",source:"(ЯМ)",text:"Хорошая бюджетная мышь. Макросы настраиваются легко, софт понятный. Клики четкие, колесико не люфтит.",product:"VOROTEX M6",productId:"ms-m6",stars:5},{id:"rev_m3_1",name:"Сергей В.",source:"(WB)",text:"Сменные панели - это прикольная фишка. Поставил сплошную, надоела - поставил с дырками. За свои деньги отличный вариант.",product:"VOROTEX M3",productId:"ms-m3",stars:5},{id:"rev_m3_2",name:"Максим",source:"(OZON)",text:"Легкая, удобная. Сенсор для КС ГО вполне подходит, если не киберспортсмен. Подсветка имеет кучу режимов.",product:"VOROTEX M3",productId:"ms-m3",stars:5},{id:"rev_m3_3",name:"Елена",source:"(ЯМ)",text:"Сын доволен. Говорит удобная, красивая. В комплекте запасные крышки, что приятно удивило.",product:"VOROTEX M3",productId:"ms-m3",stars:5}],Gw=[{id:"hs_r1",name:"Артем Д.",source:"(OZON)",text:"Звук 7.1 реально решает в КС! Слышно шаÐ
2893³Ð¸ за километр. Микрофон чистый, тиммейты не жалуются. За эти деньги топ.",product:"VOROTEX V2002 Plus",productId:"hs-v2002-plus",stars:5},{id:"hs_r2",name:"Марина",source:"(WB)",text:"Очень удобные, на голове не давят. Амбушюры мягкие, уши не потеют. Подсветка красивая, но главное - звук. Басы глубокие.",product:"VOROTEX V2002 Plus",productId:"hs-v2002-plus",stars:5},{id:"hs_r3",name:"Кирилл",source:"(ЯМ)",text:"Пульт на проводе - это удобно. Можно выключить микрофон кнопкой, есть индикация. Сборка качественная, пластик не скрипит.",product:"VOROTEX V2002 Plus",productId:"hs-v2002-plus",stars:5},{id:"hs_r4",name:"Денис П.",source:"(OZON)",text:"Софт простой, настроил эквалайзер под музыку. В фильмах звук как в кинотеатре благодаря 7.1. Рекомендую.",product:"VOROTEX V2002 Plus",productId:"hs-v2002-plus",stars:5},{id:"hs_r5",name:"Евгений",source:"(WB)",text:"Съемный микрофон - это плюс, когда просто слушаю музыку, убираю его. Звук чистый, громкости с запасом.",product:"VOROTEX V2002 Plus",productId:"hs-v2002-plus",stars:5},{id:"hs_d1",name:"Игорь К.",source:"(OZON)",text:"Взял V2002D-W белые. Выглядят шикарно, красный провод добавляет стиля. Звук за свои деньги отличный, басы есть.",product:"VOROTEX V2002D-W",productId:"hs-v2002d",stars:5},{id:"hs_d2",name:"Ольга",source:"(WB)",text:"Очень легкие, на голове почти не чувствуются. Микрофон нормальный для дискорда. Подключаю и к компу, и к плойке.",product:"VOROTEX V2002D",productId:"hs-v2002d",stars:5},{id:"hs_d3",name:"Максим",source:"(ЯМ)",text:"Классический дизайн, ничего лишнего. Амбушюры мягкие, уши не болят после 5 часов игры. Сборка крепкая.",product:"VOROTEX V2002D",productId:"hs-v2002d",stars:5},{id:"hs_2008_1",name:"Станислав",source:"(OZON)",text:"Дизайн V2008D просто супер, бронзовые вставки выглядят очень богато. Звук на высоте, в играх позиционирование отличное.",product:"VOROTEX V2008D",productId:"hs-v2008d",stars:5},{id:"hs_2008_2",name:"Алина М.",source:"(WB)",text:"Взяла белую версию V2008D-W. Очень красивая, легкая. Микрофон отстегивается, можно носить как обычные наушники. Звук чистый.",product:"VOROTEX V2008D-W",productId:"hs-v2008d",stars:5},{id:"hs_2008_3",name:"Глеб",source:"(ЯМ)",text:"Удобно сидят, не давят. Звук сбалансированный, басы не гудят. Пульт на проводе удобный. За такую цену - находка.",product:"VOROTEX V2008D",productId:"hs-v2008d",stars:5}],$w=[{id:"r_v75case_1",name:"Игорь К.",source:"(OZON)",text:"Кейс отличный, жесткий. Клавиатура K870 влезает идеально. Карман удобный для кабеля, ничего не болтается.",product:"VOROTEX V75 Case",productId:"acc-case-v75",stars:5},{id:"r_v75case_2",name:"Анна В.",source:"(WB)",text:"Брала для переноски, очень надежный. Внутри мягкая обивка, клавиатура не царапается. Молния качественная.",product:"VOROTEX V75 Case",productId:"acc-case-v75",stars:5},{id:"r_v75case_3",name:"Дмитрий Л.",source:"(ЯМ)",text:"Взял для своей механической 75% клавиатуры. Село как влитое. Материал очень плотный, чувствуется, что защитит при падении. Внутри есть разделитель для провода, что очень удобно.",product:"VOROTEX V75 Case",productId:"acc-case-v75",stars:5}
2893,{id:"r_v75case_4",name:"Олег С.",source:"(OZON)",text:"Качество материалов на высоте. Молния не заедает, ручка удобная. Использую для переноски в рюкзаке, теперь спокоен за сохранность клавиш.",product:"VOROTEX V75 Case",productId:"acc-case-v75",stars:5},{id:"r_v75case_5",name:"Екатерина",source:"(WB)",text:"Стильный и минималистичный чехол. Внутри очень мягкий, даже жалко клавиатуру туда класть)) Сетка для аксессуаров вместительная, поместился даже пуллер и запасные свитчи.",product:"VOROTEX V75 Case",productId:"acc-case-v75",stars:5},{id:"r_gx16_1",name:"Максим",source:"(ЯМ)",text:"Кабель качественный, койл плотный, не растягивается со временем. Авиатор тяжелый, металлический, выглядит надежно.",product:"VOROTEX GX16 Cable",productId:"acc-cable-gx16",stars:5},{id:"r_gx16_2",name:"Елена С.",source:"(OZON)",text:"Фиолетовый цвет очень красивый, в живую даже лучше. Подключила к своей белой клавиатуре, смотрится супер. Длины хватает.",product:"VOROTEX GX16 Cable",productId:"acc-cable-gx16",stars:5},{id:"r_gx16_3",name:"Дмитрий",source:"(WB)",text:"Двойная оплетка внушает доверие. Коннекторы сидят плотно, не люфтят. Топ за свои деньги.",product:"VOROTEX GX16 Cable",productId:"acc-cable-gx16",stars:5},{id:"r_sw_1",name:"Дмитрий П.",source:"(WB)",text:"Panda свитчи просто топ за свои деньги. Тихие, смазаны хорошо с завода. Люфта стема практически нет.",product:"Switch Pack",productId:"acc-switches",stars:5},{id:"r_sw_2",name:"Сергей",source:"(OZON)",text:'Взял Matcha Latte на пробу. Очень плавный ход, звук приятный, глухой "thock". Буду брать еще на всю клавиатуру.',product:"Switch Pack",productId:"acc-switches",stars:5},{id:"r_sw_3",name:"Алексей",source:"(ЯМ)",text:"HMX Citrus очень быстрые, для игр самое то. Упакованы хорошо, ножки не погнуты.",product:"Switch Pack",productId:"acc-switches",stars:5},{id:"r_mp_1",name:"Алексей Г.",source:"(ЯМ)",text:"Коврик огромный! Закрыл весь стол. Мышка скользит отлично, покрытие speed/control сбалансировано. Резиной не воняет.",product:"Mousepad XXL",productId:"acc-mousepad-xxl",stars:5},{id:"r_mp_2",name:"Мария",source:"(WB)",text:"Принт Space Orange очень яркий и четкий, качество печати на высоте. Края прошиты качественно, нитки не торчат.",product:"Mousepad XXL",productId:"acc-mousepad-xxl",stars:5},{id:"r_mp_3",name:"Виктор",source:"(OZON)",text:"Влагозащита работает, пролил воду - капли просто скатились. Коврик толстый, скрывает неровности стола.",product:"Mousepad XXL",productId:"acc-mousepad-xxl",stars:5}],Kw=[{id:"r_a6t_1",name:"Влад Соколов",source:"(OZON)",text:"Микрофон пушка! Звук чистый, без шумов и эха. Пантограф в комплекте очень удобный, держит уверенно в любом положении.",product:"VOROTEX A6T",productId:"mic-a6t",stars:5},{id:"r_a6t_2",name:"Екатерина М.",source:"(WB)",text:"Для стримов идеальный вариант. Кнопка мута сенсорная сверху - это гениально, не нужно искать в программе. Подсветка красивая.",product:"VOROTEX A6T",productId:"mic-a6t",stars:5},{id:"r_a6t_3",name:"Олег",source:"(ЯМ)",text:"Подключил и забыл, никаких драйверов не надо. Собеседники в дискорде сразу заметили разницу в голосе, стал как у радиоведущего.",product:"VOROTEX A6T",productId:"mic-a6t",stars:5},{id:"r_a6t_4",name:"Артем",source:"(OZON)",text:"За свои деньги комплект с пантографом - это подарок. Качество сборки отличное, металл и качественный пластик.",product:"VOROTEX A6T",productId:"mic-a6t",stars:5},{id:"r_a6_1",name:"Артем К.",source:"(OZON)",text:"Компактный, стоит на столе устойчиво благодаря треноге. Звук такой же качественный как у старшей модели. Топ за свои деньги.",product:"VOROTEX A6",productId:"mic-a6",stars:5},{id:"r_a6_2",name:"Светлана",source:"(WB)",text:"Брала для созвонов по работе. Голос передает отлично, посторонние шумы отсекает кардиоида. Выглядит стильно с подсветкой.",product:"VOROTEX A6",productId:"mic-a6",stars:5},{id:"r_a6_3",name:"Денис",source:"(ЯМ)",text:"Регулировка усиления снизу очень кстати. Сенсорная кнопка работает четко. RGB можно отключить долгим нажатием.",product:"VOROTEX A6",productId:"mic-a6",stars:5}],Dx=[...Ap,...Dp,...zp,...Gw,...$w,...Kw],nt="₽",Bp=[{id:"admin-main",email:"[email protected]",password:"Vsb198098vsB",name:"Главный Администратор",role:"super_admin",createdAt:new Date().toISOString()}],Vp=[{id:"new",label:"Новый",color:"#3b82f6",isSystem:!0},{id:"processing",label:"В обработке",color:"#eab308"}
2893,{id:"shipped",label:"Отправлен",color:"#a855f7"},{id:"completed",label:"Выполнен",color:"#22c55e"},{id:"cancelled",label:"Отменен",color:"#ef4444"}],zx={enableSales:!0,maintenanceMode:!1,title:"VOROTEX SHOP",subtitle:"Заказать на сайте",link:"/catalog",yandexCounterHtml:"",minOrderSum:0,paymentMethods:[{id:"card",name:"Картой на сайте",description:"Оплата банковской картой онлайн",enabled:!0},{id:"sbp",name:"СБП (QR-код)",description:"Быстрая оплата через приложение банка",enabled:!0},{id:"cash",name:"Оплата при получении",description:"Картой или наличными в пункте выдачи",enabled:!0}],deliveryMethods:[{id:"cdek",name:"СДЭК (Пункт выдачи)",type:"pickup",price:350,description:"Доставка до ближайшего ПВЗ (3-5 дней)",enabled:!0,allowedPaymentIds:["card","sbp","cash"]},{id:"post",name:"Почта России",type:"address",price:290,description:"Доставка до отделения (по адресу)",enabled:!0,allowedPaymentIds:["card","sbp"]},{id:"courier",name:"Курьер до двери",type:"address",price:590,description:"Доставка курьером лично в руки",enabled:!0,allowedPaymentIds:["card","sbp","cash"]}],orderStatuses:Vp,sync:{enabled:!1,url:"https://ac381d89-21f9-4eb1-8028-85e7599d4f9c.selstorage.ru/price_01.xml",intervalHours:3,mapping:{idTag:"id",priceTag:"price",stockTag:"rest"}},notifications:{orderEmails:["[email protected]"],contactForm:{enabled:!0,emailTo:"[email protected]",title:"Напишите нам",nameLabel:"Как вас зовут?",emailLabel:"Ваш Email",productLabel:"Тема обращения",questionLabel:"Ваш вопрос",buttonText:"Отправить сообщение",successMessage:"Спасибо! Мы ответим в ближайшее время."},cooperationForm:{enabled:!0,emailTo:"[email protected]",title:"Заявка на сотрудничество",nameLabel:"Имя / Название канала",emailLabel:"Email для связи",productLabel:"Тема (Опт / Блогер)",questionLabel:"Ваше предложение и ссылки",buttonText:"Отправить заявку",successMessage:"Мы получили ваш запрос и скоро свяжемся."},messagesReply:{greeting:"Здравствуйте!",signature:`С уважением,
2894команда VOROTEX`}}},qw=[{id:"nav-catalog",name:"Каталог",target:"/catalog"},{id:"nav-support",name:"Поддержка",target:"/support"},{id:"nav-contacts",name:"Контакты",target:"/page/contacts"},{id:"nav-news",name:"Новости",target:"https://t.me/vorotex"}],Yw=[{id:"slide-1",image:"/placeholder.svg",tagline:"НОВИНКА 2025",title:'VOROTEX <span class="text-[#ff3b30]">K680 PRO</span>',subtitle:"Профессиональная механика с шумоизоляцией и смазанными свитчами. Почувствуй разницу.",buttonText:"Подробнее",link:"/product/kb-k680-pro"},{id:"slide-2",image:"/placeholder.svg",tagline:"БЕСТСЕЛЛЕР",title:'VOROTEX <span class="text-[#ff3b30]">V1 WIRELESS</span>',subtitle:"Сверхлегкая игровая мышь весом всего 54 грамма. Топовый сенсор 26000 DPI.",buttonText:"Купить",link:"/catalog"}],Pw=[{id:"ozon",name:"OZON",image:"https://upload.wikimedia.org/wikipedia/commons/e/e4/Ozon_App_Icon.svg",link:"https://ozon.ru"},{id:"wb",name:"Wildberries",image:"https://upload.wikimedia.org/wikipedia/commons/1/19/Wildberries_logo.svg",link:"https://wildberries.ru"},{id:"yandex",name:"Яндекс Маркет",image:"https://upload.wikimedia.org/wikipedia/commons/thumb/d/d0/Yandex_Market_icon.svg/1024px-Yandex_Market_icon.svg.png",link:"https://market.yandex.ru"}],Zw={titleMain:"ВЫБИРАЙТЕ",titleHighlight:"УДОБНЫЙ СПОСОБ",description:"Мы официально представлены на всех популярных маркетплейсах для вашего комфорта. Однако, оформляя заказ напрямую на этом сайте, вы получаете не просто товар, а сервис премиум-класса.",backgroundImage:"/placeholder.svg",benefits:[]},Bx={title:"VOROTEX | Игровая периферия премиум класса",description:"Официальный магазин VOROTEX. Игровые клавиатуры, мыши и гарнитуры. Высокое качество, гарантия, быстрая доставка.",keywords:"игровые клавиатуры, мыши, vorotex, механика, купить клавиатуру",indexing:!0,favicon:"/favicon.svg"},Qw=[{id:"col-1",title:"Каталог",links:[{id:"l1",name:"Клавиатуры",url:"/category/keyboards"},{id:"l_mini",name:"Мини-клавиатуры",url:"/category/mini-keyboards"},{id:"l2",name:"Мыши",url:"/category/mice"},{id:"l3",name:"Гарнитуры",url:"/category/headsets"},{id:"l_micro",name:"Микрофоны",url:"/category/microphones"},{id:"l4",name:"Аксессуары",url:"/category/accessories"}]},{id:"col-2",title:"Покупателям",links:[{id:"l5",name:"Где купить",url:"#marketplaces"},{id:"l6",name:"Доставка и оплата",url:"/page/delivery"},{id:"l7",name:"Гарантия",url:"/page/warranty"},{id:"l8",name:"Карта сайта",url:"/sitemap"}]},{id:"col-3",title:"Компания",links:[{id:"l9",name:"О бренде",url:"/page/about"},{id:"l10",name:"Контакты",url:"/page/contacts"},{id:"l11",name:"Сотрудничество",url:"/page/b2b"},{id:"l_news",name:"Новости",url:"https://t.me/vorotex"}]},{id:"col-4",title:"Поддержка",links:[{id:"l12",name:"Драйверы и ПО",url:"/support"},{id:"l13",name:"Вопросы и ответы",url:"/page/faq"},{id:"l14",name:"Политика",url:"/page/privacy"}]}],Jw=[{id:"s1",platform:"telegram",url:"#"},{id:"s2",platform:"vk",url:"#"},{id:"s3",platform:"youtube",url:"#"}],lu=[{id:"page-about",title:"О бренде VOROTEX",slug:"about",date:new Date().toISOString(),image:"/placeholder.svg",content:`
2895      <h3>Кто мы?</h3>
2896      <p>VOROTEX — это не просто очередной бренд игровой периферии. Мы — команда инженеров, дизайнеров и, прежде всего, геймеров, которые устали от компромиссов. Мы верим, что профессиональное оборудование не должно стоить целое состояние. Наша штаб-квартира и центр разработки находятся в постоянном поиске идеального баланса между передовыми технологиями, эстетикой и доступностью.</p>
2897
2898      <h3>Наша Философия: "Играй без границ"</h3>
2899      <p>Каждый продукт VOROTEX создается с одной целью: убрать барьеры между игроком и виртуальным миром. Мы уделяем маниакальное внимание деталям, которые действительно важны в игре:</p>
2900      <ul>
2901        <li><strong>Сенсоры:</strong> Мы используем только проверенные чипы от PixArt, обеспечивающие попиксельную точность.</li>
2902        <li><strong>Свитчи:</strong> Сотрудничество с ведущими фабриками (Huano, Kailh, Outemu) позволяет нам предлагать решения с уникальными характеристиками тайпинга.</li>
2903        <li><strong>Материалы:</strong> Мы не экономим на пластике. PBT кейкапы, легкие сплавы и прочные кабели — стандарт для наших устройств.</li>
2904      </ul>
2905
2906      <h3>Почему выбирают нас?</h3>
2907      <p>В отличие от гигантов индустрии, мы слышим наше комьюнити. Многие функции в наших клавиатурах и мышах (например, поддержка VIA, экраны, шумоизоляция Gasket Mount) появились благодаря вашим отзывам. Мы не тратим миллионы на маркетинг, мы вкладываем их в продукт.</p>
2908      
2909      <h3>Будущее</h3>
2910      <p>Мы продолжаем расширять экосистему VOROTEX. В планах — выпуск новых беспроводных гарнитур, стримингового оборудования и лимитированных коллекций в коллаборации с художниками. Присоединяйтесь к нам, и давайте менять индустрию вместе!</p>
2911    `,seo:{title:"О бренде VOROTEX | История и миссия",description:"Узнайте больше о бренде VOROTEX. Мы создаем профессиональную игровую периферию: клавиатуры, мыши и гарнитуры. Качество, инновации и доступность.",keywords:"vorotex о бренде, история компании, игровая периферия, миссия vorotex",indexing:!0}},{id:"page-warranty",title:"Гарантия и Возврат",slug:"warranty",date:new Date().toISOString(),content:`
2912      <h2>Условия гарантии</h2>
2913      <p>На всю продукцию VOROTEX распространяется официальная гарантия 1 год.</p>
2914      <p>В случае обнаружения брака, мы обменяем устройство на новое или вернем деньги в течение 3 дней после обращения.</p>
2915    `,seo:{title:"Гарантия и Возврат товаров VOROTEX",description:"Информация о гарантийном обслуживании и условиях возврата продукции VOROTEX. Официальная гарантия 1 год на все устройства.",keywords:"гарантия vorotex, возврат товара, сервис vorotex, условия гарантии",indexing:!0}}
2915,{id:"page-delivery",title:"Доставка и Оплата",slug:"delivery",date:new Date().toISOString(),content:`
2916      <h2>Доставка</h2>
2917      <p>Мы доставляем заказы по всей России через СДЭК и Почту России. Сроки доставки зависят от вашего региона (обычно 2-5 дней).</p>
2918      <h2>Оплата</h2>
2919      <p>Оплата возможна банковской картой на сайте или при получении.</p>
2920    `,seo:{title:"Доставка и Оплата | Интернет-магазин VOROTEX",description:"Узнайте о способах доставки и оплаты в интернет-магазине VOROTEX. СДЭК, Почта России, курьерская доставка. Оплата картой или при получении.",keywords:"доставка vorotex, оплата заказа, сдэк, почта россии, условия доставки",indexing:!0}},{id:"page-contacts",title:"Контакты",slug:"contacts",date:new Date().toISOString(),content:`
2921      <p>Свяжитесь с нами любым удобным способом.</p>
2922      <ul>
2923        <li>Email: [email protected]</li>
2924        <li>Телефон: 8 (800) 555-35-35</li>
2925      </ul>
2926    `,seo:{title:"Контакты VOROTEX | Служба поддержки",description:"Контактная информация интернет-магазина VOROTEX. Телефон, email и форма обратной связи. Мы всегда готовы помочь!",keywords:"контакты vorotex, телефон поддержки, email, адрес, связь с нами",indexing:!0}},{id:"page-b2b",title:"Сотрудничество",slug:"b2b",date:new Date().toISOString(),content:`
2927      <h2>Для бизнеса (Опт)</h2>
2928      <p>Мы открыты для сотрудничества с компьютерными клубами, розничными магазинами и киберспортивными организациями. Мы предлагаем гибкую систему скидок, маркетинговую поддержку и приоритетное обслуживание.</p>
2929      <p>Для получения оптового прайс-листа заполните форму ниже, выбрав тему "Оптовая закупка".</p>
2930
2931      <hr style="margin: 2rem 0; border-color: #eee;" />
2932
2933      <h2>Для блогеров и инфлюенсеров</h2>
2934      <p>Вы создаете крутой контент про технику или гейминг? Мы ищем талантливых авторов для обзоров нашей продукции на YouTube, Twitch, Telegram и VK.</p>
2935      <p><strong>Что мы предлагаем:</strong></p>
2936      <ul>
2937        <li>Бесплатные образцы новинок для обзора.</li>
2938        <li>Промокоды для вашей аудитории.</li>
2939        <li>Информационная поддержка в наших соцсетях.</li>
2940      </ul>
2941      <p>Если у вас активная аудитория и качественный контент — напишите нам! В поле "Тема" укажите "Сотрудничество / Блогер", а в сообщении прикрепите ссылки на ваши каналы и статистику.</p>
2942    `,seo:{title:"Сотрудничество с VOROTEX | Опт и Маркетинг",description:"Информация для партнеров, оптовиков и блогеров. Сотрудничество с VOROTEX. Станьте нашим партнером сегодня.",keywords:"vorotex опт, сотрудничество, для блогеров, партнерская программа, дилеры",indexing:!0}},{id:"page-faq",title:"Частые вопросы (FAQ)",slug:"faq",date:new Date().toISOString(),content:"<p>Ниже вы найдете ответы на самые популярные вопросы о нашей продукции и сервисе.</p>",faq:[{question:"Как скачать драйвер (ПО) для клавиатуры?",answer:"Все драйверы доступны в разделе 'Поддержка' (ссылка в меню сайта). Выберите вашу модель устройства и нажмите 'Скачать'. Если вашей модели нет в списке, напишите в теÑ
2942…поддержку."},{question:"Что такое Hot-Swap?",answer:"Hot-Swap — это технология, позволяющая менять механические переключатели (свитчи) без пайки. Вы можете легко заменить неисправный свитч или установить другие для изменения тактильных ощущений."},{question:"Есть ли гарантия на товары?",answer:"Да, на всю продукцию VOROTEX распространяется официальная гарантия 1 год. Гарантийный талон идет в комплекте с устройством."},{question:"Как настроить подсветку без софта?",answer:"Большинство наших клавиатур поддерживают настройку через комбинации клавиш Fn. Обычно это Fn + Insert/Home/PgUp для смены режимов и Fn + Стрелки для яркости/скорости. Подробности см. в инструкции к вашей модели."},{question:"Доставляете ли вы в страны СНГ?",answer:"В данный момент мы осуществляем доставку только по территории Российской Федерации через СДЭК и Почту России."}],seo:{title:"Частые вопросы (FAQ) | Поддержка VOROTEX",description:"Ответы на часто задаваемые вопросы о продукции VOROTEX. Драйверы, гарантия, настройка подсветки и многое другое.",keywords:"faq vorotex, вопросы и ответы, помощь, как настроить клавиатуру, драйверы",indexing:!0}},{id:"page-privacy",title:"Политика конфиденциальности",slug:"privacy",date:new Date().toISOString(),content:`
2943      <h2>1. Общие положения</h2>
2944      <p>Настоящая политика обработки персональных данных составлена в соответствии с требованиями Федерального закона от 27.07.2006. №152-ФЗ «О персональных данных» и определяет порядок обработки персональных данных и меры по обеспечению безопасности персональных данных, предпринимаемые VOROTEX (далее – Оператор).</p>
2945      <p>Оператор ставит своей важнейшей целью и условием осуществления своей деятельности соблюдение прав и свобод человека и гражданина при обработке его персональных данных, в том числе защиты прав на неприкосновенность частной жизни, личную и семейную тайну.</p>
2946
2947      <h2>2. Основные понятия</h2>
2948      <ul>
2949        <li><strong>Автоматизированная обработка персональных данных</strong> – обработка персональных данных с помощью средств вычислительной техники;</li>
2950        <li><strong>Блокирование персональных данных</strong> – временное прекращение обработки персональных данных (за исключением случаев, если обработка необходима для уточнения персональных данных);</li>
2951        <li><strong>Веб-сайт</strong> – совокупность графических и информационных материалов, а также программ для ЭВМ и баз данных, обеспечивающих их доступность в сети интернет по сетевому адресу vorotex.com;</li>
2952        <li><strong>Персональные данные</strong> – любая информация, относящаяся прямо или косвенно к определенному или определяемому Пользователю веб-сайта;</li>
2953      </ul>
2954
2955      <h2>3. Оператор может обрабатывать следующие персональные данные Пользователя</h2>
2956      <ul>
2957        <li>Фамилия, имя, отчество;</li>
2958        <li>Электронный адрес (Email);</li>
2959        <li>Номера телефонов;</li>
2960        <li>Адрес доставки товаров;</li>
2961        <li>Также на сайте происходит сбор и обработка обезличенных данных о посетителях (в т.ч. файлов «cookie») с помощью сервисов интернет-статистики (Яндекс Метрика и Гугл Аналитика и других).</li>
2962      </ul>
2963
2964      <h2>4. Цели обработки персональных данных</h2>
2965      <p>Цель обработки персональных данных Пользователя — информирование Пользователя посредством отправки электронных писем; предоставление доступа Пользователю к сервисам, информации и/или материалам, содержащимся на веб-сайте; обработка заказов и доставка товаров.</p>
2966      <p>Также Оператор имеет право направлять Пользователю уведомления о новых продуктах и услугах, специальных предложениях и различных событиях. Пользователь всегда может отказаться от получения информационных сообщений, направив Оператору письмо на адрес электронной почты [email protected] с пометкой «Отказ от уведомлений о новых продуктах и услугах и специальных предложениях».</p>
2967
2968      <h2>5. Правовые основания обработки персональных данных</h2>
2969      <p>Оператор обрабатывает персональные данные Пользователя только в случае их заполнения и/или отправки Пользователем самостоятельно через специальные формы, расположенные на сайте. Заполняя соответствующие формы и/или отправляя свои персональные данные Оператору, Пользователь выражает свое согласие с данной Политикой.</p>
2970
2971      <h2>6. Порядок сбора, хранения, передачи и других видов обработки персональных данных</h2>
2972      <p>Безопасность персональных данных, которые обрабатываются Оператором, обеспечивается путем реализации правовых, организационных и технических мер, необходимых для выполнения в полном объеме требований действующего законодательства в области защиты персональных данных.</p>
2973      <ul>
2974        <li>Оператор обеспечивает сохранность персональных данных и принимает все возможные меры, исключающие доступ к персональным данным неуполномоченных лиц.</li>
2975        <li>Персональные данные Пользователя никогда, ни при каких условиях не будут переданы третьим лицам, за исключением случаев, связанных с исполнением действующего законодательства (например, по запросу правоохранительных органов) или для исполнения обязательств перед пользователем (например, передача данных службе доставки СДЭК).</li>
2976      </ul>
2977
2978      <h2>7. Использование файлов Cookie</h2>
2979      <p>На сайте используется технология cookie. Файлы cookie не содержат конфиденциальную информацию. Пользователь дает согласие на сбор, анализ и использование cookies, в том числе третьими лицами для целей Ñ
2979„ормирования статистики и оптимизации рекламных сообщений.</p>
2980
2981      <h2>8. Заключительные положения</h2>
2982      <p>Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты [email protected].</p>
2983    `,seo:{title:"Политика конфиденциальности | VOROTEX",description:"Политика обработки персональных данных VOROTEX. Узнайте, как мы собираем, используем и защищаем вашу информацию.",keywords:"политика конфиденциальности, обработка данных, защита информации, cookie",indexing:!1}}],Ww={title:"НОВИНКИ И ХИТЫ",show:!0},Vx={title:"ЦЕНТР ПОДДЕРЖКИ",description:"Скачайте драйверы, инструкции и программное обеспечение для настройки ваших девайсов VOROTEX. Раскройте полный потенциал оборудования.",items:[{id:"drv-k680",name:"K680 PRO Software",version:"v1.2.4",size:"45 MB",description:"ПО для настройки подсветки и макросов K680 PRO",link:"#",category:"keyboard",date:"2024-02-01",productId:"kb-k680-pro"},{id:"drv-v1",name:"V1 Wireless Driver",version:"v2.0",size:"12 MB",description:"Драйвер для настройки сенсора и DPI мыши V1",link:"#",category:"mouse",date:"2024-01-15"}]},Lx={show:!0,speed:40,backgroundColor:"#ff3b30",textColor:"#ffffff",items:[{id:"t1",text:"БЕСПЛАТНАЯ ДОСТАВКА",isBold:!0,icon:"truck",description:"ОТ 5000₽"},{id:"t2",text:"ГАРАНТИЯ 1 ГОД",isBold:!0,icon:"shield",description:"НА ВСЕ"},{id:"t3",text:"НОВИНКА: K680 PRO",isBold:!0,icon:"zap",description:"УЖЕ В ПРОДАЖЕ"},{id:"t4",text:"ДОСТАВКА ПО РФ",isBold:!0,icon:"globe",description:"СДЭК / ПОЧТА"}]},su=({src:r,alt:o,className:d="",imgClassName:c="",skeletonClassName:h="",loading:m="lazy",decoding:y="async"})=>{const[u,f]=j.useState(!1);return j.useEffect(()=>{f(!1)},[r]),t.jsxs("div",{className:`relative ${d}`,children:[t.jsx("div",{className:`absolute inset-0 bg-gray-200/80 animate-pulse transition-opacity duration-300 ${u?"opacity-0":"opacity-100"} ${h}`,"aria-hidden":"true"}),t.jsx("img",{src:r,alt:o,loading:m,decoding:y,onLoad:()=>f(!0),onError:()=>f(!0),className:`${c} opacity-100`})]})},go=({product:r,onAddToCart:o,navigate:d,enableSales:c=!0,isFavorite:h,onToggleFavorite:m,isComparing:y,onToggleCompare:u,isRecommended:f,recommendationReason:x})=>{const N=({children:X,title:le})=>{const xe=j.useRef(null);j.useEffect(()=>{const Ee=xe.current;if(!Ee)return;const Ge=it=>{Math.abs(it.deltaX)>Math.abs(it.deltaY)||(it.preventDefault(),it.stopPropagation(),Ee.scrollLeft+=it.deltaY)};return Ee.addEventListener("wheel",Ge,{passive:!1}),()=>Ee.removeEventListener("wheel",Ge)},[]);const ge=Ee=>{const Ge=Ee.currentTarget;if(Ee.target.closest&&Ee.target.closest("button"))return;Ee.button!==void 0&&Ee.button!==0||(Ee.currentTarget.setPointerCapture(Ee.pointerId),Ge.__drag={x:Ee.clientX,scrollLeft:Ee.currentTarget.scrollLeft})},je=Ee=>{const Ge=Ee.currentTarget;if(!Ge.__drag)return;const it=Ee.clientX-Ge.__drag.x;Ee.currentTarget.scrollLeft=Ge.__drag.scrollLeft-it},Ne=Ee=>{const Ge=Ee.currentTarget;try{Ee.currentTarget.releasePointerCapture(Ee.pointerId)}catch{}Ge.__drag=null};return t.jsx("div",{ref:xe,className:"flex flex-wrap gap-2 items-center overflow-visible py-1 px-1 active:cursor-grabbing overscroll-x-contain overscroll-y-contain",onPointerDown:ge,onPointerMove:je,onPointerUp:Ne,onPointerCancel:Ne,onPointerLeave:Ne,title:le,children:X})},[b,C]=j.useState({});j.useEffect(()=>{const X={};r.variants&&r.variants[0]&&r.variants[0].combination?Object.assign(X,r.variants[0].combination):r.options&&r.options.forEach(le=>{le.values.length>0&&(X[le.id]=le.values[0].id)});C(X)},[r]);const g=j.useMemo(()=>!r.variants||r.variants.length===0?null:r.variants.find(X=>Object.entries(b).every(([le,xe])=>X.combination[le]===xe)),[r,b]),O=(X,le)=>{if(!r.variants||r.variants.length===0)return!1;const xe={...b,[X]:le};return!r.variants.some(je=>Object.entries(xe).every(([Ne,Ee])=>
2983je.combination[Ne]===Ee))},E=(g==null?void 0:g.price)||r.price,_=g!=null&&g.images&&g.images.length>0?g.images:g!=null&&g.image?[g.image]:[],k=j.useMemo(()=>{const X=[..._.length>0?_:[r.image]].filter(Boolean);return X.filter((le,xe)=>X.indexOf(le)===xe)},[_,r.image]),[R,D]=j.useState(0),te=k[R]||r.image,W=r.name+(g&&g.combination?(()=>{const X=Object.entries(b).map(([le,xe])=>{var ge,je,Ne=(r.options||[]).find(Ee=>Ee.id==le);return Ne&&Ne.showInTitle&&(je=(Ne.values||[]).find(Ee=>Ee.id==xe))?je.name:""}).filter(Boolean).join(" ");return X?" "+X:""})():""),$=(g==null?void 0:g.originalPrice)||r.originalPrice,H=r.isSale,J=r.isHit,Y=$&&$>E,G=H||Y,U=Y?Math.round(($-E)/$*100):0,P=(g?g.stock:r.stock)<=0;j.useEffect(()=>{D(0)},[r.id,g]);const pe=X=>{if(k.length<=1)return;const le=X.currentTarget.getBoundingClientRect(),ge=Math.min(Math.max(X.clientX-le.left,0),le.width)/le.width,je=Math.min(k.length-1,Math.floor(ge*k.length));D(je)},B=()=>D(0),z=oo.useRef(null),v=X=>{z.current=X.touches[0].clientX},T=X=>{if(k.length<=1)return;const le=z.current;if(le===null)return;const ge=X.changedTouches[0].clientX-le;Math.abs(ge)<30||(D(Ne=>{const Ee=ge<0?Ne+1:Ne-1;return Ee<0?0:Ee>=k.length?k.length-1:Ee}),z.current=null)},A=()=>{d&&d(`/product/${r.id}`)},K=X=>{var le;X.stopPropagation(),!P&&o(r,!1,g==null?void 0:g.id,(le=r.options)==null?void 0:le.reduce((xe,ge)=>{const je=b[ge.id],Ne=ge.values.find(Ee=>Ee.id===je);return Ne&&(xe[ge.name]=Ne.name),xe},{}))},w=(X,le,xe)=>{X.stopPropagation(),C(ge=>({...ge,[le]:xe}))},V=X=>{if(!X||X.length===0)return"transparent";if(X.length===1)return X[0];const le=100/X.length;return`conic-gradient(${X.map((ge,je)=>`${ge} ${je*le}% ${(je+1)*le}%`).join(", ")})`},M=X=>Math.round(X).toLocaleString("ru-RU",{maximumFractionDigits:0}).replace(/\s/g," ");return t.jsxs("div",{onClick:A,className:"group/card flex flex-col h-full bg-gradient-to-b from-white to-[#fafafa] border border-black/5 shadow-sm hover:shadow-xl hover:border-gray-300 rounded-xl transition-all duration-300 cursor-pointer relative hover:z-20 overflow-visible",children:[t.jsxs("div",{className:"absolute top-3 left-3 z-30 flex flex-col gap-2 items-start",children:[r.isNewArrival&&t.jsxs("div",{className:"bg-emerald-600 text-white text-[10px] font-bold px-2 py-1 rounded shadow-md uppercase flex items-center gap-1",children:[t.jsx(fu,{className:"w-2 h-2 fill-white"})," НОВИНКА"]}),J&&t.jsxs("div",{className:"bg-black text-white text-[10px] font-bold px-2 py-1 rounded shadow-md uppercase flex items-center gap-1",children:[t.jsx(Va,{className:"w-2 h-2 fill-white"})," ХИТ"]}),H&&t.jsx("div",{className:"bg-[#ff3b30] text-white text-[10px] font-bold px-2 py-1 rounded shadow-md uppercase",children:U>0?`SALE -${U}%`:"SALE"})]}),t.jsxs("div",{className:"absolute top-3 right-3 z-30 flex gap-2",children:[u&&t.jsx("button",{onClick:X=>{X.stopPropagation(),u(r)},className:`p-2 bg-white/80 backdrop-blur-sm rounded-full transition-all shadow-sm ${y?"text-black bg-white ring-1 ring-black":"text-gray-400 hover:text-black hover:bg-white"}`,title:"Сравнить",children:t.jsx(br,{className:"w-4 h-4"})}),m&&t.jsx("button",{onClick:X=>{X.stopPropagation(),m(r)},className:"p-2 bg-white/80 backdrop-blur-sm rounded-full text-gray-400 hover:text-red-500 hover:bg-white transition-all shadow-sm",title:"В избранное",children:t.jsx(jn,{className:`w-4 h-4 ${h?"fill-red-500 text-red-500":""}`})})]}),t.jsxs("div",{className:"relative bg-gray-50 aspect-[4/3] min-h-[230px] overflow-hidden rounded-t-xl",onMouseMove:pe,onMouseLeave:B,onTouchStart:v,onTouchEnd:T,children:[t.jsx(su,{src:te,alt:W,className:"w-full h-full",imgClassName:"w-full h-full object-contain p-1.5 md:p-3 mix-blend-multiply group-hover/card:scale-110 transition-transform duration-500",skeletonClassName:"bg-gray-100"}),k.length>1&&t.jsx("div",{className:"absolute bottom-3 left-1/2 -translate-x-1/2 z-20 flex items-center gap-1.5 px-2 py-1 rounded-full bg-gray-50/95 backdrop-blur-md border border-gray-200 shadow-sm",onClick:X=>X.stopPropagation(),"aria-label":"Индикатор изображений",children:k.map((X,le)=>{const xe=le===R;return t.jsx("button",{type:"button",onClick:()=>D(le),className:`w-2 h-2 rounded-full transition-all ${xe?"bg-[#ff3b30] scale-110":"bg-gray-300 hover:bg-gray-400"}`,"aria-label":`Фото ${le+1} из ${k.length}`},le)})}),f&&t.jsx("div",{className:"absolute top-12 right-3 bg-green-500 text-white text-xs font-bold px-2 py-1 rounded z-10 shadow-md",children:"AI ВЫБОР"}),c&&t.jsx("button",{onClick:K,disabled:P,className:`absolute bottom-3 right-3 w-11 h-11 rounded-full shadow-lg flex items-center justify-center transition-all duration-200 z-20 ${P?"bg-gray-200 text-gray-400 cursor-not-allowed":"bg-black text-white hover:bg-[#ff3b30] hover:text-white opacity-100"}
2983`,title:P?"Нет в наличии":"В корзину",children:t.jsx(js,{className:"w-5 h-5"})})]}),t.jsxs("div",{className:"flex flex-col flex-1 p-4 pb-6",children:[t.jsxs("div",{className:"space-y-3",children:[t.jsxs("div",{className:"flex justify-between items-start",children:[t.jsx("h3",{className:"text-lg font-bold text-black group-hover/card:text-[#ff3b30] transition-colors truncate pr-2",children:W}),r.rating>0&&t.jsxs("div",{className:"flex items-center gap-1 bg-gray-100 px-1.5 py-0.5 rounded flex-shrink-0",children:[t.jsx(Va,{className:`w-4 h-4 ${r.rating>=4.5?"fill-orange-400 text-orange-400":"text-gray-400"}`}),t.jsx("span",{className:"text-xs font-bold text-black",children:r.rating})]})]}),t.jsx("div",{className:"text-[10px] font-mono text-gray-400 uppercase tracking-wide",children:au[r.category]||r.category}),t.jsxs("div",{className:"relative h-14",children:[t.jsx("div",{className:"absolute inset-0 z-0 transition-opacity duration-200 group-hover/card:opacity-0 overflow-hidden",children:t.jsx("p",{className:"text-xs text-gray-500 leading-relaxed line-clamp-3",children:r.description||"Описание отсутствует"})}),t.jsx("div",{className:"absolute inset-0 z-10 opacity-0 group-hover/card:opacity-100 transition-opacity duration-200 bg-white pointer-events-none group-hover/card:pointer-events-auto",children:r.options&&r.options.length>0?t.jsxs("div",{className:"flex flex-col gap-2 py-1 overflow-visible",children:[(r.options||[]).slice(0,2).map(X=>t.jsx("div",{className:"flex flex-col gap-1",onClick:le=>le.stopPropagation(),children:t.jsx("div",{className:"flex flex-wrap gap-1.5 py-1",children:X.values.slice(0,10).map(le=>{const xe=b[X.id]===le.id,ge=O(X.id,le.id),je=X.type==="image";return t.jsxs("button",{onClick:Ne=>!ge&&w(Ne,X.id,le.id),disabled:ge,className:`
2984                                                      relative transition-all group/option flex-shrink-0
2985                                                      ${X.type==="color"?`w-6 h-6 rounded-full border ${xe?"border-black ring-1 ring-black":"border-gray-300 hover:scale-110"}`:je?`w-12 h-8 rounded border p-0.5 ${xe?"border-black ring-1 ring-black":"border-gray-200 hover:border-gray-400"}`:`px-1.5 py-0.5 rounded text-[9px] font-bold uppercase border whitespace-nowrap ${xe?"bg-black text-white border-black":"bg-white text-gray-500 border-gray-200 hover:border-gray-400"}`}
2986                                                      ${ge?"opacity-20 cursor-not-allowed border-gray-100 bg-gray-50":""}
2987                                                  `,children:[(X.type==="color"||je)&&t.jsxs("div",{className:"absolute bottom-full left-1/2 -translate-x-1/2 mb-2 px-2 py-1 bg-black text-white text-[10px] font-bold uppercase rounded shadow-2xl opacity-0 group-hover/option:opacity-100 transition-opacity pointer-events-none whitespace-nowrap z-[99999]",children:[le.name,t.jsx("div",{className:"absolute top-full left-1/2 -translate-x-1/2 -mt-[1px] border-4 border-transparent border-t-black"})]}),X.type==="color"&&(le.colors?t.jsx("span",{className:"block w-full h-full rounded-full",style:{background:V(le.colors)}}):t.jsx("span",{className:"block w-full h-full rounded-full",style:{backgroundColor:le.value}})),je&&le.image&&t.jsx("img",{src:le.image,className:"w-full h-full object-cover rounded-sm",alt:le.name}),X.type==="text"&&le.name]},le.id)})})},X.id)),r.options.length>2&&t.jsxs("div",{className:"text-[10px] font-bold uppercase tracking-wider text-gray-400",children:["+ ещё ",r.options.length-2," опц."]})]}):t.jsx("div",{className:"h-full flex items-center justify-center",children:t.jsx("p",{className:"text-xs text-gray-400 italic",children:"Нет опций для выбора"})})})]})]}),t.jsxs("div",{className:"mt-auto pt-3",children:[t.jsxs("div",{className:"mb-2 mt-4 flex items-center gap-3 text-[10px] font-bold uppercase tracking-wider text-gray-500 transition-opacity duration-300 group-hover:opacity-0 group-hover/card:opacity-0 pointer-events-none",children:[t.jsxs("span",{className:"inline-flex items-center gap-1",children:[t.jsx(kn,{className:"w-3.5 h-3.5 text-[#ff3b30]"})," Гарантия"]}
2987),t.jsxs("span",{className:"inline-flex items-center gap-1",children:[t.jsx(Pa,{className:"w-3.5 h-3.5 text-[#ff3b30]"})," Доставка"]}),t.jsxs("span",{className:"inline-flex items-center gap-1",children:[t.jsx(tu,{className:"w-3.5 h-3.5 text-[#ff3b30]"})," Возврат"]})]}),t.jsxs("div",{className:"flex items-center gap-3 flex-wrap",children:[t.jsx("span",{className:`inline-flex items-center px-3 py-1.5 rounded-xl font-black leading-tight whitespace-nowrap shadow-sm ${G?"bg-[#ff3b30] text-white":"bg-black text-white"}`,children:t.jsxs("span",{className:"text-xl tracking-tight",children:[M(E)," ",nt]})}),$&&(G||$>E)&&t.jsxs("span",{className:"text-base text-gray-400 line-through decoration-red-500/70 whitespace-nowrap font-medium",children:[M($)," ",nt]}),$&&$>E&&t.jsx("span",{className:"inline-flex items-center bg-[#ff3b30] text-white text-xs font-black px-2 py-0.5 rounded-md leading-none",children:"-"+Math.round(($-E)/$*100)+"%"})]})]})]})]})},Lp=({products:r,onAddToCart:o,navigate:d,enableSales:c=!0,favorites:h=[],onToggleFavorite:m,compareList:y=[],onToggleCompare:u})=>{const[f,x]=j.useState(0),[N,b]=j.useState(4),[C,g]=j.useState(!1),[O,E]=j.useState(!1),_=j.useRef(null),k=j.useRef(null);j.useEffect(()=>{const H=()=>{const J=window.innerWidth;J<640?b(1):J<1024?b(2):b(4)};return H(),window.addEventListener("resize",H),()=>window.removeEventListener("resize",H)},[]);const R=Math.max(0,r.length-N);j.useEffect(()=>{try{if(typeof window>"u"||window.innerWidth>=640||r.length<=1)return;const H="vorotex_swipe_hint_seen";if(localStorage.getItem(H))return;E(!0);const Y=setTimeout(()=>{E(!1),localStorage.setItem(H,"1")},2500);return()=>clearTimeout(Y)}catch{}},[r.length]),j.useEffect(()=>{if(C||r.length<=N)return;const H=setInterval(()=>{x(J=>J>=R?0:J+1)},4e3);return()=>clearInterval(H)},[C,R,r.length,N]);const D=()=>{f<R?x(H=>H+1):x(0)},te=()=>{f>0?x(H=>H-1):x(R)},W=H=>{if(k.current=H.touches[0].clientX,O){E(!1);try{localStorage.setItem("vorotex_swipe_hint_seen","1")}catch{}}},$=H=>{if(k.current===null)return;const J=H.changedTouches[0].clientX-k.current;Math.abs(J)>30&&(J<0?D():te()),k.current=null};return t.jsxs("div",{className:"relative group",onMouseEnter:()=>g(!0),onMouseLeave:()=>g(!1),onTouchStart:W,onTouchEnd:$,children:[O&&t.jsx("div",{className:"absolute top-4 left-1/2 -translate-x-1/2 z-20 md:hidden",children:t.jsx("div",{className:"px-3 py-1.5 rounded-full bg-black/70 border border-white/10 text-white text-[10px] font-black uppercase tracking-widest backdrop-blur",children:"Свайпните ⇄"})}),r.length>N&&t.jsx("button",{onClick:te,className:"absolute left-0 top-1/2 -translate-y-1/2 -translate-x-4 z-10 w-12 h-12 flex items-center justify-center bg-white shadow-lg rounded-full text-black hover:text-[#ff3b30] transition-all duration-300 opacity-0 group-hover:opacity-100 disabled:opacity-0 disabled:cursor-default",children:t.jsx(yp,{className:"w-8 h-8"})}),r.length>N&&t.jsx("button",{onClick:D,className:"absolute right-0 top-1/2 -translate-y-1/2 translate-x-4 z-10 w-12 h-12 flex items-center justify-center bg-white shadow-lg rounded-full text-black hover:text-[#ff3b30] transition-all duration-300 opacity-0 group-hover:opacity-100 disabled:opacity-0 disabled:cursor-default",children:t.jsx(ys,{className:"w-8 h-8"})}),t.jsx("div",{className:"overflow-hidden py-10 -my-6",ref:_,children:t.jsx("div",{className:"flex transition-transform duration-700 ease-in-out items-stretch",style:{transform:`translateX(-${f*(100/N)}%)`},children:r.map(H=>t.jsx("div",{className:"flex-shrink-0 px-3",style:{width:`${100/N}%`},children:t.jsx(go,{product:H,onAddToCart:o,navigate:d,enableSales:c,isFavorite:h.some(J=>J.id===H.id),onToggleFavorite:m,isComparing:y.some(J=>J.id===H.id),onToggleCompare:u})},H.id))})}),r.length>N&&t.jsx("div",{className:"absolute bottom-2 left-1/2 -translate-x-1/2 w-[160px] h-1 bg-white/10 rounded-full overflow-hidden border border-white/10",children:t.jsx("div",{className:"h-full bg-[#ff3b30] transition-all duration-300",style:{width:`${Math.max(8,(f+1)/(R+1)*100)}%`}})})]})}
2987,Fw=({marketplaces:r=[],content:o,logoImage:d,internalShopSettings:c})=>{const h=r.slice(0,3),m=c.enableSales,y=()=>{const f=c.link,x=document.getElementById(f);x?x.scrollIntoView({behavior:"smooth"}):(f.startsWith("http")||f.startsWith("/"))&&window.open(f,"_self")},u=m?o.description:"Мы официально представлены на всех популярных маркетплейсах для вашего комфорта. Выбирайте удобную для вас площадку, читайте отзывы и наслаждайтесь качеством VOROTEX.";return t.jsxs("section",{id:"marketplaces",className:"relative py-24 overflow-hidden bg-gray-900",children:[t.jsxs("div",{className:"absolute inset-0 z-0",children:[t.jsx("div",{className:"absolute inset-0 bg-cover bg-center opacity-60",style:{backgroundImage:`url('${o.backgroundImage||"/placeholder.svg"}')`}}),t.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-black/90 via-black/30 to-black/90"}),t.jsx("div",{className:"absolute inset-0 bg-tech-dots opacity-20"})]}),t.jsxs("div",{className:"relative z-10 max-w-[1400px] mx-auto px-4",children:[t.jsxs("div",{className:"text-center mb-16 max-w-4xl mx-auto",children:[t.jsxs("div",{className:"inline-flex items-center gap-2 px-4 py-1.5 rounded-full bg-white/10 border border-white/10 text-white/90 text-xs font-bold uppercase tracking-wider mb-6 backdrop-blur-md",children:[t.jsx(Jt,{className:"w-3 h-3"})," Официальные партнеры"]}),t.jsxs("h2",{className:"text-4xl md:text-5xl font-black text-white uppercase leading-none mb-6 tracking-tight drop-shadow-xl",children:[o.titleMain," ",t.jsx("span",{className:"text-transparent bg-clip-text bg-gradient-to-r from-[#ff3b30] to-orange-500",children:o.titleHighlight})]}),t.jsx("p",{className:"text-gray-200 text-lg md:text-xl leading-relaxed font-medium drop-shadow-md max-w-2xl mx-auto",children:u})]}),t.jsxs("div",{className:`grid grid-cols-1 md:grid-cols-2 ${m?"lg:grid-cols-4":"lg:grid-cols-3 max-w-5xl mx-auto"} gap-6`,children:[m&&t.jsxs("button",{onClick:y,className:"group relative h-80 bg-[#ff3b30] backdrop-blur-sm border border-[#ff3b30] rounded-2xl p-6 flex flex-col items-center justify-center transition-all duration-500 hover:-translate-y-2 hover:shadow-[0_0_50px_rgba(255,59,48,0.4)] overflow-hidden order-first",children:[t.jsx("div",{className:"absolute inset-0 bg-tech-dots opacity-30 mix-blend-overlay"}),t.jsx("div",{className:"absolute top-0 right-0 w-64 h-64 bg-white/20 rounded-full blur-3xl -translate-y-1/2 translate-x-1/2 mix-blend-overlay"}),t.jsx("div",{className:"w-36 h-36 mb-8 p-4 flex items-center justify-center relative z-10 transform group-hover:scale-110 transition-transform duration-500",children:c.image?t.jsx("img",{src:c.image,alt:"Shop",className:"w-full h-full object-contain drop-shadow-md"}):t.jsx(_n,{className:"w-full h-full object-contain drop-shadow-md",customImage:d,isDarkText:!1})}),t.jsx("h5",{className:"text-white font-bold text-2xl mb-3 relative z-10 tracking-wide drop-shadow-sm",children:c.title}),t.jsxs("div",{className:"flex items-center gap-2 text-white/90 group-hover:text-white transition-colors font-black text-sm uppercase tracking-wide relative z-10",children:[t.jsx("span",{children:c.subtitle}),t.jsx(Nn,{className:"w-4 h-4"})]})]}),h.map(f=>t.jsxs("a",{href:f.link,target:"_blank",rel:"noopener noreferrer",className:"group relative h-80 bg-white/10 backdrop-blur-md border border-white/20 hover:border-white/40 rounded-2xl p-6 flex flex-col items-center justify-center transition-all duration-500 hover:-translate-y-2 hover:bg-white/15 overflow-hidden",children:[t.jsx("div",{className:"absolute inset-0 bg-gradient-to-t from-white/10 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-500"}),t.jsx("div",{className:"w-32 h-32 mb-8 relative grayscale group-hover:grayscale-0 transition-all duration-500 flex items-center justify-center group-hover:scale-110",children:t.jsx("img",{src:f.image,alt:f.name,className:"w-full h-full object-contain drop-shadow-lg"})}),t.jsx("h5",{className:"text-white font-bold text-2xl mb-3 tracking-wide group-hover:text-[#ff3b30] transition-colors drop-shadow-sm",children:f.name}),t.jsxs("div",{className:"flex items-center gap-2 text-sm text-gray-300 group-hover:text-white transition-colors font-bold uppercase tracking-wide",children:[t.jsx("span",{children:"Перейти"}),t.jsx(B1,{className:"w-4 h-4 group-hover:translate-x-1 group-hover:-translate-y-1 transition-transform"})]})]},f.id))]})]})]})},Up=({reviews:r,title:o,products:d,navigate:c})=>{const[h,m]=j.useState(0),[y,u]=j.useState(3),[f,x]=j.useState(null),[N,b]=j.useState([]);j.useEffect(()=>{b([...r].sort(()=>.5-Math.random()))},[r]),j.useEffect(()=>{const R=()=>{window.innerWidth<768?u(1):window.innerWidth<1024?u(2):u(3)};return R(),window.addEventListener("resize",R),()=>window.removeEventListener("resize",R)},[]),j.useEffect(()=>{const R=Math.max(0,N.length-y);h>R&&m(R)},[y,N.length]),j.useEffect(()=>{if(N.length<=y)return;const R=setInterval(()=>{m(D=>{const te=N.length-y;return D>=te?0:D+1})},6e3);return()=>clearInterval(R)},[y,N.length,h]);const C=()=>{N.length<=y||m(R=>{const D=N.length-y;return R>=D?0:R+1})},g=()=>{N.length<=y||m(R=>{const D=N.length-y;return R<=0?D:R-1})},O=R=>{x(R.touches[0].clientX)},E=R=>
2987{if(f===null)return;const D=R.changedTouches[0].clientX-f;Math.abs(D)>30&&(D<0?C():g()),x(null)},_=R=>{c&&R&&c(`/product/${R}`)},k=R=>R.includes("keyboards")||R.includes("mini")?"Клавиатура":R.includes("mice")?"Мышь":R.includes("headsets")?"Гарнитура":R.includes("mousepads")?"Коврик":R.includes("microphones")?"Микрофон":R.includes("accessories")?"":"Девайс";return t.jsx("section",{id:"reviews",className:"py-20 bg-gray-50 relative group overflow-hidden",onTouchStart:O,onTouchEnd:E,children:t.jsxs("div",{className:"max-w-[1400px] mx-auto px-4",children:[t.jsxs("div",{className:"text-center mb-12",children:[t.jsx("h2",{className:"text-3xl font-bold text-black uppercase tracking-widest mb-2",children:o||"ОТЗЫВЫ"}),t.jsx("div",{className:"w-16 h-1 bg-[#ff3b30] mx-auto rounded-full"})]}),t.jsxs("div",{className:"relative",children:[N.length>y&&t.jsxs(t.Fragment,{children:[t.jsx("button",{onClick:g,className:"absolute left-0 top-1/2 -translate-y-1/2 -translate-x-4 z-20 w-12 h-12 flex items-center justify-center bg-white shadow-xl rounded-full text-black hover:text-[#ff3b30] transition-all duration-300 opacity-0 group-hover:opacity-100 disabled:opacity-0",children:t.jsx(yp,{className:"w-8 h-8"})}),t.jsx("button",{onClick:C,className:"absolute right-0 top-1/2 -translate-y-1/2 translate-x-4 z-20 w-12 h-12 flex items-center justify-center bg-white shadow-xl rounded-full text-black hover:text-[#ff3b30] transition-all duration-300 opacity-0 group-hover:opacity-100 disabled:opacity-0",children:t.jsx(ys,{className:"w-8 h-8"})})]}),t.jsx("div",{className:"overflow-hidden py-4 -mx-4 px-4",children:t.jsx("div",{className:"flex transition-transform duration-700 ease-in-out items-stretch",style:{transform:`translateX(-${h*(100/y)}%)`},children:N.map(R=>{const D=d==null?void 0:d.find($=>$.id===R.productId),te=D?D.image:R.image;let W=R.product.replace(/VOROTEX/gi,"").trim();if(D){const $=k(D.category),H=D.name.replace(/VOROTEX/gi,"").trim();W=`${$} ${H}`.trim()}else W=W.replace(/^KB\s+/i,"Клавиатура ").replace(/^MS\s+/i,"Мышь ");return t.jsx("div",{className:"flex-shrink-0 px-4",style:{width:`${100/y}%`},children:t.jsxs("div",{className:"flex flex-col h-full bg-white p-8 rounded-xl shadow-sm border border-gray-100 hover:shadow-md transition-shadow",children:[t.jsxs("div",{className:"flex items-center justify-between mb-6",children:[t.jsx("div",{children:t.jsxs("h4",{className:"font-bold text-lg md:text-xl text-black flex items-center gap-2 truncate max-w-[180px]",children:[R.name,t.jsx("span",{className:"text-gray-400 text-xs font-normal shrink-0",children:R.source})]})}),t.jsx("div",{className:"flex text-yellow-400 shrink-0",children:[...Array(R.stars)].map(($,H)=>t.jsx(Va,{className:"w-4 h-4 fill-current"},H))})]}),t.jsx("div",{className:"flex-grow mb-6",children:t.jsx("p",{className:"text-gray-600 text-base leading-relaxed line-clamp-5",children:R.text})}),t.jsxs("button",{onClick:()=>_((D==null?void 0:D.id)||R.productId),className:"flex items-center gap-4 pt-4 border-t border-gray-100 mt-auto text-left group/product w-full",children:[t.jsx("div",{className:"w-10 h-10 rounded-lg overflow-hidden shrink-0 bg-gray-50 border border-gray-100 p-1 group-hover/product:border-gray-300 transition-colors",children:te?t.jsx("img",{src:te,alt:R.product,className:"w-full h-full object-contain mix-blend-multiply"}):t.jsx("div",{className:"w-full h-full flex items-center justify-center text-gray-400 font-bold text-lg",children:R.product.charAt(0)})}),t.jsx("span",{className:"font-bold text-xs text-gray-500 uppercase line-clamp-2 group-hover/product:text-[#ff3b30] transition-colors leading-tight",children:W})]})]})},R.id)})})})]})]})})},ej=({logoImage:r,columns:o,socialLinks:d,navigate:c,legalInfo:l_inf})=>{const h=y=>{switch(y){case"telegram":return t.jsx(fo,{className:"w-4 h-4"});case"vk":return t.jsx("span",{className:"font-bold text-xs",children:"VK"});case"youtube":return t.jsx(Mp,{className:"w-4 h-4"});case"discord":return t.jsx(pu,{className:"w-4 h-4"});case"twitter":return t.jsx(bw,{className:"w-4 h-4"});case"instagram":return t.jsx(Gv,{className:"w-4 h-4"});default:return t.jsx(vs,{className:"w-4 h-4"})}},m=y=>{c(y)};return t.jsxs("footer",{className:"bg-[#0a0a0a] border-t border-white/10 pt-16 pb-8 text-white relative",children:[t.jsx("div",{className:"absolute inset-0 bg-cyber-net opacity-20 pointer-events-none"}),t.jsxs("div",{className:"max-w-[1400px] mx-auto px-4 relative z-10",children:[t.jsx("div",{className:"flex flex-wrap justify-center gap-10 md:gap-16 lg:gap-24 mb-16",children:o.map(y=>t.jsxs("div",{className:"space-y-6 min-w-[140px]",children:[t.jsx("h5",{className:"font-black uppercase tracking-widest text-xs border-b-2 border-[#ff3b30] pb-2 inline-block text-white",children:y.title}),t.jsx("ul",{className:"space-y-3 text-xs font-medium text-gray-400",children:y.links.filter(u=>u.isVisible!==!1).map(u=>t.jsx("li",{onClick:()=>m(u.url),className:"hover:text-[#ff3b30] hover:translate-x-1 cursor-pointer transition-all duration-300 uppercase tracking-wide",children:u.name},u.id))})]},y.id))}),t.jsxs("div",{className:"flex flex-col md:flex-row justify-between items-center pt-8 border-t border-white/10",children:[t.jsx("div",{className:"flex items-center gap-4 mb-4 md:mb-0",children:d.map(y=>t.jsx("a",{href:y.url,target:"_blank",rel:"noopener noreferrer",className:"w-10 h-10 bg-white/5 border border-white/10 hover:bg-[#ff3b30] hover:border-[#ff3b30] transition-all duration-300 rounded-full flex items-center justify-center text-white overflow-hidden shadow-lg",title:y.platform,children:y.customIcon?t.jsx("img",{src:y.customIcon,alt:y.platform,className:"w-full h-full object-cover"}):h(y.platform)},y.id))}),t.jsxs("div",{className:"flex flex-col items-center md:items-end",children:[r?t.jsx("img",{src:r,alt:"Logo",className:"h-8 mb-2 object-contain"}):t.jsx("span",{className:"font-black text-lg text-white/30 tracking-widest mb-2",children:"VOROTEX"}),t.jsxs("div",{className:"text-gray-600 text-[10px] font-bold uppercase tracking-widest text-center md:text-right",children:[t.jsxs("p",{style:{whiteSpace:"pre-line"},children:["© ",(new Date).getFullYear()," VOROTEX. ",l_inf]})]})]})]})]})]})},tj=({isOpen:r,onClose:o,cart:d,onRemoveItem:c,onUpdateQuantity:h,navigate:m,onCheckout:y})=>{const u=d.reduce((N,b)=>N+b.price*b.quantity,0),f=N=>{o(),m(`/product/${N}`)},x=()=>{o(),y()};return t.jsxs(t.Fragment,{children:[t.jsx("div",{className:`fixed inset-0 bg-black/40 backdrop-blur-sm z-[60] transition-opacity duration-300 ${r?"opacity-100":"opacity-0 pointer-events-none"}`,onClick:o}),t.jsxs("div",{className:`fixed top-0 right-0 h-full w-full max-w-md bg-white shadow-2xl z-[70] transform transition-transform duration-300 ease-out flex flex-col ${r?"translate-x-0":"translate-x-full"}`,children:[t.jsxs("div",{className:"flex items-center justify-between p-6 border-b border-gray-100",children:[t.jsxs("h2",{className:"text-xl font-black text-black uppercase tracking-wide flex items-center gap-2",children:[t.jsx(Jt,{className:"w-5 h-5 text-[#ff3b30]"})," Корзина",t.jsxs("span",{className:"text-gray-400 text-sm font-medium normal-case ml-1",children:[d.length," товаров"]})]}),t.jsx("button",{onClick:o,className:"p-2 text-gray-400 hover:text-black hover:bg-gray-50 rounded-full transition-colors",children:t.jsx(xt,{className:"w-6 h-6"})})]}),t.jsx("div",{className:"flex-1 overflow-y-auto p-6 space-y-6",children:d.length===0?t.jsxs("div",{className:"h-full flex flex-col items-center justify-center text-gray-300 text-center",children:[t.jsx("div",{className:"w-20 h-20 bg-gray-50 rounded-full flex items-center justify-center mb-4",children:t.jsx(Jt,{className:"w-8 h-8 opacity-20"})}),t.jsx("p",{className:"text-lg font-bold text-gray-400 uppercase",children:"Корзина пуста"}),t.jsx("p",{className:"text-sm mt-1 max-w-[200px]",children:"Перейдите в каталог, чтобы найти что-то интересное"}),t.jsx("button",{onClick:o,className:"mt-6 text-[#ff3b30] font-bold text-sm uppercase hover:underline",children:"Вернуться к покупкам"})]}):d.map((N,b)=>t.jsxs("div",{className:"flex gap-4 group",children:[t.jsx("div",{onClick:()=>f(N.id),className:"w-24 h-24 rounded-xl overflow-hidden bg-white border border-gray-200 shrink-0 p-2 cursor-pointer hover:border-black transition-colors",children:t.jsx("img",{src:N.image,alt:N.name,className:"w-full h-full object-contain mix-blend-multiply"})}),t.jsxs("div",{className:"flex-1 flex flex-col justify-between py-1",children:[t.jsxs("div",{children:[t.jsxs("div",{className:"flex justify-between items-start",children:[t.jsx("h3",{onClick:()=>f(N.id),className:"font-bold text-black text-sm uppercase leading-tight pr-4 cursor-pointer hover:text-[#ff3b30] transition-colors",children:N.name}),t.jsx("button",{onClick:()=>c(b),className:"text-gray-300 hover:text-red-500 transition-colors -mt-1 p-1",children:t.jsx(jt,{className:"w-4 h-4"})})]}),N.selectedOptions&&Object.keys(N.selectedOptions).length>0&&t.jsx("div",{className:"flex flex-wrap gap-2 mt-1.5",children:Object.entries(N.selectedOptions).map(([C,g])=>t.jsx("span",{className:"text-[10px] text-gray-500 bg-gray-50 px-1.5 py-0.5 rounded border border-gray-200",children:g},C))})]}),t.jsxs("div",{className:"flex items-center justify-between mt-3",children:[t.jsxs("div",{className:"flex items-center gap-1 bg-white rounded-lg border border-gray-300 shadow-sm h-8",children:[t.jsx("button",{onClick:()=>h(b,-1),className:"w-8 h-full flex items-center justify-center text-gray-600 hover:text-black hover:bg-gray-50 rounded-l-lg transition-colors border-r border-gray-100",children:t.jsx(eu,{className:"w-3 h-3"})}),t.jsx("span",{className:"text-sm font-black w-8 text-center text-black tabular-nums",children:N.quantity}),t.jsx("button",{onClick:()=>h(b,1),disabled:N.quantity>=N.stock,className:`w-8 h-full flex items-center justify-center rounded-r-lg transition-colors border-l border-gray-100 ${N.quantity>=N.stock?"text-gray-300 cursor-not-allowed":"text-gray-600 hover:text-black hover:bg-gray-50"}`,children:t.jsx(At,{className:"w-3 h-3"})})]}),t.jsxs("p",{className:"font-black text-black text-sm",children:[N.price.toLocaleStr
2987ing()," ",nt]})]})]})]},`${N.id}-${b}`))}),d.length>0&&t.jsxs("div",{className:"p-6 bg-gray-50 border-t border-gray-100",children:[t.jsxs("div",{className:"space-y-2 mb-6",children:[t.jsxs("div",{className:"flex justify-between text-sm text-gray-500",children:[t.jsxs("span",{children:["Товары (",d.reduce((N,b)=>N+b.quantity,0),")"]}),t.jsxs("span",{children:[u.toLocaleString()," ",nt]})]}),t.jsxs("div",{className:"flex justify-between items-end pt-2 border-t border-gray-200",children:[t.jsx("span",{className:"font-bold text-black uppercase",children:"Итого"}),t.jsxs("span",{className:"text-2xl font-black text-black leading-none",children:[u.toLocaleString()," ",nt]})]})]}),d.some(N=>!N||N.stock<=0||N.quantity>N.stock)&&t.jsx("div",{className:"mt-3 mb-2 text-[12px] text-red-600 font-bold leading-snug text-center",children:"В корзине есть товары, которые закончились или их меньше, чем выбрано. Количество будет скорректировано."}),t.jsx("div",{className:"mt-4 mb-2 text-[12px] text-gray-500 leading-snug text-center",children:["Нажимая кнопку «Оформить заказ», вы соглашаетесь с ",t.jsx("a",{href:"/page/policy",className:"underline hover:text-black",children:"Условиями продажи"})," и ",t.jsx("a",{href:"/page/privacy",className:"underline hover:text-black",children:"Политикой конфиденциальности"}),"."]}),t.jsxs("button",{onClick:x,disabled:d.some(N=>!N||N.stock<=0||N.quantity>N.stock),className:`w-full py-4 font-bold text-sm uppercase rounded-xl transition-colors shadow-lg flex items-center justify-center gap-2 group ${d.some(N=>!N||N.stock<=0||N.quantity>N.stock)?"bg-gray-200 text-gray-400 cursor-not-allowed shadow-none":"bg-[#ff3b30] text-white hover:bg-red-600 shadow-red-500/20"}`,children:["Оформить заказ ",t.jsx(Cn,{className:"w-4 h-4 group-hover:translate-x-1 transition-transform"})]})]})]})]})},aj=({isOpen:r,onClose:o,cart:d,onClearCart:c,settings:h,currentUser:m,logoImage:y})=>{const[u,f]=j.useState("form"),[x,N]=j.useState(!1),[vxAgree,setVxAgree]=j.useState(!1),[vxCdekCity,setVxCdekCity]=j.useState(""),[vxCdekCities,setVxCdekCities]=j.useState([]),[vxCdekCityCode,setVxCdekCityCode]=j.useState(null),[vxCdekPvz,setVxCdekPvz]=j.useState([]),[vxCdekPvzCode,setVxCdekPvzCode]=j.useState(""),[vxCdekLoading,setVxCdekLoading]=j.useState(!1),[vxCdekCityOpen,setVxCdekCityOpen]=j.useState(!1),[b,C]=j.useState({lastName:"",firstName:"",middleName:"",phone:"",email:"",communicationMethod:"email",zip:"",city:"",street:"",pickupAddress:"",comment:""}),g=j.useMemo(()=>[b.lastName,b.firstName,b.middleName].map(K=>(K||"").trim()).filter(Boolean).join(" ").trim(),[b.lastName,b.firstName,b.middleName]),O=A=>{const K=(A||"").trim().split(/\s+/).filter(Boolean);return{lastName:K[0]||"",firstName:K[1]||"",middleName:K.slice(2).join(" ")||""}};j.useEffect(()=>{if(m){const A=O(m.name||"");C(K=>({...K,...A,email:m.email,phone:m.phone||K.phone,street:m.address||K.street}))}},[m]);const E=j.useMemo(()=>((h==null?void 0:h.deliveryMethods)||[]).filter(A=>A.enabled),[h]),_=j.useMemo(()=>((h==null?void 0:h.paymentMethods)||[]).filter(A=>A.enabled),[h]),[k,R]=j.useState(""),[D,te]=j.useState("");j.useEffect(()=>{E.length>0&&!k&&R(E[0].id)},[E]);const W=E.find(A=>A.id===k),$=(W==null?void 0:W.type)==="pickup",H=j.useMemo(()=>W?_.filter(A=>W.allowedPaymentIds.includes(A.id)):[],[W,_]),J=j.useMemo(()=>H.find(A=>A.id===D),[H,D]);const vxCdekOnCity=A=>{setVxCdekCity(A);setVxCdekCityCode(null);setVxCdekPvz([]);setVxCdekPvzCode("");C(K=>({...K,pickupAddress:""}));if(A.trim().length<2){setVxCdekCities([]);return}clearTimeout(window.__vxCdekCityTimer);window.__vxCdekCityTimer=setTimeout(()=>{fetch(`/api/get_cdek_cities.php?query=${encodeURIComponent(A)}`).then(v=>v.json()).then(v=>{if(v&&v.status==="success")setVxCdekCities(v.cities||[])}).catch(()=>{})},350)},vxCdekPickCity=v=>{setVxCdekCity(v.name);setVxCdekCityOpen(!1);setVxCdekCityCode(v.code);setVxCdekPvz([]);setVxCdekPvzCode("");C(K=>({...K,pickupAddress:""}));setVxCdekLoading(!0);fetch(`/api/get_cdek_pvz.php?city_code=${v.code}`).then(r=>r.json()).then(r=>{setVxCdekLoading(!1);if(r&&r.status==="success")setVxCdekPvz(r.points||[])}).catch(()=>{setVxCdekLoading(!1)})},vxCdekOnPvzSelect=A=>{setVxCdekPvzCode(A);const p=vxCdekPvz.find(v=>v.code===A);C(K=>({...K,pickupAddress:p?`[ПВЗ СДЭК ${p.code}] ${p.address}${p.workTime?" ("+p.workTime+")":""}`:""}))};j.useEffect(()=>{setVxCdekCity("");setVxCdekCities([]);setVxCdekCityCode(null);setVxCdekPvz([]);setVxCdekPvzCode("");setVxCdekCityOpen(!1);C(K=>({...K,pickupAddress:""}))},[k]);j.useEffect(()=>{H.length>0?H.some(K=>K.id===D)||te(H[0].id):te("")},[H,D]);const Y=d.reduce((A,K)=>A+K.price*K.quantity,0),G=(W==null?void 0:(W.priceMode==="included"?0:W.price))||0,Z=J&&J.discount&&J.discount.enabled?(J.discount.type=="percent"?Math.min(Y,Math.max(0,Math.round(Y*(Number(J.discount.value)||0)/100))):Math.min(Y,Math.max(0,Math.round(Number(J.discount.value)||0)))):0,U=Y+G-Z,q=(h==null?void 0:h.minOrderSum)||0,P=Y>=q,pe=()=>{b.phone||C(A=>({...A,phone:"+7"}))},B=()=>{(b.phone==="+7"||b.phone==="+")&&C(A=>({...A,phone:""}))},z=A=>{const K=A.target.value;if(!K){C(M=>({...M,phone:""}));return}let w=K.replace(/\D/g,"");if(K.length<b.phone.length&&K==="+"){C(M=>({...M,phone:""}));return}if(w.length>0)w[0]==="7"||w[0]==="8"?w="7"+w.substring(1):w="7"+w;
2987else{C(M=>({...M,phone:"+7"}));return}w=w.substring(0,11);let V="";w.length>0&&(V+="+7"),w.length>1&&(V+=" ("+w.substring(1,4)),w.length>4&&(V+=") "+w.substring(4,7)),w.length>7&&(V+="-"+w.substring(7,9)),w.length>9&&(V+="-"+w.substring(9,11)),C(M=>({...M,phone:V}))},v=async A=>{var le;if(A.preventDefault(),!vxAgree){oe.error("Необходимо согласие с условиями продажи и политикой конфиденциальности");return}if(!P){oe.error(`Минимальная сумма заказа: ${q} ${nt}`);return}if(!b.lastName.trim()||!b.firstName.trim()){oe.error("Укажите Фамилию и Имя");return}if(b.phone.length<12){oe.error("Введите корректный номер телефона");return}if(!b.email||!b.email.includes("@")){oe.error("Введите корректный Email");return}if($&&W.cdekEnabled&&(!vxCdekPvzCode||!b.pickupAddress)){oe.error("Выберите пункт выдачи СДЭК");return}N(!0);let K="";$?K=`[ПВЗ] ${b.pickupAddress}`:K=`${b.zip}, г. ${b.city}, ${b.street}`;const w=(m==null?void 0:m.id)||"",M=(((le=h==null?void 0:h.notifications)==null?void 0:le.orderEmails)||[Bp[0].email]).join(","),X={id:0,userId:w,customer:{lastName:b.lastName.trim(),firstName:b.firstName.trim(),middleName:b.middleName.trim(),name:g,phone:b.phone,email:b.email,communicationMethod:b.communicationMethod==="phone"?"Телефон":"Email",address:K,comment:b.comment},delivery:k,deliveryName:(W==null?void 0:W.name)||"",deliveryDescription:(W==null?void 0:W.description)||"",deliveryCost:G,payment:D,paymentName:(J==null?void 0:J.name)||"",paymentDescription:(J==null?void 0:J.description)||"",items:d.map(xe=>({id:xe.id,name:xe.name,variantId:xe.selectedVariantId,selectedOptions:xe.selectedOptions,quantity:xe.quantity,price:xe.price,image:xe.image})),itemsTotal:Y,total:U,status:"checking",date:new Date().toISOString(),_meta:{site:window.location.origin,logoUrl:y?new URL(y,window.location.origin).toString():""},emailPayload:{adminEmail:M,userEmail:b.email}};try{const xe=new AbortController,ge=setTimeout(()=>xe.abort(),15e3),je=await fetch("/api/create_order.php",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(X),signal:xe.signal});clearTimeout(ge);const Ne=je.headers.get("content-type");if(je.ok&&Ne&&Ne.includes("application/json")){const Ee=await je.json();if(Ee.status==="success"){const He=String(D||"").toLowerCase(),We=He==="card"||He==="yookassa"||He.includes("yoo")||He.includes("kassa")||He.includes("юкасса")||He.includes("юк");if(We){try{oe.loading("Перенаправляем на оплату...",{duration:1500});const Ve=await fetch("/api/yookassa_create_payment.php",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({orderId:Ee.orderId,returnUrl:window.location.origin+"/?pay_return=1&orderId="+encodeURIComponent(String(Ee.orderId))})}),Me=Ve.headers.get("content-type")||"";if(!Ve.ok)throw new Error(`HTTP ${Ve.status}`);if(!Me.includes("application/json"))throw new Error("Not JSON");const Qe=await Ve.json();if(Qe.status!=="success"||!Qe.confirmation_url)throw new Error(Qe.message||"Ошибка оплаты");c(),window.location.href=String(Qe.confirmation_url);return}catch(ve){console.warn("YooKassa create payment failed:",ve),oe.error("Не удалось перейти к оплате. Попробуйте позже.")}}f("success"),c(),oe.success("Благодарим за заказ! Ваш заказ будет обработан в ближайшее время.",{duration:5e3}),Ee.userCreated&&oe.success("Аккаунт создан. Пароль отправлен на почту.",{duration:5e3})}else throw new Error("API Error")}else throw new Error("Server returned HTML or unreachable")}catch(xe){console.warn("Order API failed:",xe),oe.error("Не удалось оформить заказ. Попробуйте позже.")}finally{N(!1)}},T=()=>{o(),setTimeout(()=>{f("form"),C({lastName:"",firstName:"",middleName:"",phone:"",email:"",communicationMethod:"email",zip:"",city:"",street:"",pickupAddress:"",comment:""}),setVxAgree(!1),setVxCdekCity(""),setVxCdekCities([]),setVxCdekCityCode(null),setVxCdekPvz([]),setVxCdekPvzCode(""),setVxCdekCityOpen(!1)},300)};return t.jsxs(t.Fragment,{children:[t.jsx("div",{className:`fixed inset-0 bg-black/60 backdrop-blur-sm z-[80] transition-opacity duration-300 ${r?"opacity-100":"opacity-0 pointer-events-none"}`,onClick:T}),t.jsxs("div",{className:`fixed top-0 right-0 h-full w-full max-w-lg bg-white shadow-2xl z-[90] transform transition-transform duration-300 ease-out flex flex-col ${r?"translate-x-0":"translate-x-full"}`,children:[t.jsxs("div",{className:"flex items-center justify-between p-6 border-b border-gray-100",children:[t.jsxs("h2",{className:"text-xl font-black text-black uppercase tracking-wide flex items-center gap-2",children:[t.jsx(po,{className:"w-5 h-5 text-[#ff3b30]"})," Оформление"]}),t.jsx("button",{onClick:T,className:"p-2 text-gray-400 hover:text-black hover:bg-gray-50 rounded-full transition-colors",children:t.jsx(xt,{className:"w-6 h-6"})})]}),t.jsx("div",{className:"flex-1 overflow-y-auto p-6 custom-scrollbar",children:u==="form"?t.jsxs("form",{id:"checkout-form",onSubmit:v,className:"flex flex-col gap-3",children:[t.jsxs("div",{className:"space-y-4",children:[t.jsx("h3",{className:"text-sm font-bold text-black uppercase",children:"Контактные данные"}),t.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:[t.jsxs("div",{children:[t.jsx("label",{className:"text-[10px] font-bold text-gray-500 uppercase block mb-1",children:"Фамилия *"}),t.jsx("input",{required:!0,value:b.lastName,onChange:A=>C({...b,lastName:A.target.value}),className:"w-full bg-white border border-gray-300 rounded p-2.5 text-sm text-black focus:border-black focus:ring-0 outline-none placeholder-gray-400",placeholder:"Иванов"})]}),t.jsxs("div",{children:[t.jsx("label",{className:"text-[10px] font-bold text-gray-500 uppercase block mb-1",children:"Имя *"}),t.jsx("input",{required:!0,value:b.firstName,onChange:A=>C({...b,firstName:A.target.value}),className:"w-full bg-white border border-gray-300 rounded p-2.5 text-sm text-black focus:border-black focus:ring-0 outline-none placeholder-gray-400",placeholder:"Иван"})]}),t.jsxs("div",{children:[t.jsx("label",{className:"text-[10px] font-bold text-gray-500 uppercase block mb-1",children:"Отчество"}),t.jsx("input",{value:b.middleName,onChange:A=>C({...b,middleName:A.target.value}),className:"w-full bg-white border border-gray-300 rounded p-2.5 text-sm text-black focus:border-black focus:ring-0 outline-none placeholder-gray-400",placeholder:"Иванович"})]})]}),t.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[t.jsxs("div",{children:[t.jsx("label",{className:"text-[10px] font-bold text-gray-500 uppercase block mb-1",children:"Телефон *"}),t.jsx("input",{required:!0,type:"tel",value:b.phone,onChange:z,onFocus:pe,onBlur:B,className:"w-full bg-white border border-gray-300 rounded p-2.5 text-sm text-black focus:border-black focus:ring-0 outline-none placeholder-gray-400 font-mono",placeholder:"+7 (999) 000-00-00",maxLength:18})]}),t.jsxs("div",{children:[t.jsx("label",{className:"text-[10px] font-bold text-gray-500 uppercase block mb-1",children:"Email *"}),t.jsx("input",{required:!0,type:"email",value:b.email,onChange:A=>C({...b,email:A.target.value}),className:"w-full bg-white border border-gray-300 rounded p-2.5 text-sm text-black focus:border-black focus:ring-0 outline-none placeholder-gray-400",placeholder:"[email protected]"})]})]}),t.jsxs("div",{children:[t.jsx("label",{className:"text-[10px] font-bold text-gray-500 uppercase block mb-2",children:"Приоритетный способ связи"}),t.jsxs("div",{className:"flex gap-6",children:[t.jsxs("label",{className:"flex items-center gap-2 cursor-pointer group",children:[t.jsx("div",{className:`w-4 h-4 rounded-full border flex items-center justify-center transition-colors ${b.communicationMethod==="email"?"border-black":"border-gray-300 group-hover:border-gray-400"}`,children:b.communicationMethod==="email"&&t.jsx("div",{className:"w-2 h-2 rounded-full bg-black"})}),t.jsx("input",{type:"radio",name:"commMethod",className:"hidden",checked:b.communicationMethod==="email",onChange:()=>C({...b,communicationMethod:"email"})}),t.jsx("span",{className:`text-sm ${b.communicationMethod==="email"?"font-bold text-black":"text-gray-600 group-hover:text-black"}`,children:"Email"})]}),t.jsxs("label",{className:"flex items-center gap-2 cursor-pointer group",children:[t.jsx("div",{className:`w-4 h-4 rounded-full border flex items-center justify-center transition-colors ${b.communicationMethod==="phone"?"border-black":"border-gray-300 group-hover:border-gray-400"}`,children:b.communicationMethod==="phone"&&t.jsx("div",{className:"w-2 h-2 rounded-full bg-black"})}),t.jsx("input",{type:"radio",name:"commMethod",className:"hidden",checked:b.communicationMethod==="phone",onChange:()=>C({...b,communicationMethod:"phone"})}),t.jsx("span",{className:`text-sm ${b.communicationMethod==="phone"?"font-bold text-black":"text-gray-600 group-hover:text-black"}`,children:"Телефон"})]})]})]})]}),t.jsxs("div",{className:"space-y-4",children:[t.jsxs("h3",{className:"text-sm font-bold text-black uppercase flex items-center gap-2",children:[t.jsx(Pa,{className:"w-4 h-4"})," Способ доставки"]}),t.jsx("div",{className:"grid grid-cols-1 gap-3",children:E.length===0?t.jsx("div",{className:"text-sm text-gray-400 italic",children:"Нет доступных способов доставки."}):E.map(A=>t.jsxs("div",{onClick:()=>R(A.id),className:`border rounded-lg p-3 cursor-pointer transition-all flex items-center justify-between ${k===A.id?"border-[#ff3b30] bg-red-50":"border-gray-200 hover:border-gray-400"}`,children:[t.jsxs("div",{children:[t.jsx("div",{className:"font-bold text-sm text-black",children:A.name}),A.description&&t.jsx("div",{className:"text-xs text-gray-500",children:A.description})]}),t.jsx("div",{className:"font-bold text-sm text-black",children:A.priceMode==="included"?"Бесплатно":A.price===0?"0 ₽":`${A.price} ₽`})]},A.id))})]}),W&&t.jsxs("div",{className:"space-y-4 animate-fade-in bg-gray-50 p-4 rounded-xl border border-gray-100",children:[t.jsx("h3",{className:"text-sm font-bold text-black uppercase",children:$?"Адрес пункта выдачи":"Адрес доставки"}),$?(W.cdekEnabled?t.jsxs("div",{className:"space-y-3",children:[t.jsxs("div",{className:"relative",children:[t.jsx("label",{className:"text-[10px] font-bold text-gray-500 uppercase block mb-1",children:"Город *"}),t.jsx("input",{required:!0,autoComplete:"off",value:vxCdekCity,onChange:A=>{vxCdekOnCity(A.target.value);setVxCdekCityOpen(!0)},onFocus:()=>setVxCdekCityOpen(!0),onBlur:()=>setTimeout(()=>setVxCdekCityOpen(!1),200),className:"w-full bg-white border border-gray-300 rounded p-2.5 text-sm text-black focus:border-black focus:ring-0 outline-none placeholder-gray-400",placeholder:"Начните вводить город"}),vxCdekCityOpen&&vxCdekCities.length>0&&t.jsx("div",{className:"absolute z-10 left-0 right-0 mt-1 bg-white border border-gray-300 rounded-lg shadow-lg max-h-52 overflow-y-auto",children:vxCdekCities.map(v=>t.jsxs("div",{onMouseDown:()=>vxCdekPickCity(v),className:"px-3 py-2 text-sm text-black hover:bg-gray-100 cursor-pointer border-b border-gray-100 last:border-b-0",children:[v.name,v.region&&t.jsxs("span",{className:"text-gray-400",children:[" — ",v.region]})]},v.code))}),vxCdekCityOpen&&vxCdekCity.trim().length>=2&&vxCdekCities.length===0&&!vxCdekLoading&&t.jsx("div",{className:"absolute z-10 left-0 right-0 mt-1 bg-white border border-gray-300 rounded-lg shadow-lg px-3 py-2 text-sm text-gray-400",children:"Город не найден"})]}),!!vxCdekCityCode&&t.jsxs("div",{children:[t.jsx("label",{className:"text-[10px] font-bold text-gray-500 uppercase block mb-1",children:"Пункт выдачи *"}),t.jsxs("select",{required:!0,value:vxCdekPvzCode,onChange:A=>vxCdekOnPvzSelect(A.target.value),className:"w-full bg-white border border-gray-300 rounded p-2.5 text-sm text-black focus:border-black focus:ring-0 outline-none",children:[t.jsx("option",{value:"",children:vxCdekLoading?"Загрузка...":vxCdekPvz.length===0?"Нет пунктов выдачи в этом городе":"Выберите пункт выдачи"}),vxCdekPvz.map(v=>t.jsx("option",{value:v.code,children:v.workTime?`${v.address} — ${v.workTime}`:v.address},v.code))]})]})]}):t.jsxs("div",{children:[t.jsx("label",{className:"text-[10px] font-bold text-gray-500 uppercase block mb-1",children:"Адрес ПВЗ / Отделения *"}),t.jsx("input",{required:!0,value:b.pickupAddress,onChange:A=>C({...b,pickupAddress:A.target.value}),className:"w-full bg-white border border-gray-300 rounded p-2.5 text-sm text-black focus:border-black focus:ring-0 outline-none placeholder-gray-400",placeholder:"Например: г. Москва, ул. Ленина 1, ПВЗ СДЭК"})]})):t.jsxs("div",{className:"space-y-3",children:[t.jsxs("div",{className:"grid grid-cols-3 gap-3",children:[t.jsxs("div",{className:"col-span-1",children:[t.jsx("label",{className:"text-[10px] font-bold text-gray-500 uppercase block mb-1",children:"Индекс"}),t.jsx("input",{value:b.zip,onChange:A=>C({...b,zip:A.target.value}),className:"w-full bg-white border border-gray-300 rounded p-2.5 text-sm text-black focus:border-black outline-none",placeholder:"101000"})]}),t.jsxs("div",{className:"col-span-2",children:[t.jsx("label",{className:"text-[10px] font-bold text-gray-500 uppercase block mb-1",children:"Город *"}),t.jsx("input",{required:!0,value:b.city,onChange:A=>C({...b,city:A.target.value}),className:"w-full bg-white border border-gray-300 rounded p-2.5 text-sm text-black focus:border-black outline-none",placeholder:"Москва"})]})]}),t.jsxs("div",{children:[t.jsx("label",{className:"text-[10px] font-bold text-gray-500 uppercase block mb-1",children:"Улица, дом, квартира *"}),t.jsx("input",{required:!0,value:b.street,onChange:A=>C({...b,street:A.target.value}),className:"w-full bg-white border border-gray-300 rounded p-2.5 text-sm text-black focus:border-black outline-none",placeholder:"ул. Пушкина, д. 10, кв. 5"})]})]}),t.jsxs("div",{children:[t.jsx("label",{className:"text-[10px] font-bold text-gray-500 uppercase block mb-1 mt-3",children:"Комментарий к заказу"}),t.jsx("textarea",{value:b.comment,onChange:A=>C({...b,comment:A.target.value}),className:"w-full bg-white border border-gray-300 rounded p-2.5 text-sm text-black focus:border-black outline-none h-16 resize-none placeholder-gray-400",placeholder:"Код домофона, пожелания..."})]})]}),t.jsxs("div",{className:"space-y-4",children:[t.jsx("h3",{className:"text-sm font-bold text-black uppercase",children:"Оплата"}),H.length===0?t.jsx("div",{className:"p-3 bg-gray-100 text-gray-500 text-xs rounded border border-gray-200",children:W?"Для выбранного способа доставки нет доступных методов оплаты.":"Сначала выберите способ доставки."}):t.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-3",children:H.map(A=>t.jsxs("div",{onClick:()=>te(A.id),className:`border rounded-lg p-3 cursor-pointer transition-all ${D===A.id?"border-black bg-black text-white":"border-gray-200 text-gray-500 hover:border-black"}`,children:[t.jsxs("div",{className:"font-bold text-xs uppercase text-center mb-1 flex items-center justify-center gap-2 flex-wrap",children:[t.jsx("span",{children:A.name}),A.discount&&A.discount.enabled&&Number(A.discount.value||0)>0&&t.jsxs("span",{className:`px-2 py-0.5 rounded-full text-[10px] font-black uppercase tracking-wider border ${D===A.id?"bg-white/10 text-white border-white/20":"bg-[#ff3b30]/10 text-[#ff3b30] border-[#ff3b30]/20"}`,children:["СКИДКА ",A.discount.type=="percent"?`${A.discount.value}%`:`${A.discount.value} ₽`]} )]}),A.description&&t.jsx("div",{className:`text-[10px] text-center ${D===A.id,"text-gray-400"}`,children:A.description})]},A.id))})]}),J&&J.discount&&J.disco
2987unt.enabled&&Z>0&&t.jsx("div",{className:"mt-3 bg-[#ff3b30]/5 border border-[#ff3b30]/15 rounded-xl p-3 text-[12px] font-black uppercase tracking-wide text-black leading-snug",children:((J.discount.promoText||(`Скидка ${J.discount.type=="percent"?J.discount.value+"%":J.discount.value+" ₽"} при выборе “${J.name}”`))+"" ).toUpperCase()}),t.jsxs("div",{className:"bg-gray-50 p-4 rounded-xl border border-gray-100 mt-auto",children:[t.jsxs("h3",{className:"text-xs font-bold text-gray-500 uppercase mb-3 flex items-center gap-2",children:[t.jsx(Jt,{className:"w-4 h-4"})," Итог"]}),t.jsx("div",{className:"space-y-2 max-h-32 overflow-visible custom-scrollbar pr-2 mb-4 border-b border-gray-200 pb-2",children:d.map((A,K)=>t.jsxs("div",{className:"flex justify-between text-xs text-gray-600",children:[t.jsxs("span",{className:"truncate pr-4",children:[A.quantity,"x ",A.name]}),t.jsxs("span",{className:"font-bold whitespace-nowrap",children:[A.price.toLocaleString()," ",nt]})]},K))}),t.jsxs("div",{className:"space-y-1",children:[t.jsxs("div",{className:"flex justify-between text-sm text-gray-500",children:[t.jsx("span",{children:"Товары"}),t.jsxs("span",{children:[Y.toLocaleString()," ",nt]})]}),t.jsxs("div",{className:"flex justify-between text-sm text-gray-500",children:[t.jsx("span",{children:"Доставка"}),t.jsx("span",{className:G===0?"text-green-600 font-bold uppercase text-xs":"",children:G===0?"Бесплатно":`${G.toLocaleString()} ${nt}`})]}),Z>0&&t.jsxs("div",{className:"flex justify-between text-sm text-gray-500",children:[t.jsx("span",{className:"font-bold uppercase text-[11px]",children:"Скидка (оплата)"}),t.jsxs("span",{className:"font-bold text-[#ff3b30]",children:["- ",Z.toLocaleString()," ",nt]})]})]}),t.jsxs("div",{className:"border-t border-gray-200 mt-3 pt-3 flex justify-between items-center",children:[t.jsx("span",{className:"font-bold text-black uppercase",children:"Итого к оплате"}),t.jsxs("span",{className:"font-black text-xl text-[#ff3b30]",children:[U.toLocaleString()," ",nt]})]}),!P&&t.jsxs("div",{className:"mt-3 bg-red-50 text-red-600 text-xs p-2 rounded flex items-center gap-2 font-medium",children:[t.jsx(to,{className:"w-4 h-4"}),"Минимальная сумма заказа: ",q," ",nt]})]})]}):t.jsxs("div",{className:"h-full flex flex-col items-center justify-center text-center animate-fade-in",children:[t.jsx("div",{className:"w-24 h-24 bg-green-500 rounded-full flex items-center justify-center mb-6 shadow-xl shadow-green-200",children:t.jsx(wn,{className:"w-12 h-12 text-white"})}),t.jsx("h2",{className:"text-2xl font-black text-black uppercase mb-2",children:"Заказ принят!"}),t.jsx("p",{className:"text-gray-500 max-w-xs mx-auto mb-8",children:"Благодарим за заказ! Ваш заказ будет обработан в ближайшее время. Подтверждение отправлено на вашу почту."}),t.jsx("button",{onClick:T,className:"px-8 py-3 bg-black text-white font-bold uppercase rounded-xl hover:bg-[#ff3b30] transition-colors",children:"Вернуться в магазин"})]})}),u==="form"&&t.jsxs("div",{className:"p-6 bg-gray-50 border-t border-gray-200",children:[t.jsxs("label",{className:"flex items-start gap-2 mb-3 text-[12px] text-gray-600 leading-snug cursor-pointer select-none",children:[t.jsx("input",{type:"checkbox",checked:vxAgree,onChange:A=>setVxAgree(A.target.checked),className:"mt-0.5 w-4 h-4 accent-[#ff3b30] cursor-pointer shrink-0"}),t.jsxs("span",{children:["Я согласен с ",t.jsx("a",{href:"/page/policy",target:"_blank",rel:"noopener noreferrer",className:"underline hover:text-black",children:"условиями продажи"})," и ",t.jsx("a",{href:"/page/privacy",target:"_blank",rel:"noopener noreferrer",className:"underline hover:text-black",children:"политикой конфиденциальности"}),", включая обработку персональных данных."]})]}),t.jsx("button",{type:"submit",form:"checkout-form",disabled:x||d.length===0||!P||!D||!vxAgree,className:"w-full py-4 bg-[#ff3b30] text-white font-bold text-sm uppercase rounded-xl hover:bg-red-600 transition-colors shadow-lg shadow-red-500/20 flex items-center justify-center gap-2 disabled:opacity-50 disabled:cursor-not-allowed",children:x?t.jsx(so,{className:"w-5 h-5 animate-spin"}):"Подтвердить заказ"})]})]})]})},lj=({categories:r=[],navigate:o,showTitle:d=!0})=>{const c=m=>{switch(m){case 0:return"md:col-span-2 md:row-span-2";case 1:return"md:col-span-1 md:row-span-1";case 2:return"md:col-span-1 md:row-span-1";case 3:return"md:col-span-2 md:row-span-1";case 4:return"md:col-span-2 md:row-span-1";case 5:return"md:col-span-2 md:row-span-1";default:return"md:col-span-1 md:row-span-1"}},h=m=>{if(m.startsWith("/")){o(m),window.scrollTo(0,0);return}const y=document.getElementById(m);if(y){y.scrollIntoView({behavior:"smooth"});return}if(m.startsWith("http")){window.open(m,"_blank");return}o(`/search?q=${encodeURIComponent(m)}`)};return!r||r.length===0?null:t.jsxs("section",{id:"catalog",className:`max-w-[1400px] mx-auto px-4 ${d?"py-12":"py-2 md:py-8"}`,children:[d&&t.jsxs("div",{className:"text-center mb-8",children:[t.jsx("h2",{className:"text-3xl font-bold text-black uppercase tracking-widest mb-2",children:"Каталог"}),t.jsx("div",{className:"w-16 h-1 bg-[#ff3b30] mx-auto rounded-full"})]}),t.jsx("div",{className:"grid grid-cols-1 md:grid-cols-4 gap-4 auto-rows-[320px] md:auto-rows-[320px]",children:r.map((m,y)=>t.jsxs("div",{onClick:()=>h(m.link),className:`${c(y)} relative group overflow-hidden rounded-2xl cursor-pointer`,children:[t.jsx("img",{src:m.image,className:"w-full h-full object-cover transition-transform duration-500 group-hover:scale-105",alt:m.name}),t.jsx("div",{className:"absolute inset-0 bg-black/30 group-hover:bg-black/20 transition-colors"}),t.jsx("span",{className:`absolute bottom-6 left-6 text-white font-bold uppercase tracking-wider drop-shadow-lg ${y===0?"text-3xl md:text-4xl":"text-2xl"}`,children:m.name})]},m.id))})]})},sj=({categories:r,products:o,onAddToCart:d,navigate:c,seo:h,enableSales:m,favorites:y=[],onToggleFavorite:u,compareList:f=[],onToggleCompare:x})=>{const[N,b]=j.useState("default"),C=j.useMemo(()=>{let g=[...o];switch(N){case"price-asc":return g.sort((O,E)=>(O.price||0)-(E.price||0));case"price-desc":return g.sort((O,E)=>(E.price||0)-(O.price||0));case"name-asc":return g.sort((O,E)=>O.name.localeCompare(E.name));case"name-desc":return g.sort((O,E)=>E.name.localeCompare(O.name));default:return g}},[o,N]);return j.useEffect(()=>{if(h){document.title=h.title||"Каталог | VOROTEX";const g=(D,te)=>{let W=document.querySelector(`meta[name="${D}"]`);W||(W=document.createElement("meta"),W.setAttribute("name",D),document.head.appendChild(W)),W.setAttribute("content",te)},O=(D,te)=>{let W=document.querySelector(`meta[property="${D}"]`);W||(W=document.createElement("meta"),W.setAttribute("property",D),document.head.appendChild(W)),W.setAttribute("content",te)},E=D=>{let te=document.querySelector('link[rel="canonical"]');
2987te||(te=document.createElement("link"),te.setAttribute("rel","canonical"),document.head.appendChild(te)),te.setAttribute("href",D)};g("description",h.description||""),h.keywords&&g("keywords",h.keywords),h.ogImage&&O("og:image",h.ogImage);const _=h.indexing!==!1?"index, follow":"noindex, nofollow";g("robots",_);const R=`${window.location.origin}/catalog`;E(R),O("og:type","website"),O("og:url",R),O("og:title",h.title||"Каталог | VOROTEX"),O("og:description",h.description||"")}},[h]),t.jsx("div",{className:"pt-28 md:pt-32 pb-20 min-h-screen bg-white",children:t.jsxs("div",{className:"max-w-[1400px] mx-auto px-4",children:[t.jsxs("button",{onClick:()=>c("/"),className:"flex items-center gap-2 text-gray-500 hover:text-black mb-4 transition-colors group font-medium text-xs md:text-sm uppercase tracking-wide",children:[t.jsx(Ca,{className:"w-3 h-3 md:w-4 md:h-4 group-hover:-translate-x-1 transition-transform"})," На главную"]}),t.jsxs("div",{className:"mb-4 border-b border-gray-100 pb-2",children:[t.jsxs("h1",{className:"text-3xl md:text-6xl font-black uppercase text-black mb-2 tracking-tighter flex items-center gap-3 md:gap-4",children:[t.jsx(lo,{className:"w-8 h-8 md:w-16 md:h-16 text-[#ff3b30]"}),"Каталог"]}),t.jsx("p",{className:"text-sm md:text-lg text-gray-600 w-full md:whitespace-nowrap",children:"Полный ассортимент продукции VOROTEX. Выберите категорию или смотрите все товары ниже."})]}),t.jsx("div",{className:"mb-8 md:mb-12",children:t.jsx(lj,{categories:r,navigate:c,showTitle:!1})}),t.jsxs("div",{className:"mb-6 md:mb-8 flex flex-row items-center justify-between gap-4",children:[t.jsx("h2",{className:"text-lg md:text-2xl font-bold text-black uppercase tracking-wide",children:"Все товары"}),t.jsx("div",{className:"flex items-center gap-3",children:t.jsxs("div",{className:"relative group min-w-[140px] md:min-w-[200px]",children:[t.jsx(bp,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-3.5 h-3.5 md:w-4 md:h-4 text-gray-500 pointer-events-none group-hover:text-black transition-colors"}),t.jsxs("select",{value:N,onChange:g=>b(g.target.value),className:"appearance-none pl-9 md:pl-10 pr-8 py-2 md:py-2.5 bg-gray-50 border border-gray-200 text-black text-[10px] md:text-xs font-bold uppercase rounded-lg focus:ring-1 focus:ring-black focus:border-black block w-full outline-none cursor-pointer hover:bg-gray-100 transition-colors",children:[t.jsx("option",{value:"default",children:"По умолчанию"}),t.jsx("option",{value:"price-asc",children:"Цена: По возрастанию"}),t.jsx("option",{value:"price-desc",children:"Цена: По убыванию"}),t.jsx("option",{value:"name-asc",children:"Название (А-Я)"}),t.jsx("option",{value:"name-desc",children:"Название (Я-А)"})]}),t.jsx("div",{className:"absolute right-3 top-1/2 -translate-y-1/2 pointer-events-none",children:t.jsx(Y2,{className:"w-3 h-3 text-gray-400"})})]})})]}),t.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-6",children:C.map(g=>t.jsx("div",{className:"h-[480px]",children:t.jsx(go,{product:g,onAddToCart:d,navigate:c,enableSales:m,isFavorite:y.some(O=>O.id===g.id),onToggleFavorite:u,isComparing:f.some(O=>O.id===g.id),onToggleCompare:x})},g.id))})]})})},rj=({products:r,category:o,filters:d,onFilterChange:c,isOpenMobile:h,onCloseMobile:m})=>{const[y,u]=j.useState({price:!0,colors:!0}),[f,x]=j.useState(!1),N=G=>G.replace(/\w\S*/g,U=>U.charAt(0).toUpperCase()+U.substring(1).toLowerCase()),S=G=>{let U=G&&typeof G.price=="number"?G.price:0;try{if(G&&Array.isArray(G.variants)&&G.variants.length){let q=null;for(let P=0;P<G.variants.length;P++){const pe=G.variants[P]&&G.variants[P].price;typeof pe=="number"&&!Number.isNaN(pe)&&(q=q===null?pe:Math.min(q,pe))}q!==null&&(U=q)}}catch(q){}return U},b=(G,U)=>{const q=G.trim();if(U){const P=U.groups.find(pe=>pe.variations.some(B=>B.toLowerCase()===q.toLowerCase()));if(P)return P.display}return N(q)},C=(G,U,q)=>{var P,pe,B;if(S(G)<U.priceRange[0]||S(G)>U.priceRange[1]||q!=="colors"&&U.colors.length>0&&!((P=G.options)==null?void 0:P.some(v=>v.type==="color"&&v.values.some(T=>U.colors.includes(T.name)))))return!1;for(const[z,v]of Object.entries(U.specs)){if(z===q||v.length===0)continue;const T=(pe=G.specs)==null?void 0:pe[z];if(!T)return!1;const A=(B=o.filterSettings)==null?void 0:B.find(V=>V.key===z);if(!T.split(/[,/]/).map(V=>V.trim()).some(V=>{const M=b(V,A);return v.includes(M)}))return!1}return!0},g=G=>{if(!G||G.length===0)return"transparent";if(G.length===1)return G[0];const U=100/G.length;return`conic-gradient(${G.map((P,pe)=>`${P} ${pe*U}% ${(pe+1)*U}%`).join(", ")})`},O=j.useMemo(()=>{let G=1/0,U=-1/0;return r.forEach(q=>{const P=S(q);P<G&&(G=P),P>U&&(U=P)}),{min:G===1/0?0:G,max:U===-1/0?1e4:U}},[r]);j.useEffect(()=>{!f&&O.max>0&&(d.priceRange[0]===0&&d.priceRange[1]===1e5&&c({...d,priceRange:[O.min,O.max]}),x(!0))},[O,d,c,f]);const E=j.useMemo(()=>{const G={},U={},q={},P=o.filterSettings||[],pe=["Вес","Размеры","Длина кабеля","Рабочий ток","Количество клавиш","Разрешение датчика","Ресурс клавиш","Чувствительность","Частотный диапазон","Импеданс","Микрофон"],B=v=>(U[v]||(U[v]=new Map),U[v]);r.forEach(v=>{var T;C(v,d,"colors")&&((T=v.options)==null||T.forEach(A=>
2987{A.type==="color"&&A.values.forEach(K=>{K.colors?q[K.name]=K.colors:K.value&&(q[K.name]=K.value),G[K.name]=(G[K.name]||0)+1})}))});const z=new Set;return r.forEach(v=>{v.specs&&Object.keys(v.specs).forEach(T=>z.add(T))}),z.forEach(v=>{const T=P.find(K=>K.key===v);if(T&&!T.isVisible||!T&&pe.includes(v))return;const A=B(v);r.forEach(K=>{var w;if(C(K,d,v)){const V=(w=K.specs)==null?void 0:w[v];V&&V.split(/[,/]/).map(X=>X.trim()).forEach(X=>{if(X){const le=b(X,T);A.set(le,(A.get(le)||0)+1)}})}})}),{colorCounts:G,colorMap:q,specValuesMap:U}},[r,o,d]),_=G=>{u(U=>({...U,[G]:!U[G]}))},k=(G,U)=>{let q=parseInt(G.target.value)||0;U===0&&(q=Math.min(q,d.priceRange[1])),U===1&&(q=Math.max(q,d.priceRange[0]));const P=[...d.priceRange];P[U]=q,c({...d,priceRange:P})},R=(G,U)=>{const q=parseInt(G.target.value),P=[...d.priceRange];P[U]=q,P[0]>P[1]&&(U===0?P[0]=P[1]:P[1]=P[0]),c({...d,priceRange:P})},D=(G,U)=>{const q=d.specs[G]||[],P=q.includes(U)?q.filter(pe=>pe!==U):[...q,U];c({...d,specs:{...d.specs,[G]:P}})},te=G=>{const U=d.colors.includes(G)?d.colors.filter(q=>q!==G):[...d.colors,G];c({...d,colors:U})},W=()=>{c({priceRange:[O.min,O.max],specs:{},colors:[]})},$=(G,U,q,P,pe)=>t.jsx("label",{className:`flex items-center justify-between gap-3 cursor-pointer group py-1.5 select-none hover:bg-gray-50 rounded px-1 -mx-1 transition-colors ${pe===0&&!G?"opacity-50 pointer-events-none":""}`,children:t.jsxs("div",{className:"flex items-center gap-3",children:[t.jsx("div",{className:`w-5 h-5 border-2 rounded-md flex items-center justify-center transition-all duration-200 ${G?"bg-black border-black":"border-gray-300 bg-white group-hover:border-gray-400"}`,children:G&&t.jsx(eo,{className:"w-3.5 h-3.5 text-white stroke-[3px]"})}),t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx("span",{className:`text-sm font-medium ${G?"text-black":"text-gray-600 group-hover:text-black"}`,children:q}),P&&t.jsxs("div",{className:"relative group/tooltip",children:[t.jsx(av,{className:"w-3.5 h-3.5 text-gray-300 hover:text-black transition-colors"}),t.jsxs("div",{className:"absolute left-full top-1/2 -translate-y-1/2 ml-2 w-48 bg-black text-white text-[10px] p-2 rounded shadow-lg opacity-0 group-hover/tooltip:opacity-100 pointer-events-none transition-opacity z-50",children:[P,t.jsx("div",{className:"absolute right-full top-1/2 -translate-y-1/2 border-4 border-transparent border-r-black"})]})]})]})]})}),H=Math.min((d.priceRange[0]-O.min)/(O.max-O.min)*100,100),J=Math.min((d.priceRange[1]-O.min)/(O.max-O.min)*100,100),Y=`
2988    bg-white lg:bg-white
2989    fixed inset-y-0 left-0 z-[100] w-80 lg:w-auto lg:static lg:block
2990    transform transition-transform duration-300 ease-in-out lg:transform-none
2991    ${h?"translate-x-0 shadow-2xl":"-translate-x-full lg:shadow-none"}
2992    overflow-y-auto overscroll-behavior-contain custom-scrollbar 
2993    lg:rounded-2xl lg:shadow-lg lg:border lg:border-gray-200 lg:p-6 p-6
2994  `;return t.jsxs(t.Fragment,{children:[h&&t.jsx("div",{className:"fixed inset-0 bg-black/60 backdrop-blur-sm z-[90] lg:hidden",onClick:m}),t.jsxs("aside",{className:Y,children:[t.jsx("style",{children:`
2995          .range-slider-thumb::-webkit-slider-thumb {
2996            pointer-events: all;
2997            width: 16px;
2998            height: 16px;
2999            -webkit-appearance: none;
3000            background-color: black;
3001            border: 2px solid white;
3002            border-radius: 50%;
3003            box-shadow: 0 0 2px rgba(0,0,0,0.5);
3004            cursor: pointer;
3005          }
3006          .range-slider-thumb::-moz-range-thumb {
3007            pointer-events: all;
3008            width: 16px;
3009            height: 16px;
3010            background-color: black;
3011            border: 2px solid white;
3012            border-radius: 50%;
3013            box-shadow: 0 0 2px rgba(0,0,0,0.5);
3014            cursor: pointer;
3015          }
3016        `}),t.jsxs("div",{className:"flex items-center justify-between mb-6 lg:hidden sticky top-0 bg-white z-10 pb-2 border-b border-gray-100",children:[t.jsxs("h2",{className:"text-xl font-black uppercase flex items-center gap-2",children:[t.jsx(pr,{className:"w-5 h-5 text-[#ff3b30]"})," Фильтры"]}),t.jsx("button",{onClick:m,className:"p-2 -mr-2 hover:bg-gray-100 rounded-full transition-colors",children:t.jsx(xt,{className:"w-6 h-6 text-gray-900"})})]}),t.jsxs("div",{className:"flex flex-col gap-3 overflow-x-hidden",children:[t.jsxs("div",{className:"border-b border-gray-100 pb-4 mb-4 last:border-none",children:[t.jsxs("button",{className:"flex items-center justify-between w-full group",style:{minHeight:"44px",display:"flex",alignItems:"center",marginBottom:"4px"},onClick:()=>_("price"),children:[t.jsxs("span",{className:"font-black text-[15px] uppercase text-black group-hover:text-[#ff3b30] transition-colors",children:["Цена, ",nt]}),y.price?t.jsx(Ft,{className:"w-5 h-5 text-[#ff3b30]"}):t.jsx(Mt,{className:"w-5 h-5 text-gray-400"})]}),y.price&&t.jsxs("div",{className:"space-y-4 animate-fade-in bg-gray-50/50 p-3 rounded-lg border border-gray-100 mb-2",children:[t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsxs("div",{className:"relative flex-1",children:[t.jsx("span",{className:"absolute left-2.5 top-1/2 -translate-y-1/2 text-[10px] text-gray-400 font-bold uppercase",children:"от"}),t.jsx("input",{type:"number",value:d.priceRange[0],onChange:G=>k(G,0),className:"w-full bg-white border border-gray-200 rounded-md py-1.5 pl-7 pr-2 text-xs font-bold text-black focus:ring-1 focus:ring-[#ff3b30] focus:border-[#ff3b30] transition-all outline-none",min:O.min,max:O.max})]}),t.jsx("span",{className:"text-gray-300",children:"—"}),t.jsxs("div",{className:"relative flex-1",children:[t.jsx("span",{className:"absolute left-2.5 top-1/2 -translate-y-1/2 text-[10px] text-gray-400 font-bold uppercase",children:"до"}),t.jsx("input",{type:"number",value:d.priceRange[1],onChange:G=>k(G,1),className:"w-full bg-white border border-gray-200 rounded-md py-1.5 pl-7 pr-2 text-xs font-bold text-black focus:ring-1 focus:ring-[#ff3b30] focus:border-[#ff3b30] transition-all outline-none",min:O.min,max:O.max})]})]}),t.jsxs("div",{className:"relative w-full h-1 bg-gray-200 rounded-full mt-2 mx-1",children:[t.jsx("div",{className:"absolute h-full bg-[#ff3b30] rounded-full",style:{left:`${H}%`,width:`${Math.max(0,J-H)}%`}}),t.jsx("input",{type:"range",min:O.min,max:O.max,value:d.priceRange[0],onChange:G=>R(G,0),className:"absolute w-full h-full appearance-none bg-transparent pointer-events-none range-slider-thumb -top-[6px] left-0 z-20"}),t.jsx("input",{type:"range",min:O.min,max:O.max,value:d.priceRange[1],onChange:G=>R(G,1),className:"absolute w-full h-full appearance-none bg-transparent pointer-events-none range-slider-thumb -top-[6px] left-0 z-20"})]})]})]}),Object.keys(E.colorCounts).length>0&&t.jsxs("div",{className:"border-b border-gray-100 pb-4 mb-4 last:border-none",children:[t.jsxs("button",{className:"flex items-center justify-between w-full group",style:{minHeight:"44px",display:"flex",alignItems:"center",marginBottom:"4px"},onClick:()=>_("colors"),children:[t.jsx("span",{className:"font-black text-[15px] uppercase text-black group-hover:text-[#ff3b30] transition-colors",children:"Цвет"}),y.colors?t.jsx(Ft,{className:"w-4 h-4 text-gray-400"}):t.jsx(Mt,{className:"w-4 h-4 text-gray-400"})]}
3016),y.colors&&t.jsx("div",{className:"flex flex-wrap gap-2 animate-fade-in pb-6 mb-2",style:{paddingLeft:"12px",paddingTop:"8px",position:"relative",zIndex:"50",height:"auto",maxHeight:"none",overflow:"visible"},children:Object.entries(E.colorCounts).map(([G,U])=>{const q=d.colors.includes(G),P=E.colorMap[G],pe=Array.isArray(P)?{background:g(P)}:{backgroundColor:P},B=U===0;return t.jsxs("button",{onClick:()=>!B&&te(G),disabled:B,className:`w-9 h-9 rounded-full border-2 transition-all relative group flex items-center justify-center ${B?"opacity-30 cursor-not-allowed border-gray-200":q?"border-black ring-2 ring-black/10 scale-110 shadow-sm":"border-gray-200 hover:border-gray-400 hover:scale-105"}`,children:[t.jsxs("div",{className:"absolute bottom-full left-1/2 -translate-x-1/2 mb-2 px-2 py-1 bg-black text-white text-[9px] font-bold uppercase rounded shadow-2xl opacity-0 group-hover:opacity-100 transition-opacity pointer-events-none whitespace-nowrap z-[100]",children:[G,t.jsx("div",{className:"absolute top-full left-1/2 -translate-x-1/2 -mt-[1px] border-4 border-transparent border-t-black"})]}),t.jsx("div",{className:"absolute inset-1 rounded-full shadow-inner",style:pe}),q&&t.jsx(eo,{className:"w-4 h-4 text-white drop-shadow-md z-10 stroke-[3px]"})]},G)})})]}),Object.entries(E.specValuesMap).sort((G,U)=>{const q=o.filterSettings||[],P=q.findIndex(B=>B.key===G[0]),pe=q.findIndex(B=>B.key===U[0]);return P!==-1&&pe!==-1?P-pe:P!==-1?-1:pe!==-1?1:G[0].localeCompare(U[0])}).map(([G,U])=>{var B;const q=Array.from(U.entries()).map(([z,v])=>({val:z,count:v}));if(q.length===0)return null;const P=(B=o.filterSettings)==null?void 0:B.find(z=>z.key===G),pe=q.sort((z,v)=>{if(!P||P.groups.length===0)return z.val.localeCompare(v.val);const T=P.groups.findIndex(K=>K.display===z.val),A=P.groups.findIndex(K=>K.display===v.val);return T!==-1&&A!==-1?T-A:T!==-1?-1:A!==-1?1:z.val.localeCompare(v.val)});return t.jsxs("div",{className:"border-b border-gray-100 pb-6 last:border-none last:pb-0",children:[t.jsxs("button",{className:"flex items-center justify-between w-full group",style:{minHeight:"44px",display:"flex",alignItems:"center",marginBottom:"4px"},onClick:()=>_(G),children:[t.jsx("span",{className:"font-black text-[15px] uppercase text-black group-hover:text-[#ff3b30] transition-colors text-left",children:G}),y[G]?t.jsx(Ft,{className:"w-4 h-4 text-gray-400"}):t.jsx(Mt,{className:"w-4 h-4 text-gray-400"})]}),y[G]&&t.jsx("div",{className:"flex flex-col gap-1.5 animate-fade-in pb-2",style:{height:"auto",maxHeight:"none",overflow:"visible"},children:pe.map(({val:z,count:v})=>{var K;const T=P==null?void 0:P.groups.find(w=>w.display===z),A=T==null?void 0:T.tooltip;return t.jsx("div",{onClick:()=>v>0&&D(G,z),children:$(((K=d.specs[G])==null?void 0:K.includes(z))||!1,()=>{},z,A,v)},z)})})]},G)}),t.jsx("button",{onClick:W,className:"w-full py-3 border border-gray-200 text-gray-500 rounded-lg text-xs font-bold uppercase hover:bg-gray-50 hover:text-black transition-colors",children:"Сбросить фильтры"})]})]})]})},nj=({categories:r,products:o,onAddToCart:d,navigate:c,categorySlug:h,enableSales:m,favorites:y=[],onToggleFavorite:u,compareList:f=[],onToggleCompare:x})=>{const N=h,b=r.find(J=>J.slug===N),C=o.filter(J=>J.category===(b==null?void 0:b.id)),[g,O]=j.useState({priceRange:[0,1e5],specs:{},colors:[]}),[E,_]=j.useState(!1),[k,R]=j.useState("default"),D=(b==null?void 0:b.showFilters)!==!1,te=J=>J.replace(/\w\S*/g,Y=>Y.charAt(0).toUpperCase()+Y.substring(1).toLowerCase()),W=J=>{const Y=J%100,G=J%10;return Y>10&&Y<20?`Найдено ${J} товаров`:G>1&&G<5?`Найдено ${J} товара`:G===1?`Найден ${J} товар`:`Найдено ${J} товаров`},Q=Y=>{let G=Y&&typeof Y.price=="number"?Y.price:0;try{if(Y&&Array.isArray(Y.variants)&&Y.variants.length){let U=null;for(let q=0;q<Y.variants.length;q++){const P=Y.variants[q]&&Y.variants[q].price;typeof P=="number"&&!Number.isNaN(P)&&(U=U===null?P:Math.min(U,P))}U!==null&&(G=U)}}catch(U){}return G},$=j.useMemo(()=>{let J=[...C];switch(D&&(J=J.filter(Y=>Q(Y)>=g.priceRange[0]&&Q(Y)<=g.priceRange[1]),g.colors.length>0&&(J=J.filter(Y=>{var G;return(G=Y.options)==null?void 0:G.some(U=>U.type==="color"&&U.values.some(q=>g.colors.includes(q.name)))})),Object.keys(g.specs).length>0&&(J=J.filter(Y=>Y.specs?Object.entries(g.specs).every(([G,U])=>{var z;const q=U;if(q.length===0)return!0;const P=Y.specs[G];if(!P)return!1;const pe=(z=b==null?void 0:b.filterSettings)==null?void 0:z.find(v=>v.key===G);return P.split(/[,/]/).map(v=>v.trim()).some(v=>{const T=v.trim();let A=T;if(pe){const K=pe.groups.find(w=>w.variations.some(V=>V.toLowerCase()===T.toLowerCase()));K&&(A=K.display)}else A=te(T);return q.includes(A)})}):!1))),k){case"price-asc":J.sort((Y,G)=>(Q(Y)||0)-(Q(G)||0));break;case"price-desc":J.sort((Y,G)=>(Q(G)||0)-(Q(Y)||0));break;case"name-asc":J.sort((Y,G)=>Y.name.localeCompare(G.name));break;case"name-desc":J.sort((Y,G)=>G.name.localeCompare(Y.name));break}return J},[C,k,g,b,D]);j.useEffect(()=>{var J,Y,G,U,q,P,pe;
3016if(b){document.title=((J=b.seo)==null?void 0:J.title)||`${b.name} | VOROTEX`;const B=(V,M)=>{let X=document.querySelector(`meta[name="${V}"]`);X||(X=document.createElement("meta"),X.setAttribute("name",V),document.head.appendChild(X)),X.setAttribute("content",M)},z=(V,M)=>{let X=document.querySelector(`meta[property="${V}"]`);X||(X=document.createElement("meta"),X.setAttribute("property",V),document.head.appendChild(X)),X.setAttribute("content",M)},v=V=>{let M=document.querySelector('link[rel="canonical"]');M||(M=document.createElement("link"),M.setAttribute("rel","canonical"),document.head.appendChild(M)),M.setAttribute("href",V)},T=((Y=b.seo)==null?void 0:Y.description)||b.description||`${b.name} — товары VOROTEX`;B("description",T),(G=b.seo)!=null&&G.keywords&&B("keywords",b.seo.keywords);const A=((U=b.seo)==null?void 0:U.indexing)!==!1?"index, follow":"noindex, nofollow";B("robots",A);const w=`${window.location.origin}/category/${encodeURIComponent(b.slug||b.id)}`;v(w),z("og:type","website"),z("og:url",w),z("og:title",((q=b.seo)==null?void 0:q.title)||`${b.name} | VOROTEX`),z("og:description",T),((P=b.seo)!=null&&P.ogImage||b.image)&&z("og:image",((pe=b.seo)==null?void 0:pe.ogImage)||b.image)}},[b]);const H=g.colors.length>0||Object.values(g.specs).some(J=>J.length>0)||C.length>0&&(g.priceRange[0]>Math.min(...C.map(J=>Q(J)))||g.priceRange[1]<Math.max(...C.map(J=>Q(J))));return b?t.jsx("div",{className:"pt-32 pb-20 min-h-screen bg-white relative",children:t.jsxs("div",{className:"max-w-[1400px] mx-auto px-4",children:[t.jsxs("button",{onClick:()=>c("/catalog"),className:"flex items-center gap-2 text-gray-500 hover:text-black mb-8 transition-colors group font-medium text-sm uppercase tracking-wide",children:[t.jsx(Ca,{className:"w-4 h-4 group-hover:-translate-x-1 transition-transform"})," В каталог"]}),t.jsxs("div",{className:"relative rounded-2xl overflow-hidden mb-8 bg-black h-[150px] md:h-[250px] group",children:[t.jsx("img",{src:b.image,alt:b.name,className:"w-full h-full object-cover opacity-60 group-hover:scale-105 transition-transform duration-700"}),t.jsxs("div",{className:"absolute inset-0 bg-gradient-to-r from-black/80 to-transparent flex flex-col justify-center px-8 md:px-16 pointer-events-none",children:[t.jsx("span",{className:"text-[#ff3b30] font-bold tracking-widest text-xs uppercase mb-2",children:"Категория"}),t.jsx("h1",{className:"text-3xl md:text-5xl font-black uppercase text-white mb-2 tracking-tighter drop-shadow-xl",children:b.name}),b.description&&t.jsx("p",{className:"text-gray-200 text-xs md:text-base max-w-xl font-medium drop-shadow-md hidden md:block",children:b.description})]})]}),t.jsxs("div",{className:`flex flex-col ${D?"lg:flex-row":""} gap-8 relative`,children:[D&&t.jsx("div",{className:"flex-shrink-0 lg:w-72",children:t.jsx(rj,{products:C,category:b,filters:g,onFilterChange:O,isOpenMobile:E,onCloseMobile:()=>_(!1)})}),t.jsxs("div",{className:"flex-1",children:[t.jsxs("div",{className:"mb-6 flex flex-wrap items-center justify-between gap-4 border-b border-gray-100 pb-4",children:[D&&t.jsxs("button",{onClick:()=>_(!0),className:"lg:hidden flex items-center gap-2 px-4 py-2 bg-black text-white rounded text-sm font-bold uppercase",children:[t.jsx(pr,{className:"w-4 h-4"})," Фильтры"]}),t.jsx("div",{className:"hidden md:block"}),t.jsx("div",{className:"flex items-center gap-3 ml-auto",children:t.jsxs("div",{className:"relative group",children:[t.jsx(bp,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-500 pointer-events-none group-hover:text-black transition-colors"}),t.jsxs("select",{value:k,onChange:J=>R(J.target.value),className:"appearance-none pl-10 pr-8 py-2 bg-gray-50 border border-gray-200 text-black text-xs font-bold uppercase rounded-lg focus:ring-1 focus:ring-black focus:border-black block w-full outline-none cursor-pointer hover:bg-gray-100 transition-colors",children:[t.jsx("option",{value:"default",children:"Сортировка"}),t.jsx("option",{value:"price-asc",children:"Цена: По возрастанию"}),t.jsx("option",{value:"price-desc",children:"Цена: По убыванию"}),t.jsx("option",{value:"name-asc",children:"Название (А-Я)"}),t.jsx("option",{value:"name-desc",children:"Название (Я-А)"})]})]})})]}),$.length>0?t.jsx("div",{className:`grid grid-cols-1 sm:grid-cols-2 ${D?"xl:gr
3016id-cols-3":"lg:grid-cols-3 xl:grid-cols-4"} gap-6`,children:$.map(J=>t.jsx("div",{className:"h-[480px]",children:t.jsx(go,{product:J,onAddToCart:d,navigate:c,enableSales:m,isFavorite:y.some(Y=>Y.id===J.id),onToggleFavorite:u,isComparing:f.some(Y=>Y.id===J.id),onToggleCompare:x})},J.id))}):t.jsxs("div",{className:"py-24 text-center text-gray-400 bg-gray-50 rounded-xl border border-gray-100 flex flex-col items-center justify-center",children:[t.jsx("div",{className:"w-16 h-16 rounded-full bg-gray-100 flex items-center justify-center mb-4 text-gray-300",children:t.jsx(Jd,{className:"w-8 h-8"})}),t.jsx("p",{className:"text-xl font-bold text-gray-500 uppercase",children:"Товары не найдены"}),t.jsx("p",{className:"text-sm mt-2 max-w-md mx-auto",children:"Попробуйте изменить параметры фильтрации или выберите другую категорию."}),D&&t.jsx("button",{onClick:()=>O({priceRange:[0,1e5],specs:{},colors:[]}),className:"mt-6 px-6 py-2 bg-black text-white rounded text-sm font-bold uppercase hover:bg-[#ff3b30] transition-colors",children:"Сбросить фильтры"})]})]})]}),H&&$.length>0&&t.jsx("div",{className:"fixed bottom-8 left-1/2 -translate-x-1/2 z-40 animate-fade-in-up",children:t.jsxs("button",{onClick:()=>{_(!1),window.scrollTo({top:400,behavior:"smooth"})},className:"flex items-center gap-2 bg-black text-white px-6 py-3 rounded-full shadow-2xl hover:bg-[#ff3b30] hover:scale-105 transition-all font-bold uppercase text-sm border border-white/10",children:[t.jsx(eo,{className:"w-4 h-4"}),W($.length)]})})]})}):t.jsxs("div",{className:"pt-32 pb-20 min-h-screen flex flex-col items-center justify-center text-black bg-white",children:[t.jsx(Jd,{className:"w-16 h-16 text-gray-300 mb-4"}),t.jsx("h2",{className:"text-2xl font-bold mb-2 uppercase",children:"Категория не найдена"}),t.jsx("button",{onClick:()=>c("/catalog"),className:"text-[#ff3b30] font-bold hover:underline",children:"Вернуться в каталог"})]})},ij=()=>{j.useEffect(()=>{const r=new IntersectionObserver(d=>{d.forEach(c=>{c.isIntersecting&&c.target.classList.add("reveal-visible")})},{threshold:.1});return document.querySelectorAll(".reveal-on-scroll").forEach(d=>r.observe(d)),()=>r.disconnect()})},Ux=r=>r?r.includes("youtube.com")||r.includes("youtu.be")?"youtube":r.startsWith("data:video")||r.match(/\.(mp4|webm|ogg)$/i)?"video":"image":"image",oj=r=>{const o=/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=)([^#&?]*).*/,d=r.match(o),c=d&&d[2].length===11?d[2]:null;return c?`https://www.youtube.com/embed/${c}`:r},qi=r=>Math.round(r).toLocaleString("ru-RU",{maximumFractionDigits:0}).replace(/\s/g," "),cj=({products:r,categories:o,onAddToCart:d,cart:c,onUpdateQuantity:h,onRemoveItem:m,navigate:y,productId:u,marketplaces:f,marketplacesContent:Mc,enableSales:x,isAdmin:N,isFavorite:b,onToggleFavorite:C,isComparing:g,onToggleCompare:O,reviews:E=[],supportSettings:_})=>{var Xt,Pe;const k=r.find(se=>se.id===u),[R,D]=j.useState({}),[te,W]=j.useState(""),[lightboxOpen,setLightboxOpen]=j.useState(!1),[lightboxIdx,setLightboxIdx]=j.useState(0),$=k?o.find(se=>se.id===k.category):null,H=j.useMemo(()=>!_||!k?[]:_.items.filter(se=>se.productId===k.id),[_,k]),J=j.useMemo(()=>k?r.filter(ye=>ye.id!==k.id).sort(()=>.5-Math.random()):[],[r,k]);ij(),j.useEffect(()=>{var se,ye,De,et,Me,tt,st,$t,Kt,He,dt;if(k){document.title=((se=k.seo)==null?void 0:se.title)||`${k.name} | VOROTEX`,window.scrollTo(0,0);try{fetch("/api/track_event.php",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({type:"product_view",value:k.id})})}catch(Wv){}const Lt=(Be,Ot)=>{let Ze=document.querySelector(`meta[name="${Be}"]`);Ze||(Ze=document.createElement("meta"),Ze.setAttribute("name",Be),document.head.appendChild(Ze)),Ze.setAttribute("content",Ot)},bt=(Be,Ot)=>{let Ze=document.querySelector(`meta[property="${Be}"]`);Ze||(Ze=document.createElement("meta"),Ze.setAttribute("property",Be),document.head.appendChild(Ze)),Ze.setAttribute("content",Ot)},vl=Be=>{let Ot=document.querySelector('link[rel="canonical"]');Ot||(Ot=document.createElement("link"),Ot.setAttribute("rel","canonical"),document.head.appendChild(Ot)),Ot.setAttribute("href",Be)},Ta=((ye=k.seo)==null?void 0:ye.description)||k.description||`Купить ${k.name}. Лучшая цена, гарантия качества.`;Lt("description",Ta),(De=k.seo)!=null&&De.keywords&&Lt("keywords",k.seo.keywords);const ke=((et=k.seo)==null?void 0:et.indexing)!==!1?"index, follow":"noindex, nofollow";Lt("robots",ke);const We=`${window.location.origin}/product/${encodeURIComponent(k.id)}`;vl(We),bt("og:type","product"),bt("og:url",We),bt("og:title",((Me=k.seo)==null?void 0:Me.title)||`${k.name} | VOROTEX`),bt("og:description",Ta);const Re=((tt=k.seo)==null?void 0:tt.ogImage)||k.image||"";Re&&bt("og:image",Re);const Xe={};k.variants&&k.variants[0]&&k.variants[0].combination?Object.assign(Xe,k.variants[0].combination):k.options&&k.options.forEach(Be=>{Be.values.length>0&&(Xe[Be.id]=Be.values[0].id)}),D(Xe);const Ie=((Kt=($t=(st=k.variants)==null?void 0:st[0])==null?void 0:$t.images)==null?void 0:Kt[0])||((dt=(He=k.variants)==null?void 0:He[0])==null?void 0:dt.image)||k.image||"";W(Ie||"")}},[k]);const Y=j.useMemo(()=>!k||!k.variants||k.variants.length===0?null:k.variants.find(se=>Object.entries(R).every(([ye,De])=>
3016se.combination[ye]===De))||k.variants[0],[k,R]),G=(Y==null?void 0:Y.price)||(k==null?void 0:k.price)||0,U=(k==null?void 0:k.name)+(Y&&Y.combination?(()=>{const m=Object.entries(Y.combination).map(([i,v])=>{var o,l,q=k.options.find(z=>z.id==i);return q&&q.showInTitle&&(l=q.values.find(z=>z.id==v))?l.name:""}).filter(Boolean).join(" ");return m?" "+m:""})():""),q=Y&&Y.originalPrice!==void 0?Y.originalPrice:k==null?void 0:k.originalPrice,P=(k==null?void 0:k.variants)&&k.variants.length>0,pe=j.useMemo(()=>P?Y?Y.stock:0:(k==null?void 0:k.stock)||0,[P,Y,k]),B=j.useMemo(()=>{if(!c||!k)return 0;const se=c.find(ye=>ye.id!==k.id?!1:P?ye.selectedVariantId===(Y==null?void 0:Y.id):!0);return se?se.quantity:0},[c,k,Y,P]),z=pe-B,v=pe<=0,T=z<=0&&!v;if(j.useEffect(()=>{if(Y){const img=(Y.images&&Y.images.length>0)?Y.images[0]:Y.image;if(img)W(img)}},[Y,k]),!k)return t.jsxs("div",{className:"pt-32 pb-20 min-h-screen flex flex-col items-center justify-center bg-white text-black",children:[t.jsx("h2",{className:"text-2xl font-bold mb-4",children:"Товар не найден"}),t.jsx("button",{onClick:()=>y("/catalog"),className:"text-[#ff3b30] underline font-bold",children:"Вернуться в каталог"})]});const A=()=>{navigator.clipboard.writeText(window.location.href),oe.success("Ссылка скопирована!")},K=()=>{y(`/admin?tab=catalog&edit=${k.id}`)},w=(se,ye)=>{if(!k.variants)return!1;const De={...R,[se]:ye};return!k.variants.some(Me=>Object.entries(De).every(([tt,st])=>Me.combination[tt]===st))},V=(se,ye)=>{var Me,tt;const De={...R,[se]:ye};if((Me=k.variants)==null?void 0:Me.find(st=>Object.entries(De).every(([$t,Kt])=>st.combination[$t]===Kt)))D(De);else{const st=(tt=k.variants)==null?void 0:tt.find($t=>$t.combination[se]===ye);D(st?st.combination:De)}},M=c==null?void 0:c.findIndex(se=>se.id!==k.id?!1:k.variants&&k.variants.length>0?se.selectedVariantId===(Y==null?void 0:Y.id):!0),X=M!==void 0&&M>=0?c[M]:null,le=k.isSale,xe=k.isHit,ge=q&&q>G,je=le||ge,Ne=ge?Math.round((q-G)/q*100):0,Ee=se=>{const ye="w-8 h-8 md:w-10 md:h-10";switch(se){case"cpu":return t.jsx(hv,{className:ye});case"zap":return t.jsx(gu,{className:ye});case"settings":return t.jsx(yl,{className:ye});case"download":return t.jsx(pl,{className:ye});case"layers":return t.jsx(gr,{className:ye});case"monitor":return t.jsx(Nn,{className:ye});case"layout":return t.jsx(hr,{className:ye});case"target":return t.jsx(iw,{className:ye});case"mouse":return t.jsx(f2,{className:ye});case"shield":return t.jsx(io,{className:ye});case"volume":return t.jsx(kw,{className:ye});case"gamepad":return t.jsx(pu,{className:ye});case"smartphone":return t.jsx(Tp,{className:ye});case"laptop":return t.jsx(Zv,{className:ye});default:return t.jsx(Va,{className:ye})}},Ge=Y!=null&&Y.images&&Y.images.length>0?Y.images:Y!=null&&Y.image?[Y.image]:[],it=[...Ge.length>0?Ge:k.image?[k.image]:[],...k.videos||[]].filter(Boolean);j.useEffect(()=>{!te&&it.length>0&&W(it[0])},[it,te]);const Ua=(Mc==null||Mc.showProductMarketplaceLinks!==!1)&&k.marketplaceLinks&&Object.values(k.marketplaceLinks).some(se=>se&&se.length>0),[ce,ve]=j.useState(null),be=se=>{if(!se||se.length===0)return"transparent";if(se.length===1)return se[0];const ye=100/se.length;return`conic-gradient(${se.map((et,Me)=>`${et} ${Me*ye}% ${(Me+1)*ye}%`).join(", ")})`},Oe=se=>{var et,Me;const ye=se.theme==="dark",De=ye?"bg-[#0a0a0a] text-white":"bg-white text-black";switch(se.type){case"banner":return t.jsxs("section",{className:`py-10 md:py-32 px-4 relative overflow-hidden flex flex-col items-center justify-center text-center min-h-[400px] md:min-h-[600px] ${De} reveal-on-scroll`,children:[t.jsx("div",{className:"absolute inset-0 bg-cyber-net opacity-20 pointer-events-none z-0"}),se.image&&t.jsxs("div",{className:"absolute inset-0 z-0 flex items-center justify-center",children:[t.jsx("div",{className:`absolute w-[80%] h-[80%] rounded-full blur-[100px] ${ye?"bg-white/10":"bg-black/5"}`}),t.jsx("img",{src:se.image,className:"w-full h-full md:w-[90%] md:h-[90%] object-contain relative z-10",style:{opacity:ye?.9:1}}),t.jsx("div",{className:`absolute inset-0 bg-gradient-to-t ${ye?"from-[#0a0a0a] via-[#0a0a0a]/30 to-transparent":"from-white via-white/30 to-transparent"}`}),t.jsx("div",{className:`absolute inset-0 bg-gradient-to-b ${ye?"from-[#0a0a0a] via-trans
3016parent to-transparent":"from-white via-transparent to-transparent"}`})]}),t.jsxs("div",{className:"relative z-10 max-w-5xl animate-fade-in-up",children:[t.jsx("h2",{className:"text-3xl md:text-6xl font-black uppercase mb-2 md:mb-6 drop-shadow-2xl tracking-tighter leading-none",dangerouslySetInnerHTML:{__html:se.title||""}}),se.subtitle&&t.jsx("p",{className:"text-sm md:text-xl font-medium opacity-90 max-w-2xl mx-auto leading-relaxed uppercase tracking-wider",dangerouslySetInnerHTML:{__html:se.subtitle}})]})]},se.id);case"features":return t.jsx("section",{className:`py-8 md:py-24 px-4 ${De} reveal-on-scroll`,children:t.jsxs("div",{className:"max-w-7xl mx-auto",children:[se.title&&t.jsxs("div",{className:"text-center mb-6 md:mb-20",children:[t.jsx("h2",{className:"text-3xl md:text-5xl font-black uppercase tracking-tighter mb-4",children:se.title}),t.jsx("div",{className:"w-16 md:w-24 h-1 md:h-1.5 bg-[#ff3b30] mx-auto rounded-full"})]}),t.jsx("div",{className:"flex flex-wrap justify-center gap-x-4 gap-y-8 md:gap-x-12 md:gap-y-16",children:(et=se.items)==null?void 0:et.map((He,dt)=>t.jsxs("div",{className:"group flex flex-col items-center text-center w-[45%] md:w-[30%] lg:w-[25%] max-w-[300px]",children:[t.jsxs("div",{className:`w-16 h-16 md:w-24 md:h-24 rounded-full flex items-center justify-center mb-4 md:mb-8 transition-all duration-500 relative group-hover:scale-110 ${ye?"bg-white/5 border border-white/10":"bg-gray-50 border border-gray-200"}`,children:[t.jsx("div",{className:`absolute inset-0 rounded-full opacity-0 group-hover:opacity-20 transition-opacity duration-500 blur-xl ${ye?"bg-[#ff3b30]":"bg-black"}`}),t.jsx("div",{className:`relative z-10 ${ye?"text-white":"text-black"} group-hover:text-[#ff3b30] transition-colors`,children:Ee(He.icon)})]}),t.jsx("h3",{className:"text-sm md:text-lg font-bold uppercase mb-2 md:mb-3 tracking-wide",children:He.title}),He.text&&t.jsx("p",{className:`text-xs md:text-sm leading-relaxed ${ye?"text-gray-400":"text-gray-600"}`,children:He.text})]},dt))})]})},se.id);case"text-image":const tt=se.alignment==="right";return t.jsx("section",{className:`py-8 md:py-24 px-4 overflow-hidden ${De} reveal-on-scroll`,children:t.jsxs("div",{className:"max-w-7xl mx-auto grid grid-cols-1 lg:grid-cols-2 gap-6 md:gap-16 items-center",children:[t.jsxs("div",{className:`order-1 ${tt?"lg:order-1":"lg:order-2"} relative group`,children:[t.jsx("div",{className:"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[120%] h-[120%] bg-gradient-to-tr from-[#ff3b30]/20 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-700 blur-3xl rounded-full"}),t.jsx("img",{src:se.image,className:"w-full rounded-3xl shadow-xl md:shadow-2xl relative z-10 transform transition-transform duration-700 group-hover:scale-[1.02]"})]}),t.jsx("div",{className:`order-2 ${tt?"lg:order-2":"lg:order-1"}`,children:t.jsxs("div",{className:"flex flex-col gap-4 md:gap-6",children:[t.jsxs("div",{children:[t.jsx("h2",{className:"text-2xl md:text-5xl font-black uppercase mb-2 md:mb-4 tracking-tighter leading-none",children:se.title}),se.subtitle&&t.jsx("h3",{className:"text-base md:text-xl font-bold text-[#ff3b30] uppercase tracking-wide",children:se.subtitle})]}),t.jsx("div",{className:`prose prose-sm md:prose-lg ${ye?"prose-invert":""} max-w-none font-medium leading-relaxed opacity-90`,children:t.jsx("div",{dangerouslySetInnerHTML:{__html:se.content||""}})})]})})]})},se.id);case"info-grid":return t.jsx("section",{className:`py-8 md:py-24 px-4 ${De} reveal-on-scroll`,children:t.jsxs("div",{className:"max-w-7xl mx-auto",children:[se.title&&t.jsxs("div",{className:"text-center mb-6 md:mb-12",children:[t.jsx("h2",{className:"text-2xl md:text-4xl font-black uppercase tracking-tighter mb-4",children:se.title}),se.subtitle&&t.jsx("p",{className:"text-gray-500 max-w-2xl mx-auto font-medium",children:se.subtitle})]}),t.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-8",children:(Me=se.items)==null?void 0:Me.map((He,dt)=>t.jsxs("div",{className:"flex flex-col gap-4 group",children:[t.jsxs("div",{className:"relative aspect-[4/3] overflow-hidden rounded-2xl bg-gray-100 border border-white/10 shadow-lg",children:[He.image?t.jsx("img",{src:He.image,alt:He.title,className:"w-full h-full object-cover transition-transform duration-700 group-hover:scale-105"}):t.jsx("div",{className:"w-full h-full flex items-center justify-center text-gray-300 bg-gray-800",children:t.jsx(fr,{className:"w-12 h-12 opacity-50"})}),t.jsx("div",{className:"absolute inset-0 bg-gradient-to-t from-black/80 via-black/20 to-transparent opacity-80"}),t.jsx("div",{className:"absolute bottom-6 left-6 right-6",children:t.jsx("h3",{className:"text-xl font-black text-white uppercase leading-tight drop-shadow-md tracking-wide",children:He.title})})]}),t.jsx("p",{className:`text-sm font-medium leading-relaxed ${ye?"text-gray-400":"text-gray-600"}`,children:He.text})]},dt))})]})},se.id);case"software":const st=H.length>0?H:se.items,$t=H.length>0&&H[0].description?H[0].description:se.subtitle;return!st||st.length===0?null:t.jsxs("section",{className:"py-8 md:py-24 px-4 bg-[#111] text-white relative overflow-hidden reveal-on-scroll",children:[t.jsx("div",{className:"absolute inset-0 bg-[url('https://www.transparenttextures.com/patterns/carbon-fibre.png')] opacity-10"}),t.jsx("div",{className:"absolute top-0 right-0 w-1/2 h-full bg-[#ff3b30]/5 blur-3xl skew-x-12"}),t.jsxs("div",{className:"max-w-6xl mx-auto relative z-10 grid grid-cols-1 lg:grid-cols-12 gap-8 lg:gap-12 items-center",children:[t.jsxs("div",{className:"lg:col-span-5 order-2 lg:order-1",children:[t.jsx("div",{className:"inline-block px-3 py-1 border border-[#ff3b30] text-[#ff3b30] text-xs font-bold uppercase rounded mb-4 lg:mb-6",children:"Software Supported"}),t.jsx("h2",{className:"text-3xl md:text-6xl font-black uppercase mb-4 lg:mb-6 tracking-tighter leading-none",children:se.title}),t.jsx("p",{className:"text-sm md:text-xl text-gray-400 mb-8 lg:mb-10 leading-relaxed",children:$t}),t.jsx("div",{className:"space-y-4",children:st.map((He,dt)=>t.jsxs("div",{className:"flex items-center gap-4 bg-white/5 p-4 rounded-xl border border-white/10 hover:bg-white/10 transition-colors cursor-default",children:[t.jsx("div",{className:"w-12 h-12 bg-black rounded-lg flex items-center justify-center text-[#ff3b30] border border-white/10 shrink-0",children:He.version?t.jsx(pl,{className:"w-6 h-6"}):Ee(He.icon)}),t.jsxs("div",{className:"min-w-0 flex-1",children:[t.jsx("div",{className:"text-sm md:text-lg font-bold uppercase leading-none mb-1 truncate",children:He.name||He.title}),!!He.version&&!!He.description&&t.jsx("div",{className:"text-[11px] md:text-sm text-gray-300 leading-snug line-clamp-2 mb-1",children:He.description}),He.version?t.jsx("div",{className:"flex flex-col gap-1",children:t.jsxs("div",{className:"text-[10px] md:text-xs text-gray-500 font-mono uppercase flex gap-2",children:[t.jsx("span",{children:He.version}),t.jsx("span",{children:"•"}),t.jsx("span",{children:He.size})]})}):t.jsx("div",{className:"text-[10px] md:text-xs text-gray-500 font-mono uppercase",children:He.text})]}),He.link&&t.jsx("a",{href:He.link,target:"_blank",rel:"noopener noreferrer",className:"p-2 bg-[#ff3b30] rounded-lg text-white hover:bg-red-600 transition-colors",title:"Скачать",children:t.jsx(pl,{className:"w-4 h-4"})})]},dt))})]}),t.jsxs("div",{className:"lg:col-span-7 relative order-1 lg:order-2",children:[t.jsx("div",{className:"absolute -inset-4 bg-[#ff3b30] opacity-20 blur-2xl rounded-full"}),t.jsx("img",{src:se.image,className:"w-full rounded-lg shadow-2xl border border-white/10 relative z-10 rotate-1 hover:rotate-0 transition-transform duration-500"})]})]})]},se.id);case"reviews":let Kt=E.filter(He=>He.productId===k.id);return Kt.length===0&&(Kt=[...Ap,...Dp,...zp].filter(dt=>dt.productId===k.id)),Kt.length===0?null:t.jsx("div",{className:"reveal-on-scroll",children:t.jsx(Up,{reviews:Kt,title:se.title,products:r,navigate:y})},se.id);default:return null}},Je=k.specs&&Object.keys(k.specs).length>0,gt=(Xt=k.sections)==null?void 0:Xt.some(se=>se.type==="software"),Fe=H.length>0&&!gt,Ht=Ux(te||it[0]||"");return t.jsxs("div",{className:"bg-white min-h-screen relative overflow-x-hidden",children:[lightboxOpen&&t.jsx("div",{className:"fixed inset-0 z-[9999] bg-black/95 flex items-center justify-center",onClick:()=>setLightboxOpen(!1),children:t.jsxs("div",{className:"relative w-full h-full flex items-center justify-center p-4",onClick:e=>e.stopPropagation(),children:[t.jsx("button",{className:"absolute top-4 right-4 text-white/80 hover:text-white z-50 p-2",onClick:()=>setLightboxOpen(!1),children:t.jsx("svg",{className:"w-8 h-8",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:t.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})})}),t.jsx("button",{className:"absolute left-4 top-1/2 -translate-y-1/2 text-white/80 hover:text-white z-50 p-2 bg-black/50 rounded-full hidden md:flex",onClick:e=>{e.stopPropagation();setLightboxIdx(i=>(i-1+it.length)%it.length)},children:t.jsx("svg",{className:"w-8 h-8",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:t.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 19l-7-7 7-7"})})}),t.jsx("button",{className:"absolute right-4 top-1/2 -translate-y-1/2 text-white/80 hover:text-white z-50 p-2 bg-black/50 rounded-full hidden md:flex",onClick:e=>{e.stopPropagation();setLightboxIdx(i=>(i+1)%it.length)},children:t.jsx("svg",{className:"w-8 h-8",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:t.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 5l7 7-7 7"})})}
3016),t.jsx("img",{src:it[lightboxIdx],alt:"",className:"max-w-full max-h-full object-contain select-none",onClick:e=>e.stopPropagation(),onTouchStart:e=>{e.currentTarget.__touchX=e.touches[0].clientX},onTouchEnd:e=>{const startX=e.currentTarget.__touchX;if(!startX)return;const diff=e.changedTouches[0].clientX-startX;if(Math.abs(diff)>50){diff<0?setLightboxIdx(i=>(i+1)%it.length):setLightboxIdx(i=>(i-1+it.length)%it.length)}}}),it.length>1&&t.jsx("div",{className:"absolute bottom-8 left-1/2 -translate-x-1/2 z-[10000] flex items-center gap-2 px-3 py-2 rounded-full bg-gray-50/95 backdrop-blur-md border border-gray-200 shadow-xl",children:it.map((_,idx)=>{const isActive=idx===lightboxIdx;return t.jsx("button",{type:"button",onClick:e=>{e.stopPropagation(),setLightboxIdx(idx)},className:`w-2.5 h-2.5 rounded-full transition-all ${isActive?"bg-[#ff3b30] scale-125 shadow-[0_0_10px_rgba(255,59,48,0.5)]":"bg-gray-300 hover:bg-gray-400"}`,"aria-label":`Фото ${idx+1} из ${it.length}`},idx)})})]})}),t.jsx("div",{className:"pt-28 pb-8 md:pt-32 md:pb-12 px-4 md:px-8 bg-gradient-to-b from-[#f8f9fa] to-white relative z-20 border-b border-gray-100",children:t.jsxs("div",{className:"max-w-[1400px] mx-auto",children:[t.jsxs("div",{className:"hidden md:flex items-center gap-2 text-sm text-gray-400 mb-8 overflow-x-auto whitespace-nowrap",children:[t.jsxs("button",{onClick:()=>y("/"),className:"hover:text-black flex items-center gap-1 transition-colors",children:[t.jsx(Np,{className:"w-4 h-4"})," Главная"]}),t.jsx(ys,{className:"w-4 h-4"}),t.jsx("button",{onClick:()=>y("/catalog"),className:"hover:text-black transition-colors",children:"Каталог"}),$&&t.jsxs(t.Fragment,{children:[t.jsx(ys,{className:"w-4 h-4"}),t.jsx("button",{onClick:()=>y($.link),className:"hover:text-black font-bold uppercase transition-colors",children:$.name})]}),t.jsx(ys,{className:"w-4 h-4"}),t.jsx("span",{className:"text-black font-bold uppercase truncate max-w-xs",children:U})]}),t.jsxs("div",{className:"lg:hidden mb-4",children:[t.jsx("div",{className:"mb-2 flex items-center gap-2",children:$?t.jsxs("button",{onClick:()=>y($.link),className:"flex items-center gap-1 text-[10px] font-bold bg-gray-100 px-2 py-1 rounded text-gray-500 uppercase tracking-wider hover:bg-gray-200 hover:text-black transition-colors",children:[t.jsx(Ca,{className:"w-3 h-3"}),$.name]}):t.jsx("span",{className:"text-[10px] font-bold bg-gray-100 px-2 py-1 rounded text-gray-500 uppercase tracking-wider",children:au[k.category]||k.category})}),t.jsx("h1",{className:"text-2xl font-black uppercase text-black leading-tight tracking-tighter",children:U}),t.jsxs("div",{className:"flex items-center gap-1 mt-2 flex-wrap",children:[[...Array(5)].map(function(se,ye){return t.jsx(Va,{className:"w-4 h-4 "+(ye<Math.round(k.rating)?"fill-[#ff3b30] text-[#ff3b30]":"text-gray-300")},ye)}),t.jsx("span",{className:"text-sm font-bold text-gray-600 ml-1",children:k.rating}),t.jsx("span",{className:"text-xs text-gray-400 ml-1",children:"на основе "+(Math.floor((k.id||"x").split("").reduce(function(a,c){return a+c.charCodeAt(0)},0)*17%946)+55)+" отзывов на маркетплейсах"})]})]}),t.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-12 gap-8 lg:gap-16",children:[t.jsxs("div",{className:"lg:col-span-7 flex flex-col md:flex-row gap-4 min-w-0",children:[it.length>1&&t.jsx("div",{className:"flex flex-row md:flex-col gap-3 order-2 md:order-1 overflow-x-auto md:overflow-visible w-full max-w-full py-2 md:py-0",style:{touchAction:"pan-x pan-y",WebkitOverflowScrolling:"touch",width:window.innerWidth>=768?"96px":"100%",flex:window.innerWidth>=768?"none":"1"},children:it.map((se,ye)=>{const De=Ux(se),et=De==="video"||De==="youtube",Me=et&&De==="youtube"?`https://img.youtube.com/vi/${se.split("embed/")[1]||se.split("v=")[1]||""}/0.jpg`:se;return t.jsxs("button",{onClick:()=>W(se),className:`w-20 h-20 md:w-24 md:h-24 flex-shrink-0 bg-gray-50 rounded-xl border-2 overflow-hidden transition-all relative ${te===se?"border-[#ff3b30] ring-2 ring-[#ff3b30]/20":"border-transparent hover:border-gray-200"}`,children:[et&&t.jsx("div",{className:"absolute inset-0 flex items-center justify-center bg-black/30 z-10",children:t.jsx("div",{className:"w-6 h-6 rounded-full bg-white/80 flex items-center justify-center",children:t.jsx(S2,{className:"w-3 h-3 text-black fill-black ml-0.5"})})}),De==="video"?t.jsx("video",{src:se,className:"w-full h-full object-cover"}):t.jsx(su,{src:Me,alt:`Thumbnail ${ye}`,className:"w-full h-full",imgClassName:`w-full h-full ${et?"object-cover":"object-contain mix-blend-multiply p-2"}`,skeletonClassName:"bg-gray-100"})]},ye)})}),t.jsxs("div",{className:"flex-1 bg-gray-50 rounded-[2rem] p-6 md:p-12 flex items-center justify-center relative group order-1 md:order-2 overflow-hidden cursor-zoom-in",style:{minHeight:window.innerWidth>=768?"600px":"300px",flex:"1"},onClick:()=>{const idx=it.indexOf(te);setLightboxIdx(idx>=0?idx:0);setLightboxOpen(!0)},onTouchStart:se=>ve(se.touches[0].clientX),onTouchEnd:se=>{if(!ce)return;const ye=se.changedTouches[0].clientX-ce;if(Math.abs(ye)<30)return;const et=it.indexOf(te),Me=et>=0?et:0,tt=ye<0?Math.min(Me+1,it.length-1):Math.max(Me-1,0);W(it[tt])},children:[t.jsx("div",{className:"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[80%] h-[80%
3016] bg-gradient-to-b from-white to-transparent rounded-full blur-3xl opacity-0 group-hover:opacity-100 transition-opacity duration-700 pointer-events-none"}),Ht==="video"?t.jsx("video",{src:te||it[0]||k.image||"",controls:!0,className:"w-full h-full max-h-[600px] rounded-xl shadow-lg relative z-10 bg-black"}):Ht==="youtube"?t.jsx("iframe",{src:oj(te||it[0]||k.image||""),className:"w-full aspect-video rounded-xl shadow-lg relative z-10",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowFullScreen:!0}):t.jsx(su,{src:te||it[0]||k.image||"",alt:k.name,className:"w-full h-full max-h-[300px] md:max-h-[600px] relative z-10",imgClassName:"w-full h-full object-contain mix-blend-multiply drop-shadow-2xl transition-transform duration-700 group-hover:scale-105",skeletonClassName:"bg-gray-100 rounded-xl",loading:"eager"}),t.jsxs("div",{className:"absolute top-4 left-4 md:top-6 md:left-6 flex flex-col gap-2 z-20 pointer-events-none",children:[k.isNewArrival&&t.jsxs("span",{className:"bg-emerald-600 text-white text-[10px] md:text-xs font-bold px-3 py-1.5 rounded-full uppercase flex items-center gap-1 shadow-lg",children:[t.jsx(fu,{className:"w-3 h-3 fill-white"})," НОВИНКА"]}),xe&&t.jsxs("span",{className:"bg-black text-white text-[10px] md:text-xs font-bold px-3 py-1.5 rounded-full uppercase flex items-center gap-1 shadow-lg",children:[t.jsx(Va,{className:"w-3 h-3 fill-white"})," ХИТ"]}),le&&t.jsx("span",{className:"bg-[#ff3b30] text-white text-[10px] md:text-xs font-bold px-3 py-1.5 rounded-full uppercase shadow-lg animate-pulse",children:Ne>0?`Sale -${Ne}%`:"SALE"})]})]})]}),t.jsxs("div",{className:"lg:col-span-5 flex flex-col",children:[t.jsxs("div",{className:"mb-6 hidden lg:block",children:[t.jsx("div",{className:"flex items-center gap-2 mb-2",children:$?t.jsx("button",{onClick:()=>y($.link),className:"text-xs font-bold bg-gray-100 px-2 py-1 rounded text-gray-500 uppercase tracking-wider hover:bg-gray-200 hover:text-black transition-colors",children:$.name}):t.jsx("span",{className:"text-xs font-bold bg-gray-100 px-2 py-1 rounded text-gray-500 uppercase tracking-wider",children:au[k.category]||k.category})}),t.jsx("h1",{className:"text-2xl md:text-4xl font-black uppercase text-black leading-none tracking-tighter mb-2",children:U}),t.jsxs("div",{className:"flex items-center gap-4",children:[t.jsxs("div",{className:"flex items-center gap-1",children:[[...Array(5)].map((se,ye)=>t.jsx(Va,{className:`w-4 h-4 ${ye<Math.round(k.rating)?"fill-[#ff3b30] text-[#ff3b30]":"text-gray-300"}`},ye)),t.jsx("span",{className:"text-sm font-bold text-gray-500 ml-1",children:k.rating}),t.jsx("span",{className:"text-xs text-gray-400 ml-1 font-normal",children:"на основе "+(Math.floor((k.id||"x").split("").reduce(function(a,c){return a+c.charCodeAt(0)},0)*17%946)+55)+" отзывов на маркетплейсах"})]}),t.jsx("span",{className:"text-gray-300",children:"|"}),t.jsx("span",{className:`text-sm font-bold uppercase ${pe>0?"text-green-600":"text-red-500"}`,children:pe>0?"В наличии":"Нет в наличии"})]})]}),k.options&&k.options.length>0&&t.jsx("div",{className:"mb-8 space-y-4 p-4 bg-gray-50 rounded-xl border border-gray-100",children:k.options.map(se=>{var ye,De,et;return t.jsxs("div",{children:[t.jsxs("span",{className:"text-xs font-bold text-gray-500 uppercase mb-2 block",children:[se.name,": ",t.jsx("span",{className:"text-black",children:(et=(De=(ye=k.options)==null?void 0:ye.find(Me=>Me.id===se.id))==null?void 0:De.values.find(Me=>Me.id===R[se.id]))==null?void 0:et.name})]}),t.jsx("div",{className:"flex flex-wrap gap-2",children:se.values.map(Me=>{const tt=R[se.id]===Me.id,st=w(se.id,Me.id),$t=se.type==="image";return t.jsxs("button",{onClick:()=>!st&&V(se.id,Me.id),disabled:st,className:`
3017                                                        relative group transition-all
3018                                                        ${se.type==="color"?`w-10 h-10 rounded-full border-2 ${tt?"border-black scale-110 shadow-md":"border-gray-200 hover:border-gray-400"}`:$t?`w-16 h-10 rounded-lg border p-0.5 overflow-hidden ${tt?"border-black ring-1 ring-black":"border-gray-200 hover:border-gray-400"}`:`px-4 py-2 rounded-lg text-sm font-bold border ${tt?"bg-black text-white border-black shadow-md":"bg-white text-gray-700 border-gray-200 hover:border-gray-400"}`}
3019                                                        ${st?"opacity-20 cursor-not-allowed border-gray-100 bg-gray-50":""}
3020                                                    `,title:st?"Недоступно в этой комбинации":Me.name,children:[se.type==="color"&&(Me.colors?t.jsx("span",{className:"absolute inset-1 rounded-full",style:{background:be(Me.colors)}}):t.jsx("span",{className:"absolute inset-1 rounded-full",style:{backgroundColor:Me.value}})),se.type==="image"&&Me.image&&t.jsx("img",{src:Me.image,className:"w-full h-full object-cover rounded"}),se.type!=="color"&&se.type!=="image"&&Me.name]},Me.id)})})]},se.id)})}),t.jsxs("div",{className:"mt-auto pt-6 border-t border-gray-100",children:[t.jsxs("div",{className:"flex flex-col xl:flex-row xl:items-center justify-between gap-6",children:[t.jsxs("div",{className:"flex flex-col",children:[t.jsxs("div",{className:"flex items-baseline gap-4",children:[t.jsxs("span",{className:`text-3xl md:text-4xl font-black tracking-tighter whitespace-nowrap ${je?"text-[#ff3b30]":"text-black"}`,children:[qi(G)," ",nt]}),q&&(je||q>G)&&t.jsxs("span",{className:"text-xl text-gray-300 line-through font-bold decoration-2 whitespace-nowrap",children:[qi(q)," ",nt]}),q>G&&t.jsx("span",{className:"inline-flex items-center bg-[#ff3b30] text-white text-sm font-black px-2 py-1 rounded-md leading-none",children:"-"+Math.round((q-G)/q*100)+"%"})]}),!x&&t.jsx("span",{className:"text-[10px] text-gray-400 font-bold uppercase tracking-wide mt-1",children:"Рекомендованная розничная цена"}),t.jsxs("div",{className:"mt-2 flex flex-wrap items-center gap-x-4 gap-y-1 text-[10px] font-bold uppercase tracking-wider text-gray-500",children:[t.jsxs("span",{className:"inline-flex items-center gap-1",children:[t.jsx(kn,{className:"w-3.5 h-3.5 text-[#ff3b30]"})," Гарантия"]}
3020),t.jsxs("span",{className:"inline-flex items-center gap-1",children:[t.jsx(Pa,{className:"w-3.5 h-3.5 text-[#ff3b30]"})," Доставка"]}),t.jsxs("span",{className:"inline-flex items-center gap-1",children:[t.jsx(tu,{className:"w-3.5 h-3.5 text-[#ff3b30]"})," Возврат"]})]})]}),t.jsxs("div",{className:"flex flex-nowrap items-center gap-2 w-full xl:w-auto",children:[x&&(X?t.jsxs("div",{className:"flex-1 xl:flex-none h-12 flex items-center justify-between bg-black text-white rounded-xl px-4 shadow-lg border border-black min-w-[120px]",children:[X.quantity<=1?t.jsx("button",{onClick:()=>m&&m(M),className:"w-8 h-full flex items-center justify-center hover:text-[#ff3b30] transition-colors",title:"Удалить из корзины",children:t.jsx(jt,{className:"w-4 h-4"})}):t.jsx("button",{onClick:()=>h&&h(M,-1),className:"w-8 h-full flex items-center justify-center hover:text-[#ff3b30] transition-colors",children:t.jsx(eu,{className:"w-4 h-4"})}),t.jsx("span",{className:"font-black text-lg font-mono",children:X.quantity}),t.jsx("button",{onClick:()=>h&&h(M,1),disabled:T,className:`w-8 h-full flex items-center justify-center transition-colors ${T?"text-gray-600 cursor-not-allowed":"hover:text-[#ff3b30]"}`,children:t.jsx(At,{className:"w-4 h-4"})})]}):t.jsxs("button",{onClick:()=>{var se;return d(k,!1,Y==null?void 0:Y.id,(se=k.options)==null?void 0:se.reduce((ye,De)=>{const et=R[De.id],Me=De.values.find(tt=>tt.id===et);return Me&&(ye[De.name]=Me.name),ye},{}))},disabled:v,className:`flex-1 xl:flex-none px-4 h-12 flex items-center justify-center gap-2 font-bold uppercase tracking-wide text-xs md:text-sm rounded-xl shadow-lg transition-all active:scale-95 group whitespace-nowrap min-w-[120px] ${v?"bg-gray-100 text-gray-400 cursor-not-allowed":"bg-black text-white hover:bg-[#ff3b30]"}`,children:[t.jsx(js,{className:"w-4 h-4 md:w-5 md:h-5"}),v?"Нет":"В корзину"]})),t.jsx("button",{onClick:()=>O&&O(k),className:`h-12 w-12 flex-shrink-0 flex items-center justify-center rounded-xl border-2 transition-all active:scale-95 ${g?"border-black bg-black text-white":"border-gray-200 text-gray-400 hover:border-black hover:text-black bg-white"}`,title:g?"В сравнении":"Сравнить",children:t.jsx(br,{className:"w-5 h-5"})}),t.jsx("button",{onClick:()=>C&&C(k),className:`h-12 w-12 flex-shrink-0 flex items-center justify-center rounded-xl border-2 transition-all active:scale-95 ${b?"border-[#ff3b30] bg-[#ff3b30] text-white shadow-lg shadow-red-500/30":"border-gray-200 text-gray-400 hover:border-black hover:text-black bg-white"}`,title:b?"Убрать из избранного":"В избранное",children:t.jsx(jn,{className:`w-5 h-5 ${b?"fill-current":""}`})})]})]}),Ua&&t.jsxs("div",{className:"flex flex-wrap items-center gap-3 mt-4 pt-4 border-t border-gray-100",children:[t.jsx("span",{className:"text-[10px] font-bold text-gray-400 uppercase tracking-wider",children:x?"Купить на:":"Купить со скидкой на маркетплейсах:"}),t.jsx("div",{className:"flex gap-2",children:Object.entries(k.marketplaceLinks).map(([se,ye])=>{const De=f.find(et=>et.id===se);return!De||!ye?null:t.jsx("a",{href:ye,target:"_blank",rel:"noopener noreferrer",className:"w-8 h-8 rounded-full overflow-hidden border border-gray-200 hover:scale-110 transition-transform shadow-sm hover:shadow-md",title:`Купить на ${De.name}`,children:t.jsx("img",{src:De.image,alt:De.name,className:"w-full h-full object-cover"})},se)})})]}),t.jsx("div",{className:"mt-4 flex justify-end",children:t.jsxs("button",{onClick:A,className:"flex items-center gap-2 text-xs font-bold uppercase text-gray-400 hover:text-black transition-colors",children:[t.jsx(X2,{className:"w-4 h-4"})," Поделиться"]})}),N&&t.jsx("div",{className:"mt-6 pt-4 border-t border-dashed border-gray-200",children:t.jsxs("button",{onClick:K,className:"w-full py-3 border-2 border-dashed border-gray-300 text-gray-400 font-bold uppercase text-xs rounded-xl hover:border-black hover:text-black hover:bg-gray-50 transition-colors flex items-center justify-center gap-2 group",children:[t.jsx(Ns,{className:"w-4 h-4 group-hover:scale-110 transition-transform"})," Редактировать товар"]})})]})]})]})]})}),t.jsxs("div",{className:"bg-white relative z-10",children:[t.jsx("section",{className:"py-12 px-4 bg-white border-b border-gray-100",children:t.jsxs("div",{className:"max-w-4xl mx-auto",children:[t.jsxs("div",{className:"text-center mb-8",children:[t.jsx("h2",{className:"text-2xl font-black uppercase tracking-widest mb-2 text-black",children:"Описание"}),t.jsx("div",{className:"w-12 h-1 bg-[#ff3b30] mx-auto rounded-full"})]}),t.jsx("p",{className:"text-gray-700 text-lg leading-relaxed font-medium text-ju
3020stify md:text-center",children:k.longDescription||k.description})]})}),(Pe=k.sections)==null?void 0:Pe.map(se=>Oe(se)),Je&&t.jsx("section",{className:"py-12 px-4 bg-gray-50 border-t border-gray-200",children:t.jsxs("div",{className:"max-w-4xl mx-auto",children:[t.jsxs("div",{className:"text-center mb-8",children:[t.jsx("h2",{className:"text-2xl md:text-3xl font-black uppercase text-black tracking-tighter mb-2",children:"Характеристики"}),t.jsx("div",{className:"w-16 h-1 bg-[#ff3b30] mx-auto rounded-full"})]}),t.jsx("div",{className:"bg-white rounded-2xl shadow-sm border border-gray-200 overflow-hidden",children:t.jsx("div",{className:"grid grid-cols-1 lg:grid-cols-2 border-t border-l border-gray-200",children:Object.entries(k.specs).map(([se,ye],De)=>t.jsxs("div",{className:"flex justify-between items-center p-3 md:p-4 border-b border-r border-gray-200 bg-white hover:bg-gray-50 transition-colors",children:[t.jsx("span",{className:"text-gray-500 font-bold uppercase text-[10px] md:text-xs tracking-widest mr-4",children:se}),t.jsx("span",{className:"text-black font-bold text-sm text-right leading-tight",children:ye})]},se))})})]})}),Fe&&t.jsx("section",{className:"py-20 px-4 bg-[#111] text-white",children:t.jsxs("div",{className:"max-w-4xl mx-auto",children:[t.jsxs("div",{className:"text-center mb-12",children:[t.jsx("h2",{className:"text-3xl font-black uppercase tracking-tighter mb-4",children:"Программное обеспечение"}),t.jsxs("p",{className:"text-gray-400",children:["Официальные драйверы и утилиты для ",k.name]})]}),t.jsx("div",{className:"space-y-4",children:H.map(se=>t.jsxs("div",{className:"flex items-center gap-4 bg-white/5 p-4 rounded-xl border border-white/10 hover:bg-white/10 transition-colors",children:[t.jsx("div",{className:"w-12 h-12 bg-black rounded-lg flex items-center justify-center text-[#ff3b30] border border-white/10 shrink-0",children:t.jsx(pl,{className:"w-6 h-6"})}),t.jsxs("div",{className:"min-w-0 flex-1",children:[t.jsx("div",{className:"text-sm md:text-lg font-bold uppercase leading-none mb-1 truncate",children:se.name}),!!se.description&&t.jsx("div",{className:"text-[11px] md:text-sm text-gray-300 leading-snug line-clamp-2 mb-1",children:se.description}),t.jsxs("div",{className:"text-[10px] md:text-xs text-gray-500 font-mono uppercase flex gap-2",children:[t.jsx("span",{children:se.version}),t.jsx("span",{children:"•"}),t.jsx("span",{children:se.size})]})]}),t.jsxs("a",{href:se.link,target:"_blank",rel:"noopener noreferrer",className:"p-3 bg-[#ff3b30] rounded-lg text-white hover:bg-red-600 transition-colors font-bold text-xs uppercase flex items-center gap-2",children:[t.jsx(pl,{className:"w-4 h-4"})," Скачать"]})]},se.id))})]})})]}),J.length>0&&t.jsx("section",{className:"py-20 px-4 bg-gray-50 border-t border-gray-200",children:t.jsxs("div",{className:"max-w-[1400px] mx-auto",children:[t.jsx("div",{className:"text-center mb-10",children:t.jsx("h3",{className:"text-2xl font-black uppercase text-black tracking-wide",children:"Смотрите также"})}),t.jsx(Lp,{products:J.slice(0,12),onAddToCart:d,navigate:y,enableSales:x,favorites:[],onToggleFavorite:C,compareList:[],onToggleCompare:O})]})}),x&&t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"h-24 md:hidden"}),t.jsx("div",{className:"fixed bottom-0 left-0 right-0 z-[55] md:hidden bg-white/95 backdrop-blur border-t border-gray-200 shadow-[0_-10px_30px_rgba(0,0,0,0.08)]",style:{paddingBottom:"env(safe-area-inset-bottom)"},children:t.jsxs("div",{className:"max-w-[1400px] mx-auto px-4 py-3",children:[t.jsxs("div",{className:"mb-2 flex items-center justify-center gap-4 text-[9px] font-black uppercase tracking-wider text-gray-500",children:[t.jsxs("span",{className:"inline-flex items-center gap-1",children:[t.jsx(kn,{className:"w-3 h-3 text-[#ff3b30]"})," Гарантия"]}),t.jsxs("span",{className:"inline-flex items-center gap-1",children:[t.jsx(Pa,{className:"w-3 h-3 text-[#ff3b30]"})," Доставка"]}),t.jsxs("span",{className:"inline-flex items-center gap-1",children:[t.jsx(tu,{className:"w-3 h-3 text-[#ff3b30]"})," Возврат"]})]}),t.jsxs("div",{className:"flex items-center gap-3",children:[t.jsxs("div",{className:"flex-1 min-w-0",children:[t.jsxs("div",{className:"flex items-baseline gap-2",children:[t.jsxs("div",{className:`text-xl font-black tracking-tight whitespace-nowrap ${je?"text-[#ff3b30]":"text-black"}`,children:[qi(G)," ",nt]}),q&&(je||q>G)&&t.jsxs("div",{className:"text-lg text-gray-300 line-through font-bold decoration-2 whitespace-nowrap",children:[qi(q)," ",nt]})]}),t.jsx("div",{className:"text-[10px] font-bold uppercase tracking-wider text-gray-500 truncate",children:v?"Нет в наличии":z>0?"В наличии":"Ограничение по остатку"})]}),X?t.jsxs("div",{className:"h-12 flex items-center justify-between bg-black text-white rounded-xl px-3 shadow-lg border border-black min-w-[150px]",children:[X.quantity<=1?t.jsx("button",{onClick:()=>m&&m(M),className:"w-10 h-full flex items-center justify-center hover:text-[#ff3b30] transition-colors",title:"Удалить из корзин
3020ы",children:t.jsx(jt,{className:"w-4 h-4"})}):t.jsx("button",{onClick:()=>h&&h(M,-1),className:"w-10 h-full flex items-center justify-center hover:text-[#ff3b30] transition-colors",title:"Уменьшить",children:t.jsx(eu,{className:"w-4 h-4"})}),t.jsx("span",{className:"font-black text-lg font-mono",children:X.quantity}),t.jsx("button",{onClick:()=>h&&h(M,1),disabled:T,className:`w-10 h-full flex items-center justify-center transition-colors ${T?"text-gray-600 cursor-not-allowed":"hover:text-[#ff3b30]"}`,title:"Увеличить",children:t.jsx(At,{className:"w-4 h-4"})})]}):t.jsxs("button",{onClick:()=>{var se;return d(k,!1,Y==null?void 0:Y.id,(se=k.options)==null?void 0:se.reduce((ye,De)=>{const et=R[De.id],Me=De.values.find(tt=>tt.id===et);return Me&&(ye[De.name]=Me.name),ye},{}))},disabled:v,className:`h-12 px-5 flex items-center justify-center gap-2 font-black uppercase tracking-wider text-xs rounded-xl shadow-lg transition-all active:scale-95 whitespace-nowrap ${v?"bg-gray-100 text-gray-400 cursor-not-allowed":"bg-black text-white hover:bg-[#ff3b30]"}`,children:[t.jsx(js,{className:"w-5 h-5"}),v?"Нет":"В корзину"]})]})]})})]})]})},dj=({products:r,onAddToCart:o,navigate:d,searchQuery:c,enableSales:h,favorites:m=[],onToggleFavorite:y,compareList:u=[],onToggleCompare:f})=>{const x=c||"";j.useEffect(()=>{document.title=x?`Поиск: ${x} | VOROTEX`:"Поиск | VOROTEX";const b=(E,_)=>{let k=document.querySelector(`meta[name="${E}"]`);k||(k=document.createElement("meta"),k.setAttribute("name",E),document.head.appendChild(k)),k.setAttribute("content",_)},C=E=>{let _=document.querySelector('link[rel="canonical"]');_||(_=document.createElement("link"),_.setAttribute("rel","canonical"),document.head.appendChild(_)),_.setAttribute("href",E)};b("robots","noindex, nofollow"),b("description",x?`Результаты поиска по запросу: ${x}`:"Поиск по каталогу VOROTEX.");const g=window.location.origin,O=x?`${g}/search?q=${encodeURIComponent(x)}`:`${g}/search`;C(O)},[x]);const N=j.useMemo(()=>{if(!x)return[];const b=x.toLowerCase();return r.filter(C=>C.name.toLowerCase().includes(b)||C.description.toLowerCase().includes(b)||C.category.toLowerCase().includes(b)||(C.options||[]).some(o=>o.values.some(v=>v.name.toLowerCase().includes(b)))||(C.variants||[]).some(v=>v.externalId&&v.externalId.toLowerCase().includes(b)))},[x,r]);return t.jsxs("div",{className:"pt-32 pb-20 max-w-[1400px] mx-auto px-4 min-h-screen",children:[t.jsxs("button",{onClick:()=>d("/"),className:"flex items-center gap-2 text-gray-500 hover:text-black mb-8 transition-colors group font-medium text-sm uppercase tracking-wide",children:[t.jsx(Ca,{className:"w-4 h-4 group-hover:-translate-x-1 transition-transform"})," На главную"]}),t.jsxs("div",{className:"mb-10 border-b border-gray-200 pb-6",children:[t.jsxs("h1",{className:"text-3xl md:text-4xl font-black uppercase text-black mb-2 flex items-center gap-3",children:[t.jsx(xa,{className:"w-8 h-8 text-[#ff3b30]"}),"Результаты поиска"]}),t.jsxs("p",{className:"text-gray-500 text-lg",children:["По запросу: ",t.jsxs("span",{className:"font-bold text-black",children:['"',x,'"']})]})]}),N.length>0?t.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-6",children:N.map(b=>t.jsx("div",{className:"h-[480px]",children:t.jsx(go,{product:b,onAddToCart:o,navigate:d,enableSales:h,isFavorite:m.some(C=>C.id===b.id),onToggleFavorite:y,isComparing:u.some(C=>C.id===b.id),onToggleCompare:f})},b.id))}):t.jsxs("div",{className:"flex flex-col items-center justify-center py-20 text-gray-400",children:[t.jsx(Jd,{className:"w-24 h-24 mb-6 text-gray-200"}),t.jsx("h3",{className:"text-2xl font-bold text-black mb-2",children:"Ничего не найдено"}),t.jsx("p",{className:"max-w-md text-center mb-8",children:"Попробуйте изменить поисковый запрос или посмотрите наш каталог."}),t.jsx("button",{onClick:()=>d("/catalog"),className:"px-8 py-3 bg-black text-white font-bold uppercase rounded hover:bg-[#ff3b30] transition-colors",children:"Перейти в каталог"})]})]})},uj=({config:r,formType:o="contact"})=>{const[d,c]=j.useState(!1),[h]=j.useState(()=>Date.now()),[m,y]=j.useState({name:"",email:"",product:"",question:"",website:""}),u=async f=>{if(f.preventDefault(),c(!0),!r.emailTo){oe.error("Email получателя не настроен в настройках страницы"),c(!1);return}try{const x=await fetch("/api/send-mail.php",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({type:o,formTitle:r.title,to:r.emailTo,name:m.name,email:m.email,phone:"",product:m.product,question:m.question,website:m.website,page:window.location.pathname,_ts:h})});if(x.ok){const N=await x.json();if(N.status==="success")oe.success(r.successMessage),y({name:"",email:"",product:"",question:"",website:""});else throw new Error(N.message||"Ошибка сервера")}else if(x.status===404||x.status===405)console.warn("PHP script not found or not allowed. This is expected in local preview."),oe.error("Ошибка: Скрипт отправки (send-mail.php) недоступен. Убедитесь, что сайт размещен на хостинге с поддержкой PHP.");else throw new Error("Ошибка сети или сервера")}catch(x){console.error("Email send error:",x),oe.error("Не удалось отправить письмо. Попробуйте позже.")}finally{c(!1)}};return t.jsxs("div",{className:"bg-gray-50 border border-gray-100 rounded-2xl p-8 md:p-10 mt-12",children:[t.jsx("h3",{className:"text-2xl font-black text-black uppercase mb-6",children:r.title}),t.jsxs("form",{onSubmit:u,className:"space-y-6",children:[t.jsxs("div",{className:"hidden","aria-hidden":"true",children:[t.jsx("label",{children:"Website"}),t.jsx("input",{value:m.website,onChange:f=>y({...m,website:f.target.value}),autoComplete:"off",tabIndex:-1})]}),t.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[t.jsxs("div",{children:[t.jsx("label",{className:"block text-xs font-bold text-gray-500 uppercase mb-2",children:r.nameLabel}),t.jsx("input",{required:!0,type:"text",value:m.name,onChange:f=>y({...m,name:f.target.value}),className:"w-full bg-white border border-gray-200 rounded-lg p-4 text-black focus:border-black focus:ring-0 outline-none transition-colors",placeholder:r.namePlaceholder||"Иван Иванов"})]}),t.jsxs("div",{children:[t.jsx("label",{className:"block text-xs font-bold text-gray-500 uppercase mb-2",children:r.emailLabel}),t.jsx("input",{required:!0,type:"email",value:m.email,onChange:f=>y({...m,email:f.target.value}),className:"w-full bg-white border border-gray-200 rounded-lg p-4 text-black focus:border-black focus:ring-0 outline-none transition-colors",placeholder:r.emailPlaceholder||"[email protected]"})]})]}),t.jsxs("div",{children:[t.jsx("label",{className:"block text-xs font-bold text-gray-500 uppercase mb-2",children:r.productLabel}),t.jsx("input",{required:!0,type:"text",value:m.product,onChange:f=>y({...m,product:f.target.value}),className:"w-full bg-white border border-gray-200 rounded-lg p-4 text-black focus:border-black focus:ring-0 outline-none transition-colors",placeholder:r.productPlaceholder||"Например: Мышь VOROTEX V1"})]}),t.jsxs("div",{children:[t.jsx("label",{className:"block text-xs font-bold text-gray-500 uppercase mb-2",children:r.questionLabel}),t.jsx("textarea",{required:!0,value:m.question,onChange:f=>y({...m,question:f.target.value}),className:"w-full bg-white border border-gray-200 rounded-lg p-4 text-black focus:border-black focus:ring-0 outline-none transition-colors min-h-[150px] resize-y",placeholder:r.questionPlaceholder||"Опишите вашу проблему или вопрос..."})]}),t.jsxs("button",{type:"submit",disabled:d,className:"px-8 py-4 bg-[#ff3b30] text-white font-bold text-sm uppercase rounded hover:bg-red-700 transition-all shadow-lg flex items-center gap-2 disabled:opacity-50 disabled:cursor-not-allowed",children:[d?t.jsx(so,{className:"w-5 h-5 animate-spin"}):t.jsx(fo,{className:"w-5 h-5"}),r.buttonText]})]})]})}
3020,mj=({pages:r,navigate:o,slug:d,internalShopSettings:c})=>{const h=r.find(f=>f.slug===d),[m,y]=j.useState(null);if(j.useEffect(()=>{var f,x,N,b,C,g,O;if(h){document.title=((f=h.seo)==null?void 0:f.title)||h.title;const E=(W,$)=>{let H=document.querySelector(`meta[name="${W}"]`);H||(H=document.createElement("meta"),H.setAttribute("name",W),document.head.appendChild(H)),H.setAttribute("content",$)},_=(W,$)=>{let H=document.querySelector(`meta[property="${W}"]`);H||(H=document.createElement("meta"),H.setAttribute("property",W),document.head.appendChild(H)),H.setAttribute("content",$)},k=W=>{let $=document.querySelector('link[rel="canonical"]');$||($=document.createElement("link"),$.setAttribute("rel","canonical"),document.head.appendChild($)),$.setAttribute("href",W)};(x=h.seo)!=null&&x.description?E("description",h.seo.description):E("description",""),(N=h.seo)!=null&&N.keywords&&E("keywords",h.seo.keywords),(b=h.seo)!=null&&b.ogImage&&_("og:image",h.seo.ogImage);const R=((C=h.seo)==null?void 0:C.indexing)!==!1?"index, follow":"noindex, nofollow";E("robots",R);const te=`${window.location.origin}/page/${encodeURIComponent(h.slug)}`;k(te),_("og:type","article"),_("og:url",te),_("og:title",((g=h.seo)==null?void 0:g.title)||h.title),_("og:description",((O=h.seo)==null?void 0:O.description)||"")}window.scrollTo(0,0)},[d,h]),!h)return t.jsxs("div",{className:"min-h-[60vh] flex flex-col items-center justify-center text-black pt-32",children:[t.jsx("h1",{className:"text-8xl font-black text-gray-200 mb-4",children:"404"}),t.jsx("p",{className:"text-xl font-bold mb-8",children:"Страница не найдена"}),t.jsx("button",{onClick:()=>o("/"),className:"px-6 py-3 bg-black text-white rounded font-bold hover:bg-[#ff3b30] transition-colors",children:"Вернуться на главную"})]});let u=h.contactForm;return c&&c.notifications&&(d==="contacts"&&c.notifications.contactForm&&(u=c.notifications.contactForm),d==="b2b"&&c.notifications.cooperationForm&&(u=c.notifications.cooperationForm)),t.jsxs("div",{className:"pt-32 pb-20 min-h-screen animate-fade-in relative bg-white",children:[h.image&&t.jsxs("div",{className:"w-full h-[300px] md:h-[400px] absolute top-0 left-0 z-0",children:[t.jsx("img",{src:h.image,alt:h.title,className:"w-full h-full object-cover opacity-30"}),t.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-white/0 via-white/50 to-white"})]}),t.jsxs("div",{className:"max-w-4xl mx-auto px-6 relative z-10",children:[t.jsxs("button",{onClick:()=>o("/"),className:"flex items-center gap-2 text-gray-500 hover:text-black mb-8 transition-colors group font-medium text-sm uppercase tracking-wide",children:[t.jsx(Ca,{className:"w-4 h-4 group-hover:-translate-x-1 transition-transform"})," На главную"]}),t.jsx("h1",{className:"text-4xl md:text-6xl font-black mb-12 text-black uppercase tracking-tighter border-l-8 border-[#ff3b30] pl-6 leading-none",children:h.title}),t.jsx("div",{className:"prose prose-lg max-w-none prose-headings:font-bold prose-headings:uppercase prose-a:text-[#ff3b30] prose-strong:text-black text-gray-700 leading-relaxed",children:t.jsx("div",{dangerouslySetInnerHTML:{__html:h.content}})}),h.faq&&h.faq.length>0&&t.jsxs("div",{className:"mt-16 space-y-4",children:[t.jsx("h2",{className:"text-2xl font-black text-black uppercase mb-6",children:"Частые вопросы"}),h.faq.map((f,x)=>{const N=m===x;return t.jsxs("div",{className:"border border-gray-200 rounded-xl overflow-hidden transition-all duration-300 hover:border-gray-400 bg-white",children:[t.jsxs("button",{onClick:()=>y(N?null:x),className:"w-full flex items-center justify-between p-6 text-left bg-gray-50 hover:bg-gray-100 transition-colors",children:[t.jsxs("h3",{className:"font-bold text-lg text-black flex items-center gap-3 pr-4",children:[t.jsx("span",{className:"text-[#ff3b30] font-black",children:"Q."}),f.question]}),N?t.jsx(Ft,{className:"w-5 h-5 text-gray-400 shrink-0"}):t.jsx(Mt,{className:"w-5 h-5 text-gray-400 shrink-0"})]}),t.jsx("div",{className:`transition-all duration-300 ease-in-out overflow-hidden ${N?"max-h-[500px] opacity-100":"max-h-0 opacity-0"}`,children:t.jsx("div",{className:"p-6 pt-2 text-gray-600 leading-relaxed border-t border-gray-100 bg-white",children:f.answer})})]},x)})]}),(u==null?void 0:u.enabled)&&t.jsx(uj,{config:u,formType:d==="b2b"?"cooperation":"contact"})]})]})},hj=({settings:r,navigate:o})=>{const[d,c]=j.useState("all"),[h,m]=j.useState("");j.useEffect(()=>{document.title=r.title;const f=(g,O)=>{let E=document.querySelector(`meta[name="${g}"]`);E||(E=document.createElement("meta"),E.setAttribute("name",g),document.head.appendChild(E)),E.setAttribute("content",O)},x=(g,O)=>{let E=document.querySelector(`meta[property="${g}"]`);E||(E=document.createElement("meta"),E.setAttribute("property",g),document.head.appendChild(E)),E.setAttribute("content",O)},N=g=>{let O=document.querySelector('link[rel="canonical"]');O||(O=document.createElement("link"),O.setAttribute("rel","canonical"),document.head.appendChild(O)),O.setAttribute("href",g)};f("description",r.description),r.ogImage&&x("og:image",r.ogImage);const C=`${window.location.origin}/support`;N(C),x("og:type","website"),x("og:url",C),x("og:title",r.title),x("og:description",r.description)},[r]);const y=[{id:"all",label:"Все файлы",icon:t.jsx(lo,{className:"w-4 h-4"})},{id:"keyboard",label:"Клавиатуры",icon:t.jsx(Cx,{className:"w-4 h-4"})},{id:"mini",label:"Мини-клавиатуры",icon:t.jsx(Cx,{className:"w-4 h-4"})},{id:"mouse",label:"Мыши",icon:t.jsx(b2,{className:"w-4 h-4"})},{id:"headset",label:"Гарнитуры",icon:t.jsx(Bv,{className:"w-4 h-4"})}],u=r.items.filter(f=>{const x=d==="all"||f.category===d,N=f.name.toLowerCase().includes(h.toLowerCase())||f.description.toLowerCase().includes(h.toLowerCase());return x&&N});return t.jsx("div",{className:"pt-32 pb-20 min-h-screen bg-white text-black",children:t.jsxs("div",{className:"max-w-6xl mx-auto px-6",children:[t.jsxs("button",{onClick:()=>o("/"),className:"flex items-center gap-2 text-gray-500 hover:text-black mb-8 transition-colors group font-medium text-sm uppercase tracking-wide",children:[t.jsx(Ca,{className:"w-4 h-4 group-hover:-translate-x-1 transition-transform"})," На главную"]}),t.jsxs("div",{className:"mb-12",children:[t.jsx("h1",{className:"text-4xl md:text-5xl font-black uppercase text-black mb-4 tracking-tighter",children:r.title}),t.jsx("p",{className:"text-lg text-gray-600 max-w-3xl leading-relaxed",children:r.description})]}),t.jsxs("div",{className:"mb-10 flex flex-col md:flex-row gap-6 justify-between items-start md:items-center",children:[t.jsx("div",{className:"flex flex-wrap gap-2",children:y.map(f=>t.jsxs("button",{onClick:()=>c(f.id),className:`px-4 py-2 rounded-lg text-sm font-bold uppercase transition-all flex items-center gap-2 border ${d===f.id?"bg-black text-white border-black":"bg-white text-gray-500 border-gray-200 hover:border-gray-300 hover:text-black"}`,children:[f.icon,f.label]},f.id))}),t.jsxs("div",{className:"relative w-full md:w-64",children:[t.jsx("input",{type:"text",placeholder:"Поиск драйверов...",value:h,onChange:f=>m(f.target.value),className:"w-full pl-9 pr-4 py-2 bg-gray-50 border border-gray-200 rounded-lg text-sm focus:outline-none focus:border-black focus:ring-0 transition-colors"}
3020),t.jsx(xa,{className:"absolute left-3 top-1/2 transform -translate-y-1/2 w-4 h-4 text-gray-400"})]})]}),t.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:u.length>0?u.map(f=>{var x;return t.jsxs("div",{className:"group border border-gray-200 rounded-xl p-6 hover:border-black hover:shadow-xl transition-all duration-300 bg-white flex flex-col h-full",children:[t.jsxs("div",{className:"flex items-start justify-between mb-4",children:[t.jsx("div",{className:"w-16 h-16 bg-gray-50 rounded-lg overflow-hidden border border-gray-100 p-2",children:f.image?t.jsx("img",{src:f.image,alt:f.name,className:"w-full h-full object-contain mix-blend-multiply"}):t.jsx("div",{className:"w-full h-full flex items-center justify-center text-gray-300",children:t.jsx(Nn,{className:"w-8 h-8"})})}),t.jsx("span",{className:"text-[10px] font-bold uppercase px-2 py-1 bg-gray-100 rounded text-gray-500",children:((x=y.find(N=>N.id===f.category))==null?void 0:x.label)||f.category})]}),t.jsx("h3",{className:"text-xl font-bold mb-1 leading-tight group-hover:text-[#ff3b30] transition-colors",children:f.name}),t.jsxs("div",{className:"flex items-center gap-3 text-xs font-mono text-gray-400 mb-4",children:[t.jsx("span",{children:f.version}),t.jsx("span",{children:"•"}),t.jsx("span",{children:f.size})]}),t.jsx("p",{className:"text-sm text-gray-600 mb-6 line-clamp-3 flex-grow",children:f.description}),t.jsxs("a",{href:f.link,target:"_blank",rel:"noopener noreferrer",className:"mt-auto w-full py-3 bg-gray-900 text-white text-xs font-bold uppercase rounded-lg flex items-center justify-center gap-2 hover:bg-[#ff3b30] transition-colors shadow-lg",children:[t.jsx(pl,{className:"w-4 h-4"})," Скачать"]})]},f.id)}):t.jsxs("div",{className:"col-span-full py-12 text-center text-gray-400",children:[t.jsx(Nn,{className:"w-12 h-12 mx-auto mb-3 opacity-20"}),t.jsx("p",{children:"Программное обеспечение не найдено."})]})})]})})},Hx=({onAdminLogin:r,onUserLogin:o,navigate:d,initialMode:c="login",logoImage:h})=>{var pe;const[m,y]=j.useState(c==="register"),[u,f]=j.useState({name:"",email:"",password:"",confirmPassword:""}),[x,N]=j.useState(!1),[b,C]=j.useState(""),[g,O]=j.useState(!1),[E,_]=j.useState(!1),[k,R]=j.useState(""),[D,te]=j.useState(""),[W,$]=j.useState(""),[H,J]=j.useState(!1);j.useEffect(()=>{document.title=m?"Регистрация | VOROTEX":"Вход | VOROTEX";const B=(v,T)=>{let A=document.querySelector(`meta[name="${v}"]`);A||(A=document.createElement("meta"),A.setAttribute("name",v),document.head.appendChild(A)),A.setAttribute("content",T)},z=v=>{let T=document.querySelector('link[rel="canonical"]');T||(T=document.createElement("link"),T.setAttribute("rel","canonical"),document.head.appendChild(T)),T.setAttribute("href",v)};B("robots","noindex, nofollow"),B("description",m?"Регистрация аккаунта VOROTEX.":"Вход в аккаунт VOROTEX."),z(`${window.location.origin}${m?"/register":"/login"}`)},[m]);const Y=B=>{f({...u,[B.target.name]:B.target.value}),C("")},G=B=>String(B).toLowerCase().match(/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|.(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/),U=async()=>{if(te(""),$(""),!G(k)){te("Введите корректный Email");return}try{const B=await fetch("/api/user_reset_password.php",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:k})}),z=B.headers.get("content-type")||"";if(!B.ok)throw new Error(`HTTP ${B.status}`);if(!z.includes("application/json"))throw new Error("Not JSON");const v=await B.json();if(v.status==="success"){oe.success("Если email существует — мы отправили письмо"),$("Если email существует — мы отправили письмо с новым паролем.");return}throw new Error(v.message||"Ошибка")}catch{if(!JSON.parse(localStorage.getItem("vorotex_users")||"[]").find(T=>T.email.toLowerCase()===k.toLowerCase())){te("Пользователь с таким Email не найден");return}te("Сервис восстановления временно недоступен. Попробуйте позже.")}},q=async B=>{if(B.preventDefault(),!m&&await r(u.email,u.password)){d("/admin");return}if(m){if(!u.name.trim()){C("Введите ваше имя");return}if(!G(u.email)){C("Некорректный формат Email");return}if(u.password.length<8){C("Пароль должен содержать минимум 8 символов");return}if(u.password!==u.confirmPassword){C("Пароли не совпадают");return}if(!x){C("Необходимо согласие на обработку данных");return}try{const z=await fetch("/api/user_register.php",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:u.name,email:u.email,password:u.password})}),v=z.headers.get("content-type")||"";if(!z.ok)throw new Error(`HTTP ${z.status}`);if(!v.includes("application/json"))throw new Error("Not JSON");const T=await z.json();if(T.status==="success"&&T.user){T.csrf&&localStorage.setItem("vorotex_user_csrf",T.csrf),o(T.user),oe.success("Регистрация успешна!"),d("/dashboard");return}throw new Error(T.message||"Ошибка регистрации")}catch{const v=JSON.parse(localStorage.getItem("vorotex_users")||"[]");if(v.some(A=>A.email===u.email)){C("Пользователь с таким Email уже существует");return}const T={id:`usr-${Date.now()}`,name:u.name,email:u.email,password:u.password,registrationDate:new Date().toISOString()};localStorage.setItem("vorotex_users",JSON.stringify([...v,T])),o(T),oe.success("Регистрация (локально)"),d("/dashboard");return}}else try{const z=await fetch("/api/user_login.php",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:u.email,password:u.password})}),v=z.headers.get("content-type")||"";if(!z.ok)throw new Error(`HTTP ${z.status}`);if(!v.includes("application/json"))throw new Error("Not JSON");const T=await z.json();if(T.status==="success"&&T.user){T.csrf&&localStorage.setItem("vorotex_user_csrf",T.csrf),o(T.user),oe.success(`С возвращением, ${T.user.name||"пользователь"}!`),d("/dashboard");return}throw new Error(T.message||"Ошибка входа")}catch{const T=JSON.parse(localStorage.getItem("vorotex_users")||"[]").find(A=>A.email===u.email&&A.password===u.password);T?(o(T),oe.success(`С возвращением, ${T.name}!`),d("/dashboard")):C("Неверный Email или пароль")}},P=((pe=lu.find(B=>B.slug==="privacy"))==null?void 0:pe.content)||"<p>Текст политики конфиденциальности не найден.</p>";return t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"min-h-screen bg-[#0a0a0a] flex items-center justify-center p-4 relative overflow-hidden",children:[t.jsx("div",{className:"absolute inset-0 bg-cyber-net opacity-10 pointer-events-none"}),t.jsx("div",{className:"absolute top-0 right-0 w-1/2 h-1/2 bg-[#ff3b30]/5 blur-[120px] rounded-full pointer-events-none"}),t.jsx("div",{className:"absolute bottom-0 left-0 w-1/2 h-1/2 bg-blue-600/5 blur-[120px] rounded-full pointer-events-none"}),t.jsxs("div",{className:"w-full max-w-md bg-white rounded-2xl shadow-2xl overflow-hidden relative z-10 flex flex-col",children:[t.jsxs("div",{className:"bg-black p-8 text-center relative overflow-hidden",children:[t.jsx("div",{className:"absolute inset-0 bg-tech-dots opacity-20"}),t.jsxs("div",{className:"relative z-10",children:[t.jsx("div",{className:"mb-4",children:t.jsx(_n,{isDarkText:!1,
3020customImage:h,className:"mx-auto"})}),t.jsx("h2",{className:"text-xl font-bold text-white uppercase tracking-wide",children:m?"Регистрация":"Вход в аккаунт"}),t.jsx("p",{className:"text-gray-400 text-xs mt-1",children:m?"Создайте профиль для управления заказами":"Авторизуйтесь для доступа к профилю"})]})]}),t.jsxs("div",{className:"p-8 bg-white flex-1",children:[t.jsxs("form",{onSubmit:q,className:"space-y-5",children:[m&&t.jsxs("div",{className:"relative group",children:[t.jsx(Jl,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-5 h-5 text-gray-400 group-focus-within:text-black transition-colors"}),t.jsx("input",{name:"name",type:"text",value:u.name,onChange:Y,className:"w-full bg-gray-50 border border-gray-200 text-black pl-10 pr-4 py-3 rounded-xl focus:outline-none focus:border-black focus:ring-1 focus:ring-black transition-all",placeholder:"Ваше Имя",required:m})]}),t.jsxs("div",{className:"relative group",children:[t.jsx("div",{className:"absolute left-3 top-1/2 -translate-y-1/2 w-5 h-5 text-gray-400 group-focus-within:text-black transition-colors flex items-center justify-center",children:m?t.jsx(ro,{className:"w-full h-full"}):t.jsx(Jl,{className:"w-full h-full"})}),t.jsx("input",{name:"email",type:"text",value:u.email,onChange:Y,className:"w-full bg-gray-50 border border-gray-200 text-black pl-10 pr-4 py-3 rounded-xl focus:outline-none focus:border-black focus:ring-1 focus:ring-black transition-all",placeholder:"Email",required:!0})]}),t.jsxs("div",{className:"relative group",children:[t.jsx(Tx,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-5 h-5 text-gray-400 group-focus-within:text-black transition-colors"}),t.jsx("input",{name:"password",type:g?"text":"password",value:u.password,onChange:Y,className:"w-full bg-gray-50 border border-gray-200 text-black pl-10 pr-12 py-3 rounded-xl focus:outline-none focus:border-black focus:ring-1 focus:ring-black transition-all",placeholder:"Пароль",required:!0}),t.jsx("button",{type:"button",onClick:()=>O(B=>!B),className:"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-black transition-colors p-1","aria-label":g?"Скрыть пароль":"Показать пароль",children:g?t.jsx(ao,{className:"w-4 h-4"}):t.jsx(xr,{className:"w-4 h-4"})})]}),m&&t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"relative group",children:[t.jsx(Tx,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-5 h-5 text-gray-400 group-focus-within:text-black transition-colors"}),t.jsx("input",{name:"confirmPassword",type:"password",value:u.confirmPassword,onChange:Y,className:"w-full bg-gray-50 border border-gray-200 text-black pl-10 pr-4 py-3 rounded-xl focus:outline-none focus:border-black focus:ring-1 focus:ring-black transition-all",placeholder:"Повторите пароль",required:!0})]}),t.jsxs("div",{className:"flex items-start gap-3 pt-1",children:[t.jsx("input",{type:"checkbox",id:"consent",checked:x,onChange:B=>N(B.target.checked),className:"mt-1 w-4 h-4 rounded border-gray-300 text-black focus:ring-black cursor-pointer"}),t.jsxs("label",{htmlFor:"consent",className:"text-xs text-gray-500 leading-tight select-none cursor-pointer",children:["Я даю согласие на ",t.jsx("button",{type:"button",onClick:()=>J(!0),className:"text-black underline hover:no-underline font-bold",children:"обработку персональных данных"})," и принимаю условия политики конфиденциальности."]})]})]}),b&&t.jsxs("div",{className:"bg-red-50 border border-red-100 p-3 rounded-lg text-red-600 text-xs flex items-center gap-2 animate-fade-in",children:[t.jsx(to,{className:"w-4 h-4 shrink-0"})," ",b]}),!m&&t.jsx("div",{className:"flex justify-between items-center text-xs text-gray-500",children:t.jsx("button",{type:"button",onClick:()=>{_(!0),R(u.email||""),te(""),$("")},className:"text-black font-semibold hover:underline",children:"Забыли пароль?"})}),t.jsx("button",{type:"submit",className:"w-full bg-[#ff3b30] hover:bg-red-600 text-white font-bold uppercase py-3.5 rounded-xl transition-all shadow-lg hover:shadow-red-500/30 flex justify-center items-center gap-2 mt-4",children:m?t.jsxs(t.Fragment,{children:["Создать аккаунт ",t.jsx(Cn,{className:"w-4 h-4"})]}):t.jsxs(t.Fragment,{children:["Войти ",t.jsx(a2,{className:"w-4 h-4"})]})})]}),t.jsxs("div",{className:"mt-6 text-center",children:[t.jsx("p",{className:"text-gray-500 text-sm mb-3",children:m?"Уже есть аккаунт?":"Нет аккаунта?"}),t.jsx("button",{onClick:()=>{y(!m),C(""),N(!1)},className:"text-black font-bold uppercase text-xs border-b-2 border-black/10 hover:border-black transition-colors pb-0.5",children:m?"Войти в систему":"Зарегистрироваться"})]})]}),t.jsx("div",{className:"bg-gray-50 p-4 border-t border-gray-100 flex justify-center",children:t.jsxs("button",{onClick:()=>d("/"),className:"flex items-center gap-2 text-gray-400 hover:text-black text-xs font-medium transition-colors",children:[t.jsx(Ca,{className:"w-3 h-3"})," Вернуться в магазин"]}
3020)})]}),H&&t.jsx("div",{className:"fixed inset-0 z-[200] bg-black/80 backdrop-blur-sm flex items-center justify-center p-4",onClick:()=>J(!1),children:t.jsxs("div",{className:"bg-white w-full max-w-2xl max-h-[80vh] rounded-2xl shadow-2xl flex flex-col overflow-hidden animate-fade-in-up",onClick:B=>B.stopPropagation(),children:[t.jsxs("div",{className:"p-6 border-b border-gray-100 flex justify-between items-center bg-gray-50",children:[t.jsx("h3",{className:"text-lg font-black text-black uppercase",children:"Политика конфиденциальности"}),t.jsx("button",{onClick:()=>J(!1),className:"p-2 hover:bg-gray-200 rounded-full transition-colors text-black",children:t.jsx(xt,{className:"w-5 h-5"})})]}),t.jsx("div",{className:"p-6 overflow-y-auto custom-scrollbar text-black text-sm leading-relaxed prose prose-sm max-w-none",children:t.jsx("div",{dangerouslySetInnerHTML:{__html:P}})}),t.jsx("div",{className:"p-4 border-t border-gray-100 bg-gray-50 flex justify-end",children:t.jsx("button",{onClick:()=>J(!1),className:"px-6 py-2 bg-black text-white text-xs font-bold uppercase rounded-lg hover:bg-[#ff3b30] transition-colors",children:"Закрыть"})})]})})]}),E&&t.jsx("div",{className:"fixed inset-0 z-[200] bg-black/70 backdrop-blur-sm flex items-center justify-center p-4",onClick:()=>_(!1),children:t.jsxs("div",{className:"bg-white w-full max-w-md rounded-2xl shadow-2xl overflow-hidden animate-fade-in-up",onClick:B=>B.stopPropagation(),children:[t.jsxs("div",{className:"p-6 border-b border-gray-100 flex justify-between items-center bg-gray-50",children:[t.jsx("h3",{className:"text-lg font-black text-black uppercase",children:"Восстановление пароля"}),t.jsx("button",{onClick:()=>_(!1),className:"p-2 hover:bg-gray-200 rounded-full transition-colors text-black",children:t.jsx(xt,{className:"w-5 h-5"})})]}),t.jsxs("div",{className:"p-6 space-y-4",children:[t.jsx("p",{className:"text-sm text-gray-600",children:"Укажите email, на который регистрировались. Мы сбросим пароль и отправим новый на почту."}),t.jsxs("div",{className:"relative group",children:[t.jsx(ro,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-5 h-5 text-gray-400 group-focus-within:text-black transition-colors"}),t.jsx("input",{type:"email",value:k,onChange:B=>{R(B.target.value),te(""),$("")},className:"w-full bg-gray-50 border border-gray-200 text-black pl-10 pr-4 py-3 rounded-xl focus:outline-none focus:border-black focus:ring-1 focus:ring-black transition-all",placeholder:"Email"})]}),D&&t.jsxs("div",{className:"bg-red-50 border border-red-100 p-3 rounded-lg text-red-600 text-xs flex items-center gap-2",children:[t.jsx(to,{className:"w-4 h-4"})," ",D]}),W&&t.jsxs("div",{className:"bg-green-50 border border-green-100 p-3 rounded-lg text-green-700 text-xs flex items-center gap-2",children:[t.jsx(kn,{className:"w-4 h-4"})," ",W]})]}),t.jsxs("div",{className:"p-4 border-t border-gray-100 bg-gray-50 flex justify-end gap-2",children:[t.jsx("button",{onClick:()=>_(!1),className:"px-5 py-2 text-xs font-bold uppercase rounded-lg border border-gray-200 hover:bg-gray-100 transition-colors text-black",children:"Отмена"}),t.jsx("button",{onClick:U,disabled:!!W,className:`px-5 py-2 text-xs font-bold uppercase rounded-lg transition-colors ${W?"bg-gray-400 text-gray-200 cursor-not-allowed":"bg-black text-white hover:bg-[#ff3b30]"}`,children:W?"Отправлено":"Сбросить пароль"})]})]})})]})},jr=(r,o=1200,d=.8)=>new Promise((c,h)=>{if(!r.type.startsWith("image/")){h(new Error("Файл не является изображением"));return}const m=new FileReader;m.readAsDataURL(r),m.onload=y=>{var f;const u=new Image;u.src=(f=y.target)==null?void 0:f.result,u.onload=()=>{const{width:x,height:N}=Hp(u.width,u.height,o),C=Xp(u,x,N).toDataURL("image/webp",d);c(C)},u.onerror=x=>h(x)},m.onerror=y=>h(y)}),bo=(r,o=2000,d=.95)=>new Promise((c,h)=>{if(!r.type.startsWith("image/")||r.type.includes("svg")){c(r);return}const m=new FileReader;m.readAsDataURL(r),m.onload=y=>{var f;const u=new Image;u.src=(f=y.target)==null?void 0:f.result,u.onload=()=>{const{width:x,height:N}=Hp(u.width,u.height,o);Xp(u,x,N).toBlob(C=>{if(C){const E=`${r.name.replace(/\.[^/.]+$/,"")}.webp`,_=new File([C],E,{type:"image/webp"});c(_)}else h(new Error("Compression failed"))},"image/webp",d)},u.onerror=x=>h(x)},m.onerror=y=>h(y)}),Hp=(r,o,d)=>{let c=r,h=o;return c>d&&(h=Math.round(h*d/c),c=d),{width:c,height:h}},Xp=(r,o,d)=>{const c=document.createElement("canvas");c.width=o,c.height=d;const h=c.getContext("2d");return h&&h.drawImage(r,0,0,o,d),c},Xx=()=>{const r=localStorage.getItem("vorotex_admin_token"),o=localStorage.getItem("vorotex_admin_csrf");return{...r?{"X-Admin-Token":r}:{},...o?{"X-CSRF-Token":o}:{}}},Wl={uploadFile:async r=>{const o=new FormData;o.append("file",r);try{const d=await fetch("/api/upload.php",{method:"POST",headers:Xx(),body:o});if(!d.ok)throw new Error(`Server error: ${d.status}`);const c=await d.json();if(c.status==="success")return c.url;throw new Error(c.message||"Upload failed")}catch(d){throw console.error("Upload Error:",d),d}},saveData:async r=>{try{const o=await fetch("/api/save_data.php",{method:"POST",headers:{"Content-Type":"application/json",...Xx()},body:JSON.stringify(r&&typeof r=="object"&&!Array.isArray(r)&&window.__vxRev!==void 0?{...r,__rev:window.__vxRev}:r)});if(o.status===409){let q="Данные были изменены другим администратором. Обновите страницу (F5) и повторите сохранение.";try{const e=await o.json();e&&e.message&&(q=e.message)}catch{}throw new Error(q)}if(!o.ok){let q=`Server error: ${o.status}`;try{const e=await o.json();e&&(e.detail?q=`${e.message||"Ошибка"}: ${e.detail}`:e.message&&(q=e.message))}catch{}throw new Error(q)}const d=await o.json();if(d.status==="success"){if(d.revision!==void 0){try{window.__vxRev=d.revision}catch{}}return!0}throw new Error(d.message)}catch(o){throw console.error("Save Data Error:",o),o}}
3020,loadData:async()=>{try{const r=await fetch(`/api/get_data.php?t=${Date.now()}`,{headers:{...Xx()}});if(!r.ok)return null;const o=await r.text();try{const d=JSON.parse(o);if(d&&d.__rev!==void 0){try{window.__vxRev=d.__rev}catch{}}return d.status==="empty"?null:d}catch{return null}}catch{return console.warn("Could not load data from server (Offline or Dev mode)"),null}}},Ix=({product:r,onUpdateProduct:o,onBack:d})=>{const[c,h]=j.useState(null),m=r.sections||[],y=g=>{o({...r,sections:g})},u=g=>{const O={id:`sec-${Date.now()}`,type:g,title:g==="banner"?"Новый баннер":g==="features"?"Особенности":g==="reviews"?"Отзывы о товаре":g==="software"?"Программное обеспечение":g==="info-grid"?"Инфо Сетка":"Секция",content:"",theme:"light",items:g==="features"||g==="info-grid"?[{title:"Item 1",text:"Description"},{title:"Item 2",text:"Description"}]:[]};y([...m,O]),h(O.id)},f=g=>{confirm("Удалить эту секцию?")&&y(m.filter(O=>O.id!==g))},x=(g,O)=>{if(O==="up"&&g===0||O==="down"&&g===m.length-1)return;const E=[...m],_=O==="up"?g-1:g+1;[E[g],E[_]]=[E[_],E[g]],y(E)},N=(g,O)=>{y(m.map(E=>E.id===g?{...E,...O}:E))},b=async(g,O)=>{const E=oe.loading("Загрузка...");try{const _=await bo(g);try{const k=await Wl.uploadFile(_);O(k),oe.success("Загружено на сервер",{id:E})}catch(k){console.warn("Server failed, using local",k);const R=await jr(g);O(R),oe.success("Загружено локально",{id:E})}}catch{oe.error("Ошибка загрузки",{id:E})}},C=g=>{switch(g){case"banner":return t.jsx(hr,{className:"w-4 h-4"});case"text-image":return t.jsx(Mx,{className:"w-4 h-4"});case"features":return t.jsx(lo,{className:"w-4 h-4"});case"info-grid":return t.jsx(Wd,{className:"w-4 h-4"});case"software":return t.jsx(pl,{className:"w-4 h-4"});case"reviews":return t.jsx(no,{className:"w-4 h-4"});default:return t.jsx(yl,{className:"w-4 h-4"})}};return t.jsxs("div",{className:"h-full flex flex-col bg-gray-50",children:[t.jsxs("div",{className:"p-4 border-b border-gray-200 bg-white flex items-center gap-3 shadow-sm z-10",children:[t.jsx("button",{onClick:d,className:"p-2 hover:bg-gray-100 rounded-full",children:t.jsx(Ca,{className:"w-5 h-5"})}),t.jsxs("div",{children:[t.jsx("h3",{className:"font-bold text-sm uppercase text-black",children:"Конструктор страницы"}),t.jsx("p",{className:"text-xs text-gray-500",children:r.name})]})]}),t.jsxs("div",{className:"flex-1 overflow-y-auto p-4 space-y-4",children:[m.length===0&&t.jsxs("div",{className:"text-center py-10 text-gray-400 border-2 border-dashed border-gray-200 rounded-xl",children:[t.jsx(hr,{className:"w-10 h-10 mx-auto mb-2 opacity-20"}),t.jsx("p",{className:"text-sm",children:"Секций пока нет. Добавьте первую!"})]}),m.map((g,O)=>{var E;return t.jsxs("div",{className:`bg-white border rounded-lg overflow-hidden ${c===g.id?"border-black shadow-md":"border-gray-200"}`,children:[t.jsxs("div",{className:"flex items-center p-3 bg-white gap-3 select-none",children:[t.jsx("div",{className:"p-2 bg-gray-100 rounded text-gray-500",children:C(g.type)}),t.jsxs("div",{className:"flex-1 min-w-0 cursor-pointer",onClick:()=>h(c===g.id?null:g.id),children:[t.jsx("div",{className:"font-bold text-sm uppercase truncate text-black",children:g.title||"Без названия"}),t.jsx("div",{className:"text-xs text-gray-400 uppercase",children:g.type})]}),t.jsxs("div",{className:"flex items-center gap-1",children:[t.jsx("button",{onClick:()=>x(O,"up"),disabled:O===0,className:"p-1 text-gray-400 hover:text-black disabled:opacity-20",children:t.jsx(vn,{className:"w-3 h-3"})}),t.jsx("button",{onClick:()=>x(O,"down"),disabled:O===m.length-1,className:"p-1 text-gray-400 hover:text-black disabled:opacity-20",children:t.jsx(yn,{className:"w-3 h-3"})}),t.jsx("button",{onClick:()=>f(g.id),className:"p-1 text-gray-400 hover:text-red-500 ml-1",children:t.jsx(jt,{className:"w-3 h-3"})})]})]}),c===g.id&&t.jsxs("div",{className:"p-4 bg-gray-50 border-t border-gray-100 space-y-4 text-xs animate-fade-in",children:[t.jsxs("div",{children:[t.jsx("label",{className:"block text-xs font-bold text-gray-500 uppercase mb-1",children:"Заголовок"}),t.jsx("input",{value:g.title||"",onChange:_=>N(g.id,{title:_.target.value}),className:"w-full text-sm border border-gray-300 rounded p-2 bg-white text-black focus:ring-1 focus:ring-black"})]}),["banner","text-image","software","info-grid"].includes(g.type)&&t.jsxs("div",{children:[t.jsx("label",{className:"block text-xs font-bold text-gray-500 uppercase mb-1",children:"Подзаголовок / Описание"}),t.jsx("textarea",{value:g.subtitle||"",onChange:_=>N(g.id,{subtitle:_.target.value}),className:"w-full text-sm border border-gray-300 rounded p-2 h-16 bg-white text-black focus:ring-1 focus:ring-black"})]}),["text-image"].includes(g.type)&&t.jsxs("div",{children:[t.jsx("label",{className:"block text-xs font-bold text-gray-500 uppercase mb-1",children:"HTML Контент (Текст)"}),t.jsx("textarea",{value:g.content||"",onChange:_=>N(g.id,{content:_.target.value}),className:"w-full border border-gray-300 rounded p-2 h-24 font-mono text-sm bg-white text-black focus:ring-1 focus:ring-black"})]}),["reviews"].includes(g.type)&&t.jsx("div",{className:"p-3 bg-blue-50 border border-blue-200 rounded text-blue-800",children:t.jsx("p",{children:"Этот блок автоматически отобразит отзывы, привязанные к этому товару в настройках."})}),["software"].includes(g.type)&&t.jsx("div",{className:"p-3 bg-blue-50 border border-blue-200 rounded text-blue-800",children:t.jsxs("p",{children:[t.jsx("strong",{children:"Автоматический блок:"}),' Файлы (драйверы) будут подгружены автоматически из раздела "Поддержка" в настройках, если они привязаны к этому товару.']})}),["banner","text-image","software"].includes(g.type)&&t.jsxs("div",{className:"bg-white p-2 rounded border border-gray-200",children:[t.jsx("label",{className:"block text-xs font-bold text-gray-500 uppercase mb-1",children:"Изображение"}),t.jsxs("div",{className:"flex gap-2 items-center",children:[t.jsxs("div",{className:"w-16 h-10 bg-gray-100 rounded overflow-hidden relative border border-gray-200 group cursor-pointer",children:[g.image?t.jsx("img",{src:g.image,className:"w-full h-full object-cover"}):t.jsx(fr,{className:"w-4 h-4 m-auto mt-3 text-gray-400"}),t.jsx("input",{type:"file",className:"absolute inset-0 opacity-0 cursor-pointer",onChange:_=>{var k;return((k=_.target.files)==null?void 0:k[0])&&b(_.target.files[0],R=>N(g.id,{image:R}))}})]}),t.jsx("input",{value:g.image||"",onChange:_=>N(g.id,{image:_.target.value}),className:"flex-1 text-sm border border-gray-300 rounded p-1 bg-white text-black",placeholder:"URL картинки"})]}),t.jsxs("p",{className:"text-[10px] text-blue-600 mt-1 font-medium",children:["Рекомендуемый размер: ",g.type==="banner"?"1920x800px (21:9)":"1000x800px (5:4)"]})]}),g.type!=="reviews"&&t.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[["text-image","banner"].includes(g.type)&&t.jsxs("div",{children:[t.jsx("label",{className:"block text-xs font-bold text-gray-500 uppercase mb-1",children:"Выравнивание"}),t.jsxs("select",{value:g.alignment||"center",onChange:_=>N(g.id,{alignment:_.target.value}),className:"w-full text-sm border border-gray-300 rounded p-1 bg-white text-black",children:[t.jsx("option",{value:"left",children:"Слева"}),t.jsx("option",{value:"center",children:"По центру"}),t.jsx("option",{value:"right",children:"Справа"})]})]}),t.jsxs("div",{children:[t.jsx("label",{className:"block text-xs font-bold text-gray-500 uppercase mb-1",children:"Тема (Фон)"}
3020),t.jsxs("select",{value:g.theme||"light",onChange:_=>N(g.id,{theme:_.target.value}),className:"w-full text-sm border border-gray-300 rounded p-1 bg-white text-black",children:[t.jsx("option",{value:"light",children:"Светлая"}),t.jsx("option",{value:"dark",children:"Темная"})]})]})]}),(g.type==="features"||g.type==="info-grid")&&t.jsxs("div",{className:"border-t border-gray-200 pt-3",children:[t.jsx("label",{className:"block text-xs font-bold text-gray-500 uppercase mb-2",children:"Список элементов"}),t.jsxs("div",{className:"space-y-2",children:[(E=g.items)==null?void 0:E.map((_,k)=>t.jsxs("div",{className:"flex gap-2 items-start bg-white p-2 rounded border border-gray-200 shadow-sm",children:[g.type==="info-grid"&&t.jsxs("div",{className:"w-10 h-10 bg-gray-100 rounded overflow-hidden relative border border-gray-200 flex-shrink-0 group/item cursor-pointer",children:[_.image?t.jsx("img",{src:_.image,className:"w-full h-full object-cover"}):t.jsx(fr,{className:"w-4 h-4 m-auto mt-3 text-gray-400"}),t.jsx("input",{type:"file",className:"absolute inset-0 opacity-0 cursor-pointer",onChange:R=>{var D;return((D=R.target.files)==null?void 0:D[0])&&b(R.target.files[0],te=>{const W=[...g.items||[]];W[k].image=te,N(g.id,{items:W})})}})]}),t.jsxs("div",{className:"flex-1 space-y-1",children:[t.jsx("input",{value:_.title,onChange:R=>{const D=[...g.items||[]];D[k].title=R.target.value,N(g.id,{items:D})},className:"w-full text-sm border border-gray-200 rounded p-1 font-bold bg-white text-black",placeholder:"Заголовок"}),t.jsx("input",{value:_.text,onChange:R=>{const D=[...g.items||[]];D[k].text=R.target.value,N(g.id,{items:D})},className:"w-full text-sm border border-gray-200 rounded p-1 bg-white text-black",placeholder:"Текст"}),g.type==="features"&&t.jsxs("select",{value:_.icon||"star",onChange:R=>{const D=[...g.items||[]];D[k].icon=R.target.value,N(g.id,{items:D})},className:"w-full text-sm border border-gray-200 rounded p-1 bg-white text-black",children:[t.jsx("option",{value:"star",children:"Star"}),t.jsx("option",{value:"zap",children:"Zap (Lightning)"}),t.jsx("option",{value:"settings",children:"Settings"}),t.jsx("option",{value:"cpu",children:"CPU (Chip)"}),t.jsx("option",{value:"layers",children:"Layers"}),t.jsx("option",{value:"download",children:"Download"}),t.jsx("option",{value:"volume",children:"Volume"})]})]}),t.jsx("button",{onClick:()=>{const R=[...g.items||[]];R.splice(k,1),N(g.id,{items:R})},className:"text-gray-400 hover:text-red-500 p-1",children:t.jsx(jt,{className:"w-3 h-3"})})]},k)),g.type==="info-grid"&&t.jsx("p",{className:"text-[10px] text-gray-400 mt-1 mb-2",children:"Для инфо-сетки рекомендуем картинки 4:3 (800x600px)"}),t.jsx("button",{onClick:()=>N(g.id,{items:[...g.items||[],{title:"New Item",text:"",icon:"star"}]}),className:"w-full py-2 border border-dashed border-gray-300 rounded text-gray-500 text-xs uppercase font-bold hover:bg-white hover:text-black",children:"+ Добавить элемент"})]})]})]})]},g.id)}),t.jsxs("div",{className:"grid grid-cols-2 gap-2 pt-4",children:[t.jsxs("button",{onClick:()=>u("banner"),className:"py-3 bg-white border border-gray-200 rounded flex flex-col items-center justify-center gap-1 hover:border-black hover:text-[#ff3b30] transition-colors shadow-sm text-black",children:[t.jsx(hr,{className:"w-4 h-4"})," ",t.jsx("span",{className:"text-xs font-bold uppercase",children:"Баннер"})]}),t.jsxs("button",{onClick:()=>u("text-image"),className:"py-3 bg-white border border-gray-200 rounded flex flex-col items-center justify-center gap-1 hover:border-black hover:text-[#ff3b30] transition-colors shadow-sm text-black",children:[t.jsx(Mx,{className:"w-4 h-4"})," ",t.jsx("span",{className:"text-xs font-bold uppercase",children:"Текст + Фото"})]}),t.jsxs("button",{onClick:()=>u("features"),className:"py-3 bg-white border border-gray-200 rounded flex flex-col items-center justify-center gap-1 hover:border-black hover:text-[#ff3b30] transition-colors shadow-sm text-black",children:[t.jsx(lo,{className:"w-4 h-4"})," ",t.jsx("span",{className:"text-xs font-bold uppercase",children:"Сетка фич"})]}),t.jsxs("button",{onClick:()=>u("info-grid"),className:"py-3 bg-white border border-gray-200 rounded flex flex-col items-center justify-center gap-1 hover:border-black hover:text-[#ff3b30] transition-colors shadow-sm text-black",children:[t.jsx(Wd,{className:"w-4 h-4"})," ",t.jsx("span",{className:"text-xs font-bold uppercase",children:"Инфо Сетка (3 Col)"})]}),t.jsxs("button",{onClick:()=>u("reviews"),className:"py-3 bg-white border border-gray-200 rounded flex flex-col items-center justify-center gap-1 hover:border-black hover:text-[#ff3b30] transition-colors shadow-sm text-black",children:[t.jsx(no,{className:"w-4 h-4"})," ",t.jsx("span",{className:"text-xs font-bold uppercase",children:"Блок Отзывов"})]}),t.jsxs("button",{onClick:()=>u("software"),className:"py-3 bg-white border border-gray-200 rounded flex flex-col items-center justify-center gap-1 hover:border-black hover:text-[#ff3b30] transition-colors shadow-sm text-black",children:[t.jsx(pl,{className:"w-4 h-4"})," ",t.jsx("span",{className:"text-xs font-bold uppercase",children:"Софт"})]})]})]})]})},Yl=({children:r})=>t.jsx("label",{className:"text-[10px] font-bold text-gray-700 uppercase block mb-0.5 truncate",children:r}),xj=({product:r,categories:o,marketplaces:d,isEditing:c,onToggleEdit:h,onUpdate:m,onRemove:y,onOpenContentEditor:u,isPanel:f,navigate:x})=>{var U,q,P,pe,B,z;const N=async(v,T)=>{var w;const A=(w=v.target.files)==null?void 0:w[0];if(!A)return;const K=oe.loading("Обработка и загрузка...");try{const V=await bo(A);try{const M=await Wl.uploadFile(V);T(M),oe.success("Загружено (Оптимизировано)",{id:K})}catch(M){console.warn("Server upload failed, using local base64",M);const X=await jr(A);T(X),oe.success("Загружено локально",{id:K})}}catch(V){console.error(V),oe.error("Ошибка загрузки",{id:K})}},b=(v,T)=>{m({...r,[v]:T})},C=v=>{const T=isNaN(v)?0:v,A={...r,price:T};m(A)},g=v=>{const T=r.seo||{indexing:!0};b("seo",{...T,...v})},O=(v,T)=>{const A={...r.specs||{},[v]:T};b("specs",A)},E=(v,T)=>{const A={...r.marketplaceLinks||{},[v]:T};b("marketplaceLinks",A)},_=v=>{const T=v.trim();T&&b("videos",[...r.videos||[],T])},k=v=>{const T=[...r.videos||[]];T.splice(v,1),b("videos",T)},R=()=>{const v={id:`opt-${Date.now()}`,name:"Новая опция",type:"text",values:[]};b("options",[...r.options||[],v])},D=v=>{if(confirm("Удаление опции сбросит таблицу вариантов. Продолжить?")){const T=[...r.options||[]];T.splice(v,1),m({...r,options:T,variants:[]})}},te=(v,T)=>{const A=[...r.options||[]];A[v]={...A[v],...T},b("options",A)},W=v=>{const T=[...r.options||[]],A={id:`val-${Date.now()}`,name:"Значение"};T[v].values.push(A),b("options",T)},$=(v,T)=>{const A=[...r.options||[]];A[v].values.splice(T,1),b("options",A)},H=(v,T,A)=>{const K=[...r.options||[]];K[v].values[T]={...K[v].values[T],...A},b("options",K)},J=()=>{if(!r.options||r.options.length===0)return;
3020const existingVars=r.variants||[],v=r.options.map(V=>V.id),T=r.options.map(V=>V.values.map(M=>M.id)),w=(V=>V.reduce((M,X)=>M.flatMap(le=>X.map(xe=>[le,xe].flat())),[[]]))(T).map(V=>{const M={};V.forEach((le,xe)=>{M[v[xe]]=le});const found=existingVars.find(ev=>ev.combination&&Object.keys(M).length===Object.keys(ev.combination).length&&Object.keys(M).every(k=>ev.combination[k]===M[k]));if(found)return{...found,combination:M};const X=`var-${Date.now()}-${Math.random().toString(36).substr(2,5)}`;return{id:X,combination:M,price:r.price,originalPrice:r.originalPrice,stock:10,image:r.image,externalId:X}});b("variants",w),oe.success(`Сгенерировано ${w.length} вариантов`)},Y=(v,T)=>{const A=[...r.variants||[]];if(A[v]={...A[v],...T},T.stock!==void 0){const K=A.reduce((w,V)=>w+V.stock,0);m({...r,variants:A,stock:K})}else b("variants",A)},moveVar=(v,dir)=>{const A=[...r.variants||[]],newIdx=v+dir;if(newIdx<0||newIdx>=A.length)return;[A[v],A[newIdx]]=[A[newIdx],A[v]];m({...r,variants:A});oe.success("Порядок изменён. Нажмите Сохранить!")},G=async(v,T)=>{if(!T){oe.error("Сначала введите ID");return}const A=oe.loading("Поиск в прайс-листе...");try{const w=await(await fetch("/api/sync_price.php")).json();if(w.status==="success"&&Array.isArray(w.data)){const V=w.data.find(M=>String(M.externalId)===String(T));V?(Y(v,{price:Math.round(Number(V.price)),stock:Math.round(Number(V.stock)),originalPrice:V.oldprice?Math.round(Number(V.oldprice)):void 0}),oe.success(`Найдено! Цена: ${Math.round(V.price)}, Остаток: ${V.stock}`,{id:A})):oe.error("Товар с таким ID не найден в XML",{id:A})}else throw new Error("Ошибка данных")}catch(K){console.error(K),oe.error("Ошибка связи с сервером",{id:A})}};return t.jsxs("div",{id:`product-card-${r.id}`,className:`bg-white border rounded-lg transition-all duration-300 text-black ${c?"border-black shadow-lg ring-1 ring-black":"border-gray-200 hover:border-gray-400"}`,children:[t.jsxs("div",{className:"p-3 flex items-center justify-between gap-4 cursor-pointer bg-white rounded-t-lg select-none text-black",onClick:h,children:[t.jsxs("div",{className:"flex items-center gap-3 min-w-0",children:[t.jsx("div",{className:"w-10 h-10 bg-gray-100 rounded border border-gray-200 flex-shrink-0 overflow-hidden",children:t.jsx("img",{src:r.image,className:"w-full h-full object-contain p-1 mix-blend-multiply"})}),t.jsxs("div",{className:"min-w-0",children:[t.jsx("div",{className:"font-bold text-sm text-black truncate",children:r.name}),t.jsx("div",{className:"text-[10px] text-gray-500 font-mono",children:r.id})]})]}),t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsxs("button",{onClick:v=>{v.stopPropagation(),x(`/product/${r.id}`)},className:"flex items-center gap-1 px-3 py-1.5 bg-blue-50 text-blue-700 hover:bg-blue-100 transition-colors rounded-full border border-blue-200 text-xs font-bold uppercase",title:"Открыть страницу товара",children:[t.jsx(xr,{className:"w-3 h-3"})," Открыть"]}),t.jsxs("span",{className:`text-xs font-bold px-2 py-0.5 rounded border ${r.stock>0?"bg-green-50 text-green-700 border-green-200":"bg-red-50 text-red-700 border-red-200"}`,children:[r.stock," шт"]}),t.jsx(Mt,{className:`w-4 h-4 text-gray-400 transition-transform duration-300 ${c?"rotate-180":""}`})]})]}),c&&t.jsxs("div",{className:"p-4 border-t border-gray-100 bg-gray-50/50 space-y-6 animate-fade-in text-black",children:[t.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[t.jsxs("div",{className:"space-y-3",children:[t.jsxs("div",{children:[t.jsx(Yl,{children:"Название товара"}),t.jsx("input",{value:r.name,onChange:v=>b("name",v.target.value),className:"w-full text-sm font-bold border border-gray-300 rounded p-2 bg-white text-black focus:ring-1 focus:ring-black"})]}),t.jsxs("div",{children:[t.jsx(Yl,{children:"Полное описание (для страницы товара)"}),t.jsx("textarea",{value:r.longDescription||"",onChange:v=>b("longDescription",v.target.value),className:"w-full text-sm border border-gray-300 rounded p-2 bg-white text-black min-h-[120px]",placeholder:"Подробное описание товара..."})]}),t.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[t.jsxs("div",{children:[t.jsx(Yl,{children:"Цена (Base)"}),t.jsx("input",{type:"number",value:r.price,onChange:v=>C(parseFloat(v.target.value)),className:"w-full text-sm font-mono border border-gray-300 rounded p-2 bg-white text-black"})]}),t.jsxs("div",{children:[t.jsx(Yl,{children:"Старая цена"}),t.jsx("input",{type:"number",value:r.originalPrice||"",onChange:v=>b("originalPrice",parseFloat(v.target.value)),className:"w-full text-sm font-mono border border-gray-300 rounded p-2 bg-white text-gray-500",placeholder:"-"})]})]}),t.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[t.jsxs("div",{children:[t.jsx(Yl,{children:"Категория"}),t.jsx("select",{value:r.category,onChange:v=>b("category",v.target.value),className:"w-full text-sm border border-gray-300 rounded p-2 bg-white text-black",children:o.map(v=>t.jsx("option",{value:v.id,children:v.name},v.id))})]}),t.jsxs("div",{children:[t.jsx(Yl,{children:"Внешний код (Главный)"}),t.jsxs("div",{className:"relative",children:[t.jsx(ks,{className:"w-3 h-3 absolute left-2 top-1/2 -translate-y-1/2 text-gray-400"}),t.jsx("input",{value:r.externalId||"",onChange:v=>b("externalId",v.target.value),className:"w-full text-sm border border-gray-300 rounded p-2 pl-6 bg-white text-black font-mono placeholder-gray-400",placeholder:"Для товаров без вариантов"})]})]})]})]}),t.jsxs("div",{className:"space-y-3",children:[t.jsx(Yl,{children:"Главное изображение и Бейджи"}),t.jsxs("div",{className:"flex gap-3",children:[t.jsxs("div",{className:"w-24 h-24 bg-white border border-gray-300 rounded flex items-center justify-center relative overflow-hidden group",children:[t.jsx("img",{src:r.image,className:"w-full h-full object-contain p-2"}),t.jsxs("div",{className:"absolute inset-0 bg-black/50 opacity-0 group-hover:opacity-100 flex items-center justify-center transition-opacity cursor-pointer",children:[t.jsx(Ka,{className:"w-6 h-6 text-white"}),t.jsx("input",{type:"file",className:"absolute inset-0 opacity-0 cursor-pointer",onChange:v=>N(v,T=>b("image",T))})]})]}),t.jsxs("div",{className:"flex-1 space-y-2",children:[t.jsx("input",{value:r.
3020image,onChange:v=>b("image",v.target.value),className:"w-full text-xs border border-gray-300 rounded p-2 bg-white text-gray-600 font-mono",placeholder:"Image URL"}),t.jsxs("div",{className:"flex flex-wrap gap-2",children:[t.jsxs("label",{className:"flex items-center gap-1.5 cursor-pointer bg-white border border-gray-300 px-2 py-1 rounded hover:bg-blue-50 hover:border-blue-300 transition-colors",children:[t.jsx("input",{type:"checkbox",checked:r.isNewArrival||!1,onChange:v=>b("isNewArrival",v.target.checked),className:"rounded text-blue-600 focus:ring-blue-600"}),t.jsxs("span",{className:"text-[10px] font-bold uppercase text-black flex items-center gap-1",children:[t.jsx(gu,{className:"w-3 h-3 text-blue-500"})," Новинка"]})]}),t.jsxs("label",{className:"flex items-center gap-1.5 cursor-pointer bg-white border border-gray-300 px-2 py-1 rounded hover:bg-yellow-50 hover:border-yellow-300 transition-colors",children:[t.jsx("input",{type:"checkbox",checked:r.isHit||!1,onChange:v=>b("isHit",v.target.checked),className:"rounded text-yellow-600 focus:ring-yellow-600"}),t.jsxs("span",{className:"text-[10px] font-bold uppercase text-black flex items-center gap-1",children:[t.jsx(Va,{className:"w-3 h-3 text-yellow-500"})," Хит"]})]}),t.jsxs("label",{className:"flex items-center gap-1.5 cursor-pointer bg-white border border-gray-300 px-2 py-1 rounded hover:bg-red-50 hover:border-red-300 transition-colors",children:[t.jsx("input",{type:"checkbox",checked:r.isSale||!1,onChange:v=>b("isSale",v.target.checked),className:"rounded text-red-600 focus:ring-red-600"}),t.jsxs("span",{className:"text-[10px] font-bold uppercase text-black flex items-center gap-1",children:[t.jsx(Jt,{className:"w-3 h-3 text-red-500"})," Sale"]})]})]}),t.jsxs("div",{className:"flex items-center gap-1 bg-blue-50 text-blue-700 px-2 py-1 rounded text-xs font-bold border border-blue-100 w-fit",children:[t.jsx(rw,{className:"w-3 h-3"})," ID: ",r.id]})]})]})]})]}),t.jsxs("div",{className:"space-y-3",children:[t.jsxs("div",{className:"flex items-center justify-between",children:[t.jsx(Yl,{children:"Краткое описание (для категории)"}),t.jsxs("button",{onClick:u,className:"text-xs font-bold uppercase text-blue-600 hover:underline flex items-center gap-1",children:[t.jsx(yl,{className:"w-3 h-3"})," Конструктор лендинга"]})]}),t.jsx("textarea",{value:r.description,onChange:v=>b("description",v.target.value),className:"w-full text-sm border border-gray-300 rounded p-2 h-20 bg-white text-black resize-none",placeholder:"Краткое описание для карточки..."}),t.jsxs("div",{className:"space-y-2",children:[t.jsx(Yl,{children:"Ссылки на видео (YouTube/Vimeo)"}),t.jsxs("div",{className:"flex gap-2",children:[t.jsx("input",{type:"url",onKeyDown:v=>{if(v.key==="Enter"){v.preventDefault();const T=v.target;_(T.value),T.value=""}},className:"flex-1 text-xs border border-gray-300 rounded p-2 bg-white text-black",placeholder:"https://youtu.be/..."}),t.jsx("button",{onClick:v=>{const T=v.currentTarget.previousElementSibling;T&&T.value.trim()&&(_(T.value),T.value="")},className:"bg-black text-white px-3 py-2 text-xs font-bold uppercase rounded hover:bg-[#ff3b30] transition-colors",children:"Добавить"})]}),t.jsx("div",{className:"flex gap-2 flex-wrap",children:(r.videos||[]).map((v,T)=>t.jsxs("div",{className:"flex items-center gap-2 bg-white border border-gray-200 rounded px-2 py-1 text-xs text-black",children:[t.jsx("span",{className:"max-w-[200px] truncate",children:v}),t.jsx("button",{onClick:()=>k(T),className:"text-gray-300 hover:text-red-500",children:t.jsx(xt,{className:"w-3 h-3"})})]},T))})]})]}),t.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6",children:[t.jsxs("div",{className:"bg-white p-3 rounded border border-gray-200",children:[t.jsxs("h4",{className:"font-bold text-xs uppercase text-gray-500 mb-2 flex items-center gap-2",children:[t.jsx(yl,{className:"w-3 h-3"})," Характеристики"]}),t.jsxs("div",{className:"space-y-2 max-h-80 overflow-y-auto custom-scrollbar pr-1",children:[Object.entries(r.specs||{}).map(([v,T],A)=>t.jsxs("div",{className:"flex gap-2",children:[t.jsx("input",{value:v,onCh
3020ange:K=>{const w={...r.specs};delete w[v],w[K.target.value]=T,b("specs",w)},className:"w-1/3 text-xs font-bold border-b border-gray-200 focus:border-black outline-none py-1 text-gray-600 bg-white"}),t.jsx("input",{value:T,onChange:K=>O(v,K.target.value),className:"flex-1 text-xs border-b border-gray-200 focus:border-black outline-none py-1 text-black bg-white"}),t.jsx("button",{onClick:()=>{const K=Object.entries(r.specs),w=K.findIndex(([M])=>M===v);if(w>0){const V=[...K];[V[w-1],V[w]]=[V[w],V[w-1]],b("specs",Object.fromEntries(V))}},className:"text-gray-300 hover:text-black text-[10px] ml-1",children:"▲"}),t.jsx("button",{onClick:()=>{const K=Object.entries(r.specs),w=K.findIndex(([M])=>M===v);if(w<K.length-1){const V=[...K];[V[w+1],V[w]]=[V[w],V[w+1]],b("specs",Object.fromEntries(V))}},className:"text-gray-300 hover:text-black text-[10px]",children:"▼"}),t.jsx("button",{onClick:()=>{const K={...r.specs};delete K[v],b("specs",K)},className:"text-gray-300 hover:text-red-500",children:t.jsx(xt,{className:"w-3 h-3"})})]},A)),t.jsxs("button",{onClick:()=>O("New Spec",""),className:"w-full mt-2 py-1.5 border border-dashed border-gray-300 rounded text-gray-500 text-xs font-bold uppercase hover:bg-gray-50 hover:text-black flex items-center justify-center gap-1",children:[t.jsx(At,{className:"w-3 h-3"})," Добавить"]})]})]}),t.jsxs("div",{className:"space-y-4",children:[t.jsxs("div",{className:"bg-white p-3 rounded border border-gray-200",children:[t.jsxs("h4",{className:"font-bold text-xs uppercase text-gray-500 mb-2 flex items-center gap-2",children:[t.jsx(vs,{className:"w-3 h-3"})," SEO Настройки"]}),t.jsxs("div",{className:"space-y-2",children:[t.jsx("input",{value:((U=r.seo)==null?void 0:U.title)||"",onChange:v=>g({title:v.target.value}),className:"w-full text-xs border border-gray-200 rounded p-1.5 bg-white text-black",placeholder:"Meta Title"}),t.jsx("textarea",{value:((q=r.seo)==null?void 0:q.description)||"",onChange:v=>g({description:v.target.value}),className:"w-full text-xs border border-gray-200 rounded p-1.5 h-16 resize-none bg-white text-black",placeholder:"Meta Description"})]})]}),t.jsxs("div",{className:"bg-white p-3 rounded border border-gray-200",children:[t.jsxs("h4",{className:"font-bold text-xs uppercase text-gray-500 mb-2 flex items-center gap-2",children:[t.jsx(Jt,{className:"w-3 h-3"})," Ссылки на маркетплейсы"]}),t.jsxs("div",{className:"space-y-2",children:[t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx("span",{className:"text-[10px] font-bold w-12 text-blue-600",children:"OZON"}),t.jsx("input",{value:((P=r.marketplaceLinks)==null?void 0:P.ozon)||"",onChange:v=>E("ozon",v.target.value),className:"flex-1 text-xs border border-gray-200 rounded p-1.5 bg-white text-black",placeholder:"https://ozon.ru/product/..."})]}),t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx("span",{className:"text-[10px] font-bold w-12 text-purple-600",children:"WB"}),t.jsx("input",{value:((pe=r.marketplaceLinks)==null?void 0:pe.wb)||"",onChange:v=>E("wb",v.target.value),className:"flex-1 text-xs border border-gray-200 rounded p-1.5 bg-white text-black",placeholder:"https://wildberries.ru/catalog/..."})]}),t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx("span",{className:"text-[10px] font-bold w-12 text-yellow-600",children:"Yandex"}),t.jsx("input",{value:((B=r.marketplaceLinks)==null?void 0:B.yandex)||"",onChange:v=>E("yandex",v.target.value),className:"flex-1 text-xs border border-gray-200 rounded p-1.5 bg-white text-black",placeholder:"https://market.yandex.ru/product/..."})]})]})]})]})]}),t.jsxs("div",{className:"border-t border-gray-200 pt-4",children:[t.jsxs("div",{className:"flex items-center justify-between mb-4",children:[t.jsxs("h3",{className:"font-bold text-sm uppercase text-black flex items-center gap-2",children:[t.jsx(gr,{className:"w-4 h-4"})," Варианты и Опции"]}),t.jsxs("div",{className:"flex gap-2",children:[t.jsx("button",{onClick:R,className:"bg-gray-100 text-black px-3 py-1.5 rounded text-xs font-bold uppercase hover:bg-gray-200",children:"+ Опция"}),t.jsxs("button",{onClick:J,className:"bg-blue-600 text-white px-3 py-1.5 rounded text-xs font-bold uppercase hover:bg-blue-700 flex items-center gap-1",children:[t.jsx(Ya,{className:"w-3 h-3"})," Генерация"]}
3020)]})]}),t.jsx("div",{className:"space-y-3 mb-6",children:(z=r.options)==null?void 0:z.map((v,T)=>t.jsxs("div",{className:"bg-gray-50 p-3 rounded border border-gray-200",children:[t.jsxs("div",{className:"flex gap-2 mb-2 items-center",children:[t.jsx("input",{value:v.name,onChange:A=>te(T,{name:A.target.value}),className:"w-32 text-xs font-bold border border-gray-300 rounded p-1 bg-white text-black"}),t.jsxs("select",{value:v.type,onChange:A=>te(T,{type:A.target.value}),className:"text-xs border border-gray-300 rounded p-1 bg-white text-black",children:[t.jsx("option",{value:"text",children:"Текст"}),t.jsx("option",{value:"color",children:"Цвет"}),t.jsx("option",{value:"image",children:"Картинка"})]}),t.jsxs("label",{className:"flex items-center gap-1 cursor-pointer ml-1",children:[t.jsx("input",{type:"checkbox",checked:v.showInTitle||!1,onChange:A=>te(T,{showInTitle:A.target.checked}),className:"w-3 h-3"}),t.jsx("span",{className:"text-[10px] text-gray-400 uppercase font-bold",children:"В заголовок"})]}),t.jsx("div",{className:"flex-1"}),t.jsx("button",{onClick:()=>D(T),className:"text-gray-400 hover:text-red-500",children:t.jsx(jt,{className:"w-3 h-3"})})]}),t.jsxs("div",{className:"flex flex-wrap gap-2",children:[v.values.map((A,K)=>t.jsxs("div",{className:"flex items-center gap-1 bg-white border border-gray-200 rounded px-2 py-1",children:[t.jsx("input",{value:A.name,onChange:w=>H(T,K,{name:w.target.value}),className:"w-20 text-xs border-none p-0 focus:ring-0 text-black bg-white",placeholder:"Value"}),v.type==="color"&&t.jsx("input",{type:"color",value:A.value||"#000000",onChange:w=>H(T,K,{value:w.target.value}),className:"w-4 h-4 p-0 border-0 rounded cursor-pointer"}),v.type==="image"&&t.jsxs("div",{className:"w-4 h-4 bg-gray-100 rounded overflow-hidden relative cursor-pointer group/optimg border border-gray-300",children:[A.image&&t.jsx("img",{src:A.image,className:"w-full h-full object-cover"}),t.jsx("input",{type:"file",className:"absolute inset-0 opacity-0",onChange:w=>N(w,V=>H(T,K,{image:V}))})]}),t.jsx("button",{onClick:()=>{if(K>0){const m=[...v.values];[m[K-1],m[K]]=[m[K],m[K-1]];te(T,{values:m})}},className:"text-gray-300 hover:text-black text-[10px] ml-1",children:"◀"}),t.jsx("button",{onClick:()=>{if(K<v.values.length-1){const m=[...v.values];[m[K+1],m[K]]=[m[K],m[K+1]];te(T,{values:m})}},className:"text-gray-300 hover:text-black text-[10px]",children:"▶"}),t.jsx("button",{onClick:()=>$(T,K),className:"text-gray-300 hover:text-red-500",children:t.jsx(xt,{className:"w-3 h-3"})})]},A.id)),t.jsx("button",{onClick:()=>W(T),className:"text-xs bg-gray-200 text-black px-2 py-1 rounded hover:bg-gray-300 font-bold",children:"+"})]})]},v.id))}),r.variants&&r.variants.length>0&&t.jsx("div",{className:"overflow-x-auto border border-gray-200 rounded-lg",children:t.jsxs("table",{className:"w-full text-left text-xs",children:[t.jsx("thead",{className:"bg-gray-100 text-gray-500 font-bold uppercase",children:t.jsxs("tr",{children:[t.jsx("th",{className:"p-2",children:"Вариант"}),t.jsx("th",{className:"p-2 w-20",children:"Цена"}),t.jsx("th",{className:"p-2 w-20",children:"Старая"}),t.jsx("th",{className:"p-2 w-16",children:"Сток"}),t.jsx("th",{className:"p-2 w-32",children:"Внешний код"}),t.jsx("th",{className:"p-2 w-32",children:"Фото (до 8)"}),t.jsx("th",{className:"p-2 w-20"})]})}),t.jsx("tbody",{className:"divide-y divide-gray-100 bg-white text-black",children:r.variants.map((v,T)=>{var A;return t.jsxs("tr",{children:[t.jsx("td",{className:"p-2 font-mono text-gray-600",children:(A=r.options)==null?void 0:A.map(K=>{var V;const w=(V=K.values.find(M=>M.id===v.combination[K.id]))==null?void 0:V.name;return t.jsx("span",{className:"mr-2 bg-gray-50 px-1 rounded border border-gray-100",children:w},K.id)})}),t.jsx("td",{className:"p-2",children:t.jsx("input",{type:"number",value:v.price,onChange:K=>Y(T,{price:parseFloat(K.target.value)}),className:"w-full border border-gray-200 rounded p-1 text-black bg-white"})}),t.jsx("td",{className:"p-2",children:t.jsx("input",{type:"number",value:v.originalPrice||"",placeholder:"-",onChange:K=>
3020Y(T,{originalPrice:parseFloat(K.target.value)}),className:"w-full border border-gray-200 rounded p-1 text-gray-500 bg-white"})}),t.jsx("td",{className:"p-2",children:t.jsx("input",{type:"number",value:v.stock,onChange:K=>Y(T,{stock:parseInt(K.target.value)}),className:"w-full border border-gray-200 rounded p-1 text-black bg-white"})}),t.jsx("td",{className:"p-2",children:t.jsxs("div",{className:"flex gap-1",children:[t.jsx("input",{value:v.externalId||"",onChange:K=>Y(T,{externalId:K.target.value}),className:"w-full border border-gray-200 rounded p-1 text-black bg-white font-mono text-[10px]",placeholder:"XML ID"}),t.jsx("button",{onClick:()=>G(T,v.externalId||""),className:"p-1 bg-blue-50 text-blue-600 hover:bg-blue-100 rounded border border-blue-200",title:"Проверить и обновить по ID",children:t.jsx(Ya,{className:"w-3 h-3"})})]})}),t.jsx("td",{className:"p-2",children:t.jsxs("div",{className:"flex gap-2 flex-wrap",children:[(v.images||[]).map((K,w)=>t.jsxs("div",{className:"w-10 h-10 bg-gray-100 rounded relative overflow-hidden border border-gray-200 group",children:[t.jsx("img",{src:K,className:"w-full h-full object-cover"}),t.jsx("button",{onClick:()=>{const V=[...v.images||[]];V.splice(w,1),Y(T,{images:V})},className:"absolute -top-1 -right-1 bg-red-500 text-white rounded-full w-4 h-4 flex items-center justify-center text-[9px] z-10",children:"×"}),w>0&&t.jsx("button",{onClick:()=>{const V=[...v.images||[]];[V[w-1],V[w]]=[V[w],V[w-1]];Y(T,{images:V})},className:"absolute bottom-0 left-0 bg-black/70 text-white w-5 h-5 flex items-center justify-center text-[10px] opacity-0 group-hover:opacity-100 transition-opacity",title:"Влево",children:"←"}),w<(v.images||[]).length-1&&t.jsx("button",{onClick:()=>{const V=[...v.images||[]];[V[w],V[w+1]]=[V[w+1],V[w]];Y(T,{images:V})},className:"absolute bottom-0 right-0 bg-black/70 text-white w-5 h-5 flex items-center justify-center text-[10px] opacity-0 group-hover:opacity-100 transition-opacity",title:"Вправо",children:"→"})]},w)),(!v.images||v.images.length<8)&&t.jsxs("label",{className:"w-10 h-10 border-2 border-dashed border-gray-300 rounded flex items-center justify-center text-gray-400 hover:border-blue-500 hover:text-blue-500 cursor-pointer relative bg-white",children:[t.jsx(At,{className:"w-4 h-4"}),t.jsx("input",{type:"file",className:"absolute inset-0 opacity-0 cursor-pointer",onChange:K=>N(K,w=>{const V=[...v.images||[]];V.push(w),Y(T,{images:V})})})]})]})}),t.jsx("td",{className:"p-2",children:t.jsxs("div",{className:"flex items-center gap-1 justify-center",children:[t.jsx("button",{onClick:()=>moveVar(T,-1),className:"text-gray-300 hover:text-blue-500 disabled:opacity-30",disabled:T===0,title:"Вверх",children:t.jsx("svg",{className:"w-3 h-3",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:t.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M5 15l7-7 7 7"})})}),t.jsx("button",{onClick:()=>moveVar(T,1),className:"text-gray-300 hover:text-blue-500 disabled:opacity-30",disabled:T===r.variants.length-1,title:"Вниз",children:t.jsx("svg",{className:"w-3 h-3",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:t.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 9l-7 7-7-7"})})}),t.jsx("button",{onClick:()=>{const K=[...r.variants];K.splice(T,1),b("variants",K)},className:"text-gray-300 hover:text-red-500",children:t.jsx(xt,{className:"w-3 h-3"})})]})})]},v.id)})})]})})]}),t.jsxs("div",{className:"flex justify-between items-center pt-4 mt-4 border-t border-gray-200",children:[t.jsxs("button",{type:"button",onClick:y,className:"text-red-500 hover:text-red-700 text-xs font-bold uppercase flex items-center gap-1 px-3 py-2 hover:bg-red-50 rounded transition-colors",children:[t.jsx(jt,{className:"w-4 h-4"})," Удалить товар"]}),t.jsx("div",{className:"flex gap-2",children:t.jsx("button",{onClick:h,className:"px-4 py-2 border border-gray-300 rounded text-xs font-bold uppercase hover:bg-gray-100 text-black",children:"Закрыть"})})]})]})]})},Bd=({children:r})=>t.jsx("label",{className:"text-xs font-bold text-gray-700 uppercase block mb-1.5",children:r}),Vd=({title:r,icon:o,subtitle:d})=>t.jsxs("div",{className:"flex items-center gap-4",children:[t.jsx("div",{className:"p-2 rounded-lg bg-black text-white",children:t.jsx(o,{className:"w-5 h-5"})}),t.jsxs("div",{className:"text-left",children:[t.jsx("span",{className:"block font-bold text-sm uppercase text-black",children:r}),d&&t.jsx("span",{className:"text-xs text-gray-500 font-medium",children:d})]})]}),pj=({isOpen:r,onClose:o,isPanel:d=!1,catalogSeo:c,onUpdateCatalogSeo:h,products:m,onUpdateProducts:y,categories:u,onUpdateCategories:f,marketplaces:x,onResetDefaults:N,onExportConfig:b,onImportConfig:C,initialEditingProductId:g,navigate:O})=>{const[E,_]=j.useState("catalog_products"),[k,R]=j.useState(g||null),[D,te]=j.useState(null),[W,$]=j.useState(null),[H,J]=j.useState(""),[Y,G]=j.useState("all"),[U,q]=j.useState(null);j.useRef(null),j.useEffect(()=>{g&&(R(g),_("catalog_products"),setTimeout(()=>{const ce=document.getElementById(`product-card-${g}`);ce&&ce.scrollIntoView({behavior:"smooth",block:"center"})},300))},[g]);
3020const P=ce=>{_(E===ce?null:ce)},pe=async(ce,ve)=>{var Oe;const be=(Oe=ce.target.files)==null?void 0:Oe[0];if(be)try{const Je=await jr(be);ve(Je),oe.success("Изображение загружено")}catch{oe.error("Ошибка обработки изображения")}},B=()=>{const ce=u.length>0?u[0].id:"keyboards",ve={id:`prod-${Date.now()}`,name:"Новый товар",category:ce,price:0,stock:10,image:"/placeholder.svg",description:"Описание товара...",features:["Новинка"],rating:5,specs:{},gallery:[],videos:[],options:[],variants:[],seo:{indexing:!0},isNewArrival:!1};y([ve,...m]),R(ve.id),oe.success("Товар создан")},z=ce=>{window.confirm("Удалить товар?")&&(y(m.filter(ve=>ve.id!==ce)),k===ce&&R(null),oe.success("Товар удален"))},v=ce=>{y(m.map(ve=>ve.id===ce.id?ce:ve))},T=()=>{const ce=`cat-${Date.now()}`,ve={id:ce,name:"Новая категория",slug:`new-category-${Date.now()}`,link:`/category/new-category-${Date.now()}`,image:"/placeholder.svg",specFields:[],seo:{indexing:!0}};f([ve,...u]),te(ce),oe.success("Категория добавлена")},A=ce=>{if(window.confirm("Удалить категорию?")){const ve=[...u];ve.splice(ce,1),f(ve),te(null)}},K=(ce,ve)=>{const be=[...u];ve.slug&&(ve.link=`/category/${ve.slug}`),be[ce]={...be[ce],...ve},f(be)},w=ce=>{const ve=new Set;return m.filter(be=>be.category===ce).forEach(be=>{be.specs&&Object.keys(be.specs).forEach(Oe=>ve.add(Oe))}),Array.from(ve).sort()},V=(ce,ve)=>{var Oe;const be=(Oe=ce.filterSettings)==null?void 0:Oe.find(Je=>Je.key===ve);return be||{key:ve,isVisible:!0,groups:[]}},M=(ce,ve)=>{const Oe=[...u[ce].filterSettings||[]],Je=Oe.findIndex(gt=>gt.key===ve.key);Je>=0?Oe[Je]=ve:Oe.push(ve),K(ce,{filterSettings:Oe})},X=(ce,ve)=>{const be=u[ce],Oe=V(be,ve),Je=m.filter(Xt=>Xt.category===be.id),gt=new Set;Je.forEach(Xt=>{var se;const Pe=(se=Xt.specs)==null?void 0:se[ve];Pe&&Pe.split(",").map(ye=>ye.trim()).forEach(ye=>{ye&&gt.add(ye)})});const Fe=[...Oe.groups];let Ht=0;gt.forEach(Xt=>{Fe.some(se=>se.variations.some(ye=>ye.toLowerCase()===Xt.toLowerCase()))||(Fe.push({id:`grp-${Date.now()}-${Math.random()}`,display:Xt,variations:[Xt]}),Ht++)}),Ht>0?(M(ce,{...Oe,groups:Fe}),oe.success(`Добавлено ${Ht} новых значений`)):oe.success("Все значения уже настроены")},le=(ce,ve,be,Oe)=>{const Je=u[ce],gt=V(Je,ve),Fe=[...gt.groups];Oe==="up"&&be>0?[Fe[be],Fe[be-1]]=[Fe[be-1],Fe[be]]:Oe==="down"&&be<Fe.length-1&&([Fe[be],Fe[be+1]]=[Fe[be+1],Fe[be]]),M(ce,{...gt,groups:Fe})},xe=(ce,ve,be,Oe)=>{const Je=u[ce],gt=V(Je,ve),Fe=[...gt.groups];Fe[be]={...Fe[be],...Oe},M(ce,{...gt,groups:Fe})},ge=(ce,ve,be)=>{if(!confirm("Удалить это значение?"))return;const Oe=u[ce],Je=V(Oe,ve),gt=[...Je.groups];gt.splice(be,1),M(ce,{...Je,groups:gt})},je=ce=>{const ve={id:`spec-${Date.now()}`,name:"Новая характеристика",placeholder:""},be=[...u];be[ce].specFields||(be[ce].specFields=[]),be[ce].specFields.unshift(ve),f(be)},Ne=(ce,ve,be)=>{const Oe=[...u];Oe[ce].specFields&&(Oe[ce].specFields[ve]={...Oe[ce].specFields[ve],...be},f(Oe))},Ee=(ce,ve)=>{const be=[...u];be[ce].specFields&&(be[ce].specFields.splice(ve,1),f(be))},Ge=m.filter(ce=>{const q=String(H||""),ve=q.trim().toLowerCase(),be=Y==="all"||ce.category===Y;let Oe=!0;if(ve){const ie=(ce.name||"").toLowerCase().includes(ve)||String(ce.id||"").toLowerCase().includes(ve)||String(ce.externalId||"").toLowerCase().includes(ve)||String(ce.externalId||"").toLowerCase().replace(/[-\s]/g,"").includes(ve.replace(/[-\s]/g,""));let Ne=!1;try{Array.isArray(ce.variants)&&ce.variants.length&&(Ne=ce.variants.some(Ee=>String(Ee.externalId||"").toLowerCase().includes(ve)||String(Ee.externalId||"").toLowerCase().replace(/[-\s]/g,"").includes(ve.replace(/[-\s]/g,""))))}catch(Ee){}Oe=ie||Ne}return Oe&&be});if(W){const ce=m.find(ve=>ve.id===W);if(ce)return d?t.jsx("div",{className:"h-full bg-white flex flex-col animate-fade-in text-black",children:t.jsx(Ix,{product:ce,onUpdateProduct:v,onBack:()=>$(null)})}):t.jsxs(t.Fragment,{children:[t.jsx("div",{className:`fixed inset-0 bg-black/60 backdrop-blur-sm z-[100] ${r?"opacity-100":"opacity-0 pointer-events-none"}`,onClick:o}),t.jsx("div",{className:`fixed top-0 right-0 h-full w-full md:w-[500px] bg-white text-black shadow-2xl z-[101] transform transition-transform duration-300 ease-out flex flex-col ${r?"translate-x-0":"translate-x-full"}`,children:t.jsx(Ix,{product:ce,onUpdateProduct:v,onBack:()=>$(null)})})]})}const it=d?"w-full h-full bg-transparent flex flex-col text-black":`fixed top-0 right-0 h-full w-full md:w-[500px] bg-white text-black shadow-2xl z-[101] transform transition-transform duration-300 ease-out flex flex-col ${r?"translate-x-0":"translate-x-full"}`,Ua=d?null:t.jsx("div",{className:`fixed inset-0 bg-black/60 backdrop-blur-sm z-[100] transition-opacity duration-300 ${r?"opacity-100":"opacity-0 pointer-events-none"}`,onClick:o});return t.jsxs(t.Fragment,{children:[Ua,t.jsxs("div",{className:it,children:[!d&&t.jsxs("div",{className:"flex items-center justify-between p-6 border-b border-gray-200 bg-white z-10 text-black",children:[t.jsx("div",{children:t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsxs("h2",{className:"text-2xl font-black text-black uppercase tracking-tighter flex items-center gap-2",children:[t.jsx(gr,{className:"w-6 h-6 text-[#ff3b30]"}),"КАТАЛОГ"]}),t.jsxs("span",{className:"flex items-center gap-1 text-[10px] bg-green-100 text-green-700 px-2 py-0.5 rounded-full font-bold uppercase border border-green-200",children:[t.jsx(Tn,{className:"w-3 h-3"})," Auto-saved"]})]})}),t.jsx("button",{onClick:o,className:"p-2 hover:bg-gray-100 rounded-full transition-colors",children:t.jsx(xt,{className:"w-6 h-6 text-gray-500"})})]}),t.jsx("div",{className:`flex-1 overflow-visible custom-scrollbar ${d?"":"pb-10"}`,children:t.jsxs("div",{className:d?"space-y-4":"px-4 space-y-4 py-6",children:[t.jsxs("div",{className:`bg-white border rounded-xl overflow-hidden ${E==="catalog_c
3020ategories"?"border-black shadow-md":"border-gray-200"}`,children:[t.jsxs("button",{onClick:()=>P("catalog_categories"),className:"w-full flex items-center justify-between p-4 bg-white text-black",children:[t.jsx(Vd,{title:"Категории и Фильтры",icon:gr,subtitle:`${u.length} активных`}),E==="catalog_categories"?t.jsx(Ft,{className:"w-4 h-4"}):t.jsx(Mt,{className:"w-4 h-4 text-gray-400"})]}),E==="catalog_categories"&&t.jsxs("div",{className:"p-4 border-t border-gray-100 bg-gray-50/50 space-y-4",children:[t.jsxs("button",{onClick:T,className:"w-full py-2 bg-black text-white text-xs font-bold uppercase rounded hover:bg-[#ff3b30] flex items-center justify-center gap-2",children:[t.jsx(At,{className:"w-3 h-3"})," Добавить категорию"]}),t.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:u.map((ce,ve)=>t.jsxs("div",{className:"bg-white border border-gray-200 rounded-lg p-3 relative group",children:[t.jsxs("div",{className:"flex justify-between items-center mb-2",children:[t.jsxs("div",{className:"flex gap-2 items-center cursor-pointer",onClick:()=>te(D===ce.id?null:ce.id),children:[t.jsx("div",{className:"w-8 h-8 bg-gray-100 rounded overflow-hidden relative border border-gray-200",children:t.jsx("img",{src:ce.image,className:"w-full h-full object-cover"})}),t.jsx("div",{className:"text-sm font-bold uppercase text-black",children:ce.name}),t.jsx(Mt,{className:`w-3 h-3 text-gray-400 transition-transform ${D===ce.id?"rotate-180":""}`})]}),t.jsx("button",{onClick:()=>A(ve),type:"button",className:"text-gray-400 hover:text-red-500 z-10 relative",children:t.jsx(jt,{className:"w-3 h-3"})})]}),D===ce.id&&t.jsxs("div",{className:"space-y-4 pt-3 mt-2 border-t border-gray-100 animate-fade-in text-black",children:[t.jsx("div",{children:t.jsxs("div",{className:"flex gap-3",children:[t.jsxs("div",{className:"w-16 h-16 bg-gray-100 rounded flex-shrink-0 overflow-hidden relative group/img cursor-pointer border border-gray-300",children:[t.jsx("img",{src:ce.image,className:"w-full h-full object-cover"}),t.jsxs("div",{className:"absolute inset-0 bg-black/50 opacity-0 group-hover/img:opacity-100 flex items-center justify-center transition-opacity",children:[t.jsx(Ka,{className:"w-4 h-4 text-white"}),t.jsx("input",{type:"file",className:"absolute inset-0 opacity-0 cursor-pointer",onChange:be=>pe(be,Oe=>K(ve,{image:Oe}))})]})]}),t.jsxs("div",{className:"flex-1 space-y-2",children:[t.jsx("input",{value:ce.name,onChange:be=>K(ve,{name:be.target.value}),className:"w-full text-sm font-bold border border-gray-300 rounded p-1.5 bg-white text-black",placeholder:"Название"}),t.jsx("input",{value:ce.slug,onChange:be=>K(ve,{slug:be.target.value}),className:"w-full text-xs border border-gray-300 rounded p-1.5 bg-white text-blue-600 font-mono",placeholder:"slug"})]})]})}),t.jsxs("div",{className:"bg-purple-50 p-3 rounded-lg border border-purple-100 text-black",children:[t.jsxs("div",{className:"mb-4",children:[t.jsx("label",{className:"text-[10px] font-bold text-purple-800 uppercase mb-1 block",children:"Выберите параметр для настройки:"}),t.jsx("div",{className:"flex flex-wrap gap-2",children:w(ce.id).map(be=>{const Oe=V(ce,be);return t.jsx("button",{onClick:()=>q(U===be?null:be),className:`px-2 py-1 rounded text-[10px] font-bold uppercase border transition-all ${U===be?"bg-purple-600 text-white border-purple-600 shadow-md":Oe.isVisible?"bg-white border-purple-200 text-purple-800":"bg-gray-100 border-gray-300 text-gray-400 line-through"}`,children:be},be)})})]}),U&&t.jsxs("div",{className:"bg-white p-3 rounded border border-purple-200 animate-fade-in shadow-sm",children:[t.jsxs("div",{className:"flex items-center justify-between mb-3 border-b border-purple-50 pb-2",children:[t.jsx("span",{className:"font-bold text-sm text-purple-900",children:U}),t.jsxs("div",{className:"flex gap-2",children:[t.jsx("button",{onClick:()=>M(ve,{...V(ce,U),isVisible:!V(ce,U).isVisible}),className:`p-1.5 rounded ${V(ce,U).isVisible?"text-green-600 bg-green-50 hover:bg-green-100":"text-red-500 bg-red-50 hover:bg-red-100"}`,children:V(ce,U).isVisible?t.jsx(xr,{className:"w-4 h-4"}):t.jsx(ao,{className:"w-4 h-4"})}),t.jsxs("button",{onClick:()=>X(ve,U),className:"flex items-center gap-1 px-2 py-1 bg-blue-50 text-blue-600 rounded text-[10px] font-bold uppercase hover:bg-blue-100",children:[t.jsx(Ya,{className:"w-3 h-3"})," Сканировать"]})]})]}),t.jsx("div",{className:"space-y-2 max-h-[250px] overflow-visible custom-scrollbar pr-1",children:V(ce,U).groups.map((be,Oe)=>t.jsx("div",{className:"flex flex-col gap-1 p-2 bg-gray-50 rounded border border-gray-200 text-black",children:t.jsxs("div",{className:"flex gap-2 items-center",children:[t.jsxs("div",{className:"flex flex-col gap-0.5",children:[t.jsx("button",{onClick:()=>le(ve,U,Oe,"up"),className:"p-0.5 text-gray-400 hover:text-black",children:t.jsx(vn,{className:"w-3 h-3"})}),t.jsx("button",{onClick:()=>le(ve,U,Oe,"down"),className:"p-0.5 text-gray-400 hover:text-black",children:t.jsx(yn,{className:"w-3 h-3"})})]}),t.jsxs("div",{className:"flex-1 space-y-1",children:[t.jsx("input",{value:be.display,onChange:Je=>xe(ve,U,Oe,{display:Je.target.value}),className:"w-full text-xs font-bold border border-gray-300 rounded px-1.5 py-1 bg-white text-black"}),t.jsx("input",{value:be.variations.join(", "),onChange:Je=>xe(ve,U,Oe,{variations:Je.target.value.split(",").map(gt=>gt.trim())}),className:"w-full text-[10px] border border-gray-200 rounded px-1.5 py-1 text-gray-500 font-mono bg-white"})]}),t.jsx("button",{onClick:()=>ge(ve,U,Oe),className:"text-gray-300 hover:text-red-500 self-start p-1",children:t.jsx(xt,{className:"w-4 h-4"})})]})},Oe))}),t.jsx("button",{onClick:()=>{const be=V(ce,U);M(ve,{...be,groups:[...be.groups,{id:`new-${Date.now()}`,display:"Новое значение",variations:[]}]})},className:"w-full mt-2 py-1.5 border border-dashed border-purple-300 text-purple-600 rounded text-xs font-bold uppercase hover:bg-purple-50",children:"+ Добавить значение вручную"})]})]}),t.jsxs("div",{className:"bg-gray-50 p-3 rounded-lg border border-gray-200 text-black",children:[t.jsxs("div",{className:"flex items-center justify-between mb-2",children:[t.jsx(Bd,{children:"Поля характеристик"}),t.jsxs("button",{onClick:()=>je(ve),className:"text-xs bg-black text-white px-2 py-0.5 rounded hover:bg-gray-800 flex gap-1 items-center",children:[t.jsx(At,{className:"w-2 h-2"})," Поле"]})]}),t.jsx("div",{className:"space-y-2",children:ce.specFields&&ce.specFields.length>0?ce.specFields.map((be,Oe)=>t.jsxs("div",{className:"flex gap-1 items-center",children:[t.jsx("input",{value:be.name,onChange:Je=>Ne(ve,Oe,{name:Je.target.value}),className:"flex-1 text-sm border border-gray-300 rounded p-1 bg-white text-black",placeholder:"НаÐ
3020·Ð²Ð°Ð½Ð¸Ðµ"}),t.jsx("input",{value:be.placeholder||"",onChange:Je=>Ne(ve,Oe,{placeholder:Je.target.value}),className:"flex-1 text-sm border border-gray-300 rounded p-1 bg-white text-gray-500",placeholder:"Пример"}),t.jsx("button",{onClick:()=>Ne(ve,Oe,{hideInComparison:!be.hideInComparison}),className:`p-1 ${be.hideInComparison?"text-gray-300":"text-blue-500"}`,children:be.hideInComparison?t.jsx(ao,{className:"w-3 h-3"}):t.jsx(xr,{className:"w-3 h-3"})}),t.jsx("button",{onClick:()=>Ee(ve,Oe),className:"text-gray-400 hover:text-red-500 p-1",children:t.jsx(xt,{className:"w-3 h-3"})})]},be.id)):t.jsx("div",{className:"text-xs text-gray-400 italic",children:"Нет полей."})})]})]})]},ce.id))})]})]}),t.jsxs("div",{className:`bg-white border rounded-xl overflow-hidden ${E==="catalog_products"?"border-black shadow-md":"border-gray-200"}`,children:[t.jsxs("button",{onClick:()=>P("catalog_products"),className:"w-full flex items-center justify-between p-4 bg-white text-black",children:[t.jsx(Vd,{title:"Товары",icon:Jt,subtitle:`${m.length} позиций`}),E==="catalog_products"?t.jsx(Ft,{className:"w-4 h-4"}):t.jsx(Mt,{className:"w-4 h-4 text-gray-400"})]}),E==="catalog_products"&&t.jsxs("div",{className:"p-4 border-t border-gray-100 bg-gray-50/50 space-y-4",children:[t.jsxs("div",{className:"flex gap-2 flex-wrap",children:[t.jsxs("div",{className:"relative flex-1 min-w-[150px]",children:[t.jsx("input",{value:H,onChange:ce=>J(ce.target.value),placeholder:"Поиск товара...",className:"w-full text-sm border border-gray-300 rounded pl-8 pr-2 py-2 bg-white text-black placeholder-gray-500"}),t.jsx(xa,{className:"absolute left-2.5 top-1/2 -translate-y-1/2 w-3.5 h-3.5 text-gray-400"})]}),t.jsxs("div",{className:"relative min-w-[150px]",children:[t.jsxs("select",{value:Y,onChange:ce=>G(ce.target.value),className:"w-full text-sm border border-gray-300 rounded pl-8 pr-2 py-2 bg-white text-black appearance-none",children:[t.jsx("option",{value:"all",children:"Все категории"}),u.map(ce=>t.jsx("option",{value:ce.id,children:ce.name},ce.id))]}),t.jsx(pr,{className:"absolute left-2.5 top-1/2 -translate-y-1/2 w-3.5 h-3.5 text-gray-400"})]}),t.jsx("button",{onClick:B,className:"bg-black text-white px-3 rounded hover:bg-[#ff3b30]",children:t.jsx(At,{className:"w-4 h-4"})})]}),t.jsxs("div",{className:"space-y-4  pr-1",children:[Ge.length===0&&t.jsx("div",{className:"col-span-full text-center py-8 text-gray-400 text-sm italic",children:"Товары не найдены"}),Ge.map(ce=>t.jsx(xj,{product:ce,categories:u,marketplaces:x,isEditing:k===ce.id,onToggleEdit:()=>R(k===ce.id?null:ce.id),onUpdate:v,onRemove:()=>z(ce.id),onOpenContentEditor:()=>$(ce.id),isPanel:d,navigate:O},ce.id))]})]})]}),t.jsxs("div",{className:`bg-white border rounded-xl overflow-hidden ${E==="catalog_seo"?"border-black shadow-md":"border-gray-200"}`,children:[t.jsxs("button",{onClick:()=>P("catalog_seo"),className:"w-full flex items-center justify-between p-4 bg-white text-black",children:[t.jsx(Vd,{title:"SEO Каталога",icon:xa}),E==="catalog_seo"?t.jsx(Ft,{className:"w-4 h-4"}):t.jsx(Mt,{className:"w-4 h-4 text-gray-400"})]}),E==="catalog_seo"&&t.jsx("div",{className:"p-4 border-t border-gray-100 bg-gray-50/50 space-y-4",children:t.jsxs("div",{className:"space-y-3",children:[t.jsxs("div",{children:[t.jsx(Bd,{children:"Title"}),t.jsx("input",{value:c.title,onChange:ce=>h({...c,title:ce.target.value}),className:"w-full text-sm border border-gray-300 rounded p-2 bg-white text-black"})]}),t.jsxs("div",{children:[t.jsx(Bd,{children:"Description"}),t.jsx("textarea",{value:c.description,onChange:ce=>h({...c,description:ce.target.value}),className:"w-full text-sm border border-gray-300 rounded p-2 bg-white text-black h-16"})]})]})})]})]})})]})]})},Oa=({children:r})=>t.jsx("label",{className:"text-xs font-bold text-gray-500 uppercase block mb-1.5",children:r}),bs=({title:r,icon:o,subtitle:d})=>t.jsxs("div",{className:"flex items-center gap-4",children:[t.jsx("div",{className:"p-2 rounded-lg bg-black text-white",children:t.jsx(o,{className:"w-5 h-5"})}),t.jsxs("div",{className:"text-left",children:[t.jsx("span",{className:"block font-bold text-sm uppercase text-black",children:r}),d&&t.jsx("span",{className:"text-xs text-gray-500 font-medium",children:d})]})]}),fj=({isOpen:r,onClose:o,isPanel:d=!1,seo:c,onUpdateSeo:h,heroSlides:m,onUpdateHeroSlides:y,logoImage:u,onLogoImageChange:f,navLinks:x,onUpdateNavLinks:N,marketplaces:b,onUpdateMarketplaces:C,marketplacesContent:g,onUpdateMarketplacesContent:O,carouselSettings:E,onUpdateCarouselSettings:_,internalShopSett
3020ings:k,onUpdateInternalShopSettings:R,reviews:D,onUpdateReviews:te,footerColumns:W,onUpdateFooterColumns:$,socialLinks:H,onUpdateSocialLinks:J,pages:Y,onUpdatePages:G,supportSettings:U,onUpdateSupportSettings:q,tickerSettings:P,onUpdateTickerSettings:pe,products:B,onResetDefaults:z,onExportConfig:v,onImportConfig:T,navigate:A,currentPath:K})=>{var ke,ie,We,Re,Xe,Ie,Be,Ot,Ze,_a,Ra,es,wl,jl,Nl;j.useRef(null);const[w,V]=j.useState("header"),[M,X]=j.useState(""),le=Z=>{V(w===Z?null:Z)},xe=(Z,me)=>{h({...c,[Z]:me})},ge=async(Z,me)=>{var yt;const fe=(yt=Z.target.files)==null?void 0:yt[0];if(!fe)return;const Ae=oe.loading("Обработка и загрузка...");try{const Nt=await bo(fe);try{const Tt=await Wl.uploadFile(Nt);me(Tt),oe.success("Загружено (Оптимизировано)",{id:Ae})}catch(Tt){console.warn("Server upload failed, falling back to base64",Tt);const Ma=await jr(fe);me(Ma),oe.success("Загружено локально (Base64)",{id:Ae})}}catch(Nt){console.error(Nt),oe.error("Ошибка загрузки",{id:Ae})}},je=()=>{const Z={id:`slide-${Date.now()}`,image:"/placeholder.svg",tagline:"НОВЫЙ СЛАЙД",title:"ЗАГОЛОВОК <br/> БАННЕРА",subtitle:"Описание предложения или акции",buttonText:"Подробнее",link:"catalog"};y([Z,...m]),oe.success("Слайд добавлен")},Ne=Z=>{const me=[...m];me.splice(Z,1),y(me)},Ee=(Z,me)=>{if(me==="up"&&Z===0||me==="down"&&Z===m.length-1)return;const fe=[...m],Ae=me==="up"?Z-1:Z+1;[fe[Z],fe[Ae]]=[fe[Ae],fe[Z]],y(fe)},Ge=Z=>{const fe={...m[Z],id:`slide-${Date.now()}`},Ae=[...m];Ae.splice(Z+1,0,fe),y(Ae),oe.success("Слайд дублирован")},it=()=>{const Z={id:`mp-${Date.now()}`,name:"Новый Маркетплейс",image:"/placeholder.svg",link:"#"};C([Z,...b])},Ua=Z=>{const me=[...b];me.splice(Z,1),C(me)},ce=(Z,me)=>{const fe=[...b];fe[Z]={...fe[Z],...me},C(fe)},ve=()=>{const Z={id:`rev-${Date.now()}`,name:"Имя Клиента",source:"(OZON)",text:"Текст отзыва...",product:"Название товара",stars:5};te([Z,...D])},be=Z=>{const me=[...D];me.splice(Z,1),te(me)},Oe=(Z,me)=>{const fe=[...D];fe[Z]={...fe[Z],...me},te(fe)},Je=()=>{const Z={id:`tick-${Date.now()}`,text:"Новый текст акции",isBold:!0,icon:"star"};pe({...P,items:[Z,...P.items]})},gt=Z=>{const me=[...P.items];me.splice(Z,1),pe({...P,items:me})},Fe=(Z,me)=>{const fe=[...P.items];fe[Z]={...fe[Z],...me},pe({...P,items:fe})},Ht=()=>{const Z={id:`soc-${Date.now()}`,platform:"telegram",url:"https://t.me"};J([Z,...H])},Xt=Z=>{const me=[...H];me.splice(Z,1),J(me)},Pe=(Z,me)=>{const fe=[...H];fe[Z]={...fe[Z],...me},J(fe)},se=()=>{const Z={id:`fc-${Date.now()}`,title:"Новая колонка",links:[]};$([Z,...W])},ye=Z=>{const me=[...W];me.splice(Z,1),$(me)},De=(Z,me)=>{const fe=[...W];fe[Z]={...fe[Z],...me},$(fe)},et=Z=>{const me=[...W];me[Z].links.unshift({id:`fl-${Date.now()}`,name:"Новая ссылка",url:"/"}),$(me)},Me=(Z,me)=>{const fe=[...W];fe[Z].links.splice(me,1),$(fe)},tt=(Z,me,fe)=>{const Ae=[...W];Ae[Z].links[me]={...Ae[Z].links[me],...fe},$(Ae)},st=()=>{const Z={id:`nav-${Date.now()}`,name:"Новая ссылка",target:"/"};N([Z,...x])},$t=Z=>{const me=[...x];me.splice(Z,1),N(me)},Kt=(Z,me)=>{const fe=[...x];fe[Z]={...fe[Z],...me},N(fe)},He=()=>{var fe;if(!M.includes("@")){oe.error("Некорректный Email");return}const Z=((fe=k.notifications)==null?void 0:fe.orderEmails)||[];if(Z.includes(M)){oe.error("Email уже добавлен");return}const me={...k,notifications:{...k.notifications,orderEmails:[...Z,M]}};R(me),X(""),oe.success("Email добавлен")},dt=Z=>{var Ae;const me=((Ae=k.notifications)==null?void 0:Ae.orderEmails)||[],fe={...k,notifications:{...k.notifications,orderEmails:me.filter(yt=>yt!==Z)}};R(fe)},Lt=Z=>{const me={...k,notifications:{...k.notifications,contactForm:{...k.notifications.contactForm,...Z}}};R(me)},bt=Z=>{const me={...k,notifications:{...k.notifications,cooperationForm:{...k.notifications.cooperationForm,...Z}}};R(me)},Wt=Z=>{const me={...k,notifications:{...k.notifications,telegramWidget:{...((k.notifications||{}).telegramWidget||{}),...Z}}};R(me)},vl=d?"w-full h-full bg-transparent flex flex-col":`fixed top-0 right-0 h-full w-full md:w-[500px] bg-white text-black shadow-2xl z-[101] transform transition-transform duration-300 ease-out flex flex-col ${r?"translate-x-0":"translate-x-full"}`,Ta=d?null:t.jsx("div",{className:`fixed inset-0 bg-black/60 backdrop-blur-sm z-[100] transition-opacity duration-300 ${r?"opacity-100":"opacity-0 pointer-events-none"}`,onClick:o});return t.jsxs(t.Fragment,{children:[Ta,t.jsxs("div",{className:vl,children:[!d&&t.jsxs("div",{className:"flex items-center justify-between p-6 border-b border-gray-200 bg-white z-10",children:[t.jsxs("h2",{className:"text-xl font-black text-black uppercase tracking-tighter flex items-center gap-2",children:[t.jsx(yl,{className:"w-5 h-5 text-[#ff3b30]"}),"Настройки"]}),t.jsx("button",{onClick:o,className:"p-2 hover:bg-gray-100 rounded-full transition-colors",children:t.jsx(xt,{className:"w-6 h-6 text-gray-500"})})]}),t.jsx("div",{className:`flex-1 overflow-visible custom-scrollbar ${d?"":"pb-10"}`,children:t.jsxs("div",{className:d?"space-y-4":"px-4 space-y-4 py-6",children:[t.jsxs("div",{className:`bg-white border rounded-xl overflow-hidden ${w==="header"?"border-black shadow-md":"border-gray-200"}`,children:[t.jsxs("button",{onClick:()=>le("header"),className:"w-full flex items-center justify-between p-4 bg-white",children:[t.jsx(bs,{title:"Шапка и SEO",icon:vs,subtitle:"Лого, фавикон, меню"}),w==="header"?t.jsx(Ft,{className:"w-4 h-4"}):t.jsx(Mt,{className:"w-4 h-4 text-gray-400"})]}),w==="header"&&t.jsxs("div",{className:"p-4 border-t border-gray-100 bg-gray-50/50 space-y-6 animate-fade-in",children:[t.jsxs("div",{className:"bg-white p-3 rounded border border-gray-200 flex items-center justify-between",children:[t.jsxs("div",{className:"flex items-center gap-3",children:[t.jsxs("div",{className:"w-12 h-12 bg-black rounded flex items-center justify-center overflow-hidden border border-gray-300 relative group cursor-pointer",children:[u?t.jsx("img",{src:u,className:"w-full h-full object-contain p-1"}):t.jsx("span",{className:"text-[8px] text-white",children:"LOGO"}),t.jsx("div",{className:"absolute inset-0 bg-black/50 opacity-0 group-hover:opacity-100 flex items-center justify-center transition-opacity",children:t.jsx(Ka,{className:"w-4 h-4 text-white"})}),t.jsx("input",{type:"file",className:"absolute inset-0 opacity-0 cursor-pointer",onChange:Z=>ge(Z,f)})]}),t.jsxs("div",{children:[t.jsx("span",{className:"text-xs font-bold uppercase text-gray-500 block",children:"Логотип сайта"}),t.jsx("p",{className:"text-[10px] text-blue-600 font-bold mt-0.5",children:"✨ PNG, Высота 40-60px"})]})]}),u&&t.jsx("button",{onClick:()=>f(""),className:"text-gray-400 hover:text-red-500",children:t.jsx(Rx,{className:"w-4 h-4"})})]}),t.jsxs("div",{className:"bg-white p-3 rounded border border-gray-200 flex items-center justify-between",children:[t.jsxs("div",{className:"flex items-center gap-3",children:[t.jsxs("div",{className:"w-12 h-12 bg-white rounded flex items-center justify-center overflow-hidden border border-gray-300 relative group cursor-pointer",children:[c.favicon?t.jsx("img",{src:c.favicon,
3020className:"w-full h-full object-contain p-2"}):t.jsx("span",{className:"text-[8px] text-gray-400",children:"ICON"}),t.jsx("div",{className:"absolute inset-0 bg-black/50 opacity-0 group-hover:opacity-100 flex items-center justify-center transition-opacity",children:t.jsx(Ka,{className:"w-4 h-4 text-white"})}),t.jsx("input",{type:"file",className:"absolute inset-0 opacity-0 cursor-pointer",onChange:Z=>ge(Z,me=>xe("favicon",me))})]}),t.jsxs("div",{children:[t.jsx("span",{className:"text-xs font-bold uppercase text-gray-500 block",children:"Фавикон"}),t.jsx("p",{className:"text-[10px] text-blue-600 font-bold mt-0.5",children:"✨ Квадрат, PNG/ICO"})]})]}),c.favicon&&t.jsx("button",{onClick:()=>xe("favicon",""),className:"text-gray-400 hover:text-red-500",children:t.jsx(Rx,{className:"w-4 h-4"})})]}),t.jsxs("div",{className:"space-y-2",children:[t.jsxs("div",{className:"flex items-center justify-between",children:[t.jsx("span",{className:"text-xs font-bold text-gray-500 uppercase",children:"Меню навигации"}),t.jsx("button",{onClick:st,className:"text-[10px] font-bold text-blue-600 hover:underline",children:"+ Добавить ссылку"})]}),t.jsx("div",{className:"space-y-2",children:x.map((Z,me)=>t.jsxs("div",{className:"space-y-2 bg-white p-3 rounded border border-gray-200 shadow-sm",children:[t.jsxs("div",{className:"flex gap-2 items-center",children:[t.jsx(ks,{className:"w-3 h-3 text-gray-400 flex-shrink-0"}),t.jsx("input",{value:Z.name,onChange:fe=>Kt(me,{name:fe.target.value}),className:"w-1/3 text-xs font-bold border border-gray-300 rounded p-1 bg-white text-black",placeholder:"Название"}),t.jsx("input",{value:Z.target,onChange:fe=>Kt(me,{target:fe.target.value}),className:"flex-1 text-xs border border-gray-300 rounded p-1 bg-white text-blue-600",placeholder:"Ссылка (URL)"}),t.jsx("button",{onClick:()=>$t(me),className:"text-gray-300 hover:text-red-500 p-1",children:t.jsx(xt,{className:"w-3 h-3"})})]}),t.jsxs("div",{className:"pl-6 space-y-2 border-l-2 border-gray-100 mt-2",children:[(Z.children||[]).map((sub,si)=>t.jsxs("div",{className:"flex gap-2 items-center",children:[t.jsx("input",{value:sub.name,onChange:fe=>{const nc=[...Z.children];nc[si]={...sub,name:fe.target.value};Kt(me,{children:nc})},className:"w-1/3 text-[10px] font-bold border border-gray-200 rounded p-1 bg-gray-50 text-black",placeholder:"Подссылка"}),t.jsx("input",{value:sub.target,onChange:fe=>{const nc=[...Z.children];nc[si]={...sub,target:fe.target.value};Kt(me,{children:nc})},className:"flex-1 text-[10px] border border-gray-200 rounded p-1 bg-gray-50 text-blue-600",placeholder:"URL"}),t.jsx("button",{onClick:()=>{const nc=Z.children.filter((_,idx)=>idx!==si);Kt(me,{children:nc})},className:"text-gray-300 hover:text-red-500 p-1",children:t.jsx(xt,{className:"w-2.5 h-2.5"})})]},sub.id)),t.jsx("button",{onClick:()=>Kt(me,{children:[...(Z.children||[]),{id:`sub-${Date.now()}`,name:"Новая подссылка",target:"/"}]}),className:"text-[9px] font-bold text-blue-500 hover:underline",children:"+ Подссылка"})]})]},Z.id))})]}),t.jsxs("div",{className:"space-y-3 pt-3 border-t border-gray-200",children:[t.jsx("h4",{className:"text-xs font-bold text-black uppercase mb-1",children:"SEO (Главная)"}),t.jsxs("div",{children:[t.jsx(Oa,{children:"Meta Title"}),t.jsx("input",{value:c.title,onChange:Z=>xe("title",Z.target.value),className:"w-full text-sm border border-gray-300 rounded p-2 bg-white text-black"})]}),t.jsxs("div",{children:[t.jsx(Oa,{children:"Meta Description"}),t.jsx("textarea",{value:c.description,onChange:Z=>xe("description",Z.target.value),className:"w-full text-sm border border-gray-300 rounded p-2 h-20 resize-none bg-white text-black"})]})]})]})]}),t.jsxs("div",{className:`bg-white border rounded-xl overflow-hidden ${w==="notifications"?"border-black shadow-md":"border-gray-200"}`,children:[t.jsxs("button",{onClick:()=>le("notifications"),className:"w-full flex items-center justify-between p-4 bg-white",children:[t.jsx(bs,{title:"Уведомления и Формы",icon:U1,subtitle:"Email заказов, контакты"}),w==="notifications"?t.jsx(Ft,{className:"w-4 h-4"}):t.jsx(Mt,{className:"w-4 h-4 text-gray-400"})]}),w==="notifications"&&t.jsxs("div",{className:"p-4 border-t border-gray-100 bg-gray-50/50 space-y-6 animate-fade-in",children:[t.jsx("hr",{className:"border-gray-200"}),t.jsxs("div",{className:"space-y-3",children:[t.jsxs("div",{className:"flex justify-between items-center",children:[t.jsx("h4",{className:"text-xs font-bold uppercase text-black flex items-center gap-2",children:"Чат с поддержкой"}),t.jsxs("label",{className:"relative inline-flex items-center cursor-pointer",children:[t.jsx("input",{type:"checkbox",checked:!!(((k.notifications||{}).telegramWidget||{}).enabled),onChange:Z=>Wt({enabled:Z.target.checked}),className:"sr-only peer"}),t.jsx("div",{className:"w-9 h-5 bg-gray-200 peer-focus:outline-none rounded-full peer peer-checked:bg-green-500 peer-checked:after:translate-x-full after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-4 after:w-4 after:transition-all"})]})]}),t.jsxs("div",{className:"p-3 bg-white border border-gray-200 rounded-lg space-y-3",children:[t.jsxs("div",{children:[t.jsx(Oa,{children:"Заголовок формы"}),t.jsx("input",{value:(((k.notifications||{}).telegramWidget||{}).title)||"",onChange:Z=>Wt({title:Z.target.value}),className:"w-full text-xs border border-gray-300 rounded p-2 bg-white text-black",placeholder:"Чат с поддержкой"})]}),t.jsxs("div",{children:[t.jsx(Oa,{children:"Текст после отправки"}),t.jsx("input",{value:(((k.notifications||{}).telegramWidget||{}).successMessage)||"",onChange:Z=>Wt({successMessage:Z.target.value}),className:"w-full text-xs border border-gray-300 rounded p-2 bg-white text-black",placeholder:"Спасибо! Мы ответим вам в ближайшее время."})]}),t.jsxs("div",{children:[t.jsx(Oa,{children:"Email для дублирования (необязательно)"}),t.jsx("input",{value:(((k.notifications||{}).telegramWidget||{}).emailCopyTo)||"",onChange:Z=>Wt({emailCopyTo:Z.target.value}),className:"w-full text-xs border border-gray-300 rounded p-2 bg-white text-black",placeholder:"[email protected]"}),t.jsx("p",{className:"text-[10px] text-gray-500",children:"Сообщение уйдет в Telegram и дополнительно на этот Email (если указан)."})]})]})]}),t.jsxs("div",{className:"space-y-3",children:[t.jsxs("h4",{className:"text-xs font-bold uppercase text-black flex items-center gap-2",children:[t.jsx(Jt,{className:"w-4 h-4"})," Уведомления о заказах"]}),t.jsx("p",{className:"text-[10px] text-gray-500",children:"На эти адреса будут приходить письма о новых заказах."}),t.jsxs("div",{className:"flex gap-2",children:[t.jsx("input",{value:M,onChange:Z=>X(Z.target.value),className:"flex-1 text-xs border border-gray-300 rounded p-2 bg-white text-black",placeholder:"[email protected]"}),t.jsx("button",{onClick:He,className:"bg-black text-white px-3 rounded text-xs font-bold uppercase",children:"Добавить"})]}),t.jsx("div",{className:"flex flex-wrap gap-2",children:(((ke=k.notifications)==null?void 0:ke.orderEmails)||[]).map((Z,me)=>t.jsxs("div",{className:"flex items-center gap-2 bg-white border border-gray-200 px-3 py-1.5 rounded-full shadow-sm",children:[t.jsx("span",{className:"text-xs font-medium text-black",children:Z}),t.jsx("button",{onClick:()=>dt(Z),className:"text-gray-400 hover:text-red-500",children:t.jsx(xt,{className:"w-3 h-3"})})]},me))})]}),t.jsx("hr",{className:"border-gray-200"}),t.jsxs("div",{className:"space-y-3",children:[t.jsxs("div",{className:"flex justify-between items-center",children:[t.jsxs("h4",{className:"text-xs font-bold uppercase text-black flex items-center gap-2",children:[t.jsx(ro,{className:"w-4 h-4"}),' Форма "Контакты"']}),t.jsxs("label",{className:"relative inline-flex items-center cursor-pointer",children:[t.jsx("input",{type:"checkbox",checked:(We=(ie=k.notifications)==null?void 0:ie.contactForm)==null?void 0:We.enabled,onChange:Z=>Lt({enabled:Z.target.checked}),className:"sr-only peer"}),t.jsx("div",{className:"w-9 h-5 bg-gray-200 peer-focus:outline-none rounded-full peer peer-checked:bg-green-500 peer-checked:after:translate-x-full after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-4 after:w-4 after:transition-all"})]})]}),t.jsxs("div",{className:"p-3 bg-white border border-gray-200 rounded-lg space-y-3",children:[t.jsxs("div",{children:[t.jsx(Oa,{children:"Email получателя"}),t.jsx("input",{value:((Xe=(Re=k.notifications)==null?void 0:Re.contactForm)==null?void 0:Xe.emailTo)||"",onChange:Z=>Lt({emailTo:Z.target.value}),className:"w-full text-xs border border-gray-300 rounded p-2 bg-white text-black"})]}),t.jsxs("div",{children:[t.jsx(Oa,{children:"Заголовок формы"}),t.jsx("input",{value:((Be=(Ie=k.notifications)==null?void 0:Ie.contactForm)==null?void 0:Be.title)||"",onChange:Z=>Lt({title:Z.target.value}),className:"w-full text-xs border border-gray-300 rounded p-2 bg-white text-black"})]}),t.jsxs("div",{children:[t.jsx(Oa,{children:"Сообщение об успехе"}),t.jsx("input",{value:((Ze=(Ot=k.notifications)==null?void 0:Ot.contactForm)==null?void 0:Ze.successMessage)||"",onChange:Z=>Lt({successMessage:Z.target.value}),className:"w-full text-xs border border-gray-300 rounded p-2 bg-white text-black"})]}),t.jsx("div",{className:"pt-2",children:t.jsx("div",{className:"text-[10px] font-bold uppercase text-gray-400",children:"Поля формы"})}),t.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[t.jsxs("div",{children:[t.jsx(Oa,{children:"Подпись: Имя"}),t.jsx("input",{value:(((k.notifications||{}).contactForm||{}).nameLabel)||"",onChange:Z=>Lt({nameLabel:Z.target.value}),className:"w-full text-xs border border-gray-300 rounded p-2 bg-white text-black"})]}),t.jsxs("div",{children:[t.jsx(Oa,{children:"Пример: Имя"}),t.jsx("input",{value:(((k.notifications||{}).contactForm||{}).namePlaceholder)||"",onChange:Z=>Lt({namePlaceholder:Z.target.value}),className:"w-full text-xs border border-gray-300 rounded p-2 bg-white text-black",placeholder:r.namePlaceholder||"Иван Иванов"})]}),t.jsxs("div",{children:[t.jsx(Oa,{children:"Подпись: Email"}),t.jsx("input",{value:(((k.notifications||{}).contactForm||{}).emailLabel)||"",onChange:Z=>Lt({emailLabel:Z.target.value}),className:"w-full text-xs border border-gray-300 rounded p-2 bg-white text-black"})]}),t.jsxs("div",{children:[t.jsx(Oa,{children:"Пример: Email"}),t.jsx("input",{value:(((k.notifications||{}).contactForm||{}).emailPlaceholder)||"",onChange:Z=>Lt({emailPlaceholder:Z.target.value}),className:"w-full text-xs border border-gray-300 rounded p-2 bg-white text-black",placeholder:r.emailPlaceholder||"[email protected]"})]}),t.jsxs("div",{children:[t.jsx(Oa,{children:"Подпись: Тема"}),t.jsx("input",{value:(((k.notifications||{}).contactForm||{}).productLabel)||"",onChange:Z=>Lt({productLabel:Z.target.value}),className:"w-full text-xs border border-gray-300 rounded p-2 bg-white text-black"})]}),t.jsxs("div",{children:[t.jsx(Oa,{children:"Пример: Тема"}),t.jsx("input",{value:(((k.notifications||{}).contactForm||{}).productPlaceholder)||"",onChange:Z=>Lt({productPlaceholder:Z.target.value}),className:"w-full text-xs border border-gray-300 rounded p-2 bg-white text-black",placeholder:r.productPlaceholder||"Например: Мышь VOROTEX V1"})]}),t.jsxs("div",{children:[t.jsx(Oa,{children:"Подпись: Вопрос"}),t.jsx("input",{value:(((k.notifications||{}).contactForm||{}).questionLabel)||"",onChange:Z=>Lt({questionLabel:Z.target.value}),className:"w-full text-xs border border-gray-300 rounded p-2 bg-white text-black"})]}),t.jsxs("div",{children:[t.jsx(Oa,{children:"Пример: Вопрос"}),t.jsx("input",{value:(((k.notifications||{}).contactForm||{}).questionPlaceholder)||"",onChange:Z=>Lt({questionPlaceholder:Z.target.value}),className:"w-full text-xs border border-gray-300 rounded p-2 bg-white text-black",placeholder:r.questionPlaceholder||"Опишите вашу проблему или вопрос..."})]})]}),t.jsxs("div",{children:[t.jsx(Oa,{children:"Текст кнопки"}),t.jsx("input",{value:(((k.notifications||{}).contactForm||{}).buttonText)||"",onChange:Z=>Lt({buttonText:Z.target.value}),className:"w-full text-xs border border-gray-300 rounded p-2 bg-white text-black",placeholder:"Отправить сообщение"})]})]})]}),t.jsx("hr",{className:"border-gray-200"}),t.jsxs("div",{className:"space-y-3",children:[t.jsxs("div",{className:"flex justify-between items-center",children:[t.jsxs("h4",{className:"text-xs font-bold uppercase text-black flex items-center gap-2",children:[t.jsx(G1,{className:"w-4 h-4"}),' Форма "Сотрудничество"']}),t.jsxs("label",{className:"relative inline-flex items-center cursor-pointer",children:[t.jsx("input",{type:"checkbox",checked:(Ra=(_a=k.notifications)==null?void 0:_a.cooperationForm)==null?void 0:Ra.enabled,onChange:Z=>bt({enabled:Z.target.checked}),className:"sr-only peer"}),t.jsx("div",{className:"w-9 h-5 bg-gray-200 peer-focus:outline-none rounded-full peer peer-checked:bg-green-500 peer-checked:after:translate-x-full after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-4 after:w-4 after:transition-all"})]})]}),t.jsxs("div",{className:"p-3 bg-white border border-gray-200 rounded-lg space-y-3",children:[t.jsxs("div",{children:[t.jsx(Oa,{children:"Email получателя"}),t.jsx("input",{value:((wl=(es=k.notifications)==null?void 0:es.cooperationForm)==null?void 0:wl.emailTo)||"",onChange:Z=>bt({emailTo:Z.target.value}),className:"w-full text-xs border border-gray-300 rounded p-2 bg-white text-black"})]}),t.jsxs("div",{children:[t.jsx(Oa,{children:"Заголовок формы"}),t.jsx("input",{value:((Nl=(jl=k.notifications)==null?void 0:jl.cooperationForm)==null?void 0:Nl.title)||"",onChange:Z=>bt({title:Z.target.value}),className:"w-full text-xs border border-gray-300 rounded p-2 bg-white text-black"})]}),t.jsxs("div",{children:[t.jsx(Oa,{children:"Сообщение об успехе"}),t.jsx("input",{value:(((k.notifications||{}).cooperationForm||{}).successMessage)||"",onChange:Z=>bt({successMessage:Z.target.value}),className:"w-full text-xs border border-gray-300 rounded p-2 bg-white text-black"})]}),t.jsx("div",{className:"pt-2",children:t.jsx("div",{className:"text-[10px] font-bold uppercase text-gray-400",children:"Поля формы"})}),t.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[t.jsxs("div",{children:[t.jsx(Oa,{children:"Подпись: Имя"}),t.jsx("input",{value:(((k.notifications||{}).cooperationForm||{}).nameLabel)||"",onChange:Z=>bt({nameLabel:Z.target.value}),className:"w-full text-xs border border-gray-300 rounded p-2 bg-white text-black"})]}),t.jsxs("div",{children:[t.jsx(Oa,{children:"Пример: Имя"}),t.jsx("input",{value:(((k.notifications||{}).cooperationForm||{}).namePlaceholder)||"",onChange:Z=>bt({namePlaceholder:Z.target.value}),className:"w-full text-xs border border-gray-300 rounded p-2 bg-white text-black",placeholder:r.namePlaceholder||"Иван Иванов"})]}),t.jsxs("div",{children:[t.jsx(Oa,{children:"Подпись: Email"}),t.jsx("input",{value:(((k.notifications||{}).cooperationForm||{}).emailLabel)||"",onChange:Z=>bt({emailLabel:Z.target.value}),className:"w-full text-xs border border-gray-300 rounded p-2 bg-white text-black"})]}),t.jsxs("div",{children:[t.jsx(Oa,{children:"Пример: Email"}),t.jsx("input",{value:(((k.notifications||{}).cooperationForm||{}).emailPlaceholder)||"",onChange:Z=>bt({emailPlaceholder:Z.target.value}),className:"w-full text-xs border border-gray-300 rounded p-2 bg-white text-black",placeholder:r.emailPlaceholder||"[email protected]"})]}),t.jsxs("div",{children:[t.jsx(Oa,{children:"Подпись: Ð
3020¢ÐµÐ¼Ð°"}),t.jsx("input",{value:(((k.notifications||{}).cooperationForm||{}).productLabel)||"",onChange:Z=>bt({productLabel:Z.target.value}),className:"w-full text-xs border border-gray-300 rounded p-2 bg-white text-black"})]}),t.jsxs("div",{children:[t.jsx(Oa,{children:"Пример: Тема"}),t.jsx("input",{value:(((k.notifications||{}).cooperationForm||{}).productPlaceholder)||"",onChange:Z=>bt({productPlaceholder:Z.target.value}),className:"w-full text-xs border border-gray-300 rounded p-2 bg-white text-black",placeholder:r.productPlaceholder||"Например: Мышь VOROTEX V1"})]}),t.jsxs("div",{children:[t.jsx(Oa,{children:"Подпись: Вопрос"}),t.jsx("input",{value:(((k.notifications||{}).cooperationForm||{}).questionLabel)||"",onChange:Z=>bt({questionLabel:Z.target.value}),className:"w-full text-xs border border-gray-300 rounded p-2 bg-white text-black"})]}),t.jsxs("div",{children:[t.jsx(Oa,{children:"Пример: Вопрос"}),t.jsx("input",{value:(((k.notifications||{}).cooperationForm||{}).questionPlaceholder)||"",onChange:Z=>bt({questionPlaceholder:Z.target.value}),className:"w-full text-xs border border-gray-300 rounded p-2 bg-white text-black",placeholder:r.questionPlaceholder||"Опишите вашу проблему или вопрос..."})]})]}),t.jsxs("div",{children:[t.jsx(Oa,{children:"Текст кнопки"}),t.jsx("input",{value:(((k.notifications||{}).cooperationForm||{}).buttonText)||"",onChange:Z=>bt({buttonText:Z.target.value}),className:"w-full text-xs border border-gray-300 rounded p-2 bg-white text-black",placeholder:"Отправить сообщение"})]})]})]})]})]}),t.jsxs("div",{className:`bg-white border rounded-xl overflow-hidden ${w==="hero"?"border-black shadow-md":"border-gray-200"}`,children:[t.jsxs("button",{onClick:()=>le("hero"),className:"w-full flex items-center justify-between p-4 bg-white",children:[t.jsx(bs,{title:"Главный баннер",icon:Op,subtitle:`${m.length} слайдов`}),w==="hero"?t.jsx(Ft,{className:"w-4 h-4"}):t.jsx(Mt,{className:"w-4 h-4 text-gray-400"})]}),w==="hero"&&t.jsxs("div",{className:"p-4 border-t border-gray-100 bg-gray-50/50 space-y-4",children:[t.jsxs("button",{onClick:je,className:"w-full py-2 bg-black text-white text-xs font-bold uppercase rounded hover:bg-[#ff3b30] flex items-center justify-center gap-2",children:[t.jsx(At,{className:"w-3 h-3"})," Добавить слайд"]}),t.jsx("div",{className:"space-y-4",children:m.map((Z,me)=>t.jsxs("div",{className:"bg-white p-3 rounded border border-gray-200 relative group",children:[t.jsxs("div",{className:"flex justify-between mb-2",children:[t.jsxs("div",{className:"flex gap-1",children:[t.jsx("button",{onClick:()=>Ee(me,"up"),className:"p-1 hover:bg-gray-100 rounded text-gray-400 hover:text-black",children:t.jsx(vn,{className:"w-3 h-3"})}),t.jsx("button",{onClick:()=>Ee(me,"down"),className:"p-1 hover:bg-gray-100 rounded text-gray-400 hover:text-black",children:t.jsx(yn,{className:"w-3 h-3"})})]}),t.jsxs("div",{className:"flex gap-2",children:[t.jsx("button",{onClick:()=>Ge(me),className:"text-gray-400 hover:text-blue-500",title:"Дублировать",children:t.jsx(uv,{className:"w-3 h-3"})}),t.jsx("button",{onClick:()=>Ne(me),className:"text-gray-400 hover:text-red-500",title:"Удалить",children:t.jsx(jt,{className:"w-3 h-3"})})]})]}),t.jsxs("div",{className:"flex gap-4",children:[t.jsxs("div",{className:"w-24 h-16 bg-gray-100 rounded overflow-hidden relative border border-gray-300 group/img cursor-pointer shrink-0",children:[t.jsx("img",{src:Z.image,className:"w-full h-full object-cover"}),t.jsx("div",{className:"absolute inset-0 bg-black/50 opacity-0 group-hover/img:opacity-100 flex items-center justify-center transition-opacity",children:t.jsx(Ka,{className:"w-4 h-4 text-white"})}),t.jsx("input",{type:"file",className:"absolute inset-0 opacity-0 cursor-pointer",onChange:fe=>ge(fe,Ae=>{const yt=[...m];yt[me]={...Z,image:Ae},y(yt)})})]}),t.jsxs("div",{className:"flex-1 space-y-2",children:[t.jsx("input",{value:Z.title,onChange:fe=>{const Ae=[...m];Ae[me]={...Z,title:fe.target.value},y(Ae)},className:"w-full text-sm font-bold border border-gray-300 rounded p-1.5 bg-white text-black",placeholder:"Заголовок (HTML)"}),t.jsx("input",{value:Z.subtitle,onChange:fe=>{const Ae=[...m];Ae[me]={...Z,subtitle:fe.target.value},y(Ae)},className:"w-full text-xs border border-gray-300 rounded p-1.5 bg-white text-black",placeholder:"Подзаголовок"}),t.jsx("input",{value:Z.tagline||"",onChange:fe=>{const Ae=[...m];Ae[me]={...Z,tagline:fe.target.value},y(Ae)},className:"w-full text-xs border border-gray-300 rounded p-1.5 bg-white text-black",placeholder:"Бейдж (например: НОВИНКА 2025 / Бестселлер)"}),t.jsxs("div",{className:"flex gap-2",children:[t.jsx("input",{value:Z.buttonText,onChange:fe=>{const Ae=[...m];Ae[me]={...Z,buttonText:fe.target.value},y(Ae)},className:"w-1/2 text-xs border border-gray-300 rounded p-1.5 bg-white text-black",placeholder:"Кнопка"}),t.jsx("input",{value:Z.link,onChange:fe=>{const Ae=[...m];Ae[me]={...Z,link:fe.target.value},y(Ae)},className:"w-1/2 text-xs border border-gray-300 rounded p-1.5 bg-white text-blue-600",placeholder:"Ссылка"})]})]})]})]}
3020,Z.id))})]})]}),t.jsxs("div",{className:`bg-white border rounded-xl overflow-hidden ${w==="marketplaces"?"border-black shadow-md":"border-gray-200"}`,children:[t.jsxs("button",{onClick:()=>le("marketplaces"),className:"w-full flex items-center justify-between p-4 bg-white",children:[t.jsx(bs,{title:"Маркетплейсы",icon:Jt,subtitle:"Ссылки и баннеры"}),w==="marketplaces"?t.jsx(Ft,{className:"w-4 h-4"}):t.jsx(Mt,{className:"w-4 h-4 text-gray-400"})]}),w==="marketplaces"&&t.jsxs("div",{className:"p-4 border-t border-gray-100 bg-gray-50/50 space-y-4",children:[t.jsxs("div",{className:"bg-white p-3 rounded border border-gray-200 space-y-2 mb-4",children:[t.jsx(Oa,{children:"Заголовок блока"}),t.jsxs("div",{className:"flex items-center justify-between gap-3 bg-gray-50 border border-gray-200 rounded p-2.5",children:[t.jsxs("div",{children:[t.jsx("div",{className:"text-[10px] font-bold uppercase text-gray-600",children:"Ссылки на товар"}),t.jsx("div",{className:"text-[10px] text-gray-500",children:"Массово показать/скрыть ссылки маркетплейсов на страницах товаров"})]}),t.jsx("input",{type:"checkbox",checked:(g.showProductMarketplaceLinks!==!1),onChange:Z=>O({...g,showProductMarketplaceLinks:Z.target.checked}),className:"h-4 w-4"})]}),t.jsx("input",{value:g.titleMain,onChange:Z=>O({...g,titleMain:Z.target.value}),className:"w-full text-sm border border-gray-300 rounded p-1.5 bg-white text-black"}),t.jsx("input",{value:g.titleHighlight,onChange:Z=>O({...g,titleHighlight:Z.target.value}),className:"w-full text-sm border border-gray-300 rounded p-1.5 bg-white text-[#ff3b30]"}),t.jsx("textarea",{value:g.description,onChange:Z=>O({...g,description:Z.target.value}),className:"w-full text-xs border border-gray-300 rounded p-1.5 h-16 bg-white text-black",placeholder:"Описание..."})]}),t.jsxs("div",{className:"bg-white p-3 rounded border border-gray-200 space-y-2",children:[t.jsx(Oa,{children:"Фоновое изображение блока"}),t.jsxs("div",{className:"flex items-center gap-3",children:[t.jsxs("div",{className:"w-24 h-14 bg-gray-100 rounded overflow-hidden relative border border-gray-300 group/img cursor-pointer shrink-0",children:[t.jsx("img",{src:g.backgroundImage||"/placeholder.svg",className:"w-full h-full object-cover"}),t.jsx("div",{className:"absolute inset-0 bg-black/50 opacity-0 group-hover/img:opacity-100 flex items-center justify-center transition-opacity",children:t.jsx(Ka,{className:"w-4 h-4 text-white"})}),t.jsx("input",{type:"file",className:"absolute inset-0 opacity-0 cursor-pointer",onChange:Z=>ge(Z,me=>O({...g,backgroundImage:me}))})]}),t.jsxs("div",{className:"flex-1",children:[t.jsx("input",{value:g.backgroundImage||"",onChange:Z=>O({...g,backgroundImage:Z.target.value}),className:"w-full text-xs border border-gray-300 rounded p-1.5 bg-white text-blue-600 font-mono",placeholder:"URL фона (или загрузите файл слева)"}),t.jsx("div",{className:"text-[10px] text-gray-500 mt-1",children:"Совет: лучше широкое изображение (минимум 1600px по ширине)."})]}),t.jsx("button",{onClick:()=>O({...g,backgroundImage:""}),className:"p-2 text-gray-400 hover:text-red-500",title:"Убрать фон",children:t.jsx(jt,{className:"w-4 h-4"})})]})]}),t.jsxs("button",{onClick:it,className:"w-full py-2 bg-black text-white text-xs font-bold uppercase rounded hover:bg-[#ff3b30] flex items-center justify-center gap-2",children:[t.jsx(At,{className:"w-3 h-3"})," Добавить площадку"]}),t.jsx("div",{className:"space-y-3",children:b.map((Z,me)=>t.jsxs("div",{className:"bg-white p-3 rounded border border-gray-200 flex gap-3 items-center group",children:[t.jsxs("div",{className:"w-12 h-12 bg-gray-50 rounded border border-gray-200 overflow-hidden relative cursor-pointer group/img shrink-0",children:[t.jsx("img",{src:Z.image,className:"w-full h-full object-contain p-1"}),t.jsx("div",{className:"absolute inset-0 bg-black/50 opacity-0 group-hover/img:opacity-100 flex items-center justify-center transition-opacity",children:t.jsx(Ka,{className:"w-3 h-3 text-white"})}),t.jsx("input",{type:"file",className:"absolute inset-0 opacity-0 cursor-pointer",onChange:fe=>ge(fe,Ae=>ce(me,{image:Ae}))})]}),t.jsxs("div",{className:"flex-1 space-y-1",children:[t.jsx("input",{value:Z.name,onChange:fe=>ce(me,{name:fe.target.value}),className:"w-full text-sm font-bold border border-gray-300 rounded p-1 bg-white text-black",placeholder:"НаÐ
3020·Ð²Ð°Ð½Ð¸Ðµ"}),t.jsx("input",{value:Z.link,onChange:fe=>ce(me,{link:fe.target.value}),className:"w-full text-xs border border-gray-300 rounded p-1 bg-white text-blue-600",placeholder:"Ссылка на магазин"})]}),t.jsx("button",{onClick:()=>Ua(me),className:"text-gray-400 hover:text-red-500",children:t.jsx(jt,{className:"w-4 h-4"})})]},Z.id))})]})]}),t.jsxs("div",{className:`bg-white border rounded-xl overflow-hidden ${w==="reviews"?"border-black shadow-md":"border-gray-200"}`,children:[t.jsxs("button",{onClick:()=>le("reviews"),className:"w-full flex items-center justify-between p-4 bg-white",children:[t.jsx(bs,{title:"Отзывы",icon:Va,subtitle:"На главной"}),w==="reviews"?t.jsx(Ft,{className:"w-4 h-4"}):t.jsx(Mt,{className:"w-4 h-4 text-gray-400"})]}),w==="reviews"&&t.jsxs("div",{className:"p-4 border-t border-gray-100 bg-gray-50/50 space-y-4",children:[t.jsxs("button",{onClick:ve,className:"w-full py-2 bg-black text-white text-xs font-bold uppercase rounded hover:bg-[#ff3b30] flex items-center justify-center gap-2",children:[t.jsx(At,{className:"w-3 h-3"})," Добавить отзыв"]}),t.jsx("div",{className:"space-y-3",children:D.map((Z,me)=>t.jsxs("div",{className:"bg-white p-3 rounded border border-gray-200 relative group",children:[t.jsx("button",{onClick:()=>be(me),className:"absolute top-2 right-2 text-gray-300 hover:text-red-500",children:t.jsx(xt,{className:"w-3 h-3"})}),t.jsxs("div",{className:"space-y-2 pr-6",children:[t.jsxs("div",{className:"flex gap-2",children:[t.jsx("input",{value:Z.name,onChange:fe=>Oe(me,{name:fe.target.value}),className:"flex-1 text-xs font-bold border border-gray-300 rounded p-1.5 bg-white text-black",placeholder:"Имя"}),t.jsx("input",{value:Z.source,onChange:fe=>Oe(me,{source:fe.target.value}),className:"w-20 text-xs border border-gray-300 rounded p-1.5 bg-white text-gray-500",placeholder:"(OZON)"}),t.jsx("input",{type:"number",min:"1",max:"5",value:Z.stars,onChange:fe=>Oe(me,{stars:parseInt(fe.target.value)}),className:"w-12 text-xs font-bold border border-gray-300 rounded p-1.5 text-center bg-white text-black"})]}),t.jsx("textarea",{value:Z.text,onChange:fe=>Oe(me,{text:fe.target.value}),className:"w-full text-xs border border-gray-300 rounded p-1.5 h-14 resize-none bg-white text-black",placeholder:"Текст отзыва..."}),t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx("span",{className:"text-[10px] uppercase font-bold text-gray-400",children:"Товар:"}),t.jsxs("select",{value:Z.productId||"",onChange:fe=>{var Ae;return Oe(me,{productId:fe.target.value,product:((Ae=B.find(yt=>
3020yt.id===fe.target.value))==null?void 0:Ae.name)||"Товар"})},className:"flex-1 text-xs border border-gray-300 rounded p-1 bg-white text-black",children:[t.jsx("option",{value:"",children:"-- Выберите товар --"}),B.map(fe=>t.jsx("option",{value:fe.id,children:fe.name},fe.id))]})]})]})]},Z.id))})]})]}),t.jsxs("div",{className:`bg-white border rounded-xl overflow-hidden ${w==="ticker"?"border-black shadow-md":"border-gray-200"}`,children:[t.jsxs("button",{onClick:()=>le("ticker"),className:"w-full flex items-center justify-between p-4 bg-white",children:[t.jsx(bs,{title:"Бегущая строка",icon:_1,subtitle:"Акции и объявления"}),w==="ticker"?t.jsx(Ft,{className:"w-4 h-4"}):t.jsx(Mt,{className:"w-4 h-4 text-gray-400"})]}),w==="ticker"&&t.jsxs("div",{className:"p-4 border-t border-gray-100 bg-gray-50/50 space-y-4",children:[t.jsxs("div",{className:"flex items-center justify-between bg-white p-3 rounded border border-gray-200",children:[t.jsx("span",{className:"text-xs font-bold uppercase text-gray-500",children:"Показывать строку"}),t.jsx("input",{type:"checkbox",checked:P.show,onChange:Z=>pe({...P,show:Z.target.checked}),className:"rounded text-black focus:ring-black"})]}),t.jsxs("div",{className:"grid grid-cols-3 gap-3 mb-2",children:[t.jsxs("div",{children:[t.jsx(Oa,{children:"Скорость (сек)"}),t.jsx("input",{type:"number",value:P.speed,onChange:Z=>pe({...P,speed:parseInt(Z.target.value)||40}),className:"w-full text-xs border border-gray-300 rounded p-1.5 bg-white text-black"})]}),t.jsxs("div",{children:[t.jsx(Oa,{children:"Фон"}),t.jsxs("div",{className:"flex gap-2",children:[t.jsx("input",{type:"color",value:P.backgroundColor,onChange:Z=>pe({...P,backgroundColor:Z.target.value}),className:"w-8 h-8 p-0 border-0 rounded cursor-pointer"}),t.jsx("input",{value:P.backgroundColor,onChange:Z=>pe({...P,backgroundColor:Z.target.value}),className:"w-full text-xs border border-gray-300 rounded p-1.5 bg-white text-black font-mono"})]})]}),t.jsxs("div",{children:[t.jsx(Oa,{children:"Текст"}),t.jsxs("div",{className:"flex gap-2",children:[t.jsx("input",{type:"color",value:P.textColor,onChange:Z=>pe({...P,textColor:Z.target.value}),className:"w-8 h-8 p-0 border-0 rounded cursor-pointer"}),t.jsx("input",{value:P.textColor,onChange:Z=>pe({...P,textColor:Z.target.value}),className:"w-full text-xs border border-gray-300 rounded p-1.5 bg-white text-black font-mono"})]})]})]}),t.jsxs("button",{onClick:Je,className:"w-full py-2 bg-black text-white text-xs font-bold uppercase rounded hover:bg-[#ff3b30] flex items-center justify-center gap-2",children:[t.jsx(At,{className:"w-3 h-3"})," Добавить элемент"]}),t.jsx("div",{className:"space-y-2",children:P.items.map((Z,me)=>t.jsxs("div",{className:"bg-white p-3 rounded border border-gray-200 flex gap-2 items-center",children:[t.jsxs("div",{className:"flex-1 space-y-1",children:[t.jsx("input",{value:Z.text,onChange:fe=>Fe(me,{text:fe.target.value}),className:"w-full text-xs font-bold border border-gray-300 rounded p-1 bg-white text-black",placeholder:"Текст (жирный)"}),t.jsx("input",{value:Z.description||"",onChange:fe=>Fe(me,{description:fe.target.value}),className:"w-full text-xs border border-gray-300 rounded p-1 bg-white text-black",placeholder:"Подпись (мелкий текст)"}),t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx("input",{type:"checkbox",checked:Z.isBold,onChange:fe=>Fe(me,{isBold:fe.target.checked}),className:"rounded text-black focus:ring-black"}),t.jsx("span",{className:"text-[11px] text-gray-500",children:"Жирный текст"})]}),t.jsxs("select",{value:Z.icon,onChange:fe=>Fe(me,{icon:fe.target.value}),className:"w-full text-xs border border-gray-300 rounded p-1 bg-white text-black",children:[t.jsx("option",{value:"none",children:"Без иконки"}),t.jsx("option",{value:"truck",children:"Грузовик"}),t.jsx("option",{value:"shield",children:"Щит"}),t.jsx("option",{value:"zap",children:"Молния"}),t.jsx("option",{value:"star",children:"Звезда"}),t.jsx("option",{value:"globe",children:"Глобус"}),t.jsx("option",{value:"flame",children:"Огонь"})]})]}),t.jsx("button",{onClick:()=>gt(me),className:"text-gray-300 hover:text-red-500",children:t.jsx(xt,{className:"w-4 h-4"})})]}
3020,Z.id))})]})]}),t.jsxs("div",{className:`bg-white border rounded-xl overflow-hidden ${w==="footer"?"border-black shadow-md":"border-gray-200"}`,children:[t.jsxs("button",{onClick:()=>le("footer"),className:"w-full flex items-center justify-between p-4 bg-white",children:[t.jsx(bs,{title:"Футер и Соцсети",icon:iv}),w==="footer"?t.jsx(Ft,{className:"w-4 h-4"}):t.jsx(Mt,{className:"w-4 h-4 text-gray-400"})]}),w==="footer"&&t.jsxs("div",{className:"p-4 border-t border-gray-100 bg-gray-50/50 space-y-4",children:[t.jsx("h4",{className:"text-xs font-bold uppercase text-black mb-2",children:"Социальные сети"}),t.jsxs("div",{className:"space-y-2 mb-4",children:[H.map((Z,me)=>t.jsxs("div",{className:"flex gap-2 items-center bg-white p-2 rounded border border-gray-200",children:[t.jsxs("select",{value:Z.platform,onChange:fe=>Pe(me,{platform:fe.target.value}),className:"text-xs border border-gray-300 rounded p-1 bg-white text-black",children:[t.jsx("option",{value:"telegram",children:"Telegram"}),t.jsx("option",{value:"vk",children:"VK"}),t.jsx("option",{value:"youtube",children:"YouTube"}),t.jsx("option",{value:"discord",children:"Discord"}),t.jsx("option",{value:"twitter",children:"Twitter"}),t.jsx("option",{value:"instagram",children:"Instagram"})]}),t.jsx("input",{value:Z.url,onChange:fe=>Pe(me,{url:fe.target.value}),className:"flex-1 text-xs border border-gray-300 rounded p-1 bg-white text-blue-600",placeholder:"URL"}),t.jsx("button",{onClick:()=>Xt(me),className:"text-gray-300 hover:text-red-500",children:t.jsx(xt,{className:"w-3 h-3"})})]},Z.id)),t.jsx("button",{onClick:Ht,className:"text-xs font-bold text-blue-600 hover:underline flex items-center gap-1",children:"+ Добавить соцсеть"})]}),t.jsx("hr",{className:"border-gray-200 my-4"}),t.jsxs("div",{className:"space-y-2 mb-6",children:[t.jsx(Oa,{children:"Юридическая информация (в подвале)"}),t.jsx("textarea",{value:k.legalInfo||"",onChange:le=>R({...k,legalInfo:le.target.value}),className:"w-full text-xs border border-gray-300 rounded p-2 h-24 resize-none bg-white text-black font-medium",placeholder:"Например: ИНН, ОГРН, ссылки на правила..."}),t.jsx("p",{className:"text-[10px] text-gray-500",children:"Этот текст будет отображаться в самом низу сайта под годом. Поддерживает перенос строк."})]}),t.jsx("h4",{className:"text-xs font-bold uppercase text-black mb-2",children:"Колонки футера"}),t.jsxs("div",{className:"space-y-4",children:[W.map((Z,me)=>t.jsxs("div",{className:"bg-white p-3 rounded border border-gray-200",children:[t.jsxs("div",{className:"flex justify-between mb-2",children:[t.jsx("input",{value:Z.title,onChange:fe=>De(me,{title:fe.target.value}),className:"text-xs font-bold border border-gray-300 rounded p-1 bg-white text-black"}),t.jsx("button",{onClick:()=>ye(me),className:"text-gray-300 hover:text-red-500",children:t.jsx(jt,{className:"w-3 h-3"})})]}),t.jsxs("div",{className:"space-y-1 pl-2 border-l-2 border-gray-100",children:[Z.links.map((fe,Ae)=>t.jsxs("div",{className:"flex gap-2 items-center",children:[t.jsx("input",{value:fe.name,onChange:yt=>tt(me,Ae,{name:yt.target.value}),className:"w-1/3 text-xs border border-gray-200 rounded p-1 bg-white text-black",placeholder:"Название"}),t.jsx("input",{value:fe.url,onChange:yt=>tt(me,Ae,{url:yt.target.value}),className:"flex-1 text-xs border border-gray-200 rounded p-1 bg-white text-blue-600",placeholder:"Ссылка"}),t.jsx("button",{onClick:()=>tt(me,Ae,{isVisible:fe.isVisible===!1?!0:!1}),className:`text-xs ${fe.isVisible===!1?"opacity-30":"opacity-100"}`,children:fe.isVisible===!1?"🔒":"👁️"}),t.jsx("button",{onClick:()=>{if(Ae===0)return;const newCols=[...W];const links=[...newCols[me].links];[links[Ae],links[Ae-1]]=[links[Ae-1],links[Ae]];newCols[me]={...newCols[me],links:links};$(newCols)},className:"p-1 text-gray-300 hover:text-black disabled:opacity-10",disabled:Ae===0,children:t.jsx(vn,{className:"w-2.5 h-2.5"})}),t.jsx("button",{onClick:()=>
3020{if(Ae===Z.links.length-1)return;const newCols=[...W];const links=[...newCols[me].links];[links[Ae],links[Ae+1]]=[links[Ae+1],links[Ae]];newCols[me]={...newCols[me],links:links};$(newCols)},className:"p-1 text-gray-300 hover:text-black disabled:opacity-10",disabled:Ae===Z.links.length-1,children:t.jsx(yn,{className:"w-2.5 h-2.5"})}),t.jsx("button",{onClick:()=>Me(me,Ae),className:"text-gray-300 hover:text-red-500",children:t.jsx(xt,{className:"w-3 h-3"})})]},fe.id)),t.jsx("button",{onClick:()=>et(me),className:"text-[10px] font-bold text-blue-500 hover:underline",children:"+ Ссылка"})]})]},Z.id)),t.jsx("button",{onClick:se,className:"w-full py-2 bg-gray-200 text-black text-xs font-bold uppercase rounded hover:bg-gray-300",children:"Добавить колонку"})]})]})]})]})})]})]})},gj=({products:r,categories:o,onUpdateProducts:d,navigate:c})=>{const[h,m]=j.useState(""),[y,u]=j.useState(o.reduce((O,E)=>({...O,[E.id]:!0}),{}));j.useEffect(()=>{let O=!1;const E=r.map(_=>{if(!(_!=null&&_.variants)||_.variants.length===0)return _;let k=!1;const R=_.variants.map(D=>D.externalId||""?D:(k=!0,{...D,externalId:D.id}));return k?(O=!0,{..._,variants:R}):_});O&&(d(E),oe.success("Заполнили внешние коды (XML) у вариантов по их SKU",{duration:3e3}))},[]);const f=O=>{u(E=>({...E,[O]:!E[O]}))},x=(O,E,_)=>{const k=r.map(R=>R.id===O?{...R,[E]:_}:R);d(k)},N=(O,E,_,k)=>{const R=r.map(D=>{if(D.id===O&&D.variants){const te=D.variants.map($=>$.id===E?{...$,[_]:k}:$),W=te.reduce(($,H)=>$+H.stock,0);return{...D,variants:te,stock:W}}return D});d(R)},b=(O,E)=>O.options?Object.entries(E.combination).map(([_,k])=>{var te;const R=(te=O.options)==null?void 0:te.find(W=>W.id===_),D=R==null?void 0:R.values.find(W=>W.id===k);return`${R==null?void 0:R.name}: ${(D==null?void 0:D.name)||k}`}).join(" / "):E.id,C=O=>{const E=`/admin?edit=${encodeURIComponent(O)}`;c?c(E):window.location.href=E},g=r.filter(O=>O.name.toLowerCase().includes(h.toLowerCase())||O.id.toLowerCase().includes(h.toLowerCase()));return t.jsxs("div",{className:"space-y-6 animate-fade-in pb-20",children:[t.jsxs("div",{className:"bg-white p-6 rounded-xl border border-gray-200 shadow-sm flex flex-col md:flex-row justify-between items-center gap-4",children:[t.jsxs("div",{children:[t.jsxs("h2",{className:"text-xl font-black uppercase flex items-center gap-2",children:[t.jsx(ws,{className:"w-6 h-6 text-[#ff3b30]"})," Склад и Прайс-лист"]}),t.jsx("p",{className:"text-xs text-gray-500 mt-1",children:"Управление остатками и ценами товаров"})]}),t.jsxs("div",{className:"relative w-full md:w-96",children:[t.jsx("input",{type:"text",placeholder:"Поиск товара...",value:h,onChange:O=>m(O.target.value),className:"w-full pl-10 pr-4 py-2 bg-gray-50 border border-gray-300 rounded-lg text-sm text-black focus:ring-1 focus:ring-black focus:border-black"}),t.jsx(xa,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-400"})]})]}),o.map(O=>{const E=g.filter(k=>k.category===O.id);if(E.length===0&&h)return null;const _=y[O.id];return t.jsxs("div",{className:"bg-white border border-gray-200 rounded-xl overflow-hidden shadow-sm",children:[t.jsxs("div",{className:"bg-gray-50 p-4 flex items-center justify-between cursor-pointer hover:bg-gray-100 transition-colors",onClick:()=>f(O.id),children:[t.jsxs("div",{className:"flex items-center gap-3",children:[t.jsx("div",{className:"p-2 bg-white rounded border border-gray-200",children:t.jsx(gr,{className:"w-4 h-4 text-gray-600"})}),t.jsx("h3",{className:"font-bold text-lg uppercase text-black",children:O.name}),t.jsx("span",{className:"text-xs font-bold bg-black text-white px-2 py-0.5 rounded-full",children:E.length})]}),_?t.jsx(Ft,{className:"w-5 h-5 text-gray-400"}):t.jsx(Mt,{className:"w-5 h-5 text-gray-400"})]}),_&&t.jsx("div",{className:"overflow-x-auto",children:t.jsxs("table",{className:"w-full text-left border-collapse",children:[t.jsx("thead",{className:"bg-white border-b border-gray-200 text-xs font-bold uppercase text-gray-500 tracking-wider",children:t.jsxs("tr",{children:[t.jsx("th",{className:"p-4 w-[35%]",children:"Наименование"}),t.jsx("th",{className:"p-4 w-[15%] text-center",children:"Внешний код (XML)"}),t.jsx("th",{className:"p-4 w-[15%] text-center",children:"Остаток (Шт)"}),t.jsxs("th",{className:"p-4 w-[15%] text-center",children:["Цена продажи (",nt,")"]}),t.jsx("th",{className:"p-4 w-[10%] text-center",children:t.jsxs("div",{className:"flex items-center justify-center gap-1 group relative cursor-help",children:["Старая",t.jsx(kp,{className:"w-3 h-3 text-gray-400"}),t.jsx("div",{className:"absolute bottom-full mb-2 bg-black text-white text-[10px] p-2 rounded opacity-0 group-hover:opacity-100 transition-opacity w-40 pointer-events-none z-10",children:"Зачеркнутая цена. Если не заполнена, скидки нет."})]})}),t.jsx("th",{className:"p-4 w-[10%] text-center",children:"Статус"})]})}),t.jsxs("tbody",{className:"divide-y divide-gray-100 text-sm",children:[E.map(k=>{const R=k.variants&&k.variants.length>0;return t.jsxs(oo.Fragment,{children:[t.jsxs("tr",{className:`hover:bg-blue-50/30 transition-colors ${R?"bg-gray-50/50":"bg-white"}`,children:[t.jsx("td",{className:"p-4",children:t.jsxs("div",{className:"flex items-center gap-3",children:[t.jsx("button",{onClick:()=>C(k.id),className:"p-1.5 bg-gray-100 rounded text-gray-500 hover:text-blue-600 hover:bg-blue-50 transition-colors",title:"Посмотреть на сайте",children:t.jsx(xr,{className:"w-4 h-4"})}),t.jsxs("div",{className:"flex flex-col gap-1 flex-1",children:[t.jsx("input",{value:k.name,onChange:D=>x(k.id,"name",D.target.value),className:"font-bold text-black bg-white border border-gray-300 rounded px-2 py-1 
3020w-full focus:ring-1 focus:ring-blue-500 focus:border-blue-500"}),t.jsxs("span",{className:"text-[10px] text-gray-400 font-mono flex items-center gap-1",children:["ID: ",k.id,R&&t.jsx("span",{className:"text-blue-500 bg-blue-50 px-1 rounded ml-2",children:"Основной"})]})]})]})}),t.jsx("td",{className:"p-4 text-center",children:R?t.jsx("span",{className:"text-gray-400 text-xs",children:"—"}):t.jsx("input",{value:k.externalId||"",onChange:D=>x(k.id,"externalId",D.target.value),className:"w-full text-center font-mono text-xs bg-white border border-gray-300 rounded px-2 py-1 focus:ring-1 focus:ring-blue-500 text-black placeholder:text-gray-400",placeholder:"-"})}),t.jsx("td",{className:"p-4 text-center",children:R?t.jsxs("span",{className:"text-gray-500 font-mono text-xs bg-gray-200 px-2 py-1 rounded",children:["Всего: ",k.stock]}):t.jsx("input",{type:"number",value:k.stock,onChange:D=>x(k.id,"stock",parseInt(D.target.value)||0),className:"w-20 text-center font-bold bg-white border border-gray-300 rounded px-2 py-1 focus:ring-1 focus:ring-blue-500 text-black"})}),t.jsx("td",{className:"p-4 text-center",children:R?t.jsx("span",{className:"text-gray-400 text-xs",children:"—"}):t.jsx("input",{type:"number",value:k.price,onChange:D=>x(k.id,"price",parseFloat(D.target.value)||0),className:"w-24 text-center font-bold bg-white border border-gray-300 rounded px-2 py-1 focus:ring-1 focus:ring-blue-500 text-black"})}),t.jsx("td",{className:"p-4 text-center",children:R?t.jsx("span",{className:"text-gray-400 text-xs",children:"—"}):t.jsx("input",{type:"number",value:k.originalPrice||"",placeholder:"—",onChange:D=>x(k.id,"originalPrice",parseFloat(D.target.value)||0),className:"w-20 text-center text-gray-500 bg-white border border-gray-300 rounded px-2 py-1 focus:ring-1 focus:ring-blue-500 text-xs"})}),t.jsx("td",{className:"p-4 text-center",children:R?t.jsxs("span",{className:"text-xs font-bold uppercase text-blue-600 bg-blue-100 px-2 py-1 rounded border border-blue-200 flex items-center justify-center gap-1",children:[t.jsx(gr,{className:"w-3 h-3"})," Составной"]}):k.stock>0?t.jsxs("span",{className:"text-xs font-bold uppercase text-green-700 bg-green-100 px-2 py-1 rounded flex items-center justify-center gap-1",children:[t.jsx("div",{className:"w-1.5 h-1.5 rounded-full bg-green-500"})," В наличии"]}):t.jsxs("span",{className:"text-xs font-bold uppercase text-red-700 bg-red-100 px-2 py-1 rounded flex items-center justify-center gap-1",children:[t.jsx("div",{className:"w-1.5 h-1.5 rounded-full bg-red-500"})," Нет"]})})]}),R&&k.variants.map(D=>t.jsxs("tr",{className:"bg-white hover:bg-gray-50",children:[t.jsxs("td",{className:"p-4 pl-12 border-l-4 border-gray-200 relative",children:[t.jsx("div",{className:"absolute left-6 top-1/2 -translate-y-1/2 w-4 h-[1px] bg-gray-300"}),t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx("span",{className:"text-[10px] font-mono text-gray-400 select-all",children:D.id}),t.jsx("span",{className:"text-xs font-medium text-gray-600 uppercase bg-gray-100 px-2 py-0.5 rounded border border-gray-200",children:b(k,D)})]})]}),t.jsx("td",{className:"p-4 text-center",children:t.jsx("input",{value:D.externalId||D.id,onChange:te=>N(k.id,D.id,"externalId",te.target.value),onBlur:()=>{D.externalId||N(k.id,D.id,"externalId",D.id)},className:"w-full text-center font-mono text-xs bg-white border border-gray-300 rounded px-2 py-1 focus:ring-1 focus:ring-blue-500 text-black placeholder:text-gray-400",placeholder:"XML ID"})}),t.jsx("td",{className:"p-4 text-center",children:t.jsx("input",{type:"number",value:D.stock,onChange:te=>N(k.id,D.id,"stock",parseInt(te.target.value)||0),className:"w-20 text-center font-bold bg-white border border-gray-300 rounded px-2 py-1 text-sm focus:ring-1 focus:ring-blue-500 text-black"})}),t.jsx("td",{className:"p-4 text-center",children:t.jsx("input",{type:"number",value:D.price||k.price,onChange:te=>N(k.id,D.id,"price",parseFloat(te.target.value)||0),className:"w-24 text-center font-bold bg-white border border-gray-300 rounded px-2 py-1 text-sm focus:ring-1 focus:ring-blue-500 text-black"})}),t.jsx("td",{className:"p-4 text-center",children:t.jsx("div",{className:"relative group flex justify-center",children:t.jsx("input",{type:"number",value:D.originalPrice||"",placeholder:"—",onChange:te=>N(k.id,D.id,"originalPrice",parseFloat(te.target.value)||0),className:"w-20 text-center text-gray-500 bg-white border border-gray-200 rounded px-2 py-1 text-xs focus:ring-1 focus:ring-blue-500"})})}),t.jsx("td",{className:"p-4 text-center",children:D.stock>0?t.jsxs("span",{className:"inline-flex items-center gap-1 text-[10px] font-bold text-green-600 bg-green-50 px-2 py-1 rounded border border-green-100",children:[t.jsx("div",{className:"w-1.5 h-1.5 rounded-full bg-green-500"})," В наличии"]}):t.jsxs("span",{className:"inline-flex items-center gap-1 text-[10px] font-bold text-red-600 bg-red-50 px-2 py-1 rounded border border-red-100",children:[t.jsx("div",{className:"w-1.5 h-1.5 rounded-full bg-red-500"})," Нет"]})})]},D.id))]},k.id)}),E.length===0&&t.jsx("tr",{children:t.jsx("td",{colSpan:6,className:"p-8 text-center text-gray-400 italic",children:"Товары не найдены в этой категории"})})]})]})})]},O.id)})]})},bj=({categories:r,products:o,onUpdateCategories:d})=>{const[c,h]=j.useState(r.length>0?r[0].id:null),[m,y]=j.useState(null),u=r.find($=>
3020$.id===c),f=$=>{const H=new Set;return o.filter(J=>J.category===$).forEach(J=>{J.specs&&Object.keys(J.specs).forEach(Y=>H.add(Y))}),Array.from(H)},x=$=>{var J;return u?((J=u.filterSettings)==null?void 0:J.find(Y=>Y.key===$))||{key:$,isVisible:!0,groups:[]}:{key:$,isVisible:!0,groups:[]}},N=$=>{if(!u)return[];const H=x($),J=new Set;o.filter(U=>U.category===u.id).forEach(U=>{var P;const q=(P=U.specs)==null?void 0:P[$];q&&q.split(/[,/]/).map(pe=>pe.trim()).forEach(pe=>{pe&&J.add(pe)})});const G=[];return J.forEach(U=>{H.groups.some(P=>P.variations.some(pe=>pe.toLowerCase()===U.toLowerCase()))||G.push(U)}),G},b=$=>{if(!u)return;const H=r.map(J=>J.id===u.id?{...J,...$}:J);d(H)},C=$=>{if(!u)return;const H=[...u.filterSettings||[]],J=H.findIndex(Y=>Y.key===$.key);J>=0?H[J]=$:H.push($),b({filterSettings:H})},g=()=>{if(!u)return;const $=u.showFilters!==!1;b({showFilters:!$}),oe.success($?"Фильтры скрыты":"Фильтры включены")},O=$=>{const H=x($);C({...H,isVisible:!H.isVisible})},E=($,H)=>{if(!u)return;const J=f(u.id),Y=u.filterSettings||[];let G=[...Y,...J.filter(P=>!Y.find(pe=>pe.key===P)).map(P=>({key:P,isVisible:!0,groups:[]}))];const U=G.findIndex(P=>P.key===$);if(U===-1)return;const q=[...G];H==="up"&&U>0?[q[U],q[U-1]]=[q[U-1],q[U]]:H==="down"&&U<q.length-1&&([q[U],q[U+1]]=[q[U+1],q[U]]),b({filterSettings:q})},_=$=>{if(!u)return;const H=x($),J=o.filter(q=>q.category===u.id),Y=new Set;J.forEach(q=>{var pe;const P=(pe=q.specs)==null?void 0:pe[$];P&&P.split(/[,/]/).map(B=>B.trim()).forEach(B=>{B&&Y.add(B)})});const G=[...H.groups];let U=0;Y.forEach(q=>{G.some(pe=>pe.variations.some(B=>B.toLowerCase()===q.toLowerCase()))||(G.push({id:`grp-${Date.now()}-${Math.random()}`,display:q,variations:[q]}),U++)}),U>0?(C({...H,groups:G}),oe.success(`Добавлено ${U} новых значений`)):oe.success("Новых значений не найдено")},k=($,H,J)=>{const Y=x($),G=[...Y.groups];G[H]={...G[H],...J},C({...Y,groups:G})},R=($,H)=>{if(!confirm("Удалить это значение?"))return;const J=x($),Y=J.groups.filter((G,U)=>U!==H);C({...J,groups:Y})},D=$=>{const H=x($),J=[...H.groups,{id:`new-${Date.now()}`,display:"Новое значение",variations:[]}];C({...H,groups:J})},te=($,H,J)=>{const Y=x($),G=[...Y.groups];J==="up"&&H>0?[G[H],G[H-1]]=[G[H-1],G[H]]:J==="down"&&H<G.length-1&&([G[H],G[H+1]]=[G[H+1],G[H]]),C({...Y,groups:G})},W=()=>{if(!u)return[];const $=f(u.id),H=u.filterSettings||[];return[...H,...$.filter(Y=>!H.find(G=>G.key===Y)).map(Y=>({key:Y,isVisible:!0,groups:[]}))]};return t.jsxs("div",{className:"flex h-full bg-white rounded-lg overflow-hidden border border-gray-200 shadow-sm animate-fade-in",children:[t.jsxs("div",{className:"w-64 bg-gray-50 border-r border-gray-200 flex flex-col",children:[t.jsx("div",{className:"p-4 border-b border-gray-200 bg-white",children:t.jsx("h3",{className:"font-bold text-sm uppercase text-gray-500",children:"Категории"})}),t.jsx("div",{className:"flex-1 overflow-y-auto p-2 space-y-1",children:r.map($=>t.jsxs("button",{onClick:()=>{h($.id),y(null)},className:`w-full text-left px-4 py-3 rounded-lg text-sm font-medium transition-colors flex items-center justify-between ${c===$.id?"bg-black text-white shadow-md":"text-gray-700 hover:bg-gray-200"}`,children:[$.name,$.showFilters!==!1?t.jsx(eo,{className:"w-3 h-3"}):t.jsx(xt,{className:"w-3 h-3 opacity-50"})]},$.id))})]}),t.jsx("div",{className:"flex-1 flex flex-col min-w-0",children:u?t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"p-6 border-b border-gray-200 bg-white flex items-center justify-between",children:[t.jsxs("div",{children:[t.jsxs("h2",{className:"text-xl font-black uppercase text-black flex items-center gap-2",children:[t.jsx(pr,{className:"w-5 h-5 text-[#ff3b30]"}),u.name]}),t.jsx("p",{className:"text-xs text-gray-500 mt-1",children:"Настройка фильтров для этой категории"})]}),t.jsxs("div",{className:"flex items-center gap-3",children:[t.jsx("span",{className:"text-sm font-bold text-gray-700",children:"Фильтры на сайте:"}),t.jsx("button",{onClick:g,className:`relative inline-flex h-6 w-11 items-center rounded-full transition-colors ${u.showFilters!==!1?"bg-green-500":"bg-gray-300"}`,children:t.jsx("span",{className:`inline-block h-4 w-4 transform rounded-full bg-white transition-transform ${u.showFilters!==!1?"translate-x-6":"translate-x-1"}`})}),t.jsx("span",{className:"text-xs font-bold uppercase w-12",children:u.showFilters!==!1?"ВКЛ":"ВЫКЛ"})]})]}),t.jsxs("div",{className:"flex-1 overflow-y-auto p-6 bg-gray-50",children:[t.jsxs("div",{className:"bg-white rounded-xl border border-gray-200 shadow-sm overflow-hidden mb-6",children:[t.jsx("div",{className:"px-4 py-3 border-b border-gray-100 bg-gray-50 flex justify-between items-center",children:t.jsx("h3",{className:"text-xs font-bold uppercase text-gray-500",children:"Характеристики (Порядок отображения)"})}),t.jsxs("div",{className:"divide-y divide-gray-100",children:[W().map(($,H)=>t.jsxs("div",{className:`flex items-center p-3 hover:bg-gray-50 ${m===$.key?"bg-blue-50":""}`,children:[t.jsxs("div",{className:"flex flex-col gap-0.5 mr-3",children:[t.jsx("button",{onClick:()=>E($.key,"up"),className:"text-gray-400 hover:text-black p-0.5",children:t.jsx(vn,{className:"w-3 h-3"})}),t.jsx("button",{onClick:()=>E($.key,"down"),className:"text-gray-400 hover:text-black p-0.5",children:t.jsx(yn,{className:"w-3 h-3"})})]}),t.jsxs("div",{className:"flex-1 flex items-center gap-3",children:[t.jsx("button",{onClick:()=>O($.key),className:`p-1.5 rounded transition-colors ${$.isVisible?"text-green-600 bg-green-50":"text-red-400 bg-red-50 opacity-50"}`,title:$.isVisible?"Отображается":"Скрыто",children:$.isVisible?t.jsx(xr,{className:"w-4 h-4"}):t.jsx(ao,{className:"w-4 h-4"})}),t.jsx("span",{className:`text-sm font-bold ${$.isVisible?"text-black":"text-gray-400 line-through"}`,children:$.key}),$.groups.length>0&&t.jsxs("span",{className:"text-xs bg-gray-100 text-gray-500 px-2 py-0.5 rounded-full",children:[$.groups.length," значений"]}),N($.key).length>0&&t.jsxs("span",{className:"text-[10px] bg-red-100 text-red-600 px-2 py-0.5 rounded-full font-bold flex items-center gap-1 animate-pulse",children:[t.jsx(Ql,{className:"w-3 h-3"})," Нераспределенные"]})]}),t.jsxs("button",{onClick:()=>y(m===$.key?null:$.key),className:`px-3 py-1.5 text-xs font-bold uppercase rounded border transition-all flex items-center gap-2 ${m===$.key?"bg-blue-600 text-white border-blue-600 shadow-md":"bg-white text-gray-600 border-gray-200 hover:border-black hover:text-black"}`,children:[t.jsx(Ns,{className:"w-3 h-3"})," Значения"]})]},$.key)),W().length===0&&t.jsx("div",{className:"p-8 text-center text-gray-400 text-sm",children:"В этой категории пока нет характеристик. Добавьте их в товарах."})]})]}),m&&t.jsxs("div",{className:"bg-white rounded-xl border border-blue-200 shadow-lg overflow-hidden animate-fade-in-up",children:[t.jsxs("div",{className:"px-6 py-4 bg-blue-50 border-b border-blue-100 flex justify-between items-center",children:[t.jsxs("div",{children:[t.jsxs("h3",{className:"text-sm font-bold uppercase text-blue-900 flex items-center gap-2",children:[t.jsx(Ns,{className:"w-4 h-4"})," Редактирование значений: ",t.jsx("span",{className:"text-black",children:m})]}),t.jsx("p",{className:"text-xs text-blue-600 mt-1",children:"Объединяйте разные варианты написания в одну группу для удобства фильтрации."})]}),t.jsxs("button",{onClick:()=>_(m),className:"flex items-center gap-1 px-3 py-2 bg-white border border-blue-200 text-blue-700 rounded-lg text-xs font-bold uppercase hover:bg-blue-100 shadow-sm transition-all",children:[t.jsx(Ya,{className:"w-3 h-3"})," Сканировать новые"]})]}),m&&N(m).length>0&&t.jsxs("div",{className:"mx-6 mt-4 p-4 bg-red-50 border border-red-200 rounded-lg animate-fade-in",children:[t.jsxs("h4",{className:"text-xs font-bold text-red-700 uppercase mb-2 flex items-center gap-2",children:[t.jsx(Ql,{className:"w-4 h-4"})," Нераспределенные значения"]}),t.jsx("p",{className:"text-xs text-red-600 mb-3",children:"Эти значения найдены в товарах, но не привязаны ни к одной группе. На сайте они отображаются как отдельные фильтры."}),t.jsx("div",{className:"space-y-2",children:N(m).map($=>t.jsxs("div",{className:"flex items-center gap-2 bg-white p-2 rounded border border-red-100 shadow-sm",children:[t.jsx("span",{className:"text-xs font-bold bg-red-50 px-2 py-1 rounded text-red-800 border border-red-100 flex-1",children:$}),t.jsxs("div",{className:"flex items-center gap-2 bg-white rounded px-2 py-1 border border-gray-300 shadow-sm",children:[t.jsx("span",{className:"text-[10px] text-gray-700 uppercase font-bold",children:"Добавить в:"}),t.jsxs("select",{className:"text-xs border border-gray-300 rounded p-1 max-w-[150px] bg-white text-black font-bold focus:ring-1 focus:ring-black outline-none",onChange:H=>{if(H.target.value){const J=parseInt(H.target.value),Y=x(m).groups[J];k(m,J,{variations:[...Y.variations,$]}),oe.success(`Добавлено в "${Y.display}"`)}},value:"",children:[t.jsx("option",{value:"",children:"Выберите группу..."}),x(m).groups.map((H,J)=>t.jsx("option",{value:J,children:H.display}
3020,H.id))]})]}),t.jsx("span",{className:"text-gray-300",children:"|"}),t.jsx("button",{onClick:()=>{const H=x(m),J=[...H.groups,{id:`grp-${Date.now()}`,display:$,variations:[$]}];C({...H,groups:J}),oe.success("Создана новая группа")},className:"text-xs bg-black text-white px-3 py-1.5 rounded hover:bg-gray-800 font-bold uppercase shadow-sm",children:"Создать"})]},$))})]}),t.jsx("div",{className:"p-6",children:t.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[x(m).groups.map(($,H)=>t.jsxs("div",{className:"border border-gray-200 rounded-lg p-3 bg-gray-50 flex flex-col gap-2 relative group hover:border-blue-300 hover:shadow-sm transition-all",children:[t.jsxs("div",{className:"flex justify-between items-center",children:[t.jsxs("div",{className:"flex gap-1",children:[t.jsx("button",{onClick:()=>te(m,H,"up"),className:"text-gray-300 hover:text-black",children:t.jsx(vn,{className:"w-3 h-3"})}),t.jsx("button",{onClick:()=>te(m,H,"down"),className:"text-gray-300 hover:text-black",children:t.jsx(yn,{className:"w-3 h-3"})})]}),t.jsx("button",{onClick:()=>R(m,H),className:"text-gray-300 hover:text-red-500",children:t.jsx(xt,{className:"w-4 h-4"})})]}),t.jsxs("div",{children:[t.jsx("label",{className:"text-[10px] font-bold text-gray-400 uppercase mb-1 block",children:"Отображаемое имя"}),t.jsx("input",{value:$.display,onChange:J=>k(m,H,{display:J.target.value}),className:"w-full text-sm font-bold border border-gray-300 rounded p-1.5 bg-white focus:ring-1 focus:ring-blue-500 text-black"})]}),t.jsxs("div",{children:[t.jsx("label",{className:"text-[10px] font-bold text-gray-400 uppercase mb-1 block",children:"Подсказка (Tooltip)"}),t.jsx("input",{value:$.tooltip||"",onChange:J=>k(m,H,{tooltip:J.target.value}),className:"w-full text-xs border border-gray-200 rounded p-1.5 bg-white text-black",placeholder:"Описание для пользователя..."})]}),t.jsxs("div",{children:[t.jsx("label",{className:"text-[10px] font-bold text-gray-400 uppercase mb-1 block",children:"Варианты (исходные значения)"}),t.jsx("textarea",{value:$.variations.join(", "),onChange:J=>k(m,H,{variations:J.target.value.split(",").map(Y=>Y.trim())}),className:"w-full text-xs border border-gray-200 rounded p-1.5 bg-white text-gray-600 font-mono resize-y min-h-[40px]",placeholder:"Red, red, Красный..."})]})]},H)),t.jsxs("button",{onClick:()=>D(m),className:"border-2 border-dashed border-gray-300 rounded-lg flex flex-col items-center justify-center p-6 text-gray-400 hover:border-blue-400 hover:text-blue-500 hover:bg-blue-50 transition-all min-h-[150px]",children:[t.jsx(At,{className:"w-8 h-8 mb-2"}),t.jsx("span",{className:"text-xs font-bold uppercase",children:"Добавить значение"})]})]})})]})]})]}):t.jsxs("div",{className:"flex-1 flex flex-col items-center justify-center text-gray-400",children:[t.jsx(pr,{className:"w-16 h-16 mb-4 opacity-20"}),t.jsx("p",{children:"Выберите категорию слева для настройки фильтров."})]})})]})},Ld=({title:r,value:o,subValue:d,icon:c,colorClass:h})=>t.jsxs("div",{className:"bg-white p-6 rounded-xl border border-gray-200 shadow-sm flex items-start justify-between",children:[t.jsxs("div",{children:[t.jsx("p",{className:"text-xs font-bold text-gray-400 uppercase tracking-wider mb-1",children:r}),t.jsx("h3",{className:"text-2xl font-black text-black mb-1",children:o}),d&&t.jsx("p",{className:"text-xs text-gray-500 font-medium",children:d})]}),t.jsx("div",{className:`p-3 rounded-lg ${h}`,children:t.jsx(c,{className:"w-5 h-5"})})]}),yj=({products:r,settings:o,onUpdateSettings:d})=>{const[c,h]=j.useState([]);const[pv,Spv]=j.useState([]);j.useEffect(()=>{(async()=>{try{const res=await fetch("/api/get_analytics_stats.php",{headers:Yi()});const data=await res.json();if(data&&data.status==="success"){h(Array.isArray(data.searchTerms)?data.searchTerms:[]);Spv(Array.isArray(data.popularProducts)?data.popularProducts:[])}}catch(e){}})()},[]);const m=r.reduce((u,f)=>f.variants&&f.variants.length>0?u+f.variants.reduce((x,N)=>x+N.stock*(N.price||f.price),0):u+f.stock*f.price,0),y=r.filter(u=>u.variants&&u.variants.length>0?u.variants.every(f=>f.stock===0):u.stock===0).length;return t.jsxs("div",{className:"space-y-6 animate-fade-in pb-10",children:[(o&&o.yookassa&&(!o.yookassa.secretKey||!o.yookassa.webhookToken))&&t.jsxs("div",{className:"bg-red-50 border-2 border-red-500 text-red-700 rounded-xl p-4 flex items-center gap-3",children:[t.jsx(Ql,{className:"w-6 h-6 shrink-0"}),t.jsxs("div",{children:[t.jsx("p",{className:"font-bold text-sm uppercase",children:"Внимание: настройки ЮKassa не заполнены"}),t.jsx("p",{className:"text-xs",children:"Secret Key или Webhook Token пустые — онлайн-оплата не будет работать. Заполните их в разделе «Интеграции»."})]})]}),t.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[t.jsx(Ld,{title:"Товары в наличии",value:r.length,subValue:"Позиций в каталоге",icon:Cp,colorClass:"bg-blue-50 text-blue-600"}),t.jsx(Ld,{title:"Отсутствуют (Out of Stock)",value:y,subValue:"Требуют пополнения",icon:Ql,colorClass:"bg-red-50 text-red-600"})]}),t.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6",children:[t.jsxs("div",{className:"bg-white rounded-xl border border-gray-200 shadow-sm overflow-hidden flex flex-col",children:[t.jsxs("div",{className:"p-6 border-b border-gray-100 flex justify-between items-center",children:[t.jsx("h3",{className:"font-bold text-sm uppercase text-gray-800",children:"Популярные товары (просмотры, 7 дней)"}),t.jsx(xw,{className:"w-4 h-4 text-gray-400"})]}),t.jsx("div",{className:"overflow-x-auto flex-1",children:t.jsxs("table",{className:"w-full text-left",children:[t.jsx("thead",{className:"bg-gray-50 text-xs font-bold text-gray-500 uppercase",children:t.jsxs("tr",{children:[t.jsx("th",{className:"p-4 pl-6",children:"Товар"}),t.jsx("th",{className:"p-4 text-center",children:"Просмотры"}),t.jsx("th",{className:"p-4 pr-6 text-right",children:"Цена"})]})}),t.jsx("tbody",{className:"divide-y divide-gray-100 text-sm",children:(()=>{const list=pv.map(p=>({...p,product:r.find(x=>x.id===p.productId)})).filter(p=>p.product).slice(0,5);return list.length>0?list.map((p,f)=>t.jsxs("tr",{className:"hover:bg-gray-50",children:[t.jsxs("td",{className:"p-4 pl-6 font-bold text-black flex items-center gap-3",children:[t.jsxs("span",{className:"text-gray-300 font-mono text-xs w-4",children:["#",f+1]}),t.jsx("div",{className:"w-8 h-8 rounded bg-gray-100 border border-gray-200 overflow-hidden shrink-0",children:t.jsx("img",{src:p.product.image,className:"w-full h-full object-cover",alt:""})}),t.jsx("span",{className:"truncate max-w-[120px]",children:p.product.name})]}),t.jsx("td",{className:"p-4 text-center font-mono",children:p.count}),t.jsxs("td",{className:"p-4 pr-6 text-right font-mono font-bold",children:[p.product.price.toLocaleStr
3020ing()," ",nt]})]},p.productId)):t.jsx("tr",{children:t.jsx("td",{colSpan:3,className:"p-8 text-center text-gray-400 italic",children:"Нет данных за последние 7 дней"})})})()})]})})]}),t.jsxs("div",{className:"bg-white rounded-xl border border-gray-200 shadow-sm overflow-hidden flex flex-col",children:[t.jsxs("div",{className:"p-6 border-b border-gray-100 flex justify-between items-center",children:[t.jsx("h3",{className:"font-bold text-sm uppercase text-gray-800",children:"Поисковые запросы (7 дней)"}),t.jsx(xa,{className:"w-4 h-4 text-gray-400"})]}),t.jsx("div",{className:"overflow-x-auto flex-1",children:t.jsxs("table",{className:"w-full text-left",children:[t.jsx("thead",{className:"bg-gray-50 text-xs font-bold text-gray-500 uppercase",children:t.jsxs("tr",{children:[t.jsx("th",{className:"p-4 pl-6",children:"Запрос"}),t.jsx("th",{className:"p-4 pr-6 text-right",children:"Кол-во"})]})}),t.jsx("tbody",{className:"divide-y divide-gray-100 text-sm",children:c.length>0?c.map((u,f)=>t.jsxs("tr",{className:"hover:bg-gray-50",children:[t.jsxs("td",{className:"p-4 pl-6 font-bold text-black flex items-center gap-3",children:[t.jsx("span",{className:`font-mono text-xs w-5 h-5 flex items-center justify-center rounded ${f<3?"bg-black text-white":"bg-gray-100 text-gray-500"}`,children:f+1}),t.jsx("span",{className:"capitalize",children:u.term})]}),t.jsx("td",{className:"p-4 pr-6 text-right font-mono font-bold text-blue-600",children:u.count})]},f)):t.jsx("tr",{children:t.jsx("td",{colSpan:2,className:"p-8 text-center text-gray-400 italic",children:"Нет данных за последнюю неделю"})})})]})})]})]}),t.jsxs("div",{className:"bg-white rounded-xl border border-gray-200 shadow-sm overflow-hidden p-6",children:[t.jsxs("div",{className:"flex items-center gap-3 mb-4",children:[t.jsx("div",{className:"p-2 bg-yellow-100 text-yellow-600 rounded-lg",children:t.jsx(js,{className:"w-5 h-5"})}),t.jsxs("div",{children:[t.jsx("h3",{className:"font-bold text-black uppercase",children:"Яндекс.Метрика"}),t.jsx("p",{className:"text-xs text-gray-500",children:"Подключение внешней аналитики"})]})]}),t.jsxs("div",{className:"bg-gray-50 p-4 rounded-lg border border-gray-200 mb-4",children:[t.jsx("p",{className:"text-sm text-gray-600 mb-2",children:"Вставьте сюда код счетчика (HTML), полученный в личном кабинете Яндекс.Метрики. Он будет автоматически добавлен на все страницы сайта."}),t.jsx("textarea",{value:(o==null?void 0:o.yandexCounterHtml)||"",onChange:u=>d&&d({...o,yandexCounterHtml:u.target.value}),className:"w-full h-32 bg-white border border-gray-300 rounded-lg p-3 text-xs font-mono text-black focus:ring-1 focus:ring-black outline-none",placeholder:"<!-- Yandex.Metrika counter --> ..."})]})]})]})},Yi=()=>{const r=localStorage.getItem("vorotex_admin_token"),o=localStorage.getItem("vorotex_admin_csrf");return{...r?{"X-Admin-Token":r}:{},...o?{"X-CSRF-Token":o}:{}}},vj=({settings:r})=>{const[o,d]=j.useState([]),[c,h]=j.useState(!1),[m,y]=j.useState(""),[u,f]=j.useState(null),[x,N]=j.useState(!1),[b,C]=j.useState(!1),[g,O]=j.useState([]),E=(r==null?void 0:r.orderStatuses)||[],_=(r==null?void 0:r.deliveryMethods)||[],k=(r==null?void 0:r.paymentMethods)||[],R=async()=>{h(!0);try{const B=await fetch("/api/get_orders.php",{headers:Yi()}),z=B.headers.get("content-type")||"";if(!B.ok){if(z.includes("application/json")){const T=await B.json().catch(()=>null),A=T!=null&&T.message?String(T.message):`HTTP ${B.status}`,K=T!=null&&T.detail?`: ${String(T.detail)}`:"",w=T!=null&&T.requestId?` (id: ${String(T.requestId)})`:"";throw new Error(`${A}${K}${w}`)}throw new Error(`HTTP ${B.status}`)}if(!z.includes("application/json"))throw new Error("Not JSON");const v=await B.json();if(Array.isArray(v)){d(v);return}if((v==null?void 0:v.status)==="success"&&Array.isArray(v.orders)){d(v.orders);return}throw new Error((v==null?void 0:v.message)||"Bad payload")}catch(B){d([]),oe.error(`Не удалось загрузить заказы: ${(B==null?void 0:B.message)||"ошибка"}`)}finally{h(!1)}};j.useEffect(()=>{R()},[]);const D=B=>{f(JSON.parse(JSON.stringify(B))),N(!0),C(!1),O([])},te=()=>{f(null),N(!1),C(!1),O([])};j.useEffect(()=>{if(u){const B=u.items.reduce((v,T)=>v+T.price*T.quantity,0),z=B+(u.deliveryCost||0);(B!==u.itemsTotal||z!==u.total)&&f(v=>v?{...v,itemsTotal:B,total:z}:null)}},[u==null?void 0:u.items,u==null?void 0:u.deliveryCost]);const W=async()=>
3020{if(!u)return;const B=u.items.reduce((A,K)=>A+K.price*K.quantity,0),z=B+(u.deliveryCost||0),v={...u,itemsTotal:B,total:z},T=oe.loading(`Сохраняем заказ #${v.id}...`);try{const A=await fetch("/api/update_order.php",{method:"POST",headers:{"Content-Type":"application/json",...Yi()},body:JSON.stringify({...v,notifyCustomer:b})}),K=A.headers.get("content-type")||"";if(!A.ok)throw new Error(`HTTP ${A.status}`);if(!K.includes("application/json"))throw new Error("Not JSON");const w=await A.json();if(w.status!=="success")throw new Error(w.message||"Ошибка сервера");const V=o.map(M=>M.id===v.id?v:M);d(V),oe.success(w.email==="sent"?"Сохранено и письмо отправлено":"Сохранено",{id:T}),te()}catch(A){oe.error(`Ошибка сохранения: ${(A==null?void 0:A.message)||"ошибка"}`,{id:T})}},$=async B=>{if(confirm(`Вы уверены, что хотите удалить заказ #${B}?`))try{if((await fetch("/api/delete_order.php",{method:"POST",headers:{"Content-Type":"application/json",...Yi()},body:JSON.stringify({id:B})})).ok){const v=o.filter(T=>T.id!==B);d(v),oe.success(`Заказ #${B}
3020 удален`),(u==null?void 0:u.id)===B&&te();return}}catch{oe.error("Ошибка удаления (API недоступно)")}},H=(B,z,v)=>{if(!u)return;const T=[...u.items];T[B]={...T[B],[z]:v},f({...u,items:T})},J=B=>{if(!u||!confirm("Удалить этот товар?"))return;const z=u.items.filter((v,T)=>T!==B);f({...u,items:z})},Y=()=>{if(!u)return;const B={id:"custom-item",name:"Новый товар",price:0,quantity:1,variantId:"",image:""};f({...u,items:[...u.items,B]})},G=async B=>{const z=Number(B);if(!z){oe.error("Некорректный ID заказа");return}try{const v=await fetch(`/api/get_order_audit.php?orderId=${encodeURIComponent(String(z))}`,{headers:Yi()}),T=v.headers.get("content-type")||"";if(!v.ok)throw new Error(`HTTP ${v.status}`);if(!T.includes("application/json"))throw new Error("Not JSON");const A=await v.json();if(A.status==="success"){O(Array.isArray(A.items)?A.items:[]),oe.success("История загружена");return}throw new Error(A.message||"Ошибка")}catch(v){oe.error(`Не удалось загрузить историю: ${(v==null?void 0:v.message)||"ошибка"}`)}},U=B=>{const z=E.find(A=>A.id===B),v=z?z.color:"#999",T=z?z.label:B;return t.jsx("span",{className:"px-3 py-1 rounded-full text-[10px] font-bold uppercase flex items-center justify-center gap-1 text-white shadow-sm tracking-wide min-w-[80px] text-center whitespace-nowrap",style:{backgroundColor:v},children:T})},q=B=>{var z;return((z=_.find(v=>v.id===B))==null?void 0:z.name)||B},P=B=>{var z;return((z=k.find(v=>v.id===B))==null?void 0:z.name)||B},pe=o.filter(B=>{const z=B.id.toString(),v=B.customer.name.toLowerCase(),T=B.customer.email.toLowerCase(),A=(B.customer.phone||"").toLowerCase(),K=m.toLowerCase();return z.includes(K)||v.includes(K)||T.includes(K)||A.includes(K)});return t.jsxs("div",{className:"space-y-6 animate-fade-in pb-10 text-black",children:[t.jsxs("div",{className:"flex flex-col md:flex-row justify-between items-center gap-4 bg-white p-4 md:p-6 rounded-xl border border-gray-200 shadow-sm",children:[t.jsxs("div",{children:[t.jsxs("h2",{className:"text-lg md:text-xl font-black text-black uppercase flex items-center gap-2",children:[t.jsx(ws,{className:"w-6 h-6 text-[#ff3b30]"})," Заказы"]}),t.jsx("p",{className:"text-xs text-gray-500 mt-1",children:"Управление заказами"})]}),t.jsxs("div",{className:"flex gap-3 w-full md:w-auto",children:[t.jsxs("div",{className:"relative flex-1 md:w-64",children:[t.jsx("input",{type:"text",placeholder:"ID, Email или Имя...",value:m,onChange:B=>y(B.target.value),className:"w-full pl-9 pr-4 py-2 bg-gray-50 border border-gray-300 rounded-lg text-sm focus:ring-1 focus:ring-black outline-none text-black"}),t.jsx(xa,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-400"})]}),t.jsx("button",{onClick:R,className:"p-2 bg-gray-100 rounded-lg hover:bg-gray-200 transition-colors",children:t.jsx(Ya,{className:`w-5 h-5 text-black ${c?"animate-spin":""}`})})]})]}),!x&&t.jsx("div",{className:"space-y-4",children:pe.length===0?t.jsxs("div",{className:"text-center py-12 text-gray-400 bg-white rounded-xl border border-dashed border-gray-200",children:[t.jsx(Jt,{className:"w-12 h-12 mx-auto mb-3 opacity-20"}),t.jsx("p",{children:"Заказов нет"})]}):pe.map(B=>t.jsx("div",{className:"bg-white border border-gray-200 rounded-xl overflow-hidden hover:border-gray-400 transition-all group shadow-sm hover:shadow-md relative",children:t.jsxs("div",{className:"p-4 flex flex-col md:flex-row items-start md:items-center gap-4 cursor-pointer",onClick:()=>D(B),children:[t.jsxs("div",{className:"flex items-center gap-3 w-full md:w-auto min-w-[150px]",children:[t.jsxs("div",{className:"w-12 h-12 bg-black text-white rounded-lg flex flex-col items-center justify-center font-bold shadow-md",children:[t.jsx("span",{className:"text-[9px] opacity-60 uppercase font-mono",children:"ORD"}),t.jsx("span",{className:"text-sm leading-none",children:B.id})]}),t.jsxs("div",{children:[t.jsx("div",{className:"text-xs font-bold text-gray-600",children:new Date(B.date).toLocaleDateString()}),t.jsx("div",{className:"text-[10px] text-gray-400 font-mono",children:new Date(B.date).toLocaleTimeString()})]})]}),t.jsxs("div",{className:"flex-1 grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4 w-full items-center",children:[t.jsxs("div",{children:[t.jsx("h4",{className:"font-bold text-sm text-black truncate",children:B.customer.name}),t.jsx("div",{className:"text-xs text-gray-500 truncate",children:B.customer.email})]}),t.jsxs("div",{className:"text-xs text-gray-600 flex flex-col justify-center gap-1",children:[t.jsxs("div",{className:"flex items-center gap-1 truncate",children:[t.jsx(Pa,{className:"w-3 h-3"})," ",q(B.delivery)]}),t.jsxs("div",{className:"flex items-center gap-1 truncate",children:[t.jsx(po,{className:"w-3 h-3"})," ",P(B.payment)]})]}),t.jsxs("div",{className:"text-left md:text-right",children:[t.jsxs("span",{className:"font-black text-lg text-black block",children:[B.total.toLocaleStr
3020ing()," ",nt]}),t.jsxs("span",{className:"text-xs text-gray-400",children:[B.items.length," товаров"]})]})]}),t.jsxs("div",{className:"flex flex-col sm:flex-row items-start sm:items-center justify-between md:justify-end gap-3 w-full md:w-auto mt-4 md:mt-0 pt-4 md:pt-0 border-t md:border-t-0 border-gray-100 relative z-10",children:[t.jsx("div",{className:"flex-1 md:flex-none text-left sm:text-right flex justify-start sm:justify-end",children:U(B.status)}),t.jsx("div",{className:"h-8 w-px bg-gray-200 hidden md:block mx-1"}),t.jsx("button",{onClick:z=>{z.stopPropagation(),$(B.id)},className:"group/del p-2 rounded-lg text-gray-400 hover:text-red-600 hover:bg-red-50 border border-transparent hover:border-red-200 transition-all duration-200 flex-shrink-0",title:"Удалить заказ",children:t.jsx(jt,{className:"w-5 h-5 group-hover/del:scale-110 transition-transform"})})]})]})},B.id))}),x&&u&&t.jsxs("div",{className:"bg-white border border-gray-200 rounded-xl shadow-xl animate-fade-in",children:[t.jsxs("div",{className:"p-4 md:p-6 border-b border-gray-200 flex flex-col sm:flex-row justify-between items-start sm:items-center gap-3 bg-gray-50 rounded-t-xl sticky top-0 z-10",children:[t.jsxs("div",{className:"flex items-start sm:items-center gap-3",children:[t.jsx("button",{onClick:te,className:"p-2 hover:bg-white rounded-full transition-colors text-gray-500 hover:text-black",children:t.jsx(Ft,{className:"w-6 h-6 rotate-270"})}),t.jsx("div",{children:t.jsxs("h2",{className:"text-xl md:text-2xl font-black uppercase text-black flex items-center gap-2 flex-wrap",children:["Заказ #",u.id,t.jsx("span",{className:"text-xs font-normal text-gray-500 bg-white border px-2 py-1 rounded",children:new Date(u.date).toLocaleString()})]})})]}),t.jsxs("div",{className:"flex flex-wrap gap-2 w-full sm:w-auto",children:[t.jsxs("button",{onClick:()=>$(u.id),className:"px-4 py-2 bg-red-50 text-red-600 border border-red-100 font-bold uppercase rounded hover:bg-red-100 transition-colors flex items-center gap-2 text-xs justify-center",children:[t.jsx(jt,{className:"w-4 h-4"})," Удалить"]}),t.jsxs("button",{onClick:()=>G(u.id),className:"px-4 py-2 bg-white border border-blue-200 text-blue-600 font-bold uppercase rounded hover:bg-blue-50 transition-colors flex items-center gap-2 text-xs justify-center",children:[t.jsx(Ex,{className:"w-4 h-4"})," История"]}),t.jsxs("button",{onClick:W,className:"px-6 py-2 bg-green-600 text-white font-bold uppercase rounded hover:bg-green-700 transition-colors flex items-center gap-2 shadow-lg text-xs justify-center",children:[t.jsx(Tn,{className:"w-4 h-4"})," Сохранить"]})]})]}),t.jsxs("div",{className:"p-4 md:p-6 grid grid-cols-1 lg:grid-cols-3 gap-6 md:gap-8",children:[t.jsxs("div",{className:"space-y-6",children:[t.jsxs("div",{className:"bg-blue-50 p-5 rounded-xl border border-blue-100 shadow-sm",children:[t.jsxs("h3",{className:"font-bold text-xs uppercase text-blue-900 mb-3 flex items-center gap-2",children:[t.jsx(Ya,{className:"w-4 h-4"})," Статус выполнения"]}),t.jsxs("div",{className:"space-y-3",children:[t.jsxs("div",{children:[t.jsx("label",{className:"text-[10px] font-bold text-blue-800 uppercase block mb-1.5",children:"Статус заказа"}),t.jsx("select",{value:u.status,onChange:B=>f({...u,status:B.target.value}),className:"w-full p-2.5 bg-white border border-blue-200 rounded text-sm font-bold text-black focus:ring-2 focus:ring-blue-500 outline-none cursor-pointer",children:E.map(B=>t.jsx("option",{value:B.id,children:B.label},B.id))})]}),t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx("input",{id:"notifyCustomer",type:"checkbox",checked:b,onChange:B=>C(B.target.checked),className:"rounded text-blue-600 focus:ring-blue-500"}),t.jsx("label",{htmlFor:"notifyCustomer",className:"text-xs text-blue-800",children:"Уведомить клиента по email"})]}),t.jsxs("div",{children:[t.jsx("label",{className:"text-[10px] font-bold text-blue-800 uppercase block mb-1.5",children:"Трек-номер (Отслеживание)"}),t.jsxs("div",{className:"relative",children:[t.jsx(Pa,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-400"}),t.jsx("input",{value:u.trackingNumber||"",onChange:B=>f({...u,trackingNumber:B.target.value}),placeholder:"Например: 1435667890",className:"w-full pl-10 p-2.5 bg-white border border-blue-200 rounded text-sm font-mono text-black focus:ring-2 focus:ring-blue-500 outline-none"})]})]})]})]}),t.jsxs("div",{className:"bg-white border border-gray-200 rounded-xl p-5 shadow-sm",children:[t.jsxs("h3",{className:"font-bold text-xs uppercase text-gray-500 mb-4 flex items-center gap-2",children:[t.jsx(jp,{className:"w-4 h-4"})," Логистика и Оплата"]}),t.jsxs("div",{className:"space-y-4",children:[t.jsxs("div",{children:[t.jsx("label",{className:"text-[10px] font-bold text-gray-400 uppercase block mb-1.5",children:"Способ Доставки"}),t.jsx("select",{value:u.delivery,onChange:B=>f({...u,delivery:B.target.value}),className:"w-full p-2 border border-gray-300 rounded text-sm text-black bg-gray-50",children:_.map(B=>t.jsx("option",{value:B.id,children:B.name},B.id))})]}),t.jsxs("div",{children:[t.jsx("label",{className:"text-[10px] font-bold text-gray-400 uppercase block mb-1.5",children:"Способ Оплаты"}),t.jsx("select",{value:u.payment,onChange:B=>f({...u,payment:B.target.value}),className:"w-full p-2 border border-gray-300 rounded text-sm text-black bg-gray-50",children:k.map(B=>t.jsx("option",{value:B.id,children:B.name},B.id))})]}),t.jsxs("div",{children:[t.jsx("label",{className:"text-[10px] font-bold text-gray-400 uppercase block mb-1.5",children:"Стоимость доставки"}),t.jsxs("div",{className:"relative",children:[t.jsx("span",{className:"absolute left-3 top-1/2 -translate-y-1/2 text-gray-500 font-bold text-xs",children:nt}),t.jsx("input",{type:"number",value:u.deliveryCost,onChange:B=>f({...u,deliveryCost:parseFloat(B.target.value)||0}),className:"w-full pl-8 p-2 border border-gray-300 rounded text-sm font-bold text-black bg-white focus:ring-1 focus:ring-black"})]})]})]})]}),t.jsxs("div",{className:"bg-white border border-gray-200 rounded-xl p-5 shadow-sm",children:[t.jsxs("h3",{className:"font-bold text-sm uppercase mb-4 flex items-center gap-2",children:[t.jsx(Jl,{className:"w-4 h-4"})," Клиент"]}),t.jsxs("div",{className:"space-y-3",children:[t.jsxs("div",{children:[t.jsx("label",{className:"text-[10px] uppercase text-gray-400 font-bold",children:"Имя"}),t.jsx("input",{value:u.customer.name,onChange:B=>f({...u,customer:{...u.customer,name:B.target.value}}),className:"w-full border-b border-gray-200 py-1 text-sm text-black bg-transparent focus:border-black outline-none"})]}),t.jsxs("div",{children:[t.jsx("label",{className:"text-[10px] uppercase text-gray-400 font-bold",children:"Телефон"}),t.jsx("input",{value:u.customer.phone,onChange:B=>f({...u,customer:{...u.customer,phone:B.target.value}}),className:"w-full border-b border-gray-200 py-1 text-sm text-black bg-transparent focus:border-black outline-none"})]}),t.jsxs("div",{children:[t.jsx("label",{className:"text-[10px] uppercase text-gray-400 font-bold",children:"Email"}),t.jsx("input",{value:u.customer.email,onChange:B=>f({...u,customer:{...u.customer,email:B.target.value}}),className:"w-full border-b border-gray-200 py-1 text-sm text-black bg-transparent focus:border-black outline-none"})]}),t.jsxs("div",{children:[t.jsx("label",{className:"text-[10px] uppercase text-gray-400 font-bold",children:"Приоритетный способ связи"}),t.jsx("div",{className:"w-full py-1 text-sm font-bold text-black",children:(u.customer.communicationMethod||"—")})]}),t.jsxs("div",{className:"pt-2",children:[t.jsx("label",{className:"text-[10px] uppercase text-gray-400 font-bold block mb-1",children:"Адрес доставки"}),t.jsx("textarea",{value:u.customer.address,onChange:B=>f({...u,customer:{...u.customer,address:B.target.value}}),className:"w-full border border-gray-200 rounded p-2 text-sm text-black bg-gray-50 h-20 resize-none focus:border-black outline-none"})]})]})]}),t.jsxs("div",{className:"border border-yellow-200 bg-yellow-50 rounded-xl p-5",children:[t.jsxs("h3",{className:"font-bold text-sm uppercase mb-2 flex items-center gap-2 text-yellow-800",children:[t.jsx(lw,{className:"w-4 h-4"})," Заметки (Внутренние)"]}),t.jsx("textarea",{value:u.adminNotes||"",onChange:B=>f({...u,adminNotes:B.target.value}),className:"w-full h-24 bg-white border border-yellow-200 rounded p-2 text-sm text-black resize-none focus:ring-1 focus:ring-yellow-500 outline-none",placeholder:"Комментарий менеджера..."})]}),g.length>0&&t.jsxs("div",{className:"bg-white border border-gray-200 rounded-xl p-5 shadow-sm",children:[t.jsxs("h3",{className:"font-bold text-xs uppercase text-gray-500 mb-3 flex items-center gap-2",children:[t.jsx(Ex,{className:"w-4 h-4"})," История изменений"]}),t.jsx("div",{className:"space-y-2",children:g.slice(0,20).map(B=>t.jsxs("div",{className:"text-xs text-gray-600 flex items-center justify-between gap-3 border-b border-gray-100 pb-2 last:border-none last:pb-0",children:[t.jsxs("div",{className:"min-w-0",children:[t.jsx("div",{className:"font-bold text-black truncate",children:B.action==="status_change"?`${B.old_status} → ${B.new_status}`:B.action}),t.jsx("div",{className:"text-[10px] text-gray-400 truncate",children:B.changed_by||""})]}),t.jsx("div",{className:"text-[10px] text-gray-400 flex-shrink-0",children:B.created_at?new Date(B.created_at).toLocaleStr
3020ing():""})]},B.id))})]})]}),t.jsx("div",{className:"lg:col-span-2 flex flex-col h-full",children:t.jsxs("div",{className:"bg-white border border-gray-200 rounded-xl flex-1 flex flex-col overflow-hidden shadow-sm",children:[t.jsxs("div",{className:"p-4 border-b border-gray-200 flex flex-col sm:flex-row gap-3 sm:gap-0 sm:justify-between sm:items-center bg-gray-50",children:[t.jsxs("h3",{className:"font-bold text-sm uppercase flex items-center gap-2",children:[t.jsx(Jt,{className:"w-4 h-4"})," Состав заказа"]}),t.jsxs("button",{onClick:Y,className:"text-xs bg-black text-white px-3 py-1.5 rounded flex items-center gap-1 hover:bg-gray-800 transition-colors justify-center w-full sm:w-auto",children:[t.jsx(At,{className:"w-3 h-3"})," Добавить позицию"]})]}),t.jsx("div",{className:"flex-1 overflow-y-auto p-4 space-y-3 bg-gray-50/30 min-h-[300px]",children:u.items.map((B,z)=>t.jsxs("div",{className:"bg-white border border-gray-200 rounded-lg p-3 flex flex-col md:flex-row gap-4 items-start md:items-center shadow-sm relative group hover:border-gray-400 transition-colors",children:[t.jsx("div",{className:"w-16 h-16 bg-gray-100 rounded border border-gray-100 flex-shrink-0 overflow-hidden",children:B.image?t.jsx("img",{src:B.image,className:"w-full h-full object-contain"}):t.jsx("div",{className:"w-full h-full flex items-center justify-center text-gray-300",children:t.jsx(Jt,{className:"w-6 h-6"})})}),t.jsxs("div",{className:"flex-1 min-w-0 grid grid-cols-1 gap-1",children:[t.jsx("input",{value:B.name,onChange:v=>H(z,"name",v.target.value),className:"font-bold text-sm text-black border-b border-transparent hover:border-gray-300 focus:border-black outline-none bg-transparent truncate w-full",placeholder:"Название товара"}),t.jsx("div",{className:"flex flex-wrap gap-2 text-xs",children:B.selectedOptions&&Object.entries(B.selectedOptions).map(([v,T])=>t.jsxs("span",{className:"bg-blue-50 text-blue-700 px-2 py-0.5 rounded border border-blue-100",children:[v,": ",T]},v))}),t.jsx("div",{className:"text-[10px] text-gray-400 font-mono",children:B.id})]}),t.jsxs("div",{className:"flex flex-col sm:flex-row items-start sm:items-center gap-3 sm:gap-4 w-full sm:w-auto",children:[t.jsxs("div",{className:"flex items-center border border-gray-200 rounded-lg overflow-hidden bg-white",children:[t.jsx("button",{onClick:()=>H(z,"quantity",Math.max(1,B.quantity-1)),className:"px-2 py-1 hover:bg-gray-100 text-black font-bold",children:"-"}),t.jsx("input",{type:"number",value:B.quantity,onChange:v=>H(z,"quantity",parseInt(v.target.value)||1),className:"w-10 text-center text-sm font-bold outline-none text-black bg-white"}),t.jsx("button",{onClick:()=>H(z,"quantity",B.quantity+1),className:"px-2 py-1 hover:bg-gray-100 text-black font-bold",children:"+"})]}),t.jsxs("div",{className:"relative w-full sm:w-24",children:[t.jsx("input",{type:"number",value:B.price,onChange:v=>H(z,"price",parseFloat(v.target.value)||0),className:"w-full text-left sm:text-right font-black text-lg text-black border-b border-transparent hover:border-gray-300 focus:border-black outline-none bg-transparent"}),t.jsx("span",{className:"absolute right-full top-1/2 -translate-y-1/2 text-xs text-gray-400 mr-1",children:nt})]})]}),t.jsx("button",{onClick:()=>J(z),className:"text-gray-300 hover:text-red-500 p-2 rounded-full hover:bg-red-50 transition-colors",children:t.jsx(jt,{className:"w-4 h-4"})})]},z))}),t.jsx("div",{className:"p-6 border-t border-gray-200 bg-white",children:t.jsxs("div",{className:"flex flex-col gap-2 max-w-xs ml-auto",children:[t.jsxs("div",{className:"flex justify-between text-sm text-gray-500",children:[t.jsx("span",{children:"Сумма товаров:"}),t.jsxs("span",{children:[u.itemsTotal.toLocaleString()," ",nt]})]}),t.jsxs("div",{className:"flex justify-between text-sm text-gray-500",children:[t.jsx("span",{children:"Доставка:"}),t.jsxs("span",{children:[u.deliveryCost.toLocaleString()," ",nt]})]}),t.jsxs("div",{className:"flex justify-between items-end border-t border-gray-100 pt-4 mt-2",children:[t.jsx("span",{className:"font-bold text-xl uppercase text-black",children:"Итого"}),t.jsxs("span",{className:"font-black text-3xl text-[#ff3b30]",children:[u.total.toLocaleStr
3020ing()," ",nt]})]})]})})]})})]})]})]})},cr=({children:r})=>t.jsx("label",{className:"text-[10px] font-bold text-gray-500 uppercase block mb-1.5",children:r}),wj=({settings:r,onUpdate:o})=>{const[d,c]=j.useState(null),[h,m]=j.useState(null),y=()=>{const g={id:`pay-${Date.now()}`,name:"Новый способ оплаты",description:"",enabled:!0,discount:{enabled:!1,type:"percent",value:0,promoText:""}};o({...r,paymentMethods:[g,...r.paymentMethods||[]]}),m(g.id)},u=(g,O)=>{const E=(r.paymentMethods||[]).map(_=>_.id===g?{..._,...O}:_);o({...r,paymentMethods:E})},f=g=>{if(confirm("Удалить этот способ оплаты? Он исчезнет из всех доставок.")){const O=(r.paymentMethods||[]).filter(_=>_.id!==g),E=(r.deliveryMethods||[]).map(_=>({..._,allowedPaymentIds:_.allowedPaymentIds.filter(k=>k!==g)}));o({...r,paymentMethods:O,deliveryMethods:E}),h===g&&m(null)}},x=()=>{const g=(r.paymentMethods||[]).map(E=>E.id),O={id:`del-${Date.now()}`,name:"Новый способ доставки",type:"address",price:0,description:"",enabled:!0,allowedPaymentIds:g};o({...r,deliveryMethods:[O,...r.deliveryMethods||[]]}),c(O.id)},N=(g,O)=>{const E=(r.deliveryMethods||[]).map(_=>_.id===g?{..._,...O}:_);o({...r,deliveryMethods:E})},b=g=>{if(confirm("Удалить этот способ доставки?")){const O=(r.deliveryMethods||[]).filter(E=>E.id!==g);o({...r,deliveryMethods:O}),d===g&&c(null)}},C=(g,O)=>{const E=r.deliveryMethods.find(R=>R.id===g);if(!E)return;const _=E.allowedPaymentIds||[],k=_.includes(O)?_.filter(R=>R!==O):[..._,O];N(g,{allowedPaymentIds:k})};const S=r.yookassa||{},A=g=>o({...r,yookassa:{...S,...g}}),vxCdekS=r.cdek||{},vxCdekSet=g=>o({...r,cdek:{...vxCdekS,...g}});return t.jsxs("div",{className:"space-y-8 animate-fade-in pb-20",children:[t.jsxs("div",{className:"bg-white p-6 rounded-xl shadow-sm border border-gray-200",children:[t.jsxs("div",{className:"flex items-center justify-between mb-6 pb-4 border-b border-gray-100",children:[t.jsxs("div",{className:"flex items-center gap-3",children:[t.jsx("div",{className:"p-2 bg-blue-50 text-blue-600 rounded-lg",children:t.jsx(po,{className:"w-5 h-5"})}),t.jsxs("div",{children:[t.jsx("h3",{className:"text-lg font-bold text-black uppercase",children:"Способы Оплаты"}),t.jsx("p",{className:"text-xs text-gray-500",children:"Настройте варианты приема платежей"})]})]}),t.jsxs("button",{onClick:y,className:"flex items-center gap-2 bg-black text-white px-4 py-2 rounded-lg text-xs font-bold uppercase hover:bg-gray-800 transition-colors",children:[t.jsx(At,{className:"w-3 h-3"})," Добавить"]})]}),t.jsx("div",{className:"space-y-4",children:(r.paymentMethods||[]).map(g=>t.jsxs("div",{className:`border rounded-xl p-4 transition-all ${h===g.id?"border-blue-500 bg-blue-50/50 shadow-md":"border-gray-200 bg-white"}`,children:[t.jsxs("div",{className:"flex items-center justify-between",children:[t.jsxs("div",{className:"flex items-center gap-3",children:[t.jsx("div",{className:`w-3 h-3 rounded-full ${g.enabled?"bg-green-500":"bg-gray-300"}`}),t.jsx("span",{className:"font-bold text-sm text-black",children:g.name})]}),t.jsxs("div",{className:"flex gap-2",children:[t.jsx("button",{onClick:()=>m(h===g.id?null:g.id),className:"p-2 text-gray-500 hover:text-black hover:bg-gray-100 rounded-lg",children:t.jsx(Ns,{className:"w-4 h-4"})}),t.jsx("button",{onClick:()=>f(g.id),className:"p-2 text-gray-300 hover:text-red-500 hover:bg-red-50 rounded-lg",children:t.jsx(jt,{className:"w-4 h-4"})})]})]}),h===g.id&&t.jsxs("div",{className:"mt-4 pt-4 border-t border-gray-200/50 grid grid-cols-1 md:grid-cols-2 gap-4 animate-fade-in",children:[t.jsxs("div",{className:"md:col-span-2 flex items-center justify-between bg-white p-3 rounded border border-gray-200",children:[t.jsx("span",{className:"text-xs font-bold uppercase text-gray-500",children:"Активность"}),t.jsxs("label",{className:"relative inline-flex items-center cursor-pointer",children:[t.jsx("input",{type:"checkbox",checked:g.enabled,onChange:O=>u(g.id,{enabled:O.target.checked}),className:"sr-only peer"}),t.jsx("div",{className:"w-9 h-5 bg-gray-200 peer-focus:outline-none rounded-full peer peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-4 after:w-4 after:transition-all peer-checked:bg-green-500"})]})]}),t.jsxs("div",{children:[t.jsx(cr,{children:"Название"}),t.jsx("input",{value:g.name,onChange:O=>u(g.id,{name:O.target.value}),className:"w-full text-sm border border-gray-300 rounded p-2 text-black bg-white focus:ring-1 focus:ring-black"})]}),t.jsxs("div",{children:[t.jsx(cr,{children:"Описание (для клиента)"}
3020),t.jsx("input",{value:g.description||"",onChange:O=>u(g.id,{description:O.target.value}),className:"w-full text-sm border border-gray-300 rounded p-2 text-black bg-white focus:ring-1 focus:ring-black",placeholder:"Например: Visa/Mastercard"})]}),t.jsxs("div",{children:[t.jsx(cr,{children:"Скидка (включить)"}),t.jsx("input",{type:"checkbox",checked:!!(g.discount&&g.discount.enabled),onChange:O=>{const E=g.discount||{enabled:!1,type:"percent",value:0,promoText:""};u(g.id,{discount:{...E,enabled:O.target.checked}})},className:"h-4 w-4"})]}),t.jsxs("div",{children:[t.jsx(cr,{children:"Скидка (тип)"}),t.jsxs("select",{value:(g.discount&&g.discount.type)||"percent",onChange:O=>{const E=g.discount||{enabled:!1,type:"percent",value:0,promoText:""};u(g.id,{discount:{...E,type:O.target.value}})},className:"w-full text-sm border border-gray-300 rounded p-2 text-black bg-white focus:ring-1 focus:ring-black",children:[t.jsx("option",{value:"percent",children:"Процент (%)"}),t.jsx("option",{value:"amount",children:"Сумма (₽)"})]})]}),t.jsxs("div",{children:[t.jsx(cr,{children:"Скидка (значение)"}),t.jsx("input",{type:"number",value:Number((g.discount&&g.discount.value)||0),onChange:O=>{const raw=Number(O.target.value||0);const E=g.discount||{enabled:!1,type:"percent",value:0,promoText:""};const v=E.type=="percent"?Math.min(100,Math.max(0,raw)):Math.max(0,raw);u(g.id,{discount:{...E,value:v}})},className:"w-full text-sm border border-gray-300 rounded p-2 text-black bg-white focus:ring-1 focus:ring-black"})]}),t.jsxs("div",{children:[t.jsx(cr,{children:"Текст для покупателя"}),t.jsx("input",{value:(g.discount&&g.discount.promoText)||"",onChange:O=>{const E=g.discount||{enabled:!1,type:"percent",value:0,promoText:""};u(g.id,{discount:{...E,promoText:O.target.value}})},className:"w-full text-sm border border-gray-300 rounded p-2 text-black bg-white focus:ring-1 focus:ring-black",placeholder:"НАПРИМЕР: -3% ПРИ ОПЛАТЕ КАРТОЙ"})]})]})]},g.id))})]}),t.jsxs("div",{className:"bg-white p-6 rounded-xl shadow-sm border border-gray-200",children:[t.jsxs("div",{className:"flex items-center justify-between mb-6 pb-4 border-b border-gray-100",children:[t.jsxs("div",{className:"flex items-center gap-3",children:[t.jsx("div",{className:"p-2 bg-red-50 text-red-600 rounded-lg flex items-center justify-center w-9 h-9",children:"₽"}),t.jsxs("div",{children:[t.jsx("h3",{className:"text-lg font-bold text-black uppercase",children:"ЮKassa (оплата картой)"}),t.jsx("p",{className:"text-xs text-gray-500",children:"ShopID/SecretKey + параметры для 54‑ФЗ (секреты видны только в админке)"})]})]}),t.jsx("div",{className:"px-3 py-1 rounded-full text-[10px] font-black uppercase "+(S.enabled?"bg-green-100 text-green-700":"bg-gray-100 text-gray-600"),children:S.enabled?"ВКЛ":"ВЫКЛ"})]}),t.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[t.jsxs("div",{className:"md:col-span-2 flex items-center justify-between bg-white p-3 rounded border border-gray-200",children:[t.jsx("span",{className:"text-xs font-bold uppercase text-gray-500",children:"Включить ЮKassa"}),t.jsxs("label",{className:"relative inline-flex items-center cursor-pointer",children:[t.jsx("input",{type:"checkbox",checked:!!S.enabled,onChange:e=>A({enabled:e.target.checked}),className:"sr-only peer"}),t.jsx("div",{className:"w-9 h-5 bg-gray-200 peer-focus:outline-none rounded-full peer peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-4 after:w-4 after:transition-all peer-checked:bg-green-500"})]})]}),t.jsxs("div",{children:[t.jsx("label",{className:"text-[10px] font-bold text-gray-500 uppercase block mb-1.5",children:"Shop ID"}),t.jsx("input",{value:S.shopId||"",onChange:e=>A({shopId:e.target.value}),className:"w-full p-2.5 border border-gray-300 rounded-lg text-sm bg-white text-black font-mono focus:ring-1 focus:ring-black outline-none",placeholder:"Например: 123456"})]}),t.jsxs("div",{children:[t.jsx("label",{className:"text-[10px] font-bold text-gray-500 uppercase block mb-1.5",children:"Secret Key"}),t.jsx("input",{type:"password",value:S.secretKey||"",onChange:e=>A({secretKey:e.target.value}),className:"w-full p-2.5 border border-gray-300 rounded-lg text-sm bg-white text-black font-mono focus:ring-1 focus:ring-black outline-none",placeholder:"test_..."})]}),t.jsxs("div",{children:[t.jsx("label",{className:"text-[10px] font-bold text-gray-500 uppercase block mb-1.5",children:"Система налогообложения (54‑ФЗ)"}),t.jsxs("select",{value:String(S.taxSystemCode||3),onChange:e=>A({taxSystemCode:parseInt(e.target.value)||3}),className:"w-full p-2.5 border border-gray-300 rounded-lg text-sm bg-white text-black focus:ring-1 focus:ring-black outline-none",children:[t.jsx("option",{value:"1",children:"1 — ОСН"}),t.jsx("option",{value:"2",children:"2 — УСН доходы"}),t.jsx("option",{value:"3",children:"3 — УСН доходы-расходы (АУСН доходы-расходы)"}),t.jsx("option",{value:"4",children:"4 — ЕНВД"}),t.jsx("option",{value:"5",children:"5 — ЕСН"}),t.jsx("option",{value:"6",children:"6 — Патент"})]})]}),t.jsxs("div",{children:[t.jsx("label",{className:"text-[10px] font-bold text-gray-500 uppercase block mb-1.5",children:"НДС (54‑ФЗ)"}),t.jsxs("select",{value:String(S.vatCode||1),onChange:e=>A({vatCode:parseInt(e.target.value)||1}),className:"w-full p-2.5 border border-gray-300 rounded-lg text-sm bg-white text-black focus:ring-1 focus:ring-black outline-none",children:[t.jsx("option",{value:"1",children:"1 — без НДС"}),t.jsx("option",{value:"2",children:"2 — НДС 0%"}),t.jsx("option",{value:"3",children:"3 — НДС 10%"}),t.jsx("option",{value:"4",children:"4 — НДС 20%"})]})]}),t.jsxs("div",{className:"md:col-span-2",children:[t.jsx("label",{className:"text-[10px] font-bold text-gray-500 uppercase block mb-1.5",children:"Webhook token"}),t.jsxs("div",{className:"flex gap-2",children:[t.jsx("input",{value:S.webhookToken||"",onChange:e=>A({webhookToken:e.target.value}),className:"flex-1 p-2.5 border border-gray-300 rounded-lg text-sm bg-white text-black font-mono focus:ring-1 focus:ring-black outline-none",placeholder:"Нажмите 'Сгенерировать'"}),t.jsx("button",{type:"button",onClick:()=>A({webhookToken:(window.crypto&&crypto.randomUUID)?crypto.randomUUID():Math.random().toString(36).slice(2)+Date.now()}),className:"px-3 py-2.5 bg-black text-white rounded-lg text-xs font-bold uppercase hover:bg-gray-800",children:"Сгенерировать"})]}),t.jsx("div",{className:"mt-2 text-[11px] text-gray-500",children:"URL для webhook будет показан ниже (добавьте его в личном кабинете ЮKassa)"}),t.jsx("div",{className:"mt-2 bg-gray-50 border border-gray-200 rounded-lg p-2 font-mono text-[11px] text-gray-700 overflow-x-auto",children:window.location.origin+"/api/yookassa_webhook.php?token="+encodeURIComponent(String(S.webhookToken||""))})]})]})]}),t.jsxs("div",{className:"bg-white p-6 rounded-xl shadow-sm border border-gray-200",children:[t.jsxs("div",{className:"flex items-center justify-between mb-6 pb-4 border-b border-gray-100",children:[t.jsxs("div",{className:"flex items-center gap-3",children:[t.jsx("div",{className:"p-2 bg-orange-50 text-orange-600 rounded-lg",children:t.jsx(Pa,{className:"w-5 h-5"})}),t.jsxs("div",{children:[t.jsx("h3",{className:"text-lg font-bold text-black uppercase",children:"Интеграция СДЭК (API)"}),t.jsx("p",{className:"text-xs text-gray-500",children:"Client ID / Client Secret из личного кабинета интегратора СДЭК — нужны для списка пунктов выдачи на чекауте"})]})]})]}),t.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[t.jsxs("div",{children:[t.jsx("label",{className:"text-[10px] font-bold text-gray-500 uppercase block mb-1.5",children:"Client ID"}),t.jsx("input",{value:vxCdekS.clientId||"",onChange:e=>vxCdekSet({clientId:e.target.value}),className:"w-full p-2.5 border border-gray-300 rounded-lg text-sm bg-white text-black font-mono focus:ring-1 focus:ring-black outline-none",placeholder:"account"})]}),t.jsxs("div",{children:[t.jsx("label",{className:"text-[10px] font-bold text-gray-500 uppercase block mb-1.5",children:"Client Secret"}),t.jsx("input",{type:"password",value:vxCdekS.clientSecret||"",onChange:e=>vxCdekSet({clientSecret:e.target.value}),className:"w-full p-2.5 border border-gray-300 rounded-lg text-sm bg-white text-black font-mono focus:ring-1 focus:ring-black outline-none",placeholder:"secure password"})]})]})]}),t.jsxs("div",{className:"bg-white p-6 rounded-xl shadow-sm border border-gray-200",children:[t.jsxs("div",{className:"flex items-center justify-between mb-6 pb-4 border-b border-gray-100",children:[t.jsxs("div",{className:"flex items-center gap-3",children:[t.jsx("div",{className:"p-2 bg-orange-50 text-orange-600 rounded-lg",children:t.jsx(Pa,{className:"w-5 h-5"})}),t.jsxs("div",{children:[t.jsx("h3",{className:"text-lg font-bold text-black uppercase",children:"Способы Доставки"}),t.jsx("p",{className:"text-xs text-gray-500",children:"Настройка вариантов доставки и привязка оплаты"})]})]}),t.jsxs("button",{onClick:x,className:"flex items-center gap-2 bg-black text-white px-4 py-2 rounded-lg text-xs font-bold uppercase hover:bg-gray-800 transition-colors",children:[t.jsx(At,{className:"w-3 h-3"})," Добавить"]})]}),t.jsx("div",{className:"space-y-4",children:(r.deliveryMethods||[]).map(g=>t.jsxs("div",{className:`border rounded-xl p-4 transition-all ${d===g.id?"border-orange-500 bg-orange-50/50 shadow-md":"border-gray-200 bg-white"}`,children:[t.jsxs("div",{className:"flex items-center justify-between",children:[t.jsxs("div",{className:"flex items-center gap-3",children:[t.jsx("div",{className:`w-3 h-3 rounded-full ${g.enabled?"bg-green-500":"bg-gray-300"}`}),t.jsxs("div",{children:[t.jsx("span",{className:"font-bold text-sm block text-black",children:g.name}),t.jsxs("span",{className:"text-xs text-gray-500",children:[g.price===0?"Бесплатно":`${g.price} ₽`," • ",g.type==="pickup"?"Самовывоз/ПВЗ":"Адресная"]})]})]}),t.jsxs("div",{className:"flex gap-2",children:[t.jsx("button",{onClick:()=>c(d===g.id?null:g.id),className:"p-2 text-gray-500 hover:text-black hover:bg-gray-100 rounded-lg",children:t.jsx(Ns,{className:"w-4 h-4"})}),t.jsx("button",{onClick:()=>b(g.id),className:"p-2 text-gray-300 hover:text-red-500 hover:bg-red-50 rounded-lg",children:t.jsx(jt,{className:"w-4 h-4"})})]})]}),d===g.id&&t.jsxs("div",{className:"mt-4 pt-4 border-t border-gray-200/50 grid grid-cols-1 md:grid-cols-2 gap-4 animate-fade-in",children:[t.jsxs("div",{className:"md:col-span-2 flex items-center justify-between bg-white p-3 rounded border border-gray-200",children:[t.jsx("span",{className:"text-xs font-bold uppercase text-gray-500",children:"Активность"}),t.jsxs("label",{className:"relative inline-flex items-center cursor-pointer",children:[t.jsx("input",{type:"checkbox",checked:g.enabled,onChange:O=>N(g.id,{enabled:O.target.checked}),className:"sr-only peer"}),t.jsx("div",{className:"w-9 h-5 bg-gray-200 peer-focus:outline-none rounded-full peer peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-4 after:w-4 after:transition-all peer-checked:bg-green-500"})]})]}),t.jsxs("div",{children:[t.jsx(cr,{children:"Название"}),t.jsx("input",{value:g.name,onChange:O=>N(g.id,{name:O.target.value}),className:"w-full text-sm border border-gray-300 rounded p-2 text-black bg-white focus:ring-1 focus:ring-black"})]}),t.jsxs("div",{children:[t.jsx(cr,{children:"Тип Доставки"}),t.jsxs("select",{value:g.type||"address",onChange:O=>N(g.id,{type:O.target.value}),className:"w-full text-sm border border-gray-300 rounded p-2 text-black bg-white focus:ring-1 focus:ring-black",children:[t.jsx("option",{value:"address",children:"Адресная доставка (Индекс, Улица)"}),t.jsx("option",{value:"pickup",children:"Самовывоз / ПВЗ (Одна строка)"})]})]}),t.jsxs("div",{children:[t.jsx(cr,{children:"Стоимость (руб)"}),t.jsx("input",{type:"number",value:g.price,onChange:O=>N(g.id,{price:parseInt(O.target.value)||0}),className:"w-full text-sm border border-gray-300 rounded p-2 text-black bg-white focus:ring-1 focus:ring-black",placeholder:"0 = Бесплатно"})]}),t.jsxs("div",{children:[t.jsx(cr,{children:"Отображение цены для покупателя"}
3020),t.jsxs("select",{value:g.priceMode||"separate",onChange:O=>N(g.id,{priceMode:O.target.value}),className:"w-full text-sm border border-gray-300 rounded p-2 text-black bg-white focus:ring-1 focus:ring-black",children:[t.jsx("option",{value:"separate",children:"Отдельной строкой (+ к цене товара)"}),t.jsx("option",{value:"included",children:"Включено в цену (бесплатно для покупателя)"})]})]}),(g.type==="pickup")&&t.jsxs("div",{className:"md:col-span-2 flex items-center justify-between bg-orange-50 border border-orange-200 p-3 rounded",children:[t.jsxs("div",{children:[t.jsx("span",{className:"text-xs font-bold uppercase text-orange-700 block",children:"Список ПВЗ СДЭК (API)"}),t.jsx("span",{className:"text-[11px] text-orange-600",children:"Покупатель выбирает пункт выдачи из списка вместо ввода адреса вручную. Нужны Client ID / Client Secret ниже."})]}),t.jsxs("label",{className:"relative inline-flex items-center cursor-pointer shrink-0 ml-3",children:[t.jsx("input",{type:"checkbox",checked:!!g.cdekEnabled,onChange:O=>N(g.id,{cdekEnabled:O.target.checked}),className:"sr-only peer"}),t.jsx("div",{className:"w-9 h-5 bg-gray-200 peer-focus:outline-none rounded-full peer peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-4 after:w-4 after:transition-all peer-checked:bg-orange-500"})]})]}),t.jsxs("div",{children:[t.jsx(cr,{children:"Описание (для клиента)"}),t.jsx("input",{value:g.description||"",onChange:O=>N(g.id,{description:O.target.value}),className:"w-full text-sm border border-gray-300 rounded p-2 text-black bg-white focus:ring-1 focus:ring-black",placeholder:"Например: Срок 3-5 дней"})]}),t.jsxs("div",{className:"md:col-span-2 mt-2",children:[t.jsxs("div",{className:"flex items-center gap-2 mb-2 text-gray-500",children:[t.jsx(ks,{className:"w-3 h-3"}),t.jsx("span",{className:"text-[10px] font-bold uppercase",children:"Доступные способы оплаты"})]}),t.jsx("div",{className:"bg-white border border-gray-200 rounded-lg p-3 grid grid-cols-1 sm:grid-cols-2 gap-2",children:(r.paymentMethods||[]).map(O=>{if(!O.enabled)return null;const E=(g.allowedPaymentIds||[]).includes(O.id);return t.jsxs("div",{onClick:()=>C(g.id,O.id),className:`flex items-center gap-2 p-2 rounded cursor-pointer border transition-all ${E?"bg-green-50 border-green-200":"bg-gray-50 border-transparent hover:bg-gray-100"}`,children:[E?t.jsx(J2,{className:"w-4 h-4 text-green-600"}):t.jsx(ew,{className:"w-4 h-4 text-gray-400"}),t.jsx("span",{className:`text-sm ${E?"font-bold text-black":"text-gray-500"}`,children:O.name})]},O.id)})})]})]})]},g.id))})]})]})},jj=({children:r})=>t.jsx("label",{className:"text-[10px] font-bold text-gray-500 uppercase block mb-1.5",children:r}),Nj=({settings:r,onUpdate:o})=>{const[d,c]=j.useState(null),h=()=>{const u={id:`status-${Date.now()}`,label:"Новый Статус",color:"#000000",isSystem:!1};o({...r,orderStatuses:[u,...r.orderStatuses||[]]}),c(u.id)},m=(u,f)=>{const x=(r.orderStatuses||[]).map(N=>N.id===u?{...N,...f}:N);o({...r,orderStatuses:x})},y=u=>{if(confirm("Удалить этот статус? Заказы с этим статусом могут отображаться некорректно.")){const f=(r.orderStatuses||[]).filter(x=>x.id!==u);o({...r,orderStatuses:f}),d===u&&c(null)}};return t.jsxs("div",{className:"space-y-8 animate-fade-in pb-20",children:[t.jsxs("div",{className:"bg-white p-6 rounded-xl shadow-sm border border-gray-200",children:[t.jsxs("div",{className:"flex items-center justify-between mb-6 pb-4 border-b border-gray-100",children:[t.jsxs("div",{className:"flex items-center gap-3",children:[t.jsx("div",{className:"p-2 bg-purple-50 text-purple-600 rounded-lg",children:t.jsx(wn,{className:"w-5 h-5"})}),t.jsxs("div",{children:[t.jsx("h3",{className:"text-lg font-bold text-black uppercase",children:"Статусы Заказов"}),t.jsx("p",{className:"text-xs text-gray-500",children:"Настройте воронку продаж"})]})]}),t.jsxs("button",{onClick:h,className:"flex items-center gap-2 bg-black text-white px-4 py-2 rounded-lg text-xs font-bold uppercase hover:bg-gray-800 transition-colors",children:[t.jsx(At,{className:"w-3 h-3"})," Добавить"]})]}),t.jsx("div",{className:"space-y-4",children:(r.orderStatuses||[]).map(u=>t.jsxs("div",{className:`border rounded-xl p-4 transition-all ${d===u.id?"border-purple-500 bg-purple-50/50 shadow-md":"border-gray-200 bg-white"}`,children:[t.jsxs("div",{className:"flex items-center justify-between",children:[t.jsxs("div",{className:"flex items-center gap-3",children:[t.jsx("div",{className:"w-6 h-6 rounded-full border-2 border-white shadow-sm flex items-center justify-center",style:{backgroundColor:u.color}}),t.jsxs("div",{children:[t.jsx("span",{className:"font-bold text-sm text-black block",children:u.label}),t.jsxs("span",{className:"text-[10px] text-gray-400 font-mono",children:["ID: ",u.id]})]}),u.isSystem&&t.jsx("span",{className:"text-[10px] bg-gray-100 text-gray-500 px-2 py-0.5 rounded border border-gray-200",children:"Системный"})]}),t.jsxs("div",{className:"flex gap-2",children:[t.jsx("button",{onClick:()=>c(d===u.id?null:u.id),className:"p-2 text-gray-500 hover:text-black hover:bg-gray-100 rounded-lg",children:t.jsx(Ns,{className:"w-4 h-4"})}),!u.isSystem&&t.jsx("button",{onClick:()=>y(u.id),className:"p-2 text-gray-300 hover:text-red-500 hover:bg-red-50 rounded-lg",children:t.jsx(jt,{className:"w-4 h-4"})})]})]}),d===u.id&&t.jsxs("div",{className:"mt-4 pt-4 border-t border-gray-200/50 grid grid-cols-1 md:grid-cols-2 gap-4 animate-fade-in",children:[t.jsxs("div",{children:[t.jsx("label",{className:"text-[10px] font-bold text-gray-500 uppercase block mb-1.5",children:"Название"}),t.jsx("input",{value:u.label,onChange:f=>m(u.id,{label:f.target.value}),className:"w-full text-sm border border-gray-300 rounded p-2 text-black bg-white focus:ring-1 focus:ring-black"})]}),t.jsxs("div",{children:[t.jsx("label",{className:"text-[10px] font-bold text-gray-500 uppercase block mb-1.5",children:"Цвет бейджа"}),t.jsxs("div",{className:"flex gap-2 items-center",children:[t.jsx("input",{type:"color",value:u.color,onChange:f=>m(u.id,{color:f.target.value}),className:"w-10 h-9 rounded cursor-pointer border-0 p-0"}),t.jsx("input",{value:u.color,onChange:f=>m(u.id,{color:f.target.value}),className:"flex-1 text-sm border border-gray-300 rounded p-2 text-black bg-white focus:ring-1 focus:ring-black font-mono"})]})]}),!u.isSystem&&t.jsxs("div",{className:"md:col-span-2",children:[t.jsx("label",{className:"text-[10px] font-bold text-gray-500 uppercase block mb-1.5",children:"Системный ID"}),t.jsx("input",{value:u.id,onChange:f=>m(u.id,{id:f.target.value}),className:"w-full text-sm border border-gray-300 rounded p-2 text-black bg-white focus:ring-1 focus:ring-black font-mono",placeholder:"unique-id"}),t.jsx("p",{className:"text-[10px] text-gray-400 mt-1",children:"ID используется в базе данных. Меняйте с осторожностью."})]})]})]},u.id))})]}),t.jsxs("div",{className:"bg-white p-6 rounded-xl border border-gray-200 shadow-sm",children:[t.jsxs("h3",{className:"text-lg font-bold text-black uppercase mb-4 flex items-center gap-2",children:[t.jsx(Ql,{className:"w-5 h-5"})," Лимиты"]}),t.jsxs("div",{children:[t.jsx(jj,{children:"Минимальная сумма заказа (руб)"}),t.jsx("input",{type:"number",value:r.minOrderSum||0,onChange:u=>o({...r,minOrderSum:parseInt(u.target.value)||0}),className:"w-full text-sm border border-gray-300 rounded p-2.5 bg-white text-black max-w-xs",placeholder:"0 = без ограничений"}),t.jsx("p",{className:"text-xs text-gray-500 mt-1",children:"Клиент не сможет оформить заказ, если сумма корзин
3020ы меньше этого значения."})]})]})]})},kj=({admins:r,onUpdateAdmins:o,currentUserEmail:d})=>{const[c,h]=j.useState(!1),[m,y]=j.useState(null),[u,f]=j.useState({name:"",email:"",password:"",role:"manager"}),x=()=>{f({name:"",email:"",password:"",role:"manager"}),y(null),h(!1)},N=(g,O)=>{g.stopPropagation(),f({name:O.name,email:O.email,password:O.password,role:O.role}),y(O.id),h(!0);const E=document.getElementById("admin-form");E&&E.scrollIntoView({behavior:"smooth"})},b=()=>{if(!u.email||!u.password){oe.error("Email и пароль обязательны");return}if(r.some(O=>O.email.toLowerCase()===u.email.toLowerCase()&&O.id!==m)){oe.error("Такой Email уже есть");return}if(m){const O=r.map(E=>E.id===m?{...E,...u}:E);o(O),oe.success("Данные администратора обновлены")}else{const O={id:`adm-${Date.now()}-${Math.random().toString(36).substring(2,9)}`,...u,createdAt:new Date().toISOString()};o([...r,O]),oe.success("Администратор добавлен")}x()},C=(g,O)=>{if(g.preventDefault(),g.stopPropagation(),window.confirm("Удалить этого администратора?")){const E=r.filter(_=>_.id!==O);o(E),oe.success("Администратор удален"),O===m&&x()}};return t.jsxs("div",{className:"space-y-6 animate-fade-in pb-10",id:"admin-form",children:[t.jsxs("div",{className:"bg-white p-6 rounded-xl border border-gray-200 shadow-sm flex justify-between items-center",children:[t.jsxs("div",{children:[t.jsxs("h2",{className:"text-xl font-black uppercase text-black flex items-center gap-2",children:[t.jsx(io,{className:"w-6 h-6 text-[#ff3b30]"})," Администраторы"]}),t.jsx("p",{className:"text-xs text-gray-500 mt-1",children:"Управление доступом к панели"})]}),!c&&t.jsxs("button",{onClick:()=>h(!0),className:"bg-black text-white px-4 py-2 rounded-lg text-xs font-bold uppercase hover:bg-[#ff3b30] transition-colors flex items-center gap-2",children:[t.jsx(At,{className:"w-4 h-4"})," Добавить"]})]}),c&&t.jsxs("div",{className:"bg-gray-50 p-6 rounded-xl border border-gray-200 animate-fade-in-up relative",children:[t.jsx("button",{onClick:x,className:"absolute top-4 right-4 text-gray-400 hover:text-black",children:t.jsx(xt,{className:"w-4 h-4"})}),t.jsx("h3",{className:"font-bold text-sm uppercase mb-4 text-black",children:m?"Редактирование":"Новый пользователь"}),t.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 mb-4",children:[t.jsxs("div",{children:[t.jsx("label",{className:"text-[10px] font-bold text-gray-500 uppercase block mb-1",children:"Имя"}),t.jsx("input",{value:u.name,onChange:g=>f({...u,name:g.target.value}),className:"w-full p-2.5 border border-gray-300 rounded text-sm text-black bg-white",placeholder:"Иван"})]}),t.jsxs("div",{children:[t.jsx("label",{className:"text-[10px] font-bold text-gray-500 uppercase block mb-1",children:"Email (Логин)"}),t.jsx("input",{value:u.email,onChange:g=>f({...u,email:g.target.value}),className:"w-full p-2.5 border border-gray-300 rounded text-sm text-black bg-white",placeholder:"[email protected]"})]}),t.jsxs("div",{children:[t.jsx("label",{className:"text-[10px] font-bold text-gray-500 uppercase block mb-1",children:"Пароль"}),t.jsx("input",{value:u.password,onChange:g=>f({...u,password:g.target.value}),className:"w-full p-2.5 border border-gray-300 rounded text-sm text-black bg-white",placeholder:"••••••"})]}),t.jsxs("div",{children:[t.jsx("label",{className:"text-[10px] font-bold text-gray-500 uppercase block mb-1",children:"Роль"}),t.jsxs("select",{value:u.role,onChange:g=>f({...u,role:g.target.value}),className:"w-full p-2.5 border border-gray-300 rounded text-sm text-black bg-white",children:[t.jsx("option",{value:"manager",children:"Менеджер (Только заказы)"}),t.jsx("option",{value:"super_admin",children:"Супер-Админ (Полный доступ)"})]})]})]}),t.jsxs("div",{className:"flex gap-2",children:[t.jsxs("button",{onClick:b,className:"bg-green-600 text-white px-4 py-2 rounded text-xs font-bold uppercase hover:bg-green-700 shadow-sm flex items-center gap-2",children:[t.jsx(Tn,{className:"w-3 h-3"})," Сохранить"]}),t.jsx("button",{onClick:x,className:"bg-white border border-gray-300 text-black px-4 py-2 rounded text-xs font-bold uppercase hover:bg-gray-50",children:"Отмена"})]})]}),t.jsx("div",{className:"grid grid-cols-1 gap-4",children:r.map(g=>t.jsxs("div",{className:`bg-white border rounded-xl p-4 flex items-center justify-between group hover:border-gray-400 transition-colors shadow-sm relative overflow-hidden ${m===g.id?"border-blue-500 ring-1 ring-blue-500":"border-gray-200"}`,children:[t.jsxs("div",{className:"flex items-center gap-4 relative z-10",children:[t.jsx("div",{className:`w-12 h-12 rounded-full flex items-center justify-center border-2 ${g.role==="super_admin"?"bg-[#ff3b30] text-white border-[#ff3b30]":"bg-gray-100 text-gray-500 border-gray-200"}`,children:t.jsx(Jl,{className:"w-6 h-6"})}),t.jsxs("div",{children:[t.jsxs("div",{className:"font-bold text-base text-black flex items-center gap-2",children:[g.name,g.email===d&&t.jsxs("span",{className:"text-[10px] bg-green-100 text-green-700 px-2 py-0.5 rounded-full flex items-center gap-1 uppercase tracking-wide",children:[t.jsx(wn,{className:"w-3 h-3"})," Вы"]})]}),t.jsx("div",{className:"text-xs text-gray-500 font-mono",children:g.email})]})]}),t.jsxs("div",{className:"flex items-center gap-4 relative z-10",children:[t.jsx("span",{className:`text-[10px] font-bold uppercase px-3 py-1 rounded-full ${g.role==="super_admin"?"bg-red-50 text-red-600 border border-red-100":"bg-blue-50 text-blue-600 border border-blue-100"}`,children:g.role==="super_admin"?"Super Admin":"Manager"}),t.jsxs("div",{className:"flex gap-2",children:[t.jsx("button",{type:"button",onClick:O=>N(O,g),className:"p-2 bg-gray-100 text-gray-500 hover:text-white hover:bg-blue-600 rounded-lg transition-all shadow-sm z-20 relative",title:"Редактировать",children:t.jsx(N2,{className:"w-4 h-4 pointer-events-none"})}),g.email!==d&&t.jsx("button",{type:"button",onClick:O=>C(O,g.id),className:"p-2 bg-gray-100 text-gray-500 hover:text-white hover:bg-red-600 rounded-lg transition-all shadow-sm z-20 relative",title:"Удалить",children:t.jsx(jt,{className:"w-4 h-4 pointer-events-none"})})]})]})]},g.id))})]})},Ud=()=>{const r=localStorage.getItem("vorotex_admin_token"),o=localStorage.getItem("vorotex_admin_csrf");return{...r?{"X-Admin-Token":r}:{},...o?{"X-CSRF-Token":o}:{}}},Sj=(r=12)=>{const o="ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz23456789!@#$%";let d="";for(let c=0;c<r;c++)d+=o[Math.floor(Math.random()*o.length)];return d},Oj=({logoImage:r})=>{const[o,d]=j.useState([]),[c,h]=j.useState(!1),[m,y]=j.useState(""),[u,f]=j.useState(null),[x,N]=j.useState(""),b=j.useMemo(()=>{const E=m.trim().toLowerCase();return E?o.filter(_=>(_.email||"").toLowerCase().includes(E)||(_.name||"").toLowerCase().includes(E)||(_.phone||"").toLowerCase().includes(E)||(_.address||"").toLowerCase().includes(E)||(_.id||"").toLowerCase().includes(E)):o},[o,m]),C=async()=>{h(!0);try{const E=await fetch("/api/get_users.php",{headers:Ud()}),_=E.headers.get("content-type")||"";if(!E.ok){if(_.includes("application/json")){const R=await E.json().catch(()=>null),D=R!=null&&R.message?String(R.message):`HTTP ${E.status}`,te=R!=null&&R.detail?`: ${String(R.detail)}`:"",W=R!=null&&R.requestId?` (id: ${String(R.requestId)})`:"";throw new Error(`${D}${te}${W}`)}throw new Error(`HTTP ${E.status}`)}if(!_.includes("application/json"))throw new Error("Not JSON");const k=await E.json();if(k.status!=="success"||!Array.isArray(k.users))throw new Error(k.message||"Ошибка сервера");d(k.users)}catch(E){oe.error(`Не удалось загрузить покупателей: ${(E==null?void 0:E.message)||"ошибка"}`)}finally{h(!1)}};j.useEffect(()=>{C()},[]);const g=async()=>
3020{if(!u)return;if(!u.email||!u.email.includes("@")){oe.error("Введите корректный Email");return}if(x&&x.length<8){oe.error("Пароль должен быть не короче 8 символов");return}const E=oe.loading(`Сохраняем покупателя #${u.id}...`);try{const _=await fetch("/api/update_user.php",{method:"POST",headers:{"Content-Type":"application/json",...Ud()},body:JSON.stringify({id:u.id,email:u.email,name:u.name,phone:u.phone,address:u.address,...x?{password:x}:{},_meta:{site:window.location.origin,logoUrl:r?new URL(r,window.location.origin).toString():""}})}),k=_.headers.get("content-type")||"";if(!_.ok)throw new Error(`HTTP ${_.status}`);if(!k.includes("application/json"))throw new Error("Not JSON");const R=await _.json();if(R.status!=="success")throw new Error(R.message||"Ошибка сервера");oe.success(x?"Сохранено. Пароль отправлен на почту.":"Сохранено",{id:E}),f(null),N(""),await C()}catch(_){oe.error(`Ошибка сохранения: ${(_==null?void 0:_.message)||"ошибка"}`,{id:E})}},O=async E=>{if(!window.confirm(`Удалить покупателя ${E.email||"#"+E.id}?
3021
3022Удаление будет мягким: аккаунт будет помечен как удалённый, заказы останутся.`))return;const _=oe.loading(`Удаляем покупателя #${E.id}...`);try{const k=await fetch("/api/delete_user.php",{method:"POST",headers:{"Content-Type":"application/json",...Ud()},body:JSON.stringify({id:E.id})}),R=k.headers.get("content-type")||"";if(!k.ok)throw new Error(`HTTP ${k.status}`);if(!R.includes("application/json"))throw new Error("Not JSON");const D=await k.json();if(D.status!=="success")throw new Error(D.message||"Ошибка сервера");oe.success("Покупатель удалён",{id:_}),(u==null?void 0:u.id)===E.id&&f(null),await C()}catch(k){oe.error(`Ошибка удаления: ${(k==null?void 0:k.message)||"ошибка"}`,{id:_})}};return t.jsxs("div",{className:"space-y-6 animate-fade-in pb-10",children:[t.jsxs("div",{className:"bg-white p-6 rounded-xl border border-gray-200 shadow-sm flex flex-col md:flex-row md:items-center md:justify-between gap-4",children:[t.jsxs("div",{children:[t.jsxs("h2",{className:"text-xl font-black uppercase text-black flex items-center gap-2",children:[t.jsx(_p,{className:"w-6 h-6 text-[#ff3b30]"})," Покупатели"]}),t.jsx("p",{className:"text-xs text-gray-500 mt-1",children:"Список аккаунтов покупателей (редактирование и мягкое удаление)"})]}),t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsxs("div",{className:"relative",children:[t.jsx(xa,{className:"w-4 h-4 text-gray-400 absolute left-3 top-1/2 -translate-y-1/2"}),t.jsx("input",{value:m,onChange:E=>y(E.target.value),placeholder:"Поиск: email, имя, телефон, id...",className:"pl-9 pr-3 py-2 border border-gray-200 rounded-lg text-sm text-black w-72 bg-white"})]}),t.jsxs("button",{onClick:C,className:"px-4 py-2 bg-black text-white rounded-lg text-xs font-bold uppercase hover:bg-[#ff3b30] transition-colors flex items-center gap-2",children:[t.jsx(Ya,{className:`w-4 h-4 ${c?"animate-spin":""}`})," Обновить"]})]})]}),t.jsxs("div",{className:"grid grid-cols-1 gap-3",children:[b.map(E=>t.jsxs("div",{className:`bg-white border rounded-xl p-4 flex flex-col md:flex-row md:items-center md:justify-between gap-3 shadow-sm ${(u==null?void 0:u.id)===E.id?"border-[#ff3b30] ring-1 ring-[#ff3b30]/30":"border-gray-200"}`,children:[t.jsxs("div",{className:"min-w-0",children:[t.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[t.jsx("div",{className:"font-bold text-black",children:E.name||"—"}),t.jsxs("div",{className:"text-xs text-gray-500 font-mono",children:["#",E.id]}),t.jsxs("span",{className:"text-[10px] bg-gray-100 text-gray-700 px-2 py-0.5 rounded-full font-bold uppercase",children:["Заказов: ",E.ordersCount]})]}),t.jsx("div",{className:"text-xs text-gray-600 mt-1 break-all",children:E.email||"—"}),t.jsx("div",{className:"text-xs text-gray-500 mt-1",children:E.phone||""}),E.address&&t.jsx("div",{className:"text-xs text-gray-500 mt-1",children:E.address})]}),t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx("button",{onClick:()=>f({...E}),className:"px-3 py-2 text-xs font-bold uppercase rounded-lg bg-gray-100 text-black hover:bg-gray-200 transition-colors",children:"Редактировать"}),t.jsxs("button",{onClick:()=>O(E),className:"px-3 py-2 text-xs font-bold uppercase rounded-lg bg-red-50 text-red-600 hover:bg-red-100 transition-colors flex items-center gap-2",children:[t.jsx(jt,{className:"w-4 h-4"})," Удалить"]})]})]},E.id)),b.length===0&&t.jsx("div",{className:"bg-white border border-gray-200 rounded-xl p-6 text-sm text-gray-500",children:"Покупатели не найдены"})]}),u&&t.jsx("div",{className:"fixed inset-0 z-[200] bg-black/60 backdrop-blur-sm flex items-center justify-center p-4",onClick:()=>{f(null),N("")},children:t.jsxs("div",{className:"bg-white w-full max-w-2xl rounded-2xl shadow-2xl overflow-hidden",onClick:E=>E.stopPropagation(),children:[t.jsxs("div",{className:"p-5 border-b border-gray-100 flex items-center justify-between bg-gray-50",children:[t.jsxs("div",{children:[t.jsxs("div",{className:"text-xs text-gray-500 font-mono",children:["Покупатель #",u.id]}),t.jsx("div",{className:"text-lg font-black uppercase text-black",children:"Редактирование"})]}),t.jsx("button",{onClick:()=>{f(null),N("")},className:"p-2 hover:bg-gray-200 rounded-full transition-colors text-black",children:t.jsx(xt,{className:"w-5 h-5"})})]}),t.jsxs("div",{className:"p-6 space-y-4",children:[t.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[t.jsxs("div",{children:[t.jsx("label",{className:"text-[10px] font-bold text-gray-500 uppercase block mb-1",children:"Имя (ФИО)"}),t.jsx("input",{value:u.name,onChange:E=>f({...u,name:E.target.value}),className:"w-full p-3 border border-gray-200 rounded-lg text-sm text-black bg-white",placeholder:"Иванов Иван Иванович"})]}),t.jsxs("div",{children:[t.jsx("label",{className:"text-[10px] font-bold text-gray-500 uppercase block mb-1",children:"Email"}),t.jsx("input",{value:u.email,onChange:E=>f({...u,email:E.target.value}),className:"w-full p-3 border border-gray-200 rounded-lg text-sm text-black bg-white",placeholder:"[email protected]"})]}),t.jsxs("div",{children:[t.jsx("label",{className:"text-[10px] font-bold text-gray-500 uppercase block mb-1",children:"Телефон"}),t.jsx("input",{value:u.phone,onChange:E=>f({...u,phone:E.target.value}),className:"w-full p-3 border border-gray-200 rounded-lg text-sm text-black bg-white",placeholder:"+7 (999) 000-00-00"})]}),t.jsxs("div",{children:[t.jsx("label",{className:"text-[10px] font-bold text-gray-500 uppercase block mb-1",children:"Адрес"}),t.jsx("input",{value:u.address,onChange:E=>f({...u,address:E.target.value}),className:"w-full p-3 border border-gray-200 rounded-lg text-sm text-black bg-white",placeholder:"Город, улица, дом..."})]})]}),t.jsxs("div",{className:"bg-white border border-gray-200 rounded-xl p-4",children:[t.jsxs("div",{className:"flex items-center justify-between gap-3 mb-2",children:[t.jsxs("div",{className:"text-xs font-bold uppercase text-gray-500 flex items-center gap-2",children:[t.jsx(Kv,{className:"w-4 h-4"})," Новый пароль (опционально)"]}),t.jsxs("button",{type:"button",onClick:()=>N(Sj(12)),className:"text-xs font-bold uppercase text-blue-600 hover:underline flex items-center gap-2",children:[t.jsx(Ow,{className:"w-4 h-4"})," Сгенерировать"]})]}),t.jsx("input",{value:x,onChange:E=>N(E.target.value),className:"w-full p-3 border border-gray-200 rounded-lg text-sm text-black bg-white",placeholder:"Если заполнить — пароль обновится и придёт письмо покупателю"}),t.jsx("div",{className:"text-[11px] text-gray-500 mt-2",children:"Если вы меняете пароль — покупателю придёт письмо с новым паролем и ссылкой на вход."})]}),t.jsx("div",{className:"bg-gray-50 border border-gray-100 rounded-xl p-4 text-xs text-gray-600",children:"Заказ
3022ы пользователя не удаляются. “Удалить” = пометить аккаунт как удалённый и отключить вход."})]}),t.jsxs("div",{className:"p-4 border-t border-gray-100 bg-gray-50 flex justify-end gap-2",children:[t.jsx("button",{onClick:()=>f(null),className:"px-5 py-2 text-xs font-bold uppercase rounded-lg border border-gray-200 hover:bg-gray-100 transition-colors text-black",children:"Отмена"}),t.jsxs("button",{onClick:g,className:"px-5 py-2 text-xs font-bold uppercase rounded-lg bg-black text-white hover:bg-[#ff3b30] transition-colors flex items-center gap-2",children:[t.jsx(Tn,{className:"w-4 h-4"})," Сохранить"]})]})]})})]})},Hd=({children:r})=>t.jsx("label",{className:"text-[10px] font-bold text-gray-500 uppercase block mb-1.5",children:r}),Ej=({settings:r,onUpdateSettings:o,products:d})=>{const[c,h]=j.useState(""),m=()=>{const N={id:`sw-${Date.now()}`,name:"Новый драйвер",version:"v1.0",size:"10 MB",description:"Описание программного обеспечения",link:"#",category:"keyboard",date:new Date().toISOString().slice(0,10),image:""};o({...r,items:[N,...r.items]}),oe.success("Драйвер добавлен")},y=N=>{window.confirm("Удалить этот файл?")&&(o({...r,items:r.items.filter(b=>b.id!==N)}),oe.success("Файл удален"))},u=(N,b)=>{o({...r,items:r.items.map(C=>C.id===N?{...C,...b}:C)})},f=async(N,b)=>{var E;const C=(E=N.target.files)==null?void 0:E[0];if(!C)return;const g=(C.size/(1024*1024)).toFixed(1)+" MB",O=oe.loading("Загрузка драйвера...");try{try{const _=await Wl.uploadFile(C);u(b,{link:_,size:g}),oe.success("Файл загружен на сервер",{id:O})}catch(_){if(console.warn("Server upload failed for driver",_),C.size>5*1024*1024){oe.error("Файл слишком большой для локального сохранения (>5MB). Настройте PHP.",{id:O}),u(b,{size:g});return}const k=new FileReader;k.onload=R=>{var D;(D=R.target)!=null&&D.result&&(u(b,{link:R.target.result,size:g}),oe.success("Файл сохранен локально (Base64)",{id:O}))},k.readAsDataURL(C)}}catch{oe.error("Ошибка загрузки",{id:O})}},x=r.items.filter(N=>N.name.toLowerCase().includes(c.toLowerCase())||N.id.toLowerCase().includes(c.toLowerCase()));return t.jsxs("div",{className:"space-y-6 animate-fade-in pb-20",children:[t.jsxs("div",{className:"bg-white p-6 rounded-xl border border-gray-200 shadow-sm flex flex-col md:flex-row justify-between items-center gap-4",children:[t.jsxs("div",{children:[t.jsxs("h2",{className:"text-xl font-black uppercase flex items-center gap-2 text-black",children:[t.jsx(Rp,{className:"w-6 h-6 text-[#ff3b30]"})," Поддержка (Драйверы)"]}),t.jsx("p",{className:"text-xs text-gray-500 mt-1",children:"Управление файлами и инструкциями"})]}),t.jsxs("button",{onClick:m,className:"flex items-center gap-2 bg-black text-white px-4 py-2 rounded-lg text-xs font-bold uppercase hover:bg-gray-800 transition-colors",children:[t.jsx(At,{className:"w-3 h-3"})," Добавить драйвер"]})]}),t.jsxs("div",{className:"bg-white p-6 rounded-xl border border-gray-200 shadow-sm",children:[t.jsx("h3",{className:"font-bold text-sm uppercase mb-4 text-black",children:"Настройки страницы"}),t.jsxs("div",{className:"space-y-3",children:[t.jsxs("div",{children:[t.jsx(Hd,{children:"Заголовок"}),t.jsx("input",{value:r.title,onChange:N=>o({...r,title:N.target.value}),className:"w-full text-sm border border-gray-300 rounded p-2 bg-white text-black"})]}),t.jsxs("div",{children:[t.jsx(Hd,{children:"Описание"}),t.jsx("textarea",{value:r.description,onChange:N=>o({...r,description:N.target.value}),className:"w-full text-xs border border-gray-300 rounded p-2 h-20 bg-white text-black resize-none"})]})]})]}),t.jsxs("div",{className:"relative",children:[t.jsx("input",{type:"text",placeholder:"Поиск файла...",value:c,onChange:N=>h(N.target.value),className:"w-full pl-10 pr-4 py-3 bg-white border border-gray-200 rounded-xl text-sm text-black focus:ring-1 focus:ring-black outline-none shadow-sm"}
3022),t.jsx(xa,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-400"})]}),t.jsx("div",{className:"space-y-4",children:x.map(N=>t.jsxs("div",{className:"bg-white p-4 rounded-xl border border-gray-200 shadow-sm relative group",children:[t.jsxs("div",{className:"flex flex-col md:flex-row gap-4 items-start md:items-center mb-4",children:[t.jsxs("div",{className:"flex-1 space-y-2 w-full",children:[t.jsxs("div",{className:"flex gap-2",children:[t.jsx("input",{value:N.name,onChange:b=>u(N.id,{name:b.target.value}),className:"flex-1 font-bold text-sm border border-gray-300 rounded p-2 bg-white text-black",placeholder:"Название"}),t.jsxs("select",{value:N.category,onChange:b=>u(N.id,{category:b.target.value}),className:"w-32 text-xs border border-gray-300 rounded p-2 bg-white text-black",children:[t.jsx("option",{value:"keyboard",children:"Клавиатуры"}),t.jsx("option",{value:"mouse",children:"Мыши"}),t.jsx("option",{value:"headset",children:"Гарнитуры"}),t.jsx("option",{value:"mini",children:"Мини-клавы"}),t.jsx("option",{value:"other",children:"Другое"})]})]}),t.jsxs("div",{className:"flex gap-2",children:[t.jsx("input",{value:N.version,onChange:b=>u(N.id,{version:b.target.value}),className:"w-1/3 text-xs border border-gray-300 rounded p-2 bg-white text-black",placeholder:"Версия (v1.0)"}),t.jsx("input",{value:N.size,onChange:b=>u(N.id,{size:b.target.value}),className:"w-1/3 text-xs border border-gray-300 rounded p-2 bg-white text-black",placeholder:"Размер (10 MB)"}),t.jsx("input",{value:N.date,onChange:b=>u(N.id,{date:b.target.value}),className:"w-1/3 text-xs border border-gray-300 rounded p-2 bg-white text-gray-500",type:"date"})]})]}),t.jsx("div",{className:"flex gap-2 items-center w-full md:w-auto",children:t.jsxs("div",{className:"flex-1 md:w-64 relative",children:[t.jsx("input",{value:N.link,onChange:b=>u(N.id,{link:b.target.value}),className:"w-full pl-8 pr-8 py-2 border border-gray-300 rounded text-xs text-blue-600 bg-white",placeholder:"Ссылка на файл"}),t.jsx(ks,{className:"absolute left-2.5 top-1/2 -translate-y-1/2 w-3.5 h-3.5 text-gray-400"}),t.jsx("div",{className:"absolute right-1 top-1/2 -translate-y-1/2",children:t.jsxs("label",{className:"p-1.5 bg-gray-100 hover:bg-gray-200 rounded cursor-pointer block",title:"Загрузить файл",children:[t.jsx(Ka,{className:"w-3 h-3 text-gray-600"}),t.jsx("input",{type:"file",className:"hidden",onChange:b=>f(b,N.id)})]})})]})})]}),t.jsxs("div",{className:"flex gap-4 items-center",children:[t.jsx("textarea",{value:N.description,onChange:b=>u(N.id,{description:b.target.value}),className:"flex-1 text-xs border border-gray-300 rounded p-2 h-16 resize-none bg-white text-black",placeholder:"Описание..."}),t.jsxs("div",{className:"w-64",children:[t.jsx(Hd,{children:"Привязка к товару"}),t.jsxs("select",{value:N.productId||"",onChange:b=>u(N.id,{productId:b.target.value}),className:"w-full text-xs border border-gray-300 rounded p-2 bg-white text-black",children:[t.jsx("option",{value:"",children:"-- Не привязан --"}),d.map(b=>t.jsx("option",{value:b.id,children:b.name},b.id))]})]})]}),t.jsx("button",{onClick:()=>y(N.id),className:"absolute top-2 right-2 text-gray-300 hover:text-red-500 p-2 rounded-full hover:bg-red-50 transition-colors",children:t.jsx(jt,{className:"w-4 h-4"})})]},N.id))})]})},dr=({children:r})=>t.jsx("label",{className:"text-[10px] font-bold text-gray-500 uppercase block mb-1.5",children:r}),Cj=({pages:r,onUpdatePages:o,navigate:d})=>{var te,W,$,H,J,Y,G;const[c,h]=j.useState(null),[m,y]=j.useState(!1),[u,f]=j.useState("editor"),x=r.find(U=>U.id===c),N=()=>{const U={id:`pg-${Date.now()}`,title:"Новая страница",slug:`page-${Date.now()}`,content:"",date:new Date().toISOString(),seo:{indexing:!0,title:"",description:"",keywords:""},faq:[]};o([...r,U]),h(U.id),f("editor"),oe.success("Страница создана")},b=U=>{confirm("Удалить страницу? Это действие нельзя отменить.")&&(o(r.filter(q=>q.id!==U)),c===U&&h(null),oe.success("Страница удалена"))},C=(U,q)=>{o(r.map(P=>P.id===U?{...P,...q}:P))},g=async(U,q)=>{var B;const P=(B=U.target.files)==null?void 0:B[0];if(!P)return;const pe=oe.loading("Загрузка...");try{const z=await bo(P);try{const v=await Wl.uploadFile(z);q(v),oe.success("Загружено на сервер",{id:pe})}catch(v){console.warn("Server failed, using local",v);const T=await jr(P);q(T),oe.success("Загружено локально",{id:pe})}}catch{oe.error("Ошибка загрузки",{id:pe})}},O=(U,q)=>{const P=document.getElementById("content-editor");if(!P||!x)return;const pe=P.selectionStart,B=P.selectionEnd,z=x.content||"",v=z.substring(0,pe),T=z.substring(B),A=z.substring(pe,B),K=q?`${U}${A}${q}`:U,w=v+K+T;
3022C(x.id,{content:w}),setTimeout(()=>{P.focus(),P.setSelectionRange(pe+U.length,B+U.length)},0)},E=()=>{if(x!=null&&x.content&&x.content.length>20&&!confirm("Заменить текущий контент шаблоном?"))return;x&&C(x.id,{content:`
3023<h2>Заголовок секции</h2>
3024<p class="text-lg">Вступительный текст, который привлекает внимание читателя.</p>
3025
3026<hr class="my-8 border-gray-200" />
3027
3028<h3>Наши преимущества</h3>
3029<ul>
3030  <li><strong>Качество:</strong> Мы используем только лучшие материалы.</li>
3031  <li><strong>Скорость:</strong> Быстрая доставка по всей стране.</li>
3032  <li><strong>Гарантия:</strong> 1 год на всю продукцию.</li>
3033</ul>
3034
3035<h3>Подробности</h3>
3036<p>Здесь можно разместить основной текст страницы. Используйте абзацы для разделения мыслей.</p>
3037
3038<blockquote>
3039  "Цитата или важная мысль, которую нужно выделить."
3040</blockquote>
3041`.trim()}),oe.success("Шаблон загружен")},_=()=>{if(!x)return;const U=document.createElement("div");U.innerHTML=x.content||"";const q=U.textContent||"",P=q.slice(0,150).trim()+(q.length>150?"...":"");
3041C(x.id,{seo:{...x.seo,title:x.title,description:P,keywords:x.title.split(" ").join(", ")}}),oe.success("SEO данные сгенерированы")},k=()=>{if(!x)return;const U=[...x.faq||[],{question:"Новый вопрос",answer:"Ответ на вопрос"}];C(x.id,{faq:U})},R=(U,q)=>{if(!x||!x.faq)return;const P=[...x.faq];P[U]={...P[U],...q},C(x.id,{faq:P})},D=U=>{if(!x||!x.faq||!confirm("Удалить этот вопрос?"))return;const q=x.faq.filter((P,pe)=>pe!==U);C(x.id,{faq:q})};return t.jsxs("div",{className:"h-full flex flex-col bg-gray-100",children:[!x&&t.jsxs("div",{className:"space-y-6",children:[t.jsxs("div",{className:"bg-white p-6 rounded-xl border border-gray-200 shadow-sm flex justify-between items-center",children:[t.jsxs("div",{children:[t.jsxs("h2",{className:"text-xl font-black uppercase text-black flex items-center gap-2",children:[t.jsx(mr,{className:"w-6 h-6 text-[#ff3b30]"})," Страницы (",r.length,")"]}),t.jsx("p",{className:"text-xs text-gray-500 mt-1",children:"Создание и редактирование контента"})]}),t.jsxs("button",{onClick:N,className:"bg-black text-white px-4 py-2 rounded-lg text-xs font-bold uppercase hover:bg-[#ff3b30] transition-colors flex items-center gap-2 shadow-lg",children:[t.jsx(At,{className:"w-3 h-3"})," Новая страница"]})]}),t.jsxs("div",{className:"grid grid-cols-1 gap-4",children:[r.map(U=>{var q;return t.jsxs("div",{className:"bg-white border border-gray-200 rounded-xl p-4 flex items-center justify-between hover:shadow-md transition-shadow group",children:[t.jsxs("div",{className:"flex items-center gap-4",children:[t.jsx("div",{className:"w-12 h-12 bg-gray-50 rounded-lg flex items-center justify-center text-gray-400 border border-gray-100 group-hover:border-gray-300 transition-colors",children:t.jsx(mr,{className:"w-6 h-6"})}),t.jsxs("div",{children:[t.jsx("h3",{className:"font-bold text-sm text-black uppercase",children:U.title||"Без названия"}),t.jsxs("div",{className:"flex items-center gap-2 mt-1",children:[t.jsxs("span",{className:"text-[10px] bg-gray-100 px-2 py-0.5 rounded text-gray-500 font-mono border border-gray-200",children:["/",U.slug]}),t.jsx("button",{onClick:()=>window.open(`/page/${U.slug}`,"_blank"),className:"text-gray-400 hover:text-blue-600 transition-colors",title:"Открыть на сайте",children:t.jsx(Qd,{className:"w-3 h-3"})}),((q=U.seo)==null?void 0:q.title)&&t.jsx("span",{className:"text-[9px] text-green-600 bg-green-50 px-1.5 rounded border border-green-100 font-bold",children:"SEO OK"}),U.faq&&U.faq.length>0&&t.jsxs("span",{className:"text-[9px] text-purple-600 bg-purple-50 px-1.5 rounded border border-purple-100 font-bold",children:["FAQ: ",U.faq.length]})]})]})]}),t.jsxs("div",{className:"flex items-center gap-3",children:[t.jsx("button",{onClick:()=>C(U.id,{isVisible:U.isVisible===!1?!0:!1}),className:`p-2 rounded-lg border transition-colors ${U.isVisible!==!1?"bg-green-50 text-green-600 border-green-100 hover:bg-green-100":"bg-gray-50 text-gray-400 border-gray-200 hover:bg-gray-100"}`,title:U.isVisible!==!1?"Опубликовано (нажмите чтобы скрыть)":"Скрыто (нажмите чтобы опубликовать)",children:t.jsx(mr,{className:"w-4 h-4"})}),t.jsx("button",{onClick:()=>h(U.id),className:"px-4 py-2 bg-white border border-gray-300 text-black text-xs font-bold uppercase rounded hover:bg-black hover:text-white transition-colors",children:"Редактор"}),t.jsx("button",{onClick:()=>b(U.id),className:"p-2 text-gray-400 hover:text-red-500 hover:bg-red-50 rounded transition-colors",children:t.jsx(jt,{className:"w-4 h-4"})})]})]},U.id)}),r.length===0&&t.jsxs("div",{className:"text-center py-12 text-gray-400 border-2 border-dashed border-gray-200 rounded-xl bg-gray-50",children:[t.jsx(mr,{className:"w-12 h-12 mx-auto mb-2 opacity-20"}),t.jsx("p",{children:"Список страниц пуст. Создайте первую!"})]})]})]}),x&&t.jsxs("div",{className:"flex flex-col h-full bg-white border border-gray-200 rounded-xl overflow-hidden shadow-2xl animate-fade-in flex-1",children:[t.jsxs("div",{className:"h-16 border-b border-gray-200 bg-white flex items-center justify-between px-4 flex-shrink-0 z-20",children:[t.jsxs("div",{className:"flex items-center gap-4 w-1/3",children:[t.jsx("button",{onClick:()=>h(null),className:"p-2 hover:bg-gray-100 rounded-full text-gray-500 hover:text-black transition-colors",children:t.jsx(Ca,{className:"w-5 h-5"})}),t.jsxs("div",{className:"flex-1",children:[t.jsx("input",{value:x.title,onChange:U=>C(x.id,{title:U.target.value}),className:"bg-transparent border-none p-0 text-sm font-black uppercase text-black focus:ring-0 placeholder-gray-300 w-full",placeholder:"ЗАГОЛОВОК СТРАНИЦЫ"}),t.jsxs("div",{className:"flex items-center gap-1 text-[10px] text-gray-400",children:[t.jsx("span",{children:"URL:"}),t.jsx("span",{className:"text-gray-300",children:"vorotex.com/page/"}),t.jsx("input",{value:x.slug,onChange:U=>C(x.id,{slug:U.target.value}),className:"bg-transparent border-none p-0 text-[10px] font-mono text-blue-600 focus:ring-0 w-32 h-4"})]})]})]}),t.jsxs("div",{className:"flex items-center justify-center gap-2 bg-gray-100 p-1 rounded-lg",children:[t.jsx("button",{onClick:()=>y(!1),className:`p-1.5 rounded transition-all ${m?"text-gray-400 hover:text-black":"bg-white text-black shadow-sm"}`,title:"Desktop",children:t.jsx(Nn,{className:"w-4 h-4"})}),t.jsx("button",{onClick:()=>y(!0),className:`p-1.5 rounded transition-all ${m?"bg-white text-black shadow-sm":"text-gray-400 hover:text-black"}`,title:"Mobile",children:t.jsx(Tp,{className:"w-4 h-4"})})]}),t.jsx("div",{className:"flex justify-end w-1/3 gap-2",children:t.jsxs("button",{onClick:()=>h(null),className:"px-6 py-2 bg-green-600 text-white rounded text-xs font-bold uppercase hover:bg-green-700 flex items-center gap-2 shadow-md transition-transform active:scale-95",children:[t.jsx(Tn,{className:"w-4 h-4"})," Сохранить"]})})]}),t.jsxs("div",{className:"flex-1 flex overflow-hidden",children:[t.jsxs("div",{className:"flex-1 flex flex-col min-w-0 border-r border-gray-200 bg-white max-w-[50%]",children:[t.jsxs("div",{className:"flex border-b border-gray-200",children:[t.jsxs("button",{onClick:()=>f("editor"),className:`flex-1 py-3 text-xs font-bold uppercase flex items-center justify-center gap-2 transition-colors ${u==="editor"?"text-[#ff3b30] border-b-2 border-[#ff3b30] bg-red-50/50":"text-gray-500 hover:bg-gray-50 hover:text-black"}`,children:[t.jsx(Ns,{className:"w-3 h-3"})," Контент (HTML)"]}),t.jsxs("button",{onClick:()=>f("faq"),className:`flex-1 py-3 text-xs font-bold uppercase flex items-center justify-center gap-2 transition-colors ${u==="faq"?"text-[#ff3b30] border-b-2 border-[#ff3b30] bg-red-50/50":"text-gray-500 hover:bg-gray-50 hover:text-black"}`,children:[t.jsx(zd,{className:"w-3 h-3"})," FAQ (Вопросы)"]}),t.jsxs("button",{onClick:()=>f("seo"),className:`flex-1 py-3 text-xs font-bold uppercase flex items-center justify-center gap-2 transition-colors ${u==="seo"?"text-[#ff3b30] border-b-2 border-[#ff3b30] bg-red-50/50":"text-gray-500 hover:bg-gray-50 hover:text-black"}`,children:[t.jsx(vs,{className:"w-3 h-3"})," SEO"]})]}),u==="editor"&&t.jsxs("div",{className:"flex-1 flex flex-col relative bg-gray-50",children:[t.jsxs("div",{className:"flex items-center gap-1 p-2 bg-white border-b border-gray-200 overflow-x-auto custom-scrollbar flex-shrink-0",children:[t.jsx("button",{onClick:()=>O("<h2>","</h2>"),className:"p-1.5 hover:bg-gray-100 rounded text-gray-700 font-bold text-xs border border-gray-200",title:"H2",children:"H2"}),t.jsx("button",{onClick:()=>O("<h3>","</h3>
3041"),className:"p-1.5 hover:bg-gray-100 rounded text-gray-700 font-bold text-xs border border-gray-200",title:"H3",children:"H3"}),t.jsx("div",{className:"w-px bg-gray-300 h-4 mx-1"}),t.jsx("button",{onClick:()=>O("<strong>","</strong>"),className:"p-1.5 hover:bg-gray-100 rounded text-gray-700 border border-gray-200",title:"Жирный",children:t.jsx(X1,{className:"w-3 h-3"})}),t.jsx("button",{onClick:()=>O("<p>","</p>"),className:"p-1.5 hover:bg-gray-100 rounded text-gray-700 border border-gray-200",title:"Параграф",children:t.jsx(_x,{className:"w-3 h-3"})}),t.jsx("button",{onClick:()=>O(`<ul>
3042  <li>Item</li>
3043</ul>`),className:"p-1.5 hover:bg-gray-100 rounded text-gray-700 border border-gray-200",title:"Список",children:t.jsx(Wd,{className:"w-3 h-3"})}),t.jsx("div",{className:"w-px bg-gray-300 h-4 mx-1"}),t.jsx("button",{onClick:()=>O('<a href="#" class="text-[#ff3b30] hover:underline">',"</a>"),className:"p-1.5 hover:bg-gray-100 rounded text-gray-700 border border-gray-200",title:"Ссылка",children:t.jsx(ks,{className:"w-3 h-3"})}),t.jsx("div",{className:"flex-1"}),t.jsxs("button",{onClick:E,className:"text-[10px] uppercase font-bold text-[#ff3b30] hover:bg-red-50 px-2 py-1 rounded flex items-center gap-1 border border-red-100",children:[t.jsx(Op,{className:"w-3 h-3"})," Шаблон"]})]}),t.jsx("div",{className:"flex-1 relative",children:t.jsx("textarea",{id:"content-editor",value:x.content||"",onChange:U=>C(x.id,{content:U.target.value}),className:"absolute inset-0 w-full h-full p-6 font-mono text-sm leading-relaxed outline-none resize-none bg-gray-50 text-gray-900 border-none focus:ring-0 custom-scrollbar",placeholder:"<!-- Введите HTML код здесь -->",spellCheck:!1})}),t.jsxs("div",{className:"h-6 bg-white border-t border-gray-200 text-gray-400 text-[10px] flex items-center px-4 font-mono flex-shrink-0 justify-between",children:[t.jsx("span",{children:"HTML EDITOR MODE"}),t.jsxs("span",{children:[(x.content||"").length," chars"]})]})]}),u==="faq"&&t.jsx("div",{className:"flex-1 overflow-y-auto p-6 bg-gray-50 space-y-6",children:t.jsxs("div",{className:"bg-white p-5 rounded-xl border border-gray-200 shadow-sm",children:[t.jsxs("div",{className:"flex items-center justify-between border-b border-gray-100 pb-4 mb-4",children:[t.jsxs("div",{children:[t.jsxs("h3",{className:"font-bold text-sm uppercase text-black flex items-center gap-2",children:[t.jsx(zd,{className:"w-4 h-4 text-purple-600"})," FAQ (Вопрос-Ответ)"]}),t.jsx("p",{className:"text-xs text-gray-500 mt-1",children:"Добавьте часто задаваемые вопросы. Они отобразятся внизу страницы в виде аккордеона."})]}),t.jsxs("button",{onClick:k,className:"text-xs font-bold uppercase text-white bg-black px-4 py-2 rounded hover:bg-[#ff3b30] transition-colors flex items-center gap-2",children:[t.jsx(At,{className:"w-3 h-3"})," Добавить"]})]}),!x.faq||x.faq.length===0?t.jsxs("div",{className:"text-center py-8 text-gray-400 border-2 border-dashed border-gray-100 rounded-lg",children:[t.jsx(zd,{className:"w-8 h-8 mx-auto mb-2 opacity-20"}),t.jsx("p",{className:"text-xs",children:"Список вопросов пуст"})]}):t.jsx("div",{className:"space-y-4",children:x.faq.map((U,q)=>t.jsxs("div",{className:"border border-gray-200 rounded-lg p-4 bg-gray-50 group hover:border-gray-300 transition-colors relative",children:[t.jsx("button",{onClick:()=>D(q),className:"absolute top-2 right-2 p-1.5 text-gray-400 hover:text-red-500 hover:bg-red-50 rounded-lg transition-colors opacity-0 group-hover:opacity-100",children:t.jsx(jt,{className:"w-4 h-4"})}),t.jsxs("div",{className:"space-y-3",children:[t.jsxs("div",{children:[t.jsx(dr,{children:"Вопрос"}),t.jsx("input",{value:U.question,onChange:P=>R(q,{question:P.target.value}),className:"w-full text-sm font-bold border border-gray-300 rounded p-2 bg-white text-black",placeholder:"Например: Как оформить возврат?"})]}),t.jsxs("div",{children:[t.jsx(dr,{children:"Ответ"}),t.jsx("textarea",{value:U.answer,onChange:P=>R(q,{answer:P.target.value}),className:"w-full text-sm border border-gray-300 rounded p-2 h-20 resize-y bg-white text-black",placeholder:"Подробный ответ..."})]})]})]},q))})]})}),u==="seo"&&t.jsxs("div",{className:"flex-1 overflow-y-auto p-6 bg-gray-50 space-y-6",children:[t.jsxs("div",{className:"bg-white p-5 rounded-xl border border-gray-200 shadow-sm space-y-4",children:[t.jsxs("div",{className:"flex items-center justify-between border-b border-gray-100 pb-3",children:[t.jsxs("h3",{className:"font-bold text-sm uppercase text-black flex items-center gap-2",children:[t.jsx(vs,{className:"w-4 h-4 text-blue-600"})," SEO Мета-теги"]}),t.jsxs("button",{onClick:_,className:"text-[10px] font-bold uppercase text-blue-600 bg-blue-50 px-2 py-1 rounded hover:bg-blue-100 flex items-center gap-1",children:[t.jsx(fu,{className:"w-3 h-3"})," Авто-заполнение"]})]}),t.jsxs("div",{children:[t.jsx(dr,{children:"Meta Title (Заголовок в поиске)"}),t.jsx("input",{value:((te=x.seo)==null?void 0:te.title)||"",onChange:U=>C(x.id,{seo:{...x.seo,title:U.target.value}}),className:"w-full text-sm border border-gray-300 rounded-lg p-2.5 bg-white text-black focus:ring-1 focus:ring-black",placeholder:"Заголовок страницы | Название сайта"})]}),t.jsxs("div",{children:[t.jsx(dr,{children:"Meta Description (Описание)"}),t.jsx("textarea",{value:((W=x.seo)==null?void 0:W.description)||"",onChange:U=>C(x.id,{seo:{...x.seo,description:U.target.value}}),className:"w-full text-sm border border-gray-300 rounded-lg p-2.5 bg-white text-black h-24 resize-none focus:ring-1 focus:ring-black leading-relaxed",placeholder:"Краткое описание страницы для поисковой выдачи (до 160 символов)..."})]}),t.jsxs("div",{children:[t.jsx(dr,{children:"Keywords (Ключевые слова)"}),t.jsx("input",{value:(($=x.seo)==null?void 0:$.keywords)||"",onChange:U=>C(x.id,{seo:{...x.seo,keywords:U.target.value}}),className:"w-full text-sm border border-gray-300 rounded-lg p-2.5 bg-white text-black focus:ring-1 focus:ring-black",placeholder:"слово1, слово2, фраза"})]})]}),t.jsxs("div",{className:"bg-white p-5 rounded-xl border border-gray-200 shadow-sm space-y-4",children:[t.jsxs("h3",{className:"font-bold text-sm uppercase text-black border-b border-gray-100 pb-3 flex items-center gap-2",children:[t.jsx(fr,{className:"w-4 h-4 text-purple-600"})," Социальные сети (OG Image)"]}),t.jsxs("div",{className:"flex gap-4 items-start",children:[t.jsxs("div",{className:"w-24 h-16 bg-gray-100 border border-gray-300 rounded-lg flex items-center justify-center overflow-hidden relative group cursor-pointer shrink-0",children:[(H=x.seo)!=null&&H.ogImage?t.jsx("img",{src:x.seo.ogImage,className:"w-full h-full object-cover"}):t.jsx(fr,{className:"w-6 h-6 text-gray-300"}),t.jsx("div",{className:"absolute inset-0 bg-black/50 opacity-0 group-hover:opacity-100 flex items-center justify-center transition-opacity",children:t.jsx(Ka,{className:"w-4 h-4 text-white"})}),t.jsx("input",{type:"file",className:"absolute inset-0 opacity-0 cursor-pointer",onChange:U=>g(U,q=>C(x.id,{seo:{...x.seo,ogImage:q}}))})]}),t.jsxs("div",{className:"flex-1",children:[t.jsx(dr,{children:"Ссылка на изображение"}),t.jsx("input",{value:((J=x.seo)==null?void 0:J.ogImage)||"",onChange:U=>C(x.id,{seo:{...x.seo,ogImage:U.target.value}}),className:"w-full text-xs border border-gray-300 rounded-lg p-2 bg-white text-black focus:ring-1 focus:ring-black mb-2",placeholder:"https://..."}),t.jsx("p",{className:"text-[10px] text-gray-400",children:"Рекомендуемый размер: 1200x630 пикселей."})]})]})]}),t.jsxs("div",{className:"bg-white p-4 rounded-xl border border-gray-200 shadow-sm flex items-center justify-between",children:[t.jsx("span",{className:"text-sm font-bold text-gray-700",children:"Индексация поисковиками (Robots)"}),t.jsxs("label",{className:"relative inline-flex items-center cursor-pointer",children:[t.jsx("input",{type:"checkbox",checked:((Y=x.seo)==null?void 0:Y.indexing)!==!1,onChange:U=>C(x.id,{seo:{...x.seo,indexing:U.target.checked}}),className:"sr-only peer"}),t.jsx("div",{className:"w-11 h-6 bg-gray-200 peer-focus:outline-none rounded-full peer peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all peer-checked:bg-green-600"})]})]})]})]}),t.jsx("div",{className:`flex-1 bg-gray-200 overflow-y-auto relative ${m?"flex justify-center p-8":"block"}`,children:t.jsxs("div",{className:`bg-white shadow-2xl transition-all duration-300 overflow-hidden flex flex-col ${m?"w-[375px] h-[667px] rounded-[30px] border-[8px] border-gray-800 my-auto":"min-h-full w-full"}`,children:[!m&&t.jsxs("div",{className:"h-9 bg-gray-50 border-b border-gray-200 flex items-center px-4 gap-2 shrink-0",children:[t.jsxs("div",{className:"flex gap-1.5",children:[t.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-red-400"}),t.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-yellow-400"}),t.jsx("div",{className:"w-2.5 h-2.5 rounded-full bg-green-400"})]}),t.jsxs("div",{className:"flex-1 bg-white border border-gray-200 h-6 rounded text-[10px] text-gray-500 flex items-center px-3 font-mono mx-4",children:["https://vorotex.com/page/",x.slug]})]}),t.jsxs("div",{className:`flex-1 overflow-visible custom-scrollbar bg-white ${m?"p-4":"p-10 max-w-4xl mx-auto w-full"}`,children:[t.jsx("h1",{className:"text-3xl md:text-5xl font-black uppercase mb-8 text-black tracking-tighter leading-none",children:x.title||"Заголовок"}),x.content?t.jsx("div",{className:"prose prose-sm md:prose-lg max-w-none text-gray-800 prose-headings:font-bold prose-headings:uppercase prose-headings:text-black prose-p:text-gray-800 prose-li:text-gray-800 prose-strong:text-black prose-a:text-[#ff3b30] prose-a:no-underline hover:prose-a:underline prose-img:rounded-xl prose-blockquote:text-gray-700 prose-blockquote:border-l-4 prose-blockquote:border-black",dangerouslySetInnerHTML:{__html:x.content}}):t.jsxs("div",{className:"text-gray-300 italic text-center py-20 border-2 border-dashed border-gray-100 rounded-xl",children:[t.jsx(_x,{className:"w-12 h-12 mx-auto mb-2 opacity-20"}),t.jsx("p",{children:"Пустая страница. Добавьте контент слева или загрузите шаблон."})]}),x.faq&&x.faq.length>0&&t.jsxs("div",{className:"mt-12 space-y-4",children:[t.jsx("h2",{className:"text-2xl font-black text-black uppercase mb-6 border-l-4 border-[#ff3b30] pl-4",children:"Частые вопросы"}),x.faq.map((U,q)=>t.jsxs("div",{className:"border border-gray-200 rounded-xl overflow-hidden bg-white",children:[t.jsx("div",{className:"w-full flex items-center justify-between p-4 bg-gray-50 border-b border-gray-100",children:t.jsxs("h3",{className:"font-bold text-black flex items-center gap-3",children:[t.jsx("span",{className:"text-[#ff3b30]",children:"Q."})," ",U.question]})}),t.jsx("div",{className:"p-4 text-gray-600 leading-relaxed text-sm",children:U.answer})]},q))]}),((G=x.contactForm)==null?void 0:G.enabled)&&t.jsxs("div",{className:"mt-12 p-6 bg-gray-50 border border-gray-200 rounded-xl opacity-80 grayscale",children:[t.jsx("h3",{className:"text-xl font-black uppercase mb-4 text-black",children:x.contactForm.title||"Напишите нам"}),t.jsxs("div",{className:"space-y-3 pointer-events-none",children:[t.jsx("input",{className:"w-full p-3 border rounded bg-white",placeholder:"Ваше имя",disabled:!0}),t.jsx("input",{className:"w-full p-3 border rounded bg-white",placeholder:"Email",disabled:!0}),t.jsx("textarea",{className:"w-full p-3 border rounded h-24 bg-white",placeholder:"Сообщение",disabled:!0}),t.jsx("button",{className:"px-6 py-3 bg-[#ff3b30] text-white font-bold uppercase rounded w-full",children:"Отправить"})]}),t.jsx("p",{className:"text-center text-xs text-gray-400 mt-2 font-bold uppercase",children:"[Форма обратной связи]"})]})]})]})})]})]})]})},Tj=({settings:r,onUpdateSettings:o,products:d,onUpdateProducts:c})=>{const[h,m]=j.useState(!1),[y,u]=j.useState(null),f=r.sync||{enabled:!1,url:"",intervalHours:3,mapping:{idTag:"id",priceTag:"price",stockTag:"rest"}},x=g=>{o({...r,sync:{...f,...g}})},N=(g,O)=>{o({...r,sync:{...f,mapping:{...f.mapping,[g]:O}}})},b=g=>{let O=0,E=0,_=0;return{newProducts:d.map(R=>{let D=!1,te=R.variants,W=R.stock,$=R.price,H=R.originalPrice;if(R.variants&&R.variants.length>0){let Y=!1;te=R.variants.map(G=>{const U=G.externalId||G.id;if(U){const q=g.find(P=>String(P.externalId)===String(U));if(q){_++;
3043const P=Number(q.stock),pe=Number(q.price),B=q.oldprice??q.originalPrice??q.oldPrice,z=B!=null&&Number(B)>0?Number(B):G.originalPrice;if(G.stock!==P||G.price!==pe||G.originalPrice!==z)return Y=!0,E++,{...G,stock:P,price:pe,originalPrice:z}}else if(G.stock!==0){Y=!0,E++;return {...G,stock:0}}}return G}),Y&&(D=!0,W=te.reduce((G,U)=>G+U.stock,0))}const J=R.externalId||R.id;if(J&&(!R.variants||R.variants.length===0)){const Y=g.find(G=>String(G.externalId)===String(J));if(Y){_++;const G=Number(Y.stock),U=Number(Y.price),q=Y.oldprice??Y.originalPrice??Y.oldPrice,P=q!=null&&Number(q)>0?Number(q):R.originalPrice;(R.stock!==G||R.price!==U||R.originalPrice!==P)&&(D=!0,W=G,$=U,H=P)}else if(R.stock!==0){D=!0,W=0}}return D?(O++,{...R,stock:W,price:$,originalPrice:H,variants:te}):R}),updatedProductsCount:O,updatedVariantsCount:E,matchedCount:_}},C=async()=>{if(!f.url){oe.error("Укажите URL XML файла");return}m(!0),u(null);try{const g=await fetch("/api/sync_price.php"),O=g.headers.get("content-type");if(g.ok&&O&&O.includes("application/json")){const _=await g.json();if(_.status==="error")throw new Error(_.message);if(Array.isArray(_.data)){const{newProducts:k,updatedProductsCount:R,updatedVariantsCount:D,matchedCount:te}=b(_.data),W=typeof _.total_found=="number"?_.total_found:Array.isArray(_.data)?_.data.length:0,$=R+D;$>0?(c(k),x({lastSync:new Date().toISOString()}),u(`Успешно! Найдено в XML: ${W}. Сопоставлено: ${te}. Обновлено: ${$} (товары: ${R}, варианты: ${D}).`),oe.success(`Обновлено: ${$}`)):(u(`Связь с сервером установлена. Найдено в XML: ${W}. Сопоставлено: ${te}. Изменений нет (цены/остатки уже актуальны).`),oe.success("Данные актуальны"));return}}const E=await g.text().catch(()=>"");throw new Error(E?`API вернул не-JSON: ${E.slice(0,80)}`:"API недоступен или вернул ошибку")}catch(g){if(console.warn("Real sync failed, falling back to simulation if local.",g),window.location.hostname==="localhost"||window.location.hostname.includes("webcontainer")){await new Promise(k=>setTimeout(k,1e3));const O=[];d.forEach(k=>{var R;k.externalId&&O.push({externalId:k.externalId,stock:Math.floor(Math.random()*50),price:k.price}),(R=k.variants)==null||R.forEach(D=>{D.externalId&&O.push({externalId:D.externalId,stock:Math.floor(Math.random()*50),price:D.price||k.price})})});const{newProducts:E,updatedCount:_}=b(O);_>0?(c(E),x({lastSync:new Date().toISOString()}),u(`⚠️ Демо-режим (Сервер не найден). Симуляция обновления: ${_} товаров.`),oe.success(`Демо-обновление: ${_} шт.`)):u("⚠️ Демо-режим. Не найдены товары с заполненным полем 'Внешний код'.")}else u(`Ошибка подключения к серверу: ${g.message}. Убедитесь, что файл api/sync_price.php загружен.`),oe.error("Ошибка синхронизации")}finally{m(!1)}};return t.jsxs("div",{className:"space-y-6 animate-fade-in pb-20",children:[t.jsxs("div",{className:"bg-white p-6 rounded-xl border border-gray-200 shadow-sm flex items-center gap-4",children:[t.jsx("div",{className:"p-3 bg-blue-50 text-blue-600 rounded-lg",children:t.jsx(ks,{className:"w-6 h-6"})}),t.jsxs("div",{children:[t.jsx("h2",{className:"text-xl font-black uppercase text-black",children:"Интеграция с XML"}),t.jsx("p",{className:"text-xs text-gray-500 mt-1",children:"Автоматическое обновление цен и остатков из прайс-листа"})]})]}),t.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6",children:[t.jsxs("div",{className:"bg-white p-6 rounded-xl border border-gray-200 shadow-sm space-y-6",children:[t.jsxs("div",{className:"flex items-center justify-between",children:[t.jsx("h3",{className:"font-bold text-sm uppercase text-black",children:"Настройки подключения"}),t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx("span",{className:"text-xs font-bold text-gray-500 uppercase",children:"Авто-обновление"}),t.jsxs("label",{className:"relative inline-flex items-center cursor-pointer",children:[t.jsx("input",{type:"checkbox",checked:f.enabled,onChange:g=>x({enabled:g.target.checked}),className:"sr-only peer"}),t.jsx("div",{className:"w-9 h-5 bg-gray-200 peer-focus:outline-none rounded-full peer peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-4 after:w-4 after:transition-all peer-checked:bg-green-500"})]})]})]}),t.jsxs("div",{children:[t.jsx("label",{className:"text-[10px] font-bold text-gray-500 uppercase block mb-1.5",children:"Ссылка на XML файл"}),t.jsx("input",{value:f.url,onChange:g=>x({url:g.target.value}),className:"w-full p-3 border border-gray-300 rounded-lg text-sm bg-white text-black font-mono focus:ring-2 focus:ring-blue-500 outline-none",placeholder:"https://example.com/price.xml"}),t.jsx("div",{id:"sync-status-container",className:"mt-4 p-4 rounded-lg border border-blue-100 bg-blue-50/50 space-y-2",children:[t.jsx("div",{className:"flex items-center justify-between",children:[t.jsx("span",{className:"text-[10px] font-bold text-blue-600 uppercase",children:"Статус последнего обновления"}),t.jsx("div",{id:"sync-indicator",className:"w-2 h-2 rounded-full bg-gray-300"})]}),t.jsxs("div",{className:"flex flex-col gap-1",children:[t.jsxs("div",{className:"flex justify-between text-xs",children:[t.jsx("span",{className:"text-gray-500",children:"Время:"}),t.jsx("span",{id:"sync-time",className:"font-bold text-black",children:"—"})]}),t.jsxs("div",{className:"flex justify-between text-xs",children:[t.jsx("span",{className:"text-gray-500",children:"Результат:"}),t.jsx("span",{id:"sync-result",className:"font-bold text-black",children:"—"})]}),t.jsxs("div",{className:"flex justify-between text-xs",children:[t.jsx("span",{className:"text-gray-500",children:"Детали:"}
3043),t.jsx("span",{id:"sync-details",className:"font-bold text-black",children:"—"})]})]})]})]}),t.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[t.jsxs("div",{children:[t.jsx("label",{className:"text-[10px] font-bold text-gray-500 uppercase block mb-1.5",children:"Интервал (Часов)"}),t.jsxs("div",{className:"relative",children:[t.jsx(vp,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-400"}),t.jsx("input",{type:"number",min:"1",max:"24",value:f.intervalHours,onChange:g=>x({intervalHours:parseInt(g.target.value)||3}),className:"w-full pl-10 p-2.5 border border-gray-300 rounded-lg text-sm bg-white text-black focus:ring-1 focus:ring-black"})]})]}),t.jsxs("div",{children:[t.jsx("label",{className:"text-[10px] font-bold text-gray-500 uppercase block mb-1.5",children:"Последняя синхронизация"}),t.jsx("div",{className:"text-sm font-mono text-gray-600 bg-gray-50 p-2.5 rounded-lg border border-gray-200",children:f.lastSync?new Date(f.lastSync).toLocaleString():"Никогда"})]})]}),t.jsx("hr",{className:"border-gray-100"}),t.jsxs("div",{children:[t.jsx("h3",{className:"font-bold text-xs uppercase text-gray-500 mb-3",children:"Сопоставление полей XML"}),t.jsxs("div",{className:"grid grid-cols-3 gap-3",children:[t.jsxs("div",{children:[t.jsx("label",{className:"text-[10px] font-bold text-gray-400 uppercase block mb-1",children:"ID Товара (Tag)"}),t.jsx("input",{value:f.mapping.idTag,onChange:g=>N("idTag",g.target.value),className:"w-full p-2 border border-gray-300 rounded text-xs bg-white text-black font-mono",placeholder:"id"})]}),t.jsxs("div",{children:[t.jsx("label",{className:"text-[10px] font-bold text-gray-400 uppercase block mb-1",children:"Цена (Tag)"}),t.jsx("input",{value:f.mapping.priceTag,onChange:g=>N("priceTag",g.target.value),className:"w-full p-2 border border-gray-300 rounded text-xs bg-white text-black font-mono",placeholder:"price"})]}),t.jsxs("div",{children:[t.jsx("label",{className:"text-[10px] font-bold text-gray-400 uppercase block mb-1",children:"Остаток (Tag)"}),t.jsx("input",{value:f.mapping.stockTag,onChange:g=>N("stockTag",g.target.value),className:"w-full p-2 border border-gray-300 rounded text-xs bg-white text-black font-mono",placeholder:"rest"})]})]})]}),t.jsxs("button",{onClick:C,disabled:h,className:"w-full py-3 bg-black text-white rounded-lg font-bold uppercase text-xs hover:bg-blue-600 transition-colors flex items-center justify-center gap-2 disabled:opacity-50 disabled:cursor-not-allowed",children:[t.jsx(Ya,{className:`w-4 h-4 ${h?"animate-spin":""}`}),h?"Синхронизация...":"Запустить принудительно"]}),y&&t.jsx("div",{className:`p-4 rounded-lg text-xs border ${y.includes("Успешно")?"bg-green-50 border-green-200 text-green-800":y.includes("Демо")?"bg-yellow-50 border-yellow-200 text-yellow-800":"bg-red-50 border-red-200 text-red-800"}`,children:y})]}),t.jsxs("div",{className:"space-y-6",children:[t.jsxs("div",{className:"bg-yellow-50 p-6 rounded-xl border border-yellow-200 shadow-sm text-yellow-900",children:[t.jsxs("h3",{className:"font-bold text-sm uppercase mb-3 flex items-center gap-2",children:[t.jsx(kp,{className:"w-4 h-4"})," Важно: Серверная часть"]}),t.jsx("p",{className:"text-sm mb-3 leading-relaxed",children:"Для автоматической работы синхронизации (например, каждые 3 часа), браузер не может быть закрыт. Чтобы обновление работало 24/7, необходимо загрузить специальный PHP скрипт на ваш хостинг и настроить Cron (планировщик задач)."}),t.jsxs("div",{className:"bg-white p-4 rounded border border-yellow-200 text-xs font-mono overflow-x-auto",children:[t.jsx("p",{className:"text-gray-500 mb-1",children:"// Пример команды для Cron (каждые 3 часа):"}),t.jsx("code",{children:"0 */3 * * * /usr/bin/php /var/www/site/api/cron_sync.php"})]})]}),t.jsxs("div",{className:"bg-white p-6 rounded-xl border border-gray-200 shadow-sm",children:[t.jsxs("h3",{className:"font-bold text-sm uppercase mb-4 text-black flex items-center gap-2",children:[t.jsx(mr,{className:"w-4 h-4"}
3043)," Инструкция по настройке"]}),t.jsxs("ol",{className:"list-decimal list-inside space-y-3 text-sm text-gray-600",children:[t.jsxs("li",{children:["Убедитесь, что у каждого товара (или варианта) в каталоге заполнено поле ",t.jsx("strong",{children:'"Внешний код (ID)"'}),". Он должен совпадать с ID в XML файле."]}),t.jsxs("li",{children:["Скачайте скрипт ",t.jsx("code",{children:"sync_cron.php"}),"."]}),t.jsxs("li",{children:["Загрузите его в папку ",t.jsx("code",{children:"/api/"})," на вашем хостинге."]}),t.jsxs("li",{children:["В админ-панели хостинга найдите раздел ",t.jsx("strong",{children:"CronTab (Планировщик)"}),"."]}),t.jsx("li",{children:"Добавьте задачу на выполнение этого скрипта с нужным интервалом."})]}),t.jsxs("div",{className:"mt-6 p-4 bg-gray-100 rounded border border-gray-200",children:[t.jsx("p",{className:"text-xs font-bold text-gray-500 uppercase mb-2",children:"Как связать товары?"}),t.jsxs("p",{className:"text-xs text-gray-600",children:["Зайдите в раздел ",t.jsx("strong",{children:'"Каталог"'}),", откройте редактирование товара и вставьте ID из прайс-листа в поле ",t.jsx("strong",{children:'"Внешний код"'}),". Если у товара есть варианты (цвета), раскройте таблицу вариантов и пропишите ID для каждого."]})]})]})]})]})]})},gn=()=>{const r=localStorage.getItem("vorotex_admin_token"),o=localStorage.getItem("vorotex_admin_csrf");return{...r?{"X-Admin-Token":r}:{},...o?{"X-CSRF-Token":o}:{}}},Xd=r=>{if(!r)return"";try{return new Date(r).toLocaleString()}catch{return r}},Gx=(r,o)=>{const d=o==null?void 0:o.formTitle;return typeof d=="string"&&d.trim()?d.trim():r==="cooperation"?"Заявка на сотрудничество":r==="contact"?"Общие вопросы":r==="support"?"Поддержка":r||"Форма"},_j=({settings:r,onUpdateSettings:o})=>{var z;const[d,c]=j.useState([]),[h,m]=j.useState(!1),[y,u]=j.useState(null),[f,x]=j.useState(null),[N,b]=j.useState([]),[C,g]=j.useState(""),[O,E]=j.useState("Ответ VOROTEX"),[_,k]=j.useState(""),[R,D]=j.useState("all"),[te,W]=j.useState(!1),$=((z=r==null?void 0:r.notifications)==null?void 0:z.messagesReply)||{},H=$.greeting||"Здравствуйте!",J=$.signature||`С уважением,
3044команда VOROTEX`,Y=j.useMemo(()=>{const v=_.trim().toLowerCase(),T=d.filter(A=>R==="new"?(A.status||"open")==="open":R==="answered"?(A.status||"")==="answered":R==="important"?(A.is_important||0)===1:!0);return v?T.filter(A=>(A.email||"").toLowerCase().includes(v)||(A.name||"").toLowerCase().includes(v)||(A.subject||"").toLowerCase().includes(v)||(A.message||"").toLowerCase().includes(v)):T},[d,_,R]),G=async()=>{m(!0);try{const v=await fetch("/api/get_messages.php?limit=200",{headers:gn()}),T=v.headers.get("content-type")||"";if(!v.ok){if(T.includes("application/json")){const K=await v.json().catch(()=>null),w=K!=null&&K.message?String(K.message):`HTTP ${v.status}`,V=K!=null&&K.detail?`: ${String(K.detail)}`:"",M=K!=null&&K.requestId?` (id: ${String(K.requestId)})`:"";throw new Error(`${w}${V}${M}`)}throw new Error(`HTTP ${v.status}`)}if(!T.includes("application/json"))throw new Error("Not JSON");const A=await v.json();if(A.status!=="success"||!Array.isArray(A.data))throw new Error(A.message||"Bad payload");c(A.data)}catch(v){oe.error(`Не удалось загрузить сообщения: ${(v==null?void 0:v.message)||"ошибка"}`),c([])}finally{m(!1)}},U=async v=>{u(v),x(null),b([]),g(""),E("Ответ VOROTEX");try{const T=await fetch(`/api/get_message.php?id=${encodeURIComponent(String(v))}`,{headers:gn()}),A=T.headers.get("content-type")||"";if(!T.ok){if(A.includes("application/json")){const w=await T.json().catch(()=>null),V=w!=null&&w.message?String(w.message):`HTTP ${T.status}`,M=w!=null&&w.detail?`: ${String(w.detail)}`:"",X=w!=null&&w.requestId?` (id: ${String(w.requestId)})`:"";throw new Error(`${V}${M}${X}`)}throw new Error(`HTTP ${T.status}`)}if(!A.includes("application/json"))throw new Error("Not JSON");const K=await T.json();if(K.status!=="success")throw new Error(K.message||"Ошибка сервера");x(K.message),b(Array.isArray(K.replies)?K.replies:[]),c(w=>w.map(V=>V.id===v?{...V,is_read:1}:V))}catch(T){oe.error(`Не удалось открыть сообщение: ${(T==null?void 0:T.message)||"ошибка"}`)}},q=async(v,T)=>{try{const A=await fetch("/api/update_message.php",{method:"POST",headers:{"Content-Type":"application/json",...gn()},body:JSON.stringify({id:v,is_important:T?1:0})}),K=A.headers.get("content-type")||"";if(!A.ok)throw new Error(`HTTP ${A.status}`);if(!K.includes("application/json"))throw new Error("Not JSON");const w=await A.json();if(w.status!=="success")throw new Error(w.message||"Ошибка");c(V=>V.map(M=>M.id===v?{...M,is_important:T?1:0}:M)),x(V=>V&&V.id===v?{...V,is_important:T?1:0}:V)}catch(A){oe.error(`Не удалось обновить: ${(A==null?void 0:A.message)||"ошибка"}`)}},P=async v=>{if(!window.confirm("Удалить сообщение и всю переписку? Это действие необратимо."))return;const T=oe.loading("Удаляем...");try{const A=await fetch("/api/delete_message.php",{method:"POST",headers:{"Content-Type":"application/json",...gn()},body:JSON.stringify({id:v})}),K=A.headers.get("content-type")||"";if(!A.ok)throw new Error(`HTTP ${A.status}`);if(!K.includes("application/json"))throw new Error("Not JSON");const w=await A.json();if(w.status!=="success")throw new Error(w.message||"Ошибка");oe.success("Удалено",{id:T}),c(V=>V.filter(M=>M.id!==v)),y===v&&(u(null),x(null),b([]))}catch(A){oe.error(`Ошибка удаления: ${(A==null?void 0:A.message)||"ошибка"}`,{id:T})}}
3044,pe=v=>{const T={...r,notifications:{...r.notifications,messagesReply:{...r.notifications.messagesReply||{},...v}}};o(T)},B=async()=>{if(!y||!f)return;const v=C.trim();if(!v){oe.error("Введите текст ответа");return}const T=oe.loading("Отправляем ответ...");try{const A=await fetch("/api/reply_message.php",{method:"POST",headers:{"Content-Type":"application/json",...gn()},body:JSON.stringify({contactId:y,subject:O.trim()||"Ответ VOROTEX",message:v})}),K=A.headers.get("content-type")||"";if(!A.ok)throw new Error(`HTTP ${A.status}`);if(!K.includes("application/json"))throw new Error("Not JSON");const w=await A.json();if(w.status!=="success")throw new Error(w.message||"Ошибка сервера");oe.success("Ответ отправлен",{id:T}),g(""),await U(y),c(V=>V.map(M=>M.id===y?{...M,status:"answered",reply_count:(M.reply_count||0)+1}:M))}catch(A){oe.error(`Ошибка отправки: ${(A==null?void 0:A.message)||"ошибка"}`,{id:T})}};return j.useEffect(()=>{G()},[]),t.jsxs("div",{className:"space-y-6 animate-fade-in pb-20",children:[t.jsxs("div",{className:"bg-white p-6 rounded-xl border border-gray-200 shadow-sm flex items-center justify-between gap-4",children:[t.jsxs("div",{className:"flex items-center gap-4",children:[t.jsx("div",{className:"p-3 bg-red-50 text-[#ff3b30] rounded-lg",children:t.jsx(no,{className:"w-6 h-6"})}),t.jsxs("div",{children:[t.jsx("h2",{className:"text-xl font-black uppercase text-black",children:"Сообщения"}),t.jsx("p",{className:"text-xs text-gray-500 mt-1",children:"Обращения с форм сайта + ответы (переписка)"})]})]}),t.jsxs("button",{onClick:G,className:"px-4 py-2 bg-black text-white rounded-lg text-xs font-bold uppercase hover:bg-[#ff3b30] transition-colors flex items-center gap-2",children:[t.jsx(Ya,{className:`w-4 h-4 ${h?"animate-spin":""}`})," Обновить"]})]}),t.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-12 gap-6",children:[t.jsxs("div",{className:"lg:col-span-5 bg-white border border-gray-200 rounded-xl overflow-hidden shadow-sm",children:[t.jsxs("div",{className:"p-4 border-b border-gray-100 flex items-center gap-2",children:[t.jsx(xa,{className:"w-4 h-4 text-gray-400"}),t.jsx("input",{value:_,onChange:v=>k(v.target.value),className:"flex-1 text-sm bg-white text-black outline-none",placeholder:"Поиск по email/имени/теме/тексту..."}),t.jsx("span",{className:"text-[10px] font-bold text-gray-400 uppercase",children:Y.length})]}),t.jsx("div",{className:"p-3 border-b border-gray-100 flex flex-wrap gap-2",children:[{id:"all",label:"Все"},{id:"new",label:"Новое"},{id:"answered",label:"Отвечено"},{id:"important",label:"Важное"}].map(v=>t.jsx("button",{onClick:()=>D(v.id),className:`px-3 py-1.5 rounded-full text-[10px] font-black uppercase border transition-colors ${R===v.id?"bg-black text-white border-black":"bg-white text-gray-600 border-gray-200 hover:border-gray-400"}`,children:v.label},v.id))}),t.jsx("div",{className:"max-h-[70vh] overflow-visible custom-scrollbar",children:Y.length===0?t.jsx("div",{className:"p-6 text-center text-gray-400 text-sm",children:h?"Загрузка...":"Сообщений пока нет"}):Y.map(v=>{const T=v.id===y,A=(v.is_read||0)===0,K=(v.is_important||0)===1;return t.jsx("button",{onClick:()=>U(v.id),className:`w-full text-left p-4 border-b border-gray-100 hover:bg-gray-50 transition-colors ${T?"bg-gray-50":""}`,children:t.jsxs("div",{className:"flex items-start justify-between gap-3",children:[t.jsxs("div",{className:"min-w-0",children:[t.jsxs("div",{className:"flex items-center gap-2",children:[A?t.jsx("span",{className:"w-2 h-2 rounded-full bg-[#ff3b30]"}):t.jsx("span",{className:"w-2 h-2 rounded-full bg-gray-200"}),t.jsx("div",{className:"text-xs font-black uppercase text-black truncate",children:v.subject||"Без темы"})]}),t.jsx("div",{className:"mt-1 flex items-center gap-2",children:t.jsx("span",{className:"text-[10px] font-bold uppercase px-2 py-0.5 rounded-full bg-gray-100 text-gray-700",children:Gx(v.type,v.meta)})}),t.jsxs("div",{className:"mt-1 text-xs text-gray-500 truncate flex items-center gap-2",children:[t.jsx(Jl,{className:"w-3 h-3"}),t.jsx("span",{className:"font-bold text-gray-700",children:v.name||v.email}),t.jsx("span",{className:"text-gray-400",children:v.email})]}),t.jsx("div",{className:"mt-2 text-xs text-gray-500 line-clamp-2",children:v.message||""})]}),t.jsxs("div",{className:"flex flex-col items-end gap-2 flex-shrink-0",children:[t.jsxs("div",{className:"text-[10px] text-gray-400 flex items-center gap-1",children:[t.jsx(vp,{className:"w-3 h-3"})," ",Xd(v.created_at)]}),t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx("button",{type:"button",onClick:w=>{w.stopPropagation(),q(v.id,!K)},className:`p-1.5 rounded-lg border transition-colors ${K?"bg-yellow-50 border-yellow-200 text-yellow-600":"bg-white border-gray-200 text-gray-400 hover:text-yellow-600 hover:border-yellow-200"}`,title:K?"Убрать из важного":"Отметить как важное",children:t.jsx(Va,{className:`w-4 h-4 ${K?"fill-yellow-400 text-yellow-500":""}`})}),t.jsx("span",{className:`text-[9px] font-bold uppercase px-2 py-1 rounded border ${v.status==="answered"?"bg-green-50 border-green-200 text-green-700":v.status==="closed"?"bg-gray-50 border-gray-200 text-gray-600":"bg-yellow-50 border-yellow-200 text-yellow-800"}`,children:v.status==="answered"?"отвечено":v.status==="closed"?"закрыто":"новое"}),v.reply_count>0&&t.jsxs("span",{className:"text-[9px] font-bold uppercase px-2 py-1 rounded border bg-white border-gray-200 text-gray-600",children:[v.reply_count," ответ(ов)"]})]})]})]})},v.id)})})]}),t.jsx("div",{className:"lg:col-span-7 bg-white border border-gray-200 rounded-xl overflow-hidden shadow-sm",children:f?t.jsxs("div",{className:"flex flex-col h-full",children:[t.jsx("div",{className:"p-5 border-b border-gray-100 bg-gray-50",children:t.jsxs("div",{className:"flex items-start justify-between gap-4",children:[t.jsxs("div",{className:"min-w-0",children:[t.jsx("div",{className:"text-lg font-black uppercase text-black truncate",children:f.subject||"Без темы"}),t.jsx("div",{className:"mt-2",children:t.jsx("span",{className:"text-[10px] font-bold uppercase px-2 py-0.5 rounded-full bg-gray-100 text-gray-700",children:Gx(f.type,f.meta)})}),t.jsxs("div",{className:"text-xs text-gray-500 mt-1",children:[t.jsx("span",{className:"font-bold text-black",children:f.name||f.email}),t.jsxs("span",{className:"text-gray-400",children:[" • ",f.email]}),f.phone?t.jsxs("span",{className:"text-gray-400",children:[" • ",f.phone]}):null]}),t.jsx("div",{className:"text-[10px] text-gray-400 mt-1",children:Xd(f.created_at)})]}),t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx("button",{onClick:()=>q(f.id,!f.is_important),className:`p-2 rounded-xl border transition-colors ${(f.is_important||0)===1?"bg-yellow-50 border-yellow-200 text-yellow-700":"bg-white border-gray-200 text-gray-500 hover:border-yellow-200 hover:text-yellow-700"}`,title:"Важное",children:t.jsx(Va,{className:`w-4 h-4 ${(f.is_important||0)===1?"fill-yellow-400 text-yellow-600":""}`})}),t.jsx("button",{onClick:()=>P(f.id),className:"p-2 rounded-xl border border-gray-200 bg-white text-gray-500 hover:text-red-600 hover:border-red-200 transition-colors",title:"Удалить",children:t.jsx(jt,{className:"w-4 h-4"})}),f.status==="answered"?t.jsxs("span",{className:"inline-flex items-center gap-1 text-xs font-bold text-green-700 bg-green-50 border border-green-200 px-2 py-1 rounded",children:[t.jsx(ev,{className:"w-4 h-4"})," Отвечено"]}):t.jsxs("span",{className:"inline-flex items-center gap-1 text-xs font-bold text-yellow-800 bg-yellow-50 border border-yellow-200 px-2 py-1 rounded",children:[t.jsx(to,{className:"w-4 h-4"})," Новое"]})]})]})}),t.jsxs("div",{className:"p-5 space-y-4 overflow-visible custom-scrollbar max-h-[55vh]",children:[t.jsxs("div",{className:"bg-white border border-gray-200 rounded-xl p-4",children:[t.jsx("div",{className:"text-[10px] font-bold uppercase tracking-wider text-gray-400 mb-2",children:"Сообщение клиента"}),t.jsx("div",{className:"text-sm text-gray-800 whitespace-pre-wrap",children:f.message||""})]}),N.map(v=>t.jsxs("div",{className:`rounded-xl p-4 border ${v.direction==="out"?"bg-black text-white border-black":"bg-white border-gray-200"}`,children:[t.jsxs("div",{className:"flex items-center justify-between gap-3 mb-2",children:[t.jsx("div",{className:"text-[10px] font-black uppercase tracking-wider opacity-80",children:v.direction==="out"?`Ответ админа${v.admin_email?` (${v.admin_email})`:""}`:"Сообщение"}),t.jsx("div",{className:"text-[10px] opacity-70",children:Xd(v.created_at)})]}),v.subject?t.jsx("div",{className:"text-xs font-bold mb-2 opacity-90",children:v.subject}):null,t.jsx("div",{className:"text-sm whitespace-pre-wrap",children:v.message||""})]},v.id))]}),t.jsxs("div",{className:"p-5 border-t border-gray-100 bg-white",children:[t.jsxs("button",{type:"button",onClick:()=>W(v=>!v),className:"mb-4 w-full flex items-center justify-between px-4 py-3 rounded-xl border border-gray-200 bg-gray-50 hover:bg-gray-100 transition-colors",children:[t.jsxs("div",{className:"flex items-center gap-2 text-xs font-black uppercase text-gray-700",children:[t.jsx(L2,{className:"w-4 h-4"})," Приветствие и подпись"]}),t.jsx("span",{className:"text-[10px] font-bold text-gray-400 uppercase",children:te?"Скрыть":"Показать"})]}),te&&t.jsxs("div",{className:"mb-4 grid grid-cols-1 md:grid-cols-2 gap-3",children:[t.jsxs("div",{children:[t.jsx("div",{className:"text-[10px] font-bold uppercase text-gray-500 mb-1",children:"Приветствие"}),t.jsx("textarea",{value:H,onChange:v=>pe({greeting:v.target.value}),className:"w-full text-sm border border-gray-300 rounded-lg p-3 bg-white text-black h-20 resize-none"})]}),t.jsxs("div",{children:[t.jsx("div",{className:"text-[10px] font-bold uppercase text-gray-500 mb-1",children:"Подпись"}),t.jsx("textarea",{value:J,onChange:v=>pe({signature:v.target.value}),className:"w-full text-sm border border-gray-300 rounded-lg p-3 bg-white text-black h-20 resize-none"})]}),t.jsx("div",{className:"md:col-span-2 text-[10px] text-gray-400",children:"Эти поля сохраняются в настройках сайта и будут использоваться в письмах-ответах."})]}),t.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-3 mb-3",children:[t.jsxs("div",{className:"md:col-span-1",children:[t.jsx("div",{className:"text-[10px] font-bold uppercase text-gray-500 mb-1",children:"Тема ответа"}),t.jsx("input",{value:O,onChange:v=>E(v.target.value),className:"w-full text-sm border border-gray-300 rounded-lg p-2 bg-white text-black",placeholder:"Тема письма"})]}),t.jsx("div",{className:"md:col-span-2"})]}),t.jsx("div",{className:"text-[10px] font-bold uppercase text-gray-500 mb-1",children:"Ответ"}),t.jsx("textarea",{value:C,onChange:v=>g(v.target.value),className:"w-full text-sm border border-gray-300 rounded-lg p-3 bg-white text-black h-28 resize-none",placeholder:"Напишите ответ клиенту..."}),t.jsx("div",{className:"mt-3 flex justify-end",children:t.jsxs("button",{onClick:B,className:"px-5 py-3 bg-black text-white rounded-xl font-black uppercase tracking-wider text-xs hover:bg-[#ff3b30] transition-colors flex items-center gap-2",children:[t.jsx(fo,{className:"w-4 h-4"})," Отправить"]})}),t.jsxs("div",{className:"mt-2 text-[10px] text-gray-400",children:["Письмо уйдёт на email клиента. В письме автоматически добавятся приветствие/подпись и метка [TICKET:",y,"]."]})]})]}):t.jsxs("div",{className:"p-10 text-center text-gray-400",children:[t.jsx(ro,{className:"w-14 h-14 mx-auto mb-4 opacity-20"}),t.jsx("div",{className:"font-bold uppercase",children:"Выберите сообщение слева"}),t.jsx("div",{className:"text-sm mt-2",children:"Здесь появится переписка и форма ответа"})]})})]})]})},Rj="VOROTEX_DB",Mj=5,Pl="app_data",ze={open:()=>new Promise((r,o)=>{const d=indexedDB.open(Rj,Mj);d.onupgradeneeded=c=>{const h=c.target.result;h.objectStoreNames.contains(Pl)||h.createObjectStore(Pl)},d.onsuccess=()=>r(d.result),d.onerror=()=>{console.error("IDB Open Error:",d.error),o(d.error)}}),get:async(r,o)=>{try{const d=await ze.open();return new Promise((c,h)=>{const u=d.transaction(Pl,"readonly").objectStore(Pl).get(r);u.onsuccess=()=>
3044{if(u.result!==void 0){c(u.result);return}try{let f=window.localStorage.getItem(r),x="primary_ls";if(!f&&o&&(f=window.localStorage.getItem(o),x="legacy_ls"),f){const N=JSON.parse(f);console.log(`[Storage] Migrating data for ${r} from ${x} to IndexedDB`),ze.set(r,N).catch(b=>console.warn("Migration save failed",b)),c(N);return}}catch(f){console.warn(`[Storage] Migration check failed for ${r}`,f)}try{const b=window.localStorage.getItem(r);if(b){c(JSON.parse(b));return}}catch(b){}c(null)},u.onerror=()=>{console.error(`[Storage] Error getting ${r}`,u.error);try{const f=window.localStorage.getItem(r);if(f){c(JSON.parse(f));return}}catch(f){}h(u.error)}})}catch(d){console.error(`[Storage] Critical DB Failure for ${r}`,d);try{const c=window.localStorage.getItem(r);if(c)return JSON.parse(c)}catch{}return null}},set:async(r,o)=>{try{const c=JSON.stringify(o);c.length<4e6&&window.localStorage.setItem(r,c)}catch(e){console.warn("[Storage] LS backup failed",e)}try{const d=await ze.open();return new Promise((c,h)=>{const u=d.transaction(Pl,"readwrite").objectStore(Pl).put(o,r);u.onsuccess=()=>c(),u.onerror=()=>{console.error(`[Storage] Error setting ${r}`,u.error),h(u.error)}})}catch(d){console.error(`[Storage] Set failed completely for ${r}`,d)}},recoverLegacy:r=>{try{const o=Array.isArray(r)?r:[r];for(const d of o){const c=window.localStorage.getItem(d);if(c)return console.log(`[Storage] Found backup data in ${d}`),JSON.parse(c)}for(let d=0;d<localStorage.length;d++){const c=localStorage.key(d);if(c&&c.includes("vorotex_products"))return console.log(`[Storage] Found loose product key: ${c}`),JSON.parse(localStorage.getItem(c)||"null")}return null}catch(o){return console.error("Legacy Recovery Error:",o),null}},getStorageStats:async()=>{let r=0;try{const y=(await ze.open()).transaction(Pl,"readonly").objectStore(Pl).count();r=await new Promise(u=>{y.onsuccess=()=>u(y.result),y.onerror=()=>u(0)})}catch{}let o=0,d=0;for(let c in window.localStorage)window.localStorage.hasOwnProperty(c)&&(d++,o+=window.localStorage[c].length*2);return{dbItems:r,lsItems:d,lsSize:(o/1024/1024).toFixed(2)+" MB"}}};function $a(r,o){if(o==null)return r;if(typeof r!=typeof o)return o;if(Array.isArray(r)&&Array.isArray(o)){if(r.length>0&&typeof r[0]=="object"&&"id"in r[0]){const c=new Map;return r.forEach(h=>c.set(h.id,h)),o.forEach(h=>{if(!(!h||typeof h!="object"||!h.id))if(c.has(h.id)){const m=c.get(h.id);c.set(h.id,$a(m,h))}else c.set(h.id,h)}),Array.from(c.values())}return o}if(typeof o=="object"){const d={...r};for(const c in o)c in r?d[c]=$a(r[c],o[c]):d[c]=o[c];return d}return o}const Pi=({children:r})=>t.jsx("label",{className:"text-xs font-bold text-gray-500 uppercase block mb-1.5",children:r}),Aj=r=>Array.isArray(r)?r.map(o=>{if(!o)return o;const c=Array.isArray(o.variants)&&o.variants.length>0?o.variants.map(m=>({...m,externalId:(m==null?void 0:m.externalId)||(m==null?void 0:m.id)||""})):o.variants,h=o.externalId||o.id||"";return{...o,externalId:h,variants:c}}):r,Dj=r=>{const[o,d]=j.useState(r.initialTab||"statistics"),[c,h]=j.useState(0),[m,y]=j.useState(0),[u,f]=j.useState(!0),[x,N]=j.useState(!1),[b,C]=j.useState(!1),[g,O]=j.useState(0),[E,_]=j.useState(r.lastSaved||null),[k,R]=j.useState(()=>{try{return JSON.parse(localStorage.getItem("vorotex_auto_publish")||"true")}catch{return!0}}),[D,te]=j.useState("idle"),[W,$]=j.useState(!1),[H,J]=j.useState(!1),[Y,G]=j.useState(null),U=j.useRef(null);const vxRole=(()=>{try{const s=JSON.parse(localStorage.getItem("vorotex_admin_session")||"{}");return s.role||"admin"}catch(e){return"admin"}})();const vxIsManager=vxRole==="manager";j.useEffect(()=>{if(vxIsManager){const restricted=["stock","integration","filters","database","admin_users","support","content_pages","settings","seo"];if(restricted.includes(o))d("statistics");}},[o,vxIsManager]);j.useEffect(()=>{const w=document.querySelector('link[rel="icon"]');if(!w)return;const V=w.getAttribute("href")||"/favicon.svg";return w.setAttribute("href","/admin-favicon.svg"),()=>{w.setAttribute("href",V)}},[]),j.useEffect(()=>{r.initialTab&&d(r.initialTab)},[r.initialTab]);const q=()=>{C(!0),O(Date.now()),te("idle")},P={...r,onUpdateProducts:w=>{r.onUpdateProducts(w),q()},onUpdateCategories:w=>{r.onUpdateCategories(w),q()},onUpdateSeo:w=>{r.onUpdateSeo(w),q()},onUpdateCatalogSeo:w=>{r.onUpdateCatalogSeo(w),q()},onUpdateHeroSlides:w=>{r.onUpdateHeroSlides(w),q()},onUpdateNavLinks:w=>{r.onUpdateNavLinks(w),q()},onUpdateMarketplaces:w=>{r.onUpdateMarketplaces(w),q()},onUpdateMarketplacesContent:w=>{r.onUpdateMarketplacesContent(w),q()},onUpdateReviews:w=>{r.onUpdateReviews(w),q()},onLogoImageChange:w=>{r.onLogoImageChange(w),q()},onUpdateFooterColumns:w=>{r.onUpdateFooterColumns(w),q()},onUpdateSocialLinks:w=>{r.onUpdateSocialLinks(w),q()},onUpdatePages:w=>{r.onUpdatePages(w),q()},onUpdateCarouselSettings:w=>{r.onUpdateCarouselSettings(w),q()}
3044,onUpdateInternalShopSettings:w=>{r.onUpdateInternalShopSettings(w),q()},onUpdateSupportSettings:w=>{r.onUpdateSupportSettings(w),q()},onUpdateTickerSettings:w=>{r.onUpdateTickerSettings(w),q()},onUpdateAdmins:w=>{r.onUpdateAdmins(w),q()}};j.useEffect(()=>{o==="database"&&pe()},[o]),j.useEffect(()=>{let w=!0;const V=async()=>{try{const X=localStorage.getItem("vorotex_admin_token"),le=localStorage.getItem("vorotex_admin_csrf"),xe={...X?{"X-Admin-Token":X}:{},...le?{"X-CSRF-Token":le}:{}},[ge,je]=await Promise.all([fetch("/api/get_messages_stats.php",{headers:xe}),fetch("/api/get_orders_stats.php",{headers:xe})]),Ne=ge.headers.get("content-type")||"",Ee=je.headers.get("content-type")||"";if(ge.ok&&Ne.includes("application/json")){const Ge=await ge.json();(Ge==null?void 0:Ge.status)==="success"&&typeof Ge.unread=="number"&&w&&h(Ge.unread)}if(je.ok&&Ee.includes("application/json")){const Ge=await je.json();(Ge==null?void 0:Ge.status)==="success"&&typeof Ge.checking=="number"&&w&&y(Ge.checking)}}catch{}};V();const M=window.setInterval(V,3e4);return()=>{w=!1,window.clearInterval(M)}},[]),j.useEffect(()=>{["orders","delivery_payment","order_settings","sales","customers"].includes(o)&&$(!0)},[o]);const pe=()=>{ze.getStorageStats().then(G)},B=()=>{r.navigate("/")},z=w=>{w.preventDefault(),window.confirm("Выйти из панели администратора?")&&(localStorage.removeItem("vorotex_admin_session"),r.navigate("/"),window.location.reload())},v=async w=>{N(!0);const V=!!(w!=null&&w.silent),M=V?null:oe.loading("Сохранение данных на сервер...");V&&te("saving");const X={products:Aj(r.products),categories:r.categories,seo:r.seo,catalogSeo:r.catalogSeo,heroSlides:r.heroSlides,navLinks:r.navLinks,marketplaces:r.marketplaces,marketplacesContent:r.marketplacesContent,reviews:r.reviews,logoImage:r.logoImage,footerColumns:r.footerColumns,socialLinks:r.socialLinks,pages:r.pages,carouselSettings:r.carouselSettings,internalShopSettings:r.internalShopSettings,supportSettings:r.supportSettings,tickerSettings:r.tickerSettings,admins:r.admins,updatedAt:new Date().toISOString()};try{await Wl.saveData(X),M&&oe.success("Все изменения сохранены на сервере!",{id:M}),C(!1);const le=new Date().toISOString();_(le),V&&te("saved")}catch(le){console.error(le),M?oe.error(`Ошибка сохранения: ${le.message}`,{id:M}):(te("error"),oe.error(`Автосохранение не удалось: ${(le==null?void 0:le.message)||"ошибка"}`))}finally{N(!1)}};j.useEffect(()=>{if(!k||!b||x)return;const w=setTimeout(()=>{Date.now()-g<2500||v({silent:!0})},3500);return()=>clearTimeout(w)},[k,b,x,g]),j.useEffect(()=>{const w=V=>{b&&(V.preventDefault(),V.returnValue="")};return window.addEventListener("beforeunload",w),()=>window.removeEventListener("beforeunload",w)},[b]);const T=()=>{const w=r.onExportConfig(),V=JSON.parse(w),M=JSON.parse(localStorage.getItem("vorotex_demo_orders")||"[]"),X=JSON.parse(localStorage.getItem("vorotex_users")||"[]"),le=JSON.parse(localStorage.getItem("vorotex_admins")||"[]"),xe={...V,orders:M,users:X,admins:le,backupDate:new Date().toISOString()},ge=JSON.stringify(xe,null,2),je=new Blob([ge],{type:"application/json"}),Ne=URL.createObjectURL(je),Ee=document.createElement("a");Ee.href=Ne,Ee.download=`vorotex-FULL-BACKUP-${new Date().toISOString().slice(0,10)}.json`,document.body.appendChild(Ee),Ee.click(),document.body.removeChild(Ee),oe.success("Полная резервная копия (включая заказы и админов) скачана!")},A=w=>{var X;const V=(X=w.target.files)==null?void 0:X[0];if(!V)return;const M=new FileReader;M.onload=le=>{var ge;const xe=(ge=le.target)==null?void 0:ge.result;try{const je=JSON.parse(xe);r.onImportConfig(xe)&&(je.orders&&localStorage.setItem("vorotex_demo_orders",JSON.stringify(je.orders)),je.users&&localStorage.setItem("vorotex_users",JSON.stringify(je.users)),je.admins&&(localStorage.setItem("vorotex_admins",JSON.stringify(je.admins)),r.onUpdateAdmins(je.admins)),oe.success("База данных успешно восстановлена!"),pe(),Wl.saveData(je).then(()=>window.location.reload()))}catch(je){oe.error("Ошибка чтения файла резервной копии"),console.error(je)}},M.readAsText(V)},K=async(w,V)=>{var le;const M=(le=w.target.files)==null?void 0:le[0];if(!M)return;const X=oe.loading("Загрузка...");try{try{const xe=await Wl.uploadFile(M);V(xe),oe.success("Файл загружен на сервер",{id:X})}catch(xe){console.warn("Server upload failed, falling back to base64",xe);const ge=await jr(M);V(ge),oe.success("Загружено локально (Base64)",{id:X})}}catch{oe.error("Ошибка загрузки",{id:X})}};return t.jsxs("div",{className:"flex h-screen bg-gray-100 overflow-hidden font-sans",children:[t.jsxs("aside",{className:`bg-[#111] text-white flex flex-col transition-all duration-300 ${u?"w-64":"w-20"} relative z-50`,children:[t.jsx("div",{className:"h-16 flex items-center justify-center border-b border-gray-800 px-4",children:u?t.jsxs("div",{className:"flex items-center gap-2 font-black text-xl tracking-tighter",children:[t.jsx("span",{className:"text-[#ff3b30]",children:"VOROTEX"})," ADMIN"]}):t.jsx("span",{className:"text-[#ff3b30] font-black text-xl",children:"V"})}),t.jsxs("div",{className:"flex-1 py-6 space-y-1 overflow-y-auto overscroll-contain custom-scrollbar",children:[t.jsxs("button",{onClick:()=>d("statistics"),className:`w-full flex items-center px-6 py-3 hover:bg-gray-800 transition-colors ${o==="statistics"?"bg-[#ff3b30] text-white hover:bg-[#ff3b30]":"text-gray-400"}`,children:[t.jsx(K1,{className:"w-5 h-5 min-w-[20px]"}),u&&t.jsx("span",{className:"ml-3 font-bold text-sm uppercase",children:"Статистика"})]}),t.jsxs("button",{onClick:()=>d("catalog"),className:`w-full flex items-center px-6 py-3 hover:bg-gray-800 transition-colors ${o==="c
3044atalog"?"bg-[#ff3b30] text-white hover:bg-[#ff3b30]":"text-gray-400"}`,children:[t.jsx(Cp,{className:"w-5 h-5 min-w-[20px]"}),u&&t.jsx("span",{className:"ml-3 font-bold text-sm uppercase",children:"Каталог"})]}),!vxIsManager&&t.jsxs("button",{onClick:()=>d("stock"),className:`w-full flex items-center px-6 py-3 hover:bg-gray-800 transition-colors ${o==="stock"?"bg-[#ff3b30] text-white hover:bg-[#ff3b30]":"text-gray-400"}`,children:[t.jsx(Dv,{className:"w-5 h-5 min-w-[20px]"}),u&&t.jsx("span",{className:"ml-3 font-bold text-sm uppercase",children:"Склад (Прайс)"})]}),t.jsxs("div",{children:[u?t.jsxs("button",{onClick:()=>$(!W),className:"w-full flex items-center justify-between px-6 py-3 text-gray-500 hover:text-white transition-colors",children:[t.jsxs("div",{className:"flex items-center gap-3",children:[t.jsx(Jt,{className:"w-5 h-5"}),t.jsx("span",{className:"font-bold text-sm uppercase",children:"Заказы на сайте"}),m>0&&t.jsx("span",{className:"ml-1 inline-flex items-center justify-center min-w-[18px] h-[18px] px-1.5 rounded-full bg-[#ff3b30] text-white text-[10px] font-black",children:m>99?"99+":m})]}),W?t.jsx(Mt,{className:"w-4 h-4"}):t.jsx(ys,{className:"w-4 h-4"})]}):t.jsx("div",{className:"w-full flex justify-center py-3 text-gray-500 cursor-pointer hover:text-white",onClick:()=>{f(!0),$(!0)},children:t.jsx(Jt,{className:"w-5 h-5"})}),W&&u&&t.jsxs("div",{className:"bg-gray-900/50 border-l-2 border-gray-800 ml-6 my-1",children:[t.jsxs("button",{onClick:()=>d("orders"),className:`w-full flex items-center px-4 py-2 hover:bg-gray-800 transition-colors ${o==="orders"?"text-[#ff3b30] font-bold":"text-gray-400"}`,children:[t.jsx(ws,{className:"w-4 h-4 mr-3"}),t.jsx("span",{className:"text-xs uppercase",children:"Заказы"})]}),t.jsxs("button",{onClick:()=>d("customers"),className:`w-full flex items-center px-4 py-2 hover:bg-gray-800 transition-colors ${o==="customers"?"text-[#ff3b30] font-bold":"text-gray-400"}`,children:[t.jsx(_p,{className:"w-4 h-4 mr-3"}),t.jsx("span",{className:"text-xs uppercase",children:"Покупатели"})]}),t.jsxs("button",{onClick:()=>d("delivery_payment"),className:`w-full flex items-center px-4 py-2 hover:bg-gray-800 transition-colors ${o==="delivery_payment"?"text-[#ff3b30] font-bold":"text-gray-400"}`,children:[t.jsx(Pa,{className:"w-4 h-4 mr-3"}),t.jsx("span",{className:"text-xs uppercase",children:"Доставка и Оплата"})]}),t.jsxs("button",{onClick:()=>d("order_settings"),className:`w-full flex items-center px-4 py-2 hover:bg-gray-800 transition-colors ${o==="order_settings"?"text-[#ff3b30] font-bold":"text-gray-400"}`,children:[t.jsx(yl,{className:"w-4 h-4 mr-3"}),t.jsx("span",{className:"text-xs uppercase",children:"Лимиты / Статусы"})]}),t.jsxs("button",{onClick:()=>d("sales"),className:`w-full flex items-center px-4 py-2 hover:bg-gray-800 transition-colors ${o==="sales"?"text-[#ff3b30] font-bold":"text-gray-400"}`,children:[t.jsx(C2,{className:"w-4 h-4 mr-3"}),t.jsx("span",{className:"text-xs uppercase",children:"ВКЛ/ВЫКЛ Продаж"})]})]})]}),!vxIsManager&&t.jsxs("div",{children:[u?t.jsxs("button",{onClick:()=>J(!H),className:"w-full flex items-center justify-between px-6 py-3 text-gray-500 hover:text-white transition-colors",children:[t.jsxs("div",{className:"flex items-center gap-3",children:[t.jsx(hr,{className:"w-5 h-5"}),t.jsx("span",{className:"font-bold text-sm uppercase",children:"Контент и Дизайн"})]}),H?t.jsx(Mt,{className:"w-4 h-4"}):t.jsx(ys,{className:"w-4 h-4"})]}):t.jsx("div",{className:"w-full flex justify-center py-3 text-gray-500 cursor-pointer hover:text-white",onClick:()=>{f(!0),J(!0)},children:t.jsx(hr,{className:"w-5 h-5"})}),H&&u&&t.jsxs("div",{className:"bg-gray-900/50 border-l-2 border-gray-800 ml-6 my-1",children:[t.jsxs("button",{onClick:()=>d("content_pages"),className:`w-full flex items-center px-4 py-2 hover:bg-gray-800 transition-colors ${o==="content_pages"?"text-[#ff3b30] font-bold":"text-gray-400"}`,children:[t.jsx(mr,{className:"w-4 h-4 mr-3"}),t.jsx("span",{className:"text-xs uppercase",children:"Страницы"})]}),t.jsxs("button",{onClick:()=>d("settings"),className:`w-full flex items-center px-4 py-2 hover:bg-gray-800 transition-colors ${o==="settings"?"text-[#ff3b30] font-bold":"text-gray-400"}`,children:[t.jsx(yl,{className:"w-4 h-4 mr-3"}),t.jsx("span",{className:"text-xs uppercase",children:"Настройки сайта"})]})]})]}),!vxIsManager&&t.jsxs("button",{onClick:()=>d("integration"),className:`w-full flex items-center px-6 py-3 hover:bg-gray-800 transition-colors ${o==="integration"?"bg-[#ff3b30] text-white hover:bg-[#ff3b30]":"text-gray-400"}`,children:[t.jsx(ks,{className:"w-5 h-5 min-w-[20px]"}),u&&t.jsx("span",{className:"ml-3 font-bold text-sm uppercase",children:"Интеграции"})]}),t.jsxs("button",{onClick:()=>d("messages"),className:`relative w-full flex items-center px-6 py-3 hover:bg-gray-800 transition-colors ${o==="messages"?"bg-[#ff3b30] text-white hover:bg-[#ff3b30]":"text-gray-400"}`,children:[t.jsx(no,{className:"w-5 h-5 min-w-[20px]"}),u&&t.jsxs("div",{className:"ml-3 flex items-center justify-between w-full",children:[t.jsx("span",{className:"font-bold text-sm uppercase",children:"Сообщения"}),c>0&&t.jsx("span",{className:"inline-flex items-center justify-center min-w-[18px] h-[18px] px-1.5 rounded-full bg-[#ff3b30] text-white text-[10px] font-black",children:c>99?"99+":c})]}),!u&&c>0&&t.jsx("span",{className:"absolute right-2 top-2 inline-flex items-center justify-center min-w-[18px] h-[18px] px-1.5 rounded-full bg-[#ff3b30] text-white text-[10px] font-black",children:c>99?"99+":c})]}),!vxIsManager&&t.jsxs("button",{onClick:()=>d("filters"),className:`w-full flex items-center px-6 py-3 hover:bg-gray-800 transition-colors ${o==="filters"?"bg-[#ff3b30] text-white hover:bg-[#ff3b30]":"text-gray-400"}`,children:[t.jsx(pr,{className:"w-5 h-5 min-w-[20px]"}),u&&t.jsx("span",{className:"ml-3 font-bold text-sm uppercase",children:"Фильтры"})]}),!vxIsManager&&t.jsxs("button",{onClick:()=>d("database"),className:`w-full flex items-center px-6 py-3 hover:bg-gray-800 transition-colors ${o==="database"?"bg-[#ff3b30] text-white hover:bg-[#ff3b30]":"text-gray-400"}`,children:[t.jsx(wp,{className:"w-5 h-5 min-w-[20px]"}),u&&t.jsx("span",{className:"ml-3 font-bold text-sm uppercase",children:"База Данных"})]}),!vxIsManager&&t.jsxs("button",{onClick:()=>d("admin_users"),className:`w-full flex items-center px-6 py-3 hover:bg-gray-800 transition-colors ${o==="admin_users"?"bg-[#ff3b30] text-white hover:bg-[#ff3b30]":"text-gray-400"}`,children:[t.jsx(io,{className:"w-5 h-5 min-w-[20px]"}),u&&t.jsx("span",{className:"ml-3 font-bold text-sm uppercase",children:"Администраторы"})]}),!vxIsManager&&t.jsxs("button",{onClick:()=>d("support"),className:`w-full flex items-center px-6 py-3 hover:bg-gray-800 transition-colors ${o==="support"?"bg-[#ff3b30] text-white hover:bg-[#ff3b30]":"text-gray-400"}`,children:[t.jsx(Rp,{className:"w-5 h-5 min-w-[20px]"}),u&&t.jsx("span",{className:"ml-3 font-bold text-sm uppercase",children:"Поддержка"})]})]}),t.jsxs("div",{className:"p-4 border-t border-gray-800",children:[t.jsx("button",{onClick:()=>f(!u),className:"w-full flex items-center justify-center p-2 text-gray-500 hover:text-white transition-colors",children:u?t.jsx(Fd,{className:"w-5 h-5"}):t.jsx(Fd,{className:"w-5 h-5"})}),t.jsxs("button",{onClick:B,className:`w-full mt-4 flex items-center justify-center py-2 bg-gray-800 rounded hover:bg-gray-700 transition-colors ${u?"":"px-0"}`,title:"Открыть сайт",children:[t.jsx(vs,{className:"w-4 h-4"}),u&&t.jsx("span",{className:"ml-2 text-xs font-bold uppercase",children:"На сайт"})]}),t.jsxs("button",{onClick:z,className:`w-full mt-2 flex items-center justify-center py-2 bg-red-900/20 text-red-500 rounded hover:bg-red-900/40 transition-colors ${u?"":"px-0"}`,title:"Выйти",children:[t.jsx(Ep,{className:"w-4 h-4"}),u&&t.jsx("span",{className:"ml-2 text-xs font-bold uppercase",children:"Выйти"})]})]})]}),t.jsxs("main",{className:"flex-1 overflow-auto bg-gray-100 p-8",children:[t.jsxs("header",{className:"flex items-center justify-between mb-8 pb-4 border-b border-gray-200",children:[t.jsxs("div",{children:[t.jsxs("h1",{className:"text-2xl font-black text-black uppercase tracking-tight",children:[o==="database"&&"Управление Базой Данных",o==="settings"&&"Настройки Сайта",o==="content_pages"&&"Управление Страницами",o==="catalog"&&"Каталог Товаров",o==="sales"&&"Управление Продажами",o==="stock"&&"Управление Складом",o==="filters"&&"Настройка Фильтров",o==="statistics"&&"Аналитика",o==="orders"&&"Менеджер Заказов",o==="delivery_payment"&&"Доставка и Оплата",o==="order_settings"&&"Настройки Заказа и Виджета",o==="admin_users"&&"Управление Администраторами",o==="customers"&&"Покупатели",o==="support"&&"Файловый Менеджер (Драйверы)",o==="integration"&&"Интеграция с XML (Прайс-лист)",o==="messages"&&"Сообщения"]}),t.jsx("p",{className:"text-sm text-gray-500 mt-1 font-medium",children:"Панель администратора VOROTEX"})]}),t.jsxs("div",{className:"flex items-center gap-4",children:[t.jsxs("div",{className:"hidden md:flex items-center gap-2 text-xs font-bold uppercase",children:[t.jsx("button",{type:"button",onClick:()=>{const w=!k;R(w),localStorage.setItem("vorotex_auto_publish",JSON.stringify(w)),oe.success(w?"Автосохранение включено":"Автосохранение выключено")},className:`px-3 py-2 rounded-lg border transition-colors ${k?"border-green-300 bg-green-50 text-green-700":"border-gray-200 bg-white text-gray-600"}`,title:"Если включено — изменения сохраняются автоматически через несколько секунд после правок",children:k?"Автосохранение: ВКЛ":"Автосохранение: ВЫКЛ"}),t.jsx("span",{className:"text-gray-500",children:x||D==="saving"?"Сохраняем…":b?"Есть несохранённые изменения":"Всё сохранено"}),E&&!b&&t.jsxs("span",{className:"text-gray-400 font-mono",children:["(",new Date(E).toLocaleTimeString(),")"]})]}),t.jsxs("button",{onClick:()=>v(),disabled:x,className:"px-6 py-3 bg-green-600 text-white rounded-lg font-bold uppercase text-xs tracking-wide hover:bg-green-700 transition-all flex items-center gap-2 shadow-lg disabled:opacity-50 disabled:cursor-not-allowed",children:[x?t.jsx(Ya,{className:"w-4 h-4 animate-spin"}):t.jsx(rv,{className:"w-4 h-4"}),x?"Сохранение...":b?"ОПУБЛИКОВАТЬ (есть изменения)":"ОПУБЛИКОВАТЬ"]}),r.lastSaved&&t.jsxs("span",{className:"text-xs text-gray-400 font-mono",children:["Last saved: ",new Date(r.lastSaved).toLocaleTimeString()]})]})]}),t.jsxs("div",{className:"max-w-7xl mx-auto h-full flex flex-col",children:[o==="database"&&t.jsxs("div",{className:"space-y-6 animate-fade-in",children:[t.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-6 mb-8",children:[t.jsxs("div",{className:"bg-white p-6 rounded-xl border border-gray-200 shadow-sm",children:[t.jsx("h3",{className:"text-xs font-bold text-gray-400 uppercase tracking-wider mb-2",children:"Объектов в БД"}),t.jsx("p",{className:"text-3xl font-black text-black",children:(Y==null?void 0:Y.dbItems)||0})]}),t.jsxs("div",{className:"bg-white p-6 rounded-xl border border-gray-200 shadow-sm",children:[t.jsx("h3",{className:"text-xs font-bold text-gray-400 uppercase tracking-wider mb-2",children:"Объектов в LocalStorage"}),t.jsx("p",{className:"text-3xl font-black text-black",children:(Y==null?void 0:Y.lsItems)||0})]}),t.jsxs("div",{className:"bg-white p-6 rounded-xl border border-gray-200 shadow-sm",children:[t.jsx("h3",{className:"text-xs font-bold text-gray-400 uppercase tracking-wider mb-2",children:"Размер хранилища"}),t.jsx("p",{className:"text-3xl font-black text-black",children:(Y==null?void 0:Y.lsSize)||"0 MB"})]})]}),t.jsx("div",{className:"bg-white p-8 rounded-xl border border-gray-200 shadow-sm space-y-6",children:t.jsxs("div",{children:[t.jsx("h3",{className:"text-lg font-bold text-black uppercase mb-4",children:"Резервное копирование (Полное)"}),t.jsx("p",{className:"text-sm text-gray-500 mb-4",children:"Сохраняет все настройки, товары, заказы, пользователей и список администраторов в один файл."}),t.jsxs("div",{className:"flex flex-wrap gap-4",children:[t.jsxs("button",{onClick:T,className:"flex items-center gap-2 px-6 py-3 bg-black text-white font-bold uppercase rounded hover:bg-gray-800 transition-colors",children:[t.jsx(pl,{className:"w-4 h-4"})," Скачать Полный Backup (JSON)"]}),t.jsxs("div",{className:"relative",children:[t.jsxs("button",{onClick:()=>{var w;return(w=U.current)==null?void 0:w.click()},className:"flex items-center gap-2 px-6 py-3 bg-white border-2 border-black text-black font-bold uppercase rounded hover:bg-gray-50 transition-colors",children:[t.jsx(Ka,{className:"w-4 h-4"})," Восстановить из файла"]}),t.jsx("input",{ref:U,type:"file",accept:".json",onChange:A,className:"absolute inset-0 opacity-0 cursor-pointer"})]})]})]})})]}
3044),o==="integration"&&t.jsx(Tj,{settings:r.internalShopSettings,onUpdateSettings:P.onUpdateInternalShopSettings,products:r.products,onUpdateProducts:P.onUpdateProducts}),o==="messages"&&t.jsx(_j,{settings:r.internalShopSettings,onUpdateSettings:P.onUpdateInternalShopSettings}),o==="support"&&t.jsx(Ej,{settings:r.supportSettings,onUpdateSettings:P.onUpdateSupportSettings,products:r.products}),o==="admin_users"&&t.jsx(kj,{admins:r.admins,onUpdateAdmins:P.onUpdateAdmins,currentUserEmail:r.currentUserEmail}),o==="customers"&&t.jsx(Oj,{logoImage:r.logoImage}),o==="content_pages"&&t.jsx("div",{className:"h-[calc(100vh-140px)]",children:t.jsx(Cj,{pages:r.pages,onUpdatePages:P.onUpdatePages,navigate:r.navigate})}),o==="settings"&&t.jsx(fj,{isOpen:!0,onClose:()=>{},isPanel:!0,...P,currentPath:"/admin"}),o==="catalog"&&t.jsx(pj,{isOpen:!0,onClose:()=>{},isPanel:!0,catalogSeo:r.catalogSeo,onUpdateCatalogSeo:P.onUpdateCatalogSeo,products:r.products,onUpdateProducts:P.onUpdateProducts,categories:r.categories,onUpdateCategories:P.onUpdateCategories,marketplaces:r.marketplaces,onResetDefaults:r.onResetDefaults,onExportConfig:r.onExportConfig,onImportConfig:r.onImportConfig,initialEditingProductId:r.targetProductId,navigate:r.navigate}),o==="stock"&&t.jsx(gj,{products:r.products,categories:r.categories,onUp
3044dateProducts:P.onUpdateProducts,navigate:r.navigate}),o==="filters"&&t.jsx("div",{className:"h-[calc(100vh-200px)]",children:t.jsx(bj,{categories:r.categories,products:r.products,onUpdateCategories:P.onUpdateCategories})}),o==="statistics"&&t.jsx(yj,{products:r.products,settings:r.internalShopSettings,onUpdateSettings:P.onUpdateInternalShopSettings}),o==="sales"&&t.jsxs("div",{className:"bg-white p-8 rounded-xl border border-gray-200 shadow-sm animate-fade-in",children:[t.jsxs("div",{className:"flex items-center justify-between mb-8",children:[t.jsxs("div",{children:[t.jsx("h2",{className:"text-2xl font-black text-black uppercase",children:"Управление Продажами"}),t.jsx("p",{className:"text-gray-500 text-sm mt-1",children:"Здесь вы можете полностью отключить функцию покупок на сайте."})]}),t.jsx("div",{className:`px-4 py-2 rounded-full font-bold uppercase text-sm ${r.internalShopSettings.enableSales?"bg-green-100 text-green-700":"bg-red-100 text-red-700"}`,children:r.internalShopSettings.enableSales?"Продажи ВКЛЮЧЕНЫ":"Продажи ОТКЛЮЧЕНЫ"})]}),t.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[t.jsxs("div",{className:`border-2 rounded-xl p-8 cursor-pointer transition-all shadow-md hover:shadow-lg ${r.internalShopSettings.enableSales?"border-green-500 bg-green-50":"border-gray-300 bg-white hover:border-gray-400"}`,onClick:()=>P.onUpdateInternalShopSettings({...r.internalShopSettings,enableSales:!r.internalShopSettings.enableSales}),children:[t.jsxs("div",{className:"flex items-center justify-between mb-4",children:[t.jsx("div",{className:`p-3 rounded-full ${r.internalShopSettings.enableSales?"bg-green-200":"bg-gray-200"}`,children:t.jsx(Jt,{className:`w-8 h-8 ${r.internalShopSettings.enableSales?"text-green-700":"text-gray-500"}`})}),t.jsx("div",{className:`w-12 h-6 rounded-full relative transition-colors ${r.internalShopSettings.enableSales?"bg-green-500":"bg-gray-300"}`,children:t.jsx("div",{className:`absolute top-1 w-4 h-4 rounded-full bg-white shadow-sm transition-transform ${r.internalShopSettings.enableSales?"left-7":"left-1"}`})})]}),t.jsx("h3",{className:"font-black text-xl text-black uppercase mb-2",children:r.internalShopSettings.enableSales?"КОРЗИНА АКТИВНА":"КОРЗИНА СКРЫТА"}),t.jsx("p",{className:"text-sm text-gray-600 font-medium",children:r.internalShopSettings.enableSales?"Посетители видят цены, кнопку 'В корзину' и могут оформлять заказы.":"Сайт работает в режиме каталога. Цены и кнопка 'В корзину' скрыты."})]}),t.jsxs("div",{className:`border-2 rounded-xl p-8 cursor-pointer transition-all shadow-md hover:shadow-lg ${r.internalShopSettings.maintenanceMode?"border-orange-500 bg-orange-50":"border-gray-300 bg-white hover:border-gray-400"}`,onClick:()=>P.onUpdateInternalShopSettings({...r.internalShopSettings,maintenanceMode:!r.internalShopSettings.maintenanceMode}),children:[t.jsxs("div",{className:"flex items-center justify-between mb-4",children:[t.jsx("div",{className:`p-3 rounded-full ${r.internalShopSettings.maintenanceMode?"bg-orange-200":"bg-gray-200"}`,children:t.jsx(io,{className:`w-8 h-8 ${r.internalShopSettings.maintenanceMode?"text-orange-700":"text-gray-500"}`})}),t.jsx("div",{className:`w-12 h-6 rounded-full relative transition-colors ${r.internalShopSettings.maintenanceMode?"bg-orange-500":"bg-gray-300"}`,children:t.jsx("div",{className:`absolute top-1 w-4 h-4 rounded-full bg-white shadow-sm transition-transform ${r.internalShopSettings.maintenanceMode?"left-7":"left-1"}`})})]}),t.jsx("h3",{className:"font-black text-xl text-black uppercase mb-2",children:r.internalShopSettings.maintenanceMode?"ТЕХ. РАБОТЫ ВКЛ":"САЙТ РАБОТАЕТ"}),t.jsx("p",{className:"text-sm text-gray-600 font-medium",children:"Закрыть доступ к сайту для посетителей (заглушка). Вы (как админ) продолжите видеть сайт."})]})]})]}
3044),o==="orders"&&t.jsx(vj,{settings:r.internalShopSettings}),o==="delivery_payment"&&t.jsx(wj,{settings:r.internalShopSettings,onUpdate:P.onUpdateInternalShopSettings}),o==="order_settings"&&t.jsxs("div",{className:"space-y-6 animate-fade-in",children:[t.jsx(Nj,{settings:r.internalShopSettings,onUpdate:P.onUpdateInternalShopSettings}),t.jsxs("div",{className:"bg-white p-6 rounded-xl border border-gray-200 shadow-sm",children:[t.jsxs("h3",{className:"text-lg font-bold text-black uppercase mb-4 flex items-center gap-2",children:[t.jsx(Jt,{className:"w-5 h-5"})," Виджет Магазина"]}),t.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[t.jsxs("div",{className:"space-y-4",children:[t.jsxs("div",{children:[t.jsx(Pi,{children:"Название магазина (в виджете)"}),t.jsx("input",{value:r.internalShopSettings.title,onChange:w=>r.onUpdateInternalShopSettings({...r.internalShopSettings,title:w.target.value}),className:"w-full text-sm border border-gray-300 rounded p-2.5 bg-white text-black"})]}),t.jsxs("div",{children:[t.jsx(Pi,{children:"Подзаголовок"}),t.jsx("input",{value:r.internalShopSettings.subtitle,onChange:w=>r.onUpdateInternalShopSettings({...r.internalShopSettings,subtitle:w.target.value}),className:"w-full text-sm border border-gray-300 rounded p-2.5 bg-white text-black"})]}),t.jsxs("div",{children:[t.jsx(Pi,{children:"Ссылка виджета (при клике)"}),t.jsx("input",{value:r.internalShopSettings.link,onChange:w=>r.onUpdateInternalShopSettings({...r.internalShopSettings,link:w.target.value}),className:"w-full text-sm border border-gray-300 rounded p-2.5 bg-white text-blue-600"})]})]}),t.jsxs("div",{className:"flex flex-col items-center justify-center bg-gray-50 rounded-xl border border-dashed border-gray-300 p-6",children:[t.jsxs("div",{className:"w-24 h-24 bg-white rounded-full flex items-center justify-center shadow-sm mb-4 relative overflow-hidden group",children:[r.internalShopSettings.image?t.jsx("img",{src:r.internalShopSettings.image,className:"w-full h-full object-contain p-2"}):t.jsx(Jt,{className:"w-10 h-10 text-gray-300"}),t.jsxs("div",{className:"absolute inset-0 bg-black/50 opacity-0 group-hover:opacity-100 flex items-center justify-center transition-opacity cursor-pointer",children:[t.jsx(fr,{className:"w-6 h-6 text-white"}),t.jsx("input",{type:"file",className:"absolute inset-0 opacity-0 cursor-pointer",onChange:w=>K(w,V=>r.onUpdateInternalShopSettings({...r.internalShopSettings,image:V}))})]})]}),t.jsx("p",{className:"text-xs font-bold uppercase text-gray-500",children:"Логотип магазина"})]})]})]}),t.jsxs("div",{className:"bg-white p-6 rounded-xl border border-gray-200 shadow-sm",children:[t.jsxs("h3",{className:"text-lg font-bold text-black uppercase mb-4 flex items-center gap-2",children:[t.jsx(Ql,{className:"w-5 h-5"})," Лимиты"]}),t.jsxs("div",{children:[t.jsx(Pi,{children:"Минимальная сумма заказа (руб)"}),t.jsx("input",{type:"number",value:r.internalShopSettings.minOrderSum||0,onChange:w=>r.onUpdateInternalShopSettings({...r.internalShopSettings,minOrderSum:parseInt(w.target.value)||0}),className:"w-full text-sm border border-gray-300 rounded p-2.5 bg-white text-black max-w-xs",placeholder:"0 = без ограничений"}),t.jsx("p",{className:"text-xs text-gray-500 mt-1",children:"Клиент не сможет оформить заказ, если сумма корзины меньше этого значения."})]})]})]})]})]})]})},zj=({navigate:r,logoImage:o})=>(j.useEffect(()=>{document.title="Технические работы | VOROTEX";const d=(c,h)=>{let m=document.querySelector(`meta[name="${c}"]`);m||(m=document.createElement("meta"),m.setAttribute("name",c),document.head.appendChild(m)),m.setAttribute("content",h)};d("robots","noindex, nofollow"),d("description","Сайт временно недоступен из‑за технических работ. Попробуйте позже.")},[]),t.jsxs("div",{className:"min-h-screen bg-[#050505] text-white flex flex-col items-center justify-center p-4 relative overflow-hidden",children:[t.jsx("div",{className:"absolute inset-0 bg-cyber-net opacity-20 pointer-events-none"}),t.jsx("div",{className:"absolute top-0 right-0 w-[50vw] h-[50v
3044w] bg-[#ff3b30] opacity-5 rounded-full blur-[150px] animate-pulse-slow"}),t.jsx("div",{className:"absolute bottom-0 left-0 w-[40vw] h-[40vw] bg-blue-600 opacity-5 rounded-full blur-[150px] animate-pulse-slow delay-1000"}),t.jsxs("div",{className:"relative z-10 max-w-2xl text-center",children:[t.jsxs("div",{className:"mb-12 relative inline-block",children:[t.jsx("div",{className:"absolute inset-0 bg-[#ff3b30] blur-2xl opacity-20 rounded-full animate-pulse"}),t.jsx(_n,{isDarkText:!1,customImage:o,className:"scale-150 relative z-10"})]}),t.jsxs("h1",{className:"text-4xl md:text-6xl font-black uppercase tracking-tighter mb-6",children:[t.jsx("span",{className:"text-transparent bg-clip-text bg-gradient-to-r from-white to-gray-500",children:"Система"})," ",t.jsx("span",{className:"text-[#ff3b30]",children:"Обновляется"})]}),t.jsx("p",{className:"text-gray-400 text-lg md:text-xl font-medium mb-12 max-w-lg mx-auto leading-relaxed border-l-2 border-[#ff3b30] pl-6",children:"Мы проводим плановое техническое обслуживание серверов и обновляем каталог. Сайт скоро вернется с новыми фичами и дропами."}),t.jsxs("div",{className:"inline-flex items-center gap-3 bg-white/5 border border-white/10 px-6 py-3 rounded-full mb-12",children:[t.jsx("div",{className:"w-3 h-3 bg-yellow-500 rounded-full animate-ping"}),t.jsx("div",{className:"w-3 h-3 bg-yellow-500 rounded-full absolute"}),t.jsx("span",{className:"text-sm font-mono text-yellow-500 uppercase tracking-widest",children:"Work in Progress"})]}),t.jsxs("div",{className:"mt-8 border-t border-white/10 pt-8 flex items-center justify-center gap-6",children:[t.jsx("a",{href:"#",className:"text-gray-500 hover:text-white transition-colors",children:t.jsx(fo,{className:"w-5 h-5"})}),t.jsx("a",{href:"#",className:"text-gray-500 hover:text-white transition-colors",children:t.jsx(Mp,{className:"w-5 h-5"})}),t.jsx("a",{href:"#",className:"text-gray-500 hover:text-white transition-colors",children:t.jsx(pu,{className:"w-5 h-5"})})]})]}),t.jsxs("div",{className:"absolute bottom-8 right-8 flex items-center gap-2 opacity-30 font-mono text-xs",children:[t.jsx(yl,{className:"w-4 h-4 animate-spin",style:{animationDuration:"3s"}}),t.jsx("span",{children:"V.2.5.0 BUILD_992"})]}),r&&t.jsx("button",{onClick:()=>r("/login"),className:"absolute top-8 right-8 p-2 text-gray-700 hover:text-white transition-colors z-50 opacity-20 hover:opacity-100",title:"Admin Login",children:t.jsx(Sp,{className:"w-5 h-5"})})]})),Bj=({categories:r,products:o,pages:d,navigate:c})=>{j.useEffect(()=>{document.title="Карта сайта (Sitemap) | VOROTEX",window.scrollTo(0,0),((y,u)=>{let f=document.querySelector(`meta[name="${y}"]`);f||(f=document.createElement("meta"),f.setAttribute("name",y),document.head.appendChild(f)),f.setAttribute("content",u)})("robots","noindex, follow")},[]);const h=m=>{m.startsWith("http")?window.open(m,"_blank"):c(m)};return t.jsx("div",{className:"pt-32 pb-20 min-h-screen bg-white text-black",children:t.jsxs("div",{className:"max-w-4xl mx-auto px-6",children:[t.jsxs("button",{onClick:()=>c("/"),className:"flex items-center gap-2 text-gray-500 hover:text-black mb-8 transition-colors group font-medium text-sm uppercase tracking-wide",children:[t.jsx(Ca,{className:"w-4 h-4 group-hover:-translate-x-1 transition-transform"})," На главную"]}),t.jsxs("h1",{className:"text-4xl font-black uppercase mb-12 flex items-center gap-4",children:[t.jsx(c2,{className:"w-10 h-10 text-[#ff3b30]"})," Карта сайта"]}),t.jsxs("div",{className:"space-y-12",children:[t.jsxs("div",{children:[t.jsxs("h2",{className:"text-xl font-bold uppercase mb-4 pb-2 border-b border-gray-200 flex items-center gap-2 text-gray-500",children:[t.jsx(Sv,{className:"w-5 h-5"})," Основные разделы"]}),t.jsxs("ul",{className:"grid grid-cols-1 md:grid-cols-2 gap-2",children:[t.jsx("li",{children:t.jsx("button",{onClick:()=>
3044h("/"),className:"hover:text-[#ff3b30] hover:underline",children:"Главная"})}),t.jsx("li",{children:t.jsx("button",{onClick:()=>h("/catalog"),className:"hover:text-[#ff3b30] hover:underline",children:"Каталог"})}),t.jsx("li",{children:t.jsx("button",{onClick:()=>h("/support"),className:"hover:text-[#ff3b30] hover:underline",children:"Поддержка"})})]})]}),t.jsxs("div",{children:[t.jsxs("h2",{className:"text-xl font-bold uppercase mb-4 pb-2 border-b border-gray-200 flex items-center gap-2 text-gray-500",children:[t.jsx(ws,{className:"w-5 h-5"})," Категории товаров"]}),t.jsx("ul",{className:"grid grid-cols-1 md:grid-cols-2 gap-2",children:r.map(m=>t.jsx("li",{children:t.jsx("button",{onClick:()=>h(m.link),className:"hover:text-[#ff3b30] hover:underline font-bold",children:m.name})},m.id))})]}),t.jsxs("div",{children:[t.jsxs("h2",{className:"text-xl font-bold uppercase mb-4 pb-2 border-b border-gray-200 flex items-center gap-2 text-gray-500",children:[t.jsx(ws,{className:"w-5 h-5"})," Товары"]}),t.jsx("ul",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-3",children:o.map(m=>{var y;return t.jsx("li",{children:t.jsxs("button",{onClick:()=>h(`/product/${m.id}`),className:"hover:text-[#ff3b30] hover:underline text-sm flex flex-col items-start",children:[t.jsx("span",{className:"font-bold",children:m.name}),t.jsx("span",{className:"text-xs text-gray-400 uppercase",children:(y=r.find(u=>u.id===m.category))==null?void 0:y.name})]})},m.id)})})]}),t.jsxs("div",{children:[t.jsxs("h2",{className:"text-xl font-bold uppercase mb-4 pb-2 border-b border-gray-200 flex items-center gap-2 text-gray-500",children:[t.jsx(mr,{className:"w-5 h-5"})," Информация"]}),t.jsx("ul",{className:"grid grid-cols-1 md:grid-cols-2 gap-2",children:d.map(m=>m.isVisible!==!1&&m.isVisible!==!1&&t.jsx("li",{children:t.jsx("button",{onClick:()=>h(`/page/${m.slug}`),className:"hover:text-[#ff3b30] hover:underline",children:m.title})},m.id))})]})]})]})})},Vj=({isOpen:r,onClose:o,favorites:d,onToggleFavorite:c,onAddToCart:h,enableSales:m,compareList:y=[],onToggleCompare:u,navigate:N})=>t.jsxs(t.Fragment,{children:[t.jsx("div",{className:`fixed inset-0 bg-black/60 backdrop-blur-sm z-[60] transition-opacity duration-300 ${r?"opacity-100":"opacity-0 pointer-events-none"}`,onClick:o}),t.jsx("div",{className:`fixed top-0 right-0 h-full w-full max-w-md bg-white border-l border-gray-100 shadow-2xl z-[70] transform transition-transform duration-300 ease-out ${r?"translate-x-0":"translate-x-full"}`,children:t.jsxs("div",{className:"flex flex-col h-full",children:[t.jsxs("div",{className:"flex items-center justify-between p-6 border-b border-gray-100",children:[t.jsxs("h2",{className:"text-2xl font-black text-black uppercase tracking-tighter flex items-center gap-2",children:[t.jsx(jn,{className:"text-[#ff3b30] fill-current"})," Избранное"]}),t.jsx("button",{onClick:o,className:"text-gray-400 hover:text-black transition-colors",children:t.jsx(xt,{className:"w-6 h-6"})})]}),t.jsx("div",{className:"flex-1 overflow-y-auto p-6 space-y-4",children:d.length===0?t.jsxs("div",{className:"h-full flex flex-col items-center justify-center text-gray-400 opacity-50",children:[t.jsx(jn,{className:"w-16 h-16 mb-4"}),t.jsx("p",{className:"text-lg font-bold uppercase",children:"Список пуст"}),t.jsx("p",{className:"text-xs",children:"Добавляйте товары, чтобы не потерять"})]}):d.map(f=>t.jsxs("div",{className:"flex gap-4 bg-gray-50 p-3 rounded-xl border border-gray-100 group relative",children:[t.jsx("div",{className:"w-20 h-20 rounded-lg overflow-hidden bg-white shrink-0 border border-gray-200 cursor-pointer hover:border-black transition-colors",onClick:()=>{o();N(`/product/${f.id}`)},children:t.jsx("img",{src:f.image,alt:f.name,className:"w-full h-full object-contain p-1"})}),t.jsxs("div",{className:"flex-1 flex flex-col justify-between",children:[t.jsxs("div",{children:[t.jsx("h3",{className:"font-bold text-black text-sm uppercase pr-6 cursor-pointer hover:text-[#ff3b30] transition-colors",onClick:()=>{o();N(`/product/${f.id}`)},children:f.name}),t.jsxs("p",{className:"text-gray-500 font-bold text-xs mt-1",children:[f.price.toLocaleStr
3044ing()," ",nt]})]}),t.jsxs("div",{className:"flex items-center gap-2 mt-2",children:[m&&t.jsxs("button",{onClick:()=>{h(f)},className:"text-xs font-bold uppercase bg-black text-white py-1.5 px-3 rounded hover:bg-[#ff3b30] transition-colors flex items-center gap-2 w-fit",children:[t.jsx(js,{className:"w-3 h-3"})," В корзину"]}),u&&t.jsx("button",{onClick:()=>u(f),className:`text-xs font-bold uppercase py-1.5 px-2 rounded border border-gray-300 transition-colors flex items-center gap-2 w-fit ${y.some(x=>x.id===f.id)?"bg-gray-200 text-black":"text-gray-500 hover:text-black hover:border-black"}`,title:"Сравнить",children:t.jsx(br,{className:"w-3 h-3"})})]})]}),t.jsx("button",{onClick:()=>c(f),className:"absolute top-3 right-3 text-red-500 hover:text-red-700 bg-white rounded-full p-1.5 shadow-sm opacity-0 group-hover:opacity-100 transition-opacity",title:"Удалить из избранного",children:t.jsx(jt,{className:"w-4 h-4"})})]},f.id))})]})})]}),$x=["Эргономичный дизайн","Тип клавиатуры","Конструкция","Количество клавиш","Раскладка","Материал корпуса","Материал клавиш","Тип кейкапов","Свитчи","Тип свитчей","Микропереключатели","Ресурс клавиш","Скорость отклика","Сенсор","DPI","Количество кнопок","Максимальное ускорение","Частота опроса","Вес","Дисплей","Регулятор громкости","Подсветка","Подключение","Емкость аккумулятора","Литиевый аккумулятор","Рабочий ток","Размеры","Длина кабеля","Поддержка ОС","Наличие софта"],Lj=({products:r,categories:o,onRemove:d,onAddToCart:c,navigate:h,enableSales:m})=>{var C;j.useEffect(()=>{document.title="Сравнение товаров | VOROTEX";const g=(E,_)=>{let k=document.querySelector(`meta[name="${E}"]`);k||(k=document.createElement("meta"),k.setAttribute("name",E),document.head.appendChild(k)),k.setAttribute("content",_)},O=E=>{let _=document.querySelector('link[rel="canonical"]');_||(_=document.createElement("link"),_.setAttribute("rel","canonical"),document.head.appendChild(_)),_.setAttribute("href",E)};g("robots","noindex, nofollow"),g("description","Сравнение товаров VOROTEX."),O(`${window.location.origin}/compare`)},[]);const y=j.useMemo(()=>{const g=new Set(r.map(O=>O.category));return o.filter(O=>g.has(O.id))},[r,o]),[u,f]=j.useState(null);j.useEffect(()=>{y.length>0?(!u||!y.find(g=>g.id===u))&&f(y[0].id):f(null)},[y,u]);const x=j.useMemo(()=>u?r.filter(g=>g.category===u):[],[r,u]),N=((C=o.find(g=>g.id===u))==null?void 0:C.name)||"Товары",b=j.useMemo(()=>{const g=new Set;x.forEach(R=>{R.specs&&Object.keys(R.specs).forEach(D=>g.add(D))});const O=Array.from(g),E=o.find(R=>R.id===u),_=new Set;return E!=null&&E.specFields&&E.specFields.forEach(R=>{R.hideInComparison&&(_.add(R.name),_.add(R.id))}),O.filter(R=>!_.has(R)).sort((R,D)=>{const te=$x.indexOf(R),W=$x.indexOf(D);return te!==-1&&W!==-1?te-W:te!==-1?-1:W!==-1?1:R.localeCompare(D)})},[x,o,u]);return r.length===0?t.jsxs("div",{className:"pt-32 pb-20 min-h-screen flex flex-col items-center justify-center bg-white text-black px-6 text-center",children:[t.jsx(br,{className:"w-16 h-16 text-gray-300 mb-4 mx-auto"}),t.jsx("h2",{className:"text-2xl font-bold uppercase mb-2",children:"Список сравнения пуст"}),t.jsx("p",{className:"text-gray-500 mb-6",children:"Добавьте товары из каталога, чтобы сравнить их характеристики."}),t.jsx("button",{onClick:()=>h("/catalog"),className:"px-6 py-3 bg-black text-white rounded font-bold hover:bg-[#ff3b30] transition-colors",children:"Перейти в каталог"})]}):t.jsx("div",{className:"pt-32 pb-20 min-h-screen bg-white",children:t.jsxs("div",{className:"max-w-[1400px] mx-auto px-4",children:[t.jsxs("div",{className:"mb-8",children:[t.jsxs("button",{onClick:()=>h("/catalog"),className:"flex items-center gap-2 text-gray-500 hover:text-black mb-4 transition-colors group font-medium text-sm uppercase tracking-wide",children:[t.jsx(Ca,{className:"w-4 h-4 group-hover:-translate-x-1 transition-transform"})," Вернуться в каталог"]}),t.jsxs("h1",{className:"text-3xl md:text-4xl font-black uppercase text-black tracking-tighter flex items-center gap-3",children:[t.jsx(br,{className:"w-8 h-8 md:w-10 md:h-10 text-[#ff3b30]"}),"Сравнение"]})]}),t.jsx("div",{className:"flex flex-wrap gap-3 mb-8 border-b border-gray-200 pb-4 overflow-x-auto",children:y.map(g=>{const O=r.filter(E=>E.category===g.id).length;return t.jsxs("button",{onClick:()=>f(g.id),className:`px-4 py-2 rounded-full text-sm font-bold uppercase transition-all flex items-center gap-2 border whitespace-nowrap ${u===g.id?"bg-black text-white border-black shadow-lg":"bg-white text-gray-500 border-gray-200 hover:border-black hover:text-black"}`,children:[g.name,t.jsx("span",{className:`text-[10px] px-1.5 py-0.5 rounded-full font-mono ${u===g.id?"bg-white text-black":"bg-gray-100 text-gray-600"}`,children:O})]},g.id)})}),t.jsx("div",{className:"overflow-x-auto pb-4 custom-scrollbar animate-fade-in",children:t.jsx("div",{className:"min-w-[800px]",children:t.jsxs("div",{className:"grid",style:{gridTemplateColumns:`250px repeat(${x.length}, minmax(200px, 1fr))`},children:[t.jsx("div",{className:"p-4 flex items-end font-bold text-gray-400 text-sm uppercase border-b border-gray-200",children:N}),x.map(g=>t.jsxs("div",{className:"p-4 border-b border-gray-200 border-l border-gray-100 relative group bg-white hover:bg-gray-50 transition-colors",children:[t.jsx("button",{onClick:()=>d(g),className:"absolute top-2 right-2 text-gray-300 hover:text-red-500 transition-colors",title:"Убрать из сравнения",children:t.jsx(xt,{className:"w-5 h-5"})}),t.jsx("div",{className:"aspect-[4/3] mb-4 flex items-center justify-center p-2 cursor-pointer",onClick:()=>h(`/product/${g.id}`),children:t.jsx("img",{src:g.image,alt:g.name,className:"w-full h-full object-contain mix-blend-multiply"})}),t.jsx("h3",{className:"font-bold text-lg uppercase mb-2 cursor-pointer hover:text-[#ff3b30] transition-colors",onClick:()=>h(`/product/${g.id}`),children:g.name}),t.jsxs("div",{className:"flex items-center justify-between mt-auto",children:[t.jsxs("div",{className:"font-bold text-xl",children:[g.price.toLocaleStr
3044ing()," ",nt]}),m&&t.jsx("button",{onClick:()=>c(g),className:"w-10 h-10 bg-black text-white rounded-lg flex items-center justify-center hover:bg-[#ff3b30] transition-colors shadow-sm",title:"В корзину",children:t.jsx(js,{className:"w-4 h-4"})})]})]},g.id)),b.map((g,O)=>t.jsxs(oo.Fragment,{children:[t.jsx("div",{className:`p-4 text-sm font-bold text-gray-600 uppercase flex items-center ${O%2===0?"bg-gray-50":"bg-white"}`,children:g.replace(/_/g," ")}),x.map(E=>{var _;return t.jsx("div",{className:`p-4 text-sm text-black border-l border-gray-100 flex items-center ${O%2===0?"bg-gray-50":"bg-white"}`,children:((_=E.specs)==null?void 0:_[g])||"-"},`${E.id}-${g}`)})]},g)),b.length===0&&x.length>0&&t.jsxs("div",{className:"col-span-full py-12 text-center text-gray-400",children:[t.jsx(Ql,{className:"w-8 h-8 mx-auto mb-2 opacity-50"}),"Нет общих характеристик для отображения"]})]})})})]})})},Uj=({navigate:r})=>{const[o,d]=j.useState(1),[c,h]=j.useState(!1),[m,y]=j.useState(!0),[u,f]=j.useState(!1),[x,N]=j.useState(null),[b,C]=j.useState({db_host:"localhost",db_name:"",db_user:"",db_pass:"",admin_login:"admin",admin_pass:""});j.useEffect(()=>{(async()=>{try{const _=new AbortController,k=setTimeout(()=>_.abort(),5e3),R=await fetch("/api/status.php",{signal:_.signal});clearTimeout(k);const D=await R.text();try{const te=JSON.parse(D);f(!0),te.installed&&(oe.error("Система уже установлена!"),r("/"))}catch{console.warn("Server status check failed (Invalid JSON):",D),N(D.substring(0,100)),f(!1)}}catch{f(!1)}finally{y(!1)}})()},[r]);const g=E=>{C({...b,[E.target.name]:E.target.value})},O=async()=>{if(!u){h(!0),setTimeout(()=>{h(!1),d(3),oe.success("Установка завершена (Режим симуляции)",{icon:"🚀",duration:4e3})},2e3);return}h(!0);try{const E=await fetch("/api/install.php",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(b)}),_=await E.text();console.log("Raw Server Response:",_);let k;try{k=JSON.parse(_)}catch{const D=_.length>200?_.substring(0,200)+"...":_;throw new Error(`Ответ сервера не JSON (Ошибка PHP): ${D}`)}if(E.ok&&k.status==="success"){d(3);const R=JSON.parse(localStorage.getItem("vorotex_admins")||"[]");oe.success("Установка успешно завершена!")}else throw new Error(k.message||"Ошибка установки")}catch(E){oe.error(E.message||"Ошибка соединения",{duration:6e3})}finally{h(!1)}};return m?t.jsxs("div",{className:"min-h-screen bg-[#050505] flex flex-col items-center justify-center text-white",children:[t.jsx(so,{className:"w-12 h-12 animate-spin text-[#ff3b30] mb-4"}),t.jsx("p",{className:"text-gray-500 font-mono text-sm uppercase tracking-widest",children:"Checking System Environment..."})]}):t.jsxs("div",{className:"min-h-screen bg-[#050505] text-white flex flex-col items-center justify-center p-4 relative overflow-hidden font-sans",children:[t.jsx("div",{className:"absolute inset-0 bg-cyber-net opacity-20 pointer-events-none"}),t.jsx("div",{className:"absolute top-0 right-0 w-1/2 h-full bg-[#ff3b30]/5 blur-[100px] pointer-events-none"}),t.jsx("div",{className:"absolute bottom-0 left-0 w-1/2 h-full bg-blue-600/5 blur-[100px] pointer-events-none"}),t.jsxs("div",{className:"w-full max-w-3xl bg-[#111] border border-gray-800 rounded-2xl shadow-2xl overflow-hidden relative z-10 transition-all duration-500",children:[t.jsxs("div",{className:"bg-black p-8 border-b border-gray-800 flex flex-col md:flex-row items-center justify-between gap-6",children:[t.jsxs("div",{className:"flex items-center gap-4",children:[t.jsx("div",{className:"p-3 bg-white/5 rounded-xl border border-white/10 shadow-lg shadow-red-500/10",children:t.jsx(cw,{className:"w-8 h-8 text-[#ff3b30]"})}),t.jsxs("div",{children:[t.jsx("h1",{className:"text-2xl font-black uppercase tracking-wide text-white",children:"VOROTEX INSTALLER"}),t.jsxs("div",{className:"flex items-center gap-2 mt-1",children:[u?t.jsxs("span",{className:"text-[10px] font-bold text-black bg-green-500 px-2 py-0.5 rounded uppercase flex items-center gap-1",children:[t.jsx(wn,{className:"w-3 h-3"})," Server Online (PHP)"]}):t.jsxs("span",{className:"text-[10px] font-bold text-black bg-yellow-500 px-2 py-0.5 rounded uppercase flex items-center gap-1",children:[t.jsx(Cw,{className:"w-3 h-3"})," ",x?"PHP Error":"Offline Demo"]}),t.jsx("span",{className:"text-[10px] text-gray-600 font-mono",children:"v2.5.2"})]})]})]}),t.jsx("div",{className:"opacity-80 scale-90 grayscale hover:grayscale-0 transition-all duration-500",children:t.jsx(_n,{isDarkText:!1})})]}),t.jsxs("div",{className:"flex border-b border-gray-800 bg-[#0a0a0a]",children:[t.jsx("div",{className:`flex-1 py-4 text-center text-xs font-bold uppercase tracking-widest transition-colors duration-300 ${o>=1?"text-[#ff3b30] bg-white/5":"text-gray-600"}`,children:"1. База Данных"}),t.jsx("div",{className:"w-px bg-gray-800"}),t.jsx("div",{className:`flex-1 py-4 text-center text-xs font-bold uppercase tracking-widest transition-colors duration-300 ${o>=2?"text-[#ff3b30] bg-white/5":"text-gray-600"}`,children:"2. Администратор"}),t.jsx("div",{className:"w-px bg-gray-800"}),t.jsx("div",{className:`flex-1 py-4 text-center text-xs font-bold uppercase tracking-widest transition-colors duration-300 ${o>=3?"text-green-500 bg-green-500/10":"text-gray-600"}`,children:"3. Готово"})]}),t.jsxs("div",{className:"p-8 md:p-12 min-h-[420px] flex flex-col relative",children:[x&&o<3&&t.jsxs("div",{className:"mb-8 bg-red-900/10 border border-red-700/30 p-4 rounded-xl text-red-500 text-xs flex items-start gap-3",children:[t.jsx(Ql,{className:"w-5 h-5 shrink-0 mt-0.5"}),t.jsxs("div",{className:"leading-relaxed font-mono break-all",children:[t.jsx("strong",{className:"block uppercase mb-1 font-sans",children:"Ошибка сервера (api/status.php)"}),x]})]}),o===1&&t.jsxs("div",{className:"space-y-6 animate-fade-in flex-1",children:[t.jsx("div",{className:"bg-blue-900/20 border border-blue-800/30 p-4 rounded-xl mb-6",children:t.jsxs("p",{className:"text-blue-400 text-xs leading-relaxed",children:[t.jsx("strong",{children:"Важно:"})," Введите данные от базы данных MySQL, которые вам предоставил хостинг. ",t.jsx("br",{}),"Это ",t.jsx("strong",{children:"НЕ"})," логин и пароль от вашей почты или админки сайта."]})}),t.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[t.jsxs("div",{className:"space-y-1",children:[t.jsx("label",{className:"text-[10px] font-bold text-gray-500 uppercase ml-1",children:"Хост БД (Обычно localhost)"}),t.jsxs("div",{className:"relative group",children:[t.jsx(B2,{className:"absolute left-4 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-500 group-focus-within:text-[#ff3b30] transition-colors"}),t.jsx("input",{name:"db_host",value:b.db_host,onChange:g,className:"w-full bg-[#050505] border border-gray-700 rounded-xl py-3.5 pl-11 pr-4 text-sm text-white focus:border-[#ff3b30] focus:ring-1 focus:ring-[#ff3b30] outline-none transition-all placeholder-gray-700 font-mono",placeholder:"localhost"})]})]}),t.jsxs("div",{className:"space-y-1",children:[t.jsx("label",{className:"text-[10px] font-bold text-gray-500 uppercase ml-1",children:"Имя Базы Данных"}),t.jsxs("div",{className:"relative group",children:[t.jsx(wp,{className:"absolute left-4 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-500 group-focus-within:text-[#ff3b30] transition-colors"}),t.jsx("input",{name:"db_name",value:b.db_name,onChange:g,className:"w-full bg-[#050505] border border-gray-700 rounded-xl py-3.5 pl-11 pr-4 text-sm text-white focus:border-[#ff3b30] focus:ring-1 focus:ring-[#ff3b30] outline-none transition-all placeholder-gray-700 font-mono",placeholder:"u12345_vorotex"})]})]}),t.jsxs("div",{className:"space-y-1",children:[t.jsx("label",{className:"text-[10px] font-bold text-gray-500 uppercase ml-1",children:"Пользователь БД (От хостинга)"}),t.jsxs("div",{className:"relative group",children:[t.jsx(Jl,{className:"absolute left-4 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-500 group-focus-within:text-[#ff3b30] transition-colors"}
3044),t.jsx("input",{name:"db_user",value:b.db_user,onChange:g,className:"w-full bg-[#050505] border border-gray-700 rounded-xl py-3.5 pl-11 pr-4 text-sm text-white focus:border-[#ff3b30] focus:ring-1 focus:ring-[#ff3b30] outline-none transition-all placeholder-gray-700 font-mono",placeholder:"u12345_user"})]})]}),t.jsxs("div",{className:"space-y-1",children:[t.jsx("label",{className:"text-[10px] font-bold text-gray-500 uppercase ml-1",children:"Пароль Пользователя БД"}),t.jsxs("div",{className:"relative group",children:[t.jsx(Sp,{className:"absolute left-4 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-500 group-focus-within:text-[#ff3b30] transition-colors"}),t.jsx("input",{name:"db_pass",type:"password",value:b.db_pass,onChange:g,className:"w-full bg-[#050505] border border-gray-700 rounded-xl py-3.5 pl-11 pr-4 text-sm text-white focus:border-[#ff3b30] focus:ring-1 focus:ring-[#ff3b30] outline-none transition-all placeholder-gray-700 font-mono",placeholder:"••••••••••••"})]})]})]}),t.jsx("div",{className:"flex justify-end pt-8 mt-auto",children:t.jsxs("button",{onClick:()=>{if(!b.db_name&&u){oe.error("Введите Имя Базы Данных");return}d(2)},className:"bg-white text-black px-8 py-3.5 rounded-xl font-black uppercase text-xs tracking-wider hover:bg-[#ff3b30] hover:text-white transition-all hover:scale-105 active:scale-95 flex items-center gap-2 shadow-lg",children:["Далее ",t.jsx(Cn,{className:"w-4 h-4"})]})})]}),o===2&&t.jsxs("div",{className:"space-y-6 animate-fade-in flex-1",children:[t.jsxs("div",{className:"text-center mb-8",children:[t.jsx("h2",{className:"text-2xl font-black text-white mb-2 uppercase",children:"Создание Администратора"}),t.jsx("p",{className:"text-gray-500 text-sm max-w-sm mx-auto",children:"Эти данные вы будете использовать для входа в админ-панель сайта."})]}),t.jsxs("div",{className:"space-y-4 max-w-md mx-auto",children:[t.jsxs("div",{className:"space-y-1",children:[t.jsx("label",{className:"text-[10px] font-bold text-gray-500 uppercase ml-1",children:"Логин (Email)"}),t.jsx("input",{name:"admin_login",value:b.admin_login,onChange:g,className:"w-full bg-[#050505] border border-gray-700 rounded-xl py-3.5 px-6 text-sm text-white focus:border-[#ff3b30] focus:ring-1 focus:ring-[#ff3b30] outline-none transition-all text-center font-bold"})]}),t.jsxs("div",{className:"space-y-1",children:[t.jsx("label",{className:"text-[10px] font-bold text-gray-500 uppercase ml-1",children:"Пароль"}),t.jsx("input",{name:"admin_pass",type:"password",value:b.admin_pass,onChange:g,className:"w-full bg-[#050505] border border-gray-700 rounded-xl py-3.5 px-6 text-sm text-white focus:border-[#ff3b30] focus:ring-1 focus:ring-[#ff3b30] outline-none transition-all text-center font-bold",placeholder:"••••••"})]})]}),t.jsxs("div",{className:"flex justify-between pt-8 mt-auto",children:[t.jsx("button",{onClick:()=>d(1),className:"text-gray-500 hover:text-white font-bold uppercase text-xs transition-colors px-4 py-2",children:"Назад"}),t.jsx("button",{onClick:O,disabled:c,className:"bg-[#ff3b30] text-white px-8 py-3.5 rounded-xl font-black uppercase text-xs tracking-wider hover:bg-red-600 transition-all hover:scale-105 active:scale-95 flex items-center gap-2 shadow-lg disabled:opacity-50 disabled:cursor-not-allowed disabled:bg-gray-800",children:c?t.jsx(so,{className:"w-4 h-4 animate-spin"}):"Установить"})]})]}),o===3&&t.jsxs("div",{className:"flex flex-col items-center justify-center flex-1 animate-fade-in text-center",children:[t.jsx("div",{className:"w-24 h-24 bg-green-500 rounded-full flex items-center justify-center mb-8 shadow-[0_0_50px_rgba(34,197,94,0.4)] animate-bounce",children:t.jsx(wn,{className:"w-12 h-12 text-black"})}),t.jsx("h2",{className:"text-3xl font-black text-white mb-4 uppercase",children:"Установка завершена!"}),t.jsx("p",{className:"text-gray-400 max-w-md mb-8 leading-relaxed",children:u?"Сайт успешно настроен. Файл config.php создан. Теперь вы можете войти в панель администратора, используя созданный логин.":"Демонстрационная установка завершена. В реальных условиях здесь был бы создан файл конфигурации."}),t.jsx("button",{onClick:()=>{window.location.href="/",window.location.reload()},className:"bg-white text-black px-10 py-4 rounded-xl font-black uppercase text-sm tracking-wider hover:bg-green-500 hover:text-white transition-all shadow-xl hover:shadow-green-500/20",children:"Перейти на сайт"})]})]})]})]})},Hj=({navigate:r})=>{const[o,d]=j.useState(!1);j.useEffect(()=>{if(!localStorage.getItem("vorotex_cookie_consent")){const u=setTimeout(()=>{d(!0)},1e3);return()=>clearTimeout(u)}},[]);const c=()=>{localStorage.setItem("vorotex_cookie_consent","true"),d(!1)},h=()=>{d(!1)},m=y=>{y.preventDefault(),r&&r("/page/privacy")};return o?t.jsx("div",{className:"fixed bottom-0 left-0 right-0 z-[100] p-4 animate-fade-in-up",children:t.jsxs("div",{className:"max-w-7xl mx-auto bg-white border border-gray-200 shadow-2xl rounded-2xl p-4 md:p-6 flex flex-col md:flex-row items-center justify-between gap-4 md:gap-8 relative overflow-hidden",children:[t.jsx("div",{className:"absolute top-0 right-0 w-32 h-32 bg-gray-50 rounded-full blur-3xl -translate-y-1/2 translate-x-1/2 -z-10"}),t.jsxs("div",{className:"flex items-start gap-4",children:[t.jsx("div",{className:"p-3 bg-black text-white rounded-xl flex-shrink-0",children:t.jsx(cv,{className:"w-6 h-6"})}),t.jsxs("div",{children:[t.jsx("h4",{className:"text-sm font-bold uppercase text-black mb-1",children:"Файлы Cookie"}),t.jsxs("p",{className:"text-xs md:text-sm text-gray-600 leading-relaxed max-w-2xl",children:["Продолжая использовать сайт, вы соглашаетесь с нашей ",t.jsx("a",{href:"/page/privacy",onClick:m,className:"text-[#ff3b30] font-bold hover:underline transition-colors",children:"Политикой конфиденциальности"})," и обработкой персональных данных."]})]})]}),t.jsxs("div",{className:"flex items-center gap-3 w-full md:w-auto",children:[t.jsx("button",{onClick:c,className:"flex-1 md:flex-none px-6 py-3 bg-black text-white text-xs font-bold uppercase rounded-xl hover:bg-[#ff3b30] transition-colors shadow-lg min-w-[140px] text-center",children:"Хорошо, принимаю"}),t.jsx("button",{onClick:h,className:"p-3 text-gray-400 hover:text-black hover:bg-gray-100 rounded-xl transition-colors",title:"Закрыть",children:t.jsx(xt,{className:"w-5 h-5"})})]})]})}):null},Xj=({settings:r})=>{if(!r.show||r.items.length===0)return null;const o=c=>{const h="w-4 h-4 flex-shrink-0";switch(c){case"truck":return t.jsx(Pa,{className:h});case"shield":return t.jsx(kn,{className:h});case"zap":return t.jsx(gu,{className:h});case"globe":return t.jsx(vs,{className:h});case"star":return t.jsx(Va,{className:h});case"flame":return t.jsx(Nv,{className:h});default:return null}},d=[...r.items,...r.items,...r.items,...r.items];return t.jsx("div",{className:"overflow-hidden relative border-y border-black/5 z-10 select-none",style:{backgroundColor:r.backgroundColor,color:r.textColor},children:t.jsx("div",{className:"flex animate-marquee whitespace-nowrap items-center py-3 transform-gpu",style:{animationDuration:`${(window.innerWidth<768?Math.max(6,r.speed*0.3):r.speed)}s`},children:d.map((c,h)=>t.jsxs("div",{className:"flex items-center gap-3 mx-8",children:[o(c.icon),t.jsxs("div",{className:"flex flex-col justify-center leading-none",children:[t.jsx("span",{className:`text-xs md:text-sm uppercase tracking-widest ${c.isBold?"font-black":"font-medium"}`,children:c.text}),c.description&&t.jsx("span",{className:"text-[10px] opacity-80 uppercase tracking-wider font-medium",children:c.description})]}),t.jsx("span",{className:"ml-8 opacity-30",children:"•"})]},`${c.id}-${h}`))})})},Ij=({user:r,onLogout:o,navigate:d,statuses:c=Vp})=>{const[h,m]=j.useState([]);j.useEffect(()=>{(async()=>
3044{try{const f=await fetch("/api/get_my_orders.php"),x=f.headers.get("content-type")||"";if(!f.ok)throw new Error(`HTTP ${f.status}`);if(!x.includes("application/json"))throw new Error("Not JSON");const N=await f.json();if(N.status==="success"&&Array.isArray(N.orders)){m(N.orders);return}throw new Error(N.message||"Ошибка")}catch{const N=JSON.parse(localStorage.getItem("vorotex_demo_orders")||"[]").filter(b=>{var C;return b.userId===r.id||((C=b.customer)==null?void 0:C.email)===r.email});m(N)}})()},[r]);const y=u=>c.find(x=>x.id===u)||{label:u,color:"#999"};return t.jsx("div",{className:"pt-32 pb-20 min-h-screen bg-gray-50",children:t.jsxs("div",{className:"max-w-5xl mx-auto px-6",children:[t.jsxs("div",{className:"flex flex-col md:flex-row justify-between items-start md:items-center mb-8 gap-4",children:[t.jsxs("div",{children:[t.jsx("h1",{className:"text-3xl font-black uppercase text-black",children:"Личный кабинет"}),t.jsxs("p",{className:"text-gray-500 mt-1",children:["Добро пожаловать, ",r.name,"!"]})]}),t.jsxs("button",{onClick:o,className:"flex items-center gap-2 px-4 py-2 bg-gray-100 border border-gray-300 rounded-lg hover:bg-gray-200 text-black text-sm font-bold uppercase transition-colors shadow-sm",children:[t.jsx(Ep,{className:"w-4 h-4"})," Выйти"]})]}),t.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-3 gap-8",children:[t.jsxs("div",{className:"bg-white p-6 rounded-2xl border border-gray-200 shadow-sm h-fit",children:[t.jsxs("h2",{className:"text-sm font-bold uppercase text-gray-400 mb-4 flex items-center gap-2",children:[t.jsx(Jl,{className:"w-4 h-4"})," Профиль"]}),t.jsxs("div",{className:"space-y-4",children:[t.jsxs("div",{children:[t.jsx("label",{className:"text-[10px] uppercase font-bold text-gray-400",children:"Имя"}),t.jsx("div",{className:"text-black font-bold",children:r.name})]}),t.jsxs("div",{children:[t.jsx("label",{className:"text-[10px] uppercase font-bold text-gray-400",children:"Email"}),t.jsx("div",{className:"text-black font-bold",children:r.email})]}),t.jsxs("div",{children:[t.jsx("label",{className:"text-[10px] uppercase font-bold text-gray-400",children:"Дата регистрации"}),t.jsx("div",{className:"text-black text-sm",children:new Date(r.registrationDate).toLocaleDateString()})]})]})]}),t.jsxs("div",{className:"lg:col-span-2 space-y-6",children:[t.jsxs("h2",{className:"text-xl font-bold uppercase text-black flex items-center gap-2",children:[t.jsx(ws,{className:"w-5 h-5"})," Мои заказы"]}),h.length===0?t.jsxs("div",{className:"bg-white p-12 rounded-2xl border border-gray-200 text-center text-gray-400",children:[t.jsx(ws,{className:"w-12 h-12 mx-auto mb-3 opacity-20"}),t.jsx("p",{children:"У вас пока нет заказов"}),t.jsx("button",{onClick:()=>d("/catalog"),className:"mt-4 text-[#ff3b30] font-bold uppercase hover:underline text-sm",children:"Перейти в каталог"})]}):h.map(u=>{const f=y(u.status),x=u.itemsTotal||u.items.reduce((b,C)=>b+C.price*C.quantity,0),N=u.deliveryCost||0;return t.jsxs("div",{className:"bg-white rounded-2xl border border-gray-200 overflow-hidden shadow-sm hover:shadow-md transition-shadow",children:[t.jsxs("div",{className:"p-4 border-b border-gray-100 flex flex-wrap justify-between items-center bg-gray-50/50 gap-2",children:[t.jsxs("div",{className:"flex items-center gap-4",children:[t.jsxs("span",{className:"font-bold text-black text-lg",children:["Заказ #",u.id]}),t.jsx("span",{className:"text-xs text-gray-500",children:new Date(u.date).toLocaleDateString()})]}),t.jsx("span",{className:"px-3 py-1 rounded-full text-xs font-bold uppercase text-white shadow-sm",style:{backgroundColor:f.color},children:f.label})]}),t.jsxs("div",{className:"p-4",children:[t.jsx("div",{className:"space-y-3 mb-4",children:u.items.map((b,C)=>t.jsxs("div",{className:"flex items-center gap-4",children:[t.jsx("div",{className:"w-12 h-12 bg-gray-100 rounded border border-gray-100 overflow-hidden shrink-0",children:t.jsx("img",{src:b.image,className:"w-full h-full object-cover"})}),t.jsxs("div",{className:"flex-1 min-w-0",children:[t.jsx("div",{className:"text-sm font-bold text-black truncate",children:b.name}),b.selectedOptions&&t.jsx("div",{className:"text-[10px] text-gray-400",children:Object.values(b.selectedOptions).join(" / ")})]}),t.jsxs("div",{className:"text-right text-sm",children:[t.jsxs("div",{className:"font-bold text-black",children:[b.price.toLocaleStr
3044ing()," ",nt]}),t.jsxs("div",{className:"text-xs text-gray-400",children:["x ",b.quantity]})]})]},C))}),t.jsxs("div",{className:"flex flex-wrap gap-4 mb-4 pt-4 border-t border-gray-100 text-xs text-gray-600",children:[u.delivery&&t.jsxs("div",{className:"flex items-center gap-1 bg-gray-50 px-2 py-1 rounded border border-gray-200",children:[t.jsx(Pa,{className:"w-3 h-3"}),t.jsx("span",{className:"uppercase font-bold",children:u.delivery})]}),u.payment&&t.jsxs("div",{className:"flex items-center gap-1 bg-gray-50 px-2 py-1 rounded border border-gray-200",children:[t.jsx(po,{className:"w-3 h-3"}),t.jsx("span",{className:"uppercase font-bold",children:u.payment})]}),u.trackingNumber&&t.jsxs("div",{className:"flex items-center gap-1 bg-blue-50 text-blue-700 px-2 py-1 rounded border border-blue-100",children:[t.jsx(i2,{className:"w-3 h-3"}),t.jsx("span",{className:"font-mono font-bold",children:u.trackingNumber})]})]}),t.jsxs("div",{className:"flex flex-col gap-1 border-t border-gray-100 pt-3 items-end text-sm",children:[t.jsxs("div",{className:"flex justify-between w-48 text-gray-500",children:[t.jsx("span",{children:"Товары:"}),t.jsxs("span",{children:[x.toLocaleString()," ",nt]})]}),t.jsxs("div",{className:"flex justify-between w-48 text-gray-500",children:[t.jsx("span",{children:"Доставка:"}),t.jsx("span",{children:N>0?`${N} ${nt}`:"Бесплатно"})]}),t.jsxs("div",{className:"flex justify-between w-48 text-black font-black text-lg mt-1",children:[t.jsx("span",{children:"Итого:"}),t.jsxs("span",{children:[u.total.toLocaleString()," ",nt]})]})]})]})]},u.id)})]})]})]})})},Gj=({navigate:r})=>(j.useEffect(()=>{document.title="404 — Страница не найдена | VOROTEX";const o=(d,c)=>{let h=document.querySelector(`meta[name="${d}"]`);h||(h=document.createElement("meta"),h.setAttribute("name",d),document.head.appendChild(h)),h.setAttribute("content",c)};o("robots","noindex, nofollow"),o("description","Страница не найдена.")},[]),t.jsxs("div",{className:"min-h-screen bg-[#0a0a0a] text-white flex flex-col items-center justify-center p-4 relative overflow-hidden",children:[t.jsx("div",{className:"absolute inset-0 bg-cyber-net opacity-10 pointer-events-none"}),t.jsx("div",{className:"absolute top-0 left-0 w-full h-1 bg-gradient-to-r from-transparent via-[#ff3b30] to-transparent opacity-50 animate-pulse"}),t.jsx("div",{className:"absolute bottom-0 right-0 w-1/2 h-1/2 bg-blue-600/10 blur-[150px] rounded-full pointer-events-none"}),t.jsx("div",{className:"absolute top-1/4 left-1/4 w-64 h-64 bg-[#ff3b30]/10 blur-[120px] rounded-full pointer-events-none"}),t.jsxs("div",{className:"relative z-10 text-center max-w-2xl",children:[t.jsxs("div",{className:"relative mb-8 select-none",children:[t.jsx("h1",{className:"text-[150px] md:text-[200px] font-black leading-none tracking-tighter text-transparent bg-clip-text bg-gradient-to-b from-white to-gray-800 opacity-20 absolute top-0 left-1/2 -translate-x-1/2 blur-sm",children:"404"}),t.jsxs("h1",{className:"text-[100px] md:text-[150px] font-black leading-none tracking-tighter text-white relative z-10 drop-shadow-[0_0_15px_rgba(255,59,48,0.5)]",children:["4",t.jsx("span",{className:"text-[#ff3b30] inline-block animate-pulse",children:"0"}),"4"]})]}),t.jsxs("div",{className:"bg-white/5 backdrop-blur-md border border-white/10 p-8 rounded-2xl shadow-2xl transform hover:scale-105 transition-transform duration-500",children:[t.jsx("div",{className:"flex justify-center mb-6",children:t.jsx("div",{className:"p-4 bg-black rounded-full border border-gray-800 shadow-inner",children:t.jsx(_v,{className:"w-10 h-10 text-[#ff3b30]"})})}),t.jsx("h2",{className:"text-2xl md:text-3xl font-black uppercase mb-4 tracking-wide",children:"Уровень не найден"}),t.jsx("p",{className:"text-gray-400 text-lg mb-8 leading-relaxed",children:"Похоже, вы зашли в запретную зону или эта страница была удалена администратором сервера. Вернитесь на базу, пока вас не обнаружили."}),t.jsxs("div",{className:"flex flex-col sm:flex-row items-center justify-center gap-4",children:[t.jsxs("button",{onClick:()=>r("/"),className:"w-full sm:w-auto px-8 py-3.5 bg-[#ff3b30] text-white font-bold uppercase rounded-xl hover:bg-red-600 transition-all shadow-[0_0_20px_rgba(255,59,48,0.3)] flex items-center justify-center gap-2 group",children:[t.jsx(Np,{className:"w-4 h-4 group-hover:scale-110 transition-transform"}),"На главную"]}),t.jsxs("button",{onClick:()=>window.history.back(),className:"w-full sm:w-auto px-8 py-3.5 bg-transparent border border-white/20 text-white font-bold uppercase rounded-xl hover:bg-white hover:text-black transition-all flex items-center justify-center gap-2",children:[t.jsx(Ca,{className:"w-4 h-4"}),"Назад"]})]})]}),t.jsxs("div",{className:"mt-12 flex flex-col sm:flex-row items-center justify-center gap-2 text-[#ff3b30] font-mono text-[11px] sm:text-xs opacity-80 uppercase tracking-widest text-center px-6 pb-4",children:[t.jsx(Ql,{className:"w-4 h-4 sm:w-3 sm:h-3"})," System Error: Page_Not_Found_Exception"]})]})]})),$j=()=>{var r;if(typeof window>"u")return!1;try{if(!(((r=window.location)==null?void 0:r.pathname)||"").startsWith("/admin"))return!1;const d=localStorage.getItem("vorotex_admin_session");if(!d)return!1;const c=JSON.parse(d);return!!(c&&typeof c=="object"&&c.email)}catch{return!1}},Kj=async r=>{try{const o=await fetch("/api/sync_price.php"),d=o.headers.get("content-type");if(!o.ok||!d||!d.includes("application/json"))return console.warn("Sync Service: Backend unavailable or not returning JSON."),r;const c=await o.json();if(c.status!=="success"||!Array.isArray(c.data))return console.warn("Sync Service: Invalid data format",c),r;const h=c.data;let m=0;const y=r.map(u=>{let f=!1,x=u.variants&&u.variants.length>0;if(x){const b=u.variants.map(C=>{const g=C.externalId||C.id?String(C.externalId||C.id):"";if(g){const O=h.find(E=>String(E.externalId)===g);if(O){const E=O.price>0?Math.round(Number(O.price)):C.price,_=O.stock>=0?Number(O.stock):C.stock;let k=C.originalPrice;const R=O.oldprice||O.originalPrice;if(R&&Number(R)>0?k=Math.round(Number(R)):R===0&&(k=void 0),C.price!==E||C.stock!==_||C.originalPrice!==k)return f=!0,m++,{...C,price:E,stock:_,originalPrice
3044:k}}}return C});if(f){const C=b.reduce((g,O)=>g+O.stock,0);return{...u,variants:b,stock:C}}}const N=u.externalId||u.id;if(N&&!x){const b=h.find(C=>String(C.externalId)===String(N));if(b){const C=b.price>0?Math.round(Number(b.price)):u.price,g=b.stock>=0?Number(b.stock):u.stock;let O=u.originalPrice;const E=b.oldprice||b.originalPrice;if(E&&Number(E)>0?O=Math.round(Number(E)):E===0&&(O=void 0),u.price!==C||u.stock!==g||u.originalPrice!==O)return f=!0,m++,{...u,price:C,originalPrice:O,stock:g}}}return u});return m>0&&$j()&&oe.success(`Цены и остатки обновлены (${m} позиций)`,{icon:"🔄",style:{background:"#333",color:"#fff"},duration:4e3}),y}catch(o){return console.error("Sync Service Error:",o),r}},Kx="/placeholder.svg",Ba=r=>{if(!r)return Kx;const o=r.toLowerCase();return o.includes("placehold.co")||o.includes("unsplash.com")||o.includes("images.unsplash.com")?Kx:r},ur=r=>r.map(o=>({...o,externalId:o.externalId||o.id,image:Ba(o.image),gallery:o.gallery?o.gallery.map(Ba):[],variants:o.variants?o.variants.map(d=>({...d,externalId:d.externalId||d.id,image:d.image?Ba(d.image):void 0,images:d.images?d.images.map(Ba):[]})):[],sections:o.sections?o.sections.map(d=>({...d,image:d.image?Ba(d.image):d.image,secondaryImage:d.secondaryImage?Ba(d.secondaryImage):d.secondaryImage})):o.sections})),Id=r=>r.map(o=>({...o,image:Ba(o.image)})),Gd=r=>r.map(o=>({...o,image:o.image?Ba(o.image):o.image})),$d=r=>r.map(o=>({...o,image:Ba(o.image)})),qx={"00-00001948":"00-00001900","00-00001946":"00-00001657","00-00001947":"00-00001656","00-00001950":"00-00001658","00-00001951":"00-00001849"},qj=r=>(r||[]).map(o=>{const d=o==null?void 0:o.selectedVariantId;return d&&qx[d]?{...o,selectedVariantId:qx[d]}:o}),Yj=r=>{const{id:o}=du(),d=o||"",c=Array.isArray(r.favorites)?r.favorites:[],h=Array.isArray(r.compareList)?r.compareList:[],m=c.some(u=>(u==null?void 0:u.id)===d),y=h.some(u=>(u==null?void 0:u.id)===d);return t.jsx(cj,{...r,productId:d,isFavorite:m,isComparing:y})},Pj=r=>{const{slug:o}=du();return t.jsx(nj,{...r,categorySlug:o})},Zj=r=>{const{slug:o}=du();return t.jsx(mj,{...r,slug:o})},Qj=r=>{const[o]=fp(),d=o.get("q")||"";return t.jsx(dj,{...r,searchQuery:d})},Jj=r=>{const[o]=fp(),d=o.get("tab"),c=o.get("edit"),h=d||(c?"catalog":"statistics");return t.jsx(Dj,{...r,initialTab:h,targetProductId:c||void 0})},Wj=({heroSlides:r,categories:o,products:d,onAddToCart:c,navigate:h,marketplaces:m,marketplacesContent:y,reviews:u,logoImage:f,carouselSettings:x,internalShopSettings:N,tickerSettings:b,favorites:C,onToggleFavorite:g,compareList:O,onToggleCompare:E})=>t.jsxs("div",{className:"pt-20",children:[t.jsx(Dw,{onCtaClick:h,slides:r}),t.jsx(Xj,{settings:b}),t.jsx(zw,{categories:o,navigate:h}),x.show&&t.jsx("section",{id:"new-arrivals",className:"py-16 bg-gray-50 border-y border-gray-200",children:t.jsxs("div",{className:"max-w-[1400px] mx-auto px-4",children:[t.jsxs("div",{className:"text-center mb-12",children:[t.jsx("h2",{className:"text-3xl font-bold text-black uppercase tracking-widest mb-2",children:x.title}),t.jsx("div",{className:"w-16 h-1 bg-[#ff3b30] mx-auto rounded-full"})]}),t.jsx(Lp,{products:d.filter(_=>_.isNewArrival),onAddToCart:c,navigate:h,enableSales:N.enableSales,favorites:C,onToggleFavorite:g,compareList:O,onToggleCompare:E})]})}),t.jsx(Fw,{marketplaces:m,content:y,logoImage:f,internalShopSettings:N}),t.jsx(Up,{reviews:u,products:d,navigate:h})]}),Fj=()=>{const r=ho(),o=Za(),d=o.pathname,[c,h]=j.useState(ur(fn)),[m,y]=j.useState(Id(Ax)),[u,f]=j.useState(Bx),[x,N]=j.useState({title:"Каталог",description:"Полный каталог товаров"}),[b,C]=j.useState($d(Yw)),[g,O]=j.useState(qw),[E,_]=j.useState(Pw),[k,R]=j.useState(Zw),[D,te]=j.useState(Dx),[W,$]=j.useState(""),[H,J]=j.useState(Qw),[Y,G]=j.useState(Jw),[U,q]=j.useState(Gd(lu)),[P,pe]=j.useState(Ww),[B,z]=j.useState(zx),[v,T]=j.useState(Vx),[A,K]=j.useState(Lx),[w,V]=j.useState(Bp),[M,X]=j.useState(!0),[le,xe]=j.useState([]),[ge,je]=j.useState([]),[Ne,Ee]=j.useState([]),[Ge,it]=j.useState(!1),[Ua,ce]=j.useState(!1),qR=j.useEffect(()=>{if(!(Ge||Ua))return;xe(Re=>{let Xe=!1,Ie=0,Be=0,Ot=[];for(const Ze of Re){const _a=c.find(Qa=>Qa.id===Ze.id);if(!_a){Ie++,Xe=!0;continue}let gn=(_a.stock||0),Yi=Ze.price,Vi=Ze.image,Lu=_a.variants;try{if(Ze.selectedVariantId&&Array.isArray(_a.variants)&&_a.variants.length){const Qa=_a.variants.find(kn=>kn.id===Ze.selectedVariantId);Qa&&(gn=Qa.stock||0,Yi=(Qa.price||_a.price||Yi),Vi=(Qa.image||_a.image||Vi))}}catch(Qa){}if(gn<=0){Ie++,Xe=!0;continue}let kn=Ze.quantity||0;if(kn>gn){kn=gn,Be++,Xe=!0}Ot.push({...Ze,stock:gn,price:Yi,image:Vi,variants:Lu,quantity:kn})}if(Xe){setTimeout(()=>{try{ft.error(`Корзина обновлена: ${Ie?`удалено ${Ie}`:""}${Ie&&Be?", ":""}${Be?`кол-во скорректировано у ${Be}`:""}`.trim(),{duration:4e3})}catch(Qa){}},0);return Ot}return Re})},[c,Ge,Ua]),[ve,be]=j.useState(!1),[Oe,Je]=j.useState(()=>!!localStorage.getItem("vorotex_admin_session")),[gt,Fe]=j.useState(""),[Ht,Xt]=j.useState(null),Pe=ke=>{if(ke.startsWith("http"))window.open(ke,"_blank");else if(ke.startsWith("#"))if(o.pathname!=="/")r("/"),setTimeout(()=>{const ie=document.getElementById(ke.substring(1));ie&&ie.scrollIntoView({behavior:"smooth"})},100);else{const ie=document.getElementById(ke.substring(1));ie&&ie.scrollIntoView({behavior:"smooth"})}else r(ke),window.scrollTo(0,0)};j.useEffect(()=>{const ke=(Xe,Ie)=>{let Be=document.querySelector(`meta[name="${Xe}"]`);Be||(Be=document.createElement("meta"),Be.setAttribute("name",Xe),document.head.appendChild(Be)),Be.setAttribute("content",Ie)},ie=(Xe,Ie)=>{let Be=document.querySelector(`meta[property="${Xe}"]`);Be||(Be=document.createElement("meta"),Be.setAttribute("property",Xe),document.head.appendChild(Be)),Be.setAttribute("content",Ie)},We=Xe=>{let Ie=document.querySelector('link[rel="canonical"]');Ie||(Ie=document.createElement("link"),Ie.setAttribute("rel","canonical"),document.head.appendChild(Ie)),Ie.setAttribute("href",Xe)};let Re=document.querySelector("link[rel~='icon']");if(Re||(Re=document.createElement("link"),Re.rel="icon",document.head.appendChild(Re)),Re.href=u.favicon||"/favicon.svg",o.pathname==="/"){document.title=u.title||"VOROTEX",ke("description",u.description||""),u.keywords&&ke("keywords",u.keywords),ke("robots",u.indexing!==!1?"index, follow":"noindex, nofollow");const Ie=`${window.location.origin}/`;We(Ie),ie("og:type","website"),ie("og:url",Ie),ie("og:title",u.title||"VOROTEX"),ie("og:description",u.description||"");const Be=u.ogImage||"";Be&&ie("og:image",Be)}},[u,o.pathname]),j.useEffect(()=>{(async()=>{X(!0);const ie=await Wl.loadData(),We=await ze.get("vorotex_products","vorotex_products_v2"),Re=await ze.get("vorotex_categories");let Xe=fn;if(ie)void 0,ie.products&&h(ur(ie.products)),ie.categories&&y(Id(ie.categories)),ie.seo&&f(ie.seo),ie.heroSlides&&C($d(ie.heroSlides)),ie.navLinks&&O(ie.navLinks),ie.marketplaces&&_(ie.marketplaces),ie.marketplacesContent&&R(ie.marketplacesContent),ie.reviews&&te(ie.reviews),ie.logoImage&&$(Ba(ie.logoImage)),ie.footerColumns&&J(ie.footerColumns),ie.socialLinks&&G(ie.socialLinks),ie.pages&&q(Gd(ie.pages)),ie.carouselSettings&&pe(ie.carouselSettings),ie.internalShopSett
3044ings&&z(ie.internalShopSettings),ie.supportSettings&&T(ie.supportSettings),ie.tickerSettings&&K(ie.tickerSettings),ie.admins&&V(ie.admins),ie.catalogSeo&&N(ie.catalogSeo),Xe=ur(ie.products||fn);else if(We){void 0,h(ur($a(fn,We))),Re&&y(Id($a(Ax,Re)));const _a=await ze.get("vorotex_seo");_a&&f($a(Bx,_a));const Ra=await ze.get("vorotex_catalog_seo");Ra&&N(Ra);const es=await ze.get("vorotex_hero");es&&C($d(es));const wl=await ze.get("vorotex_nav");wl&&O(wl);const jl=await ze.get("vorotex_marketplaces");jl&&_(jl);const Nl=await ze.get("vorotex_mp_content");Nl&&R(Nl);const Z=await ze.get("vorotex_reviews");Z&&te($a(Dx,Z));const me=await ze.get("vorotex_logo");me&&$(Ba(me));const fe=await ze.get("vorotex_footer");fe&&J(fe);const Ae=await ze.get("vorotex_social");Ae&&G(Ae);const yt=await ze.get("vorotex_pages");yt&&q(Gd($a(lu,yt)));const Nt=await ze.get("vorotex_carousel");Nt&&pe(Nt);const Tt=await ze.get("vorotex_internal_shop");Tt&&z($a(zx,Tt));const Ma=await ze.get("vorotex_support");Ma&&T($a(Vx,Ma));const Ss=await ze.get("vorotex_ticker");Ss&&K($a(Lx,Ss));const Rn=await ze.get("vorotex_admins");Rn&&V(Rn),Xe=ur(We||fn)}const Ie=await Kj(Xe);h(ur(Ie));const Be=await ze.get("vorotex_cart");Be&&xe(qj(Be));const Ot=await ze.get("vorotex_favorites");Ot&&je(Ot);const Ze=await ze.get("vorotex_compare");Ze&&Ee(Ze),X(!1)})()},[]),j.useEffect(()=>{(async()=>{try{const ie=await fetch("/api/user_me.php"),We=ie.headers.get("content-type")||"";if(!ie.ok||!We.includes("application/json"))return;const Re=await ie.json();Re.status==="success"&&Re.user&&(Re.csrf&&localStorage.setItem("vorotex_user_csrf",Re.csrf),Xt(Re.user))}catch{}})()},[]),j.useEffect(()=>{ze.set("vorotex_products",c)},[c]),j.useEffect(()=>{ze.set("vorotex_categories",m)},[m]),j.useEffect(()=>{ze.set("vorotex_seo",u)},[u]),j.useEffect(()=>{ze.set("vorotex_catalog_seo",x)},[x]),j.useEffect(()=>{ze.set("vorotex_hero",b)},[b]),j.useEffect(()=>{ze.set("vorotex_nav",g)},[g]),j.useEffect(()=>{ze.set("vorotex_marketplaces",E)},[E]),j.useEffect(()=>{ze.set("vorotex_mp_content",k)},[k]),j.useEffect(()=>{ze.set("vorotex_reviews",D)},[D]),j.useEffect(()=>{ze.set("vorotex_logo",W)},[W]),j.useEffect(()=>{ze.set("vorotex_footer",H)},[H]),j.useEffect(()=>{ze.set("vorotex_social",Y)},[Y]),j.useEffect(()=>{ze.set("vorotex_pages",U)},[U]),j.useEffect(()=>{ze.set("vorotex_carousel",P)},[P]),j.useEffect(()=>{ze.set("vorotex_internal_shop",B)},[B]),j.useEffect(()=>{ze.set("vorotex_support",v)},[v]),j.useEffect(()=>{ze.set("vorotex_ticker",A)},[A]),j.useEffect(()=>{ze.set("vorotex_admins",w)},[w]),j.useEffect(()=>{if(le.length===0){try{const _ls=localStorage.getItem("vorotex_cart");if(_ls&&JSON.parse(_ls).length>0)return}catch(e){}}ze.set("vorotex_cart",le)},[le]),j.useEffect(()=>{if(ge.length===0){try{const _ls=localStorage.getItem("vorotex_favorites");if(_ls&&JSON.parse(_ls).length>0)return}catch(e){}}ze.set("vorotex_favorites",ge)},[ge]),j.useEffect(()=>{if(Ne.length===0){try{const _ls=localStorage.getItem("vorotex_compare");if(_ls&&JSON.parse(_ls).length>0)return}catch(e){}}ze.set("vorotex_compare",Ne)},[Ne]);const se=(ke,ie=!0,We,Re)=>{xe(Xe=>{const Ie=Xe.find(Ze=>ke.variants&&ke.variants.length>0?Ze.id===ke.id&&Ze.selectedVariantId===We:Ze.id===ke.id);if(Ie)return ft.success("Количество обновлено"),Xe.map(Ze=>Ze===Ie?{...Ze,quantity:Ze.quantity+1}:Ze);let Be=ke.price,Ot=ke.image;if(We&&ke.variants){const Ze=ke.variants.find(_a=>_a.id===We);Ze&&(Be=Ze.price||ke.price,Ot=(Ze.images&&Ze.images.length>0?Ze.images[0]:null)||(Ze.image&&!Ze.image.includes("placeholder")?Ze.image:null)||ke.image)}return ft.success("Добавлено в корзину"),[...Xe,{...ke,price:Be,image:Ot,quantity:1,selectedVariantId:We,selectedOptions:Re}]}),ie&&it(!0)},ye=(ke,ie)=>{xe(We=>{const Re=[...We],Xe=Re[ke],Ie=Xe.quantity+ie;if(Ie<1)Re.splice(ke,1);else{let Be=Xe.stock;if(Xe.selectedVariantId&&Xe.variants){const Ot=Xe.variants.find(Ze=>Ze.id===Xe.selectedVariantId);Ot&&(Be=Ot.stock)}if(Ie>Be)return ft.error(`Доступно только ${Be} шт.`),We;Re[ke]={...Xe,quantity:Ie}}return Re})},De=ke=>{xe(ie=>ie.filter((We,Re)=>Re!==ke))},et=()=>{xe([]),ce(!1)},Me=()=>{it(!1),ce(!0)},tt=ke=>{je(ie=>ie.find(Re=>Re.id===ke.id)?(ft("Удалено из избранного",{icon:"💔"}),ie.filter(Re=>Re.id!==ke.id)):(ft("Добавлено в избранное",{icon:"❤️"}),[...ie,ke]))},st=ke=>{Ee(ie=>ie.find(Re=>Re.id===ke.id)?ie.filter(Re=>Re.id!==ke.id):ie.length>=4?(ft.error("Максимум 4 товара для сравнения"),ie):(ft.success("Добавлено к сравнению"),[...ie,ke]))},$t=async(ke,ie)=>{try{const Re=await fetch("/api/login.php",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:ke,password:ie})}),Xe=Re.headers.get("content-type")||"";
3044if(Re.ok&&Xe.includes("application/json")){const Ie=await Re.json();if(Ie.status==="success")return Je(!0),Fe(Ie.email||ke),localStorage.setItem("vorotex_admin_session",JSON.stringify({email:Ie.email||ke,role:Ie.role||"admin"})),Ie.token&&localStorage.setItem("vorotex_admin_token",Ie.token),Ie.csrf&&localStorage.setItem("vorotex_admin_csrf",Ie.csrf),!0}}catch{}const We=w.find(Re=>Re.email===ke&&Re.password===ie);return We?(Je(!0),Fe(We.email),localStorage.setItem("vorotex_admin_session",JSON.stringify({email:We.email,role:We.role})),!0):!1},Kt=ke=>{Xt(ke)},He=async()=>{try{const ke=localStorage.getItem("vorotex_user_csrf");await fetch("/api/user_logout.php",{method:"POST",headers:{"Content-Type":"application/json",...ke?{"X-CSRF-Token":ke}:{}}})}catch{}localStorage.removeItem("vorotex_user_csrf"),Xt(null)},dt=()=>JSON.stringify({products:c,categories:m,seo:u,heroSlides:b,navLinks:g,marketplaces:E,marketplacesContent:k,reviews:D,logoImage:W,footerColumns:H,socialLinks:Y,pages:U,carouselSettings:P,internalShopSettings:B,supportSettings:v,tickerSettings:A,admins:w,catalogSeo:x},null,2),Lt=ke=>{try{const ie=JSON.parse(ke);return ie.products&&h(ie.products),ie.categories&&y(ie.categories),ie.seo&&f(ie.seo),ie.heroSlides&&C(ie.heroSlides),ie.navLinks&&O(ie.navLinks),ie.marketplaces&&_(ie.marketplaces),ie.marketplacesContent&&R(ie.marketplacesContent),ie.reviews&&te(ie.reviews),ie.logoImage&&$(ie.logoImage),ie.footerColumns&&J(ie.footerColumns),ie.socialLinks&&G(ie.socialLinks),ie.pages&&q(ie.pages),ie.carouselSettings&&pe(ie.carouselSettings),ie.internalShopSettings&&z(ie.internalShopSettings),ie.supportSettings&&T(ie.supportSettings),ie.tickerSettings&&K(ie.tickerSettings),ie.admins&&V(ie.admins),ie.catalogSeo&&N(ie.catalogSeo),!0}catch(ie){return console.error(ie),!1}},bt=()=>{window.confirm("Сбросить все настройки к заводским? Это действие необратимо.")&&(localStorage.clear(),window.location.reload())},vl=o.pathname.startsWith("/admin")||o.pathname.startsWith("/install")||o.pathname==="/login"||o.pathname==="/register",Ta=B.maintenanceMode&&!Oe;return M?t.jsx("div",{className:"min-h-screen flex items-center justify-center bg-black text-white",children:t.jsxs("div",{className:"text-center space-y-3",children:[t.jsx("div",{className:"text-sm uppercase tracking-[0.3em] text-gray-400",children:"VOROTEX"}),t.jsx("div",{className:"text-xl font-bold",children:"Загружаем данные..."})]})}):t.jsxs(t.Fragment,{children:[t.jsx(Wb,{position:"top-center",toastOptions:{style:{background:"#333",color:"#fff"}}}),!vl&&!Ta&&t.jsx(Aw,{cart:le,onOpenCart:()=>it(!0),onOpenSettings:()=>Pe("/admin"),onOpenCatalog:()=>Pe("/catalog"),onScrollToSection:ke=>{const ie=document.getElementById(ke);ie&&ie.scrollIntoView({behavior:"smooth"})},logoImage:W,navLinks:g,navigate:Pe,currentPath:d,isAdmin:Oe,enableSales:B.enableSales,favoritesCount:ge.length,onOpenFavorites:()=>be(!0),compareCount:Ne.length,isUserLoggedIn:!!Ht,onUserIconClick:()=>Pe(Oe?"/admin":Ht?"/dashboard":"/login"),products:c}),t.jsxs($y,{children:[t.jsx(Qt,{path:"/install",element:t.jsx(Uj,{navigate:Pe})}),t.jsx(Qt,{path:"/login",element:t.jsx(Hx,{onAdminLogin:$t,onUserLogin:Kt,navigate:Pe,logoImage:W})}),Ta?t.jsx(Qt,{path:"*",element:t.jsx(zj,{navigate:Pe,logoImage:W})}):t.jsxs(t.Fragment,{children:[t.jsx(Qt,{path:"/",element:t.jsx(Wj,{heroSlides:b,categories:m,products:c,onAddToCart:se,navigate:Pe,marketplaces:E,marketplacesContent:k,reviews:D,logoImage:W,carouselSettings:P,internalShopSettings:B,tickerSettings:A,favorites:ge,onToggleFavorite:tt,compareList:Ne,onToggleCompare:st})}),t.jsx(Qt,{path:"/catalog",element:t.jsx(sj,{categories:m,products:c,onAddToCart:se,navigate:Pe,seo:x,enableSales:B.enableSales,favorites:ge,onToggleFavorite:tt,compareList:Ne,onToggleCompare:st})}),t.jsx(Qt,{path:"/category/:slug",element:t.jsx(Pj,{categories:m,products:c,onAddToCart:se,navigate:Pe,enableSales:B.enableSales,favorites:ge,onToggleFavorite:tt,compareList:Ne,onToggleCompare:st})}),t.jsx(Qt,{path:"/product/:id",element:t.jsx(Yj,{products:c,categories:m,onAddToCart:se,cart:le,onUpdateQuantity:ye,onRemoveItem:De,navigate:Pe,marketplaces:E,marketplacesContent:k,enableSales:B.enableSales,isAdmin:Oe,favorites:ge,onToggleFavorite:tt,compareList:Ne,onToggleCompare:st,reviews:D,supportSettings:v})}),t.jsx(Qt,{path:"/search",element:t.jsx(Qj,{products:c,onAddToCart:se,navigate:Pe,enableSales:B.enableSales,favorites:ge,onToggleFavorite:tt,compareList:Ne,onToggleCompare:st})}),t.jsx(Qt,{path:"/page/:slug",element:t.jsx(Zj,{pages:U.filter(m=>
3044m.isVisible!==!1),navigate:Pe,internalShopSettings:B})}),t.jsx(Qt,{path:"/support",element:t.jsx(hj,{settings:v,navigate:Pe})}),t.jsx(Qt,{path:"/compare",element:t.jsx(Lj,{products:Ne,categories:m,onRemove:st,onAddToCart:se,navigate:Pe,enableSales:B.enableSales})}),t.jsx(Qt,{path:"/keyboard-test",element:t.jsx(class extends j.Component{componentDidMount(){var self=this;this._tested=new Set();this._ff="full";this._down=function(e){e.preventDefault();var code=e.code,root=document.getElementById("vx-kb-root");if(!root)return;var nm=root.querySelector("#kbt-key-name"),cd=root.querySelector("#kbt-key-code"),disp=root.querySelector("#kbt-display");if(nm)nm.textContent=e.key===" "?"Space":e.key;if(cd)cd.textContent=code;if(disp)disp.classList.add("kbt-active-key");root.querySelectorAll("[data-code=\""+code+"\"]").forEach(function(k){k.classList.add("kbt-pressed");});if(!self._tested.has(code)){self._tested.add(code);root.querySelectorAll("[data-code=\""+code+"\"]").forEach(function(k){k.classList.add("kbt-tested");});self._updateStats();}};this._up=function(e){var root=document.getElementById("vx-kb-root");if(!root)return;root.querySelectorAll("[data-code=\""+e.code+"\"]").forEach(function(k){k.classList.remove("kbt-pressed");});var disp=root.querySelector("#kbt-display");if(disp)disp.classList.remove("kbt-active-key");};this._updateStats=function(){var root=document.getElementById("vx-kb-root");if(!root)return;var layout=root.querySelector("#kbl-"+self._ff);if(!layout)return;var codes=new Set();layout.querySelectorAll("[data-code]").forEach(function(k){if(k.dataset.code)codes.add(k.dataset.code);});var tot=codes.size,done=0;codes.forEach(function(c){if(self._tested.has(c))done++;});var pct=tot>0?Math.round(done/tot*100):0,e;e=root.querySelector("#kbt-count");if(e)e.textContent=done;e=root.querySelector("#kbt-total");if(e)e.textContent=tot;e=root.querySelector("#kbt-pct");if(e)e.textContent=pct+"%";e=root.querySelector("#kbt-bar-fill");if(e)e.style.width=pct+"%";};document.addEventListener("keydown",this._down);document.addEventListener("keyup",this._up);var root=document.getElementById("vx-kb-root");if(root){root.querySelectorAll(".kbt-ff-tab").forEach(function(tab){tab.addEventListener("click",function(){self._ff=tab.dataset.ff;root.querySelectorAll(".kbt-ff-tab").forEach(function(b){b.classList.remove("kbt-active");});tab.classList.add("kbt-active");root.querySelectorAll(".kbt-layout").forEach(function(l){l.style.display="none";});var lo=root.querySelector("#kbl-"+self._ff);if(lo)lo.style.display="block";self._updateStats();});});var rb=root.querySelector("#kbt-reset");if(rb)rb.addEventListener("click",function(){self._tested.clear();root.querySelectorAll("[data-code]").forEach(function(k){k.classList.remove("kbt-tested","kbt-pressed");});var nm=root.querySelector("#kbt-key-name");if(nm)nm.textContent="Нажмите клавишу";var cd=root.querySelector("#kbt-key-code");if(cd)cd.textContent="";self._updateStats();});root.querySelectorAll(".kbt-faq-item").forEach(function(item){var q=item.querySelector(".kbt-faq-q");if(q)q.addEventListener("click",function(){item.classList.toggle("kbt-open");var icon=item.querySelector(".kbt-faq-icon");if(icon)icon.textContent=item.classList.contains("kbt-open")?"−":"+";});});self._updateStats();var darkBtn=root.querySelector("#kbt-dark-toggle");if(darkBtn)darkBtn.addEventListener("click",function(){root.classList.toggle("kbt-dark");darkBtn.textContent=root.classList.contains("kbt-dark")?"\u2600\ufe0f \u0421\u0432\u0435\u0442\u043b\u0430\u044f":"\ud83c\udf19 \u0422\u0451\u043c\u043d\u0430\u044f";darkBtn.classList.toggle("kbt-active",root.classList.contains("kbt-dark"));});self._lang="en";var langBtn=root.querySelector("#kbt-lang-toggle");if(langBtn)langBtn.addEventListener("click",function(){self._lang=self._lang==="en"?"ru":"en";langBtn.textContent=self._lang==="ru"?"RU":"EN";langBtn.classList.toggle("kbt-active",self._lang==="en");root.querySelectorAll("[data-en]").forEach(function(el){el.textContent=self._lang==="ru"?(el.dataset.ru||el.dataset.en):el.dataset.en;});});self._oldTitle=document.title;document.title="\u0422\u0435\u0441\u0442 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044b \u043e\u043d\u043b\u0430\u0439\u043d \u2014 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0432\u0441\u0435 \u043a\u043b\u0430\u0432\u0438\u0448\u0438 | VOROTEX";var _md=document.querySelector("meta[name=description]");if(!_md){_md=document.createElement("meta");_md.name="description";document.head.appendChild(_md);}self._oldDesc=_md.getAttribute("content")||"";_md.setAttribute("content","\u0411\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0439 \u043e\u043d\u043b\u0430\u0439\u043d \u0442\u0435\u0441\u0442 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044b VOROTEX. \u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u043a\u0430\u0436\u0434\u0443\u044e \u043a\u043b\u0430\u0432\u0438\u0448\u0443: 100%, TKL, 75%, 65%, 60% \u0444\u043e\u0440\u043c-\u0444\u0430\u043a\u0442\u043e\u0440\u044b. \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 EN/RU \u0440\u0430\u0441\u043a\u043b\u0430\u0434\u043a\u0438.");self._metaDesc=_md;}}componentWillUnmount(){document.removeEventListener("keydown",this._down);document.removeEventListener("keyup",this._up);document.title=this._oldTitle||"VOROTEX";if(this._metaDesc)this._metaDesc.setAttribute("content",this._oldDesc||"");}render(){return t.jsx("div",{id:"vx-kb-root",dangerouslySetInnerHTML:{__html:"<style>#vx-kb-root{background:#fff;color:#111;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;padding:112px 0 64px;min-height:60vh}#vx-kb-root *{box-sizing:border-box}.kbt-container{max-width:1100px;margin:0 auto;padding:0 20px}.kbt-hero{text-align:center;padding:0 0 28px}.kbt-hero h1{font-size:clamp(22px,4vw,36px);font-weight:900;text-transform:uppercase;letter-spacing:.04em;margin-bottom:8px}.kbt-hero h1 span{color:#ff3b30}.kbt-hero p{color:#666;font-size:14px}.kbt-stats{display:flex;gap:12px;justify-content:center;flex-wrap:wrap;margin-bottom:14px}.kbt-stat{background:#f5f5f5;border-radius:10px;padding:10px 22px;text-align:center}.kbt-stat-val{font-size:28px;font-weight:900;color:#ff3b30;line-height:1}.kbt-stat-lbl{font-size:10px;color:#999;text-transform:uppercase;letter-spacing:.1em;margin-top:2px}.kbt-progress{height:5px;background:#eee;border-radius:3px;margin-bottom:16px;overflow:hidden}.kbt-progress-fill{height:100%;background:#ff3b30;border-radius:3px;width:0;transition:width .3s}.kbt-key-display{background:#f8f8f8;border:1.5px solid #eee;border-radius:12px;padding:14px 24px;text-align:center;margin-bottom:16px;transition:border-color .15s}.kbt-key-display.kbt-active-key{border-color:#ff3b30}.kbt-kd-main{font-size:26px;font-weight:900;min-height:34px}.kbt-kd-sub{font-size:11px;color:#aaa;font-family:monospace;margin-top:2px;min-height:16px}.kbt-ff-tabs{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:12px}.kbt-ff-tab{padding:7px 16px;border:1.5px solid #ddd;border-radius:8px;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:#666;background:#fff;cursor:pointer;transition:all .18s}.kbt-ff-tab:hover{border-color:#ff3b30;color:#ff3b30}.kbt-ff-tab.kbt-active{background:#ff3b30;border-color:#ff3b30;color:#fff}.kbt-kb-wrap{background:#f0f0f0;border-radius:14px;padding:18px 20px;margin-bottom:14px;overflow-x:auto}.kbt-layout{display:none}
3044.kbt-layout.kbt-show{display:block}.kbt-row{display:flex;gap:4px;margin-bottom:4px;align-items:flex-end}.kbt-k{height:42px;flex:1 1 0;min-width:0;border-radius:6px;background:#fff;border:1px solid #d0d0d0;box-shadow:0 2px 0 #bbb;display:flex;align-items:center;justify-content:center;font-size:10px;font-weight:700;color:#333;cursor:default;transition:background .06s,box-shadow .06s,transform .06s;user-select:none;text-align:center;line-height:1.3;padding:0 4px}.kbt-k.kbt-tested{background:#fff0ef;border-color:#ff3b30;color:#ff3b30;box-shadow:0 2px 0 #e5a0a0}.kbt-k.kbt-pressed{background:#ff3b30!important;border-color:#cc2a20!important;color:#fff!important;box-shadow:none!important;transform:translateY(2px)}.kbt-wfn{flex:0.9 1 0}.kbt-w15{flex:1.5 1 0}.kbt-w175{flex:1.75 1 0}.kbt-w2{flex:2 1 0}.kbt-w225{flex:2.25 1 0}.kbt-w275{flex:2.75 1 0}.kbt-w35{flex:3.5 1 0}.kbt-w625{flex:6.25 1 0}.kbt-wspc{flex:6.25 1 0}.kbt-actions{display:flex;gap:10px;align-items:center;margin-bottom:32px;flex-wrap:wrap}.kbt-btn-reset{display:inline-flex;align-items:center;gap:8px;padding:10px 22px;background:#fff;border:1.5px solid #ddd;border-radius:8px;font-size:13px;font-weight:700;color:#444;cursor:pointer;transition:all .18s}.kbt-btn-reset:hover{border-color:#ff3b30;color:#ff3b30}.kbt-hint{font-size:13px;color:#999}.kbt-divider{height:1px;background:#eee;margin:28px 0}.kbt-section-title{font-size:18px;font-weight:900;text-transform:uppercase;letter-spacing:.04em;margin-bottom:14px}.kbt-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;margin-bottom:28px}.kbt-card{background:#f8f8f8;border-radius:10px;padding:18px}.kbt-card-title{font-size:12px;font-weight:800;text-transform:uppercase;letter-spacing:.08em;color:#ff3b30;margin-bottom:6px}.kbt-card-text{font-size:13px;color:#555;line-height:1.55}.kbt-faq-item{border-bottom:1px solid #eee}.kbt-faq-q{padding:14px 0;font-weight:700;font-size:14px;cursor:pointer;display:flex;justify-content:space-between;align-items:center;gap:12px}.kbt-faq-icon{font-size:20px;color:#ff3b30;flex-shrink:0;line-height:1}.kbt-faq-a{display:none;padding-bottom:14px;font-size:13px;color:#555;line-height:1.6}.kbt-faq-item.kbt-open .kbt-faq-a{display:block}.kbt-w125{flex:1.25 1 0}.kbt-numpad{display:grid;grid-template-columns:repeat(4,1fr);grid-template-rows:repeat(5,42px);gap:3px}.kbt-nav-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:3px}.kbt-k-span2r{grid-row:span 2;height:auto!important;min-height:87px}.kbt-k-span2c{grid-column:span 2}.kbt-dark .kbt-kb-wrap{background:#2a2a2e}.kbt-dark .kbt-k{background:#3c3c44;border-color:#55555f;color:#e0e0e8;box-shadow:0 2px 0 #111}.kbt-dark .kbt-k.kbt-tested{background:#1a4a2a;border-color:#2d7a4a}.kbt-dark .kbt-k.kbt-pressed{background:#ff3b30;border-color:#ff3b30;color:#fff;box-shadow:none}.kbt-dark .kbt-stat{background:#2a2a2e;border:1px solid #44444e}.kbt-dark .kbt-stat-val{color:#e0e0e8}.kbt-dark .kbt-key-display{background:#2a2a2e;border-color:#55555f;color:#e0e0e8}.kbt-dark .kbt-progress{background:#333}.kbt-dark .kbt-hero h1{color:#e0e0e8}.kbt-dark .kbt-hero p{color:#aaa}.kbt-toggles{display:flex;gap:8px;margin-bottom:12px;flex-wrap:wrap}.kbt-toggle-btn{padding:6px 14px;border:1.5px solid #ddd;border-radius:8px;font-size:12px;font-weight:700;cursor:pointer;background:#fff;color:#555;transition:all .18s;user-select:none}.kbt-toggle-btn:hover{border-color:#ff3b30;color:#ff3b30}.kbt-toggle-btn.kbt-active{background:#ff3b30;border-color:#ff3b30;color:#fff}.kbt-dark .kbt-toggle-btn{background:#3c3c44;border-color:#55555f;color:#bbb}.kbt-dark .kbt-toggle-btn.kbt-active{background:#ff3b30;border-color:#ff3b30;color:#fff}</style><div class=\"kbt-container\"><div class=\"kbt-hero\"><h1>Тест <span>клавиатуры</span></h1><p>Нажимайте клавиши — каждая нажатая станет красной. Выберите форм-фактор вашей клавиатуры.</p></div><div class=\"kbt-stats\"><div class=\"kbt-stat\"><div class=\"kbt-stat-val\" id=\"kbt-count\">0</div><div class=\"kbt-stat-lbl\">Протестировано</div></div><div class=\"kbt-stat\"><div class=\"kbt-stat-val\" id=\"kbt-total\">0</div><div class=\"kbt-stat-lbl\">Всего клавиш</div></div><div class=\"kbt-stat\"><div class=\"kbt-stat-val\" id=\"kbt-pct\">0%</div><div class=\"kbt-stat-lbl\">Завершено</div></div></div><div class=\"kbt-progress\"><div class=\"kbt-progress-fill\" id=\"kbt-bar-fill\"></div></div>
3044<div class=\"kbt-key-display\" id=\"kbt-display\"><div class=\"kbt-kd-main\" id=\"kbt-key-name\">Нажмите клавишу</div><div class=\"kbt-kd-sub\" id=\"kbt-key-code\"></div></div><div class=\"kbt-ff-tabs\"><button class=\"kbt-ff-tab kbt-active\" data-ff=\"full\">100%</button><button class=\"kbt-ff-tab\" data-ff=\"tkl\">TKL 87%</button><button class=\"kbt-ff-tab\" data-ff=\"75\">75%</button><button class=\"kbt-ff-tab\" data-ff=\"65\">65%</button><button class=\"kbt-ff-tab\" data-ff=\"60\">60%</button></div><div class=\"kbt-toggles\"><button class=\"kbt-toggle-btn\" id=\"kbt-dark-toggle\">🌙 Тёмная тема</button><button class=\"kbt-toggle-btn kbt-active\" id=\"kbt-lang-toggle\">EN</button></div><div class=\"kbt-kb-wrap\"><div id=\"kbl-full\" class=\"kbt-layout kbt-show\"><div class=\"kbt-row\"><div class=\"kbt-k kbt-wfn\" data-code=\"Escape\">Esc</div><div style=\"width:8px;flex-shrink:0\"></div><div class=\"kbt-k kbt-wfn\" data-code=\"F1\">F1</div><div class=\"kbt-k kbt-wfn\" data-code=\"F2\">F2</div><div class=\"kbt-k kbt-wfn\" data-code=\"F3\">F3</div><div class=\"kbt-k kbt-wfn\" data-code=\"F4\">F4</div><div style=\"width:8px;flex-shrink:0\"></div><div class=\"kbt-k kbt-wfn\" data-code=\"F5\">F5</div><div class=\"kbt-k kbt-wfn\" data-code=\"F6\">F6</div><div class=\"kbt-k kbt-wfn\" data-code=\"F7\">F7</div><div class=\"kbt-k kbt-wfn\" data-code=\"F8\">F8</div><div style=\"width:8px;flex-shrink:0\"></div><div class=\"kbt-k kbt-wfn\" data-code=\"F9\">F9</div><div class=\"kbt-k kbt-wfn\" data-code=\"F10\">F10</div><div class=\"kbt-k kbt-wfn\" data-code=\"F11\">F11</div><div class=\"kbt-k kbt-wfn\" data-code=\"F12\">F12</div><div style=\"width:8px;flex-shrink:0\"></div><div class=\"kbt-k\" data-code=\"PrintScreen\">Prt</div><div class=\"kbt-k\" data-code=\"ScrollLock\">Scr</div><div class=\"kbt-k\" data-code=\"Pause\">Brk</div></div><div style=\"height:6px\"></div><div style=\"display:flex;gap:12px;align-items:stretch\"><div style=\"flex:1\"><div class=\"kbt-row\"><div class=\"kbt-k\" data-code=\"Backquote\" data-en=\"`~\" data-ru=\"ё\">`~</div><div class=\"kbt-k\" data-code=\"Digit1\">1</div><div class=\"kbt-k\" data-code=\"Digit2\">2</div><div class=\"kbt-k\" data-code=\"Digit3\">3</div><div class=\"kbt-k\" data-code=\"Digit4\">4</div><div class=\"kbt-k\" data-code=\"Digit5\">5</div><div class=\"kbt-k\" data-code=\"Digit6\">6</div><div class=\"kbt-k\" data-code=\"Digit7\">7</div><div class=\"kbt-k\" data-code=\"Digit8\">8</div><div class=\"kbt-k\" data-code=\"Digit9\">9</div><div class=\"kbt-k\" data-code=\"Digit0\">0</div><div class=\"kbt-k\" data-code=\"Minus\">-</div><div class=\"kbt-k\" data-code=\"Equal\">=</div><div class=\"kbt-k kbt-w2\" data-code=\"Backspace\">Bksp</div></div><div class=\"kbt-row\"><div class=\"kbt-k kbt-w15\" data-code=\"Tab\">Tab</div><div class=\"kbt-k\" data-code=\"KeyQ\" data-en=\"Q\" data-ru=\"й\">Q</div><div class=\"kbt-k\" data-code=\"KeyW\" data-en=\"W\" data-ru=\"ц\">W</div><div class=\"kbt-k\" data-code=\"KeyE\" data-en=\"E\" data-ru=\"у\">E</div><div class=\"kbt-k\" data-code=\"KeyR\" data-en=\"R\" data-ru=\"к\">R</div><div class=\"kbt-k\" data-code=\"KeyT\" data-en=\"T\" data-ru=\"е\">T</div><div class=\"kbt-k\" data-code=\"KeyY\" data-en=\"Y\" data-ru=\"н\">Y</div><div class=\"kbt-k\" data-code=\"KeyU\" data-en=\"U\" data-ru=\"г\">U</div><div class=\"kbt-k\" data-code=\"KeyI\" data-en=\"I\" data-ru=\"ш\">I</div><div class=\"kbt-k\" data-code=\"KeyO\" data-en=\"O\" data-ru=\"щ\">O</div><div class=\"kbt-k\" data-code=\"KeyP\" data-en=\"P\" data-ru=\"з\">P</div><div class=\"kbt-k\" data-code=\"BracketLeft\" data-en=\"[\" data-ru=\"х\">[</div><div class=\"kbt-k\" data-code=\"BracketRight\" data-en=\"]\" data-ru=\"ъ\">]</div><div class=\"kbt-k kbt-w15\" data-code=\"Backslash\" data-en=\"\\\" data-ru=\"\\\">\\</div></div><div class=\"kbt-row\"><div class=\"kbt-k kbt-w175\" data-code=\"CapsLock\">Caps</div><div class=\"kbt-k\" data-code=\"KeyA\" data-en=\"A\" data-ru=\"ф\">A</div><div class=\"kbt-k\" data-code=\"KeyS\" data-en=\"S\" data-ru=\"ы\">S</div><div class=\"kbt-k\" data-code=\"KeyD\" data-en=\"D\" data-ru=\"в\">D</div><div class=\"kbt-k\" data-code=\"KeyF\" data-en=\"F\" data-ru=\"а\">F</div><div class=\"kbt-k\" data-code=\"KeyG\" data-en=\"G\" data-ru=\"п\">
3044G</div><div class=\"kbt-k\" data-code=\"KeyH\" data-en=\"H\" data-ru=\"р\">H</div><div class=\"kbt-k\" data-code=\"KeyJ\" data-en=\"J\" data-ru=\"о\">J</div><div class=\"kbt-k\" data-code=\"KeyK\" data-en=\"K\" data-ru=\"л\">K</div><div class=\"kbt-k\" data-code=\"KeyL\" data-en=\"L\" data-ru=\"д\">L</div><div class=\"kbt-k\" data-code=\"Semicolon\" data-en=\";\" data-ru=\"ж\">;</div><div class=\"kbt-k\" data-code=\"Quote\" data-en=\"'\" data-ru=\"э\">'</div><div class=\"kbt-k kbt-w225\" data-code=\"Enter\">Enter</div></div><div class=\"kbt-row\"><div class=\"kbt-k kbt-w225\" data-code=\"ShiftLeft\">Shift</div><div class=\"kbt-k\" data-code=\"KeyZ\" data-en=\"Z\" data-ru=\"я\">Z</div><div class=\"kbt-k\" data-code=\"KeyX\" data-en=\"X\" data-ru=\"ч\">X</div><div class=\"kbt-k\" data-code=\"KeyC\" data-en=\"C\" data-ru=\"с\">C</div><div class=\"kbt-k\" data-code=\"KeyV\" data-en=\"V\" data-ru=\"м\">V</div><div class=\"kbt-k\" data-code=\"KeyB\" data-en=\"B\" data-ru=\"и\">B</div><div class=\"kbt-k\" data-code=\"KeyN\" data-en=\"N\" data-ru=\"т\">N</div><div class=\"kbt-k\" data-code=\"KeyM\" data-en=\"M\" data-ru=\"ь\">M</div><div class=\"kbt-k\" data-code=\"Comma\" data-en=\",\" data-ru=\"б\">,</div><div class=\"kbt-k\" data-code=\"Period\" data-en=\".\" data-ru=\"ю\">.</div><div class=\"kbt-k\" data-code=\"Slash\" data-en=\"/\" data-ru=\".\">/</div><div class=\"kbt-k kbt-w275\" data-code=\"ShiftRight\">Shift</div></div><div class=\"kbt-row\"><div class=\"kbt-k kbt-w125\" data-code=\"ControlLeft\">Ctrl</div><div class=\"kbt-k kbt-w125\" data-code=\"MetaLeft\">Win</div><div class=\"kbt-k kbt-w125\" data-code=\"AltLeft\">Alt</div><div class=\"kbt-k kbt-wspc\" data-code=\"Space\">Space</div><div class=\"kbt-k kbt-w125\" data-code=\"AltRight\">Alt</div><div class=\"kbt-k kbt-w125\" data-code=\"MetaRight\">Win</div><div class=\"kbt-k kbt-w125\" data-code=\"ContextMenu\">Menu</div><div class=\"kbt-k kbt-w125\" data-code=\"ControlRight\">Ctrl</div></div></div><div style=\"display:flex;flex-direction:column;justify-content:space-between;width:134px\"><div style=\"display:flex;flex-direction:column;gap:4px\"><div style=\"display:flex;gap:4px\"><div class=\"kbt-k\" data-code=\"Insert\">Ins</div><div class=\"kbt-k\" data-code=\"Home\">Home</div><div class=\"kbt-k\" data-code=\"PageUp\">PgUp</div></div><div style=\"display:flex;gap:4px\"><div class=\"kbt-k\" data-code=\"Delete\">Del</div><div class=\"kbt-k\" data-code=\"End\">End</div><div class=\"kbt-k\" data-code=\"PageDown\">PgDn</div></div></div><div style=\"display:flex;flex-direction:column;gap:4px\"><div style=\"display:flex;gap:4px\"><div class=\"kbt-k\" style=\"visibility:hidden\"></div><div class=\"kbt-k\" data-code=\"ArrowUp\">↑</div><div class=\"kbt-k\" style=\"visibility:hidden\"></div></div><div style=\"display:flex;gap:4px\"><div class=\"kbt-k\" data-code=\"ArrowLeft\">←</div><div class=\"kbt-k\" data-code=\"ArrowDown\">↓</div><div class=\"kbt-k\" data-code=\"ArrowRight\">→</div></div></div></div><div style=\"display:grid;grid-template-columns:repeat(4,1fr);grid-template-rows:repeat(5,42px);gap:4px;width:180px\"><div class=\"kbt-k\" data-code=\"NumLock\">Num</div><div class=\"kbt-k\" data-code=\"NumpadDivide\">/</div><div class=\"kbt-k\" data-code=\"NumpadMultiply\">*</div><div class=\"kbt-k\" data-code=\"NumpadSubtract\">-</div><div class=\"kbt-k\" data-code=\"Numpad7\">7</div><div class=\"kbt-k\" data-code=\"Numpad8\">8</div><div class=\"kbt-k\" data-code=\"Numpad9\">9</div><div class=\"kbt-k\" data-code=\"NumpadAdd\" style=\"grid-row:span 2;height:auto\">+</div><div class=\"kbt-k\" data-code=\"Numpad4\">4</div><div class=\"kbt-k\" data-code=\"Numpad5\">5</div><div class=\"kbt-k\" data-code=\"Numpad6\">6</div><div class=\"kbt-k\" data-code=\"Numpad1\">1</div><div class=\"kbt-k\" data-code=\"Numpad2\">2</div><div class=\"kbt-k\" data-code=\"Numpad3\">3</div><div class=\"kbt-k\" data-code=\"NumpadEnter\" style=\"grid-row:span 2;height:auto\">Ent</div><div class=\"kbt-k\" data-code=\"Numpad0\" style=\"grid-column:span 2\">0</div><div class=\"kbt-k\" data-code=\"NumpadDecimal\">.</div></div></div></div><div id=\"kbl-tkl\" class=\"kbt-layout\"><div class=\"kbt-row\"><div class=\"kbt-k kbt-wfn\" data-code=\"Escape\">Esc</div><div style=\"width:8px;flex-shrink:0\"></div><div class=\"kbt-k kbt-wfn\" data-code=\"F1\">F1</div><div class=\"kbt-k kbt-wfn\" data-code=\"F2\">F2</div><div class=\"kbt-k kbt-wfn\" data-code=\"F3\">F3</div><div class=\"kbt-k kbt-wfn\" data-code=\"F4\">F4</div><div style=\"width:8px;flex-shrink:0\"></div><div class=\"kbt-k kbt-wfn\" data-code=\"F5\">F5</div><div class=\"kbt-k kbt-wfn\" data-code=\"F6\">F6</div><div class=\"kbt-k kbt-wfn\" data-code=\"F7\">F7</div><div class=\"kbt-k kbt-wfn\" data-code=\"F8\">F8</div><div style=\"width:8px;flex-shrink:0\"></div><div class=\"kbt-k kbt-wfn\" data-code=\"F9\">F9</div><div class=\"kbt-k kbt-wfn\" data-code=\"F10\">F10</div><div class=\"kbt-k kbt-wfn\" data-code=\"F11\">F11</div><div class=\"kbt-k kbt-wfn\" data-code=\"F12\">F12</div><div style=\"width:8px;flex-shrink:0\"></div><div class=\"kbt-k\" data-code=\"PrintScreen\">Prt</div><div class=\"kbt-k\" data-code=\"ScrollLock\">Scr</div><div class=\"kbt-k\" data-code=\"Pause\">Brk</div></div><div style=\"height:6px\"></div><div style=\"display:flex;gap:12px;align-items:stretch\"><div style=\"flex:1\"><div class=\"kbt-row\"><div class=\"kbt-k\" data-code=\"Backquote\" data-en=\"`~\" data-ru=\"ё\">`~</div><div class=\"kbt-k\" data-code=\"Digit1\">1</div><div class=\"kbt-k\" data-code=\"Digit2\">2</div><div class=\"kbt-k\" data-code=\"Digit3\">3</div><div class=\"kbt-k\" data-code=\"Digit4\">4</div><div class=\"kbt-k\" data-code=\"Digit5\">5</div><div class=\"kbt-k\" data-code=\"Digit6\">6</div><div class=\"kbt-k\" data-code=\"Digit7\">7</div><div class=\"kbt-k\" data-code=\"Digit8\">8</div><div class=\"kbt-k\" data-code=\"Digit9\">9</div><div class=\"kbt-k\" data-code=\"Digit0\">0</div><div class=\"kbt-k\" data-code=\"Minus\">-</div><div class=\"kbt-k\" data-code=\"Equal\">=</div><div class=\"kbt-k kbt-w2\" data-code=\"Backspace\">Bksp</div></div><div class=\"kbt-row\"><div class=\"kbt-k kbt-w15\" data-code=\"Tab\">Tab</div><div class=\"kbt-k\" data-code=\"KeyQ\" data-en=\"Q\" data-ru=\"й\">Q</div><div class=\"kbt-k\" data-code=\"KeyW\" data-en=\"W\" data-ru=\"ц\">W</div><div class=\"kbt-k\" data-code=\"KeyE\" data-en=\"E\" data-ru=\"у\">E</div><div class=\"kbt-k\" data-code=\"KeyR\" data-en=\"R\" data-ru=\"к\">R</div><div class=\"kbt-k\" data-code=\"KeyT\" data-en=\"T\" data-ru=\"е\">T</div><div class=\"kbt-k\" data-code=\"KeyY\" data-en=\"Y\" data-ru=\"н\">Y</div><div class=\"kbt-k\" data-code=\"KeyU\" data-en=\"U\" data-ru=\"г\">U</div><div class=\"kbt-k\" data-code=\"KeyI\" data-en=\"I\" data-ru=\"ш\">I</div><div class=\"kbt-k\" data-code=\"KeyO\" data-en=\"O\" data-ru=\"щ\">O</div><div class=\"kbt-k\" data-code=\"KeyP\" data-en=\"P\" data-ru=\"з\">P</div><div class=\"kbt-k\" data-code=\"BracketLeft\" data-en=\"[\" data-ru=\"х\">[</div><div class=\"kbt-k\" data-code=\"BracketRight\" data-en=\"]\" data-ru=\"ъ\">]</div><div class=\"kbt-k kbt-w15\" data-code=\"Backslash\" data-en=\"\\\" data-ru=\"\\\">\\</div></div><div class=\"kbt-row\"><div class=\"kbt-k kbt-w175\" data-code=\"CapsLock\">Caps</div><div class=\"kbt-k\" data-code=\"KeyA\" data-en=\"A\" data-ru=\"ф\">A</div><div class=\"kbt-k\" data-code=\"KeyS\" data-en=\"S\" data-ru=\"ы\">S</div><div class=\"kbt-k\" data-code=\"KeyD\" data-en=\"D\" data-ru=\"в\">D</div><div class=\"kbt-k\" data-code=\"KeyF\" data-en=\"F\" data-ru=\"а\">F</div><div class=\"kbt-k\" data-code=\"KeyG\" data-en=\"G\" data-ru=\"п\">
3044G</div><div class=\"kbt-k\" data-code=\"KeyH\" data-en=\"H\" data-ru=\"р\">H</div><div class=\"kbt-k\" data-code=\"KeyJ\" data-en=\"J\" data-ru=\"о\">J</div><div class=\"kbt-k\" data-code=\"KeyK\" data-en=\"K\" data-ru=\"л\">K</div><div class=\"kbt-k\" data-code=\"KeyL\" data-en=\"L\" data-ru=\"д\">L</div><div class=\"kbt-k\" data-code=\"Semicolon\" data-en=\";\" data-ru=\"ж\">;</div><div class=\"kbt-k\" data-code=\"Quote\" data-en=\"'\" data-ru=\"э\">'</div><div class=\"kbt-k kbt-w225\" data-code=\"Enter\">Enter</div></div><div class=\"kbt-row\"><div class=\"kbt-k kbt-w225\" data-code=\"ShiftLeft\">Shift</div><div class=\"kbt-k\" data-code=\"KeyZ\" data-en=\"Z\" data-ru=\"я\">Z</div><div class=\"kbt-k\" data-code=\"KeyX\" data-en=\"X\" data-ru=\"ч\">X</div><div class=\"kbt-k\" data-code=\"KeyC\" data-en=\"C\" data-ru=\"с\">C</div><div class=\"kbt-k\" data-code=\"KeyV\" data-en=\"V\" data-ru=\"м\">V</div><div class=\"kbt-k\" data-code=\"KeyB\" data-en=\"B\" data-ru=\"и\">B</div><div class=\"kbt-k\" data-code=\"KeyN\" data-en=\"N\" data-ru=\"т\">N</div><div class=\"kbt-k\" data-code=\"KeyM\" data-en=\"M\" data-ru=\"ь\">M</div><div class=\"kbt-k\" data-code=\"Comma\" data-en=\",\" data-ru=\"б\">,</div><div class=\"kbt-k\" data-code=\"Period\" data-en=\".\" data-ru=\"ю\">.</div><div class=\"kbt-k\" data-code=\"Slash\" data-en=\"/\" data-ru=\".\">/</div><div class=\"kbt-k kbt-w275\" data-code=\"ShiftRight\">Shift</div></div><div class=\"kbt-row\"><div class=\"kbt-k kbt-w125\" data-code=\"ControlLeft\">Ctrl</div><div class=\"kbt-k kbt-w125\" data-code=\"MetaLeft\">Win</div><div class=\"kbt-k kbt-w125\" data-code=\"AltLeft\">Alt</div><div class=\"kbt-k kbt-wspc\" data-code=\"Space\">Space</div><div class=\"kbt-k kbt-w125\" data-code=\"AltRight\">Alt</div><div class=\"kbt-k kbt-w125\" data-code=\"MetaRight\">Win</div><div class=\"kbt-k kbt-w125\" data-code=\"ContextMenu\">Menu</div><div class=\"kbt-k kbt-w125\" data-code=\"ControlRight\">Ctrl</div></div></div><div style=\"display:flex;flex-direction:column;justify-content:space-between;width:134px\"><div style=\"display:flex;flex-direction:column;gap:4px\"><div style=\"display:flex;gap:4px\"><div class=\"kbt-k\" data-code=\"Insert\">Ins</div><div class=\"kbt-k\" data-code=\"Home\">Home</div><div class=\"kbt-k\" data-code=\"PageUp\">PgUp</div></div><div style=\"display:flex;gap:4px\"><div class=\"kbt-k\" data-code=\"Delete\">Del</div><div class=\"kbt-k\" data-code=\"End\">End</div><div class=\"kbt-k\" data-code=\"PageDown\">PgDn</div></div></div><div style=\"display:flex;flex-direction:column;gap:4px\"><div style=\"display:flex;gap:4px\"><div class=\"kbt-k\" style=\"visibility:hidden\"></div><div class=\"kbt-k\" data-code=\"ArrowUp\">↑</div><div class=\"kbt-k\" style=\"visibility:hidden\"></div></div><div style=\"display:flex;gap:4px\"><div class=\"kbt-k\" data-code=\"ArrowLeft\">←</div><div class=\"kbt-k\" data-code=\"ArrowDown\">↓</div><div class=\"kbt-k\" data-code=\"ArrowRight\">→</div></div></div></div></div></div><div id=\"kbl-75\" class=\"kbt-layout\"><div class=\"kbt-row\"><div class=\"kbt-k kbt-wfn\" data-code=\"Escape\">Esc</div><div class=\"kbt-k kbt-wfn\" data-code=\"F1\">F1</div><div class=\"kbt-k kbt-wfn\" data-code=\"F2\">F2</div><div class=\"kbt-k kbt-wfn\" data-code=\"F3\">F3</div><div class=\"kbt-k kbt-wfn\" data-code=\"F4\">F4</div><div class=\"kbt-k kbt-wfn\" data-code=\"F5\">F5</div><div class=\"kbt-k kbt-wfn\" data-code=\"F6\">F6</div><div class=\"kbt-k kbt-wfn\" data-code=\"F7\">F7</div><div class=\"kbt-k kbt-wfn\" data-code=\"F8\">F8</div><div class=\"kbt-k kbt-wfn\" data-code=\"F9\">F9</div><div class=\"kbt-k kbt-wfn\" data-code=\"F10\">F10</div><div class=\"kbt-k kbt-wfn\" data-code=\"F11\">F11</div><div class=\"kbt-k kbt-wfn\" data-code=\"F12\">F12</div><div class=\"kbt-k\" data-code=\"Delete\">Del</div></div><div class=\"kbt-row\"><div class=\"kbt-k\" data-code=\"Backquote\" data-en=\"`~\" data-ru=\"ё\">`~</div><div class=\"kbt-k\" data-code=\"Digit1\">1</div><div class=\"kbt-k\" data-code=\"Digit2\">2</div><div class=\"kbt-k\" data-code=\"Digit3\">3</div><div class=\"kbt-k\" data-code=\"Digit4\">4</div><div class=\"kbt-k\" data-code=\"Digit5\">5</div><div class=\"kbt-k\" data-code=\"Digit6\">6</div><div class=\"kbt-k\" data-code=\"Digit7\">7</div><div class=\"kbt-k\" data-code=\"Digit8\">8</div><div class=\"kbt-k\" data-code=\"Digit9\">9</div><div class=\"kbt-k\" data-code=\"Digit0\">0</div><div class=\"kbt-k\" data-code=\"Minus\">-</div><div class=\"kbt-k\" data-code=\"Equal\">=</div><div class=\"kbt-k kbt-w2\" data-code=\"Backspace\">Bksp</div><div class=\"kbt-k\" data-code=\"PageUp\">PgUp</div></div><div class=\"kbt-row\"><div class=\"kbt-k kbt-w15\" data-code=\"Tab\">Tab</div><div class=\"kbt-k\" data-code=\"KeyQ\" data-en=\"Q\" data-ru=\"й\">Q</div><div class=\"kbt-k\" data-code=\"KeyW\" data-en=\"W\" data-ru=\"ц\">W</div><div class=\"kbt-k\" data-code=\"KeyE\" data-en=\"E\" data-ru=\"у\">E</div><div class=\"kbt-k\" data-code=\"KeyR\" data-en=\"R\" data-ru=\"к\">R</div><div class=\"kbt-k\" data-code=\"KeyT\" data-en=\"T\" data-ru=\"е\">T</div><div class=\"kbt-k\" data-code=\"KeyY\" data-en=\"Y\" data-ru=\"н\">Y</div><div class=\"kbt-k\" data-code=\"KeyU\" data-en=\"U\" data-ru=\"г\">U</div><div class=\"kbt-k\" data-code=\"KeyI\" data-en=\"I\" data-ru=\"ш\">I</div><div class=\"kbt-k\" data-code=\"KeyO\" data-en=\"O\" data-ru=\"щ\">O</div><div class=\"kbt-k\" data-code=\"KeyP\" data-en=\"P\" data-ru=\"з\">P</div><div class=\"kbt-k\" data-code=\"BracketLeft\" data-en=\"[\" data-ru=\"х\">[</div><div class=\"kbt-k\" data-code=\"BracketRight\" data-en=\"]\" data-ru=\"ъ\">]</div><div class=\"kbt-k kbt-w15\" data-code=\"Backslash\" data-en=\"\\\" data-ru=\"\\\">\\</div><div class=\"kbt-k\" data-code=\"PageDown\">PgDn</div></div><div class=\"kbt-row\"><div class=\"kbt-k kbt-w175\" data-code=\"CapsLock\">Caps</div><div class=\"kbt-k\" data-code=\"KeyA\" data-en=\"A\" data-ru=\"ф\">A</div><div class=\"kbt-k\" data-code=\"KeyS\" data-en=\"S\" data-ru=\"ы\">S</div><div class=\"kbt-k\" data-code=\"KeyD\" data-en=\"D\" data-ru=\"в\">D</div><div class=\"kbt-k\" data-code=\"KeyF\" data-en=\"F\" data-ru=\"а\">F</div><div class=\"kbt-k\" data-code=\"KeyG\" data-en=\"G\" data-ru=\"п\">
3044G</div><div class=\"kbt-k\" data-code=\"KeyH\" data-en=\"H\" data-ru=\"р\">H</div><div class=\"kbt-k\" data-code=\"KeyJ\" data-en=\"J\" data-ru=\"о\">J</div><div class=\"kbt-k\" data-code=\"KeyK\" data-en=\"K\" data-ru=\"л\">K</div><div class=\"kbt-k\" data-code=\"KeyL\" data-en=\"L\" data-ru=\"д\">L</div><div class=\"kbt-k\" data-code=\"Semicolon\" data-en=\";\" data-ru=\"ж\">;</div><div class=\"kbt-k\" data-code=\"Quote\" data-en=\"'\" data-ru=\"э\">'</div><div class=\"kbt-k kbt-w225\" data-code=\"Enter\">Enter</div></div><div class=\"kbt-row\"><div class=\"kbt-k kbt-w225\" data-code=\"ShiftLeft\">Shift</div><div class=\"kbt-k\" data-code=\"KeyZ\" data-en=\"Z\" data-ru=\"я\">Z</div><div class=\"kbt-k\" data-code=\"KeyX\" data-en=\"X\" data-ru=\"ч\">X</div><div class=\"kbt-k\" data-code=\"KeyC\" data-en=\"C\" data-ru=\"с\">C</div><div class=\"kbt-k\" data-code=\"KeyV\" data-en=\"V\" data-ru=\"м\">V</div><div class=\"kbt-k\" data-code=\"KeyB\" data-en=\"B\" data-ru=\"и\">B</div><div class=\"kbt-k\" data-code=\"KeyN\" data-en=\"N\" data-ru=\"т\">N</div><div class=\"kbt-k\" data-code=\"KeyM\" data-en=\"M\" data-ru=\"ь\">M</div><div class=\"kbt-k\" data-code=\"Comma\" data-en=\",\" data-ru=\"б\">,</div><div class=\"kbt-k\" data-code=\"Period\" data-en=\".\" data-ru=\"ю\">.</div><div class=\"kbt-k\" data-code=\"Slash\" data-en=\"/\" data-ru=\".\">/</div><div class=\"kbt-k kbt-w175\" data-code=\"ShiftRight\">Shift</div><div class=\"kbt-k\" data-code=\"ArrowUp\">↑</div></div><div class=\"kbt-row\"><div class=\"kbt-k kbt-w125\" data-code=\"ControlLeft\">Ctrl</div><div class=\"kbt-k\" data-code=\"\">Fn</div><div class=\"kbt-k kbt-w125\" data-code=\"MetaLeft\">Win</div><div class=\"kbt-k kbt-w125\" data-code=\"AltLeft\">Alt</div><div class=\"kbt-k kbt-wspc\" data-code=\"Space\">Space</div><div class=\"kbt-k kbt-w125\" data-code=\"AltRight\">Alt</div><div class=\"kbt-k kbt-w125\" data-code=\"ControlRight\">Ctrl</div><div class=\"kbt-k\" data-code=\"ArrowLeft\">←</div><div class=\"kbt-k\" data-code=\"ArrowDown\">↓</div><div class=\"kbt-k\" data-code=\"ArrowRight\">→</div></div></div><div id=\"kbl-65\" class=\"kbt-layout\"><div class=\"kbt-row\"><div class=\"kbt-k\" data-code=\"Backquote\" data-en=\"`~\" data-ru=\"ё\">`~</div><div class=\"kbt-k\" data-code=\"Digit1\">1</div><div class=\"kbt-k\" data-code=\"Digit2\">2</div><div class=\"kbt-k\" data-code=\"Digit3\">3</div><div class=\"kbt-k\" data-code=\"Digit4\">4</div><div class=\"kbt-k\" data-code=\"Digit5\">5</div><div class=\"kbt-k\" data-code=\"Digit6\">6</div><div class=\"kbt-k\" data-code=\"Digit7\">7</div><div class=\"kbt-k\" data-code=\"Digit8\">8</div><div class=\"kbt-k\" data-code=\"Digit9\">9</div><div class=\"kbt-k\" data-code=\"Digit0\">0</div><div class=\"kbt-k\" data-code=\"Minus\">-</div><div class=\"kbt-k\" data-code=\"Equal\">=</div><div class=\"kbt-k kbt-w2\" data-code=\"Backspace\">Bksp</div><div class=\"kbt-k\" data-code=\"Delete\">Del</div></div><div class=\"kbt-row\"><div class=\"kbt-k kbt-w15\" data-code=\"Tab\">Tab</div><div class=\"kbt-k\" data-code=\"KeyQ\" data-en=\"Q\" data-ru=\"й\">Q</div><div class=\"kbt-k\" data-code=\"KeyW\" data-en=\"W\" data-ru=\"ц\">W</div><div class=\"kbt-k\" data-code=\"KeyE\" data-en=\"E\" data-ru=\"у\">E</div><div class=\"kbt-k\" data-code=\"KeyR\" data-en=\"R\" data-ru=\"к\">R</div><div class=\"kbt-k\" data-code=\"KeyT\" data-en=\"T\" data-ru=\"е\">T</div><div class=\"kbt-k\" data-code=\"KeyY\" data-en=\"Y\" data-ru=\"н\">Y</div><div class=\"kbt-k\" data-code=\"KeyU\" data-en=\"U\" data-ru=\"г\">U</div><div class=\"kbt-k\" data-code=\"KeyI\" data-en=\"I\" data-ru=\"ш\">I</div><div class=\"kbt-k\" data-code=\"KeyO\" data-en=\"O\" data-ru=\"щ\">O</div><div class=\"kbt-k\" data-code=\"KeyP\" data-en=\"P\" data-ru=\"з\">P</div><div class=\"kbt-k\" data-code=\"BracketLeft\" data-en=\"[\" data-ru=\"х\">[</div><div class=\"kbt-k\" data-code=\"BracketRight\" data-en=\"]\" data-ru=\"ъ\">]</div><div class=\"kbt-k kbt-w15\" data-code=\"Backslash\" data-en=\"\\\" data-ru=\"\\\">\\</div><div class=\"kbt-k\" data-code=\"PageUp\">PgUp</div></div><div class=\"kbt-row\"><div class=\"kbt-k kbt-w175\" data-code=\"CapsLock\">Caps</div><div class=\"kbt-k\" data-code=\"KeyA\" data-en=\"A\" data-ru=\"ф\">A</div><div class=\"kbt-k\" data-code=\"KeyS\" data-en=\"S\" data-ru=\"ы\">S</div><div class=\"kbt-k\" data-code=\"KeyD\" data-en=\"D\" data-ru=\"в\">D</div><div class=\"kbt-k\" data-code=\"KeyF\" data-en=\"F\" data-ru=\"а\">F</div><div class=\"kbt-k\" data-code=\"KeyG\" data-en=\"G\" data-ru=\"п\">
3044G</div><div class=\"kbt-k\" data-code=\"KeyH\" data-en=\"H\" data-ru=\"р\">H</div><div class=\"kbt-k\" data-code=\"KeyJ\" data-en=\"J\" data-ru=\"о\">J</div><div class=\"kbt-k\" data-code=\"KeyK\" data-en=\"K\" data-ru=\"л\">K</div><div class=\"kbt-k\" data-code=\"KeyL\" data-en=\"L\" data-ru=\"д\">L</div><div class=\"kbt-k\" data-code=\"Semicolon\" data-en=\";\" data-ru=\"ж\">;</div><div class=\"kbt-k\" data-code=\"Quote\" data-en=\"'\" data-ru=\"э\">'</div><div class=\"kbt-k kbt-w225\" data-code=\"Enter\">Enter</div><div class=\"kbt-k\" data-code=\"PageDown\">PgDn</div></div><div class=\"kbt-row\"><div class=\"kbt-k kbt-w225\" data-code=\"ShiftLeft\">Shift</div><div class=\"kbt-k\" data-code=\"KeyZ\" data-en=\"Z\" data-ru=\"я\">Z</div><div class=\"kbt-k\" data-code=\"KeyX\" data-en=\"X\" data-ru=\"ч\">X</div><div class=\"kbt-k\" data-code=\"KeyC\" data-en=\"C\" data-ru=\"с\">C</div><div class=\"kbt-k\" data-code=\"KeyV\" data-en=\"V\" data-ru=\"м\">V</div><div class=\"kbt-k\" data-code=\"KeyB\" data-en=\"B\" data-ru=\"и\">B</div><div class=\"kbt-k\" data-code=\"KeyN\" data-en=\"N\" data-ru=\"т\">N</div><div class=\"kbt-k\" data-code=\"KeyM\" data-en=\"M\" data-ru=\"ь\">M</div><div class=\"kbt-k\" data-code=\"Comma\" data-en=\",\" data-ru=\"б\">,</div><div class=\"kbt-k\" data-code=\"Period\" data-en=\".\" data-ru=\"ю\">.</div><div class=\"kbt-k\" data-code=\"Slash\" data-en=\"/\" data-ru=\".\">/</div><div class=\"kbt-k kbt-w175\" data-code=\"ShiftRight\">Shift</div><div class=\"kbt-k\" data-code=\"ArrowUp\">↑</div></div><div class=\"kbt-row\"><div class=\"kbt-k kbt-w125\" data-code=\"ControlLeft\">Ctrl</div><div class=\"kbt-k kbt-w125\" data-code=\"MetaLeft\">Win</div><div class=\"kbt-k kbt-w125\" data-code=\"AltLeft\">Alt</div><div class=\"kbt-k kbt-wspc\" data-code=\"Space\">Space</div><div class=\"kbt-k kbt-w125\" data-code=\"AltRight\">Alt</div><div class=\"kbt-k\" data-code=\"\">Fn</div><div class=\"kbt-k kbt-w125\" data-code=\"ControlRight\">Ctrl</div><div class=\"kbt-k\" data-code=\"ArrowLeft\">←</div><div class=\"kbt-k\" data-code=\"ArrowDown\">↓</div><div class=\"kbt-k\" data-code=\"ArrowRight\">→</div></div></div><div id=\"kbl-60\" class=\"kbt-layout\"><div class=\"kbt-row\"><div class=\"kbt-k\" data-code=\"Escape\">Esc</div><div class=\"kbt-k\" data-code=\"Digit1\">1</div><div class=\"kbt-k\" data-code=\"Digit2\">2</div><div class=\"kbt-k\" data-code=\"Digit3\">3</div><div class=\"kbt-k\" data-code=\"Digit4\">4</div><div class=\"kbt-k\" data-code=\"Digit5\">5</div><div class=\"kbt-k\" data-code=\"Digit6\">6</div><div class=\"kbt-k\" data-code=\"Digit7\">7</div><div class=\"kbt-k\" data-code=\"Digit8\">8</div><div class=\"kbt-k\" data-code=\"Digit9\">9</div><div class=\"kbt-k\" data-code=\"Digit0\">0</div><div class=\"kbt-k\" data-code=\"Minus\">-</div><div class=\"kbt-k\" data-code=\"Equal\">=</div><div class=\"kbt-k kbt-w2\" data-code=\"Backspace\">Bksp</div></div><div class=\"kbt-row\"><div class=\"kbt-k kbt-w15\" data-code=\"Tab\">Tab</div><div class=\"kbt-k\" data-code=\"KeyQ\" data-en=\"Q\" data-ru=\"й\">Q</div><div class=\"kbt-k\" data-code=\"KeyW\" data-en=\"W\" data-ru=\"ц\">W</div><div class=\"kbt-k\" data-code=\"KeyE\" data-en=\"E\" data-ru=\"у\">E</div><div class=\"kbt-k\" data-code=\"KeyR\" data-en=\"R\" data-ru=\"к\">R</div><div class=\"kbt-k\" data-code=\"KeyT\" data-en=\"T\" data-ru=\"е\">T</div><div class=\"kbt-k\" data-code=\"KeyY\" data-en=\"Y\" data-ru=\"н\">Y</div><div class=\"kbt-k\" data-code=\"KeyU\" data-en=\"U\" data-ru=\"г\">U</div><div class=\"kbt-k\" data-code=\"KeyI\" data-en=\"I\" data-ru=\"ш\">I</div><div class=\"kbt-k\" data-code=\"KeyO\" data-en=\"O\" data-ru=\"щ\">O</div><div class=\"kbt-k\" data-code=\"KeyP\" data-en=\"P\" data-ru=\"з\">P</div><div class=\"kbt-k\" data-code=\"BracketLeft\" data-en=\"[\" data-ru=\"х\">[</div><div class=\"kbt-k\" data-code=\"BracketRight\" data-en=\"]\" data-ru=\"ъ\">]</div><div class=\"kbt-k kbt-w15\" data-code=\"Backslash\" data-en=\"\\\" data-ru=\"\\\">\\</div></div><div class=\"kbt-row\"><div class=\"kbt-k kbt-w175\" data-code=\"CapsLock\">Caps</div><div class=\"kbt-k\" data-code=\"KeyA\" data-en=\"A\" data-ru=\"ф\">A</div><div class=\"kbt-k\" data-code=\"KeyS\" data-en=\"S\" data-ru=\"ы\">S</div><div class=\"kbt-k\" data-code=\"KeyD\" data-en=\"D\" data-ru=\"в\">D</div><div class=\"kbt-k\" data-code=\"KeyF\" data-en=\"F\" data-ru=\"а\">F</div><div class=\"kbt-k\" data-code=\"KeyG\" data-en=\"G\" data-ru=\"п\">
3044G</div><div class=\"kbt-k\" data-code=\"KeyH\" data-en=\"H\" data-ru=\"р\">H</div><div class=\"kbt-k\" data-code=\"KeyJ\" data-en=\"J\" data-ru=\"о\">J</div><div class=\"kbt-k\" data-code=\"KeyK\" data-en=\"K\" data-ru=\"л\">K</div><div class=\"kbt-k\" data-code=\"KeyL\" data-en=\"L\" data-ru=\"д\">L</div><div class=\"kbt-k\" data-code=\"Semicolon\" data-en=\";\" data-ru=\"ж\">;</div><div class=\"kbt-k\" data-code=\"Quote\" data-en=\"'\" data-ru=\"э\">'</div><div class=\"kbt-k kbt-w225\" data-code=\"Enter\">Enter</div></div><div class=\"kbt-row\"><div class=\"kbt-k kbt-w225\" data-code=\"ShiftLeft\">Shift</div><div class=\"kbt-k\" data-code=\"KeyZ\" data-en=\"Z\" data-ru=\"я\">Z</div><div class=\"kbt-k\" data-code=\"KeyX\" data-en=\"X\" data-ru=\"ч\">X</div><div class=\"kbt-k\" data-code=\"KeyC\" data-en=\"C\" data-ru=\"с\">C</div><div class=\"kbt-k\" data-code=\"KeyV\" data-en=\"V\" data-ru=\"м\">V</div><div class=\"kbt-k\" data-code=\"KeyB\" data-en=\"B\" data-ru=\"и\">B</div><div class=\"kbt-k\" data-code=\"KeyN\" data-en=\"N\" data-ru=\"т\">N</div><div class=\"kbt-k\" data-code=\"KeyM\" data-en=\"M\" data-ru=\"ь\">M</div><div class=\"kbt-k\" data-code=\"Comma\" data-en=\",\" data-ru=\"б\">,</div><div class=\"kbt-k\" data-code=\"Period\" data-en=\".\" data-ru=\"ю\">.</div><div class=\"kbt-k\" data-code=\"Slash\" data-en=\"/\" data-ru=\".\">/</div><div class=\"kbt-k kbt-w275\" data-code=\"ShiftRight\">Shift</div></div><div class=\"kbt-row\"><div class=\"kbt-k kbt-w15\" data-code=\"ControlLeft\">Ctrl</div><div class=\"kbt-k kbt-w125\" data-code=\"MetaLeft\">Win</div><div class=\"kbt-k kbt-w125\" data-code=\"AltLeft\">Alt</div><div class=\"kbt-k kbt-w625\" data-code=\"Space\">Space</div><div class=\"kbt-k kbt-w125\" data-code=\"AltRight\">Alt</div><div class=\"kbt-k kbt-w125\" data-code=\"\">Fn</div><div class=\"kbt-k kbt-w15\" data-code=\"ControlRight\">Ctrl</div></div></div></div><div class=\"kbt-actions\"><button class=\"kbt-btn-reset\" id=\"kbt-reset\">&#8635; Сбросить тест</button><span class=\"kbt-hint\">Клавиши <span style=\"color:#ff3b30;font-weight:700\">красные</span> — протестированы</span></div><div class=\"kbt-divider\"></div><div class=\"kbt-section-title\">Частые проблемы</div><div class=\"kbt-cards\"><div class=\"kbt-card\"><div class=\"kbt-card-title\">Клавиша не срабатывает</div><div class=\"kbt-card-text\">Проверьте переключатель — возможно засорился. Извлеките кейкап и осмотрите свитч, попробуйте нажать несколько раз с разной силой.</div></div><div class=\"kbt-card\"><div class=\"kbt-card-title\">Двойное нажатие (chattering)</div><div class=\"kbt-card-text\">Свитч посылает сигнал дважды при одном нажатии. Решается заменой переключателя или обновлением прошивки клавиатуры.</div></div><div class=\"kbt-card\"><div class=\"kbt-card-title\">Несколько клавиш не работают</div><div class=\"kbt-card-text\">Возможна проблема с матрицей. Попробуйте другой USB-порт, проверьте кабель или переустановите драйверы.</div></div><div class=\"kbt-card\"><div class=\"kbt-card-title\">Нет N-Key Rollover</div><div class=\"kbt-card-text\">Без NKRO одновременное нажатие нескольких клавиш может не регистрироваться. Критично для игровых комбо.</div></div></div><div class=\"kbt-divider\"></div><div class=\"kbt-section-title\">Часто задаваемые вопросы</div><div id=\"kbt-faq\"><div class=\"kbt-faq-item\"><div class=\"kbt-faq-q\">Зачем тестировать клавиатуру?<span class=\"kbt-faq-icon\">+</span></div><div class=\"kbt-faq-a\">Тест помогает убедиться что все клавиши работают корректно — нет двойных нажатий, пропусков или залипаний. Особенно важно при покупке новой клавиатуры.</div></div><div class=\"kbt-faq-item\"><div class=\"kbt-faq-q\">Что такое N-Key Rollover?<span class=\"kbt-faq-icon\">+</span></div><div class=\"kbt-faq-a\">NKRO — возможность одновременно регистрировать любое количество нажатых клавиш. Критично для игроков, исполняющих сложные комбинации.</div></div><div class=\"kbt-faq-item\"><div class=\"kbt-faq-q\">Как выбрать форм-фактор клавиатуры?<span class=\"kbt-faq-icon\">+</span></div><div class=\"kbt-faq-a\">100% — максимум функций с нумпадом. TKL — без нумпада, компактнее. 75% — с F-рядом без нумпада. 65% — без F-ряда со стрелками. 60% — самая компактная.</div></div><div class=\"kbt-faq-item\"><div class=\"kbt-faq-q\">Механика vs мембрана?<span class=\"kbt-faq-icon\">+</span></div><div class=\"kbt-faq-a\">Механические свитчи долговечнее (50-100 млн нажатий), дают тактильный отклик. Мембранные тише и дешевле, но быстрее изнашиваются.</div></div></div></div>"}});}},{})}),t.jsx(Qt,{path:"/sitemap",element:t.jsx(Bj,{categories:m,products:c,pages:U,navigate:Pe})}),t.jsx(Qt,{path:"/register",element:t.jsx(Hx,{onAdminLogin:$t,onUserLogin:Kt,navigate:Pe,logoImage:W,initialMode:"register"})}),t.jsx(Qt,{path:"/dashboard",element:Ht?t.jsx(Ij,{user:Ht,onLogout:He,navigate:Pe,statuses:B.orderStatuses}):t.jsx(kx,{to:"/login"})}),t.jsx(Qt,{path:"/admin",element:Oe?t.jsx(Jj,{seo:u,onUpdateSeo:f,catalogSeo:x,onUpdateCatalogSeo:N,heroSlides:b,onUpdateHeroSlides:C,categories:m,onUpdateCategories:y,products:c,onUpdateProducts:h,navLinks:g,onUpdateNavLinks:O,marketplaces:E,onUpdateMarketplaces:_,marketplacesContent:k,onUpdateMarketplacesContent:R,reviews:D,onUpdateReviews:te,logoImage:W,onLogoImageChange:$,footerColumns:H,onUpdateFooterColumns:J,socialLinks:Y,onUpdateSocialLinks:G,pages:U,onUpdatePages:q,carouselSettings:P,onUpdateCarouselSettings:pe,internalShopSett
3044ings:B,onUpdateInternalShopSettings:z,supportSettings:v,onUpdateSupportSettings:T,tickerSettings:A,onUpdateTickerSettings:K,onResetDefaults:bt,onExportConfig:dt,onImportConfig:Lt,navigate:Pe,lastSaved:new Date().toISOString(),admins:w,onUpdateAdmins:V,currentUserEmail:gt}):t.jsx(kx,{to:"/login"})}),t.jsx(Qt,{path:"*",element:t.jsx(Gj,{navigate:Pe})})]})]}),!vl&&!Ta&&t.jsx(ej,{logoImage:W,columns:H,socialLinks:Y,navigate:Pe,legalInfo:B.legalInfo}),t.jsx(tj,{isOpen:Ge,onClose:()=>it(!1),cart:le,onRemoveItem:De,onUpdateQuantity:ye,navigate:Pe,onCheckout:Me}),t.jsx(aj,{isOpen:Ua,onClose:()=>ce(!1),cart:le,onClearCart:et,settings:B,currentUser:Ht,logoImage:W}),t.jsx(Vj,{isOpen:ve,onClose:()=>be(!1),favorites:ge,onToggleFavorite:tt,onAddToCart:se,enableSales:B.enableSales,compareList:Ne,onToggleCompare:st,navigate:Pe}),!Ta&&t.jsx(Hj,{navigate:Pe})]})},Ip=document.getElementById("root");if(!Ip)throw new Error("Could not find root element to mount to");const eN=db.createRoot(Ip);eN.render(t.jsx(oo.StrictMode,{children:t.jsx(x1,{children:t.jsx(Fj,{})})}));
3045

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.