const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["scripts/index-bqTJxXIQ.js","scripts/SEO-B6LzdD3v.js","scripts/index-BEofbPOm.js","scripts/index-BlaGISMn.js","scripts/index-DEyRPDM4.js","scripts/index-Yoys0ED6.js","scripts/index-CFo61ZOX.js","scripts/index-C45aXi7e.js","scripts/index-a-zEerQ5.js","scripts/NoIndexPage-CDwv2jWC.js","scripts/ProgressBar-BJm05y0s.js","scripts/BreadcrumbNav-Baol4sjJ.js","scripts/Skeleton-Bla1h6Gv.js","scripts/resumeFile-DEuJePPD.js","scripts/share_icon-dark-Bt3Q26dr.js","scripts/arrow_icon-DkQxp1Jk.js","scripts/plus_icon-BKKm8zYx.js","scripts/arrow-right_icon-C84xKQ9u.js","scripts/file_icon-D84q2hDr.js","scripts/dots_icon-Bbm6lwGj.js","scripts/ErrorTooltip-ZhfOi-K4.js","scripts/inputRadio.module-qMq2I7Bo.js","scripts/index-DMgJjzHv.js","scripts/useEditSkills-DPsBGS8O.js","scripts/useEditCharacteristicsForm-Cka-xLms.js","scripts/useEditContactsForm-AaS5iDOy.js","scripts/useEditExperience-BPEaCnW4.js","scripts/v4-CtRu48qb.js","scripts/useEditEducation-DnJQu3O3.js","scripts/useEditCourses-LN1O9Ud6.js","scripts/useEditPortfolio-Cwhj2579.js","scripts/useEditGoals-DYMz6tPo.js","scripts/bin_icon-uZ1ZbKqO.js","scripts/SuccessTooltip-MhtViVRt.js","scripts/ModalAlert-DZm3l20r.js","scripts/index-6NWs-IZ0.js","scripts/ToggleButton-BLIWtcZi.js","scripts/Notification-C0b-jxWw.js","scripts/index-BGXx7cGx.js","scripts/SearchBar-DNqtkUSp.js","scripts/VacancyItem-Da_T1WyI.js","scripts/CompatibilityBadge-BfsVL13X.js","scripts/verify_icon-BzYXQFKk.js","scripts/HoverHint-Cbuiv5Uh.js","scripts/CopyInviteLinkButton-DzbFwmxP.js","scripts/VacancyItemSkeleton-D2ar7o5y.js","scripts/Checkbox-7l3QgjgU.js","scripts/VacancyFilter-CWfAohcb.js","scripts/ListLoader-B2o0Ym7G.js","scripts/formatters-Gtk2vgN0.js","scripts/sort_icon-BgLzE-Ic.js","scripts/InputRadio-BHEMpP-w.js","scripts/index-DaIedgN5.js","scripts/media-DBiadniH.js","scripts/DismissibleCard-BfEjPtJm.js","scripts/ModerateCompanyModal-RSYYplbx.js","scripts/checkbox_icon-Cy-DWyy5.js","scripts/edit_icon-BenW_dpq.js","scripts/sanitizeHtml-DQk7e-Ft.js","scripts/close_icon-white-BxOV8PmD.js","scripts/VideoPlayer-CbEhmaK5.js","scripts/industryPath-C8Z3_Eww.js","scripts/index-DgdndNyQ.js","scripts/fileOpener-C2Y6Sp4S.js","scripts/testReport-Cf04d4FY.js","scripts/file_icon-black-BcTz4NAV.js","scripts/archive_icon-DyEq4ZYA.js","scripts/Callout-5V78EAzH.js","scripts/VacancyDetails-BS8ozI0i.js","scripts/vacancyDetails-CmHZUaYk.js","scripts/VacancyDetailsEmployer-DMiANpGp.js","scripts/CompanyDetails-Dthy5qod.js","scripts/CompanyPreview-CMwM7HnH.js","scripts/VacancyForm-C2fwNZyb.js","scripts/VideoUploadBox-C6K4pAwc.js","scripts/TextLink_icon-fVWMoLQX.js","scripts/RequiredAsterisk-C3Yi9RK2.js","scripts/FieldError-Cj2Gctpz.js","scripts/InfoTooltip-D8MMPZWL.js","scripts/useTagMerge-DvUVdKQI.js","scripts/Textarea-CR9Q1XYj.js","scripts/SaveChangesAlert-B6pIluIL.js","scripts/VacancyPreview-CoHUBkMh.js","scripts/index-BpYj05wG.js","scripts/checkmark_icon-JPntx8zD.js","scripts/Candidates-BikP8nUY.js","scripts/phone_icon-cne52Ceb.js","scripts/more_icon-BdBYrFEd.js","scripts/checkbox_icon-black-BLb6d5C3.js","scripts/NoteInput-B13_2IMP.js","scripts/RejectCandidateModal-C6YTqHDW.js","scripts/CandidateDetails-BdKvZt-v.js","scripts/index-Bl5JorVH.js","scripts/selectors-BzGTQ3YA.js","scripts/arrow_icon-right-black-C443jFLv.js","scripts/blogPage.module-Z6Zqc-C1.js","scripts/skills_icon-DNdLw3P0.js","scripts/BlogFeed-D9UajE5E.js","scripts/share_icon-DjRp4IpP.js","scripts/timer_icon-BN-Yr58j.js","scripts/index-DBTOLCso.js"])))=>i.map(i=>d[i]);
var kg=Object.defineProperty;var bg=(r,t,a)=>t in r?kg(r,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):r[t]=a;var F=(r,t,a)=>bg(r,typeof t!="symbol"?t+"":t,a);function Ig(r,t){for(var a=0;a<t.length;a++){const i=t[a];if(typeof i!="string"&&!Array.isArray(i)){for(const s in i)if(s!=="default"&&!(s in r)){const c=Object.getOwnPropertyDescriptor(i,s);c&&Object.defineProperty(r,s,c.get?c:{enumerable:!0,get:()=>i[s]})}}}return Object.freeze(Object.defineProperty(r,Symbol.toStringTag,{value:"Module"}))}(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))i(s);new MutationObserver(s=>{for(const c of s)if(c.type==="childList")for(const u of c.addedNodes)u.tagName==="LINK"&&u.rel==="modulepreload"&&i(u)}).observe(document,{childList:!0,subtree:!0});function a(s){const c={};return s.integrity&&(c.integrity=s.integrity),s.referrerPolicy&&(c.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?c.credentials="include":s.crossOrigin==="anonymous"?c.credentials="omit":c.credentials="same-origin",c}function i(s){if(s.ep)return;s.ep=!0;const c=a(s);fetch(s.href,c)}})();function Eo(r){return r&&r.__esModule&&Object.prototype.hasOwnProperty.call(r,"default")?r.default:r}var lu={exports:{}},li={},cu={exports:{}},De={};/**
* @license React
* react.production.min.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/var hh;function Tg(){if(hh)return De;hh=1;var r=Symbol.for("react.element"),t=Symbol.for("react.portal"),a=Symbol.for("react.fragment"),i=Symbol.for("react.strict_mode"),s=Symbol.for("react.profiler"),c=Symbol.for("react.provider"),u=Symbol.for("react.context"),f=Symbol.for("react.forward_ref"),h=Symbol.for("react.suspense"),m=Symbol.for("react.memo"),y=Symbol.for("react.lazy"),w=Symbol.iterator;function v(A){return A===null||typeof A!="object"?null:(A=w&&A[w]||A["@@iterator"],typeof A=="function"?A:null)}var x={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},E=Object.assign,S={};function L(A,V,J){this.props=A,this.context=V,this.refs=S,this.updater=J||x}L.prototype.isReactComponent={},L.prototype.setState=function(A,V){if(typeof A!="object"&&typeof A!="function"&&A!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,A,V,"setState")},L.prototype.forceUpdate=function(A){this.updater.enqueueForceUpdate(this,A,"forceUpdate")};function M(){}M.prototype=L.prototype;function N(A,V,J){this.props=A,this.context=V,this.refs=S,this.updater=J||x}var B=N.prototype=new M;B.constructor=N,E(B,L.prototype),B.isPureReactComponent=!0;var U=Array.isArray,P=Object.prototype.hasOwnProperty,H={current:null},k={key:!0,ref:!0,__self:!0,__source:!0};function Q(A,V,J){var ae,te={},oe=null,Ee=null;if(V!=null)for(ae in V.ref!==void 0&&(Ee=V.ref),V.key!==void 0&&(oe=""+V.key),V)P.call(V,ae)&&!k.hasOwnProperty(ae)&&(te[ae]=V[ae]);var Ie=arguments.length-2;if(Ie===1)te.children=J;else if(1<Ie){for(var Be=Array(Ie),gt=0;gt<Ie;gt++)Be[gt]=arguments[gt+2];te.children=Be}if(A&&A.defaultProps)for(ae in Ie=A.defaultProps,Ie)te[ae]===void 0&&(te[ae]=Ie[ae]);return{$$typeof:r,type:A,key:oe,ref:Ee,props:te,_owner:H.current}}function X(A,V){return{$$typeof:r,type:A.type,key:V,ref:A.ref,props:A.props,_owner:A._owner}}function ue(A){return typeof A=="object"&&A!==null&&A.$$typeof===r}function xe(A){var V={"=":"=0",":":"=2"};return"$"+A.replace(/[=:]/g,function(J){return V[J]})}var Re=/\/+/g;function Ue(A,V){return typeof A=="object"&&A!==null&&A.key!=null?xe(""+A.key):V.toString(36)}function ve(A,V,J,ae,te){var oe=typeof A;(oe==="undefined"||oe==="boolean")&&(A=null);var Ee=!1;if(A===null)Ee=!0;else switch(oe){case"string":case"number":Ee=!0;break;case"object":switch(A.$$typeof){case r:case t:Ee=!0}}if(Ee)return Ee=A,te=te(Ee),A=ae===""?"."+Ue(Ee,0):ae,U(te)?(J="",A!=null&&(J=A.replace(Re,"$&/")+"/"),ve(te,V,J,"",function(gt){return gt})):te!=null&&(ue(te)&&(te=X(te,J+(!te.key||Ee&&Ee.key===te.key?"":(""+te.key).replace(Re,"$&/")+"/")+A)),V.push(te)),1;if(Ee=0,ae=ae===""?".":ae+":",U(A))for(var Ie=0;Ie<A.length;Ie++){oe=A[Ie];var Be=ae+Ue(oe,Ie);Ee+=ve(oe,V,J,Be,te)}else if(Be=v(A),typeof Be=="function")for(A=Be.call(A),Ie=0;!(oe=A.next()).done;)oe=oe.value,Be=ae+Ue(oe,Ie++),Ee+=ve(oe,V,J,Be,te);else if(oe==="object")throw V=String(A),Error("Objects are not valid as a React child (found: "+(V==="[object Object]"?"object with keys {"+Object.keys(A).join(", ")+"}":V)+"). If you meant to render a collection of children, use an array instead.");return Ee}function Me(A,V,J){if(A==null)return A;var ae=[],te=0;return ve(A,ae,"","",function(oe){return V.call(J,oe,te++)}),ae}function ke(A){if(A._status===-1){var V=A._result;V=V(),V.then(function(J){(A._status===0||A._status===-1)&&(A._status=1,A._result=J)},function(J){(A._status===0||A._status===-1)&&(A._status=2,A._result=J)}),A._status===-1&&(A._status=0,A._result=V)}if(A._status===1)return A._result.default;throw A._result}var Se={current:null},q={transition:null},ie={ReactCurrentDispatcher:Se,ReactCurrentBatchConfig:q,ReactCurrentOwner:H};function ee(){throw Error("act(...) is not supported in production builds of React.")}return De.Children={map:Me,forEach:function(A,V,J){Me(A,function(){V.apply(this,arguments)},J)},count:function(A){var V=0;return Me(A,function(){V++}),V},toArray:function(A){return Me(A,function(V){return V})||[]},only:function(A){if(!ue(A))throw Error("React.Children.only expected to receive a single React element child.");return A}},De.Component=L,De.Fragment=a,De.Profiler=s,De.PureComponent=N,De.StrictMode=i,De.Suspense=h,De.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=ie,De.act=ee,De.cloneElement=function(A,V,J){if(A==null)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+A+".");var ae=E({},A.props),te=A.key,oe=A.ref,Ee=A._owner;if(V!=null){if(V.ref!==void 0&&(oe=V.ref,Ee=H.current),V.key!==void 0&&(te=""+V.key),A.type&&A.type.defaultProps)var Ie=A.type.defaultProps;for(Be in V)P.call(V,Be)&&!k.hasOwnProperty(Be)&&(ae[Be]=V[Be]===void 0&&Ie!==void 0?Ie[Be]:V[Be])}var Be=arguments.length-2;if(Be===1)ae.children=J;else if(1<Be){Ie=Array(Be);for(var gt=0;gt<Be;gt++)Ie[gt]=arguments[gt+2];ae.children=Ie}return{$$typeof:r,type:A.type,key:te,ref:oe,props:ae,_owner:Ee}},De.createContext=function(A){return A={$$typeof:u,_currentValue:A,_currentValue2:A,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null},A.Provider={$$typeof:c,_context:A},A.Consumer=A},De.createElement=Q,De.createFactory=function(A){var V=Q.bind(null,A);return V.type=A,V},De.createRef=function(){return{current:null}},De.forwardRef=function(A){return{$$typeof:f,render:A}},De.isValidElement=ue,De.lazy=function(A){return{$$typeof:y,_payload:{_status:-1,_result:A},_init:ke}},De.memo=function(A,V){return{$$typeof:m,type:A,compare:V===void 0?null:V}},De.startTransition=function(A){var V=q.transition;q.transition={};try{A()}finally{q.transition=V}},De.unstable_act=ee,De.useCallback=function(A,V){return Se.current.useCallback(A,V)},De.useContext=function(A){return Se.current.useContext(A)},De.useDebugValue=function(){},De.useDeferredValue=function(A){return Se.current.useDeferredValue(A)},De.useEffect=function(A,V){return Se.current.useEffect(A,V)},De.useId=function(){return Se.current.useId()},De.useImperativeHandle=function(A,V,J){return Se.current.useImperativeHandle(A,V,J)},De.useInsertionEffect=function(A,V){return Se.current.useInsertionEffect(A,V)},De.useLayoutEffect=function(A,V){return Se.current.useLayoutEffect(A,V)},De.useMemo=function(A,V){return Se.current.useMemo(A,V)},De.useReducer=function(A,V,J){return Se.current.useReducer(A,V,J)},De.useRef=function(A){return Se.current.useRef(A)},De.useState=function(A){return Se.current.useState(A)},De.useSyncExternalStore=function(A,V,J){return Se.current.useSyncExternalStore(A,V,J)},De.useTransition=function(){return Se.current.useTransition()},De.version="18.3.1",De}var mh;function dl(){return mh||(mh=1,cu.exports=Tg()),cu.exports}/**
* @license React
* react-jsx-runtime.production.min.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/var gh;function Pg(){if(gh)return li;gh=1;var r=dl(),t=Symbol.for("react.element"),a=Symbol.for("react.fragment"),i=Object.prototype.hasOwnProperty,s=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,c={key:!0,ref:!0,__self:!0,__source:!0};function u(f,h,m){var y,w={},v=null,x=null;m!==void 0&&(v=""+m),h.key!==void 0&&(v=""+h.key),h.ref!==void 0&&(x=h.ref);for(y in h)i.call(h,y)&&!c.hasOwnProperty(y)&&(w[y]=h[y]);if(f&&f.defaultProps)for(y in h=f.defaultProps,h)w[y]===void 0&&(w[y]=h[y]);return{$$typeof:t,type:f,key:v,ref:x,props:w,_owner:s.current}}return li.Fragment=a,li.jsx=u,li.jsxs=u,li}var yh;function Rg(){return yh||(yh=1,lu.exports=Pg()),lu.exports}var g=Rg(),_=dl();const on=Eo(_),Ag=Ig({__proto__:null,default:on},[_]);var Os={},uu={exports:{}},ar={},du={exports:{}},fu={};/**
* @license React
* scheduler.production.min.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/var vh;function Ng(){return vh||(vh=1,function(r){function t(q,ie){var ee=q.length;q.push(ie);e:for(;0<ee;){var A=ee-1>>>1,V=q[A];if(0<s(V,ie))q[A]=ie,q[ee]=V,ee=A;else break e}}function a(q){return q.length===0?null:q[0]}function i(q){if(q.length===0)return null;var ie=q[0],ee=q.pop();if(ee!==ie){q[0]=ee;e:for(var A=0,V=q.length,J=V>>>1;A<J;){var ae=2*(A+1)-1,te=q[ae],oe=ae+1,Ee=q[oe];if(0>s(te,ee))oe<V&&0>s(Ee,te)?(q[A]=Ee,q[oe]=ee,A=oe):(q[A]=te,q[ae]=ee,A=ae);else if(oe<V&&0>s(Ee,ee))q[A]=Ee,q[oe]=ee,A=oe;else break e}}return ie}function s(q,ie){var ee=q.sortIndex-ie.sortIndex;return ee!==0?ee:q.id-ie.id}if(typeof performance=="object"&&typeof performance.now=="function"){var c=performance;r.unstable_now=function(){return c.now()}}else{var u=Date,f=u.now();r.unstable_now=function(){return u.now()-f}}var h=[],m=[],y=1,w=null,v=3,x=!1,E=!1,S=!1,L=typeof setTimeout=="function"?setTimeout:null,M=typeof clearTimeout=="function"?clearTimeout:null,N=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function B(q){for(var ie=a(m);ie!==null;){if(ie.callback===null)i(m);else if(ie.startTime<=q)i(m),ie.sortIndex=ie.expirationTime,t(h,ie);else break;ie=a(m)}}function U(q){if(S=!1,B(q),!E)if(a(h)!==null)E=!0,ke(P);else{var ie=a(m);ie!==null&&Se(U,ie.startTime-q)}}function P(q,ie){E=!1,S&&(S=!1,M(Q),Q=-1),x=!0;var ee=v;try{for(B(ie),w=a(h);w!==null&&(!(w.expirationTime>ie)||q&&!xe());){var A=w.callback;if(typeof A=="function"){w.callback=null,v=w.priorityLevel;var V=A(w.expirationTime<=ie);ie=r.unstable_now(),typeof V=="function"?w.callback=V:w===a(h)&&i(h),B(ie)}else i(h);w=a(h)}if(w!==null)var J=!0;else{var ae=a(m);ae!==null&&Se(U,ae.startTime-ie),J=!1}return J}finally{w=null,v=ee,x=!1}}var H=!1,k=null,Q=-1,X=5,ue=-1;function xe(){return!(r.unstable_now()-ue<X)}function Re(){if(k!==null){var q=r.unstable_now();ue=q;var ie=!0;try{ie=k(!0,q)}finally{ie?Ue():(H=!1,k=null)}}else H=!1}var Ue;if(typeof N=="function")Ue=function(){N(Re)};else if(typeof MessageChannel<"u"){var ve=new MessageChannel,Me=ve.port2;ve.port1.onmessage=Re,Ue=function(){Me.postMessage(null)}}else Ue=function(){L(Re,0)};function ke(q){k=q,H||(H=!0,Ue())}function Se(q,ie){Q=L(function(){q(r.unstable_now())},ie)}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(q){q.callback=null},r.unstable_continueExecution=function(){E||x||(E=!0,ke(P))},r.unstable_forceFrameRate=function(q){0>q||125<q?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):X=0<q?Math.floor(1e3/q):5},r.unstable_getCurrentPriorityLevel=function(){return v},r.unstable_getFirstCallbackNode=function(){return a(h)},r.unstable_next=function(q){switch(v){case 1:case 2:case 3:var ie=3;break;default:ie=v}var ee=v;v=ie;try{return q()}finally{v=ee}},r.unstable_pauseExecution=function(){},r.unstable_requestPaint=function(){},r.unstable_runWithPriority=function(q,ie){switch(q){case 1:case 2:case 3:case 4:case 5:break;default:q=3}var ee=v;v=q;try{return ie()}finally{v=ee}},r.unstable_scheduleCallback=function(q,ie,ee){var A=r.unstable_now();switch(typeof ee=="object"&&ee!==null?(ee=ee.delay,ee=typeof ee=="number"&&0<ee?A+ee:A):ee=A,q){case 1:var V=-1;break;case 2:V=250;break;case 5:V=1073741823;break;case 4:V=1e4;break;default:V=5e3}return V=ee+V,q={id:y++,callback:ie,priorityLevel:q,startTime:ee,expirationTime:V,sortIndex:-1},ee>A?(q.sortIndex=ee,t(m,q),a(h)===null&&q===a(m)&&(S?(M(Q),Q=-1):S=!0,Se(U,ee-A))):(q.sortIndex=V,t(h,q),E||x||(E=!0,ke(P))),q},r.unstable_shouldYield=xe,r.unstable_wrapCallback=function(q){var ie=v;return function(){var ee=v;v=ie;try{return q.apply(this,arguments)}finally{v=ee}}}}(fu)),fu}var wh;function Lg(){return wh||(wh=1,du.exports=Ng()),du.exports}/**
* @license React
* react-dom.production.min.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/var Ch;function jg(){if(Ch)return ar;Ch=1;var r=dl(),t=Lg();function a(e){for(var n="https://reactjs.org/docs/error-decoder.html?invariant="+e,o=1;o<arguments.length;o++)n+="&args[]="+encodeURIComponent(arguments[o]);return"Minified React error #"+e+"; visit "+n+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var i=new Set,s={};function c(e,n){u(e,n),u(e+"Capture",n)}function u(e,n){for(s[e]=n,e=0;e<n.length;e++)i.add(n[e])}var f=!(typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),h=Object.prototype.hasOwnProperty,m=/^[: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]*$/,y={},w={};function v(e){return h.call(w,e)?!0:h.call(y,e)?!1:m.test(e)?w[e]=!0:(y[e]=!0,!1)}function x(e,n,o,l){if(o!==null&&o.type===0)return!1;switch(typeof n){case"function":case"symbol":return!0;case"boolean":return l?!1:o!==null?!o.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function E(e,n,o,l){if(n===null||typeof n>"u"||x(e,n,o,l))return!0;if(l)return!1;if(o!==null)switch(o.type){case 3:return!n;case 4:return n===!1;case 5:return isNaN(n);case 6:return isNaN(n)||1>n}return!1}function S(e,n,o,l,d,p,C){this.acceptsBooleans=n===2||n===3||n===4,this.attributeName=l,this.attributeNamespace=d,this.mustUseProperty=o,this.propertyName=e,this.type=n,this.sanitizeURL=p,this.removeEmptyString=C}var L={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){L[e]=new S(e,0,!1,e,null,!1,!1)}),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var n=e[0];L[n]=new S(n,1,!1,e[1],null,!1,!1)}),["contentEditable","draggable","spellCheck","value"].forEach(function(e){L[e]=new S(e,2,!1,e.toLowerCase(),null,!1,!1)}),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){L[e]=new S(e,2,!1,e,null,!1,!1)}),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){L[e]=new S(e,3,!1,e.toLowerCase(),null,!1,!1)}),["checked","multiple","muted","selected"].forEach(function(e){L[e]=new S(e,3,!0,e,null,!1,!1)}),["capture","download"].forEach(function(e){L[e]=new S(e,4,!1,e,null,!1,!1)}),["cols","rows","size","span"].forEach(function(e){L[e]=new S(e,6,!1,e,null,!1,!1)}),["rowSpan","start"].forEach(function(e){L[e]=new S(e,5,!1,e.toLowerCase(),null,!1,!1)});var M=/[\-:]([a-z])/g;function N(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var n=e.replace(M,N);L[n]=new S(n,1,!1,e,null,!1,!1)}),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var n=e.replace(M,N);L[n]=new S(n,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)}),["xml:base","xml:lang","xml:space"].forEach(function(e){var n=e.replace(M,N);L[n]=new S(n,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)}),["tabIndex","crossOrigin"].forEach(function(e){L[e]=new S(e,1,!1,e.toLowerCase(),null,!1,!1)}),L.xlinkHref=new S("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach(function(e){L[e]=new S(e,1,!1,e.toLowerCase(),null,!0,!0)});function B(e,n,o,l){var d=L.hasOwnProperty(n)?L[n]:null;(d!==null?d.type!==0:l||!(2<n.length)||n[0]!=="o"&&n[0]!=="O"||n[1]!=="n"&&n[1]!=="N")&&(E(n,o,d,l)&&(o=null),l||d===null?v(n)&&(o===null?e.removeAttribute(n):e.setAttribute(n,""+o)):d.mustUseProperty?e[d.propertyName]=o===null?d.type===3?!1:"":o:(n=d.attributeName,l=d.attributeNamespace,o===null?e.removeAttribute(n):(d=d.type,o=d===3||d===4&&o===!0?"":""+o,l?e.setAttributeNS(l,n,o):e.setAttribute(n,o))))}var U=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,P=Symbol.for("react.element"),H=Symbol.for("react.portal"),k=Symbol.for("react.fragment"),Q=Symbol.for("react.strict_mode"),X=Symbol.for("react.profiler"),ue=Symbol.for("react.provider"),xe=Symbol.for("react.context"),Re=Symbol.for("react.forward_ref"),Ue=Symbol.for("react.suspense"),ve=Symbol.for("react.suspense_list"),Me=Symbol.for("react.memo"),ke=Symbol.for("react.lazy"),Se=Symbol.for("react.offscreen"),q=Symbol.iterator;function ie(e){return e===null||typeof e!="object"?null:(e=q&&e[q]||e["@@iterator"],typeof e=="function"?e:null)}var ee=Object.assign,A;function V(e){if(A===void 0)try{throw Error()}catch(o){var n=o.stack.trim().match(/\n( *(at )?)/);A=n&&n[1]||""}return`
`+A+e}var J=!1;function ae(e,n){if(!e||J)return"";J=!0;var o=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(n)if(n=function(){throw Error()},Object.defineProperty(n.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(n,[])}catch(z){var l=z}Reflect.construct(e,[],n)}else{try{n.call()}catch(z){l=z}e.call(n.prototype)}else{try{throw Error()}catch(z){l=z}e()}}catch(z){if(z&&l&&typeof z.stack=="string"){for(var d=z.stack.split(`
`),p=l.stack.split(`
`),C=d.length-1,b=p.length-1;1<=C&&0<=b&&d[C]!==p[b];)b--;for(;1<=C&&0<=b;C--,b--)if(d[C]!==p[b]){if(C!==1||b!==1)do if(C--,b--,0>b||d[C]!==p[b]){var T=`
`+d[C].replace(" at new "," at ");return e.displayName&&T.includes("<anonymous>")&&(T=T.replace("<anonymous>",e.displayName)),T}while(1<=C&&0<=b);break}}}finally{J=!1,Error.prepareStackTrace=o}return(e=e?e.displayName||e.name:"")?V(e):""}function te(e){switch(e.tag){case 5:return V(e.type);case 16:return V("Lazy");case 13:return V("Suspense");case 19:return V("SuspenseList");case 0:case 2:case 15:return e=ae(e.type,!1),e;case 11:return e=ae(e.type.render,!1),e;case 1:return e=ae(e.type,!0),e;default:return""}}function oe(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case k:return"Fragment";case H:return"Portal";case X:return"Profiler";case Q:return"StrictMode";case Ue:return"Suspense";case ve:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case xe:return(e.displayName||"Context")+".Consumer";case ue:return(e._context.displayName||"Context")+".Provider";case Re:var n=e.render;return e=e.displayName,e||(e=n.displayName||n.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case Me:return n=e.displayName||null,n!==null?n:oe(e.type)||"Memo";case ke:n=e._payload,e=e._init;try{return oe(e(n))}catch{}}return null}function Ee(e){var n=e.type;switch(e.tag){case 24:return"Cache";case 9:return(n.displayName||"Context")+".Consumer";case 10:return(n._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=n.render,e=e.displayName||e.name||"",n.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return n;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return oe(n);case 8:return n===Q?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof n=="function")return n.displayName||n.name||null;if(typeof n=="string")return n}return null}function Ie(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function Be(e){var n=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(n==="checkbox"||n==="radio")}function gt(e){var n=Be(e)?"checked":"value",o=Object.getOwnPropertyDescriptor(e.constructor.prototype,n),l=""+e[n];if(!e.hasOwnProperty(n)&&typeof o<"u"&&typeof o.get=="function"&&typeof o.set=="function"){var d=o.get,p=o.set;return Object.defineProperty(e,n,{configurable:!0,get:function(){return d.call(this)},set:function(C){l=""+C,p.call(this,C)}}),Object.defineProperty(e,n,{enumerable:o.enumerable}),{getValue:function(){return l},setValue:function(C){l=""+C},stopTracking:function(){e._valueTracker=null,delete e[n]}}}}function Mr(e){e._valueTracker||(e._valueTracker=gt(e))}function Oe(e){if(!e)return!1;var n=e._valueTracker;if(!n)return!0;var o=n.getValue(),l="";return e&&(l=Be(e)?e.checked?"true":"false":e.value),e=l,e!==o?(n.setValue(e),!0):!1}function dt(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}}function Yr(e,n){var o=n.checked;return ee({},n,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:o??e._wrapperState.initialChecked})}function Ne(e,n){var o=n.defaultValue==null?"":n.defaultValue,l=n.checked!=null?n.checked:n.defaultChecked;o=Ie(n.value!=null?n.value:o),e._wrapperState={initialChecked:l,initialValue:o,controlled:n.type==="checkbox"||n.type==="radio"?n.checked!=null:n.value!=null}}function Ge(e,n){n=n.checked,n!=null&&B(e,"checked",n,!1)}function jt(e,n){Ge(e,n);var o=Ie(n.value),l=n.type;if(o!=null)l==="number"?(o===0&&e.value===""||e.value!=o)&&(e.value=""+o):e.value!==""+o&&(e.value=""+o);else if(l==="submit"||l==="reset"){e.removeAttribute("value");return}n.hasOwnProperty("value")?ft(e,n.type,o):n.hasOwnProperty("defaultValue")&&ft(e,n.type,Ie(n.defaultValue)),n.checked==null&&n.defaultChecked!=null&&(e.defaultChecked=!!n.defaultChecked)}function Mt(e,n,o){if(n.hasOwnProperty("value")||n.hasOwnProperty("defaultValue")){var l=n.type;if(!(l!=="submit"&&l!=="reset"||n.value!==void 0&&n.value!==null))return;n=""+e._wrapperState.initialValue,o||n===e.value||(e.value=n),e.defaultValue=n}o=e.name,o!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,o!==""&&(e.name=o)}function ft(e,n,o){(n!=="number"||dt(e.ownerDocument)!==e)&&(o==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+o&&(e.defaultValue=""+o))}var Rt=Array.isArray;function ir(e,n,o,l){if(e=e.options,n){n={};for(var d=0;d<o.length;d++)n["$"+o[d]]=!0;for(o=0;o<e.length;o++)d=n.hasOwnProperty("$"+e[o].value),e[o].selected!==d&&(e[o].selected=d),d&&l&&(e[o].defaultSelected=!0)}else{for(o=""+Ie(o),n=null,d=0;d<e.length;d++){if(e[d].value===o){e[d].selected=!0,l&&(e[d].defaultSelected=!0);return}n!==null||e[d].disabled||(n=e[d])}n!==null&&(n.selected=!0)}}function sr(e,n){if(n.dangerouslySetInnerHTML!=null)throw Error(a(91));return ee({},n,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function Qr(e,n){var o=n.value;if(o==null){if(o=n.children,n=n.defaultValue,o!=null){if(n!=null)throw Error(a(92));if(Rt(o)){if(1<o.length)throw Error(a(93));o=o[0]}n=o}n==null&&(n=""),o=n}e._wrapperState={initialValue:Ie(o)}}function it(e,n){var o=Ie(n.value),l=Ie(n.defaultValue);o!=null&&(o=""+o,o!==e.value&&(e.value=o),n.defaultValue==null&&e.defaultValue!==o&&(e.defaultValue=o)),l!=null&&(e.defaultValue=""+l)}function _r(e){var n=e.textContent;n===e._wrapperState.initialValue&&n!==""&&n!==null&&(e.value=n)}function Dr(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function Rn(e,n){return e==null||e==="http://www.w3.org/1999/xhtml"?Dr(n):e==="http://www.w3.org/2000/svg"&&n==="foreignObject"?"http://www.w3.org/1999/xhtml":e}var St,Et=function(e){return typeof MSApp<"u"&&MSApp.execUnsafeLocalFunction?function(n,o,l,d){MSApp.execUnsafeLocalFunction(function(){return e(n,o,l,d)})}:e}(function(e,n){if(e.namespaceURI!=="http://www.w3.org/2000/svg"||"innerHTML"in e)e.innerHTML=n;else{for(St=St||document.createElement("div"),St.innerHTML="<svg>"+n.valueOf().toString()+"</svg>",n=St.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;n.firstChild;)e.appendChild(n.firstChild)}});function Zt(e,n){if(n){var o=e.firstChild;if(o&&o===e.lastChild&&o.nodeType===3){o.nodeValue=n;return}}e.textContent=n}var lr={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},dn=["Webkit","ms","Moz","O"];Object.keys(lr).forEach(function(e){dn.forEach(function(n){n=n+e.charAt(0).toUpperCase()+e.substring(1),lr[n]=lr[e]})});function ji(e,n,o){return n==null||typeof n=="boolean"||n===""?"":o||typeof n!="number"||n===0||lr.hasOwnProperty(e)&&lr[e]?(""+n).trim():n+"px"}function xr(e,n){e=e.style;for(var o in n)if(n.hasOwnProperty(o)){var l=o.indexOf("--")===0,d=ji(o,n[o],l);o==="float"&&(o="cssFloat"),l?e.setProperty(o,d):e[o]=d}}var Mi=ee({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function Fa(e,n){if(n){if(Mi[e]&&(n.children!=null||n.dangerouslySetInnerHTML!=null))throw Error(a(137,e));if(n.dangerouslySetInnerHTML!=null){if(n.children!=null)throw Error(a(60));if(typeof n.dangerouslySetInnerHTML!="object"||!("__html"in n.dangerouslySetInnerHTML))throw Error(a(61))}if(n.style!=null&&typeof n.style!="object")throw Error(a(62))}}function Oa(e,n){if(e.indexOf("-")===-1)return typeof n.is=="string";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 ko=null;function Ua(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var An=null,fn=null,Zr=null;function Di(e){if(e=Ko(e)){if(typeof An!="function")throw Error(a(280));var n=e.stateNode;n&&(n=es(n),An(e.stateNode,e.type,n))}}function bo(e){fn?Zr?Zr.push(e):Zr=[e]:fn=e}function $i(){if(fn){var e=fn,n=Zr;if(Zr=fn=null,Di(e),n)for(e=0;e<n.length;e++)Di(n[e])}}function Io(e,n){return e(n)}function ia(){}var Nn=!1;function To(e,n,o){if(Nn)return e(n,o);Nn=!0;try{return Io(e,n,o)}finally{Nn=!1,(fn!==null||Zr!==null)&&(ia(),$i())}}function sa(e,n){var o=e.stateNode;if(o===null)return null;var l=es(o);if(l===null)return null;o=l[n];e:switch(n){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(l=!l.disabled)||(e=e.type,l=!(e==="button"||e==="input"||e==="select"||e==="textarea")),e=!l;break e;default:e=!1}if(e)return null;if(o&&typeof o!="function")throw Error(a(231,n,typeof o));return o}var Po=!1;if(f)try{var I={};Object.defineProperty(I,"passive",{get:function(){Po=!0}}),window.addEventListener("test",I,I),window.removeEventListener("test",I,I)}catch{Po=!1}function j(e,n,o,l,d,p,C,b,T){var z=Array.prototype.slice.call(arguments,3);try{n.apply(o,z)}catch(Y){this.onError(Y)}}var O=!1,G=null,ne=!1,me=null,we={onError:function(e){O=!0,G=e}};function le(e,n,o,l,d,p,C,b,T){O=!1,G=null,j.apply(we,arguments)}function de(e,n,o,l,d,p,C,b,T){if(le.apply(this,arguments),O){if(O){var z=G;O=!1,G=null}else throw Error(a(198));ne||(ne=!0,me=z)}}function pe(e){var n=e,o=e;if(e.alternate)for(;n.return;)n=n.return;else{e=n;do n=e,(n.flags&4098)!==0&&(o=n.return),e=n.return;while(e)}return n.tag===3?o:null}function Te(e){if(e.tag===13){var n=e.memoizedState;if(n===null&&(e=e.alternate,e!==null&&(n=e.memoizedState)),n!==null)return n.dehydrated}return null}function ye(e){if(pe(e)!==e)throw Error(a(188))}function Ae(e){var n=e.alternate;if(!n){if(n=pe(e),n===null)throw Error(a(188));return n!==e?null:e}for(var o=e,l=n;;){var d=o.return;if(d===null)break;var p=d.alternate;if(p===null){if(l=d.return,l!==null){o=l;continue}break}if(d.child===p.child){for(p=d.child;p;){if(p===o)return ye(d),e;if(p===l)return ye(d),n;p=p.sibling}throw Error(a(188))}if(o.return!==l.return)o=d,l=p;else{for(var C=!1,b=d.child;b;){if(b===o){C=!0,o=d,l=p;break}if(b===l){C=!0,l=d,o=p;break}b=b.sibling}if(!C){for(b=p.child;b;){if(b===o){C=!0,o=p,l=d;break}if(b===l){C=!0,l=p,o=d;break}b=b.sibling}if(!C)throw Error(a(189))}}if(o.alternate!==l)throw Error(a(190))}if(o.tag!==3)throw Error(a(188));return o.stateNode.current===o?e:n}function $e(e){return e=Ae(e),e!==null?yt(e):null}function yt(e){if(e.tag===5||e.tag===6)return e;for(e=e.child;e!==null;){var n=yt(e);if(n!==null)return n;e=e.sibling}return null}var pt=t.unstable_scheduleCallback,kt=t.unstable_cancelCallback,He=t.unstable_shouldYield,Jt=t.unstable_requestPaint,We=t.unstable_now,la=t.unstable_getCurrentPriorityLevel,Sr=t.unstable_ImmediatePriority,cr=t.unstable_UserBlockingPriority,Ln=t.unstable_NormalPriority,ca=t.unstable_LowPriority,Jr=t.unstable_IdlePriority,pn=null,Wt=null;function Fe(e){if(Wt&&typeof Wt.onCommitFiberRoot=="function")try{Wt.onCommitFiberRoot(pn,e,void 0,(e.current.flags&128)===128)}catch{}}var Ye=Math.clz32?Math.clz32:rt,jn=Math.log,hn=Math.LN2;function rt(e){return e>>>=0,e===0?32:31-(jn(e)/hn|0)|0}var mn=64,ua=4194304;function da(e){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: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 e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function Fi(e,n){var o=e.pendingLanes;if(o===0)return 0;var l=0,d=e.suspendedLanes,p=e.pingedLanes,C=o&268435455;if(C!==0){var b=C&~d;b!==0?l=da(b):(p&=C,p!==0&&(l=da(p)))}else C=o&~d,C!==0?l=da(C):p!==0&&(l=da(p));if(l===0)return 0;if(n!==0&&n!==l&&(n&d)===0&&(d=l&-l,p=n&-n,d>=p||d===16&&(p&4194240)!==0))return n;if((l&4)!==0&&(l|=o&16),n=e.entangledLanes,n!==0)for(e=e.entanglements,n&=l;0<n;)o=31-Ye(n),d=1<<o,l|=e[o],n&=~d;return l}function H0(e,n){switch(e){case 1:case 2:case 4:return n+250;case 8:case 16:case 32:case 64: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 n+5e3;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return-1;case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function W0(e,n){for(var o=e.suspendedLanes,l=e.pingedLanes,d=e.expirationTimes,p=e.pendingLanes;0<p;){var C=31-Ye(p),b=1<<C,T=d[C];T===-1?((b&o)===0||(b&l)!==0)&&(d[C]=H0(b,n)):T<=n&&(e.expiredLanes|=b),p&=~b}}function Pl(e){return e=e.pendingLanes&-1073741825,e!==0?e:e&1073741824?1073741824:0}function Hd(){var e=mn;return mn<<=1,(mn&4194240)===0&&(mn=64),e}function Rl(e){for(var n=[],o=0;31>o;o++)n.push(e);return n}function Ro(e,n,o){e.pendingLanes|=n,n!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,n=31-Ye(n),e[n]=o}function q0(e,n){var o=e.pendingLanes&~n;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=n,e.mutableReadLanes&=n,e.entangledLanes&=n,n=e.entanglements;var l=e.eventTimes;for(e=e.expirationTimes;0<o;){var d=31-Ye(o),p=1<<d;n[d]=0,l[d]=-1,e[d]=-1,o&=~p}}function Al(e,n){var o=e.entangledLanes|=n;for(e=e.entanglements;o;){var l=31-Ye(o),d=1<<l;d&n|e[l]&n&&(e[l]|=n),o&=~d}}var qe=0;function Wd(e){return e&=-e,1<e?4<e?(e&268435455)!==0?16:536870912:4:1}var qd,Nl,Kd,Gd,Yd,Ll=!1,Oi=[],Mn=null,Dn=null,$n=null,Ao=new Map,No=new Map,Fn=[],K0="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 submit".split(" ");function Qd(e,n){switch(e){case"focusin":case"focusout":Mn=null;break;case"dragenter":case"dragleave":Dn=null;break;case"mouseover":case"mouseout":$n=null;break;case"pointerover":case"pointerout":Ao.delete(n.pointerId);break;case"gotpointercapture":case"lostpointercapture":No.delete(n.pointerId)}}function Lo(e,n,o,l,d,p){return e===null||e.nativeEvent!==p?(e={blockedOn:n,domEventName:o,eventSystemFlags:l,nativeEvent:p,targetContainers:[d]},n!==null&&(n=Ko(n),n!==null&&Nl(n)),e):(e.eventSystemFlags|=l,n=e.targetContainers,d!==null&&n.indexOf(d)===-1&&n.push(d),e)}function G0(e,n,o,l,d){switch(n){case"focusin":return Mn=Lo(Mn,e,n,o,l,d),!0;case"dragenter":return Dn=Lo(Dn,e,n,o,l,d),!0;case"mouseover":return $n=Lo($n,e,n,o,l,d),!0;case"pointerover":var p=d.pointerId;return Ao.set(p,Lo(Ao.get(p)||null,e,n,o,l,d)),!0;case"gotpointercapture":return p=d.pointerId,No.set(p,Lo(No.get(p)||null,e,n,o,l,d)),!0}return!1}function Zd(e){var n=fa(e.target);if(n!==null){var o=pe(n);if(o!==null){if(n=o.tag,n===13){if(n=Te(o),n!==null){e.blockedOn=n,Yd(e.priority,function(){Kd(o)});return}}else if(n===3&&o.stateNode.current.memoizedState.isDehydrated){e.blockedOn=o.tag===3?o.stateNode.containerInfo:null;return}}}e.blockedOn=null}function Ui(e){if(e.blockedOn!==null)return!1;for(var n=e.targetContainers;0<n.length;){var o=Ml(e.domEventName,e.eventSystemFlags,n[0],e.nativeEvent);if(o===null){o=e.nativeEvent;var l=new o.constructor(o.type,o);ko=l,o.target.dispatchEvent(l),ko=null}else return n=Ko(o),n!==null&&Nl(n),e.blockedOn=o,!1;n.shift()}return!0}function Jd(e,n,o){Ui(e)&&o.delete(n)}function Y0(){Ll=!1,Mn!==null&&Ui(Mn)&&(Mn=null),Dn!==null&&Ui(Dn)&&(Dn=null),$n!==null&&Ui($n)&&($n=null),Ao.forEach(Jd),No.forEach(Jd)}function jo(e,n){e.blockedOn===n&&(e.blockedOn=null,Ll||(Ll=!0,t.unstable_scheduleCallback(t.unstable_NormalPriority,Y0)))}function Mo(e){function n(d){return jo(d,e)}if(0<Oi.length){jo(Oi[0],e);for(var o=1;o<Oi.length;o++){var l=Oi[o];l.blockedOn===e&&(l.blockedOn=null)}}for(Mn!==null&&jo(Mn,e),Dn!==null&&jo(Dn,e),$n!==null&&jo($n,e),Ao.forEach(n),No.forEach(n),o=0;o<Fn.length;o++)l=Fn[o],l.blockedOn===e&&(l.blockedOn=null);for(;0<Fn.length&&(o=Fn[0],o.blockedOn===null);)Zd(o),o.blockedOn===null&&Fn.shift()}var za=U.ReactCurrentBatchConfig,zi=!0;function Q0(e,n,o,l){var d=qe,p=za.transition;za.transition=null;try{qe=1,jl(e,n,o,l)}finally{qe=d,za.transition=p}}function Z0(e,n,o,l){var d=qe,p=za.transition;za.transition=null;try{qe=4,jl(e,n,o,l)}finally{qe=d,za.transition=p}}function jl(e,n,o,l){if(zi){var d=Ml(e,n,o,l);if(d===null)Jl(e,n,l,Bi,o),Qd(e,l);else if(G0(d,e,n,o,l))l.stopPropagation();else if(Qd(e,l),n&4&&-1<K0.indexOf(e)){for(;d!==null;){var p=Ko(d);if(p!==null&&qd(p),p=Ml(e,n,o,l),p===null&&Jl(e,n,l,Bi,o),p===d)break;d=p}d!==null&&l.stopPropagation()}else Jl(e,n,l,null,o)}}var Bi=null;function Ml(e,n,o,l){if(Bi=null,e=Ua(l),e=fa(e),e!==null)if(n=pe(e),n===null)e=null;else if(o=n.tag,o===13){if(e=Te(n),e!==null)return e;e=null}else if(o===3){if(n.stateNode.current.memoizedState.isDehydrated)return n.tag===3?n.stateNode.containerInfo:null;e=null}else n!==e&&(e=null);return Bi=e,null}function Xd(e){switch(e){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"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 1;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"toggle":case"touchmove":case"wheel":case"mouseenter":case"mouseleave":case"pointerenter":case"pointerleave":return 4;case"message":switch(la()){case Sr:return 1;case cr:return 4;case Ln:case ca:return 16;case Jr:return 536870912;default:return 16}default:return 16}}var On=null,Dl=null,Vi=null;function ef(){if(Vi)return Vi;var e,n=Dl,o=n.length,l,d="value"in On?On.value:On.textContent,p=d.length;for(e=0;e<o&&n[e]===d[e];e++);var C=o-e;for(l=1;l<=C&&n[o-l]===d[p-l];l++);return Vi=d.slice(e,1<l?1-l:void 0)}function Hi(e){var n=e.keyCode;return"charCode"in e?(e=e.charCode,e===0&&n===13&&(e=13)):e=n,e===10&&(e=13),32<=e||e===13?e:0}function Wi(){return!0}function tf(){return!1}function ur(e){function n(o,l,d,p,C){this._reactName=o,this._targetInst=d,this.type=l,this.nativeEvent=p,this.target=C,this.currentTarget=null;for(var b in e)e.hasOwnProperty(b)&&(o=e[b],this[b]=o?o(p):p[b]);return this.isDefaultPrevented=(p.defaultPrevented!=null?p.defaultPrevented:p.returnValue===!1)?Wi:tf,this.isPropagationStopped=tf,this}return ee(n.prototype,{preventDefault:function(){this.defaultPrevented=!0;var o=this.nativeEvent;o&&(o.preventDefault?o.preventDefault():typeof o.returnValue!="unknown"&&(o.returnValue=!1),this.isDefaultPrevented=Wi)},stopPropagation:function(){var o=this.nativeEvent;o&&(o.stopPropagation?o.stopPropagation():typeof o.cancelBubble!="unknown"&&(o.cancelBubble=!0),this.isPropagationStopped=Wi)},persist:function(){},isPersistent:Wi}),n}var Ba={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},$l=ur(Ba),Do=ee({},Ba,{view:0,detail:0}),J0=ur(Do),Fl,Ol,$o,qi=ee({},Do,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:zl,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!==$o&&($o&&e.type==="mousemove"?(Fl=e.screenX-$o.screenX,Ol=e.screenY-$o.screenY):Ol=Fl=0,$o=e),Fl)},movementY:function(e){return"movementY"in e?e.movementY:Ol}}),rf=ur(qi),X0=ee({},qi,{dataTransfer:0}),e2=ur(X0),t2=ee({},Do,{relatedTarget:0}),Ul=ur(t2),r2=ee({},Ba,{animationName:0,elapsedTime:0,pseudoElement:0}),n2=ur(r2),a2=ee({},Ba,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),o2=ur(a2),i2=ee({},Ba,{data:0}),nf=ur(i2),s2={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},l2={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"},c2={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function u2(e){var n=this.nativeEvent;return n.getModifierState?n.getModifierState(e):(e=c2[e])?!!n[e]:!1}function zl(){return u2}var d2=ee({},Do,{key:function(e){if(e.key){var n=s2[e.key]||e.key;if(n!=="Unidentified")return n}return e.type==="keypress"?(e=Hi(e),e===13?"Enter":String.fromCharCode(e)):e.type==="keydown"||e.type==="keyup"?l2[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:zl,charCode:function(e){return e.type==="keypress"?Hi(e):0},keyCode:function(e){return e.type==="keydown"||e.type==="keyup"?e.keyCode:0},which:function(e){return e.type==="keypress"?Hi(e):e.type==="keydown"||e.type==="keyup"?e.keyCode:0}}),f2=ur(d2),p2=ee({},qi,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0}),af=ur(p2),h2=ee({},Do,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:zl}),m2=ur(h2),g2=ee({},Ba,{propertyName:0,elapsedTime:0,pseudoElement:0}),y2=ur(g2),v2=ee({},qi,{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}),w2=ur(v2),C2=[9,13,27,32],Bl=f&&"CompositionEvent"in window,Fo=null;f&&"documentMode"in document&&(Fo=document.documentMode);var _2=f&&"TextEvent"in window&&!Fo,of=f&&(!Bl||Fo&&8<Fo&&11>=Fo),sf=" ",lf=!1;function cf(e,n){switch(e){case"keyup":return C2.indexOf(n.keyCode)!==-1;case"keydown":return n.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function uf(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Va=!1;function x2(e,n){switch(e){case"compositionend":return uf(n);case"keypress":return n.which!==32?null:(lf=!0,sf);case"textInput":return e=n.data,e===sf&&lf?null:e;default:return null}}function S2(e,n){if(Va)return e==="compositionend"||!Bl&&cf(e,n)?(e=ef(),Vi=Dl=On=null,Va=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(n.ctrlKey||n.altKey||n.metaKey)||n.ctrlKey&&n.altKey){if(n.char&&1<n.char.length)return n.char;if(n.which)return String.fromCharCode(n.which)}return null;case"compositionend":return of&&n.locale!=="ko"?null:n.data;default:return null}}var E2={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 df(e){var n=e&&e.nodeName&&e.nodeName.toLowerCase();return n==="input"?!!E2[e.type]:n==="textarea"}function ff(e,n,o,l){bo(l),n=Zi(n,"onChange"),0<n.length&&(o=new $l("onChange","change",null,o,l),e.push({event:o,listeners:n}))}var Oo=null,Uo=null;function k2(e){Rf(e,0)}function Ki(e){var n=Ga(e);if(Oe(n))return e}function b2(e,n){if(e==="change")return n}var pf=!1;if(f){var Vl;if(f){var Hl="oninput"in document;if(!Hl){var hf=document.createElement("div");hf.setAttribute("oninput","return;"),Hl=typeof hf.oninput=="function"}Vl=Hl}else Vl=!1;pf=Vl&&(!document.documentMode||9<document.documentMode)}function mf(){Oo&&(Oo.detachEvent("onpropertychange",gf),Uo=Oo=null)}function gf(e){if(e.propertyName==="value"&&Ki(Uo)){var n=[];ff(n,Uo,e,Ua(e)),To(k2,n)}}function I2(e,n,o){e==="focusin"?(mf(),Oo=n,Uo=o,Oo.attachEvent("onpropertychange",gf)):e==="focusout"&&mf()}function T2(e){if(e==="selectionchange"||e==="keyup"||e==="keydown")return Ki(Uo)}function P2(e,n){if(e==="click")return Ki(n)}function R2(e,n){if(e==="input"||e==="change")return Ki(n)}function A2(e,n){return e===n&&(e!==0||1/e===1/n)||e!==e&&n!==n}var $r=typeof Object.is=="function"?Object.is:A2;function zo(e,n){if($r(e,n))return!0;if(typeof e!="object"||e===null||typeof n!="object"||n===null)return!1;var o=Object.keys(e),l=Object.keys(n);if(o.length!==l.length)return!1;for(l=0;l<o.length;l++){var d=o[l];if(!h.call(n,d)||!$r(e[d],n[d]))return!1}return!0}function yf(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function vf(e,n){var o=yf(e);e=0;for(var l;o;){if(o.nodeType===3){if(l=e+o.textContent.length,e<=n&&l>=n)return{node:o,offset:n-e};e=l}e:{for(;o;){if(o.nextSibling){o=o.nextSibling;break e}o=o.parentNode}o=void 0}o=yf(o)}}function wf(e,n){return e&&n?e===n?!0:e&&e.nodeType===3?!1:n&&n.nodeType===3?wf(e,n.parentNode):"contains"in e?e.contains(n):e.compareDocumentPosition?!!(e.compareDocumentPosition(n)&16):!1:!1}function Cf(){for(var e=window,n=dt();n instanceof e.HTMLIFrameElement;){try{var o=typeof n.contentWindow.location.href=="string"}catch{o=!1}if(o)e=n.contentWindow;else break;n=dt(e.document)}return n}function Wl(e){var n=e&&e.nodeName&&e.nodeName.toLowerCase();return n&&(n==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||n==="textarea"||e.contentEditable==="true")}function N2(e){var n=Cf(),o=e.focusedElem,l=e.selectionRange;if(n!==o&&o&&o.ownerDocument&&wf(o.ownerDocument.documentElement,o)){if(l!==null&&Wl(o)){if(n=l.start,e=l.end,e===void 0&&(e=n),"selectionStart"in o)o.selectionStart=n,o.selectionEnd=Math.min(e,o.value.length);else if(e=(n=o.ownerDocument||document)&&n.defaultView||window,e.getSelection){e=e.getSelection();var d=o.textContent.length,p=Math.min(l.start,d);l=l.end===void 0?p:Math.min(l.end,d),!e.extend&&p>l&&(d=l,l=p,p=d),d=vf(o,p);var C=vf(o,l);d&&C&&(e.rangeCount!==1||e.anchorNode!==d.node||e.anchorOffset!==d.offset||e.focusNode!==C.node||e.focusOffset!==C.offset)&&(n=n.createRange(),n.setStart(d.node,d.offset),e.removeAllRanges(),p>l?(e.addRange(n),e.extend(C.node,C.offset)):(n.setEnd(C.node,C.offset),e.addRange(n)))}}for(n=[],e=o;e=e.parentNode;)e.nodeType===1&&n.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof o.focus=="function"&&o.focus(),o=0;o<n.length;o++)e=n[o],e.element.scrollLeft=e.left,e.element.scrollTop=e.top}}var L2=f&&"documentMode"in document&&11>=document.documentMode,Ha=null,ql=null,Bo=null,Kl=!1;function _f(e,n,o){var l=o.window===o?o.document:o.nodeType===9?o:o.ownerDocument;Kl||Ha==null||Ha!==dt(l)||(l=Ha,"selectionStart"in l&&Wl(l)?l={start:l.selectionStart,end:l.selectionEnd}:(l=(l.ownerDocument&&l.ownerDocument.defaultView||window).getSelection(),l={anchorNode:l.anchorNode,anchorOffset:l.anchorOffset,focusNode:l.focusNode,focusOffset:l.focusOffset}),Bo&&zo(Bo,l)||(Bo=l,l=Zi(ql,"onSelect"),0<l.length&&(n=new $l("onSelect","select",null,n,o),e.push({event:n,listeners:l}),n.target=Ha)))}function Gi(e,n){var o={};return o[e.toLowerCase()]=n.toLowerCase(),o["Webkit"+e]="webkit"+n,o["Moz"+e]="moz"+n,o}var Wa={animationend:Gi("Animation","AnimationEnd"),animationiteration:Gi("Animation","AnimationIteration"),animationstart:Gi("Animation","AnimationStart"),transitionend:Gi("Transition","TransitionEnd")},Gl={},xf={};f&&(xf=document.createElement("div").style,"AnimationEvent"in window||(delete Wa.animationend.animation,delete Wa.animationiteration.animation,delete Wa.animationstart.animation),"TransitionEvent"in window||delete Wa.transitionend.transition);function Yi(e){if(Gl[e])return Gl[e];if(!Wa[e])return e;var n=Wa[e],o;for(o in n)if(n.hasOwnProperty(o)&&o in xf)return Gl[e]=n[o];return e}var Sf=Yi("animationend"),Ef=Yi("animationiteration"),kf=Yi("animationstart"),bf=Yi("transitionend"),If=new Map,Tf="abort auxClick 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(" ");function Un(e,n){If.set(e,n),c(n,[e])}for(var Yl=0;Yl<Tf.length;Yl++){var Ql=Tf[Yl],j2=Ql.toLowerCase(),M2=Ql[0].toUpperCase()+Ql.slice(1);Un(j2,"on"+M2)}Un(Sf,"onAnimationEnd"),Un(Ef,"onAnimationIteration"),Un(kf,"onAnimationStart"),Un("dblclick","onDoubleClick"),Un("focusin","onFocus"),Un("focusout","onBlur"),Un(bf,"onTransitionEnd"),u("onMouseEnter",["mouseout","mouseover"]),u("onMouseLeave",["mouseout","mouseover"]),u("onPointerEnter",["pointerout","pointerover"]),u("onPointerLeave",["pointerout","pointerover"]),c("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),c("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),c("onBeforeInput",["compositionend","keypress","textInput","paste"]),c("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),c("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),c("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var Vo="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(" "),D2=new Set("cancel close invalid load scroll toggle".split(" ").concat(Vo));function Pf(e,n,o){var l=e.type||"unknown-event";e.currentTarget=o,de(l,n,void 0,e),e.currentTarget=null}function Rf(e,n){n=(n&4)!==0;for(var o=0;o<e.length;o++){var l=e[o],d=l.event;l=l.listeners;e:{var p=void 0;if(n)for(var C=l.length-1;0<=C;C--){var b=l[C],T=b.instance,z=b.currentTarget;if(b=b.listener,T!==p&&d.isPropagationStopped())break e;Pf(d,b,z),p=T}else for(C=0;C<l.length;C++){if(b=l[C],T=b.instance,z=b.currentTarget,b=b.listener,T!==p&&d.isPropagationStopped())break e;Pf(d,b,z),p=T}}}if(ne)throw e=me,ne=!1,me=null,e}function Xe(e,n){var o=n[ac];o===void 0&&(o=n[ac]=new Set);var l=e+"__bubble";o.has(l)||(Af(n,e,2,!1),o.add(l))}function Zl(e,n,o){var l=0;n&&(l|=4),Af(o,e,l,n)}var Qi="_reactListening"+Math.random().toString(36).slice(2);function Ho(e){if(!e[Qi]){e[Qi]=!0,i.forEach(function(o){o!=="selectionchange"&&(D2.has(o)||Zl(o,!1,e),Zl(o,!0,e))});var n=e.nodeType===9?e:e.ownerDocument;n===null||n[Qi]||(n[Qi]=!0,Zl("selectionchange",!1,n))}}function Af(e,n,o,l){switch(Xd(n)){case 1:var d=Q0;break;case 4:d=Z0;break;default:d=jl}o=d.bind(null,n,o,e),d=void 0,!Po||n!=="touchstart"&&n!=="touchmove"&&n!=="wheel"||(d=!0),l?d!==void 0?e.addEventListener(n,o,{capture:!0,passive:d}):e.addEventListener(n,o,!0):d!==void 0?e.addEventListener(n,o,{passive:d}):e.addEventListener(n,o,!1)}function Jl(e,n,o,l,d){var p=l;if((n&1)===0&&(n&2)===0&&l!==null)e:for(;;){if(l===null)return;var C=l.tag;if(C===3||C===4){var b=l.stateNode.containerInfo;if(b===d||b.nodeType===8&&b.parentNode===d)break;if(C===4)for(C=l.return;C!==null;){var T=C.tag;if((T===3||T===4)&&(T=C.stateNode.containerInfo,T===d||T.nodeType===8&&T.parentNode===d))return;C=C.return}for(;b!==null;){if(C=fa(b),C===null)return;if(T=C.tag,T===5||T===6){l=p=C;continue e}b=b.parentNode}}l=l.return}To(function(){var z=p,Y=Ua(o),Z=[];e:{var K=If.get(e);if(K!==void 0){var se=$l,fe=e;switch(e){case"keypress":if(Hi(o)===0)break e;case"keydown":case"keyup":se=f2;break;case"focusin":fe="focus",se=Ul;break;case"focusout":fe="blur",se=Ul;break;case"beforeblur":case"afterblur":se=Ul;break;case"click":if(o.button===2)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":se=rf;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":se=e2;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":se=m2;break;case Sf:case Ef:case kf:se=n2;break;case bf:se=y2;break;case"scroll":se=J0;break;case"wheel":se=w2;break;case"copy":case"cut":case"paste":se=o2;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":se=af}var he=(n&4)!==0,ht=!he&&e==="scroll",D=he?K!==null?K+"Capture":null:K;he=[];for(var R=z,$;R!==null;){$=R;var re=$.stateNode;if($.tag===5&&re!==null&&($=re,D!==null&&(re=sa(R,D),re!=null&&he.push(Wo(R,re,$)))),ht)break;R=R.return}0<he.length&&(K=new se(K,fe,null,o,Y),Z.push({event:K,listeners:he}))}}if((n&7)===0){e:{if(K=e==="mouseover"||e==="pointerover",se=e==="mouseout"||e==="pointerout",K&&o!==ko&&(fe=o.relatedTarget||o.fromElement)&&(fa(fe)||fe[gn]))break e;if((se||K)&&(K=Y.window===Y?Y:(K=Y.ownerDocument)?K.defaultView||K.parentWindow:window,se?(fe=o.relatedTarget||o.toElement,se=z,fe=fe?fa(fe):null,fe!==null&&(ht=pe(fe),fe!==ht||fe.tag!==5&&fe.tag!==6)&&(fe=null)):(se=null,fe=z),se!==fe)){if(he=rf,re="onMouseLeave",D="onMouseEnter",R="mouse",(e==="pointerout"||e==="pointerover")&&(he=af,re="onPointerLeave",D="onPointerEnter",R="pointer"),ht=se==null?K:Ga(se),$=fe==null?K:Ga(fe),K=new he(re,R+"leave",se,o,Y),K.target=ht,K.relatedTarget=$,re=null,fa(Y)===z&&(he=new he(D,R+"enter",fe,o,Y),he.target=$,he.relatedTarget=ht,re=he),ht=re,se&&fe)t:{for(he=se,D=fe,R=0,$=he;$;$=qa($))R++;for($=0,re=D;re;re=qa(re))$++;for(;0<R-$;)he=qa(he),R--;for(;0<$-R;)D=qa(D),$--;for(;R--;){if(he===D||D!==null&&he===D.alternate)break t;he=qa(he),D=qa(D)}he=null}else he=null;se!==null&&Nf(Z,K,se,he,!1),fe!==null&&ht!==null&&Nf(Z,ht,fe,he,!0)}}e:{if(K=z?Ga(z):window,se=K.nodeName&&K.nodeName.toLowerCase(),se==="select"||se==="input"&&K.type==="file")var ge=b2;else if(df(K))if(pf)ge=R2;else{ge=T2;var Ce=I2}else(se=K.nodeName)&&se.toLowerCase()==="input"&&(K.type==="checkbox"||K.type==="radio")&&(ge=P2);if(ge&&(ge=ge(e,z))){ff(Z,ge,o,Y);break e}Ce&&Ce(e,K,z),e==="focusout"&&(Ce=K._wrapperState)&&Ce.controlled&&K.type==="number"&&ft(K,"number",K.value)}switch(Ce=z?Ga(z):window,e){case"focusin":(df(Ce)||Ce.contentEditable==="true")&&(Ha=Ce,ql=z,Bo=null);break;case"focusout":Bo=ql=Ha=null;break;case"mousedown":Kl=!0;break;case"contextmenu":case"mouseup":case"dragend":Kl=!1,_f(Z,o,Y);break;case"selectionchange":if(L2)break;case"keydown":case"keyup":_f(Z,o,Y)}var _e;if(Bl)e:{switch(e){case"compositionstart":var be="onCompositionStart";break e;case"compositionend":be="onCompositionEnd";break e;case"compositionupdate":be="onCompositionUpdate";break e}be=void 0}else Va?cf(e,o)&&(be="onCompositionEnd"):e==="keydown"&&o.keyCode===229&&(be="onCompositionStart");be&&(of&&o.locale!=="ko"&&(Va||be!=="onCompositionStart"?be==="onCompositionEnd"&&Va&&(_e=ef()):(On=Y,Dl="value"in On?On.value:On.textContent,Va=!0)),Ce=Zi(z,be),0<Ce.length&&(be=new nf(be,e,null,o,Y),Z.push({event:be,listeners:Ce}),_e?be.data=_e:(_e=uf(o),_e!==null&&(be.data=_e)))),(_e=_2?x2(e,o):S2(e,o))&&(z=Zi(z,"onBeforeInput"),0<z.length&&(Y=new nf("onBeforeInput","beforeinput",null,o,Y),Z.push({event:Y,listeners:z}),Y.data=_e))}Rf(Z,n)})}function Wo(e,n,o){return{instance:e,listener:n,currentTarget:o}}function Zi(e,n){for(var o=n+"Capture",l=[];e!==null;){var d=e,p=d.stateNode;d.tag===5&&p!==null&&(d=p,p=sa(e,o),p!=null&&l.unshift(Wo(e,p,d)),p=sa(e,n),p!=null&&l.push(Wo(e,p,d))),e=e.return}return l}function qa(e){if(e===null)return null;do e=e.return;while(e&&e.tag!==5);return e||null}function Nf(e,n,o,l,d){for(var p=n._reactName,C=[];o!==null&&o!==l;){var b=o,T=b.alternate,z=b.stateNode;if(T!==null&&T===l)break;b.tag===5&&z!==null&&(b=z,d?(T=sa(o,p),T!=null&&C.unshift(Wo(o,T,b))):d||(T=sa(o,p),T!=null&&C.push(Wo(o,T,b)))),o=o.return}C.length!==0&&e.push({event:n,listeners:C})}var $2=/\r\n?/g,F2=/\u0000|\uFFFD/g;function Lf(e){return(typeof e=="string"?e:""+e).replace($2,`
`).replace(F2,"")}function Ji(e,n,o){if(n=Lf(n),Lf(e)!==n&&o)throw Error(a(425))}function Xi(){}var Xl=null,ec=null;function tc(e,n){return e==="textarea"||e==="noscript"||typeof n.children=="string"||typeof n.children=="number"||typeof n.dangerouslySetInnerHTML=="object"&&n.dangerouslySetInnerHTML!==null&&n.dangerouslySetInnerHTML.__html!=null}var rc=typeof setTimeout=="function"?setTimeout:void 0,O2=typeof clearTimeout=="function"?clearTimeout:void 0,jf=typeof Promise=="function"?Promise:void 0,U2=typeof queueMicrotask=="function"?queueMicrotask:typeof jf<"u"?function(e){return jf.resolve(null).then(e).catch(z2)}:rc;function z2(e){setTimeout(function(){throw e})}function nc(e,n){var o=n,l=0;do{var d=o.nextSibling;if(e.removeChild(o),d&&d.nodeType===8)if(o=d.data,o==="/$"){if(l===0){e.removeChild(d),Mo(n);return}l--}else o!=="$"&&o!=="$?"&&o!=="$!"||l++;o=d}while(o);Mo(n)}function zn(e){for(;e!=null;e=e.nextSibling){var n=e.nodeType;if(n===1||n===3)break;if(n===8){if(n=e.data,n==="$"||n==="$!"||n==="$?")break;if(n==="/$")return null}}return e}function Mf(e){e=e.previousSibling;for(var n=0;e;){if(e.nodeType===8){var o=e.data;if(o==="$"||o==="$!"||o==="$?"){if(n===0)return e;n--}else o==="/$"&&n++}e=e.previousSibling}return null}var Ka=Math.random().toString(36).slice(2),Xr="__reactFiber$"+Ka,qo="__reactProps$"+Ka,gn="__reactContainer$"+Ka,ac="__reactEvents$"+Ka,B2="__reactListeners$"+Ka,V2="__reactHandles$"+Ka;function fa(e){var n=e[Xr];if(n)return n;for(var o=e.parentNode;o;){if(n=o[gn]||o[Xr]){if(o=n.alternate,n.child!==null||o!==null&&o.child!==null)for(e=Mf(e);e!==null;){if(o=e[Xr])return o;e=Mf(e)}return n}e=o,o=e.parentNode}return null}function Ko(e){return e=e[Xr]||e[gn],!e||e.tag!==5&&e.tag!==6&&e.tag!==13&&e.tag!==3?null:e}function Ga(e){if(e.tag===5||e.tag===6)return e.stateNode;throw Error(a(33))}function es(e){return e[qo]||null}var oc=[],Ya=-1;function Bn(e){return{current:e}}function et(e){0>Ya||(e.current=oc[Ya],oc[Ya]=null,Ya--)}function Ze(e,n){Ya++,oc[Ya]=e.current,e.current=n}var Vn={},Dt=Bn(Vn),Xt=Bn(!1),pa=Vn;function Qa(e,n){var o=e.type.contextTypes;if(!o)return Vn;var l=e.stateNode;if(l&&l.__reactInternalMemoizedUnmaskedChildContext===n)return l.__reactInternalMemoizedMaskedChildContext;var d={},p;for(p in o)d[p]=n[p];return l&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=n,e.__reactInternalMemoizedMaskedChildContext=d),d}function er(e){return e=e.childContextTypes,e!=null}function ts(){et(Xt),et(Dt)}function Df(e,n,o){if(Dt.current!==Vn)throw Error(a(168));Ze(Dt,n),Ze(Xt,o)}function $f(e,n,o){var l=e.stateNode;if(n=n.childContextTypes,typeof l.getChildContext!="function")return o;l=l.getChildContext();for(var d in l)if(!(d in n))throw Error(a(108,Ee(e)||"Unknown",d));return ee({},o,l)}function rs(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Vn,pa=Dt.current,Ze(Dt,e),Ze(Xt,Xt.current),!0}function Ff(e,n,o){var l=e.stateNode;if(!l)throw Error(a(169));o?(e=$f(e,n,pa),l.__reactInternalMemoizedMergedChildContext=e,et(Xt),et(Dt),Ze(Dt,e)):et(Xt),Ze(Xt,o)}var yn=null,ns=!1,ic=!1;function Of(e){yn===null?yn=[e]:yn.push(e)}function H2(e){ns=!0,Of(e)}function Hn(){if(!ic&&yn!==null){ic=!0;var e=0,n=qe;try{var o=yn;for(qe=1;e<o.length;e++){var l=o[e];do l=l(!0);while(l!==null)}yn=null,ns=!1}catch(d){throw yn!==null&&(yn=yn.slice(e+1)),pt(Sr,Hn),d}finally{qe=n,ic=!1}}return null}var Za=[],Ja=0,as=null,os=0,Er=[],kr=0,ha=null,vn=1,wn="";function ma(e,n){Za[Ja++]=os,Za[Ja++]=as,as=e,os=n}function Uf(e,n,o){Er[kr++]=vn,Er[kr++]=wn,Er[kr++]=ha,ha=e;var l=vn;e=wn;var d=32-Ye(l)-1;l&=~(1<<d),o+=1;var p=32-Ye(n)+d;if(30<p){var C=d-d%5;p=(l&(1<<C)-1).toString(32),l>>=C,d-=C,vn=1<<32-Ye(n)+d|o<<d|l,wn=p+e}else vn=1<<p|o<<d|l,wn=e}function sc(e){e.return!==null&&(ma(e,1),Uf(e,1,0))}function lc(e){for(;e===as;)as=Za[--Ja],Za[Ja]=null,os=Za[--Ja],Za[Ja]=null;for(;e===ha;)ha=Er[--kr],Er[kr]=null,wn=Er[--kr],Er[kr]=null,vn=Er[--kr],Er[kr]=null}var dr=null,fr=null,nt=!1,Fr=null;function zf(e,n){var o=Pr(5,null,null,0);o.elementType="DELETED",o.stateNode=n,o.return=e,n=e.deletions,n===null?(e.deletions=[o],e.flags|=16):n.push(o)}function Bf(e,n){switch(e.tag){case 5:var o=e.type;return n=n.nodeType!==1||o.toLowerCase()!==n.nodeName.toLowerCase()?null:n,n!==null?(e.stateNode=n,dr=e,fr=zn(n.firstChild),!0):!1;case 6:return n=e.pendingProps===""||n.nodeType!==3?null:n,n!==null?(e.stateNode=n,dr=e,fr=null,!0):!1;case 13:return n=n.nodeType!==8?null:n,n!==null?(o=ha!==null?{id:vn,overflow:wn}:null,e.memoizedState={dehydrated:n,treeContext:o,retryLane:1073741824},o=Pr(18,null,null,0),o.stateNode=n,o.return=e,e.child=o,dr=e,fr=null,!0):!1;default:return!1}}function cc(e){return(e.mode&1)!==0&&(e.flags&128)===0}function uc(e){if(nt){var n=fr;if(n){var o=n;if(!Bf(e,n)){if(cc(e))throw Error(a(418));n=zn(o.nextSibling);var l=dr;n&&Bf(e,n)?zf(l,o):(e.flags=e.flags&-4097|2,nt=!1,dr=e)}}else{if(cc(e))throw Error(a(418));e.flags=e.flags&-4097|2,nt=!1,dr=e}}}function Vf(e){for(e=e.return;e!==null&&e.tag!==5&&e.tag!==3&&e.tag!==13;)e=e.return;dr=e}function is(e){if(e!==dr)return!1;if(!nt)return Vf(e),nt=!0,!1;var n;if((n=e.tag!==3)&&!(n=e.tag!==5)&&(n=e.type,n=n!=="head"&&n!=="body"&&!tc(e.type,e.memoizedProps)),n&&(n=fr)){if(cc(e))throw Hf(),Error(a(418));for(;n;)zf(e,n),n=zn(n.nextSibling)}if(Vf(e),e.tag===13){if(e=e.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(a(317));e:{for(e=e.nextSibling,n=0;e;){if(e.nodeType===8){var o=e.data;if(o==="/$"){if(n===0){fr=zn(e.nextSibling);break e}n--}else o!=="$"&&o!=="$!"&&o!=="$?"||n++}e=e.nextSibling}fr=null}}else fr=dr?zn(e.stateNode.nextSibling):null;return!0}function Hf(){for(var e=fr;e;)e=zn(e.nextSibling)}function Xa(){fr=dr=null,nt=!1}function dc(e){Fr===null?Fr=[e]:Fr.push(e)}var W2=U.ReactCurrentBatchConfig;function Go(e,n,o){if(e=o.ref,e!==null&&typeof e!="function"&&typeof e!="object"){if(o._owner){if(o=o._owner,o){if(o.tag!==1)throw Error(a(309));var l=o.stateNode}if(!l)throw Error(a(147,e));var d=l,p=""+e;return n!==null&&n.ref!==null&&typeof n.ref=="function"&&n.ref._stringRef===p?n.ref:(n=function(C){var b=d.refs;C===null?delete b[p]:b[p]=C},n._stringRef=p,n)}if(typeof e!="string")throw Error(a(284));if(!o._owner)throw Error(a(290,e))}return e}function ss(e,n){throw e=Object.prototype.toString.call(n),Error(a(31,e==="[object Object]"?"object with keys {"+Object.keys(n).join(", ")+"}":e))}function Wf(e){var n=e._init;return n(e._payload)}function qf(e){function n(D,R){if(e){var $=D.deletions;$===null?(D.deletions=[R],D.flags|=16):$.push(R)}}function o(D,R){if(!e)return null;for(;R!==null;)n(D,R),R=R.sibling;return null}function l(D,R){for(D=new Map;R!==null;)R.key!==null?D.set(R.key,R):D.set(R.index,R),R=R.sibling;return D}function d(D,R){return D=Jn(D,R),D.index=0,D.sibling=null,D}function p(D,R,$){return D.index=$,e?($=D.alternate,$!==null?($=$.index,$<R?(D.flags|=2,R):$):(D.flags|=2,R)):(D.flags|=1048576,R)}function C(D){return e&&D.alternate===null&&(D.flags|=2),D}function b(D,R,$,re){return R===null||R.tag!==6?(R=ru($,D.mode,re),R.return=D,R):(R=d(R,$),R.return=D,R)}function T(D,R,$,re){var ge=$.type;return ge===k?Y(D,R,$.props.children,re,$.key):R!==null&&(R.elementType===ge||typeof ge=="object"&&ge!==null&&ge.$$typeof===ke&&Wf(ge)===R.type)?(re=d(R,$.props),re.ref=Go(D,R,$),re.return=D,re):(re=As($.type,$.key,$.props,null,D.mode,re),re.ref=Go(D,R,$),re.return=D,re)}function z(D,R,$,re){return R===null||R.tag!==4||R.stateNode.containerInfo!==$.containerInfo||R.stateNode.implementation!==$.implementation?(R=nu($,D.mode,re),R.return=D,R):(R=d(R,$.children||[]),R.return=D,R)}function Y(D,R,$,re,ge){return R===null||R.tag!==7?(R=Sa($,D.mode,re,ge),R.return=D,R):(R=d(R,$),R.return=D,R)}function Z(D,R,$){if(typeof R=="string"&&R!==""||typeof R=="number")return R=ru(""+R,D.mode,$),R.return=D,R;if(typeof R=="object"&&R!==null){switch(R.$$typeof){case P:return $=As(R.type,R.key,R.props,null,D.mode,$),$.ref=Go(D,null,R),$.return=D,$;case H:return R=nu(R,D.mode,$),R.return=D,R;case ke:var re=R._init;return Z(D,re(R._payload),$)}if(Rt(R)||ie(R))return R=Sa(R,D.mode,$,null),R.return=D,R;ss(D,R)}return null}function K(D,R,$,re){var ge=R!==null?R.key:null;if(typeof $=="string"&&$!==""||typeof $=="number")return ge!==null?null:b(D,R,""+$,re);if(typeof $=="object"&&$!==null){switch($.$$typeof){case P:return $.key===ge?T(D,R,$,re):null;case H:return $.key===ge?z(D,R,$,re):null;case ke:return ge=$._init,K(D,R,ge($._payload),re)}if(Rt($)||ie($))return ge!==null?null:Y(D,R,$,re,null);ss(D,$)}return null}function se(D,R,$,re,ge){if(typeof re=="string"&&re!==""||typeof re=="number")return D=D.get($)||null,b(R,D,""+re,ge);if(typeof re=="object"&&re!==null){switch(re.$$typeof){case P:return D=D.get(re.key===null?$:re.key)||null,T(R,D,re,ge);case H:return D=D.get(re.key===null?$:re.key)||null,z(R,D,re,ge);case ke:var Ce=re._init;return se(D,R,$,Ce(re._payload),ge)}if(Rt(re)||ie(re))return D=D.get($)||null,Y(R,D,re,ge,null);ss(R,re)}return null}function fe(D,R,$,re){for(var ge=null,Ce=null,_e=R,be=R=0,Tt=null;_e!==null&&be<$.length;be++){_e.index>be?(Tt=_e,_e=null):Tt=_e.sibling;var Ve=K(D,_e,$[be],re);if(Ve===null){_e===null&&(_e=Tt);break}e&&_e&&Ve.alternate===null&&n(D,_e),R=p(Ve,R,be),Ce===null?ge=Ve:Ce.sibling=Ve,Ce=Ve,_e=Tt}if(be===$.length)return o(D,_e),nt&&ma(D,be),ge;if(_e===null){for(;be<$.length;be++)_e=Z(D,$[be],re),_e!==null&&(R=p(_e,R,be),Ce===null?ge=_e:Ce.sibling=_e,Ce=_e);return nt&&ma(D,be),ge}for(_e=l(D,_e);be<$.length;be++)Tt=se(_e,D,be,$[be],re),Tt!==null&&(e&&Tt.alternate!==null&&_e.delete(Tt.key===null?be:Tt.key),R=p(Tt,R,be),Ce===null?ge=Tt:Ce.sibling=Tt,Ce=Tt);return e&&_e.forEach(function(Xn){return n(D,Xn)}),nt&&ma(D,be),ge}function he(D,R,$,re){var ge=ie($);if(typeof ge!="function")throw Error(a(150));if($=ge.call($),$==null)throw Error(a(151));for(var Ce=ge=null,_e=R,be=R=0,Tt=null,Ve=$.next();_e!==null&&!Ve.done;be++,Ve=$.next()){_e.index>be?(Tt=_e,_e=null):Tt=_e.sibling;var Xn=K(D,_e,Ve.value,re);if(Xn===null){_e===null&&(_e=Tt);break}e&&_e&&Xn.alternate===null&&n(D,_e),R=p(Xn,R,be),Ce===null?ge=Xn:Ce.sibling=Xn,Ce=Xn,_e=Tt}if(Ve.done)return o(D,_e),nt&&ma(D,be),ge;if(_e===null){for(;!Ve.done;be++,Ve=$.next())Ve=Z(D,Ve.value,re),Ve!==null&&(R=p(Ve,R,be),Ce===null?ge=Ve:Ce.sibling=Ve,Ce=Ve);return nt&&ma(D,be),ge}for(_e=l(D,_e);!Ve.done;be++,Ve=$.next())Ve=se(_e,D,be,Ve.value,re),Ve!==null&&(e&&Ve.alternate!==null&&_e.delete(Ve.key===null?be:Ve.key),R=p(Ve,R,be),Ce===null?ge=Ve:Ce.sibling=Ve,Ce=Ve);return e&&_e.forEach(function(Eg){return n(D,Eg)}),nt&&ma(D,be),ge}function ht(D,R,$,re){if(typeof $=="object"&&$!==null&&$.type===k&&$.key===null&&($=$.props.children),typeof $=="object"&&$!==null){switch($.$$typeof){case P:e:{for(var ge=$.key,Ce=R;Ce!==null;){if(Ce.key===ge){if(ge=$.type,ge===k){if(Ce.tag===7){o(D,Ce.sibling),R=d(Ce,$.props.children),R.return=D,D=R;break e}}else if(Ce.elementType===ge||typeof ge=="object"&&ge!==null&&ge.$$typeof===ke&&Wf(ge)===Ce.type){o(D,Ce.sibling),R=d(Ce,$.props),R.ref=Go(D,Ce,$),R.return=D,D=R;break e}o(D,Ce);break}else n(D,Ce);Ce=Ce.sibling}$.type===k?(R=Sa($.props.children,D.mode,re,$.key),R.return=D,D=R):(re=As($.type,$.key,$.props,null,D.mode,re),re.ref=Go(D,R,$),re.return=D,D=re)}return C(D);case H:e:{for(Ce=$.key;R!==null;){if(R.key===Ce)if(R.tag===4&&R.stateNode.containerInfo===$.containerInfo&&R.stateNode.implementation===$.implementation){o(D,R.sibling),R=d(R,$.children||[]),R.return=D,D=R;break e}else{o(D,R);break}else n(D,R);R=R.sibling}R=nu($,D.mode,re),R.return=D,D=R}return C(D);case ke:return Ce=$._init,ht(D,R,Ce($._payload),re)}if(Rt($))return fe(D,R,$,re);if(ie($))return he(D,R,$,re);ss(D,$)}return typeof $=="string"&&$!==""||typeof $=="number"?($=""+$,R!==null&&R.tag===6?(o(D,R.sibling),R=d(R,$),R.return=D,D=R):(o(D,R),R=ru($,D.mode,re),R.return=D,D=R),C(D)):o(D,R)}return ht}var eo=qf(!0),Kf=qf(!1),ls=Bn(null),cs=null,to=null,fc=null;function pc(){fc=to=cs=null}function hc(e){var n=ls.current;et(ls),e._currentValue=n}function mc(e,n,o){for(;e!==null;){var l=e.alternate;if((e.childLanes&n)!==n?(e.childLanes|=n,l!==null&&(l.childLanes|=n)):l!==null&&(l.childLanes&n)!==n&&(l.childLanes|=n),e===o)break;e=e.return}}function ro(e,n){cs=e,fc=to=null,e=e.dependencies,e!==null&&e.firstContext!==null&&((e.lanes&n)!==0&&(tr=!0),e.firstContext=null)}function br(e){var n=e._currentValue;if(fc!==e)if(e={context:e,memoizedValue:n,next:null},to===null){if(cs===null)throw Error(a(308));to=e,cs.dependencies={lanes:0,firstContext:e}}else to=to.next=e;return n}var ga=null;function gc(e){ga===null?ga=[e]:ga.push(e)}function Gf(e,n,o,l){var d=n.interleaved;return d===null?(o.next=o,gc(n)):(o.next=d.next,d.next=o),n.interleaved=o,Cn(e,l)}function Cn(e,n){e.lanes|=n;var o=e.alternate;for(o!==null&&(o.lanes|=n),o=e,e=e.return;e!==null;)e.childLanes|=n,o=e.alternate,o!==null&&(o.childLanes|=n),o=e,e=e.return;return o.tag===3?o.stateNode:null}var Wn=!1;function yc(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function Yf(e,n){e=e.updateQueue,n.updateQueue===e&&(n.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function _n(e,n){return{eventTime:e,lane:n,tag:0,payload:null,callback:null,next:null}}function qn(e,n,o){var l=e.updateQueue;if(l===null)return null;if(l=l.shared,(ze&2)!==0){var d=l.pending;return d===null?n.next=n:(n.next=d.next,d.next=n),l.pending=n,Cn(e,o)}return d=l.interleaved,d===null?(n.next=n,gc(l)):(n.next=d.next,d.next=n),l.interleaved=n,Cn(e,o)}function us(e,n,o){if(n=n.updateQueue,n!==null&&(n=n.shared,(o&4194240)!==0)){var l=n.lanes;l&=e.pendingLanes,o|=l,n.lanes=o,Al(e,o)}}function Qf(e,n){var o=e.updateQueue,l=e.alternate;if(l!==null&&(l=l.updateQueue,o===l)){var d=null,p=null;if(o=o.firstBaseUpdate,o!==null){do{var C={eventTime:o.eventTime,lane:o.lane,tag:o.tag,payload:o.payload,callback:o.callback,next:null};p===null?d=p=C:p=p.next=C,o=o.next}while(o!==null);p===null?d=p=n:p=p.next=n}else d=p=n;o={baseState:l.baseState,firstBaseUpdate:d,lastBaseUpdate:p,shared:l.shared,effects:l.effects},e.updateQueue=o;return}e=o.lastBaseUpdate,e===null?o.firstBaseUpdate=n:e.next=n,o.lastBaseUpdate=n}function ds(e,n,o,l){var d=e.updateQueue;Wn=!1;var p=d.firstBaseUpdate,C=d.lastBaseUpdate,b=d.shared.pending;if(b!==null){d.shared.pending=null;var T=b,z=T.next;T.next=null,C===null?p=z:C.next=z,C=T;var Y=e.alternate;Y!==null&&(Y=Y.updateQueue,b=Y.lastBaseUpdate,b!==C&&(b===null?Y.firstBaseUpdate=z:b.next=z,Y.lastBaseUpdate=T))}if(p!==null){var Z=d.baseState;C=0,Y=z=T=null,b=p;do{var K=b.lane,se=b.eventTime;if((l&K)===K){Y!==null&&(Y=Y.next={eventTime:se,lane:0,tag:b.tag,payload:b.payload,callback:b.callback,next:null});e:{var fe=e,he=b;switch(K=n,se=o,he.tag){case 1:if(fe=he.payload,typeof fe=="function"){Z=fe.call(se,Z,K);break e}Z=fe;break e;case 3:fe.flags=fe.flags&-65537|128;case 0:if(fe=he.payload,K=typeof fe=="function"?fe.call(se,Z,K):fe,K==null)break e;Z=ee({},Z,K);break e;case 2:Wn=!0}}b.callback!==null&&b.lane!==0&&(e.flags|=64,K=d.effects,K===null?d.effects=[b]:K.push(b))}else se={eventTime:se,lane:K,tag:b.tag,payload:b.payload,callback:b.callback,next:null},Y===null?(z=Y=se,T=Z):Y=Y.next=se,C|=K;if(b=b.next,b===null){if(b=d.shared.pending,b===null)break;K=b,b=K.next,K.next=null,d.lastBaseUpdate=K,d.shared.pending=null}}while(!0);if(Y===null&&(T=Z),d.baseState=T,d.firstBaseUpdate=z,d.lastBaseUpdate=Y,n=d.shared.interleaved,n!==null){d=n;do C|=d.lane,d=d.next;while(d!==n)}else p===null&&(d.shared.lanes=0);wa|=C,e.lanes=C,e.memoizedState=Z}}function Zf(e,n,o){if(e=n.effects,n.effects=null,e!==null)for(n=0;n<e.length;n++){var l=e[n],d=l.callback;if(d!==null){if(l.callback=null,l=o,typeof d!="function")throw Error(a(191,d));d.call(l)}}}var Yo={},en=Bn(Yo),Qo=Bn(Yo),Zo=Bn(Yo);function ya(e){if(e===Yo)throw Error(a(174));return e}function vc(e,n){switch(Ze(Zo,n),Ze(Qo,e),Ze(en,Yo),e=n.nodeType,e){case 9:case 11:n=(n=n.documentElement)?n.namespaceURI:Rn(null,"");break;default:e=e===8?n.parentNode:n,n=e.namespaceURI||null,e=e.tagName,n=Rn(n,e)}et(en),Ze(en,n)}function no(){et(en),et(Qo),et(Zo)}function Jf(e){ya(Zo.current);var n=ya(en.current),o=Rn(n,e.type);n!==o&&(Ze(Qo,e),Ze(en,o))}function wc(e){Qo.current===e&&(et(en),et(Qo))}var st=Bn(0);function fs(e){for(var n=e;n!==null;){if(n.tag===13){var o=n.memoizedState;if(o!==null&&(o=o.dehydrated,o===null||o.data==="$?"||o.data==="$!"))return n}else if(n.tag===19&&n.memoizedProps.revealOrder!==void 0){if((n.flags&128)!==0)return n}else if(n.child!==null){n.child.return=n,n=n.child;continue}if(n===e)break;for(;n.sibling===null;){if(n.return===null||n.return===e)return null;n=n.return}n.sibling.return=n.return,n=n.sibling}return null}var Cc=[];function _c(){for(var e=0;e<Cc.length;e++)Cc[e]._workInProgressVersionPrimary=null;Cc.length=0}var ps=U.ReactCurrentDispatcher,xc=U.ReactCurrentBatchConfig,va=0,lt=null,Ct=null,bt=null,hs=!1,Jo=!1,Xo=0,q2=0;function $t(){throw Error(a(321))}function Sc(e,n){if(n===null)return!1;for(var o=0;o<n.length&&o<e.length;o++)if(!$r(e[o],n[o]))return!1;return!0}function Ec(e,n,o,l,d,p){if(va=p,lt=n,n.memoizedState=null,n.updateQueue=null,n.lanes=0,ps.current=e===null||e.memoizedState===null?Q2:Z2,e=o(l,d),Jo){p=0;do{if(Jo=!1,Xo=0,25<=p)throw Error(a(301));p+=1,bt=Ct=null,n.updateQueue=null,ps.current=J2,e=o(l,d)}while(Jo)}if(ps.current=ys,n=Ct!==null&&Ct.next!==null,va=0,bt=Ct=lt=null,hs=!1,n)throw Error(a(300));return e}function kc(){var e=Xo!==0;return Xo=0,e}function tn(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return bt===null?lt.memoizedState=bt=e:bt=bt.next=e,bt}function Ir(){if(Ct===null){var e=lt.alternate;e=e!==null?e.memoizedState:null}else e=Ct.next;var n=bt===null?lt.memoizedState:bt.next;if(n!==null)bt=n,Ct=e;else{if(e===null)throw Error(a(310));Ct=e,e={memoizedState:Ct.memoizedState,baseState:Ct.baseState,baseQueue:Ct.baseQueue,queue:Ct.queue,next:null},bt===null?lt.memoizedState=bt=e:bt=bt.next=e}return bt}function ei(e,n){return typeof n=="function"?n(e):n}function bc(e){var n=Ir(),o=n.queue;if(o===null)throw Error(a(311));o.lastRenderedReducer=e;var l=Ct,d=l.baseQueue,p=o.pending;if(p!==null){if(d!==null){var C=d.next;d.next=p.next,p.next=C}l.baseQueue=d=p,o.pending=null}if(d!==null){p=d.next,l=l.baseState;var b=C=null,T=null,z=p;do{var Y=z.lane;if((va&Y)===Y)T!==null&&(T=T.next={lane:0,action:z.action,hasEagerState:z.hasEagerState,eagerState:z.eagerState,next:null}),l=z.hasEagerState?z.eagerState:e(l,z.action);else{var Z={lane:Y,action:z.action,hasEagerState:z.hasEagerState,eagerState:z.eagerState,next:null};T===null?(b=T=Z,C=l):T=T.next=Z,lt.lanes|=Y,wa|=Y}z=z.next}while(z!==null&&z!==p);T===null?C=l:T.next=b,$r(l,n.memoizedState)||(tr=!0),n.memoizedState=l,n.baseState=C,n.baseQueue=T,o.lastRenderedState=l}if(e=o.interleaved,e!==null){d=e;do p=d.lane,lt.lanes|=p,wa|=p,d=d.next;while(d!==e)}else d===null&&(o.lanes=0);return[n.memoizedState,o.dispatch]}function Ic(e){var n=Ir(),o=n.queue;if(o===null)throw Error(a(311));o.lastRenderedReducer=e;var l=o.dispatch,d=o.pending,p=n.memoizedState;if(d!==null){o.pending=null;var C=d=d.next;do p=e(p,C.action),C=C.next;while(C!==d);$r(p,n.memoizedState)||(tr=!0),n.memoizedState=p,n.baseQueue===null&&(n.baseState=p),o.lastRenderedState=p}return[p,l]}function Xf(){}function ep(e,n){var o=lt,l=Ir(),d=n(),p=!$r(l.memoizedState,d);if(p&&(l.memoizedState=d,tr=!0),l=l.queue,Tc(np.bind(null,o,l,e),[e]),l.getSnapshot!==n||p||bt!==null&&bt.memoizedState.tag&1){if(o.flags|=2048,ti(9,rp.bind(null,o,l,d,n),void 0,null),It===null)throw Error(a(349));(va&30)!==0||tp(o,n,d)}return d}function tp(e,n,o){e.flags|=16384,e={getSnapshot:n,value:o},n=lt.updateQueue,n===null?(n={lastEffect:null,stores:null},lt.updateQueue=n,n.stores=[e]):(o=n.stores,o===null?n.stores=[e]:o.push(e))}function rp(e,n,o,l){n.value=o,n.getSnapshot=l,ap(n)&&op(e)}function np(e,n,o){return o(function(){ap(n)&&op(e)})}function ap(e){var n=e.getSnapshot;e=e.value;try{var o=n();return!$r(e,o)}catch{return!0}}function op(e){var n=Cn(e,1);n!==null&&Br(n,e,1,-1)}function ip(e){var n=tn();return typeof e=="function"&&(e=e()),n.memoizedState=n.baseState=e,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:ei,lastRenderedState:e},n.queue=e,e=e.dispatch=Y2.bind(null,lt,e),[n.memoizedState,e]}function ti(e,n,o,l){return e={tag:e,create:n,destroy:o,deps:l,next:null},n=lt.updateQueue,n===null?(n={lastEffect:null,stores:null},lt.updateQueue=n,n.lastEffect=e.next=e):(o=n.lastEffect,o===null?n.lastEffect=e.next=e:(l=o.next,o.next=e,e.next=l,n.lastEffect=e)),e}function sp(){return Ir().memoizedState}function ms(e,n,o,l){var d=tn();lt.flags|=e,d.memoizedState=ti(1|n,o,void 0,l===void 0?null:l)}function gs(e,n,o,l){var d=Ir();l=l===void 0?null:l;var p=void 0;if(Ct!==null){var C=Ct.memoizedState;if(p=C.destroy,l!==null&&Sc(l,C.deps)){d.memoizedState=ti(n,o,p,l);return}}lt.flags|=e,d.memoizedState=ti(1|n,o,p,l)}function lp(e,n){return ms(8390656,8,e,n)}function Tc(e,n){return gs(2048,8,e,n)}function cp(e,n){return gs(4,2,e,n)}function up(e,n){return gs(4,4,e,n)}function dp(e,n){if(typeof n=="function")return e=e(),n(e),function(){n(null)};if(n!=null)return e=e(),n.current=e,function(){n.current=null}}function fp(e,n,o){return o=o!=null?o.concat([e]):null,gs(4,4,dp.bind(null,n,e),o)}function Pc(){}function pp(e,n){var o=Ir();n=n===void 0?null:n;var l=o.memoizedState;return l!==null&&n!==null&&Sc(n,l[1])?l[0]:(o.memoizedState=[e,n],e)}function hp(e,n){var o=Ir();n=n===void 0?null:n;var l=o.memoizedState;return l!==null&&n!==null&&Sc(n,l[1])?l[0]:(e=e(),o.memoizedState=[e,n],e)}function mp(e,n,o){return(va&21)===0?(e.baseState&&(e.baseState=!1,tr=!0),e.memoizedState=o):($r(o,n)||(o=Hd(),lt.lanes|=o,wa|=o,e.baseState=!0),n)}function K2(e,n){var o=qe;qe=o!==0&&4>o?o:4,e(!0);var l=xc.transition;xc.transition={};try{e(!1),n()}finally{qe=o,xc.transition=l}}function gp(){return Ir().memoizedState}function G2(e,n,o){var l=Qn(e);if(o={lane:l,action:o,hasEagerState:!1,eagerState:null,next:null},yp(e))vp(n,o);else if(o=Gf(e,n,o,l),o!==null){var d=Kt();Br(o,e,l,d),wp(o,n,l)}}function Y2(e,n,o){var l=Qn(e),d={lane:l,action:o,hasEagerState:!1,eagerState:null,next:null};if(yp(e))vp(n,d);else{var p=e.alternate;if(e.lanes===0&&(p===null||p.lanes===0)&&(p=n.lastRenderedReducer,p!==null))try{var C=n.lastRenderedState,b=p(C,o);if(d.hasEagerState=!0,d.eagerState=b,$r(b,C)){var T=n.interleaved;T===null?(d.next=d,gc(n)):(d.next=T.next,T.next=d),n.interleaved=d;return}}catch{}finally{}o=Gf(e,n,d,l),o!==null&&(d=Kt(),Br(o,e,l,d),wp(o,n,l))}}function yp(e){var n=e.alternate;return e===lt||n!==null&&n===lt}function vp(e,n){Jo=hs=!0;var o=e.pending;o===null?n.next=n:(n.next=o.next,o.next=n),e.pending=n}function wp(e,n,o){if((o&4194240)!==0){var l=n.lanes;l&=e.pendingLanes,o|=l,n.lanes=o,Al(e,o)}}var ys={readContext:br,useCallback:$t,useContext:$t,useEffect:$t,useImperativeHandle:$t,useInsertionEffect:$t,useLayoutEffect:$t,useMemo:$t,useReducer:$t,useRef:$t,useState:$t,useDebugValue:$t,useDeferredValue:$t,useTransition:$t,useMutableSource:$t,useSyncExternalStore:$t,useId:$t,unstable_isNewReconciler:!1},Q2={readContext:br,useCallback:function(e,n){return tn().memoizedState=[e,n===void 0?null:n],e},useContext:br,useEffect:lp,useImperativeHandle:function(e,n,o){return o=o!=null?o.concat([e]):null,ms(4194308,4,dp.bind(null,n,e),o)},useLayoutEffect:function(e,n){return ms(4194308,4,e,n)},useInsertionEffect:function(e,n){return ms(4,2,e,n)},useMemo:function(e,n){var o=tn();return n=n===void 0?null:n,e=e(),o.memoizedState=[e,n],e},useReducer:function(e,n,o){var l=tn();return n=o!==void 0?o(n):n,l.memoizedState=l.baseState=n,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:n},l.queue=e,e=e.dispatch=G2.bind(null,lt,e),[l.memoizedState,e]},useRef:function(e){var n=tn();return e={current:e},n.memoizedState=e},useState:ip,useDebugValue:Pc,useDeferredValue:function(e){return tn().memoizedState=e},useTransition:function(){var e=ip(!1),n=e[0];return e=K2.bind(null,e[1]),tn().memoizedState=e,[n,e]},useMutableSource:function(){},useSyncExternalStore:function(e,n,o){var l=lt,d=tn();if(nt){if(o===void 0)throw Error(a(407));o=o()}else{if(o=n(),It===null)throw Error(a(349));(va&30)!==0||tp(l,n,o)}d.memoizedState=o;var p={value:o,getSnapshot:n};return d.queue=p,lp(np.bind(null,l,p,e),[e]),l.flags|=2048,ti(9,rp.bind(null,l,p,o,n),void 0,null),o},useId:function(){var e=tn(),n=It.identifierPrefix;if(nt){var o=wn,l=vn;o=(l&~(1<<32-Ye(l)-1)).toString(32)+o,n=":"+n+"R"+o,o=Xo++,0<o&&(n+="H"+o.toString(32)),n+=":"}else o=q2++,n=":"+n+"r"+o.toString(32)+":";return e.memoizedState=n},unstable_isNewReconciler:!1},Z2={readContext:br,useCallback:pp,useContext:br,useEffect:Tc,useImperativeHandle:fp,useInsertionEffect:cp,useLayoutEffect:up,useMemo:hp,useReducer:bc,useRef:sp,useState:function(){return bc(ei)},useDebugValue:Pc,useDeferredValue:function(e){var n=Ir();return mp(n,Ct.memoizedState,e)},useTransition:function(){var e=bc(ei)[0],n=Ir().memoizedState;return[e,n]},useMutableSource:Xf,useSyncExternalStore:ep,useId:gp,unstable_isNewReconciler:!1},J2={readContext:br,useCallback:pp,useContext:br,useEffect:Tc,useImperativeHandle:fp,useInsertionEffect:cp,useLayoutEffect:up,useMemo:hp,useReducer:Ic,useRef:sp,useState:function(){return Ic(ei)},useDebugValue:Pc,useDeferredValue:function(e){var n=Ir();return Ct===null?n.memoizedState=e:mp(n,Ct.memoizedState,e)},useTransition:function(){var e=Ic(ei)[0],n=Ir().memoizedState;return[e,n]},useMutableSource:Xf,useSyncExternalStore:ep,useId:gp,unstable_isNewReconciler:!1};function Or(e,n){if(e&&e.defaultProps){n=ee({},n),e=e.defaultProps;for(var o in e)n[o]===void 0&&(n[o]=e[o]);return n}return n}function Rc(e,n,o,l){n=e.memoizedState,o=o(l,n),o=o==null?n:ee({},n,o),e.memoizedState=o,e.lanes===0&&(e.updateQueue.baseState=o)}var vs={isMounted:function(e){return(e=e._reactInternals)?pe(e)===e:!1},enqueueSetState:function(e,n,o){e=e._reactInternals;var l=Kt(),d=Qn(e),p=_n(l,d);p.payload=n,o!=null&&(p.callback=o),n=qn(e,p,d),n!==null&&(Br(n,e,d,l),us(n,e,d))},enqueueReplaceState:function(e,n,o){e=e._reactInternals;var l=Kt(),d=Qn(e),p=_n(l,d);p.tag=1,p.payload=n,o!=null&&(p.callback=o),n=qn(e,p,d),n!==null&&(Br(n,e,d,l),us(n,e,d))},enqueueForceUpdate:function(e,n){e=e._reactInternals;var o=Kt(),l=Qn(e),d=_n(o,l);d.tag=2,n!=null&&(d.callback=n),n=qn(e,d,l),n!==null&&(Br(n,e,l,o),us(n,e,l))}};function Cp(e,n,o,l,d,p,C){return e=e.stateNode,typeof e.shouldComponentUpdate=="function"?e.shouldComponentUpdate(l,p,C):n.prototype&&n.prototype.isPureReactComponent?!zo(o,l)||!zo(d,p):!0}function _p(e,n,o){var l=!1,d=Vn,p=n.contextType;return typeof p=="object"&&p!==null?p=br(p):(d=er(n)?pa:Dt.current,l=n.contextTypes,p=(l=l!=null)?Qa(e,d):Vn),n=new n(o,p),e.memoizedState=n.state!==null&&n.state!==void 0?n.state:null,n.updater=vs,e.stateNode=n,n._reactInternals=e,l&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=d,e.__reactInternalMemoizedMaskedChildContext=p),n}function xp(e,n,o,l){e=n.state,typeof n.componentWillReceiveProps=="function"&&n.componentWillReceiveProps(o,l),typeof n.UNSAFE_componentWillReceiveProps=="function"&&n.UNSAFE_componentWillReceiveProps(o,l),n.state!==e&&vs.enqueueReplaceState(n,n.state,null)}function Ac(e,n,o,l){var d=e.stateNode;d.props=o,d.state=e.memoizedState,d.refs={},yc(e);var p=n.contextType;typeof p=="object"&&p!==null?d.context=br(p):(p=er(n)?pa:Dt.current,d.context=Qa(e,p)),d.state=e.memoizedState,p=n.getDerivedStateFromProps,typeof p=="function"&&(Rc(e,n,p,o),d.state=e.memoizedState),typeof n.getDerivedStateFromProps=="function"||typeof d.getSnapshotBeforeUpdate=="function"||typeof d.UNSAFE_componentWillMount!="function"&&typeof d.componentWillMount!="function"||(n=d.state,typeof d.componentWillMount=="function"&&d.componentWillMount(),typeof d.UNSAFE_componentWillMount=="function"&&d.UNSAFE_componentWillMount(),n!==d.state&&vs.enqueueReplaceState(d,d.state,null),ds(e,o,d,l),d.state=e.memoizedState),typeof d.componentDidMount=="function"&&(e.flags|=4194308)}function ao(e,n){try{var o="",l=n;do o+=te(l),l=l.return;while(l);var d=o}catch(p){d=`
Error generating stack: `+p.message+`
`+p.stack}return{value:e,source:n,stack:d,digest:null}}function Nc(e,n,o){return{value:e,source:null,stack:o??null,digest:n??null}}function Lc(e,n){try{console.error(n.value)}catch(o){setTimeout(function(){throw o})}}var X2=typeof WeakMap=="function"?WeakMap:Map;function Sp(e,n,o){o=_n(-1,o),o.tag=3,o.payload={element:null};var l=n.value;return o.callback=function(){ks||(ks=!0,Gc=l),Lc(e,n)},o}function Ep(e,n,o){o=_n(-1,o),o.tag=3;var l=e.type.getDerivedStateFromError;if(typeof l=="function"){var d=n.value;o.payload=function(){return l(d)},o.callback=function(){Lc(e,n)}}var p=e.stateNode;return p!==null&&typeof p.componentDidCatch=="function"&&(o.callback=function(){Lc(e,n),typeof l!="function"&&(Gn===null?Gn=new Set([this]):Gn.add(this));var C=n.stack;this.componentDidCatch(n.value,{componentStack:C!==null?C:""})}),o}function kp(e,n,o){var l=e.pingCache;if(l===null){l=e.pingCache=new X2;var d=new Set;l.set(n,d)}else d=l.get(n),d===void 0&&(d=new Set,l.set(n,d));d.has(o)||(d.add(o),e=pg.bind(null,e,n,o),n.then(e,e))}function bp(e){do{var n;if((n=e.tag===13)&&(n=e.memoizedState,n=n!==null?n.dehydrated!==null:!0),n)return e;e=e.return}while(e!==null);return null}function Ip(e,n,o,l,d){return(e.mode&1)===0?(e===n?e.flags|=65536:(e.flags|=128,o.flags|=131072,o.flags&=-52805,o.tag===1&&(o.alternate===null?o.tag=17:(n=_n(-1,1),n.tag=2,qn(o,n,1))),o.lanes|=1),e):(e.flags|=65536,e.lanes=d,e)}var eg=U.ReactCurrentOwner,tr=!1;function qt(e,n,o,l){n.child=e===null?Kf(n,null,o,l):eo(n,e.child,o,l)}function Tp(e,n,o,l,d){o=o.render;var p=n.ref;return ro(n,d),l=Ec(e,n,o,l,p,d),o=kc(),e!==null&&!tr?(n.updateQueue=e.updateQueue,n.flags&=-2053,e.lanes&=~d,xn(e,n,d)):(nt&&o&&sc(n),n.flags|=1,qt(e,n,l,d),n.child)}function Pp(e,n,o,l,d){if(e===null){var p=o.type;return typeof p=="function"&&!tu(p)&&p.defaultProps===void 0&&o.compare===null&&o.defaultProps===void 0?(n.tag=15,n.type=p,Rp(e,n,p,l,d)):(e=As(o.type,null,l,n,n.mode,d),e.ref=n.ref,e.return=n,n.child=e)}if(p=e.child,(e.lanes&d)===0){var C=p.memoizedProps;if(o=o.compare,o=o!==null?o:zo,o(C,l)&&e.ref===n.ref)return xn(e,n,d)}return n.flags|=1,e=Jn(p,l),e.ref=n.ref,e.return=n,n.child=e}function Rp(e,n,o,l,d){if(e!==null){var p=e.memoizedProps;if(zo(p,l)&&e.ref===n.ref)if(tr=!1,n.pendingProps=l=p,(e.lanes&d)!==0)(e.flags&131072)!==0&&(tr=!0);else return n.lanes=e.lanes,xn(e,n,d)}return jc(e,n,o,l,d)}function Ap(e,n,o){var l=n.pendingProps,d=l.children,p=e!==null?e.memoizedState:null;if(l.mode==="hidden")if((n.mode&1)===0)n.memoizedState={baseLanes:0,cachePool:null,transitions:null},Ze(io,pr),pr|=o;else{if((o&1073741824)===0)return e=p!==null?p.baseLanes|o:o,n.lanes=n.childLanes=1073741824,n.memoizedState={baseLanes:e,cachePool:null,transitions:null},n.updateQueue=null,Ze(io,pr),pr|=e,null;n.memoizedState={baseLanes:0,cachePool:null,transitions:null},l=p!==null?p.baseLanes:o,Ze(io,pr),pr|=l}else p!==null?(l=p.baseLanes|o,n.memoizedState=null):l=o,Ze(io,pr),pr|=l;return qt(e,n,d,o),n.child}function Np(e,n){var o=n.ref;(e===null&&o!==null||e!==null&&e.ref!==o)&&(n.flags|=512,n.flags|=2097152)}function jc(e,n,o,l,d){var p=er(o)?pa:Dt.current;return p=Qa(n,p),ro(n,d),o=Ec(e,n,o,l,p,d),l=kc(),e!==null&&!tr?(n.updateQueue=e.updateQueue,n.flags&=-2053,e.lanes&=~d,xn(e,n,d)):(nt&&l&&sc(n),n.flags|=1,qt(e,n,o,d),n.child)}function Lp(e,n,o,l,d){if(er(o)){var p=!0;rs(n)}else p=!1;if(ro(n,d),n.stateNode===null)Cs(e,n),_p(n,o,l),Ac(n,o,l,d),l=!0;else if(e===null){var C=n.stateNode,b=n.memoizedProps;C.props=b;var T=C.context,z=o.contextType;typeof z=="object"&&z!==null?z=br(z):(z=er(o)?pa:Dt.current,z=Qa(n,z));var Y=o.getDerivedStateFromProps,Z=typeof Y=="function"||typeof C.getSnapshotBeforeUpdate=="function";Z||typeof C.UNSAFE_componentWillReceiveProps!="function"&&typeof C.componentWillReceiveProps!="function"||(b!==l||T!==z)&&xp(n,C,l,z),Wn=!1;var K=n.memoizedState;C.state=K,ds(n,l,C,d),T=n.memoizedState,b!==l||K!==T||Xt.current||Wn?(typeof Y=="function"&&(Rc(n,o,Y,l),T=n.memoizedState),(b=Wn||Cp(n,o,b,l,K,T,z))?(Z||typeof C.UNSAFE_componentWillMount!="function"&&typeof C.componentWillMount!="function"||(typeof C.componentWillMount=="function"&&C.componentWillMount(),typeof C.UNSAFE_componentWillMount=="function"&&C.UNSAFE_componentWillMount()),typeof C.componentDidMount=="function"&&(n.flags|=4194308)):(typeof C.componentDidMount=="function"&&(n.flags|=4194308),n.memoizedProps=l,n.memoizedState=T),C.props=l,C.state=T,C.context=z,l=b):(typeof C.componentDidMount=="function"&&(n.flags|=4194308),l=!1)}else{C=n.stateNode,Yf(e,n),b=n.memoizedProps,z=n.type===n.elementType?b:Or(n.type,b),C.props=z,Z=n.pendingProps,K=C.context,T=o.contextType,typeof T=="object"&&T!==null?T=br(T):(T=er(o)?pa:Dt.current,T=Qa(n,T));var se=o.getDerivedStateFromProps;(Y=typeof se=="function"||typeof C.getSnapshotBeforeUpdate=="function")||typeof C.UNSAFE_componentWillReceiveProps!="function"&&typeof C.componentWillReceiveProps!="function"||(b!==Z||K!==T)&&xp(n,C,l,T),Wn=!1,K=n.memoizedState,C.state=K,ds(n,l,C,d);var fe=n.memoizedState;b!==Z||K!==fe||Xt.current||Wn?(typeof se=="function"&&(Rc(n,o,se,l),fe=n.memoizedState),(z=Wn||Cp(n,o,z,l,K,fe,T)||!1)?(Y||typeof C.UNSAFE_componentWillUpdate!="function"&&typeof C.componentWillUpdate!="function"||(typeof C.componentWillUpdate=="function"&&C.componentWillUpdate(l,fe,T),typeof C.UNSAFE_componentWillUpdate=="function"&&C.UNSAFE_componentWillUpdate(l,fe,T)),typeof C.componentDidUpdate=="function"&&(n.flags|=4),typeof C.getSnapshotBeforeUpdate=="function"&&(n.flags|=1024)):(typeof C.componentDidUpdate!="function"||b===e.memoizedProps&&K===e.memoizedState||(n.flags|=4),typeof C.getSnapshotBeforeUpdate!="function"||b===e.memoizedProps&&K===e.memoizedState||(n.flags|=1024),n.memoizedProps=l,n.memoizedState=fe),C.props=l,C.state=fe,C.context=T,l=z):(typeof C.componentDidUpdate!="function"||b===e.memoizedProps&&K===e.memoizedState||(n.flags|=4),typeof C.getSnapshotBeforeUpdate!="function"||b===e.memoizedProps&&K===e.memoizedState||(n.flags|=1024),l=!1)}return Mc(e,n,o,l,p,d)}function Mc(e,n,o,l,d,p){Np(e,n);var C=(n.flags&128)!==0;if(!l&&!C)return d&&Ff(n,o,!1),xn(e,n,p);l=n.stateNode,eg.current=n;var b=C&&typeof o.getDerivedStateFromError!="function"?null:l.render();return n.flags|=1,e!==null&&C?(n.child=eo(n,e.child,null,p),n.child=eo(n,null,b,p)):qt(e,n,b,p),n.memoizedState=l.state,d&&Ff(n,o,!0),n.child}function jp(e){var n=e.stateNode;n.pendingContext?Df(e,n.pendingContext,n.pendingContext!==n.context):n.context&&Df(e,n.context,!1),vc(e,n.containerInfo)}function Mp(e,n,o,l,d){return Xa(),dc(d),n.flags|=256,qt(e,n,o,l),n.child}var Dc={dehydrated:null,treeContext:null,retryLane:0};function $c(e){return{baseLanes:e,cachePool:null,transitions:null}}function Dp(e,n,o){var l=n.pendingProps,d=st.current,p=!1,C=(n.flags&128)!==0,b;if((b=C)||(b=e!==null&&e.memoizedState===null?!1:(d&2)!==0),b?(p=!0,n.flags&=-129):(e===null||e.memoizedState!==null)&&(d|=1),Ze(st,d&1),e===null)return uc(n),e=n.memoizedState,e!==null&&(e=e.dehydrated,e!==null)?((n.mode&1)===0?n.lanes=1:e.data==="$!"?n.lanes=8:n.lanes=1073741824,null):(C=l.children,e=l.fallback,p?(l=n.mode,p=n.child,C={mode:"hidden",children:C},(l&1)===0&&p!==null?(p.childLanes=0,p.pendingProps=C):p=Ns(C,l,0,null),e=Sa(e,l,o,null),p.return=n,e.return=n,p.sibling=e,n.child=p,n.child.memoizedState=$c(o),n.memoizedState=Dc,e):Fc(n,C));if(d=e.memoizedState,d!==null&&(b=d.dehydrated,b!==null))return tg(e,n,C,l,b,d,o);if(p){p=l.fallback,C=n.mode,d=e.child,b=d.sibling;var T={mode:"hidden",children:l.children};return(C&1)===0&&n.child!==d?(l=n.child,l.childLanes=0,l.pendingProps=T,n.deletions=null):(l=Jn(d,T),l.subtreeFlags=d.subtreeFlags&14680064),b!==null?p=Jn(b,p):(p=Sa(p,C,o,null),p.flags|=2),p.return=n,l.return=n,l.sibling=p,n.child=l,l=p,p=n.child,C=e.child.memoizedState,C=C===null?$c(o):{baseLanes:C.baseLanes|o,cachePool:null,transitions:C.transitions},p.memoizedState=C,p.childLanes=e.childLanes&~o,n.memoizedState=Dc,l}return p=e.child,e=p.sibling,l=Jn(p,{mode:"visible",children:l.children}),(n.mode&1)===0&&(l.lanes=o),l.return=n,l.sibling=null,e!==null&&(o=n.deletions,o===null?(n.deletions=[e],n.flags|=16):o.push(e)),n.child=l,n.memoizedState=null,l}function Fc(e,n){return n=Ns({mode:"visible",children:n},e.mode,0,null),n.return=e,e.child=n}function ws(e,n,o,l){return l!==null&&dc(l),eo(n,e.child,null,o),e=Fc(n,n.pendingProps.children),e.flags|=2,n.memoizedState=null,e}function tg(e,n,o,l,d,p,C){if(o)return n.flags&256?(n.flags&=-257,l=Nc(Error(a(422))),ws(e,n,C,l)):n.memoizedState!==null?(n.child=e.child,n.flags|=128,null):(p=l.fallback,d=n.mode,l=Ns({mode:"visible",children:l.children},d,0,null),p=Sa(p,d,C,null),p.flags|=2,l.return=n,p.return=n,l.sibling=p,n.child=l,(n.mode&1)!==0&&eo(n,e.child,null,C),n.child.memoizedState=$c(C),n.memoizedState=Dc,p);if((n.mode&1)===0)return ws(e,n,C,null);if(d.data==="$!"){if(l=d.nextSibling&&d.nextSibling.dataset,l)var b=l.dgst;return l=b,p=Error(a(419)),l=Nc(p,l,void 0),ws(e,n,C,l)}if(b=(C&e.childLanes)!==0,tr||b){if(l=It,l!==null){switch(C&-C){case 4:d=2;break;case 16:d=8;break;case 64: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:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:d=32;break;case 536870912:d=268435456;break;default:d=0}d=(d&(l.suspendedLanes|C))!==0?0:d,d!==0&&d!==p.retryLane&&(p.retryLane=d,Cn(e,d),Br(l,e,d,-1))}return eu(),l=Nc(Error(a(421))),ws(e,n,C,l)}return d.data==="$?"?(n.flags|=128,n.child=e.child,n=hg.bind(null,e),d._reactRetry=n,null):(e=p.treeContext,fr=zn(d.nextSibling),dr=n,nt=!0,Fr=null,e!==null&&(Er[kr++]=vn,Er[kr++]=wn,Er[kr++]=ha,vn=e.id,wn=e.overflow,ha=n),n=Fc(n,l.children),n.flags|=4096,n)}function $p(e,n,o){e.lanes|=n;var l=e.alternate;l!==null&&(l.lanes|=n),mc(e.return,n,o)}function Oc(e,n,o,l,d){var p=e.memoizedState;p===null?e.memoizedState={isBackwards:n,rendering:null,renderingStartTime:0,last:l,tail:o,tailMode:d}:(p.isBackwards=n,p.rendering=null,p.renderingStartTime=0,p.last=l,p.tail=o,p.tailMode=d)}function Fp(e,n,o){var l=n.pendingProps,d=l.revealOrder,p=l.tail;if(qt(e,n,l.children,o),l=st.current,(l&2)!==0)l=l&1|2,n.flags|=128;else{if(e!==null&&(e.flags&128)!==0)e:for(e=n.child;e!==null;){if(e.tag===13)e.memoizedState!==null&&$p(e,o,n);else if(e.tag===19)$p(e,o,n);else if(e.child!==null){e.child.return=e,e=e.child;continue}if(e===n)break e;for(;e.sibling===null;){if(e.return===null||e.return===n)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}l&=1}if(Ze(st,l),(n.mode&1)===0)n.memoizedState=null;else switch(d){case"forwards":for(o=n.child,d=null;o!==null;)e=o.alternate,e!==null&&fs(e)===null&&(d=o),o=o.sibling;o=d,o===null?(d=n.child,n.child=null):(d=o.sibling,o.sibling=null),Oc(n,!1,d,o,p);break;case"backwards":for(o=null,d=n.child,n.child=null;d!==null;){if(e=d.alternate,e!==null&&fs(e)===null){n.child=d;break}e=d.sibling,d.sibling=o,o=d,d=e}Oc(n,!0,o,null,p);break;case"together":Oc(n,!1,null,null,void 0);break;default:n.memoizedState=null}return n.child}function Cs(e,n){(n.mode&1)===0&&e!==null&&(e.alternate=null,n.alternate=null,n.flags|=2)}function xn(e,n,o){if(e!==null&&(n.dependencies=e.dependencies),wa|=n.lanes,(o&n.childLanes)===0)return null;if(e!==null&&n.child!==e.child)throw Error(a(153));if(n.child!==null){for(e=n.child,o=Jn(e,e.pendingProps),n.child=o,o.return=n;e.sibling!==null;)e=e.sibling,o=o.sibling=Jn(e,e.pendingProps),o.return=n;o.sibling=null}return n.child}function rg(e,n,o){switch(n.tag){case 3:jp(n),Xa();break;case 5:Jf(n);break;case 1:er(n.type)&&rs(n);break;case 4:vc(n,n.stateNode.containerInfo);break;case 10:var l=n.type._context,d=n.memoizedProps.value;Ze(ls,l._currentValue),l._currentValue=d;break;case 13:if(l=n.memoizedState,l!==null)return l.dehydrated!==null?(Ze(st,st.current&1),n.flags|=128,null):(o&n.child.childLanes)!==0?Dp(e,n,o):(Ze(st,st.current&1),e=xn(e,n,o),e!==null?e.sibling:null);Ze(st,st.current&1);break;case 19:if(l=(o&n.childLanes)!==0,(e.flags&128)!==0){if(l)return Fp(e,n,o);n.flags|=128}if(d=n.memoizedState,d!==null&&(d.rendering=null,d.tail=null,d.lastEffect=null),Ze(st,st.current),l)break;return null;case 22:case 23:return n.lanes=0,Ap(e,n,o)}return xn(e,n,o)}var Op,Uc,Up,zp;Op=function(e,n){for(var o=n.child;o!==null;){if(o.tag===5||o.tag===6)e.appendChild(o.stateNode);else if(o.tag!==4&&o.child!==null){o.child.return=o,o=o.child;continue}if(o===n)break;for(;o.sibling===null;){if(o.return===null||o.return===n)return;o=o.return}o.sibling.return=o.return,o=o.sibling}},Uc=function(){},Up=function(e,n,o,l){var d=e.memoizedProps;if(d!==l){e=n.stateNode,ya(en.current);var p=null;switch(o){case"input":d=Yr(e,d),l=Yr(e,l),p=[];break;case"select":d=ee({},d,{value:void 0}),l=ee({},l,{value:void 0}),p=[];break;case"textarea":d=sr(e,d),l=sr(e,l),p=[];break;default:typeof d.onClick!="function"&&typeof l.onClick=="function"&&(e.onclick=Xi)}Fa(o,l);var C;o=null;for(z in d)if(!l.hasOwnProperty(z)&&d.hasOwnProperty(z)&&d[z]!=null)if(z==="style"){var b=d[z];for(C in b)b.hasOwnProperty(C)&&(o||(o={}),o[C]="")}else z!=="dangerouslySetInnerHTML"&&z!=="children"&&z!=="suppressContentEditableWarning"&&z!=="suppressHydrationWarning"&&z!=="autoFocus"&&(s.hasOwnProperty(z)?p||(p=[]):(p=p||[]).push(z,null));for(z in l){var T=l[z];if(b=d!=null?d[z]:void 0,l.hasOwnProperty(z)&&T!==b&&(T!=null||b!=null))if(z==="style")if(b){for(C in b)!b.hasOwnProperty(C)||T&&T.hasOwnProperty(C)||(o||(o={}),o[C]="");for(C in T)T.hasOwnProperty(C)&&b[C]!==T[C]&&(o||(o={}),o[C]=T[C])}else o||(p||(p=[]),p.push(z,o)),o=T;else z==="dangerouslySetInnerHTML"?(T=T?T.__html:void 0,b=b?b.__html:void 0,T!=null&&b!==T&&(p=p||[]).push(z,T)):z==="children"?typeof T!="string"&&typeof T!="number"||(p=p||[]).push(z,""+T):z!=="suppressContentEditableWarning"&&z!=="suppressHydrationWarning"&&(s.hasOwnProperty(z)?(T!=null&&z==="onScroll"&&Xe("scroll",e),p||b===T||(p=[])):(p=p||[]).push(z,T))}o&&(p=p||[]).push("style",o);var z=p;(n.updateQueue=z)&&(n.flags|=4)}},zp=function(e,n,o,l){o!==l&&(n.flags|=4)};function ri(e,n){if(!nt)switch(e.tailMode){case"hidden":n=e.tail;for(var o=null;n!==null;)n.alternate!==null&&(o=n),n=n.sibling;o===null?e.tail=null:o.sibling=null;break;case"collapsed":o=e.tail;for(var l=null;o!==null;)o.alternate!==null&&(l=o),o=o.sibling;l===null?n||e.tail===null?e.tail=null:e.tail.sibling=null:l.sibling=null}}function Ft(e){var n=e.alternate!==null&&e.alternate.child===e.child,o=0,l=0;if(n)for(var d=e.child;d!==null;)o|=d.lanes|d.childLanes,l|=d.subtreeFlags&14680064,l|=d.flags&14680064,d.return=e,d=d.sibling;else for(d=e.child;d!==null;)o|=d.lanes|d.childLanes,l|=d.subtreeFlags,l|=d.flags,d.return=e,d=d.sibling;return e.subtreeFlags|=l,e.childLanes=o,n}function ng(e,n,o){var l=n.pendingProps;switch(lc(n),n.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return Ft(n),null;case 1:return er(n.type)&&ts(),Ft(n),null;case 3:return l=n.stateNode,no(),et(Xt),et(Dt),_c(),l.pendingContext&&(l.context=l.pendingContext,l.pendingContext=null),(e===null||e.child===null)&&(is(n)?n.flags|=4:e===null||e.memoizedState.isDehydrated&&(n.flags&256)===0||(n.flags|=1024,Fr!==null&&(Zc(Fr),Fr=null))),Uc(e,n),Ft(n),null;case 5:wc(n);var d=ya(Zo.current);if(o=n.type,e!==null&&n.stateNode!=null)Up(e,n,o,l,d),e.ref!==n.ref&&(n.flags|=512,n.flags|=2097152);else{if(!l){if(n.stateNode===null)throw Error(a(166));return Ft(n),null}if(e=ya(en.current),is(n)){l=n.stateNode,o=n.type;var p=n.memoizedProps;switch(l[Xr]=n,l[qo]=p,e=(n.mode&1)!==0,o){case"dialog":Xe("cancel",l),Xe("close",l);break;case"iframe":case"object":case"embed":Xe("load",l);break;case"video":case"audio":for(d=0;d<Vo.length;d++)Xe(Vo[d],l);break;case"source":Xe("error",l);break;case"img":case"image":case"link":Xe("error",l),Xe("load",l);break;case"details":Xe("toggle",l);break;case"input":Ne(l,p),Xe("invalid",l);break;case"select":l._wrapperState={wasMultiple:!!p.multiple},Xe("invalid",l);break;case"textarea":Qr(l,p),Xe("invalid",l)}Fa(o,p),d=null;for(var C in p)if(p.hasOwnProperty(C)){var b=p[C];C==="children"?typeof b=="string"?l.textContent!==b&&(p.suppressHydrationWarning!==!0&&Ji(l.textContent,b,e),d=["children",b]):typeof b=="number"&&l.textContent!==""+b&&(p.suppressHydrationWarning!==!0&&Ji(l.textContent,b,e),d=["children",""+b]):s.hasOwnProperty(C)&&b!=null&&C==="onScroll"&&Xe("scroll",l)}switch(o){case"input":Mr(l),Mt(l,p,!0);break;case"textarea":Mr(l),_r(l);break;case"select":case"option":break;default:typeof p.onClick=="function"&&(l.onclick=Xi)}l=d,n.updateQueue=l,l!==null&&(n.flags|=4)}else{C=d.nodeType===9?d:d.ownerDocument,e==="http://www.w3.org/1999/xhtml"&&(e=Dr(o)),e==="http://www.w3.org/1999/xhtml"?o==="script"?(e=C.createElement("div"),e.innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):typeof l.is=="string"?e=C.createElement(o,{is:l.is}):(e=C.createElement(o),o==="select"&&(C=e,l.multiple?C.multiple=!0:l.size&&(C.size=l.size))):e=C.createElementNS(e,o),e[Xr]=n,e[qo]=l,Op(e,n,!1,!1),n.stateNode=e;e:{switch(C=Oa(o,l),o){case"dialog":Xe("cancel",e),Xe("close",e),d=l;break;case"iframe":case"object":case"embed":Xe("load",e),d=l;break;case"video":case"audio":for(d=0;d<Vo.length;d++)Xe(Vo[d],e);d=l;break;case"source":Xe("error",e),d=l;break;case"img":case"image":case"link":Xe("error",e),Xe("load",e),d=l;break;case"details":Xe("toggle",e),d=l;break;case"input":Ne(e,l),d=Yr(e,l),Xe("invalid",e);break;case"option":d=l;break;case"select":e._wrapperState={wasMultiple:!!l.multiple},d=ee({},l,{value:void 0}),Xe("invalid",e);break;case"textarea":Qr(e,l),d=sr(e,l),Xe("invalid",e);break;default:d=l}Fa(o,d),b=d;for(p in b)if(b.hasOwnProperty(p)){var T=b[p];p==="style"?xr(e,T):p==="dangerouslySetInnerHTML"?(T=T?T.__html:void 0,T!=null&&Et(e,T)):p==="children"?typeof T=="string"?(o!=="textarea"||T!=="")&&Zt(e,T):typeof T=="number"&&Zt(e,""+T):p!=="suppressContentEditableWarning"&&p!=="suppressHydrationWarning"&&p!=="autoFocus"&&(s.hasOwnProperty(p)?T!=null&&p==="onScroll"&&Xe("scroll",e):T!=null&&B(e,p,T,C))}switch(o){case"input":Mr(e),Mt(e,l,!1);break;case"textarea":Mr(e),_r(e);break;case"option":l.value!=null&&e.setAttribute("value",""+Ie(l.value));break;case"select":e.multiple=!!l.multiple,p=l.value,p!=null?ir(e,!!l.multiple,p,!1):l.defaultValue!=null&&ir(e,!!l.multiple,l.defaultValue,!0);break;default:typeof d.onClick=="function"&&(e.onclick=Xi)}switch(o){case"button":case"input":case"select":case"textarea":l=!!l.autoFocus;break e;case"img":l=!0;break e;default:l=!1}}l&&(n.flags|=4)}n.ref!==null&&(n.flags|=512,n.flags|=2097152)}return Ft(n),null;case 6:if(e&&n.stateNode!=null)zp(e,n,e.memoizedProps,l);else{if(typeof l!="string"&&n.stateNode===null)throw Error(a(166));if(o=ya(Zo.current),ya(en.current),is(n)){if(l=n.stateNode,o=n.memoizedProps,l[Xr]=n,(p=l.nodeValue!==o)&&(e=dr,e!==null))switch(e.tag){case 3:Ji(l.nodeValue,o,(e.mode&1)!==0);break;case 5:e.memoizedProps.suppressHydrationWarning!==!0&&Ji(l.nodeValue,o,(e.mode&1)!==0)}p&&(n.flags|=4)}else l=(o.nodeType===9?o:o.ownerDocument).createTextNode(l),l[Xr]=n,n.stateNode=l}return Ft(n),null;case 13:if(et(st),l=n.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(nt&&fr!==null&&(n.mode&1)!==0&&(n.flags&128)===0)Hf(),Xa(),n.flags|=98560,p=!1;else if(p=is(n),l!==null&&l.dehydrated!==null){if(e===null){if(!p)throw Error(a(318));if(p=n.memoizedState,p=p!==null?p.dehydrated:null,!p)throw Error(a(317));p[Xr]=n}else Xa(),(n.flags&128)===0&&(n.memoizedState=null),n.flags|=4;Ft(n),p=!1}else Fr!==null&&(Zc(Fr),Fr=null),p=!0;if(!p)return n.flags&65536?n:null}return(n.flags&128)!==0?(n.lanes=o,n):(l=l!==null,l!==(e!==null&&e.memoizedState!==null)&&l&&(n.child.flags|=8192,(n.mode&1)!==0&&(e===null||(st.current&1)!==0?_t===0&&(_t=3):eu())),n.updateQueue!==null&&(n.flags|=4),Ft(n),null);case 4:return no(),Uc(e,n),e===null&&Ho(n.stateNode.containerInfo),Ft(n),null;case 10:return hc(n.type._context),Ft(n),null;case 17:return er(n.type)&&ts(),Ft(n),null;case 19:if(et(st),p=n.memoizedState,p===null)return Ft(n),null;if(l=(n.flags&128)!==0,C=p.rendering,C===null)if(l)ri(p,!1);else{if(_t!==0||e!==null&&(e.flags&128)!==0)for(e=n.child;e!==null;){if(C=fs(e),C!==null){for(n.flags|=128,ri(p,!1),l=C.updateQueue,l!==null&&(n.updateQueue=l,n.flags|=4),n.subtreeFlags=0,l=o,o=n.child;o!==null;)p=o,e=l,p.flags&=14680066,C=p.alternate,C===null?(p.childLanes=0,p.lanes=e,p.child=null,p.subtreeFlags=0,p.memoizedProps=null,p.memoizedState=null,p.updateQueue=null,p.dependencies=null,p.stateNode=null):(p.childLanes=C.childLanes,p.lanes=C.lanes,p.child=C.child,p.subtreeFlags=0,p.deletions=null,p.memoizedProps=C.memoizedProps,p.memoizedState=C.memoizedState,p.updateQueue=C.updateQueue,p.type=C.type,e=C.dependencies,p.dependencies=e===null?null:{lanes:e.lanes,firstContext:e.firstContext}),o=o.sibling;return Ze(st,st.current&1|2),n.child}e=e.sibling}p.tail!==null&&We()>so&&(n.flags|=128,l=!0,ri(p,!1),n.lanes=4194304)}else{if(!l)if(e=fs(C),e!==null){if(n.flags|=128,l=!0,o=e.updateQueue,o!==null&&(n.updateQueue=o,n.flags|=4),ri(p,!0),p.tail===null&&p.tailMode==="hidden"&&!C.alternate&&!nt)return Ft(n),null}else 2*We()-p.renderingStartTime>so&&o!==1073741824&&(n.flags|=128,l=!0,ri(p,!1),n.lanes=4194304);p.isBackwards?(C.sibling=n.child,n.child=C):(o=p.last,o!==null?o.sibling=C:n.child=C,p.last=C)}return p.tail!==null?(n=p.tail,p.rendering=n,p.tail=n.sibling,p.renderingStartTime=We(),n.sibling=null,o=st.current,Ze(st,l?o&1|2:o&1),n):(Ft(n),null);case 22:case 23:return Xc(),l=n.memoizedState!==null,e!==null&&e.memoizedState!==null!==l&&(n.flags|=8192),l&&(n.mode&1)!==0?(pr&1073741824)!==0&&(Ft(n),n.subtreeFlags&6&&(n.flags|=8192)):Ft(n),null;case 24:return null;case 25:return null}throw Error(a(156,n.tag))}function ag(e,n){switch(lc(n),n.tag){case 1:return er(n.type)&&ts(),e=n.flags,e&65536?(n.flags=e&-65537|128,n):null;case 3:return no(),et(Xt),et(Dt),_c(),e=n.flags,(e&65536)!==0&&(e&128)===0?(n.flags=e&-65537|128,n):null;case 5:return wc(n),null;case 13:if(et(st),e=n.memoizedState,e!==null&&e.dehydrated!==null){if(n.alternate===null)throw Error(a(340));Xa()}return e=n.flags,e&65536?(n.flags=e&-65537|128,n):null;case 19:return et(st),null;case 4:return no(),null;case 10:return hc(n.type._context),null;case 22:case 23:return Xc(),null;case 24:return null;default:return null}}var _s=!1,Ot=!1,og=typeof WeakSet=="function"?WeakSet:Set,ce=null;function oo(e,n){var o=e.ref;if(o!==null)if(typeof o=="function")try{o(null)}catch(l){ut(e,n,l)}else o.current=null}function zc(e,n,o){try{o()}catch(l){ut(e,n,l)}}var Bp=!1;function ig(e,n){if(Xl=zi,e=Cf(),Wl(e)){if("selectionStart"in e)var o={start:e.selectionStart,end:e.selectionEnd};else e:{o=(o=e.ownerDocument)&&o.defaultView||window;var l=o.getSelection&&o.getSelection();if(l&&l.rangeCount!==0){o=l.anchorNode;var d=l.anchorOffset,p=l.focusNode;l=l.focusOffset;try{o.nodeType,p.nodeType}catch{o=null;break e}var C=0,b=-1,T=-1,z=0,Y=0,Z=e,K=null;t:for(;;){for(var se;Z!==o||d!==0&&Z.nodeType!==3||(b=C+d),Z!==p||l!==0&&Z.nodeType!==3||(T=C+l),Z.nodeType===3&&(C+=Z.nodeValue.length),(se=Z.firstChild)!==null;)K=Z,Z=se;for(;;){if(Z===e)break t;if(K===o&&++z===d&&(b=C),K===p&&++Y===l&&(T=C),(se=Z.nextSibling)!==null)break;Z=K,K=Z.parentNode}Z=se}o=b===-1||T===-1?null:{start:b,end:T}}else o=null}o=o||{start:0,end:0}}else o=null;for(ec={focusedElem:e,selectionRange:o},zi=!1,ce=n;ce!==null;)if(n=ce,e=n.child,(n.subtreeFlags&1028)!==0&&e!==null)e.return=n,ce=e;else for(;ce!==null;){n=ce;try{var fe=n.alternate;if((n.flags&1024)!==0)switch(n.tag){case 0:case 11:case 15:break;case 1:if(fe!==null){var he=fe.memoizedProps,ht=fe.memoizedState,D=n.stateNode,R=D.getSnapshotBeforeUpdate(n.elementType===n.type?he:Or(n.type,he),ht);D.__reactInternalSnapshotBeforeUpdate=R}break;case 3:var $=n.stateNode.containerInfo;$.nodeType===1?$.textContent="":$.nodeType===9&&$.documentElement&&$.removeChild($.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(a(163))}}catch(re){ut(n,n.return,re)}if(e=n.sibling,e!==null){e.return=n.return,ce=e;break}ce=n.return}return fe=Bp,Bp=!1,fe}function ni(e,n,o){var l=n.updateQueue;if(l=l!==null?l.lastEffect:null,l!==null){var d=l=l.next;do{if((d.tag&e)===e){var p=d.destroy;d.destroy=void 0,p!==void 0&&zc(n,o,p)}d=d.next}while(d!==l)}}function xs(e,n){if(n=n.updateQueue,n=n!==null?n.lastEffect:null,n!==null){var o=n=n.next;do{if((o.tag&e)===e){var l=o.create;o.destroy=l()}o=o.next}while(o!==n)}}function Bc(e){var n=e.ref;if(n!==null){var o=e.stateNode;switch(e.tag){case 5:e=o;break;default:e=o}typeof n=="function"?n(e):n.current=e}}function Vp(e){var n=e.alternate;n!==null&&(e.alternate=null,Vp(n)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(n=e.stateNode,n!==null&&(delete n[Xr],delete n[qo],delete n[ac],delete n[B2],delete n[V2])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function Hp(e){return e.tag===5||e.tag===3||e.tag===4}function Wp(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||Hp(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.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 Vc(e,n,o){var l=e.tag;if(l===5||l===6)e=e.stateNode,n?o.nodeType===8?o.parentNode.insertBefore(e,n):o.insertBefore(e,n):(o.nodeType===8?(n=o.parentNode,n.insertBefore(e,o)):(n=o,n.appendChild(e)),o=o._reactRootContainer,o!=null||n.onclick!==null||(n.onclick=Xi));else if(l!==4&&(e=e.child,e!==null))for(Vc(e,n,o),e=e.sibling;e!==null;)Vc(e,n,o),e=e.sibling}function Hc(e,n,o){var l=e.tag;if(l===5||l===6)e=e.stateNode,n?o.insertBefore(e,n):o.appendChild(e);else if(l!==4&&(e=e.child,e!==null))for(Hc(e,n,o),e=e.sibling;e!==null;)Hc(e,n,o),e=e.sibling}var At=null,Ur=!1;function Kn(e,n,o){for(o=o.child;o!==null;)qp(e,n,o),o=o.sibling}function qp(e,n,o){if(Wt&&typeof Wt.onCommitFiberUnmount=="function")try{Wt.onCommitFiberUnmount(pn,o)}catch{}switch(o.tag){case 5:Ot||oo(o,n);case 6:var l=At,d=Ur;At=null,Kn(e,n,o),At=l,Ur=d,At!==null&&(Ur?(e=At,o=o.stateNode,e.nodeType===8?e.parentNode.removeChild(o):e.removeChild(o)):At.removeChild(o.stateNode));break;case 18:At!==null&&(Ur?(e=At,o=o.stateNode,e.nodeType===8?nc(e.parentNode,o):e.nodeType===1&&nc(e,o),Mo(e)):nc(At,o.stateNode));break;case 4:l=At,d=Ur,At=o.stateNode.containerInfo,Ur=!0,Kn(e,n,o),At=l,Ur=d;break;case 0:case 11:case 14:case 15:if(!Ot&&(l=o.updateQueue,l!==null&&(l=l.lastEffect,l!==null))){d=l=l.next;do{var p=d,C=p.destroy;p=p.tag,C!==void 0&&((p&2)!==0||(p&4)!==0)&&zc(o,n,C),d=d.next}while(d!==l)}Kn(e,n,o);break;case 1:if(!Ot&&(oo(o,n),l=o.stateNode,typeof l.componentWillUnmount=="function"))try{l.props=o.memoizedProps,l.state=o.memoizedState,l.componentWillUnmount()}catch(b){ut(o,n,b)}Kn(e,n,o);break;case 21:Kn(e,n,o);break;case 22:o.mode&1?(Ot=(l=Ot)||o.memoizedState!==null,Kn(e,n,o),Ot=l):Kn(e,n,o);break;default:Kn(e,n,o)}}function Kp(e){var n=e.updateQueue;if(n!==null){e.updateQueue=null;var o=e.stateNode;o===null&&(o=e.stateNode=new og),n.forEach(function(l){var d=mg.bind(null,e,l);o.has(l)||(o.add(l),l.then(d,d))})}}function zr(e,n){var o=n.deletions;if(o!==null)for(var l=0;l<o.length;l++){var d=o[l];try{var p=e,C=n,b=C;e:for(;b!==null;){switch(b.tag){case 5:At=b.stateNode,Ur=!1;break e;case 3:At=b.stateNode.containerInfo,Ur=!0;break e;case 4:At=b.stateNode.containerInfo,Ur=!0;break e}b=b.return}if(At===null)throw Error(a(160));qp(p,C,d),At=null,Ur=!1;var T=d.alternate;T!==null&&(T.return=null),d.return=null}catch(z){ut(d,n,z)}}if(n.subtreeFlags&12854)for(n=n.child;n!==null;)Gp(n,e),n=n.sibling}function Gp(e,n){var o=e.alternate,l=e.flags;switch(e.tag){case 0:case 11:case 14:case 15:if(zr(n,e),rn(e),l&4){try{ni(3,e,e.return),xs(3,e)}catch(he){ut(e,e.return,he)}try{ni(5,e,e.return)}catch(he){ut(e,e.return,he)}}break;case 1:zr(n,e),rn(e),l&512&&o!==null&&oo(o,o.return);break;case 5:if(zr(n,e),rn(e),l&512&&o!==null&&oo(o,o.return),e.flags&32){var d=e.stateNode;try{Zt(d,"")}catch(he){ut(e,e.return,he)}}if(l&4&&(d=e.stateNode,d!=null)){var p=e.memoizedProps,C=o!==null?o.memoizedProps:p,b=e.type,T=e.updateQueue;if(e.updateQueue=null,T!==null)try{b==="input"&&p.type==="radio"&&p.name!=null&&Ge(d,p),Oa(b,C);var z=Oa(b,p);for(C=0;C<T.length;C+=2){var Y=T[C],Z=T[C+1];Y==="style"?xr(d,Z):Y==="dangerouslySetInnerHTML"?Et(d,Z):Y==="children"?Zt(d,Z):B(d,Y,Z,z)}switch(b){case"input":jt(d,p);break;case"textarea":it(d,p);break;case"select":var K=d._wrapperState.wasMultiple;d._wrapperState.wasMultiple=!!p.multiple;var se=p.value;se!=null?ir(d,!!p.multiple,se,!1):K!==!!p.multiple&&(p.defaultValue!=null?ir(d,!!p.multiple,p.defaultValue,!0):ir(d,!!p.multiple,p.multiple?[]:"",!1))}d[qo]=p}catch(he){ut(e,e.return,he)}}break;case 6:if(zr(n,e),rn(e),l&4){if(e.stateNode===null)throw Error(a(162));d=e.stateNode,p=e.memoizedProps;try{d.nodeValue=p}catch(he){ut(e,e.return,he)}}break;case 3:if(zr(n,e),rn(e),l&4&&o!==null&&o.memoizedState.isDehydrated)try{Mo(n.containerInfo)}catch(he){ut(e,e.return,he)}break;case 4:zr(n,e),rn(e);break;case 13:zr(n,e),rn(e),d=e.child,d.flags&8192&&(p=d.memoizedState!==null,d.stateNode.isHidden=p,!p||d.alternate!==null&&d.alternate.memoizedState!==null||(Kc=We())),l&4&&Kp(e);break;case 22:if(Y=o!==null&&o.memoizedState!==null,e.mode&1?(Ot=(z=Ot)||Y,zr(n,e),Ot=z):zr(n,e),rn(e),l&8192){if(z=e.memoizedState!==null,(e.stateNode.isHidden=z)&&!Y&&(e.mode&1)!==0)for(ce=e,Y=e.child;Y!==null;){for(Z=ce=Y;ce!==null;){switch(K=ce,se=K.child,K.tag){case 0:case 11:case 14:case 15:ni(4,K,K.return);break;case 1:oo(K,K.return);var fe=K.stateNode;if(typeof fe.componentWillUnmount=="function"){l=K,o=K.return;try{n=l,fe.props=n.memoizedProps,fe.state=n.memoizedState,fe.componentWillUnmount()}catch(he){ut(l,o,he)}}break;case 5:oo(K,K.return);break;case 22:if(K.memoizedState!==null){Zp(Z);continue}}se!==null?(se.return=K,ce=se):Zp(Z)}Y=Y.sibling}e:for(Y=null,Z=e;;){if(Z.tag===5){if(Y===null){Y=Z;try{d=Z.stateNode,z?(p=d.style,typeof p.setProperty=="function"?p.setProperty("display","none","important"):p.display="none"):(b=Z.stateNode,T=Z.memoizedProps.style,C=T!=null&&T.hasOwnProperty("display")?T.display:null,b.style.display=ji("display",C))}catch(he){ut(e,e.return,he)}}}else if(Z.tag===6){if(Y===null)try{Z.stateNode.nodeValue=z?"":Z.memoizedProps}catch(he){ut(e,e.return,he)}}else if((Z.tag!==22&&Z.tag!==23||Z.memoizedState===null||Z===e)&&Z.child!==null){Z.child.return=Z,Z=Z.child;continue}if(Z===e)break e;for(;Z.sibling===null;){if(Z.return===null||Z.return===e)break e;Y===Z&&(Y=null),Z=Z.return}Y===Z&&(Y=null),Z.sibling.return=Z.return,Z=Z.sibling}}break;case 19:zr(n,e),rn(e),l&4&&Kp(e);break;case 21:break;default:zr(n,e),rn(e)}}function rn(e){var n=e.flags;if(n&2){try{e:{for(var o=e.return;o!==null;){if(Hp(o)){var l=o;break e}o=o.return}throw Error(a(160))}switch(l.tag){case 5:var d=l.stateNode;l.flags&32&&(Zt(d,""),l.flags&=-33);var p=Wp(e);Hc(e,p,d);break;case 3:case 4:var C=l.stateNode.containerInfo,b=Wp(e);Vc(e,b,C);break;default:throw Error(a(161))}}catch(T){ut(e,e.return,T)}e.flags&=-3}n&4096&&(e.flags&=-4097)}function sg(e,n,o){ce=e,Yp(e)}function Yp(e,n,o){for(var l=(e.mode&1)!==0;ce!==null;){var d=ce,p=d.child;if(d.tag===22&&l){var C=d.memoizedState!==null||_s;if(!C){var b=d.alternate,T=b!==null&&b.memoizedState!==null||Ot;b=_s;var z=Ot;if(_s=C,(Ot=T)&&!z)for(ce=d;ce!==null;)C=ce,T=C.child,C.tag===22&&C.memoizedState!==null?Jp(d):T!==null?(T.return=C,ce=T):Jp(d);for(;p!==null;)ce=p,Yp(p),p=p.sibling;ce=d,_s=b,Ot=z}Qp(e)}else(d.subtreeFlags&8772)!==0&&p!==null?(p.return=d,ce=p):Qp(e)}}function Qp(e){for(;ce!==null;){var n=ce;if((n.flags&8772)!==0){var o=n.alternate;try{if((n.flags&8772)!==0)switch(n.tag){case 0:case 11:case 15:Ot||xs(5,n);break;case 1:var l=n.stateNode;if(n.flags&4&&!Ot)if(o===null)l.componentDidMount();else{var d=n.elementType===n.type?o.memoizedProps:Or(n.type,o.memoizedProps);l.componentDidUpdate(d,o.memoizedState,l.__reactInternalSnapshotBeforeUpdate)}var p=n.updateQueue;p!==null&&Zf(n,p,l);break;case 3:var C=n.updateQueue;if(C!==null){if(o=null,n.child!==null)switch(n.child.tag){case 5:o=n.child.stateNode;break;case 1:o=n.child.stateNode}Zf(n,C,o)}break;case 5:var b=n.stateNode;if(o===null&&n.flags&4){o=b;var T=n.memoizedProps;switch(n.type){case"button":case"input":case"select":case"textarea":T.autoFocus&&o.focus();break;case"img":T.src&&(o.src=T.src)}}break;case 6:break;case 4:break;case 12:break;case 13:if(n.memoizedState===null){var z=n.alternate;if(z!==null){var Y=z.memoizedState;if(Y!==null){var Z=Y.dehydrated;Z!==null&&Mo(Z)}}}break;case 19:case 17:case 21:case 22:case 23:case 25:break;default:throw Error(a(163))}Ot||n.flags&512&&Bc(n)}catch(K){ut(n,n.return,K)}}if(n===e){ce=null;break}if(o=n.sibling,o!==null){o.return=n.return,ce=o;break}ce=n.return}}function Zp(e){for(;ce!==null;){var n=ce;if(n===e){ce=null;break}var o=n.sibling;if(o!==null){o.return=n.return,ce=o;break}ce=n.return}}function Jp(e){for(;ce!==null;){var n=ce;try{switch(n.tag){case 0:case 11:case 15:var o=n.return;try{xs(4,n)}catch(T){ut(n,o,T)}break;case 1:var l=n.stateNode;if(typeof l.componentDidMount=="function"){var d=n.return;try{l.componentDidMount()}catch(T){ut(n,d,T)}}var p=n.return;try{Bc(n)}catch(T){ut(n,p,T)}break;case 5:var C=n.return;try{Bc(n)}catch(T){ut(n,C,T)}}}catch(T){ut(n,n.return,T)}if(n===e){ce=null;break}var b=n.sibling;if(b!==null){b.return=n.return,ce=b;break}ce=n.return}}var lg=Math.ceil,Ss=U.ReactCurrentDispatcher,Wc=U.ReactCurrentOwner,Tr=U.ReactCurrentBatchConfig,ze=0,It=null,vt=null,Nt=0,pr=0,io=Bn(0),_t=0,ai=null,wa=0,Es=0,qc=0,oi=null,rr=null,Kc=0,so=1/0,Sn=null,ks=!1,Gc=null,Gn=null,bs=!1,Yn=null,Is=0,ii=0,Yc=null,Ts=-1,Ps=0;function Kt(){return(ze&6)!==0?We():Ts!==-1?Ts:Ts=We()}function Qn(e){return(e.mode&1)===0?1:(ze&2)!==0&&Nt!==0?Nt&-Nt:W2.transition!==null?(Ps===0&&(Ps=Hd()),Ps):(e=qe,e!==0||(e=window.event,e=e===void 0?16:Xd(e.type)),e)}function Br(e,n,o,l){if(50<ii)throw ii=0,Yc=null,Error(a(185));Ro(e,o,l),((ze&2)===0||e!==It)&&(e===It&&((ze&2)===0&&(Es|=o),_t===4&&Zn(e,Nt)),nr(e,l),o===1&&ze===0&&(n.mode&1)===0&&(so=We()+500,ns&&Hn()))}function nr(e,n){var o=e.callbackNode;W0(e,n);var l=Fi(e,e===It?Nt:0);if(l===0)o!==null&&kt(o),e.callbackNode=null,e.callbackPriority=0;else if(n=l&-l,e.callbackPriority!==n){if(o!=null&&kt(o),n===1)e.tag===0?H2(eh.bind(null,e)):Of(eh.bind(null,e)),U2(function(){(ze&6)===0&&Hn()}),o=null;else{switch(Wd(l)){case 1:o=Sr;break;case 4:o=cr;break;case 16:o=Ln;break;case 536870912:o=Jr;break;default:o=Ln}o=lh(o,Xp.bind(null,e))}e.callbackPriority=n,e.callbackNode=o}}function Xp(e,n){if(Ts=-1,Ps=0,(ze&6)!==0)throw Error(a(327));var o=e.callbackNode;if(lo()&&e.callbackNode!==o)return null;var l=Fi(e,e===It?Nt:0);if(l===0)return null;if((l&30)!==0||(l&e.expiredLanes)!==0||n)n=Rs(e,l);else{n=l;var d=ze;ze|=2;var p=rh();(It!==e||Nt!==n)&&(Sn=null,so=We()+500,_a(e,n));do try{dg();break}catch(b){th(e,b)}while(!0);pc(),Ss.current=p,ze=d,vt!==null?n=0:(It=null,Nt=0,n=_t)}if(n!==0){if(n===2&&(d=Pl(e),d!==0&&(l=d,n=Qc(e,d))),n===1)throw o=ai,_a(e,0),Zn(e,l),nr(e,We()),o;if(n===6)Zn(e,l);else{if(d=e.current.alternate,(l&30)===0&&!cg(d)&&(n=Rs(e,l),n===2&&(p=Pl(e),p!==0&&(l=p,n=Qc(e,p))),n===1))throw o=ai,_a(e,0),Zn(e,l),nr(e,We()),o;switch(e.finishedWork=d,e.finishedLanes=l,n){case 0:case 1:throw Error(a(345));case 2:xa(e,rr,Sn);break;case 3:if(Zn(e,l),(l&130023424)===l&&(n=Kc+500-We(),10<n)){if(Fi(e,0)!==0)break;if(d=e.suspendedLanes,(d&l)!==l){Kt(),e.pingedLanes|=e.suspendedLanes&d;break}e.timeoutHandle=rc(xa.bind(null,e,rr,Sn),n);break}xa(e,rr,Sn);break;case 4:if(Zn(e,l),(l&4194240)===l)break;for(n=e.eventTimes,d=-1;0<l;){var C=31-Ye(l);p=1<<C,C=n[C],C>d&&(d=C),l&=~p}if(l=d,l=We()-l,l=(120>l?120:480>l?480:1080>l?1080:1920>l?1920:3e3>l?3e3:4320>l?4320:1960*lg(l/1960))-l,10<l){e.timeoutHandle=rc(xa.bind(null,e,rr,Sn),l);break}xa(e,rr,Sn);break;case 5:xa(e,rr,Sn);break;default:throw Error(a(329))}}}return nr(e,We()),e.callbackNode===o?Xp.bind(null,e):null}function Qc(e,n){var o=oi;return e.current.memoizedState.isDehydrated&&(_a(e,n).flags|=256),e=Rs(e,n),e!==2&&(n=rr,rr=o,n!==null&&Zc(n)),e}function Zc(e){rr===null?rr=e:rr.push.apply(rr,e)}function cg(e){for(var n=e;;){if(n.flags&16384){var o=n.updateQueue;if(o!==null&&(o=o.stores,o!==null))for(var l=0;l<o.length;l++){var d=o[l],p=d.getSnapshot;d=d.value;try{if(!$r(p(),d))return!1}catch{return!1}}}if(o=n.child,n.subtreeFlags&16384&&o!==null)o.return=n,n=o;else{if(n===e)break;for(;n.sibling===null;){if(n.return===null||n.return===e)return!0;n=n.return}n.sibling.return=n.return,n=n.sibling}}return!0}function Zn(e,n){for(n&=~qc,n&=~Es,e.suspendedLanes|=n,e.pingedLanes&=~n,e=e.expirationTimes;0<n;){var o=31-Ye(n),l=1<<o;e[o]=-1,n&=~l}}function eh(e){if((ze&6)!==0)throw Error(a(327));lo();var n=Fi(e,0);if((n&1)===0)return nr(e,We()),null;var o=Rs(e,n);if(e.tag!==0&&o===2){var l=Pl(e);l!==0&&(n=l,o=Qc(e,l))}if(o===1)throw o=ai,_a(e,0),Zn(e,n),nr(e,We()),o;if(o===6)throw Error(a(345));return e.finishedWork=e.current.alternate,e.finishedLanes=n,xa(e,rr,Sn),nr(e,We()),null}function Jc(e,n){var o=ze;ze|=1;try{return e(n)}finally{ze=o,ze===0&&(so=We()+500,ns&&Hn())}}function Ca(e){Yn!==null&&Yn.tag===0&&(ze&6)===0&&lo();var n=ze;ze|=1;var o=Tr.transition,l=qe;try{if(Tr.transition=null,qe=1,e)return e()}finally{qe=l,Tr.transition=o,ze=n,(ze&6)===0&&Hn()}}function Xc(){pr=io.current,et(io)}function _a(e,n){e.finishedWork=null,e.finishedLanes=0;var o=e.timeoutHandle;if(o!==-1&&(e.timeoutHandle=-1,O2(o)),vt!==null)for(o=vt.return;o!==null;){var l=o;switch(lc(l),l.tag){case 1:l=l.type.childContextTypes,l!=null&&ts();break;case 3:no(),et(Xt),et(Dt),_c();break;case 5:wc(l);break;case 4:no();break;case 13:et(st);break;case 19:et(st);break;case 10:hc(l.type._context);break;case 22:case 23:Xc()}o=o.return}if(It=e,vt=e=Jn(e.current,null),Nt=pr=n,_t=0,ai=null,qc=Es=wa=0,rr=oi=null,ga!==null){for(n=0;n<ga.length;n++)if(o=ga[n],l=o.interleaved,l!==null){o.interleaved=null;var d=l.next,p=o.pending;if(p!==null){var C=p.next;p.next=d,l.next=C}o.pending=l}ga=null}return e}function th(e,n){do{var o=vt;try{if(pc(),ps.current=ys,hs){for(var l=lt.memoizedState;l!==null;){var d=l.queue;d!==null&&(d.pending=null),l=l.next}hs=!1}if(va=0,bt=Ct=lt=null,Jo=!1,Xo=0,Wc.current=null,o===null||o.return===null){_t=1,ai=n,vt=null;break}e:{var p=e,C=o.return,b=o,T=n;if(n=Nt,b.flags|=32768,T!==null&&typeof T=="object"&&typeof T.then=="function"){var z=T,Y=b,Z=Y.tag;if((Y.mode&1)===0&&(Z===0||Z===11||Z===15)){var K=Y.alternate;K?(Y.updateQueue=K.updateQueue,Y.memoizedState=K.memoizedState,Y.lanes=K.lanes):(Y.updateQueue=null,Y.memoizedState=null)}var se=bp(C);if(se!==null){se.flags&=-257,Ip(se,C,b,p,n),se.mode&1&&kp(p,z,n),n=se,T=z;var fe=n.updateQueue;if(fe===null){var he=new Set;he.add(T),n.updateQueue=he}else fe.add(T);break e}else{if((n&1)===0){kp(p,z,n),eu();break e}T=Error(a(426))}}else if(nt&&b.mode&1){var ht=bp(C);if(ht!==null){(ht.flags&65536)===0&&(ht.flags|=256),Ip(ht,C,b,p,n),dc(ao(T,b));break e}}p=T=ao(T,b),_t!==4&&(_t=2),oi===null?oi=[p]:oi.push(p),p=C;do{switch(p.tag){case 3:p.flags|=65536,n&=-n,p.lanes|=n;var D=Sp(p,T,n);Qf(p,D);break e;case 1:b=T;var R=p.type,$=p.stateNode;if((p.flags&128)===0&&(typeof R.getDerivedStateFromError=="function"||$!==null&&typeof $.componentDidCatch=="function"&&(Gn===null||!Gn.has($)))){p.flags|=65536,n&=-n,p.lanes|=n;var re=Ep(p,b,n);Qf(p,re);break e}}p=p.return}while(p!==null)}ah(o)}catch(ge){n=ge,vt===o&&o!==null&&(vt=o=o.return);continue}break}while(!0)}function rh(){var e=Ss.current;return Ss.current=ys,e===null?ys:e}function eu(){(_t===0||_t===3||_t===2)&&(_t=4),It===null||(wa&268435455)===0&&(Es&268435455)===0||Zn(It,Nt)}function Rs(e,n){var o=ze;ze|=2;var l=rh();(It!==e||Nt!==n)&&(Sn=null,_a(e,n));do try{ug();break}catch(d){th(e,d)}while(!0);if(pc(),ze=o,Ss.current=l,vt!==null)throw Error(a(261));return It=null,Nt=0,_t}function ug(){for(;vt!==null;)nh(vt)}function dg(){for(;vt!==null&&!He();)nh(vt)}function nh(e){var n=sh(e.alternate,e,pr);e.memoizedProps=e.pendingProps,n===null?ah(e):vt=n,Wc.current=null}function ah(e){var n=e;do{var o=n.alternate;if(e=n.return,(n.flags&32768)===0){if(o=ng(o,n,pr),o!==null){vt=o;return}}else{if(o=ag(o,n),o!==null){o.flags&=32767,vt=o;return}if(e!==null)e.flags|=32768,e.subtreeFlags=0,e.deletions=null;else{_t=6,vt=null;return}}if(n=n.sibling,n!==null){vt=n;return}vt=n=e}while(n!==null);_t===0&&(_t=5)}function xa(e,n,o){var l=qe,d=Tr.transition;try{Tr.transition=null,qe=1,fg(e,n,o,l)}finally{Tr.transition=d,qe=l}return null}function fg(e,n,o,l){do lo();while(Yn!==null);if((ze&6)!==0)throw Error(a(327));o=e.finishedWork;var d=e.finishedLanes;if(o===null)return null;if(e.finishedWork=null,e.finishedLanes=0,o===e.current)throw Error(a(177));e.callbackNode=null,e.callbackPriority=0;var p=o.lanes|o.childLanes;if(q0(e,p),e===It&&(vt=It=null,Nt=0),(o.subtreeFlags&2064)===0&&(o.flags&2064)===0||bs||(bs=!0,lh(Ln,function(){return lo(),null})),p=(o.flags&15990)!==0,(o.subtreeFlags&15990)!==0||p){p=Tr.transition,Tr.transition=null;var C=qe;qe=1;var b=ze;ze|=4,Wc.current=null,ig(e,o),Gp(o,e),N2(ec),zi=!!Xl,ec=Xl=null,e.current=o,sg(o),Jt(),ze=b,qe=C,Tr.transition=p}else e.current=o;if(bs&&(bs=!1,Yn=e,Is=d),p=e.pendingLanes,p===0&&(Gn=null),Fe(o.stateNode),nr(e,We()),n!==null)for(l=e.onRecoverableError,o=0;o<n.length;o++)d=n[o],l(d.value,{componentStack:d.stack,digest:d.digest});if(ks)throw ks=!1,e=Gc,Gc=null,e;return(Is&1)!==0&&e.tag!==0&&lo(),p=e.pendingLanes,(p&1)!==0?e===Yc?ii++:(ii=0,Yc=e):ii=0,Hn(),null}function lo(){if(Yn!==null){var e=Wd(Is),n=Tr.transition,o=qe;try{if(Tr.transition=null,qe=16>e?16:e,Yn===null)var l=!1;else{if(e=Yn,Yn=null,Is=0,(ze&6)!==0)throw Error(a(331));var d=ze;for(ze|=4,ce=e.current;ce!==null;){var p=ce,C=p.child;if((ce.flags&16)!==0){var b=p.deletions;if(b!==null){for(var T=0;T<b.length;T++){var z=b[T];for(ce=z;ce!==null;){var Y=ce;switch(Y.tag){case 0:case 11:case 15:ni(8,Y,p)}var Z=Y.child;if(Z!==null)Z.return=Y,ce=Z;else for(;ce!==null;){Y=ce;var K=Y.sibling,se=Y.return;if(Vp(Y),Y===z){ce=null;break}if(K!==null){K.return=se,ce=K;break}ce=se}}}var fe=p.alternate;if(fe!==null){var he=fe.child;if(he!==null){fe.child=null;do{var ht=he.sibling;he.sibling=null,he=ht}while(he!==null)}}ce=p}}if((p.subtreeFlags&2064)!==0&&C!==null)C.return=p,ce=C;else e:for(;ce!==null;){if(p=ce,(p.flags&2048)!==0)switch(p.tag){case 0:case 11:case 15:ni(9,p,p.return)}var D=p.sibling;if(D!==null){D.return=p.return,ce=D;break e}ce=p.return}}var R=e.current;for(ce=R;ce!==null;){C=ce;var $=C.child;if((C.subtreeFlags&2064)!==0&&$!==null)$.return=C,ce=$;else e:for(C=R;ce!==null;){if(b=ce,(b.flags&2048)!==0)try{switch(b.tag){case 0:case 11:case 15:xs(9,b)}}catch(ge){ut(b,b.return,ge)}if(b===C){ce=null;break e}var re=b.sibling;if(re!==null){re.return=b.return,ce=re;break e}ce=b.return}}if(ze=d,Hn(),Wt&&typeof Wt.onPostCommitFiberRoot=="function")try{Wt.onPostCommitFiberRoot(pn,e)}catch{}l=!0}return l}finally{qe=o,Tr.transition=n}}return!1}function oh(e,n,o){n=ao(o,n),n=Sp(e,n,1),e=qn(e,n,1),n=Kt(),e!==null&&(Ro(e,1,n),nr(e,n))}function ut(e,n,o){if(e.tag===3)oh(e,e,o);else for(;n!==null;){if(n.tag===3){oh(n,e,o);break}else if(n.tag===1){var l=n.stateNode;if(typeof n.type.getDerivedStateFromError=="function"||typeof l.componentDidCatch=="function"&&(Gn===null||!Gn.has(l))){e=ao(o,e),e=Ep(n,e,1),n=qn(n,e,1),e=Kt(),n!==null&&(Ro(n,1,e),nr(n,e));break}}n=n.return}}function pg(e,n,o){var l=e.pingCache;l!==null&&l.delete(n),n=Kt(),e.pingedLanes|=e.suspendedLanes&o,It===e&&(Nt&o)===o&&(_t===4||_t===3&&(Nt&130023424)===Nt&&500>We()-Kc?_a(e,0):qc|=o),nr(e,n)}function ih(e,n){n===0&&((e.mode&1)===0?n=1:(n=ua,ua<<=1,(ua&130023424)===0&&(ua=4194304)));var o=Kt();e=Cn(e,n),e!==null&&(Ro(e,n,o),nr(e,o))}function hg(e){var n=e.memoizedState,o=0;n!==null&&(o=n.retryLane),ih(e,o)}function mg(e,n){var o=0;switch(e.tag){case 13:var l=e.stateNode,d=e.memoizedState;d!==null&&(o=d.retryLane);break;case 19:l=e.stateNode;break;default:throw Error(a(314))}l!==null&&l.delete(n),ih(e,o)}var sh;sh=function(e,n,o){if(e!==null)if(e.memoizedProps!==n.pendingProps||Xt.current)tr=!0;else{if((e.lanes&o)===0&&(n.flags&128)===0)return tr=!1,rg(e,n,o);tr=(e.flags&131072)!==0}else tr=!1,nt&&(n.flags&1048576)!==0&&Uf(n,os,n.index);switch(n.lanes=0,n.tag){case 2:var l=n.type;Cs(e,n),e=n.pendingProps;var d=Qa(n,Dt.current);ro(n,o),d=Ec(null,n,l,e,d,o);var p=kc();return n.flags|=1,typeof d=="object"&&d!==null&&typeof d.render=="function"&&d.$$typeof===void 0?(n.tag=1,n.memoizedState=null,n.updateQueue=null,er(l)?(p=!0,rs(n)):p=!1,n.memoizedState=d.state!==null&&d.state!==void 0?d.state:null,yc(n),d.updater=vs,n.stateNode=d,d._reactInternals=n,Ac(n,l,e,o),n=Mc(null,n,l,!0,p,o)):(n.tag=0,nt&&p&&sc(n),qt(null,n,d,o),n=n.child),n;case 16:l=n.elementType;e:{switch(Cs(e,n),e=n.pendingProps,d=l._init,l=d(l._payload),n.type=l,d=n.tag=yg(l),e=Or(l,e),d){case 0:n=jc(null,n,l,e,o);break e;case 1:n=Lp(null,n,l,e,o);break e;case 11:n=Tp(null,n,l,e,o);break e;case 14:n=Pp(null,n,l,Or(l.type,e),o);break e}throw Error(a(306,l,""))}return n;case 0:return l=n.type,d=n.pendingProps,d=n.elementType===l?d:Or(l,d),jc(e,n,l,d,o);case 1:return l=n.type,d=n.pendingProps,d=n.elementType===l?d:Or(l,d),Lp(e,n,l,d,o);case 3:e:{if(jp(n),e===null)throw Error(a(387));l=n.pendingProps,p=n.memoizedState,d=p.element,Yf(e,n),ds(n,l,null,o);var C=n.memoizedState;if(l=C.element,p.isDehydrated)if(p={element:l,isDehydrated:!1,cache:C.cache,pendingSuspenseBoundaries:C.pendingSuspenseBoundaries,transitions:C.transitions},n.updateQueue.baseState=p,n.memoizedState=p,n.flags&256){d=ao(Error(a(423)),n),n=Mp(e,n,l,o,d);break e}else if(l!==d){d=ao(Error(a(424)),n),n=Mp(e,n,l,o,d);break e}else for(fr=zn(n.stateNode.containerInfo.firstChild),dr=n,nt=!0,Fr=null,o=Kf(n,null,l,o),n.child=o;o;)o.flags=o.flags&-3|4096,o=o.sibling;else{if(Xa(),l===d){n=xn(e,n,o);break e}qt(e,n,l,o)}n=n.child}return n;case 5:return Jf(n),e===null&&uc(n),l=n.type,d=n.pendingProps,p=e!==null?e.memoizedProps:null,C=d.children,tc(l,d)?C=null:p!==null&&tc(l,p)&&(n.flags|=32),Np(e,n),qt(e,n,C,o),n.child;case 6:return e===null&&uc(n),null;case 13:return Dp(e,n,o);case 4:return vc(n,n.stateNode.containerInfo),l=n.pendingProps,e===null?n.child=eo(n,null,l,o):qt(e,n,l,o),n.child;case 11:return l=n.type,d=n.pendingProps,d=n.elementType===l?d:Or(l,d),Tp(e,n,l,d,o);case 7:return qt(e,n,n.pendingProps,o),n.child;case 8:return qt(e,n,n.pendingProps.children,o),n.child;case 12:return qt(e,n,n.pendingProps.children,o),n.child;case 10:e:{if(l=n.type._context,d=n.pendingProps,p=n.memoizedProps,C=d.value,Ze(ls,l._currentValue),l._currentValue=C,p!==null)if($r(p.value,C)){if(p.children===d.children&&!Xt.current){n=xn(e,n,o);break e}}else for(p=n.child,p!==null&&(p.return=n);p!==null;){var b=p.dependencies;if(b!==null){C=p.child;for(var T=b.firstContext;T!==null;){if(T.context===l){if(p.tag===1){T=_n(-1,o&-o),T.tag=2;var z=p.updateQueue;if(z!==null){z=z.shared;var Y=z.pending;Y===null?T.next=T:(T.next=Y.next,Y.next=T),z.pending=T}}p.lanes|=o,T=p.alternate,T!==null&&(T.lanes|=o),mc(p.return,o,n),b.lanes|=o;break}T=T.next}}else if(p.tag===10)C=p.type===n.type?null:p.child;else if(p.tag===18){if(C=p.return,C===null)throw Error(a(341));C.lanes|=o,b=C.alternate,b!==null&&(b.lanes|=o),mc(C,o,n),C=p.sibling}else C=p.child;if(C!==null)C.return=p;else for(C=p;C!==null;){if(C===n){C=null;break}if(p=C.sibling,p!==null){p.return=C.return,C=p;break}C=C.return}p=C}qt(e,n,d.children,o),n=n.child}return n;case 9:return d=n.type,l=n.pendingProps.children,ro(n,o),d=br(d),l=l(d),n.flags|=1,qt(e,n,l,o),n.child;case 14:return l=n.type,d=Or(l,n.pendingProps),d=Or(l.type,d),Pp(e,n,l,d,o);case 15:return Rp(e,n,n.type,n.pendingProps,o);case 17:return l=n.type,d=n.pendingProps,d=n.elementType===l?d:Or(l,d),Cs(e,n),n.tag=1,er(l)?(e=!0,rs(n)):e=!1,ro(n,o),_p(n,l,d),Ac(n,l,d,o),Mc(null,n,l,!0,e,o);case 19:return Fp(e,n,o);case 22:return Ap(e,n,o)}throw Error(a(156,n.tag))};function lh(e,n){return pt(e,n)}function gg(e,n,o,l){this.tag=e,this.key=o,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=n,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=l,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Pr(e,n,o,l){return new gg(e,n,o,l)}function tu(e){return e=e.prototype,!(!e||!e.isReactComponent)}function yg(e){if(typeof e=="function")return tu(e)?1:0;if(e!=null){if(e=e.$$typeof,e===Re)return 11;if(e===Me)return 14}return 2}function Jn(e,n){var o=e.alternate;return o===null?(o=Pr(e.tag,n,e.key,e.mode),o.elementType=e.elementType,o.type=e.type,o.stateNode=e.stateNode,o.alternate=e,e.alternate=o):(o.pendingProps=n,o.type=e.type,o.flags=0,o.subtreeFlags=0,o.deletions=null),o.flags=e.flags&14680064,o.childLanes=e.childLanes,o.lanes=e.lanes,o.child=e.child,o.memoizedProps=e.memoizedProps,o.memoizedState=e.memoizedState,o.updateQueue=e.updateQueue,n=e.dependencies,o.dependencies=n===null?null:{lanes:n.lanes,firstContext:n.firstContext},o.sibling=e.sibling,o.index=e.index,o.ref=e.ref,o}function As(e,n,o,l,d,p){var C=2;if(l=e,typeof e=="function")tu(e)&&(C=1);else if(typeof e=="string")C=5;else e:switch(e){case k:return Sa(o.children,d,p,n);case Q:C=8,d|=8;break;case X:return e=Pr(12,o,n,d|2),e.elementType=X,e.lanes=p,e;case Ue:return e=Pr(13,o,n,d),e.elementType=Ue,e.lanes=p,e;case ve:return e=Pr(19,o,n,d),e.elementType=ve,e.lanes=p,e;case Se:return Ns(o,d,p,n);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case ue:C=10;break e;case xe:C=9;break e;case Re:C=11;break e;case Me:C=14;break e;case ke:C=16,l=null;break e}throw Error(a(130,e==null?e:typeof e,""))}return n=Pr(C,o,n,d),n.elementType=e,n.type=l,n.lanes=p,n}function Sa(e,n,o,l){return e=Pr(7,e,l,n),e.lanes=o,e}function Ns(e,n,o,l){return e=Pr(22,e,l,n),e.elementType=Se,e.lanes=o,e.stateNode={isHidden:!1},e}function ru(e,n,o){return e=Pr(6,e,null,n),e.lanes=o,e}function nu(e,n,o){return n=Pr(4,e.children!==null?e.children:[],e.key,n),n.lanes=o,n.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},n}function vg(e,n,o,l,d){this.tag=n,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Rl(0),this.expirationTimes=Rl(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Rl(0),this.identifierPrefix=l,this.onRecoverableError=d,this.mutableSourceEagerHydrationData=null}function au(e,n,o,l,d,p,C,b,T){return e=new vg(e,n,o,b,T),n===1?(n=1,p===!0&&(n|=8)):n=0,p=Pr(3,null,null,n),e.current=p,p.stateNode=e,p.memoizedState={element:l,isDehydrated:o,cache:null,transitions:null,pendingSuspenseBoundaries:null},yc(p),e}function wg(e,n,o){var l=3<arguments.length&&arguments[3]!==void 0?arguments[3]:null;return{$$typeof:H,key:l==null?null:""+l,children:e,containerInfo:n,implementation:o}}function ch(e){if(!e)return Vn;e=e._reactInternals;e:{if(pe(e)!==e||e.tag!==1)throw Error(a(170));var n=e;do{switch(n.tag){case 3:n=n.stateNode.context;break e;case 1:if(er(n.type)){n=n.stateNode.__reactInternalMemoizedMergedChildContext;break e}}n=n.return}while(n!==null);throw Error(a(171))}if(e.tag===1){var o=e.type;if(er(o))return $f(e,o,n)}return n}function uh(e,n,o,l,d,p,C,b,T){return e=au(o,l,!0,e,d,p,C,b,T),e.context=ch(null),o=e.current,l=Kt(),d=Qn(o),p=_n(l,d),p.callback=n??null,qn(o,p,d),e.current.lanes=d,Ro(e,d,l),nr(e,l),e}function Ls(e,n,o,l){var d=n.current,p=Kt(),C=Qn(d);return o=ch(o),n.context===null?n.context=o:n.pendingContext=o,n=_n(p,C),n.payload={element:e},l=l===void 0?null:l,l!==null&&(n.callback=l),e=qn(d,n,C),e!==null&&(Br(e,d,C,p),us(e,d,C)),C}function js(e){if(e=e.current,!e.child)return null;switch(e.child.tag){case 5:return e.child.stateNode;default:return e.child.stateNode}}function dh(e,n){if(e=e.memoizedState,e!==null&&e.dehydrated!==null){var o=e.retryLane;e.retryLane=o!==0&&o<n?o:n}}function ou(e,n){dh(e,n),(e=e.alternate)&&dh(e,n)}function Cg(){return null}var fh=typeof reportError=="function"?reportError:function(e){console.error(e)};function iu(e){this._internalRoot=e}Ms.prototype.render=iu.prototype.render=function(e){var n=this._internalRoot;if(n===null)throw Error(a(409));Ls(e,n,null,null)},Ms.prototype.unmount=iu.prototype.unmount=function(){var e=this._internalRoot;if(e!==null){this._internalRoot=null;var n=e.containerInfo;Ca(function(){Ls(null,e,null,null)}),n[gn]=null}};function Ms(e){this._internalRoot=e}Ms.prototype.unstable_scheduleHydration=function(e){if(e){var n=Gd();e={blockedOn:null,target:e,priority:n};for(var o=0;o<Fn.length&&n!==0&&n<Fn[o].priority;o++);Fn.splice(o,0,e),o===0&&Zd(e)}};function su(e){return!(!e||e.nodeType!==1&&e.nodeType!==9&&e.nodeType!==11)}function Ds(e){return!(!e||e.nodeType!==1&&e.nodeType!==9&&e.nodeType!==11&&(e.nodeType!==8||e.nodeValue!==" react-mount-point-unstable "))}function ph(){}function _g(e,n,o,l,d){if(d){if(typeof l=="function"){var p=l;l=function(){var z=js(C);p.call(z)}}var C=uh(n,l,e,0,null,!1,!1,"",ph);return e._reactRootContainer=C,e[gn]=C.current,Ho(e.nodeType===8?e.parentNode:e),Ca(),C}for(;d=e.lastChild;)e.removeChild(d);if(typeof l=="function"){var b=l;l=function(){var z=js(T);b.call(z)}}var T=au(e,0,!1,null,null,!1,!1,"",ph);return e._reactRootContainer=T,e[gn]=T.current,Ho(e.nodeType===8?e.parentNode:e),Ca(function(){Ls(n,T,o,l)}),T}function $s(e,n,o,l,d){var p=o._reactRootContainer;if(p){var C=p;if(typeof d=="function"){var b=d;d=function(){var T=js(C);b.call(T)}}Ls(n,C,e,d)}else C=_g(o,n,e,d,l);return js(C)}qd=function(e){switch(e.tag){case 3:var n=e.stateNode;if(n.current.memoizedState.isDehydrated){var o=da(n.pendingLanes);o!==0&&(Al(n,o|1),nr(n,We()),(ze&6)===0&&(so=We()+500,Hn()))}break;case 13:Ca(function(){var l=Cn(e,1);if(l!==null){var d=Kt();Br(l,e,1,d)}}),ou(e,1)}},Nl=function(e){if(e.tag===13){var n=Cn(e,134217728);if(n!==null){var o=Kt();Br(n,e,134217728,o)}ou(e,134217728)}},Kd=function(e){if(e.tag===13){var n=Qn(e),o=Cn(e,n);if(o!==null){var l=Kt();Br(o,e,n,l)}ou(e,n)}},Gd=function(){return qe},Yd=function(e,n){var o=qe;try{return qe=e,n()}finally{qe=o}},An=function(e,n,o){switch(n){case"input":if(jt(e,o),n=o.name,o.type==="radio"&&n!=null){for(o=e;o.parentNode;)o=o.parentNode;for(o=o.querySelectorAll("input[name="+JSON.stringify(""+n)+'][type="radio"]'),n=0;n<o.length;n++){var l=o[n];if(l!==e&&l.form===e.form){var d=es(l);if(!d)throw Error(a(90));Oe(l),jt(l,d)}}}break;case"textarea":it(e,o);break;case"select":n=o.value,n!=null&&ir(e,!!o.multiple,n,!1)}},Io=Jc,ia=Ca;var xg={usingClientEntryPoint:!1,Events:[Ko,Ga,es,bo,$i,Jc]},si={findFiberByHostInstance:fa,bundleType:0,version:"18.3.1",rendererPackageName:"react-dom"},Sg={bundleType:si.bundleType,version:si.version,rendererPackageName:si.rendererPackageName,rendererConfig:si.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:U.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return e=$e(e),e===null?null:e.stateNode},findFiberByHostInstance:si.findFiberByHostInstance||Cg,findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:"18.3.1-next-f1338f8080-20240426"};if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"){var Fs=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!Fs.isDisabled&&Fs.supportsFiber)try{pn=Fs.inject(Sg),Wt=Fs}catch{}}return ar.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=xg,ar.createPortal=function(e,n){var o=2<arguments.length&&arguments[2]!==void 0?arguments[2]:null;if(!su(n))throw Error(a(200));return wg(e,n,null,o)},ar.createRoot=function(e,n){if(!su(e))throw Error(a(299));var o=!1,l="",d=fh;return n!=null&&(n.unstable_strictMode===!0&&(o=!0),n.identifierPrefix!==void 0&&(l=n.identifierPrefix),n.onRecoverableError!==void 0&&(d=n.onRecoverableError)),n=au(e,1,!1,null,null,o,!1,l,d),e[gn]=n.current,Ho(e.nodeType===8?e.parentNode:e),new iu(n)},ar.findDOMNode=function(e){if(e==null)return null;if(e.nodeType===1)return e;var n=e._reactInternals;if(n===void 0)throw typeof e.render=="function"?Error(a(188)):(e=Object.keys(e).join(","),Error(a(268,e)));return e=$e(n),e=e===null?null:e.stateNode,e},ar.flushSync=function(e){return Ca(e)},ar.hydrate=function(e,n,o){if(!Ds(n))throw Error(a(200));return $s(null,e,n,!0,o)},ar.hydrateRoot=function(e,n,o){if(!su(e))throw Error(a(405));var l=o!=null&&o.hydratedSources||null,d=!1,p="",C=fh;if(o!=null&&(o.unstable_strictMode===!0&&(d=!0),o.identifierPrefix!==void 0&&(p=o.identifierPrefix),o.onRecoverableError!==void 0&&(C=o.onRecoverableError)),n=uh(n,null,e,1,o??null,d,!1,p,C),e[gn]=n.current,Ho(e),l)for(e=0;e<l.length;e++)o=l[e],d=o._getVersion,d=d(o._source),n.mutableSourceEagerHydrationData==null?n.mutableSourceEagerHydrationData=[o,d]:n.mutableSourceEagerHydrationData.push(o,d);return new Ms(n)},ar.render=function(e,n,o){if(!Ds(n))throw Error(a(200));return $s(null,e,n,!1,o)},ar.unmountComponentAtNode=function(e){if(!Ds(e))throw Error(a(40));return e._reactRootContainer?(Ca(function(){$s(null,null,e,!1,function(){e._reactRootContainer=null,e[gn]=null})}),!0):!1},ar.unstable_batchedUpdates=Jc,ar.unstable_renderSubtreeIntoContainer=function(e,n,o,l){if(!Ds(o))throw Error(a(200));if(e==null||e._reactInternals===void 0)throw Error(a(38));return $s(e,n,o,!1,l)},ar.version="18.3.1-next-f1338f8080-20240426",ar}var _h;function Gm(){if(_h)return uu.exports;_h=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(t){console.error(t)}}return r(),uu.exports=jg(),uu.exports}var xh;function Mg(){if(xh)return Os;xh=1;var r=Gm();return Os.createRoot=r.createRoot,Os.hydrateRoot=r.hydrateRoot,Os}var Ym=Mg();const Dg=Eo(Ym),$g="modulepreload",Fg=function(r){return"/"+r},Sh={},Je=function(t,a,i){let s=Promise.resolve();if(a&&a.length>0){let u=function(m){return Promise.all(m.map(y=>Promise.resolve(y).then(w=>({status:"fulfilled",value:w}),w=>({status:"rejected",reason:w}))))};document.getElementsByTagName("link");const f=document.querySelector("meta[property=csp-nonce]"),h=(f==null?void 0:f.nonce)||(f==null?void 0:f.getAttribute("nonce"));s=u(a.map(m=>{if(m=Fg(m),m in Sh)return;Sh[m]=!0;const y=m.endsWith(".css"),w=y?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${m}"]${w}`))return;const v=document.createElement("link");if(v.rel=y?"stylesheet":$g,y||(v.as="script"),v.crossOrigin="",v.href=m,h&&v.setAttribute("nonce",h),document.head.appendChild(v),y)return new Promise((x,E)=>{v.addEventListener("load",x),v.addEventListener("error",()=>E(new Error(`Unable to preload CSS for ${m}`)))})}))}function c(u){const f=new Event("vite:preloadError",{cancelable:!0});if(f.payload=u,window.dispatchEvent(f),!f.defaultPrevented)throw u}return s.then(u=>{for(const f of u||[])f.status==="rejected"&&c(f.reason);return t().catch(c)})};/**
* react-router v7.12.0
*
* Copyright (c) Remix Software Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE.md file in the root directory of this source tree.
*
* @license MIT
*/var Qm=r=>{throw TypeError(r)},Og=(r,t,a)=>t.has(r)||Qm("Cannot "+a),pu=(r,t,a)=>(Og(r,t,"read from private field"),a?a.call(r):t.get(r)),Ug=(r,t,a)=>t.has(r)?Qm("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(r):t.set(r,a),Eh="popstate";function zg(r={}){function t(i,s){let{pathname:c,search:u,hash:f}=i.location;return _i("",{pathname:c,search:u,hash:f},s.state&&s.state.usr||null,s.state&&s.state.key||"default")}function a(i,s){return typeof s=="string"?s:cn(s)}return Vg(t,a,null,r)}function je(r,t){if(r===!1||r===null||typeof r>"u")throw new Error(t)}function ct(r,t){if(!r){typeof console<"u"&&console.warn(t);try{throw new Error(t)}catch{}}}function Bg(){return Math.random().toString(36).substring(2,10)}function kh(r,t){return{usr:r.state,key:r.key,idx:t}}function _i(r,t,a=null,i){return{pathname:typeof r=="string"?r:r.pathname,search:"",hash:"",...typeof t=="string"?oa(t):t,state:a,key:t&&t.key||i||Bg()}}function cn({pathname:r="/",search:t="",hash:a=""}){return t&&t!=="?"&&(r+=t.charAt(0)==="?"?t:"?"+t),a&&a!=="#"&&(r+=a.charAt(0)==="#"?a:"#"+a),r}function oa(r){let t={};if(r){let a=r.indexOf("#");a>=0&&(t.hash=r.substring(a),r=r.substring(0,a));let i=r.indexOf("?");i>=0&&(t.search=r.substring(i),r=r.substring(0,i)),r&&(t.pathname=r)}return t}function Vg(r,t,a,i={}){let{window:s=document.defaultView,v5Compat:c=!1}=i,u=s.history,f="POP",h=null,m=y();m==null&&(m=0,u.replaceState({...u.state,idx:m},""));function y(){return(u.state||{idx:null}).idx}function w(){f="POP";let L=y(),M=L==null?null:L-m;m=L,h&&h({action:f,location:S.location,delta:M})}function v(L,M){f="PUSH";let N=_i(S.location,L,M);m=y()+1;let B=kh(N,m),U=S.createHref(N);try{u.pushState(B,"",U)}catch(P){if(P instanceof DOMException&&P.name==="DataCloneError")throw P;s.location.assign(U)}c&&h&&h({action:f,location:S.location,delta:1})}function x(L,M){f="REPLACE";let N=_i(S.location,L,M);m=y();let B=kh(N,m),U=S.createHref(N);u.replaceState(B,"",U),c&&h&&h({action:f,location:S.location,delta:0})}function E(L){return Zm(L)}let S={get action(){return f},get location(){return r(s,u)},listen(L){if(h)throw new Error("A history only accepts one active listener");return s.addEventListener(Eh,w),h=L,()=>{s.removeEventListener(Eh,w),h=null}},createHref(L){return t(s,L)},createURL:E,encodeLocation(L){let M=E(L);return{pathname:M.pathname,search:M.search,hash:M.hash}},push:v,replace:x,go(L){return u.go(L)}};return S}function Zm(r,t=!1){let a="http://localhost";typeof window<"u"&&(a=window.location.origin!=="null"?window.location.origin:window.location.href),je(a,"No window.location.(origin|href) available to create URL");let i=typeof r=="string"?r:cn(r);return i=i.replace(/ $/,"%20"),!t&&i.startsWith("//")&&(i=a+i),new URL(i,a)}var gi,bh=class{constructor(r){if(Ug(this,gi,new Map),r)for(let[t,a]of r)this.set(t,a)}get(r){if(pu(this,gi).has(r))return pu(this,gi).get(r);if(r.defaultValue!==void 0)return r.defaultValue;throw new Error("No value found for context")}set(r,t){pu(this,gi).set(r,t)}};gi=new WeakMap;var Hg=new Set(["lazy","caseSensitive","path","id","index","children"]);function Wg(r){return Hg.has(r)}var qg=new Set(["lazy","caseSensitive","path","id","index","middleware","children"]);function Kg(r){return qg.has(r)}function Gg(r){return r.index===!0}function xi(r,t,a=[],i={},s=!1){return r.map((c,u)=>{let f=[...a,String(u)],h=typeof c.id=="string"?c.id:f.join("-");if(je(c.index!==!0||!c.children,"Cannot specify children on an index route"),je(s||!i[h],`Found a route id collision on id "${h}". Route id's must be globally unique within Data Router usages`),Gg(c)){let m={...c,id:h};return i[h]=Ih(m,t(m)),m}else{let m={...c,id:h,children:void 0};return i[h]=Ih(m,t(m)),c.children&&(m.children=xi(c.children,t,f,i,s)),m}})}function Ih(r,t){return Object.assign(r,{...t,...typeof t.lazy=="object"&&t.lazy!=null?{lazy:{...r.lazy,...t.lazy}}:{}})}function ea(r,t,a="/"){return yi(r,t,a,!1)}function yi(r,t,a,i){let s=typeof t=="string"?oa(t):t,c=Lr(s.pathname||"/",a);if(c==null)return null;let u=Jm(r);Qg(u);let f=null;for(let h=0;f==null&&h<u.length;++h){let m=e1(c);f=oy(u[h],m,i)}return f}function Yg(r,t){let{route:a,pathname:i,params:s}=r;return{id:a.id,pathname:i,params:s,data:t[a.id],loaderData:t[a.id],handle:a.handle}}function Jm(r,t=[],a=[],i="",s=!1){let c=(u,f,h=s,m)=>{let y={relativePath:m===void 0?u.path||"":m,caseSensitive:u.caseSensitive===!0,childrenIndex:f,route:u};if(y.relativePath.startsWith("/")){if(!y.relativePath.startsWith(i)&&h)return;je(y.relativePath.startsWith(i),`Absolute route path "${y.relativePath}" nested under path "${i}" is not valid. An absolute child route path must start with the combined path of all its parent routes.`),y.relativePath=y.relativePath.slice(i.length)}let w=sn([i,y.relativePath]),v=a.concat(y);u.children&&u.children.length>0&&(je(u.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${w}".`),Jm(u.children,t,v,w,h)),!(u.path==null&&!u.index)&&t.push({path:w,score:ny(w,u.index),routesMeta:v})};return r.forEach((u,f)=>{var h;if(u.path===""||!((h=u.path)!=null&&h.includes("?")))c(u,f);else for(let m of Xm(u.path))c(u,f,!0,m)}),t}function Xm(r){let t=r.split("/");if(t.length===0)return[];let[a,...i]=t,s=a.endsWith("?"),c=a.replace(/\?$/,"");if(i.length===0)return s?[c,""]:[c];let u=Xm(i.join("/")),f=[];return f.push(...u.map(h=>h===""?c:[c,h].join("/"))),s&&f.push(...u),f.map(h=>r.startsWith("/")&&h===""?"/":h)}function Qg(r){r.sort((t,a)=>t.score!==a.score?a.score-t.score:ay(t.routesMeta.map(i=>i.childrenIndex),a.routesMeta.map(i=>i.childrenIndex)))}var Zg=/^:[\w-]+$/,Jg=3,Xg=2,ey=1,ty=10,ry=-2,Th=r=>r==="*";function ny(r,t){let a=r.split("/"),i=a.length;return a.some(Th)&&(i+=ry),t&&(i+=Xg),a.filter(s=>!Th(s)).reduce((s,c)=>s+(Zg.test(c)?Jg:c===""?ey:ty),i)}function ay(r,t){return r.length===t.length&&r.slice(0,-1).every((i,s)=>i===t[s])?r[r.length-1]-t[t.length-1]:0}function oy(r,t,a=!1){let{routesMeta:i}=r,s={},c="/",u=[];for(let f=0;f<i.length;++f){let h=i[f],m=f===i.length-1,y=c==="/"?t:t.slice(c.length)||"/",w=Si({path:h.relativePath,caseSensitive:h.caseSensitive,end:m},y),v=h.route;if(!w&&m&&a&&!i[i.length-1].route.index&&(w=Si({path:h.relativePath,caseSensitive:h.caseSensitive,end:!1},y)),!w)return null;Object.assign(s,w.params),u.push({params:s,pathname:sn([c,w.pathname]),pathnameBase:cy(sn([c,w.pathnameBase])),route:v}),w.pathnameBase!=="/"&&(c=sn([c,w.pathnameBase]))}return u}function Si(r,t){typeof r=="string"&&(r={path:r,caseSensitive:!1,end:!0});let[a,i]=iy(r.path,r.caseSensitive,r.end),s=t.match(a);if(!s)return null;let c=s[0],u=c.replace(/(.)\/+$/,"$1"),f=s.slice(1);return{params:i.reduce((m,{paramName:y,isOptional:w},v)=>{if(y==="*"){let E=f[v]||"";u=c.slice(0,c.length-E.length).replace(/(.)\/+$/,"$1")}const x=f[v];return w&&!x?m[y]=void 0:m[y]=(x||"").replace(/%2F/g,"/"),m},{}),pathname:c,pathnameBase:u,pattern:r}}function iy(r,t=!1,a=!0){ct(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 i=[],s="^"+r.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(u,f,h)=>(i.push({paramName:f,isOptional:h!=null}),h?"/?([^\\/]+)?":"/([^\\/]+)")).replace(/\/([\w-]+)\?(\/|$)/g,"(/$1)?$2");return r.endsWith("*")?(i.push({paramName:"*"}),s+=r==="*"||r==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):a?s+="\\/*$":r!==""&&r!=="/"&&(s+="(?:(?=\\/|$))"),[new RegExp(s,t?void 0:"i"),i]}function e1(r){try{return r.split("/").map(t=>decodeURIComponent(t).replace(/\//g,"%2F")).join("/")}catch(t){return ct(!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 (${t}).`),r}}function Lr(r,t){if(t==="/")return r;if(!r.toLowerCase().startsWith(t.toLowerCase()))return null;let a=t.endsWith("/")?t.length-1:t.length,i=r.charAt(a);return i&&i!=="/"?null:r.slice(a)||"/"}function sy({basename:r,pathname:t}){return t==="/"?r:sn([r,t])}var t1=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,fl=r=>t1.test(r);function ly(r,t="/"){let{pathname:a,search:i="",hash:s=""}=typeof r=="string"?oa(r):r,c;if(a)if(fl(a))c=a;else{if(a.includes("//")){let u=a;a=a.replace(/\/\/+/g,"/"),ct(!1,`Pathnames cannot have embedded double slashes - normalizing ${u} -> ${a}`)}a.startsWith("/")?c=Ph(a.substring(1),"/"):c=Ph(a,t)}else c=t;return{pathname:c,search:uy(i),hash:dy(s)}}function Ph(r,t){let a=t.replace(/\/+$/,"").split("/");return r.split("/").forEach(s=>{s===".."?a.length>1&&a.pop():s!=="."&&a.push(s)}),a.length>1?a.join("/"):"/"}function hu(r,t,a,i){return`Cannot include a '${r}' character in a manually specified \`to.${t}\` field [${JSON.stringify(i)}]. Please separate it out to the \`to.${a}\` field. Alternatively you may provide the full path as a string in <Link to="..."> and the router will parse it for you.`}function r1(r){return r.filter((t,a)=>a===0||t.route.path&&t.route.path.length>0)}function pl(r){let t=r1(r);return t.map((a,i)=>i===t.length-1?a.pathname:a.pathnameBase)}function hl(r,t,a,i=!1){let s;typeof r=="string"?s=oa(r):(s={...r},je(!s.pathname||!s.pathname.includes("?"),hu("?","pathname","search",s)),je(!s.pathname||!s.pathname.includes("#"),hu("#","pathname","hash",s)),je(!s.search||!s.search.includes("#"),hu("#","search","hash",s)));let c=r===""||s.pathname==="",u=c?"/":s.pathname,f;if(u==null)f=a;else{let w=t.length-1;if(!i&&u.startsWith("..")){let v=u.split("/");for(;v[0]==="..";)v.shift(),w-=1;s.pathname=v.join("/")}f=w>=0?t[w]:"/"}let h=ly(s,f),m=u&&u!=="/"&&u.endsWith("/"),y=(c||u===".")&&a.endsWith("/");return!h.pathname.endsWith("/")&&(m||y)&&(h.pathname+="/"),h}var sn=r=>r.join("/").replace(/\/\/+/g,"/"),cy=r=>r.replace(/\/+$/,"").replace(/^\/*/,"/"),uy=r=>!r||r==="?"?"":r.startsWith("?")?r:"?"+r,dy=r=>!r||r==="#"?"":r.startsWith("#")?r:"#"+r,Pi=class{constructor(r,t,a,i=!1){this.status=r,this.statusText=t||"",this.internal=i,a instanceof Error?(this.data=a.toString(),this.error=a):this.data=a}};function Ei(r){return r!=null&&typeof r.status=="number"&&typeof r.statusText=="string"&&typeof r.internal=="boolean"&&"data"in r}function Ri(r){return r.map(t=>t.route.path).filter(Boolean).join("/").replace(/\/\/*/g,"/")||"/"}var n1=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";function a1(r,t){let a=r;if(typeof a!="string"||!t1.test(a))return{absoluteURL:void 0,isExternal:!1,to:a};let i=a,s=!1;if(n1)try{let c=new URL(window.location.href),u=a.startsWith("//")?new URL(c.protocol+a):new URL(a),f=Lr(u.pathname,t);u.origin===c.origin&&f!=null?a=f+u.search+u.hash:s=!0}catch{ct(!1,`<Link to="${a}"> contains an invalid URL which will probably break when clicked - please update to a valid URL path.`)}return{absoluteURL:i,isExternal:s,to:a}}var ra=Symbol("Uninstrumented");function fy(r,t){let a={lazy:[],"lazy.loader":[],"lazy.action":[],"lazy.middleware":[],middleware:[],loader:[],action:[]};r.forEach(s=>s({id:t.id,index:t.index,path:t.path,instrument(c){let u=Object.keys(a);for(let f of u)c[f]&&a[f].push(c[f])}}));let i={};if(typeof t.lazy=="function"&&a.lazy.length>0){let s=mo(a.lazy,t.lazy,()=>{});s&&(i.lazy=s)}if(typeof t.lazy=="object"){let s=t.lazy;["middleware","loader","action"].forEach(c=>{let u=s[c],f=a[`lazy.${c}`];if(typeof u=="function"&&f.length>0){let h=mo(f,u,()=>{});h&&(i.lazy=Object.assign(i.lazy||{},{[c]:h}))}})}return["loader","action"].forEach(s=>{let c=t[s];if(typeof c=="function"&&a[s].length>0){let u=c[ra]??c,f=mo(a[s],u,(...h)=>Rh(h[0]));f&&(s==="loader"&&u.hydrate===!0&&(f.hydrate=!0),f[ra]=u,i[s]=f)}}),t.middleware&&t.middleware.length>0&&a.middleware.length>0&&(i.middleware=t.middleware.map(s=>{let c=s[ra]??s,u=mo(a.middleware,c,(...f)=>Rh(f[0]));return u?(u[ra]=c,u):s})),i}function py(r,t){let a={navigate:[],fetch:[]};if(t.forEach(i=>i({instrument(s){let c=Object.keys(s);for(let u of c)s[u]&&a[u].push(s[u])}})),a.navigate.length>0){let i=r.navigate[ra]??r.navigate,s=mo(a.navigate,i,(...c)=>{let[u,f]=c;return{to:typeof u=="number"||typeof u=="string"?u:u?cn(u):".",...Ah(r,f??{})}});s&&(s[ra]=i,r.navigate=s)}if(a.fetch.length>0){let i=r.fetch[ra]??r.fetch,s=mo(a.fetch,i,(...c)=>{let[u,,f,h]=c;return{href:f??".",fetcherKey:u,...Ah(r,h??{})}});s&&(s[ra]=i,r.fetch=s)}return r}function mo(r,t,a){return r.length===0?null:async(...i)=>{let s=await o1(r,a(...i),()=>t(...i),r.length-1);if(s.type==="error")throw s.value;return s.value}}async function o1(r,t,a,i){let s=r[i],c;if(s){let u,f=async()=>(u?console.error("You cannot call instrumented handlers more than once"):u=o1(r,t,a,i-1),c=await u,je(c,"Expected a result"),c.type==="error"&&c.value instanceof Error?{status:"error",error:c.value}:{status:"success",error:void 0});try{await s(f,t)}catch(h){console.error("An instrumentation function threw an error:",h)}u||await f(),await u}else try{c={type:"success",value:await a()}}catch(u){c={type:"error",value:u}}return c||{type:"error",value:new Error("No result assigned in instrumentation chain.")}}function Rh(r){let{request:t,context:a,params:i,unstable_pattern:s}=r;return{request:hy(t),params:{...i},unstable_pattern:s,context:my(a)}}function Ah(r,t){return{currentUrl:cn(r.state.location),..."formMethod"in t?{formMethod:t.formMethod}:{},..."formEncType"in t?{formEncType:t.formEncType}:{},..."formData"in t?{formData:t.formData}:{},..."body"in t?{body:t.body}:{}}}function hy(r){return{method:r.method,url:r.url,headers:{get:(...t)=>r.headers.get(...t)}}}function my(r){if(yy(r)){let t={...r};return Object.freeze(t),t}else return{get:t=>r.get(t)}}var gy=Object.getOwnPropertyNames(Object.prototype).sort().join("\0");function yy(r){if(r===null||typeof r!="object")return!1;const t=Object.getPrototypeOf(r);return t===Object.prototype||t===null||Object.getOwnPropertyNames(t).sort().join("\0")===gy}var i1=["POST","PUT","PATCH","DELETE"],vy=new Set(i1),wy=["GET",...i1],Cy=new Set(wy),s1=new Set([301,302,303,307,308]),_y=new Set([307,308]),mu={state:"idle",location:void 0,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0},xy={state:"idle",data:void 0,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0},ci={state:"unblocked",proceed:void 0,reset:void 0,location:void 0},Sy=r=>({hasErrorBoundary:!!r.hasErrorBoundary}),l1="remix-router-transitions",c1=Symbol("ResetLoaderData");function Ey(r){const t=r.window?r.window:typeof window<"u"?window:void 0,a=typeof t<"u"&&typeof t.document<"u"&&typeof t.document.createElement<"u";je(r.routes.length>0,"You must provide a non-empty routes array to createRouter");let i=r.hydrationRouteProperties||[],s=r.mapRouteProperties||Sy,c=s;if(r.unstable_instrumentations){let I=r.unstable_instrumentations;c=j=>({...s(j),...fy(I.map(O=>O.route).filter(Boolean),j)})}let u={},f=xi(r.routes,c,void 0,u),h,m=r.basename||"/";m.startsWith("/")||(m=`/${m}`);let y=r.dataStrategy||Py,w={...r.future},v=null,x=new Set,E=null,S=null,L=null,M=r.hydrationData!=null,N=ea(f,r.history.location,m),B=!1,U=null,P;if(N==null&&!r.patchRoutesOnNavigation){let I=Nr(404,{pathname:r.history.location.pathname}),{matches:j,route:O}=Us(f);P=!0,N=j,U={[O.id]:I}}else if(N&&!r.hydrationData&&ia(N,f,r.history.location.pathname).active&&(N=null),N)if(N.some(I=>I.route.lazy))P=!1;else if(!N.some(I=>xd(I.route)))P=!0;else{let I=r.hydrationData?r.hydrationData.loaderData:null,j=r.hydrationData?r.hydrationData.errors:null;if(j){let O=N.findIndex(G=>j[G.route.id]!==void 0);P=N.slice(0,O+1).every(G=>!Xu(G.route,I,j))}else P=N.every(O=>!Xu(O.route,I,j))}else{P=!1,N=[];let I=ia(null,f,r.history.location.pathname);I.active&&I.matches&&(B=!0,N=I.matches)}let H,k={historyAction:r.history.action,location:r.history.location,matches:N,initialized:P,navigation:mu,restoreScrollPosition:r.hydrationData!=null?!1:null,preventScrollReset:!1,revalidation:"idle",loaderData:r.hydrationData&&r.hydrationData.loaderData||{},actionData:r.hydrationData&&r.hydrationData.actionData||null,errors:r.hydrationData&&r.hydrationData.errors||U,fetchers:new Map,blockers:new Map},Q="POP",X=null,ue=!1,xe,Re=!1,Ue=new Map,ve=null,Me=!1,ke=!1,Se=new Set,q=new Map,ie=0,ee=-1,A=new Map,V=new Set,J=new Map,ae=new Map,te=new Set,oe=new Map,Ee,Ie=null;function Be(){if(v=r.history.listen(({action:I,location:j,delta:O})=>{if(Ee){Ee(),Ee=void 0;return}ct(oe.size===0||O!=null,"You are trying to use a blocker on a POP navigation to a location that was not created by @remix-run/router. This will fail silently in production. This can happen if you are navigating outside the router via `window.history.pushState`/`window.location.hash` instead of using router navigation APIs. This can also happen if you are using createHashRouter and the user manually changes the URL.");let G=fn({currentLocation:k.location,nextLocation:j,historyAction:I});if(G&&O!=null){let ne=new Promise(me=>{Ee=me});r.history.go(O*-1),An(G,{state:"blocked",location:j,proceed(){An(G,{state:"proceeding",proceed:void 0,reset:void 0,location:j}),ne.then(()=>r.history.go(O))},reset(){let me=new Map(k.blockers);me.set(G,ci),Oe({blockers:me})}}),X==null||X.resolve(),X=null;return}return Ge(I,j)}),a){Ky(t,Ue);let I=()=>Gy(t,Ue);t.addEventListener("pagehide",I),ve=()=>t.removeEventListener("pagehide",I)}return k.initialized||Ge("POP",k.location,{initialHydration:!0}),H}function gt(){v&&v(),ve&&ve(),x.clear(),xe&&xe.abort(),k.fetchers.forEach((I,j)=>dn(j)),k.blockers.forEach((I,j)=>Ua(j))}function Mr(I){return x.add(I),()=>x.delete(I)}function Oe(I,j={}){I.matches&&(I.matches=I.matches.map(ne=>{let me=u[ne.route.id],we=ne.route;return we.element!==me.element||we.errorElement!==me.errorElement||we.hydrateFallbackElement!==me.hydrateFallbackElement?{...ne,route:me}:ne})),k={...k,...I};let O=[],G=[];k.fetchers.forEach((ne,me)=>{ne.state==="idle"&&(te.has(me)?O.push(me):G.push(me))}),te.forEach(ne=>{!k.fetchers.has(ne)&&!q.has(ne)&&O.push(ne)}),[...x].forEach(ne=>ne(k,{deletedFetchers:O,newErrors:I.errors??null,viewTransitionOpts:j.viewTransitionOpts,flushSync:j.flushSync===!0})),O.forEach(ne=>dn(ne)),G.forEach(ne=>k.fetchers.delete(ne))}function dt(I,j,{flushSync:O}={}){var Te,ye;let G=k.actionData!=null&&k.navigation.formMethod!=null&&Ht(k.navigation.formMethod)&&k.navigation.state==="loading"&&((Te=I.state)==null?void 0:Te._isRedirect)!==!0,ne;j.actionData?Object.keys(j.actionData).length>0?ne=j.actionData:ne=null:G?ne=k.actionData:ne=null;let me=j.loaderData?zh(k.loaderData,j.loaderData,j.matches||[],j.errors):k.loaderData,we=k.blockers;we.size>0&&(we=new Map(we),we.forEach((Ae,$e)=>we.set($e,ci)));let le=Me?!1:Io(I,j.matches||k.matches),de=ue===!0||k.navigation.formMethod!=null&&Ht(k.navigation.formMethod)&&((ye=I.state)==null?void 0:ye._isRedirect)!==!0;h&&(f=h,h=void 0),Me||Q==="POP"||(Q==="PUSH"?r.history.push(I,I.state):Q==="REPLACE"&&r.history.replace(I,I.state));let pe;if(Q==="POP"){let Ae=Ue.get(k.location.pathname);Ae&&Ae.has(I.pathname)?pe={currentLocation:k.location,nextLocation:I}:Ue.has(I.pathname)&&(pe={currentLocation:I,nextLocation:k.location})}else if(Re){let Ae=Ue.get(k.location.pathname);Ae?Ae.add(I.pathname):(Ae=new Set([I.pathname]),Ue.set(k.location.pathname,Ae)),pe={currentLocation:k.location,nextLocation:I}}Oe({...j,actionData:ne,loaderData:me,historyAction:Q,location:I,initialized:!0,navigation:mu,revalidation:"idle",restoreScrollPosition:le,preventScrollReset:de,blockers:we},{viewTransitionOpts:pe,flushSync:O===!0}),Q="POP",ue=!1,Re=!1,Me=!1,ke=!1,X==null||X.resolve(),X=null,Ie==null||Ie.resolve(),Ie=null}async function Yr(I,j){if(X==null||X.resolve(),X=null,typeof I=="number"){X||(X=Wh());let $e=X.promise;return r.history.go(I),$e}let O=Ju(k.location,k.matches,m,I,j==null?void 0:j.fromRouteId,j==null?void 0:j.relative),{path:G,submission:ne,error:me}=Nh(!1,O,j),we=k.location,le=_i(k.location,G,j&&j.state);le={...le,...r.history.encodeLocation(le)};let de=j&&j.replace!=null?j.replace:void 0,pe="PUSH";de===!0?pe="REPLACE":de===!1||ne!=null&&Ht(ne.formMethod)&&ne.formAction===k.location.pathname+k.location.search&&(pe="REPLACE");let Te=j&&"preventScrollReset"in j?j.preventScrollReset===!0:void 0,ye=(j&&j.flushSync)===!0,Ae=fn({currentLocation:we,nextLocation:le,historyAction:pe});if(Ae){An(Ae,{state:"blocked",location:le,proceed(){An(Ae,{state:"proceeding",proceed:void 0,reset:void 0,location:le}),Yr(I,j)},reset(){let $e=new Map(k.blockers);$e.set(Ae,ci),Oe({blockers:$e})}});return}await Ge(pe,le,{submission:ne,pendingError:me,preventScrollReset:Te,replace:j&&j.replace,enableViewTransition:j&&j.viewTransition,flushSync:ye,callSiteDefaultShouldRevalidate:j&&j.unstable_defaultShouldRevalidate})}function Ne(){Ie||(Ie=Wh()),Rn(),Oe({revalidation:"loading"});let I=Ie.promise;return k.navigation.state==="submitting"?I:k.navigation.state==="idle"?(Ge(k.historyAction,k.location,{startUninterruptedRevalidation:!0}),I):(Ge(Q||k.historyAction,k.navigation.location,{overrideNavigation:k.navigation,enableViewTransition:Re===!0}),I)}async function Ge(I,j,O){xe&&xe.abort(),xe=null,Q=I,Me=(O&&O.startUninterruptedRevalidation)===!0,$i(k.location,k.matches),ue=(O&&O.preventScrollReset)===!0,Re=(O&&O.enableViewTransition)===!0;let G=h||f,ne=O&&O.overrideNavigation,me=O!=null&&O.initialHydration&&k.matches&&k.matches.length>0&&!B?k.matches:ea(G,j,m),we=(O&&O.flushSync)===!0;if(me&&k.initialized&&!ke&&$y(k.location,j)&&!(O&&O.submission&&Ht(O.submission.formMethod))){dt(j,{matches:me},{flushSync:we});return}let le=ia(me,G,j.pathname);if(le.active&&le.matches&&(me=le.matches),!me){let{error:pt,notFoundMatches:kt,route:He}=Zr(j.pathname);dt(j,{matches:kt,loaderData:{},errors:{[He.id]:pt}},{flushSync:we});return}xe=new AbortController;let de=ho(r.history,j,xe.signal,O&&O.submission),pe=r.getContext?await r.getContext():new bh,Te;if(O&&O.pendingError)Te=[ta(me).route.id,{type:"error",error:O.pendingError}];else if(O&&O.submission&&Ht(O.submission.formMethod)){let pt=await jt(de,j,O.submission,me,pe,le.active,O&&O.initialHydration===!0,{replace:O.replace,flushSync:we});if(pt.shortCircuited)return;if(pt.pendingActionResult){let[kt,He]=pt.pendingActionResult;if(mr(He)&&Ei(He.error)&&He.error.status===404){xe=null,dt(j,{matches:pt.matches,loaderData:{},errors:{[kt]:He.error}});return}}me=pt.matches||me,Te=pt.pendingActionResult,ne=gu(j,O.submission),we=!1,le.active=!1,de=ho(r.history,de.url,de.signal)}let{shortCircuited:ye,matches:Ae,loaderData:$e,errors:yt}=await Mt(de,j,me,pe,le.active,ne,O&&O.submission,O&&O.fetcherSubmission,O&&O.replace,O&&O.initialHydration===!0,we,Te,O&&O.callSiteDefaultShouldRevalidate);ye||(xe=null,dt(j,{matches:Ae||me,...Bh(Te),loaderData:$e,errors:yt}))}async function jt(I,j,O,G,ne,me,we,le={}){Rn();let de=Wy(j,O);if(Oe({navigation:de},{flushSync:le.flushSync===!0}),me){let ye=await Nn(G,j.pathname,I.signal);if(ye.type==="aborted")return{shortCircuited:!0};if(ye.type==="error"){if(ye.partialMatches.length===0){let{matches:$e,route:yt}=Us(f);return{matches:$e,pendingActionResult:[yt.id,{type:"error",error:ye.error}]}}let Ae=ta(ye.partialMatches).route.id;return{matches:ye.partialMatches,pendingActionResult:[Ae,{type:"error",error:ye.error}]}}else if(ye.matches)G=ye.matches;else{let{notFoundMatches:Ae,error:$e,route:yt}=Zr(j.pathname);return{matches:Ae,pendingActionResult:[yt.id,{type:"error",error:$e}]}}}let pe,Te=Ys(G,j);if(!Te.route.action&&!Te.route.lazy)pe={type:"error",error:Nr(405,{method:I.method,pathname:j.pathname,routeId:Te.route.id})};else{let ye=vo(c,u,I,G,Te,we?[]:i,ne),Ae=await _r(I,ye,ne,null);if(pe=Ae[Te.route.id],!pe){for(let $e of G)if(Ae[$e.route.id]){pe=Ae[$e.route.id];break}}if(I.signal.aborted)return{shortCircuited:!0}}if(Ia(pe)){let ye;return le&&le.replace!=null?ye=le.replace:ye=Fh(pe.response.headers.get("Location"),new URL(I.url),m,r.history)===k.location.pathname+k.location.search,await it(I,pe,!0,{submission:O,replace:ye}),{shortCircuited:!0}}if(mr(pe)){let ye=ta(G,Te.route.id);return(le&&le.replace)!==!0&&(Q="PUSH"),{matches:G,pendingActionResult:[ye.route.id,pe,Te.route.id]}}return{matches:G,pendingActionResult:[Te.route.id,pe]}}async function Mt(I,j,O,G,ne,me,we,le,de,pe,Te,ye,Ae){let $e=me||gu(j,we),yt=we||le||Hh($e),pt=!Me&&!pe;if(ne){if(pt){let Ye=ft(ye);Oe({navigation:$e,...Ye!==void 0?{actionData:Ye}:{}},{flushSync:Te})}let Fe=await Nn(O,j.pathname,I.signal);if(Fe.type==="aborted")return{shortCircuited:!0};if(Fe.type==="error"){if(Fe.partialMatches.length===0){let{matches:jn,route:hn}=Us(f);return{matches:jn,loaderData:{},errors:{[hn.id]:Fe.error}}}let Ye=ta(Fe.partialMatches).route.id;return{matches:Fe.partialMatches,loaderData:{},errors:{[Ye]:Fe.error}}}else if(Fe.matches)O=Fe.matches;else{let{error:Ye,notFoundMatches:jn,route:hn}=Zr(j.pathname);return{matches:jn,loaderData:{},errors:{[hn.id]:Ye}}}}let kt=h||f,{dsMatches:He,revalidatingFetchers:Jt}=Lh(I,G,c,u,r.history,k,O,yt,j,pe?[]:i,pe===!0,ke,Se,te,J,V,kt,m,r.patchRoutesOnNavigation!=null,ye,Ae);if(ee=++ie,!r.dataStrategy&&!He.some(Fe=>Fe.shouldLoad)&&!He.some(Fe=>Fe.route.middleware&&Fe.route.middleware.length>0)&&Jt.length===0){let Fe=Fa();return dt(j,{matches:O,loaderData:{},errors:ye&&mr(ye[1])?{[ye[0]]:ye[1].error}:null,...Bh(ye),...Fe?{fetchers:new Map(k.fetchers)}:{}},{flushSync:Te}),{shortCircuited:!0}}if(pt){let Fe={};if(!ne){Fe.navigation=$e;let Ye=ft(ye);Ye!==void 0&&(Fe.actionData=Ye)}Jt.length>0&&(Fe.fetchers=Rt(Jt)),Oe(Fe,{flushSync:Te})}Jt.forEach(Fe=>{xr(Fe.key),Fe.controller&&q.set(Fe.key,Fe.controller)});let We=()=>Jt.forEach(Fe=>xr(Fe.key));xe&&xe.signal.addEventListener("abort",We);let{loaderResults:la,fetcherResults:Sr}=await Dr(He,Jt,I,G);if(I.signal.aborted)return{shortCircuited:!0};xe&&xe.signal.removeEventListener("abort",We),Jt.forEach(Fe=>q.delete(Fe.key));let cr=zs(la);if(cr)return await it(I,cr.result,!0,{replace:de}),{shortCircuited:!0};if(cr=zs(Sr),cr)return V.add(cr.key),await it(I,cr.result,!0,{replace:de}),{shortCircuited:!0};let{loaderData:Ln,errors:ca}=Uh(k,O,la,ye,Jt,Sr);pe&&k.errors&&(ca={...k.errors,...ca});let Jr=Fa(),pn=Oa(ee),Wt=Jr||pn||Jt.length>0;return{matches:O,loaderData:Ln,errors:ca,...Wt?{fetchers:new Map(k.fetchers)}:{}}}function ft(I){if(I&&!mr(I[1]))return{[I[0]]:I[1].data};if(k.actionData)return Object.keys(k.actionData).length===0?null:k.actionData}function Rt(I){return I.forEach(j=>{let O=k.fetchers.get(j.key),G=ui(void 0,O?O.data:void 0);k.fetchers.set(j.key,G)}),new Map(k.fetchers)}async function ir(I,j,O,G){xr(I);let ne=(G&&G.flushSync)===!0,me=h||f,we=Ju(k.location,k.matches,m,O,j,G==null?void 0:G.relative),le=ea(me,we,m),de=ia(le,me,we);if(de.active&&de.matches&&(le=de.matches),!le){Et(I,j,Nr(404,{pathname:we}),{flushSync:ne});return}let{path:pe,submission:Te,error:ye}=Nh(!0,we,G);if(ye){Et(I,j,ye,{flushSync:ne});return}let Ae=r.getContext?await r.getContext():new bh,$e=(G&&G.preventScrollReset)===!0;if(Te&&Ht(Te.formMethod)){await sr(I,j,pe,le,Ae,de.active,ne,$e,Te,G&&G.unstable_defaultShouldRevalidate);return}J.set(I,{routeId:j,path:pe}),await Qr(I,j,pe,le,Ae,de.active,ne,$e,Te)}async function sr(I,j,O,G,ne,me,we,le,de,pe){Rn(),J.delete(I);let Te=k.fetchers.get(I);St(I,qy(de,Te),{flushSync:we});let ye=new AbortController,Ae=ho(r.history,O,ye.signal,de);if(me){let rt=await Nn(G,new URL(Ae.url).pathname,Ae.signal,I);if(rt.type==="aborted")return;if(rt.type==="error"){Et(I,j,rt.error,{flushSync:we});return}else if(rt.matches)G=rt.matches;else{Et(I,j,Nr(404,{pathname:O}),{flushSync:we});return}}let $e=Ys(G,O);if(!$e.route.action&&!$e.route.lazy){let rt=Nr(405,{method:de.formMethod,pathname:O,routeId:j});Et(I,j,rt,{flushSync:we});return}q.set(I,ye);let yt=ie,pt=vo(c,u,Ae,G,$e,i,ne),kt=await _r(Ae,pt,ne,I),He=kt[$e.route.id];if(!He){for(let rt of pt)if(kt[rt.route.id]){He=kt[rt.route.id];break}}if(Ae.signal.aborted){q.get(I)===ye&&q.delete(I);return}if(te.has(I)){if(Ia(He)||mr(He)){St(I,kn(void 0));return}}else{if(Ia(He))if(q.delete(I),ee>yt){St(I,kn(void 0));return}else return V.add(I),St(I,ui(de)),it(Ae,He,!1,{fetcherSubmission:de,preventScrollReset:le});if(mr(He)){Et(I,j,He.error);return}}let Jt=k.navigation.location||k.location,We=ho(r.history,Jt,ye.signal),la=h||f,Sr=k.navigation.state!=="idle"?ea(la,k.navigation.location,m):k.matches;je(Sr,"Didn't find any matches after fetcher action");let cr=++ie;A.set(I,cr);let Ln=ui(de,He.data);k.fetchers.set(I,Ln);let{dsMatches:ca,revalidatingFetchers:Jr}=Lh(We,ne,c,u,r.history,k,Sr,de,Jt,i,!1,ke,Se,te,J,V,la,m,r.patchRoutesOnNavigation!=null,[$e.route.id,He],pe);Jr.filter(rt=>rt.key!==I).forEach(rt=>{let mn=rt.key,ua=k.fetchers.get(mn),da=ui(void 0,ua?ua.data:void 0);k.fetchers.set(mn,da),xr(mn),rt.controller&&q.set(mn,rt.controller)}),Oe({fetchers:new Map(k.fetchers)});let pn=()=>Jr.forEach(rt=>xr(rt.key));ye.signal.addEventListener("abort",pn);let{loaderResults:Wt,fetcherResults:Fe}=await Dr(ca,Jr,We,ne);if(ye.signal.aborted)return;if(ye.signal.removeEventListener("abort",pn),A.delete(I),q.delete(I),Jr.forEach(rt=>q.delete(rt.key)),k.fetchers.has(I)){let rt=kn(He.data);k.fetchers.set(I,rt)}let Ye=zs(Wt);if(Ye)return it(We,Ye.result,!1,{preventScrollReset:le});if(Ye=zs(Fe),Ye)return V.add(Ye.key),it(We,Ye.result,!1,{preventScrollReset:le});let{loaderData:jn,errors:hn}=Uh(k,Sr,Wt,void 0,Jr,Fe);Oa(cr),k.navigation.state==="loading"&&cr>ee?(je(Q,"Expected pending action"),xe&&xe.abort(),dt(k.navigation.location,{matches:Sr,loaderData:jn,errors:hn,fetchers:new Map(k.fetchers)})):(Oe({errors:hn,loaderData:zh(k.loaderData,jn,Sr,hn),fetchers:new Map(k.fetchers)}),ke=!1)}async function Qr(I,j,O,G,ne,me,we,le,de){let pe=k.fetchers.get(I);St(I,ui(de,pe?pe.data:void 0),{flushSync:we});let Te=new AbortController,ye=ho(r.history,O,Te.signal);if(me){let He=await Nn(G,new URL(ye.url).pathname,ye.signal,I);if(He.type==="aborted")return;if(He.type==="error"){Et(I,j,He.error,{flushSync:we});return}else if(He.matches)G=He.matches;else{Et(I,j,Nr(404,{pathname:O}),{flushSync:we});return}}let Ae=Ys(G,O);q.set(I,Te);let $e=ie,yt=vo(c,u,ye,G,Ae,i,ne),kt=(await _r(ye,yt,ne,I))[Ae.route.id];if(q.get(I)===Te&&q.delete(I),!ye.signal.aborted){if(te.has(I)){St(I,kn(void 0));return}if(Ia(kt))if(ee>$e){St(I,kn(void 0));return}else{V.add(I),await it(ye,kt,!1,{preventScrollReset:le});return}if(mr(kt)){Et(I,j,kt.error);return}St(I,kn(kt.data))}}async function it(I,j,O,{submission:G,fetcherSubmission:ne,preventScrollReset:me,replace:we}={}){O||(X==null||X.resolve(),X=null),j.response.headers.has("X-Remix-Revalidate")&&(ke=!0);let le=j.response.headers.get("Location");je(le,"Expected a Location header on the redirect Response"),le=Fh(le,new URL(I.url),m,r.history);let de=_i(k.location,le,{_isRedirect:!0});if(a){let yt=!1;if(j.response.headers.has("X-Remix-Reload-Document"))yt=!0;else if(fl(le)){const pt=Zm(le,!0);yt=pt.origin!==t.location.origin||Lr(pt.pathname,m)==null}if(yt){we?t.location.replace(le):t.location.assign(le);return}}xe=null;let pe=we===!0||j.response.headers.has("X-Remix-Replace")?"REPLACE":"PUSH",{formMethod:Te,formAction:ye,formEncType:Ae}=k.navigation;!G&&!ne&&Te&&ye&&Ae&&(G=Hh(k.navigation));let $e=G||ne;if(_y.has(j.response.status)&&$e&&Ht($e.formMethod))await Ge(pe,de,{submission:{...$e,formAction:le},preventScrollReset:me||ue,enableViewTransition:O?Re:void 0});else{let yt=gu(de,G);await Ge(pe,de,{overrideNavigation:yt,fetcherSubmission:ne,preventScrollReset:me||ue,enableViewTransition:O?Re:void 0})}}async function _r(I,j,O,G){var we;let ne,me={};try{ne=await Ay(y,I,j,G,O,!1)}catch(le){return j.filter(de=>de.shouldLoad).forEach(de=>{me[de.route.id]={type:"error",error:le}}),me}if(I.signal.aborted)return me;if(!Ht(I.method))for(let le of j){if(((we=ne[le.route.id])==null?void 0:we.type)==="error")break;!ne.hasOwnProperty(le.route.id)&&!k.loaderData.hasOwnProperty(le.route.id)&&(!k.errors||!k.errors.hasOwnProperty(le.route.id))&&le.shouldCallHandler()&&(ne[le.route.id]={type:"error",result:new Error(`No result returned from dataStrategy for route ${le.route.id}`)})}for(let[le,de]of Object.entries(ne))if(zy(de)){let pe=de.result;me[le]={type:"redirect",response:My(pe,I,le,j,m)}}else me[le]=await jy(de);return me}async function Dr(I,j,O,G){let ne=_r(O,I,G,null),me=Promise.all(j.map(async de=>{if(de.matches&&de.match&&de.request&&de.controller){let Te=(await _r(de.request,de.matches,G,de.key))[de.match.route.id];return{[de.key]:Te}}else return Promise.resolve({[de.key]:{type:"error",error:Nr(404,{pathname:de.path})}})})),we=await ne,le=(await me).reduce((de,pe)=>Object.assign(de,pe),{});return{loaderResults:we,fetcherResults:le}}function Rn(){ke=!0,J.forEach((I,j)=>{q.has(j)&&Se.add(j),xr(j)})}function St(I,j,O={}){k.fetchers.set(I,j),Oe({fetchers:new Map(k.fetchers)},{flushSync:(O&&O.flushSync)===!0})}function Et(I,j,O,G={}){let ne=ta(k.matches,j);dn(I),Oe({errors:{[ne.route.id]:O},fetchers:new Map(k.fetchers)},{flushSync:(G&&G.flushSync)===!0})}function Zt(I){return ae.set(I,(ae.get(I)||0)+1),te.has(I)&&te.delete(I),k.fetchers.get(I)||xy}function lr(I,j){xr(I,j==null?void 0:j.reason),St(I,kn(null))}function dn(I){let j=k.fetchers.get(I);q.has(I)&&!(j&&j.state==="loading"&&A.has(I))&&xr(I),J.delete(I),A.delete(I),V.delete(I),te.delete(I),Se.delete(I),k.fetchers.delete(I)}function ji(I){let j=(ae.get(I)||0)-1;j<=0?(ae.delete(I),te.add(I)):ae.set(I,j),Oe({fetchers:new Map(k.fetchers)})}function xr(I,j){let O=q.get(I);O&&(O.abort(j),q.delete(I))}function Mi(I){for(let j of I){let O=Zt(j),G=kn(O.data);k.fetchers.set(j,G)}}function Fa(){let I=[],j=!1;for(let O of V){let G=k.fetchers.get(O);je(G,`Expected fetcher: ${O}`),G.state==="loading"&&(V.delete(O),I.push(O),j=!0)}return Mi(I),j}function Oa(I){let j=[];for(let[O,G]of A)if(G<I){let ne=k.fetchers.get(O);je(ne,`Expected fetcher: ${O}`),ne.state==="loading"&&(xr(O),A.delete(O),j.push(O))}return Mi(j),j.length>0}function ko(I,j){let O=k.blockers.get(I)||ci;return oe.get(I)!==j&&oe.set(I,j),O}function Ua(I){k.blockers.delete(I),oe.delete(I)}function An(I,j){let O=k.blockers.get(I)||ci;je(O.state==="unblocked"&&j.state==="blocked"||O.state==="blocked"&&j.state==="blocked"||O.state==="blocked"&&j.state==="proceeding"||O.state==="blocked"&&j.state==="unblocked"||O.state==="proceeding"&&j.state==="unblocked",`Invalid blocker state transition: ${O.state} -> ${j.state}`);let G=new Map(k.blockers);G.set(I,j),Oe({blockers:G})}function fn({currentLocation:I,nextLocation:j,historyAction:O}){if(oe.size===0)return;oe.size>1&&ct(!1,"A router only supports one blocker at a time");let G=Array.from(oe.entries()),[ne,me]=G[G.length-1],we=k.blockers.get(ne);if(!(we&&we.state==="proceeding")&&me({currentLocation:I,nextLocation:j,historyAction:O}))return ne}function Zr(I){let j=Nr(404,{pathname:I}),O=h||f,{matches:G,route:ne}=Us(O);return{notFoundMatches:G,route:ne,error:j}}function Di(I,j,O){if(E=I,L=j,S=O||null,!M&&k.navigation===mu){M=!0;let G=Io(k.location,k.matches);G!=null&&Oe({restoreScrollPosition:G})}return()=>{E=null,L=null,S=null}}function bo(I,j){return S&&S(I,j.map(G=>Yg(G,k.loaderData)))||I.key}function $i(I,j){if(E&&L){let O=bo(I,j);E[O]=L()}}function Io(I,j){if(E){let O=bo(I,j),G=E[O];if(typeof G=="number")return G}return null}function ia(I,j,O){if(r.patchRoutesOnNavigation)if(I){if(Object.keys(I[0].params).length>0)return{active:!0,matches:yi(j,O,m,!0)}}else return{active:!0,matches:yi(j,O,m,!0)||[]};return{active:!1,matches:null}}async function Nn(I,j,O,G){if(!r.patchRoutesOnNavigation)return{type:"success",matches:I};let ne=I;for(;;){let me=h==null,we=h||f,le=u;try{await r.patchRoutesOnNavigation({signal:O,path:j,matches:ne,fetcherKey:G,patch:(Te,ye)=>{O.aborted||jh(Te,ye,we,le,c,!1)}})}catch(Te){return{type:"error",error:Te,partialMatches:ne}}finally{me&&!O.aborted&&(f=[...f])}if(O.aborted)return{type:"aborted"};let de=ea(we,j,m),pe=null;if(de){if(Object.keys(de[0].params).length===0)return{type:"success",matches:de};if(pe=yi(we,j,m,!0),!(pe&&ne.length<pe.length&&To(ne,pe.slice(0,ne.length))))return{type:"success",matches:de}}if(pe||(pe=yi(we,j,m,!0)),!pe||To(ne,pe))return{type:"success",matches:null};ne=pe}}function To(I,j){return I.length===j.length&&I.every((O,G)=>O.route.id===j[G].route.id)}function sa(I){u={},h=xi(I,c,void 0,u)}function Po(I,j,O=!1){let G=h==null;jh(I,j,h||f,u,c,O),G&&(f=[...f],Oe({}))}return H={get basename(){return m},get future(){return w},get state(){return k},get routes(){return f},get window(){return t},initialize:Be,subscribe:Mr,enableScrollRestoration:Di,navigate:Yr,fetch:ir,revalidate:Ne,createHref:I=>r.history.createHref(I),encodeLocation:I=>r.history.encodeLocation(I),getFetcher:Zt,resetFetcher:lr,deleteFetcher:ji,dispose:gt,getBlocker:ko,deleteBlocker:Ua,patchRoutes:Po,_internalFetchControllers:q,_internalSetRoutes:sa,_internalSetStateDoNotUseOrYouWillBreakYourApp(I){Oe(I)}},r.unstable_instrumentations&&(H=py(H,r.unstable_instrumentations.map(I=>I.router).filter(Boolean))),H}function ky(r){return r!=null&&("formData"in r&&r.formData!=null||"body"in r&&r.body!==void 0)}function Ju(r,t,a,i,s,c){let u,f;if(s){u=[];for(let m of t)if(u.push(m),m.route.id===s){f=m;break}}else u=t,f=t[t.length-1];let h=hl(i||".",pl(u),Lr(r.pathname,a)||r.pathname,c==="path");if(i==null&&(h.search=r.search,h.hash=r.hash),(i==null||i===""||i===".")&&f){let m=Ed(h.search);if(f.route.index&&!m)h.search=h.search?h.search.replace(/^\?/,"?index&"):"?index";else if(!f.route.index&&m){let y=new URLSearchParams(h.search),w=y.getAll("index");y.delete("index"),w.filter(x=>x).forEach(x=>y.append("index",x));let v=y.toString();h.search=v?`?${v}`:""}}return a!=="/"&&(h.pathname=sy({basename:a,pathname:h.pathname})),cn(h)}function Nh(r,t,a){if(!a||!ky(a))return{path:t};if(a.formMethod&&!Hy(a.formMethod))return{path:t,error:Nr(405,{method:a.formMethod})};let i=()=>({path:t,error:Nr(400,{type:"invalid-body"})}),c=(a.formMethod||"get").toUpperCase(),u=m1(t);if(a.body!==void 0){if(a.formEncType==="text/plain"){if(!Ht(c))return i();let w=typeof a.body=="string"?a.body:a.body instanceof FormData||a.body instanceof URLSearchParams?Array.from(a.body.entries()).reduce((v,[x,E])=>`${v}${x}=${E}
`,""):String(a.body);return{path:t,submission:{formMethod:c,formAction:u,formEncType:a.formEncType,formData:void 0,json:void 0,text:w}}}else if(a.formEncType==="application/json"){if(!Ht(c))return i();try{let w=typeof a.body=="string"?JSON.parse(a.body):a.body;return{path:t,submission:{formMethod:c,formAction:u,formEncType:a.formEncType,formData:void 0,json:w,text:void 0}}}catch{return i()}}}je(typeof FormData=="function","FormData is not available in this environment");let f,h;if(a.formData)f=td(a.formData),h=a.formData;else if(a.body instanceof FormData)f=td(a.body),h=a.body;else if(a.body instanceof URLSearchParams)f=a.body,h=Oh(f);else if(a.body==null)f=new URLSearchParams,h=new FormData;else try{f=new URLSearchParams(a.body),h=Oh(f)}catch{return i()}let m={formMethod:c,formAction:u,formEncType:a&&a.formEncType||"application/x-www-form-urlencoded",formData:h,json:void 0,text:void 0};if(Ht(m.formMethod))return{path:t,submission:m};let y=oa(t);return r&&y.search&&Ed(y.search)&&f.append("index",""),y.search=`?${f}`,{path:cn(y),submission:m}}function Lh(r,t,a,i,s,c,u,f,h,m,y,w,v,x,E,S,L,M,N,B,U){var Me;let P=B?mr(B[1])?B[1].error:B[1].data:void 0,H=s.createURL(c.location),k=s.createURL(h),Q;if(y&&c.errors){let ke=Object.keys(c.errors)[0];Q=u.findIndex(Se=>Se.route.id===ke)}else if(B&&mr(B[1])){let ke=B[0];Q=u.findIndex(Se=>Se.route.id===ke)-1}let X=B?B[1].statusCode:void 0,ue=X&&X>=400,xe={currentUrl:H,currentParams:((Me=c.matches[0])==null?void 0:Me.params)||{},nextUrl:k,nextParams:u[0].params,...f,actionResult:P,actionStatus:X},Re=Ri(u),Ue=u.map((ke,Se)=>{let{route:q}=ke,ie=null;if(Q!=null&&Se>Q?ie=!1:q.lazy?ie=!0:xd(q)?y?ie=Xu(q,c.loaderData,c.errors):by(c.loaderData,c.matches[Se],ke)&&(ie=!0):ie=!1,ie!==null)return ed(a,i,r,Re,ke,m,t,ie);let ee=!1;typeof U=="boolean"?ee=U:ue?ee=!1:(w||H.pathname+H.search===k.pathname+k.search||H.search!==k.search||Iy(c.matches[Se],ke))&&(ee=!0);let A={...xe,defaultShouldRevalidate:ee},V=Ci(ke,A);return ed(a,i,r,Re,ke,m,t,V,A,U)}),ve=[];return E.forEach((ke,Se)=>{if(y||!u.some(te=>te.route.id===ke.routeId)||x.has(Se))return;let q=c.fetchers.get(Se),ie=q&&q.state!=="idle"&&q.data===void 0,ee=ea(L,ke.path,M);if(!ee){if(N&&ie)return;ve.push({key:Se,routeId:ke.routeId,path:ke.path,matches:null,match:null,request:null,controller:null});return}if(S.has(Se))return;let A=Ys(ee,ke.path),V=new AbortController,J=ho(s,ke.path,V.signal),ae=null;if(v.has(Se))v.delete(Se),ae=vo(a,i,J,ee,A,m,t);else if(ie)w&&(ae=vo(a,i,J,ee,A,m,t));else{let te;typeof U=="boolean"?te=U:ue?te=!1:te=w;let oe={...xe,defaultShouldRevalidate:te};Ci(A,oe)&&(ae=vo(a,i,J,ee,A,m,t,oe))}ae&&ve.push({key:Se,routeId:ke.routeId,path:ke.path,matches:ae,match:A,request:J,controller:V})}),{dsMatches:Ue,revalidatingFetchers:ve}}function xd(r){return r.loader!=null||r.middleware!=null&&r.middleware.length>0}function Xu(r,t,a){if(r.lazy)return!0;if(!xd(r))return!1;let i=t!=null&&r.id in t,s=a!=null&&a[r.id]!==void 0;return!i&&s?!1:typeof r.loader=="function"&&r.loader.hydrate===!0?!0:!i&&!s}function by(r,t,a){let i=!t||a.route.id!==t.route.id,s=!r.hasOwnProperty(a.route.id);return i||s}function Iy(r,t){let a=r.route.path;return r.pathname!==t.pathname||a!=null&&a.endsWith("*")&&r.params["*"]!==t.params["*"]}function Ci(r,t){if(r.route.shouldRevalidate){let a=r.route.shouldRevalidate(t);if(typeof a=="boolean")return a}return t.defaultShouldRevalidate}function jh(r,t,a,i,s,c){let u;if(r){let m=i[r];je(m,`No route found to patch children into: routeId = ${r}`),m.children||(m.children=[]),u=m.children}else u=a;let f=[],h=[];if(t.forEach(m=>{let y=u.find(w=>u1(m,w));y?h.push({existingRoute:y,newRoute:m}):f.push(m)}),f.length>0){let m=xi(f,s,[r||"_","patch",String((u==null?void 0:u.length)||"0")],i);u.push(...m)}if(c&&h.length>0)for(let m=0;m<h.length;m++){let{existingRoute:y,newRoute:w}=h[m],v=y,[x]=xi([w],s,[],{},!0);Object.assign(v,{element:x.element?x.element:v.element,errorElement:x.errorElement?x.errorElement:v.errorElement,hydrateFallbackElement:x.hydrateFallbackElement?x.hydrateFallbackElement:v.hydrateFallbackElement})}}function u1(r,t){return"id"in r&&"id"in t&&r.id===t.id?!0:r.index===t.index&&r.path===t.path&&r.caseSensitive===t.caseSensitive?(!r.children||r.children.length===0)&&(!t.children||t.children.length===0)?!0:r.children.every((a,i)=>{var s;return(s=t.children)==null?void 0:s.some(c=>u1(a,c))}):!1}var Mh=new WeakMap,d1=({key:r,route:t,manifest:a,mapRouteProperties:i})=>{let s=a[t.id];if(je(s,"No route found in manifest"),!s.lazy||typeof s.lazy!="object")return;let c=s.lazy[r];if(!c)return;let u=Mh.get(s);u||(u={},Mh.set(s,u));let f=u[r];if(f)return f;let h=(async()=>{let m=Wg(r),w=s[r]!==void 0&&r!=="hasErrorBoundary";if(m)ct(!m,"Route property "+r+" is not a supported lazy route property. This property will be ignored."),u[r]=Promise.resolve();else if(w)ct(!1,`Route "${s.id}" has a static property "${r}" defined. The lazy property will be ignored.`);else{let v=await c();v!=null&&(Object.assign(s,{[r]:v}),Object.assign(s,i(s)))}typeof s.lazy=="object"&&(s.lazy[r]=void 0,Object.values(s.lazy).every(v=>v===void 0)&&(s.lazy=void 0))})();return u[r]=h,h},Dh=new WeakMap;function Ty(r,t,a,i,s){let c=a[r.id];if(je(c,"No route found in manifest"),!r.lazy)return{lazyRoutePromise:void 0,lazyHandlerPromise:void 0};if(typeof r.lazy=="function"){let y=Dh.get(c);if(y)return{lazyRoutePromise:y,lazyHandlerPromise:y};let w=(async()=>{je(typeof r.lazy=="function","No lazy route function found");let v=await r.lazy(),x={};for(let E in v){let S=v[E];if(S===void 0)continue;let L=Kg(E),N=c[E]!==void 0&&E!=="hasErrorBoundary";L?ct(!L,"Route property "+E+" is not a supported property to be returned from a lazy route function. This property will be ignored."):N?ct(!N,`Route "${c.id}" has a static property "${E}" defined but its lazy function is also returning a value for this property. The lazy route property "${E}" will be ignored.`):x[E]=S}Object.assign(c,x),Object.assign(c,{...i(c),lazy:void 0})})();return Dh.set(c,w),w.catch(()=>{}),{lazyRoutePromise:w,lazyHandlerPromise:w}}let u=Object.keys(r.lazy),f=[],h;for(let y of u){if(s&&s.includes(y))continue;let w=d1({key:y,route:r,manifest:a,mapRouteProperties:i});w&&(f.push(w),y===t&&(h=w))}let m=f.length>0?Promise.all(f).then(()=>{}):void 0;return m==null||m.catch(()=>{}),h==null||h.catch(()=>{}),{lazyRoutePromise:m,lazyHandlerPromise:h}}async function $h(r){let t=r.matches.filter(s=>s.shouldLoad),a={};return(await Promise.all(t.map(s=>s.resolve()))).forEach((s,c)=>{a[t[c].route.id]=s}),a}async function Py(r){return r.matches.some(t=>t.route.middleware)?f1(r,()=>$h(r)):$h(r)}function f1(r,t){return Ry(r,t,i=>{if(Vy(i))throw i;return i},Oy,a);function a(i,s,c){if(c)return Promise.resolve(Object.assign(c.value,{[s]:{type:"error",result:i}}));{let{matches:u}=r,f=Math.min(Math.max(u.findIndex(m=>m.route.id===s),0),Math.max(u.findIndex(m=>m.shouldCallHandler()),0)),h=ta(u,u[f].route.id).route.id;return Promise.resolve({[h]:{type:"error",result:i}})}}}async function Ry(r,t,a,i,s){let{matches:c,request:u,params:f,context:h,unstable_pattern:m}=r,y=c.flatMap(v=>v.route.middleware?v.route.middleware.map(x=>[v.route.id,x]):[]);return await p1({request:u,params:f,context:h,unstable_pattern:m},y,t,a,i,s)}async function p1(r,t,a,i,s,c,u=0){let{request:f}=r;if(f.signal.aborted)throw f.signal.reason??new Error(`Request aborted: ${f.method} ${f.url}`);let h=t[u];if(!h)return await a();let[m,y]=h,w,v=async()=>{if(w)throw new Error("You may only call `next()` once per middleware");try{return w={value:await p1(r,t,a,i,s,c,u+1)},w.value}catch(x){return w={value:await c(x,m,w)},w.value}};try{let x=await y(r,v),E=x!=null?i(x):void 0;return s(E)?E:w?E??w.value:(w={value:await v()},w.value)}catch(x){return await c(x,m,w)}}function h1(r,t,a,i,s){let c=d1({key:"middleware",route:i.route,manifest:t,mapRouteProperties:r}),u=Ty(i.route,Ht(a.method)?"action":"loader",t,r,s);return{middleware:c,route:u.lazyRoutePromise,handler:u.lazyHandlerPromise}}function ed(r,t,a,i,s,c,u,f,h=null,m){let y=!1,w=h1(r,t,a,s,c);return{...s,_lazyPromises:w,shouldLoad:f,shouldRevalidateArgs:h,shouldCallHandler(v){return y=!0,h?typeof m=="boolean"?Ci(s,{...h,defaultShouldRevalidate:m}):typeof v=="boolean"?Ci(s,{...h,defaultShouldRevalidate:v}):Ci(s,h):f},resolve(v){let{lazy:x,loader:E,middleware:S}=s.route,L=y||f||v&&!Ht(a.method)&&(x||E),M=S&&S.length>0&&!E&&!x;return L&&(Ht(a.method)||!M)?Ny({request:a,unstable_pattern:i,match:s,lazyHandlerPromise:w==null?void 0:w.handler,lazyRoutePromise:w==null?void 0:w.route,handlerOverride:v,scopedContext:u}):Promise.resolve({type:"data",result:void 0})}}}function vo(r,t,a,i,s,c,u,f=null){return i.map(h=>h.route.id!==s.route.id?{...h,shouldLoad:!1,shouldRevalidateArgs:f,shouldCallHandler:()=>!1,_lazyPromises:h1(r,t,a,h,c),resolve:()=>Promise.resolve({type:"data",result:void 0})}:ed(r,t,a,Ri(i),h,c,u,!0,f))}async function Ay(r,t,a,i,s,c){a.some(m=>{var y;return(y=m._lazyPromises)==null?void 0:y.middleware})&&await Promise.all(a.map(m=>{var y;return(y=m._lazyPromises)==null?void 0:y.middleware}));let u={request:t,unstable_pattern:Ri(a),params:a[0].params,context:s,matches:a},h=await r({...u,fetcherKey:i,runClientMiddleware:m=>{let y=u;return f1(y,()=>m({...y,fetcherKey:i,runClientMiddleware:()=>{throw new Error("Cannot call `runClientMiddleware()` from within an `runClientMiddleware` handler")}}))}});try{await Promise.all(a.flatMap(m=>{var y,w;return[(y=m._lazyPromises)==null?void 0:y.handler,(w=m._lazyPromises)==null?void 0:w.route]}))}catch{}return h}async function Ny({request:r,unstable_pattern:t,match:a,lazyHandlerPromise:i,lazyRoutePromise:s,handlerOverride:c,scopedContext:u}){let f,h,m=Ht(r.method),y=m?"action":"loader",w=v=>{let x,E=new Promise((M,N)=>x=N);h=()=>x(),r.signal.addEventListener("abort",h);let S=M=>typeof v!="function"?Promise.reject(new Error(`You cannot call the handler for a route which defines a boolean "${y}" [routeId: ${a.route.id}]`)):v({request:r,unstable_pattern:t,params:a.params,context:u},...M!==void 0?[M]:[]),L=(async()=>{try{return{type:"data",result:await(c?c(N=>S(N)):S())}}catch(M){return{type:"error",result:M}}})();return Promise.race([L,E])};try{let v=m?a.route.action:a.route.loader;if(i||s)if(v){let x,[E]=await Promise.all([w(v).catch(S=>{x=S}),i,s]);if(x!==void 0)throw x;f=E}else{await i;let x=m?a.route.action:a.route.loader;if(x)[f]=await Promise.all([w(x),s]);else if(y==="action"){let E=new URL(r.url),S=E.pathname+E.search;throw Nr(405,{method:r.method,pathname:S,routeId:a.route.id})}else return{type:"data",result:void 0}}else if(v)f=await w(v);else{let x=new URL(r.url),E=x.pathname+x.search;throw Nr(404,{pathname:E})}}catch(v){return{type:"error",result:v}}finally{h&&r.signal.removeEventListener("abort",h)}return f}async function Ly(r){let t=r.headers.get("Content-Type");return t&&/\bapplication\/json\b/.test(t)?r.body==null?null:r.json():r.text()}async function jy(r){var i,s,c,u,f;let{result:t,type:a}=r;if(Sd(t)){let h;try{h=await Ly(t)}catch(m){return{type:"error",error:m}}return a==="error"?{type:"error",error:new Pi(t.status,t.statusText,h),statusCode:t.status,headers:t.headers}:{type:"data",data:h,statusCode:t.status,headers:t.headers}}return a==="error"?Vh(t)?t.data instanceof Error?{type:"error",error:t.data,statusCode:(i=t.init)==null?void 0:i.status,headers:(s=t.init)!=null&&s.headers?new Headers(t.init.headers):void 0}:{type:"error",error:Fy(t),statusCode:Ei(t)?t.status:void 0,headers:(c=t.init)!=null&&c.headers?new Headers(t.init.headers):void 0}:{type:"error",error:t,statusCode:Ei(t)?t.status:void 0}:Vh(t)?{type:"data",data:t.data,statusCode:(u=t.init)==null?void 0:u.status,headers:(f=t.init)!=null&&f.headers?new Headers(t.init.headers):void 0}:{type:"data",data:t}}function My(r,t,a,i,s){let c=r.headers.get("Location");if(je(c,"Redirects returned/thrown from loaders/actions must have a Location header"),!fl(c)){let u=i.slice(0,i.findIndex(f=>f.route.id===a)+1);c=Ju(new URL(t.url),u,s,c),r.headers.set("Location",c)}return r}function Fh(r,t,a,i){let s=["about:","blob:","chrome:","chrome-untrusted:","content:","data:","devtools:","file:","filesystem:","javascript:"];if(fl(r)){let c=r,u=c.startsWith("//")?new URL(t.protocol+c):new URL(c);if(s.includes(u.protocol))throw new Error("Invalid redirect location");let f=Lr(u.pathname,a)!=null;if(u.origin===t.origin&&f)return u.pathname+u.search+u.hash}try{let c=i.createURL(r);if(s.includes(c.protocol))throw new Error("Invalid redirect location")}catch{}return r}function ho(r,t,a,i){let s=r.createURL(m1(t)).toString(),c={signal:a};if(i&&Ht(i.formMethod)){let{formMethod:u,formEncType:f}=i;c.method=u.toUpperCase(),f==="application/json"?(c.headers=new Headers({"Content-Type":f}),c.body=JSON.stringify(i.json)):f==="text/plain"?c.body=i.text:f==="application/x-www-form-urlencoded"&&i.formData?c.body=td(i.formData):c.body=i.formData}return new Request(s,c)}function td(r){let t=new URLSearchParams;for(let[a,i]of r.entries())t.append(a,typeof i=="string"?i:i.name);return t}function Oh(r){let t=new FormData;for(let[a,i]of r.entries())t.append(a,i);return t}function Dy(r,t,a,i=!1,s=!1){let c={},u=null,f,h=!1,m={},y=a&&mr(a[1])?a[1].error:void 0;return r.forEach(w=>{if(!(w.route.id in t))return;let v=w.route.id,x=t[v];if(je(!Ia(x),"Cannot handle redirect results in processLoaderData"),mr(x)){let E=x.error;if(y!==void 0&&(E=y,y=void 0),u=u||{},s)u[v]=E;else{let S=ta(r,v);u[S.route.id]==null&&(u[S.route.id]=E)}i||(c[v]=c1),h||(h=!0,f=Ei(x.error)?x.error.status:500),x.headers&&(m[v]=x.headers)}else c[v]=x.data,x.statusCode&&x.statusCode!==200&&!h&&(f=x.statusCode),x.headers&&(m[v]=x.headers)}),y!==void 0&&a&&(u={[a[0]]:y},a[2]&&(c[a[2]]=void 0)),{loaderData:c,errors:u,statusCode:f||200,loaderHeaders:m}}function Uh(r,t,a,i,s,c){let{loaderData:u,errors:f}=Dy(t,a,i);return s.filter(h=>!h.matches||h.matches.some(m=>m.shouldLoad)).forEach(h=>{let{key:m,match:y,controller:w}=h;if(w&&w.signal.aborted)return;let v=c[m];if(je(v,"Did not find corresponding fetcher result"),mr(v)){let x=ta(r.matches,y==null?void 0:y.route.id);f&&f[x.route.id]||(f={...f,[x.route.id]:v.error}),r.fetchers.delete(m)}else if(Ia(v))je(!1,"Unhandled fetcher revalidation redirect");else{let x=kn(v.data);r.fetchers.set(m,x)}}),{loaderData:u,errors:f}}function zh(r,t,a,i){let s=Object.entries(t).filter(([,c])=>c!==c1).reduce((c,[u,f])=>(c[u]=f,c),{});for(let c of a){let u=c.route.id;if(!t.hasOwnProperty(u)&&r.hasOwnProperty(u)&&c.route.loader&&(s[u]=r[u]),i&&i.hasOwnProperty(u))break}return s}function Bh(r){return r?mr(r[1])?{actionData:{}}:{actionData:{[r[0]]:r[1].data}}:{}}function ta(r,t){return(t?r.slice(0,r.findIndex(i=>i.route.id===t)+1):[...r]).reverse().find(i=>i.route.hasErrorBoundary===!0)||r[0]}function Us(r){let t=r.length===1?r[0]:r.find(a=>a.index||!a.path||a.path==="/")||{id:"__shim-error-route__"};return{matches:[{params:{},pathname:"",pathnameBase:"",route:t}],route:t}}function Nr(r,{pathname:t,routeId:a,method:i,type:s,message:c}={}){let u="Unknown Server Error",f="Unknown @remix-run/router error";return r===400?(u="Bad Request",i&&t&&a?f=`You made a ${i} request to "${t}" but did not provide a \`loader\` for route "${a}", so there is no way to handle the request.`:s==="invalid-body"&&(f="Unable to encode submission body")):r===403?(u="Forbidden",f=`Route "${a}" does not match URL "${t}"`):r===404?(u="Not Found",f=`No route matches URL "${t}"`):r===405&&(u="Method Not Allowed",i&&t&&a?f=`You made a ${i.toUpperCase()} request to "${t}" but did not provide an \`action\` for route "${a}", so there is no way to handle the request.`:i&&(f=`Invalid request method "${i.toUpperCase()}"`)),new Pi(r||500,u,new Error(f),!0)}function zs(r){let t=Object.entries(r);for(let a=t.length-1;a>=0;a--){let[i,s]=t[a];if(Ia(s))return{key:i,result:s}}}function m1(r){let t=typeof r=="string"?oa(r):r;return cn({...t,hash:""})}function $y(r,t){return r.pathname!==t.pathname||r.search!==t.search?!1:r.hash===""?t.hash!=="":r.hash===t.hash?!0:t.hash!==""}function Fy(r){var t,a;return new Pi(((t=r.init)==null?void 0:t.status)??500,((a=r.init)==null?void 0:a.statusText)??"Internal Server Error",r.data)}function Oy(r){return r!=null&&typeof r=="object"&&Object.entries(r).every(([t,a])=>typeof t=="string"&&Uy(a))}function Uy(r){return r!=null&&typeof r=="object"&&"type"in r&&"result"in r&&(r.type==="data"||r.type==="error")}function zy(r){return Sd(r.result)&&s1.has(r.result.status)}function mr(r){return r.type==="error"}function Ia(r){return(r&&r.type)==="redirect"}function Vh(r){return typeof r=="object"&&r!=null&&"type"in r&&"data"in r&&"init"in r&&r.type==="DataWithResponseInit"}function Sd(r){return r!=null&&typeof r.status=="number"&&typeof r.statusText=="string"&&typeof r.headers=="object"&&typeof r.body<"u"}function By(r){return s1.has(r)}function Vy(r){return Sd(r)&&By(r.status)&&r.headers.has("Location")}function Hy(r){return Cy.has(r.toUpperCase())}function Ht(r){return vy.has(r.toUpperCase())}function Ed(r){return new URLSearchParams(r).getAll("index").some(t=>t==="")}function Ys(r,t){let a=typeof t=="string"?oa(t).search:t.search;if(r[r.length-1].route.index&&Ed(a||""))return r[r.length-1];let i=r1(r);return i[i.length-1]}function Hh(r){let{formMethod:t,formAction:a,formEncType:i,text:s,formData:c,json:u}=r;if(!(!t||!a||!i)){if(s!=null)return{formMethod:t,formAction:a,formEncType:i,formData:void 0,json:void 0,text:s};if(c!=null)return{formMethod:t,formAction:a,formEncType:i,formData:c,json:void 0,text:void 0};if(u!==void 0)return{formMethod:t,formAction:a,formEncType:i,formData:void 0,json:u,text:void 0}}}function gu(r,t){return t?{state:"loading",location:r,formMethod:t.formMethod,formAction:t.formAction,formEncType:t.formEncType,formData:t.formData,json:t.json,text:t.text}:{state:"loading",location:r,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0}}function Wy(r,t){return{state:"submitting",location:r,formMethod:t.formMethod,formAction:t.formAction,formEncType:t.formEncType,formData:t.formData,json:t.json,text:t.text}}function ui(r,t){return r?{state:"loading",formMethod:r.formMethod,formAction:r.formAction,formEncType:r.formEncType,formData:r.formData,json:r.json,text:r.text,data:t}:{state:"loading",formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0,data:t}}function qy(r,t){return{state:"submitting",formMethod:r.formMethod,formAction:r.formAction,formEncType:r.formEncType,formData:r.formData,json:r.json,text:r.text,data:t?t.data:void 0}}function kn(r){return{state:"idle",formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0,data:r}}function Ky(r,t){try{let a=r.sessionStorage.getItem(l1);if(a){let i=JSON.parse(a);for(let[s,c]of Object.entries(i||{}))c&&Array.isArray(c)&&t.set(s,new Set(c||[]))}}catch{}}function Gy(r,t){if(t.size>0){let a={};for(let[i,s]of t)a[i]=[...s];try{r.sessionStorage.setItem(l1,JSON.stringify(a))}catch(i){ct(!1,`Failed to save applied view transitions in sessionStorage (${i}).`)}}}function Wh(){let r,t,a=new Promise((i,s)=>{r=async c=>{i(c);try{await a}catch{}},t=async c=>{s(c);try{await a}catch{}}});return{promise:a,resolve:r,reject:t}}var Da=_.createContext(null);Da.displayName="DataRouter";var Ai=_.createContext(null);Ai.displayName="DataRouterState";var g1=_.createContext(!1);function Yy(){return _.useContext(g1)}var kd=_.createContext({isTransitioning:!1});kd.displayName="ViewTransition";var y1=_.createContext(new Map);y1.displayName="Fetchers";var Qy=_.createContext(null);Qy.displayName="Await";var wr=_.createContext(null);wr.displayName="Navigation";var ml=_.createContext(null);ml.displayName="Location";var jr=_.createContext({outlet:null,matches:[],isDataRoute:!1});jr.displayName="Route";var bd=_.createContext(null);bd.displayName="RouteError";var v1="REACT_ROUTER_ERROR",Zy="REDIRECT",Jy="ROUTE_ERROR_RESPONSE";function Xy(r){if(r.startsWith(`${v1}:${Zy}:{`))try{let t=JSON.parse(r.slice(28));if(typeof t=="object"&&t&&typeof t.status=="number"&&typeof t.statusText=="string"&&typeof t.location=="string"&&typeof t.reloadDocument=="boolean"&&typeof t.replace=="boolean")return t}catch{}}function ev(r){if(r.startsWith(`${v1}:${Jy}:{`))try{let t=JSON.parse(r.slice(40));if(typeof t=="object"&&t&&typeof t.status=="number"&&typeof t.statusText=="string")return new Pi(t.status,t.statusText,t.data)}catch{}}function tv(r,{relative:t}={}){je($a(),"useHref() may be used only in the context of a <Router> component.");let{basename:a,navigator:i}=_.useContext(wr),{hash:s,pathname:c,search:u}=Ni(r,{relative:t}),f=c;return a!=="/"&&(f=c==="/"?a:sn([a,c])),i.createHref({pathname:f,search:u,hash:s})}function $a(){return _.useContext(ml)!=null}function ot(){return je($a(),"useLocation() may be used only in the context of a <Router> component."),_.useContext(ml).location}function hS(r){je($a(),"useMatch() may be used only in the context of a <Router> component.");let{pathname:t}=ot();return _.useMemo(()=>Si(r,e1(t)),[t,r])}var w1="You should call navigate() in a React.useEffect(), not when your component is first rendered.";function C1(r){_.useContext(wr).static||_.useLayoutEffect(r)}function un(){let{isDataRoute:r}=_.useContext(jr);return r?gv():rv()}function rv(){je($a(),"useNavigate() may be used only in the context of a <Router> component.");let r=_.useContext(Da),{basename:t,navigator:a}=_.useContext(wr),{matches:i}=_.useContext(jr),{pathname:s}=ot(),c=JSON.stringify(pl(i)),u=_.useRef(!1);return C1(()=>{u.current=!0}),_.useCallback((h,m={})=>{if(ct(u.current,w1),!u.current)return;if(typeof h=="number"){a.go(h);return}let y=hl(h,JSON.parse(c),s,m.relative==="path");r==null&&t!=="/"&&(y.pathname=y.pathname==="/"?t:sn([t,y.pathname])),(m.replace?a.replace:a.push)(y,m.state,m)},[t,a,c,s,r])}var nv=_.createContext(null);function av(r){let t=_.useContext(jr).outlet;return _.useMemo(()=>t&&_.createElement(nv.Provider,{value:r},t),[t,r])}function Id(){let{matches:r}=_.useContext(jr),t=r[r.length-1];return t?t.params:{}}function Ni(r,{relative:t}={}){let{matches:a}=_.useContext(jr),{pathname:i}=ot(),s=JSON.stringify(pl(a));return _.useMemo(()=>hl(r,JSON.parse(s),i,t==="path"),[r,s,i,t])}function ov(r,t,a,i,s){je($a(),"useRoutes() may be used only in the context of a <Router> component.");let{navigator:c}=_.useContext(wr),{matches:u}=_.useContext(jr),f=u[u.length-1],h=f?f.params:{},m=f?f.pathname:"/",y=f?f.pathnameBase:"/",w=f&&f.route;{let N=w&&w.path||"";x1(m,!w||N.endsWith("*")||N.endsWith("*?"),`You rendered descendant <Routes> (or called \`useRoutes()\`) at "${m}" (under <Route path="${N}">) 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.
Please change the parent <Route path="${N}"> to <Route path="${N==="/"?"*":`${N}/*`}">.`)}let v=ot(),x;x=v;let E=x.pathname||"/",S=E;if(y!=="/"){let N=y.replace(/^\//,"").split("/");S="/"+E.replace(/^\//,"").split("/").slice(N.length).join("/")}let L=ea(r,{pathname:S});return ct(w||L!=null,`No routes matched location "${x.pathname}${x.search}${x.hash}" `),ct(L==null||L[L.length-1].route.element!==void 0||L[L.length-1].route.Component!==void 0||L[L.length-1].route.lazy!==void 0,`Matched leaf route at location "${x.pathname}${x.search}${x.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.`),uv(L&&L.map(N=>Object.assign({},N,{params:Object.assign({},h,N.params),pathname:sn([y,c.encodeLocation?c.encodeLocation(N.pathname.replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:N.pathname]),pathnameBase:N.pathnameBase==="/"?y:sn([y,c.encodeLocation?c.encodeLocation(N.pathnameBase.replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:N.pathnameBase])})),u,a,i,s)}function iv(){let r=mv(),t=Ei(r)?`${r.status} ${r.statusText}`:r instanceof Error?r.message:JSON.stringify(r),a=r instanceof Error?r.stack:null,i="rgba(200,200,200, 0.5)",s={padding:"0.5rem",backgroundColor:i},c={padding:"2px 4px",backgroundColor:i},u=null;return console.error("Error handled by React Router default ErrorBoundary:",r),u=_.createElement(_.Fragment,null,_.createElement("p",null,"рџ’ї Hey developer рџ‘‹"),_.createElement("p",null,"You can provide a way better UX than this when your app throws errors by providing your own ",_.createElement("code",{style:c},"ErrorBoundary")," or"," ",_.createElement("code",{style:c},"errorElement")," prop on your route.")),_.createElement(_.Fragment,null,_.createElement("h2",null,"Unexpected Application Error!"),_.createElement("h3",{style:{fontStyle:"italic"}},t),a?_.createElement("pre",{style:s},a):null,u)}var sv=_.createElement(iv,null),_1=class extends _.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,t){return t.location!==r.location||t.revalidation!=="idle"&&r.revalidation==="idle"?{error:r.error,location:r.location,revalidation:r.revalidation}:{error:r.error!==void 0?r.error:t.error,location:t.location,revalidation:r.revalidation||t.revalidation}}componentDidCatch(r,t){this.props.onError?this.props.onError(r,t):console.error("React Router caught the following error during render",r)}render(){let r=this.state.error;if(this.context&&typeof r=="object"&&r&&"digest"in r&&typeof r.digest=="string"){const a=ev(r.digest);a&&(r=a)}let t=r!==void 0?_.createElement(jr.Provider,{value:this.props.routeContext},_.createElement(bd.Provider,{value:r,children:this.props.component})):this.props.children;return this.context?_.createElement(lv,{error:r},t):t}};_1.contextType=g1;var yu=new WeakMap;function lv({children:r,error:t}){let{basename:a}=_.useContext(wr);if(typeof t=="object"&&t&&"digest"in t&&typeof t.digest=="string"){let i=Xy(t.digest);if(i){let s=yu.get(t);if(s)throw s;let c=a1(i.location,a);if(n1&&!yu.get(t))if(c.isExternal||i.reloadDocument)window.location.href=c.absoluteURL||c.to;else{const u=Promise.resolve().then(()=>window.__reactRouterDataRouter.navigate(c.to,{replace:i.replace}));throw yu.set(t,u),u}return _.createElement("meta",{httpEquiv:"refresh",content:`0;url=${c.absoluteURL||c.to}`})}}return r}function cv({routeContext:r,match:t,children:a}){let i=_.useContext(Da);return i&&i.static&&i.staticContext&&(t.route.errorElement||t.route.ErrorBoundary)&&(i.staticContext._deepestRenderedBoundaryId=t.route.id),_.createElement(jr.Provider,{value:r},a)}function uv(r,t=[],a=null,i=null,s=null){if(r==null){if(!a)return null;if(a.errors)r=a.matches;else if(t.length===0&&!a.initialized&&a.matches.length>0)r=a.matches;else return null}let c=r,u=a==null?void 0:a.errors;if(u!=null){let y=c.findIndex(w=>w.route.id&&(u==null?void 0:u[w.route.id])!==void 0);je(y>=0,`Could not find a matching route for errors on route IDs: ${Object.keys(u).join(",")}`),c=c.slice(0,Math.min(c.length,y+1))}let f=!1,h=-1;if(a)for(let y=0;y<c.length;y++){let w=c[y];if((w.route.HydrateFallback||w.route.hydrateFallbackElement)&&(h=y),w.route.id){let{loaderData:v,errors:x}=a,E=w.route.loader&&!v.hasOwnProperty(w.route.id)&&(!x||x[w.route.id]===void 0);if(w.route.lazy||E){f=!0,h>=0?c=c.slice(0,h+1):c=[c[0]];break}}}let m=a&&i?(y,w)=>{var v,x;i(y,{location:a.location,params:((x=(v=a.matches)==null?void 0:v[0])==null?void 0:x.params)??{},unstable_pattern:Ri(a.matches),errorInfo:w})}:void 0;return c.reduceRight((y,w,v)=>{let x,E=!1,S=null,L=null;a&&(x=u&&w.route.id?u[w.route.id]:void 0,S=w.route.errorElement||sv,f&&(h<0&&v===0?(x1("route-fallback",!1,"No `HydrateFallback` element provided to render during initial hydration"),E=!0,L=null):h===v&&(E=!0,L=w.route.hydrateFallbackElement||null)));let M=t.concat(c.slice(0,v+1)),N=()=>{let B;return x?B=S:E?B=L:w.route.Component?B=_.createElement(w.route.Component,null):w.route.element?B=w.route.element:B=y,_.createElement(cv,{match:w,routeContext:{outlet:y,matches:M,isDataRoute:a!=null},children:B})};return a&&(w.route.ErrorBoundary||w.route.errorElement||v===0)?_.createElement(_1,{location:a.location,revalidation:a.revalidation,component:S,error:x,children:N(),routeContext:{outlet:null,matches:M,isDataRoute:!0},onError:m}):N()},null)}function Td(r){return`${r} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function dv(r){let t=_.useContext(Da);return je(t,Td(r)),t}function fv(r){let t=_.useContext(Ai);return je(t,Td(r)),t}function pv(r){let t=_.useContext(jr);return je(t,Td(r)),t}function Pd(r){let t=pv(r),a=t.matches[t.matches.length-1];return je(a.route.id,`${r} can only be used on routes that contain a unique "id"`),a.route.id}function hv(){return Pd("useRouteId")}function mv(){var i;let r=_.useContext(bd),t=fv("useRouteError"),a=Pd("useRouteError");return r!==void 0?r:(i=t.errors)==null?void 0:i[a]}function gv(){let{router:r}=dv("useNavigate"),t=Pd("useNavigate"),a=_.useRef(!1);return C1(()=>{a.current=!0}),_.useCallback(async(s,c={})=>{ct(a.current,w1),a.current&&(typeof s=="number"?await r.navigate(s):await r.navigate(s,{fromRouteId:t,...c}))},[r,t])}var qh={};function x1(r,t,a){!t&&!qh[r]&&(qh[r]=!0,ct(!1,a))}var Kh={};function Gh(r,t){!r&&!Kh[t]&&(Kh[t]=!0,console.warn(t))}var yv="useOptimistic",Yh=Ag[yv],vv=()=>{};function wv(r){return Yh?Yh(r):[r,vv]}function Cv(r){let t={hasErrorBoundary:r.hasErrorBoundary||r.ErrorBoundary!=null||r.errorElement!=null};return r.Component&&(r.element&&ct(!1,"You should not include both `Component` and `element` on your route - `Component` will be used."),Object.assign(t,{element:_.createElement(r.Component),Component:void 0})),r.HydrateFallback&&(r.hydrateFallbackElement&&ct(!1,"You should not include both `HydrateFallback` and `hydrateFallbackElement` on your route - `HydrateFallback` will be used."),Object.assign(t,{hydrateFallbackElement:_.createElement(r.HydrateFallback),HydrateFallback:void 0})),r.ErrorBoundary&&(r.errorElement&&ct(!1,"You should not include both `ErrorBoundary` and `errorElement` on your route - `ErrorBoundary` will be used."),Object.assign(t,{errorElement:_.createElement(r.ErrorBoundary),ErrorBoundary:void 0})),t}var _v=["HydrateFallback","hydrateFallbackElement"],xv=class{constructor(){this.status="pending",this.promise=new Promise((r,t)=>{this.resolve=a=>{this.status==="pending"&&(this.status="resolved",r(a))},this.reject=a=>{this.status==="pending"&&(this.status="rejected",t(a))}})}};function Sv({router:r,flushSync:t,onError:a,unstable_useTransitions:i}){i=Yy()||i;let[c,u]=_.useState(r.state),[f,h]=wv(c),[m,y]=_.useState(),[w,v]=_.useState({isTransitioning:!1}),[x,E]=_.useState(),[S,L]=_.useState(),[M,N]=_.useState(),B=_.useRef(new Map),U=_.useCallback((Q,{deletedFetchers:X,newErrors:ue,flushSync:xe,viewTransitionOpts:Re})=>{ue&&a&&Object.values(ue).forEach(ve=>{var Me;return a(ve,{location:Q.location,params:((Me=Q.matches[0])==null?void 0:Me.params)??{},unstable_pattern:Ri(Q.matches)})}),Q.fetchers.forEach((ve,Me)=>{ve.data!==void 0&&B.current.set(Me,ve.data)}),X.forEach(ve=>B.current.delete(ve)),Gh(xe===!1||t!=null,'You provided the `flushSync` option to a router update, but you are not using the `<RouterProvider>` from `react-router/dom` so `ReactDOM.flushSync()` is unavailable. Please update your app to `import { RouterProvider } from "react-router/dom"` and ensure you have `react-dom` installed as a dependency to use the `flushSync` option.');let Ue=r.window!=null&&r.window.document!=null&&typeof r.window.document.startViewTransition=="function";if(Gh(Re==null||Ue,"You provided the `viewTransition` option to a router update, but you do not appear to be running in a DOM environment as `window.startViewTransition` is not available."),!Re||!Ue){t&&xe?t(()=>u(Q)):i===!1?u(Q):_.startTransition(()=>{i===!0&&h(ve=>Qh(ve,Q)),u(Q)});return}if(t&&xe){t(()=>{S&&(x==null||x.resolve(),S.skipTransition()),v({isTransitioning:!0,flushSync:!0,currentLocation:Re.currentLocation,nextLocation:Re.nextLocation})});let ve=r.window.document.startViewTransition(()=>{t(()=>u(Q))});ve.finished.finally(()=>{t(()=>{E(void 0),L(void 0),y(void 0),v({isTransitioning:!1})})}),t(()=>L(ve));return}S?(x==null||x.resolve(),S.skipTransition(),N({state:Q,currentLocation:Re.currentLocation,nextLocation:Re.nextLocation})):(y(Q),v({isTransitioning:!0,flushSync:!1,currentLocation:Re.currentLocation,nextLocation:Re.nextLocation}))},[r.window,t,S,x,i,h,a]);_.useLayoutEffect(()=>r.subscribe(U),[r,U]),_.useEffect(()=>{w.isTransitioning&&!w.flushSync&&E(new xv)},[w]),_.useEffect(()=>{if(x&&m&&r.window){let Q=m,X=x.promise,ue=r.window.document.startViewTransition(async()=>{i===!1?u(Q):_.startTransition(()=>{i===!0&&h(xe=>Qh(xe,Q)),u(Q)}),await X});ue.finished.finally(()=>{E(void 0),L(void 0),y(void 0),v({isTransitioning:!1})}),L(ue)}},[m,x,r.window,i,h]),_.useEffect(()=>{x&&m&&f.location.key===m.location.key&&x.resolve()},[x,S,f.location,m]),_.useEffect(()=>{!w.isTransitioning&&M&&(y(M.state),v({isTransitioning:!0,flushSync:!1,currentLocation:M.currentLocation,nextLocation:M.nextLocation}),N(void 0))},[w.isTransitioning,M]);let P=_.useMemo(()=>({createHref:r.createHref,encodeLocation:r.encodeLocation,go:Q=>r.navigate(Q),push:(Q,X,ue)=>r.navigate(Q,{state:X,preventScrollReset:ue==null?void 0:ue.preventScrollReset}),replace:(Q,X,ue)=>r.navigate(Q,{replace:!0,state:X,preventScrollReset:ue==null?void 0:ue.preventScrollReset})}),[r]),H=r.basename||"/",k=_.useMemo(()=>({router:r,navigator:P,static:!1,basename:H,onError:a}),[r,P,H,a]);return _.createElement(_.Fragment,null,_.createElement(Da.Provider,{value:k},_.createElement(Ai.Provider,{value:f},_.createElement(y1.Provider,{value:B.current},_.createElement(kd.Provider,{value:w},_.createElement(bv,{basename:H,location:f.location,navigationType:f.historyAction,navigator:P,unstable_useTransitions:i},_.createElement(Ev,{routes:r.routes,future:r.future,state:f,onError:a})))))),null)}function Qh(r,t){return{...r,navigation:t.navigation.state!=="idle"?t.navigation:r.navigation,revalidation:t.revalidation!=="idle"?t.revalidation:r.revalidation,actionData:t.navigation.state!=="submitting"?t.actionData:r.actionData,fetchers:t.fetchers}}var Ev=_.memo(kv);function kv({routes:r,future:t,state:a,onError:i}){return ov(r,void 0,a,i,t)}function ln({to:r,replace:t,state:a,relative:i}){je($a(),"<Navigate> may be used only in the context of a <Router> component.");let{static:s}=_.useContext(wr);ct(!s,"<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:c}=_.useContext(jr),{pathname:u}=ot(),f=un(),h=hl(r,pl(c),u,i==="path"),m=JSON.stringify(h);return _.useEffect(()=>{f(JSON.parse(m),{replace:t,state:a,relative:i})},[f,m,i,t,a]),null}function gl(r){return av(r.context)}function bv({basename:r="/",children:t=null,location:a,navigationType:i="POP",navigator:s,static:c=!1,unstable_useTransitions:u}){je(!$a(),"You cannot render a <Router> inside another <Router>. You should never have more than one in your app.");let f=r.replace(/^\/*/,"/"),h=_.useMemo(()=>({basename:f,navigator:s,static:c,unstable_useTransitions:u,future:{}}),[f,s,c,u]);typeof a=="string"&&(a=oa(a));let{pathname:m="/",search:y="",hash:w="",state:v=null,key:x="default"}=a,E=_.useMemo(()=>{let S=Lr(m,f);return S==null?null:{location:{pathname:S,search:y,hash:w,state:v,key:x},navigationType:i}},[f,m,y,w,v,x,i]);return ct(E!=null,`<Router basename="${f}"> is not able to match the URL "${m}${y}${w}" because it does not start with the basename, so the <Router> won't render anything.`),E==null?null:_.createElement(wr.Provider,{value:h},_.createElement(ml.Provider,{children:t,value:E}))}var Qs="get",Zs="application/x-www-form-urlencoded";function yl(r){return typeof HTMLElement<"u"&&r instanceof HTMLElement}function Iv(r){return yl(r)&&r.tagName.toLowerCase()==="button"}function Tv(r){return yl(r)&&r.tagName.toLowerCase()==="form"}function Pv(r){return yl(r)&&r.tagName.toLowerCase()==="input"}function Rv(r){return!!(r.metaKey||r.altKey||r.ctrlKey||r.shiftKey)}function Av(r,t){return r.button===0&&(!t||t==="_self")&&!Rv(r)}function rd(r=""){return new URLSearchParams(typeof r=="string"||Array.isArray(r)||r instanceof URLSearchParams?r:Object.keys(r).reduce((t,a)=>{let i=r[a];return t.concat(Array.isArray(i)?i.map(s=>[a,s]):[[a,i]])},[]))}function Nv(r,t){let a=rd(r);return t&&t.forEach((i,s)=>{a.has(s)||t.getAll(s).forEach(c=>{a.append(s,c)})}),a}var Bs=null;function Lv(){if(Bs===null)try{new FormData(document.createElement("form"),0),Bs=!1}catch{Bs=!0}return Bs}var jv=new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);function vu(r){return r!=null&&!jv.has(r)?(ct(!1,`"${r}" is not a valid \`encType\` for \`<Form>\`/\`<fetcher.Form>\` and will default to "${Zs}"`),null):r}function Mv(r,t){let a,i,s,c,u;if(Tv(r)){let f=r.getAttribute("action");i=f?Lr(f,t):null,a=r.getAttribute("method")||Qs,s=vu(r.getAttribute("enctype"))||Zs,c=new FormData(r)}else if(Iv(r)||Pv(r)&&(r.type==="submit"||r.type==="image")){let f=r.form;if(f==null)throw new Error('Cannot submit a <button> or <input type="submit"> without a <form>');let h=r.getAttribute("formaction")||f.getAttribute("action");if(i=h?Lr(h,t):null,a=r.getAttribute("formmethod")||f.getAttribute("method")||Qs,s=vu(r.getAttribute("formenctype"))||vu(f.getAttribute("enctype"))||Zs,c=new FormData(f,r),!Lv()){let{name:m,type:y,value:w}=r;if(y==="image"){let v=m?`${m}.`:"";c.append(`${v}x`,"0"),c.append(`${v}y`,"0")}else m&&c.append(m,w)}}else{if(yl(r))throw new Error('Cannot submit element that is not <form>, <button>, or <input type="submit|image">');a=Qs,i=null,s=Zs,u=r}return c&&s==="text/plain"&&(u=c,c=void 0),{action:i,method:a.toLowerCase(),encType:s,formData:c,body:u}}Object.getOwnPropertyNames(Object.prototype).sort().join("\0");function Rd(r,t){if(r===!1||r===null||typeof r>"u")throw new Error(t)}function Dv(r,t,a,i){let s=typeof r=="string"?new URL(r,typeof window>"u"?"server://singlefetch/":window.location.origin):r;return a?s.pathname.endsWith("/")?s.pathname=`${s.pathname}_.${i}`:s.pathname=`${s.pathname}.${i}`:s.pathname==="/"?s.pathname=`_root.${i}`:t&&Lr(s.pathname,t)==="/"?s.pathname=`${t.replace(/\/$/,"")}/_root.${i}`:s.pathname=`${s.pathname.replace(/\/$/,"")}.${i}`,s}async function $v(r,t){if(r.id in t)return t[r.id];try{let a=await import(r.module);return t[r.id]=a,a}catch(a){return console.error(`Error loading route module \`${r.module}\`, reloading page...`),console.error(a),window.__reactRouterContext&&window.__reactRouterContext.isSpaMode,window.location.reload(),new Promise(()=>{})}}function Fv(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 Ov(r,t,a){let i=await Promise.all(r.map(async s=>{let c=t.routes[s.route.id];if(c){let u=await $v(c,a);return u.links?u.links():[]}return[]}));return Vv(i.flat(1).filter(Fv).filter(s=>s.rel==="stylesheet"||s.rel==="preload").map(s=>s.rel==="stylesheet"?{...s,rel:"prefetch",as:"style"}:{...s,rel:"prefetch"}))}function Zh(r,t,a,i,s,c){let u=(h,m)=>a[m]?h.route.id!==a[m].route.id:!0,f=(h,m)=>{var y;return a[m].pathname!==h.pathname||((y=a[m].route.path)==null?void 0:y.endsWith("*"))&&a[m].params["*"]!==h.params["*"]};return c==="assets"?t.filter((h,m)=>u(h,m)||f(h,m)):c==="data"?t.filter((h,m)=>{var w;let y=i.routes[h.route.id];if(!y||!y.hasLoader)return!1;if(u(h,m)||f(h,m))return!0;if(h.route.shouldRevalidate){let v=h.route.shouldRevalidate({currentUrl:new URL(s.pathname+s.search+s.hash,window.origin),currentParams:((w=a[0])==null?void 0:w.params)||{},nextUrl:new URL(r,window.origin),nextParams:h.params,defaultShouldRevalidate:!0});if(typeof v=="boolean")return v}return!0}):[]}function Uv(r,t,{includeHydrateFallback:a}={}){return zv(r.map(i=>{let s=t.routes[i.route.id];if(!s)return[];let c=[s.module];return s.clientActionModule&&(c=c.concat(s.clientActionModule)),s.clientLoaderModule&&(c=c.concat(s.clientLoaderModule)),a&&s.hydrateFallbackModule&&(c=c.concat(s.hydrateFallbackModule)),s.imports&&(c=c.concat(s.imports)),c}).flat(1))}function zv(r){return[...new Set(r)]}function Bv(r){let t={},a=Object.keys(r).sort();for(let i of a)t[i]=r[i];return t}function Vv(r,t){let a=new Set;return new Set(t),r.reduce((i,s)=>{let c=JSON.stringify(Bv(s));return a.has(c)||(a.add(c),i.push({key:c,link:s})),i},[])}function S1(){let r=_.useContext(Da);return Rd(r,"You must render this element inside a <DataRouterContext.Provider> element"),r}function Hv(){let r=_.useContext(Ai);return Rd(r,"You must render this element inside a <DataRouterStateContext.Provider> element"),r}var Ad=_.createContext(void 0);Ad.displayName="FrameworkContext";function E1(){let r=_.useContext(Ad);return Rd(r,"You must render this element inside a <HydratedRouter> element"),r}function Wv(r,t){let a=_.useContext(Ad),[i,s]=_.useState(!1),[c,u]=_.useState(!1),{onFocus:f,onBlur:h,onMouseEnter:m,onMouseLeave:y,onTouchStart:w}=t,v=_.useRef(null);_.useEffect(()=>{if(r==="render"&&u(!0),r==="viewport"){let S=M=>{M.forEach(N=>{u(N.isIntersecting)})},L=new IntersectionObserver(S,{threshold:.5});return v.current&&L.observe(v.current),()=>{L.disconnect()}}},[r]),_.useEffect(()=>{if(i){let S=setTimeout(()=>{u(!0)},100);return()=>{clearTimeout(S)}}},[i]);let x=()=>{s(!0)},E=()=>{s(!1),u(!1)};return a?r!=="intent"?[c,v,{}]:[c,v,{onFocus:di(f,x),onBlur:di(h,E),onMouseEnter:di(m,x),onMouseLeave:di(y,E),onTouchStart:di(w,x)}]:[!1,v,{}]}function di(r,t){return a=>{r&&r(a),a.defaultPrevented||t(a)}}function qv({page:r,...t}){let{router:a}=S1(),i=_.useMemo(()=>ea(a.routes,r,a.basename),[a.routes,r,a.basename]);return i?_.createElement(Gv,{page:r,matches:i,...t}):null}function Kv(r){let{manifest:t,routeModules:a}=E1(),[i,s]=_.useState([]);return _.useEffect(()=>{let c=!1;return Ov(r,t,a).then(u=>{c||s(u)}),()=>{c=!0}},[r,t,a]),i}function Gv({page:r,matches:t,...a}){let i=ot(),{future:s,manifest:c,routeModules:u}=E1(),{basename:f}=S1(),{loaderData:h,matches:m}=Hv(),y=_.useMemo(()=>Zh(r,t,m,c,i,"data"),[r,t,m,c,i]),w=_.useMemo(()=>Zh(r,t,m,c,i,"assets"),[r,t,m,c,i]),v=_.useMemo(()=>{if(r===i.pathname+i.search+i.hash)return[];let S=new Set,L=!1;if(t.forEach(N=>{var U;let B=c.routes[N.route.id];!B||!B.hasLoader||(!y.some(P=>P.route.id===N.route.id)&&N.route.id in h&&((U=u[N.route.id])!=null&&U.shouldRevalidate)||B.hasClientLoader?L=!0:S.add(N.route.id))}),S.size===0)return[];let M=Dv(r,f,s.unstable_trailingSlashAwareDataRequests,"data");return L&&S.size>0&&M.searchParams.set("_routes",t.filter(N=>S.has(N.route.id)).map(N=>N.route.id).join(",")),[M.pathname+M.search]},[f,s.unstable_trailingSlashAwareDataRequests,h,i,c,y,t,r,u]),x=_.useMemo(()=>Uv(w,c),[w,c]),E=Kv(w);return _.createElement(_.Fragment,null,v.map(S=>_.createElement("link",{key:S,rel:"prefetch",as:"fetch",href:S,...a})),x.map(S=>_.createElement("link",{key:S,rel:"modulepreload",href:S,...a})),E.map(({key:S,link:L})=>_.createElement("link",{key:S,nonce:a.nonce,...L})))}function Yv(...r){return t=>{r.forEach(a=>{typeof a=="function"?a(t):a!=null&&(a.current=t)})}}var Qv=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";try{Qv&&(window.__reactRouterVersion="7.12.0")}catch{}function Zv(r,t){return Ey({basename:t==null?void 0:t.basename,getContext:t==null?void 0:t.getContext,future:t==null?void 0:t.future,history:zg({window:t==null?void 0:t.window}),hydrationData:Jv(),routes:r,mapRouteProperties:Cv,hydrationRouteProperties:_v,dataStrategy:t==null?void 0:t.dataStrategy,patchRoutesOnNavigation:t==null?void 0:t.patchRoutesOnNavigation,window:t==null?void 0:t.window,unstable_instrumentations:t==null?void 0:t.unstable_instrumentations}).initialize()}function Jv(){let r=window==null?void 0:window.__staticRouterHydrationData;return r&&r.errors&&(r={...r,errors:Xv(r.errors)}),r}function Xv(r){if(!r)return null;let t=Object.entries(r),a={};for(let[i,s]of t)if(s&&s.__type==="RouteErrorResponse")a[i]=new Pi(s.status,s.statusText,s.data,s.internal===!0);else if(s&&s.__type==="Error"){if(s.__subType){let c=window[s.__subType];if(typeof c=="function")try{let u=new c(s.message);u.stack="",a[i]=u}catch{}}if(a[i]==null){let c=new Error(s.message);c.stack="",a[i]=c}}else a[i]=s;return a}var k1=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,Qe=_.forwardRef(function({onClick:t,discover:a="render",prefetch:i="none",relative:s,reloadDocument:c,replace:u,state:f,target:h,to:m,preventScrollReset:y,viewTransition:w,unstable_defaultShouldRevalidate:v,...x},E){let{basename:S,unstable_useTransitions:L}=_.useContext(wr),M=typeof m=="string"&&k1.test(m),N=a1(m,S);m=N.to;let B=tv(m,{relative:s}),[U,P,H]=Wv(i,x),k=nw(m,{replace:u,state:f,target:h,preventScrollReset:y,relative:s,viewTransition:w,unstable_defaultShouldRevalidate:v,unstable_useTransitions:L});function Q(ue){t&&t(ue),ue.defaultPrevented||k(ue)}let X=_.createElement("a",{...x,...H,href:N.absoluteURL||B,onClick:N.isExternal||c?t:Q,ref:Yv(E,P),target:h,"data-discover":!M&&a==="render"?"true":void 0});return U&&!M?_.createElement(_.Fragment,null,X,_.createElement(qv,{page:B})):X});Qe.displayName="Link";var ew=_.forwardRef(function({"aria-current":t="page",caseSensitive:a=!1,className:i="",end:s=!1,style:c,to:u,viewTransition:f,children:h,...m},y){let w=Ni(u,{relative:m.relative}),v=ot(),x=_.useContext(Ai),{navigator:E,basename:S}=_.useContext(wr),L=x!=null&&lw(w)&&f===!0,M=E.encodeLocation?E.encodeLocation(w).pathname:w.pathname,N=v.pathname,B=x&&x.navigation&&x.navigation.location?x.navigation.location.pathname:null;a||(N=N.toLowerCase(),B=B?B.toLowerCase():null,M=M.toLowerCase()),B&&S&&(B=Lr(B,S)||B);const U=M!=="/"&&M.endsWith("/")?M.length-1:M.length;let P=N===M||!s&&N.startsWith(M)&&N.charAt(U)==="/",H=B!=null&&(B===M||!s&&B.startsWith(M)&&B.charAt(M.length)==="/"),k={isActive:P,isPending:H,isTransitioning:L},Q=P?t:void 0,X;typeof i=="function"?X=i(k):X=[i,P?"active":null,H?"pending":null,L?"transitioning":null].filter(Boolean).join(" ");let ue=typeof c=="function"?c(k):c;return _.createElement(Qe,{...m,"aria-current":Q,className:X,ref:y,style:ue,to:u,viewTransition:f},typeof h=="function"?h(k):h)});ew.displayName="NavLink";var tw=_.forwardRef(({discover:r="render",fetcherKey:t,navigate:a,reloadDocument:i,replace:s,state:c,method:u=Qs,action:f,onSubmit:h,relative:m,preventScrollReset:y,viewTransition:w,unstable_defaultShouldRevalidate:v,...x},E)=>{let{unstable_useTransitions:S}=_.useContext(wr),L=iw(),M=sw(f,{relative:m}),N=u.toLowerCase()==="get"?"get":"post",B=typeof f=="string"&&k1.test(f),U=P=>{if(h&&h(P),P.defaultPrevented)return;P.preventDefault();let H=P.nativeEvent.submitter,k=(H==null?void 0:H.getAttribute("formmethod"))||u,Q=()=>L(H||P.currentTarget,{fetcherKey:t,method:k,navigate:a,replace:s,state:c,relative:m,preventScrollReset:y,viewTransition:w,unstable_defaultShouldRevalidate:v});S&&a!==!1?_.startTransition(()=>Q()):Q()};return _.createElement("form",{ref:E,method:N,action:M,onSubmit:i?h:U,...x,"data-discover":!B&&r==="render"?"true":void 0})});tw.displayName="Form";function rw(r){return`${r} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function b1(r){let t=_.useContext(Da);return je(t,rw(r)),t}function nw(r,{target:t,replace:a,state:i,preventScrollReset:s,relative:c,viewTransition:u,unstable_defaultShouldRevalidate:f,unstable_useTransitions:h}={}){let m=un(),y=ot(),w=Ni(r,{relative:c});return _.useCallback(v=>{if(Av(v,t)){v.preventDefault();let x=a!==void 0?a:cn(y)===cn(w),E=()=>m(r,{replace:x,state:i,preventScrollReset:s,relative:c,viewTransition:u,unstable_defaultShouldRevalidate:f});h?_.startTransition(()=>E()):E()}},[y,m,w,a,i,t,r,s,c,u,f,h])}function Nd(r){ct(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 t=_.useRef(rd(r)),a=_.useRef(!1),i=ot(),s=_.useMemo(()=>Nv(i.search,a.current?null:t.current),[i.search]),c=un(),u=_.useCallback((f,h)=>{const m=rd(typeof f=="function"?f(new URLSearchParams(s)):f);a.current=!0,c("?"+m,h)},[c,s]);return[s,u]}var aw=0,ow=()=>`__${String(++aw)}__`;function iw(){let{router:r}=b1("useSubmit"),{basename:t}=_.useContext(wr),a=hv(),i=r.fetch,s=r.navigate;return _.useCallback(async(c,u={})=>{let{action:f,method:h,encType:m,formData:y,body:w}=Mv(c,t);if(u.navigate===!1){let v=u.fetcherKey||ow();await i(v,a,u.action||f,{unstable_defaultShouldRevalidate:u.unstable_defaultShouldRevalidate,preventScrollReset:u.preventScrollReset,formData:y,body:w,formMethod:u.method||h,formEncType:u.encType||m,flushSync:u.flushSync})}else await s(u.action||f,{unstable_defaultShouldRevalidate:u.unstable_defaultShouldRevalidate,preventScrollReset:u.preventScrollReset,formData:y,body:w,formMethod:u.method||h,formEncType:u.encType||m,replace:u.replace,state:u.state,fromRouteId:a,flushSync:u.flushSync,viewTransition:u.viewTransition})},[i,s,t,a])}function sw(r,{relative:t}={}){let{basename:a}=_.useContext(wr),i=_.useContext(jr);je(i,"useFormAction must be used inside a RouteContext");let[s]=i.matches.slice(-1),c={...Ni(r||".",{relative:t})},u=ot();if(r==null){c.search=u.search;let f=new URLSearchParams(c.search),h=f.getAll("index");if(h.some(y=>y==="")){f.delete("index"),h.filter(w=>w).forEach(w=>f.append("index",w));let y=f.toString();c.search=y?`?${y}`:""}}return(!r||r===".")&&s.route.index&&(c.search=c.search?c.search.replace(/^\?/,"?index&"):"?index"),a!=="/"&&(c.pathname=c.pathname==="/"?a:sn([a,c.pathname])),cn(c)}function lw(r,{relative:t}={}){let a=_.useContext(kd);je(a!=null,"`useViewTransitionState` must be used within `react-router-dom`'s `RouterProvider`. Did you accidentally import `RouterProvider` from `react-router`?");let{basename:i}=b1("useViewTransitionState"),s=Ni(r,{relative:t});if(!a.isTransitioning)return!1;let c=Lr(a.currentLocation.pathname,i)||a.currentLocation.pathname,u=Lr(a.nextLocation.pathname,i)||a.nextLocation.pathname;return Si(s.pathname,u)!=null||Si(s.pathname,c)!=null}var vl=Gm();const cw=Eo(vl);function uw(r){return _.createElement(Sv,{flushSync:vl.flushSync,...r})}var wu,Jh;function dw(){if(Jh)return wu;Jh=1;var r=typeof Element<"u",t=typeof Map=="function",a=typeof Set=="function",i=typeof ArrayBuffer=="function"&&!!ArrayBuffer.isView;function s(c,u){if(c===u)return!0;if(c&&u&&typeof c=="object"&&typeof u=="object"){if(c.constructor!==u.constructor)return!1;var f,h,m;if(Array.isArray(c)){if(f=c.length,f!=u.length)return!1;for(h=f;h--!==0;)if(!s(c[h],u[h]))return!1;return!0}var y;if(t&&c instanceof Map&&u instanceof Map){if(c.size!==u.size)return!1;for(y=c.entries();!(h=y.next()).done;)if(!u.has(h.value[0]))return!1;for(y=c.entries();!(h=y.next()).done;)if(!s(h.value[1],u.get(h.value[0])))return!1;return!0}if(a&&c instanceof Set&&u instanceof Set){if(c.size!==u.size)return!1;for(y=c.entries();!(h=y.next()).done;)if(!u.has(h.value[0]))return!1;return!0}if(i&&ArrayBuffer.isView(c)&&ArrayBuffer.isView(u)){if(f=c.length,f!=u.length)return!1;for(h=f;h--!==0;)if(c[h]!==u[h])return!1;return!0}if(c.constructor===RegExp)return c.source===u.source&&c.flags===u.flags;if(c.valueOf!==Object.prototype.valueOf&&typeof c.valueOf=="function"&&typeof u.valueOf=="function")return c.valueOf()===u.valueOf();if(c.toString!==Object.prototype.toString&&typeof c.toString=="function"&&typeof u.toString=="function")return c.toString()===u.toString();if(m=Object.keys(c),f=m.length,f!==Object.keys(u).length)return!1;for(h=f;h--!==0;)if(!Object.prototype.hasOwnProperty.call(u,m[h]))return!1;if(r&&c instanceof Element)return!1;for(h=f;h--!==0;)if(!((m[h]==="_owner"||m[h]==="__v"||m[h]==="__o")&&c.$$typeof)&&!s(c[m[h]],u[m[h]]))return!1;return!0}return c!==c&&u!==u}return wu=function(u,f){try{return s(u,f)}catch(h){if((h.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw h}},wu}var fw=dw();const pw=Eo(fw);var Cu,Xh;function hw(){if(Xh)return Cu;Xh=1;var r=function(t,a,i,s,c,u,f,h){if(!t){var m;if(a===void 0)m=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var y=[i,s,c,u,f,h],w=0;m=new Error(a.replace(/%s/g,function(){return y[w++]})),m.name="Invariant Violation"}throw m.framesToPop=1,m}};return Cu=r,Cu}var mw=hw();const em=Eo(mw);var _u,tm;function gw(){return tm||(tm=1,_u=function(t,a,i,s){var c=i?i.call(s,t,a):void 0;if(c!==void 0)return!!c;if(t===a)return!0;if(typeof t!="object"||!t||typeof a!="object"||!a)return!1;var u=Object.keys(t),f=Object.keys(a);if(u.length!==f.length)return!1;for(var h=Object.prototype.hasOwnProperty.bind(a),m=0;m<u.length;m++){var y=u[m];if(!h(y))return!1;var w=t[y],v=a[y];if(c=i?i.call(s,w,v,y):void 0,c===!1||c===void 0&&w!==v)return!1}return!0}),_u}var yw=gw();const vw=Eo(yw);var I1=(r=>(r.BASE="base",r.BODY="body",r.HEAD="head",r.HTML="html",r.LINK="link",r.META="meta",r.NOSCRIPT="noscript",r.SCRIPT="script",r.STYLE="style",r.TITLE="title",r.FRAGMENT="Symbol(react.fragment)",r))(I1||{}),xu={link:{rel:["amphtml","canonical","alternate"]},script:{type:["application/ld+json"]},meta:{charset:"",name:["generator","robots","description"],property:["og:type","og:title","og:url","og:image","og:image:alt","og:description","twitter:url","twitter:title","twitter:description","twitter:image","twitter:image:alt","twitter:card","twitter:site"]}},rm=Object.values(I1),Ld={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},ww=Object.entries(Ld).reduce((r,[t,a])=>(r[a]=t,r),{}),Kr="data-rh",wo={DEFAULT_TITLE:"defaultTitle",DEFER:"defer",ENCODE_SPECIAL_CHARACTERS:"encodeSpecialCharacters",ON_CHANGE_CLIENT_STATE:"onChangeClientState",TITLE_TEMPLATE:"titleTemplate",PRIORITIZE_SEO_TAGS:"prioritizeSeoTags"},Co=(r,t)=>{for(let a=r.length-1;a>=0;a-=1){const i=r[a];if(Object.prototype.hasOwnProperty.call(i,t))return i[t]}return null},Cw=r=>{let t=Co(r,"title");const a=Co(r,wo.TITLE_TEMPLATE);if(Array.isArray(t)&&(t=t.join("")),a&&t)return a.replace(/%s/g,()=>t);const i=Co(r,wo.DEFAULT_TITLE);return t||i||void 0},_w=r=>Co(r,wo.ON_CHANGE_CLIENT_STATE)||(()=>{}),Su=(r,t)=>t.filter(a=>typeof a[r]<"u").map(a=>a[r]).reduce((a,i)=>({...a,...i}),{}),xw=(r,t)=>t.filter(a=>typeof a.base<"u").map(a=>a.base).reverse().reduce((a,i)=>{if(!a.length){const s=Object.keys(i);for(let c=0;c<s.length;c+=1){const f=s[c].toLowerCase();if(r.indexOf(f)!==-1&&i[f])return a.concat(i)}}return a},[]),Sw=r=>console&&typeof console.warn=="function"&&console.warn(r),fi=(r,t,a)=>{const i={};return a.filter(s=>Array.isArray(s[r])?!0:(typeof s[r]<"u"&&Sw(`Helmet: ${r} should be of type "Array". Instead found type "${typeof s[r]}"`),!1)).map(s=>s[r]).reverse().reduce((s,c)=>{const u={};c.filter(h=>{let m;const y=Object.keys(h);for(let v=0;v<y.length;v+=1){const x=y[v],E=x.toLowerCase();t.indexOf(E)!==-1&&!(m==="rel"&&h[m].toLowerCase()==="canonical")&&!(E==="rel"&&h[E].toLowerCase()==="stylesheet")&&(m=E),t.indexOf(x)!==-1&&(x==="innerHTML"||x==="cssText"||x==="itemprop")&&(m=x)}if(!m||!h[m])return!1;const w=h[m].toLowerCase();return i[m]||(i[m]={}),u[m]||(u[m]={}),i[m][w]?!1:(u[m][w]=!0,!0)}).reverse().forEach(h=>s.push(h));const f=Object.keys(u);for(let h=0;h<f.length;h+=1){const m=f[h],y={...i[m],...u[m]};i[m]=y}return s},[]).reverse()},Ew=(r,t)=>{if(Array.isArray(r)&&r.length){for(let a=0;a<r.length;a+=1)if(r[a][t])return!0}return!1},kw=r=>({baseTag:xw(["href"],r),bodyAttributes:Su("bodyAttributes",r),defer:Co(r,wo.DEFER),encode:Co(r,wo.ENCODE_SPECIAL_CHARACTERS),htmlAttributes:Su("htmlAttributes",r),linkTags:fi("link",["rel","href"],r),metaTags:fi("meta",["name","charset","http-equiv","property","itemprop"],r),noscriptTags:fi("noscript",["innerHTML"],r),onChangeClientState:_w(r),scriptTags:fi("script",["src","innerHTML"],r),styleTags:fi("style",["cssText"],r),title:Cw(r),titleAttributes:Su("titleAttributes",r),prioritizeSeoTags:Ew(r,wo.PRIORITIZE_SEO_TAGS)}),T1=r=>Array.isArray(r)?r.join(""):r,bw=(r,t)=>{const a=Object.keys(r);for(let i=0;i<a.length;i+=1)if(t[a[i]]&&t[a[i]].includes(r[a[i]]))return!0;return!1},Eu=(r,t)=>Array.isArray(r)?r.reduce((a,i)=>(bw(i,t)?a.priority.push(i):a.default.push(i),a),{priority:[],default:[]}):{default:r,priority:[]},nm=(r,t)=>({...r,[t]:void 0}),Iw=["noscript","script","style"],nd=(r,t=!0)=>t===!1?String(r):String(r).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'"),P1=r=>Object.keys(r).reduce((t,a)=>{const i=typeof r[a]<"u"?`${a}="${r[a]}"`:`${a}`;return t?`${t} ${i}`:i},""),Tw=(r,t,a,i)=>{const s=P1(a),c=T1(t);return s?`<${r} ${Kr}="true" ${s}>${nd(c,i)}</${r}>`:`<${r} ${Kr}="true">${nd(c,i)}</${r}>`},Pw=(r,t,a=!0)=>t.reduce((i,s)=>{const c=s,u=Object.keys(c).filter(m=>!(m==="innerHTML"||m==="cssText")).reduce((m,y)=>{const w=typeof c[y]>"u"?y:`${y}="${nd(c[y],a)}"`;return m?`${m} ${w}`:w},""),f=c.innerHTML||c.cssText||"",h=Iw.indexOf(r)===-1;return`${i}<${r} ${Kr}="true" ${u}${h?"/>":`>${f}</${r}>`}`},""),R1=(r,t={})=>Object.keys(r).reduce((a,i)=>{const s=Ld[i];return a[s||i]=r[i],a},t),Rw=(r,t,a)=>{const i={key:t,[Kr]:!0},s=R1(a,i);return[on.createElement("title",s,t)]},Js=(r,t)=>t.map((a,i)=>{const s={key:i,[Kr]:!0};return Object.keys(a).forEach(c=>{const f=Ld[c]||c;if(f==="innerHTML"||f==="cssText"){const h=a.innerHTML||a.cssText;s.dangerouslySetInnerHTML={__html:h}}else s[f]=a[c]}),on.createElement(r,s)}),Ar=(r,t,a=!0)=>{switch(r){case"title":return{toComponent:()=>Rw(r,t.title,t.titleAttributes),toString:()=>Tw(r,t.title,t.titleAttributes,a)};case"bodyAttributes":case"htmlAttributes":return{toComponent:()=>R1(t),toString:()=>P1(t)};default:return{toComponent:()=>Js(r,t),toString:()=>Pw(r,t,a)}}},Aw=({metaTags:r,linkTags:t,scriptTags:a,encode:i})=>{const s=Eu(r,xu.meta),c=Eu(t,xu.link),u=Eu(a,xu.script);return{priorityMethods:{toComponent:()=>[...Js("meta",s.priority),...Js("link",c.priority),...Js("script",u.priority)],toString:()=>`${Ar("meta",s.priority,i)} ${Ar("link",c.priority,i)} ${Ar("script",u.priority,i)}`},metaTags:s.default,linkTags:c.default,scriptTags:u.default}},Nw=r=>{const{baseTag:t,bodyAttributes:a,encode:i=!0,htmlAttributes:s,noscriptTags:c,styleTags:u,title:f="",titleAttributes:h,prioritizeSeoTags:m}=r;let{linkTags:y,metaTags:w,scriptTags:v}=r,x={toComponent:()=>{},toString:()=>""};return m&&({priorityMethods:x,linkTags:y,metaTags:w,scriptTags:v}=Aw(r)),{priority:x,base:Ar("base",t,i),bodyAttributes:Ar("bodyAttributes",a,i),htmlAttributes:Ar("htmlAttributes",s,i),link:Ar("link",y,i),meta:Ar("meta",w,i),noscript:Ar("noscript",c,i),script:Ar("script",v,i),style:Ar("style",u,i),title:Ar("title",{title:f,titleAttributes:h},i)}},ad=Nw,Vs=[],A1=!!(typeof window<"u"&&window.document&&window.document.createElement),od=class{constructor(r,t){F(this,"instances",[]);F(this,"canUseDOM",A1);F(this,"context");F(this,"value",{setHelmet:r=>{this.context.helmet=r},helmetInstances:{get:()=>this.canUseDOM?Vs:this.instances,add:r=>{(this.canUseDOM?Vs:this.instances).push(r)},remove:r=>{const t=(this.canUseDOM?Vs:this.instances).indexOf(r);(this.canUseDOM?Vs:this.instances).splice(t,1)}}});this.context=r,this.canUseDOM=t||!1,t||(r.helmet=ad({baseTag:[],bodyAttributes:{},htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}}))}},Lw={},N1=on.createContext(Lw),Ta,L1=(Ta=class extends _.Component{constructor(a){super(a);F(this,"helmetData");this.helmetData=new od(this.props.context||{},Ta.canUseDOM)}render(){return on.createElement(N1.Provider,{value:this.helmetData.value},this.props.children)}},F(Ta,"canUseDOM",A1),Ta),co=(r,t)=>{const a=document.head||document.querySelector("head"),i=a.querySelectorAll(`${r}[${Kr}]`),s=[].slice.call(i),c=[];let u;return t&&t.length&&t.forEach(f=>{const h=document.createElement(r);for(const m in f)if(Object.prototype.hasOwnProperty.call(f,m))if(m==="innerHTML")h.innerHTML=f.innerHTML;else if(m==="cssText")h.styleSheet?h.styleSheet.cssText=f.cssText:h.appendChild(document.createTextNode(f.cssText));else{const y=m,w=typeof f[y]>"u"?"":f[y];h.setAttribute(m,w)}h.setAttribute(Kr,"true"),s.some((m,y)=>(u=y,h.isEqualNode(m)))?s.splice(u,1):c.push(h)}),s.forEach(f=>{var h;return(h=f.parentNode)==null?void 0:h.removeChild(f)}),c.forEach(f=>a.appendChild(f)),{oldTags:s,newTags:c}},id=(r,t)=>{const a=document.getElementsByTagName(r)[0];if(!a)return;const i=a.getAttribute(Kr),s=i?i.split(","):[],c=[...s],u=Object.keys(t);for(const f of u){const h=t[f]||"";a.getAttribute(f)!==h&&a.setAttribute(f,h),s.indexOf(f)===-1&&s.push(f);const m=c.indexOf(f);m!==-1&&c.splice(m,1)}for(let f=c.length-1;f>=0;f-=1)a.removeAttribute(c[f]);s.length===c.length?a.removeAttribute(Kr):a.getAttribute(Kr)!==u.join(",")&&a.setAttribute(Kr,u.join(","))},jw=(r,t)=>{typeof r<"u"&&document.title!==r&&(document.title=T1(r)),id("title",t)},am=(r,t)=>{const{baseTag:a,bodyAttributes:i,htmlAttributes:s,linkTags:c,metaTags:u,noscriptTags:f,onChangeClientState:h,scriptTags:m,styleTags:y,title:w,titleAttributes:v}=r;id("body",i),id("html",s),jw(w,v);const x={baseTag:co("base",a),linkTags:co("link",c),metaTags:co("meta",u),noscriptTags:co("noscript",f),scriptTags:co("script",m),styleTags:co("style",y)},E={},S={};Object.keys(x).forEach(L=>{const{newTags:M,oldTags:N}=x[L];M.length&&(E[L]=M),N.length&&(S[L]=x[L].oldTags)}),t&&t(),h(r,E,S)},pi=null,Mw=r=>{pi&&cancelAnimationFrame(pi),r.defer?pi=requestAnimationFrame(()=>{am(r,()=>{pi=null})}):(am(r),pi=null)},Dw=Mw,om=class extends _.Component{constructor(){super(...arguments);F(this,"rendered",!1)}shouldComponentUpdate(t){return!vw(t,this.props)}componentDidUpdate(){this.emitChange()}componentWillUnmount(){const{helmetInstances:t}=this.props.context;t.remove(this),this.emitChange()}emitChange(){const{helmetInstances:t,setHelmet:a}=this.props.context;let i=null;const s=kw(t.get().map(c=>{const u={...c.props};return delete u.context,u}));L1.canUseDOM?Dw(s):ad&&(i=ad(s)),a(i)}init(){if(this.rendered)return;this.rendered=!0;const{helmetInstances:t}=this.props.context;t.add(this),this.emitChange()}render(){return this.init(),null}},Zu,mS=(Zu=class extends _.Component{shouldComponentUpdate(r){return!pw(nm(this.props,"helmetData"),nm(r,"helmetData"))}mapNestedChildrenToProps(r,t){if(!t)return null;switch(r.type){case"script":case"noscript":return{innerHTML:t};case"style":return{cssText:t};default:throw new Error(`<${r.type} /> elements are self-closing and can not contain children. Refer to our API for more information.`)}}flattenArrayTypeChildren(r,t,a,i){return{...t,[r.type]:[...t[r.type]||[],{...a,...this.mapNestedChildrenToProps(r,i)}]}}mapObjectTypeChildren(r,t,a,i){switch(r.type){case"title":return{...t,[r.type]:i,titleAttributes:{...a}};case"body":return{...t,bodyAttributes:{...a}};case"html":return{...t,htmlAttributes:{...a}};default:return{...t,[r.type]:{...a}}}}mapArrayTypeChildrenToProps(r,t){let a={...t};return Object.keys(r).forEach(i=>{a={...a,[i]:r[i]}}),a}warnOnInvalidChildren(r,t){return em(rm.some(a=>r.type===a),typeof r.type=="function"?"You may be attempting to nest <Helmet> components within each other, which is not allowed. Refer to our API for more information.":`Only elements types ${rm.join(", ")} are allowed. Helmet does not support rendering <${r.type}> elements. Refer to our API for more information.`),em(!t||typeof t=="string"||Array.isArray(t)&&!t.some(a=>typeof a!="string"),`Helmet expects a string as a child of <${r.type}>. Did you forget to wrap your children in braces? ( <${r.type}>{\`\`}</${r.type}> ) Refer to our API for more information.`),!0}mapChildrenToProps(r,t){let a={};return on.Children.forEach(r,i=>{if(!i||!i.props)return;const{children:s,...c}=i.props,u=Object.keys(c).reduce((h,m)=>(h[ww[m]||m]=c[m],h),{});let{type:f}=i;switch(typeof f=="symbol"?f=f.toString():this.warnOnInvalidChildren(i,s),f){case"Symbol(react.fragment)":t=this.mapChildrenToProps(s,t);break;case"link":case"meta":case"noscript":case"script":case"style":a=this.flattenArrayTypeChildren(i,a,u,s);break;default:t=this.mapObjectTypeChildren(i,t,u,s);break}}),this.mapArrayTypeChildrenToProps(a,t)}render(){const{children:r,...t}=this.props;let a={...t},{helmetData:i}=t;if(r&&(a=this.mapChildrenToProps(r,a)),i&&!(i instanceof od)){const s=i;i=new od(s.context,!0),delete a.helmetData}return i?on.createElement(om,{...a,context:i.value}):on.createElement(N1.Consumer,null,s=>on.createElement(om,{...a,context:s}))}},F(Zu,"defaultProps",{defer:!0,encodeSpecialCharacters:!0,prioritizeSeoTags:!1}),Zu),ku={exports:{}},bu={};/**
* @license React
* use-sync-external-store-with-selector.production.js
*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/var im;function $w(){if(im)return bu;im=1;var r=dl();function t(h,m){return h===m&&(h!==0||1/h===1/m)||h!==h&&m!==m}var a=typeof Object.is=="function"?Object.is:t,i=r.useSyncExternalStore,s=r.useRef,c=r.useEffect,u=r.useMemo,f=r.useDebugValue;return bu.useSyncExternalStoreWithSelector=function(h,m,y,w,v){var x=s(null);if(x.current===null){var E={hasValue:!1,value:null};x.current=E}else E=x.current;x=u(function(){function L(P){if(!M){if(M=!0,N=P,P=w(P),v!==void 0&&E.hasValue){var H=E.value;if(v(H,P))return B=H}return B=P}if(H=B,a(N,P))return H;var k=w(P);return v!==void 0&&v(H,k)?(N=P,H):(N=P,B=k)}var M=!1,N,B,U=y===void 0?null:y;return[function(){return L(m())},U===null?void 0:function(){return L(U())}]},[m,y,w,v]);var S=i(h,x[0],x[1]);return c(function(){E.hasValue=!0,E.value=S},[S]),f(S),S},bu}var sm;function Fw(){return sm||(sm=1,ku.exports=$w()),ku.exports}var Ow=Fw();function Uw(r){r()}function zw(){let r=null,t=null;return{clear(){r=null,t=null},notify(){Uw(()=>{let a=r;for(;a;)a.callback(),a=a.next})},get(){const a=[];let i=r;for(;i;)a.push(i),i=i.next;return a},subscribe(a){let i=!0;const s=t={callback:a,next:null,prev:t};return s.prev?s.prev.next=s:r=s,function(){!i||r===null||(i=!1,s.next?s.next.prev=s.prev:t=s.prev,s.prev?s.prev.next=s.next:r=s.next)}}}}var lm={notify(){},get:()=>[]};function Bw(r,t){let a,i=lm,s=0,c=!1;function u(S){y();const L=i.subscribe(S);let M=!1;return()=>{M||(M=!0,L(),w())}}function f(){i.notify()}function h(){E.onStateChange&&E.onStateChange()}function m(){return c}function y(){s++,a||(a=r.subscribe(h),i=zw())}function w(){s--,a&&s===0&&(a(),a=void 0,i.clear(),i=lm)}function v(){c||(c=!0,y())}function x(){c&&(c=!1,w())}const E={addNestedSub:u,notifyNestedSubs:f,handleChangeWrapper:h,isSubscribed:m,trySubscribe:v,tryUnsubscribe:x,getListeners:()=>i};return E}var Vw=()=>typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",Hw=Vw(),Ww=()=>typeof navigator<"u"&&navigator.product==="ReactNative",qw=Ww(),Kw=()=>Hw||qw?_.useLayoutEffect:_.useEffect,Gw=Kw(),Iu=Symbol.for("react-redux-context"),Tu=typeof globalThis<"u"?globalThis:{};function Yw(){if(!_.createContext)return{};const r=Tu[Iu]??(Tu[Iu]=new Map);let t=r.get(_.createContext);return t||(t=_.createContext(null),r.set(_.createContext,t)),t}var na=Yw();function Qw(r){const{children:t,context:a,serverState:i,store:s}=r,c=_.useMemo(()=>{const h=Bw(s);return{store:s,subscription:h,getServerState:i?()=>i:void 0}},[s,i]),u=_.useMemo(()=>s.getState(),[s]);Gw(()=>{const{subscription:h}=c;return h.onStateChange=h.notifyNestedSubs,h.trySubscribe(),u!==s.getState()&&h.notifyNestedSubs(),()=>{h.tryUnsubscribe(),h.onStateChange=void 0}},[c,u]);const f=a||na;return _.createElement(f.Provider,{value:c},t)}var Zw=Qw;function jd(r=na){return function(){return _.useContext(r)}}var j1=jd();function M1(r=na){const t=r===na?j1:jd(r),a=()=>{const{store:i}=t();return i};return Object.assign(a,{withTypes:()=>a}),a}var Jw=M1();function Xw(r=na){const t=r===na?Jw:M1(r),a=()=>t().dispatch;return Object.assign(a,{withTypes:()=>a}),a}var e6=Xw(),t6=(r,t)=>r===t;function r6(r=na){const t=r===na?j1:jd(r),a=(i,s={})=>{const{equalityFn:c=t6}=typeof s=="function"?{equalityFn:s}:s,u=t(),{store:f,subscription:h,getServerState:m}=u;_.useRef(!0);const y=_.useCallback({[i.name](v){return i(v)}}[i.name],[i]),w=Ow.useSyncExternalStoreWithSelector(h.addNestedSub,f.getState,m||f.getState,y,c);return _.useDebugValue(w),w};return Object.assign(a,{withTypes:()=>a}),a}var n6=r6();function Lt(r){return`Minified Redux error #${r}; visit https://redux.js.org/Errors?code=${r} for the full message or use the non-minified dev environment for full errors. `}var a6=typeof Symbol=="function"&&Symbol.observable||"@@observable",cm=a6,Pu=()=>Math.random().toString(36).substring(7).split("").join("."),o6={INIT:`@@redux/INIT${Pu()}`,REPLACE:`@@redux/REPLACE${Pu()}`,PROBE_UNKNOWN_ACTION:()=>`@@redux/PROBE_UNKNOWN_ACTION${Pu()}`},nl=o6;function Md(r){if(typeof r!="object"||r===null)return!1;let t=r;for(;Object.getPrototypeOf(t)!==null;)t=Object.getPrototypeOf(t);return Object.getPrototypeOf(r)===t||Object.getPrototypeOf(r)===null}function D1(r,t,a){if(typeof r!="function")throw new Error(Lt(2));if(typeof t=="function"&&typeof a=="function"||typeof a=="function"&&typeof arguments[3]=="function")throw new Error(Lt(0));if(typeof t=="function"&&typeof a>"u"&&(a=t,t=void 0),typeof a<"u"){if(typeof a!="function")throw new Error(Lt(1));return a(D1)(r,t)}let i=r,s=t,c=new Map,u=c,f=0,h=!1;function m(){u===c&&(u=new Map,c.forEach((L,M)=>{u.set(M,L)}))}function y(){if(h)throw new Error(Lt(3));return s}function w(L){if(typeof L!="function")throw new Error(Lt(4));if(h)throw new Error(Lt(5));let M=!0;m();const N=f++;return u.set(N,L),function(){if(M){if(h)throw new Error(Lt(6));M=!1,m(),u.delete(N),c=null}}}function v(L){if(!Md(L))throw new Error(Lt(7));if(typeof L.type>"u")throw new Error(Lt(8));if(typeof L.type!="string")throw new Error(Lt(17));if(h)throw new Error(Lt(9));try{h=!0,s=i(s,L)}finally{h=!1}return(c=u).forEach(N=>{N()}),L}function x(L){if(typeof L!="function")throw new Error(Lt(10));i=L,v({type:nl.REPLACE})}function E(){const L=w;return{subscribe(M){if(typeof M!="object"||M===null)throw new Error(Lt(11));function N(){const U=M;U.next&&U.next(y())}return N(),{unsubscribe:L(N)}},[cm](){return this}}}return v({type:nl.INIT}),{dispatch:v,subscribe:w,getState:y,replaceReducer:x,[cm]:E}}function i6(r){Object.keys(r).forEach(t=>{const a=r[t];if(typeof a(void 0,{type:nl.INIT})>"u")throw new Error(Lt(12));if(typeof a(void 0,{type:nl.PROBE_UNKNOWN_ACTION()})>"u")throw new Error(Lt(13))})}function s6(r){const t=Object.keys(r),a={};for(let c=0;c<t.length;c++){const u=t[c];typeof r[u]=="function"&&(a[u]=r[u])}const i=Object.keys(a);let s;try{i6(a)}catch(c){s=c}return function(u={},f){if(s)throw s;let h=!1;const m={};for(let y=0;y<i.length;y++){const w=i[y],v=a[w],x=u[w],E=v(x,f);if(typeof E>"u")throw f&&f.type,new Error(Lt(14));m[w]=E,h=h||E!==x}return h=h||i.length!==Object.keys(u).length,h?m:u}}function al(...r){return r.length===0?t=>t:r.length===1?r[0]:r.reduce((t,a)=>(...i)=>t(a(...i)))}function l6(...r){return t=>(a,i)=>{const s=t(a,i);let c=()=>{throw new Error(Lt(15))};const u={getState:s.getState,dispatch:(h,...m)=>c(h,...m)},f=r.map(h=>h(u));return c=al(...f)(s.dispatch),{...s,dispatch:c}}}function $1(r){return Md(r)&&"type"in r&&typeof r.type=="string"}var F1=Symbol.for("immer-nothing"),um=Symbol.for("immer-draftable"),yr=Symbol.for("immer-state");function qr(r,...t){throw new Error(`[Immer] minified error nr: ${r}. Full error at: https://bit.ly/3cXEKWf`)}var So=Object.getPrototypeOf;function La(r){return!!r&&!!r[yr]}function In(r){var t;return r?O1(r)||Array.isArray(r)||!!r[um]||!!((t=r.constructor)!=null&&t[um])||Cl(r)||_l(r):!1}var c6=Object.prototype.constructor.toString();function O1(r){if(!r||typeof r!="object")return!1;const t=So(r);if(t===null)return!0;const a=Object.hasOwnProperty.call(t,"constructor")&&t.constructor;return a===Object?!0:typeof a=="function"&&Function.toString.call(a)===c6}function ol(r,t){wl(r)===0?Reflect.ownKeys(r).forEach(a=>{t(a,r[a],r)}):r.forEach((a,i)=>t(i,a,r))}function wl(r){const t=r[yr];return t?t.type_:Array.isArray(r)?1:Cl(r)?2:_l(r)?3:0}function sd(r,t){return wl(r)===2?r.has(t):Object.prototype.hasOwnProperty.call(r,t)}function U1(r,t,a){const i=wl(r);i===2?r.set(t,a):i===3?r.add(a):r[t]=a}function u6(r,t){return r===t?r!==0||1/r===1/t:r!==r&&t!==t}function Cl(r){return r instanceof Map}function _l(r){return r instanceof Set}function ba(r){return r.copy_||r.base_}function ld(r,t){if(Cl(r))return new Map(r);if(_l(r))return new Set(r);if(Array.isArray(r))return Array.prototype.slice.call(r);const a=O1(r);if(t===!0||t==="class_only"&&!a){const i=Object.getOwnPropertyDescriptors(r);delete i[yr];let s=Reflect.ownKeys(i);for(let c=0;c<s.length;c++){const u=s[c],f=i[u];f.writable===!1&&(f.writable=!0,f.configurable=!0),(f.get||f.set)&&(i[u]={configurable:!0,writable:!0,enumerable:f.enumerable,value:r[u]})}return Object.create(So(r),i)}else{const i=So(r);if(i!==null&&a)return{...r};const s=Object.create(i);return Object.assign(s,r)}}function Dd(r,t=!1){return xl(r)||La(r)||!In(r)||(wl(r)>1&&(r.set=r.add=r.clear=r.delete=d6),Object.freeze(r),t&&Object.entries(r).forEach(([a,i])=>Dd(i,!0))),r}function d6(){qr(2)}function xl(r){return Object.isFrozen(r)}var f6={};function ja(r){const t=f6[r];return t||qr(0,r),t}var ki;function z1(){return ki}function p6(r,t){return{drafts_:[],parent_:r,immer_:t,canAutoFreeze_:!0,unfinalizedDrafts_:0}}function dm(r,t){t&&(ja("Patches"),r.patches_=[],r.inversePatches_=[],r.patchListener_=t)}function cd(r){ud(r),r.drafts_.forEach(h6),r.drafts_=null}function ud(r){r===ki&&(ki=r.parent_)}function fm(r){return ki=p6(ki,r)}function h6(r){const t=r[yr];t.type_===0||t.type_===1?t.revoke_():t.revoked_=!0}function pm(r,t){t.unfinalizedDrafts_=t.drafts_.length;const a=t.drafts_[0];return r!==void 0&&r!==a?(a[yr].modified_&&(cd(t),qr(4)),In(r)&&(r=il(t,r),t.parent_||sl(t,r)),t.patches_&&ja("Patches").generateReplacementPatches_(a[yr].base_,r,t.patches_,t.inversePatches_)):r=il(t,a,[]),cd(t),t.patches_&&t.patchListener_(t.patches_,t.inversePatches_),r!==F1?r:void 0}function il(r,t,a){if(xl(t))return t;const i=t[yr];if(!i)return ol(t,(s,c)=>hm(r,i,t,s,c,a)),t;if(i.scope_!==r)return t;if(!i.modified_)return sl(r,i.base_,!0),i.base_;if(!i.finalized_){i.finalized_=!0,i.scope_.unfinalizedDrafts_--;const s=i.copy_;let c=s,u=!1;i.type_===3&&(c=new Set(s),s.clear(),u=!0),ol(c,(f,h)=>hm(r,i,s,f,h,a,u)),sl(r,s,!1),a&&r.patches_&&ja("Patches").generatePatches_(i,a,r.patches_,r.inversePatches_)}return i.copy_}function hm(r,t,a,i,s,c,u){if(La(s)){const f=c&&t&&t.type_!==3&&!sd(t.assigned_,i)?c.concat(i):void 0,h=il(r,s,f);if(U1(a,i,h),La(h))r.canAutoFreeze_=!1;else return}else u&&a.add(s);if(In(s)&&!xl(s)){if(!r.immer_.autoFreeze_&&r.unfinalizedDrafts_<1)return;il(r,s),(!t||!t.scope_.parent_)&&typeof i!="symbol"&&Object.prototype.propertyIsEnumerable.call(a,i)&&sl(r,s)}}function sl(r,t,a=!1){!r.parent_&&r.immer_.autoFreeze_&&r.canAutoFreeze_&&Dd(t,a)}function m6(r,t){const a=Array.isArray(r),i={type_:a?1:0,scope_:t?t.scope_:z1(),modified_:!1,finalized_:!1,assigned_:{},parent_:t,base_:r,draft_:null,copy_:null,revoke_:null,isManual_:!1};let s=i,c=$d;a&&(s=[i],c=bi);const{revoke:u,proxy:f}=Proxy.revocable(s,c);return i.draft_=f,i.revoke_=u,f}var $d={get(r,t){if(t===yr)return r;const a=ba(r);if(!sd(a,t))return g6(r,a,t);const i=a[t];return r.finalized_||!In(i)?i:i===Ru(r.base_,t)?(Au(r),r.copy_[t]=fd(i,r)):i},has(r,t){return t in ba(r)},ownKeys(r){return Reflect.ownKeys(ba(r))},set(r,t,a){const i=B1(ba(r),t);if(i!=null&&i.set)return i.set.call(r.draft_,a),!0;if(!r.modified_){const s=Ru(ba(r),t),c=s==null?void 0:s[yr];if(c&&c.base_===a)return r.copy_[t]=a,r.assigned_[t]=!1,!0;if(u6(a,s)&&(a!==void 0||sd(r.base_,t)))return!0;Au(r),dd(r)}return r.copy_[t]===a&&(a!==void 0||t in r.copy_)||Number.isNaN(a)&&Number.isNaN(r.copy_[t])||(r.copy_[t]=a,r.assigned_[t]=!0),!0},deleteProperty(r,t){return Ru(r.base_,t)!==void 0||t in r.base_?(r.assigned_[t]=!1,Au(r),dd(r)):delete r.assigned_[t],r.copy_&&delete r.copy_[t],!0},getOwnPropertyDescriptor(r,t){const a=ba(r),i=Reflect.getOwnPropertyDescriptor(a,t);return i&&{writable:!0,configurable:r.type_!==1||t!=="length",enumerable:i.enumerable,value:a[t]}},defineProperty(){qr(11)},getPrototypeOf(r){return So(r.base_)},setPrototypeOf(){qr(12)}},bi={};ol($d,(r,t)=>{bi[r]=function(){return arguments[0]=arguments[0][0],t.apply(this,arguments)}});bi.deleteProperty=function(r,t){return bi.set.call(this,r,t,void 0)};bi.set=function(r,t,a){return $d.set.call(this,r[0],t,a,r[0])};function Ru(r,t){const a=r[yr];return(a?ba(a):r)[t]}function g6(r,t,a){var s;const i=B1(t,a);return i?"value"in i?i.value:(s=i.get)==null?void 0:s.call(r.draft_):void 0}function B1(r,t){if(!(t in r))return;let a=So(r);for(;a;){const i=Object.getOwnPropertyDescriptor(a,t);if(i)return i;a=So(a)}}function dd(r){r.modified_||(r.modified_=!0,r.parent_&&dd(r.parent_))}function Au(r){r.copy_||(r.copy_=ld(r.base_,r.scope_.immer_.useStrictShallowCopy_))}var y6=class{constructor(r){this.autoFreeze_=!0,this.useStrictShallowCopy_=!1,this.produce=(t,a,i)=>{if(typeof t=="function"&&typeof a!="function"){const c=a;a=t;const u=this;return function(h=c,...m){return u.produce(h,y=>a.call(this,y,...m))}}typeof a!="function"&&qr(6),i!==void 0&&typeof i!="function"&&qr(7);let s;if(In(t)){const c=fm(this),u=fd(t,void 0);let f=!0;try{s=a(u),f=!1}finally{f?cd(c):ud(c)}return dm(c,i),pm(s,c)}else if(!t||typeof t!="object"){if(s=a(t),s===void 0&&(s=t),s===F1&&(s=void 0),this.autoFreeze_&&Dd(s,!0),i){const c=[],u=[];ja("Patches").generateReplacementPatches_(t,s,c,u),i(c,u)}return s}else qr(1,t)},this.produceWithPatches=(t,a)=>{if(typeof t=="function")return(u,...f)=>this.produceWithPatches(u,h=>t(h,...f));let i,s;return[this.produce(t,a,(u,f)=>{i=u,s=f}),i,s]},typeof(r==null?void 0:r.autoFreeze)=="boolean"&&this.setAutoFreeze(r.autoFreeze),typeof(r==null?void 0:r.useStrictShallowCopy)=="boolean"&&this.setUseStrictShallowCopy(r.useStrictShallowCopy)}createDraft(r){In(r)||qr(8),La(r)&&(r=v6(r));const t=fm(this),a=fd(r,void 0);return a[yr].isManual_=!0,ud(t),a}finishDraft(r,t){const a=r&&r[yr];(!a||!a.isManual_)&&qr(9);const{scope_:i}=a;return dm(i,t),pm(void 0,i)}setAutoFreeze(r){this.autoFreeze_=r}setUseStrictShallowCopy(r){this.useStrictShallowCopy_=r}applyPatches(r,t){let a;for(a=t.length-1;a>=0;a--){const s=t[a];if(s.path.length===0&&s.op==="replace"){r=s.value;break}}a>-1&&(t=t.slice(a+1));const i=ja("Patches").applyPatches_;return La(r)?i(r,t):this.produce(r,s=>i(s,t))}};function fd(r,t){const a=Cl(r)?ja("MapSet").proxyMap_(r,t):_l(r)?ja("MapSet").proxySet_(r,t):m6(r,t);return(t?t.scope_:z1()).drafts_.push(a),a}function v6(r){return La(r)||qr(10,r),V1(r)}function V1(r){if(!In(r)||xl(r))return r;const t=r[yr];let a;if(t){if(!t.modified_)return t.base_;t.finalized_=!0,a=ld(r,t.scope_.immer_.useStrictShallowCopy_)}else a=ld(r,!0);return ol(a,(i,s)=>{U1(a,i,V1(s))}),t&&(t.finalized_=!1),a}var vr=new y6,H1=vr.produce;vr.produceWithPatches.bind(vr);vr.setAutoFreeze.bind(vr);vr.setUseStrictShallowCopy.bind(vr);vr.applyPatches.bind(vr);vr.createDraft.bind(vr);vr.finishDraft.bind(vr);function W1(r){return({dispatch:a,getState:i})=>s=>c=>typeof c=="function"?c(a,i,r):s(c)}var w6=W1(),C6=W1,_6=typeof window<"u"&&window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__?window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__:function(){if(arguments.length!==0)return typeof arguments[0]=="object"?al:al.apply(null,arguments)},x6=r=>r&&typeof r.match=="function";function bn(r,t){function a(...i){if(t){let s=t(...i);if(!s)throw new Error(gr(0));return{type:r,payload:s.payload,..."meta"in s&&{meta:s.meta},..."error"in s&&{error:s.error}}}return{type:r,payload:i[0]}}return a.toString=()=>`${r}`,a.type=r,a.match=i=>$1(i)&&i.type===r,a}var q1=class vi extends Array{constructor(...t){super(...t),Object.setPrototypeOf(this,vi.prototype)}static get[Symbol.species](){return vi}concat(...t){return super.concat.apply(this,t)}prepend(...t){return t.length===1&&Array.isArray(t[0])?new vi(...t[0].concat(this)):new vi(...t.concat(this))}};function mm(r){return In(r)?H1(r,()=>{}):r}function Hs(r,t,a){return r.has(t)?r.get(t):r.set(t,a(t)).get(t)}function S6(r){return typeof r=="boolean"}var E6=()=>function(t){const{thunk:a=!0,immutableCheck:i=!0,serializableCheck:s=!0,actionCreatorCheck:c=!0}=t??{};let u=new q1;return a&&(S6(a)?u.push(w6):u.push(C6(a.extraArgument))),u},k6="RTK_autoBatch",gm=r=>t=>{setTimeout(t,r)},b6=(r={type:"raf"})=>t=>(...a)=>{const i=t(...a);let s=!0,c=!1,u=!1;const f=new Set,h=r.type==="tick"?queueMicrotask:r.type==="raf"?typeof window<"u"&&window.requestAnimationFrame?window.requestAnimationFrame:gm(10):r.type==="callback"?r.queueNotification:gm(r.timeout),m=()=>{u=!1,c&&(c=!1,f.forEach(y=>y()))};return Object.assign({},i,{subscribe(y){const w=()=>s&&y(),v=i.subscribe(w);return f.add(y),()=>{v(),f.delete(y)}},dispatch(y){var w;try{return s=!((w=y==null?void 0:y.meta)!=null&&w[k6]),c=!s,c&&(u||(u=!0,h(m))),i.dispatch(y)}finally{s=!0}}})},I6=r=>function(a){const{autoBatch:i=!0}=a??{};let s=new q1(r);return i&&s.push(b6(typeof i=="object"?i:void 0)),s};function T6(r){const t=E6(),{reducer:a=void 0,middleware:i,devTools:s=!0,preloadedState:c=void 0,enhancers:u=void 0}=r||{};let f;if(typeof a=="function")f=a;else if(Md(a))f=s6(a);else throw new Error(gr(1));let h;typeof i=="function"?h=i(t):h=t();let m=al;s&&(m=_6({trace:!1,...typeof s=="object"&&s}));const y=l6(...h),w=I6(y);let v=typeof u=="function"?u(w):w();const x=m(...v);return D1(f,c,x)}function K1(r){const t={},a=[];let i;const s={addCase(c,u){const f=typeof c=="string"?c:c.type;if(!f)throw new Error(gr(28));if(f in t)throw new Error(gr(29));return t[f]=u,s},addMatcher(c,u){return a.push({matcher:c,reducer:u}),s},addDefaultCase(c){return i=c,s}};return r(s),[t,a,i]}function P6(r){return typeof r=="function"}function R6(r,t){let[a,i,s]=K1(t),c;if(P6(r))c=()=>mm(r());else{const f=mm(r);c=()=>f}function u(f=c(),h){let m=[a[h.type],...i.filter(({matcher:y})=>y(h)).map(({reducer:y})=>y)];return m.filter(y=>!!y).length===0&&(m=[s]),m.reduce((y,w)=>{if(w)if(La(y)){const x=w(y,h);return x===void 0?y:x}else{if(In(y))return H1(y,v=>w(v,h));{const v=w(y,h);if(v===void 0){if(y===null)return y;throw Error("A case reducer on a non-draftable value must not return undefined")}return v}}return y},f)}return u.getInitialState=c,u}var G1=(r,t)=>x6(r)?r.match(t):r(t);function Y1(...r){return t=>r.some(a=>G1(a,t))}function ym(...r){return t=>r.every(a=>G1(a,t))}function A6(r,t){if(!r||!r.meta)return!1;const a=typeof r.meta.requestId=="string",i=t.indexOf(r.meta.requestStatus)>-1;return a&&i}function Q1(r){return typeof r[0]=="function"&&"pending"in r[0]&&"fulfilled"in r[0]&&"rejected"in r[0]}function pd(...r){return r.length===0?t=>A6(t,["rejected"]):Q1(r)?Y1(...r.map(t=>t.rejected)):pd()(r[0])}function Z1(...r){const t=a=>a&&a.meta&&a.meta.rejectedWithValue;return r.length===0?ym(pd(...r),t):Q1(r)?ym(pd(...r),t):Z1()(r[0])}var N6="ModuleSymbhasOwnPr-0123456789ABCDEFGHNRVfgctiUvz_KqYTJkLxpZXIjQW",J1=(r=21)=>{let t="",a=r;for(;a--;)t+=N6[Math.random()*64|0];return t},L6=["name","message","stack","code"],Nu=class{constructor(r,t){F(this,"_type");this.payload=r,this.meta=t}},vm=class{constructor(r,t){F(this,"_type");this.payload=r,this.meta=t}},j6=r=>{if(typeof r=="object"&&r!==null){const t={};for(const a of L6)typeof r[a]=="string"&&(t[a]=r[a]);return t}return{message:String(r)}},wm="External signal was aborted",Le=(()=>{function r(t,a,i){const s=bn(t+"/fulfilled",(h,m,y,w)=>({payload:h,meta:{...w||{},arg:y,requestId:m,requestStatus:"fulfilled"}})),c=bn(t+"/pending",(h,m,y)=>({payload:void 0,meta:{...y||{},arg:m,requestId:h,requestStatus:"pending"}})),u=bn(t+"/rejected",(h,m,y,w,v)=>({payload:w,error:(i&&i.serializeError||j6)(h||"Rejected"),meta:{...v||{},arg:y,requestId:m,rejectedWithValue:!!w,requestStatus:"rejected",aborted:(h==null?void 0:h.name)==="AbortError",condition:(h==null?void 0:h.name)==="ConditionError"}}));function f(h,{signal:m}={}){return(y,w,v)=>{const x=i!=null&&i.idGenerator?i.idGenerator(h):J1(),E=new AbortController;let S,L;function M(B){L=B,E.abort()}m&&(m.aborted?M(wm):m.addEventListener("abort",()=>M(wm),{once:!0}));const N=async function(){var P,H;let B;try{let k=(P=i==null?void 0:i.condition)==null?void 0:P.call(i,h,{getState:w,extra:v});if(M6(k)&&(k=await k),k===!1||E.signal.aborted)throw{name:"ConditionError",message:"Aborted due to condition callback returning false."};const Q=new Promise((X,ue)=>{S=()=>{ue({name:"AbortError",message:L||"Aborted"})},E.signal.addEventListener("abort",S)});y(c(x,h,(H=i==null?void 0:i.getPendingMeta)==null?void 0:H.call(i,{requestId:x,arg:h},{getState:w,extra:v}))),B=await Promise.race([Q,Promise.resolve(a(h,{dispatch:y,getState:w,extra:v,requestId:x,signal:E.signal,abort:M,rejectWithValue:(X,ue)=>new Nu(X,ue),fulfillWithValue:(X,ue)=>new vm(X,ue)})).then(X=>{if(X instanceof Nu)throw X;return X instanceof vm?s(X.payload,x,h,X.meta):s(X,x,h)})])}catch(k){B=k instanceof Nu?u(null,x,h,k.payload,k.meta):u(k,x,h)}finally{S&&E.signal.removeEventListener("abort",S)}return i&&!i.dispatchConditionRejection&&u.match(B)&&B.meta.condition||y(B),B}();return Object.assign(N,{abort:M,requestId:x,arg:h,unwrap(){return N.then(Xs)}})}}return Object.assign(f,{pending:c,rejected:u,fulfilled:s,settled:Y1(u,s),typePrefix:t})}return r.withTypes=()=>r,r})();function Xs(r){if(r.meta&&r.meta.rejectedWithValue)throw r.payload;if(r.error)throw r.error;return r.payload}function M6(r){return r!==null&&typeof r=="object"&&typeof r.then=="function"}var D6=Symbol.for("rtk-slice-createasyncthunk");function $6(r,t){return`${r}/${t}`}function F6({creators:r}={}){var a;const t=(a=r==null?void 0:r.asyncThunk)==null?void 0:a[D6];return function(s){const{name:c,reducerPath:u=c}=s;if(!c)throw new Error(gr(11));const f=(typeof s.reducers=="function"?s.reducers(U6()):s.reducers)||{},h=Object.keys(f),m={sliceCaseReducersByName:{},sliceCaseReducersByType:{},actionCreators:{},sliceMatchers:[]},y={addCase(U,P){const H=typeof U=="string"?U:U.type;if(!H)throw new Error(gr(12));if(H in m.sliceCaseReducersByType)throw new Error(gr(13));return m.sliceCaseReducersByType[H]=P,y},addMatcher(U,P){return m.sliceMatchers.push({matcher:U,reducer:P}),y},exposeAction(U,P){return m.actionCreators[U]=P,y},exposeCaseReducer(U,P){return m.sliceCaseReducersByName[U]=P,y}};h.forEach(U=>{const P=f[U],H={reducerName:U,type:$6(c,U),createNotation:typeof s.reducers=="function"};B6(P)?H6(H,P,y,t):z6(H,P,y)});function w(){const[U={},P=[],H=void 0]=typeof s.extraReducers=="function"?K1(s.extraReducers):[s.extraReducers],k={...U,...m.sliceCaseReducersByType};return R6(s.initialState,Q=>{for(let X in k)Q.addCase(X,k[X]);for(let X of m.sliceMatchers)Q.addMatcher(X.matcher,X.reducer);for(let X of P)Q.addMatcher(X.matcher,X.reducer);H&&Q.addDefaultCase(H)})}const v=U=>U,x=new Map,E=new WeakMap;let S;function L(U,P){return S||(S=w()),S(U,P)}function M(){return S||(S=w()),S.getInitialState()}function N(U,P=!1){function H(Q){let X=Q[U];return typeof X>"u"&&P&&(X=Hs(E,H,M)),X}function k(Q=v){const X=Hs(x,P,()=>new WeakMap);return Hs(X,Q,()=>{const ue={};for(const[xe,Re]of Object.entries(s.selectors??{}))ue[xe]=O6(Re,Q,()=>Hs(E,Q,M),P);return ue})}return{reducerPath:U,getSelectors:k,get selectors(){return k(H)},selectSlice:H}}const B={name:c,reducer:L,actions:m.actionCreators,caseReducers:m.sliceCaseReducersByName,getInitialState:M,...N(u),injectInto(U,{reducerPath:P,...H}={}){const k=P??u;return U.inject({reducerPath:k,reducer:L},H),{...B,...N(k,!0)}}};return B}}function O6(r,t,a,i){function s(c,...u){let f=t(c);return typeof f>"u"&&i&&(f=a()),r(f,...u)}return s.unwrapped=r,s}var Gr=F6();function U6(){function r(t,a){return{_reducerDefinitionType:"asyncThunk",payloadCreator:t,...a}}return r.withTypes=()=>r,{reducer(t){return Object.assign({[t.name](...a){return t(...a)}}[t.name],{_reducerDefinitionType:"reducer"})},preparedReducer(t,a){return{_reducerDefinitionType:"reducerWithPrepare",prepare:t,reducer:a}},asyncThunk:r}}function z6({type:r,reducerName:t,createNotation:a},i,s){let c,u;if("reducer"in i){if(a&&!V6(i))throw new Error(gr(17));c=i.reducer,u=i.prepare}else c=i;s.addCase(r,c).exposeCaseReducer(t,c).exposeAction(t,u?bn(r,u):bn(r))}function B6(r){return r._reducerDefinitionType==="asyncThunk"}function V6(r){return r._reducerDefinitionType==="reducerWithPrepare"}function H6({type:r,reducerName:t},a,i,s){if(!s)throw new Error(gr(18));const{payloadCreator:c,fulfilled:u,pending:f,rejected:h,settled:m,options:y}=a,w=s(r,c,y);i.exposeAction(t,w),u&&i.addCase(w.fulfilled,u),f&&i.addCase(w.pending,f),h&&i.addCase(w.rejected,h),m&&i.addMatcher(w.settled,m),i.exposeCaseReducer(t,{fulfilled:u||Ws,pending:f||Ws,rejected:h||Ws,settled:m||Ws})}function Ws(){}var W6="task",X1="listener",e0="completed",Fd="cancelled",q6=`task-${Fd}`,K6=`task-${e0}`,hd=`${X1}-${Fd}`,G6=`${X1}-${e0}`,Sl=class{constructor(r){F(this,"name","TaskAbortError");F(this,"message");this.code=r,this.message=`${W6} ${Fd} (reason: ${r})`}},Od=(r,t)=>{if(typeof r!="function")throw new TypeError(gr(32))},ll=()=>{},t0=(r,t=ll)=>(r.catch(t),r),r0=(r,t)=>(r.addEventListener("abort",t,{once:!0}),()=>r.removeEventListener("abort",t)),Pa=(r,t)=>{const a=r.signal;a.aborted||("reason"in a||Object.defineProperty(a,"reason",{enumerable:!0,value:t,configurable:!0,writable:!0}),r.abort(t))},Ra=r=>{if(r.aborted){const{reason:t}=r;throw new Sl(t)}};function n0(r,t){let a=ll;return new Promise((i,s)=>{const c=()=>s(new Sl(r.reason));if(r.aborted){c();return}a=r0(r,c),t.finally(()=>a()).then(i,s)}).finally(()=>{a=ll})}var Y6=async(r,t)=>{try{return await Promise.resolve(),{status:"ok",value:await r()}}catch(a){return{status:a instanceof Sl?"cancelled":"rejected",error:a}}finally{t==null||t()}},cl=r=>t=>t0(n0(r,t).then(a=>(Ra(r),a))),a0=r=>{const t=cl(r);return a=>t(new Promise(i=>setTimeout(i,a)))},{assign:_o}=Object,Cm={},El="listenerMiddleware",Q6=(r,t)=>{const a=i=>r0(r,()=>Pa(i,r.reason));return(i,s)=>{Od(i);const c=new AbortController;a(c);const u=Y6(async()=>{Ra(r),Ra(c.signal);const f=await i({pause:cl(c.signal),delay:a0(c.signal),signal:c.signal});return Ra(c.signal),f},()=>Pa(c,K6));return s!=null&&s.autoJoin&&t.push(u.catch(ll)),{result:cl(r)(u),cancel(){Pa(c,q6)}}}},Z6=(r,t)=>{const a=async(i,s)=>{Ra(t);let c=()=>{};const f=[new Promise((h,m)=>{let y=r({predicate:i,effect:(w,v)=>{v.unsubscribe(),h([w,v.getState(),v.getOriginalState()])}});c=()=>{y(),m()}})];s!=null&&f.push(new Promise(h=>setTimeout(h,s,null)));try{const h=await n0(t,Promise.race(f));return Ra(t),h}finally{c()}};return(i,s)=>t0(a(i,s))},o0=r=>{let{type:t,actionCreator:a,matcher:i,predicate:s,effect:c}=r;if(t)s=bn(t).match;else if(a)t=a.type,s=a.match;else if(i)s=i;else if(!s)throw new Error(gr(21));return Od(c),{predicate:s,type:t,effect:c}},i0=_o(r=>{const{type:t,predicate:a,effect:i}=o0(r);return{id:J1(),effect:i,type:t,predicate:a,pending:new Set,unsubscribe:()=>{throw new Error(gr(22))}}},{withTypes:()=>i0}),_m=(r,t)=>{const{type:a,effect:i,predicate:s}=o0(t);return Array.from(r.values()).find(c=>(typeof a=="string"?c.type===a:c.predicate===s)&&c.effect===i)},md=r=>{r.pending.forEach(t=>{Pa(t,hd)})},J6=r=>()=>{r.forEach(md),r.clear()},xm=(r,t,a)=>{try{r(t,a)}catch(i){setTimeout(()=>{throw i},0)}},s0=_o(bn(`${El}/add`),{withTypes:()=>s0}),X6=bn(`${El}/removeAll`),l0=_o(bn(`${El}/remove`),{withTypes:()=>l0}),e3=(...r)=>{console.error(`${El}/error`,...r)},t3=(r={})=>{const t=new Map,{extra:a,onError:i=e3}=r;Od(i);const s=y=>(y.unsubscribe=()=>t.delete(y.id),t.set(y.id,y),w=>{y.unsubscribe(),w!=null&&w.cancelActive&&md(y)}),c=y=>{const w=_m(t,y)??i0(y);return s(w)};_o(c,{withTypes:()=>c});const u=y=>{const w=_m(t,y);return w&&(w.unsubscribe(),y.cancelActive&&md(w)),!!w};_o(u,{withTypes:()=>u});const f=async(y,w,v,x)=>{const E=new AbortController,S=Z6(c,E.signal),L=[];try{y.pending.add(E),await Promise.resolve(y.effect(w,_o({},v,{getOriginalState:x,condition:(M,N)=>S(M,N).then(Boolean),take:S,delay:a0(E.signal),pause:cl(E.signal),extra:a,signal:E.signal,fork:Q6(E.signal,L),unsubscribe:y.unsubscribe,subscribe:()=>{t.set(y.id,y)},cancelActiveListeners:()=>{y.pending.forEach((M,N,B)=>{M!==E&&(Pa(M,hd),B.delete(M))})},cancel:()=>{Pa(E,hd),y.pending.delete(E)},throwIfCancelled:()=>{Ra(E.signal)}})))}catch(M){M instanceof Sl||xm(i,M,{raisedBy:"effect"})}finally{await Promise.all(L),Pa(E,G6),y.pending.delete(E)}},h=J6(t);return{middleware:y=>w=>v=>{if(!$1(v))return w(v);if(s0.match(v))return c(v.payload);if(X6.match(v)){h();return}if(l0.match(v))return u(v.payload);let x=y.getState();const E=()=>{if(x===Cm)throw new Error(gr(23));return x};let S;try{if(S=w(v),t.size>0){const L=y.getState(),M=Array.from(t.values());for(const N of M){let B=!1;try{B=N.predicate(v,L,x)}catch(U){B=!1,xm(i,U,{raisedBy:"predicate"})}B&&f(N,v,y,E)}}}finally{x=Cm}return S},startListening:c,stopListening:u,clearListeners:h}};function gr(r){return`Minified Redux Toolkit error #${r}; visit https://redux-toolkit.js.org/Errors?code=${r} for the full message or use the non-minified dev environment for full errors. `}const Sm="https://gateway.ht-platform.ru",r3="R3IKK0GMRC4BMGKF7MPEPUH4RBAJ9C26N03QMFLJVDJHUNR2GL2N12OG0405LA5H",n3="wss://chat.ht-platform.ru",c0="104347813";class go extends Error{constructor(a,i,s,c){super((s==null?void 0:s.message)||a);F(this,"status");F(this,"apiError");F(this,"rawResponseBody");this.name="ApiClientError",this.status=i,this.apiError=s,this.rawResponseBody=c,Object.setPrototypeOf(this,go.prototype)}}let qs=!1,ul=[];const Em=r=>{ul.forEach(t=>{r?t.reject(r):t.resolve()}),ul=[]};class a3{constructor(){F(this,"onLogout",null)}setupInterceptors(t){this.onLogout=t}async refreshAccessToken(){try{const t=await fetch(`${Sm}/v1/auth/refresh`,{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include"});if(!t.ok)throw new Error(`Failed to refresh token with status: ${t.status}`)}catch(t){const a=t.name==="AbortError";throw this.onLogout&&!a&&this.onLogout(),t}}async request(t,a={},i=!1){if(qs&&!i)return new Promise((f,h)=>{ul.push({resolve:f,reject:h})}).then(()=>this.request(t,a,!0));const s=`${Sm}${t}`,c=new Headers(a.headers||{});!c.has("Content-Type")&&!(a.body instanceof FormData)&&c.set("Content-Type","application/json");let u;try{u=await fetch(s,{...a,headers:c,credentials:"include",cache:"no-store"})}catch(f){throw f.name==="AbortError"?f:typeof window<"u"&&!window.navigator.onLine?new go("Ошибка загрузки. Пожалуйста, проверьте ваше подключение Рє интернету.",0,void 0,f):new go("Произошла сетевая ошибка. Пожалуйста, попробуйте СЃРЅРѕРІР°.",0,void 0,f)}if(u.status===401&&!i){if(qs)return new Promise((f,h)=>{ul.push({resolve:f,reject:h})}).then(()=>this.request(t,a,!0));qs=!0;try{return await this.refreshAccessToken(),Em(null),await this.request(t,a,!0)}catch(f){throw Em(f),f}finally{qs=!1}}if(!u.ok){let f,h=null,m=`Request failed with status ${u.status}`;try{const y=u.headers.get("content-type");y!=null&&y.includes("application/json")?(h=await u.json(),h&&typeof h.message=="string"&&(f=h,m=f.message)):(h=await u.text(),h&&(m=h))}catch{}throw new go(m,u.status,f,h)}if(!(u.status===204||u.headers.get("content-length")==="0"))try{const f=await u.text();return f?JSON.parse(f):void 0}catch{throw new go("Failed to parse successful response as JSON.",u.status,void 0,void 0)}}get(t,a={}){return this.request(t,{...a,method:"GET"})}post(t,a,i={}){const s=a instanceof FormData;return this.request(t,{...i,method:"POST",body:s?a:JSON.stringify(a)})}put(t,a,i={}){const s=a instanceof FormData;return this.request(t,{...i,method:"PUT",body:s?a:JSON.stringify(a)})}delete(t,a={}){return this.request(t,{...a,method:"DELETE"})}}const W=new a3;class Vt{static async logout(){await W.post("/v1/auth/logout",{})}static async login(t){var i;const a=await W.post("/v1/auth/login",t);if(!((i=a==null?void 0:a.auth)!=null&&i.id))throw new Error("Login failed: Invalid response from server.");return a}static async checkEmail(t){const a=await W.post("/v1/auth/check-email",t);if(!a)throw new Error("Check email failed: No response from server.");return a}static async sendCode(t){const a=await W.post("/v1/auth/send-code",t);if(!a)throw new Error("Send code failed: No response from server.");return a}static async verifyCode(t){const a=await W.post("/v1/auth/verify-code",t);if(!a)throw new Error("Verify code failed: No response from server.");return a}static async resetPassword(t){const a=await W.post("/v1/auth/reset-password",t);if(!a)throw new Error("Password reset request failed: No response from server.");return a}static async resetPasswordConfirm(t){const a=await W.post("/v1/auth/reset-password/confirm",t);if(!a)throw new Error("Password reset confirmation failed: No response from server.");return a}static async changeEmail(t){const a=await W.post("/v1/auth/change/email",t);if(!a)throw new Error("Change email failed: No response from server.");return a}static async signUpApplicant(t){const a=await W.post("/v1/auth/applicant/signup",t);if(!a)throw new Error("Applicant signup failed: No response from server.");return a}static async signUpEmployer(t){const a=await W.post("/v1/auth/employer/signup",t);if(!a)throw new Error("Employer signup failed: No response from server.");return a}static async listCompanies(){return Vt.listCompaniesWithSearch()}static async listCompaniesWithSearch(t){let a="/v1/auth/list-companies";if(t&&t.trim()){const s=new URLSearchParams;s.append("search",t),a=`${a}?${s.toString()}`}const i=await W.post(a,{});if(!i)throw new Error("Failed to fetch companies: No response from server.");return i}}class gd{constructor(t,a){F(this,"_applicantId");F(this,"email");F(this,"name");F(this,"surname");F(this,"city");F(this,"avatarUrl");F(this,"dateOfBirth");F(this,"aboutMyself");F(this,"contacts");F(this,"contactItems");F(this,"educations");F(this,"experiences");F(this,"courses");F(this,"cases");F(this,"resumes");F(this,"skills");F(this,"personalQualities");F(this,"preferredPosition");F(this,"goals");F(this,"testDone");F(this,"sex");F(this,"workSearchStatus");F(this,"settings");var i,s,c,u,f,h,m,y,w;this._applicantId=a,this.email=t.email,this.name=t.name??void 0,this.city=t.city??void 0,this.surname=t.surname??void 0,this.avatarUrl=t.avatarUrl??void 0,this.dateOfBirth=t.dateOfBirth??void 0,this.aboutMyself=t.aboutMyself??void 0,this.testDone=t.testDone??!1,this.sex=t.sex??"SEX_UNSPECIFIED",this.workSearchStatus=t.workSearchStatus??"WORK_SEARCH_STATUS_UNSPECIFIED",this.settings=t.settings,this.contacts=t.contacts?{phoneNumber:t.contacts.phoneNumber??"",website:t.contacts.website??"",additionalContact:t.contacts.additionalContact??"",id:t.contacts.id}:{phoneNumber:"",website:"",additionalContact:""},this.contactItems=t.contactItems??[],this.educations=t.educations??[],this.experiences=t.experiences??[],this.courses=t.courses??[],this.cases=t.cases??[],this.resumes=t.resumes??[],this.skills=t.skills??[],this.personalQualities=t.personalQualities??[],this.preferredPosition=t.preferredPosition??void 0,this.goals={goalPositions:((s=(i=t.goals)==null?void 0:i.goalPositions)==null?void 0:s.filter(v=>!v._delete))??[],preferredIncome:((c=t.goals)==null?void 0:c.preferredIncome)??"",preferredBusinessFields:((f=(u=t.goals)==null?void 0:u.preferredBusinessFields)==null?void 0:f.filter(v=>!v._delete))??[],additionalGoals:((m=(h=t.goals)==null?void 0:h.additionalGoals)==null?void 0:m.filter(v=>!v._delete))??[],officeType:((y=t.goals)==null?void 0:y.officeType)??"OFFICE_TYPE_UNSPECIFIED",workingSchedule:((w=t.goals)==null?void 0:w.workingSchedule)??"WORKING_SCHEDULE_UNSPECIFIED"}}get firstName(){return this.name}get lastName(){return this.surname}get cityName(){return this.city}get birthDate(){return this.dateOfBirth}get phone(){var t;return(t=this.contacts)==null?void 0:t.phoneNumber}get website(){var t;return(t=this.contacts)==null?void 0:t.website}get fullName(){return`${this.name||""} ${this.surname||""}`.trim()}toApiPayload(){const t={email:this.email,name:this.name,surname:this.surname,city:this.city,avatarUrl:this.avatarUrl,dateOfBirth:this.dateOfBirth,aboutMyself:this.aboutMyself,contacts:this.contacts,contactItems:this.contactItems,educations:this.educations,experiences:this.experiences,courses:this.courses,cases:this.cases,skills:this.skills,personalQualities:this.personalQualities,preferredPosition:this.preferredPosition,goals:this.goals,testDone:this.testDone,sex:this.sex,workSearchStatus:this.workSearchStatus,settings:this.settings};return t.name===""&&delete t.name,t.surname===""&&delete t.surname,t.city===""&&delete t.city,t.avatarUrl===""&&delete t.avatarUrl,t.dateOfBirth===""&&delete t.dateOfBirth,t.aboutMyself===""&&delete t.aboutMyself,t.contacts&&t.contacts.phoneNumber===""&&t.contacts.website===""&&t.contacts.additionalContact===""&&!t.contacts.id?delete t.contacts:t.contacts&&(t.contacts.phoneNumber===""&&delete t.contacts.phoneNumber,t.contacts.website===""&&delete t.contacts.website,t.contacts.additionalContact===""&&delete t.contacts.additionalContact),t.goals&&t.goals.preferredIncome===""&&(!t.goals.preferredBusinessFields||t.goals.preferredBusinessFields.length===0)&&(!t.goals.additionalGoals||t.goals.additionalGoals.length===0)&&(!t.goals.goalPositions||t.goals.goalPositions.length===0)&&(!t.goals.officeType||t.goals.officeType==="OFFICE_TYPE_UNSPECIFIED")&&(!t.goals.workingSchedule||t.goals.workingSchedule==="WORKING_SCHEDULE_UNSPECIFIED")&&delete t.goals,t}}class tt{static async fetchUserProfile(t){try{const a=await W.get(`/v1/profile/${t}`);if(!a||!a.profile)throw new Error("UserApi: User profile data not found or invalid.");return a.profile}catch(a){throw console.error("UserApi: Error fetching user profile",a),a}}static async updateUserProfile(t,a){try{const i=await W.put(`/v1/profile/${t}`,a);if(!i||!i.updatedProfile)throw new Error("UserApi: Invalid update user profile response from API");return i.updatedProfile}catch(i){throw console.error("UserApi: Error updating user profile",i),i}}static async deleteUserProfile(t){try{await W.delete(`/v1/profile/${t}`)}catch(a){throw console.error("UserApi: Error deleting user profile",a),a}}static async login(t){try{const a=await W.post("/auth/login",t);if(!a||!a.token)throw new Error("Login failed: No token received from server");return a}catch(a){throw console.error("UserApi: Login failed",a),a}}static async fetchAvailableSkills(t,a){try{const i=t?`/v1/profile/skills?search=${encodeURIComponent(t)}`:"/v1/profile/skills",s=await W.get(i,{signal:a});return!s||!Array.isArray(s.skills)?[]:s.skills}catch(i){throw(i==null?void 0:i.name)!=="AbortError"&&console.error("UserApi: Error fetching available skills",i),i}}static async fetchAvailablePersonalQualities(t,a){try{const i=t?`/v1/profile/qualities?search=${encodeURIComponent(t)}`:"/v1/profile/qualities",s=await W.get(i,{signal:a});return!s||!Array.isArray(s.personalQualities)?[]:s.personalQualities}catch(i){throw(i==null?void 0:i.name)!=="AbortError"&&console.error("UserApi: Error fetching available personal qualities",i),i}}static async initiateFileUpload(t,a){try{const i=await W.put(`/v1/profile/files/${t}`,a);if(!i||!i.uploadUrl||!i.fileId)throw new Error("API did not return a valid upload URL.");return i}catch(i){throw console.error("UserApi: Error initiating file upload",i),i}}static async uploadFileToSignedUrl(t,a){try{const i=await fetch(t,{method:"PUT",body:a,headers:{"Content-Type":a.type}});if(!i.ok)throw new Error(`File upload failed with status: ${i.status}`);return i}catch(i){throw console.error("UserApi: Error uploading file to signed URL",i),i}}static async confirmFileUpload(t,a,i){const s=await W.post(`/v1/profile/files/${t}/${a}/confirm`,{fileInfo:i});if(!s)throw new Error("API did not return a response for file upload confirmation.");return s}static async getFileDownloadUrl(t,a){try{const i=await W.get(`/v1/profile/files/${t}/${a}`);if(!i||!i.downloadUrl)throw new Error("API did not return a valid download URL.");return i}catch(i){throw console.error("UserApi: Error getting file download URL",i),i}}static async deleteFile(t,a){try{const i=await W.delete(`/v1/profile/files/${t}/${a}`);if(!i)throw new Error("API did not return a response for file deletion");return i}catch(i){throw console.error("UserApi: Error deleting file",i),i}}static async getCaseFileUploadUrl(t,a){try{const i=await W.post("/v1/profile/cases/files/upload-url",{fileName:a,applicantId:t});if(!i||!i.objectKey||!i.uploadUrl)throw new Error("API did not return a valid case file upload URL.");return i}catch(i){throw console.error("UserApi: Error getting case file upload URL",i),i}}static async deleteCaseFile(t,a){try{await W.delete(`/v1/profile/cases/${t}/files/${a}`)}catch(i){throw console.error("UserApi: Error deleting case file",i),i}}static async getCaseFileDownloadUrl(t,a){try{const i=await W.get(`/v1/profile/cases/${t}/files/${a}/download-url`);if(!i||!i.downloadUrl)throw new Error("API did not return a valid case file download URL.");return i.downloadUrl}catch(i){throw console.error("UserApi: Error getting case file download URL",i),i}}static async getResumeUploadUrl(t,a){try{const i=await W.post("/v1/profile/resumes/upload-url",{fileName:a,applicantId:t});if(!i||!i.objectKey||!i.uploadUrl)throw new Error("API did not return a valid resume upload URL.");return i}catch(i){throw console.error("UserApi: Error getting resume upload URL",i),i}}static async addResume(t,a,i){try{const s=await W.post("/v1/profile/resumes",{applicantId:t,fileName:a,objectKey:i});if(!s||!s.resume)throw new Error("API did not return a valid resume.");return s.resume}catch(s){throw console.error("UserApi: Error adding resume",s),s}}static async deleteResume(t){try{await W.delete(`/v1/profile/resumes/${t}`)}catch(a){throw console.error("UserApi: Error deleting resume",a),a}}static async getResumeDownloadUrl(t){try{const a=await W.get(`/v1/profile/resumes/${t}/download-url`);if(!a||!a.downloadUrl)throw new Error("API did not return a valid resume download URL.");return a.downloadUrl}catch(a){throw console.error("UserApi: Error getting resume download URL",a),a}}static async fetchTests(t){try{const a=await W.get(`/v1/profile/test/${t}`);return!a||!Array.isArray(a.messages)?[]:a.messages}catch(a){throw console.error("UserApi: Error fetching tests",a),a}}static async fetchTestReport(t,a){try{return await W.get(`/v1/profile/test/${t}/report/${a}`)??{}}catch(i){throw console.error("UserApi: Error fetching test report",i),i}}static async initiateCharacteristicsTestSession(t){try{const a=await W.post("/v1/profile/test/characteristics/session",t);if(!a||!a.testUrl)throw new Error("API did not return a valid characteristics test session URL.");return a}catch(a){throw console.error("UserApi: Error initiating characteristics test session",a),a}}static async initiateSkillTestSession(t){try{const a=await W.post("/v1/profile/test/skill/session",t);if(!a||!a.testUrl)throw new Error("API did not return a valid skill test session URL.");return a}catch(a){throw console.error("UserApi: Error initiating skill test session",a),a}}}class km{static async getHhAuthUrl(){try{const t=await W.get("/v1/user-imports/hh/auth-url");if(!t||!t.authUrl)throw new Error("API did not return a valid HH auth URL.");return t.authUrl}catch(t){throw console.error("UserImportsApi: Error getting HH auth URL",t),t}}static async discardImport(){try{const t=await W.delete("/v1/user-imports/import/down");if(!t)throw new Error("API did not return a response for import discard.");return t}catch(t){throw console.error("UserImportsApi: Error discarding import",t),t}}static async importFromFile(t){try{const a=await W.post("/v1/user-imports/import/file",t);if(!a||!a.updatedProfile)throw new Error("API did not return a valid import result.");return a}catch(a){throw console.error("UserImportsApi: Error importing from file",a),a}}static async importFromHh(t){try{const a=await W.post("/v1/user-imports/import/hh",t);if(!a||!a.updatedProfile)throw new Error("API did not return a valid import result.");return a}catch(a){throw console.error("UserImportsApi: Error importing from HH resume",a),a}}}class o3{async getUserProfile(t){const a=await tt.fetchUserProfile(t);return new gd(a,t)}async updateUserProfile(t,a){return await tt.updateUserProfile(t,a)}async getAvailableSkills(t){try{return await tt.fetchAvailableSkills(t)}catch(a){throw console.error("UserService: Failed to get available skills",a),a}}async getAvailablePersonalQualities(t){try{return await tt.fetchAvailablePersonalQualities(t)}catch(a){throw console.error("UserService: Failed to get available personal qualities",a),a}}async confirmFileUploadWithRetry(t,a,i,s=3,c=700){for(let u=1;u<=s;u++)try{await tt.confirmFileUpload(t,a,i);return}catch(f){if(u===s)throw f;await new Promise(h=>setTimeout(h,c))}}async uploadProfileFile(t,a,i){try{const{uploadUrl:s,fileId:c}=await tt.initiateFileUpload(t,a);return await tt.uploadFileToSignedUrl(s,i),await this.confirmFileUploadWithRetry(t,c,a),c}catch(s){throw console.error("UserService: Failed to upload file",s),s}}async uploadAvatar(t,a){try{const i={fileType:"FILE_TYPE_AVATAR",parentStructId:t,fileName:a.name,fileDescription:"User Avatar"},{uploadUrl:s,fileId:c}=await tt.initiateFileUpload(t,i);return await tt.uploadFileToSignedUrl(s,a),await this.confirmFileUploadWithRetry(t,c,i),c}catch(i){throw console.error("UserService: Failed to upload avatar",i),i}}async getProfileFileDownloadUrl(t,a){try{const{downloadUrl:i}=await tt.getFileDownloadUrl(t,a);return i}catch(i){throw console.error("UserService: Failed to get file download URL",i),i}}async deleteProfileFile(t,a){try{await tt.deleteFile(t,a)}catch(i){throw console.error("UserService: Failed to delete file",i),i}}async uploadCaseFile(t,a){try{const{objectKey:i,uploadUrl:s}=await tt.getCaseFileUploadUrl(t,a.name);return await tt.uploadFileToSignedUrl(s,a),{objectKey:i}}catch(i){throw console.error("UserService: Failed to upload case file",i),i}}async deleteCaseFile(t,a){try{await tt.deleteCaseFile(t,a)}catch(i){throw console.error("UserService: Failed to delete case file",i),i}}async getCaseFileDownloadUrl(t,a){try{return await tt.getCaseFileDownloadUrl(t,a)}catch(i){throw console.error("UserService: Failed to get case file download URL",i),i}}async uploadResume(t,a){try{const{objectKey:i,uploadUrl:s}=await tt.getResumeUploadUrl(t,a.name);return await tt.uploadFileToSignedUrl(s,a),await tt.addResume(t,a.name,i)}catch(i){throw console.error("UserService: Failed to upload resume",i),i}}async deleteResume(t){try{await tt.deleteResume(t)}catch(a){throw console.error("UserService: Failed to delete resume",a),a}}async getResumeDownloadUrl(t){try{return await tt.getResumeDownloadUrl(t)}catch(a){throw console.error("UserService: Failed to get resume download URL",a),a}}async importResumeFromFile(t){try{return await km.importFromFile(t)}catch(a){throw console.error("UserService: Failed to import resume from file",a),a}}async discardImport(){try{await km.discardImport()}catch(t){throw console.error("UserService: Failed to discard import",t),t}}async getTests(t){try{return await tt.fetchTests(t)}catch(a){throw console.error("UserService: Failed to get tests",a),a}}async fetchTestReport(t,a){return tt.fetchTestReport(t,a)}async startTestSession(t,a,i){try{let s;const c={applicantId:t,testName:a};if(i.includes("QUALITY"))s=await tt.initiateCharacteristicsTestSession(c);else if(i.includes("SKILL"))s=await tt.initiateSkillTestSession(c);else throw new Error(`UserService: Unknown test type provided: ${i}`);return s.testUrl}catch(s){throw console.error("UserService: Failed to start test session",s),s}}}const Ud=new o3,i3={profile:null,tests:null,isLoading:!1,error:null},xo=Le("user/fetchProfile",async(r,{rejectWithValue:t})=>{try{return{user:await Ud.getUserProfile(r),applicantId:r}}catch(a){return t(a.message)}}),Lu=Le("user/fetchTests",async(r,{rejectWithValue:t})=>{try{return await Ud.getTests(r)}catch(a){return t(a.message)}}),ju=Le("user/updateProfile",async({applicantId:r,data:t},{rejectWithValue:a})=>{try{return{user:await Ud.updateUserProfile(r,t),applicantId:r}}catch(i){return a(i.message)}}),s3=Le("user/deleteProfile",async(r,{rejectWithValue:t})=>{try{return await tt.deleteUserProfile(r),r}catch(a){return t(a.message||"Failed to delete user profile")}}),u0=Gr({name:"user",initialState:i3,reducers:{clearUser:r=>{r.profile=null,r.tests=null}},extraReducers:r=>{r.addCase(xo.pending,t=>{t.isLoading=!0}).addCase(xo.fulfilled,(t,a)=>{t.isLoading=!1,t.profile=new gd(a.payload.user,a.payload.applicantId),t.error=null}).addCase(xo.rejected,(t,a)=>{t.isLoading=!1,t.error=a.payload}).addCase(ju.pending,t=>{t.error=null}).addCase(ju.fulfilled,(t,a)=>{t.isLoading=!1,t.profile=new gd(a.payload.user,a.payload.applicantId)}).addCase(ju.rejected,(t,a)=>{t.isLoading=!1,t.error=a.payload}).addCase(Lu.pending,t=>{t.isLoading=!0}).addCase(Lu.fulfilled,(t,a)=>{t.isLoading=!1,t.tests=a.payload,t.error=null}).addCase(Lu.rejected,(t,a)=>{t.isLoading=!1,t.error=a.payload}).addCase(s3.fulfilled,t=>{t.profile=null,t.tests=null})}}),{clearUser:zd}=u0.actions,l3=u0.reducer;class Li{static async register(t){try{const a=await W.post("/v1/employer/register",t);if(!a||!a.employer)throw new Error("EmployerApi: Invalid registration response from API");return a.employer}catch(a){throw console.error("EmployerApi: Error registering employer",a),a}}static async getProfile(t){try{const a=await W.get(`/v1/profile/employer/${t}`);if(!a||!a.profile)throw new Error("EmployerApi: Invalid getProfile response from API");return a.profile}catch(a){throw console.error("EmployerApi: Error fetching employer profile",a),a}}static async updateProfile(t,a){try{const i=await W.put(`/v1/profile/employer/${t}`,a.profile);if(!i||!i.updatedProfile)throw new Error("EmployerApi: Invalid updateProfile response from API");return i.updatedProfile}catch(i){throw console.error("EmployerApi: Error updating employer profile",i),i}}static async deleteProfile(t){try{await W.delete(`/v1/profile/employer/${t}`)}catch(a){throw console.error("EmployerApi: Error deleting employer profile",a),a}}static async initiateFileUpload(t,a){try{const i=await W.put(`/v1/profile/files/${t}`,a);if(!i||!i.uploadUrl||!i.fileId)throw new Error("API did not return a valid upload URL for employer.");return i}catch(i){throw console.error("EmployerApi: Error initiating file upload for employer",i),i}}static async uploadFileToSignedUrl(t,a){try{const i=await fetch(t,{method:"PUT",body:a,headers:{"Content-Type":a.type}});if(!i.ok)throw new Error(`File upload failed with status: ${i.status}`);return i}catch(i){throw console.error("UserApi: Error uploading file to signed URL",i),i}}static async confirmFileUpload(t,a,i){const s=await W.post(`/v1/profile/files/${t}/${a}/confirm`,{fileInfo:i});if(!s)throw new Error("API did not return a response for employer file upload confirmation.");return s}static async sendToModeration(t){try{await W.post("/v1/employer/company/moderation",t)}catch(a){throw console.error("EmployerApi: Error sending to moderation",a),a}}static async dismissModerationBanner(t){try{await W.post("/v1/employer/company/moderation/banner/dismiss",t)}catch(a){throw console.error("EmployerApi: Error dismissing moderation banner",a),a}}}const c3={profile:null,isLoading:!1,error:null},Aa=Le("employer/fetchProfile",async(r,{rejectWithValue:t})=>{try{return await Li.getProfile(r)}catch{return t("Failed to fetch employer profile.")}}),u3=Le("employer/updateProfile",async({employerId:r,payload:t},{rejectWithValue:a})=>{try{return await Li.updateProfile(r,t)}catch{return a("Failed to update employer profile.")}}),d3=Le("employer/deleteProfile",async(r,{rejectWithValue:t})=>{try{return await Li.deleteProfile(r),r}catch(a){return t(a.message||"Failed to delete employer profile")}}),gS=Le("employer/submitCompanyModeration",async(r,{rejectWithValue:t,dispatch:a,getState:i})=>{try{await Li.sendToModeration(r);const c=i().auth.userId;c&&a(Aa(c))}catch(s){return t(s.message||"Failed to submit moderation")}}),yS=Le("employer/dismissModerationBanner",async(r,{rejectWithValue:t,dispatch:a})=>{try{await Li.dismissModerationBanner(r),a(Bd.actions.removeModerationBanner())}catch(i){return t(i.message||"Failed to dismiss moderation banner")}}),Bd=Gr({name:"employer",initialState:c3,reducers:{clearEmployer:r=>{r.profile=null,r.error=null,r.isLoading=!1},removeModerationBanner:r=>{var t;(t=r.profile)!=null&&t.company&&(r.profile.company.moderationBanner=void 0)}},extraReducers:r=>{r.addCase(Aa.pending,t=>{t.isLoading=!0,t.error=null}).addCase(Aa.fulfilled,(t,a)=>{t.isLoading=!1,t.profile=a.payload}).addCase(Aa.rejected,(t,a)=>{t.isLoading=!1,t.error=a.payload}).addCase(u3.fulfilled,(t,a)=>{t.profile=a.payload}).addCase(d3.fulfilled,t=>{t.profile=null})}}),{clearEmployer:Vd,removeModerationBanner:vS}=Bd.actions,f3=Bd.reducer,d0=localStorage.getItem("userId"),f0=localStorage.getItem("userRole"),p3=localStorage.getItem("isAdmin")==="true",Mu=!!d0&&!!f0,h3={isAuthenticated:Mu,userId:d0,role:f0,isAdmin:p3,isLoading:Mu,isAuthChecked:!Mu,error:null},Na=Le("auth/login",async(r,{dispatch:t,rejectWithValue:a})=>{try{const i=await Vt.login(r),{id:s,role:c,isAdmin:u}=i.auth,f=u==="true"||u===!0;return localStorage.setItem("userId",s),localStorage.setItem("userRole",c),localStorage.setItem("isAdmin",String(f)),c==="applicant"?await t(xo(s)):c==="employer"&&await t(Aa(s)),{userId:s,role:c,isAdmin:f}}catch(i){const s=(i==null?void 0:i.message)||"Login failed";return localStorage.removeItem("userId"),localStorage.removeItem("userRole"),localStorage.removeItem("isAdmin"),a(s)}}),el=Le("auth/checkAuth",async(r,{dispatch:t,rejectWithValue:a})=>{const i=localStorage.getItem("userId"),s=localStorage.getItem("userRole"),c=localStorage.getItem("isAdmin")==="true";if(!i||!s)return a("No session data in localStorage");try{return s==="applicant"?await t(xo(i)).unwrap():s==="employer"&&await t(Aa(i)).unwrap(),{userId:i,role:s,isAdmin:c}}catch{return localStorage.removeItem("userId"),localStorage.removeItem("userRole"),localStorage.removeItem("isAdmin"),a("Token validation failed")}}),kl=Le("auth/logout",async(r,{dispatch:t})=>{try{await Vt.logout()}catch{}finally{localStorage.removeItem("userId"),localStorage.removeItem("userRole"),localStorage.removeItem("isAdmin"),t(zd()),t(Vd()),window.location.href="/"}}),p0=Gr({name:"auth",initialState:h3,reducers:{clearAuthError:r=>{r.error=null}},extraReducers:r=>{r.addCase(el.pending,t=>{t.isLoading=!0}).addCase(el.fulfilled,(t,a)=>{t.isAuthenticated=!0,t.userId=a.payload.userId,t.role=a.payload.role,t.isAdmin=a.payload.isAdmin,t.isLoading=!1,t.isAuthChecked=!0}).addCase(el.rejected,t=>{t.isAuthenticated=!1,t.userId=null,t.role=null,t.isAdmin=!1,t.isLoading=!1,t.isAuthChecked=!0}).addCase(Na.pending,t=>{t.isLoading=!0,t.error=null}).addCase(Na.fulfilled,(t,a)=>{t.isAuthenticated=!0,t.userId=a.payload.userId,t.role=a.payload.role,t.isAdmin=a.payload.isAdmin,t.isLoading=!1,t.isAuthChecked=!0}).addCase(Na.rejected,(t,a)=>{t.isAuthenticated=!1,t.error=a.payload,t.isLoading=!1}).addCase(kl.fulfilled,t=>{t.isAuthenticated=!1,t.userId=null,t.role=null,t.isAdmin=!1,t.error=null,t.isAuthChecked=!0})}}),{clearAuthError:wS}=p0.actions,m3=p0.reducer,g3={activeModal:null},h0=Gr({name:"modal",initialState:g3,reducers:{openModal:(r,t)=>{r.activeModal=t.payload},closeModal:r=>{r.activeModal=null}}}),{openModal:Ma,closeModal:y3}=h0.actions,v3=h0.reducer;class Ii{static async getCompany(t){const a=await W.get(`/v1/company/${t}`);if(!(a!=null&&a.company))throw new Error(`Company with ID ${t} not found.`);return a.company}static async updateCompany(t,a){const i=await W.put(`/v1/company/${t}`,a);if(!(i!=null&&i.company))throw new Error("Failed to update company: No company in response");return i.company}static async getMediaUploadUrl(t){const a=await W.post("/v1/company/media/upload-url",t);if(!(a!=null&&a.uploadUrl)||!(a!=null&&a.objectKey))throw new Error("Failed to get media upload URL");return a}static async uploadFileToPresignedUrl(t,a){const i=await fetch(t,{method:"PUT",body:a});if(!i.ok)throw new Error(`Failed to upload file: ${i.status}`)}static async uploadMediaFile(t,a){const{objectKey:i,uploadUrl:s}=await Ii.getMediaUploadUrl({type:a,fileName:t.name});return await Ii.uploadFileToPresignedUrl(s,t),i}static async fetchCompanyMedia(t){const a=await W.get(`/v1/company/${t}/media`);return(a==null?void 0:a.media)||[]}static async deleteCompanyMedia(t,a){await W.delete(`/v1/company/${t}/media/${a}`)}static async reorderCompanyMedia(t,a){await W.put(`/v1/company/${t}/media/order`,{items:a})}static async getIndustryTaxonomy(){return await W.get("/v1/company/industry-taxonomy")||{sectors:[]}}}const w3={profile:null,isLoading:!1,error:null},Du=Le("company/fetchProfile",async(r,{rejectWithValue:t})=>{try{return await Ii.getCompany(r)}catch{return t("Failed to fetch company profile.")}}),C3=Le("company/updateProfile",async({companyId:r,data:t},{rejectWithValue:a})=>{try{return await Ii.updateCompany(r,t)}catch{return a("Failed to update company profile.")}}),m0=Gr({name:"company",initialState:w3,reducers:{clearCompanyProfile:r=>{r.profile=null,r.error=null,r.isLoading=!1}},extraReducers:r=>{r.addCase(Du.pending,t=>{t.isLoading=!0,t.error=null}).addCase(Du.fulfilled,(t,a)=>{t.isLoading=!1,t.profile=a.payload}).addCase(Du.rejected,(t,a)=>{t.isLoading=!1,t.error=a.payload}).addCase(C3.fulfilled,(t,a)=>{t.profile=a.payload})}}),{clearCompanyProfile:CS}=m0.actions,_3=m0.reducer;var g0=(r=>(r.UNSPECIFIED="EXPERIENCE_UNSPECIFIED",r.WITHOUT="EXPERIENCE_WITHOUT",r.ONE_TO_THREE_YEARS="EXPERIENCE_1_TO_3_YEARS",r.THREE_TO_SIX_YEARS="EXPERIENCE_3_TO_6_YEARS",r.SIX_YEARS="EXPERIENCE_6_YEARS",r))(g0||{}),y0=(r=>(r.UNSPECIFIED="WORKING_SCHEDULE_UNSPECIFIED",r.FULL_TIME="WORKING_SCHEDULE_FULL_TIME",r.PART_TIME="WORKING_SCHEDULE_PART_TIME",r.INTERNSHIP="WORKING_SCHEDULE_INTERNSHIP",r.WATCH="WORKING_SCHEDULE_WATCH",r.PROJECT_WORK="WORKING_SCHEDULE_PROJECT_WORK",r))(y0||{}),v0=(r=>(r.DRAFT="VACANCY_STATUS_DRAFT",r.ACTIVE="VACANCY_STATUS_ACTIVE",r.ARCHIVED="VACANCY_STATUS_ARCHIVED",r.DELETED="VACANCY_STATUS_DELETED",r))(v0||{}),w0=(r=>(r.TODO="TEST_STATUS_TODO",r.COMPLETED="TEST_STATUS_COMPLETED",r.IN_PROGRESS="TEST_STATUS_IN_PROGRESS",r.DISABLED="TEST_STATUS_DISABLED",r))(w0||{});class Qt{static async createVacancy(t){try{const a=await W.post("/v1/vacancy",t);if(!(a!=null&&a.createdVacancy))throw new Error("Failed to create vacancy: No createdVacancy in response");return a.createdVacancy}catch(a){throw console.error("VacancyApi: Error creating vacancy",a),a}}static async updateVacancy(t,a){try{const i=await W.put(`/v1/vacancy/${t}`,a);if(!(i!=null&&i.updatedVacancy))throw new Error("Failed to update vacancy: No updatedVacancy in response");return i.updatedVacancy}catch(i){throw console.error(`VacancyApi: Error updating vacancy ${t}`,i),i}}static async fetchVacancies(t){try{const a=new URLSearchParams;if(t){const{applicantId:u,pageSize:f,pageToken:h,...m}=t;u&&a.append("applicantId",String(u)),f&&a.append("pageSize",String(f)),h&&a.append("pageToken",String(h)),Object.entries(m).forEach(([y,w])=>{w!=null&&w!==""&&(Array.isArray(w)?w.forEach(v=>a.append(`filter.${y}`,String(v))):a.append(`filter.${y}`,String(w)))})}const i=a.toString(),s=`/v1/vacancy${i?`?${i}`:""}`;return await W.get(s)||{vacancies:[],nextPageToken:void 0}}catch(a){throw console.error("VacancyApi: Error fetching vacancies",a),a}}static async fetchVacanciesTotal(t){try{const a=new URLSearchParams;if(t){const{applicantId:u,pageSize:f,pageToken:h,...m}=t;u&&a.append("applicantId",String(u)),Object.entries(m).forEach(([y,w])=>{w!=null&&w!==""&&(Array.isArray(w)?w.forEach(v=>a.append(`filter.${y}`,String(v))):a.append(`filter.${y}`,String(w)))})}const i=a.toString(),s=`/v1/vacancy/total${i?`?${i}`:""}`,c=await W.get(s);return(c==null?void 0:c.total)??0}catch(a){throw console.error("VacancyApi: Error fetching total vacancies",a),a}}static async fetchVacancyById(t,a){try{let i=`/v1/vacancy/${t}`;a&&(i+=`?applicantId=${a}`);const s=await W.get(i);if(!(s!=null&&s.vacancy))throw new Error(`Vacancy with ID ${t} not found.`);return s.vacancy}catch(i){throw console.error(`VacancyApi: Error fetching vacancy with ID ${t}`,i),i}}static async likeVacancy(t,a){const i=await W.post(`/v1/vacancy/${t}/like/${a}`,{});if(!(i!=null&&i.message))throw new Error("Like vacancy failed");return i.message}static async unlikeVacancy(t,a){const i=await W.delete(`/v1/vacancy/${t}/like/${a}`);if(!(i!=null&&i.message))throw new Error("Unlike vacancy failed");return i.message}static async applyToVacancy(t){const a=await W.post(`/v1/vacancy/${t}/response`,{});if(!(a!=null&&a.response))throw new Error("Apply to vacancy failed: No response object in response");return a.response}static async startTestSession(t,a){const i=await W.post("/v1/vacancy/test/session",{vacancyId:t,testName:a});if(!(i!=null&&i.testUrl))throw new Error("Failed to start test session: No test URL in response");return i}static async fetchTestReport(t,a){try{return await W.get(`/v1/vacancy/test/${t}/report/${a}`)??{}}catch(i){throw console.error("VacancyApi: Error fetching test report",i),i}}static async deleteVacancies(t){try{await W.post("/v1/vacancy/delete",{vacancies:t})}catch(a){throw console.error("VacancyApi: Error deleting vacancies",a),a}}static async fetchTaxonomy(){return await W.get("/v1/vacancy/taxonomy")||{areas:[]}}static async fetchTags(t,a){const i=t?`?search=${encodeURIComponent(t)}`:"",s=await W.get(`/v1/vacancy/tags${i}`,{signal:a});return(s==null?void 0:s.tags)||[]}static async fetchCities(t,a){const i=t?`?search=${encodeURIComponent(t)}`:"",s=await W.get(`/v1/vacancy/cities${i}`,{signal:a});return((s==null?void 0:s.cities)||[]).map(c=>c.name)}static async fetchMetroStations(t,a){const i=new URLSearchParams;t.city&&i.append("city",t.city),t.search&&i.append("search",t.search);const s=i.toString();return await W.get(`/v1/vacancy/metro${s?`?${s}`:""}`,{signal:a})||{stations:[]}}static async getMediaUploadUrl(t){const a=await W.post("/v1/vacancy/media/upload-url",t);if(!(a!=null&&a.uploadUrl)||!(a!=null&&a.objectKey))throw new Error("Failed to get media upload URL");return a}static async uploadFileToPresignedUrl(t,a){const i=await fetch(t,{method:"PUT",body:a});if(!i.ok)throw new Error(`Failed to upload file: ${i.status}`)}static async uploadMediaFile(t,a){const{objectKey:i,uploadUrl:s}=await Qt.getMediaUploadUrl({type:a,fileName:t.name});return await Qt.uploadFileToPresignedUrl(s,t),i}static async fetchVacancyMedia(t){const a=await W.get(`/v1/vacancy/${t}/media`);return(a==null?void 0:a.media)||[]}static async deleteVacancyMedia(t,a){await W.delete(`/v1/vacancy/${t}/media/${a}`)}}class x3{constructor(t){F(this,"id");F(this,"companyName");F(this,"companyCity");F(this,"imageUrl");F(this,"rating");F(this,"feedbackCount");F(this,"name");F(this,"moderationStatus");this.id=t.id,this.companyName=t.companyName||"",this.name=t.name||t.companyName||"",this.companyCity=t.companyCity||"",this.imageUrl=t.companyLogoUrl||t.imageUrl,this.rating=t.rating,this.feedbackCount=t.feedbackCount,this.moderationStatus=t.moderationStatus}}class Ti{constructor(t){F(this,"id");F(this,"title");F(this,"description");F(this,"workingExperience");F(this,"workingSchedule");F(this,"officeTypes");F(this,"city");F(this,"requirements");F(this,"objectives");F(this,"views");F(this,"responses");F(this,"offerings");F(this,"skills");F(this,"qualities");F(this,"positions");F(this,"company");F(this,"createdAt");F(this,"updatedAt");F(this,"viewedAt");F(this,"isLikedByCurrentUser");F(this,"hasApplied");F(this,"responseStatus");F(this,"salaryFrom");F(this,"salaryTo");F(this,"salaryCurrency");F(this,"salaryGross");F(this,"testName");F(this,"testStatus");F(this,"testInfo");F(this,"reportUrl");F(this,"hasReport");F(this,"coefficient");F(this,"chatId");F(this,"status");F(this,"totalCount");F(this,"favorite");F(this,"response");F(this,"competencies");F(this,"shortDescription");F(this,"metroStations");F(this,"tags");F(this,"requirementsOptional");F(this,"hasTestTask");F(this,"testTaskDescription");F(this,"corporateCulture");F(this,"companyDevelopment");F(this,"bonuses");F(this,"hasEquipment");F(this,"salaryOnNegotiation");F(this,"completionPercent");F(this,"workHoursPattern");F(this,"workHoursNegotiable");F(this,"roleArea");F(this,"roleFamily");F(this,"canonicalRole");F(this,"media");F(this,"hardCompatibilityPercentage");var a,i,s,c,u,f,h,m;this.id=t.id,this.title=t.title||"",this.description=t.description||"",this.workingExperience=t.workingExperience||g0.UNSPECIFIED,this.workingSchedule=t.workingSchedule||y0.UNSPECIFIED,this.officeTypes=Array.isArray(t.officeTypes)?t.officeTypes:t.officeTypes?[t.officeTypes]:[],this.city=t.city,this.requirements=t.requirements,this.objectives=t.objectives,this.views=t.views||0,this.responses=t.responses||0,this.offerings=t.offerings,this.skills=t.skills||[],this.qualities=t.qualities||[],this.positions=t.positions||[],this.company=t.company?new x3(t.company):void 0,this.createdAt=t.createdAt,this.updatedAt=t.updatedAt,this.viewedAt=t.viewedAt,this.salaryFrom=t.salaryFrom,this.salaryTo=t.salaryTo,this.salaryCurrency=t.salaryCurrency,this.salaryGross=t.salaryGross,this.testName=((a=t.testInfo)==null?void 0:a.testName)||t.testName,this.testStatus=((i=t.testInfo)==null?void 0:i.testStatus)||t.testStatus,this.reportUrl=(s=t.testInfo)==null?void 0:s.reportUrl,this.hasReport=((c=t.testInfo)==null?void 0:c.hasReport)??t.hasReport,this.status=t.status||v0.DRAFT,this.coefficient=t.coefficient??((u=t.testInfo)!=null&&u.Similarity?parseFloat(t.testInfo.Similarity):void 0),this.isLikedByCurrentUser=t.favorite!==void 0?t.favorite:!!t.isLikedByCurrentUser,this.hasApplied=t.response!==void 0?!0:!!t.hasApplied,this.responseStatus=((f=t.response)==null?void 0:f.status)||t.responseStatus,this.chatId=((h=t.response)==null?void 0:h.chatId)||t.chatId,this.totalCount=t.totalCount||0,this.favorite=t.favorite,this.response=t.response,this.competencies=((m=t.testInfo)==null?void 0:m.competencies)||t.competencies,this.shortDescription=t.shortDescription,this.metroStations=t.metroStations,this.tags=t.tags,this.requirementsOptional=t.requirementsOptional,this.hasTestTask=t.hasTestTask,this.testTaskDescription=t.testTaskDescription,this.corporateCulture=t.corporateCulture,this.companyDevelopment=t.companyDevelopment,this.bonuses=t.bonuses,this.hasEquipment=t.hasEquipment,this.salaryOnNegotiation=t.salaryOnNegotiation,this.completionPercent=t.completionPercent,this.workHoursPattern=t.workHoursPattern,this.workHoursNegotiable=t.workHoursNegotiable,this.roleArea=t.roleArea,this.roleFamily=t.roleFamily,this.canonicalRole=t.canonicalRole,this.media=t.media,this.hardCompatibilityPercentage=t.hardCompatibilityPercentage}}const S3={vacancies:[],currentVacancy:null,totalCount:0,tabCounts:{VACANCY_STATUS_ACTIVE:0,VACANCY_STATUS_DRAFT:0,VACANCY_STATUS_ARCHIVED:0,ASSESSED:0},isLoading:!0,isFetchingMore:!1,error:null,nextPageToken:null,hasMore:!0},Ks=new Map,yd=r=>{const a=Object.keys(r||{}).sort().reduce((f,h)=>(f[h]=r[h],f),{}),i=JSON.stringify(a),s=Date.now(),c=Ks.get(i);if(c&&s-c.timestamp<500)return c.promise;const u=Qt.fetchVacanciesTotal(r).catch(()=>0);return Ks.set(i,{promise:u,timestamp:s}),u.finally(()=>{setTimeout(()=>{var f;((f=Ks.get(i))==null?void 0:f.promise)===u&&Ks.delete(i)},500)}),u},E3=Le("vacancies/createVacancy",async(r,{rejectWithValue:t})=>{try{return await Qt.createVacancy(r)}catch(a){return t(a.message||"Failed to create vacancy")}}),k3=Le("vacancies/updateVacancy",async({id:r,data:t},{rejectWithValue:a})=>{try{return await Qt.updateVacancy(r,t)}catch(i){return a(i.message||"Failed to update vacancy")}}),b3=Le("vacancies/changeStatus",async(r,{rejectWithValue:t})=>{try{return await Promise.all(r.vacancyIds.map(a=>Qt.updateVacancy(a,{status:r.status}))),r}catch(a){return t(a.message||"Failed to change vacancy status")}}),I3=Le("vacancies/fetchTabCounts",async(r,{rejectWithValue:t})=>{try{const a=["VACANCY_STATUS_ACTIVE","VACANCY_STATUS_DRAFT","VACANCY_STATUS_ARCHIVED"],i={};await Promise.all(a.map(async u=>{const f={...r,status:u},h=await yd(f);i[u]=h}));const s={...r,testStatus:"TEST_STATUS_COMPLETED"};delete s.status;const c=await yd(s);return i.ASSESSED=c,i}catch(a){return t(a.message)}}),tl=Le("vacancies/fetchVacancies",async(r,{})=>{const{filters:t,applicantId:a,filterType:i,selectedResponse:s}=r;let c={...t,pageSize:10};a&&(c.applicantId=a),i==="liked"&&(c.favorite=!0),i==="viewed"&&(c.viewed=!0),i==="applied"&&(c.applied=!0);const u={...c};delete u.pageSize,delete u.pageToken;const[f,h]=await Promise.all([Qt.fetchVacancies(c),yd(u)]);let m=f.vacancies.map(w=>new Ti(w)),y=h;if(i==="applied"&&s&&s!=="all"){const v={viewed:"RESPONSE_STATUS_VIEWED",not_viewed:"RESPONSE_STATUS_NOT_VIEWED_UNSPECIFIED",rejected:"RESPONSE_STATUS_REJECTED"}[s];v&&(m=m.filter(x=>x.responseStatus===v),y=m.length)}return{vacancies:m,nextPageToken:f.nextPageToken||null,totalCount:y}}),$u=Le("vacancies/fetchMore",async(r,{rejectWithValue:t})=>{try{const{filters:a,pageToken:i,applicantId:s,filterType:c}=r,u={...a,pageSize:10,pageToken:i};s&&(u.applicantId=s),c==="liked"&&(u.favorite=!0),c==="viewed"&&(u.viewed=!0),c==="applied"&&(u.applied=!0);const f=await Qt.fetchVacancies(u);return{vacancies:f.vacancies.map(m=>new Ti(m)),nextPageToken:f.nextPageToken}}catch(a){return t(a.message)}}),Fu=Le("vacancies/fetchById",async(r,{rejectWithValue:t})=>{try{const{vacancyId:a,applicantId:i}=r,s=await Qt.fetchVacancyById(a,i||void 0);return new Ti(s)}catch(a){return t(a.message)}}),T3=Le("vacancies/likeVacancy",async(r,{rejectWithValue:t})=>{try{return await Qt.likeVacancy(r.vacancyId,r.applicantId),r.vacancyId}catch(a){return t(a.message)}}),P3=Le("vacancies/unlikeVacancy",async(r,{rejectWithValue:t})=>{try{return await Qt.unlikeVacancy(r.vacancyId,r.applicantId),r.vacancyId}catch(a){return t(a.message)}}),R3=Le("vacancies/applyToVacancy",async(r,{rejectWithValue:t})=>{try{return await Qt.applyToVacancy(r.vacancyId)}catch(a){return t(a.message)}}),A3=Le("vacancies/startTestSession",async(r,{rejectWithValue:t})=>{try{return(await Qt.startTestSession(r.vacancyId,r.testName)).testUrl}catch(a){return t(a.message)}}),N3=Le("vacancies/deleteVacancies",async(r,{rejectWithValue:t})=>{try{const a=Array.isArray(r)?r:r.vacancyIds;return await Qt.deleteVacancies(a),r}catch(a){return t(a.message)}}),C0=Gr({name:"vacancy",initialState:S3,reducers:{clearCurrentVacancy:r=>{r.currentVacancy=null}},extraReducers:r=>{r.addCase(E3.fulfilled,(t,a)=>{const i=new Ti(a.payload);t.vacancies.unshift(i),t.currentVacancy=i,t.totalCount+=1,i.status==="VACANCY_STATUS_DRAFT"?t.tabCounts.VACANCY_STATUS_DRAFT+=1:t.tabCounts.VACANCY_STATUS_ACTIVE+=1}).addCase(k3.fulfilled,(t,a)=>{const i=new Ti(a.payload);t.vacancies=t.vacancies.map(s=>s.id===i.id?i:s),t.currentVacancy=i}).addCase(b3.fulfilled,(t,a)=>{const{vacancyIds:i,status:s,currentTab:c}=a.payload;t.vacancies=t.vacancies.filter(f=>!i.includes(f.id)),t.totalCount=Math.max(0,t.totalCount-i.length),t.currentVacancy&&i.includes(t.currentVacancy.id)&&(t.currentVacancy.status=s);const u=i.length;c&&c in t.tabCounts&&(t.tabCounts[c]=Math.max(0,t.tabCounts[c]-u)),s&&s in t.tabCounts&&s!==c&&(t.tabCounts[s]+=u)}).addCase(tl.pending,t=>{t.isLoading=!0,t.error=null,t.hasMore=!0}).addCase(tl.fulfilled,(t,a)=>{var i;t.isLoading=!1,t.vacancies=a.payload.vacancies,t.totalCount=a.payload.totalCount,t.nextPageToken=a.payload.nextPageToken||null,t.hasMore=(((i=a.payload.vacancies)==null?void 0:i.length)||0)>0&&!!a.payload.nextPageToken}).addCase(tl.rejected,(t,a)=>{a.meta.aborted||(t.isLoading=!1,t.error=a.payload)}).addCase($u.pending,t=>{t.isFetchingMore=!0}).addCase($u.fulfilled,(t,a)=>{var c;t.isFetchingMore=!1;const i=new Set(t.vacancies.map(u=>u.id)),s=a.payload.vacancies.filter(u=>!i.has(u.id));t.vacancies.push(...s),t.nextPageToken=a.payload.nextPageToken||null,t.hasMore=(((c=a.payload.vacancies)==null?void 0:c.length)||0)>0&&!!a.payload.nextPageToken}).addCase($u.rejected,(t,a)=>{a.meta.aborted||(t.isFetchingMore=!1,t.error=a.payload)}).addCase(Fu.pending,t=>{t.isLoading=!0,t.currentVacancy=null,t.error=null}).addCase(Fu.fulfilled,(t,a)=>{t.isLoading=!1,t.currentVacancy=a.payload}).addCase(Fu.rejected,(t,a)=>{a.meta.aborted||(t.isLoading=!1,t.error=a.payload)}).addCase(T3.fulfilled,(t,a)=>{var c;const i=a.payload,s=u=>({...u,isLikedByCurrentUser:!0});t.vacancies=t.vacancies.map(u=>u.id===i?s(u):u),((c=t.currentVacancy)==null?void 0:c.id)===i&&(t.currentVacancy=s(t.currentVacancy))}).addCase(P3.fulfilled,(t,a)=>{var c,u,f;const i=a.payload,s=h=>({...h,isLikedByCurrentUser:!1});typeof window<"u"&&((u=(c=window.location)==null?void 0:c.pathname)!=null&&u.includes("/liked"))?(t.vacancies=t.vacancies.filter(h=>h.id!==i),t.totalCount-=1):t.vacancies=t.vacancies.map(h=>h.id===i?s(h):h),((f=t.currentVacancy)==null?void 0:f.id)===i&&(t.currentVacancy=s(t.currentVacancy))}).addCase(R3.fulfilled,(t,a)=>{var f;const{vacancyId:i,chatId:s,status:c}=a.payload,u=h=>({...h,hasApplied:!0,chatId:s,responseStatus:c});t.vacancies=t.vacancies.map(h=>h.id===i?u(h):h),((f=t.currentVacancy)==null?void 0:f.id)===i&&(t.currentVacancy=u(t.currentVacancy))}).addCase(A3.fulfilled,(t,a)=>{var c;const{vacancyId:i}=a.meta.arg,s=u=>({...u,testStatus:w0.IN_PROGRESS});t.vacancies=t.vacancies.map(u=>u.id===i?s(u):u),((c=t.currentVacancy)==null?void 0:c.id)===i&&(t.currentVacancy=s(t.currentVacancy))}).addCase(N3.fulfilled,(t,a)=>{const i=a.payload,s=Array.isArray(i)?i:i.vacancyIds,c=Array.isArray(i)?void 0:i.currentTab,u=new Set(s);t.vacancies=t.vacancies.filter(f=>!u.has(f.id)),t.totalCount=Math.max(0,t.totalCount-s.length),c&&c in t.tabCounts&&(t.tabCounts[c]=Math.max(0,t.tabCounts[c]-s.length))}).addCase(I3.fulfilled,(t,a)=>{t.tabCounts=a.payload})}}),{clearCurrentVacancy:_S}=C0.actions,L3=C0.reducer;class bl{static async fetchTestReport(t,a){try{return await W.get(`/v1/profile/test/${t}/report/${a}`)??{}}catch(i){throw console.error("CandidateApi: Error fetching test report",i),i}}static async getCandidates(t){try{const a=await W.post("/v1/profile/employer/candidates",t);if(!a||!Array.isArray(a.list))throw new Error("CandidateApi: Invalid candidates list response from API");return a}catch(a){throw a}}static async getCandidateById(t,a,i){try{let s=`/v1/profile/employer/candidate/${t}`;const c=new URLSearchParams;a&&c.append("vacancyId",a),i&&c.append("responses","true");const u=c.toString();u&&(s+=`?${u}`);const f=await W.get(s);if(!f||!f.applicantId)throw new Error("CandidateApi: Invalid candidate details response from API");return f}catch(s){throw s}}static async getCandidatesTotal(t){try{return await W.post("/v1/profile/employer/candidates/total",t)??{total:0}}catch{return{total:0}}}static async addToRejected(t){await W.put("/v1/profile/employer/candidates/rejected",t)}static async addToLiked(t){await W.put("/v1/profile/employer/candidates/liked",t)}static async addToViewed(t){await W.put("/v1/profile/employer/candidates/viewed",t)}static async removeFromLiked(t,a,i){const s=new URLSearchParams;t&&s.set("vacancy_id",t),i&&s.set("folderId",i),a.forEach(c=>s.append("applicant_id",c)),await W.delete(`/v1/profile/employer/candidates/liked?${s.toString()}`)}static async removeFromViewed(t,a){const i=new URLSearchParams;i.set("vacancy_id",t),a.forEach(s=>i.append("applicant_id",s)),await W.delete(`/v1/profile/employer/candidates/viewed?${i.toString()}`)}static async addComment(t){const a=await W.post("/v1/profile/applicant/comment",t);if(!a)throw new Error("CandidateApi: Failed to add comment");return a}static async updateComment(t){const a=await W.put("/v1/profile/applicant/comment",t);if(!a)throw new Error("CandidateApi: Failed to update comment");return a}static async deleteComment(t){const a=new URLSearchParams;a.append("commentId",t.commentId),t.vacancyId&&a.append("vacancyId",t.vacancyId),t.responses&&a.append("responses","true");const i=await W.delete(`/v1/profile/applicant/comment?${a.toString()}`);if(!i)throw new Error("CandidateApi: Failed to delete comment");return i}static async getFunnelSettings(){return W.get("/v1/employer/funnel/settings")}static async updateFunnelSettings(t){return W.put("/v1/employer/funnel/settings",t)}static async updateFunnelStage(t,a){return W.put(`/v1/employer/funnel/stages/${t}`,a)}static async getFunnelTemplates(){return W.get("/v1/employer/funnel/templates")}static async updateFunnelActionTemplate(t,a){return W.put(`/v1/employer/funnel/templates/actions/${t}`,a)}static async updateFunnelStageTemplate(t,a){return W.put(`/v1/employer/funnel/templates/stages/${t}`,a)}static async moveResponseStage(t,a){return W.post(`/v1/employer/funnel/responses/${t}/move-stage`,{toStageCode:a})}static async rejectResponse(t,a){return W.post(`/v1/employer/funnel/responses/${t}/reject`,{visibleToApplicant:a})}static async restoreResponse(t,a){return W.post(`/v1/employer/funnel/responses/${t}/restore`,{toStageCode:a})}}const vd=(r,t)=>{const a=[2,0,1,1,1,2];return t[r%100>4&&r%100<20?2:a[r%10<5?r%10:5]]},j3=(r,t)=>{if(!r&&!t)return"Без опыта";const a=[];return r&&a.push(`${r} ${vd(r,["РіРѕРґ","РіРѕРґР°","лет"])}`),t&&a.push(`${t} ${vd(t,["мес.","мес.","мес."])}`),a.join(" ")},M3=r=>r?`${r} ${vd(r,["РіРѕРґ","РіРѕРґР°","лет"])}`:"",xS=r=>{if(!r)return"";const t=new Date(r);return isNaN(t.getTime())?r:new Intl.DateTimeFormat("ru-RU",{day:"numeric",month:"long"}).format(t)},SS=r=>{if(!r)return"";const t=r.replace(/\D/g,"");if(!t)return r;let a=t;return a.length===11&&(a[0]==="8"||a[0]==="7")&&(a=a.slice(1)),a.length!==10?r:`+7 (${a.slice(0,3)}) ${a.slice(3,6)}-${a.slice(6,8)}-${a.slice(8,10)}`};class D3{constructor(t){F(this,"id");F(this,"responseId");F(this,"stageCode");F(this,"resolution");F(this,"name");F(this,"avatarUrl");F(this,"sex");F(this,"position");F(this,"city");F(this,"age");F(this,"email");F(this,"phoneNumber");F(this,"chatId");F(this,"responseDate");F(this,"vacancyId");F(this,"searchStatus");F(this,"description");F(this,"goals");F(this,"experienceYears");F(this,"experienceMonths");F(this,"skills");F(this,"personalQualities");F(this,"personalQualitiesReports");F(this,"experiences");F(this,"educations");F(this,"courses");F(this,"cases");F(this,"resumes");F(this,"similarity");F(this,"viewed");F(this,"liked");F(this,"isLiked");F(this,"rejected");F(this,"contactItems");F(this,"comment");F(this,"folders");F(this,"chatAvailable");F(this,"competencies");F(this,"hardCompatibilityPercent");this.id=t.id,this.responseId=t.responseId,this.stageCode=t.stageCode,this.resolution=t.resolution,this.name=t.name||"РРјСЏ РЅРµ указано",this.avatarUrl=t.avatarUrl||null,this.sex=t.sex,this.position=t.position||"",this.city=t.city||null,this.age=t.age,this.email=t.email,this.phoneNumber=t.phoneNumber||null,this.chatId=t.chatId,this.responseDate=t.responseDate,this.vacancyId=t.vacancyId,this.searchStatus=t.searchStatus,this.description=t.description||"",this.goals=t.goals||{},this.experienceYears=t.experienceYears||0,this.experienceMonths=t.experienceMonths||0,this.skills=t.skills||[],this.personalQualities=t.personalQualities||[],this.personalQualitiesReports=t.personalQualitiesReports||[],this.experiences=t.experiences||[],this.educations=t.educations||[],this.courses=t.courses||[],this.cases=t.cases||[],this.resumes=t.resumes||[],this.similarity=t.similarity,this.viewed=t.viewed,this.liked=t.liked,this.isLiked=t.isLiked,this.rejected=t.rejected,this.contactItems=t.contactItems||[],this.comment=t.comment||[],this.folders=t.folders||[],this.chatAvailable=t.chatAvailable,this.competencies=t.competencies,this.hardCompatibilityPercent=t.hardCompatibilityPercent}get formattedExperience(){return j3(this.experienceYears,this.experienceMonths)}get formattedAge(){return M3(this.age)}}const $3=["workSearchStatus","workingSchedule","officeType","sex","experience","education","skills","companySector","specialization","personalQualities","position","description","region","companies"],_0=(r,t={})=>{const a={page:0,perPage:0,responses:!1},i=f=>Array.isArray(f)?f[0]:f;if(r.preferredIncomeFrom&&(a.preferredIncomeFrom=r.preferredIncomeFrom),r.preferredIncomeTo&&(a.preferredIncomeTo=r.preferredIncomeTo),r.ageFrom&&(a.ageFrom=Number(r.ageFrom)),r.ageTo&&(a.ageTo=Number(r.ageTo)),$3.forEach(f=>{if(r[f]){const h=Array.isArray(r[f])?r[f]:[r[f]];h.length>0&&(a[f]=h)}}),r.company&&(a.company=r.company),r.searchText&&(a.searchText=r.searchText),r.photo!==void 0){const f=i(r.photo);f!=null&&f!==""&&(a.photo=String(f)==="true")}if(r.confirmedExperience!==void 0){const f=i(r.confirmedExperience);f!=null&&f!==""&&(a.confirmedExperience=String(f)==="true")}if(r.vacancyId&&(a.vacancyId=r.vacancyId),r.responses!==void 0){const f=i(r.responses);a.responses=String(f)==="true"}if(r.onlyWithSimilarity!==void 0){const f=i(r.onlyWithSimilarity);a.onlyWithSimilarity=String(f)==="true"}if(r.onlyWithHardCompatibility!==void 0){const f=i(r.onlyWithHardCompatibility);a.onlyWithHardCompatibility=String(f)==="true"}r.stageCode&&(a.stageCode=r.stageCode),r.folderId&&(a.folderId=r.folderId),r.likedCandidates!==void 0&&(a.likedCandidates=String(r.likedCandidates)==="true"),r.isLiked!==void 0&&(a.isLiked=String(r.isLiked)==="true");const s={};r.viewed!==void 0&&(s.viewed=String(r.viewed)==="true"),r.liked!==void 0&&(s.liked=String(r.liked)==="true");const c=r.responseFlags||{},u={...s,...c};return Object.keys(u).length>0&&(a.responseFlags=u),r.responseBucket&&(a.responseBucket=r.responseBucket),{...a,...t}};class Il{static async getFolders(t=0,a=100,i){const s=new URLSearchParams;s.append("page",t.toString()),s.append("perPage",a.toString()),i&&s.append("searchText",i);const c=await W.get(`/v1/folders?${s.toString()}`);if(!c)throw new Error("API Error: No data returned");return c}static async createFolder(t){const a=await W.post("/v1/folders",t);if(!a)throw new Error("API Error: No data returned");return a}static async deleteFolders(t){const a=new URLSearchParams;t.forEach(i=>a.append("folderIds",i)),await W.delete(`/v1/folders?${a.toString()}`)}static async renameFolder(t,a){const i=await W.put(`/v1/folders/${t}/name`,{newName:a});if(!i)throw new Error("API Error: No data returned");return i}static async addCandidates(t,a){const i=await W.post(`/v1/folders/${t}/candidates:add`,{applicantIds:a});if(!i)throw new Error("API Error: No data returned");return i}static async removeCandidates(t,a){const i=await W.post(`/v1/folders/${t}/candidates:remove`,{applicantIds:a});if(!i)throw new Error("API Error: No data returned");return i}static async moveCandidates(t,a){return await W.post(`/v1/folders/${t}/candidates:move`,{applicantIds:a})}}const F3={folders:[],hasNext:!1,mainFavoritesCount:0,isLoading:!1,isInitialized:!1,error:null,page:0},Ou=Le("folder/fetchAll",async(r={},{rejectWithValue:t})=>{try{const{page:a=0,perPage:i=10,includeCounts:s=!1,searchText:c}=r,u=await Il.getFolders(a,i,c);let f=null;s&&(f=await bl.getCandidatesTotal({likedCandidates:!0}));const h=u.folders.map(m=>{var w;if(!s)return{...m,candidateCount:m.candidateCount||0};const y=(w=f==null?void 0:f.folderTotals)==null?void 0:w.find(v=>v.folderId===m.folder.id);return{...m,candidateCount:y?y.count:0}});return{...u,folders:h,mainFavoritesCount:(f==null?void 0:f.likedCandidatesCount)||0,page:a,includeCounts:s}}catch(a){return t(a.message||"Ошибка загрузки папок")}}),O3=Le("folder/create",async(r,{rejectWithValue:t})=>{try{return await Il.createFolder(r)}catch(a){return t(a.message||"Ошибка создания папки")}}),U3=Le("folder/delete",async(r,{rejectWithValue:t})=>{try{return await Il.deleteFolders([r]),r}catch(a){return t(a.message||"Ошибка удаления папки")}}),x0=Le("folder/rename",async({folderId:r,newName:t},{rejectWithValue:a})=>{try{return await Il.renameFolder(r,t),{id:r,newName:t}}catch(i){return a(i.message||"Ошибка переименования папки")}}),S0=Gr({name:"folder",initialState:F3,reducers:{clearFoldersState:r=>{r.folders=[],r.hasNext=!1,r.mainFavoritesCount=0,r.isLoading=!1,r.isInitialized=!1,r.error=null,r.page=0},updateFolderCount:(r,t)=>{if(t.payload.folderId==="main"||t.payload.folderId==="favorites_main")r.mainFavoritesCount+=t.payload.delta;else{const a=r.folders.find(i=>i.folder.id===t.payload.folderId);a&&(a.candidateCount+=t.payload.delta)}}},extraReducers:r=>{r.addCase(Ou.pending,t=>{t.isLoading=!0,t.error=null}).addCase(Ou.fulfilled,(t,a)=>{var i;if(t.isLoading=!1,a.payload.page===0)t.folders=a.payload.folders,(i=a.meta.arg)!=null&&i.searchText||(t.isInitialized=!0);else{const s=a.payload.folders.filter(c=>!t.folders.some(u=>u.folder.id===c.folder.id));t.folders=[...t.folders,...s]}t.hasNext=a.payload.hasNext,t.page=a.payload.page,a.payload.includeCounts&&(t.mainFavoritesCount=a.payload.mainFavoritesCount||0)}).addCase(Ou.rejected,(t,a)=>{t.isLoading=!1,t.error=a.payload||"Ошибка загрузки"}).addCase(O3.fulfilled,(t,a)=>{t.folders.unshift({folder:a.payload.folder,candidateCount:0})}).addCase(U3.fulfilled,(t,a)=>{t.folders=t.folders.filter(i=>i.folder.id!==a.payload)}).addCase(x0.fulfilled,(t,a)=>{const i=t.folders.findIndex(s=>s.folder.id===a.payload.id);i!==-1&&(t.folders[i].folder.name=a.payload.newName)})}}),{clearFoldersState:ES,updateFolderCount:kS}=S0.actions,z3=S0.reducer,B3={candidates:[],currentCandidate:null,isLoading:!1,isFetchingMore:!1,error:null,pagination:{page:0,perPage:10,hasNext:!1}},E0=(r,t="desc")=>{const a=t==="asc";switch(r){case"similarity":return a?"CANDIDATES_ORDER_SIMILARITY_ASC":"CANDIDATES_ORDER_SIMILARITY_DESC";case"hardCompatibility":return a?"CANDIDATES_ORDER_HARD_COMPATIBILITY_ASC":"CANDIDATES_ORDER_HARD_COMPATIBILITY_DESC";case"date":return a?"CANDIDATES_ORDER_UPDATED_AT_ASC":"CANDIDATES_ORDER_UPDATED_AT";default:return}},Uu=Le("candidate/fetchAll",async(r={},{rejectWithValue:t})=>{try{const{filters:a={},sortMetric:i=null,sortDirection:s="desc",page:c=0}=r,u=_0(a,{page:c,perPage:10,orderBy:E0(i,s)});return await bl.getCandidates(u)}catch(a){return t(a.message||"РќРµ удалось загрузить СЃРїРёСЃРѕРє кандидатов")}}),zu=Le("candidate/fetchMore",async(r,{rejectWithValue:t})=>{try{const{filters:a={},sortMetric:i=null,sortDirection:s="desc",page:c}=r,u=_0(a,{page:c,perPage:10,orderBy:E0(i,s)});return await bl.getCandidates(u)}catch(a){return t(a.message||"РќРµ удалось загрузить больше кандидатов")}}),Bu=Le("candidate/fetchById",async({applicantId:r,vacancyId:t,responses:a},{rejectWithValue:i})=>{var s,c,u,f,h,m,y,w,v,x,E,S,L,M,N,B,U;try{const P=await bl.getCandidateById(r,t,a),H={id:P.applicantId,responseId:(s=P.responseState)==null?void 0:s.responseId,stageCode:(c=P.responseState)==null?void 0:c.stageCode,resolution:(u=P.responseState)==null?void 0:u.resolution,name:P.name,avatarUrl:P.avatarUrl,sex:P.sex,position:P.position,age:P.age,city:P.city,responseDate:P.responseDate,chatId:P.chatId,vacancyId:P.vacancyId,searchStatus:P.workSearchStatus,description:P.description,similarity:P.similarity,viewed:((f=P.responseState)==null?void 0:f.viewed)??((h=P.responseFlags)==null?void 0:h.viewed)??!1,liked:P.isLiked??((m=P.responseState)==null?void 0:m.liked)??((y=P.responseFlags)==null?void 0:y.liked)??!1,isLiked:P.isLiked??((w=P.responseState)==null?void 0:w.liked)??((v=P.responseFlags)==null?void 0:v.liked)??!1,rejected:((x=P.responseState)==null?void 0:x.resolution)==="RESPONSE_RESOLUTION_REJECTED"||(((E=P.responseFlags)==null?void 0:E.rejected)??!1),contactItems:P.contactItems||[],comment:P.comment||[],folders:P.folders||[],chatAvailable:P.chatAvailable,competencies:P.competencies,hardCompatibilityPercent:P.hardCompatibilityPercent,goals:{officeType:(S=P.goals)==null?void 0:S.officeType,workingSchedule:(L=P.goals)==null?void 0:L.workingSchedule,preferredIncome:(M=P.goals)==null?void 0:M.preferredIncome,goalPositions:((N=P.goals)==null?void 0:N.goalPositions)||[],preferredBusinessFields:((B=P.goals)==null?void 0:B.preferredBusinessFields)||[],additionalGoals:((U=P.goals)==null?void 0:U.additionalGoals)||[]},experienceYears:P.experienceYears,experienceMonths:P.experienceMonths,educations:(P.educations||[]).map(k=>({id:k.id,organization:k.organization,degree:k.degree,specialization:k.specialization,startYear:k.startYear,graduationYear:k.graduationYear,verified:k.verified,stillEducating:k.stillEducating})),courses:(P.courses||[]).map(k=>({id:k.id,title:k.title,organization:k.organization,specialization:k.specialization,graduationYear:k.graduationYear,verified:k.verified,stillEducating:k.stillEducating})),experiences:(P.experiences||[]).map(k=>{var Q,X,ue;return{id:k.id,hireDate:k.hireDate,retirementDate:k.retirementDate,stillWorking:k.stillWorking,achievements:k.achievements,responsibilities:k.responsibilities,verified:k.verified,companySector:k.companySector,positionName:((Q=k.experiencePosition)==null?void 0:Q.positionName)||null,companyName:((X=k.experienceCompany)==null?void 0:X.companyName)||null,companyLogoUrl:((ue=k.experienceCompany)==null?void 0:ue.companyLogoUrl)||null}}),skills:(P.skills||[]).map(k=>({id:k.id,skillName:k.skillName,verified:k.verified})),personalQualities:(P.personalQualities||[]).map(k=>({id:k.id,qualityName:k.qualityName,verified:k.verified})),personalQualitiesReports:P.personalQualitiesReportsTests&&P.personalQualitiesReportsTests.length>0?P.personalQualitiesReportsTests.map((k,Q)=>({id:`report-test-${Q}`,name:"Рнфопрофиль",testName:k})):(P.personalQualitiesReports||[]).map((k,Q)=>({id:`report-${Q}`,name:"Рнфопрофиль",url:k})),cases:(P.cases||[]).map(k=>({id:k.id,title:k.title,description:k.description,files:(k.files||[]).map(Q=>({id:Q.id,fileName:Q.fileName}))})),resumes:(P.resumes||[]).map(k=>({id:k.id,fileName:k.fileName,fileSize:k.fileSize}))};if(typeof window<"u")try{const k=new BroadcastChannel("candidate_sync");k.postMessage({type:"UPDATE_CANDIDATE_STATUS",payload:{id:H.id,stageCode:H.stageCode,resolution:H.resolution,rejected:H.rejected,liked:H.liked,viewed:H.viewed,folders:H.folders}}),k.close()}catch{}return new D3(H)}catch(P){return i(P.message||"РќРµ удалось загрузить данные кандидата")}}),k0=Gr({name:"candidate",initialState:B3,reducers:{clearCurrentCandidate:r=>{r.currentCandidate=null},syncCandidateLocally:(r,t)=>{const a=r.candidates.findIndex(i=>i.id===t.payload.id);if(a!==-1){const i=r.candidates[a];t.payload.stageCode!==void 0&&(i.stageCode=t.payload.stageCode),t.payload.resolution!==void 0&&(i.resolution=t.payload.resolution),t.payload.rejected!==void 0&&(i.rejected=t.payload.rejected),t.payload.liked!==void 0&&(i.liked=t.payload.liked,i.isLiked=t.payload.liked),t.payload.viewed!==void 0&&(i.viewed=t.payload.viewed),t.payload.folders!==void 0&&(i.folders=t.payload.folders)}if(r.currentCandidate&&r.currentCandidate.id===t.payload.id){const i=r.currentCandidate;t.payload.stageCode!==void 0&&(i.stageCode=t.payload.stageCode),t.payload.resolution!==void 0&&(i.resolution=t.payload.resolution),t.payload.rejected!==void 0&&(i.rejected=t.payload.rejected),t.payload.liked!==void 0&&(i.liked=t.payload.liked,i.isLiked=t.payload.liked),t.payload.viewed!==void 0&&(i.viewed=t.payload.viewed),t.payload.folders!==void 0&&(i.folders=t.payload.folders)}},removeCandidatesLocally:(r,t)=>{r.candidates=r.candidates.filter(a=>!t.payload.includes(a.id))}},extraReducers:r=>{r.addCase(x0.fulfilled,(t,a)=>{var c;const{id:i,newName:s}=a.payload;if(t.candidates.forEach(u=>{var h;const f=(h=u.folders)==null?void 0:h.find(m=>m.id===i);f&&(f.name=s)}),t.currentCandidate){const u=(c=t.currentCandidate.folders)==null?void 0:c.find(f=>f.id===i);u&&(u.name=s)}}).addCase(Uu.pending,t=>{t.isLoading=!0,t.error=null}).addCase(Uu.fulfilled,(t,a)=>{t.isLoading=!1,t.candidates=a.payload.list.map(i=>{var s,c,u,f,h,m,y;return{id:i.applicantId,responseId:(s=i.responseState)==null?void 0:s.responseId,stageCode:(c=i.responseState)==null?void 0:c.stageCode,resolution:(u=i.responseState)==null?void 0:u.resolution,name:i.name,avatarUrl:i.avatarUrl,position:i.position,city:i.city,age:i.age,experienceYears:i.experienceYears,experienceMonths:i.experienceMonths,spheres:i.spheres,responseDate:i.responseDate,chatId:i.chatId,searchStatus:i.searchStatus,similarity:i.similarity,viewed:((f=i.responseState)==null?void 0:f.viewed)??!1,liked:i.isLiked??((h=i.responseState)==null?void 0:h.liked)??!1,isLiked:i.isLiked??((m=i.responseState)==null?void 0:m.liked)??!1,rejected:((y=i.responseState)==null?void 0:y.resolution)==="RESPONSE_RESOLUTION_REJECTED",experiences:i.experiences||[],contactItems:i.contactItems||[],comment:i.comment||[],folders:i.folders||[],chatAvailable:i.chatAvailable,competencies:i.competencies,hardCompatibilityPercent:i.hardCompatibilityPercent}}),t.pagination={page:a.payload.page,perPage:a.payload.perPage,hasNext:a.payload.hasNext}}).addCase(Uu.rejected,(t,a)=>{t.isLoading=!1,t.error=a.payload||"Ошибка загрузки"}).addCase(zu.pending,t=>{t.isFetchingMore=!0}).addCase(zu.fulfilled,(t,a)=>{t.isFetchingMore=!1;const i=new Set(t.candidates.map(c=>c.id)),s=a.payload.list.filter(c=>!i.has(c.applicantId)).map(c=>{var u,f,h,m,y,w,v;return{id:c.applicantId,responseId:(u=c.responseState)==null?void 0:u.responseId,stageCode:(f=c.responseState)==null?void 0:f.stageCode,resolution:(h=c.responseState)==null?void 0:h.resolution,name:c.name,avatarUrl:c.avatarUrl,position:c.position,city:c.city,age:c.age,experienceYears:c.experienceYears,experienceMonths:c.experienceMonths,spheres:c.spheres,responseDate:c.responseDate,chatId:c.chatId,searchStatus:c.searchStatus,similarity:c.similarity,viewed:((m=c.responseState)==null?void 0:m.viewed)??!1,liked:c.isLiked??((y=c.responseState)==null?void 0:y.liked)??!1,isLiked:c.isLiked??((w=c.responseState)==null?void 0:w.liked)??!1,rejected:((v=c.responseState)==null?void 0:v.resolution)==="RESPONSE_RESOLUTION_REJECTED",experiences:c.experiences||[],contactItems:c.contactItems||[],comment:c.comment||[],folders:c.folders||[],chatAvailable:c.chatAvailable,competencies:c.competencies,hardCompatibilityPercent:c.hardCompatibilityPercent}});t.candidates=[...t.candidates,...s],t.pagination={page:a.payload.page,perPage:a.payload.perPage,hasNext:a.payload.hasNext}}).addCase(zu.rejected,t=>{t.isFetchingMore=!1}).addCase(Bu.pending,t=>{t.isLoading=!0,t.error=null}).addCase(Bu.fulfilled,(t,a)=>{t.isLoading=!1,t.currentCandidate=a.payload;const i=t.candidates.findIndex(s=>s.id===a.payload.id);i!==-1&&(t.candidates[i]={...t.candidates[i],stageCode:a.payload.stageCode,resolution:a.payload.resolution,rejected:a.payload.rejected,viewed:a.payload.viewed,liked:a.payload.liked,isLiked:a.payload.isLiked,responseId:a.payload.responseId,folders:a.payload.folders})}).addCase(Bu.rejected,(t,a)=>{t.isLoading=!1,t.error=a.payload||"Ошибка загрузки профиля"})}}),{clearCurrentCandidate:bS,syncCandidateLocally:IS,removeCandidatesLocally:TS}=k0.actions,V3=k0.reducer,b0=t3();b0.startListening({matcher:Z1,effect:async r=>{const t=r.payload;t&&(t.status===0||t.status>=500)&&(window.location.pathname.startsWith("/error")||(window.location.href=`/error/${t.status}`))}});class Tl{static async fetchChats(t,a=0,i=50,s="READ_FILTER_UNSPECIFIED",c="CHAT_LIST_TYPE_UNSPECIFIED",u){const f=new URLSearchParams({type:t,page:String(a),perPage:String(i),readFilter:s,chatType:c});u&&f.set("chatId",u);const h=await W.get(`/v1/chat/list?${f.toString()}`);if(!h)throw new Error("Failed to fetch chats: No response from server.");return h}static async fetchChatMessages(t,a=0,i=50){const s=new URLSearchParams({page:String(a),perPage:String(i)}),c=await W.get(`/v1/chat/${t}?${s.toString()}`,{cache:"no-cache"});return c||{messages:[],page:0,perPage:0,hasNext:!1}}static async createChat(t){try{const a={status:"CHAT_STATUS_CANDIDATE",applicantId:t},i=await W.post("/v1/chat/create",a);if(!i||!i.id)throw new Error("ChatApi: Invalid create chat response");return i}catch(a){throw console.error("ChatApi: Error creating chat",a),a}}}const bm={chats:[],messages:{},selectedChatId:null,chatsLoading:"idle",isFetchingMoreChats:!1,webSocketStatus:"idle",unreadCount:0,totalChatsCount:0,unreadChatsCount:0,activeReadFilter:"READ_FILTER_UNSPECIFIED",chatsPagination:{page:0,perPage:50,hasNext:!1},notification:{id:0,isOpen:!1,chatId:null,title:"",message:""},userStatuses:{},subscribedChatIds:[],wsError:null},H3="00000000-0000-0000-0000-000000000000",rl=Le("chat/fetchChats",async r=>{const{type:t,readFilter:a="READ_FILTER_UNSPECIFIED",chatType:i="CHAT_LIST_TYPE_UNSPECIFIED"}=r,s=await Tl.fetchChats(t,0,50,a,i),c=s.support,u=s.chats||s.response||s.list||[];let f=[];c&&c.chatId&&c.chatId!==H3&&f.push({...c,companyName:"Техническая поддержка",vacancyName:"Помощь Рё поддержка",unreadCount:c.unread||0});const h=u.map(m=>({...m,unreadCount:m.unread||0,sentAt:m.sentAt||m.lastActivity,lastSeen:m.lastSeen||m.lastActivity,isOnline:m.isOnline}));return f=[...f,...h],{chats:f,page:s.page,hasNext:s.hasNext,allChatsCount:s.allChats||0,unreadChatsCount:s.unreadChats||0,unreadMessagesCount:s.unreadMessages||0}}),Vu=Le("chat/fetchMoreChats",async(r,{getState:t})=>{const a=t(),{page:i}=a.chat.chatsPagination,{activeReadFilter:s}=a.chat,c=i+1,u=await Tl.fetchChats(r,c,50,s,"CHAT_LIST_TYPE_UNSPECIFIED");return{chats:(u.chats||u.response||u.list||[]).map(m=>({...m,unreadCount:m.unread||0,sentAt:m.sentAt||m.lastActivity,lastSeen:m.lastSeen||m.lastActivity,isOnline:m.isOnline})),page:u.page,hasNext:u.hasNext,allChatsCount:u.allChats||0,unreadChatsCount:u.unreadChats||0,unreadMessagesCount:u.unreadMessages||0}}),I0=Le("chat/fetchChatById",async({type:r,chatId:t})=>{const a=await Tl.fetchChats(r,0,1,"READ_FILTER_UNSPECIFIED","CHAT_LIST_TYPE_UNSPECIFIED",t),s=(a.chats||a.response||a.list||[])[0];return s?{...s,unreadCount:s.unread||0,sentAt:s.sentAt||s.lastActivity,lastSeen:s.lastSeen||s.lastActivity}:null}),Hu=Le("chat/fetchMessages",async({chatId:r,page:t})=>{const a=await Tl.fetchChatMessages(r,t);return{chatId:r,...a}}),nn=(r,t)=>!r||!t?!1:String(r).toLowerCase()===String(t).toLowerCase(),T0=Gr({name:"chat",initialState:bm,reducers:{setReadFilter:(r,t)=>{r.activeReadFilter=t.payload},closeNotification:r=>{r.notification.isOpen=!1},resetUnreadCount:(r,t)=>{const{chatId:a}=t.payload,i=r.chats.find(s=>s.chatId===a);i&&i.unreadCount&&i.unreadCount>0&&(r.unreadCount=Math.max(0,r.unreadCount-i.unreadCount),r.unreadChatsCount=Math.max(0,r.unreadChatsCount-1),i.unreadCount=0)},setSelectedChat:(r,t)=>{if(r.selectedChatId=t.payload,t.payload){const a=r.chats.find(i=>i.chatId===t.payload);a&&a.unreadCount&&(r.unreadCount=Math.max(0,r.unreadCount-a.unreadCount),r.unreadChatsCount=Math.max(0,r.unreadChatsCount-1),a.unreadCount=0)}},addMessage:(r,t)=>{const{message:a,currentUserRoleId:i}=t.payload,{chatId:s}=a;r.messages[s]||(r.messages[s]={list:[],currentPage:0,hasMore:!0,status:"idle"}),r.messages[s].list.some(u=>u.id===a.id)||r.messages[s].list.push(a);const c=r.chats.findIndex(u=>u.chatId===s);if(c>-1){const u=r.chats[c];u.lastMessage=a.text,u.sentAt=a.sentAt,u.senderRoleId=i,u.readAt=null,r.chats.splice(c,1),r.chats.unshift(u)}},editMessageLocal:(r,t)=>{const{chatId:a,messageId:i,text:s}=t.payload,c=r.messages[a];if(c){const u=c.list.find(f=>f.id===i);if(u&&(u.text=s,u.editedAt=new Date().toISOString()),c.list.length>0&&c.list[c.list.length-1].id===i){const h=r.chats.find(m=>m.chatId===a);h&&(h.lastMessage=s)}}},deleteMessageLocal:(r,t)=>{const{chatId:a,messageId:i}=t.payload,s=r.messages[a];if(s){const c=s.list.find(u=>u.id===i);if(c&&(c.deletedAt=new Date().toISOString()),s.list.length>0&&s.list[s.list.length-1].id===i){const f=r.chats.find(h=>h.chatId===a);f&&(f.lastMessage="Сообщение удалено")}}},markMessagesAsRead:(r,t)=>{const{chatId:a,messageIds:i}=t.payload,s=r.messages[a];if(s){const u=new Date().toISOString();i.forEach(f=>{const h=s.list.find(m=>m.id===f);h&&(h.status="read",h.readAt=u)})}const c=r.chats.find(u=>u.chatId===a);c&&(c.readAt=new Date().toISOString())},setWebSocketStatus:(r,t)=>{r.webSocketStatus=t.payload},handleWebSocketMessage:(r,t)=>{var c,u,f,h,m;const{event:a,currentUserId:i,currentUserRoleId:s}=t.payload;switch(a.type){case"statuses":case" statuses":{const y=a,{meta:w}=y,x=(Array.isArray(w==null?void 0:w.statuses)?w.statuses:w!=null&&w.status?[w.status]:[]).map(E=>{const S=E;return{user_id:S.user_id??S.UserID,last_seen:S.last_seen??S.LastSeen,online:S.online??S.Online}});x.length>0&&x.forEach(E=>{var M;if(!E.user_id||nn(E.user_id,i)||nn(E.user_id,s))return;const S=(M=r.userStatuses[E.user_id.toLowerCase()])==null?void 0:M.lastSeen,L=E.last_seen&&!E.last_seen.startsWith("0001-01-01");r.userStatuses[E.user_id.toLowerCase()]={isOnline:E.online,lastSeen:L?E.last_seen:S},r.chats.forEach(N=>{(nn(N.applicantUserId,E.user_id)||nn(N.employerUserId,E.user_id)||nn(N.applicantId,E.user_id)||nn(N.employerId,E.user_id))&&(N.isOnline=E.online,L&&(N.lastSeen=E.last_seen))})});break}case"popup":{const{chat_id:y,message:w,meta:v}=a;if(y===r.selectedChatId)return;let x="РќРѕРІРѕРµ сообщение";if(v){if(v.company_name&&v.company_name.trim())x=v.company_name;else if(v.sender_name||v.sender_surname){const E=[v.sender_name,v.sender_surname].filter(Boolean);E.length>0&&(x=E.join(" "))}}r.notification={id:Date.now(),isOpen:!0,chatId:y,title:x,message:w||"Вам пришло сообщение",avatarSrc:v==null?void 0:v.sender_avatar,duration:5e3};break}case"message_edited":case"edit_message":{const y=a,{chat_id:w,message:v}=y,x=(v==null?void 0:v.ID)||(v==null?void 0:v.id),E=(v==null?void 0:v.Text)||(v==null?void 0:v.text),S=(v==null?void 0:v.EditedAt)||(v==null?void 0:v.edited_at)||new Date().toISOString();if(x&&E){const L=r.messages[w];if(L){const M=L.list.find(N=>N.id===x);if(M&&(M.text=E,M.editedAt=S),L.list.length>0&&L.list[L.list.length-1].id===x){const B=r.chats.find(U=>U.chatId===w);B&&(B.lastMessage=E)}}}break}case"message_deleted":{const y=a,w=y.chat_id,v=((c=y.message)==null?void 0:c.ID)||((u=y.message)==null?void 0:u.id)||((f=y.payload)==null?void 0:f.message_id);if(v){const x=r.messages[w];if(x){const E=x.list.find(S=>S.id===v);if(E&&(E.deletedAt=((h=y.message)==null?void 0:h.DeletedAt)||((m=y.message)==null?void 0:m.deleted_at)||new Date().toISOString()),x.list.length>0&&x.list[x.list.length-1].id===v){const L=r.chats.find(M=>M.chatId===w);L&&(L.lastMessage="Сообщение удалено")}}}break}case"message":{const y=a,w=y.chat_id;let v;if(typeof y.message=="string")try{v=JSON.parse(y.message)}catch{v={}}else v=y.message||{};const x=v.senderRoleId||v.SenderRoleID||v.SenderID||v.sender_id||v.senderId||v.sender_role_id,E=nn(x,i)||nn(x,s),S=v.MessageType||v.message_type;if(E&&!(S==="company_moderation_request"||S==="company_moderation_result"))return;const M=v.ReadAt||v.readAt||null,N={id:v.ID||v.id,chatId:v.ChatID||w,text:v.Text||v.text,senderId:x,sentAt:v.SentAt||v.created_at,readAt:M,status:M?"read":"sent",editedAt:v.EditedAt||v.edited_at||null,deletedAt:v.DeletedAt||v.deleted_at||null,messageType:v.MessageType||v.message_type,payload:v.Payload||v.payload,relatedEntityType:v.RelatedEntityType||v.related_entity_type||null,relatedEntityId:v.RelatedEntityID||v.related_entity_id||null};r.messages[w]||(r.messages[w]={list:[],currentPage:0,hasMore:!0,status:"idle"});const B=r.messages[w].list.some(P=>P.id===N.id);B||r.messages[w].list.push(N);const U=r.chats.find(P=>P.chatId===w);if(U){U.lastMessage=N.deletedAt?"Сообщение удалено":N.text,U.sentAt=N.sentAt;const P=r.chats.findIndex(H=>H.chatId===w);P>-1&&(r.chats.splice(P,1),r.chats.unshift(U)),!B&&!E&&w!==r.selectedChatId&&((!U.unreadCount||U.unreadCount===0)&&(r.unreadChatsCount+=1),U.unreadCount=(U.unreadCount||0)+1,r.unreadCount+=1)}else!B&&!E&&(r.unreadCount+=1,r.unreadChatsCount+=1,r.totalChatsCount+=1);break}case"message_ack":{const{message:y,chat_id:w}=a,v=r.messages[w];if(v){let E=-1;for(let S=v.list.length-1;S>=0;S--)if(v.list[S].status==="sending"&&(nn(v.list[S].senderId,i)||nn(v.list[S].senderId,s))){E=S;break}E>-1&&(v.list[E].id=y.ID||y.id,v.list[E].sentAt=y.SentAt||y.sentAt,v.list[E].status="sent")}const x=r.chats.find(E=>E.chatId===w);x&&(x.lastMessage=y.DeletedAt||y.deleted_at?"Сообщение удалено":y.Text||y.text,x.sentAt=y.SentAt||y.sentAt,x.readAt=null);break}case"message_read":{const{chat_id:y,meta:w}=a,v=w.messages;if(!v||!Array.isArray(v)||v.length===0)break;const x=r.messages[y];v.forEach(M=>{const N=M.read_at||new Date().toISOString();if(x&&x.list){const B=x.list.findIndex(U=>U.id===M.message_id);if(B>-1)for(let U=0;U<=B;U++){const P=x.list[U];P.status!=="read"&&(P.status="read",P.readAt=N)}}});const S=v[v.length-1].read_at||new Date().toISOString(),L=r.chats.find(M=>M.chatId===y);L&&(L.readAt=S);break}case"chat_updated":{const{chat_id:y,meta:w}=a,v=r.chats.find(E=>E.chatId===y);if(!v)break;v.lastMessage=w.last_message.text,v.sentAt=w.last_message.sent_at;const x=r.chats.findIndex(E=>E.chatId===y);x>-1&&(r.chats.splice(x,1),r.chats.unshift(v));break}case"subscribed":{const{meta:y}=a;r.subscribedChatIds=(y==null?void 0:y.chats)||[];break}case"error":{const y=a;r.wsError={id:Date.now(),chatId:y.chat_id,error:y.error};break}}},clearWsError:r=>{r.wsError=null},clearChatState:()=>bm,clearActiveChatData:r=>{r.messages={},r.selectedChatId=null},addNewChatToList:(r,t)=>{r.chats.find(a=>a.chatId===t.payload.chatId)||r.chats.unshift(t.payload)}},extraReducers:r=>{r.addCase(rl.pending,t=>{t.chatsLoading="pending"}).addCase(rl.fulfilled,(t,a)=>{t.chatsLoading="succeeded",t.chats=a.payload.chats.map(i=>{const s=[i.applicantUserId,i.employerUserId,i.applicantId,i.employerId].filter(Boolean);for(const c of s){const u=t.userStatuses[c.toLowerCase()];if(u){i.isOnline=u.isOnline,u.lastSeen&&!u.lastSeen.startsWith("0001-01-01")&&(i.lastSeen=u.lastSeen);break}}return i}),t.totalChatsCount=a.payload.allChatsCount,(a.meta.arg.readFilter??"READ_FILTER_UNSPECIFIED")==="READ_FILTER_UNSPECIFIED"&&(t.unreadChatsCount=a.payload.unreadChatsCount,t.unreadCount=a.payload.unreadMessagesCount),t.chatsPagination={page:a.payload.page,perPage:50,hasNext:a.payload.hasNext}}).addCase(rl.rejected,t=>{t.chatsLoading="failed"}).addCase(Vu.pending,t=>{t.isFetchingMoreChats=!0}).addCase(Vu.fulfilled,(t,a)=>{t.isFetchingMoreChats=!1;const i=a.payload.chats.filter(s=>!t.chats.some(c=>c.chatId===s.chatId)).map(s=>{const c=[s.applicantUserId,s.employerUserId,s.applicantId,s.employerId].filter(Boolean);for(const u of c){const f=t.userStatuses[u.toLowerCase()];if(f){s.isOnline=f.isOnline,f.lastSeen&&!f.lastSeen.startsWith("0001-01-01")&&(s.lastSeen=f.lastSeen);break}}return s});t.chats=[...t.chats,...i],t.totalChatsCount=a.payload.allChatsCount,t.activeReadFilter==="READ_FILTER_UNSPECIFIED"&&(t.unreadChatsCount=a.payload.unreadChatsCount,t.unreadCount=a.payload.unreadMessagesCount),t.chatsPagination={page:a.payload.page,perPage:50,hasNext:a.payload.hasNext}}).addCase(Vu.rejected,t=>{t.isFetchingMoreChats=!1}).addCase(I0.fulfilled,(t,a)=>{const i=a.payload;if(!i)return;const s=t.chats.findIndex(c=>c.chatId===i.chatId);s>-1?t.chats[s]={...t.chats[s],...i}:(t.chats.unshift(i),t.totalChatsCount+=1)}).addCase(Hu.pending,(t,a)=>{const{chatId:i}=a.meta.arg;t.messages[i]||(t.messages[i]={list:[],currentPage:0,hasMore:!0,status:"idle"}),t.messages[i].status="loading"}).addCase(Hu.fulfilled,(t,a)=>{const{chatId:i,messages:s,hasNext:c,page:u}=a.payload,f=t.messages[i];if(!f)return;const h=s.filter(m=>m&&m.id&&typeof m.text=="string").map(m=>({...m,senderId:m.senderRoleId||m.senderId,status:m.readAt?"read":"sent",editedAt:m.editedAt||m.edited_at||m.EditedAt||null,deletedAt:m.deletedAt||m.deleted_at||m.DeletedAt||null,messageType:m.messageType||m.message_type||m.MessageType,payload:m.payload||m.Payload,relatedEntityType:m.relatedEntityType||m.related_entity_type||m.RelatedEntityType||null,relatedEntityId:m.relatedEntityId||m.related_entity_id||m.RelatedEntityID||null}));if(u===0)h.forEach(m=>{const y=f.list.find(w=>w.id===m.id);y?Object.assign(y,m):f.list.push(m)}),f.list.sort((m,y)=>new Date(m.sentAt).getTime()-new Date(y.sentAt).getTime());else{const m=new Set(f.list.map(w=>w.id)),y=h.filter(w=>!m.has(w.id));f.list.unshift(...y.sort((w,v)=>new Date(w.sentAt).getTime()-new Date(v.sentAt).getTime()))}f.hasMore=c,f.currentPage=u,f.status="succeeded"}).addCase(Hu.rejected,(t,a)=>{const{chatId:i}=a.meta.arg;t.messages[i]&&(t.messages[i].status="failed")})}}),{setSelectedChat:PS,addMessage:RS,markMessagesAsRead:AS,setWebSocketStatus:hi,handleWebSocketMessage:W3,clearChatState:NS,clearActiveChatData:LS,addNewChatToList:jS,closeNotification:Im,resetUnreadCount:MS,setReadFilter:DS,editMessageLocal:$S,deleteMessageLocal:FS,clearWsError:OS}=T0.actions,q3=T0.reducer;class P0{static async getSettings(t,a){const i=t==="employer"?`/v1/settings/employer/${a}`:`/v1/settings/applicant/${a}`,s=await W.get(i);if(!s||!s.settings)throw new Error("Failed to fetch settings: No response from server.");return s.settings}static async updateSettings(t,a,i){const s=t==="employer"?`/v1/settings/employer/${a}`:`/v1/settings/applicant/${a}`,c=await W.put(s,i);if(!c||!c.updatedSettings)throw new Error("Failed to update settings: No response from server.");return c.updatedSettings}}const K3={data:null,isLoading:!1,isUpdating:!1,error:null},Wu=Le("settings/fetch",async(r,{getState:t,rejectWithValue:a})=>{const{auth:i}=t();if(!i.userId||!i.role)return a("No auth");try{return await P0.getSettings(i.role,i.userId)}catch(s){return a(s.message)}}),wd=Le("settings/update",async(r,{getState:t,rejectWithValue:a})=>{const{auth:i,settings:s}=t();if(!i.userId||!i.role||!s.data)return a("No data");try{const c={...s.data,...r};return await P0.updateSettings(i.role,i.userId,c)}catch(c){return a(c.message)}}),G3=Gr({name:"settings",initialState:K3,reducers:{},extraReducers:r=>{r.addCase(Wu.pending,t=>{t.isLoading=!0}).addCase(Wu.fulfilled,(t,a)=>{t.isLoading=!1,t.data=a.payload}).addCase(Wu.rejected,(t,a)=>{t.isLoading=!1,t.error=a.payload}).addCase(wd.pending,t=>{t.isUpdating=!0}).addCase(wd.fulfilled,(t,a)=>{t.isUpdating=!1,t.data=a.payload}).addCase(Aa.fulfilled,(t,a)=>{a.payload.settings&&(t.data=a.payload.settings)}).addCase(xo.fulfilled,(t,a)=>{a.payload.user&&a.payload.user.settings&&(t.data=a.payload.user.settings)})}}),Y3=G3.reducer,Q3="carrier-skills-2026-ai",Z3="Навыки 2026: как быть востребованным РІ СЌРїРѕС…Сѓ РР Рё РЅРµ потерять работу",J3="Какие навыки прокачивать РІ 2026, чтобы быть востребованным Рё РЅРµ «выпасть» РёР· рынка РёР·-Р·Р° РР: постановка задачи, работа СЃ промптами, критическое мышление, процессы, креатив Рё обучение.",X3="25.01.2026",e4="10 РјРёРЅ",t4="https://storage.ht-platform.ru/public/articles/1/article-photo-01.png",r4="career",n4=["#навыки-карьеры-2026","#РР-для-работы","#РЅРµ-потерять-работу-РІ-2026"],a4={title:"Навыки 2026: как быть востребованным РІ СЌРїРѕС…Сѓ РР Рё РЅРµ потерять работу",description:"Какие навыки прокачивать РІ 2026, чтобы быть востребованным Рё РЅРµ “выпасть” РёР· рынка РёР·-Р·Р° РР: постановка задачи, работа СЃ промптами, критическое мышление, процессы, креатив Рё обучение.",keywords:["карьера 2026","soft skills","искусственный интеллект","РїСЂРѕРјРїС‚-РёРЅР¶РёРЅРёСЂРёРЅРі","РїРѕРёСЃРє работы"]},o4={id:"akirin",name:"Алексей РљРёСЂРёРЅ",role:"Основатель HT Platform",avatar:"https://storage.ht-platform.ru/public/staff/kir-photo.jpg"},i4=[{id:"intro",title:"Главная идея: РРусиливает тех, кто умеет РёРј управлять"},{id:"skills-list",title:"7 навыков, которые стоит прокачивать РІ 2026 (для соискателей):",items:[{id:"skill-1",title:"Навык в„–1. Умение формулировать задачу"},{id:"skill-2",title:"Навык в„–2. Навык «говорить СЃ РРВ»"},{id:"skill-3",title:"Навык в„–3. Критическое мышление"},{id:"skill-4",title:"Навык в„–4. Работа СЃ РРкак процесс"},{id:"skill-5",title:"Навык в„–5. Творческое мышление"},{id:"skill-6",title:"Навык в„–6. Перепрофилирование Рё синтез"},{id:"skill-7",title:"Навык в„–7. Умение учиться постоянно"}]},{id:"practice-plan",title:"План РЅР° 14 дней: короткая практика, которая прокачивает"},{id:"faq",title:"FAQ"},{id:"sources",title:"Рсточники"}],s4=JSON.parse(`[{"id":"main-image","type":"image","src":"https://storage.ht-platform.ru/public/articles/1/article-photo-02.png"},{"id":"intro","type":"text","title":"Главная идея: РРусиливает тех, кто умеет РёРј управлять","paragraphs":["РР СѓР¶Рµ встроен РІ повседневную работу: РѕС‚ РїРѕРёСЃРєР° информации, анализа РґРѕ подготовки Рє интервью. Есть мнение, что СЃРєРѕСЂРѕ РРнас всех заменит. РЇ считаю, что РЅРµ стоит поддаваться панике, Р° лучше разобраться, как Рскусственный интеллект может вас усилить, Рё прокачать эти навыки. Рта Р¶Рµ логика звучит РІ видео блогера Марины Могилко РёР· Кремневой долины, собранном РїРѕ интервью СЃ лидерами индустрии: фаундеры LinkedIn Рё Perplexity AI, CEO Microsoft AI Рё GitHub.","РќРёР¶Рµ — 7 навыков, которые РјРѕРіСѓС‚ помочь РЅРµ только РЅРµ потерять работу, Р° получить X2 РїРѕ зарплате – РґР°, такие кейсы СѓР¶Рµ есть РЅР° рынке. Рто практический гайд как быстрее учиться, лучше проходить собеседования, делать сильнее резюме/портфолио Рё повышать ценность РЅР° рынке."]},{"id":"main-image-2","type":"image","src":"https://storage.ht-platform.ru/public/articles/1/article-photo-03.png"},{"id":"skill-1-intro","type":"textWithImage","mainTitle":"7 навыков, которые стоит прокачивать РІ 2026","title":"Навык в„–1. Умение формулировать задачу (problem framing)","text":["РРбесполезен, если РІС‹ РЅРµ понимаете, что именно хотите улучшить. Чёткая постановка проблемы — это навык мышления, Р° РЅРµ «фишка РРВ».","Для РїРѕРёСЃРєР° работы это особенно важно: резюме, кейс, сопроводительное РїРёСЃСЊРјРѕ, подготовка Рє интервью — РІСЃС‘ начинается СЃ СЏСЃРЅРѕР№ цели Рё критериев качества."],"imageSrc":"https://storage.ht-platform.ru/public/articles/1/article-photo-04.png","imagePosition":"right"},{"id":"skill-1-accent","type":"accent","title":"Как прокачать:","variant":"dark","items":["Шаблон РЅР° 2 минуты: Контекст в†’ Цель в†’ Критерии качества в†’ Ограничения.","Практика: перепишите СЃРІРѕСЋ текущую задачу (например, улучшить резюме) РІ РґРІСѓС… версиях: «как обычно» Рё «по шаблону». Сравните качество ответа РР."]},{"id":"skill-1-prompt","type":"code","title":"РџСЂРѕРјРїС‚-шаблон","content":"Контекст: СЏ ищу работу РЅР° позицию <роль>. Р’РѕС‚ вакансия: <текст>.\\nЦель: улучшить РјРѕС‘ резюме так, чтобы повысить шанс РЅР° приглашение.\\nКритерии качества: конкретные достижения, релевантные слова РёР· вакансии, ясная структура.\\nОграничения: 1 страница, без РІРѕРґС‹, язык — деловой.\\nСделай 10 правок Рё РѕР±СЉСЏСЃРЅРё каждую (что было РЅРµ так в†’ как стало лучше).","copyable":true},{"id":"skill-2","type":"textWithImage","title":"Навык в„–2. Навык «говорить СЃ РРВ»: промпты, уточнения, итерации","text":["Сильный результат почти всегда получается РЅРµ СЃ первого запроса. Ключ — итерации: уточнить задачу, попросить варианты, выбрать лучший.","Рто особенно полезно РїСЂРё подготовке Рє собеседованиям Рё РїСЂРё упаковке опыта РІ резюме/портфолио."],"imageSrc":"https://storage.ht-platform.ru/public/articles/1/article-photo-05.png","imagePosition":"right"},{"id":"skill-2-accent","type":"accent","title":"Как прокачать:","variant":"dark","items":["РўСЂРё усилителя: роль + формат; примеры; итерации («сначала задай РІРѕРїСЂРѕСЃС‹, потом предложи варианты»).","Практика: сделайте 2 итерации для РѕРґРЅРѕРіРѕ блока резюме — Рё сравните СЃ «одним запросом»."]},{"id":"skill-2-prompt","type":"code","title":"РџСЂРѕРјРїС‚-шаблон","content":"РўС‹ — карьерный консультант. Сначала задай 7 РІРѕРїСЂРѕСЃРѕРІ, чтобы уточнить РјРѕР№ опыт Рё цель.\\nЗатем предложи 3 варианта сопроводительного РїРёСЃСЊРјР°: (1) очень короткое, (2) уверенное, (3) более 'человечное', РЅРѕ деловое.\\nР’ конце: укажи 5 мест, РіРґРµ СЏ звучу общими словами, Рё предложи конкретику.","copyable":true},{"id":"skill-3","type":"textWithImage","title":"Навык в„–3. Критическое мышление Рё проверка: РЅРµ верить ответу «на слово»","text":["РРрегулярно ошибается: путает факты, выдумывает источники, уверенно предлагает неверные шаги. Поэтому навык в„–3 — проверка.","Для соискателя это РїСЂРѕ: проверку фактов Рѕ компании, требований вакансии, корректности рекомендаций РїРѕ резюме Рё РїРѕ подготовке Рє интервью."],"imageSrc":"https://storage.ht-platform.ru/public/articles/1/article-photo-06.png","imagePosition":"right"},{"id":"skill-3-accent","type":"accent","title":"Как прокачать:","variant":"dark","items":["Правило: РјРёРЅРёРјСѓРј 2 независимых источника для факта + просить РРпоказать, откуда вывод.","Практика: возьмите «совет» РР Рё попросите: (Р°) РіРґРµ РѕРЅ может ошибаться, (Р±) как проверить, (РІ) альтернативные версии."]},{"id":"skill-3-prompt","type":"code","title":"РџСЂРѕРјРїС‚-шаблон","content":"Проверь СЃРІРѕР№ ответ:\\n1) какие утверждения здесь РјРѕРіСѓС‚ быть неверны?\\n2) что РЅСѓР¶РЅРѕ проверить РІ независимых источниках?\\n3) предложи 2 альтернативных варианта вывода.\\nОтвет оформи таблицей: утверждение в†’ СЂРёСЃРє ошибки в†’ как проверить.","copyable":true},{"id":"skill-4","type":"textWithImage","title":"Навык в„–4. Организация работы СЃ РРкак процесса, Р° РЅРµ разовый «вопрос-ответ»","text":["Самые эффективные используют РРкак часть процесса: «сначала собрать данные в†’ затем структурировать в†’ затем улучшить в†’ затем проверить».","Для соискателя это СЌРєРѕРЅРѕРјРёС‚ часы: подготовка Рє интервью, портфолио, тестовые задания, анализ вакансии — РІСЃС‘ РјРѕР¶РЅРѕ разложить РЅР° цепочку."],"imageSrc":"https://storage.ht-platform.ru/public/articles/1/article-photo-07.png","imagePosition":"right"},{"id":"skill-4-accent","type":"accent","title":"Как прокачать:","variant":"dark","items":["Соберите СЃРІРѕСЋ «цепочку соискателя»: вакансия в†’ требования в†’ ваш опыт в†’ пробелы в†’ план подготовки в†’ репетиция интервью.","Практика: РѕРґРёРЅ раз собрать цепочку — потом переиспользовать РїРѕРґ 10 вакансий."]},{"id":"skill-4-prompt","type":"code","title":"РџСЂРѕРјРїС‚-шаблон","content":"Построй процесс подготовки Рє собеседованию РїРѕ вакансии:\\n1) извлеки 10 ключевых требований,\\n2) сопоставь РёС… СЃ РјРѕРёРј опытом (что есть/чего нет),\\n3) составь план подготовки РЅР° 7 дней,\\n4) подготовь 12 РІРѕРїСЂРѕСЃРѕРІ интервьюера Рё РјРѕРё ответы РІ формате STAR,\\n5) добавь чек-лист проверки фактов Рё терминов.","copyable":true},{"id":"skill-5","type":"textWithImage","title":"Навык в„–5. Творческое мышление Рё выбор: «вкус» Рё контекст остаются Сѓ человека","text":["РРможет нагенерить 20 вариантов. РќРѕ выбрать лучший РїРѕРґ вашу ситуацию, стиль Рё аудиторию — это ваша работа.","Для соискателя это означает: РЅРµ «копировать» РїРёСЃСЊРјРѕ/резюме, Р° адаптировать РїРѕРґ конкретную роль Рё компанию."],"imageSrc":"https://storage.ht-platform.ru/public/articles/1/article-photo-08.png","imagePosition":"right"},{"id":"skill-5-accent","type":"accent","title":"Как прокачать:","variant":"dark","items":["Просите РРгенерировать варианты СЃ разными стратегиями (например: «через достижения», «через мотивацию», «через ценность для команды»).","Практика: выбрать 1 стратегию Рё довести её РґРѕ сильной версии — вместо 10 средних."]},{"id":"skill-5-prompt","type":"code","title":"РџСЂРѕРјРїС‚-шаблон","content":"Сгенерируй 5 вариантов 'позиционирования' меня как кандидата РЅР° <роль>:\\n1) через результаты,\\n2) через скорость обучения,\\n3) через ответственность,\\n4) через продуктовый/клиентский фокус,\\n5) через командную работу.\\nЗатем оцени каждый РїРѕ шкале 1-10 (релевантность вакансии, доказуемость, уникальность) Рё предложи лучший.","copyable":true},{"id":"skill-6","type":"textWithImage","title":"Навык в„–6. Перепрофилирование Рё синтез: РѕРґРЅР° идея в†’ РјРЅРѕРіРѕ форматов","text":["РћРґРЅР° работа может превращаться РІ портфолио, кейс, РїРѕСЃС‚, презентацию, ответы для интервью — если РІС‹ умеете «переупаковывать».","Рто особенно важно, РєРѕРіРґР° опыта мало: РІС‹ показываете ценность через форму Рё ясность."],"imageSrc":"https://storage.ht-platform.ru/public/articles/1/article-photo-09.png","imagePosition":"right"},{"id":"skill-6-accent","type":"accent","title":"Как прокачать:","variant":"dark","items":["Возьмите РѕРґРёРЅ учебный/рабочий проект Рё сделайте РёР· него: (Р°) 1-страничный кейс, (Р±) 5 буллетов РІ резюме, (РІ) 60-секундный питч.","Практика: повторить это 2-3 раза — Рё портфолио СѓР¶Рµ выглядит «взросло»."]},{"id":"skill-6-prompt","type":"code","title":"РџСЂРѕРјРїС‚-шаблон","content":"РЈ меня есть проект: <описание>.\\nСделай РёР· него:\\n1) 1-страничный кейс (задача в†’ действия в†’ результат в†’ цифры в†’ вывод),\\n2) 5 bullet points для резюме,\\n3) короткий устный питч РЅР° 60 секунд,\\n4) СЃРїРёСЃРѕРє 10 РІРѕРїСЂРѕСЃРѕРІ интервьюера РїСЂРѕ этот проект Рё РјРѕРё ответы.","copyable":true},{"id":"skill-7","type":"textWithImage","title":"Навык в„–7. Умение учиться постоянно: метанавык РґРѕ 2030","text":["Навыки устаревают быстрее, чем раньше. Поэтому выигрывают те, кто умеет учиться самостоятельно Рё быстро перестраиваться.","Для соискателя это РїСЂРѕ системность: понятный план, маленькие циклы практики Рё регулярная обратная СЃРІСЏР·СЊ."],"imageSrc":"https://storage.ht-platform.ru/public/articles/1/article-photo-10.png","imagePosition":"right"},{"id":"skill-7-accent","type":"accent","title":"Как прокачать:","variant":"dark","items":["Сделайте систему В«1 тема — 1 неделя — 1 результат»: РЅРµ просто читать, Р° выпускать артефакт (кейс, демо, заметку, РјРёРЅРё-проект).","Практика: каждые 7 дней — РѕРґРёРЅ измеримый результат, который РјРѕР¶РЅРѕ добавить РІ резюме или портфолио."]},{"id":"skill-7-prompt","type":"code","title":"РџСЂРѕРјРїС‚-шаблон","content":"Составь план обучения РЅР° 4 недели РїРѕРґ цель: получить работу <роль>.\\nУсловия:\\n- 30 РјРёРЅСѓС‚ РІ день,\\n- каждую неделю должен быть измеримый результат (артефакт) для портфолио,\\n- включи проверку прогресса Рё самотест.\\nВыведи план таблицей: день в†’ задача в†’ навык РёР· 7 в†’ критерий готовности.","copyable":true},{"id":"calendar-image","type":"image","src":"https://storage.ht-platform.ru/public/articles/1/article-photo-11.png"},{"id":"practice-plan","type":"cardGrid","title":"План РЅР° 14 дней: практика (15–25 РјРёРЅСѓС‚ РІ день)","description":"Каждый день — конкретное упражнение Рё явная РїСЂРёРІСЏР·РєР° Рє РѕРґРЅРѕРјСѓ или нескольким навыкам РёР· СЃРїРёСЃРєР° выше. Если времени меньше — делайте хотя Р±С‹ 10 РјРёРЅСѓС‚, РЅРѕ ежедневно.","items":[{"title":"День 1","text":"Р’РѕР·СЊРјРё 1 вакансию Рё выпиши: цель отклика, 7 ключевых требований, критерии «сильного резюме» РїРѕРґ эту вакансию.","tags":["Прокачивает навыки: в„–1"]},{"title":"День 2","text":"Перепиши заголовок Рё summary резюме РїРѕРґ вакансию (2 версии). РџРѕРїСЂРѕСЃРё РРсравнить Рё выбрать лучшую РїРѕ критериям.","tags":["Прокачивает навыки: в„–1, в„–5"]},{"title":"День 3","text":"Сделай 2 итерации промпта для улучшения РѕРґРЅРѕРіРѕ раздела резюме (опыт/проекты): «вопросы в†’ 3 варианта в†’ финал».","tags":["Прокачивает навыки: в„–2"]},{"title":"День 4","text":"Проведи проверку фактов: 5 утверждений Рѕ компании/роли/требованиях — подтвердить РІ 2 источниках.","tags":["Прокачивает навыки: в„–3"]},{"title":"День 5","text":"Собери цепочку подготовки Рє интервью РїРѕ вакансии (шаги 1-5: требования в†’ опыт в†’ пробелы в†’ план в†’ репетиция).","tags":["Прокачивает навыки: в„–4, в„–1"]},{"title":"День 6","text":"Сделай 8 ответов РІ формате STAR для типовых РІРѕРїСЂРѕСЃРѕРІ (достижения/конфликт/ошибка/инициатива).","tags":["Прокачивает навыки: в„–4, в„–2"]},{"title":"День 7","text":"Репетиция: сгенерируй 12 РІРѕРїСЂРѕСЃРѕРІ интервьюера Рё РїСЂРѕР№РґРё РјРёРЅРё-интервью (ответы вслух, 20 РјРёРЅСѓС‚).","tags":["Прокачивает навыки: в„–2, в„–4"]},{"title":"День 8","text":"Выяви 5 «слабых мест» (РіРґРµ мало цифр/конкретики) Рё добавь доказательства: метрики, ссылки, артефакты.","tags":["Прокачивает навыки: в„–3, в„–1"]},{"title":"День 9","text":"Р’РѕР·СЊРјРё 1 проект Рё переупакуй: 1-страничный кейс + 5 буллетов для резюме.","tags":["Прокачивает навыки: в„–6"]},{"title":"День 10","text":"Сделай 60-секундный питч Рѕ себе (2 версии): через результаты Рё через мотивацию. Выбери лучшую.","tags":["Прокачивает навыки: в„–5, в„–6"]},{"title":"День 11","text":"Собери «пакет отклика»: резюме + РїРёСЃСЊРјРѕ + 3 тезиса ценности. РџСЂРѕРіРѕРЅРё через РР РЅР° ясность Рё убрать общие слова.","tags":["Прокачивает навыки: в„–2, в„–5, в„–1"]},{"title":"День 12","text":"Сделай симуляцию тестового: РїРѕРїСЂРѕСЃРё РРдать задание РїРѕ роли Рё оцени решение РїРѕ чек-листу качества.","tags":["Прокачивает навыки: в„–4, в„–3"]},{"title":"День 13","text":"Построй недельный план РґРѕ оффера: какие навыки закрываешь Рё каким артефактом это докажешь.","tags":["Прокачивает навыки: в„–7, в„–4"]},{"title":"День 14","text":"Ретроспектива: что реально улучшилось (резюме/кейсы/ответы)? Зафиксируй шаблоны промптов Рё процесс РїРѕРґ следующие вакансии.","tags":["Прокачивает навыки: в„–7, в„–4, в„–2"]}]},{"id":"faq","type":"faq","items":[{"question":"Почему РРможет “уволить” меня?","answer":"Больше хайп, РЅРѕ есть нюансы. РРповышает планку: рутинные задачи ускоряются, Рё ценность смещается Рє тем, кто умеет ставить задачи, проверять Рё доводить РґРѕ результата. Если РІС‹ используете РРосознанно, РІС‹ становитесь быстрее Рё полезнее — это снижает СЂРёСЃРє быть “заменённым”."},{"question":"Какие навыки важнее всего прокачивать РІ 2026, если СЏ ищу работу?","answer":"Начните СЃ тройки: (1) формулировать задачу, (2) вести диалог СЃ РРитерациями, (3) проверять Рё критически оценивать результат. Рти навыки усиливают остальные Рё дают быстрый РїСЂРёСЂРѕСЃС‚ РІ резюме/интервью."},{"question":"Если СЏ РќР• РёР· IT?","answer":"Рти навыки РЅРµ только для айтишников. РћРЅРё РїСЂРѕ мышление Рё работу СЃ информацией: формулировать, уточнять, проверять, структурировать. Начните СЃ задач РёР· вашей сферы (резюме, портфолио, РїРёСЃСЊРјРѕ, анализ вакансии) — прогресс будет заметен быстро."},{"question":"Как использовать РРдля подготовки Рє собеседованию без “зазубривания”?","answer":"Рспользуйте РРкак тренажёр: (Р°) пусть задаёт РІРѕРїСЂРѕСЃС‹ Рё усложняет, (Р±) пусть оценивает ответы РїРѕ критериям, (РІ) пусть предлагает улучшения Рё РїСЂРѕСЃРёС‚ примеры/цифры. Главное — говорить вслух Рё фиксировать 2–3 улучшения после каждой репетиции."},{"question":"Как проверить, что РР РЅРµ “нафантазировал” советы?","answer":"Просите указать, РіРґРµ РѕРЅ может ошибаться, Рё давайте ему задачу составить план проверки. Для фактов — 2 независимых источника. Для рекомендаций — сравните 2 альтернативных версии Рё оцените РёС… РїРѕ вашим критериям."},{"question":"Какие результаты стоит показать работодателю, если опыта мало?","answer":"Показывайте артефакты: 1-страничные кейсы проектов, демо, заметки, краткие разборы задач, портфолио. Навык “одна идея в†’ РјРЅРѕРіРѕ форматов” помогает выглядеть сильнее даже РїСЂРё небольшом опыте. Рђ также определите СЃРІРѕРё SOFT SKILLS РІ нашем сервисе, это поможет дать хорошую РѕРїРѕСЂСѓ даже без опыта."},{"question":"Сколько времени РЅСѓР¶РЅРѕ, чтобы почувствовать эффект?","answer":"Обычно 7–14 дней регулярной практики дают заметный результат: резюме становится конкретнее, ответы РЅР° интервью — структурнее, отклики — точнее. План РёР· этой статьи рассчитан РЅР° 15–25 РјРёРЅСѓС‚ РІ день."}]},{"id":"sources","type":"references","title":"Рсточники","items":[{"title":"Marina Mogilko. “If I need to start over in 2026, I’d learn these 7 skills first” (YouTube).","link":"https://www.youtube.com/watch?v=9pfbGnuMNhk"},{"title":"World Economic Forum. The Future of Jobs Report 2025 — Skills outlook.","link":"https://www.weforum.org/publications/the-future-of-jobs-report-2025/"},{"title":"NIST. AI Risk Management Framework (AI RMF 1.0) — reliability and risk framing.","link":"https://www.nist.gov/itl/ai-risk-management-framework"},{"title":"Microsoft. Responsible AI / guidance on using AI systems and verification practices (overview).","link":"https://learn.microsoft.com/en-us/azure/ai-foundry/responsible-ai/openai/overview?view=foundry-classic"},{"title":"Google Search. Guidance on creating helpful, reliable, people-first content (search quality guidance).","link":"https://developers.google.com/search/docs/fundamentals/creating-helpful-content"},{"title":"OpenAI. Prompting / best practices for working with models (overview).","link":"https://platform.openai.com/docs/guides/prompt-engineering"}]}]`),l4={id:Q3,title:Z3,description:J3,createdAt:X3,readTime:e4,coverUrl:t4,category:r4,tags:n4,seo:a4,author:o4,toc:i4,blocks:s4},c4="solo-frontend-developer-2026",u4="РћРґРёРЅ разработчик — весь фронтенд: проектирование, реализация Рё оптимизация интерфейса",d4="Практический опыт создания клиентской части масштабной HR-платформы СЃ нуля РґРѕ продакшена силами РѕРґРЅРѕРіРѕ инженера. Выбор стека, адаптация FSD, работа СЃ API Рё глобальный перехват ошибок.",f4="07.05.2026",p4="12 РјРёРЅ",h4="https://storage.ht-platform.ru/public/articles/2/article-photo-01.png",m4="skills",g4=["#frontend","#React","#FSD","#архитектура","#опыт"],y4={title:"РћРґРёРЅ разработчик — весь фронтенд: проектирование, реализация Рё оптимизация",description:"Как РѕРґРЅРѕРјСѓ разработчику спроектировать, написать Рё задеплоить масштабный фронтенд РЅР° React. Практические советы, архитектура FSD, работа СЃ API Рё оптимизация.",keywords:["frontend","SPA","React","TypeScript","Vite","Feature-Sliced Design","Redux","Cypress","оптимизация","деплой"]},v4={id:"gnozdrin",name:"Георгий РќРѕР·РґСЂРёРЅ",role:"React frontend-разработчик продукта HT Platform",avatar:"https://storage.ht-platform.ru/public/staff/noz-photo.PNG"},w4=[{id:"abstract",title:"Аннотация"},{id:"intro",title:"Введение"},{id:"main-stages",items:[{id:"checklist",title:"1. Что было важно принять РІ начале"},{id:"stack",title:"2. Стек технологий"},{id:"structure",title:"3. Структура проекта"},{id:"apiclient",title:"4. ApiClient Рё история РїСЂРѕ Refresh Token"},{id:"errors",title:"5. Глобальный перехват ошибок"},{id:"routing",title:"6. Маршрутизация РїРѕ ролям"},{id:"ui",title:"7. Укрощение UI Рё ModalManager"},{id:"testing",title:"8. Тестирование"},{id:"deploy",title:"9. Деплой Рё проверка боем"}]},{id:"conclusion",title:"Заключение"},{id:"references",title:"РЎРїРёСЃРѕРє литературы Рё ресурсы"}],C4=JSON.parse(`[{"id":"main-image","type":"image","src":"https://storage.ht-platform.ru/public/articles/2/article-photo-02.png"},{"id":"abstract","type":"text","title":"Аннотация","paragraphs":["Работать РѕРґРЅРѕРјСѓ над фронтендом масштабного проекта — это РЅРµ только вызов, РЅРѕ Рё абсолютная архитектурная СЃРІРѕР±РѕРґР°. РЎ РґСЂСѓРіРѕР№ стороны — это СЂРёСЃРє утонуть РІ техническом долге Рё РЅРµ довести РїСЂРѕРґСѓРєС‚ РґРѕ релиза.","Р’ этой статье СЏ делюсь практическим опытом создания клиентской части HR-платформы (соискатели, работодатели, вакансии, чаты) СЃ нуля РґРѕ продакшена силами РѕРґРЅРѕРіРѕ инженера. РЇ расскажу Рѕ выборе стека, адаптации Feature-Sliced Design, укрощении модальных РѕРєРѕРЅ, работе СЃ API Рё глобальном перехвате ошибок. Р’ финале поделюсь результатами «боевого крещения» архитектуры РїСЂРё наплыве пользователей."]},{"id":"intro","type":"text","title":"Введение — почему это интересно","paragraphs":["Существует стереотип, что для создания сложного веб-приложения обязательно РЅСѓР¶РЅР° команда: тимлид для архитектуры, мидлы для бизнес-логики Рё тестировщик. РќРѕ реалии таковы, что РёРЅРѕРіРґР° весь фронтенд ложится РЅР° плечи РѕРґРЅРѕРіРѕ человека.","Передо РјРЅРѕР№ стояла задача: написать клиентскую часть HR-платформы. РџСЂРѕРґСѓРєС‚ включал личные кабинеты кандидатов Рё работодателей, систему публикации Рё импорта вакансий, встроенный чат Рё информационные разделы (статьи, публикации).","Работать РѕРґРЅРѕРјСѓ круто — ты сам себе архитектор, никто РЅРµ СЃРїРѕСЂРёС‚ Рѕ РєРѕРґ-стайле РЅР° часовых митингах. РќРѕ цена ошибки возрастает кратно. Выберешь плохую структуру папок — Рё через три месяца проект превратится РІ легаси. Р’ этой статье СЏ хочу поделиться тем, какие привычки Рё шаблоны помогли довести проект РґРѕ релиза, Р° чего стоило избегать."]},{"id":"checklist","type":"text","title":"1. Что было важно принять РІ начале (РјРѕР№ чек-лист)","paragraphs":["Перед тем как написать первую строчку РєРѕРґР°, СЏ составил для себя жесткие правила РёРіСЂС‹. Работая РІ одиночку, дисциплина заменяет РєРѕРґ-ревью РѕС‚ старших коллег."]},{"id":"checklist-image","type":"image","src":"https://storage.ht-platform.ru/public/articles/2/article-photo-03.png"},{"id":"checklist-list","type":"list","ordered":true,"items":["Выбрать строгую структуру проекта (FSD) Рё РЅРµ отступать РѕС‚ нее.","Сделать единый API-слой для всех HTTP-вызовов (никаких fetch внутри компонентов).","Перехватывать РІСЃРµ серверные ошибки глобально, чтобы РЅРµ писать try/catch РЅР° каждой странице.","Настроить E2E-тесты для критических путей (СЏ РѕРґРёРЅ, СЏ РЅРµ СЃРјРѕРіСѓ тестировать руками РІСЃС‘).","Максимально автоматизировать деплой."]},{"id":"stack","type":"text","title":"2. Стек технологий — почему именно РѕРЅ","paragraphs":["РљРѕРіРґР° ресурсов мало, инструменты должны помогать, Р° РЅРµ вставлять палки РІ колеса. РЇ остановился РЅР° проверенном Рё современном наборе:"]},{"id":"stack-image","type":"image","src":"https://storage.ht-platform.ru/public/articles/2/article-photo-04.png"},{"id":"stack-list","type":"list","ordered":false,"items":["React + TypeScript. TypeScript РІ строгом режиме здесь РЅРµ просто дань РјРѕРґРµ. Для соло-разработчика это бесплатный тестировщик, который ловит 80% глупых опечаток (РІСЂРѕРґРµ user.id вместо user.uuid) еще РЅР° этапе компиляции.","Vite. После тяжелого Webpack СЃР±РѕСЂРєР° РЅР° Vite ощущается как глоток свежего РІРѕР·РґСѓС…Р°. Мгновенные перезапуски Рё HMR СЌРєРѕРЅРѕРјСЏС‚ десятки РјРёРЅСѓС‚ каждый день. Конфиг vite.config.ts занимает 30 строк Рё закрывает РІСЃРµ потребности.","Redux (RTK). Встроенного Context API РЅРµ хватит для сложного приложения СЃ чатами Рё ролями, РѕРЅ провоцирует лишние рендеры. Redux Toolkit дал РјРЅРµ предсказуемый контейнер состояния.","Cypress. Быстрая уверенность РІ работоспособности сценариев (логин, профиль, создание вакансии).","Docker + Nginx. Готовый Рё пуленепробиваемый рецепт для стабильного продакшена."]},{"id":"structure","type":"text","title":"3. Структура проекта (Feature-Sliced Design РЅР° практике)","paragraphs":["Р’ начале пути всегда есть соблазн сложить РІСЃРµ компоненты РІ папку components. Для пет-проекта это работает, для большой HR-платформы — это путь РІ ад. РЇ адаптировал методологию Feature-Sliced Design.","РњРѕР№ проект разделен РЅР° четкие слои:"]},{"id":"structure-image","type":"image","src":"https://storage.ht-platform.ru/public/articles/2/article-photo-05.png","caption":"Р РёСЃСѓРЅРѕРє 1. Архитектура слоев приложения"},{"id":"structure-list","type":"list","ordered":false,"items":["app/ — точка РІС…РѕРґР°: инициализация App.tsx, настройка store, провайдеры (with-providers.tsx).","pages/ — маршруты. РћРЅРё почти РЅРµ содержат логики, РёС… задача — просто собрать страницу РёР· фичей.","widgets/ — крупные агрегаты UI (Header, Footer, SideBar, ModalManager).","features/ — конкретные бизнес-флоу (авторизация, чат, РёРјРїРѕСЂС‚ вакансий).","entities/ — доменные сущности (vacancy, candidate, employer). Внутри каждой сущности лежат СЃРІРѕРё папки: api, model, ui, service.","shared/ — «глупый» переиспользуемый РєРѕРґ: UI-библиотека (РєРЅРѕРїРєРё, инпуты), глобальный ApiClient, константы."]},{"id":"structure-conclusion","type":"text","paragraphs":["Рто дает понятные границы. Рзменение логики карточки вакансии РІ entities/vacancy физически РЅРµ может сломать процесс регистрации РІ features/auth."]},{"id":"apiclient","type":"text","title":"4. ApiClient Рё история РїСЂРѕ Refresh Token","paragraphs":["Разбрасывать запросы Рє серверу РїРѕ всем компонентам — ошибка. РЇ создал единый ApiClient.ts РІ слое shared. Любой HTTP-запрос РІ приложении РїСЂРѕС…РѕРґРёС‚ через него."]},{"id":"apiclient-accent","type":"accent","variant":"dark","title":"Реальная проблема, СЃ которой СЏ столкнулся:","paragraphs":["Однажды баг СЃ race condition (состоянием РіРѕРЅРєРё) РІ refresh-token начал сводить меня СЃ СѓРјР°. РљРѕРіРґР° Сѓ пользователя истекал access_token, страница отправляла сразу 4 параллельных запроса (Р·Р° профилем, вакансиями, чатами). Р’СЃРµ 4 получали 401 ошибку, Рё приложение 4 раза пыталось обновить токен, сбрасывая сессию."]},{"id":"apiclient-solution","type":"textWithImage","title":"Как СЏ это решил:","text":["Помощь пришла РѕС‚ перехода РЅР° очередь запросов. РџСЂСЏРјРѕ РІ ApiClient СЏ добавил логику: если РѕРґРёРЅ запрос ловит 401, клиент переходит РІ статус «обновляю токен», Р° РІСЃРµ остальные запросы замораживаются РІ массив.","Как только токен обновлен, замороженные запросы выполняются СЃ новым токеном. РњРёРЅСѓСЃ — чуть больше РєРѕРґР°, плюс — ноль вылетов Сѓ пользователей."],"imageSrc":"https://storage.ht-platform.ru/public/articles/2/article-photo-06.png","imagePosition":"left"},{"id":"errors","type":"text","title":"5. Глобальный перехват ошибок (чтобы РЅРµ писать try/catch)","paragraphs":["Писать обработку ошибок РІ каждом компоненте мучительно. РЇ вынес это РІ Redux, написав errorListenerMiddleware.ts.","Ртот middleware слушает РІСЃРµ экшены, которые завершились СЃ ошибкой (rejected). Если сервер отвечает 403 (Нет прав) — всплывает глобальный Toast. Если 500 — Toast «Сервер временно недоступен». Рђ если 401 — пользователя РјСЏРіРєРѕ редиректит РЅР° логин.","Рто сделало компоненты страниц невероятно чистыми: РѕРЅРё просто дергают данные РёР· API Рё рендерят РёС…. Рћ том, что сеть может отвалиться, думает errorListenerMiddleware."]},{"id":"errors-image","type":"image","src":"https://storage.ht-platform.ru/public/articles/2/article-photo-07.png","caption":"Р РёСЃСѓРЅРѕРє 2. Типичный поток данных Рё отлов ошибок"},{"id":"routing","type":"textWithImage","title":"6. Маршрутизация РїРѕ ролям Рё ленивая загрузка","text":["Рнтерфейсы соискателя Рё работодателя кардинально отличаются. Сердцем маршрутизации стал РјРѕР№ компонент RoleBasedRoute.tsx.","РћРЅ оборачивает роуты Рё проверяет роль юзера РёР· стора. Если соискатель случайно попытается зайти РїРѕ ссылке /candidates, роутер мгновенно перехватит его Рё сделает редирект, РЅРµ дав приложению отправить невалидные запросы РЅР° сервер."],"imageSrc":"https://storage.ht-platform.ru/public/articles/2/article-photo-08.png","imagePosition":"right"},{"id":"routing-accent","type":"accent","variant":"dark","paragraphs":["UX-совет: показывайте пользователю только те действия, которые ему разрешены, вместо того чтобы бить его РїРѕ рукам всплывающими окнами «Ошибка доступа» постфактум."]},{"id":"routing-extra","type":"text","paragraphs":["Также СЏ активно использовал Code-Splitting (React.lazy). Модули работодателя физически РЅРµ загружаются РІ браузер соискателя, что сильно уменьшило начальный бандл."]},{"id":"ui","type":"text","title":"7. Укрощение UI: Стили Рё ModalManager","paragraphs":["Модальные РѕРєРЅР° — вечная боль фронтенда. Если каждый компонент рендерит СЃРІРѕСЋ модалку, начинаются конфликты z-index. РЇ решил это централизованно: создал ModalManager РІ слое widgets."]},{"id":"ui-image","type":"image","src":"https://storage.ht-platform.ru/public/articles/2/article-photo-09.png"},{"id":"ui-more","type":"text","paragraphs":["Р’ Redux хранится стейт activeModalType. Вызвать РѕРєРЅРѕ редактирования профиля РјРѕР¶РЅРѕ РёР· любой глубины приложения РѕРґРЅРѕР№ строкой: dispatch(openModal('EDIT_PROFILE')). ModalManager РІРёРґРёС‚ изменение стейта Рё рендерит нужный попап через React Portals поверх всего приложения. Чисто Рё элегантно.","Стили лежат РІ РґРІСѓС… местах: src/styles/* Рё index.css отвечают Р·Р° глобальные токены (переменные цветов, шрифтов), Р° специфика страниц изолирована РІ CSS Modules (например, contestInstructionsPage.module.css)."]},{"id":"testing","type":"textWithImage","title":"8. Тестирование: Какой охват нужен РѕРґРЅРѕРјСѓ разработчику?","text":["Писать тесты РѕРґРЅРѕРјСѓ кажется потерей времени, РїРѕРєР° ты РЅРµ сломаешь РїСЂРѕРґ. РЇ выбрал РєРѕРјРїСЂРѕРјРёСЃСЃ: СЋРЅРёС‚-тесты только для сложной бизнес-логики, Р° РѕСЃРЅРѕРІРЅРѕРµ время — РЅР° E2E РІ Cypress.","Р’ папке cypress/e2e/ лежат сценарии, которые прокликивают критичные пути: регистрация, РїРѕРёСЃРє вакансии, успешный отклик, создание вакансии работодателем.","Если эти тесты зеленые, СЏ уверен, что СЏРґСЂРѕ продукта работает. Плюс строгий ESLint Рё commitlint для гигиены РєРѕРґР°. Рти выходные, потраченные РЅР° Cypress, окупились сполна РїСЂРё регрессионном тестировании крупных фичей."],"imageSrc":"https://storage.ht-platform.ru/public/articles/2/article-photo-10.png","imagePosition":"right"},{"id":"deploy","type":"text","title":"9. Деплой Рё проверка боем (Стресс-тест)","paragraphs":["РЇ терпеть РЅРµ РјРѕРіСѓ деплоить руками. Р’ РєРѕСЂРЅРµ проекта лежит Dockerfile, использующий multi-stage СЃР±РѕСЂРєСѓ. Сначала стартует Node, запускает npm run build через Vite, Р° затем берет легкий образ Nginx Рё подкладывает туда готовую папку dist. Файл nginx.conf настроен РЅР° отдачу index.html Рё сжатие статики."]},{"id":"deploy-image","type":"image","src":"https://storage.ht-platform.ru/public/articles/2/article-photo-11.png","caption":"Р РёСЃСѓРЅРѕРє 3. Процесс СЃР±РѕСЂРєРё Рё деплоя контейнера"},{"id":"stress-test","type":"text","title":"Рстория РёР· продакшена","paragraphs":["Теория архитектуры — это прекрасно, РЅРѕ настоящая проверка РїСЂРѕРёСЃС…РѕРґРёС‚ РІ Р±РѕСЋ. РќР° сегодняшний день РЅР° платформе успешно зарегистрировано СѓР¶Рµ более 2 000 пользователей.","РќРѕ главное крещение архитектуры состоялось, РєРѕРіРґР° платформа выступила площадкой для масштабного профильного РєРѕРЅРєСѓСЂСЃР°. Р’ час X РјС‹ получили резкий наплыв: около 600 человек одновременно ринулись РЅР° сайт. РћРЅРё читали инструкции, заполняли профили Рё откликались РЅР° вакансии Рё выполняли тестирование.","Для бэкенда это был огромный стресс. Рђ фронтенд справился безупречно. Поскольку РјС‹ использовали статический деплой (SPA, отдаваемый через Nginx), генерация страниц вообще РЅРµ требовала серверных процессорных мощностей. Nginx просто отдавал кэшированные статические файлы JS Рё CSS.","РўРµ редкие API-запросы, которые РІ первые минуты падали РїРѕ таймауту РёР·-Р·Р° перегрузки бекенда, РјСЏРіРєРѕ перехватывались нашим errorListenerMiddleware, показывая дружелюбные уведомления. Архитектура выдержала РїРёРє РєРѕРЅРєСѓСЂСЃР° без единого СЃР±РѕСЏ РЅР° стороне клиента."]},{"id":"conclusion","type":"text","title":"Заключение — что взять СЃ СЃРѕР±РѕР№","paragraphs":["Написать сложный фронтенд РІ одиночку Рё довести его РґРѕ продакшена — абсолютно реальная задача. Ключ Рє успеху РЅРµ РІ бессонных ночах (хотя Рё РІ РЅРёС… тоже), Р° РІ строгой дисциплине."]},{"id":"conclusion-list","type":"list","title":"РњРѕРё главные выводы:","ordered":true,"items":["Структура важнее фичей. FSD спас проект РѕС‚ превращения РІ легаси.","Единые точки РІС…РѕРґР° СЌРєРѕРЅРѕРјСЏС‚ время. ApiClient Рё errorListenerMiddleware освободили UI РѕС‚ сетевого бойлерплейта.","РќРµ плодите модалки. РћРґРёРЅ ModalManager РЅР° РІСЃРµ приложение решает 99% проблем СЃ интерфейсом.","Тесты — РЅРµ роскошь. E2E покрытие критичных путей спасает релизы, РєРѕРіРґР° нет QA-инженера.","Слушайте пользователей. РРЅРѕРіРґР° быстрая РєРЅРѕРїРєР° «Сохранить черновик» важнее идеальной анимации."]},{"id":"conclusion-outro","type":"text","paragraphs":["Созданная архитектура позволила запустить РїСЂРѕРґСѓРєС‚ РІ сжатые СЃСЂРѕРєРё. РћРЅР° выдержала испытание реальной нагрузкой, Рё теперь, РїРѕ мере роста продукта, РјС‹ можем легко масштабировать РєРѕРґРѕРІСѓСЋ базу Рё подключать новых фронтендеров — проект Рє этому полностью готов."]},{"id":"references","type":"references","title":"РЎРїРёСЃРѕРє литературы Рё ресурсы","items":[{"title":"Официальная документация React","link":"https://react.dev"},{"title":"Vite: Next Generation Frontend Tooling","link":"https://vitejs.dev"},{"title":"Feature-Sliced Design (FSD) Architectural Methodology","link":"https://feature-sliced.design"},{"title":"Документация Redux Toolkit","link":"https://redux-toolkit.js.org"},{"title":"Cypress End-to-End Testing","link":"https://www.cypress.io"},{"title":"Nginx Official Documentation","link":"https://nginx.org/en/docs"}]}]`),_4={id:c4,title:u4,description:d4,createdAt:f4,readTime:p4,coverUrl:h4,category:m4,tags:g4,seo:y4,author:v4,toc:w4,blocks:C4},x4="labor-market-career-2026-q1",S4="Рынок труда Рё карьера РІ 1 квартале 2026 РіРѕРґР° | Рсследование HT Platform",E4="Аналитика рынка труда РІ 1 квартале 2026 РіРѕРґР°: динамика вакансий Рё резюме, hh.индекс, зарплатные предложения, карьерные планы СЂРѕСЃСЃРёСЏРЅ, роль РР Рё навыков РІ найме. Выводы Рё рекомендации для соискателей.",k4="22.05.2026",b4="8 РјРёРЅ",I4="https://storage.ht-platform.ru/public/articles/3/article-photo-01.png",T4="research",P4=["#рынок-труда-2026","#рынок-труда-СЂС„-2026","#карьера-2026","#зарплаты-2026","#РїРѕРёСЃРє-работы","#навыки-2026","#исследование-ht_platform"],R4={title:"Рынок труда Рё карьера РІ 1 квартале 2026 РіРѕРґР° | Рсследование HT Platform",description:"Аналитика рынка труда РІ 1 квартале 2026 РіРѕРґР°: динамика вакансий Рё резюме, hh.индекс, зарплатные предложения, карьерные планы СЂРѕСЃСЃРёСЏРЅ, роль РР Рё навыков РІ найме. Выводы Рё рекомендации для соискателей.",keywords:["рынок труда 2026","карьера 2026","зарплаты 2026","РР РІ найме","навыки","hh.индекс","исследование"]},A4={id:"akirin",name:"Алексей РљРёСЂРёРЅ",role:"Основатель HT Platform",avatar:"https://storage.ht-platform.ru/public/staff/kir-photo.jpg"},N4=[{id:"main-points",title:"Главные моменты исследования"},{id:"methodology",title:"Как РјС‹ анализировали данные"},{id:"market-ru",title:"1. Рынок труда Р Р¤",items:[{id:"deficit",title:"Где дефицит кадров особенно заметен"},{id:"competition",title:"Где конкуренция выше"},{id:"demand",title:"Что РїСЂРѕРёСЃС…РѕРґРёС‚ СЃРѕ СЃРїСЂРѕСЃРѕРј РїРѕ ролям"}]},{id:"salaries",title:"2. Зарплаты Рё СЃРїСЂРѕСЃ"},{id:"career-moves",title:"3. Карьерное движение усилилось"},{id:"skills",title:"4. Навыки рулят"},{id:"hiring-process",title:"5. Процесс найма"},{id:"confirmed-signals",title:"Что РІ этой картине СѓР¶Рµ хорошо подтверждено, Р° что РїРѕРєР° лучше считать сигналом"},{id:"conclusions",title:"Выводы"},{id:"sources",title:"Рсточники"}],L4=JSON.parse('[{"id":"intro","type":"text","title":"Рынок труда Рё карьера РІ 1 квартале 2026 РіРѕРґР° | Рсследование","paragraphs":["Рто исследование представляет СЃРѕР±РѕР№ аналитику рынка труда СЃРѕ стороны соискателей Рё работодателей как РІ Р Р¤, так Рё Р·Р° рубежом. Данные взяты РёР· четырех разных РіСЂСѓРїРї источников СЃ начала РїРѕ середину мая 2026 РіРѕРґР°. РњС‹ выделили сигналы для понимания, РєСѓРґР° РІСЃС‘ движется, чтобы помочь вам принять правильные решения РїРѕ развитию своей карьеры."]},{"id":"image-02","type":"image","src":"https://storage.ht-platform.ru/public/articles/3/article-photo-02.png"},{"id":"main-points","type":"list","ordered":true,"title":"Главные моменты исследования","items":["Рынок РІ Р РѕСЃСЃРёРё РќР• стал одинаково сложным для всех. Р’ марте 2026 РіРѕРґР° hh.индекс РїРѕ Р РѕСЃСЃРёРё составил 11,4: активных резюме стало заметно больше, Р° вакансий — меньше, РЅРѕ дефицит кадров РЅР° массовых Рё прикладных ролях РїРѕ-прежнему сохраняется. [1]","Наиболее выраженный дефицит заметен РІ розничной торговле Рё отдельных массовых специальностях: среди врачей, продавцов, администраторов магазинов Рё поваров. РџСЂРё этом высокая конкуренция среди соискателей наблюдается РІ маркетинге, РРў, административных ролях, медиа, Р° также РІ стратегии, инвестициях Рё консалтинге. [1]","РћСЃРЅРѕРІРЅРѕР№ СЃРїСЂРѕСЃ РЅР° СЂРѕСЃСЃРёР№СЃРєРѕРј рынке РїРѕ-прежнему сосредоточен РІ рабочем персонале, продажах, производстве, строительстве, транспорте Рё логистике. РќР° эти сферы приходится около РґРІСѓС… третей вакансий РЅР° hh. [1]","Зарплатная РіРѕРЅРєР° замедлилась, РЅРѕ РЅРµ закончилась. РџРѕ данным Работа.СЂСѓ Р·Р° 1 квартал 2026, самые высокие средние предложения были РІ транспорте Рё логистике, строительстве Рё производстве; РїСЂРё этом РІ СЂСЏРґРµ отраслей РіРѕРґРѕРІРѕР№ СЂРѕСЃС‚ предложений СѓР¶Рµ РЅРµ такой быстрый, как раньше. [2]","Для кандидатов это означает СЃРґРІРёРі: РЅР° части рынка важнее СѓР¶Рµ РЅРµ отклики, Р° точнее показывать релевантность роли, навыков Рё опыта. Рто особенно заметно там, РіРґРµ растет конкуренция. [1][2]","Международные платформы Рё HR‑технологии показывают общий вектор: работодатели РІСЃРµ активнее используют РР (искусственный интеллект) РІ РїРѕРґР±РѕСЂРµ как рабочий инструмент для отбора, сортировки откликов Рё ускорения РІРѕСЂРѕРЅРєРё. [4][5][6][13]","РџСЂРё этом рынок навыков смещается РЅРµ только РІ сторону технических знаний. LinkedIn РїСЂСЏРјРѕ фиксирует СЂРѕСЃС‚ СЃРїСЂРѕСЃР° Рё РЅР° навыки работы СЃ РР, Рё РЅР° человеческие навыки: управление людьми, координацию, наставничество, коммуникацию СЃРѕ стейкхолдерами. [7][8]","Найм РїРѕ навыкам — то есть фокус РЅР° том, что человек реально умеет делать постепенно становится частью практики. РќРѕ этот переход РїРѕРєР° идет неравномерно Рё зависит РѕС‚ рынка, роли Рё платформы. [7][9][10]","Для соискателя РІ 2026 РіРѕРґСѓ главная задача — РЅРµ просто «усилить резюме», Р° сделать профиль более доказательным: показать навык, контекст, результат, уровень самостоятельности Рё способность учиться. Рто соответствует тому, как меняются инструменты найма. [3][4][5][6]","Главная особенность рынка труда РІ 2026 РіРѕРґСѓ — наличие нескольких разных рынков внутри РѕРґРЅРѕРіРѕ: массовый, инженерно-технический, офисный, цифровой, проектный, начинающий Рё старший."]},{"id":"image-03","type":"image","src":"https://storage.ht-platform.ru/public/articles/3/article-photo-03.png","caption":"Р РёСЃСѓРЅРѕРє 1. Карта главных выводов исследования. Рсточники: СЃРІРѕРґРєР° РїРѕ данным [1]-[13]."},{"id":"methodology","type":"text","title":"Как РјС‹ анализировали данные","paragraphs":["Р’ исследование включены четыре РіСЂСѓРїРїС‹ источников. Первая — СЂРѕСЃСЃРёР№СЃРєРёРµ площадки Рё РёС… открытая аналитика: прежде всего hh Статистика Рё материалы Работа.СЂСѓ; дополнительно — открытые материалы SuperJob, РєРѕРіРґР° РѕРЅРё дают полезный срез РїРѕ предложениям работодателей. Вторая — международные карьерные Рё рекрутинговые платформы, РіРґРµ РјРѕР¶РЅРѕ видеть, как меняется сама логика РїРѕРґР±РѕСЂР°: LinkedIn, Indeed, Jobvite, Metaview. Третья — крупные качественные РѕР±Р·РѕСЂС‹ Рё отчеты: OECD, World Economic Forum, SHRM. Четвертая — только те рыночные сигналы, которые помогают кандидату понять, как меняются требования Рє найму Рё развитию карьеры.","Обращаем ваше внимание: каждая площадка показывает СЃРІРѕС‘. hh показывает прежде всего динамику своей базы вакансий Рё резюме. Работа.СЂСѓ Рё SuperJob дают дополнительные сигналы, РЅРѕ часто РЅР° РѕСЃРЅРѕРІРµ собственной выборки или отдельных сегментов. LinkedIn, Indeed Рё SHRM полезны как индикаторы направления, РЅРµ стоит РёС… полностью переносить РЅР° СЂРѕСЃСЃРёР№СЃРєРёР№ рынок. Поэтому РІ тексте разделены: твердые факты РїРѕ данным, осторожные выводы Рё слабые сигналы."]},{"id":"image-04","type":"image","src":"https://storage.ht-platform.ru/public/articles/3/article-photo-04.png"},{"id":"market-ru","type":"text","title":"1. Рынок труда Р Р¤","paragraphs":["Вакансий стало меньше, резюме — больше, РЅРѕ дефицит кадров РЅРёРєСѓРґР° РЅРµ исчез","РџРѕ свежему краткому РѕР±Р·РѕСЂСѓ hh Р·Р° март 2026 РіРѕРґР°, hh.индекс РїРѕ Р РѕСЃСЃРёРё составил 11,4. Ртот показатель считается как отношение среднего числа активных резюме Рє среднему числу активных вакансий. РџРѕ сравнению СЃ мартом 2025 РіРѕРґР° среднее число активных вакансий РЅР° платформе снизилось РЅР° 27%, Р° среднее число активных резюме выросло РЅР° 41%. Медианная предлагаемая зарплата РЅР° hh составила 84 800 рублей, ожидаемая — 80 000 рублей. [1]"]},{"id":"image-05","type":"image","src":"https://storage.ht-platform.ru/public/articles/3/article-photo-05.png","caption":"Р РёСЃСѓРЅРѕРє 2. Рзменение активных вакансий Рё резюме РЅР° hh РіРѕРґ Рє РіРѕРґСѓ. Рсточник: [1]."},{"id":"market-ru-cont","type":"text","paragraphs":["РќР° первый взгляд это выглядит как резкий разворот РІ пользу работодателя. РќРѕ внутри рынка картина неравномерна. РЈР¶Рµ тот Р¶Рµ отчет hh показывает, что рынок разошелся РЅР° РґРІРµ части. Р’ РѕРґРЅРёС… сферах конкуренция между соискателями действительно выросла. Р’ РґСЂСѓРіРёС… по‑прежнему РЅРµ хватает людей, Рё работодатели продолжают бороться Р·Р° закрытие вакансий. [1]","Важная деталь: около РґРІСѓС… третей активных вакансий РЅР° hh по‑прежнему сосредоточены РІ сферах рабочего персонала, продаж Рё клиентского обслуживания, производства, строительства, транспорта Рё логистики, Р° также РРў. Рными словами, базовый СЃРїСЂРѕСЃ рынка РІ 2026 РіРѕРґСѓ остается очень «прикладным». РќР° СѓСЂРѕРІРЅРµ массового СЃРїСЂРѕСЃР° это рынок жизненно важных ролей для функционирования бизнеса. [1]"]},{"id":"image-06","type":"image","src":"https://storage.ht-platform.ru/public/articles/3/article-photo-06.png","caption":"Р РёСЃСѓРЅРѕРє 3. Структура активных вакансий Рё резюме РїРѕ крупным профобластям. Рсточник: [1]."},{"id":"deficit","type":"text","title":"Где дефицит кадров особенно заметен","paragraphs":["РџРѕ данным hh Р·Р° март 2026 РіРѕРґР°, минимальные значения hh.индекса среди крупных профобластей были такими:"]},{"id":"deficit-list","type":"list","ordered":false,"items":["Розничная торговля: 3,8 (Дефицит)","Медицина, фармацевтика: 4,5 (Почти дефицит / напряженный рынок)","Производство, сервисное обслуживание: 7,2 (Умеренная конкуренция)","Продажи, обслуживание клиентов: 9,4 (Умеренная конкуренция)","Рабочий персонал: 9,8 (Умеренная конкуренция)"]},{"id":"deficit-after","type":"text","paragraphs":["Для чтения этого показателя hh использует такую шкалу: значения РЅРёР¶Рµ 4 указывают РЅР° дефицит кадров, Р° выше 7,9 — РЅР° высокий уровень конкуренции среди соискателей. Поэтому розница РІ марте 2026 — это СѓР¶Рµ РЅРµ просто «сложная сфера», Р° сфера СЏРІРЅРѕРіРѕ кадрового дефицита. Медицина находится РЅР° границе дефицита. [1]"]},{"id":"image-07","type":"image","src":"https://storage.ht-platform.ru/public/articles/3/article-photo-07.png","caption":"Р РёСЃСѓРЅРѕРє 4. hh.индекс РїРѕ профобластям: РѕС‚ дефицита Рє высокой конкуренции. Рсточник: [1]."},{"id":"competition","type":"text","title":"Где конкуренция выше","paragraphs":["РќР° РґСЂСѓРіРѕРј полюсе рынка находятся функции, РіРґРµ резюме заметно больше, чем вакансий. РќР° hh РІ марте 2026 РіРѕРґР° РРў показали hh.индекс 22,9; финансы Рё бухгалтерия — 13,1; маркетинг, реклама Рё PR — 27,3; административный персонал — 17,4. Еще выше индексы Сѓ стратегии, инвестиций Рё консалтинга (46,1), искусства, развлечений Рё медиа (47,4), юристов (19,8). [1]"]},{"id":"akirin-quote","type":"accent","variant":"dark","title":"Алексей РљРёСЂРёРЅ","paragraphs":["После общения СЃ десятком работодателей РёР· разных сфер, большинство компаний сокращают найм или полностью его останавливают. Некоторые – сосредотачиваются РЅР° экспертных позициях, подбирая опытных кандидатов точечно РїРѕ определённым навыкам, пройденным курсам Рё сертификатам.","Рто РЅРµ означает, что РІ этих сферах «работы нет». Рто означает, что работу найти становится РІСЃС‘ сложнее. Растет необходимость точного позиционирования Рё релевантного опыта. [1]"]},{"id":"demand","type":"text","title":"Что РїСЂРѕРёСЃС…РѕРґРёС‚ СЃРѕ СЃРїСЂРѕСЃРѕРј РїРѕ ролям","paragraphs":["Р’ топе РїРѕ доле вакансий РЅР° hh РІ марте 2026 РіРѕРґР° были продавцы-консультанты Рё продавцы-кассиры (8,0% всех активных вакансий), менеджеры РїРѕ продажам Рё работе СЃ клиентами (7,2%), водители (3,6%), курьеры (3,3%), повара, пекари Рё кондитеры (2,9%), врачи (2,8%) Рё бухгалтеры (2,4%). Вес по‑прежнему держится РЅР° массовых Рё операционных ролях. [1]"]},{"id":"image-08","type":"image","src":"https://storage.ht-platform.ru/public/articles/3/article-photo-08.png","caption":"Р РёСЃСѓРЅРѕРє 6. РўРѕРї-15 специализаций РїРѕ доле активных вакансий. Рсточник: [1]."},{"id":"image-09","type":"image","src":"https://storage.ht-platform.ru/public/articles/3/article-photo-09.png","caption":"Р РёСЃСѓРЅРѕРє 7. Конкуренция РїРѕ топ-15 специализациям: hh.индекс. Рсточник: [1]."},{"id":"demand-cont","type":"text","paragraphs":["РџСЂРё этом заметнее всего Р·Р° РіРѕРґ РЅР° hh снизился СЃРїСЂРѕСЃ РІ сфере управления персоналом Рё тренингов: число активных вакансий здесь РІ марте было РЅРёР¶Рµ РЅР° 39% РіРѕРґ Рє РіРѕРґСѓ. Сильное снижение также РІРёРґРЅРѕ РїРѕ РРў (–37%), юристам (–32%), стратегии, инвестициям Рё консалтингу (–31%), финансам Рё бухгалтерии (–31%), маркетингу Рё PR (–30%). [1]","Рто сильный сигнал того, что часть белых воротничков Рё цифровых ролей стала наниматься более выборочно. РќР° практике это означает более длинный цикл РїРѕРёСЃРєР° Рё более строгий отбор, особенно Сѓ начинающих специалистов."]},{"id":"image-10","type":"image","src":"https://storage.ht-platform.ru/public/articles/3/article-photo-10.png"},{"id":"salaries","type":"text","title":"2. Зарплаты Рё СЃРїСЂРѕСЃ:\\nРынок перестал разгоняться одинаково РІРѕ всех сферах","paragraphs":["Данные Работа.СЂСѓ РїРѕ первому кварталу 2026 РіРѕРґР° хорошо дополняют картину hh. РџРѕ РёС… анализу более 200 тысяч вакансий, самые высокие средние зарплатные предложения РІ Р РѕСЃСЃРёРё были РІ транспорте Рё логистике — 96,7 тысячи рублей РІ месяц, затем РІ строительстве Рё недвижимости — 94,4 тысячи, Р° также РІ производстве Рё агропроме — 91,6 тысячи. [2]"]},{"id":"image-11","type":"image","src":"https://storage.ht-platform.ru/public/articles/3/article-photo-11.png","caption":"Р РёСЃСѓРЅРѕРє 8. Средние зарплатные предложения РїРѕ сегментам РІ 1 квартале 2026. Рсточник: [2]."},{"id":"salaries-cont","type":"text","paragraphs":["Важно, что эта Р¶Рµ публикация РїСЂСЏРјРѕ показывает замедление «зарплатной РіРѕРЅРєРёВ». Р’ строительстве среднее предложение оказалось РЅРёР¶Рµ СѓСЂРѕРІРЅСЏ первого квартала 2025 РіРѕРґР° РЅР° 4%, РІ производстве Рё агропроме — РЅР° 2%. Рто полезная поправка Рє популярному тезису «зарплаты везде только растут». Р’ 2026 РіРѕРґСѓ это СѓР¶Рµ РЅРµ так. [2]","РџСЂРё этом внутри рынка остаются точки ускоренного роста. РџРѕ данным того Р¶Рµ исследования, наибольший РїСЂРёСЂРѕСЃС‚ предложений Рє 1 квартал 2025 РіРѕРґР° показали вакансии для студентов (+29%), РРў (+25,1%), торговли (+20,2%), офисных Рё бизнес‑услуг (+13,7%), транспорта Рё логистики (+13,2%). [2] Рти цифры РЅРµ стоит читать как универсальную РЅРѕСЂРјСѓ РїРѕ всей отрасли: сама Работа.СЂСѓ отдельно оговаривает, что РїРѕ РРў сильная динамика РІ РѕСЃРЅРѕРІРЅРѕРј заметна РІ вакансиях СЃ открытой зарплатой Рё чаще связана СЃ начальным сегментом. РќР° практике Р¶Рµ РїРѕРґР±РѕСЂ РІ IT, особенно РґР¶СѓРЅРѕРІ, стал гораздо более точечным Рё жестким. Конкуренция среди соискателей РЅР° РѕРґРЅСѓ позицию РІ РєСЂСѓРїРЅРѕР№ компании РґРѕС…РѕРґРёС‚ РґРѕ 300–400 откликов — это принципиально РёРЅРѕР№ уровень рынка, РіРґРµ массовое повышение окладов уступило место отбору самых подходящих РїРѕРґ конкретные задачи. Для большинства IT-специалистов зарплаты сегодня предлагают “по договоренности”, Р° РЅРµ РїРѕ верхней планке. [2]","Дополнительную проверку дает SuperJob. РС… отраслевые индексы зарплат РїРѕ РњРѕСЃРєРІРµ РЅР° 1 апреля 2026 РіРѕРґР° показывали РіРѕРґРѕРІРѕР№ СЂРѕСЃС‚ предложений РІ строительстве РЅР° 9,0%, РІ кадровой функции — РЅР° 9,1%, РІ банковской сфере — РЅР° 9,6%, РІ РРў — РЅР° 5,0%. Рто РЅРµ всероссийская картина Рё РЅРµ весь рынок, Р° индекс РїРѕ РњРѕСЃРєРІРµ РЅР° фиксированном наборе профессий. РќРѕ как вспомогательный сигнал РѕРЅ подтверждает: зарплаты продолжают расти, только СѓР¶Рµ РЅРµ одинаково быстро Рё РЅРµ РІРѕ всех сегментах. [11]"]},{"id":"image-12","type":"image","src":"https://storage.ht-platform.ru/public/articles/3/article-photo-12.png"},{"id":"career-moves","type":"text","title":"3. Карьерное движение усилилось. Люди готовы менять работу, сферу Рё формат занятости","paragraphs":["Работа.СЂСѓ РІ исследовании СЃ выборкой более 3 200 респондентов зафиксировала, что 54% СЂРѕСЃСЃРёСЏРЅ РІ 2026 РіРѕРґСѓ планируют изменения РІ карьере: 48% хотят сменить текущее место работы, 42% — попробовать РЅРѕРІСѓСЋ сферу, 26% — перейти РІ более РєСЂСѓРїРЅСѓСЋ Рё стабильную компанию, 23% — изменить график РЅР° более РіРёР±РєРёР№. [12]"]},{"id":"image-13","type":"image","src":"https://storage.ht-platform.ru/public/articles/3/article-photo-13.png","caption":"Р РёСЃСѓРЅРѕРє 10. Карьерные планы СЂРѕСЃСЃРёСЏРЅ РІ 2026 РіРѕРґСѓ. Рсточник: [12]."},{"id":"career-moves-cont","type":"text","paragraphs":["Причины тоже показательные. 35% опрошенных РіРѕРІРѕСЂСЏС‚ РѕР± отсутствии перспектив роста, 28% — Рѕ потере интереса Рє текущей сфере, 12% — Рѕ снижении востребованности своей профессии. РўРѕ есть для РјРЅРѕРіРёС… людей рынок 2026 РіРѕРґР° — это РЅРµ только РїРѕРёСЃРє РЅРѕРІРѕР№ вакансии, РЅРѕ Рё попытка заново собрать траекторию: что делать дальше, РіРґРµ РјРѕР¶РЅРѕ расти Рё какие навыки делать опорными. [12]","Показательно Рё то, как люди собираются перестраиваться. 28% планируют учиться РїРѕ профессиональной литературе, еще 28% — через новые навыки Рё онлайн‑лекции, 24% — через стажировку, подработку или волонтерство РІ РЅРѕРІРѕР№ сфере, 21% — через специализированные онлайн‑курсы. Навыки работы СЃ РР Рё автоматизацией хотят развивать 24% респондентов, Р° РјСЏРіРєРёРµ навыки — лидерство, коммуникацию, управление временем — 21%. [12]"]},{"id":"image-14","type":"image","src":"https://storage.ht-platform.ru/public/articles/3/article-photo-14.png","caption":"Р РёСЃСѓРЅРѕРє 11. Как респонденты планируют перестраивать карьеру Рё навыки. Рсточник: [12]."},{"id":"career-moves-end","type":"text","paragraphs":["Рто важный сигнал для кандидатов. Р’ 2026 РіРѕРґСѓ рынок РІСЃРµ чаще требует способности Рє перенастройке: смене роли, сегмента, СѓСЂРѕРІРЅСЏ или даже сферы деятельности."]},{"id":"image-15","type":"image","src":"https://storage.ht-platform.ru/public/articles/3/article-photo-15.png"},{"id":"skills","type":"text","title":"4. Навыки рулят. Навыки становятся важнее названий должностей — РЅРѕ этот переход идет неравномерно","paragraphs":["РћРґРёРЅ РёР· самых устойчивых международных выводов 2026 РіРѕРґР° — СЂРѕСЃС‚ роли навыков. LinkedIn РІ своем отчете Skills on the Rise 2026 (навыки, которые быстрее всего растут РІ СЃРїСЂРѕСЃРµ) пишет, что работодатели РІСЃРµ чаще смотрят РЅРµ РЅР° диплом, должность РІ прошлом Рё «линейный» путь, Р° РЅР° то, что человек реально умеет делать. РС… СЃРїРёСЃРѕРє строится РЅР° РґРІСѓС… метриках: какие навыки пользователи чаще добавляют РІ профили Рё какие навыки чаще встречаются Сѓ тех, РєРѕРіРѕ реально нанимают. [7]","Р’ этом Р¶Рµ отчете LinkedIn отдельно подчеркивает РґРІРµ РіСЂСѓРїРїС‹ навыков. Первая — навыки работы СЃ РР: РѕС‚ понимания больших языковых моделей РґРѕ более прикладных навыков внедрения Рё использования таких инструментов. Вторая — человеческие навыки: управление командой, наставничество, координация между функциями, публичное выступление, коммуникация СЃРѕ стейкхолдерами. [7]","Более широкий глобальный контекст дает LinkedIn Economic Graph: РІ РЎРЁРђ число вакансий, РіРґРµ требуется хотя Р±С‹ базовая грамотность РІ работе СЃ РР, выросло РЅР° 70% РіРѕРґ Рє РіРѕРґСѓ. Одновременно 75% компаний РІ РёС… глобальном исследовании РіРѕРІРѕСЂСЏС‚, что человеческие навыки стали еще важнее РІ СЌРїРѕС…Сѓ РР. [8]","OECD добавляет Рє этому важную поправку: разные профессии РЅРµ так изолированы РґСЂСѓРі РѕС‚ РґСЂСѓРіР°, как кажется. Р’ Skills Outlook 2025 (РѕР±Р·РѕСЂ навыков Рё возможностей рынка труда) организация отмечает, что между РјРЅРѕРіРёРјРё ролями есть значительное перекрытие РїРѕ навыкам. [9] Для кандидата это практический вывод: переход между смежными ролями часто реалистичнее, чем кажется, если правильно описать переносимые навыки Рё рабочий контекст.","World Economic Forum (Всемирный экономический форум) РІ Future of Jobs Report 2025 тоже фиксирует похожее направление: технологические изменения, демография, геоэкономическая неопределенность Рё «зеленый» переход одновременно меняют рынок работы, Р° работодатели ожидают быстрый СЂРѕСЃС‚ как технических, так Рё когнитивных Рё социальных навыков. Отчет опирается РЅР° позицию более 1 000 крупных работодателей, представляющих свыше 14 миллионов работников РІ 55 экономиках. [10]"]},{"id":"image-16","type":"image","src":"https://storage.ht-platform.ru/public/articles/3/article-photo-16.png","caption":"Р РёСЃСѓРЅРѕРє 12. Что меняется РїСЂРё переходе Рє найму РїРѕ навыкам. Рсточники: [7], [9], [10]."},{"id":"image-17","type":"image","src":"https://storage.ht-platform.ru/public/articles/3/article-photo-17.png"},{"id":"hiring-process","type":"text","title":"5. Процесс найма. Найм меняется РѕС‚ потока откликов Рє качеству сигнала","paragraphs":["Кандидат РІРёРґРёС‚ рынок через вакансии Рё отклики. Работодатель — через РІРѕСЂРѕРЅРєСѓ, скорость Рё качество отбора. Р’ 2026 РіРѕРґСѓ эти РґРІРµ точки зрения РІСЃРµ сильнее соединяются технологиями отбора. Рто показывает повторяющийся сигнал РёР· разных источников: работодатели пытаются быстрее отсечь нерелевантный поток Рё точнее находить подходящих людей. [3][4][5][6]","Indeed РІ 2026 РіРѕРґСѓ СѓР¶Рµ открыто продвигает РР‑помощника для найма: Talent Scout помогает ранжировать отклики, искать кандидатов, назначать интервью Рё давать рекомендации РїРѕ вакансиям Рё оплате. Там Р¶Рµ появилась отдельная функция Smart Screening — РР‑инструмент для автоматизации раннего отбора кандидатов. [4]","Отдельный рыночный сигнал РїРѕ LinkedIn стоит трактовать осторожно. Продуктовые обновления платформы сами РїРѕ себе РЅРµ доказывают состояние всего рынка, поэтому РІ этой версии РѕРЅРё РЅРµ используются как самостоятельная РѕСЃРЅРѕРІР° вывода. Для оценки роли РР Рё навыков важнее данные LinkedIn Economic Graph, отчет Skills on the Rise Рё РґСЂСѓРіРёРµ sources. [7][8]","SHRM РІ отчете State of AI in HR 2026 (отчет Рѕ применении РР РІ HR) показывает, что РР РІ HR СѓР¶Рµ используется РІ реальной практике, РЅРѕ РїРѕРєР° РЅРµ повсеместно: 46% организаций ожидают использование РР РІ HR РІ 2026 РіРѕРґСѓ, Р° чаще всего РѕРЅ применяется РІ РїРѕРґР±РѕСЂРµ (27%), HR‑технологиях (21%) Рё обучении Рё развитии (17%). [5] Что это значит для кандидата: РїРѕРґР±РѕСЂ становится более технологичным, чем РјРЅРѕРіРёРµ Рє нему готовы."]},{"id":"image-18","type":"image","src":"https://storage.ht-platform.ru/public/articles/3/article-photo-18.png","caption":"Р РёСЃСѓРЅРѕРє 13. Где РРиспользуется РІ HR-практике. Рсточник: [5]."},{"id":"hiring-process-cont","type":"text","paragraphs":["Дополнительный отраслевой сигнал дает Jobvite Рё РёС… свежие материалы 2026 РіРѕРґР°. РћРЅРё пишут Рѕ росте числа заявок Рё падении доли действительно качественных кандидатов, Р° также Рѕ том, что СЂРѕСЃС‚ объема откликов РЅРµ РїСЂРёРІРѕРґРёС‚ Рє росту качества. [6] Даже если РЅРµ принимать РёС… цифры как универсальную РЅРѕСЂРјСѓ для всего рынка, направление понятно: работодатели РІСЃРµ чаще борются СЃ избытком слабых или плохо различимых откликов.","Параллельно усиливается интерес Рє повторному использованию СѓР¶Рµ собранных данных Рѕ кандидатах. Metaview РІ апреле 2026 РіРѕРґР° РїСЂСЏРјРѕ пишет, что базы кандидатов слишком часто становятся «кладбищем» прошлых откликов Рё заметок, хотя должны ускорять новый найм Рё снижать объем лишнего СЃРѕСЂСЃРёРЅРіР°. [13] Для кандидата это означает простую вещь: РѕРґРёРЅ сильный, полно оформленный профиль Рё понятная история навыков начинают работать дольше РѕРґРЅРѕРіРѕ отклика.","Практический смысл здесь такой: лучше работает профиль, РІ котором СЏСЃРЅС‹ роль, специализация, стек или инструменты, уровень задач Рё подтверждаемый результат."]},{"id":"image-19","type":"image","src":"https://storage.ht-platform.ru/public/articles/3/article-photo-19.png","caption":"Р РёСЃСѓРЅРѕРє 14. Как меняется логика отбора кандидатов. Рсточники: [4], [5], [6], [13]."},{"id":"image-20","type":"image","src":"https://storage.ht-platform.ru/public/articles/3/article-photo-20.png"},{"id":"confirmed-signals-good","type":"list","title":"Хорошо подтверждено","ordered":false,"items":["Р РѕСЃСЃРёР№СЃРєРёР№ рынок РІ 2026 РіРѕРґСѓ стал заметно более конкурентным РїРѕ части офисных, цифровых Рё части управленческих ролей, РЅРѕ массовый Рё прикладной сегмент сохраняет кадровый дефицит. Рто РїСЂСЏРјРѕ РІРёРґРЅРѕ РІ hh.индексе РїРѕ профобластям. [1]","РЎРїСЂРѕСЃ по‑прежнему массово сосредоточен РІ ролях, связанных СЃ продажами, рабочими профессиями, логистикой, производством, строительством, медициной Рё СЂСЏРґРѕРј прикладных функций. [1][2][13]","Найм действительно становится более технологичным: платформы Рё HR‑системы развивают РР‑отбор, сортировку откликов Рё повторное использование данных. [4][5][13]","Р РѕСЃС‚ значения навыков — РЅРµ только технических, РЅРѕ Рё человеческих — подтверждается одновременно LinkedIn, OECD Рё WEF. [7][8][9][10]"]},{"id":"image-21","type":"image","src":"https://storage.ht-platform.ru/public/articles/3/article-photo-21.png","caption":"Р РёСЃСѓРЅРѕРє 15. Цикл карьерного развития: практическая схема РЅР° РѕСЃРЅРѕРІРµ разделов Рѕ навыках, обучении Рё найме. Рсточники: [7]-[12]."},{"id":"confirmed-signals-careful","type":"list","title":"Лучше считать осторожным сигналом","ordered":false,"items":["Любые точные выводы Рѕ «средних зарплатах РїРѕ рынку» без поправки РЅР° регион, формат вакансии, опыт Рё открытость зарплаты РІ публикации. РЈ разных платформ сильно различается методика. [2][11]","Перенос глобальных цифр LinkedIn или Indeed РЅР° СЂРѕСЃСЃРёР№СЃРєРёР№ рынок без адаптации. Рти источники полезны как указатель направления, РЅРѕ РЅРµ как РїСЂСЏРјРѕР№ эквивалент СЂРѕСЃСЃРёР№СЃРєРѕР№ ситуации. [3][4][7][8]","Слишком сильные формулировки Рѕ том, что РР СѓР¶Рµ радикально меняет РІСЃРµ профессии. РџРѕ надежным источникам РІРёРґРЅРѕ скорее РґСЂСѓРіРѕРµ: РР СѓР¶Рµ меняет навыки, инструменты Рё процессы отбора быстрее, чем полностью перестраивает РІСЃРµ профессии. [5][7][8][10]"]},{"id":"image-22","type":"image","src":"https://storage.ht-platform.ru/public/articles/3/article-photo-22.png","caption":"Р РёСЃСѓРЅРѕРє 16. Сводная таблица: тренд Рё практический смысл для кандидата. Рсточники: [1]-[13]."},{"id":"image-23","type":"image","src":"https://storage.ht-platform.ru/public/articles/3/article-photo-23.png"},{"id":"conclusions-text","type":"text","title":"Выводы","paragraphs":["2026 РіРѕРґ РЅРµ выглядит РЅРё «катастрофой для всех соискателей», РЅРё «золотым временем возможностей для всех». Рто РіРѕРґ более резкого расслоения рынка. Р’ массовых Рё прикладных ролях СЃРїСЂРѕСЃ остается высоким, РЅРѕ условия труда Рё требования РјРѕРіСѓС‚ быть жесткими. Р’ офисных, цифровых Рё престижных ролях конкуренция выше, Р° отбор стал заметно строже. [1][2]","Если формулировать совсем коротко, рынок 2026 РіРѕРґР° РїСЂРѕСЃРёС‚ РѕС‚ кандидата РЅРµ только опыт, РЅРѕ Рё ясность: что человек умеет, РІ каком контексте РѕРЅ это делал, как быстро РѕРЅ адаптируется Рё чему СѓР¶Рµ научился РІ РЅРѕРІРѕР№ среде."]},{"id":"conclusions-list","type":"list","title":"Что РјРѕР¶РЅРѕ порекомендовать кандидатам:","ordered":true,"items":["Стоит яснее Рё подробнее показывать опыт Рё уровень навыков, РІ том числе РјСЏРіРєРёС… навыков (soft skills).","Обучение РІ 2026 РіРѕРґСѓ становится частью стратегии РїРѕРёСЃРєР° работы Рё карьерной устойчивости. Умение применять РР РІ работе может быть дополнительным плюсом, РЅРѕ его важно показывать через конкретные задачи. [7][8][9][10][12]","Рспользуйте современные инструменты, ищите возможности там, РіРґРµ РјРЅРѕРіРёРµ опускают голову. РњС‹ СЂСЏРґРѕРј Рё обязательно поможем."]},{"id":"sources","type":"references","title":"Рсточники","items":[{"title":"hh.ru / hh Статистика. Краткий РѕР±Р·РѕСЂ рынка труда. Март 2026.","link":"https://stats.hh.ru/api/v1/monthly-report/f-983c2f9a-0568-4976-8b30-83bce102140b"},{"title":"Работа.СЂСѓ Рё СберПодбор. Самые высокие зарплаты РІ 1 квартале 2026 предлагали РІ транспорте, строительстве Рё производстве."},{"title":"Reuters. LinkedIn AI hiring agents and recruiting automation, 2026.","link":"https://www.reuters.com/business/linkedins-ai-hiring-agents-track-450-million-yearly-revenue-2026-04-29/"},{"title":"Indeed. What’s new: product and feature updates.","link":"https://www.indeed.com/employers/whats-new"},{"title":"SHRM. The State of AI in HR 2026.","link":"https://www.shrm.org/topics-tools/research/state-of-ai-hr-2026/full-report"},{"title":"Jobvite. Early Screening in the AI Era: 5 Shifts Hiring Teams Can’t Ignore."},{"title":"LinkedIn. Skills on the Rise: The Fastest-Growing Skills in 2026."},{"title":"LinkedIn. A New World of Work: Global Labor Market Rotates, Not Retreats."},{"title":"OECD. Skills Outlook 2025: From skills to labour market opportunities.","link":"https://www.oecd.org/en/publications/oecd-skills-outlook-2025_b8c0b01d-en.html"},{"title":"World Economic Forum. The Future of Jobs Report 2025.","link":"https://www.weforum.org/publications/the-future-of-jobs-report-2025/"},{"title":"SuperJob. Отраслевой РѕР±Р·РѕСЂ зарплат 2026."},{"title":"Работа.СЂСѓ Рё «Школа 21В». 54% СЂРѕСЃСЃРёСЏРЅ намерены изменить карьерную траекторию РІ РЅРѕРІРѕРј РіРѕРґСѓ."},{"title":"Metaview. Candidate database: how to turn your recruiting data into a hiring advantage.","link":"https://www.metaview.ai/resources/blog/candidate-database"},{"title":"Работа.СЂСѓ Рё СберПодбор. Работодатели назвали самые востребованные профессии 2026 РіРѕРґР°."},{"title":"OECD. Employment Outlook 2025 press release.","link":"https://www.oecd.org/en/publications/oecd-employment-outlook-2025_194a947b-en.html"}]}]'),j4={id:x4,title:S4,description:E4,createdAt:k4,readTime:b4,coverUrl:I4,category:T4,tags:P4,seo:R4,author:A4,toc:N4,blocks:L4},M4="spief-2026-labor-market-career",D4="РџРњРР¤ 2026 Рё рынок труда РІ Р Р¤: главные сигналы Рё практические выводы для карьеры",$4="РџРњРР¤ 2026 дал важные сигналы Рѕ рынке труда: РРменяет навыки, вакансий стало меньше, конкуренция выросла. Разбираем данные Рё даём практические рекомендации для соискателей, тех, кто меняет профессию, Рё работодателей.",F4="10.06.2026",O4="12 РјРёРЅ",U4="https://storage.ht-platform.ru/public/articles/4/article-photo-01.png",z4="research",B4=["#РџРњРР¤-2026","#рынок-труда-СЂС„","#РїРѕРёСЃРє-работы-2026","#карьера","#дефицит-кадров"],V4={title:"РџРњРР¤ 2026 Рё рынок труда РІ Р Р¤: выводы для тех, кто ищет работу или планирует карьеру | HT Platform",description:"РџРњРР¤ 2026 дал важные сигналы Рѕ рынке труда: РРменяет навыки, вакансий стало меньше, конкуренция выросла. Разбираем данные Рё даём практические рекомендации для соискателей, тех, кто меняет профессию, Рё работодателей.",keywords:["РїРјСЌС„ 2026 рынок труда","РїРѕРёСЃРє работы 2026","РёРё заменит профессии","смена профессии 2026","первая работа 2026","зарплаты 2026","дефицит кадров 2026"]},H4={id:"akirin",name:"Алексей РљРёСЂРёРЅ",role:"Основатель HT Platform",avatar:"https://storage.ht-platform.ru/public/staff/kir-photo.jpg"},W4=[{id:"intro",title:"Вступление"},{id:"section-1",title:"1. Что РїСЂРѕРёСЃС…РѕРґРёС‚ РЅР° рынке труда: официальная картина Рё то, что Р·Р° ней стоит",items:[{id:"section-1-1",title:"1.1 Рекордная занятость — это правда. РќРѕ РЅРµ РІСЃСЏ"},{id:"section-1-2",title:"1.2 hh.индекс: конкуренция РІ офисных нишах РЅР° многолетних максимумах"},{id:"section-1-3",title:"1.3 Скрытая занятость"}]},{id:"section-2",title:"2. РР Рё профессии: что РЅР° самом деле меняется",items:[{id:"section-2-1",title:"2.1 Меняются задачи, Р° РЅРµ профессии"},{id:"section-2-2",title:"2.2 40% профессий — РІ Р·РѕРЅРµ РЅРёР·РєРѕРіРѕ СЂРёСЃРєР° РѕС‚ РР"},{id:"section-2-3",title:"2.3 12–18 месяцев — реальный СЃСЂРѕРє освоения РЅРѕРІРѕРіРѕ навыка"}]},{id:"section-3",title:"3. Что это значит для соискателей: карта возможностей Рё СЂРёСЃРєРѕРІ",items:[{id:"section-3-1",title:"3.1 РќРµ РѕРґРёРЅ рынок — Р° РґРІР° разных рынка"},{id:"section-3-2",title:"3.2 Почему РїРѕРёСЃРє работы занимает дольше — Рё что СЃ этим делать"},{id:"section-3-3",title:"3.3 Смотрите шире столицы Рё привычных форматов"}]},{id:"section-4",title:"4. Молодые специалисты Рё выпускники: новые правила РёРіСЂС‹",items:[{id:"section-4-1",title:"4.1 Хорошая новость: трудоустройство молодёжи выросло"},{id:"section-4-2",title:"4.2 Барьеры первого РІС…РѕРґР°: что реально мешает"},{id:"section-4-3",title:"4.3 Что реально помогает РїСЂРё первом РІС…РѕРґРµ"}]},{id:"section-5",title:"5. Для работодателей Рё HR: что РіРѕРІРѕСЂРёС‚ РџРњРР¤ Рё что СЃ этим делать",items:[{id:"section-5-1",title:"5.1 Производительность отстаёт РѕС‚ зарплат — Рё это проблема"},{id:"section-5-2",title:"5.2 Автоматизация: три барьера, Рѕ которых говорили РЅР° РџРњРР¤"},{id:"section-5-3",title:"5.3 Рнклюзивный найм — стратегический ресурс"},{id:"section-5-4",title:"5.4 Практические выводы для HR"}]},{id:"section-6",title:"6. Пять практических выводов: что делать РїСЂСЏРјРѕ сейчас",items:[{id:"section-6-1",title:"6.1 Если РІС‹ ищете работу РїСЂСЏРјРѕ сейчас"},{id:"section-6-2",title:"6.2 Если думаете Рѕ смене профессии"},{id:"section-6-3",title:"6.3 Если РІС‹ студент или молодой специалист"},{id:"section-6-4",title:"6.4 Если планируете обучение Рё развитие"},{id:"section-6-5",title:"6.5 Для работодателей Рё HR"}]},{id:"section-7",title:"7. Как разобраться РІ СЃРІРѕРёС… сильных сторонах — Рё зачем это делать сейчас"},{id:"conclusion",title:"Заключение: что остаётся после РџРњРР¤ 2026"},{id:"sources",title:"Рсточники Рё методология"}],q4=JSON.parse('[{"id":"intro","type":"text","paragraphs":["Каждый РіРѕРґ РџРњРР¤ (Петербургский международный экономический форум) собирает министров, топ-менеджеров, экспертов Рё экономистов. Официальные заявления звучат уверенно: рекордная занятость, СЂРѕСЃС‚ зарплат, новые возможности благодаря РР. РќРѕ Р·Р° этими тезисами стоят цифры, которые требуют более внимательного взгляда.","Что РјС‹ наблюдаем РІ 2026 РіРѕРґСѓ: вакансий стало меньше, конкуренция среди соискателей выросла, малый бизнес сжимается, Р° рынок труда остаётся глубоко неоднородным. РћРґРЅРё профессиональные области испытывают острый дефицит кадров. Другие — переизбыток соискателей.","Рта статья — независимый аналитический взгляд HT Platform: РЅР° что РёР· услышанного РЅР° РџРњРР¤ 2026 стоит обратить внимание человеку, который ищет работу, думает Рѕ смене профессии или хочет осознанно строить карьеру. РњС‹ сопоставили официальные тезисы СЃ данными Росстата, hh.ru, Минтруда Рё независимых аналитиков."]},{"id":"intro-accent","type":"accent","variant":"light","paragraphs":[["Р’ предыдущем исследовании HT Platform ",{"type":"link","text":"«Рынок труда Рё карьера РІ 1 квартале 2026 года»","href":"/blog/labor-market-career-2026-q1"}," РјС‹ СѓР¶Рµ фиксировали тревожные сигналы: СЂРѕСЃС‚ конкуренции РІ офисных нишах, замедление найма, сжатие числа активных вакансий. РџРњРР¤ 2026 эти тенденции подтвердил — Рё добавил новые."]]},{"id":"section-1","type":"text","title":"1. Что РїСЂРѕРёСЃС…РѕРґРёС‚ РЅР° рынке труда: официальная картина Рё то, что Р·Р° ней стоит","paragraphs":[]},{"id":"section-1-1","type":"text","title":"1.1 Рекордная занятость — это правда. РќРѕ РЅРµ РІСЃСЏ","paragraphs":["РќР° пленарном заседании РџРњРР¤ 5 РёСЋРЅСЏ Владимир Путин констатировал: безработица РІ Р РѕСЃСЃРёРё достигла исторического РјРёРЅРёРјСѓРјР° — 2,2% РїРѕ методологии РњРћРў (Международная организация труда). Вице-премьер Татьяна Голикова уточнила: РЅР° каждого зарегистрированного безработного сейчас приходится около 4,4 вакансии. Рто действительно рекордные показатели."]},{"id":"image-2-2","type":"image","src":"https://storage.ht-platform.ru/public/articles/4/article-photo-02.png"},{"id":"section-1-1-text-after","type":"text","paragraphs":["РќРѕ Р·Р° этой цифрой скрывается важная деталь: рынок труда РІ Р РѕСЃСЃРёРё глубоко неоднороден. Дефицит кадров остро ощущается РІ производстве, медицине, торговле, строительстве Рё логистике. Р’ офисных профессиях — маркетинге, РРў, консалтинге, административном управлении — ситуация противоположная: конкуренция Р·Р° вакансии выросла кратно."]},{"id":"section-1-2","type":"text","title":"1.2 hh.индекс: конкуренция РІ офисных нишах РЅР° многолетних максимумах","paragraphs":["РџРѕ данным hh.ru, РІ марте 2026 РіРѕРґР° hh.индекс достиг 11,4 — это максимум Р·Р° несколько последних лет. Что означает эта цифра: РЅР° РѕРґРЅСѓ активную вакансию приходится более 11 активных резюме РІ среднем РїРѕ рынку. Год назад этот показатель был 5,6."]},{"id":"image-hh-table","type":"image","src":"https://storage.ht-platform.ru/public/articles/4/article-photo-03.png"},{"id":"section-1-3","type":"text","title":"1.3 Скрытая занятость","paragraphs":["Официальная статистика фиксирует рекордную занятость. РќРѕ аналитический центр ЦМАКП (Центр макроэкономического анализа Рё краткосрочного прогнозирования) Рё независимые эксперты указывают РЅР° РґСЂСѓРіРѕР№ феномен: скрытую безработицу. РџРѕ данным «Московского комсомольца» (февраль 2026), как РјРёРЅРёРјСѓРј 8 миллионов человек работают неполный рабочий день или находятся РІ вынужденном простое РїРѕ инициативе работодателя.","Рначе РіРѕРІРѕСЂСЏ: формально эти люди заняты, РЅРѕ реально недорабатывают. Рто означает сниженный РґРѕС…РѕРґ, нестабильность занятости Рё СЂРёСЃРє сокращения РїСЂРё первом ухудшении ситуации РІ компании."]},{"id":"image-hh-chart","type":"image","src":"https://storage.ht-platform.ru/public/articles/4/article-photo-04.png"},{"id":"section-1-3-accent","type":"accent","variant":"dark","paragraphs":["Мнение HT Platform: рекордная занятость — безусловно позитивный сигнал для СЌРєРѕРЅРѕРјРёРєРё. РќРѕ для конкретного человека важнее РЅРµ общий уровень занятости, Р° ситуация РІ его профессиональной области. Р’ офисных нишах рынок труда РІ 2026 РіРѕРґСѓ — рынок работодателя, Р° РЅРµ соискателя."]},{"id":"section-2","type":"text","title":"2. РР Рё профессии: что РЅР° самом деле меняется","paragraphs":[]},{"id":"section-2-1","type":"text","title":"2.1 Меняются задачи, Р° РЅРµ профессии","paragraphs":["РћРґРЅРѕР№ РёР· ключевых сессий РџРњРР¤ 2026 стала «Рынок труда 2.0: диктатура РР, трансформация навыков Рё профессий». Её участники сформулировали важный тезис, который противоречит популярным алармистским нарративам."]},{"id":"image-quote-golikova","type":"textWithImage","imageSrc":"https://storage.ht-platform.ru/public/articles/4/article-photo-05.png","text":["Вице-премьер Татьяна Голикова обозначила позицию государства: «Меняется РЅРµ профессия целиком, Р° конкретные задачи внутри неё. Наша сверхзадача — научить работников использовать РРкак инструмент повышения эффективности»."],"imagePosition":"right"},{"id":"section-2-1-repik","type":"text","paragraphs":["РЎС…РѕР¶СѓСЋ мысль, РЅРѕ СЃ акцентом РЅР° бизнес-практику, сформулировал Алексей Репик, «Деловая Р РѕСЃСЃРёСЏВ»: В«Рсчезнут РЅРµ профессии — исчезнут рутинные операции. Вырос СЃРїСЂРѕСЃ РЅР° контролёров, аналитиков, тех, кто несёт ответственность»."]},{"id":"image-quote-kotyakov","type":"textWithImage","imageSrc":"https://storage.ht-platform.ru/public/articles/4/article-photo-06.png","text":["Министр труда Антон Котяков: лишь 7,5% трудовых функций сегодня РјРѕРіСѓС‚ быть полностью выполнены РР. РџСЂРё масштабном внедрении генеративного РРпроизводительность труда РІ Р РѕСЃСЃРёРё может вырасти РЅР° 21–33% Рє 2032 РіРѕРґСѓ."],"imagePosition":"left"},{"id":"section-2-1-text","type":"text","paragraphs":["Министр труда Антон Котяков конкретизировал: около 7,5% трудовых функций сегодня РјРѕРіСѓС‚ быть полностью выполнены РР. Рто немало — РЅРѕ Рё РЅРµ апокалипсис. Важнее РґСЂСѓРіРѕРµ: РїРѕ оценке Голиковой, внедрение генеративного РР Рё роботизированных систем СЃРїРѕСЃРѕР±РЅРѕ повысить производительность труда РІ Р РѕСЃСЃРёРё РЅР° 21–33% Рє 2032 РіРѕРґСѓ."]},{"id":"section-2-1-warning","type":"accent","variant":"dark","paragraphs":["РћРіРѕРІРѕСЂРєР°: РїСЂРѕРіРЅРѕР· производительности +21–33% Рє 2032 РіРѕРґСѓ — это сценарная оценка РїСЂРё условии масштабного внедрения РР. РћРЅР° РЅРµ является гарантированным результатом. Реальный эффект будет зависеть РѕС‚ темпов внедрения, готовности компаний Рё адаптации работников."]},{"id":"image-quote-sergienkov","type":"textWithImage","imageSrc":"https://storage.ht-platform.ru/public/articles/4/article-photo-07.png","text":["CEO HeadHunter Дмитрий Сергиенков: только 2–3% соискателей указывают РІ резюме навыки работы СЃ РР— РїСЂРё устойчиво растущем СЃРїСЂРѕСЃРµ РЅР° эти компетенции. Рто рыночная возможность РїСЂСЏРјРѕ сейчас."],"imagePosition":"right"},{"id":"section-2-2","type":"text","title":"2.2 40% профессий — РІ Р·РѕРЅРµ РЅРёР·РєРѕРіРѕ СЂРёСЃРєР° РѕС‚ РР","paragraphs":["Примечательный факт РѕС‚ CEO HeadHunter Дмитрия Сергиенкова: только 2–3% соискателей указывают РІ своём резюме навыки работы СЃ РР. РџСЂРё этом СЃРїСЂРѕСЃ РЅР° людей СЃ такими компетенциями растёт.","Рто означает: рыночная возможность РїСЂСЏРјРѕ сейчас. Добавить конкретные РР-навыки РІ своей профессиональной области — значит выделиться РЅР° фоне 97% конкурентов."]},{"id":"image-2-3-percent","type":"textWithImage","imageSrc":"https://storage.ht-platform.ru/public/articles/4/article-photo-08.png","text":["РџРѕ оценке Сбера Рё МГУ: 40% профессий находятся РІ Р·РѕРЅРµ РЅРёР·РєРѕРіРѕ СЂРёСЃРєР° РѕС‚ РР-автоматизации. Рто преимущественно творческие, коммуникативные Рё экспертные роли СЃ высокой долей человеческого взаимодействия."],"imagePosition":"left"},{"id":"section-2-3","type":"text","title":"2.3 12–18 месяцев — реальный СЃСЂРѕРє освоения РЅРѕРІРѕРіРѕ навыка","paragraphs":["Совместное исследование Сбера Рё Минтруда, представленное РЅР° РџРњРР¤, фиксирует: полноценное освоение РЅРѕРІРѕРіРѕ профессионального навыка занимает РѕС‚ 12 РґРѕ 18 месяцев. Рто важный ориентир для тех, кто думает Рѕ смене специализации или переобучении."]},{"id":"section-2-3-warning","type":"accent","variant":"dark","paragraphs":["РћРіРѕРІРѕСЂРєР°: оценка В«12–18 месяцев» озвучена РЅР° РџРњРР¤ совместно Сбером Рё Минтрудом. РњС‹ РЅРµ нашли РїСЂСЏРјРѕРіРѕ внешнего независимого подтверждения этой цифры. Рекомендуем использовать её СЃ атрибуцией: «по данным совместного исследования Сбера Рё Минтруда»."]},{"id":"section-3","type":"text","title":"3. Что это значит для соискателей: карта возможностей Рё СЂРёСЃРєРѕРІ","paragraphs":[]},{"id":"section-3-1","type":"text","title":"3.1 РќРµ РѕРґРёРЅ рынок — Р° РґРІР° разных рынка","paragraphs":["Ключевое, что РЅСѓР¶РЅРѕ понять Рѕ рынке труда 2026 РіРѕРґР°: РѕРЅ неоднороден. Р’ зависимости РѕС‚ того, РІ какой профессиональной области РІС‹ работаете, ваши шансы Рё стратегия кардинально различаются."]},{"id":"image-strategy-table","type":"image","src":"https://storage.ht-platform.ru/public/articles/4/article-photo-09.png"},{"id":"section-3-2","type":"text","title":"3.2 Почему РїРѕРёСЃРє работы занимает дольше — Рё что СЃ этим делать","paragraphs":["Р’ среднем РїРѕ офисным профессиям РІ 2026 РіРѕРґСѓ РЅР° РѕРґРЅСѓ вакансию РїСЂРёС…РѕРґРёС‚ около 60 резюме. Рто означает, что первичный отбор часто РїСЂРѕРёСЃС…РѕРґРёС‚ СЃ помощью алгоритмической фильтрации — РґРѕ того, как резюме попадает Рє Р¶РёРІРѕРјСѓ рекрутеру. Что РёР· этого следует:"]},{"id":"section-3-2-list","type":"list","ordered":false,"items":["Резюме должно содержать чёткие ключевые слова РёР· описания вакансии.","Заголовок Рё первые строки профиля критически важны — именно РёС… сканирует алгоритм.","Отклик «на РІСЃРµ вакансии РїРѕРґСЂСЏРґВ» работает С…СѓР¶Рµ, чем точечный отклик СЃ адаптированным профилем.","Цикл РїРѕРёСЃРєР° удлинился: готовьтесь Рє 2–4 месяцам активного РїРѕРёСЃРєР° РІ конкурентных нишах, Р° РЅРµ Рє 2–4 неделям, как было раньше."]},{"id":"section-3-2-accent","type":"accent","variant":"light","paragraphs":["Рнтерпретация HT Platform: РјС‹ работаем над тем, чтобы изменить логику отбора — РѕС‚ алгоритмической фильтрации РїРѕ формальным критериям Рє оценке реальной совместимости кандидата СЃ ролью. Р’С‹ СѓР¶Рµ можете воспользоваться первой версией СѓРјРЅРѕРіРѕ алгоритма совместимости: это поможет кандидатам быть замеченными, Р° работодателям найти нужных сотрудников."]},{"id":"section-3-3","type":"text","title":"3.3 Смотрите шире столицы Рё привычных форматов","paragraphs":["Голикова РЅР° РџРњРР¤ отметила, что 36% молодых специалистов уезжают РёР· регионов РІ РњРѕСЃРєРІСѓ Рё Санкт-Петербург. Рто создаёт значительный дефицит РЅР° региональных рынках. Для тех, кто готов работать РІ регионе или удалённо, это возможность:"]},{"id":"section-3-3-list","type":"list","ordered":false,"items":["меньше конкуренции Р·Р° вакансии;","работодатели РІ дефицитных регионах готовы рассматривать менее опытных кандидатов;","гибридная Рё дистанционная занятость закрепилась как РЅРѕСЂРјР° — РјРЅРѕРіРёРµ региональные вакансии доступны удалённо."]},{"id":"section-4","type":"text","title":"4. Молодые специалисты Рё выпускники: новые правила РёРіСЂС‹","paragraphs":["Молодым специалистам РІ 2026 РіРѕРґСѓ приходится вступать РЅР° рынок труда РІ условиях одновременно РґРІСѓС… противоречивых трендов: рекордно РЅРёР·РєРѕР№ безработицы РІ целом РїРѕ СЌРєРѕРЅРѕРјРёРєРµ — Рё высокой конкуренции РІ офисных профессиях, РєСѓРґР° стремится большинство выпускников РІСѓР·РѕРІ."]},{"id":"section-4-1","type":"text","title":"4.1 Хорошая новость: трудоустройство молодёжи выросло","paragraphs":["РџРѕ данным, озвученным Голиковой РЅР° РџРњРР¤, трудоустройство молодёжи РІ возрасте 14–24 лет Р·Р° последние 10 лет выросло РІ 2,2 раза. Государство активно расширяет инструменты содействия занятости молодых.","РќР° РџРњРР¤ Путин поручил ускорить принятие законопроекта Рѕ статусе стажёра, внесённого РІ Государственную Думу 4 РёСЋРЅСЏ 2026 РіРѕРґР°. Если РѕРЅ будет РїСЂРёРЅСЏС‚ Рё подписан, то СѓР¶Рµ СЃ марта 2027 РіРѕРґР° студенты Рё выпускники (РІ течение первого РіРѕРґР° после окончания обучения) СЃРјРѕРіСѓС‚ проходить стажировку СЃ оформлением временного трудового РґРѕРіРѕРІРѕСЂР° СЃСЂРѕРєРѕРј РґРѕ 6 месяцев, зарплатой РЅРµ РЅРёР¶Рµ РњР РћРў (минимальный размер оплаты труда) Рё сохранением социальных гарантий. РџРѕРєР° закон РЅРµ РїСЂРёРЅСЏС‚ — следите Р·Р° изменениями РЅР° сайте Государственной Думы (duma.gov.ru)."]},{"id":"image-mrot-number","type":"textWithImage","imageSrc":"https://storage.ht-platform.ru/public/articles/4/article-photo-10.png","text":["Если законопроект Рѕ статусе стажёра будет РїСЂРёРЅСЏС‚, СЃ марта 2027 РіРѕРґР° студенты Рё молодые выпускники СЃРјРѕРіСѓС‚ проходить стажировку СЃ оформлением временного трудового РґРѕРіРѕРІРѕСЂР° СЃСЂРѕРєРѕРј РґРѕ 6 месяцев Рё зарплатой РЅРµ РЅРёР¶Рµ РњР РћРў."],"imagePosition":"right"},{"id":"section-4-2","type":"text","title":"4.2 Барьеры первого РІС…РѕРґР°: что реально мешает","paragraphs":["Несмотря РЅР° СЂРѕСЃС‚ числа трудоустроенных молодых людей, барьеры первого РІС…РѕРґР° РЅР° рынок труда РЅРёРєСѓРґР° РЅРµ делись:"]},{"id":"section-4-2-list","type":"list","ordered":false,"items":["Требование опыта РѕС‚ 1–3 лет — стандартное условие для большинства вакансий, РІ том числе начального СѓСЂРѕРІРЅСЏ.","36% молодёжи уезжают РёР· регионов, обостряя конкуренцию РІ столицах.","РР-вакансии для молодых растут быстрее: Сергиенков (HeadHunter) отметил СЂРѕСЃС‚ РЅР° 25% Р·Р° РіРѕРґ, РЅРѕ большинство студентов РЅРµ замечают этого направления."]},{"id":"section-4-3","type":"text","title":"4.3 Что реально помогает РїСЂРё первом РІС…РѕРґРµ","paragraphs":[]},{"id":"section-4-3-list","type":"list","ordered":false,"items":["Практика ценнее диплома. Стажировки, реальные проекты, кейсы РІ портфолио — это первый приоритет.","РќРµ игнорируйте РР-инструменты. Даже базовые компетенции работы СЃ нейросетями РІ вашей профобласти СѓР¶Рµ отличают вас РѕС‚ большинства.","Рщите работодателей, которые готовы развивать. Р’ условиях кадрового голода лучшие компании инвестируют РІ развитие — это возможность для тех, Сѓ РєРѕРіРѕ ещё нет опыта.","Региональный дефицит — ваш шанс. РўРµ, кто остаётся РІ регионе или работает удалённо, РєРѕРЅРєСѓСЂРёСЂСѓСЋС‚ РІ менее насыщенной среде."]},{"id":"section-4-3-accent","type":"accent","variant":"light","paragraphs":["Рнтерпретация HT Platform: если РІС‹ студент или только выходите РЅР° рынок, РЅРµ ориентируйтесь РЅР° «модные» специальности — ориентируйтесь РЅР° то, РіРґРµ есть реальный СЃРїСЂРѕСЃ Рё РіРґРµ ваши навыки РјРѕРіСѓС‚ дать результат быстрее."]},{"id":"section-5","type":"text","title":"5. Для работодателей Рё HR: что РіРѕРІРѕСЂРёС‚ РџРњРР¤ Рё что СЃ этим делать","paragraphs":[]},{"id":"section-5-1","type":"text","title":"5.1 Производительность отстаёт РѕС‚ зарплат — Рё это проблема","paragraphs":["Путин РЅР° РџРњРР¤ РїСЂСЏРјРѕ обозначил проблему:"]},{"id":"image-quote-putin","type":"textWithImage","imageSrc":"https://storage.ht-platform.ru/public/articles/4/article-photo-11.png","text":["Владимир Путин РЅР° РџРњРР¤ 2026: СЂРѕСЃС‚ зарплат РІ Р РѕСЃСЃРёРё систематически опережает СЂРѕСЃС‚ производительности труда. Для работодателей РІ трудоёмких секторах это означает нарастающее давление РЅР° маржинальность."],"imagePosition":"left"},{"id":"section-5-1-text","type":"text","paragraphs":["РќРѕ производительность труда этим темпам РЅРµ соответствует. Рто означает, что для работодателей — особенно РІ секторах СЃ высокими трудовыми затратами — давление РЅР° маржинальность нарастает."]},{"id":"image-mrot-chart","type":"image","src":"https://storage.ht-platform.ru/public/articles/4/article-photo-12.png"},{"id":"section-5-2","type":"text","title":"5.2 Автоматизация: три барьера, Рѕ которых говорили РЅР° РџРњРР¤","paragraphs":["РќР° сессиях РџРњРР¤ работодатели называли три основных барьера для внедрения роботизации Рё автоматизации:"]},{"id":"section-5-2-list","type":"list","ordered":true,"items":["Незнание доступных решений — компании просто РЅРµ знают, что существует.","Нехватка людей для внедрения — специалистов РїРѕ внедрению катастрофически мало.","Страх РЅРµ оправдать инвестиции — РїСЂРё нынешней стоимости заёмного финансирования СЂРёСЃРє очень высок."]},{"id":"section-5-2-text","type":"text","paragraphs":["РџСЂРё этом 80% малых предприятий заявили РЅР° РџРњРР¤, что воздержатся РѕС‚ инвестиций РІ 2026 РіРѕРґСѓ РёР·-Р·Р° отсутствия источников финансирования (Александр Калинин, президент «ОПОРА Р РѕСЃСЃРёРёВ»). Рто означает сжатие рабочих мест РІ РњРЎРџ (малые Рё средние предприятия)."]},{"id":"section-5-3","type":"text","title":"5.3 Рнклюзивный найм — стратегический ресурс","paragraphs":["РќР° РџРњРР¤ прошла специальная сессия РѕР± инклюзивной занятости. РџРѕ данным hh.ru, РІ 2025 РіРѕРґСѓ 51% работодателей СѓР¶Рµ рассматривали кандидатов СЃ инвалидностью. Р’ условиях кадрового дефицита инклюзивный найм — это РЅРµ только социальная ответственность, РЅРѕ Рё СЃРїРѕСЃРѕР± расширить РІРѕСЂРѕРЅРєСѓ кандидатов."]},{"id":"section-5-4","type":"text","title":"5.4 Практические выводы для HR","paragraphs":[]},{"id":"section-5-4-list","type":"list","ordered":false,"items":["Расширяйте формальные требования («диплом + 3 РіРѕРґР° опыта») отсекают значительную часть подходящих кандидатов. Смотрите РЅР° потенциал Рє обучению.","РЎСЂРѕРє освоения навыка — 12–18 месяцев. Рто реально. Вкладывайте РІ адаптацию тех, кто готов учиться.","Региональный рынок Рё дистанционная занятость — СЃРїРѕСЃРѕР± конкурировать Р·Р° кадры без РіРѕРЅРєРё зарплат СЃ РјРѕСЃРєРѕРІСЃРєРёРјРё работодателями.","Рнклюзивный найм расширяет возможности компаний, которые адаптируют рабочие места, получают доступ Рє квалифицированным кандидатам СЃ инвалидностью."]},{"id":"section-5-4-accent","type":"accent","variant":"dark","paragraphs":["HT Platform для работодателей: Р’ условиях дефицита кадров РІСЃС‘ больше работодателей начинают смотреть РЅРµ только РЅР° формальное резюме, РЅРѕ Рё РЅР° то, как человек мыслит, какова его мотивация Рё совместимость СЃ командой. HT Platform предлагает инструменты оценки, позволяющие видеть кандидата шире — через его потенциал Рё soft skills."]},{"id":"section-6","type":"text","title":"6. Пять практических выводов: что делать РїСЂСЏРјРѕ сейчас","paragraphs":[]},{"id":"section-6-1","type":"text","title":"6.1 Если РІС‹ ищете работу РїСЂСЏРјРѕ сейчас","paragraphs":[]},{"id":"section-6-1-list","type":"list","ordered":false,"items":["Определите СЃРІРѕСЋ «сферу» рынка: РІС‹ РІ дефицитном сегменте (производство, медицина, торговля, логистика) или РІ конкурентном (РРў, маркетинг, консалтинг)? Стратегия разная.","Обновите профиль РїРѕРґ конкретную роль. РџСЂРё 11+ резюме РЅР° вакансию первичная фильтрация часто РїСЂРѕРёСЃС…РѕРґРёС‚ алгоритмически — проверьте, совпадают ли ключевые слова РІ вашем профиле СЃ описанием вакансии.","Добавьте хотя Р±С‹ базовый РР-навык РІ своей профобласти. РќРµ «пользуюсь ChatGPTВ», Р° конкретное применение РІ работе. Только 2–3% соискателей это указывают — Сѓ вас есть шанс выделиться.","Будьте готовы Рє более длинному циклу РїРѕРёСЃРєР°. Р’ конкурентных нишах — это 2–4 месяца, Р° РЅРµ 2–4 недели. Системный РїРѕРґС…РѕРґ рулит.","Смотрите шире столицы. Дефицит кадров РІ регионах реален. Гибридная занятость закрепилась — это открывает новые возможности."]},{"id":"section-6-2","type":"text","title":"6.2 Если думаете Рѕ смене профессии","paragraphs":[]},{"id":"section-6-2-list","type":"list","ordered":false,"items":["РќРµ идите туда, «где РјРѕРґРЅРѕВ» — идите туда, РіРґРµ ваши навыки сработают быстрее. Лучший переход — смежная специализация: там РІС‹ выйдете РЅР° рынок Р·Р° 6–12 месяцев.","12–18 месяцев — реальный СЃСЂРѕРє освоения РЅРѕРІРѕРіРѕ навыка. Закладывайте это РІ план.","Дефицитные направления РІ 2026: производство, строительство, транспорт, медицина, продажи. Р РёСЃРєРё перехода туда — РЅРёР¶Рµ.","Проверьте бесплатные программы переобучения через платформу «Работа Р РѕСЃСЃРёРёВ» — более 5 700 программ. До того как отдавать деньги Р·Р° платные РєСѓСЂСЃС‹. Воспользуйтесь нейросетями, сегодня РѕРЅРё РјРѕРіСѓС‚ выступать даже наставниками.","Поймите, что РІС‹ умеете делать хорошо — Рё найдите, РіРґРµ это РЅСѓР¶РЅРѕ РІ РЅРѕРІРѕРј контексте. Soft skills играют важную роль сегодня."]},{"id":"section-6-3","type":"text","title":"6.3 Если РІС‹ студент или молодой специалист","paragraphs":[]},{"id":"section-6-3-list","type":"list","ordered":false,"items":["Практика ценнее диплома. Стажировки, проекты, кейсы — то, СЃ чего стоит начинать.","Следите Р·Р° законопроектом Рѕ статусе стажёра: если РѕРЅ будет РїСЂРёРЅСЏС‚, СЃ марта 2027 РіРѕРґР° стажировка получит официальный трудовой статус СЃ зарплатой РЅРµ РЅРёР¶Рµ РњР РћРў.","РќРµ игнорируйте РР-навыки — даже базовые. РўРµ, кто умеет применять РР РІ работе, находят работу быстрее.","Рщите работодателей, которые вкладывают РІ обучение — РІ условиях кадрового голода лучшие РёР· РЅРёС… готовы вкладываться РІ развитие.","36% молодёжи уезжают РІ столицы — дефицит РІ регионах открывает возможности для тех, кто остаётся или работает удалённо."]},{"id":"section-6-4","type":"text","title":"6.4 Если планируете обучение Рё развитие","paragraphs":[]},{"id":"section-6-4-list","type":"list","ordered":false,"items":["Выбирайте обучение РїРѕ результату, Р° РЅРµ РїРѕ названию РєСѓСЂСЃР°. Что конкретно РІС‹ сможете делать после?","Приоритет — навыки, которые усиливают текущую специализацию, Р° РЅРµ меняют профессию целиком.","РР-инструменты РІ вашей профобласти — первый приоритет. РќРµ В«РРвообще», Р° конкретные применения.","Soft skills — РЅРµ второстепенная история. Рмпатия, критическое мышление, умение вести переговоры становятся дефицитными навыками наравне СЃ техническими.","Бесплатные программы существуют: платформа «Работа Р РѕСЃСЃРёРёВ» (trudvsem.ru), программы Минтруда, региональные центры занятости."]},{"id":"section-6-5","type":"text","title":"6.5 Для работодателей Рё HR","paragraphs":[]},{"id":"section-6-5-list","type":"list","ordered":false,"items":["Расширяйте РїСѓР» кандидатов: формальные требования отсекают большую часть подходящих людей. Смотрите РЅР° потенциал Рє обучению Рё развитию.","12–18 месяцев — реальный СЃСЂРѕРє освоения РЅРѕРІРѕРіРѕ навыка. Рто приемлемый РіРѕСЂРёР·РѕРЅС‚ для инвестиций РІ развитие.","Региональный рынок Рё дистанционная занятость — СЃРїРѕСЃРѕР± бороться СЃ дефицитом без РіРѕРЅРєРё зарплат РІ РњРѕСЃРєРІРµ.","Рнклюзивный найм расширяет РїСѓР»: 51% работодателей СѓР¶Рµ рассматривают кандидатов СЃ инвалидностью — присоединяйтесь.","Автоматизация без отстроенных процессов РЅРµ даёт эффекта. РўСЂРё барьера: незнание решений, нет людей для внедрения, страх РЅРµ оправдать инвестиции.","Рспользуйте современные инструменты, осваивайте новые технологии, значительно СЌРєРѕРЅРѕРјСЏ РЅР° РїРѕРґР±РѕСЂРµ – для этого есть РІСЃРµ возможности."]},{"id":"section-7","type":"text","title":"7. Как разобраться РІ СЃРІРѕРёС… сильных сторонах — Рё зачем это делать сейчас","paragraphs":["РџРњРР¤ 2026 подтвердил то, Рѕ чём давно РіРѕРІРѕСЂСЏС‚ карьерные консультанты: рынок труда становится РІСЃС‘ менее линейным. Профессии трансформируются, навыки устаревают Рё появляются новые, РРперестраивает внутренние задачи — РІСЃС‘ это означает, что опираться только РЅР° привычное резюме становится РІСЃС‘ менее достаточно.","Р’ этой ситуации полезно сначала разобраться СЃ СЃРѕР±РѕР№: что РІС‹ умеете делать хорошо, РІ чём ваша реальная специализация, какие качества помогают вам работать эффективно. Рто РѕСЃРЅРѕРІР° для любого карьерного шага — Р±СѓРґСЊ то РїРѕРёСЃРє работы, смена профессии или планирование обучения."]},{"id":"section-7-accent","type":"accent","variant":"light","paragraphs":[[{"type":"link","text":"HT Platform","action":"openAuth"}," создана именно для этого: пройти диагностику сильных сторон, увидеть СЃРІРѕРё soft skills РІ РїРѕРґСЂРѕР±РЅРѕРј отчёте Рё понять, как ваш профиль соотносится СЃ тем, что ищут работодатели РїСЂСЏРјРѕ сейчас. Если РЅРµ уверены, какая роль РїРѕРґС…РѕРґРёС‚ вам лучше всего, начните СЃ диагностики — это занимает около 20 РјРёРЅСѓС‚ Рё даёт конкретный отчёт СЃ интерпретацией."]]},{"id":"section-7-text-after","type":"text","paragraphs":["Независимо РѕС‚ того, используете ли РІС‹ инструменты HT Platform или нет, — понимание СЃРІРѕРёС… сильных сторон остаётся отправной точкой для осознанного карьерного выбора РІ меняющихся условиях."]},{"id":"conclusion","type":"text","title":"Заключение: что остаётся после РџРњРР¤ 2026","paragraphs":["РџРњРР¤ 2026 дал немного противоречивую, РЅРѕ полезную картину. Официальная риторика оптимистична, Рё это частично оправдано: безработица действительно РЅР° историческом РјРёРЅРёРјСѓРјРµ, РњР РћРў вырос, государство расширяет инструменты поддержки занятости молодёжи.","РќРѕ реальный рынок труда сложнее официальных цифр. Конкуренция РІ офисных профессиях выросла кратно. Малый бизнес сжимается. Вакансий стало меньше, резюме больше. Скрытая безработица достигает рекордных уровней. РРменяет задачи внутри профессий — Рё тот, кто адаптируется раньше, получает преимущество.","Главный вывод, который стоит унести СЃ РџРњРР¤ 2026, — рынок труда стал сложнее, Рё системный РїРѕРґС…РѕРґ Рє карьере теперь важнее, чем РєРѕРіРґР°-либо. Понимать СЃРІРѕРё навыки, видеть СЃРІРѕСЋ сферу рынка, адаптироваться раньше конкурентов — РІРѕС‚ что работает РІ 2026 РіРѕРґСѓ."]},{"id":"sources","type":"references","title":"Рсточники Рё методология","items":[{"title":"Путин Р’.Р’., пленарное заседание РџРњРР¤ 5 РёСЋРЅСЏ 2026"},{"title":"Голикова Рў.Рђ., сессия «Рынок труда 2.0В», РџРњРР¤ 5 РёСЋРЅСЏ 2026"},{"title":"Котяков Рђ.Рћ., сессия «Рынок труда 2.0В», РџРњРР¤ 5 РёСЋРЅСЏ 2026"},{"title":"Сергиенков Р”., CEO HeadHunter, РџРњРР¤ 5 РёСЋРЅСЏ 2026"},{"title":"Репик Рђ., «Деловая Р РѕСЃСЃРёСЏВ», РџРњРР¤ 5 РёСЋРЅСЏ 2026"},{"title":"Калинин Рђ., президент «ОПОРА Р РѕСЃСЃРёРёВ», РџРњРР¤ 3 РёСЋРЅСЏ 2026"},{"title":"Росстат, апрель 2026"},{"title":"hh.ru Статистика, март–май 2026 (stats.hh.ru)"},{"title":"«Московский комсомолец», февраль 2026 (mk.ru)"},{"title":"ЦМАКП, 2026"},{"title":"Коммерсантъ, РёСЋРЅСЊ 2026 (kommersant.ru)"},{"title":"РђРёР¤ Санкт-Петербург, РёСЋРЅСЊ 2026 (spb.aif.ru)"},{"title":"Парламентская газета, РёСЋРЅСЊ 2026 (pnp.ru)"},{"title":"ГАРАНТ.Р РЈ, РАПСР— данные Рѕ законопроекте"},{"title":"Пятый канал / 5-tv.ru, РёСЋРЅСЊ 2026"},{"title":"Сбер + Минтруд (совместное исследование, РџРњРР¤ 2026)"},{"title":"ФЗ РѕС‚ 29.10.2024 в„–362-ФЗ (consultant.ru)"}]}]'),K4={id:M4,title:D4,description:$4,createdAt:F4,readTime:O4,coverUrl:U4,category:z4,tags:B4,seo:V4,author:H4,toc:W4,blocks:q4},G4="ai-vacancies-russia-2026",Y4="Рсследование рынка РР-вакансий РІ Р РѕСЃСЃРёРё: что работодатели пишут Рё Р·Р° что платят",Q4="Разобрали 2 808 вакансий, связанных СЃ искусственным интеллектом. Вакансии СЃРѕ словом В«ChatGPTВ» РІ описании имеют медиану РЅР° 24% РЅРёР¶Рµ, СЃРѕ словом В«RAGВ» — РЅР° 67% выше. Разбираем, что стоит Р·Р° этим разрывом Рё как читать описание вакансии, чтобы понять, РєСѓРґР° РІС‹ попадёте.",Z4="21.08.2026",J4="15 РјРёРЅ",X4="https://storage.ht-platform.ru/public/articles/5/article-photo-01.png",eC="research",tC=["#исследование-ht_platform","#РёРё-вакансии-2026","#рынок-труда-2026","#навыки-2026","#зарплаты-РІ-РёС‚","#искусственный-интеллект","#РїРѕРёСЃРє-работы"],rC={title:"Рсследование рынка РР-вакансий РІ Р РѕСЃСЃРёРё 2026: Р·Р° какие навыки платят РЅР° самом деле | HT Platform",description:"Разобрали 2 808 вакансий, связанных СЃ искусственным интеллектом. Слово В«ChatGPTВ» РІ вакансии означает зарплату РЅР° 24% РЅРёР¶Рµ медианы, слово В«RAGВ» — РЅР° 67% выше. Что требуют работодатели Рё как читать описание вакансии.",keywords:["вакансии РёРё 2026","работа СЃ искусственным интеллектом","ai-инженер вакансии","зарплата ai-специалиста","сколько платят Р·Р° нейросети","зарплаты ml 2026","какие навыки РЅСѓР¶РЅС‹ для работы СЃ РёРё","РїСЂРѕРјРїС‚-инженер зарплата","навыки 2026","как войти РІ ai","работа СЃ нейросетями без опыта","переход РІ ai"]},nC={id:"akirin",name:"Алексей РљРёСЂРёРЅ",role:"Основатель HT Platform",avatar:"https://storage.ht-platform.ru/public/staff/kir-photo.jpg"},aC=[{id:"what-we-did",title:"Что РјС‹ сделали"},{id:"main-points",title:"Главные моменты исследования"},{id:"section-1",title:"1. Сколько платят Р·Р° навыки СЃ РР"},{id:"section-2",title:"2. Зачем работодателю РР"},{id:"section-3",title:"3. Какие навыки РїСЂРѕСЃСЏС‚"},{id:"section-4",title:"4. Как устроен рынок"},{id:"section-5",title:"5. Что РіРѕРІРѕСЂСЏС‚ РґСЂСѓРіРёРµ исследования"},{id:"section-6",title:"6. Что СЃ этим делать"},{id:"section-7",title:"7. Рћ чём это РІСЃС‘ РіРѕРІРѕСЂРёС‚"},{id:"section-8",title:"8. Как подготовиться Рє будущему СЃ РР, которое СѓР¶Рµ наступило"},{id:"how-we-counted",title:"Как РјС‹ считали"},{id:"sources",title:"Рсточники"}],oC=JSON.parse('[{"id":"what-we-did","type":"text","title":"Что РјС‹ сделали","paragraphs":[["РњС‹ проанализировали вакансии СЃ hh.ru РїРѕ 47 поисковым запросам, связанным СЃ искусственным интеллектом (далее — РР). После очистки РѕС‚ дублей Рё вакансий, попавших РІ выборку случайно, осталось 2 808 описаний — РёС… Рё разбирали. ",{"type":"link","text":"[1]","href":"#sources-1"}],["Дальше РјС‹ разобрали каждое описание: какие навыки перечислены, что человек должен делать СЃ РР, сколько Р·Р° это предлагают. Рсопоставили результат СЃ тем, что РѕР± этом рынке РіРѕРІРѕСЂСЏС‚ hh.ru, Хабр, Всемирный экономический форум, LinkedIn Рё Indeed Hiring Lab. ",{"type":"link","text":"[2]","href":"#sources-2"}," ",{"type":"link","text":"[4]","href":"#sources-4"}," ",{"type":"link","text":"[5]","href":"#sources-5"}," ",{"type":"link","text":"[8]","href":"#sources-8"}," ",{"type":"link","text":"[10]","href":"#sources-10"}],"Получилась картина, которая местами противоречит привычным разговорам РїСЂРѕ РР РЅР° рынке труда."]},{"id":"what-we-did-accent","type":"accent","variant":"normal","paragraphs":["Главное, что РјС‹ увидели: рынок платит РЅРµ Р·Р° упоминание РР, Р° Р·Р° инженерную работу РІРѕРєСЂСѓРі него. Слова В«LLMВ» Рё В«GPTВ» встречаются почти РІ половине вакансий, РЅРѕ стоят РѕРЅРё очень РїРѕ-разному. Слово В«RAGВ» РІ описании соответствует медиане РЅР° 67% выше общей, слово В«ChatGPTВ» — РЅР° 24% РЅРёР¶Рµ. Рђ Python, Docker Рё Kubernetes, которые вообще РЅРµ принято называть РР-навыками, дают РѕС‚ +45% РґРѕ +91%."]},{"id":"main-points","type":"text","title":"Главные моменты исследования","paragraphs":[]},{"id":"main-points-list","type":"list","ordered":true,"items":[["Половина вакансий формулирует требования настолько общо, что РїРѕ описанию нельзя понять, РєРѕРіРѕ ищут. Р’ 18,4% вакансий РЅРµ названо РЅРё РѕРґРЅРѕРіРѕ конкретного технического навыка. ",{"type":"link","text":"[1]","href":"#sources-1"}],["Внутри самой темы РРесть РґРІР° разных словаря. Рнженерный — В«RAGВ», В«LangChainВ», «векторные базы», В«fine-tuningВ» — соответствует медиане РѕС‚ +47% РґРѕ +67%. Пользовательский — В«ChatGPTВ», «нейросети», В«GPTВ» — РѕС‚ в€’17% РґРѕ в€’24%. Разрыв между краями — 91 процентный РїСѓРЅРєС‚. ",{"type":"link","text":"[1]","href":"#sources-1"}],["Начиная СЃ четвёртого названного навыка медиана растёт скачком: РґРѕ трёх навыков РѕРЅР° держится РІ районе 100–110 тысяч рублей, СЃ четвёртого — 175 тысяч. ",{"type":"link","text":"[1]","href":"#sources-1"}],["Р—Р° словом В«РРВ» стоят разные задачи, Рё платят Р·Р° РЅРёС… РїРѕ-разному: РѕС‚ 205 450 рублей Р·Р° построение инфраструктуры РґРѕ 69 600 Р·Р° разметку данных. Разброс — три раза. ",{"type":"link","text":"[1]","href":"#sources-1"}],["Шесть РёР· десяти РР-вакансий (59,2%) относятся РЅРµ Рє разработке, Р° Рє маркетингу, продажам, аналитике, дизайну Рё управлению. Indeed Hiring Lab независимо фиксирует то Р¶Рµ самое РЅР° американском рынке. ",{"type":"link","text":"[1]","href":"#sources-1"}," ",{"type":"link","text":"[7]","href":"#sources-7"}],["Премия Р·Р° управленческие софт скилз РїСЂРё проверке РІРѕ РјРЅРѕРіРѕРј оказалась премией Р·Р° управленческую должность, Р° РЅРµ Р·Р° навык. Рђ РІРѕС‚ штраф Р·Р° исполнительские качества — внимательность, обучаемость, работа РІ команде — устоял: РѕС‚ в€’15% РґРѕ в€’23% даже внутри РѕРґРЅРѕРіРѕ типа позиций. ",{"type":"link","text":"[1]","href":"#sources-1"}],["Освоенный стек компенсирует РґРІР°-три РіРѕРґР° опыта: вакансия для кандидата СЃ опытом РґРѕ трёх лет Рё шестью технологиями РІ требованиях предлагает столько Р¶Рµ, сколько вакансия для специалиста СЃ опытом РѕС‚ трёх лет, РЅРѕ СЃ общими требованиями. ",{"type":"link","text":"[1]","href":"#sources-1"}],["Семь РёР· десяти РР-вакансий сосредоточены РІ РњРѕСЃРєРІРµ. Удалённый формат сокращает разрыв между столицей Рё регионами, РЅРѕ Р·Р° счёт того, что РњРѕСЃРєРІР° РЅР° удалёнке платит меньше, Р° РЅРµ потому, что регионы подтянулись. ",{"type":"link","text":"[1]","href":"#sources-1"}]]},{"id":"main-points-graph-title","type":"text","title":"Р—Р° что рынок платит РІ РР-вакансиях","paragraphs":["Отклонение медианной зарплаты РѕС‚ общей медианы выборки — 120 000 в‚Ѕ"]},{"id":"img-fig02","type":"image","src":"https://storage.ht-platform.ru/public/articles/5/article-photo-02.png","caption":"Р РёСЃСѓРЅРѕРє 1. Надбавка Рє медиане РїРѕ навыкам. Рсточник: [1]."},{"id":"section-1","type":"text","title":"1. Сколько платят Р·Р° навыки СЃ РР","paragraphs":["Слова РїСЂРѕ РРсами РїРѕ себе ничего РЅРµ стоят. РњС‹ посчитали медианную зарплату для каждого навыка, который встречается РІ описаниях. Медиана — это середина: половина вакансий платит меньше, половина больше. РћРЅР° устойчивее среднего, потому что несколько вакансий СЃ зарплатой РІ миллион РЅРµ сдвигают её. РџРѕ всей выборке медиана составила 120 000 рублей РЅР° СЂСѓРєРё.","Дальше смотрим, насколько отличается медиана Сѓ вакансий, РіРґРµ СѓРїРѕРјСЏРЅСѓС‚ конкретный навык."]},{"id":"section-1-table","type":"table","columns":["Навык","Вакансий","Медиана, в‚Ѕ","Рљ общей медиане"],"rows":[["C/C++","106","250 000 в‚Ѕ","+108%"],["Kubernetes","323","229 462 в‚Ѕ","+91%"],["Kafka","261","216 500 в‚Ѕ","+80%"],["CI/CD","440","216 500 в‚Ѕ","+80%"],["ClickHouse","143","210 975 в‚Ѕ","+76%"],["Grafana, Prometheus","157","205 450 в‚Ѕ","+71%"],["Docker","524","200 000 в‚Ѕ","+67%"],["PostgreSQL","425","200 000 в‚Ѕ","+67%"],["RAG","432","200 000 в‚Ѕ","+67%"],["Redis","156","200 000 в‚Ѕ","+67%"],["RabbitMQ","120","200 000 в‚Ѕ","+67%"],["PyTorch","221","200 000 в‚Ѕ","+67%"],["Computer Vision","176","200 000 в‚Ѕ","+67%"],["LangChain","254","197 375 в‚Ѕ","+64%"],["Векторные базы","153","195 250 в‚Ѕ","+63%"],["REST API","279","191 000 в‚Ѕ","+59%"],["Linux","281","188 375 в‚Ѕ","+57%"],["FastAPI","220","180 000 в‚Ѕ","+50%"],["React","148","180 000 в‚Ѕ","+50%"],["Pandas, NumPy","244","179 975 в‚Ѕ","+50%"],["JavaScript, TypeScript","199","179 125 в‚Ѕ","+49%"],["SQL","744","175 000 в‚Ѕ","+46%"],["Java","143","175 000 в‚Ѕ","+46%"],["Power BI, Tableau","102","175 000 в‚Ѕ","+46%"],["Python","1 101","174 500 в‚Ѕ","+45%"],["A/B тесты","214","170 000 в‚Ѕ","+42%"],["Git","438","160 000 в‚Ѕ","+33%"],["РР-агенты","744","150 000 в‚Ѕ","+25%"],["Copilot, Cursor","244","150 000 в‚Ѕ","+25%"],["n8n, Make, Zapier","121","143 550 в‚Ѕ","+20%"],["РџСЂРѕРјРїС‚-РёРЅР¶РёРЅРёСЂРёРЅРі","224","130 500 в‚Ѕ","+9%"],["1РЎ","219","130 500 в‚Ѕ","+9%"],["Битрикс24, amoCRM","149","130 000 в‚Ѕ","+8%"],["LLM, GPT","1 300","107 500 в‚Ѕ","в€’10%"],["Figma","155","100 000 в‚Ѕ","в€’17%"],["Excel, Google Таблицы","335","97 500 в‚Ѕ","в€’19%"]]},{"id":"section-1-footnote","type":"accent","variant":"normal","paragraphs":["Проверили 78 технологий, РІ таблицу попали 36 — те, Сѓ которых РЅРµ меньше 20 вакансий СЃ указанной зарплатой. РќРµ прошли РїРѕСЂРѕРі надёжности, РЅРѕ встречаются часто: MLOps (201 вакансия), NLP (201), Airflow (176), scikit-learn (144), TensorFlow (84). Р’ колонке «Вакансий» — общее число упоминаний навыка. Медиана считается только РїРѕ тем РёР· РЅРёС…, РіРґРµ указана зарплата: таких вакансий 993 РёР· 2 808."]},{"id":"section-1-cont","type":"text","paragraphs":["Слова В«LLMВ» Рё В«GPTВ» встречаются чаще всего — РІ 1 300 вакансиях РёР· 2 808, это 46%. Рэто единственная позиция РёР· верхушки РїРѕ частоте, которая тянет медиану РІРЅРёР·.","РџСЂРѕРјРїС‚-РёРЅР¶РёРЅРёСЂРёРЅРі даёт +9%. Рнструменты автоматизации РІСЂРѕРґРµ n8n Рё Zapier — +20%. Рђ обычный Python, который никто РЅРµ называет РР-навыком, — +45%. Kafka, Рѕ которой РІ разговорах РїСЂРѕ РРвообще РЅРµ вспоминают, — +80%.","Верх таблицы занимает РЅРµ то, что принято считать РР-навыками, Р° инфраструктура: оркестрация контейнеров, очереди сообщений, мониторинг, базы данных. Обучить модель — полдела, гораздо РґРѕСЂРѕР¶Рµ стоит умение запустить её РІ работу Рё РЅРµ уронить."]},{"id":"s1-vocab","type":"text","title":"Два словаря внутри РѕРґРЅРѕР№ темы","paragraphs":["Сначала РјС‹ посчитали РІСЃРµ РР-упоминания РѕРґРЅРѕР№ РіСЂСѓРїРїРѕР№ Рё получили невнятный результат: РјРёРЅСѓСЃ 10% Рє медиане. Разделили РїРѕ конкретным словам — Рё увидели, что внутри РіСЂСѓРїРїС‹ спрятаны РґРІР° противоположных явления."]},{"id":"s1-vocab-table","type":"table","columns":["Слово РІ описании","Вакансий","Медиана, в‚Ѕ","Рљ общей медиане"],"rows":[["RAG","432","200 000 в‚Ѕ","+67%"],["LangChain","254","197 375 в‚Ѕ","+64%"],["Векторные базы","153","195 250 в‚Ѕ","+63%"],["Fine-tuning","180","176 625 в‚Ѕ","+47%"],["LLM","854","175 000 в‚Ѕ","+46%"],["РР-агенты","744","150 000 в‚Ѕ","+25%"],["РџСЂРѕРјРїС‚-РёРЅР¶РёРЅРёСЂРёРЅРі","224","130 500 в‚Ѕ","+9%"],["Нейросети","719","100 000 в‚Ѕ","в€’17%"],["GPT","105","100 000 в‚Ѕ","в€’17%"],["ChatGPT","395","91 350 в‚Ѕ","в€’24%"]]},{"id":"s1-vocab-graph-title","type":"text","title":"Два словаря РР: инженерный Рё пользовательский","paragraphs":["Отклонение медианы РѕС‚ 120 000 в‚Ѕ. Разрыв между краями — 91 процентный РїСѓРЅРєС‚"]},{"id":"img-fig05","type":"image","src":"https://storage.ht-platform.ru/public/articles/5/article-photo-03.png","caption":"Р РёСЃСѓРЅРѕРє 2. Словари РР Рё оплата. Рсточник: [1]."},{"id":"s1-vocab-accent","type":"accent","variant":"normal","paragraphs":["Линия РїСЂРѕС…РѕРґРёС‚ РЅРµ между «есть РРВ» Рё «нет РРВ», Р° между РґРІСѓРјСЏ словарями. В«RAGВ», «векторные базы», В«fine-tuningВ» — язык инженера, который строит систему. В«ChatGPTВ» Рё «нейросети» — язык пользователя, который открывает чужую систему РІ браузере. Разрыв между краями таблицы — 91 процентный РїСѓРЅРєС‚."]},{"id":"s1-vocab-cont","type":"text","paragraphs":["Рто Р¶Рµ различие РІРёРґРЅРѕ Рё РЅР° РІС…РѕРґРµ РІ профессию. РЈ вакансий для кандидатов СЃ опытом РґРѕ трёх лет медиана РІ «инженерном» сегменте СЃРѕ словом LLM — 140 000 рублей, РІ «пользовательском» СЃРѕ словом ChatGPT — 87 000. Разница РІ 1,6 раза возникает ещё РґРѕ РІСЃСЏРєРѕРіРѕ опыта, РЅР° СѓСЂРѕРІРЅРµ того, какими словами написана вакансия."]},{"id":"s1-tags","type":"text","title":"РћРґРЅРѕ Рё то Р¶Рµ слово, разная цена","paragraphs":["Ещё нагляднее это РІРёРґРЅРѕ РІ тегах, которые работодатель проставляет вакансии сам."]},{"id":"s1-tags-table","type":"table","columns":["Тег РІ вакансии","Вакансий","Медиана, в‚Ѕ","Рљ общей медиане"],"rows":[["LLM","100","210 000 в‚Ѕ","+84%"],["Нейронные сети","29","102 200 в‚Ѕ","в€’10%"],["ChatGPT","37","77 500 в‚Ѕ","в€’32%"]]},{"id":"s1-tags-footnote","type":"accent","variant":"normal","paragraphs":["Базы здесь небольшие: СЃ указанной зарплатой — 27, 22 Рё 22 вакансии соответственно."]},{"id":"s1-tags-cont","type":"text","paragraphs":["Разброс между тегами В«LLMВ» Рё В«ChatGPTВ» — РІ 2,7 раза. Рто РЅРµ РїСЂРѕ технологию, это РїСЂРѕ то, как работодатель РІРёРґРёС‚ задачу. РўРѕС‚, кто пишет В«LLMВ», думает РїСЂРѕ инженерную систему. РўРѕС‚, кто пишет В«ChatGPTВ», думает РїСЂРѕ инструмент, которым пользуются."]},{"id":"s1-tags-accent","type":"accent","variant":"normal","title":"Что это значит для вас","paragraphs":["Если РІС‹ ищете работу Рё видите РІ вакансии «опыт работы СЃ ChatGPTВ» — это, скорее всего, РЅРёР¶РЅРёР№ сегмент рынка. Если написано «опыт работы СЃ LLMВ», В«RAGВ», «векторные базы» — РІС‹ смотрите РЅР° инженерную позицию."]},{"id":"s1-threshold","type":"text","title":"РџРѕСЂРѕРі конкретности: четыре навыка","paragraphs":["РњС‹ посчитали, сколько конкретных технических навыков перечислено РІ каждой вакансии, Рё сопоставили СЃ зарплатой."]},{"id":"s1-threshold-table","type":"table","columns":["Навыков РІ описании","Вакансий","Доля","Медиана, в‚Ѕ","Рљ общей медиане"],"rows":[["0","516","18,4%","110 000 в‚Ѕ","в€’8%"],["1","548","19,5%","100 000 в‚Ѕ","в€’17%"],["2","350","12,5%","100 000 в‚Ѕ","в€’17%"],["3","247","8,8%","120 000 в‚Ѕ","0%"],["4–5","401","14,3%","175 000 в‚Ѕ","+46%"],["6–7","331","11,8%","200 000 в‚Ѕ","+67%"],["8 Рё более","415","14,8%","187 500 в‚Ѕ","+56%"]]},{"id":"s1-threshold-graph-title","type":"text","title":"РџРѕСЂРѕРі конкретности: СЃ четвёртого навыка зарплата растёт скачком","paragraphs":["Медианная зарплата РІ зависимости РѕС‚ числа названных требований"]},{"id":"img-fig03","type":"image","src":"https://storage.ht-platform.ru/public/articles/5/article-photo-04.png","caption":"Р РёСЃСѓРЅРѕРє 3. Число навыков Рё зарплата. Рсточник: [1]."},{"id":"s1-threshold-cont","type":"text","paragraphs":["Обратите внимание РЅР° первую строку: вакансии, РіРґРµ РЅРµ назван РЅРё РѕРґРёРЅ навык, платят чуть больше, чем СЃ РѕРґРЅРёРј-РґРІСѓРјСЏ. Дело РІ составе — там РјРЅРѕРіРѕ продаж, маркетинга, SMM Рё дизайна, РіРґРµ требования формулируют бизнес-языком, Р° каждая седьмая позиция руководящая.","До трёх навыков медиана держится РІ районе 100–110 тысяч. РЎ четвёртого — скачок РЅР° 46%, СЃ шестого — РЅР° 67%.","Логика простая: работодатель, который может перечислить четыре конкретных требования, понимает, какую задачу решает. Рплатит соответственно."]},{"id":"s1-threshold-accent","type":"accent","variant":"normal","title":"РћРіРѕРІРѕСЂРєР°","paragraphs":["РњС‹ измеряем РЅРµ потребность рынка, Р° то, как рынок её формулирует. Далеко РЅРµ РІСЃРµ работодатели пишут навыки, понимая РёС… ценность, Рё далеко РЅРµ РІСЃРµ разбираются РІ предмете. РР· того, что написано, РјС‹ делаем выводы Рѕ том, что написано, — Р° РЅРµ Рѕ том, что РїСЂРѕРёСЃС…РѕРґРёС‚ внутри компаний."]},{"id":"section-2","type":"text","title":"2. Зачем работодателю РР","paragraphs":["РњС‹ разобрали, что именно человек должен делать СЃ искусственным интеллектом. Оказалось, что Р·Р° РѕРґРЅРёРј словом В«РРВ» стоят совершенно разные задачи — Рё платят Р·Р° РЅРёС… РїРѕ-разному."]},{"id":"section-2-table","type":"table","columns":["Что РЅСѓР¶РЅРѕ делать СЃ РР","Вакансий","Доля","Медиана, в‚Ѕ","Рљ общей медиане"],"rows":[["Строить инфраструктуру","459","16,3%","205 450 в‚Ѕ","+71%"],["Помогать РІ разработке","231","8,2%","150 000 в‚Ѕ","+25%"],["Создавать РїСЂРѕРґСѓРєС‚ или сервис","190","6,8%","150 000 в‚Ѕ","+25%"],["Обрабатывать данные","137","4,9%","135 000 в‚Ѕ","+12%"],["Автоматизировать рутину","271","9,7%","130 500 в‚Ѕ","+9%"],["Общаться СЃ клиентом","56","2,0%","117 500 в‚Ѕ","в€’2%"],["Генерировать контент","311","11,1%","95 850 в‚Ѕ","в€’20%"],["Размечать данные для обучения","76","2,7%","69 600 в‚Ѕ","в€’42%"]]},{"id":"section-2-footnote","type":"accent","variant":"normal","paragraphs":["Классификация РїРѕ первому совпадению: вакансия попадает РІ самую конкретную подходящую категорию. Ещё РґРІРµ категории («исследовать Рё обучать модели», «контролировать качество моделей») РЅРµ прошли РїРѕСЂРѕРі РІ 20 вакансий СЃ указанной зарплатой, поэтому РјС‹ РёС… РЅРµ публикуем."]},{"id":"section-2-graph-title","type":"text","title":"Зачем компаниям РР— Рё сколько это стоит","paragraphs":["Медианная зарплата РїРѕ назначению РР РІ вакансии. Разброс между полюсами — 3 раза"]},{"id":"img-fig04","type":"image","src":"https://storage.ht-platform.ru/public/articles/5/article-photo-05.png","caption":"Р РёСЃСѓРЅРѕРє 4. Назначение РР Рё оплата. Рсточник: [1]."},{"id":"section-2-cont","type":"text","paragraphs":["Разброс между верхом Рё РЅРёР·РѕРј СЃРїРёСЃРєР° — три раза. Рполюса устроены зеркально: наверху человек строит систему, РІРЅРёР·Сѓ — обслуживает её.","Р’ трети вакансий, отобранных РїРѕ РР-запросам, вообще РЅРµ сказано, зачем компании нужен РР. Рто СЂРѕРІРЅРѕ то, Рѕ чём статья: рынок пишет РїСЂРѕ РР, РЅРѕ РЅРµ описывает задачу."]},{"id":"s2-two-jobs","type":"text","title":"Две работы, которых РЅРµ было пять лет назад","paragraphs":["Рскусственный интеллект создал РЅРѕРІСѓСЋ работу РЅР° РѕР±РѕРёС… концах шкалы, Рё это самое наглядное, что РјС‹ увидели РІ данных.","Р’РЅРёР·Сѓ — разметка данных для обучения: 76 вакансий, медиана 69 600 рублей, РјРёРЅСѓСЃ 42% Рє общей. Рто самая низкооплачиваемая категория РІРѕ всей выборке. Человек размечает примеры, РЅР° которых учится модель.","Наверху — построение инфраструктуры для моделей: 459 вакансий, медиана 205 450 рублей, плюс 71%. Человек делает так, чтобы обученная модель работала РІ продукте Рё РЅРµ падала РїРѕРґ нагрузкой."]},{"id":"s2-two-jobs-accent","type":"accent","variant":"normal","paragraphs":["РћР±Рµ профессии появились РёР·-Р·Р° РѕРґРЅРѕР№ Рё той Р¶Рµ технологии. Разница РІ оплате — почти три раза. Рто неплохая иллюстрация Рє тому, что «работать СЃ РРВ» — РЅРµ характеристика позиции. Значение имеет, СЃ какой стороны системы РІС‹ находитесь."]},{"id":"s2-two-jobs-graph-title","type":"text","title":"Два полюса РѕРґРЅРѕР№ технологии","paragraphs":["Медианная зарплата Рё число вакансий РїРѕ РґРІСѓРј задачам РІРѕРєСЂСѓРі РР"]},{"id":"img-fig09","type":"image","src":"https://storage.ht-platform.ru/public/articles/5/article-photo-06.png","caption":"Р РёСЃСѓРЅРѕРє 5. Рнфраструктура Рё разметка данных. Рсточник: [1]."},{"id":"s2-content","type":"text","title":"Генерация контента — РѕРґРЅР° РёР· самых массовых Рё самых дешёвых задач","paragraphs":["Генерация контента — вторая РїРѕ массовости задача РІ вакансиях, 311 позиций РёР· 2 808. Р РѕРґРЅР° РёР· самых низкооплачиваемых: РјРёРЅСѓСЃ 20% Рє медиане.","Рто тот сегмент, РіРґРµ готовые инструменты закрывают заметную часть задачи. Текст, изображения Рё видео теперь делает нейросеть, человек её направляет Рё правит.","Если ваша работа связана СЃ производством контента, это РїСЂСЏРјРѕР№ сигнал. РќРµ РІ том смысле, что профессия исчезает, — РІ том, что её СЌРєРѕРЅРѕРјРёРєР° изменилась. Расти внутри этой ниши сложнее, чем перейти РІ соседнюю: обработка данных даёт +12%, автоматизация процессов +9%, Р° работа СЃ инфраструктурой +71%."]},{"id":"s2-content-quote","type":"quote","text":"РњС‹ сами прошли через это внутри команды. РљРѕРіРґР° генерация текста Рё картинок стала стоить копейки, ценность сместилась Рє тем, кто может собрать РёР· этого работающий процесс: подключить Рє базе знаний, проверить факты, встроить РІ РїСЂРѕРґСѓРєС‚. Умение пользоваться нейросетью перестало быть преимуществом примерно Р·Р° РіРѕРґ.","author":"Алексей РљРёСЂРёРЅ","role":"Основатель HT Platform","avatar":"https://storage.ht-platform.ru/public/staff/kir-photo.jpg"},{"id":"section-3","type":"text","title":"3. Какие навыки РїСЂРѕСЃСЏС‚","paragraphs":[]},{"id":"s3-hard","type":"text","title":"Хард скилз: что стоит РґРѕСЂРѕРіРѕ","paragraphs":["Хард скилз — то, что человек умеет делать: языки программирования, инструменты, технологии. РњС‹ сгруппировали РёС… РїРѕ смыслу, чтобы стала РІРёРґРЅР° закономерность."]},{"id":"s3-hard-table","type":"table","columns":["Группа","Что РІС…РѕРґРёС‚","Надбавка Рє медиане"],"rows":[["Системное программирование","C/C++","+108%"],["Рнфраструктура Рё эксплуатация","Kubernetes, CI/CD, Docker, Grafana, Prometheus, Linux","+57…+91%"],["Обмен данными Рё очереди","Kafka, RabbitMQ, Redis","+67…+80%"],["Базы Рё хранилища","ClickHouse, PostgreSQL","+67…+76%"],["Классический ML","PyTorch, Computer Vision, Pandas, NumPy","+50…+67%"],["LLM-инженерия","RAG, LangChain, векторные базы, fine-tuning","+47…+67%"],["Веб Рё бэкенд","FastAPI, React, JavaScript, TypeScript, Java","+46…+50%"],["Аналитика Рё визуализация","Power BI, Tableau, A/B тесты","+42…+46%"],["Языки Рё базовые инструменты","Python, SQL, Git","+33…+46%"],["Прикладной РР","РР-агенты, Copilot, n8n, промпты","+9…+25%"],["Корпоративные системы","1РЎ, Битрикс24, amoCRM","+8…+9%"],["Офисные Рё дизайн-инструменты","Excel, Google Таблицы, Figma","в€’17…−19%"]]},{"id":"s3-hard-cont","type":"text","paragraphs":["Закономерность читается сразу: чем ближе навык Рє инженерии Рё данным, тем выше оплата. Чем ближе Рє готовым инструментам — тем РЅРёР¶Рµ."]},{"id":"s3-soft","type":"text","title":"Софт скилз: платят Р·Р° уровень задач, Р° РЅРµ Р·Р° старание","paragraphs":["Софт скилз — то, как человек работает: коммуникация, самостоятельность, ответственность, умение разбираться РІ РЅРѕРІРѕРј. РњС‹ посчитали РёС… так Р¶Рµ, как хард скилз."]},{"id":"s3-soft-table","type":"table","columns":["Навык","Вакансий","Доля","Медиана, в‚Ѕ","Рљ общей медиане"],"rows":[["Управление командой","165","5,9%","187 000 в‚Ѕ","+56%"],["Управление проектами","146","5,2%","143 550 в‚Ѕ","+20%"],["Системное мышление","176","6,3%","120 000 в‚Ѕ","0%"],["Проведение презентаций","57","2,0%","120 000 в‚Ѕ","0%"],["Самостоятельность","1 055","37,6%","117 450 в‚Ѕ","в€’2%"],["Ответственность","628","22,4%","110 000 в‚Ѕ","в€’8%"],["Аналитическое мышление","329","11,7%","100 000 в‚Ѕ","в€’17%"],["Коммуникация","197","7,0%","100 000 в‚Ѕ","в€’17%"],["Работа РІ команде","126","4,5%","95 700 в‚Ѕ","в€’20%"],["Подготовка презентаций","87","3,1%","92 850 в‚Ѕ","в€’23%"],["Внимание Рє деталям","292","10,4%","88 500 в‚Ѕ","в€’26%"],["Обучаемость","76","2,7%","87 000 в‚Ѕ","в€’28%"]]},{"id":"s3-soft-graph-title","type":"text","title":"Какие софт скилз связаны СЃ уровнем зарплаты","paragraphs":["РЎРІСЏР·СЊ — РЅРµ причина: часть надбавки объясняется уровнем должности, Р° РЅРµ самим навыком"]},{"id":"img-fig06","type":"image","src":"https://storage.ht-platform.ru/public/articles/5/article-photo-07.png","caption":"Р РёСЃСѓРЅРѕРє 6. Софт скилз Рё зарплата. Рсточник: [1]."},{"id":"s3-soft-cont","type":"text","paragraphs":["РќР° первый взгляд картина простая: управленческие навыки дают прибавку, исполнительские — нет. РќРѕ здесь легко ошибиться, Рё РјС‹ решили проверить."]},{"id":"s3-check","type":"text","title":"Проверка: дело РІ навыке или РІ должности?","paragraphs":["Р’РѕР·РјРѕР¶РЅРѕ, «управление командой» даёт +56% РЅРµ потому, что этот навык ценен сам РїРѕ себе, Р° потому, что его пишут РІ вакансиях руководителей, — Р° руководители зарабатывают больше РІ принципе. РњС‹ отделили управленческие Рё продажные позиции РїРѕ названию должности Рё пересчитали премию внутри оставшихся 2 311 обычных вакансий."]},{"id":"s3-check-table","type":"table","columns":["Навык","РќР° всей выборке","Без руководящих Рё позиций РІ продажах","Что произошло"],"rows":[["Управление проектами","+20%","+8%","премия почти исчезла"],["Системное мышление","0%","+6%","эффекта нет"],["Проведение презентаций","0%","в€’23%","ушло РІ РјРёРЅСѓСЃ"],["Самостоятельность","в€’2%","+2%","эффекта нет"],["Ответственность","в€’8%","в€’4%","ослабло"],["Аналитическое мышление","в€’17%","в€’15%","держится"],["Работа РІ команде","в€’20%","в€’15%","держится"],["Внимание Рє деталям","в€’26%","в€’20%","держится"],["Обучаемость","в€’28%","в€’23%","держится"],["Коммуникация","в€’17%","в€’25%","усилилось"]]},{"id":"s3-check-footnote","type":"accent","variant":"normal","paragraphs":["После отсечения руководящих Рё продажных позиций выборки РІ строках заметно уменьшаются. РњС‹ РїСЂРёРІРѕРґРёРј только те, РіРґРµ осталось РЅРµ меньше 20 вакансий СЃ указанной зарплатой."]},{"id":"s3-check-accent","type":"accent","variant":"normal","paragraphs":["Проверка показала: надбавка Р·Р° «управление проектами» среди обычных позиций падает СЃ +20% РґРѕ +8% — заметная её часть объясняется РЅРµ навыком, Р° уровнем должности. Сами РїРѕ себе управленческие позиции дают +23% Рє медиане, продажные +25%. Рђ РІРѕС‚ «управление командой» проверить РЅРµ удалось: после отсечения руководящих позиций там остаётся 14 вакансий СЃ указанной зарплатой — меньше нашего РїРѕСЂРѕРіР° надёжности. РџСЂРѕ этот навык РјС‹ ничего утверждать РЅРµ станем."]},{"id":"s3-check-cont","type":"text","paragraphs":["Рђ РІРѕС‚ вторая половина картины устояла. Упоминание исполнительских качеств — внимательности, обучаемости, работы РІ команде — соответствует зарплате РЅРёР¶Рµ медианы даже внутри РѕРґРЅРѕРіРѕ типа позиций. Штраф РѕС‚ 15 РґРѕ 23 процентных пунктов.","Рто РЅРµ значит, что внимательность Рё обучаемость РЅРµ РЅСѓР¶РЅС‹. РС… упоминают часто: внимание Рє деталям РІ 10,4% вакансий, ответственность РІ 22,4%. Скорее наоборот — РёС… пишут там, РіРґРµ РЅРµ РјРѕРіСѓС‚ сформулировать содержательные требования. Общие слова РїСЂРѕ качества занимают место, РЅР° котором должна быть задача."]},{"id":"s3-combos","type":"text","title":"РЎРІСЏР·РєРё навыков","paragraphs":["Отдельные навыки — это РѕРґРЅРѕ, комбинации — РґСЂСѓРіРѕРµ. РњС‹ проверили, что дают пары."]},{"id":"s3-combos-table","type":"table","columns":["РЎРІСЏР·РєР°","Вакансий","Медиана, в‚Ѕ","Рљ общей медиане"],"rows":[["Docker + Kubernetes","243","233 925 в‚Ѕ","+95%"],["LLM/GPT + RAG","401","200 000 в‚Ѕ","+67%"],["Python + Docker","411","193 125 в‚Ѕ","+61%"],["RAG + векторные базы","131","187 625 в‚Ѕ","+56%"],["Python + SQL","540","177 500 в‚Ѕ","+48%"],["Python + LLM/GPT","628","174 000 в‚Ѕ","+45%"],["Excel + SQL","95","139 200 в‚Ѕ","+16%"],["Excel + Python","89","120 000 в‚Ѕ","0%"]]},{"id":"s3-combos-cont","type":"text","paragraphs":["Последние РґРІРµ строки — РїСЂРѕ тех, чья работа сейчас меняется сильнее всего. Excel сам РїРѕ себе соответствует медиане РЅР° 19% РЅРёР¶Рµ общей. Excel вместе СЃ SQL — СѓР¶Рµ плюс 16%. Разница РІ 35 процентных пунктов Р·Р° РѕРґРёРЅ добавленный навык."]},{"id":"section-4","type":"text","title":"4. Как устроен рынок","paragraphs":[]},{"id":"s4-structure","type":"text","title":"Шесть РёР· десяти РР-вакансий — РЅРµ РїСЂРѕ разработку","paragraphs":["59,2% вакансий РІ нашей выборке относятся РЅРµ Рє разработке, Р° Рє маркетингу, продажам, аналитике, дизайну, управлению проектами Рё административным функциям."]},{"id":"s4-structure-table","type":"table","columns":["Профессия","Вакансий","Доля выборки"],"rows":[["Программист, разработчик","500","17,8%"],["Дата-сайентист","368","13,1%"],["Менеджер РїРѕ маркетингу, интернет-маркетолог","136","4,8%"],["Менеджер РїРѕ продажам, работе СЃ клиентами","103","3,7%"],["Менеджер продукта","102","3,6%"],["SMM-менеджер, контент-менеджер","102","3,6%"],["BI-аналитик, аналитик данных","100","3,6%"],["Руководитель проектов","91","3,2%"],["Дизайнер, С…СѓРґРѕР¶РЅРёРє","91","3,2%"],["Секретарь, помощник руководителя","74","2,6%"],["DevOps-инженер","73","2,6%"]]},{"id":"s4-structure-cont","type":"text","paragraphs":[["Indeed Hiring Lab РІ июле 2026 РіРѕРґР° опубликовал материал СЃ тем Р¶Рµ выводом РїРѕ американскому рынку: РРперестал быть историей только РїСЂРѕ технические профессии. Наши данные показывают то Р¶Рµ самое РІ Р РѕСЃСЃРёРё. ",{"type":"link","text":"[7]","href":"#sources-7"}],"Практический смысл для читателя простой. Работать СЃ РР РјРѕР¶РЅРѕ РёР· своей профессии — уходить РІ разработку РЅРµ обязательно. РќРѕ чем ближе задача Рє данным Рё инженерии, тем выше оплата, Рё это стоит учитывать РїСЂРё выборе направления."]},{"id":"s4-structure-graph-title","type":"text","title":"Кто РЅР° самом деле работает СЃ РР","paragraphs":["Структура выборки РїРѕ профессиональным ролям"]},{"id":"img-fig10","type":"image","src":"https://storage.ht-platform.ru/public/articles/5/article-photo-08.png","caption":"Р РёСЃСѓРЅРѕРє 7. Структура выборки РїРѕ профессиям. Рсточник: [1]."},{"id":"s4-exp","type":"text","title":"Опыт Рё деньги","paragraphs":[]},{"id":"s4-exp-table","type":"table","columns":["Требуемый опыт","Вакансий","Доля","Медиана, в‚Ѕ","Рљ общей медиане"],"rows":[["Нет опыта","171","6,1%","59 667 в‚Ѕ","в€’50%"],["РћС‚ 1 РіРѕРґР° РґРѕ 3 лет","1 029","36,6%","100 000 в‚Ѕ","в€’17%"],["РћС‚ 3 РґРѕ 6 лет","1 267","45,1%","180 000 в‚Ѕ","+50%"],["Более 6 лет","341","12,1%","248 375 в‚Ѕ","+107%"]]},{"id":"s4-exp-cont","type":"text","paragraphs":["Разрыв между новичком Рё опытным специалистом — 4,2 раза. Само РїРѕ себе это РЅРµ новость. Рнтереснее то, что РІРёРґРЅРѕ, если наложить РЅР° опыт количество требуемых навыков."]},{"id":"s4-stack","type":"text","title":"Стек догоняет опыт","paragraphs":[]},{"id":"s4-stack-table","type":"table","columns":["Требуемый опыт","0–2 навыка","3–5 навыков","6 Рё более"],"rows":[["РћС‚ 1 РіРѕРґР° РґРѕ 3 лет","100 000 в‚Ѕ","120 000 в‚Ѕ","150 510 в‚Ѕ"],["РћС‚ 3 РґРѕ 6 лет","150 000 в‚Ѕ","215 000 в‚Ѕ","216 500 в‚Ѕ"]]},{"id":"s4-stack-graph-title","type":"text","title":"Освоенный стек компенсирует РґРІР°-три РіРѕРґР° опыта","paragraphs":["Медианная зарплата РїРѕ опыту Рё числу требуемых навыков"]},{"id":"img-fig07","type":"image","src":"https://storage.ht-platform.ru/public/articles/5/article-photo-09.png","caption":"Р РёСЃСѓРЅРѕРє 8. Стек Рё опыт. Рсточник: [1]."},{"id":"s4-stack-accent","type":"accent","variant":"normal","paragraphs":["Вакансия для кандидата СЃ опытом РґРѕ трёх лет, РіРґРµ перечислено шесть Рё более технологий, предлагает примерно столько Р¶Рµ, сколько вакансия для специалиста СЃ опытом РѕС‚ трёх лет, РЅРѕ СЃ общими требованиями: 150 510 против 150 000 рублей."]},{"id":"s4-stack-cont","type":"text","paragraphs":["Рначе РіРѕРІРѕСЂСЏ, освоенный стек РІ этой выборке компенсирует примерно РґРІР°-три РіРѕРґР° опыта. Рто РЅРµ значит, что опыт РЅРµ нужен, — РЅРѕ показывает, РєСѓРґР° имеет смысл вкладывать время тому, кто только начинает."]},{"id":"s4-tech-segments","type":"text","title":"Р’ технических сегментах разрыв между СѓСЂРѕРІРЅСЏРјРё меньше","paragraphs":[]},{"id":"s4-tech-segments-table","type":"table","columns":["Сегмент","Опыт 1–3 РіРѕРґР°","Опыт 3–6 лет","Разрыв"],"rows":[["Р’СЃРµ вакансии","100 000 в‚Ѕ","180 000 в‚Ѕ","1,80x"],["Вакансии СЃРѕ словом LLM","140 000 в‚Ѕ","216 500 в‚Ѕ","1,55x"],["Вакансии СЃ SQL","140 000 в‚Ѕ","215 000 в‚Ѕ","1,54x"],["Вакансии СЃ Python","144 275 в‚Ѕ","216 500 в‚Ѕ","1,50x"]]},{"id":"s4-tech-segments-cont","type":"text","paragraphs":["РњС‹ ожидали обратного — что РІ сложных технических областях разрыв между новичком Рё специалистом окажется больше. РћРЅ оказался меньше: 1,5 раза против 1,8 РїРѕ выборке РІ целом. Начинающий РІ техническом сегменте стартует заметно выше — 140 тысяч против 100 — Рё РґРѕ СѓСЂРѕРІРЅСЏ специалиста ему остаётся пройти меньшую дистанцию."]},{"id":"s4-tech-segments-accent","type":"accent","variant":"normal","title":"Отдельное наблюдение","paragraphs":["РР· всех проверенных навыков только три встречаются тем реже, чем выше уровень позиции: Excel Рё Google Таблицы (18,7% Сѓ вакансий СЃ опытом 1–3 РіРѕРґР° против 3,5% Сѓ позиций СЃ опытом РѕС‚ шести лет), Битрикс24 Рё amoCRM (8,2% против 2,9%), n8n Рё Zapier (5,2% против 3,2%). Рто СЂРѕРІРЅРѕ тот кластер готовых инструментов, который стоит РІРЅРёР·Сѓ таблицы РїРѕ оплате. Р’СЃРµ остальные навыки ведут себя наоборот — РёС… РїСЂРѕСЃСЏС‚ тем чаще, чем выше уровень."]},{"id":"s4-geo","type":"text","title":"География","paragraphs":["Семь РёР· десяти вакансий — РІ РњРѕСЃРєРІРµ: 1 977 РёР· 2 808, это 70,4%. Медиана РїРѕ РњРѕСЃРєРІРµ — 145 000 рублей, РїРѕ остальным регионам — 97 500. Разрыв РІ 1,49 раза.","Рђ РІРѕС‚ РІ качестве описаний разница оказалась небольшой: вакансий без технических требований РІ РњРѕСЃРєРІРµ 16,8%, РІ регионах 22,0%. Среднее число перечисленных навыков — 3,76 против 3,14. Гипотезу Рѕ том, что РІ регионах требования формулируют заметно С…СѓР¶Рµ, наши данные РЅРµ подтвердили."]},{"id":"s4-geo-table","type":"table","columns":["Регион","Медиана удалённых, в‚Ѕ","Медиана офисных, в‚Ѕ"],"rows":[["РњРѕСЃРєРІР°","130 500 в‚Ѕ","152 250 в‚Ѕ"],["Регионы","97 500 в‚Ѕ","97 850 в‚Ѕ"]]},{"id":"s4-geo-graph-title","type":"text","title":"Удалёнка сближает рынки Р·Р° счёт РњРѕСЃРєРІС‹, Р° РЅРµ регионов","paragraphs":["Медианная зарплата РїРѕ формату работы"]},{"id":"img-fig08","type":"image","src":"https://storage.ht-platform.ru/public/articles/5/article-photo-10.png","caption":"Р РёСЃСѓРЅРѕРє 9. Формат работы Рё оплата. Рсточник: [1]."},{"id":"s4-geo-cont","type":"text","paragraphs":["Для москвича удалённая вакансия РІ среднем РЅР° 14% дешевле офисной. Для человека РёР· региона разницы нет вообще — 97 500 против 97 850.","РўРѕ есть разрыв между РњРѕСЃРєРІРѕР№ Рё регионами РЅР° удалёнке действительно меньше: 1,34 раза против 1,56 РІ офисном формате. РќРѕ сокращается РѕРЅ РЅРµ потому, что регионы подтянулись, Р° потому, что РњРѕСЃРєРІР° РЅР° дистанционке платит меньше. РЎРїРѕСЃРѕР±РѕРј выйти РЅР° РјРѕСЃРєРѕРІСЃРєРёРµ деньги удалённая работа РІ наших данных РЅРµ оказалась."]},{"id":"section-5","type":"text","title":"5. Что РіРѕРІРѕСЂСЏС‚ РґСЂСѓРіРёРµ исследования","paragraphs":["РњС‹ сопоставили СЃРІРѕРё результаты СЃ публикациями СЂРѕСЃСЃРёР№СЃРєРёС… Рё международных площадок. РљРѕРµ-что совпало, РєРѕРµ-что разошлось — Рё расхождения оказались интереснее совпадений."]},{"id":"s5-match","type":"table","title":"Совпало","columns":["Что РіРѕРІРѕСЂРёС‚ источник","Что показывают наши данные"],"rows":[["РРперестал быть историей только РїСЂРѕ технические профессии (Indeed Hiring Lab, июль 2026) [7]","59,2% РР-вакансий РІ Р РѕСЃСЃРёРё — РЅРµ РїСЂРѕ разработку"],["93% работодателей сталкиваются СЃ дефицитом нужных навыков Сѓ кандидатов (hh.ru) [2]","РџСЂРё этом 18,4% вакансий вообще РЅРµ сообщают, какие навыки РЅСѓР¶РЅС‹"]]},{"id":"s5-match-footnote","type":"accent","variant":"normal","paragraphs":["Отдельно: Indeed фиксирует долю РР-вакансий 4,2% рынка РЎРЁРђ. РЎРѕ своей цифрой РјС‹ её РЅРµ сравниваем — Сѓ Indeed знаменатель весь рынок, Сѓ нас выборка РїРѕ РР-запросам."]},{"id":"s5-mismatch","type":"text","title":"Разошлось","paragraphs":[[{"type":"bold","text":"Аналитическое мышление."}," Всемирный экономический форум ставит его навыком номер РѕРґРёРЅ: 7 РёР· 10 компаний называют его ключевым. ",{"type":"link","text":"[8]","href":"#sources-8"}," Р’ наших данных упоминание аналитического мышления РІ тексте вакансии соответствует медиане РЅР° 17% РЅРёР¶Рµ общей, Рё после контроля РЅР° уровень должности штраф сохраняется."]]},{"id":"s5-mismatch-accent","type":"accent","variant":"normal","paragraphs":["Разрыв между тем, что работодатели отвечают РІ опросах, Рё тем, что пишут РІ вакансиях, — РѕРґРЅРѕ РёР· самых заметных расхождений РІ нашем исследовании. Р’ анкете аналитическое мышление называют критичным. Р’ описании вакансии РѕРЅРѕ оказывается там Р¶Рµ, РіРґРµ «внимательность» Рё «обучаемость», — РІ блоке общих слов. Р’РѕР·РјРѕР¶РЅРѕ, дело ещё Рё РІ разных рынках: РІ Р РѕСЃСЃРёРё этот навык РїРѕРєР° недооценён."]},{"id":"s5-mismatch-cont","type":"text","paragraphs":[[{"type":"bold","text":"РР-навыки."}," LinkedIn сообщает, что число вакансий СЃ требованием базовой РР-грамотности выросло РЅР° 70% Р·Р° РіРѕРґ. ",{"type":"link","text":"[4]","href":"#sources-4"}," hh.ru пишет, что около 60% работодателей считают кандидатов СЃ РР-навыками более эффективными РІ рутинных задачах. ",{"type":"link","text":"[3]","href":"#sources-3"}],"Распространённость наши данные подтверждают. Рђ РІРѕС‚ СЃ оплатой РІСЃС‘ сложнее: общий тег В«LLM, GPTВ» соответствует медиане РЅР° 10% РЅРёР¶Рµ, РЅРѕ конкретные технологии внутри той Р¶Рµ темы — RAG, LangChain, векторные базы — дают РѕС‚ +47% РґРѕ +67%. Формулировка В«РР-навыки растут РІ цене» верна только для инженерной части.",[{"type":"bold","text":"Жалобы РЅР° дефицит навыков."}," РџРѕ данным hh.ru, 93% работодателей жалуются РЅР° нехватку навыков Сѓ кандидатов, более 60% фильтруют кандидатов РїРѕ навыкам. ",{"type":"link","text":"[2]","href":"#sources-2"}," РџСЂРё этом почти каждая пятая вакансия РІ нашей выборке РЅРµ сообщает, какие навыки РЅСѓР¶РЅС‹."]]},{"id":"s5-new","type":"list","title":"Чего РјС‹ РЅРµ нашли Сѓ РґСЂСѓРіРёС…","items":["Разделения РР-упоминаний РЅР° инженерный Рё пользовательский словарь СЃ оценкой разрыва РІ оплате.","РџРѕСЂРѕРіР° конкретности — СЃРІСЏР·Рё между количеством названных навыков Рё уровнем зарплаты.","Проверки премии Р·Р° софт скилз РЅР° уровень должности. Обычно её РїСЂРёРІРѕРґСЏС‚ без такого контроля.","Сопоставления разметки данных Рё построения инфраструктуры как РґРІСѓС… полюсов РѕРґРЅРѕР№ технологии."]},{"id":"s5-new-footnote","type":"accent","variant":"normal","paragraphs":["РўСЂРё источника РјС‹ проверили Рё сняли: тезис SHRM РїСЂРѕ 67% барьера, тезис РїСЂРѕ 54% организаций без планов внедрения РР Рё оценку Минцифры Рѕ дефиците 500–700 тысяч разработчиков. РќРё РѕРґРёРЅ РёР· РЅРёС… РЅРµ удалось подтвердить РїРѕ первоисточнику."]},{"id":"section-6","type":"text","title":"6. Что СЃ этим делать","paragraphs":[]},{"id":"s6-candidate","type":"list","title":"Если РІС‹ ищете работу","ordered":true,"items":[[{"type":"bold","text":"Различайте общие слова Рё конкретные технологии."}," Вакансия СЃ тегом В«ChatGPTВ» платит РІ 2,7 раза меньше вакансии СЃ тегом В«LLMВ», Р° слово В«RAGВ» РІ описании соответствует медиане РЅР° 67% выше. Словарь работодателя показывает, насколько РѕРЅ РІ теме."],[{"type":"bold","text":"Считайте навыки РІ описании."}," Если названо меньше трёх конкретных требований — скорее всего, работодатель сам РЅРµ определился, РєРѕРіРѕ ищет. Медиана таких вакансий РЅР° 8–17% РЅРёР¶Рµ общей."],[{"type":"bold","text":"Смотрите, зачем компании РР."}," «Генерировать контент» Рё «размечать данные» — РЅРёР¶РЅРёР№ сегмент. «Строить инфраструктуру» — верхний. Разброс РІ три раза."],[{"type":"bold","text":"Стек догоняет опыт."}," Вакансия для кандидата СЃ опытом РґРѕ трёх лет Рё шестью технологиями РІ требованиях предлагает столько Р¶Рµ, сколько вакансия для специалиста СЃ опытом РѕС‚ трёх лет, РЅРѕ без конкретики."],[{"type":"bold","text":"Развивайтесь вглубь, Р° РЅРµ вширь РїРѕ резюме."}," Речь РЅРµ Рѕ том, чтобы дописать модные слова РІ профиль. Реальная разница возникает, РєРѕРіРґР° РІС‹ осваиваете смежный инструмент Рё начинаете РёРј пользоваться РІ работе. Excel СЂСЏРґРѕРј СЃ РРтянет медиану РІРЅРёР· РЅР° 19%, Excel вместе СЃ SQL — СѓР¶Рµ плюс 16%. РћРґРЅР° освоенная технология меняет положение РЅР° 35 пунктов."],[{"type":"bold","text":"РќРµ обязательно уходить РІ РРў, РЅРѕ техническая часть окупается."}," Шесть РёР· десяти РР-вакансий — РЅРµ РїСЂРѕ разработку. Работать СЃ РР РјРѕР¶РЅРѕ РёР· любой профессии, Р° зарабатывать больше — сдвигаясь РІ сторону данных Рё инженерии."]]},{"id":"s6-candidate-graph-title","type":"text","title":"Как читать вакансию Р·Р° 30 секунд","paragraphs":["Четыре проверки, которые РІРёРґРЅРѕ РїСЂСЏРјРѕ РІ описании"]},{"id":"img-fig11","type":"image","src":"https://storage.ht-platform.ru/public/articles/5/article-photo-11.png","caption":"Р РёСЃСѓРЅРѕРє 10. Памятка соискателю. Рсточник: [1]."},{"id":"s6-employer","type":"list","title":"Если РІС‹ нанимаете","ordered":true,"items":[[{"type":"bold","text":"Опишите задачу, Р° РЅРµ технологию."}," Вакансии СЃ четырьмя Рё более требованиями имеют медиану РЅР° 46% выше. Дело РЅРµ РІ деньгах, Р° РІ том, что понятная вакансия притягивает понятных кандидатов."],[{"type":"bold","text":"Проверьте СЃРІРѕРё формулировки."}," «Опыт работы СЃ РРВ» может означать что СѓРіРѕРґРЅРѕ — РѕС‚ использования ChatGPT РґРѕ построения RAG-пайплайна. Уточните, что именно должен уметь человек."],"РњС‹ СѓР¶Рµ приводили эту цифру: 93% работодателей жалуются РЅР° нехватку навыков — РїСЂРё том что каждая пятая вакансия РЅРµ сообщает, какие навыки РЅСѓР¶РЅС‹.",[{"type":"bold","text":"Разделяйте хард скилз Рё софт скилз РІ описании."}," Сейчас РѕРЅРё лежат РІ РѕРґРЅРѕРј СЃРїРёСЃРєРµ, Рё РїРѕ нему непонятно, что критично, Р° что желательно."]]},{"id":"s6-employer-graph-title","type":"text","title":"РћРґРЅР° вакансия, РґРІР° описания","paragraphs":["Как формулировка связана СЃ уровнем медианы"]},{"id":"img-fig12","type":"image","src":"https://storage.ht-platform.ru/public/articles/5/article-photo-12.png","caption":"Р РёСЃСѓРЅРѕРє 11. Два описания РѕРґРЅРѕР№ вакансии. Рсточник: [1]."},{"id":"s6-employer-example","type":"accent","variant":"warning","title":"Как пишут сейчас vs как стоило Р±С‹","paragraphs":["Пример собран нами для иллюстрации, это РЅРµ реальная вакансия.","Как есть: В«Рщем специалиста РїРѕ РР. Опыт работы СЃ нейросетями, ответственность, внимательность Рє деталям, умение работать РІ команде». Ноль конкретных требований, медиана в€’8%.","Как стоило Р±С‹: «Собрать RAG-пайплайн РїРѕ внутренней базе знаний. Python, LangChain, Qdrant, Docker. Замеряем precision РЅР° выборке поддержки». Пять конкретных требований, медиана +46%."]},{"id":"section-7","type":"text","title":"7. Рћ чём это РІСЃС‘ РіРѕРІРѕСЂРёС‚","paragraphs":[]},{"id":"s7-cant-describe","type":"text","title":"Рынок РЅРµ умеет описывать то, что ищет","paragraphs":["Главное, что РјС‹ увидели Р·Р° цифрами, — РЅРµ РїСЂРѕ РР. РћРЅРѕ РїСЂРѕ то, как рынок труда разговаривает сам СЃ СЃРѕР±РѕР№.","Половина вакансий формулирует требования настолько общо, что РїРѕ РЅРёРј нельзя понять, РєРѕРіРѕ ищут. Слова РїСЂРѕ РРиспользуются как маркер современности, Р° РЅРµ как описание работы. Софт скилз перечисляются там, РіРґРµ РЅРµ сформулированы задачи.","Работодатель РїСЂРё этом искренне жалуется, что кандидаты РЅРµ РїРѕРґС…РѕРґСЏС‚. Рђ кандидат РЅРµ понимает, РєСѓРґР° откликаться, потому что РїРѕ описанию РЅРµ отличить серьёзную инженерную позицию РѕС‚ «поработайте СЃ нейросетями»."]},{"id":"s7-cant-describe-accent","type":"accent","variant":"normal","paragraphs":["РњС‹ измеряем РЅРµ потребность рынка, Р° то, как рынок её формулирует. Рто разные вещи. Скорее всего, компаниям РЅСѓР¶РЅС‹ более конкретные специалисты, чем те, которых РѕРЅРё описывают РІ вакансиях, — просто перевести реальную потребность РІ текст объявления оказывается сложно."]},{"id":"s7-soft","type":"text","title":"Отдельно РїСЂРѕ софт скилз","paragraphs":["Наша проверка показала неприятную вещь: то, что выглядело как премия Р·Р° управленческие навыки, РІРѕ РјРЅРѕРіРѕРј оказалось премией Р·Р° управленческую должность. Рђ исполнительские качества — внимательность, обучаемость, работа РІ команде — устойчиво соседствуют СЃ зарплатой РЅРёР¶Рµ медианы.",["РР· этого РЅРµ следует, что софт скилз РЅРµ важны. Следует РґСЂСѓРіРѕРµ: ",{"type":"bold","text":"РІ текстах вакансий РѕРЅРё РїРѕРєР° почти РЅРµ несут информации."}," РС… пишут РїРѕ инерции, одинаковыми формулировками, независимо РѕС‚ того, что человеку предстоит делать."]]},{"id":"s7-soft-table","type":"table","columns":["Как есть сейчас","Как могло Р±С‹ быть"],"rows":[["«Ответственность, внимательность, работа РІ команде» — РІ 22% вакансий РїРѕРґСЂСЏРґ.","Какие именно качества РЅСѓР¶РЅС‹ для этой задачи Рё почему."],["Софт скилз смешаны СЃ хард скилз РІ общем СЃРїРёСЃРєРµ.","Раздельные поля — что РЅСѓР¶РЅРѕ уметь делать Рё как РЅСѓР¶РЅРѕ работать."],["Оценка РЅР° собеседовании «на глаз».","Рзмеримая диагностика, сопоставимая между кандидатами."],["Кандидат пишет то Р¶Рµ самое РІ резюме.","Кандидат понимает СЃРІРѕРё сильные стороны Рё может РёС… подтвердить."]]},{"id":"s7-soft-cont","type":"text","paragraphs":["РџРѕРєР° РѕР±Рµ стороны описывают софт скилз одинаковыми словами, эти слова мало что значат. Ценность появится тогда, РєРѕРіРґР° рынок научится определять РёС… достоверно — так, чтобы формулировка работодателя Рё самооценка кандидата были РїСЂРѕ РѕРґРЅРѕ Рё то Р¶Рµ."]},{"id":"s7-soft-product","type":"accent","variant":"dark","paragraphs":["РњС‹ РІ HT Platform строим сервис РІРѕРєСЂСѓРі этой Р¶Рµ мысли. РЈ нас хард скилз Рё софт скилз — отдельные поля профиля. Софт скилз РјРѕР¶РЅРѕ РЅРµ декларировать, Р° пройти диагностику Рё получить измеримый результат. Работодатель РІРёРґРёС‚ РЅРµ «ответственный Рё внимательный», Р° профиль, сопоставимый между кандидатами.","Рто РЅРµ решает проблему рынка целиком. РќРѕ структурированные данные СЃ обеих сторон — первый шаг Рє тому, чтобы работодатель Рё кандидат наконец говорили РѕР± РѕРґРЅРѕРј Рё том Р¶Рµ."]},{"id":"s7-helps","type":"list","title":"Что помогло Р±С‹ рынку","ordered":true,"items":[[{"type":"bold","text":"Работодателю."}," Разделять хард скилз Рё софт скилз РІ описании. Сейчас РѕРЅРё лежат РІ РѕРґРЅРѕРј СЃРїРёСЃРєРµ, Рё РїРѕ нему непонятно, что критично, Р° что желательно."],[{"type":"bold","text":"Работодателю."}," Формулировать задачу конкретнее. «Строить RAG-пайплайн для внутренней базы знаний» РіРѕРІРѕСЂРёС‚ больше, чем «опыт работы СЃ РРВ»."],[{"type":"bold","text":"Кандидату."}," Понимать СЃРІРѕРё сильные стороны конкретно. РўРѕРіРґР° отклик попадает РІ те вакансии, РіРґРµ РІС‹ действительно подходите."],[{"type":"bold","text":"Кандидату."}," Читать описание целиком, Р° РЅРµ заголовок. РњС‹ показали, что РїРѕ формулировкам РјРѕР¶РЅРѕ предсказать Рё уровень задач, Рё РїРѕСЂСЏРґРѕРє зарплаты."]]},{"id":"s7-helps-graph-title","type":"text","title":"Где рынок теряет РґСЂСѓРі РґСЂСѓРіР°","paragraphs":["Работодатель Рё кандидат описывают РѕРґРЅРѕ Рё то Р¶Рµ разными словами"]},{"id":"img-fig13","type":"image","src":"https://storage.ht-platform.ru/public/articles/5/article-photo-13.png","caption":"Р РёСЃСѓРЅРѕРє 12. Разрыв РІ языке рынка. Рсточник: [1]."},{"id":"section-8","type":"text","title":"8. Как подготовиться Рє будущему СЃ РР, которое СѓР¶Рµ наступило","paragraphs":["Рынок труда впустил РР РІ СЃРІРѕРё объятия. Вектор намечен, динамика сумасшедшая. Рто значит, что осваивать новые навыки РЅСѓР¶РЅРѕ незамедлительно."]},{"id":"s8-candidates","type":"text","title":"Соискателям","paragraphs":["Работа СѓР¶Рµ сегодня требует этих компетенций РІ большинстве сфер деятельности. РќРѕ чтобы РЅРµ проиграть, поставив РЅР° ошибочное направление, сначала проверьте, РіРґРµ вам интереснее всего развиваться Рё что вас мотивирует. Ртолько потом начинайте изучать РР Рё практиковаться РІ применении именно Рє этой области.","РќРµ переживайте, что прошлый опыт окажется потерян. Сегодня РІСЃС‘ меняется РїРѕ месяцам, Р° РЅРµ РїРѕ годам, так что накопленный опыт РЅРµ обесценивается: РѕРЅ переносится РІ РЅРѕРІСѓСЋ область быстрее, чем кажется.","Рђ чтобы понять, РіРґРµ эта «ваша сфера», используйте научно обоснованные методики: профессиональные инструменты психологической диагностики Рё профориентации. Рто фундамент, который РјРѕР¶РЅРѕ получить быстро."]},{"id":"s8-candidates-product","type":"accent","variant":"dark","paragraphs":["Наш сервис сегодня даёт такой уровень диагностики бесплатно: РІС‹ сможете проверить уровень своей мотивации Рё понять структуру личности — что вдохновляет вас РІ работе Рё РіРґРµ Сѓ вас выше потенциал развития."]},{"id":"s8-employers","type":"text","title":"Работодателям","paragraphs":["Чтобы успеть Р·Р° РіРѕРЅРєРѕР№ развития, оказаться впереди или хотя Р±С‹ РЅРµ отстать РѕС‚ конкурентов, начинайте изучать Рё использовать РР РІ СЃРІРѕРёС… задачах. Общайтесь СЃ технарями, чтобы лучше понимать, что Рё как работает. Так РІС‹ быстрее найдёте новые таланты — тех, кто поднимет компанию РЅР° следующий уровень.","Рспользуйте профессиональные инструменты для диагностики софт скилз, чтобы заранее увидеть потенциал кандидата. Сегодня это важнее прошлого опыта, потому что РІСЃС‘ меняется молниеносно."]},{"id":"s8-employers-product","type":"accent","variant":"dark","paragraphs":["РќР° платформе HT Platform диагностика мотивации Рё структуры личности доступна бесплатно — РѕРЅР° показывает, что вдохновляет кандидата РІ работе Рё РіРґРµ Сѓ него выше потенциал развития. Р’С‹ видите подробный отчёт РїРѕ потенциалу готовых кандидатов Рё процент совместимости СЃ конкретной позицией."]},{"id":"final-line","type":"text","paragraphs":[[{"type":"bold","text":"Будьте впереди. Смотрите РІ будущее, которое СѓР¶Рµ наступило!"}]]},{"id":"how-we-counted","type":"text","title":"Как РјС‹ считали","paragraphs":[[{"type":"bold","text":"РЎР±РѕСЂ."}," 47 поисковых запросов РїРѕ hh.ru, связанных СЃ РР, регион — Р РѕСЃСЃРёСЏ, август 2026 РіРѕРґР°. Собрано 4 444 вакансии после удаления дублей РїРѕ паре «название — работодатель»."],[{"type":"bold","text":"Очистка."}," hh.ru ищет РїРѕ отдельным словам, поэтому РІ выборку попадали посторонние вакансии: например, запрос «инженер машинного обучения» находил «инженера-конструктора». РњС‹ проверили каждое описание РЅР° наличие РР-маркеров Рё оставили только те, РіРґРµ РР СѓРїРѕРјСЏРЅСѓС‚ РІ названии должности, РІ тегах навыков или РІ требованиях. Осталось 2 808 вакансий — это Рё есть база всех расчётов РІ статье."],[{"type":"bold","text":"Зарплата."}," Считали медиану, Р° РЅРµ среднее: медиана устойчива Рє выбросам. Если РІ вакансии указана вилка, брали середину. Зарплаты «до вычета налога» пересчитывали РЅР° СЂСѓРєРё РїРѕ прогрессивной шкале НДФЛ 2026 РіРѕРґР°. Зарплата указана РІ 993 вакансиях РёР· 2 808 — РІСЃРµ медианы считаются РїРѕ РЅРёРј."],[{"type":"bold","text":"Навыки."}," Каждое описание проверялось словарём РёР· 78 технологий Рё 18 РіРёР±РєРёС… качеств РїРѕ регулярным выражениям. Р’ публикацию попадали только те, Сѓ которых РЅРµ меньше 20 вакансий СЃ указанной зарплатой, — иначе медиана неустойчива."]]},{"id":"how-we-counted-graph-title","type":"text","title":"Путь РѕС‚ запроса РґРѕ расчёта","paragraphs":["Как 47 запросов превратились РІ базу для медиан"]},{"id":"img-fig14","type":"image","src":"https://storage.ht-platform.ru/public/articles/5/article-photo-14.png","caption":"Р РёСЃСѓРЅРѕРє 13. Р’РѕСЂРѕРЅРєР° СЃР±РѕСЂР° Рё очистки данных. Рсточник: [1]."},{"id":"how-limits","type":"list","title":"Ограничения","items":["РњС‹ анализируем тексты вакансий, Р° РЅРµ реальные потребности компаний. Рто разные вещи.","Зарплата указана только РІ 35% вакансий. Вакансии без зарплаты РјРѕРіСѓС‚ отличаться систематически.","Выборка собрана РїРѕ РР-запросам, поэтому её нельзя сравнивать СЃ рынком труда РІ целом.","РџРѕ каждому запросу РјС‹ забирали РЅРµ более 300 вакансий — это ограничение РїРѕРёСЃРєР° hh.ru, Р° РЅРµ полная выгрузка рынка.","Корреляция РЅРµ означает причину. РњС‹ показываем, какие слова соседствуют СЃ какими зарплатами, Р° РЅРµ то, что добавление слова РІ резюме поднимет РґРѕС…РѕРґ."]},{"id":"sources","type":"references","title":"Рсточники","items":[{"title":"HT Platform. Собственный СЃР±РѕСЂ данных: hh.ru, 47 поисковых запросов, 2 808 вакансий после очистки, август 2026. Методология Рё словари терминов доступны РїРѕ запросу."},{"title":"hh.ru. Ртоги рынка труда 2025 Рё тренды 2026."},{"title":"hh.ru. Рсследование Рѕ влиянии РР-навыков РЅР° эффективность сотрудников."},{"title":"LinkedIn. Skills on the Rise: The Fastest-Growing Skills in 2026. Сервис ограничен РЅР° территории Р Р¤, ссылку РЅРµ РїСЂРёРІРѕРґРёРј."},{"title":"Indeed Hiring Lab. AI Tracker.","link":"https://github.com/hiring-lab/ai-tracker"},{"title":"Indeed Hiring Lab. AI and Job Postings: From Destruction to Creation? 08.07.2026."},{"title":"Indeed Hiring Lab. AI Is No Longer Just a Tech Occupation Story. 08.07.2026."},{"title":"World Economic Forum. The Future of Jobs Report 2025, раздел В«Skills outlookВ».","link":"https://reports.weforum.org"},{"title":"SHRM. The State of AI in HR 2026. РћРїСЂРѕСЃ 1 908 HR-специалистов, 31.03.2026.","link":"https://shrm.org"},{"title":"Хабр. Анализ более 100 тысяч вакансий hh.ru Р·Р° I квартал 2026.","link":"https://habr.com/ru/articles/1023566/"}]}]'),iC={id:G4,title:Y4,description:Q4,createdAt:Z4,readTime:J4,coverUrl:X4,category:eC,tags:tC,seo:rC,author:nC,toc:aC,blocks:oC},sC="ai-agentic-development-2026",lC="Что сегодня может небольшая команда СЃ РР-контуром: 68 сценариев РёР· практики",cC="Р’ исследовании РР-вакансий РјС‹ разобрали 2 808 объявлений Рё увидели: рынок платит РЅРµ Р·Р° умение открыть нейросеть, Р° Р·Р° инженерную работу РІРѕРєСЂСѓРі неё. Р’ этой статье РјС‹ решили показать — как эта работа выглядит РЅР° практике Рё что РёР· неё доступно обычному специалисту или небольшой команде без серьёзных бюджетов. Рассказываем РЅР° своём опыте Рё раскладываем РїРѕ полочкам 68 сценариев РїРѕ девяти сферам.",uC="10.09.2026",dC="18 РјРёРЅ",fC="https://storage.ht-platform.ru/public/articles/6/article-photo-01.png",pC="skills",hC=["#возможности-РёРё","#РёРё-контур","#РёРё-для-работы","#agentic-development","#автоматизация","#карьера-2026","#опыт-ht_platform"],mC={title:"Что может небольшая команда СЃ РР-контуром: 68 сценариев РёР· практики | HT Platform",description:"Разобрали, что сегодня закрывает небольшая команда СЃ настроенным agentic development — РІ разработке, аналитике, маркетинге, продажах, финансах Рё найме. Наши кейсы Рё 68 сценариев РїРѕ девяти сферам"},gC={id:"akirin",name:"Алексей РљРёСЂРёРЅ",role:"Основатель HT Platform",avatar:"https://storage.ht-platform.ru/public/staff/kir-photo.jpg"},yC=[{id:"why-this-article",title:"Зачем эта статья"},{id:"convince",title:"Сначала РЅРµ получалось убедить даже СЃРІРѕРёС…"},{id:"what-we-did",title:"Что РјС‹ сделали"},{id:"why-not-everyone",title:"Почему это работает РЅРµ Сѓ всех"},{id:"economics",title:"Вторая причина: СЌРєРѕРЅРѕРјРёРєР°"},{id:"nine-spheres",title:"Горизонт возможностей: девять сфер"},{id:"small-team",title:"Что РёР· этого доступно небольшой команде"},{id:"honest-limits",title:"Честные границы"},{id:"why-small-teams",title:"Почему это особенно важно небольшим командам"},{id:"open-to-share",title:"РњС‹ открыты Рє обмену опытом"},{id:"sources",title:"Рсточники"}],vC=JSON.parse('[{"id":"why-this-article","type":"text","title":"Зачем эта статья","paragraphs":[["Недавно РјС‹ опубликовали исследование рынка РР-вакансий: собрали 2 808 описаний СЃ hh.ru Рё посчитали, Р·Р° что работодатели действительно платят. Главный вывод оказался неожиданным даже для нас. Слово В«ChatGPTВ» РІ вакансии соответствует медиане РЅР° 24% РЅРёР¶Рµ рыночной, слово В«RAGВ» — РЅР° 67% выше. Рынок платит РЅРµ Р·Р° знакомство СЃ нейросетями, Р° Р·Р° умение собрать РёР· РЅРёС… работающую систему. ",{"type":"link","text":"[1]","href":"#sources-1"}],"Параллельно РјС‹ пообщались СЃРѕ знакомыми РёР· разных компаний — РѕС‚ небольших студий РґРѕ крупных банков. Картина везде похожая: РРиспользуют РІСЃРµ, РЅРѕ полноценно настроенного контура нет почти РЅРё Сѓ РєРѕРіРѕ. Есть РїРѕРґРїРёСЃРєРё, есть отдельные удачные эксперименты, есть скепсис после неудачных. Больших прорывов РЅРµ РІРёРґРЅРѕ РЅРё РІ малом бизнесе, РЅРё РІ РєСЂСѓРїРЅРѕРј.","Рта статья — РїСЂРѕ РґСЂСѓРіРѕР№ уровень использования РР. РџСЂРѕ будущее, которое подкралось незаметно Рё СѓР¶Рµ меняет рынок труда — тот самый рынок, который, СЃСѓРґСЏ РїРѕ нашему исследованию, РїРѕРєР° РѕР± этом РЅРµ догадывается. РњС‹ небольшая команда, Рё РІСЃРµ описанные кейсы РјС‹ сначала собрали сами для себя. РќРµ столько потому, что хотели быть первыми, сколько потому, что РїРѕ-РґСЂСѓРіРѕРјСѓ РЅРµ выжить: нас мало, бюджеты ограничены, Р° делать РЅСѓР¶РЅРѕ столько Р¶Рµ, сколько командам РІ десять раз больше."]},{"id":"why-this-article-accent","type":"accent","variant":"normal","paragraphs":["Сразу РѕРіРѕРІРѕСЂРёРјСЃСЏ. РњС‹ РЅРµ будем обещать «рост РІ десять раз» Рё РЅРµ станем убеждать, что РРзаменит людей. Наш опыт скромнее Рё конкретнее: задачи, которые раньше требовали отдела или подрядчика, сейчас закрывают РѕРґРёРЅ-РґРІР° человека. РњС‹ покажем, какие именно, — Р° РІС‹ решите, что РёР· этого применимо Сѓ вас."]},{"id":"convince","type":"text","title":"Сначала РЅРµ получалось убедить даже СЃРІРѕРёС…","paragraphs":["РљРѕРіРґР° РјС‹ предложили всерьёз вложиться РІ РР-инструменты внутри команды, идею РЅРµ поддержали. РќРµ поддержал даже РѕРґРёРЅ РёР· самых опытных наших коллег — человек, который РјРЅРѕРіРѕ лет собирал команды разработки Рё видел РЅРµ РѕРґРёРЅ технологический тренд. Аргументы были разумные: РїРѕРґРѕР±РЅРѕРµ СѓР¶Рµ обещали, ресурсы ограничены, результат неочевиден. Ресурсы РїРѕРґ это РЅРµ выделили.","РњС‹ собрали первый контур небольшой РіСЂСѓРїРїРѕР№, фактически РЅР° энтузиазме. Рђ дальше произошло то, ради чего эта статья Рё пишется: скептик попробовал сам — Рё через несколько недель собрал работающее приложение Р·Р° день. РќРµ прототип РЅР° салфетке, Р° инструмент, которым пользуется РІСЃСЏ команда.","Дальше РѕРЅ начал брать задачи, Рѕ которых раньше даже РЅРµ мечтал. Освободившееся время ушло РЅР° задачи РґСЂСѓРіРѕРіРѕ СѓСЂРѕРІРЅСЏ — те, РґРѕ которых Сѓ руководителя обычно РЅРµ РґРѕС…РѕРґСЏС‚ СЂСѓРєРё."]},{"id":"convince-accent","type":"accent","variant":"light","paragraphs":["РњС‹ РЅРµ смеёмся над скепсисом — РѕРЅ обоснованный. Дело РІ РґСЂСѓРіРѕРј: РїРѕРєР° человек РЅРµ попробовал сам, объяснить разницу словами почти невозможно. РњС‹ пробовали. РќРµ получилось."]},{"id":"what-we-did","type":"text","title":"Что РјС‹ сделали","paragraphs":["РќРёР¶Рµ — то, что изменилось Сѓ нас Р·Р° несколько месяцев. РњС‹ называем некоторые системы, потому что без РЅРёС… картина неполная; как именно РІСЃС‘ соединено — отдельная тема."]},{"id":"case-1-feature","type":"textWithImage","imageSrc":"https://storage.ht-platform.ru/public/articles/6/article-photo-02.png","text":["Backend-фича — новые поля, новая структура данных — оценивалась РІ 1–2 месяца разработки. Сделали Р·Р° несколько дней: агент пишет РєРѕРґ РїРѕ подготовленному РўР—, разработчик проверяет Рё принимает."],"imagePosition":"right"},{"id":"case-2-budget","type":"textWithImage","imageSrc":"https://storage.ht-platform.ru/public/articles/6/article-photo-03.png","text":["РџРѕС…РѕР¶РёР№ РїРѕ смыслу проект — приложение для СЃР±РѕСЂРєРё отчётов через РР— заказывали РЅР° стороне Р·Р° 2,5 млн рублей. Сегодня такая задача делается внутри спринта силами РґРІСѓС… человек, СЃ теми Р¶Рµ возможностями. РўРѕРіРґР° это была нормальная рыночная цена — изменилась РЅРµ цена, Р° стоимость самой задачи."],"imagePosition":"left"},{"id":"case-3-feedback","type":"textWithImage","imageSrc":"https://storage.ht-platform.ru/public/articles/6/article-photo-04.png","text":["Разбор обратной СЃРІСЏР·Рё РѕС‚ клиентов — сотни ответов Рё документов — занимал РґРЅРё Рё недели. Занимает минуты: агент режет массив РЅР° срезы РїРѕ темам, сегментам Рё ответственным, выводы наглядно визуализируются Рё сразу СѓС…РѕРґСЏС‚ РІ продуктовые задачи."],"imagePosition":"right"},{"id":"case-4-marketing","type":"textWithImage","imageSrc":"https://storage.ht-platform.ru/public/articles/6/article-photo-05.png","text":["Функции маркетинга — контент, сайт, презентации, аналитика, креативы — закрывала Р±С‹ команда РёР· 4–5 человек. Закрывает РѕРґРёРЅ специалист СЃ РР-контуром."],"imagePosition":"left"},{"id":"order-from-chaos","type":"text","title":"РџРѕСЂСЏРґРѕРє вместо хаоса","paragraphs":[]},{"id":"img-task-chain","type":"image","src":"https://storage.ht-platform.ru/public/articles/6/article-photo-06.png"},{"id":"order-from-chaos-cont","type":"text","paragraphs":["РЎ ростом числа задач начался хаос. Продуктовые задачи Рё разработка жили РІ разных системах, СЃРІСЏР·СЊ между РЅРёРјРё терялась. Через РґРІРµ недели было трудно вспомнить, что Р·Р° задача Рё РІ чём её детали, — историю собирали РїРѕ людям, плодились ошибки.","Сейчас Сѓ каждой задачи — структура Рё СЃРІСЏР·СЊ СЃ остальными: бизнес-цель в†’ продуктовая задача в†’ задачи разработки в†’ РєРѕРґ в†’ тестирование. После выполнения задача дополняется макетами, схемами Рё результатом. Любую фичу РјРѕР¶РЅРѕ поднять СЃРѕ всей историей изменений. РЎРІСЏР·РєР° Outline — Jira — GitLab. Часть рутины автоматизирована: РѕС‚ проставления компонентов РґРѕ публикации MR."]},{"id":"case-5-techlead-agent","type":"textWithImage","imageSrc":"https://storage.ht-platform.ru/public/articles/6/article-photo-07.png","text":[[{"type":"bold","text":"Техлид, которого РЅРµ было."}," Раскладывать задачу СЃ учётом всех микросервисов было некому, разработчики получали поверхностное РўР—. Теперь агент раскладывает СЌРїРёРє РЅР° подзадачи СЃ критериями приёмки Рё картой затронутых микросервисов, разработчик делает ревью РўР— Рё берёт РІ работу. Переделок РІ разы меньше."]],"imagePosition":"left"},{"id":"case-6-meeting-to-tracker","type":"textWithImage","imageSrc":"https://storage.ht-platform.ru/public/articles/6/article-photo-08.png","text":[[{"type":"bold","text":"Протоколы встреч."}," Писались руками или РЅРµ писались РІРѕРІСЃРµ, договорённости терялись. Теперь встреча расшифровывается, решения Рё задачи попадают РІ трекер без ручной обработки — легко проверить, что РІСЃС‘ обсуждённое учтено."]],"imagePosition":"right"},{"id":"case-7-morning-dashboard","type":"textWithImage","imageSrc":"https://storage.ht-platform.ru/public/articles/6/article-photo-09.png","text":[[{"type":"bold","text":"Утренний дашборд."}," Управленческий контекст Р¶РёР» РІ разных источниках — задачи, РїРёСЃСЊРјР°, итоги встреч, — Рё РЅР° его СЃР±РѕСЂ уходило время каждое утро. Теперь показатели, статусы задач Рё СЃСЂРѕРєРё подтягиваются РёР· рабочих систем сами Рё сверяются между СЃРѕР±РѕР№."]],"imagePosition":"left"},{"id":"case-8-executive-assistant","type":"textWithImage","imageSrc":"https://storage.ht-platform.ru/public/articles/6/article-photo-10.png","text":[[{"type":"bold","text":"Ассистент руководителя."}," Календарь, ответы РЅР° РїРёСЃСЊРјР°, документы для разных инстанций съедали часы Рё РґРЅРё. Теперь ассистент читает контекст РёР· разных источников, ставит встречи, готовит черновики Рё предлагает варианты решений — человек финализирует."]],"imagePosition":"right"},{"id":"case-9-client-search","type":"textWithImage","imageSrc":"https://storage.ht-platform.ru/public/articles/6/article-photo-11.png","text":[[{"type":"bold","text":"РџРѕРёСЃРє клиентов."}," Упирался РІ ручной СЃР±РѕСЂ сведений Рѕ компаниях Рё переписку РЅР° недели. Теперь СЃР±РѕСЂ РёР· открытых источников, проверка актуальности Рё первичный контакт РёРґСѓС‚ РїРѕ настроенному процессу, Р° менеджер подключается Рє тем, кто ответил."]],"imagePosition":"left"},{"id":"two-examples","type":"text","paragraphs":["Два примера, чтобы было понятно, как это выглядит РІ работе.",[{"type":"bold","text":"Роадмап."}," РЈ нас РѕРЅ лежит РІ общем хранилище как обычный документ. Агент читает его первым — раньше спецификаций Рё трекера. Поэтому любая новая задача раскладывается СЃ учётом того, РєСѓРґР° движется РїСЂРѕРґСѓРєС‚ Рё какие цели стоят РЅР° каждом этапе. РљРѕРіРґР° роадмап меняется, РЅРёРєРѕРіРѕ РЅРµ РЅСѓР¶РЅРѕ уведомлять: следующий запрос Рє агенту СѓР¶Рµ учитывает изменения. Роадмап перестал быть презентацией раз РІ квартал Рё стал живым контекстом."],[{"type":"bold","text":"Обратная СЃРІСЏР·СЊ."}," После очередного раунда общения СЃ пользователями Сѓ нас лежало несколько десятков документов — ответы, заметки, расшифровки. Раньше кто-то садился Рё неделю читал, анализировал. Сейчас агент Р·Р° минуты раскладывает РІСЃС‘ РїРѕ темам, считает частоту, вытаскивает цитаты Рё формирует СЃРїРёСЃРѕРє гипотез СЃ приоритетом. Продакт открывает РЅРµ сырые тексты, Р° готовый срез СЃ обдуманными идеями — Рё сразу заводит задачи."]]},{"id":"why-not-everyone","type":"text","title":"Почему это работает РЅРµ Сѓ всех","paragraphs":["Самый частый ответ, который РјС‹ слышим: «мы тоже пользуемся нейросетями, РјРЅРѕРіРѕ чего пробуем». Разница РЅРµ РІ модели Рё РЅРµ РІ РїРѕРґРїРёСЃРєРµ. РћРЅР° РІ том, что РІРёРґРёС‚ РР Рё что ему разрешено делать.",["Р’ индустрии для этого СѓР¶Рµ есть названия. ",{"type":"bold","text":"Agentic development"}," — агентная разработка: РР РЅРµ подсказывает, Р° выполняет задачи внутри рабочих систем — заводит тикеты, пишет РєРѕРґ, открывает запросы РЅР° слияние. ",{"type":"bold","text":"Context engineering"}," — инженерия контекста: работа над тем, что именно агент РІРёРґРёС‚, РІ каком РїРѕСЂСЏРґРєРµ Рё СЃ каким приоритетом. Второе важнее первого. Без выстроенного контекста агент делает быстро, РЅРѕ РЅРµ совсем то."]]},{"id":"fig01-graph-title","type":"text","title":"Рнструмент отвечает, контур работает","paragraphs":["РћРґРЅР° Рё та Р¶Рµ нейросеть РІ РґРІСѓС… режимах использования"]},{"id":"img-fig01","type":"image","src":"https://storage.ht-platform.ru/public/articles/6/article-photo-12.png","caption":"Р РёСЃСѓРЅРѕРє 1. Отдельный инструмент Рё РР-контур."},{"id":"why-not-everyone-cont","type":"text","paragraphs":["Р’ первом случае РІС‹ каждый раз приносите контекст руками: копируете РєСѓСЃРѕРє таблицы, объясняете, что Р·Р° проект, пересказываете, что решили РЅР° прошлой встрече. Нейросеть отвечает — РІС‹ переносите ответ обратно. Полезно, РЅРѕ потолок РЅРёР·РєРёР№.","Р’Рѕ втором случае агент подключён Рє тем местам, РіРґРµ работа реально живёт: задачи, файлы, переписка, таблицы, документы, РєРѕРґ. Р Сѓ него есть право РЅРµ только читать, РЅРѕ Рё действовать — создать, изменить, отправить, проверить. РЈ нас это устроено так: агент читает источники РІ фиксированном РїРѕСЂСЏРґРєРµ — сначала роадмап Рё документы, потом спецификации РІ базе знаний, потом статусы РІ трекере. Поэтому РѕРЅ раскладывает задачу так, как раньше делал Р±С‹ РґРѕСЂРѕРіРѕР№ техлид: понимая, РєСѓРґР° движется РїСЂРѕРґСѓРєС‚ Рё какие части системы затронет изменение."]},{"id":"why-not-everyone-accent","type":"accent","variant":"normal","paragraphs":[["Рменно этот переход Рё объясняет цифры РёР· первого исследования. «Опыт работы СЃ ChatGPTВ» — это РїСЂРѕ первый режим, Рё рынок оценивает его РЅР° 24% РЅРёР¶Рµ медианы. В«RAGВ», «векторные базы», «интеграции» — РїСЂРѕ второй, Рё это плюс 47–67%. Разница РІ оплате — это разница между «спросил» Рё «сделал». ",{"type":"link","text":"[1]","href":"#sources-1"}]]},{"id":"economics","type":"text","title":"Вторая причина: СЌРєРѕРЅРѕРјРёРєР°","paragraphs":["Есть Рё более приземлённое объяснение. Мощные модели стоят денег, Рё если гонять через РЅРёС… РІСЃС‘ РїРѕРґСЂСЏРґ, счёт быстро съедает выгоду. РњРЅРѕРіРёРµ РЅР° этом Рё останавливаются: попробовали, посчитали, закрыли.","Работает РґСЂСѓРіРѕР№ РїРѕСЂСЏРґРѕРє. Простые шаги — собрать, отфильтровать, привести Рє единому РІРёРґСѓ, отбросить лишнее — делаются простыми Рё дешёвыми средствами: скриптом, лёгкой моделью, готовым коннектором. Ртолько РЅР° подготовленных данных коротко включается тяжёлая модель — там, РіРґРµ РЅСѓР¶РЅР° её способность рассуждать. Разбор обратной СЃРІСЏР·Рё Сѓ нас устроен именно так: дешёвый шаг раскладывает документы РїРѕ темам, РґРѕСЂРѕРіРѕР№ — формулирует гипотезы РїРѕ СѓР¶Рµ сгруппированному материалу."]},{"id":"fig03-graph-title","type":"text","title":"РћРґРёРЅ результат, разная стоимость","paragraphs":["РџРѕСЂСЏРґРѕРє шагов меняет цену задачи сильнее, чем выбор модели"]},{"id":"img-fig03","type":"image","src":"https://storage.ht-platform.ru/public/articles/6/article-photo-13.png","caption":"Р РёСЃСѓРЅРѕРє 2. Ркономная схема работы."},{"id":"economics-cont","type":"text","paragraphs":["Рто Рё есть та инженерия, Р·Р° которую платит рынок. РќРµ «уметь писать промпты», Р° понимать, какую часть работы РјРѕР¶РЅРѕ сделать дёшево, Р° РіРґРµ без сложного шага РЅРµ обойтись."]},{"id":"nine-spheres","type":"text","title":"Горизонт возможностей: девять сфер","paragraphs":["Дальше — основная часть. Р—Р° последние полгода РјС‹ разбирали применение РР-контура СЃ компаниями РёР· очень разных отраслей: медтехника, страхование, розница, строительная техника, каршеринг, образование, клиники. Часть сценариев прошли сами, часть проектировали РїРѕРґ чужие процессы. Пришло время собрать РІСЃС‘ РІ РѕРґРЅРѕРј месте.","Читайте выборочно: найдите СЃРІРѕСЋ сферу. Р’ каждой строке — задача, которая раньше требовала либо отдельного человека, либо подрядчика, либо просто РЅРµ делалась."]},{"id":"fig02-graph-title","type":"text","title":"Где это СѓР¶Рµ работает","paragraphs":["Девять сфер, РІ которых РјС‹ делали или проектировали рабочие сценарии"]},{"id":"img-fig02","type":"image","src":"https://storage.ht-platform.ru/public/articles/6/article-photo-14.png","caption":"Р РёСЃСѓРЅРѕРє 3. Карта сфер применения."},{"id":"sphere-1","type":"text","title":"1. Разработка Рё РїСЂРѕРґСѓРєС‚","paragraphs":[]},{"id":"img-sphere-1","type":"image","src":"https://storage.ht-platform.ru/public/articles/6/article-photo-15.png"},{"id":"sphere-1-table","type":"table","columns":["Задача","Как это выглядит","Что даёт"],"rows":[["Техническая проработка задачи","Агент читает контекст проекта Рё раскладывает СЌРїРёРє РЅР° подзадачи СЃ критериями приёмки Рё картой затронутых микросервисов. Разработчик делает ревью постановки","Функция техлида закрывается СЃРІСЏР·РєРѕР№ «агент + ревью». Меньше ошибок Рё переделок. РРєРѕРЅРѕРјРёС‚ время Рё бюджет опытных разработчиков"],["Написание Рё правка РєРѕРґР°","Агент пишет РєРѕРґ РїРѕ подготовленному РўР—, РїСЂРѕС…РѕРґРёС‚ тесты Рё линтер, открывает запрос РЅР° слияние. Человек проверяет Рё принимает","Фичи выходят Р·Р° несколько дней вместо недель — РїСЂРё том Р¶Рµ контроле качества"],["Организация продуктовых Рё девелоперских задач","Единая архитектура: бизнес-цель в†’ продуктовая задача в†’ задачи разработки в†’ РєРѕРґ Рё макеты. РЎРІСЏР·Рё проставляются автоматически, после выполнения задача дополняется результатом","Любую фичу РјРѕР¶РЅРѕ поднять целиком: зачем делали, что решили, как реализовали. РЎРїРѕСЂ «почему здесь так работает» закрывается Р·Р° минуту вместо РѕР±С…РѕРґР° трёх человек"],["Рнтеграции между системами","Агент проектирует обмен данными между сервисами, пишет Рё тестирует РєРѕРґ синхронизации РЅР° граничных случаях РґРѕ сдачи","Дешевле Рё надёжнее ручной разработки. Меньше расхождений РІ данных, которые стоят денег"],["Требование РѕС‚ бизнеса в†’ РўР— для разработки","Логика уточняется РЅР° конкретных примерах Сѓ заказчика процесса Рё переводится РІ однозначные правила Рё условия. РўР— хранится вместе СЃ обсуждением, РёР· которого выросло","Разработка получает чёткую РѕСЃРЅРѕРІСѓ, без лишних уточнений. РџСЂРё РІРѕРїСЂРѕСЃРµ «почему решили так» — история РїРѕРґ СЂСѓРєРѕР№"],["Чек-лист тестирования РёР· РўР—","Каждый РїСѓРЅРєС‚ требования превращается РІ конкретный сценарий проверки. Отдельная опция — РїСЂРѕС…РѕРґ глазами пользователя","Р’РёРґРЅРѕ, что проверено, Р° что осталось РїРѕРґ РІРѕРїСЂРѕСЃРѕРј, ещё РґРѕ передачи РІ работу. Пользовательский опыт (имитированный) вскрывает недостатки ещё РґРѕ релиза"],["Быстрый прототип","Кликабельная версия Р·Р° час-РґРІР°, рабочая РЅР° ограниченном сценарии — Р·Р° день-РґРІР°, без доступа Рє РѕСЃРЅРѕРІРЅРѕР№ инфраструктуре","Гипотеза проверяется РґРѕ больших затрат. Решение Рѕ пилоте принимается РЅР° Р¶РёРІРѕРј примере, Р° РЅРµ только РЅР° описании"],["Перенос расчётов РёР· таблиц РІ РєРѕРґ","Начинается СЃ инвентаризации РёР· раздела РїСЂРѕ аналитику. Дальше логика переносится РІ СЃРєСЂРёРїС‚ СЃ тем Р¶Рµ результатом, сверяется РЅР° исторических данных РґРѕ полного совпадения, интерфейс РІРІРѕРґР° остаётся привычным","Расчёт перестаёт зависеть РѕС‚ РѕРґРЅРѕРіРѕ файла РЅР° РѕРґРЅРѕРј компьютере Рё уменьшает время работы специалиста. РќР° период перехода старый Рё новый СЃРїРѕСЃРѕР± считают параллельно — расхождения РІРёРґРЅС‹ сразу"],["Документация растёт вместе СЃ РєРѕРґРѕРј","После каждой задачи агент обновляет описание затронутых модулей Рё связей между сервисами; РїРѕРёСЃРє РїРѕ документации отвечает СЃРѕ ссылкой РЅР° файл Рё версию","Новый разработчик разбирается РІ сервисе РїРѕ документации, Р° РЅРµ РїРѕ чтению РєРѕРґР°. Описание РЅРµ устаревает, потому что обновляется вместе СЃ изменением. РћРЅР±РѕСЂРґРёРЅРі перестаёт зависеть РѕС‚ РѕРґРЅРѕРіРѕ носителя знаний"]]},{"id":"sphere-2","type":"text","title":"2. Аналитика Рё данные","paragraphs":[]},{"id":"img-sphere-2","type":"image","src":"https://storage.ht-platform.ru/public/articles/6/article-photo-16.png"},{"id":"sphere-2-table","type":"table","columns":["Задача","Как это выглядит","Что даёт"],"rows":[["Разнородные данные — РІ РѕРґРёРЅ отчёт","РќР° РІС…РѕРґ РїСЂРёС…РѕРґСЏС‚ таблицы разной структуры: выгрузки РёР· нескольких учётных баз, файлы РѕС‚ разных подразделений, отчёты подрядчиков. Агент сам определяет, какой файл какой, РїРѕ набору колонок, РїСЂРёРІРѕРґРёС‚ Рє единой структуре Рё СЃРІРѕРґРёС‚","РћРґРёРЅ Рё тот Р¶Рµ отчёт собирается быстро, без часов РЅР° ручное приведение форматов. РќРµ РЅСѓР¶РЅРѕ звать специалиста РїРѕ Excel или SQL РЅР° каждую РЅРѕРІСѓСЋ выгрузку"],["Разбор массива обратной СЃРІСЏР·Рё Рё кастдев","Сотни ответов, заметок Рё расшифровок раскладываются РїРѕ темам, сегментам Рё приоритетам; извлекаются цитаты; формируется СЃРїРёСЃРѕРє гипотез. Срез визуализируется РїРѕРґ роль: продакту — РѕРґРЅРѕ, руководителю — РґСЂСѓРіРѕРµ","РћС‚ дней Рё недель РґРѕ РјРёРЅСѓС‚. Выводы СѓС…РѕРґСЏС‚ сразу РІ задачи, Р° РЅРµ РІ отчёт"],["Регулярные отчёты без пересборки","Агент РїРѕ расписанию собирает данные РёР· нужных систем, сверяет между СЃРѕР±РѕР№ Рё оформляет РІ готовый отчёт. Логика отчёта документируется, Р° РЅРµ живёт РІ закрытых формулах РѕРґРЅРѕРіРѕ файла","Цифры РїСЂРёС…РѕРґСЏС‚ вовремя Рё РІ РѕРґРЅРѕРј формате РїСЂРё каждом цикле. Отчёт РЅРµ ломается РїСЂРё смене структуры источника"],["Автопроверка данных РґРѕ публикации","РџСЂРѕРїСѓСЃРєРё, дубли, выбросы, расхождения между источниками ловятся автоматически, СЃ уведомлением ответственному РґРѕ того, как отчёт уйдёт руководству","Ошибки находят РґРѕ презентации, Р° РЅРµ РЅР° встрече. Доверие Рє аналитике РЅРµ страдает"],["Факторный разбор метрики","Метрика выросла или упала — агент раскладывает изменение РЅР° составляющие: новые клиенты, отток старых, средний чек, сезон","Понятно, РЅР° какой рычаг влиять, Р° РЅРµ только то, что метрика просела"],["Когорты Рё удержание","Клиенты группируются РїРѕ месяцу привлечения, каналу, РіРѕСЂРѕРґСѓ, первому сценарию; для каждой РіСЂСѓРїРїС‹ строится СЃРІРѕСЏ кривая удержания","Р’РёРґРЅРѕ, какой канал или сегмент РїСЂРёРІРѕРґРёС‚ людей, которые РЅРµ задерживаются. Понятно, что чинить РІ привлечении Рё РѕРЅР±РѕСЂРґРёРЅРіРµ"],["Ранние сигналы оттока","РќР° СѓСЂРѕРІРЅРµ конкретного клиента считаются признаки затухания: растут интервалы между покупками, падает чек, меняется сценарий использования","РќР° выходе РЅРµ сухая аналитика, Р° СЃРїРёСЃРѕРє РЅР° неделю: СЃ кем связаться, РїРѕРєР° человек ещё активен"],["Дашборд РїРѕ запросу","Дашборд быстро строится РїРѕ запросу. Каждый блок отвечает РЅР° конкретный РІРѕРїСЂРѕСЃ конкретного руководителя, Сѓ блока есть владелец Рё решение, которое РѕРЅ поддерживает","Дашбордом пользуются, Р° РЅРµ открывают раз РІ квартал. РќР° встречах обсуждают выводы, РЅРµ тратят время РЅР° сверку цифр"],["Рнвентаризация расчётов РІ таблицах","Реестр Excel-файлов СЃ макросами: что считает, кто пользуется, откуда берёт данные, что сломается РїСЂРё изменении. Агент описывает формулы человеческим языком","Карта скрытых зависимостей. Часто СѓР¶Рµ РЅР° этом шаге находятся расчёты-дубли Рё места, РіРґРµ РґРІРµ таблицы считают РѕРґРЅРѕ Рё то Р¶Рµ РїРѕ-разному"],["Самообслуживание вместо очереди Рє аналитику","Понятные описания метрик Рё готовые срезы; форма или Р±РѕС‚ отвечает РЅР° типовые РІРѕРїСЂРѕСЃС‹ РїРѕ данным СЃ понятным ограничением ответственности","Простые РІРѕРїСЂРѕСЃС‹ закрываются РІ тот Р¶Рµ день без аналитика. Аналитик занимается тем, ради чего его нанимали"]]},{"id":"sphere-3","type":"text","title":"3. Маркетинг Рё контент","paragraphs":[]},{"id":"img-sphere-3","type":"image","src":"https://storage.ht-platform.ru/public/articles/6/article-photo-17.png"},{"id":"sphere-3-table","type":"table","columns":["Задача","Как это выглядит","Что даёт"],"rows":[["Статьи, посты, рассылки","Агент готовит черновики РЅР° РѕСЃРЅРѕРІРµ утверждённых источников — карточек, спецификаций, тезисов эксперта. РћРґРёРЅ текст адаптируется РїРѕРґ РІСЃРµ площадки СЃ РёС… форматом Рё регулярностью","РћРґРёРЅ специалист закрывает объём контент-команды. Регулярность публикаций РЅРµ зависит РѕС‚ загрузки"],["РћРґРёРЅ вебинар — несколько единиц контента","Запись мероприятия расшифровывается; РёР· неё собираются статья, карточки, тезисы для базы знаний Рё посты для соцсетей","Разовый эфир превращается РІ серию материалов без дополнительной работы спикера"],["РђРЅРѕРЅСЃС‹ Рё материалы РїРѕРґ мероприятия","РџРѕРґ каждое событие — анонсы, РїРёСЃСЊРјР°, страница регистрации, публикации — собираются РёР· программы Рё СЃРїРёСЃРєР° спикеров; маркетолог проверяет Рё публикует","Больше мероприятий закрывается тем Р¶Рµ составом"],["Карточки товаров Рё описания","РџСЂРё появлении новых позиций агент готовит черновики описаний, характеристик Рё SEO-текстов РїРѕ данным РёР· учётной системы; публикация — после подтверждения","Новые позиции выходят РЅР° витрину быстрее, контент-команда РЅРµ расширяется"],["Презентации Рё коммерческие материалы","РџРѕРґ конкретного получателя собираются РїРѕРґР±РѕСЂРєР°, сравнение вариантов, коммерческое предложение — РёР· общей базы материалов Рё истории общения","Подготовка Рє встрече занимает минуты, Р° РЅРµ полдня"],["Визуальные материалы","Баннеры, иллюстрации, схемы Рё графики РїРѕ фирменному стилю — черновик Р·Р° минуты, дизайнер РґРѕРІРѕРґРёС‚ РґРѕ финала","Ускорение процесса Рё СЌРєРѕРЅРѕРјРёСЏ часов дизайнера РЅР° рутинных макетах"],["Мониторинг конкурентов Рё рынка","Регулярный дайджест: что изменилось Сѓ конкурентов, что появилось РЅР° рынке, что пишут РІ отрасли — РІ готовом для PR Рё продукта РІРёРґРµ","Замещает часть работы аналитика. Реакция РЅР° действия конкурентов быстрее"],["Актуальность базы знаний Рё сайта","Агент отслеживает изменения РІ продуктах Рё материалах Рё готовит правки для базы знаний, FAQ Рё разделов сайта","Публичная информация меньше отстаёт РѕС‚ реального состояния продукта"],["Контент РІ регулируемой нише","Черновики медицинских, финансовых или юридических текстов РїСЂРѕС…РѕРґСЏС‚ проверку РЅР° отраслевые Рё рекламные ограничения РґРѕ передачи эксперту","Рксперт проверяет содержание, Р° РЅРµ ищет запрещённые формулировки. Меньше СЂРёСЃРєР° публикации, Р·Р° которую придётся отвечать"]]},{"id":"sphere-4","type":"text","title":"4. Продажи Рё партнёры","paragraphs":[]},{"id":"img-sphere-4","type":"image","src":"https://storage.ht-platform.ru/public/articles/6/article-photo-18.png"},{"id":"sphere-4-table","type":"table","columns":["Задача","Как это выглядит","Что даёт"],"rows":[["РџРѕРёСЃРє Рё актуализация базы","РЎР±РѕСЂ сведений Рѕ компаниях РёР· открытых источников, проверка актуальности контактов Рё статуса, обогащение карточки","Масштаб, недостижимый вручную. Раздел «где купить» или база партнёров РЅРµ устаревает"],["Единый приём лида РёР· разных источников","Заявки СЃ сайта, маркетплейсов, РґРѕСЃРѕРє объявлений Рё тендерных площадок попадают РІ CRM РїРѕ РѕРґРЅРѕР№ логике, СЃ сохранением РёСЃС…РѕРґРЅРѕРіРѕ канала","Р’РёРґРЅРѕ, какой источник реально РґРѕРІРѕРґРёС‚ сделку РґРѕ отгрузки, Р° РЅРµ только даёт заявки"],["Разбор входящих заявок","Агент извлекает реквизиты, регион, суть запроса; создаёт лид Рё задачу РІ CRM; готовит черновик ответа менеджеру","Меньше потерянных Рё просроченных обращений. РќРµ нужен отдельный человек РЅР° разбор почты"],["Подготовка Рє встрече","РџРѕРґР±РѕСЂРєР° РїРѕ конкретному клиенту: история общения, актуальные цены Рё остатки, сравнение моделей, готовые материалы","РРєРѕРЅРѕРјРёСЏ часов Сѓ каждого менеджера. РџСЂРё большой сети партнёров счёт идёт РЅР° десятки часов РІ месяц"],["Ассистент РїРѕ РїРѕРґР±РѕСЂСѓ для менеджера","Агент, обученный РЅР° базе знаний Рё характеристиках продуктов, готовит черновик ответа РЅР° РІРѕРїСЂРѕСЃС‹ Рѕ совместимости, показаниях, сравнении; финальное решение — Р·Р° специалистом","Быстрее первый ответ клиенту. Консультант тратит время РЅР° сложные случаи, Р° РЅРµ РЅР° повторяющиеся"],["Классификация ответов","Ответы РЅР° первичный контакт раскладываются РїРѕ типам: интерес, отказ, РІРѕРїСЂРѕСЃ, перенос. Менеджер РІРёРґРёС‚ только тех, СЃ кем есть смысл говорить","Внимание СѓС…РѕРґРёС‚ РЅР° живые диалоги, Р° РЅРµ РЅР° разбор почты"],["Сделка без движения — сигнал","Регулярная проверка сделок без активности дольше нормального СЃСЂРѕРєР° для этапа; сигнал ответственному","Реакция РЅР° застрявшую сделку — РІ течение РґРЅСЏ, Р° РЅРµ РЅР° квартальном разборе РІРѕСЂРѕРЅРєРё"],["РЈР·РєРёРµ места РІРѕСЂРѕРЅРєРё РїРѕ данным","Разбор РїРѕ этапам: РіРґРµ сделка РїСЂРѕРІРѕРґРёС‚ больше всего времени Рё РіРґРµ чаще всего срывается, СЃ разбивкой РїРѕ менеджеру, каналу, продукту","Решение Рѕ переработке процесса опирается РЅР° цифры, Р° РЅРµ РЅР° версию каждого менеджера"]]},{"id":"sphere-5","type":"text","title":"5. Поддержка Рё сервис","paragraphs":[]},{"id":"img-sphere-5","type":"image","src":"https://storage.ht-platform.ru/public/articles/6/article-photo-19.png"},{"id":"sphere-5-table","type":"table","columns":["Задача","Как это выглядит","Что даёт"],"rows":[["Публичный ассистент РїРѕ базе знаний","Чат РЅР° сайте Рё РІ мессенджерах отвечает РЅР° типовые РІРѕРїСЂРѕСЃС‹ — РїРѕРґР±РѕСЂ, инструкции, гарантия, РіРґРµ купить — РїРѕ документации Рё FAQ. Сложное Рё чувствительное передаёт человеку","Часть обращений закрывается без оператора. Поддержка масштабируется без расширения штата"],["Помощник оператора","Панель над CRM или helpdesk: резюме обращения, РїРѕС…РѕР¶РёР№ решённый случай, документация РїРѕ конкретной модели, черновик ответа СЃ указанием источника Рё СѓСЂРѕРІРЅСЏ уверенности","Быстрее первый ответ, тот Р¶Рµ штат обрабатывает больше. Новый оператор выходит РЅР° уровень опытного Р·Р° недели"],["Маршрутизация обращений РёР· всех каналов","Сайт, почта, мессенджеры — агент определяет тему, РїСЂРѕРґСѓРєС‚, срочность, регион Рё нужный отдел; создаёт карточку Рё назначает ответственного","Ничего РЅРµ теряется между каналами. Меньше повторных контактов Рё разбирательств"],["Приём сервисной заявки РїРѕ шагам","Форма или Р±РѕС‚ собирает модель, серийный номер, дату РїРѕРєСѓРїРєРё, описание, фото; проверяет полноту; определяет сервисный центр; шлёт уведомления Рѕ статусе","Меньше повторных обращений Рё задержек. Клиент РІРёРґРёС‚ статус без Р·РІРѕРЅРєР°"],["Заявка РЅР° ремонт — инженеру СЃ контекстом","Агент классифицирует заявку РїРѕ типу оборудования Рё вероятной неисправности, прикладывает историю обслуживания этого аппарата, маршрутизирует","Рнженер начинает РЅРµ СЃ нуля. Меньше времени РЅР° первичную диагностику РїРѕ телефону"],["База знаний РїРѕ неисправностям","Случаи ремонта оформляются РІ структуру «симптом в†’ причина в†’ решение в†’ запчасти». Рнженер подтверждает Рё дополняет","Ркспертиза РЅРµ держится РІ памяти РѕРґРЅРѕРіРѕ человека. Новый инженер быстрее выходит РЅР° сложный ремонт"],["Раннее выявление системных проблем","Р РѕСЃС‚ однотипных жалоб РїРѕ модели, партии, региону или точке замечается автоматически; критичное — уведомлением ответственному","Проблема РІРёРґРЅР° РґРѕ массового возврата или репутационных потерь"]]},{"id":"sphere-6","type":"text","title":"6. Финансы Рё документы","paragraphs":[]},{"id":"img-sphere-6","type":"image","src":"https://storage.ht-platform.ru/public/articles/6/article-photo-20.png"},{"id":"sphere-6-table","type":"table","columns":["Задача","Как это выглядит","Что даёт"],"rows":[["Финансовый дашборд РёР· нескольких баз","Выгрузки РёР· бухгалтерии, управления торговлей, зарплатного контура — разные файлы, разная структура. Агент определяет источник РїРѕ колонкам, СЃРІРѕРґРёС‚ РїРѕ заданным правилам «что откуда берётся»","Отчёт, который человек собирал руками Рє каждому закрытию, готовится сам. Время СѓС…РѕРґРёС‚ РЅР° проверку, Р° РЅРµ РЅР° СЃР±РѕСЂРєСѓ"],["Рзвлечение данных РёР· документов","Счета, акты, спецификации, удостоверения РѕС‚ поставщиков РІ любом формате — агент читает, извлекает поля РІ структурированном РІРёРґРµ, отдаёт РЅР° подтверждение, передаёт РІ учётную систему","Первичка перестаёт быть ручным РІРІРѕРґРѕРј. Меньше опечаток РЅР° участке, РіРґРµ объём растёт СЃ числом поставщиков"],["Сверка заказ — накладная — РґРѕРіРѕРІРѕСЂ","Автоматическое сопоставление позиций, количеств Рё условий между документами; СЃРїРёСЃРѕРє расхождений СЃ приоритетом СѓС…РѕРґРёС‚ ответственному","Расхождения РІРёРґРЅС‹ сразу Рё разбираются точно, Р° РЅРµ сплошным просмотром силами нескольких человек"],["Контроль СЃСЂРѕРєРѕРІ","Реестр сертификатов, лицензий, поверок, РґРѕРіРѕРІРѕСЂРѕРІ СЃ датами; напоминания ответственному заранее","Меньше СЂРёСЃРєР° штрафа или простоя РёР·-Р·Р° просроченного документа. Р’ регулируемой отрасли это заметная СЌРєРѕРЅРѕРјРёСЏ РЅР° штрафах"],["Договоры: типовая форма Рё отклонения","Проекты РїРѕ шаблону Рё данным РёР· системы; входящие РґРѕРіРѕРІРѕСЂС‹ анализируются, отклонения РѕС‚ вашей типовой формы подсвечиваются. Решение Рё РїРѕРґРїРёСЃСЊ — Р·Р° человеком","Юрист смотрит РЅР° отклонения, Р° РЅРµ вычитывает каждый документ целиком"],["РџРѕРёСЃРє РїРѕ регламентам СЃ версией","Агент отвечает РЅР° РІРѕРїСЂРѕСЃ РїРѕ внутренним правилам Рё показывает, откуда РІР·СЏР» ответ — документ, версия, дата","Меньше решений РїРѕ устаревшему правилу. Ответ всегда РјРѕР¶РЅРѕ проверить РїРѕ ссылке"]]},{"id":"sphere-7","type":"text","title":"7. Операции, логистика, закупки","paragraphs":[]},{"id":"img-sphere-7","type":"image","src":"https://storage.ht-platform.ru/public/articles/6/article-photo-21.png"},{"id":"sphere-7-table","type":"table","columns":["Задача","Как это выглядит","Что даёт"],"rows":[["Прайсы Рё остатки РѕС‚ поставщиков","Десятки производителей, Сѓ каждого СЃРІРѕР№ формат прайса Рё СЃРІРѕСЏ периодичность. Агент читает прайсы Рё фиды РІ любом РІРёРґРµ, сверяет СЃ текущими ценами Рё остатками, готовит СЃРїРёСЃРѕРє расхождений","Цены РЅР° сайте Рё РІ CRM обновляются быстрее Рё СЃ меньшим числом ошибок. Ручная сверка СѓС…РѕРґРёС‚"],["РџСЂРѕРіРЅРѕР· наличия Рё СЂРёСЃРє дефицита","РЎСЂРѕРєРё поставки РѕС‚ разных производителей сводятся РІ РѕРґРёРЅ РїСЂРѕРіРЅРѕР· наличия РїРѕ каждой позиции; СЂРёСЃРє дефицита подсвечивается заранее","Отдел продаж РІРёРґРёС‚ реальные СЃСЂРѕРєРё, Р° РЅРµ узнаёт Рѕ дефиците РѕС‚ клиента"],["Согласованность каталога между каналами","РћРґРЅР° карточка живёт РЅР° сайте, РІ учётной системе, Сѓ партнёров, РЅР° маркетплейсах. Агент сравнивает, составляет СЃРїРёСЃРѕРє расхождений СЃ приоритетом Рё предложенной правкой","Меньше потерь РёР·-Р·Р° устаревшей информации РЅР° площадке. Меньше часов РЅР° ручные проверки"],["Запчасти РїРѕРґ будущие заявки","Типичные неисправности РїРѕ истории заявок сопоставляются СЃ наличием запчастей РЅР° складе; позиции, которые стоит заказать заранее, подсвечиваются","Меньше простоя ремонта РёР·-Р·Р° ожидания запчасти, которую РјРѕР¶РЅРѕ было заказать раньше"],["Систематизация процесса РёР· таблиц Рё переписки","Разрозненные таблицы, РїРёСЃСЊРјР° Рё чаты РїРѕ логистике или закупкам превращаются РІ понятную структуру: этапы, ответственные, статусы","Р’РёРґРЅРѕ, кто Р·Р° что отвечает Рё что РіРґРµ застряло. Процесс передаётся РЅРѕРІРѕРјСѓ человеку"],["Рнвентаризация полей CRM Рё учётных систем","Фактическое заполнение каждого поля РїРѕ объектам; выделяется то, что РЅРµ используется или дублирует РґСЂСѓРіРѕРµ. Лишние шаги РІ переходах между этапами убираются","Карточка короче, регистрация быстрее. Меньше формальных действий, которые ничего РЅРµ добавляют"],["Аналитика закупок","Регулярный срез РїРѕ поставщикам, ценам, срокам, отклонениям РѕС‚ плана","Р’РёРґРЅРѕ, РіРґРµ переплачиваем Рё кто срывает СЃСЂРѕРєРё"]]},{"id":"sphere-8","type":"text","title":"8. Управление Рё команда","paragraphs":[]},{"id":"img-sphere-8","type":"image","src":"https://storage.ht-platform.ru/public/articles/6/article-photo-22.png"},{"id":"sphere-8-table","type":"table","columns":["Задача","Как это выглядит","Что даёт"],"rows":[["Протоколы встреч в†’ задачи","Встреча расшифровывается; РёР· неё извлекаются решения, задачи Рё ответственные; задачи попадают РІ трекер; follow-up СѓС…РѕРґРёС‚ участникам","Договорённости РЅРµ теряются. Легко проверить, что РІСЃС‘ обсуждённое учтено"],["Управленческий дашборд каждое утро","Показатели, статусы задач РїРѕ проектам, СЃСЂРѕРєРё, итоги встреч Рё важные РїРёСЃСЊРјР° подтягиваются РёР· рабочих систем Рё сверяются между СЃРѕР±РѕР№","Управленческий срез готов Рє началу РґРЅСЏ без ручной СЃР±РѕСЂРєРё"],["Ассистент руководителя","Читает контекст РёР· календаря, почты, трекера Рё документов; ставит встречи; готовит ответы РЅР° РїРёСЃСЊРјР° Рё черновики документов для разных инстанций; предлагает варианты решений","Рутина СѓС…РѕРґРёС‚, время остаётся РЅР° решения. Финальное слово всегда Р·Р° человеком"],["Ролевые профили РїРѕРґ функции","РЈ каждой роли СЃРІРѕР№ агент: СЃРІРѕСЏ Р·РѕРЅР° ответственности, СЃРІРѕР№ набор источников Рё СЃРІРѕРё правила. РЈ разработчика РѕРґРёРЅ доступ Рё стиль работы, Сѓ продакта РґСЂСѓРіРѕР№, Сѓ маркетолога третий","Человек получает помощника РїРѕРґ СЃРІРѕСЋ задачу, Р° РЅРµ общий чат РЅР° всех. Ограничения Рё контекст зашиты РІ роль — РёС… РЅРµ РЅСѓР¶РЅРѕ повторять РІ каждом запросе"],["Единая картина РїРѕ проекту","Бизнес-цели, продуктовые задачи, задачи разработки, документы Рё решения связаны между СЃРѕР±РѕР№; Сѓ каждой сущности РІРёРґРЅР° история","Меньше хаоса между системами. Рсторию РЅРµ РЅСѓР¶РЅРѕ собирать РїРѕ людям"],["Слабые места процесса","Разбор РІРѕСЂРѕРЅРєРё, этапов Рё передач между отделами: РіРґРµ теряется больше всего времени Рё результата","Понятно, что чинить РІ первую очередь, — РїРѕ цифре, Р° РЅРµ РїРѕ ощущению"],["База знаний для масштабирования","Документация растёт вместе СЃ задачами; РїРѕРёСЃРє СЃ указанием источника Рё версии; разграничение доступа РїРѕ ролям","Знание перестаёт быть личным активом сотрудника Рё становится активом компании. РЈС…РѕРґ человека РЅРµ СѓРЅРѕСЃРёС‚ СЃ СЃРѕР±РѕР№ контекст проекта"]]},{"id":"sphere-9","type":"text","title":"9. Найм Рё обучение","paragraphs":[]},{"id":"img-sphere-9","type":"image","src":"https://storage.ht-platform.ru/public/articles/6/article-photo-23.png"},{"id":"sphere-9-table","type":"table","columns":["Задача","Как это выглядит","Что даёт"],"rows":[["Первичный отсев РїРѕ формальным признакам","РР· потока откликов агент отбирает те, РіРґРµ РЅРµ совпадает РѕСЃРЅРѕРІРЅРѕРµ: нет обязательного навыка, РЅРµ тот РіРѕСЂРѕРґ, РЅРµ тот диапазон. Оценку человека РЅРµ делает","Рекрутер начинает СЃ тех, РєРѕРіРѕ стоит смотреть. РќРѕ это только отсев — сравнить кандидатов РїРѕ существу так нельзя"],["Описание вакансии — конкретно","Требования проверяются РЅР° конкретность: названы ли технологии, задача, критерии. Общие слова подсвечиваются","РџРѕ нашему исследованию, вакансии СЃ четырьмя Рё более конкретными требованиями имеют медиану РЅР° 46% выше — Рё притягивают понятных кандидатов [1]"],["Ответы РЅР° типовые РІРѕРїСЂРѕСЃС‹ кандидатов","Ассистент отвечает РїРѕ регламентам, условиям Рё вакансиям; сложное Рё личное — рекрутеру","Рекрутер занимается людьми, Р° РЅРµ перепиской"],["Материалы для обучения Рё РѕРЅР±РѕСЂРґРёРЅРіР°","Рнструкции, гайды Рё методические материалы собираются РёР· существующих документов Рё записей; эксперт проверяет содержание","Новый сотрудник выходит РЅР° работу быстрее. Учебный центр пропускает больше без расширения штата методистов"],["Тесты Рё проверка усвоения","Черновики тестов РїРѕ новым программам Рё продуктам РЅР° РѕСЃРЅРѕРІРµ материалов; эксперт правит","Быстрее запуск обучения РїРѕРґ новые продукты Рё методики"]]},{"id":"sphere-9-cont","type":"text","paragraphs":["Отсев РїРѕ формальным признакам — это, пожалуй, РІСЃС‘, что здесь умеет РР. Сравнить людей РїРѕ существу некорректно: РЅР° РІС…РѕРґРµ самооценка, РЅР° выходе разложенная РїРѕ полочкам самооценка. Для этого РЅСѓР¶РЅС‹ измеримые методики диагностики РЅР° РѕСЃРЅРѕРІРµ научных данных. РњС‹ занимаемся этим РІ HT Platform, поэтому Рё знаем разницу между «структурировать» Рё «измерить»."]},{"id":"nine-spheres-disclaimer","type":"accent","variant":"warning","paragraphs":["Важно: это РЅРµ СЃРїРёСЃРѕРє того, что РјС‹ построили Сѓ себя целиком. Часть сценариев прошли сами, часть проектировали вместе СЃ компаниями РёР· разных отраслей, часть — понятная Рё посильная задача, которую РІРёРґРЅРѕ РёР· соседних. Как именно РІСЃС‘ устроено внутри, РјС‹ РЅРµ описываем: Сѓ каждой компании СЃРІРѕР№ стек Рё СЃРІРѕРё ограничения, Рё копировать чужую схему бессмысленно. РќРѕ принцип РѕРґРёРЅ, Рё РѕРЅ переносится."]},{"id":"small-team","type":"text","title":"Что РёР· этого доступно небольшой команде","paragraphs":["Теперь главное, ради чего стоило РІСЃС‘ это перечислять.","Посмотрите РЅР° таблицы ещё раз. Почти РІ каждой строке — работа, которую раньше делал отдельный сотрудник, отдел или подрядчик. Сегодня подавляющее большинство этих сценариев собирает команда РёР· РѕРґРЅРѕРіРѕ-трёх человек. РќРµ Р·Р° РіРѕРґ — Р·Р° несколько недель.",["Рто Рё есть практический вывод РёР· первого исследования. Там РјС‹ написали: развивайтесь вглубь своей сферы, это добавит ценности вам как специалисту, Рё компании. Разница между «пользуемся нейросетями» Рё «собрали рабочий контур» — та самая разница, которую рынок оценивает РІ десятки процентов зарплаты. ",{"type":"link","text":"[1]","href":"#sources-1"}]]},{"id":"fig04-graph-title","type":"text","title":"РЎ чего начать","paragraphs":["РџРѕСЂСЏРґРѕРє, который сработал Сѓ нас Рё Сѓ тех, РєРѕРјСѓ РјС‹ это показывали"]},{"id":"img-fig04","type":"image","src":"https://storage.ht-platform.ru/public/articles/6/article-photo-24.png","caption":"Р РёСЃСѓРЅРѕРє 4. Первые пять шагов."},{"id":"small-team-cont","type":"text","paragraphs":["Единственное, что РјС‹ Р±С‹ посоветовали РЅРµ делать, — начинать СЃ самой важной задачи. Возьмите ту, которая надоела: еженедельный отчёт РёР· трёх выгрузок, разбор почты, протокол встречи. Если получится — РІС‹ поймёте принцип, Рё дальше РѕРЅ переносится РЅР° РІСЃС‘ остальное. Если РЅРµ получится — РІС‹ ничего РЅРµ потеряли."]},{"id":"small-team-accent","type":"accent","variant":"light","paragraphs":[["Отдельно для тех, кто ищет работу. Вам РЅРµ РЅСѓР¶РЅРѕ ждать, РїРѕРєР° работодатель что-то внедрит. Собранный СЃРІРѕРёРјРё руками рабочий процесс — это Рё навык, Рё портфолио одновременно. Р’ нашем исследовании вакансии СЃ конкретными технологиями РІ описании давали медиану РЅР° 46–67% выше, чем вакансии СЃ общими словами РїСЂРѕ РР. РЎРїСЂРѕСЃ есть, Рё РѕРЅ растёт быстрее предложения. ",{"type":"link","text":"[1]","href":"#sources-1"}]]},{"id":"honest-limits","type":"text","title":"Честные границы","paragraphs":["Было Р±С‹ нечестно закончить РЅР° воодушевляющей ноте Рё РЅРµ сказать, РіРґРµ РІСЃС‘ это ломается."]},{"id":"honest-limits-list","type":"list","items":[[{"type":"bold","text":"Решение остаётся Р·Р° человеком."}," Р’СЃС‘, что РјС‹ описали, готовит черновик, СЃРІРѕРґРёС‚ данные, находит расхождения. Принять решение, отказать РІ гарантии, согласовать бюджет, оценить кандидата — РїРѕ-прежнему человек. Рэто РЅРµ временное ограничение."],[{"type":"bold","text":"Большинство пилотов РЅРµ даёт результата."}," РџРѕ исследованию MIT (Project NANDA, 2025), РёР· корпоративных пилотов генеративного РРизмеримый финансовый эффект дали только 5% — РїСЂРё 30–40 млрд долларов инвестиций. Причина, РїРѕ выводу авторов, РЅРµ РІ технологии, Р° РІ РїРѕРґС…РѕРґРµ: сработали проекты, РіРґРµ задача была СѓР·РєРѕ очерчена РїРѕРґ конкретную функцию. ",{"type":"link","text":"[2]","href":"#sources-2"}],[{"type":"bold","text":"Автоматизация хрупкая."}," Меняются сайты, ломаются выгрузки, устаревают модели. Собрать РѕРґРёРЅ раз Рё забыть РЅРµ получится — Р·Р° процессом РЅСѓР¶РЅРѕ присматривать. РЈ нас РЅР° это СѓС…РѕРґРёС‚ несколько часов РІ неделю."],[{"type":"bold","text":"Данные."}," Даже если инструменты стоят внутри вашего контура, сама модель обычно работает снаружи. Персональные данные, банковская тайна, медицинская информация — это отдельный разговор, Рё его лучше вести РґРѕ старта."],[{"type":"bold","text":"РњС‹ сами далеко РЅРµ РІСЃС‘ умеем."}," РЈ нас закрыт продуктово-разработческий контур, Рё это заняло месяцы. Р’ РґСЂСѓРіРёС… направлениях РјС‹ РІ начале пути Рё учимся вместе СЃ теми, СЃ кем работаем."]]},{"id":"why-small-teams","type":"text","title":"Почему это особенно важно небольшим командам","paragraphs":["Крупная компания может позволить себе нанять людей Рё ждать. Небольшая — нет. Для нас это оказалось РЅРµ модернизацией, Р° СЃРїРѕСЃРѕР±РѕРј соответствовать: делать РїСЂРѕРґСѓРєС‚ того Р¶Рµ СѓСЂРѕРІРЅСЏ РїСЂРё заметно меньших ресурсах.","Ртут есть неочевидный эффект. Обычно новая технология сначала усиливает сильных — Сѓ РЅРёС… больше денег РЅР° внедрение. Здесь наоборот: барьер РІС…РѕРґР° РЅРёР·РєРёР№, Р° выигрыш РѕС‚ скорости Сѓ маленькой команды больше, потому что ей РЅРµ РЅСѓР¶РЅРѕ ничего согласовывать. Такого РѕРєРЅР° РЅР° нашей памяти давно РЅРµ было."]},{"id":"open-to-share","type":"text","title":"РњС‹ открыты Рє обмену опытом","paragraphs":["РњС‹ ничего РЅРµ продаём РІ этой статье Рё специально РЅРµ описываем, как РІСЃС‘ устроено внутри. РќРѕ общаясь СЃ коллегами Рё знакомыми компаниями, РјС‹ РІРёРґРёРј: РїРѕРґРѕР±РЅРѕРµ собрали единицы, Рё разговор часто идёт РЅР° разных языках. Люди мыслят прежними категориями Рё просто РЅРµ представляют, что такое СѓР¶Рµ РІРѕР·РјРѕР¶РЅРѕ. РњС‹ стараемся РЅРµ только помогать искать работу через наш сервис, РЅРѕ Рё сами внедрять новые РїРѕРґС…РѕРґС‹, использовать технологии, соответствовать будущему, которое СѓР¶Рµ наступило.",["Поэтому: если РІС‹ делаете что-то похожее или только собираетесь — напишите. Расскажем, РЅР° какие грабли наступили, Рё СЃ удовольствием посмотрим РЅР° ваш опыт. Заглядывайте РІ наш ",{"type":"link","text":"Telegram-канал","href":"https://t.me/htplatform"},", РјС‹ стараемся делиться чем-то полезным."],["Рђ если РІС‹ ищете работу или думаете, РєСѓРґР° развиваться, — начните СЃ РѕРґРЅРѕР№ своей рутины РЅР° этих выходных. Ртого достаточно, чтобы понять, ваше это или нет. Рђ также регистрируйтесь РЅР° ",{"type":"link","text":"нашей платформе","action":"openAuth"},", РіРґРµ РІС‹ бесплатно сможете пройти В«Рнфопрофиль» Рё увидеть СЃРІРѕР№ потенциал — СЂРѕРІРЅРѕ то, что подсветит вам направление дальнейшего развития."]]},{"id":"read-also","type":"accent","variant":"light","paragraphs":[["Читайте также: ",{"type":"link","text":"В«Рсследование рынка РР-вакансий РІ Р РѕСЃСЃРёРё: что работодатели пишут Рё Р·Р° что платят»","href":"/blog/ai-vacancies-russia-2026"}," — разбор 2 808 вакансий СЃ hh.ru, откуда взяты цифры РІ этой статье."]]},{"id":"sources","type":"references","title":"Рсточники","items":[{"title":"HT Platform. Рсследование рынка РР-вакансий РІ Р РѕСЃСЃРёРё: что работодатели пишут Рё Р·Р° что платят.","link":"https://ht-platform.ru/blog/ai-vacancies-russia-2026"},{"title":"MIT Project NANDA. The GenAI Divide: State of AI in Business 2025. Рюль 2025."}]}]'),wC={id:sC,title:lC,description:cC,createdAt:uC,readTime:dC,coverUrl:fC,category:pC,tags:hC,seo:mC,author:gC,toc:yC,blocks:vC},Tm=[l4,_4,j4,K4,iC,wC],Pm=r=>new Promise(t=>setTimeout(t,r)),R0={getAll:async()=>(await Pm(500),Tm),getById:async r=>(await Pm(300),Tm.find(a=>a.id===r)||null)},qu=Le("article/fetchAll",async(r,t)=>{try{return await R0.getAll()}catch{return t.rejectWithValue("Ошибка загрузки")}}),Ku=Le("article/fetchById",async(r,t)=>{try{const a=await R0.getById(r);if(!a)throw new Error("Not found");return a}catch{return t.rejectWithValue("Ошибка загрузки статьи")}}),CC={entities:[],currentArticle:null,isLoading:!1,error:null,filters:{search:"",category:"all",tags:[]}},A0=Gr({name:"article",initialState:CC,reducers:{setSearchQuery:(r,t)=>{r.filters.search=t.payload},setCategory:(r,t)=>{r.filters.category=t.payload},toggleTag:(r,t)=>{const a=t.payload,i=r.filters.tags.indexOf(a);i===-1?r.filters.tags.push(a):r.filters.tags.splice(i,1)},clearCurrentArticle:r=>{r.currentArticle=null}},extraReducers:r=>{r.addCase(qu.pending,t=>{t.isLoading=!0,t.error=null}).addCase(qu.fulfilled,(t,a)=>{t.isLoading=!1,t.entities=a.payload}).addCase(qu.rejected,(t,a)=>{t.isLoading=!1,t.error=a.payload}).addCase(Ku.pending,t=>{t.isLoading=!0,t.error=null}).addCase(Ku.fulfilled,(t,a)=>{t.isLoading=!1,t.currentArticle=a.payload}).addCase(Ku.rejected,(t,a)=>{t.isLoading=!1,t.error=a.payload})}}),{setSearchQuery:US,setCategory:zS,toggleTag:BS,clearCurrentArticle:VS}=A0.actions,_C=A0.reducer,hr=T6({reducer:{auth:m3,modal:v3,user:l3,employer:f3,company:_3,vacancy:L3,candidate:V3,chat:q3,settings:Y3,article:_C,folder:z3},middleware:r=>r({serializableCheck:!1}).prepend(b0.middleware)}),Cr=()=>e6(),Ke=n6,xC=r=>()=>g.jsx(Zw,{store:hr,children:g.jsx(L1,{children:g.jsx(r,{})})}),N0=({applicantComponent:r,employerComponent:t,fallbackComponent:a=null})=>{const{role:i,isAuthenticated:s}=Ke(c=>c.auth);return s?i==="applicant"?r:i==="employer"?t:a:a||r},Rm="app_theme_preference",L0=r=>{var f;const{isAuthenticated:t}=Ke(h=>h.auth),a=Ke(h=>h.settings.data),i=(f=a==null?void 0:a.baseSettings)==null?void 0:f.darkTheme,s=()=>typeof window<"u"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light",[c,u]=_.useState(s);_.useEffect(()=>{const h=window.matchMedia("(prefers-color-scheme: dark)"),m=y=>u(y.matches?"dark":"light");return h.addEventListener("change",m),()=>h.removeEventListener("change",m)},[]),_.useLayoutEffect(()=>{let h="light";const m=localStorage.getItem(Rm);r?h=r:t&&i!==void 0?(h=i?"dark":"light",m!==h&&localStorage.setItem(Rm,h)):m==="dark"||m==="light"?h=m:h=c,document.documentElement.setAttribute("data-theme",h),document.body.setAttribute("data-theme",h),document.documentElement.style.colorScheme=h},[r,t,i,c])},SC="_header_17wo1_1",EC="_header_limited_width_17wo1_30",kC="_header__logo_desktop_17wo1_35",bC="_header__logo_mobile_17wo1_36",IC="_header__button_17wo1_42",TC="_header__button_active_17wo1_57",PC="_header_on_dark_bg_17wo1_65",RC="_burger__icon_17wo1_85",AC="_header__profile_mobile_17wo1_105",NC="_adminInfoLabel_17wo1_117",LC="_burger__button_17wo1_127",jC="_header__nav_container_17wo1_133",MC="_header__nav_links_17wo1_141",DC="_header__nav_icons_17wo1_148",$C="_login__button_17wo1_155",FC="_chat__button_17wo1_160",OC="_headerUnreadBadge_17wo1_168",UC="_header__buttons_desktop_17wo1_186",zC="_userDropdownContainer_17wo1_194",BC="_userTrigger_17wo1_198",VC="_userAvatar_17wo1_206",HC="_userName_17wo1_213",WC="_user__name_dark_17wo1_221",qC="_dropdownMenu_17wo1_225",KC="_dropdownItem_17wo1_242",GC="_dropdownIcon_17wo1_263",YC="_logoutItem_17wo1_277",QC="_dropdownDivider_17wo1_285",Pe={header:SC,header_limited_width:EC,header__logo_desktop:kC,header__logo_mobile:bC,header__button:IC,header__button_active:TC,header_on_dark_bg:PC,burger__icon:RC,header__profile_mobile:AC,adminInfoLabel:NC,burger__button:LC,header__nav_container:jC,header__nav_links:MC,header__nav_icons:DC,login__button:$C,chat__button:FC,headerUnreadBadge:OC,header__buttons_desktop:UC,userDropdownContainer:zC,userTrigger:BC,userAvatar:VC,userName:HC,user__name_dark:WC,dropdownMenu:qC,dropdownItem:KC,dropdownIcon:GC,logoutItem:YC,dropdownDivider:QC};function ZC(){const{isAuthenticated:r,isLoading:t}=Ke(s=>s.auth),a=Cr();return _.useCallback(s=>(...c)=>{if(!t){if(r)return s(...c);a(Ma("auth"))}},[r,t,a])}const JC="_button_17dr5_1",XC="_button_small_17dr5_35",e5="_button_secondary_17dr5_64",t5="_button_secondary_small_17dr5_93",r5="_button_outlined_17dr5_122",n5="_button_rounded_outlined_17dr5_152",a5="_button_outlined_small_17dr5_187",o5="_button_rounded_17dr5_152",i5="_button_rounded_accent_17dr5_247",s5={button:JC,button_small:XC,button_secondary:e5,button_secondary_small:t5,button_outlined:r5,button_rounded_outlined:n5,button_outlined_small:a5,button_rounded:o5,button_rounded_accent:i5},l5=(r,t,a)=>r==="primary"?t==="small"?a.button_small:a.button:r==="secondary"?t==="small"?a.button_secondary_small:a.button_secondary:r==="outlined"?t==="small"?a.button_outlined_small:a.button_outlined:r==="rounded"?a.button_rounded:r==="rounded-accent"?a.button_rounded_accent:r==="rounded-outlined"?a.button_rounded_outlined:a.button,xt=r=>{const{children:t,size:a="large",variant:i="primary",className:s="",disabled:c=!1,type:u="button",...f}=r,m=[l5(i,a,s5),s].filter(Boolean).join(" ");return g.jsx("button",{className:m,type:u,disabled:c,...f,children:t})},c5="data:image/svg+xml,%3csvg%20width='17'%20height='18'%20viewBox='0%200%2017%2018'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M3.83304%203.72822C4.07039%203.81336%204.323%203.84516%204.57354%203.82144C4.82408%203.79771%205.06661%203.71903%205.2845%203.59079C5.50239%203.46254%205.69047%203.28778%205.83584%203.07848C5.9812%202.86919%206.08041%202.63032%206.12665%202.37827L6.40572%200.849691C7.55323%200.583306%208.74483%200.583306%209.89234%200.849691L10.1732%202.37827C10.2194%202.63032%2010.3186%202.86919%2010.464%203.07848C10.6093%203.28778%2010.7974%203.46254%2011.0153%203.59079C11.2332%203.71903%2011.4757%203.79771%2011.7263%203.82144C11.9768%203.84516%2012.2294%203.81336%2012.4668%203.72822L13.9048%203.21277C14.7053%204.09151%2015.3017%205.1424%2015.6499%206.28771L14.49%207.30084C14.299%207.4677%2014.1456%207.67471%2014.0405%207.90765C13.9354%208.14059%2013.8809%208.39395%2013.8809%208.65035C13.8809%208.90674%2013.9354%209.16011%2014.0405%209.39305C14.1456%209.62599%2014.299%209.83299%2014.49%209.99985L15.6499%2011.0121C15.3017%2012.1574%2014.7053%2013.2083%2013.9048%2014.087L12.4659%2013.5716C12.2285%2013.4864%2011.9759%2013.4546%2011.7254%2013.4784C11.4749%2013.5021%2011.2323%2013.5808%2011.0144%2013.709C10.7965%2013.8373%2010.6085%2014.012%2010.4631%2014.2213C10.3177%2014.4306%2010.2185%2014.6695%2010.1723%2014.9215L9.89409%2016.4501C8.74658%2016.7165%207.55497%2016.7165%206.40746%2016.4501L6.12665%2014.9215C6.08041%2014.6695%205.9812%2014.4306%205.83584%2014.2213C5.69047%2014.012%205.50239%2013.8373%205.2845%2013.709C5.06661%2013.5808%204.82408%2013.5021%204.57354%2013.4784C4.323%2013.4546%204.07039%2013.4864%203.83304%2013.5716L2.39496%2014.087C1.59446%2013.2083%200.998069%2012.1574%200.649902%2011.0121L1.80979%209.99896C2.00067%209.8321%202.15388%209.62515%202.25892%209.39229C2.36396%209.15944%202.41835%208.90618%202.41835%208.6499C2.41835%208.39362%202.36396%208.14037%202.25892%207.90751C2.15388%207.67466%202.00067%207.4677%201.80979%207.30084L0.649902%206.28771C0.997813%205.14248%201.5939%204.09159%202.39409%203.21277L3.83304%203.72822ZM8.1499%205.98377C8.84378%205.98377%209.50924%206.26467%209.99989%206.76466C10.4905%207.26466%2010.7662%207.9428%2010.7662%208.6499C10.7662%209.357%2010.4905%2010.0351%209.99989%2010.5351C9.50924%2011.0351%208.84378%2011.316%208.1499%2011.316C7.45602%2011.316%206.79056%2011.0351%206.29991%2010.5351C5.80927%2010.0351%205.53362%209.357%205.53362%208.6499C5.53362%207.9428%205.80927%207.26466%206.29991%206.76466C6.79056%206.26467%207.45602%205.98377%208.1499%205.98377Z'%20stroke='%239A9CB0'%20stroke-width='1.3'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3c/svg%3e",u5="data:image/svg+xml,%3csvg%20width='18'%20height='18'%20viewBox='0%200%2018%2018'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M3.57554%207.85126L2.39948%2010.4976C0.914591%2013.8367%200.172947%2015.5062%200.983394%2016.3166C1.79384%2017.127%203.46194%2016.3846%206.80133%2014.9006L9.44949%2013.7231C11.4632%2012.8279%2012.4705%2012.3807%2012.6305%2011.5175C12.7905%2010.6544%2012.0112%209.87519%2010.4527%208.31765L8.98226%206.8465C7.42457%205.28815%206.64532%204.50897%205.78207%204.66977C4.91882%204.82976%204.4716%205.83693%203.57634%207.85046M4.24918%207.44967L9.84951%2013.0495M2.64909%2011.4495L5.84928%2014.6494M11.8496%205.44974L14.2498%203.04982M10.4071%200.649902C10.7272%201.18348%2010.9824%202.56984%209.44949%203.8498M16.6499%206.89209C16.1163%206.5721%2014.7298%206.31691%2013.4497%207.84966M13.4497%200.649902V0.665902M16.6499%203.8498V3.86579M15.8499%209.44961V9.46561M7.84939%201.44988V1.46588'%20stroke='%239A9CB0'%20stroke-width='1.3'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3c/svg%3e",d5=r=>_.createElement("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...r},_.createElement("g",{clipPath:"url(#clip0_8191_14355)"},_.createElement("path",{d:"M11.476 15C11.2108 15 10.9564 15.1054 10.7689 15.2929C10.5814 15.4804 10.476 15.7348 10.476 16V19C10.476 19.7956 10.1599 20.5587 9.59732 21.1213C9.03471 21.6839 8.27165 22 7.476 22H5C4.20435 22 3.44129 21.6839 2.87868 21.1213C2.31607 20.5587 2 19.7956 2 19V5C2 4.20435 2.31607 3.44129 2.87868 2.87868C3.44129 2.31607 4.20435 2 5 2H7.476C8.27165 2 9.03471 2.31607 9.59732 2.87868C10.1599 3.44129 10.476 4.20435 10.476 5V8C10.476 8.26522 10.5814 8.51957 10.7689 8.70711C10.9564 8.89464 11.2108 9 11.476 9C11.7412 9 11.9956 8.89464 12.1831 8.70711C12.3706 8.51957 12.476 8.26522 12.476 8V5C12.4744 3.67441 11.9471 2.40356 11.0098 1.46622C10.0724 0.528882 8.80159 0.00158786 7.476 0H5C3.67441 0.00158786 2.40356 0.528882 1.46622 1.46622C0.528882 2.40356 0.00158786 3.67441 0 5L0 19C0.00158786 20.3256 0.528882 21.5964 1.46622 22.5338C2.40356 23.4711 3.67441 23.9984 5 24H7.476C8.80159 23.9984 10.0724 23.4711 11.0098 22.5338C11.9471 21.5964 12.4744 20.3256 12.476 19V16C12.476 15.7348 12.3706 15.4804 12.1831 15.2929C11.9956 15.1054 11.7412 15 11.476 15Z",fill:"#C65C4A"}),_.createElement("path",{d:"M22.867 9.87908L18.281 5.29308C18.1888 5.19757 18.0784 5.12139 17.9564 5.06898C17.8344 5.01657 17.7032 4.98898 17.5704 4.98783C17.4376 4.98668 17.3059 5.01198 17.183 5.06226C17.0602 5.11254 16.9485 5.18679 16.8546 5.28069C16.7607 5.37458 16.6865 5.48623 16.6362 5.60913C16.5859 5.73202 16.5606 5.8637 16.5618 5.99648C16.5629 6.12926 16.5905 6.26048 16.6429 6.38249C16.6953 6.50449 16.7715 6.61483 16.867 6.70708L21.129 10.9701L6 11.0001C5.73478 11.0001 5.48043 11.1054 5.29289 11.293C5.10536 11.4805 5 11.7349 5 12.0001C5 12.2653 5.10536 12.5197 5.29289 12.7072C5.48043 12.8947 5.73478 13.0001 6 13.0001L21.188 12.9691L16.865 17.2931C16.7695 17.3853 16.6933 17.4957 16.6409 17.6177C16.5885 17.7397 16.5609 17.8709 16.5598 18.0037C16.5586 18.1365 16.5839 18.2681 16.6342 18.391C16.6845 18.5139 16.7587 18.6256 16.8526 18.7195C16.9465 18.8134 17.0582 18.8876 17.181 18.9379C17.3039 18.9882 17.4356 19.0135 17.5684 19.0123C17.7012 19.0112 17.8324 18.9836 17.9544 18.9312C18.0764 18.8788 18.1868 18.8026 18.279 18.7071L22.865 14.1211C23.4277 13.5588 23.744 12.796 23.7444 12.0005C23.7447 11.205 23.4292 10.4419 22.867 9.87908Z",fill:"#C65C4A"})),_.createElement("defs",null,_.createElement("clipPath",{id:"clip0_8191_14355"},_.createElement("rect",{width:24,height:24,fill:"white"})))),j0="/static/avatar_white-icon-DrOO_irx.png",M0="var(--main-color)";function f5({color:r,...t}){return g.jsx("svg",{width:"24",height:"23",viewBox:"0 0 24 23",fill:"none",xmlns:"http://www.w3.org/2000/svg",...t,children:g.jsx("path",{d:"M17.5 0.916992C16.3739 0.934507 15.2724 1.24885 14.3067 1.82826C13.341 2.40768 12.5453 3.23166 12 4.21699C11.4546 3.23166 10.6589 2.40768 9.6932 1.82826C8.7275 1.24885 7.62601 0.934507 6.49996 0.916992C4.7049 0.994983 3.01366 1.78025 1.79574 3.10122C0.577818 4.4222 -0.0677922 6.17152 -4.17093e-05 7.96699C-4.17093e-05 12.514 4.78596 17.48 8.79996 20.847C9.69618 21.6001 10.8293 22.013 12 22.013C13.1706 22.013 14.3037 21.6001 15.2 20.847C19.214 17.48 24 12.514 24 7.96699C24.0677 6.17152 23.4221 4.4222 22.2042 3.10122C20.9863 1.78025 19.295 0.994983 17.5 0.916992ZM13.915 19.317C13.3789 19.7684 12.7007 20.0159 12 20.0159C11.2992 20.0159 10.621 19.7684 10.085 19.317C4.94696 15.006 1.99996 10.87 1.99996 7.96699C1.9316 6.70171 2.36632 5.46072 3.20932 4.51469C4.05232 3.56866 5.23519 2.99434 6.49996 2.91699C7.76472 2.99434 8.9476 3.56866 9.7906 4.51469C10.6336 5.46072 11.0683 6.70171 11 7.96699C11 8.23221 11.1053 8.48656 11.2929 8.6741C11.4804 8.86164 11.7347 8.96699 12 8.96699C12.2652 8.96699 12.5195 8.86164 12.7071 8.6741C12.8946 8.48656 13 8.23221 13 7.96699C12.9316 6.70171 13.3663 5.46072 14.2093 4.51469C15.0523 3.56866 16.2352 2.99434 17.5 2.91699C18.7647 2.99434 19.9476 3.56866 20.7906 4.51469C21.6336 5.46072 22.0683 6.70171 22 7.96699C22 10.87 19.053 15.006 13.915 19.313V19.317Z",fill:r||M0})})}function p5({color:r,...t}){return g.jsx("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...t,children:g.jsx("path",{d:"M19 4H17.899C17.434 1.721 15.414 0 13 0H5C2.243 0 0 2.243 0 5V17.854C0 18.648 0.435 19.374 1.134 19.748C1.452 19.919 1.801 20.003 2.149 20.003C2.565 20.003 2.98 19.882 3.339 19.643L6.289 17.676C6.98 19.611 8.83 21 11 21H16.697L20.661 23.643C21.021 23.883 21.435 24.004 21.851 24.004C22.199 24.004 22.547 23.919 22.866 23.748C23.566 23.374 24 22.648 24 21.854V9C24 6.243 21.757 4 19 4ZM2.23 17.979C2.211 17.991 2.155 18.027 2.078 17.986C1.999 17.944 1.999 17.877 1.999 17.855V5C1.999 3.346 3.345 2 4.999 2H12.999C14.653 2 15.999 3.346 15.999 5V12C15.999 13.654 14.653 15 12.999 15H6.999C6.672 15 6.458 15.159 6.434 15.175L2.23 17.979ZM22 21.855C22 21.876 22 21.944 21.921 21.986C21.842 22.027 21.788 21.991 21.77 21.979L17.555 19.168C17.391 19.059 17.198 19 17 19H11C9.696 19 8.585 18.164 8.172 17H13C15.757 17 18 14.757 18 12V6H19C20.654 6 22 7.346 22 9V21.855Z",fill:r||M0})})}function h5({isDarkTheme:r}){const[t,a]=_.useState(!1),i=_.useRef(null),s=Cr(),c=un(),{role:u,isAuthenticated:f}=Ke(B=>B.auth),h=Ke(B=>B.user.profile),m=Ke(B=>B.employer.profile),y=_.useRef({name:"",avatar:""}),w=()=>{a(!1),c("/"),s(kl()),s(u==="employer"?Vd():zd())};_.useEffect(()=>{function B(U){i.current&&!i.current.contains(U.target)&&a(!1)}return document.addEventListener("mousedown",B),()=>{document.removeEventListener("mousedown",B)}},[i]);let v="",x="",E="";u==="employer"&&m?(v=m.name,x=m.surname,E=m.company.companyLogoUrl):h&&(v=h.firstName||h.name||"",x=h.lastName||h.surname||"",E=h.avatarUrl);const S=v||x?`${v} ${x}`.trim():"";S&&(y.current.name=S),E&&(y.current.avatar=E);const L=S||y.current.name||"Пользователь",M=E||y.current.avatar||j0;if(!f)return null;const N=`${Pe.userName} ${r?Pe.user__name_dark:""}`;return g.jsxs("div",{className:Pe.userDropdownContainer,ref:i,children:[g.jsxs("div",{className:Pe.userTrigger,onClick:()=>a(!t),role:"button",tabIndex:0,children:[g.jsx("img",{src:M,alt:"avatar",className:Pe.userAvatar}),g.jsx("span",{className:`${N} body-4`,children:L})]}),t&&g.jsxs("div",{className:Pe.dropdownMenu,children:[g.jsxs(Qe,{to:"/profile/settings",className:Pe.dropdownItem,onClick:()=>a(!1),children:[g.jsx("img",{src:c5,alt:"Настройки",className:Pe.dropdownIcon}),g.jsx("span",{className:"body-1",children:"Настройки"})]}),g.jsxs(Qe,{to:"/events/career-express-it-2025",className:Pe.dropdownItem,onClick:()=>a(!1),children:[g.jsx("img",{src:u5,alt:"РљРѕРЅРєСѓСЂСЃ",className:Pe.dropdownIcon}),g.jsx("span",{className:"body-1",children:"РљРѕРЅРєСѓСЂСЃ"})]}),g.jsx("div",{className:Pe.dropdownDivider}),g.jsxs("button",{onClick:w,className:`${Pe.dropdownItem} ${Pe.logoutItem}`,children:[g.jsx(d5,{className:Pe.dropdownIcon}),g.jsx("span",{className:"body-1",children:"Выйти"})]})]})]})}function m5({isDarkTheme:r}){const{isAuthenticated:t,role:a}=Ke(k=>k.auth),{unreadCount:i}=Ke(k=>k.chat),{pathname:s}=ot(),c=un(),u=Cr(),f=ZC(),h=()=>u(Ma("auth")),y=f(()=>c("/profile")),v=f(()=>c("/chats")),x=s.startsWith("/vacancies")&&s!=="/vacancies/liked",E=s.startsWith("/candidates")&&s!=="/candidates/favorites",S=s.startsWith("/profile")&&s!=="/profile/settings"||s.startsWith("/employer-profile"),L=s.startsWith("/events/career-express-it-2025"),M=s.startsWith("/blog"),N=s.startsWith("/chats"),B=s==="/vacancies/liked"||s==="/candidates/favorites",U=a==="employer"?"/candidates/favorites":"/vacancies/liked",P=B?"#FF5C5C":r?"#ffffff":void 0,H=N?"#FF5C5C":r?"#ffffff":void 0;return g.jsxs("div",{className:Pe.header__buttons_desktop,children:[!t&&g.jsx(Qe,{to:"/",className:`${Pe.header__button} ${s==="/"?Pe.header__button_active:""}`,children:"Главная"}),g.jsx(Qe,{to:"/blog",className:`${Pe.header__button} ${M?Pe.header__button_active:""}`,children:"Блог"}),!t&&g.jsx(Qe,{to:"/events/career-express-it-2025",className:`${Pe.header__button} ${L?Pe.header__button_active:""}`,children:"РљРѕРЅРєСѓСЂСЃ"}),g.jsx(Qe,{to:"/vacancies",className:`${Pe.header__button} ${x?Pe.header__button_active:""}`,children:"Вакансии"}),t&&a==="employer"&&g.jsx(Qe,{to:"/candidates",className:`${Pe.header__button} ${E?Pe.header__button_active:""}`,children:"Кандидаты"}),t&&g.jsx(Qe,{to:"/profile",onClick:k=>{k.preventDefault(),y()},className:`${Pe.header__button} ${S?Pe.header__button_active:""}`,children:"Профиль"}),t?g.jsxs("nav",{className:Pe.header__nav_icons,children:[g.jsx(Qe,{to:U,className:`icon__button ${Pe.favourite__button}`,title:"Рзбранное",children:g.jsx(f5,{color:P})}),g.jsxs(Qe,{to:"/chats",onClick:k=>{k.preventDefault(),v()},className:`icon__button ${Pe.chat__button}`,title:"Чаты",children:[g.jsx(p5,{color:H}),i>0&&g.jsx("div",{className:Pe.headerUnreadBadge,children:i})]}),g.jsx(h5,{isDarkTheme:r})]}):g.jsx(xt,{size:"small",className:Pe.login__button,onClick:h,children:"Войти"})]})}const g5="_overlay_1sbqt_37",y5="_closing_1sbqt_45",v5="_sideBar_1sbqt_49",w5="_sideBar__content_1sbqt_64",C5="_sideBar__greeting_1sbqt_72",_5="_sideBar__nav_1sbqt_79",x5="_sideBar__navItem_1sbqt_86",S5="_logoutButton_1sbqt_104",E5="_active_1sbqt_114",wt={overlay:g5,closing:y5,sideBar:v5,sideBar__content:w5,sideBar__greeting:C5,sideBar__nav:_5,sideBar__navItem:x5,logoutButton:S5,active:E5},uo="data:image/svg+xml,%3csvg%20width='12'%20height='7'%20viewBox='0%200%2012%207'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M10.9998%206.91668C10.8902%206.91731%2010.7814%206.89629%2010.6799%206.85482C10.5784%206.81335%2010.486%206.75225%2010.4082%206.67501L6.5915%202.85001C6.51403%202.7719%206.42186%202.70991%206.32031%202.6676C6.21876%202.6253%206.10984%202.60351%205.99983%202.60351C5.88982%202.60351%205.7809%202.6253%205.67935%202.6676C5.5778%202.70991%205.48563%202.7719%205.40816%202.85001L1.5915%206.67501C1.43458%206.83193%201.22175%206.92009%200.999829%206.92009C0.777911%206.92009%200.565082%206.83193%200.408162%206.67501C0.251243%206.51809%200.163086%206.30526%200.163086%206.08334C0.163086%205.97346%200.184729%205.86466%200.226779%205.76314C0.26883%205.66162%200.330464%205.56938%200.408162%205.49168L4.23316%201.67501C4.70811%201.21871%205.3412%200.963867%205.99983%200.963867C6.65846%200.963867%207.29155%201.21871%207.7665%201.67501L11.5915%205.49168C11.6696%205.56915%2011.7316%205.66131%2011.7739%205.76286C11.8162%205.86441%2011.838%205.97334%2011.838%206.08334C11.838%206.19336%2011.8162%206.30228%2011.7739%206.40383C11.7316%206.50537%2011.6696%206.59754%2011.5915%206.67501C11.5136%206.75225%2011.4213%206.81335%2011.3198%206.85482C11.2182%206.89629%2011.1095%206.91731%2010.9998%206.91668Z'%20fill='%239A9CB0'/%3e%3c/svg%3e",k5=r=>{const{children:t,container:a=document.body}=r,[i,s]=_.useState(!1);return _.useEffect(()=>(s(!0),()=>s(!1)),[]),i?vl.createPortal(t,a):null},b5=300,I5=({isOpen:r,onClose:t})=>{const{isAuthenticated:a,role:i}=Ke(N=>N.auth),{profile:s}=Ke(N=>N.user),{profile:c}=Ke(N=>N.employer),u=Cr(),f=un(),m=ot().pathname,[y,w]=_.useState(!1),v=_.useRef(null),x=i==="employer"?c==null?void 0:c.name:s==null?void 0:s.name;_.useEffect(()=>(r&&(document.body.style.overflow="hidden"),()=>{document.body.style.overflow="unset"}),[r]),_.useEffect(()=>{if(r)w(!0);else if(y){const N=setTimeout(()=>{v.current&&(v.current(),v.current=null),w(!1)},b5);return()=>clearTimeout(N)}},[r,y]);const E=N=>{v.current=N||null,t()},S=N=>{if(m===N){E();return}E(()=>f(N))},L=()=>{E(()=>u(Ma("auth")))},M=()=>{E(()=>{u(kl()),f("/")})};return y?g.jsxs(k5,{children:[g.jsx("div",{className:`${wt.overlay} ${r?"":wt.closing}`,onClick:()=>E()}),g.jsx("aside",{className:`${wt.sideBar} ${r?"":wt.closing}`,children:g.jsxs("div",{className:wt.sideBar__content,children:[g.jsxs("div",{className:wt.sideBar__greeting,children:[g.jsx("span",{className:"h2",children:"Привет,"}),g.jsxs("span",{className:"h2",children:[x||"Гость","!"]})]}),g.jsxs("div",{className:wt.sideBar__nav,children:[!a&&g.jsxs("div",{className:`${wt.sideBar__navItem} ${m==="/"?wt.active:""}`,onClick:()=>S("/"),children:[g.jsx("span",{className:"body-1",children:"Главная"}),g.jsx("img",{src:uo,alt:"перейти"})]}),g.jsxs("div",{className:`${wt.sideBar__navItem} ${m.startsWith("/blog")?wt.active:""}`,onClick:()=>S("/blog"),children:[g.jsx("span",{className:"body-1",children:"Блог"}),g.jsx("img",{src:uo,alt:"перейти"})]}),g.jsxs("div",{className:`${wt.sideBar__navItem} ${m==="/events/career-express-it-2025"?wt.active:""}`,onClick:()=>S("/events/career-express-it-2025"),children:[g.jsx("span",{className:"body-1",children:"РљРѕРЅРєСѓСЂСЃ"}),g.jsx("img",{src:uo,alt:"перейти"})]}),g.jsxs("div",{className:`${wt.sideBar__navItem} ${m.startsWith("/vacancies")?wt.active:""}`,onClick:()=>S("/vacancies"),children:[g.jsx("span",{className:"body-1",children:"Вакансии"}),g.jsx("img",{src:uo,alt:"перейти"})]}),i==="employer"&&g.jsxs("div",{className:`${wt.sideBar__navItem} ${m.startsWith("/candidates")?wt.active:""}`,onClick:()=>S("/candidates"),children:[g.jsx("span",{className:"body-1",children:"Кандидаты"}),g.jsx("img",{src:uo,alt:"перейти"})]}),a&&g.jsxs("div",{className:`${wt.sideBar__navItem} ${m==="/profile/settings"?wt.active:""}`,onClick:()=>S("/profile/settings"),children:[g.jsx("span",{className:"body-1",children:"Настройки"}),g.jsx("img",{src:uo,alt:"перейти"})]})]}),a?g.jsx(xt,{className:wt.logoutButton,size:"small",onClick:M,children:"Выйти РёР· профиля"}):g.jsx(xt,{size:"small",onClick:L,children:"Войти РІ профиль"})]})})]}):null},yo="var(--main-color)";function T5({color:r,...t}){return g.jsxs("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...t,children:[g.jsx("path",{d:"M1 6H23C23.2652 6 23.5196 5.89464 23.7071 5.70711C23.8946 5.51957 24 5.26522 24 5C24 4.73478 23.8946 4.48043 23.7071 4.29289C23.5196 4.10536 23.2652 4 23 4H1C0.734784 4 0.48043 4.10536 0.292893 4.29289C0.105357 4.48043 0 4.73478 0 5C0 5.26522 0.105357 5.51957 0.292893 5.70711C0.48043 5.89464 0.734784 6 1 6Z",fill:r||yo}),g.jsx("path",{d:"M23 9H1C0.734784 9 0.48043 9.10536 0.292893 9.29289C0.105357 9.48043 0 9.73478 0 10C0 10.2652 0.105357 10.5196 0.292893 10.7071C0.48043 10.8946 0.734784 11 1 11H23C23.2652 11 23.5196 10.8946 23.7071 10.7071C23.8946 10.5196 24 10.2652 24 10C24 9.73478 23.8946 9.48043 23.7071 9.29289C23.5196 9.10536 23.2652 9 23 9Z",fill:r||yo}),g.jsx("path",{d:"M23 19H1C0.734784 19 0.48043 19.1054 0.292893 19.2929C0.105357 19.4804 0 19.7348 0 20C0 20.2652 0.105357 20.5196 0.292893 20.7071C0.48043 20.8946 0.734784 21 1 21H23C23.2652 21 23.5196 20.8946 23.7071 20.7071C23.8946 20.5196 24 20.2652 24 20C24 19.7348 23.8946 19.4804 23.7071 19.2929C23.5196 19.1054 23.2652 19 23 19Z",fill:r||yo}),g.jsx("path",{d:"M23 14H1C0.734784 14 0.48043 14.1054 0.292893 14.2929C0.105357 14.4804 0 14.7348 0 15C0 15.2652 0.105357 15.5196 0.292893 15.7071C0.48043 15.8946 0.734784 16 1 16H23C23.2652 16 23.5196 15.8946 23.7071 15.7071C23.8946 15.5196 24 15.2652 24 15C24 14.7348 23.8946 14.4804 23.7071 14.2929C23.5196 14.1054 23.2652 14 23 14Z",fill:r||yo})]})}function P5({color:r,...t}){return g.jsxs("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...t,children:[g.jsx("path",{d:"M12 12C13.1867 12 14.3467 11.6481 15.3334 10.9888C16.3201 10.3295 17.0892 9.39246 17.5433 8.2961C17.9974 7.19975 18.1162 5.99335 17.8847 4.82946C17.6532 3.66558 17.0818 2.59648 16.2426 1.75736C15.4035 0.918247 14.3344 0.346802 13.1705 0.115291C12.0067 -0.11622 10.8003 0.00259972 9.7039 0.456726C8.60754 0.910851 7.67047 1.67989 7.01118 2.66658C6.35189 3.65328 6 4.81331 6 6C6.00159 7.59081 6.63424 9.11602 7.75911 10.2409C8.88399 11.3658 10.4092 11.9984 12 12ZM12 2C12.7911 2 13.5645 2.2346 14.2223 2.67412C14.8801 3.11365 15.3928 3.73836 15.6955 4.46927C15.9983 5.20017 16.0775 6.00444 15.9231 6.78036C15.7688 7.55629 15.3878 8.26902 14.8284 8.82843C14.269 9.38784 13.5563 9.7688 12.7804 9.92314C12.0044 10.0775 11.2002 9.99827 10.4693 9.69552C9.73836 9.39277 9.11365 8.88008 8.67412 8.22228C8.2346 7.56449 8 6.79113 8 6C8 4.93914 8.42143 3.92172 9.17157 3.17158C9.92172 2.42143 10.9391 2 12 2Z",fill:r||yo}),g.jsx("path",{d:"M12 14C9.61386 14.0026 7.32622 14.9517 5.63896 16.639C3.95171 18.3262 3.00265 20.6139 3 23C3 23.2652 3.10536 23.5196 3.29289 23.7071C3.48043 23.8946 3.73478 24 4 24C4.26522 24 4.51957 23.8946 4.70711 23.7071C4.89464 23.5196 5 23.2652 5 23C5 21.1435 5.7375 19.363 7.05025 18.0503C8.36301 16.7375 10.1435 16 12 16C13.8565 16 15.637 16.7375 16.9497 18.0503C18.2625 19.363 19 21.1435 19 23C19 23.2652 19.1054 23.5196 19.2929 23.7071C19.4804 23.8946 19.7348 24 20 24C20.2652 24 20.5196 23.8946 20.7071 23.7071C20.8946 23.5196 21 23.2652 21 23C20.9974 20.6139 20.0483 18.3262 18.361 16.639C16.6738 14.9517 14.3861 14.0026 12 14Z",fill:r||yo})]})}const R5=["/events/career-express-it-2025","/events/career-express-it-2025/terms"];function A5(){const[r,t]=_.useState(!1),{pathname:a}=ot();return _.useEffect(()=>{const i=document.querySelectorAll('[data-header-theme="dark"]');if(i.length===0){t(!1);return}const s=new IntersectionObserver(c=>{const u=c.some(f=>f.isIntersecting);t(u)},{rootMargin:"-1px 0px -99% 0px",threshold:0});return i.forEach(c=>s.observe(c)),()=>s.disconnect()},[a]),r}function N5(){const[r,t]=_.useState(!1),{pathname:a}=ot(),{isAuthenticated:i,isAdmin:s}=Ke(S=>S.auth),c=Cr();L0("light");const u=A5(),f=()=>t(S=>!S),h=()=>t(!1),m=R5.includes(a),y=`
${Pe.header}
${u?Pe.header_on_dark_bg:""}
${m?Pe.header_limited_width:""}
`,w=S=>{i||(S.preventDefault(),c(Ma("auth")))},x=a.startsWith("/profile")?"#FF5C5C":u?"#ffffff":void 0,E=u?"#ffffff":void 0;return g.jsxs("header",{className:y,children:[g.jsxs("div",{className:Pe.header__logo_container,children:[g.jsx(Qe,{to:"/",className:Pe.header__logo_desktop,children:"HT Platform"}),g.jsx(Qe,{to:"/",className:Pe.header__logo_mobile,children:"HT"}),s&&g.jsx("p",{className:Pe.adminInfoLabel,children:"Режим администрирования"})]}),g.jsxs("div",{className:Pe.header__nav_container,children:[g.jsx("nav",{className:Pe.header__nav_links,children:g.jsx(m5,{isDarkTheme:u})}),g.jsx(Qe,{to:"/profile",className:`icon__button ${Pe.header__profile_mobile}`,onClick:w,children:g.jsx(P5,{color:x})}),g.jsx("button",{className:`icon__button ${Pe.burger__button}`,onClick:f,children:g.jsx(T5,{className:Pe.burger__icon,color:E})})]}),g.jsx(I5,{isOpen:r,onClose:h})]})}const L5="_footer_iuclz_1",j5="_footer_limited_width_iuclz_13",M5="_footerContent_iuclz_17",D5="_SKLogo_iuclz_25",$5="_SKLogoMobile_iuclz_30",F5="_footerCompanyInfo_iuclz_37",O5="_footerCompanyInfoMain_iuclz_43",U5="_footerLogo_iuclz_49",z5="_footerCopyright_iuclz_55",B5="_footerNav_iuclz_65",V5="_footerButton_iuclz_71",H5="_footerContacts_iuclz_87",W5="_telegramLink_iuclz_113",q5="_versionContainer_iuclz_122",K5="_versionInfo_iuclz_134",G5="_legalLinks_iuclz_135",Y5="_mainButton_iuclz_218",mt={footer:L5,footer_limited_width:j5,footerContent:M5,SKLogo:D5,SKLogoMobile:$5,footerCompanyInfo:F5,footerCompanyInfoMain:O5,footerLogo:U5,footerCopyright:z5,footerNav:B5,footerButton:V5,footerContacts:H5,telegramLink:W5,versionContainer:q5,versionInfo:K5,legalLinks:G5,mainButton:Y5},Am="data:image/svg+xml,%3csvg%20width='40'%20height='40'%20viewBox='0%200%2040%2040'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cg%20opacity='0.84'%3e%3cpath%20d='M0%2020C0%2031.0457%208.95431%2040%2020%2040C31.0457%2040%2040%2031.0457%2040%2020C40%208.95431%2031.0457%200%2020%200C8.95431%200%200%208.95431%200%2020Z'%20fill='white'/%3e%3cpath%20d='M10.1249%2019.6354C15.4936%2017.2963%2019.0736%2015.7543%2020.8648%2015.0092C25.9792%2012.882%2027.0419%2012.5125%2027.7346%2012.5001C27.8869%2012.4976%2028.2276%2012.5353%2028.4482%2012.7144C28.6345%2012.8655%2028.6858%2013.0698%2028.7103%2013.2131C28.7348%2013.3564%2028.7654%2013.6829%2028.7411%2013.9381C28.464%2016.8501%2027.2647%2023.9169%2026.6546%2027.1784C26.3965%2028.5585%2025.8882%2029.0212%2025.3961%2029.0665C24.3266%2029.1649%2023.5145%2028.3597%2022.4787%2027.6807C20.8578%2026.6182%2019.9421%2025.9568%2018.3688%2024.92C16.5505%2023.7218%2017.7292%2023.0633%2018.7654%2021.987C19.0366%2021.7053%2023.7487%2017.4193%2023.8399%2017.0305C23.8513%2016.9819%2023.8619%2016.8006%2023.7542%2016.7049C23.6465%2016.6092%2023.4876%2016.6419%2023.3729%2016.668C23.2104%2016.7049%2020.621%2018.4163%2015.6049%2021.8024C14.8699%2022.3071%2014.2042%2022.553%2013.6077%2022.5401C12.9501%2022.5259%2011.6853%2022.1683%2010.745%2021.8626C9.59166%2021.4877%208.67503%2021.2895%208.75485%2020.6528C8.79642%2020.3212%209.2531%2019.9821%2010.1249%2019.6354Z'%20fill='%23331B3C'/%3e%3c/g%3e%3c/svg%3e";function Q5(){return new Date().getFullYear()}const Nm="/static/SK_logo-3lHyBmF7.png",Z5=["/events/career-express-it-2025","/events/career-express-it-2025/terms"],J5=()=>{const{isAuthenticated:r}=Ke(m=>m.auth),t=Ke(m=>{var y;return((y=m.chat)==null?void 0:y.chats)||[]}),a=Cr(),{pathname:i}=ot(),s=un(),c=()=>a(Ma("auth")),u=m=>{if(m.preventDefault(),r){const y=t.find(w=>w.companyName==="Техническая поддержка");y&&y.chatId?s(`/chats/${y.chatId}`):s("/chats?support=true")}else a(Ma("auth"))},f=Z5.includes(i),h=`
${mt.footer}
${f?mt.footer_limited_width:""}
`;return g.jsxs("footer",{className:h,children:[g.jsxs("div",{className:mt.footerContent,children:[g.jsxs("div",{className:mt.footerCompanyInfo,children:[g.jsxs("div",{className:mt.footerCompanyInfoMain,children:[g.jsx("span",{className:mt.footerLogo,children:"HT"}),g.jsxs("div",{className:mt.footerCopyright,children:[g.jsxs("span",{className:"body-3",children:["в“’ 1997—",Q5()," "]}),g.jsx("span",{className:"body-3",children:"Human Technologies"})]})]}),g.jsx("div",{children:g.jsx("a",{href:"https://t.me/htplatform",children:g.jsx("img",{src:Am,alt:"icon","aria-hidden":"true"})})}),g.jsx("img",{className:mt.SKLogo,src:Nm,alt:"Участник Сколково"})]}),g.jsxs("div",{className:mt.footerNav,children:[g.jsx(Qe,{to:"/",className:`${mt.footerButton} h3 ${mt.mainButton}`,children:"Главная"}),r?g.jsx(Qe,{to:"/profile",className:`${mt.footerButton} h3`,children:"Профиль"}):g.jsx("button",{type:"button",onClick:c,className:`${mt.footerButton} h3`,children:"Профиль"}),g.jsx(Qe,{to:"/vacancies",className:`${mt.footerButton} h3`,children:"Вакансии"})]}),g.jsx("div",{className:mt.telegramLink,children:g.jsxs("a",{href:"https://t.me/htplatform",children:[g.jsx("img",{src:Am,alt:"icon","aria-hidden":"true"}),"РњС‹ РІ Telegram"]})}),g.jsxs("div",{className:mt.footerContacts,children:[g.jsx("span",{className:"h3",children:"Контакты"}),g.jsx("a",{href:"tel:84956696719",className:"body-1",children:"+7 (495) 669-67-19"}),g.jsx("a",{href:"mailto:info@ht-platform.ru",className:"body-1",children:"info@ht-platform.ru"})]}),g.jsxs("div",{className:mt.footerContacts,children:[g.jsx("span",{className:"h3",children:"Тех. поддержка"}),g.jsx("a",{href:"/chats",onClick:u,className:"body-1",children:"Написать"})]}),g.jsx("img",{className:mt.SKLogoMobile,src:Nm,alt:"Участник Сколково"})]}),g.jsxs("div",{className:mt.versionContainer,children:[g.jsxs("div",{className:mt.versionInfo,children:[g.jsx("span",{className:"body-2",children:"Версия продукта:"}),g.jsx("span",{className:"body-2",children:"front v1.32.0 РѕС‚ 10.10.2026"})]}),g.jsxs("div",{className:mt.legalLinks,children:[g.jsx(Qe,{to:"/privacy-policy",target:"_blank",rel:"noopener noreferrer",className:"body-2",children:"Политика РІ отношении перс. данных"}),g.jsx(Qe,{to:"/personal-data-policy",target:"_blank",rel:"noopener noreferrer",className:"body-2",children:"Согласие РЅР° обработку перс. данных"}),g.jsx(Qe,{to:"/applicant-agreement",target:"_blank",rel:"noopener noreferrer",className:"body-2",children:"Пользовательское соглашение"}),g.jsx(Qe,{to:"/employer-offer",target:"_blank",rel:"noopener noreferrer",className:"body-2",children:"Оферта для работодателей"})]})]})]})},X5="_modalBack_byu0b_1",e_="_modalHeader_byu0b_5",t_="_modalName_byu0b_12",r_="_modalClose_byu0b_18",n_="_modalForm_byu0b_29",a_="_label_byu0b_39",o_="_typeSelector_byu0b_98",i_="_typeCard_byu0b_104",s_="_typeCardActive_byu0b_120",l_="_cardIconWrapper_byu0b_124",c_="_cardText_byu0b_140",Ut={modalBack:X5,modalHeader:e_,modalName:t_,modalClose:r_,modalForm:n_,label:a_,typeSelector:o_,typeCard:i_,typeCardActive:s_,cardIconWrapper:l_,cardText:c_},Tn=r=>_.createElement("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...r},_.createElement("path",{d:"M17.9998 5.99982C17.8123 5.81235 17.558 5.70703 17.2928 5.70703C17.0277 5.70703 16.7733 5.81235 16.5858 5.99982L11.9998 10.5858L7.41382 5.99982C7.22629 5.81235 6.97198 5.70703 6.70682 5.70703C6.44165 5.70703 6.18735 5.81235 5.99982 5.99982C5.81235 6.18735 5.70703 6.44165 5.70703 6.70682C5.70703 6.97198 5.81235 7.22629 5.99982 7.41382L10.5858 11.9998L5.99982 16.5858C5.81235 16.7733 5.70703 17.0277 5.70703 17.2928C5.70703 17.558 5.81235 17.8123 5.99982 17.9998C6.18735 18.1873 6.44165 18.2926 6.70682 18.2926C6.97198 18.2926 7.22629 18.1873 7.41382 17.9998L11.9998 13.4138L16.5858 17.9998C16.7733 18.1873 17.0277 18.2926 17.2928 18.2926C17.558 18.2926 17.8123 18.1873 17.9998 17.9998C18.1873 17.8123 18.2926 17.558 18.2926 17.2928C18.2926 17.0277 18.1873 16.7733 17.9998 16.5858L13.4138 11.9998L17.9998 7.41382C18.1873 7.22629 18.2926 6.97198 18.2926 6.70682C18.2926 6.44165 18.1873 6.18735 17.9998 5.99982Z",fill:"#31323A"})),u_="_input_1no95_1",d_="_inputWrapper_1no95_7",f_="_inputWithIcon_1no95_26",p_="_inputIconBtn_1no95_46",h_="_passwordToggleBtn_1no95_47",m_="_inputIcon_1no95_46",g_="_eyeIconCrossActive_1no95_76",y_="_eyeIconCross_1no95_76",v_="_eyeIconActive_1no95_78",w_="_eyeIcon_1no95_76",C_="_inputComponentWrapper_1no95_100",__="_inputError_1no95_107",x_="_errorMessage_1no95_111",S_="_visible_1no95_122",or={input:u_,inputWrapper:d_,inputWithIcon:f_,inputIconBtn:p_,passwordToggleBtn:h_,inputIcon:m_,eyeIconCrossActive:g_,eyeIconCross:y_,eyeIconActive:v_,eyeIcon:w_,inputComponentWrapper:C_,inputError:__,errorMessage:x_,visible:S_},E_="_dropdownListContainer_ww7z6_1",k_="_item_ww7z6_21",b_="_colorDot_ww7z6_33",I_="_activeItem_ww7z6_43",T_="_dropdownPositioned_ww7z6_47",wi={dropdownListContainer:E_,item:k_,colorDot:b_,activeItem:I_,dropdownPositioned:T_},P_=r=>_.createElement("svg",{width:20,height:20,viewBox:"0 0 20 20",fill:"none",xmlns:"http://www.w3.org/2000/svg",...r},_.createElement("rect",{width:20,height:20,rx:10,fill:"#331B3C"}),_.createElement("path",{d:"M7.087 14.2821C7.08638 14.1881 7.10696 14.095 7.14758 14.0081C7.18819 13.9211 7.24804 13.842 7.32368 13.7753L11.0698 10.5062C11.1463 10.4398 11.207 10.3609 11.2484 10.2739C11.2898 10.1869 11.3112 10.0936 11.3112 9.99939C11.3112 9.90516 11.2898 9.81187 11.2484 9.72489C11.207 9.63791 11.1463 9.55896 11.0698 9.49261L7.32368 6.22349C7.17 6.08908 7.08366 5.90678 7.08366 5.7167C7.08366 5.52662 7.17 5.34432 7.32368 5.20992C7.47736 5.07551 7.6858 5 7.90314 5C8.01075 5 8.11732 5.01854 8.21674 5.05456C8.31616 5.09057 8.4065 5.14337 8.4826 5.20992L12.2205 8.48617C12.6674 8.89299 12.917 9.43525 12.917 9.99939C12.917 10.5635 12.6674 11.1058 12.2205 11.5126L8.4826 14.7889C8.40673 14.8558 8.31646 14.9089 8.21701 14.9451C8.11755 14.9813 8.01088 15 7.90314 15C7.7954 15 7.68872 14.9813 7.58927 14.9451C7.48982 14.9089 7.39955 14.8558 7.32368 14.7889C7.24804 14.7222 7.18819 14.6431 7.14758 14.5561C7.10696 14.4691 7.08638 14.376 7.087 14.2821Z",fill:"white"})),R_=r=>_.createElement("svg",{width:29,height:28,viewBox:"0 0 29 28",fill:"none",xmlns:"http://www.w3.org/2000/svg",...r},_.createElement("g",{clipPath:"url(#clip0_8470_3701)"},_.createElement("path",{d:"M27.8168 10.9888C26.0073 8.04183 21.8913 3.0975 14.6673 3.0975C7.4433 3.0975 3.3273 8.04183 1.5178 10.9888C0.958412 11.8936 0.662109 12.9363 0.662109 14C0.662109 15.0637 0.958412 16.1064 1.5178 17.0112C3.3273 19.9582 7.4433 24.9025 14.6673 24.9025C21.8913 24.9025 26.0073 19.9582 27.8168 17.0112C28.3762 16.1064 28.6725 15.0637 28.6725 14C28.6725 12.9363 28.3762 11.8936 27.8168 10.9888ZM25.8276 15.7897C24.2736 18.3167 20.7561 22.5692 14.6673 22.5692C8.57846 22.5692 5.06096 18.3167 3.50696 15.7897C3.17462 15.2519 2.99859 14.6322 2.99859 14C2.99859 13.3678 3.17462 12.7481 3.50696 12.2103C5.06096 9.68333 8.57846 5.43083 14.6673 5.43083C20.7561 5.43083 24.2736 9.67867 25.8276 12.2103C26.16 12.7481 26.336 13.3678 26.336 14C26.336 14.6322 26.16 15.2519 25.8276 15.7897Z",fill:"#9A9CB0"}),_.createElement("path",{d:"M14.6673 8.16667C13.5136 8.16667 12.3858 8.50878 11.4265 9.14976C10.4672 9.79073 9.71953 10.7018 9.27802 11.7677C8.83651 12.8336 8.72099 14.0065 8.94607 15.138C9.17115 16.2696 9.72672 17.309 10.5425 18.1248C11.3583 18.9406 12.3977 19.4962 13.5293 19.7212C14.6608 19.9463 15.8337 19.8308 16.8996 19.3893C17.9655 18.9478 18.8766 18.2001 19.5176 17.2408C20.1585 16.2815 20.5007 15.1537 20.5007 14C20.4988 12.4535 19.8836 10.9708 18.7901 9.87726C17.6965 8.7837 16.2138 8.16852 14.6673 8.16667ZM14.6673 17.5C13.9751 17.5 13.2984 17.2947 12.7228 16.9101C12.1473 16.5256 11.6986 15.9789 11.4337 15.3394C11.1688 14.6999 11.0995 13.9961 11.2346 13.3172C11.3696 12.6382 11.703 12.0146 12.1924 11.5251C12.6819 11.0356 13.3056 10.7023 13.9845 10.5673C14.6634 10.4322 15.3672 10.5015 16.0067 10.7664C16.6463 11.0313 17.1929 11.4799 17.5775 12.0555C17.962 12.6311 18.1673 13.3078 18.1673 14C18.1673 14.9283 17.7986 15.8185 17.1422 16.4749C16.4858 17.1313 15.5956 17.5 14.6673 17.5Z",fill:"#9A9CB0"})),_.createElement("defs",null,_.createElement("clipPath",{id:"clip0_8470_3701"},_.createElement("rect",{width:28,height:28,fill:"white",transform:"translate(0.666992)"})))),A_=r=>_.createElement("svg",{width:18,height:13,viewBox:"0 0 18 13",fill:"none",xmlns:"http://www.w3.org/2000/svg",...r},_.createElement("path",{d:"M9 0C5.04856 0 1.65436 2.37401 0.151954 5.77272C0.0495662 6.00434 0.0495663 6.26839 0.151954 6.50001C1.65436 9.89872 5.04856 12.2727 9 12.2727C12.9514 12.2727 16.3456 9.89872 17.848 6.50001C17.9504 6.26839 17.9504 6.00434 17.848 5.77272C16.3456 2.37401 12.9514 0 9 0ZM9 10.2273C6.74182 10.2273 4.90909 8.39455 4.90909 6.13636C4.90909 3.87818 6.74182 2.04545 9 2.04545C11.2582 2.04545 13.0909 3.87818 13.0909 6.13636C13.0909 8.39455 11.2582 10.2273 9 10.2273ZM9 3.68182C7.64182 3.68182 6.54545 4.77818 6.54545 6.13636C6.54545 7.49455 7.64182 8.59091 9 8.59091C10.3582 8.59091 11.4545 7.49455 11.4545 6.13636C11.4545 4.77818 10.3582 3.68182 9 3.68182Z",fill:"#31323A"})),N_=r=>_.createElement("svg",{width:20,height:16,viewBox:"0 0 20 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",...r},_.createElement("path",{d:"M17.8822 0.88158L17.1463 0.145638C16.9383 -0.0623533 16.5543 -0.0303442 16.3143 0.257601L13.7541 2.80157C12.602 2.30562 11.3382 2.06562 10.0101 2.06562C6.05798 2.08156 2.6342 4.38553 0.986083 7.69774C0.890056 7.90573 0.890056 8.16166 0.986083 8.33765C1.75402 9.90567 2.90609 11.2017 4.34609 12.1776L2.2501 14.3056C2.0101 14.5456 1.97809 14.9296 2.13813 15.1376L2.87408 15.8735C3.08207 16.0815 3.46606 16.0495 3.70606 15.7616L17.754 1.71369C18.058 1.47383 18.09 1.08987 17.882 0.881855L17.8822 0.88158ZM10.8581 5.71347C10.5861 5.64945 10.2981 5.56949 10.0261 5.56949C8.66606 5.56949 7.57818 6.65752 7.57818 8.01743C7.57818 8.28943 7.64219 8.57738 7.72215 8.8494L6.65003 9.90544C6.33008 9.34548 6.15409 8.72138 6.15409 8.01746C6.15409 5.88948 7.86611 4.17746 9.99409 4.17746C10.6982 4.17746 11.3221 4.35344 11.8821 4.6734L10.8581 5.71347Z",fill:"#9A9CB0"}),_.createElement("path",{d:"M19.0347 7.69792C18.4747 6.57787 17.7386 5.56994 16.8267 4.75391L13.8507 7.69792V8.01787C13.8507 10.1459 12.1387 11.8579 10.0107 11.8579H9.69072L7.80273 13.7459C8.50679 13.8898 9.24274 13.9859 9.96274 13.9859C13.9149 13.9859 17.3386 11.6819 18.9868 8.35374C19.1307 8.12967 19.1307 7.90576 19.0347 7.69775L19.0347 7.69792Z",fill:"#9A9CB0"})),L_=r=>_.createElement("svg",{width:20,height:16,viewBox:"0 0 20 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",...r},_.createElement("path",{d:"M17.8822 0.88158L17.1463 0.145638C16.9383 -0.0623533 16.5543 -0.0303442 16.3143 0.257601L13.7541 2.80157C12.602 2.30562 11.3382 2.06562 10.0101 2.06562C6.05798 2.08156 2.6342 4.38553 0.986083 7.69774C0.890056 7.90573 0.890056 8.16166 0.986083 8.33765C1.75402 9.90567 2.90609 11.2017 4.34609 12.1776L2.2501 14.3056C2.0101 14.5456 1.97809 14.9296 2.13813 15.1376L2.87408 15.8735C3.08207 16.0815 3.46606 16.0495 3.70606 15.7616L17.754 1.71369C18.058 1.47383 18.09 1.08987 17.882 0.881855L17.8822 0.88158ZM10.8581 5.71347C10.5861 5.64945 10.2981 5.56949 10.0261 5.56949C8.66606 5.56949 7.57818 6.65752 7.57818 8.01743C7.57818 8.28943 7.64219 8.57738 7.72215 8.8494L6.65003 9.90544C6.33008 9.34548 6.15409 8.72138 6.15409 8.01746C6.15409 5.88948 7.86611 4.17746 9.99409 4.17746C10.6982 4.17746 11.3221 4.35344 11.8821 4.6734L10.8581 5.71347Z",fill:"#31323A"}),_.createElement("path",{d:"M19.0347 7.69792C18.4747 6.57787 17.7386 5.56994 16.8267 4.75391L13.8507 7.69792V8.01787C13.8507 10.1459 12.1387 11.8579 10.0107 11.8579H9.69072L7.80273 13.7459C8.50679 13.8898 9.24274 13.9859 9.96274 13.9859C13.9149 13.9859 17.3386 11.6819 18.9868 8.35374C19.1307 8.12967 19.1307 7.90576 19.0347 7.69775L19.0347 7.69792Z",fill:"#31323A"})),j_=({id:r,items:t,onSelectItem:a,className:i="",activeIndex:s=-1})=>g.jsx("ul",{id:r,className:`${wi.dropdownListContainer} ${i}`,role:"listbox",children:t.map((c,u)=>{var f;return g.jsxs("li",{id:r?`${r}-item-${u}`:void 0,className:`body-1 ${wi.item} ${u===s?wi.activeItem:""}`,onClick:()=>a(c),onMouseDown:h=>h.preventDefault(),role:"option","aria-selected":u===s,tabIndex:-1,children:[c.label,c.color&&g.jsx("span",{className:wi.colorDot,style:{backgroundColor:c.color}})]},((f=c.value)==null?void 0:f.toString())||u.toString())})}),fo={email:/^[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)*@[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*(\.[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)*\.[a-zA-Z]{2,}$/,phone:/^(\+7)?[\s-]?[(]?[0-9]{3}[)]?[\s-]?[0-9]{3}[\s-]?[0-9]{2}[\s-]?[0-9]{2}$/,name:/^[A-ZРђ-РЇРЃ][A-Za-zРђ-РЇР°-СЏРЃС‘\s',.-]*$/,site:/^(https?:\/\/)?([a-zA-Z0-9Р°-СЏРђ-ЯёЁ-]+\.)+[a-zA-ZР°-СЏРђ-ЯёЁ]{2,}(\/.*)?$/i,number:/^-?\d*\.?\d+$/,password:/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$/},Lm={required:()=>"Поле обязательно для заполнения",email:()=>"Введите корректный email",phone:()=>"Введите корректный телефон",name:()=>"Введите корректное значение",site:()=>"Введите корректный URL сайта",number:()=>"Введите корректное число",year:()=>"Введите корректный РіРѕРґ",textOnly:()=>"Поле РЅРµ должно содержать цифры",date:()=>"Введите корректную дату рождения",password:()=>"Пароль должен содержать РЅРµ менее 8 символов, заглавные Рё строчные Р±СѓРєРІС‹, цифры"},Yt=({placeholder:r,type:t,value:a="",name:i,label:s,className:c="",inputClassName:u="",wrapperClassName:f="",onChange:h,onInputValueChange:m,showIconOnInput:y=!1,onIconClick:w,suggestions:v,onSuggestionSelect:x,validation:E=!1,validationType:S,customErrorMessage:L,onValidationChange:M,maxlength:N,customError:B,...U})=>{const[P,H]=_.useState(!1),[k,Q]=_.useState(-1),[X,ue]=_.useState(null),[xe,Re]=_.useState(!1),Ue=_.useRef(null),[ve,Me]=_.useState(!1),[ke,Se]=_.useState(!1),q=ve?"text":t,ie=y&&a&&a.toString().length>0,ee=ie&&w||t==="password",A=_.useCallback(Ne=>{if(B)return{isValid:!1,errorMsg:B};if(!E)return{isValid:!0,errorMsg:null};if(!S||Array.isArray(S)&&S.length===0)return{isValid:!0,errorMsg:null};const Ge=Ne.trim().replace(/\s\s+/g," "),jt=Array.isArray(S)?S:[S],ft=jt.includes("password")||jt.includes("phone")?Ne:Ge;let Rt=null;const ir=s||r||"Рто поле";let sr=!0;if(jt.includes("required")&&(ft||(Rt=Lm.required(ir),sr=!1)),sr&&ft!=="")for(const Qr of jt){if(Qr==="required")continue;let it=!0;const _r=new Date().getFullYear();switch(Qr){case"email":fo.email.test(ft)||(it=!1);break;case"phone":fo.phone.test(ft)||(it=!1);break;case"name":fo.name.test(ft)||(it=!1);break;case"site":fo.site.test(ft)||(it=!1);break;case"number":fo.number.test(ft)||(it=!1);break;case"textOnly":/\d/.test(ft)&&(it=!1);break;case"password":fo.password.test(ft)||(it=!1);break;case"year":const Dr=parseInt(ft,10);(isNaN(Dr)||ft.length!==4||Dr<1900||Dr>_r)&&(it=!1);break;case"date":if(!/^\d{2}\.\d{2}\.\d{4}$/.test(ft))it=!1;else{const St=ft.split("."),Et=parseInt(St[0],10),Zt=parseInt(St[1],10),lr=parseInt(St[2],10);if(isNaN(Et)||isNaN(Zt)||isNaN(lr)||lr<1900||lr>_r||Zt<1||Zt>12||Et<1||Et>31)it=!1;else{const dn=new Date(lr,Zt-1,Et);(dn.getFullYear()!==lr||dn.getMonth()!==Zt-1||dn.getDate()!==Et)&&(it=!1)}}break}if(!it){sr=!1;const Dr=Qr==="year"||Qr==="date"?_r:void 0;Rt||(Rt=Lm[Qr](ir,Dr));break}}return!sr&&L&&(Rt=L),{isValid:sr,errorMsg:Rt}},[E,S,L,s,r,B]);_.useEffect(()=>{B&&!xe&&Re(!0),ue(B||null)},[B]);const V=()=>{Me(Ne=>!Ne)},J=()=>ve?ke?{Component:L_,className:or.eyeIconCrossActive}:{Component:N_,className:or.eyeIconCross}:ke?{Component:A_,className:or.eyeIconActive}:{Component:R_,className:or.eyeIcon},{Component:ae,className:te}=J(),oe=X&&xe,Ee=[or.input,"body-1",u,oe&&or.inputError,ee&&or.inputWithIcon].filter(Boolean).join(" ");_.useEffect(()=>{const Ne=Ge=>{Ue.current&&!Ue.current.contains(Ge.target)&&H(!1)};return document.addEventListener("mousedown",Ne),()=>document.removeEventListener("mousedown",Ne)},[]);const Ie=Ne=>{const Ge=Ne.target.value;if(xe||Re(!0),h&&h(Ne),m&&m(Ge),E){const{isValid:jt,errorMsg:Mt}=A(Ge);ue(Mt),i&&M&&M(i,jt)}v&&v.length>0?(H(Ge.length>0),Q(-1)):H(!1)},Be=Ne=>{x&&x(Ne),H(!1);const Ge=typeof Ne.value=="string"?Ne.value:Ne.label;if(E&&i&&M){const{isValid:jt,errorMsg:Mt}=A(Ge);ue(Mt),M(i,jt)}},gt=Ne=>{Se(!0),v&&v.length>0&&a&&a.length>0&&H(!0),U.onFocus&&U.onFocus(Ne)},Mr=Ne=>{Se(!1);const Ge=Ne.target.value,jt=Ge.trim().replace(/\s\s+/g," "),Mt=Array.isArray(S)?S:[S],Rt=(Mt==null?void 0:Mt.includes("password"))||(Mt==null?void 0:Mt.includes("phone"))?Ge:jt;if(m&&Ge!==Rt&&t!=="password"&&t!=="phone"&&m(Rt),xe||Re(!0),E){const{isValid:ir,errorMsg:sr}=A(Rt);ue(sr),i&&M&&M(i,ir)}U.onBlur&&U.onBlur(Ne)},Oe=Ne=>{P&&v&&v.length>0&&(Ne.key==="ArrowDown"?(Ne.preventDefault(),Q(Ge=>(Ge+1)%v.length)):Ne.key==="ArrowUp"?(Ne.preventDefault(),Q(Ge=>(Ge-1+v.length)%v.length)):Ne.key==="Enter"?k>=0&&k<v.length&&(Ne.preventDefault(),Be(v[k])):Ne.key==="Escape"&&(H(!1),Q(-1))),U.onKeyDown&&U.onKeyDown(Ne)},dt=i?`${i}-dropdown`:"input-dropdown",Yr=i?`${i}-error`:"input-error";return g.jsxs("div",{className:`${or.inputComponentWrapper} ${c} ${f}`,ref:Ue,children:[s&&g.jsx("label",{className:"h3",children:s}),g.jsxs("div",{className:or.inputWrapper,children:[g.jsx("input",{className:Ee,type:q,inputMode:(Array.isArray(S)?S.some(Ne=>["year","number","date"].includes(Ne)):["year","number","date"].includes(S||""))?"numeric":void 0,pattern:(Array.isArray(S)?S.includes("date"):S==="date")?"\\d{2}\\.\\d{2}\\.\\d{4}":(Array.isArray(S)?S.some(Ne=>["year","number"].includes(Ne)):["year","number"].includes(S||""))?"[0-9]*":void 0,placeholder:r,value:a,name:i,onChange:Ie,onFocus:gt,onBlur:Mr,onKeyDown:Oe,autoComplete:"off","aria-autocomplete":"list","aria-expanded":P,"aria-controls":P?dt:void 0,"aria-activedescendant":k!==-1?`${dt}-item-${k}`:void 0,"aria-invalid":!!oe,"aria-describedby":oe?Yr:void 0,maxLength:N,...U}),ie&&w&&g.jsx("button",{type:"button",className:`${or.inputIconBtn} icon__button`,tabIndex:-1,onMouseDown:Ne=>Ne.preventDefault(),onClick:()=>{w&&w(),H(!1)},children:g.jsx(P_,{className:or.inputIcon})}),t==="password"&&g.jsx("button",{type:"button",className:`${or.passwordToggleBtn} icon__button`,onMouseDown:Ne=>Ne.preventDefault(),onClick:V,"aria-label":ve?"Скрыть пароль":"Показать пароль",children:g.jsx(ae,{className:te})})]}),P&&v&&v.length>0&&g.jsx(j_,{id:dt,items:v,onSelectItem:Be,activeIndex:k,className:wi.dropdownPositioned}),g.jsx("div",{id:Yr,className:`${or.errorMessage} ${oe?or.visible:""} body-3`,role:"alert","aria-live":"polite",children:X})]})},Pn=r=>_.createElement("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...r},_.createElement("g",{clipPath:"url(#clip0_8501_6404)"},_.createElement("path",{d:"M18.992 1.72301C18.9935 1.94846 18.9441 2.17195 18.8466 2.38067C18.7491 2.58939 18.6055 2.77922 18.424 2.93929L9.43335 10.7852C9.24976 10.9444 9.10404 11.1339 9.0046 11.3427C8.90516 11.5514 8.85396 11.7753 8.85396 12.0015C8.85396 12.2276 8.90516 12.4515 9.0046 12.6603C9.10404 12.869 9.24976 13.0585 9.43335 13.2177L18.424 21.0636C18.7928 21.3862 19 21.8237 19 22.2799C19 22.7361 18.7928 23.1736 18.424 23.4962C18.0551 23.8188 17.5549 24 17.0332 24C16.775 24 16.5192 23.9555 16.2806 23.8691C16.042 23.7826 15.8252 23.6559 15.6425 23.4962L6.67153 15.6332C5.59899 14.6568 5 13.3554 5 12.0015C5 10.6475 5.59899 9.34609 6.67153 8.36974L15.6425 0.506725C15.8246 0.346163 16.0413 0.218716 16.28 0.131746C16.5187 0.044775 16.7747 0 17.0332 0C17.2918 0 17.5478 0.044775 17.7865 0.131746C18.0252 0.218716 18.2419 0.346163 18.424 0.506725C18.6055 0.666796 18.7491 0.856628 18.8466 1.06535C18.9441 1.27406 18.9935 1.49756 18.992 1.72301Z",fill:"#31323A"})),_.createElement("defs",null,_.createElement("clipPath",{id:"clip0_8501_6404"},_.createElement("rect",{width:24,height:24,fill:"white"})))),M_="/static/company_white-icon-oEqAmg-k.png",mi=r=>r?/^[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)*@[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*(\.[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)*\.[a-zA-Z]{2,}$/.test(r):!1,D_=({onClose:r,onSubmit:t,error:a,onClearError:i,initialEmail:s=""})=>{const[c,u]=_.useState(s),[f,h]=_.useState(!1),[m,y]=_.useState("Рщу работу"),w=_.useRef(null);_.useEffect(()=>{mi(s)&&h(!0)},[s]);const v=M=>{M&&M.preventDefault(),(f||mi(c))&&t({email:c,applicantType:m})},x=M=>{a&&i(),u(M),h(mi(M))},E=(M,N)=>{h(N)},S=M=>{y(M),a&&i(),h(mi(c)),setTimeout(()=>{if(w.current){const N=w.current.querySelector('input[name="email"]');N&&N.focus()}},0)},L=M=>{if(M.key==="Enter"){const N=M.target;if(N.tagName==="BUTTON"&&N.type==="submit")return;M.preventDefault(),v()}};return g.jsxs(g.Fragment,{children:[g.jsxs("div",{className:Ut.modalName,children:[g.jsx(Pn,{className:Ut.modalBack,onClick:r}),g.jsx("span",{className:"h2",children:"Р’С…РѕРґ Рё регистрация"})]}),g.jsxs("div",{className:Ut.modalHeader,children:[g.jsx("span",{className:"h2",children:"Р’С…РѕРґ Рё регистрация"}),g.jsx(Tn,{className:Ut.modalClose,onClick:r})]}),g.jsxs("form",{ref:w,className:Ut.modalForm,onSubmit:v,onKeyDown:L,noValidate:!0,children:[g.jsxs("div",{className:Ut.typeSelector,children:[g.jsxs("button",{type:"button",className:`${Ut.typeCard} ${m==="Рщу работу"?Ut.typeCardActive:""}`,onClick:()=>S("Рщу работу"),children:[g.jsx("div",{className:Ut.cardIconWrapper,children:g.jsx("img",{src:j0,alt:"avatar"})}),g.jsxs("span",{className:`body-3 ${Ut.cardText}`,children:["РЇ соискатель,",g.jsx("br",{}),"ищу работу"]})]}),g.jsxs("button",{type:"button",className:`${Ut.typeCard} ${m==="Рщу сотрудников"?Ut.typeCardActive:""}`,onClick:()=>S("Рщу сотрудников"),children:[g.jsx("div",{className:Ut.cardIconWrapper,children:g.jsx("img",{src:M_,alt:"company"})}),g.jsxs("span",{className:`body-3 ${Ut.cardText}`,children:["РЇ работодатель,",g.jsx("br",{}),"ищу сотрудников"]})]})]}),g.jsxs("label",{htmlFor:"email",className:`${Ut.label} body-2`,children:["Рлектронная почта",g.jsx(Yt,{name:"email",type:"email",placeholder:"address@mail.ru",value:c,onInputValueChange:x,validation:!0,validationType:["required","email"],onValidationChange:E,customError:a,autoFocus:!0})]}),g.jsx(xt,{type:"submit",disabled:!(f||mi(c)),className:Ut.submitButton,children:"Далее"})]})]})},$_="_modalBack_gxk71_1",F_="_modalHeader_gxk71_5",O_="_modalName_gxk71_12",U_="_modalClose_gxk71_18",z_="_modalForm_gxk71_29",B_="_infoText_gxk71_34",V_="_label_gxk71_39",H_="_resendButton_gxk71_46",W_="_changeEmailLink_gxk71_65",Vr={modalBack:$_,modalHeader:F_,modalName:O_,modalClose:U_,modalForm:z_,infoText:B_,label:V_,resendButton:H_,changeEmailLink:W_},q_=({email:r,error:t,onClose:a,onSubmit:i,onBack:s,onResendCode:c,onClearError:u})=>{const[f,h]=_.useState(""),[m,y]=_.useState(59),[w,v]=_.useState(!0);_.useEffect(()=>{if(!w)return;if(m===0){v(!1);return}const N=setInterval(()=>{y(B=>B-1)},1e3);return()=>clearInterval(N)},[m,w]);const x=()=>{c(),y(59),v(!0)},E=N=>{N.preventDefault(),f.length>=6&&i(f)},S=N=>{t&&u(),h(N)},L=f.length<6,M=`0:${m<10?"0":""}${m}`;return g.jsxs(g.Fragment,{children:[g.jsxs("div",{className:Vr.modalName,children:[g.jsx(Pn,{className:Vr.modalBack,onClick:s}),g.jsx("span",{className:"h2",children:"Р’С…РѕРґ Рё регистрация"})]}),g.jsxs("div",{className:Vr.modalHeader,children:[g.jsx("span",{className:"h2",children:"Введите РєРѕРґ"}),g.jsx(Tn,{className:Vr.modalClose,onClick:a})]}),g.jsxs("form",{className:Vr.modalForm,onSubmit:E,noValidate:!0,children:[g.jsxs("p",{className:`${Vr.infoText} body-1`,children:["РњС‹ отправили РєРѕРґ подтверждения РЅР° почту ",g.jsx("span",{className:Vr.emailText,children:r}),". РљРѕРґ будет действителен РІ течение 5 РјРёРЅСѓС‚"]}),g.jsx("button",{type:"button",className:`${Vr.changeEmailLink} body-1`,onClick:s,children:"Рзменить почту"}),g.jsxs("label",{htmlFor:"code",className:`${Vr.label} body-2`,children:["РљРѕРґ РёР· РїРёСЃСЊРјР°",g.jsx(Yt,{name:"code",type:"text",placeholder:"XXXXXX",value:f,onInputValueChange:S,maxLength:6,customError:t,autoFocus:!0})]}),g.jsx(xt,{type:"button",variant:"outlined",onClick:x,disabled:w,className:Vr.resendButton,children:w?`Отправить повторно через ${M}`:"Отправить повторно"}),g.jsx(xt,{type:"submit",disabled:L,className:Vr.submitButton,children:"Далее"})]})]})},K_="_modalBack_chopr_1",G_="_modalHeader_chopr_5",Y_="_modalName_chopr_12",Q_="_modalClose_chopr_18",Z_="_modalForm_chopr_29",J_="_infoText_chopr_34",X_="_label_chopr_39",e9="_changeEmailLink_chopr_64",t9="_submitButton_chopr_77",Rr={modalBack:K_,modalHeader:G_,modalName:Y_,modalClose:Q_,modalForm:Z_,infoText:J_,label:X_,changeEmailLink:e9,submitButton:t9},r9=({email:r,error:t,onClose:a,onSubmit:i,onBack:s,onForgotPassword:c,onClearError:u})=>{const[f,h]=_.useState(""),[m,y]=_.useState(!1),w=E=>{E.preventDefault(),m&&i(f)},v=(E,S)=>{E==="password"&&y(S)},x=E=>{t&&u(),h(E)};return g.jsxs(g.Fragment,{children:[g.jsxs("div",{className:Rr.modalName,children:[g.jsx(Pn,{className:Rr.modalBack,onClick:s}),g.jsx("span",{className:"h2",children:"Р’С…РѕРґ Рё регистрация"})]}),g.jsxs("div",{className:Rr.modalHeader,children:[g.jsx("span",{className:"h2",children:"Введите пароль"}),g.jsx(Tn,{className:Rr.modalClose,onClick:a})]}),g.jsxs("form",{className:Rr.modalForm,onSubmit:w,noValidate:!0,children:[g.jsx("p",{className:`${Rr.infoText} body-1`,children:g.jsx("span",{className:Rr.emailText,children:r})}),g.jsx("button",{type:"button",className:`${Rr.changeEmailLink} body-1`,onClick:s,children:"Рзменить почту"}),g.jsxs("label",{htmlFor:"password",className:`${Rr.label} body-2`,children:["Пароль",g.jsx(Yt,{name:"password",type:"password",placeholder:"Введите пароль",value:f,onInputValueChange:x,validation:!0,validationType:["required"],onValidationChange:v,customError:t,autoFocus:!0})]}),g.jsx(xt,{type:"submit",disabled:!m,className:Rr.submitButton,children:"Войти"}),g.jsx("span",{className:`${Rr.label} body-2`,children:"Забыли пароль?"}),g.jsx(xt,{type:"button",variant:"outlined",onClick:c,className:Rr.restoreButton,children:"Восстановить доступ"})]})]})},n9="_modalBack_1yaqz_1",a9="_modalHeader_1yaqz_5",o9="_modalName_1yaqz_12",i9="_modalClose_1yaqz_18",s9="_modalForm_1yaqz_29",l9="_title_1yaqz_48",c9="_recommendationText_1yaqz_53",u9="_label_1yaqz_59",d9="_submitButton_1yaqz_83",f9="_backButton_1yaqz_87",Hr={modalBack:n9,modalHeader:a9,modalName:o9,modalClose:i9,modalForm:s9,title:l9,recommendationText:c9,label:u9,submitButton:d9,backButton:f9};function p9({onClose:r,onSubmit:t,onBack:a}){const[i,s]=_.useState(""),[c,u]=_.useState(""),[f,h]=_.useState(!1),m=i===c,y=f&&c!==""&&m,w=v=>{v.preventDefault(),y&&t(i)};return g.jsxs(g.Fragment,{children:[g.jsxs("div",{className:Hr.modalName,children:[g.jsx(Pn,{className:Hr.modalBack,onClick:a}),g.jsx("span",{className:"h2",children:"Р’С…РѕРґ Рё регистрация"})]}),g.jsxs("div",{className:Hr.modalHeader,children:[g.jsx("button",{type:"button",onClick:a,className:Hr.backButton,children:g.jsxs("span",{className:"body-1",children:["<"," Назад"]})}),g.jsx(Tn,{className:Hr.modalClose,onClick:r})]}),g.jsx("h2",{className:`h2 ${Hr.title}`,children:"Создайте пароль"}),g.jsxs("form",{className:Hr.modalForm,onSubmit:w,noValidate:!0,children:[g.jsxs("label",{className:`${Hr.label} body-2`,children:["Пароль",g.jsx(Yt,{name:"password",type:"password",placeholder:"Пароль",value:i,onInputValueChange:s,validation:!0,validationType:["password"],onValidationChange:(v,x)=>h(x),autoFocus:!0})]}),g.jsx("p",{className:`${Hr.recommendationText} body-3`,children:"Рекомендуется использовать РЅРµ менее 8 символов, включая заглавные Рё строчные Р±СѓРєРІС‹, цифры Рё специальные символы (!, @, #, $ Рё С‚. Рґ.)"}),g.jsxs("label",{className:`${Hr.label} body-2`,children:["Подтверждение пароля",g.jsx(Yt,{name:"confirmPassword",type:"password",placeholder:"Пароль",value:c,onInputValueChange:u,validation:!0,customError:c.length>0&&!m?"Пароли РЅРµ совпадают":void 0})]}),g.jsx(xt,{type:"submit",disabled:!y,className:Hr.submitButton,children:"Далее"})]})]})}const h9="_modalBack_1lqgy_1",m9="_modalHeader_1lqgy_5",g9="_modalName_1lqgy_12",y9="_modalClose_1lqgy_18",v9="_modalForm_1lqgy_29",w9="_title_1lqgy_48",C9="_recommendationText_1lqgy_53",_9="_label_1lqgy_59",x9="_submitButton_1lqgy_96",S9="_backButton_1lqgy_100",Wr={modalBack:h9,modalHeader:m9,modalName:g9,modalClose:y9,modalForm:v9,title:w9,recommendationText:C9,label:_9,submitButton:x9,backButton:S9};function E9({onClose:r,onSubmit:t,onBack:a}){const[i,s]=_.useState(""),[c,u]=_.useState(""),[f,h]=_.useState(!1),m=i===c,y=f&&c!==""&&m,w=v=>{v.preventDefault(),y&&t(i)};return g.jsxs(g.Fragment,{children:[g.jsxs("div",{className:Wr.modalName,children:[g.jsx(Pn,{className:Wr.modalBack,onClick:a}),g.jsx("span",{className:"h2",children:"Р’С…РѕРґ Рё регистрация"})]}),g.jsxs("div",{className:Wr.modalHeader,children:[g.jsx("button",{type:"button",onClick:a,className:Wr.backButton,children:g.jsxs("span",{className:"body-1",children:["<"," Назад"]})}),g.jsx(Tn,{className:Wr.modalClose,onClick:r})]}),g.jsx("h2",{className:`h2 ${Wr.title}`,children:"Создайте новый пароль"}),g.jsxs("form",{className:Wr.modalForm,onSubmit:w,noValidate:!0,children:[g.jsxs("label",{className:`${Wr.label} body-2`,children:["Пароль",g.jsx(Yt,{name:"password",type:"password",placeholder:"Пароль",value:i,onInputValueChange:s,validation:!0,validationType:["password"],onValidationChange:(v,x)=>h(x),autoFocus:!0})]}),g.jsx("p",{className:`${Wr.recommendationText} body-3`,children:"Рекомендуется использовать РЅРµ менее 8 символов, включая заглавные Рё строчные Р±СѓРєРІС‹, цифры Рё специальные символы (!, @, #, $ Рё С‚. Рґ.)"}),g.jsxs("label",{className:`${Wr.label} body-2`,children:["Подтверждение пароля",g.jsx(Yt,{name:"confirmPassword",type:"password",placeholder:"Пароль",value:c,onInputValueChange:u,validation:!0,customError:c.length>0&&!m?"Пароли РЅРµ совпадают":void 0})]}),g.jsx(xt,{type:"submit",disabled:!y,className:Wr.submitButton,children:"Далее"})]})]})}const k9="_modalBack_167fg_1",b9="_modalHeader_167fg_5",I9="_modalName_167fg_12",T9="_modalClose_167fg_18",P9="_modalForm_167fg_29",R9="_title_167fg_41",A9="_label_167fg_52",N9="_submitButton_167fg_71",L9="_backButton_167fg_80",j9="_legalConsent_167fg_105",M9="_legalNote_167fg_111",zt={modalBack:k9,modalHeader:b9,modalName:I9,modalClose:T9,modalForm:P9,title:R9,label:A9,submitButton:N9,backButton:L9,legalConsent:j9,legalNote:M9},D9="_container_19gfl_1",$9="_containerLabel_19gfl_9",F9="_containerLabel_disabled_19gfl_18",O9="_checkboxInput_19gfl_23",U9="_visualCheckbox_19gfl_37",z9="_visualCheckbox_checked_19gfl_52",B9="_visualCheckbox_disabled_unchecked_19gfl_64",V9="_visualCheckbox_disabled_checked_19gfl_69",H9="_visualCheckbox_error_19gfl_74",W9="_errorMessage_19gfl_78",q9="_container_mobile_19gfl_82",K9="_mobileTag_19gfl_102",G9="_mobileTag_checked_19gfl_118",Y9="_mobileTag_disabled_19gfl_123",Q9="_checkboxInput_hidden_19gfl_132",Bt={container:D9,containerLabel:$9,containerLabel_disabled:F9,checkboxInput:O9,visualCheckbox:U9,visualCheckbox_checked:z9,visualCheckbox_disabled_unchecked:B9,visualCheckbox_disabled_checked:V9,visualCheckbox_error:H9,errorMessage:W9,container_mobile:q9,mobileTag:K9,mobileTag_checked:G9,mobileTag_disabled:Y9,checkboxInput_hidden:Q9},Z9="data:image/svg+xml,%3csvg%20width='20'%20height='15'%20viewBox='0%200%2020%2015'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M18.599%200.692507L7.08319%2012.2075C7.00577%2012.2852%206.91375%2012.3469%206.81244%2012.389C6.71112%2012.4311%206.60248%2012.4527%206.49277%2012.4527C6.38306%2012.4527%206.27443%2012.4311%206.17311%2012.389C6.07179%2012.3469%205.97978%2012.2852%205.90236%2012.2075L1.44902%207.75001C1.3716%207.67228%201.27959%207.6106%201.17827%207.56851C1.07695%207.52643%200.968318%207.50477%200.858607%207.50477C0.748895%207.50477%200.640264%207.52643%200.538945%207.56851C0.437626%207.6106%200.345615%207.67228%200.26819%207.75001C0.19046%207.82743%200.128782%207.91944%200.0866978%208.02076C0.0446131%208.12208%200.0229492%208.23071%200.0229492%208.34042C0.0229492%208.45013%200.0446131%208.55877%200.0866978%208.66008C0.128782%208.7614%200.19046%208.85342%200.26819%208.93084L4.72319%2013.385C5.19315%2013.8541%205.83002%2014.1175%206.49402%2014.1175C7.15803%2014.1175%207.7949%2013.8541%208.26486%2013.385L19.7799%201.87251C19.8575%201.7951%2019.919%201.70314%2019.961%201.6019C20.0031%201.50065%2020.0247%201.39212%2020.0247%201.28251C20.0247%201.17289%2020.0031%201.06436%2019.961%200.963117C19.919%200.861875%2019.8575%200.769916%2019.7799%200.692507C19.7024%200.614776%2019.6104%200.553099%2019.5091%200.511014C19.4078%200.46893%2019.2992%200.447266%2019.1894%200.447266C19.0797%200.447266%2018.9711%200.46893%2018.8698%200.511014C18.7685%200.553099%2018.6764%200.614776%2018.599%200.692507Z'%20fill='white'/%3e%3c/svg%3e",D0=({options:r,value:t,onChange:a,name:i,className:s="",type:c="classic",error:u,...f})=>{const h=_.useId(),m=[c==="mobile"?Bt.container_mobile:Bt.container,s].filter(Boolean).join(" "),y=(w,v)=>{v||(t.includes(w)?a(t.filter(x=>x!==w)):a([...t,w]))};return g.jsxs("div",{children:[g.jsx("div",{className:m,children:r.map(w=>{const v=`${i}-${String(w.value).replace(/\s+/g,"-")}-${h}`,x=t.includes(w.value);if(c==="mobile"){const L=[Bt.mobileTag,x&&Bt.mobileTag_checked,w.disabled&&Bt.mobileTag_disabled].filter(Boolean).join(" ");return g.jsxs("label",{htmlFor:v,className:`${L} body-3`,children:[g.jsx("input",{type:"checkbox",id:v,className:Bt.checkboxInput_hidden,checked:x,onChange:()=>y(w.value,w.disabled),disabled:w.disabled,name:i,value:w.value,"aria-checked":x,...f}),w.label]},w.value)}const E=[Bt.visualCheckbox,x&&Bt.visualCheckbox_checked,w.disabled&&(x?Bt.visualCheckbox_disabled_checked:Bt.visualCheckbox_disabled_unchecked),u&&!x&&Bt.visualCheckbox_error].filter(Boolean).join(" "),S=[Bt.containerLabel,w.disabled?Bt.containerLabel_disabled:""].filter(Boolean).join(" ");return g.jsxs("label",{htmlFor:v,className:S,children:[g.jsx("input",{type:"checkbox",id:v,className:Bt.checkboxInput,checked:x,onChange:()=>y(w.value,w.disabled),disabled:w.disabled,name:i,value:w.value,"aria-checked":x,...f}),g.jsx("span",{className:E,"aria-hidden":"true",children:x&&g.jsx("img",{src:Z9,alt:""})}),w.label&&g.jsx("span",{className:`${Bt.label} body-1`,children:w.label})]},w.value)})}),typeof u=="string"&&u&&g.jsx("div",{className:`${Bt.errorMessage} body-3`,role:"alert","aria-live":"polite",children:u})]})},J9="_inputSelectWrapper_klrmh_1",X9="_inputError_klrmh_8",e8="_errorMessage_klrmh_12",t8="_inputDisplay_klrmh_16",r8="_disabled_klrmh_32",n8="_aiHighlighted_klrmh_43",a8="_trailingSlot_klrmh_47",o8="_displayContent_klrmh_55",i8="_optionIcon_klrmh_62",s8="_inputIcon_klrmh_67",l8="_open_klrmh_79",c8="_dropdown_klrmh_83",u8="_dropdownOption_klrmh_125",d8="_selected_klrmh_138",f8="_disabledOption_klrmh_142",Pt={inputSelectWrapper:J9,inputError:X9,errorMessage:e8,inputDisplay:t8,disabled:r8,aiHighlighted:n8,trailingSlot:a8,displayContent:o8,optionIcon:i8,inputIcon:s8,open:l8,dropdown:c8,dropdownOption:u8,selected:d8,disabledOption:f8},p8=r=>_.createElement("svg",{width:12,height:7,viewBox:"0 0 12 7",fill:"none",xmlns:"http://www.w3.org/2000/svg",...r},_.createElement("path",{d:"M1.00115 0.967316C1.11082 0.966682 1.21954 0.987703 1.32107 1.02917C1.4226 1.07064 1.51495 1.13175 1.59281 1.20898L5.40948 5.03398C5.48695 5.11209 5.57912 5.17408 5.68067 5.21639C5.78222 5.2587 5.89114 5.28048 6.00115 5.28048C6.11116 5.28048 6.22008 5.2587 6.32163 5.21639C6.42318 5.17408 6.51534 5.11209 6.59281 5.03398L10.4095 1.20898C10.5664 1.05206 10.7792 0.963906 11.0011 0.963906C11.2231 0.963906 11.4359 1.05206 11.5928 1.20898C11.7497 1.3659 11.8379 1.57873 11.8379 1.80065C11.8379 1.91053 11.8162 2.01934 11.7742 2.12086C11.7321 2.22238 11.6705 2.31462 11.5928 2.39232L7.76781 6.20898C7.29286 6.66529 6.65978 6.92013 6.00115 6.92013C5.34252 6.92013 4.70943 6.66529 4.23448 6.20898L0.409481 2.39232C0.331374 2.31485 0.269378 2.22268 0.227071 2.12113C0.184763 2.01958 0.162982 1.91066 0.162982 1.80065C0.162982 1.69064 0.184763 1.58172 0.227071 1.48017C0.269378 1.37862 0.331374 1.28645 0.409481 1.20898C0.487349 1.13175 0.579694 1.07064 0.681225 1.02917C0.782756 0.987703 0.891475 0.966682 1.00115 0.967316Z",fill:"#31323A"})),h8="_container_14dno_1",m8="_containerOpen_14dno_11",g8="_trigger_14dno_15",y8="_icon_14dno_20",v8="_panel_14dno_26",w8="_panelVisible_14dno_44",C8="_panelRight_14dno_50",Ea={container:h8,containerOpen:m8,trigger:g8,icon:y8,panel:v8,panelVisible:w8,panelRight:C8},_8=r=>_.createElement("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...r},_.createElement("rect",{width:24,height:24,rx:12,fill:"#F7E1FF"}),_.createElement("path",{d:"M10.5548 4.01175C11.0721 2.70018 12.9283 2.70018 13.4456 4.01177L14.7608 8.54925C14.9187 8.94968 15.0505 9.08148 15.451 9.2394L19.9885 10.5546C21.3001 11.0719 21.3001 12.9281 19.9885 13.4454L15.451 14.7606C15.0505 14.9185 14.9187 15.0503 14.7608 15.4507L13.4456 19.9883C12.9283 21.2998 11.0721 21.2998 10.5548 19.9883L9.23964 15.4507C9.08171 15.0503 8.94993 14.9185 8.5495 14.7606L4.012 13.4454C2.70042 12.9281 2.70042 11.0719 4.01201 10.5546L8.5495 9.2394C8.94993 9.08146 9.08172 8.94968 9.23964 8.54925L10.5548 4.01175Z",stroke:"#331B3C",strokeWidth:2.24297})),x8=r=>_.createElement("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...r},_.createElement("rect",{width:24,height:24,rx:12,fill:"#F7E1FF"}),_.createElement("path",{d:"M12.5003 20.2858C13.0723 20.2858 13.7087 19.8221 13.7087 19.2501V18.9854C13.7087 18.4134 13.0723 17.9497 12.5003 17.9497C11.9283 17.9497 11.292 18.4134 11.292 18.9854V19.2501C11.292 19.8221 11.9283 20.2858 12.5003 20.2858ZM12.5003 16.1429C13.0723 16.1429 13.7087 15.6792 13.7087 15.1072V4.75007C13.7087 4.17806 13.0723 3.71436 12.5003 3.71436C11.9283 3.71436 11.292 4.17806 11.292 4.75007V15.1072C11.292 15.6792 11.9283 16.1429 12.5003 16.1429Z",fill:"#331B3C"})),S8=(r=768)=>{const[t,a]=_.useState(window.innerWidth<r);return _.useEffect(()=>{const i=()=>a(window.innerWidth<r);return window.addEventListener("resize",i),()=>window.removeEventListener("resize",i)},[r]),t},E8=({text:r,icon:t="sparkle",position:a="left",className:i="",gap:s=10})=>{const[c,u]=_.useState(!1),[f,h]=_.useState(!1),[m,y]=_.useState({}),w=S8(),v=_.useRef(null),x=_.useRef(null),E=_.useRef(null),S=_.useRef(null);_.useEffect(()=>(c?h(!0):S.current=setTimeout(()=>{h(!1)},200),()=>{S.current&&clearTimeout(S.current)}),[c]);const L=()=>{w&&u(P=>!P)},M=()=>{w||u(!0)},N=()=>{w||u(!1)};_.useEffect(()=>{const P=H=>{v.current&&!v.current.contains(H.target)&&u(!1)};return c&&w&&document.addEventListener("mousedown",P),()=>{document.removeEventListener("mousedown",P)}},[c,w]),_.useLayoutEffect(()=>{if(f&&x.current){const P=x.current.getBoundingClientRect(),H=P.height+s;if(a==="middle"||a==="center"){if(v.current&&E.current){const k=v.current.getBoundingClientRect(),Q=E.current.getBoundingClientRect();let X=(P.width-Q.width)/2;const ue=16,xe=k.left+X+Q.width,Re=window.innerWidth-ue;xe>Re&&(X-=xe-Re),k.left+X<ue&&(X=ue-k.left),y({top:`${H}px`,left:`${X}px`})}}else if(a==="right")if(v.current&&E.current){const k=v.current.getBoundingClientRect(),Q=E.current.getBoundingClientRect(),X=16;k.right-Q.width<X?y({top:`${H}px`,left:`${X-k.left}px`,right:"auto"}):y({top:`${H}px`})}else y({top:`${H}px`});else y({top:`${H}px`,left:"0px"})}},[f,a,r,s]);const B=[Ea.container,f?Ea.containerOpen:"",i].filter(Boolean).join(" "),U=t==="alert"?x8:_8;return g.jsxs("div",{ref:v,className:B,onClick:L,onMouseEnter:M,onMouseLeave:N,children:[g.jsx("div",{ref:x,className:Ea.trigger,role:"button","aria-haspopup":"true","aria-expanded":c,children:g.jsx(U,{className:Ea.icon})}),f&&g.jsx("div",{ref:E,className:`${Ea.panel} ${c?Ea.panelVisible:""} ${a==="right"?Ea.panelRight:""}`,style:m,role:"region","aria-label":"Подсказка",children:g.jsx("p",{className:"body-3",children:r})})]})},Cd=r=>r===!0||r===null?!0:r===!1||r===void 0?!1:Array.isArray(r)?r.some(Cd):typeof r=="object"?Object.values(r).some(Cd):!1,k8=r=>r===!0?"Проверьте значение перед сохранением.":r===null?"РќРµ удалось распознать — заполните вручную.":(Array.isArray(r)||r&&typeof r=="object")&&Cd(r)?"Проверьте значение перед сохранением.":null,HS=(r,...t)=>{let a=r;for(const i of t)if(a&&typeof a=="object"&&!Array.isArray(a))a=a[i];else return;return a},$0=({options:r,value:t,onChange:a,placeholder:i="Выберите...",name:s,disabled:c=!1,className:u="",error:f,aiFlag:h})=>{const[m,y]=_.useState(!1),w=k8(h),v=_.useRef(null),x=r.find(U=>U.value===t),E=_.useCallback(U=>{v.current&&!v.current.contains(U.target)&&y(!1)},[]);_.useEffect(()=>(document.addEventListener("mousedown",E),()=>{document.removeEventListener("mousedown",E)}),[E]);const S=()=>{c||y(!m)},L=U=>{U.disabled||(a(U.value,U),y(!1))},M=x?g.jsxs("div",{className:Pt.displayContent,children:[x.icon&&g.jsx("img",{src:x.icon,alt:"",className:Pt.optionIcon}),x.label]}):g.jsx("span",{className:Pt.placeholder,children:i}),N=[Pt.inputSelectWrapper,u,f?Pt.inputError:""].filter(Boolean).join(" "),B=[Pt.inputDisplay,c?Pt.disabled:"",w?Pt.aiHighlighted:""].filter(Boolean).join(" ");return g.jsxs("div",{className:N,ref:v,children:[g.jsxs("div",{className:`${B} body-1`,onClick:S,role:"combobox","aria-expanded":m,tabIndex:c?-1:0,onKeyDown:U=>{(U.key==="Enter"||U.key===" ")&&!m?(U.preventDefault(),S()):U.key==="Escape"&&m&&(U.preventDefault(),y(!1))},"data-name":s,children:[g.jsx("div",{className:Pt.displayContentWrapper,children:M}),g.jsxs("div",{className:Pt.trailingSlot,children:[w&&g.jsx(E8,{icon:"alert",text:w,position:"right"}),g.jsx(p8,{className:`${Pt.inputIcon} ${m?Pt.open:""}`})]})]}),m&&!c&&g.jsx("ul",{className:`${Pt.dropdown} body-1`,role:"listbox",children:r.map(U=>g.jsxs("li",{className:`${Pt.dropdownOption} ${U.value===t?Pt.selected:""} ${U.disabled?Pt.disabledOption:""}`,onClick:()=>L(U),role:"option","aria-selected":U.value===t,"aria-disabled":U.disabled,children:[U.icon&&g.jsx("img",{src:U.icon,alt:"",className:Pt.optionIcon}),U.label]},String(U.value)))}),typeof f=="string"&&f&&g.jsx("div",{className:`${Pt.errorMessage} body-3`,role:"alert","aria-live":"polite",children:f})]})},b8=[{label:"РњСѓР¶СЃРєРѕР№",value:"SEX_MALE"},{label:"Женский",value:"SEX_FEMALE"}],I8=r=>r.replace(/[^\d]/g,"").slice(0,8).replace(/(\d{2})(\d{0,2})(\d{0,4})/,(t,a,i,s)=>{let c=a;return i&&(c+=`.${i}`),s&&(c+=`.${s}`),c}),jm=r=>{if(!r||r.length<10)return!1;const t=r.split(".");if(t.length!==3)return!1;const a=parseInt(t[0],10),i=parseInt(t[1],10)-1,s=parseInt(t[2],10);if(isNaN(a)||isNaN(i)||isNaN(s))return!1;const c=new Date(s,i,a);if(c.getFullYear()!==s||c.getMonth()!==i||c.getDate()!==a)return!1;const u=new Date;let f=u.getFullYear()-c.getFullYear();const h=u.getMonth()-c.getMonth();return(h<0||h===0&&u.getDate()<c.getDate())&&f--,f>=18};function T8({onClose:r,onSubmit:t,onBack:a,initialData:i}){const[s,c]=_.useState(i??{firstName:"",lastName:"",sex:void 0,birthDate:"",city:""}),[u,f]=_.useState({firstName:!!i,lastName:!!i,sex:!!(i!=null&&i.sex),birthDate:!!i,city:!!i}),[h,m]=_.useState([]),y=(S,L)=>{const M=S==="birthDate"?I8(L):L;c(N=>({...N,[S]:M}))},w=(S,L)=>{f(M=>({...M,[S]:L}))},v=Object.values(u).every(Boolean)&&jm(s.birthDate),x=h.length>0,E=S=>{S.preventDefault(),v&&x&&t(s)};return g.jsxs(g.Fragment,{children:[g.jsxs("div",{className:zt.modalName,children:[g.jsx(Pn,{className:zt.modalBack,onClick:a}),g.jsx("span",{className:"h2",children:"Р’С…РѕРґ Рё регистрация"})]}),g.jsxs("div",{className:zt.modalHeader,children:[g.jsx("button",{type:"button",onClick:a,className:zt.backButton,children:g.jsxs("span",{className:"body-1",children:["<"," Назад"]})}),g.jsx(Tn,{className:zt.modalClose,onClick:r})]}),g.jsx("h2",{className:`h2 ${zt.title}`,children:"Введите информацию Рѕ себе"}),g.jsxs("form",{className:zt.modalForm,onSubmit:E,noValidate:!0,children:[g.jsxs("label",{className:`${zt.label} body-2`,children:["РРјСЏ",g.jsx(Yt,{name:"firstName",type:"text",placeholder:"Рван",value:s.firstName,onInputValueChange:S=>y("firstName",S),validation:!0,validationType:["required","name"],onValidationChange:w,maxLength:50,autoFocus:!0})]}),g.jsxs("label",{className:`${zt.label} body-2`,children:["Фамилия",g.jsx(Yt,{name:"lastName",type:"text",placeholder:"Рванов",value:s.lastName,onInputValueChange:S=>y("lastName",S),validation:!0,validationType:["required","name"],onValidationChange:w,maxLength:50})]}),g.jsxs("label",{className:`${zt.label} body-2`,children:["РџРѕР»",g.jsx($0,{name:"sex",options:b8,value:s.sex,placeholder:"РќРµ выбрано",onChange:S=>{c(L=>({...L,sex:S})),w("sex",!0)}})]}),g.jsxs("label",{className:`${zt.label} body-2`,children:["Дата рождения",g.jsx(Yt,{name:"birthDate",type:"text",placeholder:"ДД.РњРњ.ГГГГ",value:s.birthDate,onInputValueChange:S=>y("birthDate",S),validation:!0,validationType:["required","date"],onValidationChange:w,maxLength:10,customError:s.birthDate.length===10&&!jm(s.birthDate)?"Возраст должен быть РЅРµ менее 18 лет":void 0})]}),g.jsxs("label",{className:`${zt.label} body-2`,children:["Город",g.jsx(Yt,{name:"city",type:"text",placeholder:"РњРѕСЃРєРІР°",value:s.city,onInputValueChange:S=>y("city",S),validation:!0,validationType:["required","name"],onValidationChange:w,maxLength:50})]}),g.jsxs("div",{className:zt.submitApplicantInfo,children:[g.jsxs("div",{className:zt.legalConsent,children:[g.jsx(D0,{name:"consent",options:[{value:"agreed",label:""}],value:h,onChange:m}),g.jsxs("p",{className:`${zt.legalNote} body-3`,children:["Нажимая «Войти», СЏ принимаю условия"," ",g.jsx(Qe,{to:"/applicant-agreement",target:"_blank",rel:"noopener noreferrer",children:"Пользовательского соглашения"}),", подтверждаю, что ознакомлен СЃ"," ",g.jsx(Qe,{to:"/privacy-policy",target:"_blank",rel:"noopener noreferrer",children:"Политикой РІ отношении персональных данных"})," ","Рё даю СЃРІРѕРµ"," ",g.jsx(Qe,{to:"/personal-data-policy",target:"_blank",rel:"noopener noreferrer",children:"Согласие РЅР° обработку персональных данных"})]})]}),g.jsx(xt,{type:"submit",disabled:!v||!x,className:zt.submitButton,children:"Войти"})]})]})]})}const P8="_modalBack_167fg_1",R8="_modalHeader_167fg_5",A8="_modalName_167fg_12",N8="_modalClose_167fg_18",L8="_modalForm_167fg_29",j8="_title_167fg_41",M8="_label_167fg_52",D8="_submitButton_167fg_71",$8="_backButton_167fg_80",F8="_legalConsent_167fg_105",O8="_legalNote_167fg_111",Gt={modalBack:P8,modalHeader:R8,modalName:A8,modalClose:N8,modalForm:L8,title:j8,label:M8,submitButton:D8,backButton:$8,legalConsent:F8,legalNote:O8};function U8(r,t){const[a,i]=_.useState(r);return _.useEffect(()=>{const s=setTimeout(()=>{i(r)},t);return()=>{clearTimeout(s)}},[r,t]),a}function z8({onClose:r,onSubmit:t,onBack:a}){const[i,s]=_.useState({firstName:"",lastName:"",company:null,position:""}),[c,u]=_.useState({firstName:!1,lastName:!1,companyName:!1,position:!1}),[f,h]=_.useState(""),m=U8(f,500),[y,w]=_.useState([]),[v,x]=_.useState([]);_.useEffect(()=>{if(m.trim().length===0){w([]);return}Vt.listCompaniesWithSearch(m).then(P=>{w(((P==null?void 0:P.companies)||[]).map(H=>({label:H.companyName,value:H.id})))}).catch(()=>w([]))},[m]);const E=(P,H)=>{u(k=>({...k,[P]:H}))},S=(P,H)=>{s(k=>({...k,[P]:H}))},L=P=>{h(P),s(H=>({...H,company:{companyName:P}})),E("companyName",P.trim()!=="")},M=P=>{h(P.label),s(H=>({...H,company:{id:P.value,companyName:P.label}})),w([]),E("companyName",!0)},N=Object.values(c).every(Boolean),B=v.length>0,U=P=>{P.preventDefault(),N&&B&&t(i)};return g.jsxs(g.Fragment,{children:[g.jsxs("div",{className:Gt.modalName,children:[g.jsx(Pn,{className:Gt.modalBack,onClick:a}),g.jsx("span",{className:"h2",children:"Р’С…РѕРґ Рё регистрация"})]}),g.jsxs("div",{className:Gt.modalHeader,children:[g.jsx("button",{type:"button",onClick:a,className:Gt.backButton,children:g.jsxs("span",{className:"body-1",children:["<"," Назад"]})}),g.jsx(Tn,{className:Gt.modalClose,onClick:r})]}),g.jsx("h2",{className:`h2 ${Gt.title}`,children:"Введите информацию Рѕ себе"}),g.jsxs("form",{className:Gt.modalForm,onSubmit:U,noValidate:!0,children:[g.jsxs("label",{className:`${Gt.label} body-2`,children:["РРјСЏ",g.jsx(Yt,{name:"firstName",type:"text",placeholder:"Рван",value:i.firstName,onInputValueChange:P=>S("firstName",P),validation:!0,validationType:["required","name"],onValidationChange:E,maxLength:50,autoFocus:!0})]}),g.jsxs("label",{className:`${Gt.label} body-2`,children:["Фамилия",g.jsx(Yt,{name:"lastName",type:"text",placeholder:"Рванов",value:i.lastName,onInputValueChange:P=>S("lastName",P),validation:!0,validationType:["required","name"],onValidationChange:E,maxLength:50})]}),g.jsxs("label",{className:`${Gt.label} body-2`,children:["Название компании",g.jsx(Yt,{name:"companyName",type:"text",placeholder:"РћРћРћ «Компания»",value:f,onInputValueChange:L,onSuggestionSelect:M,suggestions:y,validation:!0,validationType:["required"],onValidationChange:E,maxLength:100})]}),g.jsxs("label",{className:`${Gt.label} body-2`,children:["Должность",g.jsx(Yt,{name:"position",type:"text",placeholder:"Менеджер",value:i.position,onInputValueChange:P=>S("position",P),validation:!0,validationType:["required","textOnly"],onValidationChange:E,maxLength:100})]}),g.jsxs("div",{className:Gt.submitApplicantInfo,children:[g.jsxs("div",{className:Gt.legalConsent,children:[g.jsx(D0,{name:"consent",options:[{value:"agreed",label:""}],value:v,onChange:x}),g.jsxs("p",{className:`${Gt.legalNote} body-3`,children:["Нажимая «Войти», СЏ принимаю условия"," ",g.jsx(Qe,{to:"/employer-offer",target:"_blank",rel:"noopener noreferrer",children:"Публичной оферты"}),", подтверждаю, что ознакомлен СЃ"," ",g.jsx(Qe,{to:"/privacy-policy",target:"_blank",rel:"noopener noreferrer",children:"Политикой РІ отношении персональных данных"})," ","Рё даю СЃРІРѕРµ"," ",g.jsx(Qe,{to:"/personal-data-policy",target:"_blank",rel:"noopener noreferrer",children:"Согласие РЅР° обработку персональных данных"})]})]}),g.jsx(xt,{type:"submit",disabled:!N||!B,className:Gt.submitButton,children:"Войти"})]})]})]})}const B8="_modalBack_1y2po_1",V8="_modalHeader_1y2po_5",H8="_modalName_1y2po_12",W8="_modalClose_1y2po_18",q8="_backButton_1y2po_33",K8="_title_1y2po_58",G8="_subtitle_1y2po_63",Y8="_importButton_1y2po_69",Q8="_skipButton_1y2po_74",En={modalBack:B8,modalHeader:V8,modalName:H8,modalClose:W8,backButton:q8,title:K8,subtitle:G8,importButton:Y8,skipButton:Q8};function Z8({onClose:r,onBack:t,onImport:a,onSkip:i}){return g.jsxs(g.Fragment,{children:[g.jsxs("div",{className:En.modalName,children:[g.jsx(Pn,{className:En.modalBack,onClick:t}),g.jsx("span",{className:"h2",children:"Есть готовое резюме?"})]}),g.jsxs("div",{className:En.modalHeader,children:[g.jsx("button",{type:"button",onClick:t,className:En.backButton,children:g.jsxs("span",{className:"body-1",children:["<"," Назад"]})}),g.jsx(Tn,{className:En.modalClose,onClick:r})]}),g.jsx("h2",{className:`h2 ${En.title}`,children:"Есть готовое резюме?"}),g.jsx("p",{className:`${En.subtitle} body-1`,children:"РњС‹ автоматически заполним профиль РЅР° его РѕСЃРЅРѕРІРµ"}),g.jsx(xt,{className:En.importButton,onClick:a,children:"Рмпортировать резюме РІ профиль"}),g.jsx(xt,{variant:"secondary",className:En.skipButton,onClick:i,children:"Пропустить"})]})}function J8(r){const[t,a]=_.useState(r),[i,s]=_.useState(null);return t!==r&&(a(r),s(r)),i===r}const X8="_overlay_z9jvh_1",e7="_closing_z9jvh_32",t7="_modal_z9jvh_36",r7="_panel_z9jvh_71",n7="_panelForward_z9jvh_76",a7="_panelBackward_z9jvh_80",ka={overlay:X8,closing:e7,modal:t7,panel:r7,panelForward:n7,panelBackward:a7},o7=({isClosing:r,panelKey:t,direction:a,children:i})=>{const c=J8(t)?`${ka.panel} ${a===1?ka.panelForward:ka.panelBackward}`:ka.panel;return g.jsx("div",{className:`${ka.overlay} ${r?ka.closing:""}`,children:g.jsx("div",{className:ka.modal,children:g.jsx("div",{className:c,children:i},t)})})},i7="_container_1arjr_23",s7="_toastEnter_1arjr_41",l7="_toastExit_1arjr_45",c7="_content_1arjr_49",u7="_icon_1arjr_55",d7="_message_1arjr_65",po={container:i7,toastEnter:s7,toastExit:l7,content:c7,icon:u7,message:d7},f7=r=>_.createElement("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...r},_.createElement("g",{clipPath:"url(#clip0_8324_10027)"},_.createElement("path",{d:"M12 0C9.62663 0 7.30655 0.703788 5.33316 2.02236C3.35977 3.34094 1.8217 5.21509 0.913451 7.4078C0.00519943 9.60051 -0.232441 12.0133 0.230582 14.3411C0.693605 16.6689 1.83649 18.8071 3.51472 20.4853C5.19295 22.1635 7.33115 23.3064 9.65892 23.7694C11.9867 24.2324 14.3995 23.9948 16.5922 23.0866C18.7849 22.1783 20.6591 20.6402 21.9776 18.6668C23.2962 16.6935 24 14.3734 24 12C23.9966 8.81846 22.7312 5.76821 20.4815 3.51852C18.2318 1.26883 15.1815 0.00344108 12 0ZM12 22C10.0222 22 8.08879 21.4135 6.4443 20.3147C4.79981 19.2159 3.51809 17.6541 2.76121 15.8268C2.00433 13.9996 1.8063 11.9889 2.19215 10.0491C2.578 8.10929 3.53041 6.32746 4.92894 4.92893C6.32746 3.53041 8.10929 2.578 10.0491 2.19215C11.9889 1.8063 13.9996 2.00433 15.8268 2.7612C17.6541 3.51808 19.2159 4.79981 20.3147 6.4443C21.4135 8.08879 22 10.0222 22 12C21.9971 14.6513 20.9426 17.1931 19.0679 19.0679C17.1931 20.9426 14.6513 21.9971 12 22Z",fill:"#C65C4A"}),_.createElement("path",{d:"M12 10H11C10.7348 10 10.4804 10.1054 10.2929 10.2929C10.1054 10.4804 10 10.7348 10 11C10 11.2652 10.1054 11.5196 10.2929 11.7071C10.4804 11.8946 10.7348 12 11 12H12V18C12 18.2652 12.1054 18.5196 12.2929 18.7071C12.4804 18.8946 12.7348 19 13 19C13.2652 19 13.5196 18.8946 13.7071 18.7071C13.8946 18.5196 14 18.2652 14 18V12C14 11.4696 13.7893 10.9609 13.4142 10.5858C13.0391 10.2107 12.5304 10 12 10Z",fill:"#C65C4A"}),_.createElement("path",{d:"M12 8C12.8284 8 13.5 7.32843 13.5 6.5C13.5 5.67157 12.8284 5 12 5C11.1716 5 10.5 5.67157 10.5 6.5C10.5 7.32843 11.1716 8 12 8Z",fill:"#C65C4A"})),_.createElement("defs",null,_.createElement("clipPath",{id:"clip0_8324_10027"},_.createElement("rect",{width:24,height:24,fill:"white"})))),Gs=new Set,p7=({children:r,onClose:t})=>{const[a,i]=_.useState(!1);_.useEffect(()=>{const u=setTimeout(()=>{i(!0)},5e3);return()=>clearTimeout(u)},[]);const s=()=>{a&&t()},c=`${po.container} ${a?po.toastExit:po.toastEnter}`;return g.jsx("div",{className:c,onAnimationEnd:s,children:g.jsxs("div",{className:po.content,children:[g.jsx(f7,{className:po.icon}),g.jsx("span",{className:`body-1 ${po.message}`,children:r})]})})},Mm=({children:r,id:t})=>{const a=t||(typeof r=="string"?r:null);if(a&&Gs.has(a))return;a&&Gs.add(a);const i=document.getElementById("modals");if(!i){console.error("The element #modals was not found in the DOM."),a&&Gs.delete(a);return}const s=document.createElement("div");i.appendChild(s);const c=Ym.createRoot(s),u=()=>{c.unmount(),i.contains(s)&&i.removeChild(s),a&&Gs.delete(a)};c.render(g.jsx(p7,{onClose:u,children:r}))},h7=r=>r==="Рщу сотрудников"?"employer":"applicant",m7=r=>{if(!r||!/^\d{2}\.\d{2}\.\d{4}$/.test(r))return null;const[t,a,i]=r.split(".");return`${i}-${a}-${t}`};function g7({onClose:r}){const t=Cr(),a=un(),[i]=Nd(),[s,c]=_.useState("mail"),[u,f]=_.useState(1),[h,m]=_.useState(!1),[y,w]=_.useState("register"),[v,x]=_.useState({email:"",role:"applicant",password:"",code:""}),[E,S]=_.useState(null),[L,M]=_.useState([]),[N,B]=_.useState(null),U=J=>{f(1),c(J)},P=()=>{m(!0),setTimeout(()=>r(),300)};_.useEffect(()=>{s==="registerEmployer"&&L.length===0&&Vt.listCompanies().then(J=>{M(J.companies||[])}).catch(()=>{S("РќРµ удалось загрузить СЃРїРёСЃРѕРє компаний")})},[s,L.length]);const H=_.useCallback(()=>{S(null)},[]),k=()=>{S(null),f(-1),c(s==="login"?"mail":s==="code"?y==="recover"?"login":"mail":s==="createNewPassword"||s==="createPassword"?"code":s==="registerApplicant"||s==="registerEmployer"?"createPassword":"mail")},Q=()=>{r();const J=i.get("redirect_url");a(J||"/profile")},X=async({email:J,applicantType:ae})=>{var oe,Ee,Ie,Be,gt,Mr;S(null);const te=h7(ae);x(Oe=>({...Oe,email:J,role:te}));try{const Oe=await Vt.checkEmail({email:J,role:te}),dt=(oe=Oe==null?void 0:Oe.message)==null?void 0:oe.toLowerCase();if(dt==="invalid email format"){S("Введите корректный email");return}if(dt==="user with such email already registered with another role"){S(`Ртот email СѓР¶Рµ используется для РІС…РѕРґР° как ${te==="applicant"?"работодатель":"соискатель"}`);return}dt==="user not found"?(w("register"),await Vt.sendCode({email:J}),U("code")):U("login")}catch(Oe){const dt=((Be=(Ie=(Ee=Oe==null?void 0:Oe.response)==null?void 0:Ee.data)==null?void 0:Ie.message)==null?void 0:Be.toLowerCase())||"";S(dt==="invalid email format"?"Неверный формат электронной почты":((Mr=(gt=Oe==null?void 0:Oe.response)==null?void 0:gt.data)==null?void 0:Mr.message)||"Произошла непредвиденная ошибка")}},ue=async J=>{S(null);try{const ae=await t(Na({email:v.email,password:J}));Xs(ae),Q()}catch(ae){const te=(typeof ae=="string"?ae:ae.message||"").toLowerCase();te.toLowerCase()==="invalid password"?S("Неправильный пароль"):te.toLowerCase()==="user not found"?S("Неправильный логин"):S("Произошла ошибка РІС…РѕРґР°")}},xe=async()=>{var J,ae;S(null);try{w("recover"),await Vt.resetPassword({email:v.email}),U("code")}catch(te){S(((ae=(J=te==null?void 0:te.response)==null?void 0:J.data)==null?void 0:ae.message)||"РќРµ удалось отправить РєРѕРґ восстановления")}},Re=async J=>{var ae,te,oe;S(null);try{y==="register"?(await Vt.verifyCode({email:v.email,code:J}),x(Ee=>({...Ee,code:J})),U("createPassword")):(await Vt.resetPasswordConfirm({email:v.email,code:J}),x(Ee=>({...Ee,code:J})),U("createNewPassword"))}catch(Ee){const Ie=((oe=(te=(ae=Ee==null?void 0:Ee.response)==null?void 0:ae.data)==null?void 0:te.message)==null?void 0:oe.toLowerCase())||"";Ie.toLowerCase()==="invalid code"?S("Неправильный РєРѕРґ"):Ie.toLowerCase()==="code expired"?S("РЎСЂРѕРє действия РєРѕРґР° истек"):S("Произошла ошибка РїСЂРё проверке РєРѕРґР°")}},Ue=async J=>{var ae,te;S(null);try{await Vt.resetPasswordConfirm({email:v.email,code:v.code,newPassword:J}),U("login")}catch(oe){S(((te=(ae=oe==null?void 0:oe.response)==null?void 0:ae.data)==null?void 0:te.message)||"РќРµ удалось сбросить пароль")}},ve=J=>{S(null),x(ae=>({...ae,password:J})),v.role==="applicant"?U("registerApplicant"):U("registerEmployer")},Me=async J=>{var ae,te;S(null);try{const oe={employer:{user:{email:v.email,password:v.password,name:J.firstName,surname:J.lastName},company:J.company,position:J.position}};await Vt.signUpEmployer(oe);const Ee=await t(Na({email:v.email,password:v.password}));Xs(Ee),Q()}catch(oe){const Ee=((te=(ae=oe==null?void 0:oe.response)==null?void 0:ae.data)==null?void 0:te.message)||(typeof oe=="string"?oe:oe.message)||"Ошибка регистрации";S(Ee)}},ke=J=>{S(null),B(J),U("welcomeResume")},Se=()=>{S(null),f(-1),c("registerApplicant")},q=async()=>{if(!N)return;const J={applicant:{user:{email:v.email,password:v.password,name:N.firstName,surname:N.lastName},city:N.city,dateOfBirth:m7(N.birthDate),sex:N.sex??"SEX_UNSPECIFIED"}};await Vt.signUpApplicant(J);const ae=await t(Na({email:v.email,password:v.password}));Xs(ae)},ie=async()=>{var J,ae;try{await q(),r(),a("/profile?openImportResume=true")}catch(te){const oe=((ae=(J=te==null?void 0:te.response)==null?void 0:J.data)==null?void 0:ae.message)||(typeof te=="string"?te:te.message)||"Ошибка регистрации";Mm({children:oe}),Se()}},ee=async()=>{var J,ae;try{await q(),Q()}catch(te){const oe=((ae=(J=te==null?void 0:te.response)==null?void 0:J.data)==null?void 0:ae.message)||(typeof te=="string"?te:te.message)||"Ошибка регистрации";Mm({children:oe}),Se()}},A=_.useCallback(()=>{S(null),(y==="register"?Vt.sendCode({email:v.email}):Vt.resetPassword({email:v.email})).catch(ae=>{var te,oe;return S(((oe=(te=ae==null?void 0:ae.response)==null?void 0:te.data)==null?void 0:oe.message)||"РќРµ удалось отправить РєРѕРґ")})},[y,v.email]),V=()=>{switch(s){case"mail":return g.jsx(D_,{onClose:P,onSubmit:X,error:E,onClearError:H,initialEmail:v.email});case"login":return g.jsx(r9,{email:v.email,onClose:P,onSubmit:ue,onBack:k,onForgotPassword:xe,error:E,onClearError:H});case"code":return g.jsx(q_,{email:v.email,onClose:P,onSubmit:Re,onBack:k,onResendCode:A,error:E,onClearError:H});case"createNewPassword":return g.jsx(E9,{onClose:P,onSubmit:Ue,onBack:k});case"createPassword":return g.jsx(p9,{onClose:P,onSubmit:ve,onBack:k});case"registerApplicant":return g.jsx(T8,{onClose:P,onSubmit:ke,onBack:k,initialData:N??void 0});case"registerEmployer":return g.jsx(z8,{onClose:P,onSubmit:Me,onBack:k,companies:L});case"welcomeResume":return g.jsx(Z8,{onClose:P,onBack:Se,onImport:ie,onSkip:ee});default:return null}};return g.jsx(o7,{isClosing:h,panelKey:s,direction:u,children:V()})}class Dm{static async getHhVacancyCount(t){try{const a=await W.get(`/v1/import/hh/${t}`);if(!a)throw new Error("ImportApi: Invalid getHhVacancyCount response from API");return a}catch(a){throw console.error("ImportApi: Error fetching HH vacancy count",a),a}}static async importFromHh(t){try{const a=await W.post("/v1/import/hh",t);if(a===void 0)throw new Error("ImportApi: Invalid importFromHh response from API");return a}catch(a){throw console.error("ImportApi: Error importing from HH",a),a}}}const y7=()=>`https://hh.ru/oauth/authorize?${new URLSearchParams({response_type:"code",client_id:r3}).toString()}`,v7="_modalOverlay_pimf3_1",w7="_closing_pimf3_12",C7="_closeButton_pimf3_17",_7="_modal_pimf3_1",x7="_modalContent_pimf3_38",S7="_modalHeader_pimf3_46",E7="_modalMobileHeader_pimf3_55",k7="_modalTitle_pimf3_61",b7="_modalSubtitle_pimf3_87",I7="_modalButtonsContainer_pimf3_94",T7="_importTabs_pimf3_103",P7="_fullWidthButton_pimf3_107",R7="_buttonIcon_pimf3_112",A7="_importLoader_pimf3_117",N7="_backButton_pimf3_123",L7="_modalBackIcon_pimf3_148",at={modalOverlay:v7,closing:w7,closeButton:C7,modal:_7,modalContent:x7,modalHeader:S7,modalMobileHeader:E7,modalTitle:k7,modalSubtitle:b7,modalButtonsContainer:I7,importTabs:T7,fullWidthButton:P7,buttonIcon:R7,importLoader:A7,backButton:N7,modalBackIcon:L7},j7="/static/hh_logo-BFOmWdck.png",M7="_loader_dots_base_g10uh_1",D7="_dot_g10uh_13",$7="_loader_container_small_g10uh_36",F7="_loader_container_medium_g10uh_45",O7="_loader_container_large_g10uh_54",Gu={loader_dots_base:M7,dot:D7,loader_container_small:$7,loader_container_medium:F7,loader_container_large:O7},U7=(r,t)=>{switch(r){case"small":return t.loader_container_small;case"large":return t.loader_container_large;case"medium":default:return t.loader_container_medium}},z7=r=>{const{size:t="medium",className:a="",...i}=r,s=Gu.loader_dots_base,c=U7(t,Gu),u=[s,c,a].filter(Boolean).join(" ");return g.jsx("div",{className:u,role:"status",...i,children:Array.from({length:3}).map((f,h)=>g.jsx("div",{className:Gu.dot,style:{animationDelay:`${h*.15}s`}},h))})},B7=({items:r,activeTab:t,onTabChange:a,className:i=""})=>g.jsx("div",{className:`tabs-container body-3 ${i}`,children:r.map(s=>g.jsxs("button",{className:`tab body-3 ${t===s.id?"active":"inactive"}`,onClick:()=>a(s.id),type:"button",children:[g.jsx("span",{className:"tab__label",children:s.label}),s.count!==void 0&&g.jsx("span",{className:`badge body-3 ${t===s.id?"active-badge":"inactive-badge"}`,children:s.count})]},s.id))}),$m=[{value:"hh.ru",label:"hh.ru",icon:j7}],V7=({onClose:r})=>{const t=Cr(),a=ot(),i=Ke(ve=>{var Me;return(Me=ve.employer.profile)==null?void 0:Me.company}),{userId:s}=Ke(ve=>ve.auth),[c,u]=_.useState(!1),[f,h]=_.useState(null),[m,y]=_.useState("selectSite"),[w,v]=_.useState("hh.ru"),[x,E]=_.useState({active:0,archived:0}),[S,L]=_.useState("VACANCY_STATUS_ACTIVE"),[M,N]=_.useState(null),B=()=>{u(!0),setTimeout(()=>{r()},300)},U=()=>{m==="linkProfile"?y("selectSite"):B()};_.useEffect(()=>{const Me=new URLSearchParams(a.search).get("code");Me&&h(Me)},[a.search]),_.useEffect(()=>{f&&k(f)},[f]);const P=()=>{s&&t(tl({filters:{employer_id:s}}));const ve=new BroadcastChannel("vacancy-updates");ve.postMessage({type:"VACANCY_UPDATED"}),ve.close()},H=()=>{P(),setTimeout(P,2e3),setTimeout(P,5e3),B()},k=async ve=>{y("loadingCount");try{const Me=await Dm.getHhVacancyCount(ve);E(Me),y("showCount")}catch{N("РќРµ удалось получить информацию Рѕ вакансиях. Попробуйте СЃРЅРѕРІР°."),y("error")}},Q=()=>{window.location.href=y7()},X=ve=>{L(ve)},ue=async()=>{if(!f||!(i!=null&&i.id)){N("Отсутствуют необходимые данные для импорта. Профиль компании РЅРµ загружен."),y("error");return}y("importing");try{await Dm.importFromHh({hhCode:f,folders:[S],company:{id:i.id}}),y("success")}catch{N("Произошла ошибка РІРѕ время импорта. Пожалуйста, повторите попытку."),y("error")}},xe=$m.find(ve=>ve.value===w),Re=()=>m==="success"?"Процесс импорта":"Рмпортируйте вакансию",Ue=()=>{switch(m){case"selectSite":return g.jsxs(g.Fragment,{children:[g.jsx("p",{className:`body-1 ${at.modalSubtitle}`,children:"Выберите сервис для быстрого импорта новых вакансий"}),g.jsxs("div",{className:at.modalButtonsContainer,children:[g.jsx($0,{options:$m,value:w,onChange:ve=>v(ve),name:"import-site"}),g.jsx(xt,{onClick:()=>y("linkProfile"),children:"Выбрать"})]})]});case"linkProfile":return g.jsxs(g.Fragment,{children:[g.jsx("p",{className:`body-1 ${at.modalSubtitle}`,children:"Привяжите профиль вашей компании для быстрого импорта новых вакансий"}),g.jsx("div",{className:at.modalButtonsContainer,children:g.jsxs(xt,{onClick:Q,children:[(xe==null?void 0:xe.icon)&&g.jsx("img",{src:xe.icon,alt:`Логотип ${xe.label}`,className:at.buttonIcon}),"Привязать профиль"]})})]});case"loadingCount":case"importing":return g.jsx("div",{className:at.importLoader,children:g.jsx(z7,{size:"large"})});case"showCount":{const ve=[{id:"VACANCY_STATUS_ACTIVE",label:"Активные",count:x.active},{id:"VACANCY_STATUS_ARCHIVED",label:"Архивные",count:x.archived}],Me=S==="VACANCY_STATUS_ACTIVE"?x.active===0:x.archived===0;return g.jsxs(g.Fragment,{children:[g.jsx("p",{className:`body-1 ${at.modalSubtitle}`,children:"РњС‹ нашли ваши вакансии РЅР° hh.ru. Выберите, какие РёР· РЅРёС… импортировать."}),g.jsx(B7,{items:ve,activeTab:S,onTabChange:X,className:at.importTabs}),g.jsx(xt,{onClick:ue,disabled:Me,className:at.fullWidthButton,children:"Рмпортировать"})]})}case"success":return g.jsxs(g.Fragment,{children:[g.jsx("p",{className:`body-1 ${at.modalSubtitle}`,children:"РРјРїРѕСЂС‚ запущен! Ваши вакансии СЃРєРѕСЂРѕ появятся РІ общем СЃРїРёСЃРєРµ."}),g.jsx(xt,{onClick:H,className:at.fullWidthButton,children:"Закрыть"})]});case"error":return g.jsxs(g.Fragment,{children:[g.jsx("p",{className:`body-1 ${at.modalSubtitle}`,children:M}),g.jsx(xt,{onClick:B,className:at.fullWidthButton,children:"Закрыть"})]});default:return null}};return g.jsx("div",{className:`${at.modalOverlay} ${c?at.closing:""}`,children:g.jsxs("div",{className:at.modal,children:[g.jsxs("div",{className:at.modalMobileHeader,children:[g.jsx(Pn,{className:at.modalBackIcon,onClick:U}),g.jsx("span",{className:"h2",children:Re()}),g.jsx("div",{})]}),g.jsxs("div",{className:at.modalHeader,children:[m==="linkProfile"&&g.jsx("button",{type:"button",className:at.backButton,onClick:()=>y("selectSite"),children:g.jsxs("span",{className:"body-1",children:["<"," Назад"]})}),g.jsx("h2",{className:`h2 ${at.modalTitle}`,children:Re()}),g.jsx("button",{className:`${at.closeButton}`,onClick:B,children:g.jsx(Tn,{className:at.closeButton})})]}),g.jsx("div",{className:at.modalContent,children:Ue()})]})})},H7=r=>{_.useEffect(()=>{const t=window.getComputedStyle(document.body).overflow;return r&&(document.body.style.overflow="hidden"),()=>{document.body.style.overflow=t}},[r])},Fm=document.getElementById("modals");function W7(){const{activeModal:r}=Ke(s=>s.modal),t=Cr();H7(!!r);const a=_.useCallback(()=>{t(y3())},[t]);if(!Fm)return null;const i=()=>{switch(r){case"auth":return g.jsx(g7,{onClose:a});case"importVacancies":return g.jsx(V7,{onClose:a});default:return null}};return vl.createPortal(i(),Fm)}const _d=Number(c0),Om=!c0.startsWith("__VITE_")&&Number.isFinite(_d);let Yu=!1;const q7=()=>{const r=ot();return _.useEffect(()=>{if(!Om)return;const t=window.ym;typeof t=="function"&&!Yu&&(t(_d,"init",{clickmap:!0,trackLinks:!0,accurateTrackBounce:!0,webvisor:!0,ecommerce:"dataLayer"}),Yu=!0,console.log("Yandex.Metrika initialized"))},[]),_.useEffect(()=>{if(!Om)return;const t=window.ym;Yu&&typeof t=="function"&&(t(_d,"hit",window.location.href),console.log(`Yandex.Metrika hit: ${window.location.href}`))},[r]),null},F0="analytics_session",K7="analytics-visit-lock",O0=30*60*1e3,U0=()=>{try{const r=localStorage.getItem(F0);return r?JSON.parse(r):null}catch{return null}},z0=r=>{localStorage.setItem(F0,JSON.stringify(r))},B0=r=>!!r&&r.expiresAt>Date.now(),G7=()=>{const r=U0();B0(r)&&z0({...r,expiresAt:Date.now()+O0})},Y7=()=>({sessionId:Z7(),expiresAt:Date.now()+O0}),Q7=r=>typeof navigator<"u"&&"locks"in navigator?navigator.locks.request(K7,r):r(),Z7=()=>typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`${Date.now()}-${Math.random().toString(36).slice(2)}`,J7={trackVisit:()=>W.post("/v1/auth/analytics/visit",{})},X7=()=>Q7(async()=>{const r=U0();B0(r)||(await J7.trackVisit(),z0(Y7()))}),Um=["click","keydown","scroll","visibilitychange"],ex=60*1e3,tx=()=>(_.useEffect(()=>{X7().catch(()=>{});let r=0;const t=()=>{const a=Date.now();a-r<ex||(r=a,G7())};return Um.forEach(a=>document.addEventListener(a,t,{passive:!0})),()=>{Um.forEach(a=>document.removeEventListener(a,t))}},[]),null);function rx(){const{pathname:r}=ot();return _.useEffect(()=>{window.scrollTo(0,0)},[r]),null}const nx=()=>{_.useEffect(()=>{const r=setTimeout(()=>{window.prerenderReady=!0,document.dispatchEvent(new Event("custom-render-trigger"))},500);return()=>{window.prerenderReady=!1,clearTimeout(r)}},[])},ax=()=>{nx();const[r,t]=Nd(),a=Cr(),{isAuthenticated:i,isAuthChecked:s}=Ke(c=>c.auth);return _.useEffect(()=>{if(!s)return;const c=r.get("auth_trigger")==="true",u=!!r.get("redirect_url");if((c||u&&!i)&&(a(Ma("auth")),c)){const f=new URLSearchParams(r);f.delete("auth_trigger"),t(f)}},[r,t,a,i,s]),g.jsxs(g.Fragment,{children:[g.jsx(q7,{}),g.jsx(tx,{}),g.jsx(rx,{}),g.jsx(N5,{}),g.jsx("main",{className:"main-content",children:g.jsx(gl,{})}),g.jsx(J5,{}),g.jsx(W7,{})]})},ox="_spinnerContainer_npt9f_1",ix="_spinner_svg_base_npt9f_7",sx="_spinner_svg_small_npt9f_21",lx="_spinner_svg_medium_npt9f_26",cx="_spinner_svg_large_npt9f_31",Qu={spinnerContainer:ox,spinner_svg_base:ix,spinner_svg_small:sx,spinner_svg_medium:lx,spinner_svg_large:cx},ux=(r,t)=>{switch(r){case"small":return t.spinner_svg_small;case"large":return t.spinner_svg_large;case"medium":default:return t.spinner_svg_medium}},zm="rgba(154, 156, 176, 1)",dx="rgba(217, 217, 217, 1)",fx="rgba(217, 217, 217, 0)",px=`conic-gradient(
from 0deg,
${zm} 0%,
${zm} 20%,
${dx} 65%,
${fx} 110%,
transparent 75%
)`,Bm=r=>{const{size:t="medium",className:a="",...i}=r,s=Qu.spinner_svg_base,c=ux(t,Qu),u=[s,c,a].filter(Boolean).join(" ");return g.jsx("div",{className:Qu.spinnerContainer,children:g.jsxs("svg",{width:"40",height:"40",viewBox:"0 0 40 40",fill:"none",xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",className:u,role:"img",...i,children:[g.jsx("defs",{children:g.jsx("clipPath",{id:"spinner_svg_clip_path",children:g.jsx("path",{d:"M40 20C40 31.0457 31.0457 40 20 40C8.9543 40 0 31.0457 0 20C0 8.9543 8.9543 0 20 0C31.0457 0 40 8.9543 40 20ZM3.99485 20C3.99485 28.8394 11.1606 36.0051 20 36.0051C28.8394 36.0051 36.0051 28.8394 36.0051 20C36.0051 11.1606 28.8394 3.99485 20 3.99485C11.1606 3.99485 3.99485 11.1606 3.99485 20Z"})})}),g.jsx("g",{clipPath:"url(#spinner_svg_clip_path)",children:g.jsx("foreignObject",{x:"0",y:"0",width:"40",height:"40",children:g.jsx("div",{style:{width:"100%",height:"100%",background:px}})})})]})})},hx=n3,mx=5e3,gx=24*60*60*1e3,yx=1e4;class vx{constructor(){F(this,"ws",null);F(this,"reconnectTimer",null);F(this,"pingTimer",null);F(this,"afkTimer",null);F(this,"lastActivityTime",0);F(this,"chatSeq",new Map);F(this,"hasConnectedOnce",!1);F(this,"isReconnect",!1);F(this,"boundResetAfkTimer",this.resetAfkTimer.bind(this));F(this,"openWaiters",[]);typeof document<"u"&&document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"&&(!this.ws||this.ws.readyState===WebSocket.CLOSED)&&(this.clearTimers(),this.connect())})}getLastSeqForSubscribe(){return this.chatSeq.size===0?null:Math.min(...this.chatSeq.values())}connect(){this.ws&&(this.ws.readyState===WebSocket.OPEN||this.ws.readyState===WebSocket.CONNECTING)||!hr.getState().auth.userId||(this.clearTimers(),hr.dispatch(hi("connecting")),this.ws=new WebSocket(hx),this.ws.onopen=()=>{hr.dispatch(hi("connected")),this.startPinging(),this.startAfkTracking(),this.isReconnect=this.hasConnectedOnce,this.hasConnectedOnce=!0;const a=this.getLastSeqForSubscribe();a!==null?this.sendCommand({type:"subscribe",last_seq:a}):this.sendCommand({type:"subscribe"}),this.resolveOpenWaiters()},this.ws.onmessage=async a=>{var i,s,c,u;try{const f=JSON.parse(a.data);if(f.type==="prolong"){try{await W.refreshAccessToken()}catch(x){console.error("WebSocket: Failed to refresh token.",x),this.disconnect()}return}if(typeof f.seq=="number"&&f.chat_id){const x=this.chatSeq.get(f.chat_id)??0;this.chatSeq.set(f.chat_id,Math.max(x,f.seq))}const h=hr.getState(),m=h.auth.userId,y=h.auth.role;let w=null;if(y==="employer")w=((s=(i=h.employer.profile)==null?void 0:i.company)==null?void 0:s.id)||null;else if(y==="applicant"){const x=h.user.profile;w=(x==null?void 0:x._applicantId)||(x==null?void 0:x.id)||null}let v=h.settings.data;if(v||(y==="applicant"?v=(c=h.user.profile)==null?void 0:c.settings:y==="employer"&&(v=(u=h.employer.profile)==null?void 0:u.settings)),f.type==="popup"&&v&&v.baseSettings&&v.baseSettings.popUpNotifications===!1)return;if(hr.dispatch(W3({event:f,currentUserId:m,currentUserRoleId:w})),f.type==="subscribed"&&this.isReconnect&&(y==="applicant"||y==="employer")){this.isReconnect=!1;const x=y==="applicant"?"REQUEST_TYPE_APPLICANT":"REQUEST_TYPE_EMPLOYER";hr.dispatch(rl({type:x}))}if((f.type==="message"||f.type==="chat_updated")&&f.chat_id&&(y==="applicant"||y==="employer")&&!hr.getState().chat.chats.some(E=>E.chatId===f.chat_id)){const E=y==="applicant"?"REQUEST_TYPE_APPLICANT":"REQUEST_TYPE_EMPLOYER";hr.dispatch(I0({type:E,chatId:f.chat_id}))}}catch(f){console.error("WebSocket: Failed to parse incoming message:",f)}},this.ws.onerror=a=>{console.error("WebSocket error event:",a),hr.dispatch(hi("error"))},this.ws.onclose=a=>{if(this.clearTimers(),this.stopAfkTracking(),hr.dispatch(hi("disconnected")),a.code>=4e3&&a.code<5e3){console.error(`WebSocket: Permanent error (code: ${a.code}). Won't reconnect.`);return}a.code!==1e3&&this.scheduleReconnect()})}disconnect(){this.clearTimers(),this.stopAfkTracking(),this.ws&&((this.ws.readyState===WebSocket.OPEN||this.ws.readyState===WebSocket.CONNECTING)&&this.ws.close(1e3,"User disconnected"),this.ws=null),hr.dispatch(hi("disconnected"))}refreshSubscription(){this.sendCommand({type:"subscribe"})}sendCommand(t){this.ws&&this.ws.readyState===WebSocket.OPEN?this.ws.send(JSON.stringify(t)):console.error("WebSocket is not connected. Cannot send command:",t)}resolveOpenWaiters(){const t=this.openWaiters;this.openWaiters=[],t.forEach(a=>a())}ensureConnected(t=5e3){return this.ws&&this.ws.readyState===WebSocket.OPEN?Promise.resolve(!0):(this.connect(),new Promise(a=>{const i=setTimeout(()=>a(!1),t);this.openWaiters.push(()=>{clearTimeout(i),a(!0)})}))}async sendCommandReliable(t,a=5e3){return await this.ensureConnected(a)?(this.sendCommand(t),!0):!1}scheduleReconnect(){this.reconnectTimer||(this.reconnectTimer=setTimeout(()=>{this.connect()},mx))}startPinging(){this.pingTimer=setInterval(()=>{this.sendCommand({type:"ping"})},3e4)}clearTimers(){this.reconnectTimer&&(clearTimeout(this.reconnectTimer),this.reconnectTimer=null),this.pingTimer&&(clearInterval(this.pingTimer),this.pingTimer=null)}startAfkTracking(){typeof window>"u"||(this.resetAfkTimer(),window.addEventListener("mousemove",this.boundResetAfkTimer),window.addEventListener("keydown",this.boundResetAfkTimer),window.addEventListener("click",this.boundResetAfkTimer),window.addEventListener("scroll",this.boundResetAfkTimer),window.addEventListener("touchstart",this.boundResetAfkTimer))}stopAfkTracking(){typeof window>"u"||(this.afkTimer&&(clearTimeout(this.afkTimer),this.afkTimer=null),window.removeEventListener("mousemove",this.boundResetAfkTimer),window.removeEventListener("keydown",this.boundResetAfkTimer),window.removeEventListener("click",this.boundResetAfkTimer),window.removeEventListener("scroll",this.boundResetAfkTimer),window.removeEventListener("touchstart",this.boundResetAfkTimer))}resetAfkTimer(){const t=Date.now();t-this.lastActivityTime<yx&&this.afkTimer||(this.lastActivityTime=t,this.afkTimer&&clearTimeout(this.afkTimer),this.afkTimer=setTimeout(()=>{this.disconnect()},gx))}}const Vm=new vx,wx="_notificationWrapper_5na82_32",Cx="_container_5na82_40",_x="_closing_5na82_59",xx="_avatarContainer_5na82_63",Sx="_avatar_5na82_63",Ex="_content_5na82_81",kx="_title_5na82_89",bx="_message_5na82_94",Ix="_closeButton_5na82_105",Tx="_progressBar_5na82_125",an={notificationWrapper:wx,container:Cx,closing:_x,avatarContainer:xx,avatar:Sx,content:Ex,title:kx,message:bx,closeButton:Ix,progressBar:Tx},Px="/static/company_icon-D35HRwDS.png",Rx="/static/avatar_icon-C56SpHFq.png",Ax="data:image/svg+xml,%3csvg%20width='24'%20height='24'%20viewBox='0%200%2024%2024'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M17.9998%205.99982C17.8123%205.81235%2017.558%205.70703%2017.2928%205.70703C17.0277%205.70703%2016.7733%205.81235%2016.5858%205.99982L11.9998%2010.5858L7.41382%205.99982C7.22629%205.81235%206.97198%205.70703%206.70682%205.70703C6.44165%205.70703%206.18735%205.81235%205.99982%205.99982C5.81235%206.18735%205.70703%206.44165%205.70703%206.70682C5.70703%206.97198%205.81235%207.22629%205.99982%207.41382L10.5858%2011.9998L5.99982%2016.5858C5.81235%2016.7733%205.70703%2017.0277%205.70703%2017.2928C5.70703%2017.558%205.81235%2017.8123%205.99982%2017.9998C6.18735%2018.1873%206.44165%2018.2926%206.70682%2018.2926C6.97198%2018.2926%207.22629%2018.1873%207.41382%2017.9998L11.9998%2013.4138L16.5858%2017.9998C16.7733%2018.1873%2017.0277%2018.2926%2017.2928%2018.2926C17.558%2018.2926%2017.8123%2018.1873%2017.9998%2017.9998C18.1873%2017.8123%2018.2926%2017.558%2018.2926%2017.2928C18.2926%2017.0277%2018.1873%2016.7733%2017.9998%2016.5858L13.4138%2011.9998L17.9998%207.41382C18.1873%207.22629%2018.2926%206.97198%2018.2926%206.70682C18.2926%206.44165%2018.1873%206.18735%2017.9998%205.99982Z'%20fill='%2331323A'/%3e%3c/svg%3e",Nx=({title:r,message:t,avatarSrc:a,duration:i=5e3,isOpen:s,onClose:c,role:u})=>{const[f,h]=_.useState(!1),[m,y]=_.useState(!1);_.useEffect(()=>(y(!0),()=>y(!1)),[]),_.useEffect(()=>{let E;return s&&(h(!1),E=setTimeout(()=>{w()},i)),()=>{E&&clearTimeout(E)}},[s,i,r,t]);const w=()=>{h(!0),setTimeout(()=>{c(),h(!1)},400)};if(!m||!s&&!f)return null;let v=Px;u==="employer"&&(v=Rx);const x=g.jsx("div",{className:an.notificationWrapper,children:g.jsxs("div",{className:`${an.container} ${f?an.closing:""}`,role:"alert",children:[g.jsx("div",{className:an.avatarContainer,children:g.jsx("img",{src:a||v,alt:r,className:an.avatar})}),g.jsxs("div",{className:an.content,children:[g.jsx("h3",{className:`${an.title} h3`,children:r}),g.jsx("p",{className:`${an.message} body-3`,children:t})]}),g.jsx("button",{className:an.closeButton,onClick:E=>{E.stopPropagation(),w()},"aria-label":"Закрыть уведомление",children:g.jsx("img",{src:Ax,alt:"Закрыть"})}),g.jsx("div",{className:an.progressBar,style:{animationDuration:`${i}ms`}},`${r}-${t}`)]})});return cw.createPortal(x,document.body)},Lx=()=>{const[r,t]=Nd(),a=Cr(),i=un(),[s,c]=_.useState(!1),u=_.useCallback(()=>{r.delete("accessCode"),r.delete("source"),r.delete("userId"),r.delete("ts"),t(r,{replace:!0}),i("/",{replace:!0})},[r,t,i]);return _.useEffect(()=>{const f=r.get("accessCode"),h=r.get("source"),m=r.get("ts");if(f&&h==="admin_panel"){if(m?Date.now()-parseInt(m,10)>6e4:!1){u();return}c(!0),localStorage.removeItem("userId"),localStorage.removeItem("userRole"),localStorage.removeItem("isAdmin"),a(zd()),a(Vd()),a(Na({token:f})).unwrap().then(()=>{r.delete("accessCode"),r.delete("source"),r.delete("userId"),r.delete("ts"),t(r,{replace:!0})}).catch(()=>{u()}).finally(()=>{c(!1)})}},[r,a,u]),{isProcessingImpersonation:s,hasImpersonationParams:!!(r.get("accessCode")&&r.get("source")==="admin_panel")}},jx=_.lazy(()=>Je(()=>import("./index-bqTJxXIQ.js"),__vite__mapDeps([0,1])).then(r=>({default:r.CareerExpressIt2025Page}))),Mx=_.lazy(()=>Je(()=>import("./index-BEofbPOm.js"),__vite__mapDeps([2,1])).then(r=>({default:r.LandingPage}))),Dx=_.lazy(()=>Je(()=>import("./index-BlaGISMn.js"),__vite__mapDeps([3,1])).then(r=>({default:r.TermsPage}))),$x=_.lazy(()=>Je(()=>import("./index-DEyRPDM4.js"),__vite__mapDeps([4,1])).then(r=>({default:r.PersonalDataPolicyPage}))),Fx=_.lazy(()=>Je(()=>import("./index-Yoys0ED6.js"),__vite__mapDeps([5,1])).then(r=>({default:r.PrivacyPolicyPage}))),Ox=_.lazy(()=>Je(()=>import("./index-CFo61ZOX.js"),__vite__mapDeps([6,1])).then(r=>({default:r.ApplicantAgreementPage}))),Ux=_.lazy(()=>Je(()=>import("./index-C45aXi7e.js"),__vite__mapDeps([7,1])).then(r=>({default:r.EmployerOfferPage}))),V0=_.lazy(()=>Je(()=>import("./index-a-zEerQ5.js").then(r=>r.i),__vite__mapDeps([8,9,10,11,12,13,14,15,16,17,18,19,20,21])).then(r=>({default:r.ProfilePage}))),zx=_.lazy(()=>Je(()=>import("./index-DMgJjzHv.js"),__vite__mapDeps([22,23,24,25,26,27,28,29,30,31,9,11,18,32,33,20,34,13,12])).then(r=>({default:r.ImportPreviewPage}))),Bx=_.lazy(()=>Je(()=>import("./index-6NWs-IZ0.js"),__vite__mapDeps([35,36,12,32,17,33,37])).then(r=>({default:r.SettingsPage}))),Hm=_.lazy(()=>Je(()=>import("./index-BGXx7cGx.js"),__vite__mapDeps([38,39,40,41,42,43,44,45,12,46,11,20,47,48,49,50,51,21,37,1])).then(r=>({default:r.VacancyPage}))),Wm=_.lazy(()=>Je(()=>import("./index-DaIedgN5.js").then(r=>r.i),__vite__mapDeps([52,53,11,54,55,20,56,14,9,57,17,10,58,59,60,61])).then(r=>({default:r.EmployerProfilePage}))),Vx=_.lazy(()=>Je(()=>import("./index-DgdndNyQ.js"),__vite__mapDeps([62,39,44,45,12,63,64,65,57,46,34,43,32,66,11,20,47,48,49,9,67,55])).then(r=>({default:r.VacancyEmployerPage}))),qm=_.lazy(()=>Je(()=>import("./VacancyDetails-BS8ozI0i.js"),__vite__mapDeps([68,11,20,69,12,1])).then(r=>({default:r.VacancyDetailsPage}))),Hx=_.lazy(()=>Je(()=>import("./VacancyDetailsEmployer-DMiANpGp.js").then(r=>r.V),__vite__mapDeps([70,11,20,12])).then(r=>({default:r.VacancyDetailsEmployerPage}))),Wx=_.lazy(()=>Je(()=>import("./CompanyDetails-Dthy5qod.js"),__vite__mapDeps([71,11,20,1])).then(r=>({default:r.CompanyDetailsPage}))),qx=_.lazy(()=>Je(()=>import("./CompanyPreview-CMwM7HnH.js"),__vite__mapDeps([72,11])).then(r=>({default:r.CompanyPreviewPage}))),Km=_.lazy(()=>Je(()=>import("./VacancyForm-C2fwNZyb.js"),__vite__mapDeps([73,74,75,76,77,39,78,79,60,17,10,56,80,11,51,21,46,81,20,33,12,53])).then(r=>({default:r.default}))),Kx=_.lazy(()=>Je(()=>import("./VacancyPreview-CoHUBkMh.js"),__vite__mapDeps([82,11,69,12])).then(r=>({default:r.VacancyPreviewPage}))),Gx=_.lazy(()=>Je(()=>import("./index-BpYj05wG.js"),__vite__mapDeps([83,11,84,80,9,57,32])).then(r=>({default:r.ChatsPage}))),Yx=_.lazy(()=>Je(()=>import("./Candidates-BikP8nUY.js"),__vite__mapDeps([85,41,15,84,46,86,87,88,89,12,20,39,57,32,34,80,54,55,56,59,48,49,11,50,51,21,37,90])).then(r=>({default:r.Candidates}))),Qx=_.lazy(()=>Je(()=>import("./CandidateDetails-BdKvZt-v.js").then(r=>r.C),__vite__mapDeps([91,11,20,90,80,46,12])).then(r=>({default:r.CandidateDetailsPage}))),aa=_.lazy(()=>Je(()=>import("./index-BXr-_-Q0.js"),[]).then(r=>({default:r.ErrorPage}))),Zx=_.lazy(()=>Je(()=>import("./index-Bl5JorVH.js"),__vite__mapDeps([92,93,39,11,12,16,59,15,94,20,95,96])).then(r=>({default:r.BlogPage}))),Jx=_.lazy(()=>Je(()=>import("./BlogFeed-D9UajE5E.js"),__vite__mapDeps([97,93,1,98,99,12,95])).then(r=>({default:r.BlogFeed}))),Xx=_.lazy(()=>Je(()=>import("./index-DBTOLCso.js"),__vite__mapDeps([100,93,16,96,99,98,12,20,1])).then(r=>({default:r.ArticlePage}))),eS=()=>{const{filterType:r}=Id(),{role:t,isAuthenticated:a}=Ke(u=>u.auth),i=ot(),s=["liked","viewed","assessed","applied"],c=["liked","viewed"];return!a&&r&&s.includes(r)?g.jsx(ln,{to:`/?auth_trigger=true&redirect_url=${encodeURIComponent(i.pathname+i.search)}`,replace:!0}):t==="employer"&&r&&c.includes(r)?g.jsx(aa,{code:403}):t==="applicant"&&r==="assessed"?g.jsx(aa,{code:403}):g.jsx(N0,{applicantComponent:g.jsx(Hm,{}),employerComponent:g.jsx(Vx,{}),fallbackComponent:g.jsx(Hm,{})})},tS=()=>{const{isAuthenticated:r}=Ke(a=>a.auth),t=ot();return r?g.jsx(gl,{}):g.jsx(ln,{to:`/?auth_trigger=true&redirect_url=${encodeURIComponent(t.pathname+t.search)}`,replace:!0})},rS=()=>{const{role:r,isAuthenticated:t}=Ke(i=>i.auth),a=ot();return t?r==="applicant"?g.jsx(gl,{}):r==="employer"?g.jsx(aa,{code:404}):g.jsx(aa,{code:403}):g.jsx(ln,{to:`/?auth_trigger=true&redirect_url=${encodeURIComponent(a.pathname+a.search)}`,replace:!0})},nS=()=>{const{role:r,isAuthenticated:t}=Ke(i=>i.auth),a=ot();return t?r!=="employer"?g.jsx(aa,{code:403}):g.jsx(gl,{}):g.jsx(ln,{to:`/?auth_trigger=true&redirect_url=${encodeURIComponent(a.pathname+a.search)}`,replace:!0})},aS=()=>{const{code:r}=Id();return g.jsx(aa,{code:Number(r)||500})},oS=()=>{const{role:r,userId:t}=Ke(i=>i.auth),a=ot();return r==="employer"&&t?g.jsx(ln,{to:`/employer-profile/${t}${a.search}`,replace:!0}):r==="applicant"&&t?g.jsx(ln,{to:`/profile/${t}${a.search}`,replace:!0}):g.jsx(ln,{to:"/",replace:!0})},iS=()=>{const{candidateId:r}=Id(),{role:t,userId:a,isAuthenticated:i}=Ke(c=>c.auth),s=ot();return i?t==="applicant"&&String(a)===r?g.jsx(V0,{}):g.jsx(ln,{to:`/candidates/detail/${r}`,replace:!0}):g.jsx(ln,{to:`/?auth_trigger=true&redirect_url=${encodeURIComponent(s.pathname+s.search)}`,replace:!0})},sS=()=>{const r=Cr(),t=un(),{role:a,isAuthChecked:i}=Ke(h=>h.auth),{notification:s}=Ke(h=>h.chat),{isProcessingImpersonation:c,hasImpersonationParams:u}=Lx();_.useEffect(()=>{!u&&!i&&r(el())},[r,u,i]);const f=()=>{s.chatId&&(t(`/chats/${s.chatId}`),r(Im()))};return!i||c?g.jsx(Bm,{size:"large"}):g.jsxs(_.Suspense,{fallback:g.jsx(Bm,{size:"large"}),children:[g.jsx(ax,{}),g.jsx("div",{onClick:f,children:g.jsx(Nx,{isOpen:s.isOpen,title:s.title,message:s.message,avatarSrc:s.avatarSrc,duration:s.duration,onClose:()=>r(Im()),role:a},s.id)})]})},lS=Zv([{element:g.jsx(sS,{}),errorElement:g.jsx(aa,{}),children:[{path:"/",element:g.jsx(Mx,{})},{path:"/events/career-express-it-2025",element:g.jsx(jx,{})},{path:"/terms",element:g.jsx(ln,{to:"/events/career-express-it-2025/terms",replace:!0})},{path:"/events/career-express-it-2025/terms",element:g.jsx(Dx,{})},{path:"/personal-data-policy",element:g.jsx($x,{})},{path:"/privacy-policy",element:g.jsx(Fx,{})},{path:"/applicant-agreement",element:g.jsx(Ox,{})},{path:"/employer-offer",element:g.jsx(Ux,{})},{path:"/blog",element:g.jsx(Zx,{}),children:[{index:!0,element:g.jsx(Jx,{})},{path:":id",element:g.jsx(Xx,{})}]},{element:g.jsx(rS,{}),children:[{path:"/profile/edit/:section",element:g.jsx(V0,{})},{path:"/profile/import-preview",element:g.jsx(zx,{})}]},{path:"/vacancies/:filterType?",element:g.jsx(eS,{})},{path:"/vacancies/preview/:channelId",element:g.jsx(Kx,{})},{path:"/vacancies/detail/:vacancyId",element:g.jsx(N0,{applicantComponent:g.jsx(qm,{}),employerComponent:g.jsx(Hx,{}),fallbackComponent:g.jsx(qm,{})})},{path:"/companies/preview/:channelId",element:g.jsx(qx,{})},{path:"/companies/detail/:companyId",element:g.jsx(Wx,{})},{element:g.jsx(nS,{}),children:[{path:"/vacancies/create",element:g.jsx(Km,{})},{path:"/vacancies/edit/:vacancyId",element:g.jsx(Km,{})},{path:"/candidates/:filterType?",element:g.jsx(Yx,{})},{path:"/candidates/detail/:candidateId",element:g.jsx(Qx,{})},{path:"/employer-profile/:id?",element:g.jsx(Wm,{})},{path:"/employer-profile/:id?/edit/:section",element:g.jsx(Wm,{})}]},{path:"/profile/:candidateId",element:g.jsx(iS,{})},{element:g.jsx(tS,{}),children:[{path:"/profile",element:g.jsx(oS,{})},{path:"/chats/:chatId?",element:g.jsx(Gx,{})},{path:"/profile/settings",element:g.jsx(Bx,{})}]},{path:"/error/:code",element:g.jsx(aS,{})},{path:"*",element:g.jsx(aa,{code:404})}]}]),cS="app_theme_preference";function uS(){const r=Cr(),{isAuthChecked:t,isAuthenticated:a,userId:i}=Ke(c=>c.auth),s=Ke(c=>c.settings.data);return L0(),_.useEffect(()=>{document.documentElement.style.visibility=""},[]),_.useEffect(()=>{W.setupInterceptors(()=>{hr.dispatch(kl())})},[]),_.useEffect(()=>{if(a&&s&&i){const c=`theme_synced_${i}`;if(!localStorage.getItem(c)){const f=localStorage.getItem(cS),h=window.matchMedia("(prefers-color-scheme: dark)").matches;let m;f==="dark"||f==="light"?m=f==="dark":m=h,s.baseSettings.darkTheme!==m&&r(wd({baseSettings:{...s.baseSettings,darkTheme:m}})),localStorage.setItem(c,"true")}}},[a,s,i,r]),_.useEffect(()=>{t&&(a?Vm.connect():Vm.disconnect())},[t,a]),g.jsx(uw,{router:lS})}const dS=xC(uS),fS=Dg.createRoot(document.getElementById("root"));fS.render(g.jsx(on.StrictMode,{children:g.jsx(dS,{})}));export{Px as $,E8 as A,xt as B,wd as C,j_ as D,d3 as E,s3 as F,kl as G,mS as H,Yt as I,U8 as J,tl as K,Qe as L,$u as M,tt as N,P3 as O,k5 as P,T3 as Q,on as R,Bm as S,B7 as T,gd as U,Qt as V,R3 as W,Li as X,Ii as Y,Du as Z,Je as _,Cr as a,wi as a$,yS as a0,C3 as a1,u3 as a2,gS as a3,w0 as a4,b3 as a5,I3 as a6,A3 as a7,N3 as a8,D0 as a9,bl as aA,Il as aB,IS as aC,kS as aD,TS as aE,Tl as aF,vl as aG,U3 as aH,O3 as aI,x0 as aJ,_0 as aK,Uu as aL,zu as aM,p8 as aN,Bu as aO,bS as aP,e6 as aQ,hS as aR,n6 as aS,qu as aT,gl as aU,US as aV,BS as aW,zS as aX,Ku as aY,VS as aZ,P_ as a_,Fu as aa,_S as ab,z7 as ac,R_ as ad,$0 as ae,k3 as af,E3 as ag,DS as ah,Vm as ai,rl as aj,LS as ak,PS as al,I0 as am,Hu as an,OS as ao,AS as ap,MS as aq,Vu as ar,FS as as,$S as at,RS as au,j3 as av,M3 as aw,xS as ax,SS as ay,Ou as az,Ke as b,ZC as b0,Z9 as b1,dl as b2,cw as b3,k8 as b4,HS as b5,v0 as b6,j0 as b7,un as c,Ud as d,Tn as e,xo as f,H7 as g,Pn as h,J8 as i,g as j,Nd as k,Id as l,Lu as m,Rx as n,Ma as o,ju as p,ot as q,_ as r,Mm as s,Cd as t,L0 as u,_8 as v,f7 as w,Vt as x,Wu as y,Aa as z};