From 689c6e9e15eb4cd1f2245a8aa681cccdfd88c0c1 Mon Sep 17 00:00:00 2001 From: Johan Date: Wed, 4 Mar 2026 16:57:05 +0100 Subject: [PATCH] Initial React project --- dist/assets/index-BFHBmXZt.js | 11 - dist/assets/index-Crq8u5MZ.css | 1 - dist/assets/index-R0YECfZq.css | 1 + dist/assets/index-yGD4iGEM.js | 11 + dist/index.html | 4 +- node_modules/.tmp/tsconfig.app.tsbuildinfo | 2 +- src/App.tsx | 26 +- src/mvvm/viewmodels/SimulatorViewModel.ts | 135 +++ .../viewmodels/SubscriptionPageViewModel.ts | 44 + .../ai-agent/pages/AiAgentPage.tsx | 18 +- .../ai-agent/pages/CareerAgentPage.tsx | 296 ++++++ .../ai-agent/pages/career-agent.css | 375 +++++++ .../dashboard/components/DashboardSidebar.tsx | 5 +- .../simulator/pages/SimulatorPage.tsx | 459 +++++++++ .../simulator/pages/simulator.css | 967 ++++++++++++++++++ .../subscription/pages/SubscriptionPage.tsx | 370 +++++++ .../subscription/pages/subscription.css | 750 ++++++++++++++ 17 files changed, 3448 insertions(+), 27 deletions(-) delete mode 100644 dist/assets/index-BFHBmXZt.js delete mode 100644 dist/assets/index-Crq8u5MZ.css create mode 100644 dist/assets/index-R0YECfZq.css create mode 100644 dist/assets/index-yGD4iGEM.js create mode 100644 src/mvvm/viewmodels/SimulatorViewModel.ts create mode 100644 src/mvvm/viewmodels/SubscriptionPageViewModel.ts create mode 100644 src/presentation/ai-agent/pages/CareerAgentPage.tsx create mode 100644 src/presentation/ai-agent/pages/career-agent.css create mode 100644 src/presentation/simulator/pages/SimulatorPage.tsx create mode 100644 src/presentation/simulator/pages/simulator.css create mode 100644 src/presentation/subscription/pages/SubscriptionPage.tsx create mode 100644 src/presentation/subscription/pages/subscription.css diff --git a/dist/assets/index-BFHBmXZt.js b/dist/assets/index-BFHBmXZt.js deleted file mode 100644 index ea0d4e1..0000000 --- a/dist/assets/index-BFHBmXZt.js +++ /dev/null @@ -1,11 +0,0 @@ -(function(){const c=document.createElement("link").relList;if(c&&c.supports&&c.supports("modulepreload"))return;for(const m of document.querySelectorAll('link[rel="modulepreload"]'))o(m);new MutationObserver(m=>{for(const y of m)if(y.type==="childList")for(const O of y.addedNodes)O.tagName==="LINK"&&O.rel==="modulepreload"&&o(O)}).observe(document,{childList:!0,subtree:!0});function u(m){const y={};return m.integrity&&(y.integrity=m.integrity),m.referrerPolicy&&(y.referrerPolicy=m.referrerPolicy),m.crossOrigin==="use-credentials"?y.credentials="include":m.crossOrigin==="anonymous"?y.credentials="omit":y.credentials="same-origin",y}function o(m){if(m.ep)return;m.ep=!0;const y=u(m);fetch(m.href,y)}})();var Eu={exports:{}},Un={};var eh;function dg(){if(eh)return Un;eh=1;var d=Symbol.for("react.transitional.element"),c=Symbol.for("react.fragment");function u(o,m,y){var O=null;if(y!==void 0&&(O=""+y),m.key!==void 0&&(O=""+m.key),"key"in m){y={};for(var G in m)G!=="key"&&(y[G]=m[G])}else y=m;return m=y.ref,{$$typeof:d,type:o,key:O,ref:m!==void 0?m:null,props:y}}return Un.Fragment=c,Un.jsx=u,Un.jsxs=u,Un}var th;function fg(){return th||(th=1,Eu.exports=dg()),Eu.exports}var s=fg(),Cu={exports:{}},ne={};var ah;function hg(){if(ah)return ne;ah=1;var d=Symbol.for("react.transitional.element"),c=Symbol.for("react.portal"),u=Symbol.for("react.fragment"),o=Symbol.for("react.strict_mode"),m=Symbol.for("react.profiler"),y=Symbol.for("react.consumer"),O=Symbol.for("react.context"),G=Symbol.for("react.forward_ref"),w=Symbol.for("react.suspense"),N=Symbol.for("react.memo"),V=Symbol.for("react.lazy"),z=Symbol.for("react.activity"),q=Symbol.iterator;function Z(h){return h===null||typeof h!="object"?null:(h=q&&h[q]||h["@@iterator"],typeof h=="function"?h:null)}var ae={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},Y=Object.assign,fe={};function ge(h,S,C){this.props=h,this.context=S,this.refs=fe,this.updater=C||ae}ge.prototype.isReactComponent={},ge.prototype.setState=function(h,S){if(typeof h!="object"&&typeof h!="function"&&h!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,h,S,"setState")},ge.prototype.forceUpdate=function(h){this.updater.enqueueForceUpdate(this,h,"forceUpdate")};function je(){}je.prototype=ge.prototype;function ie(h,S,C){this.props=h,this.context=S,this.refs=fe,this.updater=C||ae}var re=ie.prototype=new je;re.constructor=ie,Y(re,ge.prototype),re.isPureReactComponent=!0;var de=Array.isArray;function K(){}var M={H:null,A:null,T:null,S:null},ye=Object.prototype.hasOwnProperty;function Ae(h,S,C){var B=C.ref;return{$$typeof:d,type:h,key:S,ref:B!==void 0?B:null,props:C}}function ze(h,S){return Ae(h.type,S,h.props)}function R(h){return typeof h=="object"&&h!==null&&h.$$typeof===d}function Q(h){var S={"=":"=0",":":"=2"};return"$"+h.replace(/[=:]/g,function(C){return S[C]})}var le=/\/+/g;function I(h,S){return typeof h=="object"&&h!==null&&h.key!=null?Q(""+h.key):S.toString(36)}function oe(h){switch(h.status){case"fulfilled":return h.value;case"rejected":throw h.reason;default:switch(typeof h.status=="string"?h.then(K,K):(h.status="pending",h.then(function(S){h.status==="pending"&&(h.status="fulfilled",h.value=S)},function(S){h.status==="pending"&&(h.status="rejected",h.reason=S)})),h.status){case"fulfilled":return h.value;case"rejected":throw h.reason}}throw h}function _(h,S,C,B,te){var ee=typeof h;(ee==="undefined"||ee==="boolean")&&(h=null);var _e=!1;if(h===null)_e=!0;else switch(ee){case"bigint":case"string":case"number":_e=!0;break;case"object":switch(h.$$typeof){case d:case c:_e=!0;break;case V:return _e=h._init,_(_e(h._payload),S,C,B,te)}}if(_e)return te=te(h),_e=B===""?"."+I(h,0):B,de(te)?(C="",_e!=null&&(C=_e.replace(le,"$&/")+"/"),_(te,S,C,"",function(Vl){return Vl})):te!=null&&(R(te)&&(te=ze(te,C+(te.key==null||h&&h.key===te.key?"":(""+te.key).replace(le,"$&/")+"/")+_e)),S.push(te)),1;_e=0;var at=B===""?".":B+":";if(de(h))for(var Ve=0;Ve>>1,ce=_[$];if(0>>1;$m(C,U))Bm(te,C)?(_[$]=te,_[B]=U,$=B):(_[$]=C,_[S]=U,$=S);else if(Bm(te,U))_[$]=te,_[B]=U,$=B;else break e}}return H}function m(_,H){var U=_.sortIndex-H.sortIndex;return U!==0?U:_.id-H.id}if(d.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var y=performance;d.unstable_now=function(){return y.now()}}else{var O=Date,G=O.now();d.unstable_now=function(){return O.now()-G}}var w=[],N=[],V=1,z=null,q=3,Z=!1,ae=!1,Y=!1,fe=!1,ge=typeof setTimeout=="function"?setTimeout:null,je=typeof clearTimeout=="function"?clearTimeout:null,ie=typeof setImmediate<"u"?setImmediate:null;function re(_){for(var H=u(N);H!==null;){if(H.callback===null)o(N);else if(H.startTime<=_)o(N),H.sortIndex=H.expirationTime,c(w,H);else break;H=u(N)}}function de(_){if(Y=!1,re(_),!ae)if(u(w)!==null)ae=!0,K||(K=!0,Q());else{var H=u(N);H!==null&&oe(de,H.startTime-_)}}var K=!1,M=-1,ye=5,Ae=-1;function ze(){return fe?!0:!(d.unstable_now()-Ae_&&ze());){var $=z.callback;if(typeof $=="function"){z.callback=null,q=z.priorityLevel;var ce=$(z.expirationTime<=_);if(_=d.unstable_now(),typeof ce=="function"){z.callback=ce,re(_),H=!0;break t}z===u(w)&&o(w),re(_)}else o(w);z=u(w)}if(z!==null)H=!0;else{var h=u(N);h!==null&&oe(de,h.startTime-_),H=!1}}break e}finally{z=null,q=U,Z=!1}H=void 0}}finally{H?Q():K=!1}}}var Q;if(typeof ie=="function")Q=function(){ie(R)};else if(typeof MessageChannel<"u"){var le=new MessageChannel,I=le.port2;le.port1.onmessage=R,Q=function(){I.postMessage(null)}}else Q=function(){ge(R,0)};function oe(_,H){M=ge(function(){_(d.unstable_now())},H)}d.unstable_IdlePriority=5,d.unstable_ImmediatePriority=1,d.unstable_LowPriority=4,d.unstable_NormalPriority=3,d.unstable_Profiling=null,d.unstable_UserBlockingPriority=2,d.unstable_cancelCallback=function(_){_.callback=null},d.unstable_forceFrameRate=function(_){0>_||125<_?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):ye=0<_?Math.floor(1e3/_):5},d.unstable_getCurrentPriorityLevel=function(){return q},d.unstable_next=function(_){switch(q){case 1:case 2:case 3:var H=3;break;default:H=q}var U=q;q=H;try{return _()}finally{q=U}},d.unstable_requestPaint=function(){fe=!0},d.unstable_runWithPriority=function(_,H){switch(_){case 1:case 2:case 3:case 4:case 5:break;default:_=3}var U=q;q=_;try{return H()}finally{q=U}},d.unstable_scheduleCallback=function(_,H,U){var $=d.unstable_now();switch(typeof U=="object"&&U!==null?(U=U.delay,U=typeof U=="number"&&0$?(_.sortIndex=U,c(N,_),u(w)===null&&_===u(N)&&(Y?(je(M),M=-1):Y=!0,oe(de,U-$))):(_.sortIndex=ce,c(w,_),ae||Z||(ae=!0,K||(K=!0,Q()))),_},d.unstable_shouldYield=ze,d.unstable_wrapCallback=function(_){var H=q;return function(){var U=q;q=H;try{return _.apply(this,arguments)}finally{q=U}}}})(wu)),wu}var ih;function gg(){return ih||(ih=1,Ou.exports=mg()),Ou.exports}var Lu={exports:{}},tt={};var sh;function vg(){if(sh)return tt;sh=1;var d=Zu();function c(w){var N="https://react.dev/errors/"+w;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(d)}catch(c){console.error(c)}}return d(),Lu.exports=vg(),Lu.exports}var uh;function yg(){if(uh)return On;uh=1;var d=gg(),c=Zu(),u=pg();function o(e){var t="https://react.dev/errors/"+e;if(1ce||(e.current=$[ce],$[ce]=null,ce--)}function C(e,t){ce++,$[ce]=e.current,e.current=t}var B=h(null),te=h(null),ee=h(null),_e=h(null);function at(e,t){switch(C(ee,t),C(te,e),C(B,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?Nf(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=Nf(t),e=Af(t,e);else switch(e){case"svg":e=1;break;case"math":e=2;break;default:e=0}}S(B),C(B,e)}function Ve(){S(B),S(te),S(ee)}function Vl(e){e.memoizedState!==null&&C(_e,e);var t=B.current,a=Af(t,e.type);t!==a&&(C(te,e),C(B,a))}function Bn(e){te.current===e&&(S(B),S(te)),_e.current===e&&(S(_e),Dn._currentValue=U)}var hs,$u;function Da(e){if(hs===void 0)try{throw Error()}catch(a){var t=a.stack.trim().match(/\n( *(at )?)/);hs=t&&t[1]||"",$u=-1)":-1n||g[l]!==j[n]){var T=` -`+g[l].replace(" at new "," at ");return e.displayName&&T.includes("")&&(T=T.replace("",e.displayName)),T}while(1<=l&&0<=n);break}}}finally{ms=!1,Error.prepareStackTrace=a}return(a=e?e.displayName||e.name:"")?Da(a):""}function Yh(e,t){switch(e.tag){case 26:case 27:case 5:return Da(e.type);case 16:return Da("Lazy");case 13:return e.child!==t&&t!==null?Da("Suspense Fallback"):Da("Suspense");case 19:return Da("SuspenseList");case 0:case 15:return gs(e.type,!1);case 11:return gs(e.type.render,!1);case 1:return gs(e.type,!0);case 31:return Da("Activity");default:return""}}function Iu(e){try{var t="",a=null;do t+=Yh(e,a),a=e,e=e.return;while(e);return t}catch(l){return` -Error generating stack: `+l.message+` -`+l.stack}}var vs=Object.prototype.hasOwnProperty,ps=d.unstable_scheduleCallback,ys=d.unstable_cancelCallback,Qh=d.unstable_shouldYield,Gh=d.unstable_requestPaint,dt=d.unstable_now,Jh=d.unstable_getCurrentPriorityLevel,Pu=d.unstable_ImmediatePriority,er=d.unstable_UserBlockingPriority,Yn=d.unstable_NormalPriority,Xh=d.unstable_LowPriority,tr=d.unstable_IdlePriority,Zh=d.log,Kh=d.unstable_setDisableYieldValue,ql=null,ft=null;function la(e){if(typeof Zh=="function"&&Kh(e),ft&&typeof ft.setStrictMode=="function")try{ft.setStrictMode(ql,e)}catch{}}var ht=Math.clz32?Math.clz32:$h,Wh=Math.log,Fh=Math.LN2;function $h(e){return e>>>=0,e===0?32:31-(Wh(e)/Fh|0)|0}var Qn=256,Gn=262144,Jn=4194304;function Ma(e){var t=e&42;if(t!==0)return t;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&261888;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function Xn(e,t,a){var l=e.pendingLanes;if(l===0)return 0;var n=0,i=e.suspendedLanes,r=e.pingedLanes;e=e.warmLanes;var f=l&134217727;return f!==0?(l=f&~i,l!==0?n=Ma(l):(r&=f,r!==0?n=Ma(r):a||(a=f&~e,a!==0&&(n=Ma(a))))):(f=l&~i,f!==0?n=Ma(f):r!==0?n=Ma(r):a||(a=l&~e,a!==0&&(n=Ma(a)))),n===0?0:t!==0&&t!==n&&(t&i)===0&&(i=n&-n,a=t&-t,i>=a||i===32&&(a&4194048)!==0)?t:n}function Bl(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function Ih(e,t){switch(e){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function ar(){var e=Jn;return Jn<<=1,(Jn&62914560)===0&&(Jn=4194304),e}function bs(e){for(var t=[],a=0;31>a;a++)t.push(e);return t}function Yl(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function Ph(e,t,a,l,n,i){var r=e.pendingLanes;e.pendingLanes=a,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=a,e.entangledLanes&=a,e.errorRecoveryDisabledLanes&=a,e.shellSuspendCounter=0;var f=e.entanglements,g=e.expirationTimes,j=e.hiddenUpdates;for(a=r&~a;0"u")return null;try{return e.activeElement||e.body}catch{return e.body}}var im=/[\n"\\]/g;function xt(e){return e.replace(im,function(t){return"\\"+t.charCodeAt(0).toString(16)+" "})}function _s(e,t,a,l,n,i,r,f){e.name="",r!=null&&typeof r!="function"&&typeof r!="symbol"&&typeof r!="boolean"?e.type=r:e.removeAttribute("type"),t!=null?r==="number"?(t===0&&e.value===""||e.value!=t)&&(e.value=""+St(t)):e.value!==""+St(t)&&(e.value=""+St(t)):r!=="submit"&&r!=="reset"||e.removeAttribute("value"),t!=null?ks(e,r,St(t)):a!=null?ks(e,r,St(a)):l!=null&&e.removeAttribute("value"),n==null&&i!=null&&(e.defaultChecked=!!i),n!=null&&(e.checked=n&&typeof n!="function"&&typeof n!="symbol"),f!=null&&typeof f!="function"&&typeof f!="symbol"&&typeof f!="boolean"?e.name=""+St(f):e.removeAttribute("name")}function gr(e,t,a,l,n,i,r,f){if(i!=null&&typeof i!="function"&&typeof i!="symbol"&&typeof i!="boolean"&&(e.type=i),t!=null||a!=null){if(!(i!=="submit"&&i!=="reset"||t!=null)){As(e);return}a=a!=null?""+St(a):"",t=t!=null?""+St(t):a,f||t===e.value||(e.value=t),e.defaultValue=t}l=l??n,l=typeof l!="function"&&typeof l!="symbol"&&!!l,e.checked=f?e.checked:!!l,e.defaultChecked=!!l,r!=null&&typeof r!="function"&&typeof r!="symbol"&&typeof r!="boolean"&&(e.name=r),As(e)}function ks(e,t,a){t==="number"&&Wn(e.ownerDocument)===e||e.defaultValue===""+a||(e.defaultValue=""+a)}function el(e,t,a,l){if(e=e.options,t){t={};for(var n=0;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Es=!1;if(Bt)try{var Xl={};Object.defineProperty(Xl,"passive",{get:function(){Es=!0}}),window.addEventListener("test",Xl,Xl),window.removeEventListener("test",Xl,Xl)}catch{Es=!1}var ia=null,Cs=null,$n=null;function xr(){if($n)return $n;var e,t=Cs,a=t.length,l,n="value"in ia?ia.value:ia.textContent,i=n.length;for(e=0;e=Wl),zr=" ",Dr=!1;function Mr(e,t){switch(e){case"keyup":return Um.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Er(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var nl=!1;function wm(e,t){switch(e){case"compositionend":return Er(t);case"keypress":return t.which!==32?null:(Dr=!0,zr);case"textInput":return e=t.data,e===zr&&Dr?null:e;default:return null}}function Lm(e,t){if(nl)return e==="compositionend"||!Rs&&Mr(e,t)?(e=xr(),$n=Cs=ia=null,nl=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:a,offset:t-e};e=l}e:{for(;a;){if(a.nextSibling){a=a.nextSibling;break e}a=a.parentNode}a=void 0}a=Vr(a)}}function Br(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Br(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function Yr(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var t=Wn(e.document);t instanceof e.HTMLIFrameElement;){try{var a=typeof t.contentWindow.location.href=="string"}catch{a=!1}if(a)e=t.contentWindow;else break;t=Wn(e.document)}return t}function qs(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}var Gm=Bt&&"documentMode"in document&&11>=document.documentMode,il=null,Bs=null,Pl=null,Ys=!1;function Qr(e,t,a){var l=a.window===a?a.document:a.nodeType===9?a:a.ownerDocument;Ys||il==null||il!==Wn(l)||(l=il,"selectionStart"in l&&qs(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}),Pl&&Il(Pl,l)||(Pl=l,l=Gi(Bs,"onSelect"),0>=r,n-=r,wt=1<<32-ht(t)+n|a<ue?(pe=X,X=null):pe=X.sibling;var xe=x(p,X,b[ue],D);if(xe===null){X===null&&(X=pe);break}e&&X&&xe.alternate===null&&t(p,X),v=i(xe,v,ue),Se===null?F=xe:Se.sibling=xe,Se=xe,X=pe}if(ue===b.length)return a(p,X),be&&Qt(p,ue),F;if(X===null){for(;ueue?(pe=X,X=null):pe=X.sibling;var Ta=x(p,X,xe.value,D);if(Ta===null){X===null&&(X=pe);break}e&&X&&Ta.alternate===null&&t(p,X),v=i(Ta,v,ue),Se===null?F=Ta:Se.sibling=Ta,Se=Ta,X=pe}if(xe.done)return a(p,X),be&&Qt(p,ue),F;if(X===null){for(;!xe.done;ue++,xe=b.next())xe=E(p,xe.value,D),xe!==null&&(v=i(xe,v,ue),Se===null?F=xe:Se.sibling=xe,Se=xe);return be&&Qt(p,ue),F}for(X=l(X);!xe.done;ue++,xe=b.next())xe=A(X,p,ue,xe.value,D),xe!==null&&(e&&xe.alternate!==null&&X.delete(xe.key===null?ue:xe.key),v=i(xe,v,ue),Se===null?F=xe:Se.sibling=xe,Se=xe);return e&&X.forEach(function(og){return t(p,og)}),be&&Qt(p,ue),F}function Ee(p,v,b,D){if(typeof b=="object"&&b!==null&&b.type===Y&&b.key===null&&(b=b.props.children),typeof b=="object"&&b!==null){switch(b.$$typeof){case Z:e:{for(var F=b.key;v!==null;){if(v.key===F){if(F=b.type,F===Y){if(v.tag===7){a(p,v.sibling),D=n(v,b.props.children),D.return=p,p=D;break e}}else if(v.elementType===F||typeof F=="object"&&F!==null&&F.$$typeof===ye&&Ba(F)===v.type){a(p,v.sibling),D=n(v,b.props),sn(D,b),D.return=p,p=D;break e}a(p,v);break}else t(p,v);v=v.sibling}b.type===Y?(D=La(b.props.children,p.mode,D,b.key),D.return=p,p=D):(D=ci(b.type,b.key,b.props,null,p.mode,D),sn(D,b),D.return=p,p=D)}return r(p);case ae:e:{for(F=b.key;v!==null;){if(v.key===F)if(v.tag===4&&v.stateNode.containerInfo===b.containerInfo&&v.stateNode.implementation===b.implementation){a(p,v.sibling),D=n(v,b.children||[]),D.return=p,p=D;break e}else{a(p,v);break}else t(p,v);v=v.sibling}D=Ws(b,p.mode,D),D.return=p,p=D}return r(p);case ye:return b=Ba(b),Ee(p,v,b,D)}if(oe(b))return J(p,v,b,D);if(Q(b)){if(F=Q(b),typeof F!="function")throw Error(o(150));return b=F.call(b),P(p,v,b,D)}if(typeof b.then=="function")return Ee(p,v,mi(b),D);if(b.$$typeof===ie)return Ee(p,v,oi(p,b),D);gi(p,b)}return typeof b=="string"&&b!==""||typeof b=="number"||typeof b=="bigint"?(b=""+b,v!==null&&v.tag===6?(a(p,v.sibling),D=n(v,b),D.return=p,p=D):(a(p,v),D=Ks(b,p.mode,D),D.return=p,p=D),r(p)):a(p,v)}return function(p,v,b,D){try{nn=0;var F=Ee(p,v,b,D);return vl=null,F}catch(X){if(X===gl||X===fi)throw X;var Se=gt(29,X,null,p.mode);return Se.lanes=D,Se.return=p,Se}}}var Qa=ho(!0),mo=ho(!1),oa=!1;function cc(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function uc(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function da(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function fa(e,t,a){var l=e.updateQueue;if(l===null)return null;if(l=l.shared,(Ne&2)!==0){var n=l.pending;return n===null?t.next=t:(t.next=n.next,n.next=t),l.pending=t,t=si(e),Fr(e,null,a),t}return ii(e,l,t,a),si(e)}function cn(e,t,a){if(t=t.updateQueue,t!==null&&(t=t.shared,(a&4194048)!==0)){var l=t.lanes;l&=e.pendingLanes,a|=l,t.lanes=a,nr(e,a)}}function rc(e,t){var a=e.updateQueue,l=e.alternate;if(l!==null&&(l=l.updateQueue,a===l)){var n=null,i=null;if(a=a.firstBaseUpdate,a!==null){do{var r={lane:a.lane,tag:a.tag,payload:a.payload,callback:null,next:null};i===null?n=i=r:i=i.next=r,a=a.next}while(a!==null);i===null?n=i=t:i=i.next=t}else n=i=t;a={baseState:l.baseState,firstBaseUpdate:n,lastBaseUpdate:i,shared:l.shared,callbacks:l.callbacks},e.updateQueue=a;return}e=a.lastBaseUpdate,e===null?a.firstBaseUpdate=t:e.next=t,a.lastBaseUpdate=t}var oc=!1;function un(){if(oc){var e=ml;if(e!==null)throw e}}function rn(e,t,a,l){oc=!1;var n=e.updateQueue;oa=!1;var i=n.firstBaseUpdate,r=n.lastBaseUpdate,f=n.shared.pending;if(f!==null){n.shared.pending=null;var g=f,j=g.next;g.next=null,r===null?i=j:r.next=j,r=g;var T=e.alternate;T!==null&&(T=T.updateQueue,f=T.lastBaseUpdate,f!==r&&(f===null?T.firstBaseUpdate=j:f.next=j,T.lastBaseUpdate=g))}if(i!==null){var E=n.baseState;r=0,T=j=g=null,f=i;do{var x=f.lane&-536870913,A=x!==f.lane;if(A?(ve&x)===x:(l&x)===x){x!==0&&x===hl&&(oc=!0),T!==null&&(T=T.next={lane:0,tag:f.tag,payload:f.payload,callback:null,next:null});e:{var J=e,P=f;x=t;var Ee=a;switch(P.tag){case 1:if(J=P.payload,typeof J=="function"){E=J.call(Ee,E,x);break e}E=J;break e;case 3:J.flags=J.flags&-65537|128;case 0:if(J=P.payload,x=typeof J=="function"?J.call(Ee,E,x):J,x==null)break e;E=z({},E,x);break e;case 2:oa=!0}}x=f.callback,x!==null&&(e.flags|=64,A&&(e.flags|=8192),A=n.callbacks,A===null?n.callbacks=[x]:A.push(x))}else A={lane:x,tag:f.tag,payload:f.payload,callback:f.callback,next:null},T===null?(j=T=A,g=E):T=T.next=A,r|=x;if(f=f.next,f===null){if(f=n.shared.pending,f===null)break;A=f,f=A.next,A.next=null,n.lastBaseUpdate=A,n.shared.pending=null}}while(!0);T===null&&(g=E),n.baseState=g,n.firstBaseUpdate=j,n.lastBaseUpdate=T,i===null&&(n.shared.lanes=0),pa|=r,e.lanes=r,e.memoizedState=E}}function go(e,t){if(typeof e!="function")throw Error(o(191,e));e.call(t)}function vo(e,t){var a=e.callbacks;if(a!==null)for(e.callbacks=null,e=0;ei?i:8;var r=_.T,f={};_.T=f,Dc(e,!1,t,a);try{var g=n(),j=_.S;if(j!==null&&j(f,g),g!==null&&typeof g=="object"&&typeof g.then=="function"){var T=Pm(g,l);fn(e,t,T,jt(e))}else fn(e,t,l,jt(e))}catch(E){fn(e,t,{then:function(){},status:"rejected",reason:E},jt())}finally{H.p=i,r!==null&&f.types!==null&&(r.types=f.types),_.T=r}}function i1(){}function Tc(e,t,a,l){if(e.tag!==5)throw Error(o(476));var n=Ko(e).queue;Zo(e,n,t,U,a===null?i1:function(){return Wo(e),a(l)})}function Ko(e){var t=e.memoizedState;if(t!==null)return t;t={memoizedState:U,baseState:U,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Zt,lastRenderedState:U},next:null};var a={};return t.next={memoizedState:a,baseState:a,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Zt,lastRenderedState:a},next:null},e.memoizedState=t,e=e.alternate,e!==null&&(e.memoizedState=t),t}function Wo(e){var t=Ko(e);t.next===null&&(t=e.alternate.memoizedState),fn(e,t.next.queue,{},jt())}function zc(){return Ie(Dn)}function Fo(){return Be().memoizedState}function $o(){return Be().memoizedState}function s1(e){for(var t=e.return;t!==null;){switch(t.tag){case 24:case 3:var a=jt();e=da(a);var l=fa(t,e,a);l!==null&&(ot(l,t,a),cn(l,t,a)),t={cache:lc()},e.payload=t;return}t=t.return}}function c1(e,t,a){var l=jt();a={lane:l,revertLane:0,gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null},_i(e)?Po(t,a):(a=Xs(e,t,a,l),a!==null&&(ot(a,e,l),ed(a,t,l)))}function Io(e,t,a){var l=jt();fn(e,t,a,l)}function fn(e,t,a,l){var n={lane:l,revertLane:0,gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null};if(_i(e))Po(t,n);else{var i=e.alternate;if(e.lanes===0&&(i===null||i.lanes===0)&&(i=t.lastRenderedReducer,i!==null))try{var r=t.lastRenderedState,f=i(r,a);if(n.hasEagerState=!0,n.eagerState=f,mt(f,r))return ii(e,t,n,0),Ce===null&&ni(),!1}catch{}if(a=Xs(e,t,n,l),a!==null)return ot(a,e,l),ed(a,t,l),!0}return!1}function Dc(e,t,a,l){if(l={lane:2,revertLane:cu(),gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null},_i(e)){if(t)throw Error(o(479))}else t=Xs(e,a,l,2),t!==null&&ot(t,e,2)}function _i(e){var t=e.alternate;return e===se||t!==null&&t===se}function Po(e,t){yl=yi=!0;var a=e.pending;a===null?t.next=t:(t.next=a.next,a.next=t),e.pending=t}function ed(e,t,a){if((a&4194048)!==0){var l=t.lanes;l&=e.pendingLanes,a|=l,t.lanes=a,nr(e,a)}}var hn={readContext:Ie,use:Si,useCallback:Le,useContext:Le,useEffect:Le,useImperativeHandle:Le,useLayoutEffect:Le,useInsertionEffect:Le,useMemo:Le,useReducer:Le,useRef:Le,useState:Le,useDebugValue:Le,useDeferredValue:Le,useTransition:Le,useSyncExternalStore:Le,useId:Le,useHostTransitionStatus:Le,useFormState:Le,useActionState:Le,useOptimistic:Le,useMemoCache:Le,useCacheRefresh:Le};hn.useEffectEvent=Le;var td={readContext:Ie,use:Si,useCallback:function(e,t){return lt().memoizedState=[e,t===void 0?null:t],e},useContext:Ie,useEffect:Ho,useImperativeHandle:function(e,t,a){a=a!=null?a.concat([e]):null,Ni(4194308,4,Yo.bind(null,t,e),a)},useLayoutEffect:function(e,t){return Ni(4194308,4,e,t)},useInsertionEffect:function(e,t){Ni(4,2,e,t)},useMemo:function(e,t){var a=lt();t=t===void 0?null:t;var l=e();if(Ga){la(!0);try{e()}finally{la(!1)}}return a.memoizedState=[l,t],l},useReducer:function(e,t,a){var l=lt();if(a!==void 0){var n=a(t);if(Ga){la(!0);try{a(t)}finally{la(!1)}}}else n=t;return l.memoizedState=l.baseState=n,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:n},l.queue=e,e=e.dispatch=c1.bind(null,se,e),[l.memoizedState,e]},useRef:function(e){var t=lt();return e={current:e},t.memoizedState=e},useState:function(e){e=xc(e);var t=e.queue,a=Io.bind(null,se,t);return t.dispatch=a,[e.memoizedState,a]},useDebugValue:_c,useDeferredValue:function(e,t){var a=lt();return kc(a,e,t)},useTransition:function(){var e=xc(!1);return e=Zo.bind(null,se,e.queue,!0,!1),lt().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,a){var l=se,n=lt();if(be){if(a===void 0)throw Error(o(407));a=a()}else{if(a=t(),Ce===null)throw Error(o(349));(ve&127)!==0||xo(l,t,a)}n.memoizedState=a;var i={value:a,getSnapshot:t};return n.queue=i,Ho(Ao.bind(null,l,i,e),[e]),l.flags|=2048,jl(9,{destroy:void 0},No.bind(null,l,i,a,t),null),a},useId:function(){var e=lt(),t=Ce.identifierPrefix;if(be){var a=Lt,l=wt;a=(l&~(1<<32-ht(l)-1)).toString(32)+a,t="_"+t+"R_"+a,a=bi++,0<\/script>",i=i.removeChild(i.firstChild);break;case"select":i=typeof l.is=="string"?r.createElement("select",{is:l.is}):r.createElement("select"),l.multiple?i.multiple=!0:l.size&&(i.size=l.size);break;default:i=typeof l.is=="string"?r.createElement(n,{is:l.is}):r.createElement(n)}}i[Fe]=t,i[nt]=l;e:for(r=t.child;r!==null;){if(r.tag===5||r.tag===6)i.appendChild(r.stateNode);else if(r.tag!==4&&r.tag!==27&&r.child!==null){r.child.return=r,r=r.child;continue}if(r===t)break e;for(;r.sibling===null;){if(r.return===null||r.return===t)break e;r=r.return}r.sibling.return=r.return,r=r.sibling}t.stateNode=i;e:switch(et(i,n,l),n){case"button":case"input":case"select":case"textarea":l=!!l.autoFocus;break e;case"img":l=!0;break e;default:l=!1}l&&Wt(t)}}return Oe(t),Qc(t,t.type,e===null?null:e.memoizedProps,t.pendingProps,a),null;case 6:if(e&&t.stateNode!=null)e.memoizedProps!==l&&Wt(t);else{if(typeof l!="string"&&t.stateNode===null)throw Error(o(166));if(e=ee.current,dl(t)){if(e=t.stateNode,a=t.memoizedProps,l=null,n=$e,n!==null)switch(n.tag){case 27:case 5:l=n.memoizedProps}e[Fe]=t,e=!!(e.nodeValue===a||l!==null&&l.suppressHydrationWarning===!0||Sf(e.nodeValue,a)),e||ua(t,!0)}else e=Ji(e).createTextNode(l),e[Fe]=t,t.stateNode=e}return Oe(t),null;case 31:if(a=t.memoizedState,e===null||e.memoizedState!==null){if(l=dl(t),a!==null){if(e===null){if(!l)throw Error(o(318));if(e=t.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(o(557));e[Fe]=t}else Ra(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;Oe(t),e=!1}else a=Ps(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=a),e=!0;if(!e)return t.flags&256?(pt(t),t):(pt(t),null);if((t.flags&128)!==0)throw Error(o(558))}return Oe(t),null;case 13:if(l=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(n=dl(t),l!==null&&l.dehydrated!==null){if(e===null){if(!n)throw Error(o(318));if(n=t.memoizedState,n=n!==null?n.dehydrated:null,!n)throw Error(o(317));n[Fe]=t}else Ra(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;Oe(t),n=!1}else n=Ps(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=n),n=!0;if(!n)return t.flags&256?(pt(t),t):(pt(t),null)}return pt(t),(t.flags&128)!==0?(t.lanes=a,t):(a=l!==null,e=e!==null&&e.memoizedState!==null,a&&(l=t.child,n=null,l.alternate!==null&&l.alternate.memoizedState!==null&&l.alternate.memoizedState.cachePool!==null&&(n=l.alternate.memoizedState.cachePool.pool),i=null,l.memoizedState!==null&&l.memoizedState.cachePool!==null&&(i=l.memoizedState.cachePool.pool),i!==n&&(l.flags|=2048)),a!==e&&a&&(t.child.flags|=8192),Mi(t,t.updateQueue),Oe(t),null);case 4:return Ve(),e===null&&du(t.stateNode.containerInfo),Oe(t),null;case 10:return Jt(t.type),Oe(t),null;case 19:if(S(qe),l=t.memoizedState,l===null)return Oe(t),null;if(n=(t.flags&128)!==0,i=l.rendering,i===null)if(n)gn(l,!1);else{if(Re!==0||e!==null&&(e.flags&128)!==0)for(e=t.child;e!==null;){if(i=pi(e),i!==null){for(t.flags|=128,gn(l,!1),e=i.updateQueue,t.updateQueue=e,Mi(t,e),t.subtreeFlags=0,e=a,a=t.child;a!==null;)$r(a,e),a=a.sibling;return C(qe,qe.current&1|2),be&&Qt(t,l.treeForkCount),t.child}e=e.sibling}l.tail!==null&&dt()>wi&&(t.flags|=128,n=!0,gn(l,!1),t.lanes=4194304)}else{if(!n)if(e=pi(i),e!==null){if(t.flags|=128,n=!0,e=e.updateQueue,t.updateQueue=e,Mi(t,e),gn(l,!0),l.tail===null&&l.tailMode==="hidden"&&!i.alternate&&!be)return Oe(t),null}else 2*dt()-l.renderingStartTime>wi&&a!==536870912&&(t.flags|=128,n=!0,gn(l,!1),t.lanes=4194304);l.isBackwards?(i.sibling=t.child,t.child=i):(e=l.last,e!==null?e.sibling=i:t.child=i,l.last=i)}return l.tail!==null?(e=l.tail,l.rendering=e,l.tail=e.sibling,l.renderingStartTime=dt(),e.sibling=null,a=qe.current,C(qe,n?a&1|2:a&1),be&&Qt(t,l.treeForkCount),e):(Oe(t),null);case 22:case 23:return pt(t),fc(),l=t.memoizedState!==null,e!==null?e.memoizedState!==null!==l&&(t.flags|=8192):l&&(t.flags|=8192),l?(a&536870912)!==0&&(t.flags&128)===0&&(Oe(t),t.subtreeFlags&6&&(t.flags|=8192)):Oe(t),a=t.updateQueue,a!==null&&Mi(t,a.retryQueue),a=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(a=e.memoizedState.cachePool.pool),l=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(l=t.memoizedState.cachePool.pool),l!==a&&(t.flags|=2048),e!==null&&S(qa),null;case 24:return a=null,e!==null&&(a=e.memoizedState.cache),t.memoizedState.cache!==a&&(t.flags|=2048),Jt(Ye),Oe(t),null;case 25:return null;case 30:return null}throw Error(o(156,t.tag))}function f1(e,t){switch($s(t),t.tag){case 1:return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return Jt(Ye),Ve(),e=t.flags,(e&65536)!==0&&(e&128)===0?(t.flags=e&-65537|128,t):null;case 26:case 27:case 5:return Bn(t),null;case 31:if(t.memoizedState!==null){if(pt(t),t.alternate===null)throw Error(o(340));Ra()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 13:if(pt(t),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(o(340));Ra()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return S(qe),null;case 4:return Ve(),null;case 10:return Jt(t.type),null;case 22:case 23:return pt(t),fc(),e!==null&&S(qa),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 24:return Jt(Ye),null;case 25:return null;default:return null}}function _d(e,t){switch($s(t),t.tag){case 3:Jt(Ye),Ve();break;case 26:case 27:case 5:Bn(t);break;case 4:Ve();break;case 31:t.memoizedState!==null&&pt(t);break;case 13:pt(t);break;case 19:S(qe);break;case 10:Jt(t.type);break;case 22:case 23:pt(t),fc(),e!==null&&S(qa);break;case 24:Jt(Ye)}}function vn(e,t){try{var a=t.updateQueue,l=a!==null?a.lastEffect:null;if(l!==null){var n=l.next;a=n;do{if((a.tag&e)===e){l=void 0;var i=a.create,r=a.inst;l=i(),r.destroy=l}a=a.next}while(a!==n)}}catch(f){Te(t,t.return,f)}}function ga(e,t,a){try{var l=t.updateQueue,n=l!==null?l.lastEffect:null;if(n!==null){var i=n.next;l=i;do{if((l.tag&e)===e){var r=l.inst,f=r.destroy;if(f!==void 0){r.destroy=void 0,n=t;var g=a,j=f;try{j()}catch(T){Te(n,g,T)}}}l=l.next}while(l!==i)}}catch(T){Te(t,t.return,T)}}function kd(e){var t=e.updateQueue;if(t!==null){var a=e.stateNode;try{vo(t,a)}catch(l){Te(e,e.return,l)}}}function Td(e,t,a){a.props=Ja(e.type,e.memoizedProps),a.state=e.memoizedState;try{a.componentWillUnmount()}catch(l){Te(e,t,l)}}function pn(e,t){try{var a=e.ref;if(a!==null){switch(e.tag){case 26:case 27:case 5:var l=e.stateNode;break;case 30:l=e.stateNode;break;default:l=e.stateNode}typeof a=="function"?e.refCleanup=a(l):a.current=l}}catch(n){Te(e,t,n)}}function Rt(e,t){var a=e.ref,l=e.refCleanup;if(a!==null)if(typeof l=="function")try{l()}catch(n){Te(e,t,n)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof a=="function")try{a(null)}catch(n){Te(e,t,n)}else a.current=null}function zd(e){var t=e.type,a=e.memoizedProps,l=e.stateNode;try{e:switch(t){case"button":case"input":case"select":case"textarea":a.autoFocus&&l.focus();break e;case"img":a.src?l.src=a.src:a.srcSet&&(l.srcset=a.srcSet)}}catch(n){Te(e,e.return,n)}}function Gc(e,t,a){try{var l=e.stateNode;O1(l,e.type,a,t),l[nt]=t}catch(n){Te(e,e.return,n)}}function Dd(e){return e.tag===5||e.tag===3||e.tag===26||e.tag===27&&xa(e.type)||e.tag===4}function Jc(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||Dd(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.tag===27&&xa(e.type)||e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Xc(e,t,a){var l=e.tag;if(l===5||l===6)e=e.stateNode,t?(a.nodeType===9?a.body:a.nodeName==="HTML"?a.ownerDocument.body:a).insertBefore(e,t):(t=a.nodeType===9?a.body:a.nodeName==="HTML"?a.ownerDocument.body:a,t.appendChild(e),a=a._reactRootContainer,a!=null||t.onclick!==null||(t.onclick=qt));else if(l!==4&&(l===27&&xa(e.type)&&(a=e.stateNode,t=null),e=e.child,e!==null))for(Xc(e,t,a),e=e.sibling;e!==null;)Xc(e,t,a),e=e.sibling}function Ei(e,t,a){var l=e.tag;if(l===5||l===6)e=e.stateNode,t?a.insertBefore(e,t):a.appendChild(e);else if(l!==4&&(l===27&&xa(e.type)&&(a=e.stateNode),e=e.child,e!==null))for(Ei(e,t,a),e=e.sibling;e!==null;)Ei(e,t,a),e=e.sibling}function Md(e){var t=e.stateNode,a=e.memoizedProps;try{for(var l=e.type,n=t.attributes;n.length;)t.removeAttributeNode(n[0]);et(t,l,a),t[Fe]=e,t[nt]=a}catch(i){Te(e,e.return,i)}}var Ft=!1,Je=!1,Zc=!1,Ed=typeof WeakSet=="function"?WeakSet:Set,We=null;function h1(e,t){if(e=e.containerInfo,mu=Ii,e=Yr(e),qs(e)){if("selectionStart"in e)var a={start:e.selectionStart,end:e.selectionEnd};else e:{a=(a=e.ownerDocument)&&a.defaultView||window;var l=a.getSelection&&a.getSelection();if(l&&l.rangeCount!==0){a=l.anchorNode;var n=l.anchorOffset,i=l.focusNode;l=l.focusOffset;try{a.nodeType,i.nodeType}catch{a=null;break e}var r=0,f=-1,g=-1,j=0,T=0,E=e,x=null;t:for(;;){for(var A;E!==a||n!==0&&E.nodeType!==3||(f=r+n),E!==i||l!==0&&E.nodeType!==3||(g=r+l),E.nodeType===3&&(r+=E.nodeValue.length),(A=E.firstChild)!==null;)x=E,E=A;for(;;){if(E===e)break t;if(x===a&&++j===n&&(f=r),x===i&&++T===l&&(g=r),(A=E.nextSibling)!==null)break;E=x,x=E.parentNode}E=A}a=f===-1||g===-1?null:{start:f,end:g}}else a=null}a=a||{start:0,end:0}}else a=null;for(gu={focusedElem:e,selectionRange:a},Ii=!1,We=t;We!==null;)if(t=We,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,We=e;else for(;We!==null;){switch(t=We,i=t.alternate,e=t.flags,t.tag){case 0:if((e&4)!==0&&(e=t.updateQueue,e=e!==null?e.events:null,e!==null))for(a=0;a title"))),et(i,l,a),i[Fe]=e,Ke(i),l=i;break e;case"link":var r=Hf("link","href",n).get(l+(a.href||""));if(r){for(var f=0;fEe&&(r=Ee,Ee=P,P=r);var p=qr(f,P),v=qr(f,Ee);if(p&&v&&(A.rangeCount!==1||A.anchorNode!==p.node||A.anchorOffset!==p.offset||A.focusNode!==v.node||A.focusOffset!==v.offset)){var b=E.createRange();b.setStart(p.node,p.offset),A.removeAllRanges(),P>Ee?(A.addRange(b),A.extend(v.node,v.offset)):(b.setEnd(v.node,v.offset),A.addRange(b))}}}}for(E=[],A=f;A=A.parentNode;)A.nodeType===1&&E.push({element:A,left:A.scrollLeft,top:A.scrollTop});for(typeof f.focus=="function"&&f.focus(),f=0;fa?32:a,_.T=null,a=eu,eu=null;var i=ba,r=ta;if(Ze=0,_l=ba=null,ta=0,(Ne&6)!==0)throw Error(o(331));var f=Ne;if(Ne|=4,Yd(i.current),Vd(i,i.current,r,a),Ne=f,Nn(0,!1),ft&&typeof ft.onPostCommitFiberRoot=="function")try{ft.onPostCommitFiberRoot(ql,i)}catch{}return!0}finally{H.p=n,_.T=l,cf(e,t)}}function rf(e,t,a){t=At(a,t),t=Uc(e.stateNode,t,2),e=fa(e,t,2),e!==null&&(Yl(e,2),Ht(e))}function Te(e,t,a){if(e.tag===3)rf(e,e,a);else for(;t!==null;){if(t.tag===3){rf(t,e,a);break}else if(t.tag===1){var l=t.stateNode;if(typeof t.type.getDerivedStateFromError=="function"||typeof l.componentDidCatch=="function"&&(ya===null||!ya.has(l))){e=At(a,e),a=rd(2),l=fa(t,a,2),l!==null&&(od(a,l,t,e),Yl(l,2),Ht(l));break}}t=t.return}}function nu(e,t,a){var l=e.pingCache;if(l===null){l=e.pingCache=new v1;var n=new Set;l.set(t,n)}else n=l.get(t),n===void 0&&(n=new Set,l.set(t,n));n.has(a)||(Fc=!0,n.add(a),e=S1.bind(null,e,t,a),t.then(e,e))}function S1(e,t,a){var l=e.pingCache;l!==null&&l.delete(t),e.pingedLanes|=e.suspendedLanes&a,e.warmLanes&=~a,Ce===e&&(ve&a)===a&&(Re===4||Re===3&&(ve&62914560)===ve&&300>dt()-Oi?(Ne&2)===0&&kl(e,0):$c|=a,Al===ve&&(Al=0)),Ht(e)}function of(e,t){t===0&&(t=ar()),e=wa(e,t),e!==null&&(Yl(e,t),Ht(e))}function x1(e){var t=e.memoizedState,a=0;t!==null&&(a=t.retryLane),of(e,a)}function N1(e,t){var a=0;switch(e.tag){case 31:case 13:var l=e.stateNode,n=e.memoizedState;n!==null&&(a=n.retryLane);break;case 19:l=e.stateNode;break;case 22:l=e.stateNode._retryCache;break;default:throw Error(o(314))}l!==null&&l.delete(t),of(e,a)}function A1(e,t){return ps(e,t)}var Bi=null,zl=null,iu=!1,Yi=!1,su=!1,Sa=0;function Ht(e){e!==zl&&e.next===null&&(zl===null?Bi=zl=e:zl=zl.next=e),Yi=!0,iu||(iu=!0,k1())}function Nn(e,t){if(!su&&Yi){su=!0;do for(var a=!1,l=Bi;l!==null;){if(e!==0){var n=l.pendingLanes;if(n===0)var i=0;else{var r=l.suspendedLanes,f=l.pingedLanes;i=(1<<31-ht(42|e)+1)-1,i&=n&~(r&~f),i=i&201326741?i&201326741|1:i?i|2:0}i!==0&&(a=!0,mf(l,i))}else i=ve,i=Xn(l,l===Ce?i:0,l.cancelPendingCommit!==null||l.timeoutHandle!==-1),(i&3)===0||Bl(l,i)||(a=!0,mf(l,i));l=l.next}while(a);su=!1}}function _1(){df()}function df(){Yi=iu=!1;var e=0;Sa!==0&&L1()&&(e=Sa);for(var t=dt(),a=null,l=Bi;l!==null;){var n=l.next,i=ff(l,t);i===0?(l.next=null,a===null?Bi=n:a.next=n,n===null&&(zl=a)):(a=l,(e!==0||(i&3)!==0)&&(Yi=!0)),l=n}Ze!==0&&Ze!==5||Nn(e),Sa!==0&&(Sa=0)}function ff(e,t){for(var a=e.suspendedLanes,l=e.pingedLanes,n=e.expirationTimes,i=e.pendingLanes&-62914561;0f)break;var T=g.transferSize,E=g.initiatorType;T&&xf(E)&&(g=g.responseEnd,r+=T*(g"u"?null:document;function Of(e,t,a){var l=Dl;if(l&&typeof t=="string"&&t){var n=xt(t);n='link[rel="'+e+'"][href="'+n+'"]',typeof a=="string"&&(n+='[crossorigin="'+a+'"]'),Uf.has(n)||(Uf.add(n),e={rel:e,crossOrigin:a,href:t},l.querySelector(n)===null&&(t=l.createElement("link"),et(t,"link",e),Ke(t),l.head.appendChild(t)))}}function J1(e){aa.D(e),Of("dns-prefetch",e,null)}function X1(e,t){aa.C(e,t),Of("preconnect",e,t)}function Z1(e,t,a){aa.L(e,t,a);var l=Dl;if(l&&e&&t){var n='link[rel="preload"][as="'+xt(t)+'"]';t==="image"&&a&&a.imageSrcSet?(n+='[imagesrcset="'+xt(a.imageSrcSet)+'"]',typeof a.imageSizes=="string"&&(n+='[imagesizes="'+xt(a.imageSizes)+'"]')):n+='[href="'+xt(e)+'"]';var i=n;switch(t){case"style":i=Ml(e);break;case"script":i=El(e)}Mt.has(i)||(e=z({rel:"preload",href:t==="image"&&a&&a.imageSrcSet?void 0:e,as:t},a),Mt.set(i,e),l.querySelector(n)!==null||t==="style"&&l.querySelector(Tn(i))||t==="script"&&l.querySelector(zn(i))||(t=l.createElement("link"),et(t,"link",e),Ke(t),l.head.appendChild(t)))}}function K1(e,t){aa.m(e,t);var a=Dl;if(a&&e){var l=t&&typeof t.as=="string"?t.as:"script",n='link[rel="modulepreload"][as="'+xt(l)+'"][href="'+xt(e)+'"]',i=n;switch(l){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":i=El(e)}if(!Mt.has(i)&&(e=z({rel:"modulepreload",href:e},t),Mt.set(i,e),a.querySelector(n)===null)){switch(l){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(a.querySelector(zn(i)))return}l=a.createElement("link"),et(l,"link",e),Ke(l),a.head.appendChild(l)}}}function W1(e,t,a){aa.S(e,t,a);var l=Dl;if(l&&e){var n=Ia(l).hoistableStyles,i=Ml(e);t=t||"default";var r=n.get(i);if(!r){var f={loading:0,preload:null};if(r=l.querySelector(Tn(i)))f.loading=5;else{e=z({rel:"stylesheet",href:e,"data-precedence":t},a),(a=Mt.get(i))&&xu(e,a);var g=r=l.createElement("link");Ke(g),et(g,"link",e),g._p=new Promise(function(j,T){g.onload=j,g.onerror=T}),g.addEventListener("load",function(){f.loading|=1}),g.addEventListener("error",function(){f.loading|=2}),f.loading|=4,Zi(r,t,l)}r={type:"stylesheet",instance:r,count:1,state:f},n.set(i,r)}}}function F1(e,t){aa.X(e,t);var a=Dl;if(a&&e){var l=Ia(a).hoistableScripts,n=El(e),i=l.get(n);i||(i=a.querySelector(zn(n)),i||(e=z({src:e,async:!0},t),(t=Mt.get(n))&&Nu(e,t),i=a.createElement("script"),Ke(i),et(i,"link",e),a.head.appendChild(i)),i={type:"script",instance:i,count:1,state:null},l.set(n,i))}}function $1(e,t){aa.M(e,t);var a=Dl;if(a&&e){var l=Ia(a).hoistableScripts,n=El(e),i=l.get(n);i||(i=a.querySelector(zn(n)),i||(e=z({src:e,async:!0,type:"module"},t),(t=Mt.get(n))&&Nu(e,t),i=a.createElement("script"),Ke(i),et(i,"link",e),a.head.appendChild(i)),i={type:"script",instance:i,count:1,state:null},l.set(n,i))}}function wf(e,t,a,l){var n=(n=ee.current)?Xi(n):null;if(!n)throw Error(o(446));switch(e){case"meta":case"title":return null;case"style":return typeof a.precedence=="string"&&typeof a.href=="string"?(t=Ml(a.href),a=Ia(n).hoistableStyles,l=a.get(t),l||(l={type:"style",instance:null,count:0,state:null},a.set(t,l)),l):{type:"void",instance:null,count:0,state:null};case"link":if(a.rel==="stylesheet"&&typeof a.href=="string"&&typeof a.precedence=="string"){e=Ml(a.href);var i=Ia(n).hoistableStyles,r=i.get(e);if(r||(n=n.ownerDocument||n,r={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},i.set(e,r),(i=n.querySelector(Tn(e)))&&!i._p&&(r.instance=i,r.state.loading=5),Mt.has(e)||(a={rel:"preload",as:"style",href:a.href,crossOrigin:a.crossOrigin,integrity:a.integrity,media:a.media,hrefLang:a.hrefLang,referrerPolicy:a.referrerPolicy},Mt.set(e,a),i||I1(n,e,a,r.state))),t&&l===null)throw Error(o(528,""));return r}if(t&&l!==null)throw Error(o(529,""));return null;case"script":return t=a.async,a=a.src,typeof a=="string"&&t&&typeof t!="function"&&typeof t!="symbol"?(t=El(a),a=Ia(n).hoistableScripts,l=a.get(t),l||(l={type:"script",instance:null,count:0,state:null},a.set(t,l)),l):{type:"void",instance:null,count:0,state:null};default:throw Error(o(444,e))}}function Ml(e){return'href="'+xt(e)+'"'}function Tn(e){return'link[rel="stylesheet"]['+e+"]"}function Lf(e){return z({},e,{"data-precedence":e.precedence,precedence:null})}function I1(e,t,a,l){e.querySelector('link[rel="preload"][as="style"]['+t+"]")?l.loading=1:(t=e.createElement("link"),l.preload=t,t.addEventListener("load",function(){return l.loading|=1}),t.addEventListener("error",function(){return l.loading|=2}),et(t,"link",a),Ke(t),e.head.appendChild(t))}function El(e){return'[src="'+xt(e)+'"]'}function zn(e){return"script[async]"+e}function Rf(e,t,a){if(t.count++,t.instance===null)switch(t.type){case"style":var l=e.querySelector('style[data-href~="'+xt(a.href)+'"]');if(l)return t.instance=l,Ke(l),l;var n=z({},a,{"data-href":a.href,"data-precedence":a.precedence,href:null,precedence:null});return l=(e.ownerDocument||e).createElement("style"),Ke(l),et(l,"style",n),Zi(l,a.precedence,e),t.instance=l;case"stylesheet":n=Ml(a.href);var i=e.querySelector(Tn(n));if(i)return t.state.loading|=4,t.instance=i,Ke(i),i;l=Lf(a),(n=Mt.get(n))&&xu(l,n),i=(e.ownerDocument||e).createElement("link"),Ke(i);var r=i;return r._p=new Promise(function(f,g){r.onload=f,r.onerror=g}),et(i,"link",l),t.state.loading|=4,Zi(i,a.precedence,e),t.instance=i;case"script":return i=El(a.src),(n=e.querySelector(zn(i)))?(t.instance=n,Ke(n),n):(l=a,(n=Mt.get(i))&&(l=z({},a),Nu(l,n)),e=e.ownerDocument||e,n=e.createElement("script"),Ke(n),et(n,"link",l),e.head.appendChild(n),t.instance=n);case"void":return null;default:throw Error(o(443,t.type))}else t.type==="stylesheet"&&(t.state.loading&4)===0&&(l=t.instance,t.state.loading|=4,Zi(l,a.precedence,e));return t.instance}function Zi(e,t,a){for(var l=a.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),n=l.length?l[l.length-1]:null,i=n,r=0;r title"):null)}function P1(e,t,a){if(a===1||t.itemProp!=null)return!1;switch(e){case"meta":case"title":return!0;case"style":if(typeof t.precedence!="string"||typeof t.href!="string"||t.href==="")break;return!0;case"link":if(typeof t.rel!="string"||typeof t.href!="string"||t.href===""||t.onLoad||t.onError)break;return t.rel==="stylesheet"?(e=t.disabled,typeof t.precedence=="string"&&e==null):!0;case"script":if(t.async&&typeof t.async!="function"&&typeof t.async!="symbol"&&!t.onLoad&&!t.onError&&t.src&&typeof t.src=="string")return!0}return!1}function qf(e){return!(e.type==="stylesheet"&&(e.state.loading&3)===0)}function eg(e,t,a,l){if(a.type==="stylesheet"&&(typeof l.media!="string"||matchMedia(l.media).matches!==!1)&&(a.state.loading&4)===0){if(a.instance===null){var n=Ml(l.href),i=t.querySelector(Tn(n));if(i){t=i._p,t!==null&&typeof t=="object"&&typeof t.then=="function"&&(e.count++,e=Wi.bind(e),t.then(e,e)),a.state.loading|=4,a.instance=i,Ke(i);return}i=t.ownerDocument||t,l=Lf(l),(n=Mt.get(n))&&xu(l,n),i=i.createElement("link"),Ke(i);var r=i;r._p=new Promise(function(f,g){r.onload=f,r.onerror=g}),et(i,"link",l),a.instance=i}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(a,t),(t=a.state.preload)&&(a.state.loading&3)===0&&(e.count++,a=Wi.bind(e),t.addEventListener("load",a),t.addEventListener("error",a))}}var Au=0;function tg(e,t){return e.stylesheets&&e.count===0&&$i(e,e.stylesheets),0Au?50:800)+t);return e.unsuspend=a,function(){e.unsuspend=null,clearTimeout(l),clearTimeout(n)}}:null}function Wi(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)$i(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var Fi=null;function $i(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,Fi=new Map,t.forEach(ag,e),Fi=null,Wi.call(e))}function ag(e,t){if(!(t.state.loading&4)){var a=Fi.get(e);if(a)var l=a.get(null);else{a=new Map,Fi.set(e,a);for(var n=e.querySelectorAll("link[data-precedence],style[data-precedence]"),i=0;i"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(d)}catch(c){console.error(c)}}return d(),Uu.exports=yg(),Uu.exports}var jg=bg();class Sg{observers=new Set;next(c){this.observers.forEach(u=>u(c))}asObservable(){return{subscribe:c=>(this.observers.add(c),{unsubscribe:()=>this.observers.delete(c)})}}}class xg extends Sg{currentValue;constructor(c){super(),this.currentValue=c}next(c){this.currentValue=c,super.next(c)}get value(){return this.currentValue}asObservable(){return{subscribe:c=>(c(this.currentValue),super.asObservable().subscribe(c))}}}class Ng{authId="id";authToken="token";authEmail="email";runOutDate="runOutDate";authTokenSubject=new xg(null);constructor(){}async loadAuthTokenFromStorage(){const c=window.localStorage.getItem(this.authToken);this.authTokenSubject.next(c)}async setAuthData(c,u){if(await this.setPreference(this.authId,c.id),await this.setPreference(this.authToken,c.token),await this.setPreference(this.authEmail,c.email),u)await this.setPreference(this.runOutDate,"forever");else{const o=new Date,m=new Date(o);m.setDate(o.getDate()+1);const y=m.toISOString();await this.setPreference(this.runOutDate,y)}}async setPreference(c,u){window.localStorage.setItem(c,u)}async getCandidateId(){return window.localStorage.getItem(this.authId)}async getCandidateEmail(){return window.localStorage.getItem(this.authEmail)}async getAuthToken(){return window.localStorage.getItem(this.authToken)}getAuthTokenNoneAsync(){return this.authTokenSubject.value}async getRunOutDate(){return window.localStorage.getItem(this.runOutDate)}async clearCredentials(){window.localStorage.removeItem(this.authId),window.localStorage.removeItem(this.authToken),window.localStorage.removeItem(this.runOutDate)}async getAuth(){let c=await this.getCandidateId(),u=await this.getAuthToken(),o=await this.getCandidateEmail(),m=await this.getRunOutDate();return c&&u&&o&&m?{id:c,token:u,email:o,runOutDate:m}:null}getAuthTokenWithoutWindow(){const c=this.getAuthTokenNoneAsync();return c||""}getAuthWithoutWindow(){const c=this.getAuthTokenNoneAsync();return c?{id:"",token:c,email:"",runOutDate:"forever"}:null}}const wl=new Ng;const zh=(...d)=>d.filter((c,u,o)=>!!c&&c.trim()!==""&&o.indexOf(c)===u).join(" ").trim();const Ag=d=>d.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase();const _g=d=>d.replace(/^([A-Z])|[\s-_]+(\w)/g,(c,u,o)=>o?o.toUpperCase():u.toLowerCase());const oh=d=>{const c=_g(d);return c.charAt(0).toUpperCase()+c.slice(1)};var kg={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};const Tg=d=>{for(const c in d)if(c.startsWith("aria-")||c==="role"||c==="title")return!0;return!1};const zg=L.forwardRef(({color:d="currentColor",size:c=24,strokeWidth:u=2,absoluteStrokeWidth:o,className:m="",children:y,iconNode:O,...G},w)=>L.createElement("svg",{ref:w,...kg,width:c,height:c,stroke:d,strokeWidth:o?Number(u)*24/Number(c):u,className:zh("lucide",m),...!y&&!Tg(G)&&{"aria-hidden":"true"},...G},[...O.map(([N,V])=>L.createElement(N,V)),...Array.isArray(y)?y:[y]]));const W=(d,c)=>{const u=L.forwardRef(({className:o,...m},y)=>L.createElement(zg,{ref:y,iconNode:c,className:zh(`lucide-${Ag(oh(d))}`,`lucide-${d}`,o),...m}));return u.displayName=oh(d),u};const Dg=[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]],Mg=W("arrow-left",Dg);const Eg=[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]],Ol=W("arrow-right",Eg);const Cg=[["path",{d:"m21 16-4 4-4-4",key:"f6ql7i"}],["path",{d:"M17 20V4",key:"1ejh1v"}],["path",{d:"m3 8 4-4 4 4",key:"11wl7u"}],["path",{d:"M7 4v16",key:"1glfcx"}]],Ug=W("arrow-up-down",Cg);const Og=[["path",{d:"M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z",key:"3c2336"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]],wg=W("badge-check",Og);const Lg=[["path",{d:"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z",key:"yt0hxn"}],["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}]],Rg=W("bolt",Lg);const Hg=[["path",{d:"M17 3a2 2 0 0 1 2 2v15a1 1 0 0 1-1.496.868l-4.512-2.578a2 2 0 0 0-1.984 0l-4.512 2.578A1 1 0 0 1 5 20V5a2 2 0 0 1 2-2z",key:"oz39mx"}]],Vg=W("bookmark",Hg);const qg=[["path",{d:"M12 8V4H8",key:"hb8ula"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2",key:"enze0r"}],["path",{d:"M2 14h2",key:"vft8re"}],["path",{d:"M20 14h2",key:"4cs60a"}],["path",{d:"M15 13v2",key:"1xurst"}],["path",{d:"M9 13v2",key:"rq6x2g"}]],Dh=W("bot",qg);const Bg=[["path",{d:"M12 12h.01",key:"1mp3jc"}],["path",{d:"M16 6V4a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v2",key:"1ksdt3"}],["path",{d:"M22 13a18.15 18.15 0 0 1-20 0",key:"12hx5q"}],["rect",{width:"20",height:"14",x:"2",y:"6",rx:"2",key:"i6l2r4"}]],Qu=W("briefcase-business",Bg);const Yg=[["path",{d:"M16 20V4a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16",key:"jecpp"}],["rect",{width:"20",height:"14",x:"2",y:"6",rx:"2",key:"i6l2r4"}]],Mh=W("briefcase",Yg);const Qg=[["path",{d:"M19 17h2c.6 0 1-.4 1-1v-3c0-.9-.7-1.7-1.5-1.9C18.7 10.6 16 10 16 10s-1.3-1.4-2.2-2.3c-.5-.4-1.1-.7-1.8-.7H5c-.6 0-1.1.4-1.4.9l-1.4 2.9A3.7 3.7 0 0 0 2 12v4c0 .6.4 1 1 1h2",key:"5owen"}],["circle",{cx:"7",cy:"17",r:"2",key:"u2ysq9"}],["path",{d:"M9 17h6",key:"r8uit2"}],["circle",{cx:"17",cy:"17",r:"2",key:"axvx0g"}]],Gg=W("car",Qg);const Jg=[["path",{d:"M18 6 7 17l-5-5",key:"116fxf"}],["path",{d:"m22 10-7.5 7.5L13 16",key:"ke71qq"}]],Xg=W("check-check",Jg);const Zg=[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]],Kg=W("chevron-down",Zg);const Wg=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]],za=W("circle-check",Wg);const Fg=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["circle",{cx:"12",cy:"10",r:"3",key:"ilqhr7"}],["path",{d:"M7 20.662V19a2 2 0 0 1 2-2h6a2 2 0 0 1 2 2v1.662",key:"154egf"}]],$g=W("circle-user",Fg);const Ig=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 6v6h4",key:"135r8i"}]],Pg=W("clock-3",Ig);const e0=[["path",{d:"m18 16 4-4-4-4",key:"1inbqp"}],["path",{d:"m6 8-4 4 4 4",key:"15zrgr"}],["path",{d:"m14.5 4-5 16",key:"e7oirm"}]],dh=W("code-xml",e0);const t0=[["path",{d:"M11.35 22H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v5.35",key:"17jvcc"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M14 19h6",key:"bvotb8"}],["path",{d:"M17 16v6",key:"18yu1i"}]],a0=W("file-plus-corner",t0);const l0=[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M10 9H8",key:"b1mrlr"}],["path",{d:"M16 13H8",key:"t4e002"}],["path",{d:"M16 17H8",key:"z1uh3a"}]],Gu=W("file-text",l0);const n0=[["line",{x1:"6",x2:"10",y1:"11",y2:"11",key:"1gktln"}],["line",{x1:"8",x2:"8",y1:"9",y2:"13",key:"qnk9ow"}],["line",{x1:"15",x2:"15.01",y1:"12",y2:"12",key:"krot7o"}],["line",{x1:"18",x2:"18.01",y1:"10",y2:"10",key:"1lcuu1"}],["path",{d:"M17.32 5H6.68a4 4 0 0 0-3.978 3.59c-.006.052-.01.101-.017.152C2.604 9.416 2 14.456 2 16a3 3 0 0 0 3 3c1 0 1.5-.5 2-1l1.414-1.414A2 2 0 0 1 9.828 16h4.344a2 2 0 0 1 1.414.586L17 18c.5.5 1 1 2 1a3 3 0 0 0 3-3c0-1.545-.604-6.584-.685-7.258-.007-.05-.011-.1-.017-.151A4 4 0 0 0 17.32 5z",key:"mfqc10"}]],i0=W("gamepad-2",n0);const s0=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20",key:"13o1zl"}],["path",{d:"M2 12h20",key:"9i4pu4"}]],Eh=W("globe",s0);const c0=[["path",{d:"M21.42 10.922a1 1 0 0 0-.019-1.838L12.83 5.18a2 2 0 0 0-1.66 0L2.6 9.08a1 1 0 0 0 0 1.832l8.57 3.908a2 2 0 0 0 1.66 0z",key:"j76jl0"}],["path",{d:"M22 10v6",key:"1lu8f3"}],["path",{d:"M6 12.5V16a6 3 0 0 0 12 0v-3.5",key:"1r8lef"}]],u0=W("graduation-cap",c0);const r0=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M3 9h18",key:"1pudct"}],["path",{d:"M3 15h18",key:"5xshup"}],["path",{d:"M9 3v18",key:"fh3hqa"}],["path",{d:"M15 3v18",key:"14nvp0"}]],Ch=W("grid-3x3",r0);const o0=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 16v-4",key:"1dtifu"}],["path",{d:"M12 8h.01",key:"e9boi3"}]],d0=W("info",o0);const f0=[["path",{d:"M18 5a2 2 0 0 1 2 2v8.526a2 2 0 0 0 .212.897l1.068 2.127a1 1 0 0 1-.9 1.45H3.62a1 1 0 0 1-.9-1.45l1.068-2.127A2 2 0 0 0 4 15.526V7a2 2 0 0 1 2-2z",key:"1pdavp"}],["path",{d:"M20.054 15.987H3.946",key:"14rxg9"}]],Ju=W("laptop",f0);const h0=[["rect",{width:"7",height:"7",x:"3",y:"3",rx:"1",key:"1g98yp"}],["rect",{width:"7",height:"7",x:"14",y:"3",rx:"1",key:"6d4xhi"}],["rect",{width:"7",height:"7",x:"14",y:"14",rx:"1",key:"nxv5o0"}],["rect",{width:"7",height:"7",x:"3",y:"14",rx:"1",key:"1bb6yr"}]],m0=W("layout-grid",h0);const g0=[["rect",{width:"18",height:"7",x:"3",y:"3",rx:"1",key:"f1a2em"}],["rect",{width:"7",height:"7",x:"3",y:"14",rx:"1",key:"1bb6yr"}],["rect",{width:"7",height:"7",x:"14",y:"14",rx:"1",key:"nxv5o0"}]],Uh=W("layout-panel-top",g0);const v0=[["path",{d:"M9 17H7A5 5 0 0 1 7 7h2",key:"8i5ue5"}],["path",{d:"M15 7h2a5 5 0 1 1 0 10h-2",key:"1b9ql8"}],["line",{x1:"8",x2:"16",y1:"12",y2:"12",key:"1jonct"}]],p0=W("link-2",v0);const y0=[["circle",{cx:"12",cy:"16",r:"1",key:"1au0dj"}],["rect",{x:"3",y:"10",width:"18",height:"12",rx:"2",key:"6s8ecr"}],["path",{d:"M7 10V7a5 5 0 0 1 10 0v3",key:"1pqi11"}]],Oh=W("lock-keyhole",y0);const b0=[["path",{d:"m16 17 5-5-5-5",key:"1bji2h"}],["path",{d:"M21 12H9",key:"dn1m92"}],["path",{d:"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4",key:"1uf3rs"}]],j0=W("log-out",b0);const S0=[["path",{d:"m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7",key:"132q7q"}],["rect",{x:"2",y:"4",width:"20",height:"16",rx:"2",key:"izxlao"}]],ds=W("mail",S0);const x0=[["path",{d:"M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0",key:"1r0f0z"}],["circle",{cx:"12",cy:"10",r:"3",key:"ilqhr7"}]],Vn=W("map-pin",x0);const N0=[["path",{d:"M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719",key:"1sd12s"}]],wh=W("message-circle",N0);const A0=[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21",key:"1svkeh"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21",key:"vw1qmm"}]],_0=W("monitor",A0);const k0=[["path",{d:"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401",key:"kfwtm"}]],T0=W("moon",k0);const z0=[["path",{d:"m16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551",key:"1miecu"}]],D0=W("paperclip",z0);const M0=[["path",{d:"M13 21h8",key:"1jsn5i"}],["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}]],E0=W("pen-line",M0);const C0=[["path",{d:"M13.832 16.568a1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 6.392 6.384",key:"9njp5v"}]],U0=W("phone",C0);const O0=[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]],w0=W("plus",O0);const L0=[["path",{d:"M2 3h20",key:"91anmk"}],["path",{d:"M21 3v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V3",key:"2k9sn8"}],["path",{d:"m7 21 5-5 5 5",key:"bip4we"}]],R0=W("presentation",L0);const H0=[["path",{d:"M19.07 4.93A10 10 0 0 0 6.99 3.34",key:"z3du51"}],["path",{d:"M4 6h.01",key:"oypzma"}],["path",{d:"M2.29 9.62A10 10 0 1 0 21.31 8.35",key:"qzzz0"}],["path",{d:"M16.24 7.76A6 6 0 1 0 8.23 16.67",key:"1yjesh"}],["path",{d:"M12 18h.01",key:"mhygvu"}],["path",{d:"M17.99 11.66A6 6 0 0 1 15.77 16.67",key:"1u2y91"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}],["path",{d:"m13.41 10.59 5.66-5.66",key:"mhq4k0"}]],V0=W("radar",H0);const q0=[["path",{d:"M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5",key:"qeys4"}],["path",{d:"M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09",key:"u4xsad"}],["path",{d:"M9 12a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.4 22.4 0 0 1-4 2z",key:"676m9"}],["path",{d:"M9 12H4s.55-3.03 2-4c1.62-1.08 5 .05 5 .05",key:"92ym6u"}]],B0=W("rocket",q0);const Y0=[["circle",{cx:"6",cy:"19",r:"3",key:"1kj8tv"}],["path",{d:"M9 19h8.5a3.5 3.5 0 0 0 0-7h-11a3.5 3.5 0 0 1 0-7H15",key:"1d8sl"}],["circle",{cx:"18",cy:"5",r:"3",key:"gq8acd"}]],fh=W("route",Y0);const Q0=[["path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z",key:"1c8476"}],["path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7",key:"1ydtos"}],["path",{d:"M7 3v4a1 1 0 0 0 1 1h7",key:"t51u73"}]],G0=W("save",Q0);const J0=[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]],Xu=W("search",J0);const X0=[["path",{d:"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z",key:"1ffxy3"}],["path",{d:"m21.854 2.147-10.94 10.939",key:"12cjpa"}]],Z0=W("send",X0);const K0=[["path",{d:"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915",key:"1i5ecw"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]],Lh=W("settings",K0);const W0=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M8 14s1.5 2 4 2 4-2 4-2",key:"1y1vjs"}],["line",{x1:"9",x2:"9.01",y1:"9",y2:"9",key:"yxxnd0"}],["line",{x1:"15",x2:"15.01",y1:"9",y2:"9",key:"1p4y9e"}]],F0=W("smile",W0);const $0=[["path",{d:"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z",key:"1s2grr"}],["path",{d:"M20 2v4",key:"1rf3ol"}],["path",{d:"M22 4h-4",key:"gwowj6"}],["circle",{cx:"4",cy:"20",r:"2",key:"6kqj1y"}]],fs=W("sparkles",$0);const I0=[["path",{d:"M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7",key:"1m0v6g"}],["path",{d:"M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z",key:"ohrbg2"}]],Rh=W("square-pen",I0);const P0=[["path",{d:"M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z",key:"r04s7s"}]],ev=W("star",P0);const tv=[["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"m4.93 4.93 1.41 1.41",key:"149t6j"}],["path",{d:"m17.66 17.66 1.41 1.41",key:"ptbguv"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"m6.34 17.66-1.41 1.41",key:"1m8zz5"}],["path",{d:"m19.07 4.93-1.41 1.41",key:"1shlcs"}]],av=W("sun",tv);const lv=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["circle",{cx:"12",cy:"12",r:"6",key:"1vlfrh"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}]],nv=W("target",lv);const iv=[["circle",{cx:"12",cy:"8",r:"5",key:"1hypcn"}],["path",{d:"M20 21a8 8 0 0 0-16 0",key:"rfgkzh"}]],sv=W("user-round",iv);const cv=[["path",{d:"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2",key:"975kel"}],["circle",{cx:"12",cy:"7",r:"4",key:"17ys0d"}]],hh=W("user",cv);const uv=[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["path",{d:"M16 3.128a4 4 0 0 1 0 7.744",key:"16gr8j"}],["path",{d:"M22 21v-2a4 4 0 0 0-3-3.87",key:"kshegd"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}]],rv=W("users",uv);const ov=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],mh=W("x",ov);function Ul({icon:d,label:c,...u}){return s.jsxs("label",{className:"auth-field",children:[s.jsx("span",{children:c}),s.jsxs("div",{className:"auth-input-wrap",children:[s.jsx("span",{className:"auth-input-icon","aria-hidden":!0,children:d}),s.jsx("input",{...u})]})]})}function dv({email:d,loading:c,onBackToLogin:u,onChangeEmail:o,onSubmit:m}){return s.jsxs("div",{className:"auth-view view-enter",children:[s.jsxs("div",{className:"auth-head",children:[s.jsx("button",{className:"link-btn back-link",type:"button",onClick:u,children:"Tilbage"}),s.jsx("h1",{children:"Glemt kodeord?"}),s.jsx("p",{children:"Indtast din e-mail, sa sender vi instruktioner til at nulstille din kode."})]}),s.jsxs("form",{className:"auth-form",onSubmit:m,children:[s.jsx(Ul,{icon:s.jsx(ds,{size:16,strokeWidth:1.8}),label:"E-mail",type:"email",placeholder:"navn@eksempel.dk",value:d,onChange:y=>o(y.target.value),required:!0}),s.jsx("button",{className:"submit-btn",type:"submit",disabled:c,children:c?"Sender...":"Send nulstillingslink"})]})]})}function fv({email:d,loading:c,onChangeEmail:u,onChangePassword:o,onChangeRememberMe:m,onForgotPassword:y,onRegister:O,onSubmit:G,password:w,rememberMe:N}){return s.jsxs("div",{className:"auth-view view-enter",children:[s.jsxs("div",{className:"auth-head auth-head-center",children:[s.jsx("h1",{children:"Velkommen tilbage"}),s.jsx("p",{children:"Indtast dine oplysninger for at logge ind pa din konto."})]}),s.jsxs("form",{className:"auth-form",onSubmit:G,children:[s.jsx(Ul,{icon:s.jsx(ds,{size:16,strokeWidth:1.8}),label:"E-mail",type:"email",placeholder:"navn@eksempel.dk",value:d,onChange:V=>u(V.target.value),required:!0}),s.jsxs("label",{className:"auth-field",children:[s.jsxs("div",{className:"auth-field-row",children:[s.jsx("span",{children:"Adgangskode"}),s.jsx("button",{className:"link-btn",type:"button",onClick:y,children:"Glemt adgangskode?"})]}),s.jsxs("div",{className:"auth-input-wrap",children:[s.jsx("span",{className:"auth-input-icon","aria-hidden":!0,children:s.jsx(Oh,{size:16,strokeWidth:1.8})}),s.jsx("input",{type:"password",placeholder:"••••••••",value:w,onChange:V=>o(V.target.value),required:!0})]})]}),s.jsxs("label",{className:"check-row",children:[s.jsx("input",{type:"checkbox",checked:N,onChange:V=>m(V.target.checked)}),s.jsx("span",{children:"Husk mig i 30 dage"})]}),s.jsx("button",{className:"submit-btn",type:"submit",disabled:c,children:c?"Logger ind...":"Log ind"})]}),s.jsxs("p",{className:"auth-foot",children:["Har du ikke en konto?",s.jsx("button",{className:"link-btn",type:"button",onClick:O,children:"Opret bruger"})]})]})}function hv({email:d,firstName:c,lastName:u,loading:o,locationQuery:m,locationSuggestions:y,onBackToLogin:O,onChangeEmail:G,onChangeFirstName:w,onChangeLastName:N,onChangeLocationQuery:V,onChangePassword:z,onSelectLocation:q,onSubmit:Z,password:ae}){return s.jsxs("div",{className:"auth-view view-enter",children:[s.jsxs("div",{className:"auth-head auth-head-center",children:[s.jsx("h1",{children:"Opret konto"}),s.jsx("p",{children:"Start din karriere-rejse med os i dag."})]}),s.jsxs("form",{className:"auth-form",onSubmit:Z,children:[s.jsx(Ul,{icon:s.jsx(hh,{size:16,strokeWidth:1.8}),label:"Fornavn",type:"text",placeholder:"Lasse",value:c,onChange:Y=>w(Y.target.value),required:!0}),s.jsx(Ul,{icon:s.jsx(hh,{size:16,strokeWidth:1.8}),label:"Efternavn",type:"text",placeholder:"Hansen",value:u,onChange:Y=>N(Y.target.value),required:!0}),s.jsx(Ul,{icon:s.jsx(ds,{size:16,strokeWidth:1.8}),label:"E-mail",type:"email",placeholder:"navn@eksempel.dk",value:d,onChange:Y=>G(Y.target.value),required:!0}),s.jsx(Ul,{icon:s.jsx(Oh,{size:16,strokeWidth:1.8}),label:"Adgangskode",type:"password",placeholder:"Skab en staerk kode",value:ae,onChange:Y=>z(Y.target.value),required:!0,minLength:8}),s.jsxs("label",{className:"auth-field",children:[s.jsx("span",{children:"Lokation"}),s.jsxs("div",{className:"auth-input-wrap",children:[s.jsx("span",{className:"auth-input-icon","aria-hidden":!0,children:s.jsx(Vn,{size:16,strokeWidth:1.8})}),s.jsx("input",{type:"text",placeholder:"Soeg by eller adresse",value:m,onChange:Y=>V(Y.target.value),autoComplete:"off",required:!0})]}),y.length>0?s.jsx("div",{className:"location-suggestions",children:y.map(Y=>s.jsx("button",{type:"button",className:"location-suggestion-item",onClick:()=>{q(Y.placeId,Y.description)},children:Y.description},Y.placeId))}):null]}),s.jsx("button",{className:"submit-btn",type:"submit",disabled:o,children:o?"Opretter...":"Opret bruger"})]}),s.jsxs("p",{className:"auth-foot",children:["Har du allerede en konto?",s.jsx("button",{className:"link-btn",type:"button",onClick:O,children:"Log ind"})]})]})}class Ka{searchParams;constructor(c){this.searchParams=c?new URLSearchParams(c):new URLSearchParams}append(c,u){const o=new URLSearchParams(this.searchParams);return o.append(c,String(u)),new Ka(o)}set(c,u){const o=new URLSearchParams(this.searchParams);return o.set(c,String(u)),new Ka(o)}toString(){return this.searchParams.toString()}}function is(d,c){if(!c)return d;const u=new URL(d);if(c instanceof Ka){const o=c.toString();return o&&new URLSearchParams(o).forEach((y,O)=>u.searchParams.append(O,y)),u.toString()}return Object.entries(c).forEach(([o,m])=>{if(Array.isArray(m)){m.forEach(y=>u.searchParams.append(o,String(y)));return}u.searchParams.set(o,String(m))}),u.toString()}async function ss(d,c="json"){if(!d.ok){const u=await d.text();throw new Error(u||`HTTP ${d.status}`)}if(d.status!==204)return c==="blob"?await d.blob():await d.json()}function cs(d){const c=typeof window>"u"?null:window.localStorage.getItem("token");return{...c?{Authorization:`Bearer ${c}`}:{},...d??{}}}class mv{async get(c,u){const o=await fetch(is(c,u?.params),{method:"GET",headers:cs(u?.headers)});return ss(o,u?.responseType)}async post(c,u,o){const m=await fetch(is(c,o?.params),{method:"POST",headers:{"Content-Type":"application/json",...cs(o?.headers)},body:u===void 0?void 0:JSON.stringify(u)});return ss(m)}async put(c,u,o){const m=await fetch(is(c,o?.params),{method:"PUT",headers:{"Content-Type":"application/json",...cs(o?.headers)},body:u===void 0?void 0:JSON.stringify(u)});return ss(m)}async delete(c,u){const o=await fetch(is(c,u?.params),{method:"DELETE",headers:cs(u?.headers)});return ss(o)}}const He=new mv,k={backendApi:"https://api.arbejd.com/",backendApiV2:"https://api2.arbejd.com/api/"};class gv{http;constructor(c=He){this.http=c}login(c,u){let o=k.backendApi+"api/1.1.0/candidate/login",m={email:c,password:u};return this.http.post(o,m)}forgotPassword(c){let u=k.backendApi+"api/1.1.0/candidate/resetPassword/"+c.toLowerCase();return this.http.get(u)}}class Ll{constructor(c=He,u=wl){this.http=c,this.localStorageService=u}closeAccount(c){let u=k.backendApi+"api/1.1.0/candidate/"+c.toLowerCase();return this.http.delete(u)}accountRetention(c){let u=k.backendApi+"api/1.1.0/candidate/"+c+"/account-retention/";return this.http.get(u)}getCandidatesQualifications(){let c=k.backendApi+"api/1.1.0/candidate/skill/";return this.http.get(c)}getCandidatesCertifications(){let c=k.backendApi+"api/1.1.0/candidate/certificate/";return this.http.get(c)}getCandidatesLanguages(){let c=k.backendApi+"api/1.1.0/candidate/language/";return this.http.get(c)}getCandidatesDriverLicenses(){let c=k.backendApi+"api/1.1.0/candidate/driversLicense/";return this.http.get(c)}changePassword(c,u){let o=k.backendApi+"api/1.1.0/candidate/resetPassword",m={key:c,password:u};return this.http.post(o,m)}getCandidatesEducations(){let c=k.backendApiV2+"1.0.0/client/candidate_education";return this.http.get(c)}updateExperience(c,u){let o=k.backendApiV2+"1.0.0/client/candidate_experience/"+c.id,m={comments:c.comments,company_name:c.companyName,is_current:c.isCurrent,from_date:c.fromDate,to_date:c.toDate,language:u};return this.http.put(o,m)}createAccountV2(c){let u=k.backendApiV2+"1.0.0/client/candidate";return this.http.post(u,c)}updateCandidate(c,u){let o=k.backendApiV2+"1.0.0/client/candidate/v2/"+c.id,m={...c};c.birthday&&(c.birthday=new Date(c.birthday)),c.birthday instanceof Date&&(m.birthday=c.birthday.toISOString());let y={language:u,candidate:m};return this.http.put(o,y)}getCandidate(){let c=k.backendApiV2+"1.0.0/client/candidate";return this.http.get(c)}getCvSuggestion(){let c=k.backendApiV2+"1.0.0/client/suggestion";return this.http.get(c)}saveExperience(c,u){let o=k.backendApiV2+"1.0.0/client/candidate_experience",m={comments:c.comments,company_name:c.companyName,is_current:c.isCurrent,esco_id:c.occupation.id,from_date:c.fromDate,to_date:c.toDate,language:u};return this.http.post(o,m)}removeExperience(c){let u=k.backendApiV2+"1.0.0/client/candidate_experience/"+c;return this.http.delete(u)}getCandidatesExperiences(){let c=k.backendApiV2+"1.0.0/client/candidate_experience";return this.http.get(c)}getJobAgentFilters(){let c=k.backendApiV2+"1.0.0/client/job_agent_filter";return this.http.get(c)}updateJobAgentFilter(c){let u=k.backendApiV2+"1.0.0/client/job_agent_filter/"+c.id,o=c;return this.http.put(u,o)}removeJobAgentFilter(c){let u=k.backendApiV2+"1.0.0/client/job_agent_filter/"+c;return this.http.delete(u)}updateCandidateJobSeeker(c){let u=k.backendApiV2+"1.0.0/client/candidate/update_job_seeker/"+c.id;return this.http.put(u,c)}updateCvUploadProfileText(c,u,o){let m=k.backendApiV2+"1.0.0/client/candidate/update_cv_upload_profile/"+c,y={description:u,language:o};return this.http.put(m,y)}saveExperienceV2(c,u){let o=k.backendApiV2+"1.0.0/client/candidate_experience",m={comments:c.comments,company_name:c.companyName,is_current:c.isCurrent,esco_id:c.escoId,from_date:c.fromDate,to_date:c.toDate,language:u};return this.http.post(o,m)}updateProfileText(c){let u=k.backendApiV2+"1.0.0/client/candidate/update_profile_text";return this.http.put(u,c)}}function Ru(d,c){const u=d[c];return typeof u=="string"?u:null}class vv{authService;candidateService;constructor(c=new gv,u=new Ll){this.authService=c,this.candidateService=u}async login(c,u,o){const y=await this.authService.login(c,u)??{},O=Ru(y,"token");if(!O)return{ok:!1,message:"Login fejlede: token mangler i svaret fra serveren."};const G={id:Ru(y,"id")??"",token:O,email:Ru(y,"email")??c,runOutDate:"forever"};return await wl.setAuthData(G,o),{ok:!0,message:"Du er nu logget ind."}}async forgotPassword(c){return await this.authService.forgotPassword(c),{ok:!0,message:"Anmodning om nulstilling af kodeord er sendt."}}async register(c){const u=Number.parseInt(c.zip,10);if(Number.isNaN(u))return{ok:!1,message:"Postnummer skal være et tal."};const o={email:c.email,password:c.password,zip:u,zipName:c.zipName,awsUrl:"",latitude:0,longitude:0,firstName:c.firstName,lastName:c.lastName,subscribe:c.subscribe};return await this.candidateService.createAccountV2(o),{ok:!0,message:"Kontoen er oprettet."}}}class Hh{constructor(c=He){this.http=c}searchPlaces(c){const u=k.backendApiV2+"client/google_maps/1.0.0/get_places?query="+encodeURIComponent(c);return this.http.get(u)}getPlaceDetails(c){const u=k.backendApiV2+"client/google_maps/1.0.0/get_place_details?place_id="+encodeURIComponent(c);return this.http.get(u)}}function pv(d){const c=L.useMemo(()=>new vv,[]),u=L.useMemo(()=>new Hh,[]),[o,m]=L.useState(""),[y,O]=L.useState(!1),[G,w]=L.useState(""),[N,V]=L.useState(""),[z,q]=L.useState(""),[Z,ae]=L.useState(""),[Y,fe]=L.useState(""),[ge,je]=L.useState(""),[ie,re]=L.useState([]),[de,K]=L.useState(null),[M,ye]=L.useState(""),[Ae,ze]=L.useState(!1),[R,Q]=L.useState(null),[le,I]=L.useState("login");function oe(S){Q(null),I(S)}async function _(S){const C=S.trim();if(C.length<3){re([]);return}try{const te=((await u.searchPlaces(C)).predictions??[]).filter(ee=>typeof ee.place_id=="string"&&typeof ee.description=="string").map(ee=>({description:ee.description,placeId:ee.place_id}));re(te)}catch{re([])}}function H(S){const C=S.match(/\b(\d{4})\b/);if(!C)return null;const B=C[1],ee=S.slice(S.indexOf(B)+B.length).trim().split(",")[0]?.trim()||"";return ee?{cityName:ee,zip:B}:null}async function U(S,C){let B=C;try{const ee=await u.getPlaceDetails(S);typeof ee.result?.formatted_address=="string"&&ee.result.formatted_address.trim()&&(B=ee.result.formatted_address.trim())}catch{}const te=H(B)??H(C);if(je(B),re([]),!te){K(null);return}K({cityName:te.cityName,description:B,zip:te.zip})}async function $(S){S.preventDefault(),O(!0),Q(null);try{const C=await c.login(G.trim(),N,Ae);Q(C),C.ok&&d?.()}catch(C){const B=C instanceof Error?C.message:"Login mislykkedes.";Q({ok:!1,message:B})}finally{O(!1)}}async function ce(S){S.preventDefault(),O(!0),Q(null);try{if(!de){Q({ok:!1,message:"Vaelg en lokation fra listen (med postnummer)."});return}const C=await c.register({email:Z.trim(),firstName:z.trim(),lastName:Y.trim(),password:M,subscribe:!0,zip:de.zip,zipName:de.cityName});Q(C),C.ok&&I("login")}catch(C){const B=C instanceof Error?C.message:"Oprettelse mislykkedes.";Q({ok:!1,message:B})}finally{O(!1)}}async function h(S){S.preventDefault(),O(!0),Q(null);try{const C=await c.forgotPassword(o.trim());Q(C)}catch(C){const B=C instanceof Error?C.message:"Kunne ikke sende nulstillingslink.";Q({ok:!1,message:B})}finally{O(!1)}}return{forgotEmail:o,handleForgotSubmit:h,handleLoginSubmit:$,handleRegisterSubmit:ce,loading:y,loginEmail:G,loginPassword:N,registerFirstName:z,registerEmail:Z,registerLastName:Y,registerLocationQuery:ge,registerLocationSuggestions:ie,registerPassword:M,rememberMe:Ae,result:R,setForgotEmail:m,setLoginEmail:w,setLoginPassword:V,setRegisterEmail:ae,setRegisterFirstName:q,setRegisterLastName:fe,setRegisterLocationQuery:S=>{je(S),K(null),_(S)},setRegisterPassword:ye,setRememberMe:ze,selectRegisterLocation:U,switchView:oe,view:le}}function yv({onAuthenticated:d}){const{forgotEmail:c,handleForgotSubmit:u,handleLoginSubmit:o,handleRegisterSubmit:m,loading:y,loginEmail:O,loginPassword:G,registerFirstName:w,registerEmail:N,registerLastName:V,registerLocationQuery:z,registerLocationSuggestions:q,registerPassword:Z,rememberMe:ae,result:Y,setForgotEmail:fe,setLoginEmail:ge,setLoginPassword:je,setRegisterEmail:ie,setRegisterFirstName:re,setRegisterLastName:de,setRegisterLocationQuery:K,setRegisterPassword:M,setRememberMe:ye,selectRegisterLocation:Ae,switchView:ze,view:R}=pv(d);return s.jsxs("main",{className:"auth-page",children:[s.jsx("div",{className:"orb orb-1"}),s.jsx("div",{className:"orb orb-2"}),s.jsx("div",{className:"orb orb-3"}),s.jsxs("div",{className:"auth-logo-wrap",children:[s.jsx("div",{className:"auth-logo-dot",children:"A"}),s.jsx("span",{className:"auth-logo-text",children:"ARBEJD"})]}),s.jsxs("section",{className:"auth-card",children:[R==="login"?s.jsx(fv,{email:O,loading:y,onChangeEmail:ge,onChangePassword:je,onChangeRememberMe:ye,onForgotPassword:()=>ze("forgot"),onRegister:()=>ze("register"),onSubmit:o,password:G,rememberMe:ae}):null,R==="register"?s.jsx(hv,{email:N,firstName:w,lastName:V,loading:y,locationQuery:z,locationSuggestions:q,onBackToLogin:()=>ze("login"),onChangeEmail:ie,onChangeFirstName:re,onChangeLastName:de,onChangeLocationQuery:K,onChangePassword:M,onSelectLocation:Ae,onSubmit:m,password:Z}):null,R==="forgot"?s.jsx(dv,{email:c,loading:y,onBackToLogin:()=>ze("login"),onChangeEmail:fe,onSubmit:u}):null,Y?s.jsx("p",{className:Y.ok?"status success":"status error",children:Y.message}):null]},R)]})}class Vh{constructor(c=He){this.http=c}listEscoByParent(c){let u=k.backendApiV2+"1.0.0/client/esco";return c&&(u+="/"+c),this.http.get(u)}listAllEscos(){let c=k.backendApiV2+"1.0.0/client/esco";return this.http.get(c)}}class bv{constructor(c=He){this.http=c}addEscoToJobAgent(c){let u=k.backendApiV2+"1.0.0/client/job_agent_filter",o={esco_id:c};return this.http.post(u,o)}removeJobAgentFilter(c){let u=k.backendApiV2+"1.0.0/client/job_agent_filter/"+c;return this.http.delete(u)}}class Ku{constructor(c=He){this.http=c}getPaymentOverview(){let c=k.backendApiV2+"client/end_user_subscription/1.0.0/payment_overview";return this.http.get(c)}getSubscriptionProducts(){let c=k.backendApiV2+"client/end_user_subscription/1.0.0/get_products";return this.http.get(c)}deactivateAutoRenew(){let c=k.backendApiV2+"client/end_user_subscription/1.0.0/deactivate_auto_renew";return this.http.put(c,{})}activateAutoRenew(){let c=k.backendApiV2+"client/end_user_subscription/1.0.0/activate_auto_renew";return this.http.put(c,{})}redeemCode(c){let u=k.backendApiV2+"client/candidate_redeem_code/v1";return this.http.post(u,{code:c})}}class jv{constructor(c=new Ll,u=new Ku,o=new bv,m=new Vh){this.candidateService=c,this.subscriptionService=u,this.jobAgentService=o,this.escoService=m}async loadInitialData(){const[c,u,o,m]=await Promise.allSettled([this.subscriptionService.getPaymentOverview(),this.candidateService.getJobAgentFilters(),this.candidateService.getCvSuggestion(),this.escoService.listAllEscos()]);return{paymentOverview:c.status==="fulfilled"?c.value:null,jobAgentFilters:u.status==="fulfilled"?u.value:[],cvSuggestions:o.status==="fulfilled"?this.withImprovements(o.value):[],escos:m.status==="fulfilled"?m.value:[]}}async getCandidateProfile(){try{const c=await this.candidateService.getCandidate(),u=c.firstName?.trim()||c.name?.trim()||"Lasse",o=c.imageUrl||c.image||void 0;return{name:u,imageUrl:o}}catch{return{name:"Lasse"}}}async addEscoToFilter(c){await this.jobAgentService.addEscoToJobAgent(c)}async removeFilter(c){await this.jobAgentService.removeJobAgentFilter(c)}async setFilterVisibility(c,u){await this.candidateService.updateJobAgentFilter({...c,visible:u})}getEscoSuggestions(c,u,o){const m=c.trim().toLowerCase();if(!m)return[];const y=new Set(o.map(O=>O.escoId));return u.filter(O=>!y.has(O.id)).filter(O=>O.preferedLabelDa.toLowerCase().includes(m)).slice(0,10)}getSuggestionText(c){return c>=0&&c<50?"Et godt første skridt mod flere relevante job.":c>=50&&c<100?"Kan styrke dine chancer i ansøgningsbunken.":c>=100&&c<150?"Ofte efterspurgt og forbedrer dine jobmuligheder markant.":c>=150&&c<200?"Et klart plus som gør dig mere attraktiv for arbejdsgivere.":c>=200?"En afgørende faktor der åbner langt flere jobmuligheder.":"Forbedrer din profil til kommende jobmatch."}withImprovements(c){return c.map(u=>{const o=[],m=[{items:u.jobImprovementSuggestion.educations??[],type:"education"},{items:u.jobImprovementSuggestion.languages??[],type:"language"},{items:u.jobImprovementSuggestion.driversLicenses??[],type:"driversLicense"},{items:u.jobImprovementSuggestion.qualifications??[],type:"qualification"},{items:u.jobImprovementSuggestion.certificates??[],type:"certificate"}];for(const y of m)for(const O of y.items)o.push({...O,improvementType:y.type});return o.sort((y,O)=>O.jobChanceIncrease-y.jobChanceIncrease),{...u,improvements:o}})}}class Sv{constructor(c=He){this.http=c}saveJobFilter(c){let u=k.backendApiV2+"1.0.0/client/candidate_search_filter";return this.http.post(u,c)}getJobFilter(){let c=k.backendApiV2+"1.0.0/client/candidate_search_filter";return this.http.get(c)}resetJobFilter(){let c=k.backendApiV2+"1.0.0/client/candidate_search_filter/reset_job_filter";return this.http.put(c,{})}}class Wu{http;constructor(c=He){this.http=c}getSearchWords(){let c=k.backendApiV2+"1.0.0/client/candidate_search/list_search_words";return this.http.get(c)}getJobs(c,u,o){let m=k.backendApi+"api/1.1.0/jobs/all/"+u+"/"+o;return this.http.post(m,c)}getJobsV2(c,u,o,m){let y=k.backendApiV2+"1.0.0/client/candidate_search/v2/"+c+"/"+u+"/"+o,O=new Ka;return m.length>0&&m.forEach(G=>{O=O.append("terms",G)}),this.http.get(y,{params:O})}getSavedJobs(c,u){let o=k.backendApi+"api/1.1.0/candidate/jobs/saved";return this.http.get(o)}getSavedJobsV2(c,u){let o=k.backendApiV2+"1.0.0/client/job/bookmarked_jobs/"+c+"/"+u;return this.http.get(o)}getAppliedJobs(c,u){let o=k.backendApi+"api/1.1.0/applications/candidate/";return this.http.get(o)}getAppliedJobsV2(c,u){let o=k.backendApiV2+"1.0.0/client/job/applied_jobs/"+c+"/"+u;return this.http.get(o)}payWithStripe(c,u){const o=k.backendApiV2+"1.0.0/client/payment/create-payment-intent",m={paymentMethodId:c,amount:u};return this.http.post(o,m)}bookmarkJob(c){let u=k.backendApi+"api/1.1.0/candidate/jobs/"+c+"/jobnet/updateSavedStatus",o={saved:!0};return this.http.post(u,o)}unbookmarkJob(c){let u=k.backendApi+"api/1.1.0/candidate/jobs/"+c+"/jobnet/updateSavedStatus",o={saved:!1};return this.http.post(u,o)}bookmarkJobV2(c,u,o){let m=k.backendApiV2+"1.0.0/client/job/bookmark/"+c,y={job_type:o,save:u};return this.http.post(m,y)}getJobNetJobDetail(c){let u=k.backendApiV2+"1.0.0/client/job/detail/star/"+c;return this.http.get(u)}getJobDetail(c){let u=k.backendApi+"api/1.1.0/jobs/"+c;return this.http.get(u)}getOccupationCategorizations(){let c=k.backendApiV2+"1.0.0/client/ds_tree";return this.http.get(c)}getJobSummary(c){let u=k.backendApi+"api/1.1.0/jobs/"+c+"/summary";return this.http.get(u)}applyJob(c){let u=k.backendApi+"api/1.1.0/applications/job/"+c,o={jobPostingId:c};return this.http.post(u,o)}undoApplyJob(c){let u=k.backendApi+"api/1.1.0/applications/"+c;return this.http.delete(u)}toggleApplyJobnetjob(c,u){let o=k.backendApiV2+"1.0.0/client/job/detail/star/apply/"+c,m={apply:u};return this.http.put(o,m)}}const Hu={escoIds:[],workTypePermanent:!1,workTypePartTime:!1,workDistance:50,partTimeHours:null,distanceCenterName:"",latitude:null,longitude:null};function Xe(d){return typeof d=="string"?d:""}function Rn(d){return typeof d=="object"&&d!==null?d:null}function Vu(d,c){if(!d)return[];const u=d[c];return Array.isArray(u)?u:[]}function qu(d){if(Array.isArray(d))return d;const c=Rn(d);if(!c)return[];const u=Vu(c,"searchList");if(u.length>0)return u;const o=Rn(c.data),m=Vu(o,"searchList");if(m.length>0)return m;const y=Vu(c,"items");return y.length>0?y:[]}function gh(d,c){if(!d)return null;const u=d[c];return typeof u=="number"?u:null}function xv(d){return d.trim()}function Nv(d){if(!d)return[];const c=new Set,u=d.searchText?.trim();u&&u.length>0&&c.add(u);for(const o of d.desiredTitles??[]){const m=xv(o);m.length>0&&c.add(m)}return Array.from(c)}function Av(d,c){return{id:Xe(d.id),title:Xe(d.title),companyName:Xe(d.companyName),occupationName:Xe(d.occupationName),descriptionIntro:Xe(d.descriptionIntro),address:Xe(d.address),time:Xe(d.time),applicationDeadline:d.applicationDeadline instanceof Date?d.applicationDeadline.toISOString():Xe(String(d.applicationDeadline??"")),candidateDistance:typeof d.candidateDistance=="number"?d.candidateDistance:null,logoUrl:Xe(d.logoUrl),companyLogoImage:Xe(d.companyLogoImage),fromJobnet:!!d.fromJobnet,isSaved:!!d.saved,matchPercent:c}}function vh(d){return{id:Xe(d.id),title:Xe(d.title),companyName:Xe(d.companyName),occupationName:Xe(d.occupationName),descriptionIntro:Xe(d.descriptionIntro),address:Xe(d.address),time:Xe(d.time),applicationDeadline:d.applicationDeadline instanceof Date?d.applicationDeadline.toISOString():Xe(String(d.applicationDeadline??"")),candidateDistance:typeof d.candidateDistance=="number"?d.candidateDistance:null,logoUrl:Xe(d.logoUrl),companyLogoImage:Xe(d.companyLogoImage),isActive:typeof d.isActive=="boolean"?d.isActive:void 0,fromJobnet:!!d.fromJobnet,isSaved:!0}}class Fu{constructor(c=new Wu,u=new Sv,o=new Hh,m=new Ll){this.jobService=c,this.filterService=u,this.placesService=o,this.candidateService=m}async getCandidateProfile(){try{const c=await this.candidateService.getCandidate(),u=c.firstName?.trim()||c.name?.trim()||"Lasse",o=c.imageUrl||c.image||void 0;return{name:u,imageUrl:o}}catch{return{name:"Lasse"}}}async getOccupationOptions(){const c=await this.jobService.getOccupationCategorizations(),u=[];for(const o of c)for(const m of o.subAreas)for(const y of m.occupations)typeof y.id=="number"&&typeof y.name=="string"&&y.name.trim().length>0&&u.push({id:y.id,name:y.name});return u.sort((o,m)=>o.name.localeCompare(m.name,"da"))}async getJobSearchWords(){return(await this.jobService.getSearchWords()).filter(u=>typeof u=="string"&&u.trim().length>0)}async getSavedFilter(){try{const c=await this.filterService.getJobFilter(),u=c?.candidateSearchFilter;return u?{escoIds:c.escoIds??[],workTypePermanent:!!u.workTypePermanent,workTypePartTime:!!u.workTypePartTime,workDistance:u.workDistance??u.defaultDistance??50,partTimeHours:u.partTimeHours??null,distanceCenterName:u.distanceCenterName??u.defaultCenterName??"",latitude:u.latitude??null,longitude:u.longitude??null}:{...Hu}}catch{return{...Hu}}}async saveFilter(c){const u=c.workTypePartTime&&c.partTimeHours&&c.partTimeHours>0&&c.partTimeHours<=37?c.partTimeHours:null,o={escoIds:c.escoIds,candidateSearchFilter:{workTimeDay:!1,workTimeEvening:!1,workTimeNight:!1,workTimeWeekend:!1,workTypePermanent:c.workTypePermanent,workTypeFreelance:!1,workTypePartTime:c.workTypePartTime,workTypeSubstitute:!1,workTypeTemporary:!1,workDistance:c.workDistance,partTimeHours:u,distanceCenterName:c.distanceCenterName,latitude:c.latitude,longitude:c.longitude}};await this.filterService.saveJobFilter(o)}async resetFilter(){return await this.filterService.resetJobFilter(),{...Hu}}async searchPlaceSuggestions(c){const u=c.trim();return u.length<3?[]:((await this.placesService.searchPlaces(u)).predictions??[]).filter(m=>typeof m.place_id=="string"&&typeof m.description=="string").map(m=>({placeId:m.place_id,description:m.description}))}async getPlaceSelection(c){const o=(await this.placesService.getPlaceDetails(c)).result;return!o||typeof o.formatted_address!="string"?null:{description:o.formatted_address,latitude:typeof o.geometry?.location?.lat=="number"?o.geometry.location.lat:null,longitude:typeof o.geometry?.location?.lng=="number"?o.geometry.location.lng:null}}async getTabItems(c,u){if(c==="gemte"){const o=await this.jobService.getSavedJobsV2(0,100);return qu(o).map(y=>vh(y))}if(c==="sogte"){const o=await this.jobService.getAppliedJobsV2(0,100);return qu(o).map(y=>vh(y))}return this.getJobsFeedItems(u?[u]:void 0)}async applyFiltersAndGetJobs(c,u){await this.saveFilter(c);const o=Nv(u);return this.getJobsFeedItems(o)}async toggleBookmark(c,u){const o=c.fromJobnet?"star":"arbejd.com";await this.jobService.bookmarkJobV2(c.id,u,o)}async getJobsFeedItems(c){let o=10,m=0;const y=12,O=120,G=new Set,w=[];let N=[];const V=(c??[]).map(z=>z.trim()).filter(z=>z.length>0);if(V.length>0)N=V;else try{N=(await this.jobService.getSearchWords()).filter(q=>typeof q=="string"&&q.trim().length>0)}catch{N=[]}for(let z=0;z{const o=u.icon,m=u.key===d;return s.jsxs("button",{type:"button",className:m?"dash-nav-item active":"dash-nav-item",onClick:()=>c?.(u.key),children:[s.jsx("span",{className:u.accent?"dash-nav-icon accent":"dash-nav-icon",children:s.jsx(o,{size:19,strokeWidth:1.7})}),s.jsx("span",{className:"dash-nav-label",children:u.label}),u.badge?s.jsx("span",{className:"dash-nav-badge",children:u.badge}):null]},u.key)}),s.jsx("div",{className:"dash-nav-divider"}),kv.map(u=>{const o=u.icon,m=u.key===d;return s.jsxs("button",{type:"button",className:m?"dash-nav-item active":"dash-nav-item",onClick:()=>c?.(u.key),children:[s.jsx("span",{className:u.accent?"dash-nav-icon accent":"dash-nav-icon",children:s.jsx(o,{size:19,strokeWidth:1.7})}),s.jsx("span",{className:"dash-nav-label",children:u.label}),u.dot?s.jsx("span",{className:"dash-nav-dot"}):null]},u.key)})]}),s.jsxs("div",{className:"dash-sidebar-pro",children:[s.jsx("div",{className:"dash-sidebar-pro-glow"}),s.jsx(fs,{size:19,strokeWidth:1.8}),s.jsx("h4",{children:"Pro-medlemskab"}),s.jsx("p",{children:"Faa ubegrænsede simuleringer"})]})]})}function Hl({actions:d,imageUrl:c,name:u,onLogout:o,onToggleTheme:m,theme:y="light"}){return s.jsxs("header",{className:"dash-topbar",children:[m?s.jsxs("button",{type:"button",className:"dash-theme-btn",onClick:m,children:[y==="dark"?s.jsx(av,{size:15,strokeWidth:1.8}):s.jsx(T0,{size:15,strokeWidth:1.8}),s.jsx("span",{children:y==="dark"?"Light":"Dark"})]}):null,d?s.jsx("div",{className:"dash-topbar-actions",children:d}):null,s.jsxs("div",{className:"dash-profile-wrap",children:[s.jsxs("button",{className:"dash-profile-btn",type:"button",children:[c?s.jsx("img",{src:c,alt:u,className:"dash-profile-avatar"}):s.jsx("div",{className:"dash-profile-avatar dash-profile-avatar-fallback",children:u.slice(0,1).toUpperCase()}),s.jsx("span",{children:u}),s.jsx(Kg,{size:15,strokeWidth:1.8})]}),s.jsxs("div",{className:"dash-profile-menu",children:[s.jsxs("button",{type:"button",children:[s.jsx($g,{size:16,strokeWidth:1.8})," Profil"]}),s.jsxs("button",{type:"button",children:[s.jsx(Lh,{size:16,strokeWidth:1.8})," Indstillinger"]}),s.jsx("div",{className:"dash-profile-divider"}),s.jsxs("button",{type:"button",className:"danger",onClick:o,children:[s.jsx(j0,{size:16,strokeWidth:1.8})," Log ud"]})]})]})]})}const Tv={paymentOverview:null,jobAgentFilters:[],cvSuggestions:[],escos:[]};function zv(d){return d.trim().slice(0,1).toUpperCase()||"A"}function Dv(d){return Math.max(68,98-d*4)}function Mv(d,c){const u=c.trim().toLowerCase();return u?d.filter(o=>o.preferedLabelDa.toLowerCase().includes(u)).slice(0,8):[]}function Ev({onLogout:d,onNavigate:c,onOpenJobDetail:u,onToggleTheme:o,theme:m}){const y=L.useMemo(()=>new jv,[]),O=L.useMemo(()=>new Fu,[]),[G,w]=L.useState("Lasse"),[N,V]=L.useState(void 0),[z,q]=L.useState(Tv),[Z,ae]=L.useState([]),[Y,fe]=L.useState(!0),[ge,je]=L.useState(""),[ie,re]=L.useState(""),[de,K]=L.useState(""),[M,ye]=L.useState(""),[Ae,ze]=L.useState(""),[R,Q]=L.useState(25);L.useEffect(()=>{let U=!0;async function $(){fe(!0);const[ce,h,S]=await Promise.all([y.getCandidateProfile(),y.loadInitialData(),O.getTabItems("jobs")]);U&&(w(ce.name),V(ce.imageUrl),q(h),ae(S),fe(!1))}return $(),()=>{U=!1}},[y,O]);async function le(){const U=await y.loadInitialData();q(U)}async function I(){const U=ie.trim()||ge.trim()||de.trim(),$=y.getEscoSuggestions(U,z.escos,z.jobAgentFilters)[0]||Mv(z.escos,U)[0];$&&(await y.addEscoToFilter($.id),await le(),je(""),re(""),K(""),ye(""),ze(""),Q(25))}async function oe(U){await y.setFilterVisibility(U,!U.visible),await le()}const _=z.jobAgentFilters,H=(Z.length>0?Z:[]).slice(0,6);return s.jsxs("section",{className:`dash-root ${m==="dark"?"theme-dark":""}`,children:[s.jsx("div",{className:"dash-orb dash-orb-1"}),s.jsx("div",{className:"dash-orb dash-orb-2"}),s.jsx("div",{className:"dash-orb dash-orb-3"}),s.jsx(Rl,{active:"ai-agent",onNavigate:c}),s.jsxs("main",{className:"dash-main custom-scrollbar ai-agent-main",children:[s.jsx(Hl,{name:G,imageUrl:N,onLogout:d,theme:m,onToggleTheme:o}),s.jsxs("div",{className:"ai-head",children:[s.jsx("h1",{children:"AI-agenter"}),s.jsx("p",{children:"Saet din jobsogning pa autopilot. Lad AI overvage og matche dig med de perfekte jobs."})]}),s.jsxs("section",{className:"ai-create-card",children:[s.jsxs("div",{className:"ai-create-title",children:[s.jsx("div",{className:"ai-create-icon",children:s.jsx(Dh,{size:20,strokeWidth:1.8})}),s.jsx("h2",{children:"Opret ny AI-agent"})]}),s.jsxs("div",{className:"ai-form-grid",children:[s.jsxs("div",{className:"ai-field",children:[s.jsx("label",{children:"Agentens navn"}),s.jsx("input",{value:ge,onChange:U=>je(U.target.value),placeholder:"F.eks. Frontend Udvikler CPH"})]}),s.jsxs("div",{className:"ai-field",children:[s.jsx("label",{children:"Sogetekst / Nogleord"}),s.jsx("input",{value:ie,onChange:U=>re(U.target.value),placeholder:"F.eks. React, TypeScript, Tailwind"})]}),s.jsxs("div",{className:"ai-field",children:[s.jsx("label",{children:"Arbejdsomrade"}),s.jsxs("select",{value:de,onChange:U=>K(U.target.value),children:[s.jsx("option",{value:"",children:"Vaelg branche"}),s.jsx("option",{value:"IT & Udvikling",children:"IT & Udvikling"}),s.jsx("option",{value:"Design & UX",children:"Design & UX"}),s.jsx("option",{value:"Salg & Marketing",children:"Salg & Marketing"}),s.jsx("option",{value:"HR & Ledelse",children:"HR & Ledelse"})]})]}),s.jsxs("div",{className:"ai-field",children:[s.jsx("label",{children:"Arbejdstype"}),s.jsxs("select",{value:M,onChange:U=>ye(U.target.value),children:[s.jsx("option",{value:"",children:"Vaelg type"}),s.jsx("option",{value:"Fuldtid",children:"Fuldtid"}),s.jsx("option",{value:"Deltid",children:"Deltid"}),s.jsx("option",{value:"Freelance",children:"Freelance / Konsulent"}),s.jsx("option",{value:"Studiejob",children:"Studiejob"})]})]}),s.jsxs("div",{className:"ai-field",children:[s.jsx("label",{children:"Arbejdssted"}),s.jsxs("div",{className:"ai-location-wrap",children:[s.jsx(Vn,{size:16,strokeWidth:1.8}),s.jsx("input",{value:Ae,onChange:U=>ze(U.target.value),placeholder:"By eller postnummer"})]})]}),s.jsxs("div",{className:"ai-field ai-distance-field",children:[s.jsxs("div",{className:"ai-distance-head",children:[s.jsx("label",{children:"Maks. distance"}),s.jsxs("span",{children:[R," km"]})]}),s.jsx("input",{type:"range",min:0,max:100,value:R,onChange:U=>Q(Number(U.target.value))})]})]}),s.jsx("div",{className:"ai-create-actions",children:s.jsxs("button",{type:"button",onClick:()=>{I()},children:[s.jsx(G0,{size:16,strokeWidth:1.8})," Gem AI-agent"]})})]}),s.jsxs("section",{className:"ai-agents-section",children:[s.jsx("h3",{children:"Dine aktive agenter"}),s.jsxs("div",{className:"ai-agents-row custom-scrollbar",children:[_.length===0?s.jsx("p",{className:"dash-loading",children:"Ingen aktive agenter endnu."}):null,_.map((U,$)=>s.jsxs("article",{className:"ai-agent-chip-card",children:[s.jsxs("div",{className:"ai-agent-card-head",children:[s.jsxs("div",{className:"ai-agent-chip-left",children:[s.jsx("div",{className:`ai-agent-mini-icon ${$%2===0?"teal":"indigo"}`,children:$%2===0?s.jsx(_0,{size:16,strokeWidth:1.8}):s.jsx(Rh,{size:16,strokeWidth:1.8})}),s.jsxs("div",{children:[s.jsx("h4",{children:U.escoName}),s.jsx("p",{children:U.isCalculated?"Aktiv siden i går":"Aktiv"})]})]}),s.jsx("button",{type:"button",className:U.visible?"ai-toggle on":"ai-toggle",onClick:()=>{oe(U)},children:s.jsx("span",{})})]}),s.jsxs("div",{className:"ai-tags",children:[s.jsx("span",{children:U.escoName}),s.jsx("span",{children:Ae||"København"}),s.jsxs("span",{children:[R," km"]})]})]},U.id))]})]}),s.jsxs("section",{className:"ai-jobs-section",children:[s.jsxs("div",{className:"ai-jobs-head",children:[s.jsxs("h3",{children:[s.jsx(fs,{size:16,strokeWidth:1.8})," Anbefalede jobs til dig"]}),s.jsx("span",{children:"Opdateret for 5 min siden"})]}),s.jsxs("div",{className:"ai-jobs-grid",children:[Y?s.jsx("p",{className:"dash-loading",children:"Indlaeser anbefalinger..."}):null,!Y&&H.length===0?s.jsx("p",{className:"dash-loading",children:"Ingen jobanbefalinger fundet endnu."}):null,H.map((U,$)=>s.jsxs("article",{className:"ai-job-card",role:"button",tabIndex:0,onClick:()=>u(U.id,U.fromJobnet,"ai-agent"),onKeyDown:ce=>{(ce.key==="Enter"||ce.key===" ")&&(ce.preventDefault(),u(U.id,U.fromJobnet,"ai-agent"))},children:[s.jsx("div",{className:`ai-job-rail ${$%3===2?"indigo":"teal"}`}),s.jsxs("div",{className:"ai-job-top",children:[U.companyLogoImage||U.logoUrl?s.jsx("img",{src:U.companyLogoImage||U.logoUrl,alt:U.companyName,className:"ai-company-logo"}):s.jsx("div",{className:"ai-company-logo-fallback",children:zv(U.companyName)}),s.jsxs("div",{className:"ai-match-col",children:[s.jsxs("div",{className:"ai-match-pill",children:[s.jsx(nv,{size:13,strokeWidth:1.8})," ",Dv($),"% Match"]}),s.jsxs("small",{children:["Via: ",_[0]?.escoName||"AI-agent"]})]})]}),s.jsxs("div",{className:"ai-job-title-wrap",children:[s.jsx("h4",{children:U.title}),s.jsxs("p",{children:[U.companyName," • ",U.address||"Lokation"]})]}),s.jsxs("div",{className:"ai-job-tags",children:[s.jsx("span",{children:U.occupationName||"Frontend"}),s.jsx("span",{children:U.fromJobnet?"Jobnet":"Arbejd.com"}),s.jsx("span",{children:U.candidateDistance!=null?`${Math.round(U.candidateDistance)} km`:"Remote"})]}),s.jsxs("div",{className:"ai-job-bottom",children:[s.jsx("span",{children:"Slået op for nyligt"}),s.jsxs("button",{type:"button",onClick:ce=>{ce.stopPropagation(),u(U.id,U.fromJobnet,"ai-agent")},children:["Læs mere ",s.jsx(Ol,{size:14,strokeWidth:1.8})]})]})]},U.id))]})]})]})]})}class Cv{constructor(c=He){this.http=c}generateApplication(c,u,o,m){let y=k.backendApiV2+"1.0.0/client/ai_handler/create_my_application",O={isStar:c,jobId:u,language:o,userInput:m};return this.http.post(y,O)}listGeneratedJobApplications(c){let u=k.backendApiV2+"1.0.0/client/ai_handler/list_created_job_application/"+c;return this.http.get(u)}listPredefinedUserInput(){let c=k.backendApiV2+"1.0.0/client/ai_handler/list_predefined_user_input";return this.http.get(c)}getJobApplication(c){let u=k.backendApiV2+"1.0.0/client/ai_handler/"+c;return this.http.get(u)}updateMyCvDescriptions(c){let u=k.backendApiV2+"1.0.0/client/ai_handler/update_my_cv_descriptions",o={language:c};return this.http.post(u,o)}updateStatesOnMyCvDescription(c,u,o){let m=k.backendApiV2+"1.0.0/client/ai_handler/update_states_on_my_cv_descriptions/"+c,y={state:u,subState:o};return this.http.put(m,y)}getMyCvDescriptions(){let c=k.backendApiV2+"1.0.0/client/ai_handler/get_my_cv_descriptions";return this.http.get(c)}submitJobApplicationRating(c,u,o){let m=k.backendApiV2+"1.0.0/client/ai_handler/job_application_rating",y={ai_generated_job_application_id:c,rating:u,rating_text:o};return this.http.post(m,y)}startApplicationExamination(c){const u=k.backendApiV2+"1.0.0/client/ai_handler/create_application_examination",o={ai_generated_job_application_id:c};return this.http.post(u,o)}getApplicationExamination(c){const u=k.backendApiV2+"1.0.0/client/ai_handler/application_examination/"+encodeURIComponent(c);return this.http.get(u)}getApplicationExaminationByJobApplicationId(c){const u=k.backendApiV2+"1.0.0/client/ai_handler/application_examination_by_job_application/"+c;return this.http.get(u)}}class Uv{constructor(c=He){this.http=c}searchForCertification(c){let u=encodeURIComponent(c),o=k.backendApiV2+`1.0.0/client/certificate?search_text=${u}`;return this.http.get(o)}saveCertification(c){let u=k.backendApiV2+"1.0.0/client/candidate_certificate",o={qualification_id:c};return this.http.post(u,o)}updateCertification(c){let u=k.backendApiV2+"1.0.0/client/candidate_certificate/"+c.id,o=c;return this.http.put(u,o)}removeCertification(c){let u=k.backendApiV2+"1.0.0/client/candidate_certificate/"+c;return this.http.delete(u)}addUnknownCertificate(c){let u=k.backendApiV2+"1.0.0/client/certificate",o={certificate_name:c};return this.http.post(u,o)}}class Ov{constructor(c=He){this.http=c}sendMyCvToEmail(){let c=k.backendApi+"api/1.1.0/candidate/sendPdf",u={};return this.http.post(c,u)}getMyCv(){let c=k.backendApiV2+"1.0.0/client/candidate/pdf";return this.http.get(c,{responseType:"blob"})}getMyCvV2(c){let u=k.backendApiV2+"1.0.0/client/candidate/pdf_url?language="+c;return this.http.get(u)}generateCv(c){let u=k.backendApiV2+"1.0.0/client/candidate/generateCv",o={language:c};return this.http.post(u,o)}}class wv{constructor(c=He,u=wl){this.http=c,this.localStorageService=u}uploadCv(c,u){const o=k.backendApiV2+"1.0.0/client/cv_upload";return this.http.post(o,c,{headers:{Authorization:`Bearer ${u}`}})}getCvUploadData(){let c=k.backendApiV2+"1.0.0/client/cv_upload/get_upload_cv";return this.http.get(c)}setProfileTextToDone(c){let u=k.backendApiV2+"1.0.0/client/cv_upload/profile_text_is_done/"+c,o={};return this.http.put(u,o)}setExperienceToDone(c){let u=k.backendApiV2+"1.0.0/client/cv_upload/experience_is_done/"+c,o={};return this.http.put(u,o)}setEducationToDone(c){let u=k.backendApiV2+"1.0.0/client/cv_upload/education_is_done/"+c,o={};return this.http.put(u,o)}setQualificationToDone(c){let u=k.backendApiV2+"1.0.0/client/cv_upload/qualification_is_done/"+c,o={};return this.http.put(u,o)}setCertificateToDone(c){let u=k.backendApiV2+"1.0.0/client/cv_upload/certificate_is_done/"+c,o={};return this.http.put(u,o)}setLanguageToDone(c){let u=k.backendApiV2+"1.0.0/client/cv_upload/language_is_done/"+c,o={};return this.http.put(u,o)}setDriversLicenseToDone(c){let u=k.backendApiV2+"1.0.0/client/cv_upload/drivers_license_is_done/"+c,o={};return this.http.put(u,o)}setCvUploadToDone(c){let u=k.backendApiV2+"1.0.0/client/cv_upload/cv_is_done/"+c,o={};return this.http.put(u,o)}}class Lv{constructor(c=He){this.http=c}getAllDriverLicenses(){let c=k.backendApi+"api/1.1.0/driversLicenses";return this.http.get(c)}updateDriverLicense(c,u){let o=k.backendApi+"api/1.1.0/candidate/driversLicense/"+c,m={};return this.http.put(o,m)}removeLanguage(c){let u=k.backendApiV2+"1.0.0/client/candidate_drivers_license/"+c;return this.http.delete(u)}saveDriverLicense(c,u){let o=k.backendApiV2+"1.0.0/client/candidate_drivers_license",m={level:u,drivers_license_id:c.id};return this.http.post(o,m)}saveDriverLicenseV2(c,u){let o=k.backendApiV2+"1.0.0/client/candidate_drivers_license",m={level:c,drivers_license_id:u};return this.http.post(o,m)}}class Rv{constructor(c=He){this.http=c}searchForEducations(c){let u=k.backendApi+"api/1.1.0/educations/search/"+c;return this.http.get(u)}searchForSchools(c){let u=k.backendApi+"api/1.1.0/institutions/search/"+c;return this.http.get(u)}saveEducation(c,u){let o=k.backendApiV2+"1.0.0/client/candidate_education",m={comments:c.comments,education_disced_15:c.education.disced15,from_date:c.fromDate,to_date:c.toDate,institution_number:c.institution?.instNumber,is_current:c.isCurrent,language:u};return this.http.post(o,m)}removeEducation(c){let u=k.backendApiV2+"1.0.0/client/candidate_education/"+c;return this.http.delete(u)}updateEducation(c,u,o){let m=k.backendApiV2+"1.0.0/client/candidate_education/"+c,y={comments:u.comments,from_date:u.fromDate,to_date:u.toDate,is_current:u.isCurrent,language:o};return this.http.put(m,y)}getEducationOccupationSuggestions(c){let u=k.backendApi+"api/1.1.0/educations/suggestions/occupation/"+c;return this.http.get(u)}saveUnknownEducation(c){let u=k.backendApiV2+"1.0.0/client/education/save_unknown_education",o={education_name:c};return this.http.post(u,o)}saveEducationV2(c,u){let o=k.backendApiV2+"1.0.0/client/candidate_education",m={comments:c.comments,education_disced_15:c.education_disced_15,from_date:c.from_date,to_date:c.to_date,institution_number:c.institution_number,is_current:c.is_current,language:u};return this.http.post(o,m)}}class Hv{constructor(c=He){this.http=c}getAllLanguages(){let c=k.backendApi+"api/1.1.0/languages";return this.http.get(c)}saveLanguage(c,u){let o=k.backendApiV2+"1.0.0/client/candidate_language",m={language_id:u.id,level:c};return this.http.post(o,m)}updateLanguage(c,u,o){let m=k.backendApiV2+"1.0.0/client/candidate_language/"+c,y={level:u};return this.http.put(m,y)}removeLanguage(c){let u=k.backendApiV2+"1.0.0/client/candidate_language/"+c;return this.http.delete(u)}saveLanguageV2(c,u){let o=k.backendApiV2+"1.0.0/client/candidate_language",m={language_id:u,level:c};return this.http.post(o,m)}}class Vv{constructor(c=He){this.http=c}searchForQualification(c){let u=k.backendApi+"api/1.1.0/qualifications/type/3/search/"+c;return this.http.get(u)}updateQualification(c,u){let o=k.backendApiV2+"1.0.0/client/candidate_qualification/"+c,m={level:u};return this.http.put(o,m)}saveQualification(c){let u=k.backendApiV2+"1.0.0/client/candidate_qualification",o={level:c.level,qualification_id:c.qualification.id};return this.http.post(u,o)}removeQualification(c){let u=k.backendApiV2+"1.0.0/client/candidate_qualification/"+c;return this.http.delete(u)}getQualificationsOccupationSuggestions(c,u){let o=k.backendApi+"api/1.1.0/qualifications/type/"+u+"/suggestions/occupation/"+c;return this.http.get(o)}addUnknownQualification(c){let u=k.backendApi+"api/1.1.0/qualifications/type/3/fromCandidate",o={name:c,type:3};return this.http.post(u,o)}saveQualificationV2(c){let u=k.backendApiV2+"1.0.0/client/candidate_qualification",o={level:c.level,qualification_id:c.qualification_id};return this.http.post(u,o)}}class qv{constructor(c=He){this.http=c}addUnknownOccupation(c){let u=k.backendApi+"api/1.1.0/occupations/fromCandidate",o={name:c};return this.http.post(u,o)}}class Bv{constructor(c=He){this.http=c}saveUnknownInstitution(c){let u=k.backendApiV2+"1.0.0/client/institution/save_unknown_institution",o={institution_name:c};return this.http.post(u,o)}}class Yv{constructor(c=new Ll,u=new Ov,o=new wv,m=new Ku,y=new Cv,O=new Rv,G=new Vv,w=new Uv,N=new Hv,V=new Lv,z=new Vh,q=new qv,Z=new Bv,ae=wl){this.candidateService=c,this.cvService=u,this.cvUploadService=o,this.subscriptionService=m,this.aiHandlerService=y,this.educationService=O,this.qualificationService=G,this.certificationService=w,this.languageService=N,this.driverLicenseService=V,this.escoService=z,this.occupationService=q,this.institutionService=Z,this.localStorageService=ae}escosCache=null;async getSnapshot(){const[c,u,o,m,y,O,G,w,N,V]=await Promise.allSettled([this.candidateService.getCandidate(),this.candidateService.getCandidatesExperiences(),this.candidateService.getCandidatesEducations(),this.candidateService.getCandidatesQualifications(),this.candidateService.getCandidatesCertifications(),this.candidateService.getCandidatesLanguages(),this.candidateService.getCandidatesDriverLicenses(),this.subscriptionService.getPaymentOverview(),this.cvUploadService.getCvUploadData(),this.aiHandlerService.getMyCvDescriptions()]);return{candidate:c.status==="fulfilled"?c.value:null,experiences:u.status==="fulfilled"?u.value:[],educations:o.status==="fulfilled"?o.value:[],skills:m.status==="fulfilled"?m.value:[],certifications:y.status==="fulfilled"?y.value:[],languages:O.status==="fulfilled"?O.value:[],driverLicenses:G.status==="fulfilled"?G.value:[],paymentOverview:w.status==="fulfilled"?w.value:null,cvUploadData:N.status==="fulfilled"?N.value:null,aiGeneratedCVDescription:V.status==="fulfilled"&&V.value?.id?V.value:null}}async setActiveSeeker(c,u,o){const m={...c,isActive:u};return this.candidateService.updateCandidate(m,o)}async updateCandidate(c,u){return this.candidateService.updateCandidate(c,u)}async generateCv(c){await this.cvService.generateCv(c)}async getCvDownloadUrl(c){return(await this.cvService.getMyCvV2(c)).url}async uploadCv(c,u){const o=await this.localStorageService.getAuthToken();if(!o)throw new Error("No auth token found.");await this.cvUploadService.uploadCv({base_64_cv_file:c,cv_file_type:u},o)}async optimizeCv(c){await this.aiHandlerService.updateMyCvDescriptions(c)}async updateExperience(c,u){await this.candidateService.updateExperience(c,u)}async updateEducation(c,u){const o={comments:c.comments,education:c.education,institution:c.institution,fromDate:new Date(c.fromDate),toDate:new Date(c.toDate),isCurrent:c.isCurrent};await this.educationService.updateEducation(c.id,o,u)}async updateCertification(c){await this.certificationService.updateCertification(c)}async updateLanguage(c){const u={id:c.language.id,isO639:c.language.isO639,name:c.language.name,ownName:c.language.ownName,priority:c.language.priority};await this.languageService.updateLanguage(c.id,c.level,u)}async removeExperience(c){await this.candidateService.removeExperience(c)}async removeEducation(c){await this.educationService.removeEducation(c)}async removeQualification(c){await this.qualificationService.removeQualification(c)}async removeCertification(c){await this.certificationService.removeCertification(c)}async removeLanguage(c){await this.languageService.removeLanguage(c)}async removeDriverLicense(c){await this.driverLicenseService.removeLanguage(c)}async getEscoSuggestions(c,u=25){this.escosCache||(this.escosCache=await this.escoService.listAllEscos());const o=c.trim().toLowerCase();return o?this.escosCache.filter(m=>m.preferedLabelDa.toLowerCase().includes(o)).slice(0,u):this.escosCache.slice(0,u)}async getLanguageOptions(){return(await this.languageService.getAllLanguages()).allLanguages??[]}async getDriverLicenseOptions(){return this.driverLicenseService.getAllDriverLicenses()}async createExperience(c,u){let o=c.escoId??null;if(!o&&c.occupationName?.trim()&&(o=(await this.occupationService.addUnknownOccupation(c.occupationName.trim())).id),!o)throw new Error("Vælg eller opret en stilling først.");await this.candidateService.saveExperienceV2({companyName:c.companyName,comments:c.comments,fromDate:c.fromDate,toDate:c.toDate,isCurrent:c.isCurrent,escoId:o},u)}async createEducation(c,u){let o=c.educationDisced15??null;if(!o&&c.educationName?.trim()&&(o=(await this.educationService.saveUnknownEducation(c.educationName)).disced15),!o)throw new Error("Vælg eller opret en uddannelse først.");let m=c.institutionNumber;!m&&c.institutionName?.trim()&&(m=(await this.institutionService.saveUnknownInstitution(c.institutionName.trim())).inst_number),await this.educationService.saveEducationV2({comments:c.comments,institution_number:m,from_date:c.fromDate,to_date:c.toDate,education_disced_15:o,is_current:c.isCurrent},u)}async createCertification(c){let u=c.certificateId??null;if(!u&&c.certificateName?.trim()&&(u=(await this.certificationService.addUnknownCertificate(c.certificateName.trim())).certificate_id),!u)throw new Error("Vælg eller opret et certifikat først.");await this.certificationService.saveCertification(u)}async createLanguage(c,u){await this.languageService.saveLanguageV2(u,c)}async getQualificationSuggestions(c){const u=c.trim();return u?this.qualificationService.searchForQualification(u):[]}async createQualification(c){let u=c.qualificationId?.trim()||"";if(!u&&c.qualificationName?.trim()&&(u=(await this.qualificationService.addUnknownQualification(c.qualificationName.trim())).id),!u)throw new Error("Vælg eller opret en kvalifikation først.");await this.qualificationService.saveQualificationV2({qualification_id:u,level:c.level})}async getEducationSuggestions(c){const u=c.trim();return u?this.educationService.searchForEducations(u):[]}async getSchoolSuggestions(c){const u=c.trim();return u?this.educationService.searchForSchools(u):[]}async getCertificationSuggestions(c){const u=c.trim();return u?this.certificationService.searchForCertification(u):[]}async createDriverLicense(c,u){await this.driverLicenseService.saveDriverLicenseV2(u,c)}}const Qv={candidate:null,experiences:[],educations:[],skills:[],certifications:[],languages:[],driverLicenses:[],paymentOverview:null,cvUploadData:null,aiGeneratedCVDescription:null},Gv=[{id:"e1",title:"Senior Frontend-udvikler",company:"Lunar",from:"2020-08-01",to:null,description:"Udvikling og vedligeholdelse af core-features i bankens app samt performance-optimering."},{id:"e2",title:"Web-udvikler",company:"Trustpilot",from:"2017-01-01",to:"2020-07-01",description:"Udviklede dashboards og analysevaerktojer i taet samarbejde med UX-teamet."}],Jv=[{id:"ed1",title:"Cand.it i Webudvikling",school:"IT-Universitetet i Kobenhavn",from:"2013-08-01",to:"2015-06-01",description:"Specialisering i webteknologier, databaser og brugercentreret design."},{id:"ed2",title:"Datamatiker",school:"KEA - Kobenhavns Erhvervsakademi",from:"2010-08-01",to:"2013-06-01",description:"Softwarekonstruktion, systemarkitektur og programmering i Java og C#."}];function rs(d){if(!d)return null;const c=d instanceof Date?d:new Date(d);return Number.isNaN(c.getTime())?null:c}function ph(d){const c=rs(d);return c?new Intl.DateTimeFormat("da-DK",{month:"short",year:"numeric"}).format(c):"Ukendt"}function yh(d,c,u){const o=ph(d),m=u?"Nu":ph(c);return`${o} - ${m}`}function Xv(d){const c=rs(d);return c?new Intl.DateTimeFormat("da-DK",{day:"2-digit",month:"long",year:"numeric"}).format(c):"Ikke angivet"}function bh(d){return[...d].sort((c,u)=>{const o=rs(c.fromDate)?.getTime()??0;return(rs(u.fromDate)?.getTime()??0)-o})}function Zv(d){return d.qualification?.name||"Kvalifikation"}function Kv(d){return d.qualification?.name||d.levelName||"Certificering"}function Wv(d){return d.driversLicense?.name||d.levelName||"Korekort"}function Fv(d){return d.levelName||"Niveau ukendt"}function $v({onLogout:d,onNavigate:c,onToggleTheme:u,theme:o}){const m=L.useMemo(()=>new Yv,[]),[y,O]=L.useState("standard"),[G,w]=L.useState(Qv),[N,V]=L.useState(!0);L.useEffect(()=>{let M=!0;return m.getSnapshot().then(ye=>{M&&w(ye)}).finally(()=>{M&&V(!1)}),()=>{M=!1}},[m]);const z=G.candidate,q=z?.firstName?.trim()||z?.name?.trim()||"Lasse",Z=z?.firstName||"Lasse",ae=z?.lastName||"Hansen",Y=z?.imageUrl||z?.image||"",fe=G.experiences.length>0?bh(G.experiences):[],ge=G.educations.length>0?bh(G.educations):[],je=G.skills,ie=G.languages,re=G.certifications,de=G.driverLicenses,K=ie.length>0?ie.map(M=>({id:M.id,name:M.language?.name||"Sprog",level:Fv(M)})):[{id:"da",name:"Dansk",level:"Modersmal"},{id:"en",name:"Engelsk",level:"Flydende"}];return s.jsxs("section",{className:`dash-root ${o==="dark"?"theme-dark":""}`,children:[s.jsx("div",{className:"dash-orb dash-orb-1"}),s.jsx("div",{className:"dash-orb dash-orb-2"}),s.jsx("div",{className:"dash-orb dash-orb-3"}),s.jsx(Rl,{active:"cv",onNavigate:c}),s.jsxs("main",{className:`dash-main custom-scrollbar cv-page ${y==="reference"?"cv-design-reference":""}`,children:[s.jsx(Hl,{name:q,imageUrl:Y||void 0,onLogout:d,theme:o,onToggleTheme:u,actions:s.jsxs("button",{type:"button",className:"cv-design-toggle",onClick:()=>O(M=>M==="standard"?"reference":"standard"),children:[y==="reference"?s.jsx(Ch,{size:16,strokeWidth:1.8}):s.jsx(Uh,{size:16,strokeWidth:1.8}),s.jsx("span",{children:y==="reference"?"Skift til standard design":"Skift til reference design"})]})}),s.jsxs("div",{className:"cv-head",children:[s.jsxs("div",{children:[s.jsx("h1",{children:"Dit CV"}),s.jsx("p",{children:"Handter dine faglige oplysninger, erfaringer og uddannelser."})]}),s.jsxs("button",{type:"button",className:"cv-edit-btn",children:[s.jsx(E0,{size:16,strokeWidth:1.8})," Rediger CV"]})]}),N?s.jsx("p",{className:"dash-loading",children:"Indlaeser CV..."}):null,s.jsxs("div",{className:"cv-layout",children:[s.jsxs("div",{className:"cv-left",children:[s.jsxs("article",{className:"cv-card",children:[s.jsx("div",{className:"cv-avatar-wrap",children:Y?s.jsx("img",{src:Y,alt:q,className:"cv-avatar"}):s.jsx("div",{className:"cv-avatar cv-avatar-fallback",children:q.slice(0,1).toUpperCase()})}),s.jsxs("div",{className:"cv-section-head",children:[s.jsx(sv,{size:18,strokeWidth:1.8}),s.jsx("h2",{children:"Personlige oplysninger"})]}),s.jsxs("div",{className:"cv-personal-list",children:[s.jsxs("div",{children:[s.jsx("span",{children:"Fornavn"}),s.jsx("strong",{children:Z})]}),s.jsxs("div",{children:[s.jsx("span",{children:"Efternavn"}),s.jsx("strong",{children:ae})]}),s.jsxs("div",{children:[s.jsx("span",{children:"E-mail"}),s.jsx("strong",{children:z?.email||"lasse@eksempel.dk"})]}),s.jsxs("div",{children:[s.jsx("span",{children:"Telefon"}),s.jsx("strong",{children:z?.phoneNumber||"+45 12 34 56 78"})]}),s.jsxs("div",{children:[s.jsx("span",{children:"Fodselsdato"}),s.jsx("strong",{children:Xv(z?.birthday)})]}),s.jsxs("div",{children:[s.jsx("span",{children:"Kon"}),s.jsx("strong",{children:z?.gender||"Mand"})]})]})]}),s.jsxs("article",{className:"cv-card",children:[s.jsxs("div",{className:"cv-section-head",children:[s.jsx(ev,{size:18,strokeWidth:1.8}),s.jsx("h2",{children:"Kvalifikationer"})]}),s.jsx("div",{className:"cv-chip-wrap",children:(je.length>0?je.map(Zv):["HTML & CSS","Tailwind CSS","JavaScript","React","UI/UX Design"]).slice(0,12).map(M=>s.jsx("span",{className:"cv-chip",children:M},M))})]}),s.jsxs("article",{className:"cv-card",children:[s.jsxs("div",{className:"cv-section-head",children:[s.jsx(Eh,{size:18,strokeWidth:1.8}),s.jsx("h2",{children:"Sprog"})]}),s.jsx("div",{className:"cv-language-list",children:K.map(M=>s.jsxs("div",{children:[s.jsx("strong",{children:M.name}),s.jsx("span",{children:M.level})]},M.id))})]}),s.jsxs("div",{className:"cv-mini-grid",children:[s.jsxs("article",{className:"cv-card",children:[s.jsxs("div",{className:"cv-section-head",children:[s.jsx(wg,{size:18,strokeWidth:1.8}),s.jsx("h2",{children:"Certificeringer"})]}),s.jsxs("ul",{className:"cv-list",children:[(re.length>0?re:[]).slice(0,4).map(M=>s.jsxs("li",{children:[s.jsx(za,{size:15,strokeWidth:1.8})," ",Kv(M)]},M.id)),re.length===0?s.jsxs(s.Fragment,{children:[s.jsxs("li",{children:[s.jsx(za,{size:15,strokeWidth:1.8})," AWS Certified Developer"]}),s.jsxs("li",{children:[s.jsx(za,{size:15,strokeWidth:1.8})," Certificeret Scrum Master"]})]}):null]})]}),s.jsxs("article",{className:"cv-card",children:[s.jsxs("div",{className:"cv-section-head",children:[s.jsx(Gg,{size:18,strokeWidth:1.8}),s.jsx("h2",{children:"Korekort"})]}),s.jsx("div",{className:"cv-chip-wrap",children:(de.length>0?de.map(Wv):["B (Almindelig bil)","A (Motorcykel)"]).map(M=>s.jsx("span",{className:"cv-chip",children:M},M))})]})]})]}),s.jsxs("div",{className:"cv-right",children:[s.jsxs("section",{children:[s.jsxs("div",{className:"cv-timeline-head",children:[s.jsx("div",{className:"cv-timeline-icon",children:s.jsx(Mh,{size:19,strokeWidth:1.8})}),s.jsx("h2",{children:"Erhvervserfaring"})]}),s.jsx("div",{className:"cv-timeline",children:(fe.length>0?fe:Gv).map((M,ye)=>{const Ae="occupation"in M?M.occupation?.name||"Stilling":M.title,ze="companyName"in M?M.companyName:M.company,R="comments"in M?M.comments:M.description,Q="fromDate"in M?M.fromDate:M.from,le="toDate"in M?M.toDate:M.to,I="isCurrent"in M?!!M.isCurrent:!1;return s.jsxs("article",{className:"cv-timeline-item",children:[s.jsx("div",{className:"cv-timeline-dot",children:s.jsx(Gu,{size:15,strokeWidth:1.8})}),s.jsxs("div",{className:"cv-timeline-card",children:[s.jsx("h3",{children:Ae}),s.jsxs("div",{className:"cv-meta",children:[s.jsx("strong",{children:ze}),s.jsx("span",{children:yh(Q,le,I)})]}),s.jsx("p",{children:R||"Ingen beskrivelse."})]})]},"id"in M?String(M.id):`exp-${ye}`)})})]}),s.jsx("div",{className:"cv-divider"}),s.jsxs("section",{children:[s.jsxs("div",{className:"cv-timeline-head",children:[s.jsx("div",{className:"cv-timeline-icon",children:s.jsx(u0,{size:19,strokeWidth:1.8})}),s.jsx("h2",{children:"Uddannelse"})]}),s.jsx("div",{className:"cv-timeline",children:(ge.length>0?ge:Jv).map((M,ye)=>{const Ae="education"in M?M.education?.name||"Uddannelse":M.title,ze="institution"in M?M.institution?.name||"Institution":M.school,R="comments"in M?M.comments:M.description,Q="fromDate"in M?M.fromDate:M.from,le="toDate"in M?M.toDate:M.to,I="isCurrent"in M?!!M.isCurrent:!1;return s.jsxs("article",{className:"cv-timeline-item",children:[s.jsx("div",{className:"cv-timeline-dot",children:s.jsx(Gu,{size:15,strokeWidth:1.8})}),s.jsxs("div",{className:"cv-timeline-card",children:[s.jsx("h3",{children:Ae}),s.jsxs("div",{className:"cv-meta",children:[s.jsx("strong",{children:ze}),s.jsx("span",{children:yh(Q,le,I)})]}),s.jsx("p",{children:R||"Ingen beskrivelse."})]})]},"id"in M?String(M.id):`edu-${ye}`)})})]})]})]})]})]})}class Iv{constructor(c=He){this.http=c}getNotificationSetting(){const c=k.backendApiV2+"2.0.0/client/notification/settings";return this.http.get(c)}createNotificationSetting(c){const u=k.backendApiV2+"2.0.0/client/notification/settings";return this.http.post(u,c)}updateNotificationSetting(c,u){const o=k.backendApiV2+"2.0.0/client/notification/settings/"+c;return this.http.put(o,u)}deleteNotificationSetting(c){const u=k.backendApiV2+"2.0.0/client/notification/settings/"+c;return this.http.delete(u)}getNewNotificationCount(){let c=k.backendApiV2+"1.0.0/client/notification/unseen_notifications";return this.http.get(c)}getNotifications(c,u){let o=k.backendApiV2+"1.0.0/client/notification/"+c+"/"+u;return this.http.get(o)}notificationSeenByUser(c){let u=k.backendApiV2+"1.0.0/client/notification/seen_by_user/"+c,o={};return this.http.put(u,o)}}class Pv{constructor(c=He,u=wl){this.http=c,this.localStorage=u}listSimulationPersonalities(){let c=k.backendApiV2+"client/simulation/1.0.0/list_simulation_personalities",u=new Ka().set("language","da");return this.http.get(c,{params:u})}getInterviewEvaluation(c){const u=k.backendApiV2+`client/simulation/1.0.0/interview_evaluation/${c}`;return this.http.get(u)}listInterviews(c=20,u=0){const o=k.backendApiV2+"client/job_simulator/1.0.0/list_interviews",m=new Ka().set("limit",c.toString()).set("offset",u.toString());return this.http.get(o,{params:m})}submitEvaluationRating(c,u,o){const m=k.backendApiV2+"client/simulation/1.0.0/evaluation_rating",y={interview_id:c,rating:u,rating_text:o};return this.http.post(m,y)}submitInterviewRating(c,u,o){const m=k.backendApiV2+"client/simulation/1.0.0/interview_rating",y={interview_id:c,rating:u,rating_text:o};return this.http.post(m,y)}}class ep{constructor(c=He){this.http=c}chatMessageThreads=[];getChatMessages(){let c=k.backendApi+"api/1.1.0/chatMessages/forCandidate/";return this.http.get(c)}sendMessage(c){let u=k.backendApi+"api/1.1.0/chatMessages/"+c.threadId+"/fromCandidate";return this.http.post(u,c)}markThreadRead(c){let u=k.backendApi+"api/1.1.0/chatMessages/markRead/"+c;return this.http.get(u)}}class tp{constructor(c=He){this.http=c}getUnreadMessages(){let c=k.backendApi+"api/1.1.0/chatMessages/getUnreadCount";return this.http.get(c)}}function us(d){if(!d)return 0;const u=(d instanceof Date?d:new Date(d)).getTime();return Number.isNaN(u)?0:u}function Bu(d,c){const u=d?.timeSent?new Date(d.timeSent):new Date,o=d?.seen?new Date(d.seen):void 0;return{id:d?.id,threadId:d?.threadId??c,timeSent:u,fromCandidate:!!d?.fromCandidate,text:d?.text??"",seen:o}}class qh{constructor(c=new ep,u=new tp,o=new Ll){this.chatMessagesService=c,this.messageService=u,this.candidateService=o}async getCandidateProfile(){try{const c=await this.candidateService.getCandidate(),u=c.firstName?.trim()||c.name?.trim()||"Lasse",o=c.imageUrl||c.image||void 0;return{name:u,imageUrl:o}}catch{return{name:"Lasse"}}}async getThreads(){return(await this.chatMessagesService.getChatMessages()??[]).map(u=>{const o=(u.allMessages??[]).map(y=>Bu(y,u.id));o.sort((y,O)=>us(y.timeSent)-us(O.timeSent));const m=u.latestMessage?Bu(u.latestMessage,u.id):o[o.length-1]??Bu(void 0,u.id);return{...u,allMessages:o,latestMessage:m}}).sort((u,o)=>us(o.latestMessage?.timeSent)-us(u.latestMessage?.timeSent))}async getUnreadCount(){const c=await this.messageService.getUnreadMessages();return Number(c?.unreadCount??0)}async sendMessage(c,u){const o={threadId:c,text:u.trim(),fromCandidate:!0,timeSent:new Date};return this.chatMessagesService.sendMessage(o)}async markThreadReadByMessageId(c){c&&await this.chatMessagesService.markThreadRead(c)}}function qn(d){return typeof d=="object"&&d!==null?d:null}function Et(d){return typeof d=="string"?d:""}function ap(d){return typeof d=="number"?d:null}function lp(d){const c=qn(d);if(!c)return null;const o=qn(c.jobPosting)??c,m=Et(o.id);return m?{id:m,title:Et(o.title),companyName:Et(o.companyName),address:Et(o.address),applicationDeadline:Et(o.applicationDeadline),candidateDistance:ap(o.candidateDistance),fromJobnet:!!o.fromJobnet,logoUrl:Et(o.logoUrl),companyLogoImage:Et(o.companyLogoImage)}:null}function np(d){const c=qn(d);return(Array.isArray(c?.interviews)?c.interviews:[]).map(o=>{const m=qn(o);if(!m)return null;const y=Et(m.id);return y?{id:y,jobName:Et(m.job_name)||"Interview",companyName:Et(m.company_name)||null,interviewDate:Et(m.interview_date)||null,recommendation:Et(m.recommendation)||null,isCompleted:!!m.is_completed}:null}).filter(o=>!!o).sort((o,m)=>{const y=o.interviewDate?new Date(o.interviewDate).getTime():0;return(m.interviewDate?new Date(m.interviewDate).getTime():0)-y}).slice(0,5)}function ip(d){const c=qn(d);return c?Array.isArray(c.searchList)?c.searchList:[]:[]}class sp{constructor(c=new Ll,u=new Iv,o=new Wu,m=new Ku,y=new Pv,O=new qh){this.candidateService=c,this.notificationService=u,this.jobService=o,this.subscriptionService=m,this.simulationService=y,this.messagesViewModel=O}async loadInitialData(){const[c,u,o,m,y,O]=await Promise.allSettled([this.candidateService.getCandidate(),this.notificationService.getNotifications(0,5),this.messagesViewModel.getThreads(),this.loadBestJobs(),this.subscriptionService.getPaymentOverview(),this.simulationService.listInterviews(5,0)]);return{candidate:c.status==="fulfilled"?c.value:null,notifications:u.status==="fulfilled"?u.value.slice(0,5):[],messages:o.status==="fulfilled"?o.value.slice(0,5):[],bestJobs:m.status==="fulfilled"?m.value:[],subscription:y.status==="fulfilled"?y.value:null,evaluations:O.status==="fulfilled"?np(O.value):[]}}async loadBestJobs(){const c=await this.jobService.getJobsV2(10,0,5,[]);return ip(c).map(o=>lp(o)).filter(o=>!!o).slice(0,5)}}const cp={bestJobs:[],candidate:null,evaluations:[],messages:[],notifications:[],subscription:null};function jh(d){return d.trim().slice(0,1).toUpperCase()||"A"}function up({onLogout:d,onNavigate:c,onOpenJobDetail:u,onToggleTheme:o,theme:m}){const y=L.useMemo(()=>new sp,[]),[O,G]=L.useState(cp),[w,N]=L.useState(!0);L.useEffect(()=>{let q=!0;return y.loadInitialData().then(Z=>{q&&G(Z)}).finally(()=>{q&&N(!1)}),()=>{q=!1}},[y]);const V=O.candidate?.firstName?.trim()||O.candidate?.name?.trim()||"Lasse",z=O.candidate?.imageUrl||O.candidate?.image||"";return s.jsxs("section",{className:`dash-root ${m==="dark"?"theme-dark":""}`,children:[s.jsx("div",{className:"dash-orb dash-orb-1"}),s.jsx("div",{className:"dash-orb dash-orb-2"}),s.jsx("div",{className:"dash-orb dash-orb-3"}),s.jsx(Rl,{active:"dashboard",onNavigate:c}),s.jsxs("main",{className:"dash-main custom-scrollbar",children:[s.jsx(Hl,{name:V,imageUrl:z||void 0,onLogout:d,theme:m,onToggleTheme:o}),s.jsxs("div",{className:"dash-welcome",children:[s.jsxs("h1",{children:["Velkommen tilbage ",V," ",s.jsx("span",{children:"👋"})]}),s.jsx("p",{children:"Her er, hvad der sker med din jobsøgning i dag."})]}),w?s.jsx("p",{className:"dash-loading",children:"Indlaeser dashboard..."}):null,s.jsxs("div",{className:"dash-grid",children:[s.jsxs("div",{className:"dash-grid-main",children:[s.jsxs("article",{className:"dash-card",children:[s.jsx("div",{className:"dash-card-head",children:s.jsx("h2",{children:"Anbefalet til dig"})}),s.jsx("div",{className:"dash-job-list",children:(O.bestJobs.length>0?O.bestJobs:[{id:"d1",title:"Senior Frontend-udvikler",companyName:"Lunar",address:"Kobenhavn, DK",applicationDeadline:"",candidateDistance:null,fromJobnet:!1,logoUrl:"",companyLogoImage:""},{id:"d2",title:"React-udvikler",companyName:"Pleo",address:"Remote",applicationDeadline:"",candidateDistance:null,fromJobnet:!1,logoUrl:"",companyLogoImage:""}]).slice(0,5).map(q=>s.jsxs("div",{className:"dash-job-item",role:"button",tabIndex:0,onClick:()=>u(q.id,!!q.fromJobnet,"dashboard"),onKeyDown:Z=>{(Z.key==="Enter"||Z.key===" ")&&(Z.preventDefault(),u(q.id,!!q.fromJobnet,"dashboard"))},children:[s.jsxs("div",{className:"dash-job-left",children:[s.jsx("div",{className:"dash-company-chip",children:jh(q.companyName)}),s.jsxs("div",{children:[s.jsx("h4",{children:q.title}),s.jsxs("p",{children:[q.companyName," • ",q.address||"Lokation ikke angivet"]})]})]}),s.jsx("button",{type:"button",className:"dash-job-arrow-btn","aria-label":"Se job",onClick:Z=>{Z.stopPropagation(),u(q.id,!!q.fromJobnet,"dashboard")},children:s.jsx(Ol,{size:16,strokeWidth:1.8})})]},q.id))})]}),s.jsxs("div",{className:"dash-split-grid",children:[s.jsxs("article",{className:"dash-card",children:[s.jsx("h3",{children:"Seneste beskeder"}),s.jsxs("div",{className:"dash-message-list",children:[(O.messages.length>0?O.messages:[]).slice(0,5).map(q=>s.jsxs("div",{className:"dash-message-item",children:[s.jsx("div",{className:"dash-avatar",children:jh(q.companyName||"A")}),s.jsxs("div",{children:[s.jsx("h4",{children:q.companyName||"Samtale"}),s.jsx("p",{children:q.latestMessage?.text||"Ingen besked endnu"})]})]},q.id)),O.messages.length===0?s.jsx("p",{className:"dash-muted",children:"Ingen beskeder endnu."}):null]})]}),s.jsxs("article",{className:"dash-card",children:[s.jsxs("div",{className:"dash-card-head dash-card-head-inline",children:[s.jsx("h3",{children:"Seneste simuleringer"}),s.jsx("button",{type:"button",className:"dash-icon-btn",children:s.jsx(w0,{size:16,strokeWidth:1.8})})]}),s.jsxs("div",{className:"dash-sim-list",children:[s.jsxs("div",{className:"dash-sim-item",children:[s.jsxs("div",{className:"dash-sim-left",children:[s.jsx("span",{className:"dash-sim-icon teal",children:s.jsx(dh,{size:16,strokeWidth:1.8})}),s.jsxs("div",{children:[s.jsx("h4",{children:"Teknisk samtale"}),s.jsx("p",{children:"Frontend-fokus"})]})]}),s.jsxs("div",{className:"dash-sim-right",children:[s.jsx("strong",{children:"92/100"}),s.jsx("div",{className:"dash-progress",children:s.jsx("span",{style:{width:"92%"}})})]})]}),s.jsxs("div",{className:"dash-sim-item",children:[s.jsxs("div",{className:"dash-sim-left",children:[s.jsx("span",{className:"dash-sim-icon purple",children:s.jsx(rv,{size:16,strokeWidth:1.8})}),s.jsxs("div",{children:[s.jsx("h4",{children:"Kulturelt match"}),s.jsx("p",{children:"Lunar Bank"})]})]}),s.jsxs("div",{className:"dash-sim-right",children:[s.jsx("strong",{children:"88/100"}),s.jsx("div",{className:"dash-progress",children:s.jsx("span",{style:{width:"88%"}})})]})]}),s.jsxs("div",{className:"dash-sim-item",children:[s.jsxs("div",{className:"dash-sim-left",children:[s.jsx("span",{className:"dash-sim-icon amber",children:s.jsx(R0,{size:16,strokeWidth:1.8})}),s.jsxs("div",{children:[s.jsx("h4",{children:"Systemdesign"}),s.jsx("p",{children:"Arkitektur"})]})]}),s.jsxs("div",{className:"dash-sim-right",children:[s.jsx("strong",{className:"warn",children:"65/100"}),s.jsx("div",{className:"dash-progress",children:s.jsx("span",{className:"warn",style:{width:"65%"}})})]})]}),s.jsxs("div",{className:"dash-sim-item",children:[s.jsxs("div",{className:"dash-sim-left",children:[s.jsx("span",{className:"dash-sim-icon blue",children:s.jsx(dh,{size:16,strokeWidth:1.8})}),s.jsxs("div",{children:[s.jsx("h4",{children:"Live-kodning"}),s.jsx("p",{children:"React.js"})]})]}),s.jsxs("div",{className:"dash-sim-right",children:[s.jsx("strong",{children:"95/100"}),s.jsx("div",{className:"dash-progress",children:s.jsx("span",{style:{width:"95%"}})})]})]}),s.jsxs("div",{className:"dash-sim-item",children:[s.jsxs("div",{className:"dash-sim-left",children:[s.jsx("span",{className:"dash-sim-icon gray",children:s.jsx(wh,{size:16,strokeWidth:1.8})}),s.jsxs("div",{children:[s.jsx("h4",{children:"HR-screening"}),s.jsx("p",{children:"Generelt"})]})]}),s.jsxs("div",{className:"dash-sim-right",children:[s.jsx("strong",{className:"na",children:"N/A"}),s.jsx("div",{className:"dash-progress"})]})]})]})]})]})]}),s.jsxs("div",{className:"dash-grid-side",children:[s.jsxs("article",{className:"dash-card dash-ai-card dash-ai-card-group",children:[s.jsx("div",{className:"dash-ai-peel"}),s.jsxs("div",{className:"dash-ai-content",children:[s.jsxs("div",{className:"dash-ai-head",children:[s.jsx(fs,{size:22,strokeWidth:1.8}),s.jsx("h3",{children:"AI-indsigter til dit CV"})]}),s.jsx("p",{children:"Vi analyserede dit seneste CV op imod dine målroller."}),s.jsxs("ul",{className:"dash-ai-list",children:[s.jsxs("li",{className:"dash-ai-item",children:[s.jsx("span",{className:"dash-ai-item-icon",children:s.jsx(Rg,{size:13,strokeWidth:2})}),s.jsxs("div",{children:[s.jsx("strong",{children:"Kvantificer dine resultater"}),s.jsx("small",{children:'Tilføj tal til din rolle hos TechCorp (f.eks. \\"Forbedrede loadhastighed med 40%\\").'})]})]}),s.jsxs("li",{className:"dash-ai-item",children:[s.jsx("span",{className:"dash-ai-item-icon",children:s.jsx(Ug,{size:13,strokeWidth:2})}),s.jsxs("div",{children:[s.jsx("strong",{children:"Omorganiser dine færdigheder"}),s.jsx("small",{children:"Flyt React & TypeScript til toppen baseret på aktive Jobagenter."})]})]}),s.jsxs("li",{className:"dash-ai-item",children:[s.jsx("span",{className:"dash-ai-item-icon",children:s.jsx(a0,{size:13,strokeWidth:2})}),s.jsxs("div",{children:[s.jsx("strong",{children:"Tilføj manglende nøgleord"}),s.jsx("small",{children:'Inkluder \\"Tailwind CSS\\" for at matche 85% af dine anbefalede jobs.'})]})]}),s.jsxs("li",{className:"dash-ai-item dash-ai-xl-only",children:[s.jsx("span",{className:"dash-ai-item-icon",children:s.jsx(Rh,{size:13,strokeWidth:2})}),s.jsxs("div",{children:[s.jsx("strong",{children:"Omskriv dit resumé"}),s.jsx("small",{children:"Gør din målsætning mere handlingsorienteret."})]})]}),s.jsxs("li",{className:"dash-ai-item dash-ai-xl-only",children:[s.jsx("span",{className:"dash-ai-item-icon",children:s.jsx(p0,{size:13,strokeWidth:2})}),s.jsxs("div",{children:[s.jsx("strong",{children:"Opdater porteføljelink"}),s.jsx("small",{children:"Dit GitHub-link gav en 404-fejl i vores test."})]})]})]}),s.jsx("button",{type:"button",children:"Anvend alle ændringer"})]})]}),s.jsxs("article",{className:"dash-card",children:[s.jsxs("div",{className:"dash-card-head dash-card-head-inline",children:[s.jsx("h3",{children:"Aktive Jobagenter"}),s.jsx("button",{type:"button",className:"dash-icon-btn",children:s.jsx(Lh,{size:16,strokeWidth:1.8})})]}),s.jsxs("div",{className:"dash-agent-list",children:[s.jsxs("div",{className:"dash-agent-item",children:[s.jsxs("div",{children:[s.jsx("span",{children:"Frontend-udvikler"}),s.jsxs("small",{children:[s.jsx(Vn,{size:13,strokeWidth:1.8})," Kobenhavn"]})]}),s.jsxs("label",{className:"dash-switch",children:[s.jsx("input",{type:"checkbox",defaultChecked:!0}),s.jsx("span",{})]})]}),s.jsxs("div",{className:"dash-agent-item",children:[s.jsxs("div",{children:[s.jsx("span",{children:"React-udvikler"}),s.jsxs("small",{children:[s.jsx(Ju,{size:13,strokeWidth:1.8})," Remote (EU)"]})]}),s.jsxs("label",{className:"dash-switch",children:[s.jsx("input",{type:"checkbox",defaultChecked:!0}),s.jsx("span",{})]})]}),s.jsxs("div",{className:"dash-agent-item muted",children:[s.jsxs("div",{children:[s.jsx("span",{children:"UI/UX-designer"}),s.jsxs("small",{children:[s.jsx(Vn,{size:13,strokeWidth:1.8})," Aarhus"]})]}),s.jsxs("label",{className:"dash-switch",children:[s.jsx("input",{type:"checkbox"}),s.jsx("span",{})]})]})]}),s.jsx("button",{type:"button",className:"dash-outline-btn",children:"Opret ny agent"})]})]})]})]})]})}function Hn(d){return d instanceof Date?d.toISOString():typeof d=="string"?d:""}function Sh(d){const c=[d.road,d.houseNum,d.zip,d.zipName].filter(u=>typeof u=="string"&&u.trim().length>0).join(" ");return{id:d.id,title:d.title??"Job",companyName:d.hiringCompanyName??"Ukendt virksomhed",occupationName:d.occupation?.name??"",address:c||d.zipName||"Ukendt adresse",description:d.description??"",applicationDeadline:Hn(d.applicationDeadline),websiteUrl:d.applicationUrl||d.hiringCompanyUrl||"",logoUrl:d.logoUrl||"",fromJobnet:!0,isSaved:!1,isApplied:!!d.applied,isFullTime:typeof d.isFullTime=="boolean"?d.isFullTime:null,workTimes:Array.isArray(d.workTimes)?d.workTimes:[],contactName:d.contactName??"",hiringCompanyName:d.hiringCompanyName??"",datePosted:Hn(d.datePosted),employmentDate:Hn(d.employmentDate),startAsSoonAsPossible:typeof d.startAsSoonAsPossible=="boolean"?d.startAsSoonAsPossible:null,numberOfPositions:typeof d.numberOfPositions=="number"?d.numberOfPositions:null}}function xh(d,c){return{id:d,title:c.title??"Job",companyName:c.companyName??"Ukendt virksomhed",occupationName:c.position??"",address:"",description:[c.descriptionIntro,c.descriptionPosition,c.descriptionOffer].filter(u=>typeof u=="string"&&u.trim().length>0).join(` - -`),applicationDeadline:Hn(c.applicationDeadline),websiteUrl:c.website??"",logoUrl:"",fromJobnet:!1,isSaved:!1,isApplied:!!c.appliedJob,isFullTime:null,workTimes:Array.isArray(c.workTimes)?c.workTimes:[],contactName:"",hiringCompanyName:c.companyName??"",datePosted:"",employmentDate:Hn(c.fromDate),startAsSoonAsPossible:null,numberOfPositions:typeof c.numberOfPositions=="number"?c.numberOfPositions:null}}class rp{constructor(c=new Wu){this.jobService=c}async getDetail(c,u){if(u)try{const o=await this.jobService.getJobNetJobDetail(c);return Sh(o)}catch{const o=await this.jobService.getJobDetail(c);return xh(c,o)}try{const o=await this.jobService.getJobDetail(c);return xh(c,o)}catch{const o=await this.jobService.getJobNetJobDetail(c);return Sh(o)}}async toggleBookmark(c,u,o){const m=u?"star":"arbejd.com";await this.jobService.bookmarkJobV2(c,o,m)}async markAsApplied(c,u){if(u){await this.jobService.toggleApplyJobnetjob(c,!0);return}await this.jobService.applyJob(c)}}function op(d){return d.trim().slice(0,1).toUpperCase()||"A"}function Yu(d){if(!d)return"Ikke angivet";const c=new Date(d);return Number.isNaN(c.getTime())?d:new Intl.DateTimeFormat("da-DK",{day:"2-digit",month:"short",year:"numeric"}).format(c)}function dp(d){if(!d.trim())return"";if(typeof window>"u")return d;const u=new DOMParser().parseFromString(d,"text/html");u.querySelectorAll("script, style, iframe, object, embed, link, meta").forEach(o=>o.remove());for(const o of Array.from(u.body.querySelectorAll("*")))for(const m of Array.from(o.attributes)){const y=m.name.toLowerCase(),G=m.value.trim().toLowerCase();if(y.startsWith("on")){o.removeAttribute(m.name);continue}if((y==="href"||y==="src")&&G.startsWith("javascript:")){o.removeAttribute(m.name);continue}(y==="style"||y==="srcdoc")&&o.removeAttribute(m.name)}return u.body.innerHTML}function fp(d){return d.isFullTime===!0?"Fuldtid":d.isFullTime===!1?"Deltid":d.workTimes.length>0?"Fleksibel arbejdstid":"Ikke oplyst"}function hp({fromJobnet:d,jobId:c,onBack:u,onLogout:o,onNavigate:m,onToggleTheme:y,theme:O}){const G=L.useMemo(()=>new rp,[]),w=L.useMemo(()=>new Fu,[]),[N,V]=L.useState({name:"Lasse"}),[z,q]=L.useState(null),[Z,ae]=L.useState(!0),[Y,fe]=L.useState(""),[ge,je]=L.useState(!1),[ie,re]=L.useState(!1),[de,K]=L.useState(!1),[M,ye]=L.useState(!1);L.useEffect(()=>{let Q=!0;async function le(){ae(!0),fe("");const[I,oe]=await Promise.allSettled([w.getCandidateProfile(),G.getDetail(c,d)]);Q&&(I.status==="fulfilled"&&V(I.value),oe.status==="fulfilled"?(q(oe.value),je(!!oe.value.isSaved),re(!!oe.value.isApplied)):(q(null),fe("Kunne ikke hente jobdetaljer. Proev igen.")),ae(!1))}return le(),()=>{Q=!1}},[G,d,c,w]);async function Ae(){if(!(!z||de)){K(!0);try{await G.toggleBookmark(z.id,z.fromJobnet,!ge),je(Q=>!Q)}finally{K(!1)}}}async function ze(){if(!(!z||ie||M)){ye(!0);try{await G.markAsApplied(z.id,z.fromJobnet),re(!0)}finally{ye(!1)}}}const R=L.useMemo(()=>dp(z?.description??""),[z?.description]);return s.jsxs("section",{className:`dash-root ${O==="dark"?"theme-dark":""}`,children:[s.jsx("div",{className:"dash-orb dash-orb-1"}),s.jsx("div",{className:"dash-orb dash-orb-2"}),s.jsx("div",{className:"dash-orb dash-orb-3"}),s.jsx(Rl,{active:"jobs",onNavigate:m}),s.jsxs("main",{className:"dash-main custom-scrollbar",children:[s.jsx(Hl,{name:N.name,imageUrl:N.imageUrl,onLogout:o,theme:O,onToggleTheme:y}),s.jsx("div",{className:"job-detail-back-row",children:s.jsxs("button",{type:"button",className:"job-detail-back-btn",onClick:u,children:[s.jsx(Mg,{size:15,strokeWidth:1.8}),s.jsx("span",{children:"Tilbage til jobs"})]})}),Z?s.jsx("p",{className:"dash-loading",children:"Indlaeser jobdetaljer..."}):null,!Z&&Y?s.jsx("p",{className:"dash-loading",children:Y}):null,!Z&&z?s.jsxs(s.Fragment,{children:[s.jsxs("div",{className:"job-detail-header",children:[s.jsx("div",{className:"job-detail-logo-wrap",children:z.logoUrl?s.jsx("img",{src:z.logoUrl,alt:z.companyName,className:"job-detail-logo-image"}):s.jsx("div",{className:"job-detail-logo-fallback",children:op(z.companyName)})}),s.jsxs("div",{className:"job-detail-heading",children:[s.jsx("h1",{children:z.title||"Jobdetaljer"}),s.jsxs("div",{className:"job-detail-meta",children:[s.jsxs("span",{children:[s.jsx(Qu,{size:14,strokeWidth:1.8})," ",z.companyName||"Virksomhed"]}),s.jsxs("span",{children:[s.jsx(Vn,{size:14,strokeWidth:1.8})," ",z.address||"Lokation ikke angivet"]}),s.jsxs("span",{children:[s.jsx(Pg,{size:14,strokeWidth:1.8})," ",fp(z)]})]})]})]}),s.jsxs("div",{className:"job-detail-grid",children:[s.jsxs("section",{className:"job-detail-main-card dash-card",children:[s.jsxs("div",{className:"job-detail-section",children:[s.jsx("h2",{children:"Om rollen"}),R?s.jsx("div",{className:"job-detail-rich-html",dangerouslySetInnerHTML:{__html:R}}):s.jsx("p",{children:"Ingen jobbeskrivelse er tilgaengelig endnu."})]}),s.jsxs("div",{className:"job-detail-section",children:[s.jsx("h3",{children:"Jobinformation"}),s.jsxs("div",{className:"job-detail-info-grid",children:[s.jsxs("div",{children:[s.jsx("span",{children:"Ansøgningsfrist"}),s.jsx("strong",{children:Yu(z.applicationDeadline)})]}),s.jsxs("div",{children:[s.jsx("span",{children:"Opslået"}),s.jsx("strong",{children:Yu(z.datePosted)})]}),s.jsxs("div",{children:[s.jsx("span",{children:"Startdato"}),s.jsx("strong",{children:Yu(z.employmentDate)})]}),s.jsxs("div",{children:[s.jsx("span",{children:"Stillinger"}),s.jsx("strong",{children:z.numberOfPositions??"Ikke angivet"})]}),s.jsxs("div",{children:[s.jsx("span",{children:"Kontaktperson"}),s.jsx("strong",{children:z.contactName||"Ikke angivet"})]}),s.jsxs("div",{children:[s.jsx("span",{children:"Kilde"}),s.jsx("strong",{children:z.fromJobnet?"Jobnet":"Arbejd.com"})]})]})]})]}),s.jsxs("aside",{className:"job-detail-side-col",children:[s.jsxs("article",{className:"dash-card job-detail-actions-card",children:[s.jsx("h2",{children:"Handlinger"}),s.jsxs("button",{type:"button",className:"job-detail-action-primary",children:[s.jsxs("span",{children:[s.jsx(fs,{size:16,strokeWidth:1.8})," Generer ansøgning"]}),s.jsx(Ol,{size:14,strokeWidth:1.8})]}),s.jsxs("button",{type:"button",className:"job-detail-action-secondary",children:[s.jsxs("span",{children:[s.jsx(B0,{size:16,strokeWidth:1.8})," Simuler jobsamtale"]}),s.jsx(Ol,{size:14,strokeWidth:1.8})]}),s.jsx("div",{className:"job-detail-action-divider"}),s.jsxs("button",{type:"button",className:"job-detail-text-action",onClick:()=>{Ae()},disabled:de,children:[s.jsx(Vg,{size:16,strokeWidth:1.8}),ge?"Fjern fra gemte jobs":"Gem job"]}),s.jsxs("button",{type:"button",className:"job-detail-text-action",children:[s.jsx(ds,{size:16,strokeWidth:1.8}),"Del via email"]}),z.websiteUrl?s.jsxs("a",{href:z.websiteUrl,target:"_blank",rel:"noreferrer",className:"job-detail-text-action link",children:[s.jsx(Eh,{size:16,strokeWidth:1.8}),"Åbn på nettet"]}):null,s.jsxs("button",{type:"button",className:ie?"job-detail-text-action success is-done":"job-detail-text-action success",onClick:()=>{ze()},disabled:ie||M,children:[s.jsx(za,{size:16,strokeWidth:1.8}),ie?"Markeret som søgt":"Marker som søgt"]})]}),s.jsxs("article",{className:"dash-card job-detail-company-card",children:[s.jsx("h3",{children:"Om virksomheden"}),s.jsxs("div",{className:"job-detail-company-list",children:[s.jsxs("div",{children:[s.jsx("span",{children:"Virksomhed"}),s.jsx("strong",{children:z.hiringCompanyName||z.companyName||"Ukendt"})]}),s.jsxs("div",{children:[s.jsx("span",{children:"Stilling"}),s.jsx("strong",{children:z.occupationName||"Ikke angivet"})]}),s.jsxs("div",{children:[s.jsx("span",{children:"Website"}),s.jsx("strong",{children:z.websiteUrl||"Ikke angivet"})]})]})]})]})]})]}):null]})]})}const Nh=[2,4,6,8,10,12,24],mp=[{id:"job-1",title:"Senior Frontend-udvikler",companyName:"Lunar",occupationName:"Frontend",descriptionIntro:"Vi søger en erfaren frontend-udvikler til at lede vores nye team.",address:"Kobenhavn",time:"",applicationDeadline:"",candidateDistance:5,logoUrl:"",companyLogoImage:"",fromJobnet:!1,isSaved:!1,matchPercent:98},{id:"job-2",title:"UX/UI Designer (Deltid)",companyName:"Pleo",occupationName:"Design",descriptionIntro:"Hjælp os med at skabe brugervenlige flows for vores expense management platform.",address:"Kobenhavn",time:"",applicationDeadline:"",candidateDistance:12,logoUrl:"",companyLogoImage:"",fromJobnet:!1,isSaved:!1,matchPercent:95},{id:"job-3",title:"React-udvikler",companyName:"Zendesk",occupationName:"Frontend",descriptionIntro:"Bliv en del af vores kerne-team i Kobenhavn og byg software i topklasse.",address:"Kobenhavn",time:"",applicationDeadline:"",candidateDistance:2,logoUrl:"",companyLogoImage:"",fromJobnet:!1,isSaved:!1,matchPercent:89},{id:"job-4",title:"Full Stack Web-udvikler",companyName:"Trustpilot",occupationName:"Full stack",descriptionIntro:"Vi leder efter en passioneret Full Stack Developer (Node.js/React).",address:"Remote",time:"",applicationDeadline:"",candidateDistance:null,logoUrl:"",companyLogoImage:"",fromJobnet:!1,isSaved:!1,matchPercent:85},{id:"job-5",title:"Frontend-arkitekt",companyName:"Novo Nordisk",occupationName:"Frontend",descriptionIntro:"Vær med til at designe arkitekturen for interne medicinske data-platforme.",address:"Bagsvaerd",time:"",applicationDeadline:"",candidateDistance:18,logoUrl:"",companyLogoImage:"",fromJobnet:!1,isSaved:!1,matchPercent:72},{id:"job-6",title:"Product Designer",companyName:"Podimo",occupationName:"Design",descriptionIntro:"Vi mangler en skarp Product Designer til at forme fremtidens lytteoplevelse.",address:"Kobenhavn",time:"",applicationDeadline:"",candidateDistance:3,logoUrl:"",companyLogoImage:"",fromJobnet:!1,isSaved:!1,matchPercent:68}];function gp(d){return d.trim().slice(0,1).toUpperCase()||"A"}function Ah(d){return d.address.toLowerCase().includes("remote")?"Remote":typeof d.candidateDistance=="number"?`${Math.max(0,Math.round(d.candidateDistance))} km vaek`:d.address||"Lokation ikke angivet"}function vp(d){return d.companyLogoImage||d.logoUrl||""}function _h({item:d}){const[c,u]=L.useState(!1),o=vp(d);return o.length>0&&!c?s.jsx("div",{className:"jobs-card-logo jobs-card-logo-image-wrap",children:s.jsx("img",{src:o,alt:d.companyName||"Virksomhed",className:"jobs-card-logo-image",onError:()=>u(!0)})}):s.jsx("div",{className:"jobs-card-logo",children:gp(d.companyName)})}function pp(d){return d.workTypePartTime?"deltid":"fast"}function yp({onLogout:d,onNavigate:c,onOpenJobDetail:u,onToggleTheme:o,theme:m}){const y=L.useMemo(()=>new Fu,[]),[O,G]=L.useState({name:"Lasse"}),[w,N]=L.useState(""),[V,z]=L.useState("sidebar"),[q,Z]=L.useState("fast"),[ae,Y]=L.useState(15),[fe,ge]=L.useState(24),[je,ie]=L.useState(["Frontend-udvikler","UX/UI Designer"]),[re,de]=L.useState(""),[K,M]=L.useState([]),[ye,Ae]=L.useState(!0),[ze,R]=L.useState(6),Q=L.useCallback(async()=>{try{const h=await y.getTabItems("jobs");M(h),R(6)}catch{M([]),R(6)}},[y]);L.useEffect(()=>{let h=!0;async function S(){try{const C=await y.getSavedFilter();if(!h)return;Z(pp(C)),Y(C.workDistance??15),ge(C.partTimeHours??24),N(C.distanceCenterName??"")}catch{}if(await Q(),h){const C=await y.getCandidateProfile();h&&G(C),Ae(!1)}}return S(),()=>{h=!1}},[Q,y]);async function le(){const h={escoIds:[],workTypePermanent:q==="fast",workTypePartTime:q==="deltid",workDistance:ae,partTimeHours:q==="deltid"?fe:null,distanceCenterName:w,latitude:null,longitude:null};Ae(!0);try{const S=await y.applyFiltersAndGetJobs(h,{searchText:w,desiredTitles:je});M(S),R(6)}catch{M([]),R(6)}Ae(!1)}const I=K.length>0?K:mp,oe=I.slice(0,Math.min(ze,I.length)),_=zeh==="sidebar"?"top":"sidebar")}function U(h){ie(S=>S.filter(C=>C!==h))}function $(h){const S=h.trim();S&&(ie(C=>C.includes(S)?C:[...C,S]),de(""))}function ce(){R(h=>Math.min(h+6,I.length))}return s.jsxs("section",{className:`dash-root ${m==="dark"?"theme-dark":""}`,children:[s.jsx("div",{className:"dash-orb dash-orb-1"}),s.jsx("div",{className:"dash-orb dash-orb-2"}),s.jsx("div",{className:"dash-orb dash-orb-3"}),s.jsx(Rl,{active:"jobs",onNavigate:c}),s.jsxs("main",{className:"dash-main custom-scrollbar",children:[s.jsx(Hl,{name:O.name,imageUrl:O.imageUrl,onLogout:d,theme:m,onToggleTheme:o,actions:s.jsxs("button",{type:"button",className:"jobs-layout-toggle",onClick:H,children:[V==="sidebar"?s.jsx(Uh,{size:16,strokeWidth:1.8}):s.jsx(Ch,{size:16,strokeWidth:1.8}),s.jsx("span",{children:V==="sidebar"?"Top-layout":"Side-layout"})]})}),s.jsxs("div",{className:"jobs-page-head",children:[s.jsx("h1",{children:"Find dit naeste job"}),s.jsx("p",{children:"Sog og filtrer for at finde det perfekte match til din profil."})]}),V==="sidebar"?s.jsxs("div",{className:"jobs-grid",children:[s.jsxs("aside",{className:"jobs-filter dash-card",children:[s.jsxs("h2",{children:[s.jsx(Qu,{size:18,strokeWidth:1.8})," Filtre"]}),s.jsxs("div",{className:"jobs-filter-block",children:[s.jsx("label",{children:"Sog jobtitel eller virksomhed"}),s.jsxs("div",{className:"jobs-search-wrap",children:[s.jsx(Xu,{size:16,strokeWidth:1.8}),s.jsx("input",{type:"text",placeholder:"F.eks. Frontend Udvikler...",value:w,onChange:h=>N(h.target.value)})]})]}),s.jsxs("div",{className:"jobs-filter-block",children:[s.jsx("label",{children:"Onskede jobtitler"}),s.jsxs("div",{className:"jobs-title-picker",children:[s.jsxs("div",{className:"jobs-title-input-wrap",children:[je.map(h=>s.jsxs("span",{className:"jobs-title-chip",children:[h,s.jsx("button",{type:"button",onClick:()=>U(h),"aria-label":`Fjern ${h}`,children:s.jsx(mh,{size:12,strokeWidth:2})})]},h)),s.jsx("input",{type:"text",value:re,onChange:h=>de(h.target.value),onKeyDown:h=>{h.key==="Enter"&&(h.preventDefault(),$(re))},placeholder:"Sog og tilfoj flere jobtitler..."})]}),s.jsxs("div",{className:"jobs-title-suggestions",children:[s.jsxs("button",{type:"button",className:"jobs-title-option active",onClick:()=>$("Frontend-udvikler"),children:[s.jsx("span",{children:"Frontend-udvikler"}),s.jsx(za,{size:16,strokeWidth:1.8})]}),s.jsx("button",{type:"button",className:"jobs-title-option",onClick:()=>$("Backend-udvikler"),children:s.jsx("span",{children:"Backend-udvikler"})}),s.jsx("button",{type:"button",className:"jobs-title-option",onClick:()=>$("Full Stack-udvikler"),children:s.jsx("span",{children:"Full Stack-udvikler"})}),s.jsxs("button",{type:"button",className:"jobs-title-option active",onClick:()=>$("UX/UI Designer"),children:[s.jsx("span",{children:"UX/UI Designer"}),s.jsx(za,{size:16,strokeWidth:1.8})]}),s.jsx("button",{type:"button",className:"jobs-title-option",onClick:()=>$("Product Manager"),children:s.jsx("span",{children:"Product Manager"})})]})]})]}),s.jsx("div",{className:"jobs-separator"}),s.jsxs("div",{className:"jobs-filter-block",children:[s.jsx("label",{children:"Ansaettelsestype"}),s.jsxs("div",{className:"jobs-radio-grid",children:[s.jsx("button",{type:"button",className:q==="fast"?"jobs-radio-btn active":"jobs-radio-btn",onClick:()=>Z("fast"),children:"Fast (Fuldtid)"}),s.jsx("button",{type:"button",className:q==="deltid"?"jobs-radio-btn active":"jobs-radio-btn",onClick:()=>Z("deltid"),children:"Deltid"})]})]}),s.jsxs("div",{className:"jobs-filter-block jobs-range-block",children:[s.jsxs("div",{className:"jobs-range-head",children:[s.jsx("label",{children:"Maks. afstand"}),s.jsxs("span",{children:[ae," km"]})]}),s.jsx("input",{type:"range",min:0,max:50,value:ae,onChange:h=>Y(Number(h.target.value))}),s.jsxs("div",{className:"jobs-range-labels",children:[s.jsx("span",{children:"0 km"}),s.jsx("span",{children:"50+ km"})]})]}),s.jsx("div",{className:"jobs-separator"}),s.jsxs("div",{className:"jobs-filter-block",children:[s.jsx("label",{children:"Timer (ved deltid)"}),s.jsx("p",{children:"Vaelg onsket timeantal pr. uge"}),s.jsx("div",{className:"jobs-hours-grid",children:Nh.map(h=>s.jsx("button",{type:"button",className:fe===h?"jobs-hour-btn active":"jobs-hour-btn",onClick:()=>ge(h),children:h},h))})]}),s.jsx("button",{type:"button",className:"jobs-apply-btn",onClick:()=>{le()},children:"Opdater resultater"})]}),s.jsxs("section",{className:"jobs-content",children:[s.jsxs("div",{className:"jobs-content-head",children:[s.jsx("h2",{children:"Seneste jobs"}),s.jsxs("span",{children:["Viser ",K.length>0?K.length:142," resultater"]})]}),ye?s.jsx("p",{className:"dash-loading",children:"Indlaeser jobs..."}):null,s.jsx("div",{className:"jobs-cards",children:oe.map(h=>s.jsxs("article",{className:"jobs-card",role:"button",tabIndex:0,onClick:()=>u(h.id,h.fromJobnet,"jobs"),onKeyDown:S=>{(S.key==="Enter"||S.key===" ")&&(S.preventDefault(),u(h.id,h.fromJobnet,"jobs"))},children:[s.jsx("div",{className:"jobs-card-top",children:s.jsx(_h,{item:h})}),s.jsxs("div",{className:"jobs-card-title",children:[s.jsx("h3",{children:h.title||"Stilling"}),s.jsx("p",{children:h.companyName||"Virksomhed"})]}),s.jsx("p",{className:"jobs-card-description",children:h.descriptionIntro||"Beskrivelse er ikke tilgaengelig endnu."}),s.jsxs("div",{className:"jobs-card-bottom",children:[s.jsxs("div",{className:"jobs-card-distance",children:[h.address.toLowerCase().includes("remote")?s.jsx(Ju,{size:15,strokeWidth:1.8}):s.jsx(fh,{size:15,strokeWidth:1.8}),s.jsx("span",{children:Ah(h)})]}),s.jsx("button",{type:"button",className:"jobs-card-arrow","aria-label":"Se job",onClick:S=>{S.stopPropagation(),u(h.id,h.fromJobnet,"jobs")},children:s.jsx(Ol,{size:16,strokeWidth:1.8})})]})]},h.id))}),s.jsx("div",{className:"jobs-load-more-wrap",children:s.jsx("button",{type:"button",className:"jobs-load-more",onClick:ce,disabled:!_,children:_?"Indlaes flere jobs":"Alle jobs er vist"})})]})]}):s.jsxs("section",{className:"jobs-top-layout",children:[s.jsxs("div",{className:"jobs-top-filters dash-card",children:[s.jsxs("div",{className:"jobs-top-filter-title",children:[s.jsx(Qu,{size:18,strokeWidth:1.8}),s.jsx("h2",{children:"Filtre"})]}),s.jsxs("div",{className:"jobs-top-controls",children:[s.jsxs("div",{className:"jobs-filter-block no-margin",children:[s.jsx("label",{children:"Sog noegleord eller virksomhed"}),s.jsxs("div",{className:"jobs-search-wrap",children:[s.jsx(Xu,{size:16,strokeWidth:1.8}),s.jsx("input",{type:"text",placeholder:"F.eks. Lunar, React...",value:w,onChange:h=>N(h.target.value)})]})]}),s.jsxs("div",{className:"jobs-filter-block no-margin",children:[s.jsx("label",{children:"Ansaettelsestype"}),s.jsxs("div",{className:"jobs-radio-grid",children:[s.jsx("button",{type:"button",className:q==="fast"?"jobs-radio-btn active":"jobs-radio-btn",onClick:()=>Z("fast"),children:"Fast"}),s.jsx("button",{type:"button",className:q==="deltid"?"jobs-radio-btn active":"jobs-radio-btn",onClick:()=>Z("deltid"),children:"Deltid"})]})]}),s.jsxs("div",{className:"jobs-filter-block no-margin jobs-top-range",children:[s.jsxs("div",{className:"jobs-range-head",children:[s.jsx("label",{children:"Maks. afstand"}),s.jsxs("span",{children:[ae," km"]})]}),s.jsx("input",{type:"range",min:0,max:50,value:ae,onChange:h=>Y(Number(h.target.value))})]}),s.jsx("button",{type:"button",className:"jobs-apply-btn jobs-top-apply",onClick:()=>{le()},children:"Opdater resultater"})]}),s.jsxs("div",{className:"jobs-filter-block no-margin",children:[s.jsx("label",{children:"Onskede jobtitler"}),s.jsxs("div",{className:"jobs-title-picker",children:[s.jsxs("div",{className:"jobs-title-input-wrap",children:[je.map(h=>s.jsxs("span",{className:"jobs-title-chip",children:[h,s.jsx("button",{type:"button",onClick:()=>U(h),"aria-label":`Fjern ${h}`,children:s.jsx(mh,{size:12,strokeWidth:2})})]},h)),s.jsx("input",{type:"text",value:re,onChange:h=>de(h.target.value),onKeyDown:h=>{h.key==="Enter"&&(h.preventDefault(),$(re))},placeholder:"Sog og tilfoj flere jobtitler..."})]}),s.jsxs("div",{className:"jobs-title-suggestions",children:[s.jsxs("button",{type:"button",className:"jobs-title-option active",onClick:()=>$("Frontend-udvikler"),children:[s.jsx("span",{children:"Frontend-udvikler"}),s.jsx(za,{size:16,strokeWidth:1.8})]}),s.jsx("button",{type:"button",className:"jobs-title-option",onClick:()=>$("Backend-udvikler"),children:s.jsx("span",{children:"Backend-udvikler"})}),s.jsx("button",{type:"button",className:"jobs-title-option",onClick:()=>$("Full Stack-udvikler"),children:s.jsx("span",{children:"Full Stack-udvikler"})}),s.jsxs("button",{type:"button",className:"jobs-title-option active",onClick:()=>$("UX/UI Designer"),children:[s.jsx("span",{children:"UX/UI Designer"}),s.jsx(za,{size:16,strokeWidth:1.8})]}),s.jsx("button",{type:"button",className:"jobs-title-option",onClick:()=>$("Product Manager"),children:s.jsx("span",{children:"Product Manager"})})]})]})]}),s.jsx("div",{className:"jobs-separator top-margin"}),s.jsxs("div",{className:"jobs-hours-row",children:[s.jsxs("div",{children:[s.jsx("label",{children:"Timer (ved deltid)"}),s.jsx("p",{children:"Vaelg onsket timeantal pr. uge"})]}),s.jsx("div",{className:"jobs-hours-grid",children:Nh.map(h=>s.jsx("button",{type:"button",className:fe===h?"jobs-hour-btn active":"jobs-hour-btn",onClick:()=>ge(h),children:h},h))})]})]}),s.jsxs("section",{className:"jobs-content",children:[s.jsxs("div",{className:"jobs-content-head",children:[s.jsx("h2",{children:"Seneste jobs"}),s.jsxs("span",{children:["Viser ",K.length>0?K.length:142," resultater"]})]}),ye?s.jsx("p",{className:"dash-loading",children:"Indlaeser jobs..."}):null,s.jsx("div",{className:"jobs-cards jobs-cards-top",children:oe.map(h=>s.jsxs("article",{className:"jobs-card",role:"button",tabIndex:0,onClick:()=>u(h.id,h.fromJobnet,"jobs"),onKeyDown:S=>{(S.key==="Enter"||S.key===" ")&&(S.preventDefault(),u(h.id,h.fromJobnet,"jobs"))},children:[s.jsx("div",{className:"jobs-card-top",children:s.jsx(_h,{item:h})}),s.jsxs("div",{className:"jobs-card-title",children:[s.jsx("h3",{children:h.title||"Stilling"}),s.jsx("p",{children:h.companyName||"Virksomhed"})]}),s.jsx("p",{className:"jobs-card-description",children:h.descriptionIntro||"Beskrivelse er ikke tilgaengelig endnu."}),s.jsxs("div",{className:"jobs-card-bottom",children:[s.jsxs("div",{className:"jobs-card-distance",children:[h.address.toLowerCase().includes("remote")?s.jsx(Ju,{size:15,strokeWidth:1.8}):s.jsx(fh,{size:15,strokeWidth:1.8}),s.jsx("span",{children:Ah(h)})]}),s.jsx("button",{type:"button",className:"jobs-card-arrow","aria-label":"Se job",onClick:S=>{S.stopPropagation(),u(h.id,h.fromJobnet,"jobs")},children:s.jsx(Ol,{size:16,strokeWidth:1.8})})]})]},h.id))}),s.jsx("div",{className:"jobs-load-more-wrap",children:s.jsx("button",{type:"button",className:"jobs-load-more",onClick:ce,disabled:!_,children:_?"Indlaes flere jobs":"Alle jobs er vist"})})]})]})]})]})}function os(d){if(!d)return 0;const u=(d instanceof Date?d:new Date(d)).getTime();return Number.isNaN(u)?0:u}function Bh(d){if(!d)return"--:--";const c=d instanceof Date?d:new Date(d);return Number.isNaN(c.getTime())?"--:--":new Intl.DateTimeFormat("da-DK",{hour:"2-digit",minute:"2-digit"}).format(c)}function bp(d){if(!d)return"";const c=d instanceof Date?d:new Date(d);if(Number.isNaN(c.getTime()))return"";const u=new Date,o=1440*60*1e3,m=Math.floor((new Date(u.getFullYear(),u.getMonth(),u.getDate()).getTime()-new Date(c.getFullYear(),c.getMonth(),c.getDate()).getTime())/o);return m===0?Bh(c):m===1?"I går":new Intl.DateTimeFormat("da-DK",{day:"2-digit",month:"short"}).format(c)}function jp(d){const c=new Date,u=new Date(d.getFullYear(),d.getMonth(),d.getDate()),o=new Date(c.getFullYear(),c.getMonth(),c.getDate()),m=Math.floor((o.getTime()-u.getTime())/(1440*60*1e3));return m===0?"I dag":m===1?"I går":new Intl.DateTimeFormat("da-DK",{day:"2-digit",month:"short"}).format(d)}function Ln(d){return!d.fromCandidate&&!d.seen}function kh(d){return d.allMessages.filter(Ln).length}function wn(d){return d.companyLogoUrl||d.companyLogo||""}function Sp(d){return{...d,allMessages:[...d.allMessages??[]].sort((c,u)=>os(c.timeSent)-os(u.timeSent))}}function Th(){const d=new Date,c=new Date(d.getTime()-600*1e3),u=new Date(d.getTime()-7200*1e3),o=(O,G,w,N,V)=>({threadId:O,text:G,fromCandidate:w,timeSent:N,seen:V}),m=[o("thread-techcorp","Hej Lasse! Mange tak for din ansøgning.",!1,u),o("thread-techcorp","Mange tak, det lyder rigtig spændende.",!0,new Date(u.getTime()+1200*1e3),new Date(u.getTime()+1800*1e3)),o("thread-techcorp","Vi vil gerne invitere dig til samtale.",!1,c)],y=[o("thread-lunar","Mange tak for din opdaterede portefølje.",!1,new Date(d.getTime()-1560*60*1e3),new Date(d.getTime()-1500*60*1e3))];return[{id:"thread-techcorp",companyLogo:"",companyLogoUrl:"https://i.pravatar.cc/150?img=33",companyName:"TechCorp A/S",candidateFirstName:"Lasse",candidateLastName:"Hansen",candidateImage:"https://i.pravatar.cc/150?img=11",allMessages:m,latestMessage:m[m.length-1],title:"Frontend Udvikler",messagesLoaded:!0,jobPostingId:"job-1",jobPosting:void 0,isFromSupport:!1},{id:"thread-lunar",companyLogo:"",companyLogoUrl:"https://i.pravatar.cc/150?img=12",companyName:"Lunar Bank",candidateFirstName:"Lasse",candidateLastName:"Hansen",candidateImage:"https://i.pravatar.cc/150?img=11",allMessages:y,latestMessage:y[y.length-1],title:"Senior UX Designer",messagesLoaded:!0,jobPostingId:"job-2",jobPosting:void 0,isFromSupport:!1}]}function xp({onLogout:d,onNavigate:c,onToggleTheme:u,theme:o}){const m=L.useMemo(()=>new qh,[]),[y,O]=L.useState("Lasse"),[G,w]=L.useState(void 0),[N,V]=L.useState([]),[z,q]=L.useState(!0),[Z,ae]=L.useState(""),[Y,fe]=L.useState("all"),[ge,je]=L.useState(""),[ie,re]=L.useState("");L.useEffect(()=>{let R=!0;async function Q(){q(!0);try{const le=await m.getCandidateProfile();R&&(O(le.name),w(le.imageUrl));const I=await m.getThreads();if(!R)return;const oe=(I.length>0?I:Th()).map(Sp);V(oe),je(oe[0]?.id||"")}catch{if(!R)return;const le=Th();V(le),je(le[0]?.id||"")}finally{R&&q(!1)}}return Q(),()=>{R=!1}},[m]);const de=L.useMemo(()=>{const R=Z.trim().toLowerCase();return N.filter(Q=>Y==="unread"&&kh(Q)===0||Y==="companies"&&Q.isFromSupport?!1:R?Q.companyName.toLowerCase().includes(R)||(Q.latestMessage?.text||"").toLowerCase().includes(R):!0)},[Y,Z,N]),K=L.useMemo(()=>N.find(R=>R.id===ge)||de[0],[ge,de,N]),M=L.useMemo(()=>[...K?.allMessages||[]].sort((R,Q)=>os(R.timeSent)-os(Q.timeSent)),[K]);async function ye(R){je(R.id);const Q=[...R.allMessages].reverse().find(le=>Ln(le));Q?.id&&(m.markThreadReadByMessageId(Q.id),V(le=>le.map(I=>I.id!==R.id?I:{...I,allMessages:I.allMessages.map(oe=>Ln(oe)?{...oe,seen:new Date}:oe)})))}async function Ae(){const R=N.flatMap(Q=>Q.allMessages).filter(Q=>Ln(Q)&&!!Q.id);await Promise.all(R.map(Q=>m.markThreadReadByMessageId(Q.id))),V(Q=>Q.map(le=>({...le,allMessages:le.allMessages.map(I=>Ln(I)?{...I,seen:new Date}:I)})))}async function ze(){const R=ie.trim();if(!K||!R)return;const Q={threadId:K.id,text:R,fromCandidate:!0,timeSent:new Date};re(""),V(le=>le.map(I=>{if(I.id!==K.id)return I;const oe=[...I.allMessages,Q];return{...I,allMessages:oe,latestMessage:Q}}));try{const le=await m.sendMessage(K.id,R);V(I=>I.map(oe=>{if(oe.id!==K.id)return oe;const H=[...oe.allMessages.filter(U=>U!==Q),le];return{...oe,allMessages:H,latestMessage:le}}))}catch{}}return s.jsxs("section",{className:`dash-root ${o==="dark"?"theme-dark":""}`,children:[s.jsx("div",{className:"dash-orb dash-orb-1"}),s.jsx("div",{className:"dash-orb dash-orb-2"}),s.jsx("div",{className:"dash-orb dash-orb-3"}),s.jsx(Rl,{active:"messages",onNavigate:c}),s.jsxs("main",{className:"dash-main custom-scrollbar msg-main",children:[s.jsx(Hl,{name:y,imageUrl:G,onLogout:d,theme:o,onToggleTheme:u}),s.jsxs("div",{className:"msg-head",children:[s.jsxs("div",{children:[s.jsx("h1",{children:"Beskeder"}),s.jsx("p",{children:"Kommuniker med virksomheder og hold styr på dine ansøgninger."})]}),s.jsxs("button",{type:"button",className:"msg-mark-btn",onClick:()=>{Ae()},children:[s.jsx(Xg,{size:16,strokeWidth:1.8})," Marker alle som læst"]})]}),s.jsxs("div",{className:"msg-layout",children:[s.jsxs("section",{className:"msg-threads",children:[s.jsxs("div",{className:"msg-threads-head",children:[s.jsxs("div",{className:"msg-search-wrap",children:[s.jsx(Xu,{size:16,strokeWidth:1.8}),s.jsx("input",{value:Z,onChange:R=>ae(R.target.value),type:"text",placeholder:"Søg i beskeder..."})]}),s.jsxs("div",{className:"msg-filter-row",children:[s.jsx("button",{type:"button",className:Y==="all"?"active":"",onClick:()=>fe("all"),children:"Alle"}),s.jsx("button",{type:"button",className:Y==="unread"?"active":"",onClick:()=>fe("unread"),children:"Ulæste"}),s.jsx("button",{type:"button",className:Y==="companies"?"active":"",onClick:()=>fe("companies"),children:"Virksomheder"})]})]}),s.jsxs("div",{className:"msg-thread-list custom-scrollbar",children:[z?s.jsx("p",{className:"dash-loading",children:"Indlaeser beskeder..."}):null,!z&&de.length===0?s.jsx("p",{className:"dash-loading",children:"Ingen tråde fundet."}):null,de.map(R=>{const Q=kh(R),le=K?.id===R.id,I=wn(R);return s.jsxs("button",{type:"button",className:le?"msg-thread-item active":"msg-thread-item",onClick:()=>{ye(R)},children:[s.jsxs("div",{className:"msg-thread-avatar-wrap",children:[I?s.jsx("img",{src:I,alt:R.companyName,className:"msg-thread-avatar"}):s.jsx("div",{className:"msg-thread-avatar-fallback",children:R.companyName.slice(0,1).toUpperCase()}),s.jsx("span",{className:"msg-thread-online"})]}),s.jsxs("div",{className:"msg-thread-content",children:[s.jsxs("div",{className:"msg-thread-row",children:[s.jsx("h3",{children:R.companyName}),s.jsx("span",{children:bp(R.latestMessage?.timeSent)})]}),s.jsx("p",{className:Q>0?"unread":"",children:R.latestMessage?.text||"Ingen beskeder endnu"}),s.jsx("small",{children:R.title||"Stilling"})]}),Q>0?s.jsx("div",{className:"msg-thread-unread",children:Q}):null]},R.id)})]})]}),s.jsxs("section",{className:"msg-chat",children:[s.jsx("div",{className:"msg-chat-head",children:K?s.jsxs(s.Fragment,{children:[s.jsxs("div",{className:"msg-chat-company",children:[wn(K)?s.jsx("img",{src:wn(K),alt:K.companyName,className:"msg-chat-avatar"}):s.jsx("div",{className:"msg-chat-avatar-fallback",children:K.companyName.slice(0,1).toUpperCase()}),s.jsxs("div",{children:[s.jsx("h2",{children:K.companyName}),s.jsx("p",{children:K.title||"Rekruttering"})]})]}),s.jsxs("div",{className:"msg-chat-actions",children:[s.jsx("button",{type:"button","aria-label":"Ring",children:s.jsx(U0,{size:16,strokeWidth:1.8})}),s.jsx("button",{type:"button","aria-label":"Info",children:s.jsx(d0,{size:16,strokeWidth:1.8})})]})]}):s.jsx("h2",{children:"Vælg en samtale"})}),s.jsx("div",{className:"msg-chat-body custom-scrollbar",children:M.map((R,Q)=>{const le=R.timeSent instanceof Date?R.timeSent:new Date(R.timeSent),I=Q>0?M[Q-1]:void 0,oe=I?.timeSent instanceof Date?I.timeSent:I?.timeSent?new Date(I.timeSent):void 0,_=!oe||le.toDateString()!==oe.toDateString();return s.jsxs("div",{children:[_?s.jsx("div",{className:"msg-day-sep",children:jp(le)}):null,s.jsxs("div",{className:R.fromCandidate?"msg-bubble-row mine":"msg-bubble-row",children:[R.fromCandidate?null:wn(K)?s.jsx("img",{src:wn(K),alt:K.companyName,className:"msg-mini-avatar"}):s.jsx("div",{className:"msg-mini-avatar msg-mini-avatar-fallback",children:K.companyName.slice(0,1).toUpperCase()}),s.jsxs("div",{className:"msg-bubble-wrap",children:[s.jsx("span",{className:"msg-time",children:Bh(R.timeSent)}),s.jsx("div",{className:R.fromCandidate?"msg-bubble mine":"msg-bubble",children:R.text})]})]})]},`${R.threadId}-${Q}`)})}),s.jsx("div",{className:"msg-input-area",children:s.jsxs("div",{className:"msg-input-wrap",children:[s.jsx("button",{type:"button","aria-label":"Vedhæft",children:s.jsx(D0,{size:18,strokeWidth:1.8})}),s.jsx("textarea",{rows:1,value:ie,onChange:R=>re(R.target.value),onKeyDown:R=>{R.key==="Enter"&&!R.shiftKey&&(R.preventDefault(),ze())},placeholder:"Skriv din besked her..."}),s.jsx("button",{type:"button","aria-label":"Emoji",children:s.jsx(F0,{size:18,strokeWidth:1.8})}),s.jsxs("button",{type:"button",className:"msg-send-btn",onClick:()=>{ze()},children:["Send ",s.jsx(Z0,{size:15,strokeWidth:1.8})]})]})})]})]})]})]})}function Np(){const d=L.useMemo(()=>!!window.localStorage.getItem("token"),[]),c=L.useMemo(()=>window.localStorage.getItem("theme")==="dark"?"dark":"light",[]),[u,o]=L.useState(d),[m,y]=L.useState(c),[O,G]=L.useState("dashboard"),[w,N]=L.useState(null);function V(Y){(Y==="dashboard"||Y==="jobs"||Y==="cv"||Y==="messages"||Y==="agents"||Y==="ai-agent")&&G(Y)}function z(Y,fe,ge="jobs"){N({id:Y,fromJobnet:fe,returnPage:ge}),G("job-detail")}function q(){G(w?.returnPage??"jobs")}async function Z(){await wl.clearCredentials(),G("dashboard"),N(null),o(!1)}function ae(){y(Y=>{const fe=Y==="light"?"dark":"light";return window.localStorage.setItem("theme",fe),fe})}return u?O==="jobs"?s.jsx(yp,{onLogout:Z,onNavigate:V,onOpenJobDetail:z,theme:m,onToggleTheme:ae}):O==="cv"?s.jsx($v,{onLogout:Z,onNavigate:V,theme:m,onToggleTheme:ae}):O==="messages"?s.jsx(xp,{onLogout:Z,onNavigate:V,theme:m,onToggleTheme:ae}):O==="agents"||O==="ai-agent"?s.jsx(Ev,{onLogout:Z,onNavigate:V,onOpenJobDetail:z,theme:m,onToggleTheme:ae}):O==="job-detail"&&w?s.jsx(hp,{jobId:w.id,fromJobnet:w.fromJobnet,onBack:q,onLogout:Z,onNavigate:V,theme:m,onToggleTheme:ae}):s.jsx(up,{onLogout:Z,onNavigate:V,onOpenJobDetail:z,theme:m,onToggleTheme:ae}):s.jsx(yv,{onAuthenticated:()=>o(!0)})}jg.createRoot(document.getElementById("root")).render(s.jsx(L.StrictMode,{children:s.jsx(Np,{})})); diff --git a/dist/assets/index-Crq8u5MZ.css b/dist/assets/index-Crq8u5MZ.css deleted file mode 100644 index 659ebce..0000000 --- a/dist/assets/index-Crq8u5MZ.css +++ /dev/null @@ -1 +0,0 @@ -:root{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol;line-height:1.5;font-weight:400;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}html,body,#root{height:100%}body{margin:0;min-width:320px}::selection{background:#99f6e4;color:#134e4a}button,input,textarea,select{font-family:inherit}.auth-page{position:relative;min-height:100vh;background:#ecf0f0;color:#1f2937;display:flex;align-items:center;justify-content:center;padding:16px;overflow:hidden}.auth-page *{box-sizing:border-box}.orb{position:fixed;border-radius:999px;pointer-events:none;z-index:0}.orb-1{top:-10%;left:-10%;width:50vw;height:50vw;background:#2dd4bf4d;filter:blur(120px)}.orb-2{right:-10%;bottom:-10%;width:60vw;height:60vw;background:#67e8f966;filter:blur(150px)}.orb-3{top:30%;right:20%;width:30vw;height:30vw;background:#34d39933;filter:blur(100px)}.auth-logo-wrap{position:absolute;top:32px;left:0;right:0;z-index:10;display:flex;align-items:center;justify-content:center;gap:8px}.auth-logo-dot{width:32px;height:32px;border-radius:999px;display:grid;place-items:center;color:#fff;font-weight:700;background:linear-gradient(135deg,#0f766e,#06b6d4);box-shadow:0 12px 22px #0d94884d}.auth-logo-text{font-size:1.25rem;font-weight:500;letter-spacing:-.03em}.auth-card{width:min(420px,100%);position:relative;z-index:5;border-radius:32px;padding:32px;background:#fff9;border:1px solid rgba(255,255,255,.8);backdrop-filter:blur(22px);-webkit-backdrop-filter:blur(22px);box-shadow:0 8px 30px #0000000a}.auth-view{display:grid;gap:24px}.view-enter{animation:fadeIn .3s ease-out forwards}@keyframes fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.auth-head{display:grid;gap:8px}.auth-head-center{text-align:center}.auth-head h1{margin:0;font-size:1.55rem;font-weight:500;letter-spacing:-.03em;color:#111827}.auth-head p{margin:0;color:#6b7280;font-size:.9rem;line-height:1.5}.auth-form{display:grid;gap:18px}.auth-field{display:grid;gap:7px}.auth-field span{font-size:.88rem;font-weight:500;color:#374151;padding-left:4px}.auth-field-row{display:flex;align-items:center;justify-content:space-between;gap:12px}.auth-field input{width:100%;border:1px solid rgba(255,255,255,.75);border-radius:12px;padding:10px 14px 10px 40px;background:#ffffff8c;color:#111827;font-size:.9rem;outline:none;box-shadow:0 1px 2px #0f172a0f;transition:border-color .2s ease,box-shadow .2s ease,background .2s ease,transform .2s ease}.auth-field input::placeholder{color:#9ca3af}.auth-field input:focus{border-color:#14b8a680;box-shadow:0 0 0 3px #14b8a62e,0 6px 18px #0d948814;background:#ffffffd9}.auth-input-wrap{position:relative}.auth-input-icon{position:absolute;top:50%;left:12px;transform:translateY(-50%);width:18px;height:18px;border-radius:999px;display:grid;place-items:center;color:#9ca3af;pointer-events:none}.auth-input-icon svg{width:16px;height:16px;display:block}.location-suggestions{margin-top:8px;border-radius:12px;border:1px solid rgba(255,255,255,.82);background:#ffffffd1;box-shadow:0 10px 24px #0f172a14;overflow:hidden;max-height:180px;overflow-y:auto}.location-suggestion-item{width:100%;border:0;border-bottom:1px solid rgba(229,231,235,.7);background:transparent;padding:10px 12px;text-align:left;color:#374151;font-size:.86rem;cursor:pointer}.location-suggestion-item:last-child{border-bottom:0}.location-suggestion-item:hover{background:#14b8a61a;color:#115e59}.check-row{display:flex;align-items:center;gap:8px;color:#4b5563;font-size:.9rem}.submit-btn{margin-top:2px;width:100%;border:0;border-radius:12px;padding:10px 14px;font-size:.9rem;font-weight:600;color:#fff;background:#111827;cursor:pointer;transition:background .2s ease}.submit-btn:hover:not(:disabled){background:#1f2937}.submit-btn:disabled{opacity:.65;cursor:default}.auth-foot{margin:0;text-align:center;font-size:.9rem;color:#6b7280;display:flex;align-items:center;justify-content:center;gap:4px;flex-wrap:wrap}.link-btn{border:0;background:transparent;color:#0f766e;font-weight:500;cursor:pointer;padding:0}.link-btn:hover{color:#115e59}.back-link{justify-self:start;font-size:.8rem}.status{margin:18px 0 0;border-radius:12px;padding:10px 12px;font-size:.88rem}.status.success{background:#10b9811f;color:#047857}.status.error{background:#ef44441f;color:#b91c1c}@media(max-width:520px){.auth-card{padding:24px 20px;border-radius:24px}}.dash-root{min-height:100vh;display:flex;background:#ecf0f0;color:#1f2937;overflow:hidden;position:relative}.dash-root *{box-sizing:border-box}.dash-orb{position:fixed;border-radius:999px;pointer-events:none;z-index:0}.dash-orb-1{top:-10%;left:-10%;width:50vw;height:50vw;background:#2dd4bf4d;filter:blur(120px)}.dash-orb-2{right:-10%;bottom:-10%;width:60vw;height:60vw;background:#67e8f966;filter:blur(150px)}.dash-orb-3{top:30%;right:20%;width:30vw;height:30vw;background:#34d39933;filter:blur(100px)}.dash-sidebar{width:256px;margin:24px 0 24px 24px;height:calc(100vh - 48px);padding:24px;background:#ffffff6b;border:1px solid rgba(255,255,255,.6);border-radius:32px;backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px);box-shadow:0 8px 30px #0000000a;display:flex;flex-direction:column;gap:18px;z-index:2;flex-shrink:0}.dash-logo-row{display:flex;align-items:center;gap:8px;margin-bottom:14px;padding-left:8px}.dash-logo-dot{width:32px;height:32px;border-radius:999px;display:grid;place-items:center;color:#fff;font-weight:700;background:linear-gradient(135deg,#0f766e,#06b6d4);box-shadow:0 10px 22px #0d948847}.dash-logo-text{font-size:1.25rem;font-weight:500;letter-spacing:-.03em}.dash-nav{display:grid;gap:6px;flex:1;align-content:start}.dash-nav-item{border:0;background:transparent;min-height:50px;border-radius:18px;display:flex;align-items:center;gap:12px;color:#6b7280;padding:0 16px;position:relative;cursor:pointer;text-align:left;font-size:1rem;font-weight:400;transition:.2s ease}.dash-nav-item:hover{background:#ffffff59;color:#111827}.dash-nav-item.active{background:#ffffffa8;color:#0f766e;border:1px solid rgba(255,255,255,.82);box-shadow:0 6px 14px #0f172a08;font-weight:500}.dash-nav-item.active:before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;border-radius:999px;background:#0ea5a4}.dash-nav-icon{display:grid;place-items:center}.dash-nav-icon.accent{color:#0f766e}.dash-nav-label{white-space:nowrap}.dash-nav-divider{height:1px;margin:6px 16px;background:#ffffff8c}.dash-nav-badge{margin-left:auto;width:20px;height:20px;border-radius:999px;font-size:.7rem;display:grid;place-items:center;color:#fff;background:#06b6d4}.dash-nav-dot{margin-left:auto;width:7px;height:7px;border-radius:999px;background:#10b981;box-shadow:0 0 8px #10b981cc}.dash-sidebar-pro{margin-top:auto;border-radius:18px;border:1px solid rgba(20,184,166,.2);background:linear-gradient(135deg,#14b8a614,#06b6d414);padding:14px;position:relative;overflow:hidden;text-align:center}.dash-sidebar-pro svg{color:#0f766e;margin:0 auto 8px;position:relative;z-index:1}.dash-sidebar-pro-glow{position:absolute;top:-22px;right:-22px;width:88px;height:88px;border-radius:999px;background:#14b8a633;filter:blur(20px)}.dash-sidebar-pro h4{position:relative;z-index:1;margin:0 0 4px;font-size:.86rem}.dash-sidebar-pro p{position:relative;z-index:1;margin:0;color:#6b7280;font-size:.76rem}.dash-main{flex:1;margin:24px 24px 24px 32px;height:calc(100vh - 48px);overflow-y:auto;padding-right:8px;z-index:1}.custom-scrollbar::-webkit-scrollbar{width:6px}.custom-scrollbar::-webkit-scrollbar-track{background:transparent}.custom-scrollbar::-webkit-scrollbar-thumb{background-color:#14b8a633;border-radius:20px}.custom-scrollbar::-webkit-scrollbar-thumb:hover{background-color:#14b8a666}.dash-topbar{display:flex;justify-content:flex-end;align-items:center;gap:10px;margin-bottom:28px;padding-top:8px;position:relative;z-index:5}.dash-topbar-actions{display:inline-flex;align-items:center;gap:8px}.dash-theme-btn{border:1px solid rgba(255,255,255,.8);background:#ffffff9e;border-radius:999px;padding:8px 12px;display:inline-flex;align-items:center;gap:7px;color:#111827;cursor:pointer;font-size:.75rem;font-weight:500}.dash-theme-btn:hover{background:#ffffffd6}.dash-profile-wrap{position:relative}.dash-profile-btn{border:1px solid rgba(255,255,255,.8);background:#ffffff9e;border-radius:999px;padding:6px 12px 6px 6px;display:flex;align-items:center;gap:8px;color:#111827;cursor:pointer}.dash-profile-avatar{width:32px;height:32px;border-radius:999px;border:1px solid rgba(255,255,255,.8);object-fit:cover}.dash-profile-avatar-fallback{background:linear-gradient(135deg,#0f766e,#06b6d4);display:grid;place-items:center;color:#fff;font-size:.86rem;font-weight:600}.dash-profile-menu{position:absolute;top:calc(100% + 8px);right:0;width:220px;background:#ffffffd1;border:1px solid rgba(255,255,255,.82);border-radius:16px;backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px);box-shadow:0 10px 36px #0000001a;padding:8px;opacity:0;visibility:hidden;transform:scale(.96);transform-origin:top right;transition:.18s ease}.dash-profile-wrap:hover .dash-profile-menu,.dash-profile-wrap:focus-within .dash-profile-menu{opacity:1;visibility:visible;transform:scale(1)}.dash-profile-menu button{width:100%;border:0;background:transparent;display:flex;align-items:center;gap:8px;border-radius:10px;padding:9px 10px;color:#4b5563;cursor:pointer}.dash-profile-menu button:hover{background:#ffffffe6;color:#111827}.dash-profile-menu .danger{color:#e11d48}.dash-profile-divider{height:1px;background:#d1d5dbcc;margin:6px 0}.dash-welcome{margin-bottom:28px}.dash-welcome h1{margin:0;font-size:clamp(2rem,4vw,2.9rem);font-weight:500;letter-spacing:-.03em;display:flex;align-items:center;gap:10px}.dash-welcome p{margin:8px 0 0;color:#6b7280}.dash-loading{margin:0 0 14px;color:#6b7280}.dash-grid{display:grid;grid-template-columns:2fr 1fr;gap:24px;padding-bottom:24px}.dash-grid-main,.dash-grid-side{display:grid;gap:24px;align-content:start}.dash-card{background:#fff9;border:1px solid rgba(255,255,255,.8);border-radius:24px;backdrop-filter:blur(22px);-webkit-backdrop-filter:blur(22px);box-shadow:0 8px 30px #00000008;padding:24px;transition:transform .22s ease,box-shadow .22s ease,background .22s ease}.dash-card:hover{transform:translateY(-1px);box-shadow:0 12px 34px #0f172a0f}.dash-card h2,.dash-card h3,.dash-card h4,.dash-card p{margin:0}.dash-card-head{margin-bottom:16px}.dash-card-head-inline{display:flex;align-items:center;justify-content:space-between;gap:8px}.dash-card-head h2{font-size:1.15rem;font-weight:500;letter-spacing:-.01em}.dash-job-list,.dash-message-list,.dash-sim-list,.dash-ai-list,.dash-agent-list{display:grid;gap:10px}.dash-job-item{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:12px;border-radius:16px;background:#ffffff80;border:1px solid rgba(255,255,255,.72);transition:.2s ease;cursor:pointer}.dash-job-item:hover{background:#fffc;box-shadow:0 4px 14px #0f172a0f}.dash-job-item:focus-visible{outline:2px solid rgba(20,184,166,.45);outline-offset:2px}.dash-job-left{display:flex;align-items:center;gap:10px;min-width:0}.dash-company-chip{width:40px;height:40px;border-radius:12px;background:#111827;color:#fff;display:grid;place-items:center;font-weight:600;flex-shrink:0}.dash-job-item h4{font-size:.95rem;margin-bottom:2px}.dash-job-item p{font-size:.8rem;color:#6b7280;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.dash-job-arrow-btn{width:32px;height:32px;border-radius:999px;border:1px solid #e5e7eb;background:#fff;display:grid;place-items:center;color:#9ca3af;cursor:pointer;flex-shrink:0;transition:background-color .2s ease,color .2s ease,border-color .2s ease}.dash-job-item:hover .dash-job-arrow-btn{background:#f0fdfa;color:#0f766e;border-color:#99f6e4}.dash-split-grid{display:grid;grid-template-columns:1fr 1fr;gap:24px}.dash-message-item,.dash-sim-item,.dash-agent-item{border-radius:14px;padding:10px;background:#ffffff75;border:1px solid rgba(255,255,255,.68);transition:.2s ease}.dash-message-item{display:flex;align-items:center;gap:10px}.dash-avatar{width:34px;height:34px;border-radius:999px;display:grid;place-items:center;background:linear-gradient(135deg,#14b8a633,#06b6d433);color:#0f766e;font-size:.76rem;font-weight:700;flex-shrink:0}.dash-message-item h4{font-size:.84rem;margin-bottom:1px}.dash-message-item p{color:#6b7280;font-size:.76rem}.dash-message-item:hover{background:#fffc}.dash-sim-item{display:flex;justify-content:space-between;align-items:center;font-size:.84rem;cursor:pointer}.dash-sim-item:hover{background:#ffffffd1}.dash-sim-left{display:flex;align-items:center;gap:10px}.dash-sim-left h4{margin:0;font-size:.84rem;font-weight:500}.dash-sim-left p{margin:0;color:#6b7280;font-size:.74rem}.dash-sim-icon{width:36px;height:36px;border-radius:10px;border:1px solid transparent;display:grid;place-items:center;flex-shrink:0}.dash-sim-icon.teal{background:#ecfdf5;border-color:#ccfbf1;color:#0f766e}.dash-sim-icon.purple{background:#f5f3ff;border-color:#ede9fe;color:#7c3aed}.dash-sim-icon.amber{background:#fffbeb;border-color:#fef3c7;color:#d97706}.dash-sim-icon.blue{background:#eff6ff;border-color:#dbeafe;color:#2563eb}.dash-sim-icon.gray{background:#f3f4f6;border-color:#e5e7eb;color:#6b7280}.dash-sim-right{text-align:right}.dash-sim-item strong{color:#059669;font-size:.8rem;display:block;margin-bottom:4px}.dash-sim-item strong.warn{color:#d97706}.dash-sim-item strong.na{color:#6b7280}.dash-progress{width:64px;height:6px;border-radius:999px;background:#e5e7eb;overflow:hidden}.dash-progress span{display:block;height:100%;border-radius:inherit;background:#10b981}.dash-progress span.warn{background:#f59e0b}.dash-ai-card{background:linear-gradient(135deg,#14b8a6,#06b6d4);color:#fff;position:relative;overflow:hidden;border-radius:24px;box-shadow:0 20px 32px -10px #14b8a638}.dash-ai-card:hover{transform:none;box-shadow:0 20px 32px -10px #14b8a638}.dash-ai-content{position:relative;z-index:10}.dash-ai-peel{position:absolute;top:-14px;right:-14px;width:96px;height:96px;border-bottom-left-radius:48px;border-top-right-radius:28px;background:#fff3;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-left:1px solid rgba(255,255,255,.45);border-bottom:1px solid rgba(255,255,255,.45);box-shadow:-10px 10px 20px #0000001a;transform-origin:top right;transition:transform .2s ease}.dash-ai-card-group:hover .dash-ai-peel{transform:scale(1.08)}.dash-ai-head{display:flex;align-items:center;gap:8px;margin-bottom:16px}.dash-ai-head svg{color:#ccfbf1}.dash-ai-card h3{font-size:1.125rem;margin-bottom:0;font-weight:500;letter-spacing:-.01em}.dash-ai-card p{color:#ccfbf1;margin-bottom:24px;font-size:.875rem;font-weight:400}.dash-ai-list{margin:0;padding:0;list-style:none;display:grid;gap:12px}.dash-ai-item{display:flex;align-items:flex-start;gap:12px;padding:12px;border-radius:16px;background:#ffffff1a;border:1px solid rgba(255,255,255,.2);cursor:pointer;transition:background-color .2s ease}.dash-ai-item:hover{background:#fff3}.dash-ai-item-icon{margin-top:2px;width:24px;height:24px;border-radius:999px;border:0;background:#fff3;display:grid;place-items:center;flex-shrink:0}.dash-ai-item strong{display:block;font-size:.875rem;margin-bottom:2px;color:#fff;font-weight:500}.dash-ai-item small{display:block;font-size:.75rem;color:#ccfbf1;line-height:1.4}.dash-ai-card button{width:100%;margin-top:16px;border:0;border-radius:12px;padding:10px 12px;font-size:.875rem;font-weight:500;color:#0f766e;background:#fff;cursor:pointer;box-shadow:0 1px 2px #0f172a1f;transition:background-color .2s ease}.dash-ai-card button:hover{background:#f0fdfa}.dash-ai-xl-only{display:none}.dash-agent-item span{display:block;font-size:.84rem;font-weight:500}.dash-agent-item small{display:inline-flex;align-items:center;gap:4px;color:#6b7280;font-size:.75rem}.dash-agent-item{display:flex;align-items:center;justify-content:space-between}.dash-agent-item:hover{background:#ffffffd1}.dash-agent-item.muted{opacity:.72}.dash-agent-item.muted:hover{opacity:1}.dash-switch{position:relative;width:38px;height:22px;display:inline-block;flex-shrink:0}.dash-switch input{position:absolute;opacity:0;inset:0}.dash-switch span{position:absolute;inset:0;background:#d1d5db;border-radius:999px;transition:.2s ease}.dash-switch span:after{content:"";position:absolute;width:16px;height:16px;border-radius:999px;background:#fff;top:3px;left:3px;transition:.2s ease;box-shadow:0 1px 2px #0f172a33}.dash-switch input:checked+span{background:#14b8a6}.dash-switch input:checked+span:after{transform:translate(16px)}.dash-icon-btn{width:32px;height:32px;border-radius:999px;border:1px solid #e5e7eb;background:#fff;color:#4b5563;display:grid;place-items:center;cursor:pointer;transition:.2s ease}.dash-icon-btn:hover{color:#0f766e;border-color:#99f6e4;background:#f0fdfa}.dash-outline-btn{width:100%;margin-top:10px;border:1px dashed rgba(156,163,175,.6);background:transparent;border-radius:10px;padding:10px;color:#6b7280;cursor:pointer;transition:.2s ease}.dash-outline-btn:hover{border-color:#4b556399;color:#1f2937}.dash-muted{color:#6b7280;font-size:.82rem}.theme-dark.dash-root{background:#0a0a0a;color:#d1d5db}.theme-dark .dash-orb-1{background:#14b8a61a}.theme-dark .dash-orb-2{background:#06b6d41a}.theme-dark .dash-orb-3{background:#10b9811a}.theme-dark .dash-sidebar{background:#ffffff05;border-color:#ffffff0d;box-shadow:0 8px 30px #0003}.theme-dark .dash-logo-text,.theme-dark .dash-welcome h1,.theme-dark .dash-card h2,.theme-dark .dash-card h3,.theme-dark .dash-card h4{color:#fff}.theme-dark .dash-nav-item{color:#9ca3af}.theme-dark .dash-nav-item:hover{background:#ffffff0d;color:#f3f4f6}.theme-dark .dash-nav-item.active{background:#ffffff1a;border-color:#ffffff14;color:#2dd4bf}.theme-dark .dash-nav-divider,.theme-dark .dash-sidebar-pro p,.theme-dark .dash-welcome p,.theme-dark .dash-loading,.theme-dark .dash-muted{color:#9ca3af}.theme-dark .dash-sidebar-pro{background:linear-gradient(135deg,#14b8a61a,#06b6d40d);border-color:#14b8a633}.theme-dark .dash-topbar .dash-theme-btn,.theme-dark .dash-profile-btn{border-color:#ffffff14;background:#ffffff08;color:#f3f4f6}.theme-dark .dash-topbar .dash-theme-btn:hover,.theme-dark .dash-profile-btn:hover{background:#ffffff14}.theme-dark .dash-profile-menu{background:#12141af2;border-color:#ffffff1a}.theme-dark .dash-profile-menu button{color:#d1d5db}.theme-dark .dash-profile-menu button:hover{background:#ffffff0d;color:#fff}.theme-dark .dash-card:not(.dash-ai-card){background:#ffffff05;border-color:#ffffff0d;box-shadow:0 4px 20px #0000001a}.theme-dark .dash-ai-card{background:linear-gradient(135deg,#14b8a6,#06b6d4);border-color:#ffffff26;box-shadow:0 20px 32px -10px #14b8a638}.theme-dark .dash-job-item,.theme-dark .dash-message-item,.theme-dark .dash-sim-item,.theme-dark .dash-agent-item{background:#ffffff05;border-color:#ffffff0d}.theme-dark .dash-job-item:hover,.theme-dark .dash-message-item:hover,.theme-dark .dash-sim-item:hover,.theme-dark .dash-agent-item:hover{background:#ffffff0d;border-color:#ffffff1a}.theme-dark .dash-job-item p,.theme-dark .dash-message-item p,.theme-dark .dash-sim-left p,.theme-dark .dash-agent-item small{color:#9ca3af}.theme-dark .dash-job-arrow-btn,.theme-dark .dash-icon-btn{border-color:#ffffff1a;background:#ffffff0d;color:#6b7280}.theme-dark .dash-job-item:hover .dash-job-arrow-btn,.theme-dark .dash-icon-btn:hover{background:#14b8a61a;color:#2dd4bf;border-color:#14b8a64d}.theme-dark .dash-company-chip{background:#1f2937;border:1px solid rgba(255,255,255,.08)}.theme-dark .dash-progress{background:#ffffff1a}@media(max-width:1200px){.dash-grid{grid-template-columns:1fr}}@media(max-width:980px){.dash-root{display:block}.dash-sidebar,.dash-main{width:auto;height:auto;margin:16px}.dash-main{padding-right:0}.dash-split-grid{grid-template-columns:1fr}}@media(min-width:1280px){.dash-ai-xl-only{display:flex}}.ai-agent-main{display:flex;flex-direction:column}.ai-head{margin-bottom:20px}.ai-head h1{margin:0 0 8px;font-size:clamp(2rem,4vw,2.9rem);font-weight:500;letter-spacing:-.03em}.ai-head p{margin:0;color:#6b7280;font-size:1.05rem}.theme-dark .ai-head h1,.theme-dark .ai-head p,.theme-dark .ai-jobs-head h3,.theme-dark .ai-agents-section h3,.theme-dark .ai-create-title h2{color:#fff}.theme-dark .ai-head p,.theme-dark .ai-jobs-head span,.theme-dark .ai-agent-chip-left p,.theme-dark .ai-job-title-wrap p,.theme-dark .ai-job-bottom span{color:#9ca3af}.ai-create-card{margin-bottom:26px;background:#fff9;border:1px solid rgba(255,255,255,.8);border-radius:24px;backdrop-filter:blur(22px);-webkit-backdrop-filter:blur(22px);box-shadow:0 8px 30px #00000008;padding:24px}.theme-dark .ai-create-card,.theme-dark .ai-agent-chip-card,.theme-dark .ai-job-card{background:#ffffff05;border-color:#ffffff0d;box-shadow:0 4px 20px #0000001a}.ai-create-title{display:flex;align-items:center;gap:10px;margin-bottom:18px}.ai-create-icon{width:40px;height:40px;border-radius:999px;background:#f0fdfa;border:1px solid #ccfbf1;color:#0f766e;display:grid;place-items:center}.ai-create-title h2{margin:0;font-size:1.2rem;font-weight:500}.ai-form-grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:16px}.ai-field{display:grid;gap:6px}.ai-field label{margin-left:4px;font-size:.83rem;font-weight:500;color:#374151}.theme-dark .ai-field label,.theme-dark .ai-distance-head label{color:#d1d5db}.ai-field input,.ai-field select{width:100%;border-radius:12px;border:1px solid rgba(255,255,255,.82);background:#ffffff80;padding:10px 12px;font-size:.84rem;color:#111827}.theme-dark .ai-field input,.theme-dark .ai-field select,.theme-dark .ai-location-wrap input{background:#ffffff08;border-color:#ffffff14;color:#f3f4f6}.ai-field input:focus,.ai-field select:focus{outline:none;border-color:#2dd4bfe6;box-shadow:0 0 0 4px #14b8a61a}.ai-location-wrap{position:relative}.ai-location-wrap svg{position:absolute;left:11px;top:50%;transform:translateY(-50%);color:#9ca3af}.ai-location-wrap input{padding-left:34px}.ai-distance-field{align-content:center}.ai-distance-head{display:flex;align-items:center;justify-content:space-between}.ai-distance-head span{font-size:.72rem;color:#0f766e;border:1px solid #ccfbf1;border-radius:8px;background:#f0fdfa;padding:3px 8px;font-weight:500}.ai-distance-field input[type=range]{appearance:none;width:100%;height:6px;border-radius:999px;background:#ffffffd9;border:1px solid rgba(255,255,255,.9)}.ai-distance-field input[type=range]::-webkit-slider-thumb{appearance:none;width:16px;height:16px;background:#14b8a6;border-radius:50%;cursor:pointer;border:2px solid #fff;box-shadow:0 1px 3px #0000001a}.ai-distance-field input[type=range]::-moz-range-thumb{width:16px;height:16px;background:#14b8a6;border-radius:50%;cursor:pointer;border:2px solid #fff;box-shadow:0 1px 3px #0000001a}.ai-create-actions{margin-top:20px;display:flex;justify-content:flex-end}.ai-create-actions button{border:0;border-radius:12px;background:#111827;color:#fff;padding:10px 16px;font-size:.84rem;font-weight:500;display:inline-flex;align-items:center;gap:8px;cursor:pointer}.ai-create-actions button:hover{background:#1f2937}.theme-dark .ai-create-actions button{background:#ffffff1a;border:1px solid rgba(255,255,255,.1)}.ai-agents-section{margin-bottom:20px}.ai-agents-section h3{margin:0 0 10px;padding-left:4px;font-size:1.08rem;font-weight:500}.ai-agents-row{display:flex;gap:12px;overflow-x:auto;padding-bottom:8px}.ai-agent-chip-card{min-width:280px;background:#ffffffb8;border:1px solid rgba(255,255,255,.82);border-radius:16px;padding:14px;position:relative;overflow:hidden}.ai-agent-card-head{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}.ai-agent-chip-left{display:flex;align-items:center;gap:8px}.ai-agent-mini-icon{width:30px;height:30px;border-radius:8px;display:grid;place-items:center;color:#fff}.ai-agent-mini-icon.teal{background:#14b8a6}.ai-agent-mini-icon.indigo{background:#6366f1}.ai-agent-chip-left h4{margin:0;font-size:.84rem;font-weight:500}.ai-agent-chip-left p{margin:1px 0 0;font-size:.72rem;color:#6b7280}.ai-toggle{width:40px;height:20px;border-radius:999px;border:1px solid rgba(156,163,175,.3);background:#d1d5db;padding:0;position:relative;cursor:pointer}.ai-toggle span{width:14px;height:14px;border-radius:999px;background:#fff;position:absolute;left:2px;top:2px;transition:transform .2s ease}.ai-toggle.on{background:#14b8a6}.ai-toggle.on span{transform:translate(20px)}.ai-tags{margin-top:10px;display:flex;flex-wrap:wrap;gap:6px}.ai-tags span{font-size:.68rem;color:#4b5563;border-radius:8px;background:#fff;border:1px solid rgba(229,231,235,.85);padding:3px 8px}.theme-dark .ai-agent-chip-left h4,.theme-dark .ai-job-title-wrap h4{color:#fff}.theme-dark .ai-tags span,.theme-dark .ai-job-tags span{color:#d1d5db;background:#ffffff0d;border-color:#ffffff1a}.ai-jobs-head{margin-bottom:10px;display:flex;align-items:center;justify-content:space-between;gap:10px}.ai-jobs-head h3{margin:0;display:inline-flex;align-items:center;gap:7px;font-size:1.08rem;font-weight:500}.ai-jobs-head h3 svg{color:#14b8a6}.ai-jobs-head span{color:#6b7280;font-size:.7rem;border-radius:8px;border:1px solid rgba(255,255,255,.8);background:#ffffff80;padding:5px 8px}.ai-jobs-grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:14px;margin-bottom:10px}.ai-job-card{position:relative;overflow:hidden;background:#fff9;border:1px solid rgba(255,255,255,.8);border-radius:22px;backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);box-shadow:0 8px 24px #00000008;padding:16px;display:flex;flex-direction:column;cursor:pointer}.ai-job-card:hover{transform:translateY(-2px);box-shadow:0 10px 26px #0f172a12}.ai-job-card:focus-visible{outline:2px solid rgba(20,184,166,.45);outline-offset:2px}.ai-job-rail{position:absolute;top:0;right:0;width:8px;height:100%}.ai-job-rail.teal{background:#14b8a633}.ai-job-rail.indigo{background:#6366f133}.ai-job-top{padding-right:10px;display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:10px}.ai-company-logo,.ai-company-logo-fallback{width:46px;height:46px;border-radius:10px;object-fit:cover;border:1px solid rgba(229,231,235,.85);background:#fff}.ai-company-logo-fallback{display:grid;place-items:center;color:#111827;font-weight:600}.ai-match-col{display:grid;justify-items:end;gap:4px}.ai-match-pill{display:inline-flex;align-items:center;gap:4px;border-radius:8px;border:1px solid #ccfbf1;background:#f0fdfa;color:#0f766e;padding:4px 8px;font-size:.7rem;font-weight:500}.ai-match-col small{font-size:.62rem;color:#9ca3af;text-transform:uppercase;letter-spacing:.04em}.ai-job-title-wrap{margin-bottom:10px}.ai-job-title-wrap h4{margin:0;font-size:.94rem;font-weight:500;color:#111827}.ai-job-title-wrap p{margin:2px 0 0;color:#6b7280;font-size:.78rem}.ai-job-tags{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:12px}.ai-job-tags span{font-size:.66rem;color:#4b5563;border:1px solid rgba(229,231,235,.85);background:#ffffffd1;border-radius:8px;padding:4px 8px}.ai-job-bottom{margin-top:auto;padding-top:10px;border-top:1px solid rgba(255,255,255,.82);display:flex;justify-content:space-between;align-items:center}.theme-dark .ai-job-bottom{border-top-color:#ffffff14}.ai-job-bottom span{font-size:.66rem;color:#9ca3af}.ai-job-bottom button{border:0;background:transparent;color:#111827;font-size:.78rem;font-weight:500;display:inline-flex;align-items:center;gap:4px;cursor:pointer}.ai-job-bottom button:hover{color:#0f766e}.theme-dark .ai-job-bottom button{color:#f3f4f6}.theme-dark .ai-job-bottom button:hover{color:#2dd4bf}@media(max-width:1200px){.ai-form-grid,.ai-jobs-grid{grid-template-columns:1fr 1fr}}@media(max-width:860px){.ai-form-grid{grid-template-columns:1fr}.ai-create-actions{justify-content:stretch}.ai-create-actions button{width:100%;justify-content:center}.ai-jobs-head{flex-direction:column;align-items:flex-start}.ai-jobs-grid{grid-template-columns:1fr}}.cv-head{margin-bottom:22px;display:flex;justify-content:space-between;align-items:flex-end;gap:12px}.cv-design-toggle{border:1px solid rgba(255,255,255,.8);background:#ffffff9e;border-radius:999px;padding:8px 12px;display:inline-flex;align-items:center;gap:8px;color:#111827;cursor:pointer;transition:background-color .2s ease;font-size:.8rem;font-weight:500}.cv-design-toggle:hover{background:#ffffffd6}.cv-head h1{margin:0 0 8px;font-size:clamp(2rem,4vw,2.9rem);font-weight:500;letter-spacing:-.03em}.cv-head p{margin:0;color:#6b7280;font-size:1.1rem}.cv-edit-btn{border:0;border-radius:12px;background:#111827;color:#fff;padding:10px 16px;font-size:.88rem;font-weight:500;display:inline-flex;align-items:center;gap:8px;cursor:pointer;box-shadow:0 6px 14px #0f172a29}.cv-edit-btn:hover{background:#1f2937}.cv-layout{display:grid;grid-template-columns:1fr 2fr;gap:24px;padding-bottom:24px}.cv-left,.cv-right{display:grid;gap:24px;align-content:start}.cv-card{background:#fff9;border:1px solid rgba(255,255,255,.8);border-radius:24px;backdrop-filter:blur(22px);-webkit-backdrop-filter:blur(22px);box-shadow:0 8px 30px #00000008;padding:24px}.cv-avatar-wrap{display:flex;justify-content:center;margin-bottom:16px}.cv-avatar{width:96px;height:96px;border-radius:22px;object-fit:cover;border:4px solid rgba(255,255,255,.85);box-shadow:0 8px 16px #0f172a1f}.cv-avatar-fallback{background:linear-gradient(135deg,#0f766e,#06b6d4);color:#fff;display:grid;place-items:center;font-size:2rem;font-weight:600}.cv-section-head{display:flex;align-items:center;gap:8px;margin-bottom:14px}.cv-section-head svg{color:#0f766e}.cv-section-head h2{margin:0;font-size:1.08rem;font-weight:500;letter-spacing:-.01em}.cv-personal-list{display:grid;gap:10px}.cv-personal-list div{display:flex;justify-content:space-between;gap:8px;align-items:center;border-bottom:1px solid rgba(255,255,255,.62);padding-bottom:8px}.cv-personal-list div:last-child{border-bottom:0;padding-bottom:0}.cv-personal-list span{color:#6b7280;font-size:.84rem}.cv-personal-list strong{color:#111827;font-size:.84rem;font-weight:500;text-align:right}.cv-chip-wrap{display:flex;flex-wrap:wrap;gap:8px}.cv-chip{display:inline-flex;align-items:center;padding:6px 12px;border-radius:10px;background:#fff;border:1px solid rgba(229,231,235,.85);box-shadow:0 1px 3px #0f172a0f;color:#374151;font-size:.74rem;font-weight:500}.cv-language-list{display:grid;gap:10px}.cv-language-list div{display:flex;justify-content:space-between;align-items:center}.cv-language-list strong{font-size:.86rem;font-weight:500;color:#111827}.cv-language-list span{font-size:.72rem;color:#0f766e;background:#f0fdfa;border:1px solid #ccfbf1;border-radius:8px;padding:4px 10px}.cv-mini-grid{display:grid;gap:24px}.cv-list{margin:0;padding:0;list-style:none;display:grid;gap:8px}.cv-list li{display:inline-flex;align-items:center;gap:6px;font-size:.84rem;color:#374151}.cv-list li svg{color:#14b8a6}.cv-timeline-head{display:flex;align-items:center;gap:10px;margin-bottom:18px}.cv-timeline-icon{width:40px;height:40px;border-radius:999px;border:1px solid rgba(255,255,255,.85);background:#fffc;display:grid;place-items:center;box-shadow:0 2px 8px #0f172a14}.cv-timeline-icon svg{color:#0f766e}.cv-timeline-head h2{margin:0;font-size:1.45rem;letter-spacing:-.01em;font-weight:500}.cv-timeline{position:relative;display:grid;gap:18px}.cv-timeline:before{content:"";position:absolute;left:19px;top:0;bottom:0;width:2px;background:linear-gradient(to bottom,#5eead4,#a5f3fc,transparent)}.cv-timeline-item{display:flex;align-items:flex-start;gap:10px;position:relative}.cv-timeline-dot{width:40px;height:40px;border-radius:999px;border:4px solid #ecf0f0;background:#fff;display:grid;place-items:center;box-shadow:0 2px 8px #0f172a14;z-index:2;flex-shrink:0}.cv-timeline-dot svg{color:#0f766e}.cv-timeline-card{width:calc(100% - 50px);background:#fff9;border:1px solid rgba(255,255,255,.8);border-radius:24px;backdrop-filter:blur(22px);-webkit-backdrop-filter:blur(22px);box-shadow:0 8px 30px #00000008;padding:18px;transition:.2s ease}.cv-timeline-card:hover{background:#ffffffd1;box-shadow:0 10px 24px #0f172a14}.cv-timeline-card h3{margin:0 0 8px;font-size:1rem;font-weight:500;color:#111827}.cv-meta{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:10px}.cv-meta strong{color:#0f766e;font-size:.84rem;font-weight:500}.cv-meta span{color:#6b7280;font-size:.72rem;border:1px solid #e5e7eb;background:#fff;border-radius:6px;padding:2px 8px}.cv-timeline-card p{margin:0;color:#4b5563;font-size:.84rem;line-height:1.55}.cv-divider{height:1px;background:#fff9}.cv-design-reference .cv-card{border-radius:28px;box-shadow:0 10px 28px #0f172a0d}.cv-design-reference .cv-timeline-head h2{font-size:1.55rem}.theme-dark .cv-head h1,.theme-dark .cv-head p,.theme-dark .cv-timeline-head h2,.theme-dark .cv-section-head h2,.theme-dark .cv-personal-list strong,.theme-dark .cv-language-list strong,.theme-dark .cv-timeline-card h3{color:#fff}.theme-dark .cv-head p,.theme-dark .cv-personal-list span,.theme-dark .cv-list li,.theme-dark .cv-meta span,.theme-dark .cv-timeline-card p{color:#9ca3af}.theme-dark .cv-design-toggle{border-color:#ffffff14;background:#ffffff08;color:#f3f4f6}.theme-dark .cv-design-toggle:hover{background:#ffffff14}.theme-dark .cv-card,.theme-dark .cv-timeline-card{background:#ffffff05;border-color:#ffffff0d;box-shadow:0 4px 20px #0000001a}.theme-dark .cv-chip{background:#ffffff0d;border-color:#ffffff1a;color:#d1d5db}.theme-dark .cv-language-list span{color:#2dd4bf;background:#14b8a61a;border-color:#14b8a64d}.theme-dark .cv-timeline:before{background:linear-gradient(to bottom,rgba(20,184,166,.5),rgba(6,182,212,.3),transparent)}.theme-dark .cv-timeline-dot{background:#111827;border-color:#0a0a0a}.theme-dark .cv-meta strong{color:#2dd4bf}.theme-dark .cv-divider{background:#ffffff14}@media(max-width:1200px){.cv-layout{grid-template-columns:1fr}.cv-head{flex-direction:column;align-items:flex-start}}@media(min-width:980px){.cv-design-reference .cv-timeline:before{left:50%;transform:translate(-50%);background:linear-gradient(to bottom,#86efac,#67e8f9,transparent)}.cv-design-reference .cv-timeline-item{justify-content:space-between}.cv-design-reference .cv-timeline-item:nth-child(odd){flex-direction:row-reverse}.cv-design-reference .cv-timeline-dot{position:absolute;left:50%;transform:translate(-50%)}.cv-design-reference .cv-timeline-card{width:calc(50% - 2.5rem);padding:24px;border-radius:28px}}@media(max-width:860px){.cv-design-toggle span{display:none}}.job-detail-back-btn{border:1px solid rgba(255,255,255,.82);background:#ffffff9e;border-radius:999px;padding:8px 13px;display:inline-flex;align-items:center;gap:8px;color:#4b5563;cursor:pointer;font-size:.8rem;font-weight:500}.job-detail-back-btn:hover{background:#ffffffd6;color:#111827}.job-detail-back-row{margin-bottom:16px}.job-detail-header{margin-bottom:24px;display:flex;align-items:flex-start;gap:18px}.job-detail-logo-wrap{width:80px;height:80px;border-radius:18px;overflow:hidden;flex-shrink:0}.job-detail-logo-image,.job-detail-logo-fallback{width:100%;height:100%;object-fit:cover;border-radius:18px;border:1px solid rgba(229,231,235,.9)}.job-detail-logo-fallback{background:#fff;display:grid;place-items:center;color:#111827;font-size:1.9rem;font-weight:600}.job-detail-heading h1{margin:0 0 10px;font-size:clamp(2rem,3.8vw,2.8rem);letter-spacing:-.03em;color:#111827}.job-detail-meta{display:flex;flex-wrap:wrap;gap:10px 14px}.job-detail-meta span{display:inline-flex;align-items:center;gap:6px;color:#6b7280;font-size:.86rem}.job-detail-grid{display:grid;grid-template-columns:minmax(0,2.35fr) minmax(0,.65fr);gap:24px;padding-bottom:20px}.job-detail-main-card{display:grid;gap:20px}.job-detail-section h2,.job-detail-section h3{margin:0 0 10px;color:#111827;font-weight:500;letter-spacing:-.01em}.job-detail-section h2{font-size:1.2rem}.job-detail-section h3{font-size:1rem}.job-detail-section p{margin:0;color:#4b5563;line-height:1.65;font-size:.95rem}.job-detail-description-list{display:grid;gap:10px}.job-detail-rich-html{color:#4b5563;line-height:1.65;font-size:.95rem}.job-detail-rich-html p,.job-detail-rich-html ul,.job-detail-rich-html ol{margin:0 0 12px}.job-detail-rich-html ul,.job-detail-rich-html ol{padding-left:20px}.job-detail-rich-html li{margin-bottom:6px}.job-detail-rich-html a{color:#0f766e}.job-detail-info-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}.job-detail-info-grid>div{border:1px solid rgba(229,231,235,.82);background:#ffffffa3;border-radius:12px;padding:11px 12px;display:grid;gap:4px}.job-detail-info-grid span{color:#6b7280;font-size:.76rem}.job-detail-info-grid strong{color:#111827;font-size:.86rem;font-weight:600}.job-detail-side-col{display:grid;gap:16px;align-content:start}.job-detail-actions-card{display:grid;gap:10px;position:static}.job-detail-actions-card h2{margin:0 0 4px;color:#111827;font-size:1.03rem;font-weight:500}.job-detail-action-primary,.job-detail-action-secondary{border-radius:14px;border:1px solid;padding:11px 12px;display:flex;align-items:center;justify-content:space-between;font-size:.86rem;font-weight:500;cursor:pointer;transition:background-color .2s ease}.job-detail-action-primary{color:#0f766e;border-color:#99f6e4;background:linear-gradient(to right,#ecfeff,#f0fdfa)}.job-detail-action-primary:hover{background:linear-gradient(to right,#cffafe,#ccfbf1)}.job-detail-action-secondary{color:#3730a3;border-color:#c7d2fe;background:linear-gradient(to right,#eef2ff,#f5f3ff)}.job-detail-action-secondary:hover{background:linear-gradient(to right,#e0e7ff,#ede9fe)}.job-detail-action-primary span,.job-detail-action-secondary span{display:inline-flex;align-items:center;gap:8px}.job-detail-action-divider{height:1px;background:#e5e7ebd6;margin:3px 0}.job-detail-text-action{border:0;background:transparent;display:inline-flex;align-items:center;gap:8px;color:#4b5563;border-radius:10px;padding:9px 10px;font-size:.84rem;font-weight:500;cursor:pointer;text-decoration:none}.job-detail-text-action:hover{background:#f9fafbeb;color:#111827}.job-detail-text-action:disabled{opacity:.7;cursor:not-allowed}.job-detail-text-action.link{justify-content:flex-start}.job-detail-text-action.success:hover{background:#ecfdf5;color:#047857}.job-detail-text-action.success.is-done{color:#059669}.job-detail-company-card h3{margin:0 0 12px;color:#111827;font-size:1rem;font-weight:500}.job-detail-company-list{display:grid;gap:10px}.job-detail-company-list>div{border:1px solid rgba(229,231,235,.82);background:#ffffffa3;border-radius:12px;padding:10px 12px;display:grid;gap:4px}.job-detail-company-list span{color:#6b7280;font-size:.74rem}.job-detail-company-list strong{color:#111827;font-size:.86rem}.theme-dark .job-detail-back-btn{border-color:#ffffff14;background:#ffffff08;color:#d1d5db}.theme-dark .job-detail-back-btn:hover{background:#ffffff14;color:#fff}.theme-dark .job-detail-heading h1,.theme-dark .job-detail-section h2,.theme-dark .job-detail-section h3,.theme-dark .job-detail-actions-card h2,.theme-dark .job-detail-company-card h3,.theme-dark .job-detail-info-grid strong,.theme-dark .job-detail-company-list strong{color:#fff}.theme-dark .job-detail-meta span,.theme-dark .job-detail-section p,.theme-dark .job-detail-rich-html,.theme-dark .job-detail-info-grid span,.theme-dark .job-detail-company-list span,.theme-dark .job-detail-text-action{color:#9ca3af}.theme-dark .job-detail-rich-html a{color:#2dd4bf}.theme-dark .job-detail-info-grid>div,.theme-dark .job-detail-company-list>div{border-color:#ffffff14;background:#ffffff08}.theme-dark .job-detail-action-divider{background:#ffffff14}.theme-dark .job-detail-text-action:hover{background:#ffffff14;color:#f3f4f6}@media(max-width:1180px){.job-detail-grid{grid-template-columns:1fr}}@media(max-width:760px){.job-detail-header{flex-direction:column;gap:12px}.job-detail-logo-wrap{width:68px;height:68px}.job-detail-info-grid{grid-template-columns:1fr}}.jobs-page-head{margin-bottom:28px}.jobs-page-head h1{margin:0 0 8px;font-size:clamp(2rem,4vw,2.9rem);font-weight:500;letter-spacing:-.03em;color:#111827}.jobs-page-head p{margin:0;color:#6b7280;font-size:1.1rem}.theme-dark .jobs-page-head h1,.theme-dark .jobs-page-head p,.theme-dark .jobs-content-head h2{color:#fff}.theme-dark .jobs-page-head p,.theme-dark .jobs-content-head span,.theme-dark .jobs-card-title p,.theme-dark .jobs-card-description,.theme-dark .jobs-card-distance{color:#9ca3af}.jobs-layout-toggle{border:1px solid rgba(255,255,255,.8);background:#ffffff9e;border-radius:999px;padding:8px 12px;display:inline-flex;align-items:center;gap:8px;color:#111827;cursor:pointer;transition:background-color .2s ease;font-size:.8rem;font-weight:500}.jobs-layout-toggle:hover{background:#ffffffd6}.theme-dark .jobs-layout-toggle{border-color:#ffffff14;background:#ffffff08;color:#f3f4f6}.theme-dark .jobs-layout-toggle:hover{background:#ffffff14}.jobs-grid{display:grid;grid-template-columns:1fr 2fr;gap:24px;padding-bottom:24px}.jobs-filter{position:sticky;top:0;height:fit-content}.theme-dark .jobs-filter,.theme-dark .jobs-card,.theme-dark .jobs-top-filters{background:#ffffff05;border-color:#ffffff0d;box-shadow:0 4px 20px #0000001a}.jobs-filter h2{margin:0 0 24px;font-size:1.1rem;font-weight:500;letter-spacing:-.01em;display:flex;align-items:center;gap:8px}.jobs-filter h2 svg{color:#0f766e}.theme-dark .jobs-filter h2,.theme-dark .jobs-top-filter-title h2,.theme-dark .jobs-card-title h3{color:#fff}.jobs-filter-block{margin-bottom:24px}.jobs-filter-block>label{display:block;margin-bottom:8px;font-size:.9rem;font-weight:500;color:#374151}.theme-dark .jobs-filter-block>label,.theme-dark .jobs-range-head label,.theme-dark .jobs-hours-row>div>label{color:#d1d5db}.jobs-filter-block>p{margin:0 0 12px;font-size:.74rem;color:#6b7280}.jobs-search-wrap{position:relative}.jobs-search-wrap svg{position:absolute;left:14px;top:50%;transform:translateY(-50%);color:#9ca3af}.jobs-search-wrap input{width:100%;border-radius:12px;border:1px solid rgba(255,255,255,.8);background:#ffffff80;padding:10px 14px 10px 40px;font-size:.87rem;color:#111827;transition:border-color .2s ease,background-color .2s ease,box-shadow .2s ease}.theme-dark .jobs-search-wrap input,.theme-dark .jobs-title-input-wrap,.theme-dark .jobs-title-input-wrap input,.theme-dark .jobs-radio-btn,.theme-dark .jobs-hour-btn{background:#ffffff08;border-color:#ffffff14;color:#d1d5db}.theme-dark .jobs-search-wrap input::placeholder,.theme-dark .jobs-title-input-wrap input::placeholder{color:#6b7280}.jobs-search-wrap input::placeholder{color:#9ca3af}.jobs-search-wrap input:focus{outline:none;border-color:#2dd4bfe6;background:#fff;box-shadow:0 0 0 4px #14b8a61a}.jobs-separator{height:1px;background:#fff9;margin-bottom:24px}.jobs-radio-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}.jobs-radio-btn{border:1px solid rgba(255,255,255,.55);background:#ffffff80;color:#6b7280;font-size:.84rem;font-weight:500;border-radius:12px;padding:10px 12px;cursor:pointer;transition:.2s ease}.jobs-radio-btn:hover{background:#ffffffd1}.jobs-radio-btn.active{color:#0f766e;background:#f0fdfa;border-color:#bae6fd}.theme-dark .jobs-radio-btn.active{color:#2dd4bf;background:#14b8a61a;border-color:#14b8a64d}.jobs-range-block{margin-bottom:28px}.jobs-range-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:12px}.jobs-range-head span{font-size:.84rem;font-weight:500;color:#0f766e;background:#f0fdfa;border:1px solid #ccfbf1;border-radius:6px;padding:2px 8px}.jobs-filter input[type=range]{-webkit-appearance:none;appearance:none;width:100%;background:transparent}.jobs-filter input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;height:20px;width:20px;border-radius:999px;background:#fff;border:2px solid #14b8a6;cursor:pointer;margin-top:-8px;box-shadow:0 2px 6px #0000001a}.jobs-filter input[type=range]::-webkit-slider-runnable-track{width:100%;height:4px;cursor:pointer;border-radius:2px;background:#14b8a633}.jobs-filter input[type=range]:focus{outline:none}.jobs-range-labels{display:flex;justify-content:space-between;margin-top:8px;font-size:.74rem;color:#9ca3af}.jobs-hours-grid{display:flex;flex-wrap:wrap;gap:8px}.jobs-hour-btn{width:40px;height:40px;border-radius:12px;border:1px solid rgba(255,255,255,.55);background:#ffffff80;color:#6b7280;font-size:.84rem;font-weight:500;cursor:pointer;transition:.2s ease}.jobs-hour-btn:hover{background:#ffffffd1}.jobs-hour-btn.active{background:#14b8a6;color:#fff;border-color:#0f766e}.theme-dark .jobs-hour-btn.active{background:#14b8a6;border-color:#14b8a680}.jobs-apply-btn{width:100%;margin-top:8px;border:0;border-radius:12px;background:#111827;color:#fff;padding:12px;font-size:.9rem;font-weight:500;cursor:pointer;transition:background-color .2s ease;box-shadow:0 6px 14px #0f172a29}.theme-dark .jobs-apply-btn{background:#ffffff1a;border:1px solid rgba(255,255,255,.1)}.jobs-apply-btn:hover{background:#1f2937}.jobs-content-head{margin-bottom:20px;display:flex;justify-content:space-between;align-items:center;gap:8px}.jobs-content-head h2{margin:0;font-size:1.25rem;font-weight:500;letter-spacing:-.01em;color:#111827}.jobs-content-head span{font-size:.9rem;color:#6b7280}.jobs-cards{display:grid;grid-template-columns:1fr 1fr;gap:24px}.jobs-card{background:#fff9;border:1px solid rgba(255,255,255,.8);border-radius:24px;backdrop-filter:blur(22px);-webkit-backdrop-filter:blur(22px);box-shadow:0 8px 30px #00000008;padding:24px;transition:transform .2s ease,background-color .2s ease,box-shadow .2s ease;display:flex;flex-direction:column;min-height:100%;cursor:pointer}.jobs-card:hover{background:#fffc;box-shadow:0 10px 24px #0f172a14;transform:translateY(-1px)}.jobs-card-top{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:16px}.jobs-card-logo{width:56px;height:56px;border-radius:16px;background:#111827;color:#fff;font-size:1.4rem;font-weight:500;display:grid;place-items:center;box-shadow:0 4px 10px #0f172a1f}.jobs-card-logo-image-wrap{background:#fff;border:1px solid rgba(229,231,235,.85);box-shadow:0 4px 10px #0f172a14;overflow:hidden}.jobs-card-logo-image{width:100%;height:100%;object-fit:cover}.jobs-card-title{margin-bottom:8px}.jobs-card-title h3{margin:0;font-size:1.1rem;font-weight:500;letter-spacing:-.01em;color:#111827;transition:color .2s ease}.theme-dark .jobs-card-title h3{color:#fff}.jobs-card:hover .jobs-card-title h3{color:#0f766e}.jobs-card-title p{margin:2px 0 0;font-size:.86rem;color:#6b7280}.jobs-card-description{margin:0 0 22px;color:#4b5563;font-size:.86rem;line-height:1.5;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.jobs-card-bottom{margin-top:auto;padding-top:14px;border-top:1px solid rgba(255,255,255,.65);display:flex;align-items:center;justify-content:space-between}.theme-dark .jobs-card-bottom{border-top-color:#ffffff14}.jobs-card-distance{display:inline-flex;align-items:center;gap:6px;color:#6b7280;font-size:.78rem}.jobs-card-distance svg{color:#0f766e}.jobs-card-arrow{width:32px;height:32px;border-radius:999px;border:1px solid #e5e7eb;color:#9ca3af;background:#fff;display:grid;place-items:center;cursor:pointer;transition:.2s ease}.theme-dark .jobs-card-arrow{background:#ffffff0d;border-color:#ffffff1a;color:#6b7280}.jobs-card:hover .jobs-card-arrow{background:#f0fdfa;color:#0f766e;border-color:#99f6e4}.jobs-load-more-wrap{margin-top:28px;display:flex;justify-content:center}.jobs-load-more{border:1px solid #d1d5db;border-radius:12px;background:#ffffff59;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);color:#4b5563;padding:10px 24px;font-size:.86rem;font-weight:500;cursor:pointer;transition:.2s ease}.jobs-load-more:hover{background:#fff9;color:#111827;border-color:#9ca3af}.jobs-top-layout{display:grid;gap:24px;padding-bottom:24px}.jobs-top-filters{padding:24px}.jobs-top-filter-title{display:flex;align-items:center;gap:8px;margin-bottom:20px}.jobs-top-filter-title h2{margin:0;font-size:1.1rem;font-weight:500;letter-spacing:-.01em}.jobs-top-filter-title svg{color:#0f766e}.jobs-top-controls{display:grid;grid-template-columns:1.3fr 1fr 1fr auto;gap:20px;align-items:end;margin-bottom:20px}.jobs-filter-block.no-margin{margin-bottom:0}.jobs-top-range{padding-bottom:4px}.jobs-top-apply{margin-top:0;min-width:180px}.jobs-title-picker{position:relative}.jobs-title-input-wrap{display:flex;flex-wrap:wrap;gap:8px;min-height:46px;border-radius:12px;border:1px solid rgba(255,255,255,.8);background:#ffffff80;padding:6px;align-items:center}.jobs-title-input-wrap:focus-within{border-color:#2dd4bfe6;background:#fff;box-shadow:0 0 0 4px #14b8a61a}.jobs-title-chip{display:inline-flex;align-items:center;gap:4px;padding:6px 10px;border-radius:10px;background:#fff;border:1px solid rgba(229,231,235,.8);box-shadow:0 1px 3px #0f172a0f;font-size:.72rem;font-weight:500;color:#374151}.jobs-title-chip button{border:0;background:transparent;color:#9ca3af;display:grid;place-items:center;cursor:pointer;padding:0}.jobs-title-chip button:hover{color:#111827}.jobs-title-input-wrap input{flex:1;min-width:180px;border:0;background:transparent;outline:none;font-size:.86rem;color:#374151;padding:6px 8px}.jobs-title-input-wrap input::placeholder{color:#9ca3af}.jobs-title-suggestions{position:absolute;top:calc(100% + 8px);left:0;width:min(100%,340px);background:#ffffffe6;border:1px solid rgba(255,255,255,.8);border-radius:16px;backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px);box-shadow:0 10px 36px #0000001a;padding:8px;display:grid;gap:4px;opacity:0;visibility:hidden;transform:scale(.98);transform-origin:top left;transition:.18s ease;z-index:40}.jobs-title-picker:focus-within .jobs-title-suggestions{opacity:1;visibility:visible;transform:scale(1)}.jobs-title-option{border:0;border-radius:10px;background:transparent;color:#4b5563;font-size:.84rem;font-weight:500;padding:10px 12px;display:flex;align-items:center;justify-content:space-between;cursor:pointer}.jobs-title-option:hover{background:#ffffffd9;color:#111827}.jobs-title-option.active{color:#0f766e;background:#14b8a61a}.jobs-title-option.active svg{color:#14b8a6}.jobs-separator.top-margin{margin:24px 0}.jobs-hours-row{display:flex;justify-content:space-between;gap:16px;align-items:center}.jobs-hours-row>div>label{display:block;margin-bottom:3px;font-size:.9rem;font-weight:500;color:#374151}.jobs-hours-row>div>p{margin:0;font-size:.74rem;color:#6b7280}.jobs-cards.jobs-cards-top{grid-template-columns:1fr 1fr 1fr}@media(max-width:1200px){.jobs-grid{grid-template-columns:1fr}.jobs-filter{position:static}.jobs-top-controls{grid-template-columns:1fr 1fr}.jobs-top-apply{width:100%}.jobs-hours-row{flex-direction:column;align-items:flex-start}.jobs-cards.jobs-cards-top{grid-template-columns:1fr 1fr}}@media(max-width:860px){.jobs-cards,.jobs-top-controls,.jobs-cards.jobs-cards-top{grid-template-columns:1fr}.jobs-layout-toggle span{display:none}}.msg-main{display:flex;flex-direction:column}.msg-head{margin-bottom:16px;display:flex;justify-content:space-between;gap:12px;align-items:flex-end}.msg-head h1{margin:0 0 8px;font-size:clamp(2rem,4vw,2.9rem);font-weight:500;letter-spacing:-.03em}.msg-head p{margin:0;color:#6b7280;font-size:1.05rem}.theme-dark .msg-head h1,.theme-dark .msg-head p{color:#fff}.theme-dark .msg-head p{color:#9ca3af}.msg-mark-btn{border:1px solid rgba(229,231,235,.85);background:#fff;color:#374151;border-radius:12px;padding:10px 16px;font-size:.84rem;font-weight:500;display:inline-flex;align-items:center;gap:8px;cursor:pointer;box-shadow:0 2px 8px #0f172a0f}.msg-mark-btn:hover{background:#f9fafb}.theme-dark .msg-mark-btn{border-color:#ffffff1a;background:#ffffff0d;color:#d1d5db}.theme-dark .msg-mark-btn:hover{background:#ffffff14}.msg-layout{flex:1;min-height:500px;margin-bottom:4px;display:flex;gap:24px}.msg-threads{width:33.333%;min-width:330px;background:#fff9;border:1px solid rgba(255,255,255,.8);border-radius:24px;backdrop-filter:blur(22px);-webkit-backdrop-filter:blur(22px);box-shadow:0 8px 30px #00000008;display:flex;flex-direction:column;overflow:hidden}.theme-dark .msg-threads,.theme-dark .msg-chat{background:#ffffff05;border-color:#ffffff0d;box-shadow:0 4px 20px #0000001a}.msg-threads-head{padding:16px;border-bottom:1px solid rgba(255,255,255,.62)}.msg-search-wrap{position:relative;margin-bottom:10px}.msg-search-wrap svg{position:absolute;left:12px;top:50%;transform:translateY(-50%);color:#9ca3af}.msg-search-wrap input{width:100%;border-radius:12px;border:1px solid rgba(255,255,255,.82);background:#ffffff80;padding:10px 12px 10px 38px;font-size:.86rem;color:#111827}.theme-dark .msg-search-wrap input{background:#ffffff08;border-color:#ffffff14;color:#f3f4f6}.msg-search-wrap input:focus{outline:none;border-color:#2dd4bfe6;box-shadow:0 0 0 4px #14b8a61a}.msg-filter-row{display:flex;gap:8px}.msg-filter-row button{border:1px solid rgba(255,255,255,.75);background:#ffffffa6;color:#4b5563;border-radius:10px;padding:6px 12px;font-size:.72rem;font-weight:500;cursor:pointer}.msg-filter-row button.active{background:#f0fdfa;border-color:#ccfbf1;color:#0f766e}.theme-dark .msg-filter-row button{background:#ffffff0d;border-color:#ffffff14;color:#9ca3af}.theme-dark .msg-filter-row button.active{background:#14b8a61a;border-color:#14b8a64d;color:#2dd4bf}.msg-thread-list{padding:10px;overflow-y:auto;display:grid;gap:6px}.msg-thread-item{width:100%;border:1px solid transparent;background:transparent;border-radius:16px;display:flex;align-items:flex-start;gap:10px;padding:10px;text-align:left;cursor:pointer;position:relative}.msg-thread-item:hover{background:#ffffff6b;border-color:#ffffff9e}.theme-dark .msg-thread-item:hover{background:#ffffff0d;border-color:#ffffff1a}.msg-thread-item.active{background:#ffffffd1;border-color:#fff;box-shadow:0 2px 8px #0f172a0d}.theme-dark .msg-thread-item.active{background:#ffffff1a;border-color:#ffffff1f}.msg-thread-item.active:before{content:"";position:absolute;left:0;top:10px;bottom:10px;width:4px;border-radius:999px;background:#14b8a6}.msg-thread-avatar-wrap{width:44px;height:44px;position:relative;flex-shrink:0}.msg-thread-avatar,.msg-thread-avatar-fallback{width:44px;height:44px;border-radius:999px;object-fit:cover}.msg-thread-avatar-fallback{background:linear-gradient(135deg,#c7d2fe,#e9d5ff);color:#4338ca;display:grid;place-items:center;font-size:.84rem;font-weight:600}.msg-thread-online{position:absolute;right:0;bottom:0;width:10px;height:10px;border-radius:999px;border:2px solid #fff;background:#22c55e}.msg-thread-content{min-width:0;flex:1}.msg-thread-row{display:flex;justify-content:space-between;align-items:baseline;gap:8px;margin-bottom:2px}.msg-thread-row h3{margin:0;font-size:.86rem;font-weight:500;color:#111827;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.theme-dark .msg-thread-row h3,.theme-dark .msg-chat-head h2{color:#fff}.msg-thread-row span{font-size:.72rem;color:#9ca3af;flex-shrink:0}.msg-thread-content p{margin:0;color:#6b7280;font-size:.8rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.theme-dark .msg-thread-content p,.theme-dark .msg-thread-content small,.theme-dark .msg-thread-row span{color:#9ca3af}.msg-thread-content p.unread{color:#1f2937;font-weight:500}.msg-thread-content small{margin-top:2px;display:inline-block;color:#9ca3af;font-size:.72rem}.msg-thread-unread{width:20px;height:20px;border-radius:999px;background:#14b8a6;color:#fff;display:grid;place-items:center;font-size:.64rem;font-weight:600;flex-shrink:0;margin-top:2px}.msg-chat{width:66.667%;background:#fff9;border:1px solid rgba(255,255,255,.8);border-radius:24px;backdrop-filter:blur(22px);-webkit-backdrop-filter:blur(22px);box-shadow:0 8px 30px #00000008;display:flex;flex-direction:column;overflow:hidden}.msg-chat-head{padding:14px 18px;border-bottom:1px solid rgba(255,255,255,.62);background:#ffffff4d;display:flex;justify-content:space-between;align-items:center}.theme-dark .msg-chat-head{background:#ffffff08;border-bottom-color:#ffffff14}.msg-chat-head h2{margin:0;font-size:1rem;font-weight:500;color:#111827}.msg-chat-company{display:flex;align-items:center;gap:12px}.msg-chat-company p{margin:2px 0 0;color:#0f766e;font-size:.74rem;font-weight:500}.theme-dark .msg-chat-company p{color:#2dd4bf}.msg-chat-avatar,.msg-chat-avatar-fallback{width:40px;height:40px;border-radius:999px;object-fit:cover}.msg-chat-avatar-fallback{display:grid;place-items:center;background:linear-gradient(135deg,#c7d2fe,#e9d5ff);color:#4338ca;font-size:.84rem;font-weight:600}.msg-chat-actions{display:flex;gap:8px}.msg-chat-actions button{width:34px;height:34px;border-radius:999px;border:1px solid rgba(255,255,255,.82);background:#ffffff8c;color:#4b5563;display:grid;place-items:center;cursor:pointer}.theme-dark .msg-chat-actions button{background:#ffffff0d;border-color:#ffffff1a;color:#9ca3af}.msg-chat-actions button:hover{background:#fff}.msg-chat-body{flex:1;overflow-y:auto;padding:20px;display:grid;align-content:start;gap:10px;background:linear-gradient(to bottom,transparent,rgba(255,255,255,.2))}.theme-dark .msg-chat-body{background:linear-gradient(to bottom,transparent,rgba(255,255,255,.03))}.msg-day-sep{display:table;width:fit-content;margin:0 auto;font-size:.72rem;color:#9ca3af;border:1px solid rgba(255,255,255,.68);background:#ffffff85;padding:3px 10px;border-radius:999px}.theme-dark .msg-day-sep{color:#9ca3af;border-color:#ffffff1a;background:#ffffff0d}.msg-bubble-row{display:flex;gap:8px;max-width:75%}.msg-bubble-row.mine{margin-left:auto;flex-direction:row-reverse}.msg-mini-avatar,.msg-mini-avatar-fallback{width:30px;height:30px;border-radius:999px;object-fit:cover;margin-top:auto}.msg-mini-avatar-fallback{display:grid;place-items:center;background:#e5e7eb;color:#374151;font-size:.7rem;font-weight:600}.msg-bubble-wrap{display:grid;gap:3px}.msg-time{color:#9ca3af;font-size:.68rem}.msg-bubble{border-radius:16px 16px 16px 6px;background:#fff;border:1px solid rgba(255,255,255,.85);color:#374151;padding:10px 12px;font-size:.84rem;line-height:1.45;box-shadow:0 2px 8px #0f172a0a}.theme-dark .msg-bubble{background:#ffffff14;border-color:#ffffff1a;color:#e5e7eb}.msg-bubble.mine{background:#14b8a6;border-color:#14b8a6;color:#fff;border-bottom-left-radius:16px;border-bottom-right-radius:6px}.msg-input-area{padding:12px;border-top:1px solid rgba(255,255,255,.62);background:#ffffff59}.theme-dark .msg-input-area{border-top-color:#ffffff14;background:#ffffff08}.msg-input-wrap{border-radius:16px;border:1px solid rgba(255,255,255,.85);background:#fffc;box-shadow:0 2px 8px #0f172a0d;padding:6px;display:flex;align-items:flex-end;gap:6px}.theme-dark .msg-input-wrap{background:#ffffff0d;border-color:#ffffff1a}.theme-dark .msg-input-wrap textarea{color:#fff}.msg-input-wrap>button{width:34px;height:34px;border:0;background:transparent;color:#9ca3af;border-radius:10px;display:grid;place-items:center;cursor:pointer}.msg-input-wrap>button:hover{color:#0f766e;background:#f0fdfa}.msg-input-wrap textarea{flex:1;border:0;background:transparent;resize:none;outline:none;padding:8px;font-size:.84rem;color:#111827;max-height:120px}.msg-send-btn{min-width:84px;width:auto;padding:0 12px;border-radius:10px;border:0;background:#111827;color:#fff;font-size:.82rem;font-weight:500;display:inline-flex;align-items:center;gap:6px;justify-content:center}.msg-send-btn:hover{background:#1f2937}@media(max-width:1200px){.msg-layout{flex-direction:column;min-height:0}.msg-threads,.msg-chat{width:100%;min-width:0}.msg-threads{height:360px}.msg-chat{height:500px}}@media(max-width:860px){.msg-head{flex-direction:column;align-items:flex-start}.msg-mark-btn{width:100%;justify-content:center}.msg-bubble-row{max-width:88%}} diff --git a/dist/assets/index-R0YECfZq.css b/dist/assets/index-R0YECfZq.css new file mode 100644 index 0000000..da6005a --- /dev/null +++ b/dist/assets/index-R0YECfZq.css @@ -0,0 +1 @@ +:root{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol;line-height:1.5;font-weight:400;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}html,body,#root{height:100%}body{margin:0;min-width:320px}::selection{background:#99f6e4;color:#134e4a}button,input,textarea,select{font-family:inherit}.auth-page{position:relative;min-height:100vh;background:#ecf0f0;color:#1f2937;display:flex;align-items:center;justify-content:center;padding:16px;overflow:hidden}.auth-page *{box-sizing:border-box}.orb{position:fixed;border-radius:999px;pointer-events:none;z-index:0}.orb-1{top:-10%;left:-10%;width:50vw;height:50vw;background:#2dd4bf4d;filter:blur(120px)}.orb-2{right:-10%;bottom:-10%;width:60vw;height:60vw;background:#67e8f966;filter:blur(150px)}.orb-3{top:30%;right:20%;width:30vw;height:30vw;background:#34d39933;filter:blur(100px)}.auth-logo-wrap{position:absolute;top:32px;left:0;right:0;z-index:10;display:flex;align-items:center;justify-content:center;gap:8px}.auth-logo-dot{width:32px;height:32px;border-radius:999px;display:grid;place-items:center;color:#fff;font-weight:700;background:linear-gradient(135deg,#0f766e,#06b6d4);box-shadow:0 12px 22px #0d94884d}.auth-logo-text{font-size:1.25rem;font-weight:500;letter-spacing:-.03em}.auth-card{width:min(420px,100%);position:relative;z-index:5;border-radius:32px;padding:32px;background:#fff9;border:1px solid rgba(255,255,255,.8);backdrop-filter:blur(22px);-webkit-backdrop-filter:blur(22px);box-shadow:0 8px 30px #0000000a}.auth-view{display:grid;gap:24px}.view-enter{animation:fadeIn .3s ease-out forwards}@keyframes fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.auth-head{display:grid;gap:8px}.auth-head-center{text-align:center}.auth-head h1{margin:0;font-size:1.55rem;font-weight:500;letter-spacing:-.03em;color:#111827}.auth-head p{margin:0;color:#6b7280;font-size:.9rem;line-height:1.5}.auth-form{display:grid;gap:18px}.auth-field{display:grid;gap:7px}.auth-field span{font-size:.88rem;font-weight:500;color:#374151;padding-left:4px}.auth-field-row{display:flex;align-items:center;justify-content:space-between;gap:12px}.auth-field input{width:100%;border:1px solid rgba(255,255,255,.75);border-radius:12px;padding:10px 14px 10px 40px;background:#ffffff8c;color:#111827;font-size:.9rem;outline:none;box-shadow:0 1px 2px #0f172a0f;transition:border-color .2s ease,box-shadow .2s ease,background .2s ease,transform .2s ease}.auth-field input::placeholder{color:#9ca3af}.auth-field input:focus{border-color:#14b8a680;box-shadow:0 0 0 3px #14b8a62e,0 6px 18px #0d948814;background:#ffffffd9}.auth-input-wrap{position:relative}.auth-input-icon{position:absolute;top:50%;left:12px;transform:translateY(-50%);width:18px;height:18px;border-radius:999px;display:grid;place-items:center;color:#9ca3af;pointer-events:none}.auth-input-icon svg{width:16px;height:16px;display:block}.location-suggestions{margin-top:8px;border-radius:12px;border:1px solid rgba(255,255,255,.82);background:#ffffffd1;box-shadow:0 10px 24px #0f172a14;overflow:hidden;max-height:180px;overflow-y:auto}.location-suggestion-item{width:100%;border:0;border-bottom:1px solid rgba(229,231,235,.7);background:transparent;padding:10px 12px;text-align:left;color:#374151;font-size:.86rem;cursor:pointer}.location-suggestion-item:last-child{border-bottom:0}.location-suggestion-item:hover{background:#14b8a61a;color:#115e59}.check-row{display:flex;align-items:center;gap:8px;color:#4b5563;font-size:.9rem}.submit-btn{margin-top:2px;width:100%;border:0;border-radius:12px;padding:10px 14px;font-size:.9rem;font-weight:600;color:#fff;background:#111827;cursor:pointer;transition:background .2s ease}.submit-btn:hover:not(:disabled){background:#1f2937}.submit-btn:disabled{opacity:.65;cursor:default}.auth-foot{margin:0;text-align:center;font-size:.9rem;color:#6b7280;display:flex;align-items:center;justify-content:center;gap:4px;flex-wrap:wrap}.link-btn{border:0;background:transparent;color:#0f766e;font-weight:500;cursor:pointer;padding:0}.link-btn:hover{color:#115e59}.back-link{justify-self:start;font-size:.8rem}.status{margin:18px 0 0;border-radius:12px;padding:10px 12px;font-size:.88rem}.status.success{background:#10b9811f;color:#047857}.status.error{background:#ef44441f;color:#b91c1c}@media(max-width:520px){.auth-card{padding:24px 20px;border-radius:24px}}.dash-root{min-height:100vh;display:flex;background:#ecf0f0;color:#1f2937;overflow:hidden;position:relative}.dash-root *{box-sizing:border-box}.dash-orb{position:fixed;border-radius:999px;pointer-events:none;z-index:0}.dash-orb-1{top:-10%;left:-10%;width:50vw;height:50vw;background:#2dd4bf4d;filter:blur(120px)}.dash-orb-2{right:-10%;bottom:-10%;width:60vw;height:60vw;background:#67e8f966;filter:blur(150px)}.dash-orb-3{top:30%;right:20%;width:30vw;height:30vw;background:#34d39933;filter:blur(100px)}.dash-sidebar{width:256px;margin:24px 0 24px 24px;height:calc(100vh - 48px);padding:24px;background:#ffffff6b;border:1px solid rgba(255,255,255,.6);border-radius:32px;backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px);box-shadow:0 8px 30px #0000000a;display:flex;flex-direction:column;gap:18px;z-index:2;flex-shrink:0}.dash-logo-row{display:flex;align-items:center;gap:8px;margin-bottom:14px;padding-left:8px}.dash-logo-dot{width:32px;height:32px;border-radius:999px;display:grid;place-items:center;color:#fff;font-weight:700;background:linear-gradient(135deg,#0f766e,#06b6d4);box-shadow:0 10px 22px #0d948847}.dash-logo-text{font-size:1.25rem;font-weight:500;letter-spacing:-.03em}.dash-nav{display:grid;gap:6px;flex:1;align-content:start}.dash-nav-item{border:0;background:transparent;min-height:50px;border-radius:18px;display:flex;align-items:center;gap:12px;color:#6b7280;padding:0 16px;position:relative;cursor:pointer;text-align:left;font-size:1rem;font-weight:400;transition:.2s ease}.dash-nav-item:hover{background:#ffffff59;color:#111827}.dash-nav-item.active{background:#ffffffa8;color:#0f766e;border:1px solid rgba(255,255,255,.82);box-shadow:0 6px 14px #0f172a08;font-weight:500}.dash-nav-item.active:before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;border-radius:999px;background:#0ea5a4}.dash-nav-icon{display:grid;place-items:center}.dash-nav-icon.accent{color:#0f766e}.dash-nav-label{white-space:nowrap}.dash-nav-divider{height:1px;margin:6px 16px;background:#ffffff8c}.dash-nav-badge{margin-left:auto;width:20px;height:20px;border-radius:999px;font-size:.7rem;display:grid;place-items:center;color:#fff;background:#06b6d4}.dash-nav-dot{margin-left:auto;width:7px;height:7px;border-radius:999px;background:#10b981;box-shadow:0 0 8px #10b981cc}.dash-sidebar-pro{margin-top:auto;border-radius:18px;border:1px solid rgba(20,184,166,.2);background:linear-gradient(135deg,#14b8a614,#06b6d414);padding:14px;position:relative;overflow:hidden;text-align:center}.dash-sidebar-pro svg{color:#0f766e;margin:0 auto 8px;position:relative;z-index:1}.dash-sidebar-pro-glow{position:absolute;top:-22px;right:-22px;width:88px;height:88px;border-radius:999px;background:#14b8a633;filter:blur(20px)}.dash-sidebar-pro h4{position:relative;z-index:1;margin:0 0 4px;font-size:.86rem}.dash-sidebar-pro p{position:relative;z-index:1;margin:0;color:#6b7280;font-size:.76rem}.dash-main{flex:1;margin:24px 24px 24px 32px;height:calc(100vh - 48px);overflow-y:auto;padding-right:8px;z-index:1}.custom-scrollbar::-webkit-scrollbar{width:6px}.custom-scrollbar::-webkit-scrollbar-track{background:transparent}.custom-scrollbar::-webkit-scrollbar-thumb{background-color:#14b8a633;border-radius:20px}.custom-scrollbar::-webkit-scrollbar-thumb:hover{background-color:#14b8a666}.dash-topbar{display:flex;justify-content:flex-end;align-items:center;gap:10px;margin-bottom:28px;padding-top:8px;position:relative;z-index:5}.dash-topbar-actions{display:inline-flex;align-items:center;gap:8px}.dash-theme-btn{border:1px solid rgba(255,255,255,.8);background:#ffffff9e;border-radius:999px;padding:8px 12px;display:inline-flex;align-items:center;gap:7px;color:#111827;cursor:pointer;font-size:.75rem;font-weight:500}.dash-theme-btn:hover{background:#ffffffd6}.dash-profile-wrap{position:relative}.dash-profile-btn{border:1px solid rgba(255,255,255,.8);background:#ffffff9e;border-radius:999px;padding:6px 12px 6px 6px;display:flex;align-items:center;gap:8px;color:#111827;cursor:pointer}.dash-profile-avatar{width:32px;height:32px;border-radius:999px;border:1px solid rgba(255,255,255,.8);object-fit:cover}.dash-profile-avatar-fallback{background:linear-gradient(135deg,#0f766e,#06b6d4);display:grid;place-items:center;color:#fff;font-size:.86rem;font-weight:600}.dash-profile-menu{position:absolute;top:calc(100% + 8px);right:0;width:220px;background:#ffffffd1;border:1px solid rgba(255,255,255,.82);border-radius:16px;backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px);box-shadow:0 10px 36px #0000001a;padding:8px;opacity:0;visibility:hidden;transform:scale(.96);transform-origin:top right;transition:.18s ease}.dash-profile-wrap:hover .dash-profile-menu,.dash-profile-wrap:focus-within .dash-profile-menu{opacity:1;visibility:visible;transform:scale(1)}.dash-profile-menu button{width:100%;border:0;background:transparent;display:flex;align-items:center;gap:8px;border-radius:10px;padding:9px 10px;color:#4b5563;cursor:pointer}.dash-profile-menu button:hover{background:#ffffffe6;color:#111827}.dash-profile-menu .danger{color:#e11d48}.dash-profile-divider{height:1px;background:#d1d5dbcc;margin:6px 0}.dash-welcome{margin-bottom:28px}.dash-welcome h1{margin:0;font-size:clamp(2rem,4vw,2.9rem);font-weight:500;letter-spacing:-.03em;display:flex;align-items:center;gap:10px}.dash-welcome p{margin:8px 0 0;color:#6b7280}.dash-loading{margin:0 0 14px;color:#6b7280}.dash-grid{display:grid;grid-template-columns:2fr 1fr;gap:24px;padding-bottom:24px}.dash-grid-main,.dash-grid-side{display:grid;gap:24px;align-content:start}.dash-card{background:#fff9;border:1px solid rgba(255,255,255,.8);border-radius:24px;backdrop-filter:blur(22px);-webkit-backdrop-filter:blur(22px);box-shadow:0 8px 30px #00000008;padding:24px;transition:transform .22s ease,box-shadow .22s ease,background .22s ease}.dash-card:hover{transform:translateY(-1px);box-shadow:0 12px 34px #0f172a0f}.dash-card h2,.dash-card h3,.dash-card h4,.dash-card p{margin:0}.dash-card-head{margin-bottom:16px}.dash-card-head-inline{display:flex;align-items:center;justify-content:space-between;gap:8px}.dash-card-head h2{font-size:1.15rem;font-weight:500;letter-spacing:-.01em}.dash-job-list,.dash-message-list,.dash-sim-list,.dash-ai-list,.dash-agent-list{display:grid;gap:10px}.dash-job-item{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:12px;border-radius:16px;background:#ffffff80;border:1px solid rgba(255,255,255,.72);transition:.2s ease;cursor:pointer}.dash-job-item:hover{background:#fffc;box-shadow:0 4px 14px #0f172a0f}.dash-job-item:focus-visible{outline:2px solid rgba(20,184,166,.45);outline-offset:2px}.dash-job-left{display:flex;align-items:center;gap:10px;min-width:0}.dash-company-chip{width:40px;height:40px;border-radius:12px;background:#111827;color:#fff;display:grid;place-items:center;font-weight:600;flex-shrink:0}.dash-job-item h4{font-size:.95rem;margin-bottom:2px}.dash-job-item p{font-size:.8rem;color:#6b7280;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.dash-job-arrow-btn{width:32px;height:32px;border-radius:999px;border:1px solid #e5e7eb;background:#fff;display:grid;place-items:center;color:#9ca3af;cursor:pointer;flex-shrink:0;transition:background-color .2s ease,color .2s ease,border-color .2s ease}.dash-job-item:hover .dash-job-arrow-btn{background:#f0fdfa;color:#0f766e;border-color:#99f6e4}.dash-split-grid{display:grid;grid-template-columns:1fr 1fr;gap:24px}.dash-message-item,.dash-sim-item,.dash-agent-item{border-radius:14px;padding:10px;background:#ffffff75;border:1px solid rgba(255,255,255,.68);transition:.2s ease}.dash-message-item{display:flex;align-items:center;gap:10px}.dash-avatar{width:34px;height:34px;border-radius:999px;display:grid;place-items:center;background:linear-gradient(135deg,#14b8a633,#06b6d433);color:#0f766e;font-size:.76rem;font-weight:700;flex-shrink:0}.dash-message-item h4{font-size:.84rem;margin-bottom:1px}.dash-message-item p{color:#6b7280;font-size:.76rem}.dash-message-item:hover{background:#fffc}.dash-sim-item{display:flex;justify-content:space-between;align-items:center;font-size:.84rem;cursor:pointer}.dash-sim-item:hover{background:#ffffffd1}.dash-sim-left{display:flex;align-items:center;gap:10px}.dash-sim-left h4{margin:0;font-size:.84rem;font-weight:500}.dash-sim-left p{margin:0;color:#6b7280;font-size:.74rem}.dash-sim-icon{width:36px;height:36px;border-radius:10px;border:1px solid transparent;display:grid;place-items:center;flex-shrink:0}.dash-sim-icon.teal{background:#ecfdf5;border-color:#ccfbf1;color:#0f766e}.dash-sim-icon.purple{background:#f5f3ff;border-color:#ede9fe;color:#7c3aed}.dash-sim-icon.amber{background:#fffbeb;border-color:#fef3c7;color:#d97706}.dash-sim-icon.blue{background:#eff6ff;border-color:#dbeafe;color:#2563eb}.dash-sim-icon.gray{background:#f3f4f6;border-color:#e5e7eb;color:#6b7280}.dash-sim-right{text-align:right}.dash-sim-item strong{color:#059669;font-size:.8rem;display:block;margin-bottom:4px}.dash-sim-item strong.warn{color:#d97706}.dash-sim-item strong.na{color:#6b7280}.dash-progress{width:64px;height:6px;border-radius:999px;background:#e5e7eb;overflow:hidden}.dash-progress span{display:block;height:100%;border-radius:inherit;background:#10b981}.dash-progress span.warn{background:#f59e0b}.dash-ai-card{background:linear-gradient(135deg,#14b8a6,#06b6d4);color:#fff;position:relative;overflow:hidden;border-radius:24px;box-shadow:0 20px 32px -10px #14b8a638}.dash-ai-card:hover{transform:none;box-shadow:0 20px 32px -10px #14b8a638}.dash-ai-content{position:relative;z-index:10}.dash-ai-peel{position:absolute;top:-14px;right:-14px;width:96px;height:96px;border-bottom-left-radius:48px;border-top-right-radius:28px;background:#fff3;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-left:1px solid rgba(255,255,255,.45);border-bottom:1px solid rgba(255,255,255,.45);box-shadow:-10px 10px 20px #0000001a;transform-origin:top right;transition:transform .2s ease}.dash-ai-card-group:hover .dash-ai-peel{transform:scale(1.08)}.dash-ai-head{display:flex;align-items:center;gap:8px;margin-bottom:16px}.dash-ai-head svg{color:#ccfbf1}.dash-ai-card h3{font-size:1.125rem;margin-bottom:0;font-weight:500;letter-spacing:-.01em}.dash-ai-card p{color:#ccfbf1;margin-bottom:24px;font-size:.875rem;font-weight:400}.dash-ai-list{margin:0;padding:0;list-style:none;display:grid;gap:12px}.dash-ai-item{display:flex;align-items:flex-start;gap:12px;padding:12px;border-radius:16px;background:#ffffff1a;border:1px solid rgba(255,255,255,.2);cursor:pointer;transition:background-color .2s ease}.dash-ai-item:hover{background:#fff3}.dash-ai-item-icon{margin-top:2px;width:24px;height:24px;border-radius:999px;border:0;background:#fff3;display:grid;place-items:center;flex-shrink:0}.dash-ai-item strong{display:block;font-size:.875rem;margin-bottom:2px;color:#fff;font-weight:500}.dash-ai-item small{display:block;font-size:.75rem;color:#ccfbf1;line-height:1.4}.dash-ai-card button{width:100%;margin-top:16px;border:0;border-radius:12px;padding:10px 12px;font-size:.875rem;font-weight:500;color:#0f766e;background:#fff;cursor:pointer;box-shadow:0 1px 2px #0f172a1f;transition:background-color .2s ease}.dash-ai-card button:hover{background:#f0fdfa}.dash-ai-xl-only{display:none}.dash-agent-item span{display:block;font-size:.84rem;font-weight:500}.dash-agent-item small{display:inline-flex;align-items:center;gap:4px;color:#6b7280;font-size:.75rem}.dash-agent-item{display:flex;align-items:center;justify-content:space-between}.dash-agent-item:hover{background:#ffffffd1}.dash-agent-item.muted{opacity:.72}.dash-agent-item.muted:hover{opacity:1}.dash-switch{position:relative;width:38px;height:22px;display:inline-block;flex-shrink:0}.dash-switch input{position:absolute;opacity:0;inset:0}.dash-switch span{position:absolute;inset:0;background:#d1d5db;border-radius:999px;transition:.2s ease}.dash-switch span:after{content:"";position:absolute;width:16px;height:16px;border-radius:999px;background:#fff;top:3px;left:3px;transition:.2s ease;box-shadow:0 1px 2px #0f172a33}.dash-switch input:checked+span{background:#14b8a6}.dash-switch input:checked+span:after{transform:translate(16px)}.dash-icon-btn{width:32px;height:32px;border-radius:999px;border:1px solid #e5e7eb;background:#fff;color:#4b5563;display:grid;place-items:center;cursor:pointer;transition:.2s ease}.dash-icon-btn:hover{color:#0f766e;border-color:#99f6e4;background:#f0fdfa}.dash-outline-btn{width:100%;margin-top:10px;border:1px dashed rgba(156,163,175,.6);background:transparent;border-radius:10px;padding:10px;color:#6b7280;cursor:pointer;transition:.2s ease}.dash-outline-btn:hover{border-color:#4b556399;color:#1f2937}.dash-muted{color:#6b7280;font-size:.82rem}.theme-dark.dash-root{background:#0a0a0a;color:#d1d5db}.theme-dark .dash-orb-1{background:#14b8a61a}.theme-dark .dash-orb-2{background:#06b6d41a}.theme-dark .dash-orb-3{background:#10b9811a}.theme-dark .dash-sidebar{background:#ffffff05;border-color:#ffffff0d;box-shadow:0 8px 30px #0003}.theme-dark .dash-logo-text,.theme-dark .dash-welcome h1,.theme-dark .dash-card h2,.theme-dark .dash-card h3,.theme-dark .dash-card h4{color:#fff}.theme-dark .dash-nav-item{color:#9ca3af}.theme-dark .dash-nav-item:hover{background:#ffffff0d;color:#f3f4f6}.theme-dark .dash-nav-item.active{background:#ffffff1a;border-color:#ffffff14;color:#2dd4bf}.theme-dark .dash-nav-divider,.theme-dark .dash-sidebar-pro p,.theme-dark .dash-welcome p,.theme-dark .dash-loading,.theme-dark .dash-muted{color:#9ca3af}.theme-dark .dash-sidebar-pro{background:linear-gradient(135deg,#14b8a61a,#06b6d40d);border-color:#14b8a633}.theme-dark .dash-topbar .dash-theme-btn,.theme-dark .dash-profile-btn{border-color:#ffffff14;background:#ffffff08;color:#f3f4f6}.theme-dark .dash-topbar .dash-theme-btn:hover,.theme-dark .dash-profile-btn:hover{background:#ffffff14}.theme-dark .dash-profile-menu{background:#12141af2;border-color:#ffffff1a}.theme-dark .dash-profile-menu button{color:#d1d5db}.theme-dark .dash-profile-menu button:hover{background:#ffffff0d;color:#fff}.theme-dark .dash-card:not(.dash-ai-card){background:#ffffff05;border-color:#ffffff0d;box-shadow:0 4px 20px #0000001a}.theme-dark .dash-ai-card{background:linear-gradient(135deg,#14b8a6,#06b6d4);border-color:#ffffff26;box-shadow:0 20px 32px -10px #14b8a638}.theme-dark .dash-job-item,.theme-dark .dash-message-item,.theme-dark .dash-sim-item,.theme-dark .dash-agent-item{background:#ffffff05;border-color:#ffffff0d}.theme-dark .dash-job-item:hover,.theme-dark .dash-message-item:hover,.theme-dark .dash-sim-item:hover,.theme-dark .dash-agent-item:hover{background:#ffffff0d;border-color:#ffffff1a}.theme-dark .dash-job-item p,.theme-dark .dash-message-item p,.theme-dark .dash-sim-left p,.theme-dark .dash-agent-item small{color:#9ca3af}.theme-dark .dash-job-arrow-btn,.theme-dark .dash-icon-btn{border-color:#ffffff1a;background:#ffffff0d;color:#6b7280}.theme-dark .dash-job-item:hover .dash-job-arrow-btn,.theme-dark .dash-icon-btn:hover{background:#14b8a61a;color:#2dd4bf;border-color:#14b8a64d}.theme-dark .dash-company-chip{background:#1f2937;border:1px solid rgba(255,255,255,.08)}.theme-dark .dash-progress{background:#ffffff1a}@media(max-width:1200px){.dash-grid{grid-template-columns:1fr}}@media(max-width:980px){.dash-root{display:block}.dash-sidebar,.dash-main{width:auto;height:auto;margin:16px}.dash-main{padding-right:0}.dash-split-grid{grid-template-columns:1fr}}@media(min-width:1280px){.dash-ai-xl-only{display:flex}}.ai-agent-main{display:flex;flex-direction:column}.ai-head{margin-bottom:20px}.ai-head h1{margin:0 0 8px;font-size:clamp(2rem,4vw,2.9rem);font-weight:500;letter-spacing:-.03em}.ai-head p{margin:0;color:#6b7280;font-size:1.05rem}.theme-dark .ai-head h1,.theme-dark .ai-head p,.theme-dark .ai-jobs-head h3,.theme-dark .ai-agents-section h3,.theme-dark .ai-create-title h2{color:#fff}.theme-dark .ai-head p,.theme-dark .ai-jobs-head span,.theme-dark .ai-agent-chip-left p,.theme-dark .ai-job-title-wrap p,.theme-dark .ai-job-bottom span{color:#9ca3af}.ai-create-card{margin-bottom:26px;background:#fff9;border:1px solid rgba(255,255,255,.8);border-radius:24px;backdrop-filter:blur(22px);-webkit-backdrop-filter:blur(22px);box-shadow:0 8px 30px #00000008;padding:24px}.theme-dark .ai-create-card,.theme-dark .ai-agent-chip-card,.theme-dark .ai-job-card{background:#ffffff05;border-color:#ffffff0d;box-shadow:0 4px 20px #0000001a}.ai-create-title{display:flex;align-items:center;gap:10px;margin-bottom:18px}.ai-create-icon{width:40px;height:40px;border-radius:999px;background:#f0fdfa;border:1px solid #ccfbf1;color:#0f766e;display:grid;place-items:center}.ai-create-title h2{margin:0;font-size:1.2rem;font-weight:500}.ai-form-grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:16px}.ai-field{display:grid;gap:6px}.ai-field label{margin-left:4px;font-size:.83rem;font-weight:500;color:#374151}.theme-dark .ai-field label,.theme-dark .ai-distance-head label{color:#d1d5db}.ai-field input,.ai-field select{width:100%;border-radius:12px;border:1px solid rgba(255,255,255,.82);background:#ffffff80;padding:10px 12px;font-size:.84rem;color:#111827}.theme-dark .ai-field input,.theme-dark .ai-field select,.theme-dark .ai-location-wrap input{background:#ffffff08;border-color:#ffffff14;color:#f3f4f6}.ai-field input:focus,.ai-field select:focus{outline:none;border-color:#2dd4bfe6;box-shadow:0 0 0 4px #14b8a61a}.ai-location-wrap{position:relative}.ai-location-wrap svg{position:absolute;left:11px;top:50%;transform:translateY(-50%);color:#9ca3af}.ai-location-wrap input{padding-left:34px}.ai-distance-field{align-content:center}.ai-distance-head{display:flex;align-items:center;justify-content:space-between}.ai-distance-head span{font-size:.72rem;color:#0f766e;border:1px solid #ccfbf1;border-radius:8px;background:#f0fdfa;padding:3px 8px;font-weight:500}.ai-distance-field input[type=range]{appearance:none;width:100%;height:6px;border-radius:999px;background:#ffffffd9;border:1px solid rgba(255,255,255,.9)}.ai-distance-field input[type=range]::-webkit-slider-thumb{appearance:none;width:16px;height:16px;background:#14b8a6;border-radius:50%;cursor:pointer;border:2px solid #fff;box-shadow:0 1px 3px #0000001a}.ai-distance-field input[type=range]::-moz-range-thumb{width:16px;height:16px;background:#14b8a6;border-radius:50%;cursor:pointer;border:2px solid #fff;box-shadow:0 1px 3px #0000001a}.ai-create-actions{margin-top:20px;display:flex;justify-content:flex-end}.ai-create-actions button{border:0;border-radius:12px;background:#111827;color:#fff;padding:10px 16px;font-size:.84rem;font-weight:500;display:inline-flex;align-items:center;gap:8px;cursor:pointer}.ai-create-actions button:hover{background:#1f2937}.theme-dark .ai-create-actions button{background:#ffffff1a;border:1px solid rgba(255,255,255,.1)}.ai-agents-section{margin-bottom:20px}.ai-agents-section h3{margin:0 0 10px;padding-left:4px;font-size:1.08rem;font-weight:500}.ai-agents-row{display:flex;gap:12px;overflow-x:auto;padding-bottom:8px}.ai-agent-chip-card{min-width:280px;background:#ffffffb8;border:1px solid rgba(255,255,255,.82);border-radius:16px;padding:14px;position:relative;overflow:hidden}.ai-agent-card-head{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}.ai-agent-chip-left{display:flex;align-items:center;gap:8px}.ai-agent-mini-icon{width:30px;height:30px;border-radius:8px;display:grid;place-items:center;color:#fff}.ai-agent-mini-icon.teal{background:#14b8a6}.ai-agent-mini-icon.indigo{background:#6366f1}.ai-agent-chip-left h4{margin:0;font-size:.84rem;font-weight:500}.ai-agent-chip-left p{margin:1px 0 0;font-size:.72rem;color:#6b7280}.ai-toggle{width:40px;height:20px;border-radius:999px;border:1px solid rgba(156,163,175,.3);background:#d1d5db;padding:0;position:relative;cursor:pointer}.ai-toggle span{width:14px;height:14px;border-radius:999px;background:#fff;position:absolute;left:2px;top:2px;transition:transform .2s ease}.ai-toggle.on{background:#14b8a6}.ai-toggle.on span{transform:translate(20px)}.ai-tags{margin-top:10px;display:flex;flex-wrap:wrap;gap:6px}.ai-tags span{font-size:.68rem;color:#4b5563;border-radius:8px;background:#fff;border:1px solid rgba(229,231,235,.85);padding:3px 8px}.theme-dark .ai-agent-chip-left h4,.theme-dark .ai-job-title-wrap h4{color:#fff}.theme-dark .ai-tags span,.theme-dark .ai-job-tags span{color:#d1d5db;background:#ffffff0d;border-color:#ffffff1a}.ai-jobs-head{margin-bottom:10px;display:flex;align-items:center;justify-content:space-between;gap:10px}.ai-jobs-head h3{margin:0;display:inline-flex;align-items:center;gap:7px;font-size:1.08rem;font-weight:500}.ai-jobs-head h3 svg{color:#14b8a6}.ai-jobs-head span{color:#6b7280;font-size:.7rem;border-radius:8px;border:1px solid rgba(255,255,255,.8);background:#ffffff80;padding:5px 8px}.ai-jobs-grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:14px;margin-bottom:10px}.ai-job-card{position:relative;overflow:hidden;background:#fff9;border:1px solid rgba(255,255,255,.8);border-radius:22px;backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);box-shadow:0 8px 24px #00000008;padding:16px;display:flex;flex-direction:column;cursor:pointer}.ai-job-card:hover{transform:translateY(-2px);box-shadow:0 10px 26px #0f172a12}.ai-job-card:focus-visible{outline:2px solid rgba(20,184,166,.45);outline-offset:2px}.ai-job-rail{position:absolute;top:0;right:0;width:8px;height:100%}.ai-job-rail.teal{background:#14b8a633}.ai-job-rail.indigo{background:#6366f133}.ai-job-top{padding-right:10px;display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:10px}.ai-company-logo,.ai-company-logo-fallback{width:46px;height:46px;border-radius:10px;object-fit:cover;border:1px solid rgba(229,231,235,.85);background:#fff}.ai-company-logo-fallback{display:grid;place-items:center;color:#111827;font-weight:600}.ai-match-col{display:grid;justify-items:end;gap:4px}.ai-match-pill{display:inline-flex;align-items:center;gap:4px;border-radius:8px;border:1px solid #ccfbf1;background:#f0fdfa;color:#0f766e;padding:4px 8px;font-size:.7rem;font-weight:500}.ai-match-col small{font-size:.62rem;color:#9ca3af;text-transform:uppercase;letter-spacing:.04em}.ai-job-title-wrap{margin-bottom:10px}.ai-job-title-wrap h4{margin:0;font-size:.94rem;font-weight:500;color:#111827}.ai-job-title-wrap p{margin:2px 0 0;color:#6b7280;font-size:.78rem}.ai-job-tags{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:12px}.ai-job-tags span{font-size:.66rem;color:#4b5563;border:1px solid rgba(229,231,235,.85);background:#ffffffd1;border-radius:8px;padding:4px 8px}.ai-job-bottom{margin-top:auto;padding-top:10px;border-top:1px solid rgba(255,255,255,.82);display:flex;justify-content:space-between;align-items:center}.theme-dark .ai-job-bottom{border-top-color:#ffffff14}.ai-job-bottom span{font-size:.66rem;color:#9ca3af}.ai-job-bottom button{border:0;background:transparent;color:#111827;font-size:.78rem;font-weight:500;display:inline-flex;align-items:center;gap:4px;cursor:pointer}.ai-job-bottom button:hover{color:#0f766e}.theme-dark .ai-job-bottom button{color:#f3f4f6}.theme-dark .ai-job-bottom button:hover{color:#2dd4bf}@media(max-width:1200px){.ai-form-grid,.ai-jobs-grid{grid-template-columns:1fr 1fr}}@media(max-width:860px){.ai-form-grid{grid-template-columns:1fr}.ai-create-actions{justify-content:stretch}.ai-create-actions button{width:100%;justify-content:center}.ai-jobs-head{flex-direction:column;align-items:flex-start}.ai-jobs-grid{grid-template-columns:1fr}}.career-main{position:relative}.career-status-pill{border-radius:999px;border:1px solid #99f6e4;background:#f0fdfacc;color:#0f766e;display:inline-flex;align-items:center;gap:6px;padding:7px 11px;font-size:.8rem;font-weight:500}.career-head{max-width:760px;margin-bottom:20px}.career-head-title-row{display:flex;align-items:center;gap:10px;margin-bottom:6px}.career-head-icon{width:40px;height:40px;border-radius:12px;background:linear-gradient(135deg,#2dd4bf,#06b6d4);color:#fff;display:grid;place-items:center}.career-head h1{margin:0;font-size:clamp(2rem,3.4vw,2.6rem);letter-spacing:-.03em;color:#111827}.career-head-kicker{margin:12px 0 6px;color:#0f766e;text-transform:uppercase;letter-spacing:.04em;font-size:.72rem;font-weight:600}.career-head-desc{margin:0;color:#6b7280;line-height:1.65}.career-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,3fr);gap:18px;min-height:calc(100vh - 250px);padding-bottom:18px}.career-agents-col{border-radius:24px;border:1px solid rgba(229,231,235,.8);background:#ffffff9e;backdrop-filter:blur(22px);-webkit-backdrop-filter:blur(22px);box-shadow:0 8px 24px #00000008;overflow:hidden;display:flex;flex-direction:column}.career-agents-head{padding:16px;border-bottom:1px solid rgba(229,231,235,.7);background:#ffffff6b}.career-agents-head h2{margin:0 0 10px;color:#111827;font-size:.9rem}.career-agents-head button{width:100%;border:0;border-radius:12px;background:linear-gradient(to right,#14b8a6,#06b6d4);color:#fff;padding:10px;display:inline-flex;align-items:center;justify-content:center;gap:7px;font-size:.82rem;font-weight:500;cursor:pointer;box-shadow:0 4px 14px #14b8a663}.career-agents-list{flex:1;overflow-y:auto;padding:10px;display:grid;align-content:start;gap:4px}.career-agents-list button{width:100%;text-align:left;border:0;border-radius:10px;background:transparent;color:#4b5563;padding:10px 11px;font-size:.82rem;cursor:pointer;display:flex;align-items:center;justify-content:space-between;gap:8px}.career-agents-list button:hover{background:#f9fafbe6;color:#111827}.career-agents-list button.active{border:1px solid #99f6e4;background:#f0fdfa;color:#0f766e;font-weight:500}.career-agents-list button.active i{width:6px;height:6px;border-radius:999px;background:#14b8a6}.career-reco-col{min-width:0;display:flex;flex-direction:column}.career-reco-head{margin-bottom:10px;display:flex;align-items:center;justify-content:space-between;gap:8px}.career-reco-head h2{margin:0;color:#111827;font-size:1.03rem;font-weight:500;display:flex;align-items:center;gap:7px}.career-reco-head h2 span{color:#0f766e;border:1px solid #99f6e4;background:#f0fdfa;border-radius:6px;padding:2px 8px;font-size:.84rem}.career-reco-head button{border:0;background:transparent;color:#6b7280;font-size:.75rem;font-weight:500;display:inline-flex;align-items:center;gap:5px;cursor:pointer}.career-cards{flex:1;overflow-y:auto;padding-right:6px}.career-cards{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;align-content:start;grid-auto-rows:min-content}.career-card{position:relative;overflow:hidden;border-radius:14px;border:1px solid rgba(153,246,228,.5);background:linear-gradient(135deg,#fff,#f0fdfa73);padding:12px;transition:border-color .4s ease,box-shadow .4s ease}.career-card:hover{border-color:#5eead4;box-shadow:0 8px 20px #14b8a614}.career-card-glow{position:absolute;top:-24px;right:-24px;width:100px;height:100px;border-radius:999px;background:linear-gradient(to bottom right,#2dd4bf2e,#22d3ee29);filter:blur(22px);transition:transform .5s ease}.career-card:hover .career-card-glow{transform:scale(1.5)}.career-card-wand{position:absolute;top:11px;right:11px;color:#5eead4}.career-card-content{position:relative;z-index:1}.career-card-icon{width:34px;height:34px;border-radius:9px;display:grid;place-items:center;margin-bottom:10px}.career-card-icon.blue{background:#eff6ff;color:#3b82f6}.career-card-icon.indigo{background:#eef2ff;color:#6366f1}.career-card-icon.emerald{background:#ecfdf5;color:#10b981}.career-card-icon.orange{background:#fff7ed;color:#f97316}.career-card-icon.rose{background:#fff1f2;color:#f43f5e}.career-card-icon.slate{background:#f1f5f9;color:#475569}.career-card h3{margin:0 0 6px;color:#111827;font-size:.8rem;font-weight:500;line-height:1.4}.career-card p{margin:0;font-size:.7rem;line-height:1.4;display:inline-flex;align-items:flex-start;gap:5px}.career-card p.tone.strong{color:#0f766e}.career-card p.tone.neutral{color:#4f46e5}.career-card p.tone.soft{color:#6b7280}.theme-dark .career-status-pill{border-color:#14b8a659;background:#14b8a61f;color:#2dd4bf}.theme-dark .career-head h1,.theme-dark .career-agents-head h2,.theme-dark .career-reco-head h2,.theme-dark .career-card h3{color:#fff}.theme-dark .career-head-desc,.theme-dark .career-agents-list button,.theme-dark .career-reco-head button,.theme-dark .career-card p.tone.soft,.theme-dark .career-head-kicker{color:#9ca3af}.theme-dark .career-head-icon,.theme-dark .career-agents-col,.theme-dark .career-card{border-color:#ffffff14}.theme-dark .career-agents-col,.theme-dark .career-card{background:#ffffff05}.theme-dark .career-agents-head{border-color:#ffffff14;background:#ffffff08}.theme-dark .career-agents-list button:hover{background:#ffffff0f;color:#f3f4f6}.theme-dark .career-agents-list button.active,.theme-dark .career-reco-head h2 span{border-color:#14b8a659;background:#14b8a61f;color:#2dd4bf}.theme-dark .career-card-glow{background:linear-gradient(to bottom right,#2dd4bf26,#6366f124)}.theme-dark .career-card-wand{color:#2dd4bf}@media(max-width:1180px){.career-grid{grid-template-columns:1fr;min-height:auto}.career-agents-col{max-height:280px}.career-cards{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:760px){.career-cards{grid-template-columns:1fr}}.cv-head{margin-bottom:22px;display:flex;justify-content:space-between;align-items:flex-end;gap:12px}.cv-design-toggle{border:1px solid rgba(255,255,255,.8);background:#ffffff9e;border-radius:999px;padding:8px 12px;display:inline-flex;align-items:center;gap:8px;color:#111827;cursor:pointer;transition:background-color .2s ease;font-size:.8rem;font-weight:500}.cv-design-toggle:hover{background:#ffffffd6}.cv-head h1{margin:0 0 8px;font-size:clamp(2rem,4vw,2.9rem);font-weight:500;letter-spacing:-.03em}.cv-head p{margin:0;color:#6b7280;font-size:1.1rem}.cv-edit-btn{border:0;border-radius:12px;background:#111827;color:#fff;padding:10px 16px;font-size:.88rem;font-weight:500;display:inline-flex;align-items:center;gap:8px;cursor:pointer;box-shadow:0 6px 14px #0f172a29}.cv-edit-btn:hover{background:#1f2937}.cv-layout{display:grid;grid-template-columns:1fr 2fr;gap:24px;padding-bottom:24px}.cv-left,.cv-right{display:grid;gap:24px;align-content:start}.cv-card{background:#fff9;border:1px solid rgba(255,255,255,.8);border-radius:24px;backdrop-filter:blur(22px);-webkit-backdrop-filter:blur(22px);box-shadow:0 8px 30px #00000008;padding:24px}.cv-avatar-wrap{display:flex;justify-content:center;margin-bottom:16px}.cv-avatar{width:96px;height:96px;border-radius:22px;object-fit:cover;border:4px solid rgba(255,255,255,.85);box-shadow:0 8px 16px #0f172a1f}.cv-avatar-fallback{background:linear-gradient(135deg,#0f766e,#06b6d4);color:#fff;display:grid;place-items:center;font-size:2rem;font-weight:600}.cv-section-head{display:flex;align-items:center;gap:8px;margin-bottom:14px}.cv-section-head svg{color:#0f766e}.cv-section-head h2{margin:0;font-size:1.08rem;font-weight:500;letter-spacing:-.01em}.cv-personal-list{display:grid;gap:10px}.cv-personal-list div{display:flex;justify-content:space-between;gap:8px;align-items:center;border-bottom:1px solid rgba(255,255,255,.62);padding-bottom:8px}.cv-personal-list div:last-child{border-bottom:0;padding-bottom:0}.cv-personal-list span{color:#6b7280;font-size:.84rem}.cv-personal-list strong{color:#111827;font-size:.84rem;font-weight:500;text-align:right}.cv-chip-wrap{display:flex;flex-wrap:wrap;gap:8px}.cv-chip{display:inline-flex;align-items:center;padding:6px 12px;border-radius:10px;background:#fff;border:1px solid rgba(229,231,235,.85);box-shadow:0 1px 3px #0f172a0f;color:#374151;font-size:.74rem;font-weight:500}.cv-language-list{display:grid;gap:10px}.cv-language-list div{display:flex;justify-content:space-between;align-items:center}.cv-language-list strong{font-size:.86rem;font-weight:500;color:#111827}.cv-language-list span{font-size:.72rem;color:#0f766e;background:#f0fdfa;border:1px solid #ccfbf1;border-radius:8px;padding:4px 10px}.cv-mini-grid{display:grid;gap:24px}.cv-list{margin:0;padding:0;list-style:none;display:grid;gap:8px}.cv-list li{display:inline-flex;align-items:center;gap:6px;font-size:.84rem;color:#374151}.cv-list li svg{color:#14b8a6}.cv-timeline-head{display:flex;align-items:center;gap:10px;margin-bottom:18px}.cv-timeline-icon{width:40px;height:40px;border-radius:999px;border:1px solid rgba(255,255,255,.85);background:#fffc;display:grid;place-items:center;box-shadow:0 2px 8px #0f172a14}.cv-timeline-icon svg{color:#0f766e}.cv-timeline-head h2{margin:0;font-size:1.45rem;letter-spacing:-.01em;font-weight:500}.cv-timeline{position:relative;display:grid;gap:18px}.cv-timeline:before{content:"";position:absolute;left:19px;top:0;bottom:0;width:2px;background:linear-gradient(to bottom,#5eead4,#a5f3fc,transparent)}.cv-timeline-item{display:flex;align-items:flex-start;gap:10px;position:relative}.cv-timeline-dot{width:40px;height:40px;border-radius:999px;border:4px solid #ecf0f0;background:#fff;display:grid;place-items:center;box-shadow:0 2px 8px #0f172a14;z-index:2;flex-shrink:0}.cv-timeline-dot svg{color:#0f766e}.cv-timeline-card{width:calc(100% - 50px);background:#fff9;border:1px solid rgba(255,255,255,.8);border-radius:24px;backdrop-filter:blur(22px);-webkit-backdrop-filter:blur(22px);box-shadow:0 8px 30px #00000008;padding:18px;transition:.2s ease}.cv-timeline-card:hover{background:#ffffffd1;box-shadow:0 10px 24px #0f172a14}.cv-timeline-card h3{margin:0 0 8px;font-size:1rem;font-weight:500;color:#111827}.cv-meta{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:10px}.cv-meta strong{color:#0f766e;font-size:.84rem;font-weight:500}.cv-meta span{color:#6b7280;font-size:.72rem;border:1px solid #e5e7eb;background:#fff;border-radius:6px;padding:2px 8px}.cv-timeline-card p{margin:0;color:#4b5563;font-size:.84rem;line-height:1.55}.cv-divider{height:1px;background:#fff9}.cv-design-reference .cv-card{border-radius:28px;box-shadow:0 10px 28px #0f172a0d}.cv-design-reference .cv-timeline-head h2{font-size:1.55rem}.theme-dark .cv-head h1,.theme-dark .cv-head p,.theme-dark .cv-timeline-head h2,.theme-dark .cv-section-head h2,.theme-dark .cv-personal-list strong,.theme-dark .cv-language-list strong,.theme-dark .cv-timeline-card h3{color:#fff}.theme-dark .cv-head p,.theme-dark .cv-personal-list span,.theme-dark .cv-list li,.theme-dark .cv-meta span,.theme-dark .cv-timeline-card p{color:#9ca3af}.theme-dark .cv-design-toggle{border-color:#ffffff14;background:#ffffff08;color:#f3f4f6}.theme-dark .cv-design-toggle:hover{background:#ffffff14}.theme-dark .cv-card,.theme-dark .cv-timeline-card{background:#ffffff05;border-color:#ffffff0d;box-shadow:0 4px 20px #0000001a}.theme-dark .cv-chip{background:#ffffff0d;border-color:#ffffff1a;color:#d1d5db}.theme-dark .cv-language-list span{color:#2dd4bf;background:#14b8a61a;border-color:#14b8a64d}.theme-dark .cv-timeline:before{background:linear-gradient(to bottom,rgba(20,184,166,.5),rgba(6,182,212,.3),transparent)}.theme-dark .cv-timeline-dot{background:#111827;border-color:#0a0a0a}.theme-dark .cv-meta strong{color:#2dd4bf}.theme-dark .cv-divider{background:#ffffff14}@media(max-width:1200px){.cv-layout{grid-template-columns:1fr}.cv-head{flex-direction:column;align-items:flex-start}}@media(min-width:980px){.cv-design-reference .cv-timeline:before{left:50%;transform:translate(-50%);background:linear-gradient(to bottom,#86efac,#67e8f9,transparent)}.cv-design-reference .cv-timeline-item{justify-content:space-between}.cv-design-reference .cv-timeline-item:nth-child(odd){flex-direction:row-reverse}.cv-design-reference .cv-timeline-dot{position:absolute;left:50%;transform:translate(-50%)}.cv-design-reference .cv-timeline-card{width:calc(50% - 2.5rem);padding:24px;border-radius:28px}}@media(max-width:860px){.cv-design-toggle span{display:none}}.job-detail-back-btn{border:1px solid rgba(255,255,255,.82);background:#ffffff9e;border-radius:999px;padding:8px 13px;display:inline-flex;align-items:center;gap:8px;color:#4b5563;cursor:pointer;font-size:.8rem;font-weight:500}.job-detail-back-btn:hover{background:#ffffffd6;color:#111827}.job-detail-back-row{margin-bottom:16px}.job-detail-header{margin-bottom:24px;display:flex;align-items:flex-start;gap:18px}.job-detail-logo-wrap{width:80px;height:80px;border-radius:18px;overflow:hidden;flex-shrink:0}.job-detail-logo-image,.job-detail-logo-fallback{width:100%;height:100%;object-fit:cover;border-radius:18px;border:1px solid rgba(229,231,235,.9)}.job-detail-logo-fallback{background:#fff;display:grid;place-items:center;color:#111827;font-size:1.9rem;font-weight:600}.job-detail-heading h1{margin:0 0 10px;font-size:clamp(2rem,3.8vw,2.8rem);letter-spacing:-.03em;color:#111827}.job-detail-meta{display:flex;flex-wrap:wrap;gap:10px 14px}.job-detail-meta span{display:inline-flex;align-items:center;gap:6px;color:#6b7280;font-size:.86rem}.job-detail-grid{display:grid;grid-template-columns:minmax(0,2.35fr) minmax(0,.65fr);gap:24px;padding-bottom:20px}.job-detail-main-card{display:grid;gap:20px}.job-detail-section h2,.job-detail-section h3{margin:0 0 10px;color:#111827;font-weight:500;letter-spacing:-.01em}.job-detail-section h2{font-size:1.2rem}.job-detail-section h3{font-size:1rem}.job-detail-section p{margin:0;color:#4b5563;line-height:1.65;font-size:.95rem}.job-detail-description-list{display:grid;gap:10px}.job-detail-rich-html{color:#4b5563;line-height:1.65;font-size:.95rem}.job-detail-rich-html p,.job-detail-rich-html ul,.job-detail-rich-html ol{margin:0 0 12px}.job-detail-rich-html ul,.job-detail-rich-html ol{padding-left:20px}.job-detail-rich-html li{margin-bottom:6px}.job-detail-rich-html a{color:#0f766e}.job-detail-info-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}.job-detail-info-grid>div{border:1px solid rgba(229,231,235,.82);background:#ffffffa3;border-radius:12px;padding:11px 12px;display:grid;gap:4px}.job-detail-info-grid span{color:#6b7280;font-size:.76rem}.job-detail-info-grid strong{color:#111827;font-size:.86rem;font-weight:600}.job-detail-side-col{display:grid;gap:16px;align-content:start}.job-detail-actions-card{display:grid;gap:10px;position:static}.job-detail-actions-card h2{margin:0 0 4px;color:#111827;font-size:1.03rem;font-weight:500}.job-detail-action-primary,.job-detail-action-secondary{border-radius:14px;border:1px solid;padding:11px 12px;display:flex;align-items:center;justify-content:space-between;font-size:.86rem;font-weight:500;cursor:pointer;transition:background-color .2s ease}.job-detail-action-primary{color:#0f766e;border-color:#99f6e4;background:linear-gradient(to right,#ecfeff,#f0fdfa)}.job-detail-action-primary:hover{background:linear-gradient(to right,#cffafe,#ccfbf1)}.job-detail-action-secondary{color:#3730a3;border-color:#c7d2fe;background:linear-gradient(to right,#eef2ff,#f5f3ff)}.job-detail-action-secondary:hover{background:linear-gradient(to right,#e0e7ff,#ede9fe)}.job-detail-action-primary span,.job-detail-action-secondary span{display:inline-flex;align-items:center;gap:8px}.job-detail-action-divider{height:1px;background:#e5e7ebd6;margin:3px 0}.job-detail-text-action{border:0;background:transparent;display:inline-flex;align-items:center;gap:8px;color:#4b5563;border-radius:10px;padding:9px 10px;font-size:.84rem;font-weight:500;cursor:pointer;text-decoration:none}.job-detail-text-action:hover{background:#f9fafbeb;color:#111827}.job-detail-text-action:disabled{opacity:.7;cursor:not-allowed}.job-detail-text-action.link{justify-content:flex-start}.job-detail-text-action.success:hover{background:#ecfdf5;color:#047857}.job-detail-text-action.success.is-done{color:#059669}.job-detail-company-card h3{margin:0 0 12px;color:#111827;font-size:1rem;font-weight:500}.job-detail-company-list{display:grid;gap:10px}.job-detail-company-list>div{border:1px solid rgba(229,231,235,.82);background:#ffffffa3;border-radius:12px;padding:10px 12px;display:grid;gap:4px}.job-detail-company-list span{color:#6b7280;font-size:.74rem}.job-detail-company-list strong{color:#111827;font-size:.86rem}.theme-dark .job-detail-back-btn{border-color:#ffffff14;background:#ffffff08;color:#d1d5db}.theme-dark .job-detail-back-btn:hover{background:#ffffff14;color:#fff}.theme-dark .job-detail-heading h1,.theme-dark .job-detail-section h2,.theme-dark .job-detail-section h3,.theme-dark .job-detail-actions-card h2,.theme-dark .job-detail-company-card h3,.theme-dark .job-detail-info-grid strong,.theme-dark .job-detail-company-list strong{color:#fff}.theme-dark .job-detail-meta span,.theme-dark .job-detail-section p,.theme-dark .job-detail-rich-html,.theme-dark .job-detail-info-grid span,.theme-dark .job-detail-company-list span,.theme-dark .job-detail-text-action{color:#9ca3af}.theme-dark .job-detail-rich-html a{color:#2dd4bf}.theme-dark .job-detail-info-grid>div,.theme-dark .job-detail-company-list>div{border-color:#ffffff14;background:#ffffff08}.theme-dark .job-detail-action-divider{background:#ffffff14}.theme-dark .job-detail-text-action:hover{background:#ffffff14;color:#f3f4f6}@media(max-width:1180px){.job-detail-grid{grid-template-columns:1fr}}@media(max-width:760px){.job-detail-header{flex-direction:column;gap:12px}.job-detail-logo-wrap{width:68px;height:68px}.job-detail-info-grid{grid-template-columns:1fr}}.jobs-page-head{margin-bottom:28px}.jobs-page-head h1{margin:0 0 8px;font-size:clamp(2rem,4vw,2.9rem);font-weight:500;letter-spacing:-.03em;color:#111827}.jobs-page-head p{margin:0;color:#6b7280;font-size:1.1rem}.theme-dark .jobs-page-head h1,.theme-dark .jobs-page-head p,.theme-dark .jobs-content-head h2{color:#fff}.theme-dark .jobs-page-head p,.theme-dark .jobs-content-head span,.theme-dark .jobs-card-title p,.theme-dark .jobs-card-description,.theme-dark .jobs-card-distance{color:#9ca3af}.jobs-layout-toggle{border:1px solid rgba(255,255,255,.8);background:#ffffff9e;border-radius:999px;padding:8px 12px;display:inline-flex;align-items:center;gap:8px;color:#111827;cursor:pointer;transition:background-color .2s ease;font-size:.8rem;font-weight:500}.jobs-layout-toggle:hover{background:#ffffffd6}.theme-dark .jobs-layout-toggle{border-color:#ffffff14;background:#ffffff08;color:#f3f4f6}.theme-dark .jobs-layout-toggle:hover{background:#ffffff14}.jobs-grid{display:grid;grid-template-columns:1fr 2fr;gap:24px;padding-bottom:24px}.jobs-filter{position:sticky;top:0;height:fit-content}.theme-dark .jobs-filter,.theme-dark .jobs-card,.theme-dark .jobs-top-filters{background:#ffffff05;border-color:#ffffff0d;box-shadow:0 4px 20px #0000001a}.jobs-filter h2{margin:0 0 24px;font-size:1.1rem;font-weight:500;letter-spacing:-.01em;display:flex;align-items:center;gap:8px}.jobs-filter h2 svg{color:#0f766e}.theme-dark .jobs-filter h2,.theme-dark .jobs-top-filter-title h2,.theme-dark .jobs-card-title h3{color:#fff}.jobs-filter-block{margin-bottom:24px}.jobs-filter-block>label{display:block;margin-bottom:8px;font-size:.9rem;font-weight:500;color:#374151}.theme-dark .jobs-filter-block>label,.theme-dark .jobs-range-head label,.theme-dark .jobs-hours-row>div>label{color:#d1d5db}.jobs-filter-block>p{margin:0 0 12px;font-size:.74rem;color:#6b7280}.jobs-search-wrap{position:relative}.jobs-search-wrap svg{position:absolute;left:14px;top:50%;transform:translateY(-50%);color:#9ca3af}.jobs-search-wrap input{width:100%;border-radius:12px;border:1px solid rgba(255,255,255,.8);background:#ffffff80;padding:10px 14px 10px 40px;font-size:.87rem;color:#111827;transition:border-color .2s ease,background-color .2s ease,box-shadow .2s ease}.theme-dark .jobs-search-wrap input,.theme-dark .jobs-title-input-wrap,.theme-dark .jobs-title-input-wrap input,.theme-dark .jobs-radio-btn,.theme-dark .jobs-hour-btn{background:#ffffff08;border-color:#ffffff14;color:#d1d5db}.theme-dark .jobs-search-wrap input::placeholder,.theme-dark .jobs-title-input-wrap input::placeholder{color:#6b7280}.jobs-search-wrap input::placeholder{color:#9ca3af}.jobs-search-wrap input:focus{outline:none;border-color:#2dd4bfe6;background:#fff;box-shadow:0 0 0 4px #14b8a61a}.jobs-separator{height:1px;background:#fff9;margin-bottom:24px}.jobs-radio-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}.jobs-radio-btn{border:1px solid rgba(255,255,255,.55);background:#ffffff80;color:#6b7280;font-size:.84rem;font-weight:500;border-radius:12px;padding:10px 12px;cursor:pointer;transition:.2s ease}.jobs-radio-btn:hover{background:#ffffffd1}.jobs-radio-btn.active{color:#0f766e;background:#f0fdfa;border-color:#bae6fd}.theme-dark .jobs-radio-btn.active{color:#2dd4bf;background:#14b8a61a;border-color:#14b8a64d}.jobs-range-block{margin-bottom:28px}.jobs-range-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:12px}.jobs-range-head span{font-size:.84rem;font-weight:500;color:#0f766e;background:#f0fdfa;border:1px solid #ccfbf1;border-radius:6px;padding:2px 8px}.jobs-filter input[type=range]{-webkit-appearance:none;appearance:none;width:100%;background:transparent}.jobs-filter input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;height:20px;width:20px;border-radius:999px;background:#fff;border:2px solid #14b8a6;cursor:pointer;margin-top:-8px;box-shadow:0 2px 6px #0000001a}.jobs-filter input[type=range]::-webkit-slider-runnable-track{width:100%;height:4px;cursor:pointer;border-radius:2px;background:#14b8a633}.jobs-filter input[type=range]:focus{outline:none}.jobs-range-labels{display:flex;justify-content:space-between;margin-top:8px;font-size:.74rem;color:#9ca3af}.jobs-hours-grid{display:flex;flex-wrap:wrap;gap:8px}.jobs-hour-btn{width:40px;height:40px;border-radius:12px;border:1px solid rgba(255,255,255,.55);background:#ffffff80;color:#6b7280;font-size:.84rem;font-weight:500;cursor:pointer;transition:.2s ease}.jobs-hour-btn:hover{background:#ffffffd1}.jobs-hour-btn.active{background:#14b8a6;color:#fff;border-color:#0f766e}.theme-dark .jobs-hour-btn.active{background:#14b8a6;border-color:#14b8a680}.jobs-apply-btn{width:100%;margin-top:8px;border:0;border-radius:12px;background:#111827;color:#fff;padding:12px;font-size:.9rem;font-weight:500;cursor:pointer;transition:background-color .2s ease;box-shadow:0 6px 14px #0f172a29}.theme-dark .jobs-apply-btn{background:#ffffff1a;border:1px solid rgba(255,255,255,.1)}.jobs-apply-btn:hover{background:#1f2937}.jobs-content-head{margin-bottom:20px;display:flex;justify-content:space-between;align-items:center;gap:8px}.jobs-content-head h2{margin:0;font-size:1.25rem;font-weight:500;letter-spacing:-.01em;color:#111827}.jobs-content-head span{font-size:.9rem;color:#6b7280}.jobs-cards{display:grid;grid-template-columns:1fr 1fr;gap:24px}.jobs-card{background:#fff9;border:1px solid rgba(255,255,255,.8);border-radius:24px;backdrop-filter:blur(22px);-webkit-backdrop-filter:blur(22px);box-shadow:0 8px 30px #00000008;padding:24px;transition:transform .2s ease,background-color .2s ease,box-shadow .2s ease;display:flex;flex-direction:column;min-height:100%;cursor:pointer}.jobs-card:hover{background:#fffc;box-shadow:0 10px 24px #0f172a14;transform:translateY(-1px)}.jobs-card-top{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:16px}.jobs-card-logo{width:56px;height:56px;border-radius:16px;background:#111827;color:#fff;font-size:1.4rem;font-weight:500;display:grid;place-items:center;box-shadow:0 4px 10px #0f172a1f}.jobs-card-logo-image-wrap{background:#fff;border:1px solid rgba(229,231,235,.85);box-shadow:0 4px 10px #0f172a14;overflow:hidden}.jobs-card-logo-image{width:100%;height:100%;object-fit:cover}.jobs-card-title{margin-bottom:8px}.jobs-card-title h3{margin:0;font-size:1.1rem;font-weight:500;letter-spacing:-.01em;color:#111827;transition:color .2s ease}.theme-dark .jobs-card-title h3{color:#fff}.jobs-card:hover .jobs-card-title h3{color:#0f766e}.jobs-card-title p{margin:2px 0 0;font-size:.86rem;color:#6b7280}.jobs-card-description{margin:0 0 22px;color:#4b5563;font-size:.86rem;line-height:1.5;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.jobs-card-bottom{margin-top:auto;padding-top:14px;border-top:1px solid rgba(255,255,255,.65);display:flex;align-items:center;justify-content:space-between}.theme-dark .jobs-card-bottom{border-top-color:#ffffff14}.jobs-card-distance{display:inline-flex;align-items:center;gap:6px;color:#6b7280;font-size:.78rem}.jobs-card-distance svg{color:#0f766e}.jobs-card-arrow{width:32px;height:32px;border-radius:999px;border:1px solid #e5e7eb;color:#9ca3af;background:#fff;display:grid;place-items:center;cursor:pointer;transition:.2s ease}.theme-dark .jobs-card-arrow{background:#ffffff0d;border-color:#ffffff1a;color:#6b7280}.jobs-card:hover .jobs-card-arrow{background:#f0fdfa;color:#0f766e;border-color:#99f6e4}.jobs-load-more-wrap{margin-top:28px;display:flex;justify-content:center}.jobs-load-more{border:1px solid #d1d5db;border-radius:12px;background:#ffffff59;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);color:#4b5563;padding:10px 24px;font-size:.86rem;font-weight:500;cursor:pointer;transition:.2s ease}.jobs-load-more:hover{background:#fff9;color:#111827;border-color:#9ca3af}.jobs-top-layout{display:grid;gap:24px;padding-bottom:24px}.jobs-top-filters{padding:24px}.jobs-top-filter-title{display:flex;align-items:center;gap:8px;margin-bottom:20px}.jobs-top-filter-title h2{margin:0;font-size:1.1rem;font-weight:500;letter-spacing:-.01em}.jobs-top-filter-title svg{color:#0f766e}.jobs-top-controls{display:grid;grid-template-columns:1.3fr 1fr 1fr auto;gap:20px;align-items:end;margin-bottom:20px}.jobs-filter-block.no-margin{margin-bottom:0}.jobs-top-range{padding-bottom:4px}.jobs-top-apply{margin-top:0;min-width:180px}.jobs-title-picker{position:relative}.jobs-title-input-wrap{display:flex;flex-wrap:wrap;gap:8px;min-height:46px;border-radius:12px;border:1px solid rgba(255,255,255,.8);background:#ffffff80;padding:6px;align-items:center}.jobs-title-input-wrap:focus-within{border-color:#2dd4bfe6;background:#fff;box-shadow:0 0 0 4px #14b8a61a}.jobs-title-chip{display:inline-flex;align-items:center;gap:4px;padding:6px 10px;border-radius:10px;background:#fff;border:1px solid rgba(229,231,235,.8);box-shadow:0 1px 3px #0f172a0f;font-size:.72rem;font-weight:500;color:#374151}.jobs-title-chip button{border:0;background:transparent;color:#9ca3af;display:grid;place-items:center;cursor:pointer;padding:0}.jobs-title-chip button:hover{color:#111827}.jobs-title-input-wrap input{flex:1;min-width:180px;border:0;background:transparent;outline:none;font-size:.86rem;color:#374151;padding:6px 8px}.jobs-title-input-wrap input::placeholder{color:#9ca3af}.jobs-title-suggestions{position:absolute;top:calc(100% + 8px);left:0;width:min(100%,340px);background:#ffffffe6;border:1px solid rgba(255,255,255,.8);border-radius:16px;backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px);box-shadow:0 10px 36px #0000001a;padding:8px;display:grid;gap:4px;opacity:0;visibility:hidden;transform:scale(.98);transform-origin:top left;transition:.18s ease;z-index:40}.jobs-title-picker:focus-within .jobs-title-suggestions{opacity:1;visibility:visible;transform:scale(1)}.jobs-title-option{border:0;border-radius:10px;background:transparent;color:#4b5563;font-size:.84rem;font-weight:500;padding:10px 12px;display:flex;align-items:center;justify-content:space-between;cursor:pointer}.jobs-title-option:hover{background:#ffffffd9;color:#111827}.jobs-title-option.active{color:#0f766e;background:#14b8a61a}.jobs-title-option.active svg{color:#14b8a6}.jobs-separator.top-margin{margin:24px 0}.jobs-hours-row{display:flex;justify-content:space-between;gap:16px;align-items:center}.jobs-hours-row>div>label{display:block;margin-bottom:3px;font-size:.9rem;font-weight:500;color:#374151}.jobs-hours-row>div>p{margin:0;font-size:.74rem;color:#6b7280}.jobs-cards.jobs-cards-top{grid-template-columns:1fr 1fr 1fr}@media(max-width:1200px){.jobs-grid{grid-template-columns:1fr}.jobs-filter{position:static}.jobs-top-controls{grid-template-columns:1fr 1fr}.jobs-top-apply{width:100%}.jobs-hours-row{flex-direction:column;align-items:flex-start}.jobs-cards.jobs-cards-top{grid-template-columns:1fr 1fr}}@media(max-width:860px){.jobs-cards,.jobs-top-controls,.jobs-cards.jobs-cards-top{grid-template-columns:1fr}.jobs-layout-toggle span{display:none}}.msg-main{display:flex;flex-direction:column}.msg-head{margin-bottom:16px;display:flex;justify-content:space-between;gap:12px;align-items:flex-end}.msg-head h1{margin:0 0 8px;font-size:clamp(2rem,4vw,2.9rem);font-weight:500;letter-spacing:-.03em}.msg-head p{margin:0;color:#6b7280;font-size:1.05rem}.theme-dark .msg-head h1,.theme-dark .msg-head p{color:#fff}.theme-dark .msg-head p{color:#9ca3af}.msg-mark-btn{border:1px solid rgba(229,231,235,.85);background:#fff;color:#374151;border-radius:12px;padding:10px 16px;font-size:.84rem;font-weight:500;display:inline-flex;align-items:center;gap:8px;cursor:pointer;box-shadow:0 2px 8px #0f172a0f}.msg-mark-btn:hover{background:#f9fafb}.theme-dark .msg-mark-btn{border-color:#ffffff1a;background:#ffffff0d;color:#d1d5db}.theme-dark .msg-mark-btn:hover{background:#ffffff14}.msg-layout{flex:1;min-height:500px;margin-bottom:4px;display:flex;gap:24px}.msg-threads{width:33.333%;min-width:330px;background:#fff9;border:1px solid rgba(255,255,255,.8);border-radius:24px;backdrop-filter:blur(22px);-webkit-backdrop-filter:blur(22px);box-shadow:0 8px 30px #00000008;display:flex;flex-direction:column;overflow:hidden}.theme-dark .msg-threads,.theme-dark .msg-chat{background:#ffffff05;border-color:#ffffff0d;box-shadow:0 4px 20px #0000001a}.msg-threads-head{padding:16px;border-bottom:1px solid rgba(255,255,255,.62)}.msg-search-wrap{position:relative;margin-bottom:10px}.msg-search-wrap svg{position:absolute;left:12px;top:50%;transform:translateY(-50%);color:#9ca3af}.msg-search-wrap input{width:100%;border-radius:12px;border:1px solid rgba(255,255,255,.82);background:#ffffff80;padding:10px 12px 10px 38px;font-size:.86rem;color:#111827}.theme-dark .msg-search-wrap input{background:#ffffff08;border-color:#ffffff14;color:#f3f4f6}.msg-search-wrap input:focus{outline:none;border-color:#2dd4bfe6;box-shadow:0 0 0 4px #14b8a61a}.msg-filter-row{display:flex;gap:8px}.msg-filter-row button{border:1px solid rgba(255,255,255,.75);background:#ffffffa6;color:#4b5563;border-radius:10px;padding:6px 12px;font-size:.72rem;font-weight:500;cursor:pointer}.msg-filter-row button.active{background:#f0fdfa;border-color:#ccfbf1;color:#0f766e}.theme-dark .msg-filter-row button{background:#ffffff0d;border-color:#ffffff14;color:#9ca3af}.theme-dark .msg-filter-row button.active{background:#14b8a61a;border-color:#14b8a64d;color:#2dd4bf}.msg-thread-list{padding:10px;overflow-y:auto;display:grid;gap:6px}.msg-thread-item{width:100%;border:1px solid transparent;background:transparent;border-radius:16px;display:flex;align-items:flex-start;gap:10px;padding:10px;text-align:left;cursor:pointer;position:relative}.msg-thread-item:hover{background:#ffffff6b;border-color:#ffffff9e}.theme-dark .msg-thread-item:hover{background:#ffffff0d;border-color:#ffffff1a}.msg-thread-item.active{background:#ffffffd1;border-color:#fff;box-shadow:0 2px 8px #0f172a0d}.theme-dark .msg-thread-item.active{background:#ffffff1a;border-color:#ffffff1f}.msg-thread-item.active:before{content:"";position:absolute;left:0;top:10px;bottom:10px;width:4px;border-radius:999px;background:#14b8a6}.msg-thread-avatar-wrap{width:44px;height:44px;position:relative;flex-shrink:0}.msg-thread-avatar,.msg-thread-avatar-fallback{width:44px;height:44px;border-radius:999px;object-fit:cover}.msg-thread-avatar-fallback{background:linear-gradient(135deg,#c7d2fe,#e9d5ff);color:#4338ca;display:grid;place-items:center;font-size:.84rem;font-weight:600}.msg-thread-online{position:absolute;right:0;bottom:0;width:10px;height:10px;border-radius:999px;border:2px solid #fff;background:#22c55e}.msg-thread-content{min-width:0;flex:1}.msg-thread-row{display:flex;justify-content:space-between;align-items:baseline;gap:8px;margin-bottom:2px}.msg-thread-row h3{margin:0;font-size:.86rem;font-weight:500;color:#111827;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.theme-dark .msg-thread-row h3,.theme-dark .msg-chat-head h2{color:#fff}.msg-thread-row span{font-size:.72rem;color:#9ca3af;flex-shrink:0}.msg-thread-content p{margin:0;color:#6b7280;font-size:.8rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.theme-dark .msg-thread-content p,.theme-dark .msg-thread-content small,.theme-dark .msg-thread-row span{color:#9ca3af}.msg-thread-content p.unread{color:#1f2937;font-weight:500}.msg-thread-content small{margin-top:2px;display:inline-block;color:#9ca3af;font-size:.72rem}.msg-thread-unread{width:20px;height:20px;border-radius:999px;background:#14b8a6;color:#fff;display:grid;place-items:center;font-size:.64rem;font-weight:600;flex-shrink:0;margin-top:2px}.msg-chat{width:66.667%;background:#fff9;border:1px solid rgba(255,255,255,.8);border-radius:24px;backdrop-filter:blur(22px);-webkit-backdrop-filter:blur(22px);box-shadow:0 8px 30px #00000008;display:flex;flex-direction:column;overflow:hidden}.msg-chat-head{padding:14px 18px;border-bottom:1px solid rgba(255,255,255,.62);background:#ffffff4d;display:flex;justify-content:space-between;align-items:center}.theme-dark .msg-chat-head{background:#ffffff08;border-bottom-color:#ffffff14}.msg-chat-head h2{margin:0;font-size:1rem;font-weight:500;color:#111827}.msg-chat-company{display:flex;align-items:center;gap:12px}.msg-chat-company p{margin:2px 0 0;color:#0f766e;font-size:.74rem;font-weight:500}.theme-dark .msg-chat-company p{color:#2dd4bf}.msg-chat-avatar,.msg-chat-avatar-fallback{width:40px;height:40px;border-radius:999px;object-fit:cover}.msg-chat-avatar-fallback{display:grid;place-items:center;background:linear-gradient(135deg,#c7d2fe,#e9d5ff);color:#4338ca;font-size:.84rem;font-weight:600}.msg-chat-actions{display:flex;gap:8px}.msg-chat-actions button{width:34px;height:34px;border-radius:999px;border:1px solid rgba(255,255,255,.82);background:#ffffff8c;color:#4b5563;display:grid;place-items:center;cursor:pointer}.theme-dark .msg-chat-actions button{background:#ffffff0d;border-color:#ffffff1a;color:#9ca3af}.msg-chat-actions button:hover{background:#fff}.msg-chat-body{flex:1;overflow-y:auto;padding:20px;display:grid;align-content:start;gap:10px;background:linear-gradient(to bottom,transparent,rgba(255,255,255,.2))}.theme-dark .msg-chat-body{background:linear-gradient(to bottom,transparent,rgba(255,255,255,.03))}.msg-day-sep{display:table;width:fit-content;margin:0 auto;font-size:.72rem;color:#9ca3af;border:1px solid rgba(255,255,255,.68);background:#ffffff85;padding:3px 10px;border-radius:999px}.theme-dark .msg-day-sep{color:#9ca3af;border-color:#ffffff1a;background:#ffffff0d}.msg-bubble-row{display:flex;gap:8px;max-width:75%}.msg-bubble-row.mine{margin-left:auto;flex-direction:row-reverse}.msg-mini-avatar,.msg-mini-avatar-fallback{width:30px;height:30px;border-radius:999px;object-fit:cover;margin-top:auto}.msg-mini-avatar-fallback{display:grid;place-items:center;background:#e5e7eb;color:#374151;font-size:.7rem;font-weight:600}.msg-bubble-wrap{display:grid;gap:3px}.msg-time{color:#9ca3af;font-size:.68rem}.msg-bubble{border-radius:16px 16px 16px 6px;background:#fff;border:1px solid rgba(255,255,255,.85);color:#374151;padding:10px 12px;font-size:.84rem;line-height:1.45;box-shadow:0 2px 8px #0f172a0a}.theme-dark .msg-bubble{background:#ffffff14;border-color:#ffffff1a;color:#e5e7eb}.msg-bubble.mine{background:#14b8a6;border-color:#14b8a6;color:#fff;border-bottom-left-radius:16px;border-bottom-right-radius:6px}.msg-input-area{padding:12px;border-top:1px solid rgba(255,255,255,.62);background:#ffffff59}.theme-dark .msg-input-area{border-top-color:#ffffff14;background:#ffffff08}.msg-input-wrap{border-radius:16px;border:1px solid rgba(255,255,255,.85);background:#fffc;box-shadow:0 2px 8px #0f172a0d;padding:6px;display:flex;align-items:flex-end;gap:6px}.theme-dark .msg-input-wrap{background:#ffffff0d;border-color:#ffffff1a}.theme-dark .msg-input-wrap textarea{color:#fff}.msg-input-wrap>button{width:34px;height:34px;border:0;background:transparent;color:#9ca3af;border-radius:10px;display:grid;place-items:center;cursor:pointer}.msg-input-wrap>button:hover{color:#0f766e;background:#f0fdfa}.msg-input-wrap textarea{flex:1;border:0;background:transparent;resize:none;outline:none;padding:8px;font-size:.84rem;color:#111827;max-height:120px}.msg-send-btn{min-width:84px;width:auto;padding:0 12px;border-radius:10px;border:0;background:#111827;color:#fff;font-size:.82rem;font-weight:500;display:inline-flex;align-items:center;gap:6px;justify-content:center}.msg-send-btn:hover{background:#1f2937}@media(max-width:1200px){.msg-layout{flex-direction:column;min-height:0}.msg-threads,.msg-chat{width:100%;min-width:0}.msg-threads{height:360px}.msg-chat{height:500px}}@media(max-width:860px){.msg-head{flex-direction:column;align-items:flex-start}.msg-mark-btn{width:100%;justify-content:center}.msg-bubble-row{max-width:88%}}.sim-main{position:relative}.sim-leave-btn{border:1px solid rgba(229,231,235,.82);background:#ffffff9e;border-radius:999px;padding:8px 12px;display:inline-flex;align-items:center;gap:8px;color:#6b7280;font-size:.8rem;font-weight:500;cursor:pointer}.sim-leave-btn:hover{color:#111827;background:#ffffffd9}.sim-wrap{max-width:1160px;margin:0 auto;padding-bottom:30px}.sim-live-wrap{padding-bottom:24px}.sim-live-head{margin-bottom:22px}.sim-live-head h1{margin:0 0 8px;font-size:clamp(1.9rem,3vw,2.3rem);letter-spacing:-.03em;color:#111827}.sim-live-head p{margin:0;color:#6b7280}.sim-live-grid{min-height:calc(100vh - 260px);display:grid;grid-template-columns:minmax(0,2fr) minmax(0,1fr);gap:22px}.sim-live-chat-card{border-radius:24px;border:1px solid rgba(229,231,235,.82);background:#ffffff9e;backdrop-filter:blur(22px);-webkit-backdrop-filter:blur(22px);box-shadow:0 8px 24px #0000000a;display:flex;flex-direction:column;overflow:hidden}.sim-live-chat-head{padding:14px 18px;border-bottom:1px solid rgba(229,231,235,.7);background:#ffffff6b;display:flex;align-items:center;justify-content:space-between;gap:10px}.sim-live-ai-row{display:flex;align-items:center;gap:10px}.sim-live-ai-avatar{width:40px;height:40px;border-radius:999px;border:1px solid #c7d2fe;background:#eef2ff;color:#4f46e5;display:grid;place-items:center}.sim-live-ai-row h3{margin:0 0 2px;color:#111827;font-size:.86rem;font-weight:500}.sim-live-ai-row p{margin:0;color:#6366f1;font-size:.74rem;display:inline-flex;align-items:center;gap:4px}.sim-live-ai-row p svg{animation:sim-pulse 1.8s ease-in-out infinite}.sim-live-more-btn{width:30px;height:30px;border-radius:999px;border:0;background:#f3f4f6cc;color:#6b7280;display:grid;place-items:center;cursor:pointer}.sim-live-chat-scroll{flex:1;overflow-y:auto;padding:20px;display:grid;align-content:start;gap:18px}.sim-live-msg-row{display:flex;align-items:flex-start;gap:10px;max-width:88%}.sim-live-msg-row.me{margin-left:auto;flex-direction:row-reverse}.sim-live-msg-avatar{width:30px;height:30px;border-radius:999px;flex-shrink:0;overflow:hidden;display:grid;place-items:center}.sim-live-msg-avatar.ai{border:1px solid #c7d2fe;background:#eef2ff;color:#4f46e5}.sim-live-msg-avatar.me{border:1px solid #d1d5db;background:#f9fafb;color:#6b7280}.sim-live-msg-avatar img{width:100%;height:100%;object-fit:cover}.sim-live-msg-bubble{padding:14px 16px;border-radius:16px;box-shadow:0 2px 10px #0f172a0d}.sim-live-msg-bubble.ai{border-top-left-radius:4px;border:1px solid rgba(229,231,235,.85);background:#fff}.sim-live-msg-bubble.me{border-top-right-radius:4px;background:#4f46e5;color:#eef2ff}.sim-live-msg-bubble p{margin:0;font-size:.86rem;line-height:1.6}.sim-live-msg-bubble.ai p{color:#4b5563}.sim-live-voice{border-top:1px solid rgba(229,231,235,.72);background:#ffffffc7;padding:18px;display:grid;justify-items:center;gap:10px}.sim-live-time-row{width:min(420px,100%);display:flex;align-items:center;justify-content:space-between;gap:10px}.sim-live-time{text-align:center}.sim-live-time small{display:block;color:#9ca3af;font-size:.68rem;margin-bottom:4px}.sim-live-time strong{color:#111827;font-size:.84rem;font-weight:600}.sim-live-wave{flex:1;max-width:180px;display:flex;align-items:center;justify-content:center;gap:6px}.sim-live-wave span{width:4px;height:28px;border-radius:999px;background:#6366f1;transform-origin:center;animation:sim-wave 1.2s ease-in-out infinite}.sim-live-mic-btn{width:62px;height:62px;border-radius:999px;border:2px solid #fecdd3;background:#fff1f2;color:#e11d48;display:grid;place-items:center;cursor:pointer;position:relative}.sim-live-mic-btn:before{content:"";position:absolute;inset:-2px;border-radius:999px;background:#fb718533;animation:sim-pulse-soft 2s ease-in-out infinite;z-index:0}.sim-live-mic-btn svg{position:relative;z-index:1}.sim-live-voice>p{margin:0;color:#e11d48;font-size:.76rem;animation:sim-pulse 2s ease-in-out infinite}.sim-live-side{overflow-y:auto;padding-right:2px;display:grid;align-content:start;gap:14px}.sim-live-side-card{border-radius:24px;border:1px solid rgba(229,231,235,.82);background:#ffffff9e;padding:16px}.sim-live-side-card h2{margin:0 0 14px;font-size:.78rem;color:#6b7280;text-transform:uppercase;letter-spacing:.03em}.sim-live-side-list{display:grid;gap:14px}.sim-live-side-list small{display:block;color:#6b7280;font-size:.7rem;margin-bottom:3px}.sim-live-side-list p{margin:0;color:#111827;font-size:.82rem;display:inline-flex;align-items:center;gap:6px}.sim-live-progress-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}.sim-live-progress-head strong{color:#111827;font-size:.72rem}.sim-live-progress-track{height:6px;background:#e5e7eb;border-radius:999px;overflow:hidden}.sim-live-progress-track>span{display:block;width:40%;height:100%;background:#6366f1;box-shadow:0 0 8px #6366f180}.sim-live-coach-card{border-radius:24px;border:1px solid #c7d2fe;background:linear-gradient(to bottom right,#eef2ffb3,#fffc);padding:16px}.sim-live-coach-card h2{margin:0 0 12px;font-size:.82rem;color:#312e81;display:inline-flex;align-items:center;gap:6px}.sim-live-coach-list{display:grid;gap:10px}.sim-live-coach-list>div{border-radius:12px;border:1px solid rgba(224,231,255,.9);background:#fff;padding:11px;display:flex;align-items:flex-start;gap:8px}.sim-live-coach-list>div:first-child svg{color:#10b981}.sim-live-coach-list>div:last-child svg{color:#f59e0b}.sim-live-coach-list strong{display:block;margin-bottom:3px;color:#111827;font-size:.75rem}.sim-live-coach-list p{margin:0;color:#6b7280;font-size:.72rem;line-height:1.5}.sim-live-actions{display:grid;gap:10px}.sim-live-actions button{border-radius:12px;border:1px solid rgba(229,231,235,.82);background:#f9fafb;color:#4b5563;padding:10px 12px;display:inline-flex;align-items:center;justify-content:center;gap:8px;font-size:.82rem;font-weight:500;cursor:pointer}.sim-live-actions button:hover{background:#f3f4f6;color:#111827}.sim-live-actions button.stop{border-color:#111827;background:#111827;color:#fff}.sim-live-actions button.stop:hover{background:#1f2937}@keyframes sim-wave{0%,to{transform:scaleY(.35)}50%{transform:scaleY(1)}}@keyframes sim-pulse-soft{0%,to{transform:scale(1);opacity:1}50%{transform:scale(1.1);opacity:.8}}@keyframes sim-pulse{0%,to{opacity:1}50%{opacity:.7}}.sim-hero-card{position:relative;overflow:hidden;border-radius:30px;border:1px solid rgba(229,231,235,.8);background:#ffffff9e;backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px);box-shadow:0 8px 30px #0000000a;padding:30px;margin-bottom:28px;display:grid;grid-template-columns:minmax(0,1.8fr) minmax(0,.9fr);gap:24px}.sim-hero-glow{position:absolute;top:-80px;right:-80px;width:260px;height:260px;border-radius:999px;background:#6366f11f;filter:blur(70px);pointer-events:none}.sim-hero-left h1{margin:0 0 12px;font-size:clamp(1.9rem,3vw,2.55rem);letter-spacing:-.03em;color:#111827}.sim-hero-left p{margin:0 0 22px;line-height:1.65;color:#4b5563}.sim-benefits{margin:0 0 24px;padding:0;list-style:none;display:grid;gap:10px}.sim-benefits li{display:inline-flex;align-items:center;gap:9px;color:#374151;font-size:.88rem}.sim-benefits li svg{color:#10b981;flex-shrink:0}.sim-start-btn{border:0;border-radius:12px;background:#111827;color:#fff;padding:11px 16px;display:inline-flex;align-items:center;gap:8px;font-size:.86rem;font-weight:500;cursor:pointer}.sim-start-btn:hover{background:#1f2937}.sim-config-card{border-radius:24px;border:1px solid rgba(229,231,235,.8);background:#ffffffc7;box-shadow:0 2px 8px #0f172a0a;padding:18px;display:grid;gap:12px;align-content:start}.sim-config-head h3{margin:0;font-size:.92rem;color:#111827}.sim-config-head p{margin:3px 0 0;color:#6b7280;font-size:.74rem}.sim-config-card label{display:grid;gap:6px;font-size:.75rem;color:#6b7280;font-weight:500}.sim-select-wrap{border:1px solid rgba(229,231,235,.8);background:#fff;border-radius:12px;padding:0 12px;display:flex;align-items:center;gap:8px;box-shadow:0 2px 4px #00000005;transition:border-color .2s ease,box-shadow .2s ease}.sim-select-wrap svg{color:#9ca3af;flex-shrink:0;transition:color .2s ease}.sim-select-wrap select{width:100%;min-width:0;border:0;background:transparent;color:#374151;font-size:.84rem;font-weight:500;padding:11px 0;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none;cursor:pointer}.sim-caret{color:#9ca3af}.sim-select-wrap:hover{border-color:#9ca3afcc;box-shadow:0 5px 12px #0f172a0f}.sim-select-wrap:hover>svg,.sim-select-wrap:hover .sim-caret{color:#6366f1}.sim-mini-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}.sim-history-head{margin-bottom:14px;display:flex;align-items:center;justify-content:space-between;gap:10px}.sim-history-head h2{margin:0;color:#111827;font-size:1.25rem;font-weight:500}.sim-history-head button{border:0;background:transparent;display:inline-flex;align-items:center;gap:6px;color:#6b7280;cursor:pointer;font-size:.84rem;font-weight:500}.sim-history-head button:hover{color:#111827}.sim-history-grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:16px}.sim-card{border-radius:22px;border:1px solid rgba(229,231,235,.8);background:#fffc;box-shadow:0 8px 18px #00000008;padding:18px;display:flex;flex-direction:column;min-height:100%}.sim-card.draft{background:#f9fafbcc;opacity:.85}.sim-card-head{display:flex;align-items:flex-start;justify-content:space-between;gap:8px;margin-bottom:14px}.sim-card-head h3{margin:0 0 2px;color:#111827;font-size:.95rem;letter-spacing:-.01em}.sim-card-head p{margin:0;color:#6b7280;font-size:.82rem}.sim-status{font-size:.69rem;font-weight:500;border-radius:8px;padding:4px 8px;border:1px solid;flex-shrink:0}.sim-status.done{color:#059669;background:#ecfdf5;border-color:#a7f3d0}.sim-status.draft{color:#4b5563;background:#e5e7eb73;border-color:#d1d5dbe6}.sim-tags{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:18px}.sim-tags span{display:inline-flex;align-items:center;gap:6px;border-radius:8px;border:1px solid rgba(229,231,235,.8);background:#f9fafbd9;color:#4b5563;font-size:.72rem;font-weight:500;padding:6px 9px}.sim-card-foot{margin-top:auto;padding-top:12px;border-top:1px solid rgba(229,231,235,.65);display:flex;justify-content:space-between;align-items:center;gap:8px}.sim-card-foot small{color:#9ca3af;font-size:.72rem}.sim-link-btn{border:0;background:transparent;display:inline-flex;align-items:center;gap:6px;color:#4f46e5;cursor:pointer;font-size:.82rem;font-weight:500}.sim-link-btn:hover{color:#4338ca}.theme-dark .sim-hero-card,.theme-dark .sim-config-card,.theme-dark .sim-card,.theme-dark .sim-live-chat-card,.theme-dark .sim-live-side-card{background:#ffffff05;border-color:#ffffff0f}.theme-dark .sim-hero-left h1,.theme-dark .sim-config-head h3,.theme-dark .sim-history-head h2,.theme-dark .sim-card-head h3,.theme-dark .sim-live-head h1,.theme-dark .sim-live-ai-row h3,.theme-dark .sim-live-side-list p,.theme-dark .sim-live-progress-head strong,.theme-dark .sim-live-coach-list strong,.theme-dark .sim-live-time strong{color:#fff}.theme-dark .sim-hero-left p,.theme-dark .sim-benefits li,.theme-dark .sim-config-head p,.theme-dark .sim-config-card label,.theme-dark .sim-card-head p,.theme-dark .sim-tags span,.theme-dark .sim-history-head button,.theme-dark .sim-live-head p,.theme-dark .sim-live-side-list small,.theme-dark .sim-live-coach-list p,.theme-dark .sim-live-time small,.theme-dark .sim-leave-btn{color:#9ca3af}.theme-dark .sim-start-btn{background:#ffffff1a;border:1px solid rgba(255,255,255,.12)}.theme-dark .sim-select-wrap{background:#ffffff08;border-color:#ffffff14}.theme-dark .sim-select-wrap select{color:#d1d5db}.theme-dark .sim-live-chat-head,.theme-dark .sim-live-voice{border-color:#ffffff14;background:#ffffff0a}.theme-dark .sim-live-more-btn{background:#ffffff14;color:#9ca3af}.theme-dark .sim-live-ai-avatar,.theme-dark .sim-live-msg-avatar.ai{background:#6366f133;border-color:#818cf866;color:#a5b4fc}.theme-dark .sim-live-msg-avatar.me{border-color:#ffffff1f;background:#ffffff0f}.theme-dark .sim-live-msg-bubble.ai{background:#ffffff0a;border-color:#ffffff1a}.theme-dark .sim-live-msg-bubble.ai p{color:#d1d5db}.theme-dark .sim-live-msg-bubble.me{background:#4f46e5}.theme-dark .sim-live-progress-track{background:#ffffff1a}.theme-dark .sim-live-coach-card{background:linear-gradient(to bottom right,#4f46e52e,#ffffff08);border-color:#818cf873}.theme-dark .sim-live-coach-card h2{color:#c7d2fe}.theme-dark .sim-live-coach-list>div{background:#ffffff0a;border-color:#ffffff1a}.theme-dark .sim-tags span{background:#ffffff08;border-color:#ffffff14}.theme-dark .sim-status.done{background:#10b98126;border-color:#10b98173;color:#34d399}.theme-dark .sim-status.draft{background:#ffffff12;border-color:#ffffff1f;color:#d1d5db}.theme-dark .sim-card-foot{border-top-color:#ffffff14}.theme-dark .sim-link-btn{color:#818cf8}.theme-dark .sim-live-actions button{background:#ffffff0a;border-color:#ffffff1a;color:#d1d5db}.theme-dark .sim-live-actions button.stop{background:#1f2937;border-color:#374151;color:#fff}@media(max-width:1180px){.sim-live-grid{grid-template-columns:1fr;min-height:auto}.sim-live-chat-card{min-height:520px}.sim-live-side{overflow:visible;padding-right:0}.sim-hero-card{grid-template-columns:1fr}.sim-history-grid{grid-template-columns:1fr 1fr}}@media(max-width:760px){.sim-live-chat-card{min-height:auto}.sim-live-time-row{flex-direction:column;gap:8px}.sim-wrap{padding-bottom:18px}.sim-hero-card{padding:20px;border-radius:24px}.sim-history-grid,.sim-mini-grid{grid-template-columns:1fr}}.sub-main{position:relative}.sub-top-actions{display:inline-flex;align-items:center;gap:10px}.sub-crumb-pill{border-radius:999px;border:1px solid rgba(229,231,235,.8);background:#ffffff9e;padding:7px 11px;font-size:.8rem;color:#4b5563;display:inline-flex;align-items:center;gap:6px}.sub-crumb-pill svg{color:#14b8a6}.sub-toggle-btn{border:0;border-radius:999px;background:#111827;color:#fff;font-size:.72rem;font-weight:500;padding:8px 12px;cursor:pointer}.sub-toggle-btn:hover{background:#1f2937}.sub-head{margin-bottom:18px;max-width:850px}.sub-head-title-row{display:flex;align-items:center;gap:10px;margin-bottom:6px}.sub-head-icon{width:40px;height:40px;border-radius:12px;background:linear-gradient(135deg,#2dd4bf,#06b6d4);color:#fff;display:grid;place-items:center}.sub-head h1{margin:0;color:#111827;font-size:clamp(2rem,3.2vw,2.5rem);letter-spacing:-.03em}.sub-head p{margin:0;color:#6b7280;line-height:1.65}.sub-wrap{max-width:1200px;padding-bottom:20px}.sub-redeem-card{max-width:900px;border-radius:24px;border:1px solid rgba(229,231,235,.8);background:#ffffff9e;backdrop-filter:blur(22px);-webkit-backdrop-filter:blur(22px);box-shadow:0 8px 24px #00000008;padding:20px;margin-bottom:22px}.sub-redeem-head{display:flex;align-items:center;gap:6px;margin-bottom:6px}.sub-redeem-head h2{margin:0;color:#111827;font-size:1.06rem}.sub-redeem-card p{margin:0 0 12px;color:#6b7280;font-size:.86rem}.sub-redeem-row{max-width:560px;display:grid;grid-template-columns:1fr auto;gap:8px}.sub-redeem-row input{border-radius:12px;border:1px solid rgba(229,231,235,.8);background:#ffffffd9;color:#111827;font-size:.86rem;padding:10px 12px;outline:none}.sub-redeem-row input:focus{border-color:#14b8a6b3;box-shadow:0 0 0 3px #14b8a61f}.sub-redeem-row button{border:0;border-radius:12px;background:#111827;color:#fff;font-size:.82rem;font-weight:500;padding:10px 14px;cursor:pointer}.sub-redeem-row button:hover{background:#1f2937}.sub-redeem-row button:disabled{opacity:.7;cursor:not-allowed}.sub-redeem-card small{margin-top:8px;display:block;color:#0f766e}.sub-plan-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}.sub-plan-card{position:relative;border-radius:24px;border:1px solid rgba(229,231,235,.8);background:#ffffff9e;backdrop-filter:blur(22px);-webkit-backdrop-filter:blur(22px);padding:20px;cursor:pointer}.sub-plan-card.popular{background:#fffc}.sub-plan-card.yearly{border-color:#c7d2fee6}.sub-plan-card.selected{border-color:#14b8a6cc;box-shadow:0 8px 28px #14b8a61f;background:#f0fdfa6b}.sub-plan-card.yearly.selected{border-color:#6366f1cc;box-shadow:0 8px 28px #6366f11f;background:#eef2ff59}.sub-plan-card input{position:absolute;opacity:0;pointer-events:none}.sub-popular-badge{position:absolute;top:-12px;left:50%;transform:translate(-50%);border-radius:999px;padding:4px 10px;background:#111827;color:#fff;font-size:.64rem;font-weight:600;letter-spacing:.05em;text-transform:uppercase}.sub-radio-indicator{position:absolute;top:20px;right:20px;width:20px;height:20px;border-radius:999px;border:1px solid #d1d5db;display:grid;place-items:center}.sub-radio-indicator i{width:8px;height:8px;border-radius:999px;background:#fff;opacity:0}.sub-plan-card.selected .sub-radio-indicator{border-color:#14b8a6;background:#14b8a6}.sub-plan-card.selected .sub-radio-indicator i{opacity:1}.sub-plan-card.yearly.selected .sub-radio-indicator{border-color:#6366f1;background:#6366f1}.sub-plan-content{display:grid;align-content:start;height:100%}.sub-plan-title-row{display:flex;align-items:center;gap:8px}.sub-plan-title-row h3{margin:0;color:#111827;font-size:1.08rem}.sub-plan-title-row span{border-radius:6px;border:1px solid rgba(153,246,228,.7);background:#f0fdfae6;color:#0f766e;font-size:.64rem;font-weight:600;padding:2px 6px}.sub-price{margin-top:10px;color:#111827;font-size:2rem;font-weight:600;letter-spacing:-.03em}.sub-price-daily{margin:2px 0 0;color:#6b7280;font-size:.8rem}.sub-gift-box{margin-top:12px;border-radius:12px;border:1px solid rgba(199,210,254,.8);background:linear-gradient(to bottom right,#eef2ffe6,#f5f3ffcc);padding:10px;display:flex;align-items:flex-start;gap:8px}.sub-gift-box strong{display:block;color:#111827;font-size:.78rem;margin-bottom:2px}.sub-gift-box small{color:#4b5563;font-size:.72rem;line-height:1.45}.sub-divider{margin:14px 0;height:1px;background:#e5e7ebcc}.sub-plan-content ul{margin:0;padding:0;list-style:none;display:grid;gap:10px}.sub-plan-content li{display:flex;align-items:flex-start;gap:8px}.sub-plan-content li svg{color:#14b8a6;margin-top:2px;flex-shrink:0}.sub-plan-card.yearly .sub-plan-content li svg{color:#6366f1}.sub-plan-content li span{color:#374151;font-size:.8rem;line-height:1.5}.sub-checkout-card{margin-top:20px;border-radius:24px;border:1px solid rgba(229,231,235,.8);background:#ffffff9e;padding:20px;display:flex;align-items:center;justify-content:space-between;gap:20px}.sub-checkout-card h3{margin:0 0 4px;color:#111827;font-size:1.06rem}.sub-checkout-card p{margin:0;color:#6b7280;font-size:.84rem}.sub-checkout-actions{display:grid;gap:10px;justify-items:end}.sub-checkout-actions label{display:inline-flex;align-items:center;gap:8px;cursor:pointer;color:#4b5563;font-size:.8rem}.sub-checkout-actions input{position:absolute;opacity:0;pointer-events:none}.sub-checkbox{width:18px;height:18px;border-radius:5px;border:1px solid #d1d5db;background:#fff;display:grid;place-items:center;color:#fff}.sub-checkout-actions input:checked+.sub-checkbox{background:#14b8a6;border-color:#14b8a6}.sub-checkout-actions .sub-checkbox svg{opacity:0}.sub-checkout-actions input:checked+.sub-checkbox svg{opacity:1}.sub-checkout-actions>button{border:0;border-radius:12px;background:#111827;color:#fff;font-size:.92rem;font-weight:500;padding:11px 22px;cursor:pointer}.sub-checkout-actions>button:hover{background:#1f2937}.sub-checkout-actions>button:disabled{opacity:.65;cursor:not-allowed}.sub-active-wrap{max-width:940px}.sub-gift-alert{position:relative;overflow:hidden;border-radius:22px;background:linear-gradient(to right,#6366f1,#8b5cf6,#6366f1);color:#fff;padding:18px;margin-bottom:18px;display:flex;align-items:center;gap:12px}.sub-gift-glow{position:absolute;right:-60px;top:-60px;width:180px;height:180px;border-radius:999px;background:#ffffff3d;filter:blur(40px)}.sub-gift-icon{width:50px;height:50px;border-radius:14px;border:1px solid rgba(255,255,255,.22);background:#ffffff2e;display:grid;place-items:center;font-size:1.6rem;position:relative;z-index:1}.sub-gift-alert h2{margin:0 0 2px;font-size:1.16rem}.sub-gift-alert p{margin:0;font-size:.82rem;color:#e0e7ff}.sub-gift-alert button{margin-left:auto;border-radius:10px;border:1px solid rgba(255,255,255,.25);background:#ffffff24;color:#fff;font-size:.78rem;font-weight:500;padding:8px 12px;cursor:pointer;position:relative;z-index:1}.sub-active-card{border-radius:24px;border:1px solid rgba(229,231,235,.8);background:#ffffff9e;overflow:hidden}.sub-active-head{padding:18px;border-bottom:1px solid rgba(229,231,235,.72);display:flex;align-items:center;gap:8px}.sub-active-head h2{margin:0;color:#111827;font-size:1.24rem}.sub-active-grid{display:grid;grid-template-columns:1fr 1fr}.sub-active-features{padding:18px;border-right:1px solid rgba(229,231,235,.7);background:#f9fafb66}.sub-active-features ul{margin:0;padding:0;list-style:none;display:grid;gap:10px}.sub-active-features li{display:flex;align-items:flex-start;gap:8px}.sub-active-features li svg{color:#14b8a6;margin-top:2px}.sub-active-features li span{color:#374151;font-size:.82rem;line-height:1.5}.sub-active-status-col{padding:18px}.sub-active-status-box{border-radius:16px;border:1px solid rgba(153,246,228,.72);background:linear-gradient(to bottom right,#f0fdfacc,#ecfeffb3);padding:18px;text-align:center}.sub-active-check{width:56px;height:56px;border-radius:999px;border:1px solid rgba(153,246,228,.8);background:#fff;color:#14b8a6;display:grid;place-items:center;margin:0 auto 10px}.sub-active-status-box h3{margin:0 0 5px;color:#111827;font-size:1rem}.sub-active-status-box strong{display:block;color:#0f766e;font-size:.95rem}.sub-active-status-box p{margin:3px 0 10px;color:#0f766e;font-size:.82rem}.sub-renew-pill{border-radius:12px;border:1px solid rgba(153,246,228,.72);background:#fffc;color:#374151;font-size:.82rem;font-weight:500;padding:9px 11px;display:inline-flex;align-items:center;gap:8px}.sub-renew-pill svg{color:#14b8a6}.sub-manage-link{margin-top:12px;width:100%;border:0;background:transparent;color:#6b7280;font-size:.8rem;text-decoration:underline;text-underline-offset:3px;cursor:pointer}.theme-dark .sub-crumb-pill,.theme-dark .sub-redeem-card,.theme-dark .sub-plan-card,.theme-dark .sub-checkout-card,.theme-dark .sub-active-card{border-color:#ffffff14;background:#ffffff08}.theme-dark .sub-head h1,.theme-dark .sub-redeem-head h2,.theme-dark .sub-plan-title-row h3,.theme-dark .sub-checkout-card h3,.theme-dark .sub-active-head h2,.theme-dark .sub-active-status-box h3{color:#fff}.theme-dark .sub-head p,.theme-dark .sub-redeem-card p,.theme-dark .sub-price-daily,.theme-dark .sub-plan-content li span,.theme-dark .sub-checkout-card p,.theme-dark .sub-checkout-actions label,.theme-dark .sub-active-features li span,.theme-dark .sub-manage-link,.theme-dark .sub-crumb-pill{color:#9ca3af}.theme-dark .sub-redeem-row input,.theme-dark .sub-checkbox,.theme-dark .sub-renew-pill,.theme-dark .sub-gift-box{border-color:#ffffff1a;background:#ffffff0d;color:#d1d5db}.theme-dark .sub-price,.theme-dark .sub-active-status-box strong,.theme-dark .sub-active-status-box p,.theme-dark .sub-renew-pill{color:#f3f4f6}.theme-dark .sub-divider,.theme-dark .sub-active-head,.theme-dark .sub-active-features{border-color:#ffffff14}.theme-dark .sub-active-features{background:#ffffff05}.theme-dark .sub-toggle-btn,.theme-dark .sub-redeem-row button,.theme-dark .sub-checkout-actions>button{background:#ffffff1f;border:1px solid rgba(255,255,255,.14)}.theme-dark .sub-gift-alert{background:linear-gradient(to right,#4f46e5c7,#7c3aedbd,#4f46e5c7)}@media(max-width:1200px){.sub-plan-grid{grid-template-columns:1fr 1fr}.sub-active-grid{grid-template-columns:1fr}.sub-active-features{border-right:0;border-bottom:1px solid rgba(229,231,235,.72)}}@media(max-width:860px){.sub-top-actions{flex-wrap:wrap;justify-content:flex-end}.sub-redeem-row,.sub-plan-grid{grid-template-columns:1fr}.sub-checkout-card{flex-direction:column;align-items:stretch}.sub-checkout-actions{justify-items:start}.sub-gift-alert{flex-wrap:wrap}.sub-gift-alert button{margin-left:0}} diff --git a/dist/assets/index-yGD4iGEM.js b/dist/assets/index-yGD4iGEM.js new file mode 100644 index 0000000..92cb294 --- /dev/null +++ b/dist/assets/index-yGD4iGEM.js @@ -0,0 +1,11 @@ +(function(){const c=document.createElement("link").relList;if(c&&c.supports&&c.supports("modulepreload"))return;for(const m of document.querySelectorAll('link[rel="modulepreload"]'))r(m);new MutationObserver(m=>{for(const v of m)if(v.type==="childList")for(const U of v.addedNodes)U.tagName==="LINK"&&U.rel==="modulepreload"&&r(U)}).observe(document,{childList:!0,subtree:!0});function u(m){const v={};return m.integrity&&(v.integrity=m.integrity),m.referrerPolicy&&(v.referrerPolicy=m.referrerPolicy),m.crossOrigin==="use-credentials"?v.credentials="include":m.crossOrigin==="anonymous"?v.credentials="omit":v.credentials="same-origin",v}function r(m){if(m.ep)return;m.ep=!0;const v=u(m);fetch(m.href,v)}})();var Hu={exports:{}},On={};var dh;function Cg(){if(dh)return On;dh=1;var d=Symbol.for("react.transitional.element"),c=Symbol.for("react.fragment");function u(r,m,v){var U=null;if(v!==void 0&&(U=""+v),m.key!==void 0&&(U=""+m.key),"key"in m){v={};for(var Y in m)Y!=="key"&&(v[Y]=m[Y])}else v=m;return m=v.ref,{$$typeof:d,type:r,key:U,ref:m!==void 0?m:null,props:v}}return On.Fragment=c,On.jsx=u,On.jsxs=u,On}var fh;function Eg(){return fh||(fh=1,Hu.exports=Cg()),Hu.exports}var n=Eg(),Vu={exports:{}},de={};var hh;function wg(){if(hh)return de;hh=1;var d=Symbol.for("react.transitional.element"),c=Symbol.for("react.portal"),u=Symbol.for("react.fragment"),r=Symbol.for("react.strict_mode"),m=Symbol.for("react.profiler"),v=Symbol.for("react.consumer"),U=Symbol.for("react.context"),Y=Symbol.for("react.forward_ref"),R=Symbol.for("react.suspense"),b=Symbol.for("react.memo"),V=Symbol.for("react.lazy"),T=Symbol.for("react.activity"),q=Symbol.iterator;function Q(h){return h===null||typeof h!="object"?null:(h=q&&h[q]||h["@@iterator"],typeof h=="function"?h:null)}var ee={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},B=Object.assign,re={};function oe(h,x,E){this.props=h,this.context=x,this.refs=re,this.updater=E||ee}oe.prototype.isReactComponent={},oe.prototype.setState=function(h,x){if(typeof h!="object"&&typeof h!="function"&&h!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,h,x,"setState")},oe.prototype.forceUpdate=function(h){this.updater.enqueueForceUpdate(this,h,"forceUpdate")};function ge(){}ge.prototype=oe.prototype;function K(h,x,E){this.props=h,this.context=x,this.refs=re,this.updater=E||ee}var ne=K.prototype=new ge;ne.constructor=K,B(ne,oe.prototype),ne.isPureReactComponent=!0;var se=Array.isArray;function Z(){}var D={H:null,A:null,T:null,S:null},fe=Object.prototype.hasOwnProperty;function je(h,x,E){var G=E.ref;return{$$typeof:d,type:h,key:x,ref:G!==void 0?G:null,props:E}}function Se(h,x){return je(h.type,x,h.props)}function H(h){return typeof h=="object"&&h!==null&&h.$$typeof===d}function J(h){var x={"=":"=0",":":"=2"};return"$"+h.replace(/[=:]/g,function(E){return x[E]})}var ae=/\/+/g;function P(h,x){return typeof h=="object"&&h!==null&&h.key!=null?J(""+h.key):x.toString(36)}function W(h){switch(h.status){case"fulfilled":return h.value;case"rejected":throw h.reason;default:switch(typeof h.status=="string"?h.then(Z,Z):(h.status="pending",h.then(function(x){h.status==="pending"&&(h.status="fulfilled",h.value=x)},function(x){h.status==="pending"&&(h.status="rejected",h.reason=x)})),h.status){case"fulfilled":return h.value;case"rejected":throw h.reason}}throw h}function k(h,x,E,G,ce){var ie=typeof h;(ie==="undefined"||ie==="boolean")&&(h=null);var _e=!1;if(h===null)_e=!0;else switch(ie){case"bigint":case"string":case"number":_e=!0;break;case"object":switch(h.$$typeof){case d:case c:_e=!0;break;case V:return _e=h._init,k(_e(h._payload),x,E,G,ce)}}if(_e)return ce=ce(h),_e=G===""?"."+P(h,0):G,se(ce)?(E="",_e!=null&&(E=_e.replace(ae,"$&/")+"/"),k(ce,x,E,"",function(Bl){return Bl})):ce!=null&&(H(ce)&&(ce=Se(ce,E+(ce.key==null||h&&h.key===ce.key?"":(""+ce.key).replace(ae,"$&/")+"/")+_e)),x.push(ce)),1;_e=0;var lt=G===""?".":G+":";if(se(h))for(var Ve=0;Ve>>1,ue=k[I];if(0>>1;Im(E,O))Gm(ce,E)?(k[I]=ce,k[G]=O,I=G):(k[I]=E,k[x]=O,I=x);else if(Gm(ce,O))k[I]=ce,k[G]=O,I=G;else break e}}return _}function m(k,_){var O=k.sortIndex-_.sortIndex;return O!==0?O:k.id-_.id}if(d.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var v=performance;d.unstable_now=function(){return v.now()}}else{var U=Date,Y=U.now();d.unstable_now=function(){return U.now()-Y}}var R=[],b=[],V=1,T=null,q=3,Q=!1,ee=!1,B=!1,re=!1,oe=typeof setTimeout=="function"?setTimeout:null,ge=typeof clearTimeout=="function"?clearTimeout:null,K=typeof setImmediate<"u"?setImmediate:null;function ne(k){for(var _=u(b);_!==null;){if(_.callback===null)r(b);else if(_.startTime<=k)r(b),_.sortIndex=_.expirationTime,c(R,_);else break;_=u(b)}}function se(k){if(B=!1,ne(k),!ee)if(u(R)!==null)ee=!0,Z||(Z=!0,J());else{var _=u(b);_!==null&&W(se,_.startTime-k)}}var Z=!1,D=-1,fe=5,je=-1;function Se(){return re?!0:!(d.unstable_now()-jek&&Se());){var I=T.callback;if(typeof I=="function"){T.callback=null,q=T.priorityLevel;var ue=I(T.expirationTime<=k);if(k=d.unstable_now(),typeof ue=="function"){T.callback=ue,ne(k),_=!0;break t}T===u(R)&&r(R),ne(k)}else r(R);T=u(R)}if(T!==null)_=!0;else{var h=u(b);h!==null&&W(se,h.startTime-k),_=!1}}break e}finally{T=null,q=O,Q=!1}_=void 0}}finally{_?J():Z=!1}}}var J;if(typeof K=="function")J=function(){K(H)};else if(typeof MessageChannel<"u"){var ae=new MessageChannel,P=ae.port2;ae.port1.onmessage=H,J=function(){P.postMessage(null)}}else J=function(){oe(H,0)};function W(k,_){D=oe(function(){k(d.unstable_now())},_)}d.unstable_IdlePriority=5,d.unstable_ImmediatePriority=1,d.unstable_LowPriority=4,d.unstable_NormalPriority=3,d.unstable_Profiling=null,d.unstable_UserBlockingPriority=2,d.unstable_cancelCallback=function(k){k.callback=null},d.unstable_forceFrameRate=function(k){0>k||125I?(k.sortIndex=O,c(b,k),u(R)===null&&k===u(b)&&(B?(ge(D),D=-1):B=!0,W(se,O-I))):(k.sortIndex=ue,c(R,k),ee||Q||(ee=!0,Z||(Z=!0,J()))),k},d.unstable_shouldYield=Se,d.unstable_wrapCallback=function(k){var _=q;return function(){var O=q;q=_;try{return k.apply(this,arguments)}finally{q=O}}}})(Yu)),Yu}var ph;function Og(){return ph||(ph=1,Bu.exports=Ug()),Bu.exports}var Ju={exports:{}},at={};var vh;function Lg(){if(vh)return at;vh=1;var d=ir();function c(R){var b="https://react.dev/errors/"+R;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(d)}catch(c){console.error(c)}}return d(),Ju.exports=Lg(),Ju.exports}var bh;function Hg(){if(bh)return Ln;bh=1;var d=Og(),c=ir(),u=Rg();function r(e){var t="https://react.dev/errors/"+e;if(1ue||(e.current=I[ue],I[ue]=null,ue--)}function E(e,t){ue++,I[ue]=e.current,e.current=t}var G=h(null),ce=h(null),ie=h(null),_e=h(null);function lt(e,t){switch(E(ie,t),E(ce,e),E(G,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?Uf(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=Uf(t),e=Of(t,e);else switch(e){case"svg":e=1;break;case"math":e=2;break;default:e=0}}x(G),E(G,e)}function Ve(){x(G),x(ce),x(ie)}function Bl(e){e.memoizedState!==null&&E(_e,e);var t=G.current,a=Of(t,e.type);t!==a&&(E(ce,e),E(G,a))}function Qn(e){ce.current===e&&(x(G),x(ce)),_e.current===e&&(x(_e),Cn._currentValue=O)}var js,ur;function Ea(e){if(js===void 0)try{throw Error()}catch(a){var t=a.stack.trim().match(/\n( *(at )?)/);js=t&&t[1]||"",ur=-1)":-1i||g[l]!==S[i]){var M=` +`+g[l].replace(" at new "," at ");return e.displayName&&M.includes("")&&(M=M.replace("",e.displayName)),M}while(1<=l&&0<=i);break}}}finally{xs=!1,Error.prepareStackTrace=a}return(a=e?e.displayName||e.name:"")?Ea(a):""}function um(e,t){switch(e.tag){case 26:case 27:case 5:return Ea(e.type);case 16:return Ea("Lazy");case 13:return e.child!==t&&t!==null?Ea("Suspense Fallback"):Ea("Suspense");case 19:return Ea("SuspenseList");case 0:case 15:return Ss(e.type,!1);case 11:return Ss(e.type.render,!1);case 1:return Ss(e.type,!0);case 31:return Ea("Activity");default:return""}}function rr(e){try{var t="",a=null;do t+=um(e,a),a=e,e=e.return;while(e);return t}catch(l){return` +Error generating stack: `+l.message+` +`+l.stack}}var Ns=Object.prototype.hasOwnProperty,ks=d.unstable_scheduleCallback,As=d.unstable_cancelCallback,rm=d.unstable_shouldYield,om=d.unstable_requestPaint,ht=d.unstable_now,dm=d.unstable_getCurrentPriorityLevel,or=d.unstable_ImmediatePriority,dr=d.unstable_UserBlockingPriority,Xn=d.unstable_NormalPriority,fm=d.unstable_LowPriority,fr=d.unstable_IdlePriority,hm=d.log,mm=d.unstable_setDisableYieldValue,Yl=null,mt=null;function ca(e){if(typeof hm=="function"&&mm(e),mt&&typeof mt.setStrictMode=="function")try{mt.setStrictMode(Yl,e)}catch{}}var gt=Math.clz32?Math.clz32:vm,gm=Math.log,pm=Math.LN2;function vm(e){return e>>>=0,e===0?32:31-(gm(e)/pm|0)|0}var Zn=256,Kn=262144,Wn=4194304;function wa(e){var t=e&42;if(t!==0)return t;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&261888;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function Fn(e,t,a){var l=e.pendingLanes;if(l===0)return 0;var i=0,s=e.suspendedLanes,o=e.pingedLanes;e=e.warmLanes;var f=l&134217727;return f!==0?(l=f&~s,l!==0?i=wa(l):(o&=f,o!==0?i=wa(o):a||(a=f&~e,a!==0&&(i=wa(a))))):(f=l&~s,f!==0?i=wa(f):o!==0?i=wa(o):a||(a=l&~e,a!==0&&(i=wa(a)))),i===0?0:t!==0&&t!==i&&(t&s)===0&&(s=i&-i,a=t&-t,s>=a||s===32&&(a&4194048)!==0)?t:i}function Jl(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function ym(e,t){switch(e){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function hr(){var e=Wn;return Wn<<=1,(Wn&62914560)===0&&(Wn=4194304),e}function _s(e){for(var t=[],a=0;31>a;a++)t.push(e);return t}function Gl(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function bm(e,t,a,l,i,s){var o=e.pendingLanes;e.pendingLanes=a,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=a,e.entangledLanes&=a,e.errorRecoveryDisabledLanes&=a,e.shellSuspendCounter=0;var f=e.entanglements,g=e.expirationTimes,S=e.hiddenUpdates;for(a=o&~a;0"u")return null;try{return e.activeElement||e.body}catch{return e.body}}var Am=/[\n"\\]/g;function kt(e){return e.replace(Am,function(t){return"\\"+t.charCodeAt(0).toString(16)+" "})}function Es(e,t,a,l,i,s,o,f){e.name="",o!=null&&typeof o!="function"&&typeof o!="symbol"&&typeof o!="boolean"?e.type=o:e.removeAttribute("type"),t!=null?o==="number"?(t===0&&e.value===""||e.value!=t)&&(e.value=""+Nt(t)):e.value!==""+Nt(t)&&(e.value=""+Nt(t)):o!=="submit"&&o!=="reset"||e.removeAttribute("value"),t!=null?ws(e,o,Nt(t)):a!=null?ws(e,o,Nt(a)):l!=null&&e.removeAttribute("value"),i==null&&s!=null&&(e.defaultChecked=!!s),i!=null&&(e.checked=i&&typeof i!="function"&&typeof i!="symbol"),f!=null&&typeof f!="function"&&typeof f!="symbol"&&typeof f!="boolean"?e.name=""+Nt(f):e.removeAttribute("name")}function _r(e,t,a,l,i,s,o,f){if(s!=null&&typeof s!="function"&&typeof s!="symbol"&&typeof s!="boolean"&&(e.type=s),t!=null||a!=null){if(!(s!=="submit"&&s!=="reset"||t!=null)){Cs(e);return}a=a!=null?""+Nt(a):"",t=t!=null?""+Nt(t):a,f||t===e.value||(e.value=t),e.defaultValue=t}l=l??i,l=typeof l!="function"&&typeof l!="symbol"&&!!l,e.checked=f?e.checked:!!l,e.defaultChecked=!!l,o!=null&&typeof o!="function"&&typeof o!="symbol"&&typeof o!="boolean"&&(e.name=o),Cs(e)}function ws(e,t,a){t==="number"&&Pn(e.ownerDocument)===e||e.defaultValue===""+a||(e.defaultValue=""+a)}function il(e,t,a,l){if(e=e.options,t){t={};for(var i=0;i"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Hs=!1;if(Jt)try{var Kl={};Object.defineProperty(Kl,"passive",{get:function(){Hs=!0}}),window.addEventListener("test",Kl,Kl),window.removeEventListener("test",Kl,Kl)}catch{Hs=!1}var ra=null,Vs=null,ti=null;function wr(){if(ti)return ti;var e,t=Vs,a=t.length,l,i="value"in ra?ra.value:ra.textContent,s=i.length;for(e=0;e=$l),Vr=" ",qr=!1;function Br(e,t){switch(e){case"keyup":return Pm.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Yr(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var rl=!1;function t1(e,t){switch(e){case"compositionend":return Yr(t);case"keypress":return t.which!==32?null:(qr=!0,Vr);case"textInput":return e=t.data,e===Vr&&qr?null:e;default:return null}}function a1(e,t){if(rl)return e==="compositionend"||!Gs&&Br(e,t)?(e=wr(),ti=Vs=ra=null,rl=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:a,offset:t-e};e=l}e:{for(;a;){if(a.nextSibling){a=a.nextSibling;break e}a=a.parentNode}a=void 0}a=Fr(a)}}function Ir(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Ir(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function Pr(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var t=Pn(e.document);t instanceof e.HTMLIFrameElement;){try{var a=typeof t.contentWindow.location.href=="string"}catch{a=!1}if(a)e=t.contentWindow;else break;t=Pn(e.document)}return t}function Zs(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}var o1=Jt&&"documentMode"in document&&11>=document.documentMode,ol=null,Ks=null,tn=null,Ws=!1;function eo(e,t,a){var l=a.window===a?a.document:a.nodeType===9?a:a.ownerDocument;Ws||ol==null||ol!==Pn(l)||(l=ol,"selectionStart"in l&&Zs(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}),tn&&en(tn,l)||(tn=l,l=Ki(Ks,"onSelect"),0>=o,i-=o,Rt=1<<32-gt(t)+i|a<me?(be=$,$=null):be=$.sibling;var ke=N(y,$,j[me],w);if(ke===null){$===null&&($=be);break}e&&$&&ke.alternate===null&&t(y,$),p=s(ke,p,me),Ne===null?te=ke:Ne.sibling=ke,Ne=ke,$=be}if(me===j.length)return a(y,$),xe&&Qt(y,me),te;if($===null){for(;meme?(be=$,$=null):be=$.sibling;var Ca=N(y,$,ke.value,w);if(Ca===null){$===null&&($=be);break}e&&$&&Ca.alternate===null&&t(y,$),p=s(Ca,p,me),Ne===null?te=Ca:Ne.sibling=Ca,Ne=Ca,$=be}if(ke.done)return a(y,$),xe&&Qt(y,me),te;if($===null){for(;!ke.done;me++,ke=j.next())ke=L(y,ke.value,w),ke!==null&&(p=s(ke,p,me),Ne===null?te=ke:Ne.sibling=ke,Ne=ke);return xe&&Qt(y,me),te}for($=l($);!ke.done;me++,ke=j.next())ke=A($,y,me,ke.value,w),ke!==null&&(e&&ke.alternate!==null&&$.delete(ke.key===null?me:ke.key),p=s(ke,p,me),Ne===null?te=ke:Ne.sibling=ke,Ne=ke);return e&&$.forEach(function(Mg){return t(y,Mg)}),xe&&Qt(y,me),te}function Ce(y,p,j,w){if(typeof j=="object"&&j!==null&&j.type===B&&j.key===null&&(j=j.props.children),typeof j=="object"&&j!==null){switch(j.$$typeof){case Q:e:{for(var te=j.key;p!==null;){if(p.key===te){if(te=j.type,te===B){if(p.tag===7){a(y,p.sibling),w=i(p,j.props.children),w.return=y,y=w;break e}}else if(p.elementType===te||typeof te=="object"&&te!==null&&te.$$typeof===fe&&Ga(te)===p.type){a(y,p.sibling),w=i(p,j.props),un(w,j),w.return=y,y=w;break e}a(y,p);break}else t(y,p);p=p.sibling}j.type===B?(w=Va(j.props.children,y.mode,w,j.key),w.return=y,y=w):(w=di(j.type,j.key,j.props,null,y.mode,w),un(w,j),w.return=y,y=w)}return o(y);case ee:e:{for(te=j.key;p!==null;){if(p.key===te)if(p.tag===4&&p.stateNode.containerInfo===j.containerInfo&&p.stateNode.implementation===j.implementation){a(y,p.sibling),w=i(p,j.children||[]),w.return=y,y=w;break e}else{a(y,p);break}else t(y,p);p=p.sibling}w=ac(j,y.mode,w),w.return=y,y=w}return o(y);case fe:return j=Ga(j),Ce(y,p,j,w)}if(W(j))return F(y,p,j,w);if(J(j)){if(te=J(j),typeof te!="function")throw Error(r(150));return j=te.call(j),le(y,p,j,w)}if(typeof j.then=="function")return Ce(y,p,yi(j),w);if(j.$$typeof===K)return Ce(y,p,mi(y,j),w);bi(y,j)}return typeof j=="string"&&j!==""||typeof j=="number"||typeof j=="bigint"?(j=""+j,p!==null&&p.tag===6?(a(y,p.sibling),w=i(p,j),w.return=y,y=w):(a(y,p),w=tc(j,y.mode,w),w.return=y,y=w),o(y)):a(y,p)}return function(y,p,j,w){try{cn=0;var te=Ce(y,p,j,w);return xl=null,te}catch($){if($===jl||$===pi)throw $;var Ne=vt(29,$,null,y.mode);return Ne.lanes=w,Ne.return=y,Ne}}}var Xa=ko(!0),Ao=ko(!1),ma=!1;function mc(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function gc(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function ga(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function pa(e,t,a){var l=e.updateQueue;if(l===null)return null;if(l=l.shared,(Ae&2)!==0){var i=l.pending;return i===null?t.next=t:(t.next=i.next,i.next=t),l.pending=t,t=oi(e),co(e,null,a),t}return ri(e,l,t,a),oi(e)}function rn(e,t,a){if(t=t.updateQueue,t!==null&&(t=t.shared,(a&4194048)!==0)){var l=t.lanes;l&=e.pendingLanes,a|=l,t.lanes=a,gr(e,a)}}function pc(e,t){var a=e.updateQueue,l=e.alternate;if(l!==null&&(l=l.updateQueue,a===l)){var i=null,s=null;if(a=a.firstBaseUpdate,a!==null){do{var o={lane:a.lane,tag:a.tag,payload:a.payload,callback:null,next:null};s===null?i=s=o:s=s.next=o,a=a.next}while(a!==null);s===null?i=s=t:s=s.next=t}else i=s=t;a={baseState:l.baseState,firstBaseUpdate:i,lastBaseUpdate:s,shared:l.shared,callbacks:l.callbacks},e.updateQueue=a;return}e=a.lastBaseUpdate,e===null?a.firstBaseUpdate=t:e.next=t,a.lastBaseUpdate=t}var vc=!1;function on(){if(vc){var e=bl;if(e!==null)throw e}}function dn(e,t,a,l){vc=!1;var i=e.updateQueue;ma=!1;var s=i.firstBaseUpdate,o=i.lastBaseUpdate,f=i.shared.pending;if(f!==null){i.shared.pending=null;var g=f,S=g.next;g.next=null,o===null?s=S:o.next=S,o=g;var M=e.alternate;M!==null&&(M=M.updateQueue,f=M.lastBaseUpdate,f!==o&&(f===null?M.firstBaseUpdate=S:f.next=S,M.lastBaseUpdate=g))}if(s!==null){var L=i.baseState;o=0,M=S=g=null,f=s;do{var N=f.lane&-536870913,A=N!==f.lane;if(A?(ye&N)===N:(l&N)===N){N!==0&&N===yl&&(vc=!0),M!==null&&(M=M.next={lane:0,tag:f.tag,payload:f.payload,callback:null,next:null});e:{var F=e,le=f;N=t;var Ce=a;switch(le.tag){case 1:if(F=le.payload,typeof F=="function"){L=F.call(Ce,L,N);break e}L=F;break e;case 3:F.flags=F.flags&-65537|128;case 0:if(F=le.payload,N=typeof F=="function"?F.call(Ce,L,N):F,N==null)break e;L=T({},L,N);break e;case 2:ma=!0}}N=f.callback,N!==null&&(e.flags|=64,A&&(e.flags|=8192),A=i.callbacks,A===null?i.callbacks=[N]:A.push(N))}else A={lane:N,tag:f.tag,payload:f.payload,callback:f.callback,next:null},M===null?(S=M=A,g=L):M=M.next=A,o|=N;if(f=f.next,f===null){if(f=i.shared.pending,f===null)break;A=f,f=A.next,A.next=null,i.lastBaseUpdate=A,i.shared.pending=null}}while(!0);M===null&&(g=L),i.baseState=g,i.firstBaseUpdate=S,i.lastBaseUpdate=M,s===null&&(i.shared.lanes=0),xa|=o,e.lanes=o,e.memoizedState=L}}function _o(e,t){if(typeof e!="function")throw Error(r(191,e));e.call(t)}function To(e,t){var a=e.callbacks;if(a!==null)for(e.callbacks=null,e=0;es?s:8;var o=k.T,f={};k.T=f,Lc(e,!1,t,a);try{var g=i(),S=k.S;if(S!==null&&S(f,g),g!==null&&typeof g=="object"&&typeof g.then=="function"){var M=b1(g,l);mn(e,t,M,St(e))}else mn(e,t,l,St(e))}catch(L){mn(e,t,{then:function(){},status:"rejected",reason:L},St())}finally{_.p=s,o!==null&&f.types!==null&&(o.types=f.types),k.T=o}}function A1(){}function Uc(e,t,a,l){if(e.tag!==5)throw Error(r(476));var i=id(e).queue;nd(e,i,t,O,a===null?A1:function(){return sd(e),a(l)})}function id(e){var t=e.memoizedState;if(t!==null)return t;t={memoizedState:O,baseState:O,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Wt,lastRenderedState:O},next:null};var a={};return t.next={memoizedState:a,baseState:a,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Wt,lastRenderedState:a},next:null},e.memoizedState=t,e=e.alternate,e!==null&&(e.memoizedState=t),t}function sd(e){var t=id(e);t.next===null&&(t=e.alternate.memoizedState),mn(e,t.next.queue,{},St())}function Oc(){return Ie(Cn)}function cd(){return Be().memoizedState}function ud(){return Be().memoizedState}function _1(e){for(var t=e.return;t!==null;){switch(t.tag){case 24:case 3:var a=St();e=ga(a);var l=pa(t,e,a);l!==null&&(dt(l,t,a),rn(l,t,a)),t={cache:oc()},e.payload=t;return}t=t.return}}function T1(e,t,a){var l=St();a={lane:l,revertLane:0,gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null},Di(e)?od(t,a):(a=Ps(e,t,a,l),a!==null&&(dt(a,e,l),dd(a,t,l)))}function rd(e,t,a){var l=St();mn(e,t,a,l)}function mn(e,t,a,l){var i={lane:l,revertLane:0,gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null};if(Di(e))od(t,i);else{var s=e.alternate;if(e.lanes===0&&(s===null||s.lanes===0)&&(s=t.lastRenderedReducer,s!==null))try{var o=t.lastRenderedState,f=s(o,a);if(i.hasEagerState=!0,i.eagerState=f,pt(f,o))return ri(e,t,i,0),Ee===null&&ui(),!1}catch{}if(a=Ps(e,t,i,l),a!==null)return dt(a,e,l),dd(a,t,l),!0}return!1}function Lc(e,t,a,l){if(l={lane:2,revertLane:mu(),gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null},Di(e)){if(t)throw Error(r(479))}else t=Ps(e,a,l,2),t!==null&&dt(t,e,2)}function Di(e){var t=e.alternate;return e===he||t!==null&&t===he}function od(e,t){Nl=Si=!0;var a=e.pending;a===null?t.next=t:(t.next=a.next,a.next=t),e.pending=t}function dd(e,t,a){if((a&4194048)!==0){var l=t.lanes;l&=e.pendingLanes,a|=l,t.lanes=a,gr(e,a)}}var gn={readContext:Ie,use:Ai,useCallback:Le,useContext:Le,useEffect:Le,useImperativeHandle:Le,useLayoutEffect:Le,useInsertionEffect:Le,useMemo:Le,useReducer:Le,useRef:Le,useState:Le,useDebugValue:Le,useDeferredValue:Le,useTransition:Le,useSyncExternalStore:Le,useId:Le,useHostTransitionStatus:Le,useFormState:Le,useActionState:Le,useOptimistic:Le,useMemoCache:Le,useCacheRefresh:Le};gn.useEffectEvent=Le;var fd={readContext:Ie,use:Ai,useCallback:function(e,t){return nt().memoizedState=[e,t===void 0?null:t],e},useContext:Ie,useEffect:Wo,useImperativeHandle:function(e,t,a){a=a!=null?a.concat([e]):null,Ti(4194308,4,Po.bind(null,t,e),a)},useLayoutEffect:function(e,t){return Ti(4194308,4,e,t)},useInsertionEffect:function(e,t){Ti(4,2,e,t)},useMemo:function(e,t){var a=nt();t=t===void 0?null:t;var l=e();if(Za){ca(!0);try{e()}finally{ca(!1)}}return a.memoizedState=[l,t],l},useReducer:function(e,t,a){var l=nt();if(a!==void 0){var i=a(t);if(Za){ca(!0);try{a(t)}finally{ca(!1)}}}else i=t;return l.memoizedState=l.baseState=i,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:i},l.queue=e,e=e.dispatch=T1.bind(null,he,e),[l.memoizedState,e]},useRef:function(e){var t=nt();return e={current:e},t.memoizedState=e},useState:function(e){e=Dc(e);var t=e.queue,a=rd.bind(null,he,t);return t.dispatch=a,[e.memoizedState,a]},useDebugValue:Ec,useDeferredValue:function(e,t){var a=nt();return wc(a,e,t)},useTransition:function(){var e=Dc(!1);return e=nd.bind(null,he,e.queue,!0,!1),nt().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,a){var l=he,i=nt();if(xe){if(a===void 0)throw Error(r(407));a=a()}else{if(a=t(),Ee===null)throw Error(r(349));(ye&127)!==0||wo(l,t,a)}i.memoizedState=a;var s={value:a,getSnapshot:t};return i.queue=s,Wo(Oo.bind(null,l,s,e),[e]),l.flags|=2048,Al(9,{destroy:void 0},Uo.bind(null,l,s,a,t),null),a},useId:function(){var e=nt(),t=Ee.identifierPrefix;if(xe){var a=Ht,l=Rt;a=(l&~(1<<32-gt(l)-1)).toString(32)+a,t="_"+t+"R_"+a,a=Ni++,0<\/script>",s=s.removeChild(s.firstChild);break;case"select":s=typeof l.is=="string"?o.createElement("select",{is:l.is}):o.createElement("select"),l.multiple?s.multiple=!0:l.size&&(s.size=l.size);break;default:s=typeof l.is=="string"?o.createElement(i,{is:l.is}):o.createElement(i)}}s[Fe]=t,s[it]=l;e:for(o=t.child;o!==null;){if(o.tag===5||o.tag===6)s.appendChild(o.stateNode);else if(o.tag!==4&&o.tag!==27&&o.child!==null){o.child.return=o,o=o.child;continue}if(o===t)break e;for(;o.sibling===null;){if(o.return===null||o.return===t)break e;o=o.return}o.sibling.return=o.return,o=o.sibling}t.stateNode=s;e:switch(et(s,i,l),i){case"button":case"input":case"select":case"textarea":l=!!l.autoFocus;break e;case"img":l=!0;break e;default:l=!1}l&&$t(t)}}return Ue(t),Fc(t,t.type,e===null?null:e.memoizedProps,t.pendingProps,a),null;case 6:if(e&&t.stateNode!=null)e.memoizedProps!==l&&$t(t);else{if(typeof l!="string"&&t.stateNode===null)throw Error(r(166));if(e=ie.current,pl(t)){if(e=t.stateNode,a=t.memoizedProps,l=null,i=$e,i!==null)switch(i.tag){case 27:case 5:l=i.memoizedProps}e[Fe]=t,e=!!(e.nodeValue===a||l!==null&&l.suppressHydrationWarning===!0||Ef(e.nodeValue,a)),e||fa(t,!0)}else e=Wi(e).createTextNode(l),e[Fe]=t,t.stateNode=e}return Ue(t),null;case 31:if(a=t.memoizedState,e===null||e.memoizedState!==null){if(l=pl(t),a!==null){if(e===null){if(!l)throw Error(r(318));if(e=t.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(r(557));e[Fe]=t}else qa(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;Ue(t),e=!1}else a=sc(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=a),e=!0;if(!e)return t.flags&256?(bt(t),t):(bt(t),null);if((t.flags&128)!==0)throw Error(r(558))}return Ue(t),null;case 13:if(l=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(i=pl(t),l!==null&&l.dehydrated!==null){if(e===null){if(!i)throw Error(r(318));if(i=t.memoizedState,i=i!==null?i.dehydrated:null,!i)throw Error(r(317));i[Fe]=t}else qa(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;Ue(t),i=!1}else i=sc(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=i),i=!0;if(!i)return t.flags&256?(bt(t),t):(bt(t),null)}return bt(t),(t.flags&128)!==0?(t.lanes=a,t):(a=l!==null,e=e!==null&&e.memoizedState!==null,a&&(l=t.child,i=null,l.alternate!==null&&l.alternate.memoizedState!==null&&l.alternate.memoizedState.cachePool!==null&&(i=l.alternate.memoizedState.cachePool.pool),s=null,l.memoizedState!==null&&l.memoizedState.cachePool!==null&&(s=l.memoizedState.cachePool.pool),s!==i&&(l.flags|=2048)),a!==e&&a&&(t.child.flags|=8192),Ui(t,t.updateQueue),Ue(t),null);case 4:return Ve(),e===null&&yu(t.stateNode.containerInfo),Ue(t),null;case 10:return Zt(t.type),Ue(t),null;case 19:if(x(qe),l=t.memoizedState,l===null)return Ue(t),null;if(i=(t.flags&128)!==0,s=l.rendering,s===null)if(i)vn(l,!1);else{if(Re!==0||e!==null&&(e.flags&128)!==0)for(e=t.child;e!==null;){if(s=xi(e),s!==null){for(t.flags|=128,vn(l,!1),e=s.updateQueue,t.updateQueue=e,Ui(t,e),t.subtreeFlags=0,e=a,a=t.child;a!==null;)uo(a,e),a=a.sibling;return E(qe,qe.current&1|2),xe&&Qt(t,l.treeForkCount),t.child}e=e.sibling}l.tail!==null&&ht()>Vi&&(t.flags|=128,i=!0,vn(l,!1),t.lanes=4194304)}else{if(!i)if(e=xi(s),e!==null){if(t.flags|=128,i=!0,e=e.updateQueue,t.updateQueue=e,Ui(t,e),vn(l,!0),l.tail===null&&l.tailMode==="hidden"&&!s.alternate&&!xe)return Ue(t),null}else 2*ht()-l.renderingStartTime>Vi&&a!==536870912&&(t.flags|=128,i=!0,vn(l,!1),t.lanes=4194304);l.isBackwards?(s.sibling=t.child,t.child=s):(e=l.last,e!==null?e.sibling=s:t.child=s,l.last=s)}return l.tail!==null?(e=l.tail,l.rendering=e,l.tail=e.sibling,l.renderingStartTime=ht(),e.sibling=null,a=qe.current,E(qe,i?a&1|2:a&1),xe&&Qt(t,l.treeForkCount),e):(Ue(t),null);case 22:case 23:return bt(t),bc(),l=t.memoizedState!==null,e!==null?e.memoizedState!==null!==l&&(t.flags|=8192):l&&(t.flags|=8192),l?(a&536870912)!==0&&(t.flags&128)===0&&(Ue(t),t.subtreeFlags&6&&(t.flags|=8192)):Ue(t),a=t.updateQueue,a!==null&&Ui(t,a.retryQueue),a=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(a=e.memoizedState.cachePool.pool),l=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(l=t.memoizedState.cachePool.pool),l!==a&&(t.flags|=2048),e!==null&&x(Ja),null;case 24:return a=null,e!==null&&(a=e.memoizedState.cache),t.memoizedState.cache!==a&&(t.flags|=2048),Zt(Ye),Ue(t),null;case 25:return null;case 30:return null}throw Error(r(156,t.tag))}function E1(e,t){switch(nc(t),t.tag){case 1:return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return Zt(Ye),Ve(),e=t.flags,(e&65536)!==0&&(e&128)===0?(t.flags=e&-65537|128,t):null;case 26:case 27:case 5:return Qn(t),null;case 31:if(t.memoizedState!==null){if(bt(t),t.alternate===null)throw Error(r(340));qa()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 13:if(bt(t),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(r(340));qa()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return x(qe),null;case 4:return Ve(),null;case 10:return Zt(t.type),null;case 22:case 23:return bt(t),bc(),e!==null&&x(Ja),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 24:return Zt(Ye),null;case 25:return null;default:return null}}function Ld(e,t){switch(nc(t),t.tag){case 3:Zt(Ye),Ve();break;case 26:case 27:case 5:Qn(t);break;case 4:Ve();break;case 31:t.memoizedState!==null&&bt(t);break;case 13:bt(t);break;case 19:x(qe);break;case 10:Zt(t.type);break;case 22:case 23:bt(t),bc(),e!==null&&x(Ja);break;case 24:Zt(Ye)}}function yn(e,t){try{var a=t.updateQueue,l=a!==null?a.lastEffect:null;if(l!==null){var i=l.next;a=i;do{if((a.tag&e)===e){l=void 0;var s=a.create,o=a.inst;l=s(),o.destroy=l}a=a.next}while(a!==i)}}catch(f){ze(t,t.return,f)}}function ba(e,t,a){try{var l=t.updateQueue,i=l!==null?l.lastEffect:null;if(i!==null){var s=i.next;l=s;do{if((l.tag&e)===e){var o=l.inst,f=o.destroy;if(f!==void 0){o.destroy=void 0,i=t;var g=a,S=f;try{S()}catch(M){ze(i,g,M)}}}l=l.next}while(l!==s)}}catch(M){ze(t,t.return,M)}}function Rd(e){var t=e.updateQueue;if(t!==null){var a=e.stateNode;try{To(t,a)}catch(l){ze(e,e.return,l)}}}function Hd(e,t,a){a.props=Ka(e.type,e.memoizedProps),a.state=e.memoizedState;try{a.componentWillUnmount()}catch(l){ze(e,t,l)}}function bn(e,t){try{var a=e.ref;if(a!==null){switch(e.tag){case 26:case 27:case 5:var l=e.stateNode;break;case 30:l=e.stateNode;break;default:l=e.stateNode}typeof a=="function"?e.refCleanup=a(l):a.current=l}}catch(i){ze(e,t,i)}}function Vt(e,t){var a=e.ref,l=e.refCleanup;if(a!==null)if(typeof l=="function")try{l()}catch(i){ze(e,t,i)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof a=="function")try{a(null)}catch(i){ze(e,t,i)}else a.current=null}function Vd(e){var t=e.type,a=e.memoizedProps,l=e.stateNode;try{e:switch(t){case"button":case"input":case"select":case"textarea":a.autoFocus&&l.focus();break e;case"img":a.src?l.src=a.src:a.srcSet&&(l.srcset=a.srcSet)}}catch(i){ze(e,e.return,i)}}function $c(e,t,a){try{var l=e.stateNode;eg(l,e.type,a,t),l[it]=t}catch(i){ze(e,e.return,i)}}function qd(e){return e.tag===5||e.tag===3||e.tag===26||e.tag===27&&_a(e.type)||e.tag===4}function Ic(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||qd(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.tag===27&&_a(e.type)||e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Pc(e,t,a){var l=e.tag;if(l===5||l===6)e=e.stateNode,t?(a.nodeType===9?a.body:a.nodeName==="HTML"?a.ownerDocument.body:a).insertBefore(e,t):(t=a.nodeType===9?a.body:a.nodeName==="HTML"?a.ownerDocument.body:a,t.appendChild(e),a=a._reactRootContainer,a!=null||t.onclick!==null||(t.onclick=Yt));else if(l!==4&&(l===27&&_a(e.type)&&(a=e.stateNode,t=null),e=e.child,e!==null))for(Pc(e,t,a),e=e.sibling;e!==null;)Pc(e,t,a),e=e.sibling}function Oi(e,t,a){var l=e.tag;if(l===5||l===6)e=e.stateNode,t?a.insertBefore(e,t):a.appendChild(e);else if(l!==4&&(l===27&&_a(e.type)&&(a=e.stateNode),e=e.child,e!==null))for(Oi(e,t,a),e=e.sibling;e!==null;)Oi(e,t,a),e=e.sibling}function Bd(e){var t=e.stateNode,a=e.memoizedProps;try{for(var l=e.type,i=t.attributes;i.length;)t.removeAttributeNode(i[0]);et(t,l,a),t[Fe]=e,t[it]=a}catch(s){ze(e,e.return,s)}}var It=!1,Qe=!1,eu=!1,Yd=typeof WeakSet=="function"?WeakSet:Set,We=null;function w1(e,t){if(e=e.containerInfo,xu=as,e=Pr(e),Zs(e)){if("selectionStart"in e)var a={start:e.selectionStart,end:e.selectionEnd};else e:{a=(a=e.ownerDocument)&&a.defaultView||window;var l=a.getSelection&&a.getSelection();if(l&&l.rangeCount!==0){a=l.anchorNode;var i=l.anchorOffset,s=l.focusNode;l=l.focusOffset;try{a.nodeType,s.nodeType}catch{a=null;break e}var o=0,f=-1,g=-1,S=0,M=0,L=e,N=null;t:for(;;){for(var A;L!==a||i!==0&&L.nodeType!==3||(f=o+i),L!==s||l!==0&&L.nodeType!==3||(g=o+l),L.nodeType===3&&(o+=L.nodeValue.length),(A=L.firstChild)!==null;)N=L,L=A;for(;;){if(L===e)break t;if(N===a&&++S===i&&(f=o),N===s&&++M===l&&(g=o),(A=L.nextSibling)!==null)break;L=N,N=L.parentNode}L=A}a=f===-1||g===-1?null:{start:f,end:g}}else a=null}a=a||{start:0,end:0}}else a=null;for(Su={focusedElem:e,selectionRange:a},as=!1,We=t;We!==null;)if(t=We,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,We=e;else for(;We!==null;){switch(t=We,s=t.alternate,e=t.flags,t.tag){case 0:if((e&4)!==0&&(e=t.updateQueue,e=e!==null?e.events:null,e!==null))for(a=0;a title"))),et(s,l,a),s[Fe]=e,Ke(s),l=s;break e;case"link":var o=Wf("link","href",i).get(l+(a.href||""));if(o){for(var f=0;fCe&&(o=Ce,Ce=le,le=o);var y=$r(f,le),p=$r(f,Ce);if(y&&p&&(A.rangeCount!==1||A.anchorNode!==y.node||A.anchorOffset!==y.offset||A.focusNode!==p.node||A.focusOffset!==p.offset)){var j=L.createRange();j.setStart(y.node,y.offset),A.removeAllRanges(),le>Ce?(A.addRange(j),A.extend(p.node,p.offset)):(j.setEnd(p.node,p.offset),A.addRange(j))}}}}for(L=[],A=f;A=A.parentNode;)A.nodeType===1&&L.push({element:A,left:A.scrollLeft,top:A.scrollTop});for(typeof f.focus=="function"&&f.focus(),f=0;fa?32:a,k.T=null,a=cu,cu=null;var s=Na,o=la;if(Ze=0,Ml=Na=null,la=0,(Ae&6)!==0)throw Error(r(331));var f=Ae;if(Ae|=4,Pd(s.current),Fd(s,s.current,o,a),Ae=f,An(0,!1),mt&&typeof mt.onPostCommitFiberRoot=="function")try{mt.onPostCommitFiberRoot(Yl,s)}catch{}return!0}finally{_.p=i,k.T=l,yf(e,t)}}function jf(e,t,a){t=_t(a,t),t=qc(e.stateNode,t,2),e=pa(e,t,2),e!==null&&(Gl(e,2),qt(e))}function ze(e,t,a){if(e.tag===3)jf(e,e,a);else for(;t!==null;){if(t.tag===3){jf(t,e,a);break}else if(t.tag===1){var l=t.stateNode;if(typeof t.type.getDerivedStateFromError=="function"||typeof l.componentDidCatch=="function"&&(Sa===null||!Sa.has(l))){e=_t(a,e),a=jd(2),l=pa(t,a,2),l!==null&&(xd(a,l,t,e),Gl(l,2),qt(l));break}}t=t.return}}function du(e,t,a){var l=e.pingCache;if(l===null){l=e.pingCache=new L1;var i=new Set;l.set(t,i)}else i=l.get(t),i===void 0&&(i=new Set,l.set(t,i));i.has(a)||(lu=!0,i.add(a),e=B1.bind(null,e,t,a),t.then(e,e))}function B1(e,t,a){var l=e.pingCache;l!==null&&l.delete(t),e.pingedLanes|=e.suspendedLanes&a,e.warmLanes&=~a,Ee===e&&(ye&a)===a&&(Re===4||Re===3&&(ye&62914560)===ye&&300>ht()-Hi?(Ae&2)===0&&Cl(e,0):nu|=a,Dl===ye&&(Dl=0)),qt(e)}function xf(e,t){t===0&&(t=hr()),e=Ha(e,t),e!==null&&(Gl(e,t),qt(e))}function Y1(e){var t=e.memoizedState,a=0;t!==null&&(a=t.retryLane),xf(e,a)}function J1(e,t){var a=0;switch(e.tag){case 31:case 13:var l=e.stateNode,i=e.memoizedState;i!==null&&(a=i.retryLane);break;case 19:l=e.stateNode;break;case 22:l=e.stateNode._retryCache;break;default:throw Error(r(314))}l!==null&&l.delete(t),xf(e,a)}function G1(e,t){return ks(e,t)}var Qi=null,wl=null,fu=!1,Xi=!1,hu=!1,Aa=0;function qt(e){e!==wl&&e.next===null&&(wl===null?Qi=wl=e:wl=wl.next=e),Xi=!0,fu||(fu=!0,X1())}function An(e,t){if(!hu&&Xi){hu=!0;do for(var a=!1,l=Qi;l!==null;){if(e!==0){var i=l.pendingLanes;if(i===0)var s=0;else{var o=l.suspendedLanes,f=l.pingedLanes;s=(1<<31-gt(42|e)+1)-1,s&=i&~(o&~f),s=s&201326741?s&201326741|1:s?s|2:0}s!==0&&(a=!0,Af(l,s))}else s=ye,s=Fn(l,l===Ee?s:0,l.cancelPendingCommit!==null||l.timeoutHandle!==-1),(s&3)===0||Jl(l,s)||(a=!0,Af(l,s));l=l.next}while(a);hu=!1}}function Q1(){Sf()}function Sf(){Xi=fu=!1;var e=0;Aa!==0&&ag()&&(e=Aa);for(var t=ht(),a=null,l=Qi;l!==null;){var i=l.next,s=Nf(l,t);s===0?(l.next=null,a===null?Qi=i:a.next=i,i===null&&(wl=a)):(a=l,(e!==0||(s&3)!==0)&&(Xi=!0)),l=i}Ze!==0&&Ze!==5||An(e),Aa!==0&&(Aa=0)}function Nf(e,t){for(var a=e.suspendedLanes,l=e.pingedLanes,i=e.expirationTimes,s=e.pendingLanes&-62914561;0f)break;var M=g.transferSize,L=g.initiatorType;M&&wf(L)&&(g=g.responseEnd,o+=M*(g"u"?null:document;function Qf(e,t,a){var l=Ul;if(l&&typeof t=="string"&&t){var i=kt(t);i='link[rel="'+e+'"][href="'+i+'"]',typeof a=="string"&&(i+='[crossorigin="'+a+'"]'),Gf.has(i)||(Gf.add(i),e={rel:e,crossOrigin:a,href:t},l.querySelector(i)===null&&(t=l.createElement("link"),et(t,"link",e),Ke(t),l.head.appendChild(t)))}}function dg(e){na.D(e),Qf("dns-prefetch",e,null)}function fg(e,t){na.C(e,t),Qf("preconnect",e,t)}function hg(e,t,a){na.L(e,t,a);var l=Ul;if(l&&e&&t){var i='link[rel="preload"][as="'+kt(t)+'"]';t==="image"&&a&&a.imageSrcSet?(i+='[imagesrcset="'+kt(a.imageSrcSet)+'"]',typeof a.imageSizes=="string"&&(i+='[imagesizes="'+kt(a.imageSizes)+'"]')):i+='[href="'+kt(e)+'"]';var s=i;switch(t){case"style":s=Ol(e);break;case"script":s=Ll(e)}Et.has(s)||(e=T({rel:"preload",href:t==="image"&&a&&a.imageSrcSet?void 0:e,as:t},a),Et.set(s,e),l.querySelector(i)!==null||t==="style"&&l.querySelector(Dn(s))||t==="script"&&l.querySelector(Mn(s))||(t=l.createElement("link"),et(t,"link",e),Ke(t),l.head.appendChild(t)))}}function mg(e,t){na.m(e,t);var a=Ul;if(a&&e){var l=t&&typeof t.as=="string"?t.as:"script",i='link[rel="modulepreload"][as="'+kt(l)+'"][href="'+kt(e)+'"]',s=i;switch(l){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":s=Ll(e)}if(!Et.has(s)&&(e=T({rel:"modulepreload",href:e},t),Et.set(s,e),a.querySelector(i)===null)){switch(l){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(a.querySelector(Mn(s)))return}l=a.createElement("link"),et(l,"link",e),Ke(l),a.head.appendChild(l)}}}function gg(e,t,a){na.S(e,t,a);var l=Ul;if(l&&e){var i=ll(l).hoistableStyles,s=Ol(e);t=t||"default";var o=i.get(s);if(!o){var f={loading:0,preload:null};if(o=l.querySelector(Dn(s)))f.loading=5;else{e=T({rel:"stylesheet",href:e,"data-precedence":t},a),(a=Et.get(s))&&Du(e,a);var g=o=l.createElement("link");Ke(g),et(g,"link",e),g._p=new Promise(function(S,M){g.onload=S,g.onerror=M}),g.addEventListener("load",function(){f.loading|=1}),g.addEventListener("error",function(){f.loading|=2}),f.loading|=4,$i(o,t,l)}o={type:"stylesheet",instance:o,count:1,state:f},i.set(s,o)}}}function pg(e,t){na.X(e,t);var a=Ul;if(a&&e){var l=ll(a).hoistableScripts,i=Ll(e),s=l.get(i);s||(s=a.querySelector(Mn(i)),s||(e=T({src:e,async:!0},t),(t=Et.get(i))&&Mu(e,t),s=a.createElement("script"),Ke(s),et(s,"link",e),a.head.appendChild(s)),s={type:"script",instance:s,count:1,state:null},l.set(i,s))}}function vg(e,t){na.M(e,t);var a=Ul;if(a&&e){var l=ll(a).hoistableScripts,i=Ll(e),s=l.get(i);s||(s=a.querySelector(Mn(i)),s||(e=T({src:e,async:!0,type:"module"},t),(t=Et.get(i))&&Mu(e,t),s=a.createElement("script"),Ke(s),et(s,"link",e),a.head.appendChild(s)),s={type:"script",instance:s,count:1,state:null},l.set(i,s))}}function Xf(e,t,a,l){var i=(i=ie.current)?Fi(i):null;if(!i)throw Error(r(446));switch(e){case"meta":case"title":return null;case"style":return typeof a.precedence=="string"&&typeof a.href=="string"?(t=Ol(a.href),a=ll(i).hoistableStyles,l=a.get(t),l||(l={type:"style",instance:null,count:0,state:null},a.set(t,l)),l):{type:"void",instance:null,count:0,state:null};case"link":if(a.rel==="stylesheet"&&typeof a.href=="string"&&typeof a.precedence=="string"){e=Ol(a.href);var s=ll(i).hoistableStyles,o=s.get(e);if(o||(i=i.ownerDocument||i,o={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},s.set(e,o),(s=i.querySelector(Dn(e)))&&!s._p&&(o.instance=s,o.state.loading=5),Et.has(e)||(a={rel:"preload",as:"style",href:a.href,crossOrigin:a.crossOrigin,integrity:a.integrity,media:a.media,hrefLang:a.hrefLang,referrerPolicy:a.referrerPolicy},Et.set(e,a),s||yg(i,e,a,o.state))),t&&l===null)throw Error(r(528,""));return o}if(t&&l!==null)throw Error(r(529,""));return null;case"script":return t=a.async,a=a.src,typeof a=="string"&&t&&typeof t!="function"&&typeof t!="symbol"?(t=Ll(a),a=ll(i).hoistableScripts,l=a.get(t),l||(l={type:"script",instance:null,count:0,state:null},a.set(t,l)),l):{type:"void",instance:null,count:0,state:null};default:throw Error(r(444,e))}}function Ol(e){return'href="'+kt(e)+'"'}function Dn(e){return'link[rel="stylesheet"]['+e+"]"}function Zf(e){return T({},e,{"data-precedence":e.precedence,precedence:null})}function yg(e,t,a,l){e.querySelector('link[rel="preload"][as="style"]['+t+"]")?l.loading=1:(t=e.createElement("link"),l.preload=t,t.addEventListener("load",function(){return l.loading|=1}),t.addEventListener("error",function(){return l.loading|=2}),et(t,"link",a),Ke(t),e.head.appendChild(t))}function Ll(e){return'[src="'+kt(e)+'"]'}function Mn(e){return"script[async]"+e}function Kf(e,t,a){if(t.count++,t.instance===null)switch(t.type){case"style":var l=e.querySelector('style[data-href~="'+kt(a.href)+'"]');if(l)return t.instance=l,Ke(l),l;var i=T({},a,{"data-href":a.href,"data-precedence":a.precedence,href:null,precedence:null});return l=(e.ownerDocument||e).createElement("style"),Ke(l),et(l,"style",i),$i(l,a.precedence,e),t.instance=l;case"stylesheet":i=Ol(a.href);var s=e.querySelector(Dn(i));if(s)return t.state.loading|=4,t.instance=s,Ke(s),s;l=Zf(a),(i=Et.get(i))&&Du(l,i),s=(e.ownerDocument||e).createElement("link"),Ke(s);var o=s;return o._p=new Promise(function(f,g){o.onload=f,o.onerror=g}),et(s,"link",l),t.state.loading|=4,$i(s,a.precedence,e),t.instance=s;case"script":return s=Ll(a.src),(i=e.querySelector(Mn(s)))?(t.instance=i,Ke(i),i):(l=a,(i=Et.get(s))&&(l=T({},a),Mu(l,i)),e=e.ownerDocument||e,i=e.createElement("script"),Ke(i),et(i,"link",l),e.head.appendChild(i),t.instance=i);case"void":return null;default:throw Error(r(443,t.type))}else t.type==="stylesheet"&&(t.state.loading&4)===0&&(l=t.instance,t.state.loading|=4,$i(l,a.precedence,e));return t.instance}function $i(e,t,a){for(var l=a.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),i=l.length?l[l.length-1]:null,s=i,o=0;o title"):null)}function bg(e,t,a){if(a===1||t.itemProp!=null)return!1;switch(e){case"meta":case"title":return!0;case"style":if(typeof t.precedence!="string"||typeof t.href!="string"||t.href==="")break;return!0;case"link":if(typeof t.rel!="string"||typeof t.href!="string"||t.href===""||t.onLoad||t.onError)break;return t.rel==="stylesheet"?(e=t.disabled,typeof t.precedence=="string"&&e==null):!0;case"script":if(t.async&&typeof t.async!="function"&&typeof t.async!="symbol"&&!t.onLoad&&!t.onError&&t.src&&typeof t.src=="string")return!0}return!1}function $f(e){return!(e.type==="stylesheet"&&(e.state.loading&3)===0)}function jg(e,t,a,l){if(a.type==="stylesheet"&&(typeof l.media!="string"||matchMedia(l.media).matches!==!1)&&(a.state.loading&4)===0){if(a.instance===null){var i=Ol(l.href),s=t.querySelector(Dn(i));if(s){t=s._p,t!==null&&typeof t=="object"&&typeof t.then=="function"&&(e.count++,e=Pi.bind(e),t.then(e,e)),a.state.loading|=4,a.instance=s,Ke(s);return}s=t.ownerDocument||t,l=Zf(l),(i=Et.get(i))&&Du(l,i),s=s.createElement("link"),Ke(s);var o=s;o._p=new Promise(function(f,g){o.onload=f,o.onerror=g}),et(s,"link",l),a.instance=s}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(a,t),(t=a.state.preload)&&(a.state.loading&3)===0&&(e.count++,a=Pi.bind(e),t.addEventListener("load",a),t.addEventListener("error",a))}}var Cu=0;function xg(e,t){return e.stylesheets&&e.count===0&&ts(e,e.stylesheets),0Cu?50:800)+t);return e.unsuspend=a,function(){e.unsuspend=null,clearTimeout(l),clearTimeout(i)}}:null}function Pi(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)ts(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var es=null;function ts(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,es=new Map,t.forEach(Sg,e),es=null,Pi.call(e))}function Sg(e,t){if(!(t.state.loading&4)){var a=es.get(e);if(a)var l=a.get(null);else{a=new Map,es.set(e,a);for(var i=e.querySelectorAll("link[data-precedence],style[data-precedence]"),s=0;s"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(d)}catch(c){console.error(c)}}return d(),qu.exports=Hg(),qu.exports}var qg=Vg();class Bg{observers=new Set;next(c){this.observers.forEach(u=>u(c))}asObservable(){return{subscribe:c=>(this.observers.add(c),{unsubscribe:()=>this.observers.delete(c)})}}}class Yg extends Bg{currentValue;constructor(c){super(),this.currentValue=c}next(c){this.currentValue=c,super.next(c)}get value(){return this.currentValue}asObservable(){return{subscribe:c=>(c(this.currentValue),super.asObservable().subscribe(c))}}}class Jg{authId="id";authToken="token";authEmail="email";runOutDate="runOutDate";authTokenSubject=new Yg(null);constructor(){}async loadAuthTokenFromStorage(){const c=window.localStorage.getItem(this.authToken);this.authTokenSubject.next(c)}async setAuthData(c,u){if(await this.setPreference(this.authId,c.id),await this.setPreference(this.authToken,c.token),await this.setPreference(this.authEmail,c.email),u)await this.setPreference(this.runOutDate,"forever");else{const r=new Date,m=new Date(r);m.setDate(r.getDate()+1);const v=m.toISOString();await this.setPreference(this.runOutDate,v)}}async setPreference(c,u){window.localStorage.setItem(c,u)}async getCandidateId(){return window.localStorage.getItem(this.authId)}async getCandidateEmail(){return window.localStorage.getItem(this.authEmail)}async getAuthToken(){return window.localStorage.getItem(this.authToken)}getAuthTokenNoneAsync(){return this.authTokenSubject.value}async getRunOutDate(){return window.localStorage.getItem(this.runOutDate)}async clearCredentials(){window.localStorage.removeItem(this.authId),window.localStorage.removeItem(this.authToken),window.localStorage.removeItem(this.runOutDate)}async getAuth(){let c=await this.getCandidateId(),u=await this.getAuthToken(),r=await this.getCandidateEmail(),m=await this.getRunOutDate();return c&&u&&r&&m?{id:c,token:u,email:r,runOutDate:m}:null}getAuthTokenWithoutWindow(){const c=this.getAuthTokenNoneAsync();return c||""}getAuthWithoutWindow(){const c=this.getAuthTokenNoneAsync();return c?{id:"",token:c,email:"",runOutDate:"forever"}:null}}const ql=new Jg;const qh=(...d)=>d.filter((c,u,r)=>!!c&&c.trim()!==""&&r.indexOf(c)===u).join(" ").trim();const Gg=d=>d.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase();const Qg=d=>d.replace(/^([A-Z])|[\s-_]+(\w)/g,(c,u,r)=>r?r.toUpperCase():u.toLowerCase());const xh=d=>{const c=Qg(d);return c.charAt(0).toUpperCase()+c.slice(1)};var Xg={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};const Zg=d=>{for(const c in d)if(c.startsWith("aria-")||c==="role"||c==="title")return!0;return!1};const Kg=C.forwardRef(({color:d="currentColor",size:c=24,strokeWidth:u=2,absoluteStrokeWidth:r,className:m="",children:v,iconNode:U,...Y},R)=>C.createElement("svg",{ref:R,...Xg,width:c,height:c,stroke:d,strokeWidth:r?Number(u)*24/Number(c):u,className:qh("lucide",m),...!v&&!Zg(Y)&&{"aria-hidden":"true"},...Y},[...U.map(([b,V])=>C.createElement(b,V)),...Array.isArray(v)?v:[v]]));const X=(d,c)=>{const u=C.forwardRef(({className:r,...m},v)=>C.createElement(Kg,{ref:v,iconNode:c,className:qh(`lucide-${Gg(xh(d))}`,`lucide-${d}`,r),...m}));return u.displayName=xh(d),u};const Wg=[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]],Bh=X("arrow-left",Wg);const Fg=[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]],$a=X("arrow-right",Fg);const $g=[["path",{d:"m21 16-4 4-4-4",key:"f6ql7i"}],["path",{d:"M17 20V4",key:"1ejh1v"}],["path",{d:"m3 8 4-4 4 4",key:"11wl7u"}],["path",{d:"M7 4v16",key:"1glfcx"}]],Ig=X("arrow-up-down",$g);const Pg=[["path",{d:"M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z",key:"3c2336"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]],Yh=X("badge-check",Pg);const ep=[["path",{d:"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z",key:"yt0hxn"}],["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}]],tp=X("bolt",ep);const ap=[["path",{d:"M17 3a2 2 0 0 1 2 2v15a1 1 0 0 1-1.496.868l-4.512-2.578a2 2 0 0 0-1.984 0l-4.512 2.578A1 1 0 0 1 5 20V5a2 2 0 0 1 2-2z",key:"oz39mx"}]],lp=X("bookmark",ap);const np=[["path",{d:"M12 8V4H8",key:"hb8ula"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2",key:"enze0r"}],["path",{d:"M2 14h2",key:"vft8re"}],["path",{d:"M20 14h2",key:"4cs60a"}],["path",{d:"M15 13v2",key:"1xurst"}],["path",{d:"M9 13v2",key:"rq6x2g"}]],Jh=X("bot",np);const ip=[["path",{d:"M12 12h.01",key:"1mp3jc"}],["path",{d:"M16 6V4a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v2",key:"1ksdt3"}],["path",{d:"M22 13a18.15 18.15 0 0 1-20 0",key:"12hx5q"}],["rect",{width:"20",height:"14",x:"2",y:"6",rx:"2",key:"i6l2r4"}]],Iu=X("briefcase-business",ip);const sp=[["path",{d:"M16 20V4a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16",key:"jecpp"}],["rect",{width:"20",height:"14",x:"2",y:"6",rx:"2",key:"i6l2r4"}]],sr=X("briefcase",sp);const cp=[["path",{d:"M8 2v4",key:"1cmpym"}],["path",{d:"M16 2v4",key:"4m81vk"}],["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",key:"1hopcy"}],["path",{d:"M3 10h18",key:"8toen8"}],["path",{d:"M8 14h.01",key:"6423bh"}],["path",{d:"M12 14h.01",key:"1etili"}],["path",{d:"M16 14h.01",key:"1gbofw"}],["path",{d:"M8 18h.01",key:"lrp35t"}],["path",{d:"M12 18h.01",key:"mhygvu"}],["path",{d:"M16 18h.01",key:"kzsmim"}]],up=X("calendar-days",cp);const rp=[["path",{d:"M19 17h2c.6 0 1-.4 1-1v-3c0-.9-.7-1.7-1.5-1.9C18.7 10.6 16 10 16 10s-1.3-1.4-2.2-2.3c-.5-.4-1.1-.7-1.8-.7H5c-.6 0-1.1.4-1.4.9l-1.4 2.9A3.7 3.7 0 0 0 2 12v4c0 .6.4 1 1 1h2",key:"5owen"}],["circle",{cx:"7",cy:"17",r:"2",key:"u2ysq9"}],["path",{d:"M9 17h6",key:"r8uit2"}],["circle",{cx:"17",cy:"17",r:"2",key:"axvx0g"}]],Gh=X("car",rp);const op=[["path",{d:"M18 6 7 17l-5-5",key:"116fxf"}],["path",{d:"m22 10-7.5 7.5L13 16",key:"ke71qq"}]],dp=X("check-check",op);const fp=[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]],hp=X("check",fp);const mp=[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]],Hn=X("chevron-down",mp);const gp=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]],tt=X("circle-check",gp);const pp=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"10",x2:"10",y1:"15",y2:"9",key:"c1nkhi"}],["line",{x1:"14",x2:"14",y1:"15",y2:"9",key:"h65svq"}]],vp=X("circle-pause",pp);const yp=[["path",{d:"M9 9.003a1 1 0 0 1 1.517-.859l4.997 2.997a1 1 0 0 1 0 1.718l-4.997 2.997A1 1 0 0 1 9 14.996z",key:"kmsa83"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]],bp=X("circle-play",yp);const jp=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M8 12h8",key:"1wcyev"}],["path",{d:"M12 8v8",key:"napkw2"}]],xp=X("circle-plus",jp);const Sp=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["rect",{x:"9",y:"9",width:"6",height:"6",rx:"1",key:"1ssd4o"}]],Np=X("circle-stop",Sp);const kp=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["circle",{cx:"12",cy:"10",r:"3",key:"ilqhr7"}],["path",{d:"M7 20.662V19a2 2 0 0 1 2-2h6a2 2 0 0 1 2 2v1.662",key:"154egf"}]],Ap=X("circle-user",kp);const _p=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 6v6h4",key:"135r8i"}]],Pu=X("clock-3",_p);const Tp=[["path",{d:"m18 16 4-4-4-4",key:"1inbqp"}],["path",{d:"m6 8-4 4 4 4",key:"15zrgr"}],["path",{d:"m14.5 4-5 16",key:"e7oirm"}]],er=X("code-xml",Tp);const zp=[["path",{d:"M11.562 3.266a.5.5 0 0 1 .876 0L15.39 8.87a1 1 0 0 0 1.516.294L21.183 5.5a.5.5 0 0 1 .798.519l-2.834 10.246a1 1 0 0 1-.956.734H5.81a1 1 0 0 1-.957-.734L2.02 6.02a.5.5 0 0 1 .798-.519l4.276 3.664a1 1 0 0 0 1.516-.294z",key:"1vdc57"}],["path",{d:"M5 21h14",key:"11awu3"}]],tr=X("crown",zp);const Dp=[["circle",{cx:"12",cy:"12",r:"1",key:"41hilf"}],["circle",{cx:"19",cy:"12",r:"1",key:"1wjl8i"}],["circle",{cx:"5",cy:"12",r:"1",key:"1pcz8c"}]],Mp=X("ellipsis",Dp);const Cp=[["path",{d:"M11.35 22H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v5.35",key:"17jvcc"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M14 19h6",key:"bvotb8"}],["path",{d:"M17 16v6",key:"18yu1i"}]],Ep=X("file-plus-corner",Cp);const wp=[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M10 9H8",key:"b1mrlr"}],["path",{d:"M16 13H8",key:"t4e002"}],["path",{d:"M16 17H8",key:"z1uh3a"}]],ar=X("file-text",wp);const Up=[["path",{d:"M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z",key:"sc7q7i"}]],Qh=X("funnel",Up);const Op=[["line",{x1:"6",x2:"10",y1:"11",y2:"11",key:"1gktln"}],["line",{x1:"8",x2:"8",y1:"9",y2:"13",key:"qnk9ow"}],["line",{x1:"15",x2:"15.01",y1:"12",y2:"12",key:"krot7o"}],["line",{x1:"18",x2:"18.01",y1:"10",y2:"10",key:"1lcuu1"}],["path",{d:"M17.32 5H6.68a4 4 0 0 0-3.978 3.59c-.006.052-.01.101-.017.152C2.604 9.416 2 14.456 2 16a3 3 0 0 0 3 3c1 0 1.5-.5 2-1l1.414-1.414A2 2 0 0 1 9.828 16h4.344a2 2 0 0 1 1.414.586L17 18c.5.5 1 1 2 1a3 3 0 0 0 3-3c0-1.545-.604-6.584-.685-7.258-.007-.05-.011-.1-.017-.151A4 4 0 0 0 17.32 5z",key:"mfqc10"}]],Lp=X("gamepad-2",Op);const Rp=[["path",{d:"M12 7v14",key:"1akyts"}],["path",{d:"M20 11v8a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2v-8",key:"1sqzm4"}],["path",{d:"M7.5 7a1 1 0 0 1 0-5A4.8 8 0 0 1 12 7a4.8 8 0 0 1 4.5-5 1 1 0 0 1 0 5",key:"kc0143"}],["rect",{x:"3",y:"7",width:"18",height:"4",rx:"1",key:"1hberx"}]],Hp=X("gift",Rp);const Vp=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20",key:"13o1zl"}],["path",{d:"M2 12h20",key:"9i4pu4"}]],gs=X("globe",Vp);const qp=[["path",{d:"M21.42 10.922a1 1 0 0 0-.019-1.838L12.83 5.18a2 2 0 0 0-1.66 0L2.6 9.08a1 1 0 0 0 0 1.832l8.57 3.908a2 2 0 0 0 1.66 0z",key:"j76jl0"}],["path",{d:"M22 10v6",key:"1lu8f3"}],["path",{d:"M6 12.5V16a6 3 0 0 0 12 0v-3.5",key:"1r8lef"}]],Xh=X("graduation-cap",qp);const Bp=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M3 9h18",key:"1pudct"}],["path",{d:"M3 15h18",key:"5xshup"}],["path",{d:"M9 3v18",key:"fh3hqa"}],["path",{d:"M15 3v18",key:"14nvp0"}]],Zh=X("grid-3x3",Bp);const Yp=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 16v-4",key:"1dtifu"}],["path",{d:"M12 8h.01",key:"e9boi3"}]],Jp=X("info",Yp);const Gp=[["path",{d:"M18 5a2 2 0 0 1 2 2v8.526a2 2 0 0 0 .212.897l1.068 2.127a1 1 0 0 1-.9 1.45H3.62a1 1 0 0 1-.9-1.45l1.068-2.127A2 2 0 0 0 4 15.526V7a2 2 0 0 1 2-2z",key:"1pdavp"}],["path",{d:"M20.054 15.987H3.946",key:"14rxg9"}]],lr=X("laptop",Gp);const Qp=[["rect",{width:"7",height:"7",x:"3",y:"3",rx:"1",key:"1g98yp"}],["rect",{width:"7",height:"7",x:"14",y:"3",rx:"1",key:"6d4xhi"}],["rect",{width:"7",height:"7",x:"14",y:"14",rx:"1",key:"nxv5o0"}],["rect",{width:"7",height:"7",x:"3",y:"14",rx:"1",key:"1bb6yr"}]],Xp=X("layout-grid",Qp);const Zp=[["rect",{width:"18",height:"7",x:"3",y:"3",rx:"1",key:"f1a2em"}],["rect",{width:"7",height:"7",x:"3",y:"14",rx:"1",key:"1bb6yr"}],["rect",{width:"7",height:"7",x:"14",y:"14",rx:"1",key:"nxv5o0"}]],Kh=X("layout-panel-top",Zp);const Kp=[["path",{d:"M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5",key:"1gvzjb"}],["path",{d:"M9 18h6",key:"x1upvd"}],["path",{d:"M10 22h4",key:"ceow96"}]],Wp=X("lightbulb",Kp);const Fp=[["path",{d:"M9 17H7A5 5 0 0 1 7 7h2",key:"8i5ue5"}],["path",{d:"M15 7h2a5 5 0 1 1 0 10h-2",key:"1b9ql8"}],["line",{x1:"8",x2:"16",y1:"12",y2:"12",key:"1jonct"}]],$p=X("link-2",Fp);const Ip=[["circle",{cx:"12",cy:"16",r:"1",key:"1au0dj"}],["rect",{x:"3",y:"10",width:"18",height:"12",rx:"2",key:"6s8ecr"}],["path",{d:"M7 10V7a5 5 0 0 1 10 0v3",key:"1pqi11"}]],Wh=X("lock-keyhole",Ip);const Pp=[["path",{d:"m16 17 5-5-5-5",key:"1bji2h"}],["path",{d:"M21 12H9",key:"dn1m92"}],["path",{d:"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4",key:"1uf3rs"}]],ev=X("log-out",Pp);const tv=[["path",{d:"m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7",key:"132q7q"}],["rect",{x:"2",y:"4",width:"20",height:"16",rx:"2",key:"izxlao"}]],ps=X("mail",tv);const av=[["path",{d:"M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0",key:"1r0f0z"}],["circle",{cx:"12",cy:"10",r:"3",key:"ilqhr7"}]],Yn=X("map-pin",av);const lv=[["path",{d:"M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719",key:"1sd12s"}]],Fh=X("message-circle",lv);const nv=[["path",{d:"M12 19v3",key:"npa21l"}],["path",{d:"M19 10v2a7 7 0 0 1-14 0v-2",key:"1vc78b"}],["rect",{x:"9",y:"2",width:"6",height:"13",rx:"3",key:"s6n7sd"}]],iv=X("mic",nv);const sv=[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21",key:"1svkeh"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21",key:"vw1qmm"}]],cv=X("monitor",sv);const uv=[["path",{d:"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401",key:"kfwtm"}]],rv=X("moon",uv);const ov=[["path",{d:"m16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551",key:"1miecu"}]],dv=X("paperclip",ov);const fv=[["path",{d:"M13 21h8",key:"1jsn5i"}],["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}]],hv=X("pen-line",fv);const mv=[["path",{d:"M13.832 16.568a1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 6.392 6.384",key:"9njp5v"}]],gv=X("phone",mv);const pv=[["path",{d:"M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z",key:"10ikf1"}]],vv=X("play",pv);const yv=[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]],bv=X("plus",yv);const jv=[["path",{d:"M2 3h20",key:"91anmk"}],["path",{d:"M21 3v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V3",key:"2k9sn8"}],["path",{d:"m7 21 5-5 5 5",key:"bip4we"}]],xv=X("presentation",jv);const Sv=[["path",{d:"M19.07 4.93A10 10 0 0 0 6.99 3.34",key:"z3du51"}],["path",{d:"M4 6h.01",key:"oypzma"}],["path",{d:"M2.29 9.62A10 10 0 1 0 21.31 8.35",key:"qzzz0"}],["path",{d:"M16.24 7.76A6 6 0 1 0 8.23 16.67",key:"1yjesh"}],["path",{d:"M12 18h.01",key:"mhygvu"}],["path",{d:"M17.99 11.66A6 6 0 0 1 15.77 16.67",key:"1u2y91"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}],["path",{d:"m13.41 10.59 5.66-5.66",key:"mhq4k0"}]],Nv=X("radar",Sv);const kv=[["path",{d:"M16.247 7.761a6 6 0 0 1 0 8.478",key:"1fwjs5"}],["path",{d:"M19.075 4.933a10 10 0 0 1 0 14.134",key:"ehdyv1"}],["path",{d:"M4.925 19.067a10 10 0 0 1 0-14.134",key:"1q22gi"}],["path",{d:"M7.753 16.239a6 6 0 0 1 0-8.478",key:"r2q7qm"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}]],Av=X("radio",kv);const _v=[["path",{d:"M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5",key:"qeys4"}],["path",{d:"M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09",key:"u4xsad"}],["path",{d:"M9 12a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.4 22.4 0 0 1-4 2z",key:"676m9"}],["path",{d:"M9 12H4s.55-3.03 2-4c1.62-1.08 5 .05 5 .05",key:"92ym6u"}]],Tv=X("rocket",_v);const zv=[["circle",{cx:"6",cy:"19",r:"3",key:"1kj8tv"}],["path",{d:"M9 19h8.5a3.5 3.5 0 0 0 0-7h-11a3.5 3.5 0 0 1 0-7H15",key:"1d8sl"}],["circle",{cx:"18",cy:"5",r:"3",key:"gq8acd"}]],Sh=X("route",zv);const Dv=[["path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z",key:"1c8476"}],["path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7",key:"1ydtos"}],["path",{d:"M7 3v4a1 1 0 0 0 1 1h7",key:"t51u73"}]],Mv=X("save",Dv);const Cv=[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]],nr=X("search",Cv);const Ev=[["path",{d:"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z",key:"1ffxy3"}],["path",{d:"m21.854 2.147-10.94 10.939",key:"12cjpa"}]],wv=X("send",Ev);const Uv=[["path",{d:"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915",key:"1i5ecw"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]],$h=X("settings",Uv);const Ov=[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}]],Lv=X("shield",Ov);const Rv=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M8 14s1.5 2 4 2 4-2 4-2",key:"1y1vjs"}],["line",{x1:"9",x2:"9.01",y1:"9",y2:"9",key:"yxxnd0"}],["line",{x1:"15",x2:"15.01",y1:"9",y2:"9",key:"1p4y9e"}]],Hv=X("smile",Rv);const Vv=[["path",{d:"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z",key:"1s2grr"}],["path",{d:"M20 2v4",key:"1rf3ol"}],["path",{d:"M22 4h-4",key:"gwowj6"}],["circle",{cx:"4",cy:"20",r:"2",key:"6kqj1y"}]],Gn=X("sparkles",Vv);const qv=[["path",{d:"M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7",key:"1m0v6g"}],["path",{d:"M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z",key:"ohrbg2"}]],Ih=X("square-pen",qv);const Bv=[["path",{d:"M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z",key:"r04s7s"}]],Ph=X("star",Bv);const Yv=[["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"m4.93 4.93 1.41 1.41",key:"149t6j"}],["path",{d:"m17.66 17.66 1.41 1.41",key:"ptbguv"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"m6.34 17.66-1.41 1.41",key:"1m8zz5"}],["path",{d:"m19.07 4.93-1.41 1.41",key:"1shlcs"}]],Jv=X("sun",Yv);const Gv=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["circle",{cx:"12",cy:"12",r:"6",key:"1vlfrh"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}]],vs=X("target",Gv);const Qv=[["path",{d:"M10 14.66v1.626a2 2 0 0 1-.976 1.696A5 5 0 0 0 7 21.978",key:"1n3hpd"}],["path",{d:"M14 14.66v1.626a2 2 0 0 0 .976 1.696A5 5 0 0 1 17 21.978",key:"rfe1zi"}],["path",{d:"M18 9h1.5a1 1 0 0 0 0-5H18",key:"7xy6bh"}],["path",{d:"M4 22h16",key:"57wxv0"}],["path",{d:"M6 9a6 6 0 0 0 12 0V3a1 1 0 0 0-1-1H7a1 1 0 0 0-1 1z",key:"1mhfuq"}],["path",{d:"M6 9H4.5a1 1 0 0 1 0-5H6",key:"tex48p"}]],Xv=X("trophy",Qv);const Zv=[["circle",{cx:"12",cy:"8",r:"5",key:"1hypcn"}],["path",{d:"M20 21a8 8 0 0 0-16 0",key:"rfgkzh"}]],Hl=X("user-round",Zv);const Kv=[["path",{d:"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2",key:"975kel"}],["circle",{cx:"12",cy:"7",r:"4",key:"17ys0d"}]],Nh=X("user",Kv);const Wv=[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["path",{d:"M16 3.128a4 4 0 0 1 0 7.744",key:"16gr8j"}],["path",{d:"M22 21v-2a4 4 0 0 0-3-3.87",key:"kshegd"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}]],Fv=X("users",Wv);const $v=[["path",{d:"m21.64 3.64-1.28-1.28a1.21 1.21 0 0 0-1.72 0L2.36 18.64a1.21 1.21 0 0 0 0 1.72l1.28 1.28a1.2 1.2 0 0 0 1.72 0L21.64 5.36a1.2 1.2 0 0 0 0-1.72",key:"ul74o6"}],["path",{d:"m14 7 3 3",key:"1r5n42"}],["path",{d:"M5 6v4",key:"ilb8ba"}],["path",{d:"M19 14v4",key:"blhpug"}],["path",{d:"M10 2v2",key:"7u0qdc"}],["path",{d:"M7 8H3",key:"zfb6yr"}],["path",{d:"M21 16h-4",key:"1cnmox"}],["path",{d:"M11 3H9",key:"1obp7u"}]],Iv=X("wand-sparkles",$v);const Pv=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],kh=X("x",Pv);function Vl({icon:d,label:c,...u}){return n.jsxs("label",{className:"auth-field",children:[n.jsx("span",{children:c}),n.jsxs("div",{className:"auth-input-wrap",children:[n.jsx("span",{className:"auth-input-icon","aria-hidden":!0,children:d}),n.jsx("input",{...u})]})]})}function e0({email:d,loading:c,onBackToLogin:u,onChangeEmail:r,onSubmit:m}){return n.jsxs("div",{className:"auth-view view-enter",children:[n.jsxs("div",{className:"auth-head",children:[n.jsx("button",{className:"link-btn back-link",type:"button",onClick:u,children:"Tilbage"}),n.jsx("h1",{children:"Glemt kodeord?"}),n.jsx("p",{children:"Indtast din e-mail, sa sender vi instruktioner til at nulstille din kode."})]}),n.jsxs("form",{className:"auth-form",onSubmit:m,children:[n.jsx(Vl,{icon:n.jsx(ps,{size:16,strokeWidth:1.8}),label:"E-mail",type:"email",placeholder:"navn@eksempel.dk",value:d,onChange:v=>r(v.target.value),required:!0}),n.jsx("button",{className:"submit-btn",type:"submit",disabled:c,children:c?"Sender...":"Send nulstillingslink"})]})]})}function t0({email:d,loading:c,onChangeEmail:u,onChangePassword:r,onChangeRememberMe:m,onForgotPassword:v,onRegister:U,onSubmit:Y,password:R,rememberMe:b}){return n.jsxs("div",{className:"auth-view view-enter",children:[n.jsxs("div",{className:"auth-head auth-head-center",children:[n.jsx("h1",{children:"Velkommen tilbage"}),n.jsx("p",{children:"Indtast dine oplysninger for at logge ind pa din konto."})]}),n.jsxs("form",{className:"auth-form",onSubmit:Y,children:[n.jsx(Vl,{icon:n.jsx(ps,{size:16,strokeWidth:1.8}),label:"E-mail",type:"email",placeholder:"navn@eksempel.dk",value:d,onChange:V=>u(V.target.value),required:!0}),n.jsxs("label",{className:"auth-field",children:[n.jsxs("div",{className:"auth-field-row",children:[n.jsx("span",{children:"Adgangskode"}),n.jsx("button",{className:"link-btn",type:"button",onClick:v,children:"Glemt adgangskode?"})]}),n.jsxs("div",{className:"auth-input-wrap",children:[n.jsx("span",{className:"auth-input-icon","aria-hidden":!0,children:n.jsx(Wh,{size:16,strokeWidth:1.8})}),n.jsx("input",{type:"password",placeholder:"••••••••",value:R,onChange:V=>r(V.target.value),required:!0})]})]}),n.jsxs("label",{className:"check-row",children:[n.jsx("input",{type:"checkbox",checked:b,onChange:V=>m(V.target.checked)}),n.jsx("span",{children:"Husk mig i 30 dage"})]}),n.jsx("button",{className:"submit-btn",type:"submit",disabled:c,children:c?"Logger ind...":"Log ind"})]}),n.jsxs("p",{className:"auth-foot",children:["Har du ikke en konto?",n.jsx("button",{className:"link-btn",type:"button",onClick:U,children:"Opret bruger"})]})]})}function a0({email:d,firstName:c,lastName:u,loading:r,locationQuery:m,locationSuggestions:v,onBackToLogin:U,onChangeEmail:Y,onChangeFirstName:R,onChangeLastName:b,onChangeLocationQuery:V,onChangePassword:T,onSelectLocation:q,onSubmit:Q,password:ee}){return n.jsxs("div",{className:"auth-view view-enter",children:[n.jsxs("div",{className:"auth-head auth-head-center",children:[n.jsx("h1",{children:"Opret konto"}),n.jsx("p",{children:"Start din karriere-rejse med os i dag."})]}),n.jsxs("form",{className:"auth-form",onSubmit:Q,children:[n.jsx(Vl,{icon:n.jsx(Nh,{size:16,strokeWidth:1.8}),label:"Fornavn",type:"text",placeholder:"Lasse",value:c,onChange:B=>R(B.target.value),required:!0}),n.jsx(Vl,{icon:n.jsx(Nh,{size:16,strokeWidth:1.8}),label:"Efternavn",type:"text",placeholder:"Hansen",value:u,onChange:B=>b(B.target.value),required:!0}),n.jsx(Vl,{icon:n.jsx(ps,{size:16,strokeWidth:1.8}),label:"E-mail",type:"email",placeholder:"navn@eksempel.dk",value:d,onChange:B=>Y(B.target.value),required:!0}),n.jsx(Vl,{icon:n.jsx(Wh,{size:16,strokeWidth:1.8}),label:"Adgangskode",type:"password",placeholder:"Skab en staerk kode",value:ee,onChange:B=>T(B.target.value),required:!0,minLength:8}),n.jsxs("label",{className:"auth-field",children:[n.jsx("span",{children:"Lokation"}),n.jsxs("div",{className:"auth-input-wrap",children:[n.jsx("span",{className:"auth-input-icon","aria-hidden":!0,children:n.jsx(Yn,{size:16,strokeWidth:1.8})}),n.jsx("input",{type:"text",placeholder:"Soeg by eller adresse",value:m,onChange:B=>V(B.target.value),autoComplete:"off",required:!0})]}),v.length>0?n.jsx("div",{className:"location-suggestions",children:v.map(B=>n.jsx("button",{type:"button",className:"location-suggestion-item",onClick:()=>{q(B.placeId,B.description)},children:B.description},B.placeId))}):null]}),n.jsx("button",{className:"submit-btn",type:"submit",disabled:r,children:r?"Opretter...":"Opret bruger"})]}),n.jsxs("p",{className:"auth-foot",children:["Har du allerede en konto?",n.jsx("button",{className:"link-btn",type:"button",onClick:U,children:"Log ind"})]})]})}class Ia{searchParams;constructor(c){this.searchParams=c?new URLSearchParams(c):new URLSearchParams}append(c,u){const r=new URLSearchParams(this.searchParams);return r.append(c,String(u)),new Ia(r)}set(c,u){const r=new URLSearchParams(this.searchParams);return r.set(c,String(u)),new Ia(r)}toString(){return this.searchParams.toString()}}function rs(d,c){if(!c)return d;const u=new URL(d);if(c instanceof Ia){const r=c.toString();return r&&new URLSearchParams(r).forEach((v,U)=>u.searchParams.append(U,v)),u.toString()}return Object.entries(c).forEach(([r,m])=>{if(Array.isArray(m)){m.forEach(v=>u.searchParams.append(r,String(v)));return}u.searchParams.set(r,String(m))}),u.toString()}async function os(d,c="json"){if(!d.ok){const u=await d.text();throw new Error(u||`HTTP ${d.status}`)}if(d.status!==204)return c==="blob"?await d.blob():await d.json()}function ds(d){const c=typeof window>"u"?null:window.localStorage.getItem("token");return{...c?{Authorization:`Bearer ${c}`}:{},...d??{}}}class l0{async get(c,u){const r=await fetch(rs(c,u?.params),{method:"GET",headers:ds(u?.headers)});return os(r,u?.responseType)}async post(c,u,r){const m=await fetch(rs(c,r?.params),{method:"POST",headers:{"Content-Type":"application/json",...ds(r?.headers)},body:u===void 0?void 0:JSON.stringify(u)});return os(m)}async put(c,u,r){const m=await fetch(rs(c,r?.params),{method:"PUT",headers:{"Content-Type":"application/json",...ds(r?.headers)},body:u===void 0?void 0:JSON.stringify(u)});return os(m)}async delete(c,u){const r=await fetch(rs(c,u?.params),{method:"DELETE",headers:ds(u?.headers)});return os(r)}}const He=new l0,z={backendApi:"https://api.arbejd.com/",backendApiV2:"https://api2.arbejd.com/api/"};class n0{http;constructor(c=He){this.http=c}login(c,u){let r=z.backendApi+"api/1.1.0/candidate/login",m={email:c,password:u};return this.http.post(r,m)}forgotPassword(c){let u=z.backendApi+"api/1.1.0/candidate/resetPassword/"+c.toLowerCase();return this.http.get(u)}}class Pa{constructor(c=He,u=ql){this.http=c,this.localStorageService=u}closeAccount(c){let u=z.backendApi+"api/1.1.0/candidate/"+c.toLowerCase();return this.http.delete(u)}accountRetention(c){let u=z.backendApi+"api/1.1.0/candidate/"+c+"/account-retention/";return this.http.get(u)}getCandidatesQualifications(){let c=z.backendApi+"api/1.1.0/candidate/skill/";return this.http.get(c)}getCandidatesCertifications(){let c=z.backendApi+"api/1.1.0/candidate/certificate/";return this.http.get(c)}getCandidatesLanguages(){let c=z.backendApi+"api/1.1.0/candidate/language/";return this.http.get(c)}getCandidatesDriverLicenses(){let c=z.backendApi+"api/1.1.0/candidate/driversLicense/";return this.http.get(c)}changePassword(c,u){let r=z.backendApi+"api/1.1.0/candidate/resetPassword",m={key:c,password:u};return this.http.post(r,m)}getCandidatesEducations(){let c=z.backendApiV2+"1.0.0/client/candidate_education";return this.http.get(c)}updateExperience(c,u){let r=z.backendApiV2+"1.0.0/client/candidate_experience/"+c.id,m={comments:c.comments,company_name:c.companyName,is_current:c.isCurrent,from_date:c.fromDate,to_date:c.toDate,language:u};return this.http.put(r,m)}createAccountV2(c){let u=z.backendApiV2+"1.0.0/client/candidate";return this.http.post(u,c)}updateCandidate(c,u){let r=z.backendApiV2+"1.0.0/client/candidate/v2/"+c.id,m={...c};c.birthday&&(c.birthday=new Date(c.birthday)),c.birthday instanceof Date&&(m.birthday=c.birthday.toISOString());let v={language:u,candidate:m};return this.http.put(r,v)}getCandidate(){let c=z.backendApiV2+"1.0.0/client/candidate";return this.http.get(c)}getCvSuggestion(){let c=z.backendApiV2+"1.0.0/client/suggestion";return this.http.get(c)}saveExperience(c,u){let r=z.backendApiV2+"1.0.0/client/candidate_experience",m={comments:c.comments,company_name:c.companyName,is_current:c.isCurrent,esco_id:c.occupation.id,from_date:c.fromDate,to_date:c.toDate,language:u};return this.http.post(r,m)}removeExperience(c){let u=z.backendApiV2+"1.0.0/client/candidate_experience/"+c;return this.http.delete(u)}getCandidatesExperiences(){let c=z.backendApiV2+"1.0.0/client/candidate_experience";return this.http.get(c)}getJobAgentFilters(){let c=z.backendApiV2+"1.0.0/client/job_agent_filter";return this.http.get(c)}updateJobAgentFilter(c){let u=z.backendApiV2+"1.0.0/client/job_agent_filter/"+c.id,r=c;return this.http.put(u,r)}removeJobAgentFilter(c){let u=z.backendApiV2+"1.0.0/client/job_agent_filter/"+c;return this.http.delete(u)}updateCandidateJobSeeker(c){let u=z.backendApiV2+"1.0.0/client/candidate/update_job_seeker/"+c.id;return this.http.put(u,c)}updateCvUploadProfileText(c,u,r){let m=z.backendApiV2+"1.0.0/client/candidate/update_cv_upload_profile/"+c,v={description:u,language:r};return this.http.put(m,v)}saveExperienceV2(c,u){let r=z.backendApiV2+"1.0.0/client/candidate_experience",m={comments:c.comments,company_name:c.companyName,is_current:c.isCurrent,esco_id:c.escoId,from_date:c.fromDate,to_date:c.toDate,language:u};return this.http.post(r,m)}updateProfileText(c){let u=z.backendApiV2+"1.0.0/client/candidate/update_profile_text";return this.http.put(u,c)}}function Gu(d,c){const u=d[c];return typeof u=="string"?u:null}class i0{authService;candidateService;constructor(c=new n0,u=new Pa){this.authService=c,this.candidateService=u}async login(c,u,r){const v=await this.authService.login(c,u)??{},U=Gu(v,"token");if(!U)return{ok:!1,message:"Login fejlede: token mangler i svaret fra serveren."};const Y={id:Gu(v,"id")??"",token:U,email:Gu(v,"email")??c,runOutDate:"forever"};return await ql.setAuthData(Y,r),{ok:!0,message:"Du er nu logget ind."}}async forgotPassword(c){return await this.authService.forgotPassword(c),{ok:!0,message:"Anmodning om nulstilling af kodeord er sendt."}}async register(c){const u=Number.parseInt(c.zip,10);if(Number.isNaN(u))return{ok:!1,message:"Postnummer skal være et tal."};const r={email:c.email,password:c.password,zip:u,zipName:c.zipName,awsUrl:"",latitude:0,longitude:0,firstName:c.firstName,lastName:c.lastName,subscribe:c.subscribe};return await this.candidateService.createAccountV2(r),{ok:!0,message:"Kontoen er oprettet."}}}class em{constructor(c=He){this.http=c}searchPlaces(c){const u=z.backendApiV2+"client/google_maps/1.0.0/get_places?query="+encodeURIComponent(c);return this.http.get(u)}getPlaceDetails(c){const u=z.backendApiV2+"client/google_maps/1.0.0/get_place_details?place_id="+encodeURIComponent(c);return this.http.get(u)}}function s0(d){const c=C.useMemo(()=>new i0,[]),u=C.useMemo(()=>new em,[]),[r,m]=C.useState(""),[v,U]=C.useState(!1),[Y,R]=C.useState(""),[b,V]=C.useState(""),[T,q]=C.useState(""),[Q,ee]=C.useState(""),[B,re]=C.useState(""),[oe,ge]=C.useState(""),[K,ne]=C.useState([]),[se,Z]=C.useState(null),[D,fe]=C.useState(""),[je,Se]=C.useState(!1),[H,J]=C.useState(null),[ae,P]=C.useState("login");function W(x){J(null),P(x)}async function k(x){const E=x.trim();if(E.length<3){ne([]);return}try{const ce=((await u.searchPlaces(E)).predictions??[]).filter(ie=>typeof ie.place_id=="string"&&typeof ie.description=="string").map(ie=>({description:ie.description,placeId:ie.place_id}));ne(ce)}catch{ne([])}}function _(x){const E=x.match(/\b(\d{4})\b/);if(!E)return null;const G=E[1],ie=x.slice(x.indexOf(G)+G.length).trim().split(",")[0]?.trim()||"";return ie?{cityName:ie,zip:G}:null}async function O(x,E){let G=E;try{const ie=await u.getPlaceDetails(x);typeof ie.result?.formatted_address=="string"&&ie.result.formatted_address.trim()&&(G=ie.result.formatted_address.trim())}catch{}const ce=_(G)??_(E);if(ge(G),ne([]),!ce){Z(null);return}Z({cityName:ce.cityName,description:G,zip:ce.zip})}async function I(x){x.preventDefault(),U(!0),J(null);try{const E=await c.login(Y.trim(),b,je);J(E),E.ok&&d?.()}catch(E){const G=E instanceof Error?E.message:"Login mislykkedes.";J({ok:!1,message:G})}finally{U(!1)}}async function ue(x){x.preventDefault(),U(!0),J(null);try{if(!se){J({ok:!1,message:"Vaelg en lokation fra listen (med postnummer)."});return}const E=await c.register({email:Q.trim(),firstName:T.trim(),lastName:B.trim(),password:D,subscribe:!0,zip:se.zip,zipName:se.cityName});J(E),E.ok&&P("login")}catch(E){const G=E instanceof Error?E.message:"Oprettelse mislykkedes.";J({ok:!1,message:G})}finally{U(!1)}}async function h(x){x.preventDefault(),U(!0),J(null);try{const E=await c.forgotPassword(r.trim());J(E)}catch(E){const G=E instanceof Error?E.message:"Kunne ikke sende nulstillingslink.";J({ok:!1,message:G})}finally{U(!1)}}return{forgotEmail:r,handleForgotSubmit:h,handleLoginSubmit:I,handleRegisterSubmit:ue,loading:v,loginEmail:Y,loginPassword:b,registerFirstName:T,registerEmail:Q,registerLastName:B,registerLocationQuery:oe,registerLocationSuggestions:K,registerPassword:D,rememberMe:je,result:H,setForgotEmail:m,setLoginEmail:R,setLoginPassword:V,setRegisterEmail:ee,setRegisterFirstName:q,setRegisterLastName:re,setRegisterLocationQuery:x=>{ge(x),Z(null),k(x)},setRegisterPassword:fe,setRememberMe:Se,selectRegisterLocation:O,switchView:W,view:ae}}function c0({onAuthenticated:d}){const{forgotEmail:c,handleForgotSubmit:u,handleLoginSubmit:r,handleRegisterSubmit:m,loading:v,loginEmail:U,loginPassword:Y,registerFirstName:R,registerEmail:b,registerLastName:V,registerLocationQuery:T,registerLocationSuggestions:q,registerPassword:Q,rememberMe:ee,result:B,setForgotEmail:re,setLoginEmail:oe,setLoginPassword:ge,setRegisterEmail:K,setRegisterFirstName:ne,setRegisterLastName:se,setRegisterLocationQuery:Z,setRegisterPassword:D,setRememberMe:fe,selectRegisterLocation:je,switchView:Se,view:H}=s0(d);return n.jsxs("main",{className:"auth-page",children:[n.jsx("div",{className:"orb orb-1"}),n.jsx("div",{className:"orb orb-2"}),n.jsx("div",{className:"orb orb-3"}),n.jsxs("div",{className:"auth-logo-wrap",children:[n.jsx("div",{className:"auth-logo-dot",children:"A"}),n.jsx("span",{className:"auth-logo-text",children:"ARBEJD"})]}),n.jsxs("section",{className:"auth-card",children:[H==="login"?n.jsx(t0,{email:U,loading:v,onChangeEmail:oe,onChangePassword:ge,onChangeRememberMe:fe,onForgotPassword:()=>Se("forgot"),onRegister:()=>Se("register"),onSubmit:r,password:Y,rememberMe:ee}):null,H==="register"?n.jsx(a0,{email:b,firstName:R,lastName:V,loading:v,locationQuery:T,locationSuggestions:q,onBackToLogin:()=>Se("login"),onChangeEmail:K,onChangeFirstName:ne,onChangeLastName:se,onChangeLocationQuery:Z,onChangePassword:D,onSelectLocation:je,onSubmit:m,password:Q}):null,H==="forgot"?n.jsx(e0,{email:c,loading:v,onBackToLogin:()=>Se("login"),onChangeEmail:re,onSubmit:u}):null,B?n.jsx("p",{className:B.ok?"status success":"status error",children:B.message}):null]},H)]})}class tm{constructor(c=He){this.http=c}listEscoByParent(c){let u=z.backendApiV2+"1.0.0/client/esco";return c&&(u+="/"+c),this.http.get(u)}listAllEscos(){let c=z.backendApiV2+"1.0.0/client/esco";return this.http.get(c)}}class u0{constructor(c=He){this.http=c}addEscoToJobAgent(c){let u=z.backendApiV2+"1.0.0/client/job_agent_filter",r={esco_id:c};return this.http.post(u,r)}removeJobAgentFilter(c){let u=z.backendApiV2+"1.0.0/client/job_agent_filter/"+c;return this.http.delete(u)}}class ys{constructor(c=He){this.http=c}getPaymentOverview(){let c=z.backendApiV2+"client/end_user_subscription/1.0.0/payment_overview";return this.http.get(c)}getSubscriptionProducts(){let c=z.backendApiV2+"client/end_user_subscription/1.0.0/get_products";return this.http.get(c)}deactivateAutoRenew(){let c=z.backendApiV2+"client/end_user_subscription/1.0.0/deactivate_auto_renew";return this.http.put(c,{})}activateAutoRenew(){let c=z.backendApiV2+"client/end_user_subscription/1.0.0/activate_auto_renew";return this.http.put(c,{})}redeemCode(c){let u=z.backendApiV2+"client/candidate_redeem_code/v1";return this.http.post(u,{code:c})}}class am{constructor(c=new Pa,u=new ys,r=new u0,m=new tm){this.candidateService=c,this.subscriptionService=u,this.jobAgentService=r,this.escoService=m}async loadInitialData(){const[c,u,r,m]=await Promise.allSettled([this.subscriptionService.getPaymentOverview(),this.candidateService.getJobAgentFilters(),this.candidateService.getCvSuggestion(),this.escoService.listAllEscos()]);return{paymentOverview:c.status==="fulfilled"?c.value:null,jobAgentFilters:u.status==="fulfilled"?u.value:[],cvSuggestions:r.status==="fulfilled"?this.withImprovements(r.value):[],escos:m.status==="fulfilled"?m.value:[]}}async getCandidateProfile(){try{const c=await this.candidateService.getCandidate(),u=c.firstName?.trim()||c.name?.trim()||"Lasse",r=c.imageUrl||c.image||void 0;return{name:u,imageUrl:r}}catch{return{name:"Lasse"}}}async addEscoToFilter(c){await this.jobAgentService.addEscoToJobAgent(c)}async removeFilter(c){await this.jobAgentService.removeJobAgentFilter(c)}async setFilterVisibility(c,u){await this.candidateService.updateJobAgentFilter({...c,visible:u})}getEscoSuggestions(c,u,r){const m=c.trim().toLowerCase();if(!m)return[];const v=new Set(r.map(U=>U.escoId));return u.filter(U=>!v.has(U.id)).filter(U=>U.preferedLabelDa.toLowerCase().includes(m)).slice(0,10)}getSuggestionText(c){return c>=0&&c<50?"Et godt første skridt mod flere relevante job.":c>=50&&c<100?"Kan styrke dine chancer i ansøgningsbunken.":c>=100&&c<150?"Ofte efterspurgt og forbedrer dine jobmuligheder markant.":c>=150&&c<200?"Et klart plus som gør dig mere attraktiv for arbejdsgivere.":c>=200?"En afgørende faktor der åbner langt flere jobmuligheder.":"Forbedrer din profil til kommende jobmatch."}withImprovements(c){return c.map(u=>{const r=[],m=[{items:u.jobImprovementSuggestion.educations??[],type:"education"},{items:u.jobImprovementSuggestion.languages??[],type:"language"},{items:u.jobImprovementSuggestion.driversLicenses??[],type:"driversLicense"},{items:u.jobImprovementSuggestion.qualifications??[],type:"qualification"},{items:u.jobImprovementSuggestion.certificates??[],type:"certificate"}];for(const v of m)for(const U of v.items)r.push({...U,improvementType:v.type});return r.sort((v,U)=>U.jobChanceIncrease-v.jobChanceIncrease),{...u,improvements:r}})}}class r0{constructor(c=He){this.http=c}saveJobFilter(c){let u=z.backendApiV2+"1.0.0/client/candidate_search_filter";return this.http.post(u,c)}getJobFilter(){let c=z.backendApiV2+"1.0.0/client/candidate_search_filter";return this.http.get(c)}resetJobFilter(){let c=z.backendApiV2+"1.0.0/client/candidate_search_filter/reset_job_filter";return this.http.put(c,{})}}class cr{http;constructor(c=He){this.http=c}getSearchWords(){let c=z.backendApiV2+"1.0.0/client/candidate_search/list_search_words";return this.http.get(c)}getJobs(c,u,r){let m=z.backendApi+"api/1.1.0/jobs/all/"+u+"/"+r;return this.http.post(m,c)}getJobsV2(c,u,r,m){let v=z.backendApiV2+"1.0.0/client/candidate_search/v2/"+c+"/"+u+"/"+r,U=new Ia;return m.length>0&&m.forEach(Y=>{U=U.append("terms",Y)}),this.http.get(v,{params:U})}getSavedJobs(c,u){let r=z.backendApi+"api/1.1.0/candidate/jobs/saved";return this.http.get(r)}getSavedJobsV2(c,u){let r=z.backendApiV2+"1.0.0/client/job/bookmarked_jobs/"+c+"/"+u;return this.http.get(r)}getAppliedJobs(c,u){let r=z.backendApi+"api/1.1.0/applications/candidate/";return this.http.get(r)}getAppliedJobsV2(c,u){let r=z.backendApiV2+"1.0.0/client/job/applied_jobs/"+c+"/"+u;return this.http.get(r)}payWithStripe(c,u){const r=z.backendApiV2+"1.0.0/client/payment/create-payment-intent",m={paymentMethodId:c,amount:u};return this.http.post(r,m)}bookmarkJob(c){let u=z.backendApi+"api/1.1.0/candidate/jobs/"+c+"/jobnet/updateSavedStatus",r={saved:!0};return this.http.post(u,r)}unbookmarkJob(c){let u=z.backendApi+"api/1.1.0/candidate/jobs/"+c+"/jobnet/updateSavedStatus",r={saved:!1};return this.http.post(u,r)}bookmarkJobV2(c,u,r){let m=z.backendApiV2+"1.0.0/client/job/bookmark/"+c,v={job_type:r,save:u};return this.http.post(m,v)}getJobNetJobDetail(c){let u=z.backendApiV2+"1.0.0/client/job/detail/star/"+c;return this.http.get(u)}getJobDetail(c){let u=z.backendApi+"api/1.1.0/jobs/"+c;return this.http.get(u)}getOccupationCategorizations(){let c=z.backendApiV2+"1.0.0/client/ds_tree";return this.http.get(c)}getJobSummary(c){let u=z.backendApi+"api/1.1.0/jobs/"+c+"/summary";return this.http.get(u)}applyJob(c){let u=z.backendApi+"api/1.1.0/applications/job/"+c,r={jobPostingId:c};return this.http.post(u,r)}undoApplyJob(c){let u=z.backendApi+"api/1.1.0/applications/"+c;return this.http.delete(u)}toggleApplyJobnetjob(c,u){let r=z.backendApiV2+"1.0.0/client/job/detail/star/apply/"+c,m={apply:u};return this.http.put(r,m)}}const Qu={escoIds:[],workTypePermanent:!1,workTypePartTime:!1,workDistance:50,partTimeHours:null,distanceCenterName:"",latitude:null,longitude:null};function Xe(d){return typeof d=="string"?d:""}function qn(d){return typeof d=="object"&&d!==null?d:null}function Xu(d,c){if(!d)return[];const u=d[c];return Array.isArray(u)?u:[]}function Zu(d){if(Array.isArray(d))return d;const c=qn(d);if(!c)return[];const u=Xu(c,"searchList");if(u.length>0)return u;const r=qn(c.data),m=Xu(r,"searchList");if(m.length>0)return m;const v=Xu(c,"items");return v.length>0?v:[]}function Ah(d,c){if(!d)return null;const u=d[c];return typeof u=="number"?u:null}function o0(d){return d.trim()}function d0(d){if(!d)return[];const c=new Set,u=d.searchText?.trim();u&&u.length>0&&c.add(u);for(const r of d.desiredTitles??[]){const m=o0(r);m.length>0&&c.add(m)}return Array.from(c)}function f0(d,c){return{id:Xe(d.id),title:Xe(d.title),companyName:Xe(d.companyName),occupationName:Xe(d.occupationName),descriptionIntro:Xe(d.descriptionIntro),address:Xe(d.address),time:Xe(d.time),applicationDeadline:d.applicationDeadline instanceof Date?d.applicationDeadline.toISOString():Xe(String(d.applicationDeadline??"")),candidateDistance:typeof d.candidateDistance=="number"?d.candidateDistance:null,logoUrl:Xe(d.logoUrl),companyLogoImage:Xe(d.companyLogoImage),fromJobnet:!!d.fromJobnet,isSaved:!!d.saved,matchPercent:c}}function _h(d){return{id:Xe(d.id),title:Xe(d.title),companyName:Xe(d.companyName),occupationName:Xe(d.occupationName),descriptionIntro:Xe(d.descriptionIntro),address:Xe(d.address),time:Xe(d.time),applicationDeadline:d.applicationDeadline instanceof Date?d.applicationDeadline.toISOString():Xe(String(d.applicationDeadline??"")),candidateDistance:typeof d.candidateDistance=="number"?d.candidateDistance:null,logoUrl:Xe(d.logoUrl),companyLogoImage:Xe(d.companyLogoImage),isActive:typeof d.isActive=="boolean"?d.isActive:void 0,fromJobnet:!!d.fromJobnet,isSaved:!0}}class bs{constructor(c=new cr,u=new r0,r=new em,m=new Pa){this.jobService=c,this.filterService=u,this.placesService=r,this.candidateService=m}async getCandidateProfile(){try{const c=await this.candidateService.getCandidate(),u=c.firstName?.trim()||c.name?.trim()||"Lasse",r=c.imageUrl||c.image||void 0;return{name:u,imageUrl:r}}catch{return{name:"Lasse"}}}async getOccupationOptions(){const c=await this.jobService.getOccupationCategorizations(),u=[];for(const r of c)for(const m of r.subAreas)for(const v of m.occupations)typeof v.id=="number"&&typeof v.name=="string"&&v.name.trim().length>0&&u.push({id:v.id,name:v.name});return u.sort((r,m)=>r.name.localeCompare(m.name,"da"))}async getJobSearchWords(){return(await this.jobService.getSearchWords()).filter(u=>typeof u=="string"&&u.trim().length>0)}async getSavedFilter(){try{const c=await this.filterService.getJobFilter(),u=c?.candidateSearchFilter;return u?{escoIds:c.escoIds??[],workTypePermanent:!!u.workTypePermanent,workTypePartTime:!!u.workTypePartTime,workDistance:u.workDistance??u.defaultDistance??50,partTimeHours:u.partTimeHours??null,distanceCenterName:u.distanceCenterName??u.defaultCenterName??"",latitude:u.latitude??null,longitude:u.longitude??null}:{...Qu}}catch{return{...Qu}}}async saveFilter(c){const u=c.workTypePartTime&&c.partTimeHours&&c.partTimeHours>0&&c.partTimeHours<=37?c.partTimeHours:null,r={escoIds:c.escoIds,candidateSearchFilter:{workTimeDay:!1,workTimeEvening:!1,workTimeNight:!1,workTimeWeekend:!1,workTypePermanent:c.workTypePermanent,workTypeFreelance:!1,workTypePartTime:c.workTypePartTime,workTypeSubstitute:!1,workTypeTemporary:!1,workDistance:c.workDistance,partTimeHours:u,distanceCenterName:c.distanceCenterName,latitude:c.latitude,longitude:c.longitude}};await this.filterService.saveJobFilter(r)}async resetFilter(){return await this.filterService.resetJobFilter(),{...Qu}}async searchPlaceSuggestions(c){const u=c.trim();return u.length<3?[]:((await this.placesService.searchPlaces(u)).predictions??[]).filter(m=>typeof m.place_id=="string"&&typeof m.description=="string").map(m=>({placeId:m.place_id,description:m.description}))}async getPlaceSelection(c){const r=(await this.placesService.getPlaceDetails(c)).result;return!r||typeof r.formatted_address!="string"?null:{description:r.formatted_address,latitude:typeof r.geometry?.location?.lat=="number"?r.geometry.location.lat:null,longitude:typeof r.geometry?.location?.lng=="number"?r.geometry.location.lng:null}}async getTabItems(c,u){if(c==="gemte"){const r=await this.jobService.getSavedJobsV2(0,100);return Zu(r).map(v=>_h(v))}if(c==="sogte"){const r=await this.jobService.getAppliedJobsV2(0,100);return Zu(r).map(v=>_h(v))}return this.getJobsFeedItems(u?[u]:void 0)}async applyFiltersAndGetJobs(c,u){await this.saveFilter(c);const r=d0(u);return this.getJobsFeedItems(r)}async toggleBookmark(c,u){const r=c.fromJobnet?"star":"arbejd.com";await this.jobService.bookmarkJobV2(c.id,u,r)}async getJobsFeedItems(c){let r=10,m=0;const v=12,U=120,Y=new Set,R=[];let b=[];const V=(c??[]).map(T=>T.trim()).filter(T=>T.length>0);if(V.length>0)b=V;else try{b=(await this.jobService.getSearchWords()).filter(q=>typeof q=="string"&&q.trim().length>0)}catch{b=[]}for(let T=0;T{const r=u.icon,m=u.key===d;return n.jsxs("button",{type:"button",className:m?"dash-nav-item active":"dash-nav-item",onClick:()=>c?.(u.key),children:[n.jsx("span",{className:u.accent?"dash-nav-icon accent":"dash-nav-icon",children:n.jsx(r,{size:19,strokeWidth:1.7})}),n.jsx("span",{className:"dash-nav-label",children:u.label}),u.badge?n.jsx("span",{className:"dash-nav-badge",children:u.badge}):null]},u.key)}),n.jsx("div",{className:"dash-nav-divider"}),m0.map(u=>{const r=u.icon,m=u.key===d;return n.jsxs("button",{type:"button",className:m?"dash-nav-item active":"dash-nav-item",onClick:()=>c?.(u.key),children:[n.jsx("span",{className:u.accent?"dash-nav-icon accent":"dash-nav-icon",children:n.jsx(r,{size:19,strokeWidth:1.7})}),n.jsx("span",{className:"dash-nav-label",children:u.label}),u.dot?n.jsx("span",{className:"dash-nav-dot"}):null]},u.key)})]}),n.jsxs("div",{className:"dash-sidebar-pro",children:[n.jsx("div",{className:"dash-sidebar-pro-glow"}),n.jsx(Gn,{size:19,strokeWidth:1.8}),n.jsx("h4",{children:"Pro-medlemskab"}),n.jsx("p",{children:"Faa ubegrænsede simuleringer"})]})]})}function sa({actions:d,imageUrl:c,name:u,onLogout:r,onToggleTheme:m,theme:v="light"}){return n.jsxs("header",{className:"dash-topbar",children:[m?n.jsxs("button",{type:"button",className:"dash-theme-btn",onClick:m,children:[v==="dark"?n.jsx(Jv,{size:15,strokeWidth:1.8}):n.jsx(rv,{size:15,strokeWidth:1.8}),n.jsx("span",{children:v==="dark"?"Light":"Dark"})]}):null,d?n.jsx("div",{className:"dash-topbar-actions",children:d}):null,n.jsxs("div",{className:"dash-profile-wrap",children:[n.jsxs("button",{className:"dash-profile-btn",type:"button",children:[c?n.jsx("img",{src:c,alt:u,className:"dash-profile-avatar"}):n.jsx("div",{className:"dash-profile-avatar dash-profile-avatar-fallback",children:u.slice(0,1).toUpperCase()}),n.jsx("span",{children:u}),n.jsx(Hn,{size:15,strokeWidth:1.8})]}),n.jsxs("div",{className:"dash-profile-menu",children:[n.jsxs("button",{type:"button",children:[n.jsx(Ap,{size:16,strokeWidth:1.8})," Profil"]}),n.jsxs("button",{type:"button",children:[n.jsx($h,{size:16,strokeWidth:1.8})," Indstillinger"]}),n.jsx("div",{className:"dash-profile-divider"}),n.jsxs("button",{type:"button",className:"danger",onClick:r,children:[n.jsx(ev,{size:16,strokeWidth:1.8})," Log ud"]})]})]})]})}const g0={paymentOverview:null,jobAgentFilters:[],cvSuggestions:[],escos:[]};function p0(d){return d.trim().slice(0,1).toUpperCase()||"A"}function v0(d){return Math.max(68,98-d*4)}function y0(d,c){const u=c.trim().toLowerCase();return u?d.filter(r=>r.preferedLabelDa.toLowerCase().includes(u)).slice(0,8):[]}function b0({onLogout:d,onNavigate:c,onOpenJobDetail:u,onToggleTheme:r,theme:m}){const v=C.useMemo(()=>new am,[]),U=C.useMemo(()=>new bs,[]),[Y,R]=C.useState("Lasse"),[b,V]=C.useState(void 0),[T,q]=C.useState(g0),[Q,ee]=C.useState([]),[B,re]=C.useState(!0),[oe,ge]=C.useState(""),[K,ne]=C.useState(""),[se,Z]=C.useState(""),[D,fe]=C.useState(""),[je,Se]=C.useState(""),[H,J]=C.useState(25);C.useEffect(()=>{let O=!0;async function I(){re(!0);const[ue,h,x]=await Promise.all([v.getCandidateProfile(),v.loadInitialData(),U.getTabItems("jobs")]);O&&(R(ue.name),V(ue.imageUrl),q(h),ee(x),re(!1))}return I(),()=>{O=!1}},[v,U]);async function ae(){const O=await v.loadInitialData();q(O)}async function P(){const O=K.trim()||oe.trim()||se.trim(),I=v.getEscoSuggestions(O,T.escos,T.jobAgentFilters)[0]||y0(T.escos,O)[0];I&&(await v.addEscoToFilter(I.id),await ae(),ge(""),ne(""),Z(""),fe(""),Se(""),J(25))}async function W(O){await v.setFilterVisibility(O,!O.visible),await ae()}const k=T.jobAgentFilters,_=(Q.length>0?Q:[]).slice(0,6);return n.jsxs("section",{className:`dash-root ${m==="dark"?"theme-dark":""}`,children:[n.jsx("div",{className:"dash-orb dash-orb-1"}),n.jsx("div",{className:"dash-orb dash-orb-2"}),n.jsx("div",{className:"dash-orb dash-orb-3"}),n.jsx(ia,{active:"agents",onNavigate:c}),n.jsxs("main",{className:"dash-main custom-scrollbar ai-agent-main",children:[n.jsx(sa,{name:Y,imageUrl:b,onLogout:d,theme:m,onToggleTheme:r}),n.jsxs("div",{className:"ai-head",children:[n.jsx("h1",{children:"Jobagenter"}),n.jsx("p",{children:"Saet din jobsogning pa autopilot. Lad agenter overvage og matche dig med de perfekte jobs."})]}),n.jsxs("section",{className:"ai-create-card",children:[n.jsxs("div",{className:"ai-create-title",children:[n.jsx("div",{className:"ai-create-icon",children:n.jsx(Jh,{size:20,strokeWidth:1.8})}),n.jsx("h2",{children:"Opret ny jobagent"})]}),n.jsxs("div",{className:"ai-form-grid",children:[n.jsxs("div",{className:"ai-field",children:[n.jsx("label",{children:"Agentens navn"}),n.jsx("input",{value:oe,onChange:O=>ge(O.target.value),placeholder:"F.eks. Frontend Udvikler CPH"})]}),n.jsxs("div",{className:"ai-field",children:[n.jsx("label",{children:"Sogetekst / Nogleord"}),n.jsx("input",{value:K,onChange:O=>ne(O.target.value),placeholder:"F.eks. React, TypeScript, Tailwind"})]}),n.jsxs("div",{className:"ai-field",children:[n.jsx("label",{children:"Arbejdsomrade"}),n.jsxs("select",{value:se,onChange:O=>Z(O.target.value),children:[n.jsx("option",{value:"",children:"Vaelg branche"}),n.jsx("option",{value:"IT & Udvikling",children:"IT & Udvikling"}),n.jsx("option",{value:"Design & UX",children:"Design & UX"}),n.jsx("option",{value:"Salg & Marketing",children:"Salg & Marketing"}),n.jsx("option",{value:"HR & Ledelse",children:"HR & Ledelse"})]})]}),n.jsxs("div",{className:"ai-field",children:[n.jsx("label",{children:"Arbejdstype"}),n.jsxs("select",{value:D,onChange:O=>fe(O.target.value),children:[n.jsx("option",{value:"",children:"Vaelg type"}),n.jsx("option",{value:"Fuldtid",children:"Fuldtid"}),n.jsx("option",{value:"Deltid",children:"Deltid"}),n.jsx("option",{value:"Freelance",children:"Freelance / Konsulent"}),n.jsx("option",{value:"Studiejob",children:"Studiejob"})]})]}),n.jsxs("div",{className:"ai-field",children:[n.jsx("label",{children:"Arbejdssted"}),n.jsxs("div",{className:"ai-location-wrap",children:[n.jsx(Yn,{size:16,strokeWidth:1.8}),n.jsx("input",{value:je,onChange:O=>Se(O.target.value),placeholder:"By eller postnummer"})]})]}),n.jsxs("div",{className:"ai-field ai-distance-field",children:[n.jsxs("div",{className:"ai-distance-head",children:[n.jsx("label",{children:"Maks. distance"}),n.jsxs("span",{children:[H," km"]})]}),n.jsx("input",{type:"range",min:0,max:100,value:H,onChange:O=>J(Number(O.target.value))})]})]}),n.jsx("div",{className:"ai-create-actions",children:n.jsxs("button",{type:"button",onClick:()=>{P()},children:[n.jsx(Mv,{size:16,strokeWidth:1.8})," Gem jobagent"]})})]}),n.jsxs("section",{className:"ai-agents-section",children:[n.jsx("h3",{children:"Dine aktive agenter"}),n.jsxs("div",{className:"ai-agents-row custom-scrollbar",children:[k.length===0?n.jsx("p",{className:"dash-loading",children:"Ingen aktive agenter endnu."}):null,k.map((O,I)=>n.jsxs("article",{className:"ai-agent-chip-card",children:[n.jsxs("div",{className:"ai-agent-card-head",children:[n.jsxs("div",{className:"ai-agent-chip-left",children:[n.jsx("div",{className:`ai-agent-mini-icon ${I%2===0?"teal":"indigo"}`,children:I%2===0?n.jsx(cv,{size:16,strokeWidth:1.8}):n.jsx(Ih,{size:16,strokeWidth:1.8})}),n.jsxs("div",{children:[n.jsx("h4",{children:O.escoName}),n.jsx("p",{children:O.isCalculated?"Aktiv siden i går":"Aktiv"})]})]}),n.jsx("button",{type:"button",className:O.visible?"ai-toggle on":"ai-toggle",onClick:()=>{W(O)},children:n.jsx("span",{})})]}),n.jsxs("div",{className:"ai-tags",children:[n.jsx("span",{children:O.escoName}),n.jsx("span",{children:je||"København"}),n.jsxs("span",{children:[H," km"]})]})]},O.id))]})]}),n.jsxs("section",{className:"ai-jobs-section",children:[n.jsxs("div",{className:"ai-jobs-head",children:[n.jsxs("h3",{children:[n.jsx(Gn,{size:16,strokeWidth:1.8})," Anbefalede jobs til dig"]}),n.jsx("span",{children:"Opdateret for 5 min siden"})]}),n.jsxs("div",{className:"ai-jobs-grid",children:[B?n.jsx("p",{className:"dash-loading",children:"Indlaeser anbefalinger..."}):null,!B&&_.length===0?n.jsx("p",{className:"dash-loading",children:"Ingen jobanbefalinger fundet endnu."}):null,_.map((O,I)=>n.jsxs("article",{className:"ai-job-card",role:"button",tabIndex:0,onClick:()=>u(O.id,O.fromJobnet,"agents"),onKeyDown:ue=>{(ue.key==="Enter"||ue.key===" ")&&(ue.preventDefault(),u(O.id,O.fromJobnet,"agents"))},children:[n.jsx("div",{className:`ai-job-rail ${I%3===2?"indigo":"teal"}`}),n.jsxs("div",{className:"ai-job-top",children:[O.companyLogoImage||O.logoUrl?n.jsx("img",{src:O.companyLogoImage||O.logoUrl,alt:O.companyName,className:"ai-company-logo"}):n.jsx("div",{className:"ai-company-logo-fallback",children:p0(O.companyName)}),n.jsxs("div",{className:"ai-match-col",children:[n.jsxs("div",{className:"ai-match-pill",children:[n.jsx(vs,{size:13,strokeWidth:1.8})," ",v0(I),"% Match"]}),n.jsxs("small",{children:["Via: ",k[0]?.escoName||"Jobagent"]})]})]}),n.jsxs("div",{className:"ai-job-title-wrap",children:[n.jsx("h4",{children:O.title}),n.jsxs("p",{children:[O.companyName," • ",O.address||"Lokation"]})]}),n.jsxs("div",{className:"ai-job-tags",children:[n.jsx("span",{children:O.occupationName||"Frontend"}),n.jsx("span",{children:O.fromJobnet?"Jobnet":"Arbejd.com"}),n.jsx("span",{children:O.candidateDistance!=null?`${Math.round(O.candidateDistance)} km`:"Remote"})]}),n.jsxs("div",{className:"ai-job-bottom",children:[n.jsx("span",{children:"Slået op for nyligt"}),n.jsxs("button",{type:"button",onClick:ue=>{ue.stopPropagation(),u(O.id,O.fromJobnet,"agents")},children:["Læs mere ",n.jsx($a,{size:14,strokeWidth:1.8})]})]})]},O.id))]})]})]})]})}const j0={paymentOverview:null,jobAgentFilters:[],cvSuggestions:[],escos:[]};function Th(){return["Diamantskærer","Ministerialbetjent","Kiropraktor","System Developer","Senior Software Developer","Founder and Developer","Senior .Net Developer","Freelance Programmer","Støberichef","Softwareudvikler, frontend","CSR-ansvarlig","Lagerchef inden for råstof","Ios developer","Kokkeelev","IT-kvalitetsmedarbejder","Efterretningsofficer"]}function x0(d){return d>=70?{text:"Kan styrke dine chancer i ansøgningsbunken",kind:"strong"}:d>=40?{text:"Ofte efterspurgt – forbedrer dine jobmuligheder markant",kind:"neutral"}:{text:"Et godt første skridt mod flere relevante job",kind:"soft"}}function S0(d){return d==="education"?Xh:d==="language"?gs:d==="driversLicense"?Gh:d==="certificate"?Yh:d==="qualification"?vs:Ph}function N0(d){return d==="education"?"blue":d==="language"?"emerald":d==="driversLicense"?"orange":d==="certificate"?"rose":d==="qualification"?"indigo":"slate"}function k0({onLogout:d,onNavigate:c,onToggleTheme:u,theme:r}){const m=C.useMemo(()=>new am,[]),[v,U]=C.useState("Lasse"),[Y,R]=C.useState(void 0),[b,V]=C.useState(j0),[T,q]=C.useState(!0),[Q,ee]=C.useState("");C.useEffect(()=>{let K=!0;async function ne(){q(!0);const[se,Z]=await Promise.all([m.getCandidateProfile(),m.loadInitialData()]);if(!K)return;U(se.name),R(se.imageUrl),V(Z);const D=Z.jobAgentFilters[0]?.escoName||Th()[1];ee(fe=>fe||D),q(!1)}return ne(),()=>{K=!1}},[m]);const B=b.jobAgentFilters.length>0?b.jobAgentFilters.map(K=>K.escoName):Th(),re=b.jobAgentFilters.find(K=>K.escoName===Q)||b.jobAgentFilters[0],oe=(re?b.cvSuggestions.find(K=>K.escoId===re.escoId)?.improvements:b.cvSuggestions[0]?.improvements)||[],ge=oe.length>0?oe:[{name:"Grundkursus i sikkerhed og beredskab",jobChanceIncrease:78,improvementType:"education"},{name:"Service og kommunikation i offentlige institutioner",jobChanceIncrease:52,improvementType:"qualification"},{name:"Dansk (Flydende)",jobChanceIncrease:65,improvementType:"language"},{name:"B - Almindelig bil",jobChanceIncrease:34,improvementType:"driversLicense"},{name:"Konflikthåndtering",jobChanceIncrease:72,improvementType:"qualification"},{name:"Førstehjælpsbevis",jobChanceIncrease:44,improvementType:"certificate"},{name:"Sikkerhedsgodkendelse (PET)",jobChanceIncrease:81,improvementType:"certificate"}];return n.jsxs("section",{className:`dash-root ${r==="dark"?"theme-dark":""}`,children:[n.jsx("div",{className:"dash-orb dash-orb-1"}),n.jsx("div",{className:"dash-orb dash-orb-2"}),n.jsx("div",{className:"dash-orb dash-orb-3"}),n.jsx(ia,{active:"ai-agent",onNavigate:c}),n.jsxs("main",{className:"dash-main custom-scrollbar career-main",children:[n.jsx(sa,{name:v,imageUrl:Y,onLogout:d,theme:r,onToggleTheme:u,actions:n.jsxs("div",{className:"career-status-pill",children:[n.jsx(tt,{size:15,strokeWidth:1.8}),"CV analyseret"]})}),n.jsxs("div",{className:"career-head",children:[n.jsxs("div",{className:"career-head-title-row",children:[n.jsx("div",{className:"career-head-icon",children:n.jsx(Iv,{size:19,strokeWidth:1.8})}),n.jsx("h1",{children:"Karriereagent"})]}),n.jsx("p",{className:"career-head-kicker",children:"Din Karriereagent Foreslår"}),n.jsx("p",{className:"career-head-desc",children:"Boost din profil ved hjælp af kunstig intelligens. Forslagene er udvalgt til din profil ud fra analyser af over 100.000+ jobopslag og dit nuværende CV."})]}),n.jsxs("div",{className:"career-grid",children:[n.jsxs("aside",{className:"career-agents-col",children:[n.jsxs("div",{className:"career-agents-head",children:[n.jsx("h2",{children:"Mine agenter"}),n.jsxs("button",{type:"button",children:[n.jsx(xp,{size:16,strokeWidth:1.8})," Tilføj ny agent"]})]}),n.jsx("div",{className:"career-agents-list custom-scrollbar",children:B.map(K=>n.jsxs("button",{type:"button",className:Q===K?"active":"",onClick:()=>ee(K),children:[n.jsx("span",{children:K}),Q===K?n.jsx("i",{}):null]},K))})]}),n.jsxs("section",{className:"career-reco-col",children:[n.jsxs("div",{className:"career-reco-head",children:[n.jsxs("h2",{children:["Viser anbefalinger for",n.jsx("span",{children:Q||"Ministerialbetjent"})]}),n.jsxs("button",{type:"button",children:[n.jsx(Qh,{size:14,strokeWidth:1.8})," Filtrer"]})]}),T?n.jsx("p",{className:"dash-loading",children:"Indlaeser anbefalinger..."}):null,n.jsx("div",{className:"career-cards custom-scrollbar",children:ge.map((K,ne)=>{const se=S0(K.improvementType||"qualification"),Z=x0(K.jobChanceIncrease||0),D=N0(K.improvementType||"qualification");return n.jsxs("article",{className:"career-card",children:[n.jsx("div",{className:"career-card-glow"}),n.jsx("div",{className:"career-card-wand",children:n.jsx(Gn,{size:16,strokeWidth:1.8})}),n.jsxs("div",{className:"career-card-content",children:[n.jsx("div",{className:`career-card-icon ${D}`,children:n.jsx(se,{size:18,strokeWidth:1.8})}),n.jsx("h3",{children:K.shortName||K.name}),n.jsxs("p",{className:`tone ${Z.kind}`,children:[Z.kind==="strong"?n.jsx(Xv,{size:13,strokeWidth:1.8}):Z.kind==="neutral"?n.jsx(vs,{size:13,strokeWidth:1.8}):n.jsx(Lv,{size:13,strokeWidth:1.8}),Z.text]})]})]},`${K.name}-${ne}`)})})]})]})]})]})}class A0{constructor(c=He){this.http=c}generateApplication(c,u,r,m){let v=z.backendApiV2+"1.0.0/client/ai_handler/create_my_application",U={isStar:c,jobId:u,language:r,userInput:m};return this.http.post(v,U)}listGeneratedJobApplications(c){let u=z.backendApiV2+"1.0.0/client/ai_handler/list_created_job_application/"+c;return this.http.get(u)}listPredefinedUserInput(){let c=z.backendApiV2+"1.0.0/client/ai_handler/list_predefined_user_input";return this.http.get(c)}getJobApplication(c){let u=z.backendApiV2+"1.0.0/client/ai_handler/"+c;return this.http.get(u)}updateMyCvDescriptions(c){let u=z.backendApiV2+"1.0.0/client/ai_handler/update_my_cv_descriptions",r={language:c};return this.http.post(u,r)}updateStatesOnMyCvDescription(c,u,r){let m=z.backendApiV2+"1.0.0/client/ai_handler/update_states_on_my_cv_descriptions/"+c,v={state:u,subState:r};return this.http.put(m,v)}getMyCvDescriptions(){let c=z.backendApiV2+"1.0.0/client/ai_handler/get_my_cv_descriptions";return this.http.get(c)}submitJobApplicationRating(c,u,r){let m=z.backendApiV2+"1.0.0/client/ai_handler/job_application_rating",v={ai_generated_job_application_id:c,rating:u,rating_text:r};return this.http.post(m,v)}startApplicationExamination(c){const u=z.backendApiV2+"1.0.0/client/ai_handler/create_application_examination",r={ai_generated_job_application_id:c};return this.http.post(u,r)}getApplicationExamination(c){const u=z.backendApiV2+"1.0.0/client/ai_handler/application_examination/"+encodeURIComponent(c);return this.http.get(u)}getApplicationExaminationByJobApplicationId(c){const u=z.backendApiV2+"1.0.0/client/ai_handler/application_examination_by_job_application/"+c;return this.http.get(u)}}class _0{constructor(c=He){this.http=c}searchForCertification(c){let u=encodeURIComponent(c),r=z.backendApiV2+`1.0.0/client/certificate?search_text=${u}`;return this.http.get(r)}saveCertification(c){let u=z.backendApiV2+"1.0.0/client/candidate_certificate",r={qualification_id:c};return this.http.post(u,r)}updateCertification(c){let u=z.backendApiV2+"1.0.0/client/candidate_certificate/"+c.id,r=c;return this.http.put(u,r)}removeCertification(c){let u=z.backendApiV2+"1.0.0/client/candidate_certificate/"+c;return this.http.delete(u)}addUnknownCertificate(c){let u=z.backendApiV2+"1.0.0/client/certificate",r={certificate_name:c};return this.http.post(u,r)}}class T0{constructor(c=He){this.http=c}sendMyCvToEmail(){let c=z.backendApi+"api/1.1.0/candidate/sendPdf",u={};return this.http.post(c,u)}getMyCv(){let c=z.backendApiV2+"1.0.0/client/candidate/pdf";return this.http.get(c,{responseType:"blob"})}getMyCvV2(c){let u=z.backendApiV2+"1.0.0/client/candidate/pdf_url?language="+c;return this.http.get(u)}generateCv(c){let u=z.backendApiV2+"1.0.0/client/candidate/generateCv",r={language:c};return this.http.post(u,r)}}class z0{constructor(c=He,u=ql){this.http=c,this.localStorageService=u}uploadCv(c,u){const r=z.backendApiV2+"1.0.0/client/cv_upload";return this.http.post(r,c,{headers:{Authorization:`Bearer ${u}`}})}getCvUploadData(){let c=z.backendApiV2+"1.0.0/client/cv_upload/get_upload_cv";return this.http.get(c)}setProfileTextToDone(c){let u=z.backendApiV2+"1.0.0/client/cv_upload/profile_text_is_done/"+c,r={};return this.http.put(u,r)}setExperienceToDone(c){let u=z.backendApiV2+"1.0.0/client/cv_upload/experience_is_done/"+c,r={};return this.http.put(u,r)}setEducationToDone(c){let u=z.backendApiV2+"1.0.0/client/cv_upload/education_is_done/"+c,r={};return this.http.put(u,r)}setQualificationToDone(c){let u=z.backendApiV2+"1.0.0/client/cv_upload/qualification_is_done/"+c,r={};return this.http.put(u,r)}setCertificateToDone(c){let u=z.backendApiV2+"1.0.0/client/cv_upload/certificate_is_done/"+c,r={};return this.http.put(u,r)}setLanguageToDone(c){let u=z.backendApiV2+"1.0.0/client/cv_upload/language_is_done/"+c,r={};return this.http.put(u,r)}setDriversLicenseToDone(c){let u=z.backendApiV2+"1.0.0/client/cv_upload/drivers_license_is_done/"+c,r={};return this.http.put(u,r)}setCvUploadToDone(c){let u=z.backendApiV2+"1.0.0/client/cv_upload/cv_is_done/"+c,r={};return this.http.put(u,r)}}class D0{constructor(c=He){this.http=c}getAllDriverLicenses(){let c=z.backendApi+"api/1.1.0/driversLicenses";return this.http.get(c)}updateDriverLicense(c,u){let r=z.backendApi+"api/1.1.0/candidate/driversLicense/"+c,m={};return this.http.put(r,m)}removeLanguage(c){let u=z.backendApiV2+"1.0.0/client/candidate_drivers_license/"+c;return this.http.delete(u)}saveDriverLicense(c,u){let r=z.backendApiV2+"1.0.0/client/candidate_drivers_license",m={level:u,drivers_license_id:c.id};return this.http.post(r,m)}saveDriverLicenseV2(c,u){let r=z.backendApiV2+"1.0.0/client/candidate_drivers_license",m={level:c,drivers_license_id:u};return this.http.post(r,m)}}class M0{constructor(c=He){this.http=c}searchForEducations(c){let u=z.backendApi+"api/1.1.0/educations/search/"+c;return this.http.get(u)}searchForSchools(c){let u=z.backendApi+"api/1.1.0/institutions/search/"+c;return this.http.get(u)}saveEducation(c,u){let r=z.backendApiV2+"1.0.0/client/candidate_education",m={comments:c.comments,education_disced_15:c.education.disced15,from_date:c.fromDate,to_date:c.toDate,institution_number:c.institution?.instNumber,is_current:c.isCurrent,language:u};return this.http.post(r,m)}removeEducation(c){let u=z.backendApiV2+"1.0.0/client/candidate_education/"+c;return this.http.delete(u)}updateEducation(c,u,r){let m=z.backendApiV2+"1.0.0/client/candidate_education/"+c,v={comments:u.comments,from_date:u.fromDate,to_date:u.toDate,is_current:u.isCurrent,language:r};return this.http.put(m,v)}getEducationOccupationSuggestions(c){let u=z.backendApi+"api/1.1.0/educations/suggestions/occupation/"+c;return this.http.get(u)}saveUnknownEducation(c){let u=z.backendApiV2+"1.0.0/client/education/save_unknown_education",r={education_name:c};return this.http.post(u,r)}saveEducationV2(c,u){let r=z.backendApiV2+"1.0.0/client/candidate_education",m={comments:c.comments,education_disced_15:c.education_disced_15,from_date:c.from_date,to_date:c.to_date,institution_number:c.institution_number,is_current:c.is_current,language:u};return this.http.post(r,m)}}class C0{constructor(c=He){this.http=c}getAllLanguages(){let c=z.backendApi+"api/1.1.0/languages";return this.http.get(c)}saveLanguage(c,u){let r=z.backendApiV2+"1.0.0/client/candidate_language",m={language_id:u.id,level:c};return this.http.post(r,m)}updateLanguage(c,u,r){let m=z.backendApiV2+"1.0.0/client/candidate_language/"+c,v={level:u};return this.http.put(m,v)}removeLanguage(c){let u=z.backendApiV2+"1.0.0/client/candidate_language/"+c;return this.http.delete(u)}saveLanguageV2(c,u){let r=z.backendApiV2+"1.0.0/client/candidate_language",m={language_id:u,level:c};return this.http.post(r,m)}}class E0{constructor(c=He){this.http=c}searchForQualification(c){let u=z.backendApi+"api/1.1.0/qualifications/type/3/search/"+c;return this.http.get(u)}updateQualification(c,u){let r=z.backendApiV2+"1.0.0/client/candidate_qualification/"+c,m={level:u};return this.http.put(r,m)}saveQualification(c){let u=z.backendApiV2+"1.0.0/client/candidate_qualification",r={level:c.level,qualification_id:c.qualification.id};return this.http.post(u,r)}removeQualification(c){let u=z.backendApiV2+"1.0.0/client/candidate_qualification/"+c;return this.http.delete(u)}getQualificationsOccupationSuggestions(c,u){let r=z.backendApi+"api/1.1.0/qualifications/type/"+u+"/suggestions/occupation/"+c;return this.http.get(r)}addUnknownQualification(c){let u=z.backendApi+"api/1.1.0/qualifications/type/3/fromCandidate",r={name:c,type:3};return this.http.post(u,r)}saveQualificationV2(c){let u=z.backendApiV2+"1.0.0/client/candidate_qualification",r={level:c.level,qualification_id:c.qualification_id};return this.http.post(u,r)}}class w0{constructor(c=He){this.http=c}addUnknownOccupation(c){let u=z.backendApi+"api/1.1.0/occupations/fromCandidate",r={name:c};return this.http.post(u,r)}}class U0{constructor(c=He){this.http=c}saveUnknownInstitution(c){let u=z.backendApiV2+"1.0.0/client/institution/save_unknown_institution",r={institution_name:c};return this.http.post(u,r)}}class O0{constructor(c=new Pa,u=new T0,r=new z0,m=new ys,v=new A0,U=new M0,Y=new E0,R=new _0,b=new C0,V=new D0,T=new tm,q=new w0,Q=new U0,ee=ql){this.candidateService=c,this.cvService=u,this.cvUploadService=r,this.subscriptionService=m,this.aiHandlerService=v,this.educationService=U,this.qualificationService=Y,this.certificationService=R,this.languageService=b,this.driverLicenseService=V,this.escoService=T,this.occupationService=q,this.institutionService=Q,this.localStorageService=ee}escosCache=null;async getSnapshot(){const[c,u,r,m,v,U,Y,R,b,V]=await Promise.allSettled([this.candidateService.getCandidate(),this.candidateService.getCandidatesExperiences(),this.candidateService.getCandidatesEducations(),this.candidateService.getCandidatesQualifications(),this.candidateService.getCandidatesCertifications(),this.candidateService.getCandidatesLanguages(),this.candidateService.getCandidatesDriverLicenses(),this.subscriptionService.getPaymentOverview(),this.cvUploadService.getCvUploadData(),this.aiHandlerService.getMyCvDescriptions()]);return{candidate:c.status==="fulfilled"?c.value:null,experiences:u.status==="fulfilled"?u.value:[],educations:r.status==="fulfilled"?r.value:[],skills:m.status==="fulfilled"?m.value:[],certifications:v.status==="fulfilled"?v.value:[],languages:U.status==="fulfilled"?U.value:[],driverLicenses:Y.status==="fulfilled"?Y.value:[],paymentOverview:R.status==="fulfilled"?R.value:null,cvUploadData:b.status==="fulfilled"?b.value:null,aiGeneratedCVDescription:V.status==="fulfilled"&&V.value?.id?V.value:null}}async setActiveSeeker(c,u,r){const m={...c,isActive:u};return this.candidateService.updateCandidate(m,r)}async updateCandidate(c,u){return this.candidateService.updateCandidate(c,u)}async generateCv(c){await this.cvService.generateCv(c)}async getCvDownloadUrl(c){return(await this.cvService.getMyCvV2(c)).url}async uploadCv(c,u){const r=await this.localStorageService.getAuthToken();if(!r)throw new Error("No auth token found.");await this.cvUploadService.uploadCv({base_64_cv_file:c,cv_file_type:u},r)}async optimizeCv(c){await this.aiHandlerService.updateMyCvDescriptions(c)}async updateExperience(c,u){await this.candidateService.updateExperience(c,u)}async updateEducation(c,u){const r={comments:c.comments,education:c.education,institution:c.institution,fromDate:new Date(c.fromDate),toDate:new Date(c.toDate),isCurrent:c.isCurrent};await this.educationService.updateEducation(c.id,r,u)}async updateCertification(c){await this.certificationService.updateCertification(c)}async updateLanguage(c){const u={id:c.language.id,isO639:c.language.isO639,name:c.language.name,ownName:c.language.ownName,priority:c.language.priority};await this.languageService.updateLanguage(c.id,c.level,u)}async removeExperience(c){await this.candidateService.removeExperience(c)}async removeEducation(c){await this.educationService.removeEducation(c)}async removeQualification(c){await this.qualificationService.removeQualification(c)}async removeCertification(c){await this.certificationService.removeCertification(c)}async removeLanguage(c){await this.languageService.removeLanguage(c)}async removeDriverLicense(c){await this.driverLicenseService.removeLanguage(c)}async getEscoSuggestions(c,u=25){this.escosCache||(this.escosCache=await this.escoService.listAllEscos());const r=c.trim().toLowerCase();return r?this.escosCache.filter(m=>m.preferedLabelDa.toLowerCase().includes(r)).slice(0,u):this.escosCache.slice(0,u)}async getLanguageOptions(){return(await this.languageService.getAllLanguages()).allLanguages??[]}async getDriverLicenseOptions(){return this.driverLicenseService.getAllDriverLicenses()}async createExperience(c,u){let r=c.escoId??null;if(!r&&c.occupationName?.trim()&&(r=(await this.occupationService.addUnknownOccupation(c.occupationName.trim())).id),!r)throw new Error("Vælg eller opret en stilling først.");await this.candidateService.saveExperienceV2({companyName:c.companyName,comments:c.comments,fromDate:c.fromDate,toDate:c.toDate,isCurrent:c.isCurrent,escoId:r},u)}async createEducation(c,u){let r=c.educationDisced15??null;if(!r&&c.educationName?.trim()&&(r=(await this.educationService.saveUnknownEducation(c.educationName)).disced15),!r)throw new Error("Vælg eller opret en uddannelse først.");let m=c.institutionNumber;!m&&c.institutionName?.trim()&&(m=(await this.institutionService.saveUnknownInstitution(c.institutionName.trim())).inst_number),await this.educationService.saveEducationV2({comments:c.comments,institution_number:m,from_date:c.fromDate,to_date:c.toDate,education_disced_15:r,is_current:c.isCurrent},u)}async createCertification(c){let u=c.certificateId??null;if(!u&&c.certificateName?.trim()&&(u=(await this.certificationService.addUnknownCertificate(c.certificateName.trim())).certificate_id),!u)throw new Error("Vælg eller opret et certifikat først.");await this.certificationService.saveCertification(u)}async createLanguage(c,u){await this.languageService.saveLanguageV2(u,c)}async getQualificationSuggestions(c){const u=c.trim();return u?this.qualificationService.searchForQualification(u):[]}async createQualification(c){let u=c.qualificationId?.trim()||"";if(!u&&c.qualificationName?.trim()&&(u=(await this.qualificationService.addUnknownQualification(c.qualificationName.trim())).id),!u)throw new Error("Vælg eller opret en kvalifikation først.");await this.qualificationService.saveQualificationV2({qualification_id:u,level:c.level})}async getEducationSuggestions(c){const u=c.trim();return u?this.educationService.searchForEducations(u):[]}async getSchoolSuggestions(c){const u=c.trim();return u?this.educationService.searchForSchools(u):[]}async getCertificationSuggestions(c){const u=c.trim();return u?this.certificationService.searchForCertification(u):[]}async createDriverLicense(c,u){await this.driverLicenseService.saveDriverLicenseV2(u,c)}}const L0={candidate:null,experiences:[],educations:[],skills:[],certifications:[],languages:[],driverLicenses:[],paymentOverview:null,cvUploadData:null,aiGeneratedCVDescription:null},R0=[{id:"e1",title:"Senior Frontend-udvikler",company:"Lunar",from:"2020-08-01",to:null,description:"Udvikling og vedligeholdelse af core-features i bankens app samt performance-optimering."},{id:"e2",title:"Web-udvikler",company:"Trustpilot",from:"2017-01-01",to:"2020-07-01",description:"Udviklede dashboards og analysevaerktojer i taet samarbejde med UX-teamet."}],H0=[{id:"ed1",title:"Cand.it i Webudvikling",school:"IT-Universitetet i Kobenhavn",from:"2013-08-01",to:"2015-06-01",description:"Specialisering i webteknologier, databaser og brugercentreret design."},{id:"ed2",title:"Datamatiker",school:"KEA - Kobenhavns Erhvervsakademi",from:"2010-08-01",to:"2013-06-01",description:"Softwarekonstruktion, systemarkitektur og programmering i Java og C#."}];function hs(d){if(!d)return null;const c=d instanceof Date?d:new Date(d);return Number.isNaN(c.getTime())?null:c}function zh(d){const c=hs(d);return c?new Intl.DateTimeFormat("da-DK",{month:"short",year:"numeric"}).format(c):"Ukendt"}function Dh(d,c,u){const r=zh(d),m=u?"Nu":zh(c);return`${r} - ${m}`}function V0(d){const c=hs(d);return c?new Intl.DateTimeFormat("da-DK",{day:"2-digit",month:"long",year:"numeric"}).format(c):"Ikke angivet"}function Mh(d){return[...d].sort((c,u)=>{const r=hs(c.fromDate)?.getTime()??0;return(hs(u.fromDate)?.getTime()??0)-r})}function q0(d){return d.qualification?.name||"Kvalifikation"}function B0(d){return d.qualification?.name||d.levelName||"Certificering"}function Y0(d){return d.driversLicense?.name||d.levelName||"Korekort"}function J0(d){return d.levelName||"Niveau ukendt"}function G0({onLogout:d,onNavigate:c,onToggleTheme:u,theme:r}){const m=C.useMemo(()=>new O0,[]),[v,U]=C.useState("standard"),[Y,R]=C.useState(L0),[b,V]=C.useState(!0);C.useEffect(()=>{let D=!0;return m.getSnapshot().then(fe=>{D&&R(fe)}).finally(()=>{D&&V(!1)}),()=>{D=!1}},[m]);const T=Y.candidate,q=T?.firstName?.trim()||T?.name?.trim()||"Lasse",Q=T?.firstName||"Lasse",ee=T?.lastName||"Hansen",B=T?.imageUrl||T?.image||"",re=Y.experiences.length>0?Mh(Y.experiences):[],oe=Y.educations.length>0?Mh(Y.educations):[],ge=Y.skills,K=Y.languages,ne=Y.certifications,se=Y.driverLicenses,Z=K.length>0?K.map(D=>({id:D.id,name:D.language?.name||"Sprog",level:J0(D)})):[{id:"da",name:"Dansk",level:"Modersmal"},{id:"en",name:"Engelsk",level:"Flydende"}];return n.jsxs("section",{className:`dash-root ${r==="dark"?"theme-dark":""}`,children:[n.jsx("div",{className:"dash-orb dash-orb-1"}),n.jsx("div",{className:"dash-orb dash-orb-2"}),n.jsx("div",{className:"dash-orb dash-orb-3"}),n.jsx(ia,{active:"cv",onNavigate:c}),n.jsxs("main",{className:`dash-main custom-scrollbar cv-page ${v==="reference"?"cv-design-reference":""}`,children:[n.jsx(sa,{name:q,imageUrl:B||void 0,onLogout:d,theme:r,onToggleTheme:u,actions:n.jsxs("button",{type:"button",className:"cv-design-toggle",onClick:()=>U(D=>D==="standard"?"reference":"standard"),children:[v==="reference"?n.jsx(Zh,{size:16,strokeWidth:1.8}):n.jsx(Kh,{size:16,strokeWidth:1.8}),n.jsx("span",{children:v==="reference"?"Skift til standard design":"Skift til reference design"})]})}),n.jsxs("div",{className:"cv-head",children:[n.jsxs("div",{children:[n.jsx("h1",{children:"Dit CV"}),n.jsx("p",{children:"Handter dine faglige oplysninger, erfaringer og uddannelser."})]}),n.jsxs("button",{type:"button",className:"cv-edit-btn",children:[n.jsx(hv,{size:16,strokeWidth:1.8})," Rediger CV"]})]}),b?n.jsx("p",{className:"dash-loading",children:"Indlaeser CV..."}):null,n.jsxs("div",{className:"cv-layout",children:[n.jsxs("div",{className:"cv-left",children:[n.jsxs("article",{className:"cv-card",children:[n.jsx("div",{className:"cv-avatar-wrap",children:B?n.jsx("img",{src:B,alt:q,className:"cv-avatar"}):n.jsx("div",{className:"cv-avatar cv-avatar-fallback",children:q.slice(0,1).toUpperCase()})}),n.jsxs("div",{className:"cv-section-head",children:[n.jsx(Hl,{size:18,strokeWidth:1.8}),n.jsx("h2",{children:"Personlige oplysninger"})]}),n.jsxs("div",{className:"cv-personal-list",children:[n.jsxs("div",{children:[n.jsx("span",{children:"Fornavn"}),n.jsx("strong",{children:Q})]}),n.jsxs("div",{children:[n.jsx("span",{children:"Efternavn"}),n.jsx("strong",{children:ee})]}),n.jsxs("div",{children:[n.jsx("span",{children:"E-mail"}),n.jsx("strong",{children:T?.email||"lasse@eksempel.dk"})]}),n.jsxs("div",{children:[n.jsx("span",{children:"Telefon"}),n.jsx("strong",{children:T?.phoneNumber||"+45 12 34 56 78"})]}),n.jsxs("div",{children:[n.jsx("span",{children:"Fodselsdato"}),n.jsx("strong",{children:V0(T?.birthday)})]}),n.jsxs("div",{children:[n.jsx("span",{children:"Kon"}),n.jsx("strong",{children:T?.gender||"Mand"})]})]})]}),n.jsxs("article",{className:"cv-card",children:[n.jsxs("div",{className:"cv-section-head",children:[n.jsx(Ph,{size:18,strokeWidth:1.8}),n.jsx("h2",{children:"Kvalifikationer"})]}),n.jsx("div",{className:"cv-chip-wrap",children:(ge.length>0?ge.map(q0):["HTML & CSS","Tailwind CSS","JavaScript","React","UI/UX Design"]).slice(0,12).map(D=>n.jsx("span",{className:"cv-chip",children:D},D))})]}),n.jsxs("article",{className:"cv-card",children:[n.jsxs("div",{className:"cv-section-head",children:[n.jsx(gs,{size:18,strokeWidth:1.8}),n.jsx("h2",{children:"Sprog"})]}),n.jsx("div",{className:"cv-language-list",children:Z.map(D=>n.jsxs("div",{children:[n.jsx("strong",{children:D.name}),n.jsx("span",{children:D.level})]},D.id))})]}),n.jsxs("div",{className:"cv-mini-grid",children:[n.jsxs("article",{className:"cv-card",children:[n.jsxs("div",{className:"cv-section-head",children:[n.jsx(Yh,{size:18,strokeWidth:1.8}),n.jsx("h2",{children:"Certificeringer"})]}),n.jsxs("ul",{className:"cv-list",children:[(ne.length>0?ne:[]).slice(0,4).map(D=>n.jsxs("li",{children:[n.jsx(tt,{size:15,strokeWidth:1.8})," ",B0(D)]},D.id)),ne.length===0?n.jsxs(n.Fragment,{children:[n.jsxs("li",{children:[n.jsx(tt,{size:15,strokeWidth:1.8})," AWS Certified Developer"]}),n.jsxs("li",{children:[n.jsx(tt,{size:15,strokeWidth:1.8})," Certificeret Scrum Master"]})]}):null]})]}),n.jsxs("article",{className:"cv-card",children:[n.jsxs("div",{className:"cv-section-head",children:[n.jsx(Gh,{size:18,strokeWidth:1.8}),n.jsx("h2",{children:"Korekort"})]}),n.jsx("div",{className:"cv-chip-wrap",children:(se.length>0?se.map(Y0):["B (Almindelig bil)","A (Motorcykel)"]).map(D=>n.jsx("span",{className:"cv-chip",children:D},D))})]})]})]}),n.jsxs("div",{className:"cv-right",children:[n.jsxs("section",{children:[n.jsxs("div",{className:"cv-timeline-head",children:[n.jsx("div",{className:"cv-timeline-icon",children:n.jsx(sr,{size:19,strokeWidth:1.8})}),n.jsx("h2",{children:"Erhvervserfaring"})]}),n.jsx("div",{className:"cv-timeline",children:(re.length>0?re:R0).map((D,fe)=>{const je="occupation"in D?D.occupation?.name||"Stilling":D.title,Se="companyName"in D?D.companyName:D.company,H="comments"in D?D.comments:D.description,J="fromDate"in D?D.fromDate:D.from,ae="toDate"in D?D.toDate:D.to,P="isCurrent"in D?!!D.isCurrent:!1;return n.jsxs("article",{className:"cv-timeline-item",children:[n.jsx("div",{className:"cv-timeline-dot",children:n.jsx(ar,{size:15,strokeWidth:1.8})}),n.jsxs("div",{className:"cv-timeline-card",children:[n.jsx("h3",{children:je}),n.jsxs("div",{className:"cv-meta",children:[n.jsx("strong",{children:Se}),n.jsx("span",{children:Dh(J,ae,P)})]}),n.jsx("p",{children:H||"Ingen beskrivelse."})]})]},"id"in D?String(D.id):`exp-${fe}`)})})]}),n.jsx("div",{className:"cv-divider"}),n.jsxs("section",{children:[n.jsxs("div",{className:"cv-timeline-head",children:[n.jsx("div",{className:"cv-timeline-icon",children:n.jsx(Xh,{size:19,strokeWidth:1.8})}),n.jsx("h2",{children:"Uddannelse"})]}),n.jsx("div",{className:"cv-timeline",children:(oe.length>0?oe:H0).map((D,fe)=>{const je="education"in D?D.education?.name||"Uddannelse":D.title,Se="institution"in D?D.institution?.name||"Institution":D.school,H="comments"in D?D.comments:D.description,J="fromDate"in D?D.fromDate:D.from,ae="toDate"in D?D.toDate:D.to,P="isCurrent"in D?!!D.isCurrent:!1;return n.jsxs("article",{className:"cv-timeline-item",children:[n.jsx("div",{className:"cv-timeline-dot",children:n.jsx(ar,{size:15,strokeWidth:1.8})}),n.jsxs("div",{className:"cv-timeline-card",children:[n.jsx("h3",{children:je}),n.jsxs("div",{className:"cv-meta",children:[n.jsx("strong",{children:Se}),n.jsx("span",{children:Dh(J,ae,P)})]}),n.jsx("p",{children:H||"Ingen beskrivelse."})]})]},"id"in D?String(D.id):`edu-${fe}`)})})]})]})]})]})]})}class Q0{constructor(c=He){this.http=c}getNotificationSetting(){const c=z.backendApiV2+"2.0.0/client/notification/settings";return this.http.get(c)}createNotificationSetting(c){const u=z.backendApiV2+"2.0.0/client/notification/settings";return this.http.post(u,c)}updateNotificationSetting(c,u){const r=z.backendApiV2+"2.0.0/client/notification/settings/"+c;return this.http.put(r,u)}deleteNotificationSetting(c){const u=z.backendApiV2+"2.0.0/client/notification/settings/"+c;return this.http.delete(u)}getNewNotificationCount(){let c=z.backendApiV2+"1.0.0/client/notification/unseen_notifications";return this.http.get(c)}getNotifications(c,u){let r=z.backendApiV2+"1.0.0/client/notification/"+c+"/"+u;return this.http.get(r)}notificationSeenByUser(c){let u=z.backendApiV2+"1.0.0/client/notification/seen_by_user/"+c,r={};return this.http.put(u,r)}}class lm{constructor(c=He,u=ql){this.http=c,this.localStorage=u}listSimulationPersonalities(){let c=z.backendApiV2+"client/simulation/1.0.0/list_simulation_personalities",u=new Ia().set("language","da");return this.http.get(c,{params:u})}getInterviewEvaluation(c){const u=z.backendApiV2+`client/simulation/1.0.0/interview_evaluation/${c}`;return this.http.get(u)}listInterviews(c=20,u=0){const r=z.backendApiV2+"client/job_simulator/1.0.0/list_interviews",m=new Ia().set("limit",c.toString()).set("offset",u.toString());return this.http.get(r,{params:m})}submitEvaluationRating(c,u,r){const m=z.backendApiV2+"client/simulation/1.0.0/evaluation_rating",v={interview_id:c,rating:u,rating_text:r};return this.http.post(m,v)}submitInterviewRating(c,u,r){const m=z.backendApiV2+"client/simulation/1.0.0/interview_rating",v={interview_id:c,rating:u,rating_text:r};return this.http.post(m,v)}}class X0{constructor(c=He){this.http=c}chatMessageThreads=[];getChatMessages(){let c=z.backendApi+"api/1.1.0/chatMessages/forCandidate/";return this.http.get(c)}sendMessage(c){let u=z.backendApi+"api/1.1.0/chatMessages/"+c.threadId+"/fromCandidate";return this.http.post(u,c)}markThreadRead(c){let u=z.backendApi+"api/1.1.0/chatMessages/markRead/"+c;return this.http.get(u)}}class Z0{constructor(c=He){this.http=c}getUnreadMessages(){let c=z.backendApi+"api/1.1.0/chatMessages/getUnreadCount";return this.http.get(c)}}function fs(d){if(!d)return 0;const u=(d instanceof Date?d:new Date(d)).getTime();return Number.isNaN(u)?0:u}function Ku(d,c){const u=d?.timeSent?new Date(d.timeSent):new Date,r=d?.seen?new Date(d.seen):void 0;return{id:d?.id,threadId:d?.threadId??c,timeSent:u,fromCandidate:!!d?.fromCandidate,text:d?.text??"",seen:r}}class nm{constructor(c=new X0,u=new Z0,r=new Pa){this.chatMessagesService=c,this.messageService=u,this.candidateService=r}async getCandidateProfile(){try{const c=await this.candidateService.getCandidate(),u=c.firstName?.trim()||c.name?.trim()||"Lasse",r=c.imageUrl||c.image||void 0;return{name:u,imageUrl:r}}catch{return{name:"Lasse"}}}async getThreads(){return(await this.chatMessagesService.getChatMessages()??[]).map(u=>{const r=(u.allMessages??[]).map(v=>Ku(v,u.id));r.sort((v,U)=>fs(v.timeSent)-fs(U.timeSent));const m=u.latestMessage?Ku(u.latestMessage,u.id):r[r.length-1]??Ku(void 0,u.id);return{...u,allMessages:r,latestMessage:m}}).sort((u,r)=>fs(r.latestMessage?.timeSent)-fs(u.latestMessage?.timeSent))}async getUnreadCount(){const c=await this.messageService.getUnreadMessages();return Number(c?.unreadCount??0)}async sendMessage(c,u){const r={threadId:c,text:u.trim(),fromCandidate:!0,timeSent:new Date};return this.chatMessagesService.sendMessage(r)}async markThreadReadByMessageId(c){c&&await this.chatMessagesService.markThreadRead(c)}}function Jn(d){return typeof d=="object"&&d!==null?d:null}function wt(d){return typeof d=="string"?d:""}function K0(d){return typeof d=="number"?d:null}function W0(d){const c=Jn(d);if(!c)return null;const r=Jn(c.jobPosting)??c,m=wt(r.id);return m?{id:m,title:wt(r.title),companyName:wt(r.companyName),address:wt(r.address),applicationDeadline:wt(r.applicationDeadline),candidateDistance:K0(r.candidateDistance),fromJobnet:!!r.fromJobnet,logoUrl:wt(r.logoUrl),companyLogoImage:wt(r.companyLogoImage)}:null}function F0(d){const c=Jn(d);return(Array.isArray(c?.interviews)?c.interviews:[]).map(r=>{const m=Jn(r);if(!m)return null;const v=wt(m.id);return v?{id:v,jobName:wt(m.job_name)||"Interview",companyName:wt(m.company_name)||null,interviewDate:wt(m.interview_date)||null,recommendation:wt(m.recommendation)||null,isCompleted:!!m.is_completed}:null}).filter(r=>!!r).sort((r,m)=>{const v=r.interviewDate?new Date(r.interviewDate).getTime():0;return(m.interviewDate?new Date(m.interviewDate).getTime():0)-v}).slice(0,5)}function $0(d){const c=Jn(d);return c?Array.isArray(c.searchList)?c.searchList:[]:[]}class I0{constructor(c=new Pa,u=new Q0,r=new cr,m=new ys,v=new lm,U=new nm){this.candidateService=c,this.notificationService=u,this.jobService=r,this.subscriptionService=m,this.simulationService=v,this.messagesViewModel=U}async loadInitialData(){const[c,u,r,m,v,U]=await Promise.allSettled([this.candidateService.getCandidate(),this.notificationService.getNotifications(0,5),this.messagesViewModel.getThreads(),this.loadBestJobs(),this.subscriptionService.getPaymentOverview(),this.simulationService.listInterviews(5,0)]);return{candidate:c.status==="fulfilled"?c.value:null,notifications:u.status==="fulfilled"?u.value.slice(0,5):[],messages:r.status==="fulfilled"?r.value.slice(0,5):[],bestJobs:m.status==="fulfilled"?m.value:[],subscription:v.status==="fulfilled"?v.value:null,evaluations:U.status==="fulfilled"?F0(U.value):[]}}async loadBestJobs(){const c=await this.jobService.getJobsV2(10,0,5,[]);return $0(c).map(r=>W0(r)).filter(r=>!!r).slice(0,5)}}const P0={bestJobs:[],candidate:null,evaluations:[],messages:[],notifications:[],subscription:null};function Ch(d){return d.trim().slice(0,1).toUpperCase()||"A"}function ey({onLogout:d,onNavigate:c,onOpenJobDetail:u,onToggleTheme:r,theme:m}){const v=C.useMemo(()=>new I0,[]),[U,Y]=C.useState(P0),[R,b]=C.useState(!0);C.useEffect(()=>{let q=!0;return v.loadInitialData().then(Q=>{q&&Y(Q)}).finally(()=>{q&&b(!1)}),()=>{q=!1}},[v]);const V=U.candidate?.firstName?.trim()||U.candidate?.name?.trim()||"Lasse",T=U.candidate?.imageUrl||U.candidate?.image||"";return n.jsxs("section",{className:`dash-root ${m==="dark"?"theme-dark":""}`,children:[n.jsx("div",{className:"dash-orb dash-orb-1"}),n.jsx("div",{className:"dash-orb dash-orb-2"}),n.jsx("div",{className:"dash-orb dash-orb-3"}),n.jsx(ia,{active:"dashboard",onNavigate:c}),n.jsxs("main",{className:"dash-main custom-scrollbar",children:[n.jsx(sa,{name:V,imageUrl:T||void 0,onLogout:d,theme:m,onToggleTheme:r}),n.jsxs("div",{className:"dash-welcome",children:[n.jsxs("h1",{children:["Velkommen tilbage ",V," ",n.jsx("span",{children:"👋"})]}),n.jsx("p",{children:"Her er, hvad der sker med din jobsøgning i dag."})]}),R?n.jsx("p",{className:"dash-loading",children:"Indlaeser dashboard..."}):null,n.jsxs("div",{className:"dash-grid",children:[n.jsxs("div",{className:"dash-grid-main",children:[n.jsxs("article",{className:"dash-card",children:[n.jsx("div",{className:"dash-card-head",children:n.jsx("h2",{children:"Anbefalet til dig"})}),n.jsx("div",{className:"dash-job-list",children:(U.bestJobs.length>0?U.bestJobs:[{id:"d1",title:"Senior Frontend-udvikler",companyName:"Lunar",address:"Kobenhavn, DK",applicationDeadline:"",candidateDistance:null,fromJobnet:!1,logoUrl:"",companyLogoImage:""},{id:"d2",title:"React-udvikler",companyName:"Pleo",address:"Remote",applicationDeadline:"",candidateDistance:null,fromJobnet:!1,logoUrl:"",companyLogoImage:""}]).slice(0,5).map(q=>n.jsxs("div",{className:"dash-job-item",role:"button",tabIndex:0,onClick:()=>u(q.id,!!q.fromJobnet,"dashboard"),onKeyDown:Q=>{(Q.key==="Enter"||Q.key===" ")&&(Q.preventDefault(),u(q.id,!!q.fromJobnet,"dashboard"))},children:[n.jsxs("div",{className:"dash-job-left",children:[n.jsx("div",{className:"dash-company-chip",children:Ch(q.companyName)}),n.jsxs("div",{children:[n.jsx("h4",{children:q.title}),n.jsxs("p",{children:[q.companyName," • ",q.address||"Lokation ikke angivet"]})]})]}),n.jsx("button",{type:"button",className:"dash-job-arrow-btn","aria-label":"Se job",onClick:Q=>{Q.stopPropagation(),u(q.id,!!q.fromJobnet,"dashboard")},children:n.jsx($a,{size:16,strokeWidth:1.8})})]},q.id))})]}),n.jsxs("div",{className:"dash-split-grid",children:[n.jsxs("article",{className:"dash-card",children:[n.jsx("h3",{children:"Seneste beskeder"}),n.jsxs("div",{className:"dash-message-list",children:[(U.messages.length>0?U.messages:[]).slice(0,5).map(q=>n.jsxs("div",{className:"dash-message-item",children:[n.jsx("div",{className:"dash-avatar",children:Ch(q.companyName||"A")}),n.jsxs("div",{children:[n.jsx("h4",{children:q.companyName||"Samtale"}),n.jsx("p",{children:q.latestMessage?.text||"Ingen besked endnu"})]})]},q.id)),U.messages.length===0?n.jsx("p",{className:"dash-muted",children:"Ingen beskeder endnu."}):null]})]}),n.jsxs("article",{className:"dash-card",children:[n.jsxs("div",{className:"dash-card-head dash-card-head-inline",children:[n.jsx("h3",{children:"Seneste simuleringer"}),n.jsx("button",{type:"button",className:"dash-icon-btn",children:n.jsx(bv,{size:16,strokeWidth:1.8})})]}),n.jsxs("div",{className:"dash-sim-list",children:[n.jsxs("div",{className:"dash-sim-item",children:[n.jsxs("div",{className:"dash-sim-left",children:[n.jsx("span",{className:"dash-sim-icon teal",children:n.jsx(er,{size:16,strokeWidth:1.8})}),n.jsxs("div",{children:[n.jsx("h4",{children:"Teknisk samtale"}),n.jsx("p",{children:"Frontend-fokus"})]})]}),n.jsxs("div",{className:"dash-sim-right",children:[n.jsx("strong",{children:"92/100"}),n.jsx("div",{className:"dash-progress",children:n.jsx("span",{style:{width:"92%"}})})]})]}),n.jsxs("div",{className:"dash-sim-item",children:[n.jsxs("div",{className:"dash-sim-left",children:[n.jsx("span",{className:"dash-sim-icon purple",children:n.jsx(Fv,{size:16,strokeWidth:1.8})}),n.jsxs("div",{children:[n.jsx("h4",{children:"Kulturelt match"}),n.jsx("p",{children:"Lunar Bank"})]})]}),n.jsxs("div",{className:"dash-sim-right",children:[n.jsx("strong",{children:"88/100"}),n.jsx("div",{className:"dash-progress",children:n.jsx("span",{style:{width:"88%"}})})]})]}),n.jsxs("div",{className:"dash-sim-item",children:[n.jsxs("div",{className:"dash-sim-left",children:[n.jsx("span",{className:"dash-sim-icon amber",children:n.jsx(xv,{size:16,strokeWidth:1.8})}),n.jsxs("div",{children:[n.jsx("h4",{children:"Systemdesign"}),n.jsx("p",{children:"Arkitektur"})]})]}),n.jsxs("div",{className:"dash-sim-right",children:[n.jsx("strong",{className:"warn",children:"65/100"}),n.jsx("div",{className:"dash-progress",children:n.jsx("span",{className:"warn",style:{width:"65%"}})})]})]}),n.jsxs("div",{className:"dash-sim-item",children:[n.jsxs("div",{className:"dash-sim-left",children:[n.jsx("span",{className:"dash-sim-icon blue",children:n.jsx(er,{size:16,strokeWidth:1.8})}),n.jsxs("div",{children:[n.jsx("h4",{children:"Live-kodning"}),n.jsx("p",{children:"React.js"})]})]}),n.jsxs("div",{className:"dash-sim-right",children:[n.jsx("strong",{children:"95/100"}),n.jsx("div",{className:"dash-progress",children:n.jsx("span",{style:{width:"95%"}})})]})]}),n.jsxs("div",{className:"dash-sim-item",children:[n.jsxs("div",{className:"dash-sim-left",children:[n.jsx("span",{className:"dash-sim-icon gray",children:n.jsx(Fh,{size:16,strokeWidth:1.8})}),n.jsxs("div",{children:[n.jsx("h4",{children:"HR-screening"}),n.jsx("p",{children:"Generelt"})]})]}),n.jsxs("div",{className:"dash-sim-right",children:[n.jsx("strong",{className:"na",children:"N/A"}),n.jsx("div",{className:"dash-progress"})]})]})]})]})]})]}),n.jsxs("div",{className:"dash-grid-side",children:[n.jsxs("article",{className:"dash-card dash-ai-card dash-ai-card-group",children:[n.jsx("div",{className:"dash-ai-peel"}),n.jsxs("div",{className:"dash-ai-content",children:[n.jsxs("div",{className:"dash-ai-head",children:[n.jsx(Gn,{size:22,strokeWidth:1.8}),n.jsx("h3",{children:"AI-indsigter til dit CV"})]}),n.jsx("p",{children:"Vi analyserede dit seneste CV op imod dine målroller."}),n.jsxs("ul",{className:"dash-ai-list",children:[n.jsxs("li",{className:"dash-ai-item",children:[n.jsx("span",{className:"dash-ai-item-icon",children:n.jsx(tp,{size:13,strokeWidth:2})}),n.jsxs("div",{children:[n.jsx("strong",{children:"Kvantificer dine resultater"}),n.jsx("small",{children:'Tilføj tal til din rolle hos TechCorp (f.eks. \\"Forbedrede loadhastighed med 40%\\").'})]})]}),n.jsxs("li",{className:"dash-ai-item",children:[n.jsx("span",{className:"dash-ai-item-icon",children:n.jsx(Ig,{size:13,strokeWidth:2})}),n.jsxs("div",{children:[n.jsx("strong",{children:"Omorganiser dine færdigheder"}),n.jsx("small",{children:"Flyt React & TypeScript til toppen baseret på aktive Jobagenter."})]})]}),n.jsxs("li",{className:"dash-ai-item",children:[n.jsx("span",{className:"dash-ai-item-icon",children:n.jsx(Ep,{size:13,strokeWidth:2})}),n.jsxs("div",{children:[n.jsx("strong",{children:"Tilføj manglende nøgleord"}),n.jsx("small",{children:'Inkluder \\"Tailwind CSS\\" for at matche 85% af dine anbefalede jobs.'})]})]}),n.jsxs("li",{className:"dash-ai-item dash-ai-xl-only",children:[n.jsx("span",{className:"dash-ai-item-icon",children:n.jsx(Ih,{size:13,strokeWidth:2})}),n.jsxs("div",{children:[n.jsx("strong",{children:"Omskriv dit resumé"}),n.jsx("small",{children:"Gør din målsætning mere handlingsorienteret."})]})]}),n.jsxs("li",{className:"dash-ai-item dash-ai-xl-only",children:[n.jsx("span",{className:"dash-ai-item-icon",children:n.jsx($p,{size:13,strokeWidth:2})}),n.jsxs("div",{children:[n.jsx("strong",{children:"Opdater porteføljelink"}),n.jsx("small",{children:"Dit GitHub-link gav en 404-fejl i vores test."})]})]})]}),n.jsx("button",{type:"button",children:"Anvend alle ændringer"})]})]}),n.jsxs("article",{className:"dash-card",children:[n.jsxs("div",{className:"dash-card-head dash-card-head-inline",children:[n.jsx("h3",{children:"Aktive Jobagenter"}),n.jsx("button",{type:"button",className:"dash-icon-btn",children:n.jsx($h,{size:16,strokeWidth:1.8})})]}),n.jsxs("div",{className:"dash-agent-list",children:[n.jsxs("div",{className:"dash-agent-item",children:[n.jsxs("div",{children:[n.jsx("span",{children:"Frontend-udvikler"}),n.jsxs("small",{children:[n.jsx(Yn,{size:13,strokeWidth:1.8})," Kobenhavn"]})]}),n.jsxs("label",{className:"dash-switch",children:[n.jsx("input",{type:"checkbox",defaultChecked:!0}),n.jsx("span",{})]})]}),n.jsxs("div",{className:"dash-agent-item",children:[n.jsxs("div",{children:[n.jsx("span",{children:"React-udvikler"}),n.jsxs("small",{children:[n.jsx(lr,{size:13,strokeWidth:1.8})," Remote (EU)"]})]}),n.jsxs("label",{className:"dash-switch",children:[n.jsx("input",{type:"checkbox",defaultChecked:!0}),n.jsx("span",{})]})]}),n.jsxs("div",{className:"dash-agent-item muted",children:[n.jsxs("div",{children:[n.jsx("span",{children:"UI/UX-designer"}),n.jsxs("small",{children:[n.jsx(Yn,{size:13,strokeWidth:1.8})," Aarhus"]})]}),n.jsxs("label",{className:"dash-switch",children:[n.jsx("input",{type:"checkbox"}),n.jsx("span",{})]})]})]}),n.jsx("button",{type:"button",className:"dash-outline-btn",children:"Opret ny agent"})]})]})]})]})]})}function Bn(d){return d instanceof Date?d.toISOString():typeof d=="string"?d:""}function Eh(d){const c=[d.road,d.houseNum,d.zip,d.zipName].filter(u=>typeof u=="string"&&u.trim().length>0).join(" ");return{id:d.id,title:d.title??"Job",companyName:d.hiringCompanyName??"Ukendt virksomhed",occupationName:d.occupation?.name??"",address:c||d.zipName||"Ukendt adresse",description:d.description??"",applicationDeadline:Bn(d.applicationDeadline),websiteUrl:d.applicationUrl||d.hiringCompanyUrl||"",logoUrl:d.logoUrl||"",fromJobnet:!0,isSaved:!1,isApplied:!!d.applied,isFullTime:typeof d.isFullTime=="boolean"?d.isFullTime:null,workTimes:Array.isArray(d.workTimes)?d.workTimes:[],contactName:d.contactName??"",hiringCompanyName:d.hiringCompanyName??"",datePosted:Bn(d.datePosted),employmentDate:Bn(d.employmentDate),startAsSoonAsPossible:typeof d.startAsSoonAsPossible=="boolean"?d.startAsSoonAsPossible:null,numberOfPositions:typeof d.numberOfPositions=="number"?d.numberOfPositions:null}}function wh(d,c){return{id:d,title:c.title??"Job",companyName:c.companyName??"Ukendt virksomhed",occupationName:c.position??"",address:"",description:[c.descriptionIntro,c.descriptionPosition,c.descriptionOffer].filter(u=>typeof u=="string"&&u.trim().length>0).join(` + +`),applicationDeadline:Bn(c.applicationDeadline),websiteUrl:c.website??"",logoUrl:"",fromJobnet:!1,isSaved:!1,isApplied:!!c.appliedJob,isFullTime:null,workTimes:Array.isArray(c.workTimes)?c.workTimes:[],contactName:"",hiringCompanyName:c.companyName??"",datePosted:"",employmentDate:Bn(c.fromDate),startAsSoonAsPossible:null,numberOfPositions:typeof c.numberOfPositions=="number"?c.numberOfPositions:null}}class ty{constructor(c=new cr){this.jobService=c}async getDetail(c,u){if(u)try{const r=await this.jobService.getJobNetJobDetail(c);return Eh(r)}catch{const r=await this.jobService.getJobDetail(c);return wh(c,r)}try{const r=await this.jobService.getJobDetail(c);return wh(c,r)}catch{const r=await this.jobService.getJobNetJobDetail(c);return Eh(r)}}async toggleBookmark(c,u,r){const m=u?"star":"arbejd.com";await this.jobService.bookmarkJobV2(c,r,m)}async markAsApplied(c,u){if(u){await this.jobService.toggleApplyJobnetjob(c,!0);return}await this.jobService.applyJob(c)}}function ay(d){return d.trim().slice(0,1).toUpperCase()||"A"}function Wu(d){if(!d)return"Ikke angivet";const c=new Date(d);return Number.isNaN(c.getTime())?d:new Intl.DateTimeFormat("da-DK",{day:"2-digit",month:"short",year:"numeric"}).format(c)}function ly(d){if(!d.trim())return"";if(typeof window>"u")return d;const u=new DOMParser().parseFromString(d,"text/html");u.querySelectorAll("script, style, iframe, object, embed, link, meta").forEach(r=>r.remove());for(const r of Array.from(u.body.querySelectorAll("*")))for(const m of Array.from(r.attributes)){const v=m.name.toLowerCase(),Y=m.value.trim().toLowerCase();if(v.startsWith("on")){r.removeAttribute(m.name);continue}if((v==="href"||v==="src")&&Y.startsWith("javascript:")){r.removeAttribute(m.name);continue}(v==="style"||v==="srcdoc")&&r.removeAttribute(m.name)}return u.body.innerHTML}function ny(d){return d.isFullTime===!0?"Fuldtid":d.isFullTime===!1?"Deltid":d.workTimes.length>0?"Fleksibel arbejdstid":"Ikke oplyst"}function iy({fromJobnet:d,jobId:c,onBack:u,onLogout:r,onNavigate:m,onToggleTheme:v,theme:U}){const Y=C.useMemo(()=>new ty,[]),R=C.useMemo(()=>new bs,[]),[b,V]=C.useState({name:"Lasse"}),[T,q]=C.useState(null),[Q,ee]=C.useState(!0),[B,re]=C.useState(""),[oe,ge]=C.useState(!1),[K,ne]=C.useState(!1),[se,Z]=C.useState(!1),[D,fe]=C.useState(!1);C.useEffect(()=>{let J=!0;async function ae(){ee(!0),re("");const[P,W]=await Promise.allSettled([R.getCandidateProfile(),Y.getDetail(c,d)]);J&&(P.status==="fulfilled"&&V(P.value),W.status==="fulfilled"?(q(W.value),ge(!!W.value.isSaved),ne(!!W.value.isApplied)):(q(null),re("Kunne ikke hente jobdetaljer. Proev igen.")),ee(!1))}return ae(),()=>{J=!1}},[Y,d,c,R]);async function je(){if(!(!T||se)){Z(!0);try{await Y.toggleBookmark(T.id,T.fromJobnet,!oe),ge(J=>!J)}finally{Z(!1)}}}async function Se(){if(!(!T||K||D)){fe(!0);try{await Y.markAsApplied(T.id,T.fromJobnet),ne(!0)}finally{fe(!1)}}}const H=C.useMemo(()=>ly(T?.description??""),[T?.description]);return n.jsxs("section",{className:`dash-root ${U==="dark"?"theme-dark":""}`,children:[n.jsx("div",{className:"dash-orb dash-orb-1"}),n.jsx("div",{className:"dash-orb dash-orb-2"}),n.jsx("div",{className:"dash-orb dash-orb-3"}),n.jsx(ia,{active:"jobs",onNavigate:m}),n.jsxs("main",{className:"dash-main custom-scrollbar",children:[n.jsx(sa,{name:b.name,imageUrl:b.imageUrl,onLogout:r,theme:U,onToggleTheme:v}),n.jsx("div",{className:"job-detail-back-row",children:n.jsxs("button",{type:"button",className:"job-detail-back-btn",onClick:u,children:[n.jsx(Bh,{size:15,strokeWidth:1.8}),n.jsx("span",{children:"Tilbage til jobs"})]})}),Q?n.jsx("p",{className:"dash-loading",children:"Indlaeser jobdetaljer..."}):null,!Q&&B?n.jsx("p",{className:"dash-loading",children:B}):null,!Q&&T?n.jsxs(n.Fragment,{children:[n.jsxs("div",{className:"job-detail-header",children:[n.jsx("div",{className:"job-detail-logo-wrap",children:T.logoUrl?n.jsx("img",{src:T.logoUrl,alt:T.companyName,className:"job-detail-logo-image"}):n.jsx("div",{className:"job-detail-logo-fallback",children:ay(T.companyName)})}),n.jsxs("div",{className:"job-detail-heading",children:[n.jsx("h1",{children:T.title||"Jobdetaljer"}),n.jsxs("div",{className:"job-detail-meta",children:[n.jsxs("span",{children:[n.jsx(Iu,{size:14,strokeWidth:1.8})," ",T.companyName||"Virksomhed"]}),n.jsxs("span",{children:[n.jsx(Yn,{size:14,strokeWidth:1.8})," ",T.address||"Lokation ikke angivet"]}),n.jsxs("span",{children:[n.jsx(Pu,{size:14,strokeWidth:1.8})," ",ny(T)]})]})]})]}),n.jsxs("div",{className:"job-detail-grid",children:[n.jsxs("section",{className:"job-detail-main-card dash-card",children:[n.jsxs("div",{className:"job-detail-section",children:[n.jsx("h2",{children:"Om rollen"}),H?n.jsx("div",{className:"job-detail-rich-html",dangerouslySetInnerHTML:{__html:H}}):n.jsx("p",{children:"Ingen jobbeskrivelse er tilgaengelig endnu."})]}),n.jsxs("div",{className:"job-detail-section",children:[n.jsx("h3",{children:"Jobinformation"}),n.jsxs("div",{className:"job-detail-info-grid",children:[n.jsxs("div",{children:[n.jsx("span",{children:"Ansøgningsfrist"}),n.jsx("strong",{children:Wu(T.applicationDeadline)})]}),n.jsxs("div",{children:[n.jsx("span",{children:"Opslået"}),n.jsx("strong",{children:Wu(T.datePosted)})]}),n.jsxs("div",{children:[n.jsx("span",{children:"Startdato"}),n.jsx("strong",{children:Wu(T.employmentDate)})]}),n.jsxs("div",{children:[n.jsx("span",{children:"Stillinger"}),n.jsx("strong",{children:T.numberOfPositions??"Ikke angivet"})]}),n.jsxs("div",{children:[n.jsx("span",{children:"Kontaktperson"}),n.jsx("strong",{children:T.contactName||"Ikke angivet"})]}),n.jsxs("div",{children:[n.jsx("span",{children:"Kilde"}),n.jsx("strong",{children:T.fromJobnet?"Jobnet":"Arbejd.com"})]})]})]})]}),n.jsxs("aside",{className:"job-detail-side-col",children:[n.jsxs("article",{className:"dash-card job-detail-actions-card",children:[n.jsx("h2",{children:"Handlinger"}),n.jsxs("button",{type:"button",className:"job-detail-action-primary",children:[n.jsxs("span",{children:[n.jsx(Gn,{size:16,strokeWidth:1.8})," Generer ansøgning"]}),n.jsx($a,{size:14,strokeWidth:1.8})]}),n.jsxs("button",{type:"button",className:"job-detail-action-secondary",children:[n.jsxs("span",{children:[n.jsx(Tv,{size:16,strokeWidth:1.8})," Simuler jobsamtale"]}),n.jsx($a,{size:14,strokeWidth:1.8})]}),n.jsx("div",{className:"job-detail-action-divider"}),n.jsxs("button",{type:"button",className:"job-detail-text-action",onClick:()=>{je()},disabled:se,children:[n.jsx(lp,{size:16,strokeWidth:1.8}),oe?"Fjern fra gemte jobs":"Gem job"]}),n.jsxs("button",{type:"button",className:"job-detail-text-action",children:[n.jsx(ps,{size:16,strokeWidth:1.8}),"Del via email"]}),T.websiteUrl?n.jsxs("a",{href:T.websiteUrl,target:"_blank",rel:"noreferrer",className:"job-detail-text-action link",children:[n.jsx(gs,{size:16,strokeWidth:1.8}),"Åbn på nettet"]}):null,n.jsxs("button",{type:"button",className:K?"job-detail-text-action success is-done":"job-detail-text-action success",onClick:()=>{Se()},disabled:K||D,children:[n.jsx(tt,{size:16,strokeWidth:1.8}),K?"Markeret som søgt":"Marker som søgt"]})]}),n.jsxs("article",{className:"dash-card job-detail-company-card",children:[n.jsx("h3",{children:"Om virksomheden"}),n.jsxs("div",{className:"job-detail-company-list",children:[n.jsxs("div",{children:[n.jsx("span",{children:"Virksomhed"}),n.jsx("strong",{children:T.hiringCompanyName||T.companyName||"Ukendt"})]}),n.jsxs("div",{children:[n.jsx("span",{children:"Stilling"}),n.jsx("strong",{children:T.occupationName||"Ikke angivet"})]}),n.jsxs("div",{children:[n.jsx("span",{children:"Website"}),n.jsx("strong",{children:T.websiteUrl||"Ikke angivet"})]})]})]})]})]})]}):null]})]})}const Uh=[2,4,6,8,10,12,24],sy=[{id:"job-1",title:"Senior Frontend-udvikler",companyName:"Lunar",occupationName:"Frontend",descriptionIntro:"Vi søger en erfaren frontend-udvikler til at lede vores nye team.",address:"Kobenhavn",time:"",applicationDeadline:"",candidateDistance:5,logoUrl:"",companyLogoImage:"",fromJobnet:!1,isSaved:!1,matchPercent:98},{id:"job-2",title:"UX/UI Designer (Deltid)",companyName:"Pleo",occupationName:"Design",descriptionIntro:"Hjælp os med at skabe brugervenlige flows for vores expense management platform.",address:"Kobenhavn",time:"",applicationDeadline:"",candidateDistance:12,logoUrl:"",companyLogoImage:"",fromJobnet:!1,isSaved:!1,matchPercent:95},{id:"job-3",title:"React-udvikler",companyName:"Zendesk",occupationName:"Frontend",descriptionIntro:"Bliv en del af vores kerne-team i Kobenhavn og byg software i topklasse.",address:"Kobenhavn",time:"",applicationDeadline:"",candidateDistance:2,logoUrl:"",companyLogoImage:"",fromJobnet:!1,isSaved:!1,matchPercent:89},{id:"job-4",title:"Full Stack Web-udvikler",companyName:"Trustpilot",occupationName:"Full stack",descriptionIntro:"Vi leder efter en passioneret Full Stack Developer (Node.js/React).",address:"Remote",time:"",applicationDeadline:"",candidateDistance:null,logoUrl:"",companyLogoImage:"",fromJobnet:!1,isSaved:!1,matchPercent:85},{id:"job-5",title:"Frontend-arkitekt",companyName:"Novo Nordisk",occupationName:"Frontend",descriptionIntro:"Vær med til at designe arkitekturen for interne medicinske data-platforme.",address:"Bagsvaerd",time:"",applicationDeadline:"",candidateDistance:18,logoUrl:"",companyLogoImage:"",fromJobnet:!1,isSaved:!1,matchPercent:72},{id:"job-6",title:"Product Designer",companyName:"Podimo",occupationName:"Design",descriptionIntro:"Vi mangler en skarp Product Designer til at forme fremtidens lytteoplevelse.",address:"Kobenhavn",time:"",applicationDeadline:"",candidateDistance:3,logoUrl:"",companyLogoImage:"",fromJobnet:!1,isSaved:!1,matchPercent:68}];function cy(d){return d.trim().slice(0,1).toUpperCase()||"A"}function Oh(d){return d.address.toLowerCase().includes("remote")?"Remote":typeof d.candidateDistance=="number"?`${Math.max(0,Math.round(d.candidateDistance))} km vaek`:d.address||"Lokation ikke angivet"}function uy(d){return d.companyLogoImage||d.logoUrl||""}function Lh({item:d}){const[c,u]=C.useState(!1),r=uy(d);return r.length>0&&!c?n.jsx("div",{className:"jobs-card-logo jobs-card-logo-image-wrap",children:n.jsx("img",{src:r,alt:d.companyName||"Virksomhed",className:"jobs-card-logo-image",onError:()=>u(!0)})}):n.jsx("div",{className:"jobs-card-logo",children:cy(d.companyName)})}function ry(d){return d.workTypePartTime?"deltid":"fast"}function oy({onLogout:d,onNavigate:c,onOpenJobDetail:u,onToggleTheme:r,theme:m}){const v=C.useMemo(()=>new bs,[]),[U,Y]=C.useState({name:"Lasse"}),[R,b]=C.useState(""),[V,T]=C.useState("sidebar"),[q,Q]=C.useState("fast"),[ee,B]=C.useState(15),[re,oe]=C.useState(24),[ge,K]=C.useState(["Frontend-udvikler","UX/UI Designer"]),[ne,se]=C.useState(""),[Z,D]=C.useState([]),[fe,je]=C.useState(!0),[Se,H]=C.useState(6),J=C.useCallback(async()=>{try{const h=await v.getTabItems("jobs");D(h),H(6)}catch{D([]),H(6)}},[v]);C.useEffect(()=>{let h=!0;async function x(){try{const E=await v.getSavedFilter();if(!h)return;Q(ry(E)),B(E.workDistance??15),oe(E.partTimeHours??24),b(E.distanceCenterName??"")}catch{}if(await J(),h){const E=await v.getCandidateProfile();h&&Y(E),je(!1)}}return x(),()=>{h=!1}},[J,v]);async function ae(){const h={escoIds:[],workTypePermanent:q==="fast",workTypePartTime:q==="deltid",workDistance:ee,partTimeHours:q==="deltid"?re:null,distanceCenterName:R,latitude:null,longitude:null};je(!0);try{const x=await v.applyFiltersAndGetJobs(h,{searchText:R,desiredTitles:ge});D(x),H(6)}catch{D([]),H(6)}je(!1)}const P=Z.length>0?Z:sy,W=P.slice(0,Math.min(Se,P.length)),k=Seh==="sidebar"?"top":"sidebar")}function O(h){K(x=>x.filter(E=>E!==h))}function I(h){const x=h.trim();x&&(K(E=>E.includes(x)?E:[...E,x]),se(""))}function ue(){H(h=>Math.min(h+6,P.length))}return n.jsxs("section",{className:`dash-root ${m==="dark"?"theme-dark":""}`,children:[n.jsx("div",{className:"dash-orb dash-orb-1"}),n.jsx("div",{className:"dash-orb dash-orb-2"}),n.jsx("div",{className:"dash-orb dash-orb-3"}),n.jsx(ia,{active:"jobs",onNavigate:c}),n.jsxs("main",{className:"dash-main custom-scrollbar",children:[n.jsx(sa,{name:U.name,imageUrl:U.imageUrl,onLogout:d,theme:m,onToggleTheme:r,actions:n.jsxs("button",{type:"button",className:"jobs-layout-toggle",onClick:_,children:[V==="sidebar"?n.jsx(Kh,{size:16,strokeWidth:1.8}):n.jsx(Zh,{size:16,strokeWidth:1.8}),n.jsx("span",{children:V==="sidebar"?"Top-layout":"Side-layout"})]})}),n.jsxs("div",{className:"jobs-page-head",children:[n.jsx("h1",{children:"Find dit naeste job"}),n.jsx("p",{children:"Sog og filtrer for at finde det perfekte match til din profil."})]}),V==="sidebar"?n.jsxs("div",{className:"jobs-grid",children:[n.jsxs("aside",{className:"jobs-filter dash-card",children:[n.jsxs("h2",{children:[n.jsx(Iu,{size:18,strokeWidth:1.8})," Filtre"]}),n.jsxs("div",{className:"jobs-filter-block",children:[n.jsx("label",{children:"Sog jobtitel eller virksomhed"}),n.jsxs("div",{className:"jobs-search-wrap",children:[n.jsx(nr,{size:16,strokeWidth:1.8}),n.jsx("input",{type:"text",placeholder:"F.eks. Frontend Udvikler...",value:R,onChange:h=>b(h.target.value)})]})]}),n.jsxs("div",{className:"jobs-filter-block",children:[n.jsx("label",{children:"Onskede jobtitler"}),n.jsxs("div",{className:"jobs-title-picker",children:[n.jsxs("div",{className:"jobs-title-input-wrap",children:[ge.map(h=>n.jsxs("span",{className:"jobs-title-chip",children:[h,n.jsx("button",{type:"button",onClick:()=>O(h),"aria-label":`Fjern ${h}`,children:n.jsx(kh,{size:12,strokeWidth:2})})]},h)),n.jsx("input",{type:"text",value:ne,onChange:h=>se(h.target.value),onKeyDown:h=>{h.key==="Enter"&&(h.preventDefault(),I(ne))},placeholder:"Sog og tilfoj flere jobtitler..."})]}),n.jsxs("div",{className:"jobs-title-suggestions",children:[n.jsxs("button",{type:"button",className:"jobs-title-option active",onClick:()=>I("Frontend-udvikler"),children:[n.jsx("span",{children:"Frontend-udvikler"}),n.jsx(tt,{size:16,strokeWidth:1.8})]}),n.jsx("button",{type:"button",className:"jobs-title-option",onClick:()=>I("Backend-udvikler"),children:n.jsx("span",{children:"Backend-udvikler"})}),n.jsx("button",{type:"button",className:"jobs-title-option",onClick:()=>I("Full Stack-udvikler"),children:n.jsx("span",{children:"Full Stack-udvikler"})}),n.jsxs("button",{type:"button",className:"jobs-title-option active",onClick:()=>I("UX/UI Designer"),children:[n.jsx("span",{children:"UX/UI Designer"}),n.jsx(tt,{size:16,strokeWidth:1.8})]}),n.jsx("button",{type:"button",className:"jobs-title-option",onClick:()=>I("Product Manager"),children:n.jsx("span",{children:"Product Manager"})})]})]})]}),n.jsx("div",{className:"jobs-separator"}),n.jsxs("div",{className:"jobs-filter-block",children:[n.jsx("label",{children:"Ansaettelsestype"}),n.jsxs("div",{className:"jobs-radio-grid",children:[n.jsx("button",{type:"button",className:q==="fast"?"jobs-radio-btn active":"jobs-radio-btn",onClick:()=>Q("fast"),children:"Fast (Fuldtid)"}),n.jsx("button",{type:"button",className:q==="deltid"?"jobs-radio-btn active":"jobs-radio-btn",onClick:()=>Q("deltid"),children:"Deltid"})]})]}),n.jsxs("div",{className:"jobs-filter-block jobs-range-block",children:[n.jsxs("div",{className:"jobs-range-head",children:[n.jsx("label",{children:"Maks. afstand"}),n.jsxs("span",{children:[ee," km"]})]}),n.jsx("input",{type:"range",min:0,max:50,value:ee,onChange:h=>B(Number(h.target.value))}),n.jsxs("div",{className:"jobs-range-labels",children:[n.jsx("span",{children:"0 km"}),n.jsx("span",{children:"50+ km"})]})]}),n.jsx("div",{className:"jobs-separator"}),n.jsxs("div",{className:"jobs-filter-block",children:[n.jsx("label",{children:"Timer (ved deltid)"}),n.jsx("p",{children:"Vaelg onsket timeantal pr. uge"}),n.jsx("div",{className:"jobs-hours-grid",children:Uh.map(h=>n.jsx("button",{type:"button",className:re===h?"jobs-hour-btn active":"jobs-hour-btn",onClick:()=>oe(h),children:h},h))})]}),n.jsx("button",{type:"button",className:"jobs-apply-btn",onClick:()=>{ae()},children:"Opdater resultater"})]}),n.jsxs("section",{className:"jobs-content",children:[n.jsxs("div",{className:"jobs-content-head",children:[n.jsx("h2",{children:"Seneste jobs"}),n.jsxs("span",{children:["Viser ",Z.length>0?Z.length:142," resultater"]})]}),fe?n.jsx("p",{className:"dash-loading",children:"Indlaeser jobs..."}):null,n.jsx("div",{className:"jobs-cards",children:W.map(h=>n.jsxs("article",{className:"jobs-card",role:"button",tabIndex:0,onClick:()=>u(h.id,h.fromJobnet,"jobs"),onKeyDown:x=>{(x.key==="Enter"||x.key===" ")&&(x.preventDefault(),u(h.id,h.fromJobnet,"jobs"))},children:[n.jsx("div",{className:"jobs-card-top",children:n.jsx(Lh,{item:h})}),n.jsxs("div",{className:"jobs-card-title",children:[n.jsx("h3",{children:h.title||"Stilling"}),n.jsx("p",{children:h.companyName||"Virksomhed"})]}),n.jsx("p",{className:"jobs-card-description",children:h.descriptionIntro||"Beskrivelse er ikke tilgaengelig endnu."}),n.jsxs("div",{className:"jobs-card-bottom",children:[n.jsxs("div",{className:"jobs-card-distance",children:[h.address.toLowerCase().includes("remote")?n.jsx(lr,{size:15,strokeWidth:1.8}):n.jsx(Sh,{size:15,strokeWidth:1.8}),n.jsx("span",{children:Oh(h)})]}),n.jsx("button",{type:"button",className:"jobs-card-arrow","aria-label":"Se job",onClick:x=>{x.stopPropagation(),u(h.id,h.fromJobnet,"jobs")},children:n.jsx($a,{size:16,strokeWidth:1.8})})]})]},h.id))}),n.jsx("div",{className:"jobs-load-more-wrap",children:n.jsx("button",{type:"button",className:"jobs-load-more",onClick:ue,disabled:!k,children:k?"Indlaes flere jobs":"Alle jobs er vist"})})]})]}):n.jsxs("section",{className:"jobs-top-layout",children:[n.jsxs("div",{className:"jobs-top-filters dash-card",children:[n.jsxs("div",{className:"jobs-top-filter-title",children:[n.jsx(Iu,{size:18,strokeWidth:1.8}),n.jsx("h2",{children:"Filtre"})]}),n.jsxs("div",{className:"jobs-top-controls",children:[n.jsxs("div",{className:"jobs-filter-block no-margin",children:[n.jsx("label",{children:"Sog noegleord eller virksomhed"}),n.jsxs("div",{className:"jobs-search-wrap",children:[n.jsx(nr,{size:16,strokeWidth:1.8}),n.jsx("input",{type:"text",placeholder:"F.eks. Lunar, React...",value:R,onChange:h=>b(h.target.value)})]})]}),n.jsxs("div",{className:"jobs-filter-block no-margin",children:[n.jsx("label",{children:"Ansaettelsestype"}),n.jsxs("div",{className:"jobs-radio-grid",children:[n.jsx("button",{type:"button",className:q==="fast"?"jobs-radio-btn active":"jobs-radio-btn",onClick:()=>Q("fast"),children:"Fast"}),n.jsx("button",{type:"button",className:q==="deltid"?"jobs-radio-btn active":"jobs-radio-btn",onClick:()=>Q("deltid"),children:"Deltid"})]})]}),n.jsxs("div",{className:"jobs-filter-block no-margin jobs-top-range",children:[n.jsxs("div",{className:"jobs-range-head",children:[n.jsx("label",{children:"Maks. afstand"}),n.jsxs("span",{children:[ee," km"]})]}),n.jsx("input",{type:"range",min:0,max:50,value:ee,onChange:h=>B(Number(h.target.value))})]}),n.jsx("button",{type:"button",className:"jobs-apply-btn jobs-top-apply",onClick:()=>{ae()},children:"Opdater resultater"})]}),n.jsxs("div",{className:"jobs-filter-block no-margin",children:[n.jsx("label",{children:"Onskede jobtitler"}),n.jsxs("div",{className:"jobs-title-picker",children:[n.jsxs("div",{className:"jobs-title-input-wrap",children:[ge.map(h=>n.jsxs("span",{className:"jobs-title-chip",children:[h,n.jsx("button",{type:"button",onClick:()=>O(h),"aria-label":`Fjern ${h}`,children:n.jsx(kh,{size:12,strokeWidth:2})})]},h)),n.jsx("input",{type:"text",value:ne,onChange:h=>se(h.target.value),onKeyDown:h=>{h.key==="Enter"&&(h.preventDefault(),I(ne))},placeholder:"Sog og tilfoj flere jobtitler..."})]}),n.jsxs("div",{className:"jobs-title-suggestions",children:[n.jsxs("button",{type:"button",className:"jobs-title-option active",onClick:()=>I("Frontend-udvikler"),children:[n.jsx("span",{children:"Frontend-udvikler"}),n.jsx(tt,{size:16,strokeWidth:1.8})]}),n.jsx("button",{type:"button",className:"jobs-title-option",onClick:()=>I("Backend-udvikler"),children:n.jsx("span",{children:"Backend-udvikler"})}),n.jsx("button",{type:"button",className:"jobs-title-option",onClick:()=>I("Full Stack-udvikler"),children:n.jsx("span",{children:"Full Stack-udvikler"})}),n.jsxs("button",{type:"button",className:"jobs-title-option active",onClick:()=>I("UX/UI Designer"),children:[n.jsx("span",{children:"UX/UI Designer"}),n.jsx(tt,{size:16,strokeWidth:1.8})]}),n.jsx("button",{type:"button",className:"jobs-title-option",onClick:()=>I("Product Manager"),children:n.jsx("span",{children:"Product Manager"})})]})]})]}),n.jsx("div",{className:"jobs-separator top-margin"}),n.jsxs("div",{className:"jobs-hours-row",children:[n.jsxs("div",{children:[n.jsx("label",{children:"Timer (ved deltid)"}),n.jsx("p",{children:"Vaelg onsket timeantal pr. uge"})]}),n.jsx("div",{className:"jobs-hours-grid",children:Uh.map(h=>n.jsx("button",{type:"button",className:re===h?"jobs-hour-btn active":"jobs-hour-btn",onClick:()=>oe(h),children:h},h))})]})]}),n.jsxs("section",{className:"jobs-content",children:[n.jsxs("div",{className:"jobs-content-head",children:[n.jsx("h2",{children:"Seneste jobs"}),n.jsxs("span",{children:["Viser ",Z.length>0?Z.length:142," resultater"]})]}),fe?n.jsx("p",{className:"dash-loading",children:"Indlaeser jobs..."}):null,n.jsx("div",{className:"jobs-cards jobs-cards-top",children:W.map(h=>n.jsxs("article",{className:"jobs-card",role:"button",tabIndex:0,onClick:()=>u(h.id,h.fromJobnet,"jobs"),onKeyDown:x=>{(x.key==="Enter"||x.key===" ")&&(x.preventDefault(),u(h.id,h.fromJobnet,"jobs"))},children:[n.jsx("div",{className:"jobs-card-top",children:n.jsx(Lh,{item:h})}),n.jsxs("div",{className:"jobs-card-title",children:[n.jsx("h3",{children:h.title||"Stilling"}),n.jsx("p",{children:h.companyName||"Virksomhed"})]}),n.jsx("p",{className:"jobs-card-description",children:h.descriptionIntro||"Beskrivelse er ikke tilgaengelig endnu."}),n.jsxs("div",{className:"jobs-card-bottom",children:[n.jsxs("div",{className:"jobs-card-distance",children:[h.address.toLowerCase().includes("remote")?n.jsx(lr,{size:15,strokeWidth:1.8}):n.jsx(Sh,{size:15,strokeWidth:1.8}),n.jsx("span",{children:Oh(h)})]}),n.jsx("button",{type:"button",className:"jobs-card-arrow","aria-label":"Se job",onClick:x=>{x.stopPropagation(),u(h.id,h.fromJobnet,"jobs")},children:n.jsx($a,{size:16,strokeWidth:1.8})})]})]},h.id))}),n.jsx("div",{className:"jobs-load-more-wrap",children:n.jsx("button",{type:"button",className:"jobs-load-more",onClick:ue,disabled:!k,children:k?"Indlaes flere jobs":"Alle jobs er vist"})})]})]})]})]})}function ms(d){if(!d)return 0;const u=(d instanceof Date?d:new Date(d)).getTime();return Number.isNaN(u)?0:u}function im(d){if(!d)return"--:--";const c=d instanceof Date?d:new Date(d);return Number.isNaN(c.getTime())?"--:--":new Intl.DateTimeFormat("da-DK",{hour:"2-digit",minute:"2-digit"}).format(c)}function dy(d){if(!d)return"";const c=d instanceof Date?d:new Date(d);if(Number.isNaN(c.getTime()))return"";const u=new Date,r=1440*60*1e3,m=Math.floor((new Date(u.getFullYear(),u.getMonth(),u.getDate()).getTime()-new Date(c.getFullYear(),c.getMonth(),c.getDate()).getTime())/r);return m===0?im(c):m===1?"I går":new Intl.DateTimeFormat("da-DK",{day:"2-digit",month:"short"}).format(c)}function fy(d){const c=new Date,u=new Date(d.getFullYear(),d.getMonth(),d.getDate()),r=new Date(c.getFullYear(),c.getMonth(),c.getDate()),m=Math.floor((r.getTime()-u.getTime())/(1440*60*1e3));return m===0?"I dag":m===1?"I går":new Intl.DateTimeFormat("da-DK",{day:"2-digit",month:"short"}).format(d)}function Vn(d){return!d.fromCandidate&&!d.seen}function Rh(d){return d.allMessages.filter(Vn).length}function Rn(d){return d.companyLogoUrl||d.companyLogo||""}function hy(d){return{...d,allMessages:[...d.allMessages??[]].sort((c,u)=>ms(c.timeSent)-ms(u.timeSent))}}function Hh(){const d=new Date,c=new Date(d.getTime()-600*1e3),u=new Date(d.getTime()-7200*1e3),r=(U,Y,R,b,V)=>({threadId:U,text:Y,fromCandidate:R,timeSent:b,seen:V}),m=[r("thread-techcorp","Hej Lasse! Mange tak for din ansøgning.",!1,u),r("thread-techcorp","Mange tak, det lyder rigtig spændende.",!0,new Date(u.getTime()+1200*1e3),new Date(u.getTime()+1800*1e3)),r("thread-techcorp","Vi vil gerne invitere dig til samtale.",!1,c)],v=[r("thread-lunar","Mange tak for din opdaterede portefølje.",!1,new Date(d.getTime()-1560*60*1e3),new Date(d.getTime()-1500*60*1e3))];return[{id:"thread-techcorp",companyLogo:"",companyLogoUrl:"https://i.pravatar.cc/150?img=33",companyName:"TechCorp A/S",candidateFirstName:"Lasse",candidateLastName:"Hansen",candidateImage:"https://i.pravatar.cc/150?img=11",allMessages:m,latestMessage:m[m.length-1],title:"Frontend Udvikler",messagesLoaded:!0,jobPostingId:"job-1",jobPosting:void 0,isFromSupport:!1},{id:"thread-lunar",companyLogo:"",companyLogoUrl:"https://i.pravatar.cc/150?img=12",companyName:"Lunar Bank",candidateFirstName:"Lasse",candidateLastName:"Hansen",candidateImage:"https://i.pravatar.cc/150?img=11",allMessages:v,latestMessage:v[v.length-1],title:"Senior UX Designer",messagesLoaded:!0,jobPostingId:"job-2",jobPosting:void 0,isFromSupport:!1}]}function my({onLogout:d,onNavigate:c,onToggleTheme:u,theme:r}){const m=C.useMemo(()=>new nm,[]),[v,U]=C.useState("Lasse"),[Y,R]=C.useState(void 0),[b,V]=C.useState([]),[T,q]=C.useState(!0),[Q,ee]=C.useState(""),[B,re]=C.useState("all"),[oe,ge]=C.useState(""),[K,ne]=C.useState("");C.useEffect(()=>{let H=!0;async function J(){q(!0);try{const ae=await m.getCandidateProfile();H&&(U(ae.name),R(ae.imageUrl));const P=await m.getThreads();if(!H)return;const W=(P.length>0?P:Hh()).map(hy);V(W),ge(W[0]?.id||"")}catch{if(!H)return;const ae=Hh();V(ae),ge(ae[0]?.id||"")}finally{H&&q(!1)}}return J(),()=>{H=!1}},[m]);const se=C.useMemo(()=>{const H=Q.trim().toLowerCase();return b.filter(J=>B==="unread"&&Rh(J)===0||B==="companies"&&J.isFromSupport?!1:H?J.companyName.toLowerCase().includes(H)||(J.latestMessage?.text||"").toLowerCase().includes(H):!0)},[B,Q,b]),Z=C.useMemo(()=>b.find(H=>H.id===oe)||se[0],[oe,se,b]),D=C.useMemo(()=>[...Z?.allMessages||[]].sort((H,J)=>ms(H.timeSent)-ms(J.timeSent)),[Z]);async function fe(H){ge(H.id);const J=[...H.allMessages].reverse().find(ae=>Vn(ae));J?.id&&(m.markThreadReadByMessageId(J.id),V(ae=>ae.map(P=>P.id!==H.id?P:{...P,allMessages:P.allMessages.map(W=>Vn(W)?{...W,seen:new Date}:W)})))}async function je(){const H=b.flatMap(J=>J.allMessages).filter(J=>Vn(J)&&!!J.id);await Promise.all(H.map(J=>m.markThreadReadByMessageId(J.id))),V(J=>J.map(ae=>({...ae,allMessages:ae.allMessages.map(P=>Vn(P)?{...P,seen:new Date}:P)})))}async function Se(){const H=K.trim();if(!Z||!H)return;const J={threadId:Z.id,text:H,fromCandidate:!0,timeSent:new Date};ne(""),V(ae=>ae.map(P=>{if(P.id!==Z.id)return P;const W=[...P.allMessages,J];return{...P,allMessages:W,latestMessage:J}}));try{const ae=await m.sendMessage(Z.id,H);V(P=>P.map(W=>{if(W.id!==Z.id)return W;const _=[...W.allMessages.filter(O=>O!==J),ae];return{...W,allMessages:_,latestMessage:ae}}))}catch{}}return n.jsxs("section",{className:`dash-root ${r==="dark"?"theme-dark":""}`,children:[n.jsx("div",{className:"dash-orb dash-orb-1"}),n.jsx("div",{className:"dash-orb dash-orb-2"}),n.jsx("div",{className:"dash-orb dash-orb-3"}),n.jsx(ia,{active:"messages",onNavigate:c}),n.jsxs("main",{className:"dash-main custom-scrollbar msg-main",children:[n.jsx(sa,{name:v,imageUrl:Y,onLogout:d,theme:r,onToggleTheme:u}),n.jsxs("div",{className:"msg-head",children:[n.jsxs("div",{children:[n.jsx("h1",{children:"Beskeder"}),n.jsx("p",{children:"Kommuniker med virksomheder og hold styr på dine ansøgninger."})]}),n.jsxs("button",{type:"button",className:"msg-mark-btn",onClick:()=>{je()},children:[n.jsx(dp,{size:16,strokeWidth:1.8})," Marker alle som læst"]})]}),n.jsxs("div",{className:"msg-layout",children:[n.jsxs("section",{className:"msg-threads",children:[n.jsxs("div",{className:"msg-threads-head",children:[n.jsxs("div",{className:"msg-search-wrap",children:[n.jsx(nr,{size:16,strokeWidth:1.8}),n.jsx("input",{value:Q,onChange:H=>ee(H.target.value),type:"text",placeholder:"Søg i beskeder..."})]}),n.jsxs("div",{className:"msg-filter-row",children:[n.jsx("button",{type:"button",className:B==="all"?"active":"",onClick:()=>re("all"),children:"Alle"}),n.jsx("button",{type:"button",className:B==="unread"?"active":"",onClick:()=>re("unread"),children:"Ulæste"}),n.jsx("button",{type:"button",className:B==="companies"?"active":"",onClick:()=>re("companies"),children:"Virksomheder"})]})]}),n.jsxs("div",{className:"msg-thread-list custom-scrollbar",children:[T?n.jsx("p",{className:"dash-loading",children:"Indlaeser beskeder..."}):null,!T&&se.length===0?n.jsx("p",{className:"dash-loading",children:"Ingen tråde fundet."}):null,se.map(H=>{const J=Rh(H),ae=Z?.id===H.id,P=Rn(H);return n.jsxs("button",{type:"button",className:ae?"msg-thread-item active":"msg-thread-item",onClick:()=>{fe(H)},children:[n.jsxs("div",{className:"msg-thread-avatar-wrap",children:[P?n.jsx("img",{src:P,alt:H.companyName,className:"msg-thread-avatar"}):n.jsx("div",{className:"msg-thread-avatar-fallback",children:H.companyName.slice(0,1).toUpperCase()}),n.jsx("span",{className:"msg-thread-online"})]}),n.jsxs("div",{className:"msg-thread-content",children:[n.jsxs("div",{className:"msg-thread-row",children:[n.jsx("h3",{children:H.companyName}),n.jsx("span",{children:dy(H.latestMessage?.timeSent)})]}),n.jsx("p",{className:J>0?"unread":"",children:H.latestMessage?.text||"Ingen beskeder endnu"}),n.jsx("small",{children:H.title||"Stilling"})]}),J>0?n.jsx("div",{className:"msg-thread-unread",children:J}):null]},H.id)})]})]}),n.jsxs("section",{className:"msg-chat",children:[n.jsx("div",{className:"msg-chat-head",children:Z?n.jsxs(n.Fragment,{children:[n.jsxs("div",{className:"msg-chat-company",children:[Rn(Z)?n.jsx("img",{src:Rn(Z),alt:Z.companyName,className:"msg-chat-avatar"}):n.jsx("div",{className:"msg-chat-avatar-fallback",children:Z.companyName.slice(0,1).toUpperCase()}),n.jsxs("div",{children:[n.jsx("h2",{children:Z.companyName}),n.jsx("p",{children:Z.title||"Rekruttering"})]})]}),n.jsxs("div",{className:"msg-chat-actions",children:[n.jsx("button",{type:"button","aria-label":"Ring",children:n.jsx(gv,{size:16,strokeWidth:1.8})}),n.jsx("button",{type:"button","aria-label":"Info",children:n.jsx(Jp,{size:16,strokeWidth:1.8})})]})]}):n.jsx("h2",{children:"Vælg en samtale"})}),n.jsx("div",{className:"msg-chat-body custom-scrollbar",children:D.map((H,J)=>{const ae=H.timeSent instanceof Date?H.timeSent:new Date(H.timeSent),P=J>0?D[J-1]:void 0,W=P?.timeSent instanceof Date?P.timeSent:P?.timeSent?new Date(P.timeSent):void 0,k=!W||ae.toDateString()!==W.toDateString();return n.jsxs("div",{children:[k?n.jsx("div",{className:"msg-day-sep",children:fy(ae)}):null,n.jsxs("div",{className:H.fromCandidate?"msg-bubble-row mine":"msg-bubble-row",children:[H.fromCandidate?null:Rn(Z)?n.jsx("img",{src:Rn(Z),alt:Z.companyName,className:"msg-mini-avatar"}):n.jsx("div",{className:"msg-mini-avatar msg-mini-avatar-fallback",children:Z.companyName.slice(0,1).toUpperCase()}),n.jsxs("div",{className:"msg-bubble-wrap",children:[n.jsx("span",{className:"msg-time",children:im(H.timeSent)}),n.jsx("div",{className:H.fromCandidate?"msg-bubble mine":"msg-bubble",children:H.text})]})]})]},`${H.threadId}-${J}`)})}),n.jsx("div",{className:"msg-input-area",children:n.jsxs("div",{className:"msg-input-wrap",children:[n.jsx("button",{type:"button","aria-label":"Vedhæft",children:n.jsx(dv,{size:18,strokeWidth:1.8})}),n.jsx("textarea",{rows:1,value:K,onChange:H=>ne(H.target.value),onKeyDown:H=>{H.key==="Enter"&&!H.shiftKey&&(H.preventDefault(),Se())},placeholder:"Skriv din besked her..."}),n.jsx("button",{type:"button","aria-label":"Emoji",children:n.jsx(Hv,{size:18,strokeWidth:1.8})}),n.jsxs("button",{type:"button",className:"msg-send-btn",onClick:()=>{Se()},children:["Send ",n.jsx(wv,{size:15,strokeWidth:1.8})]})]})})]})]})]})]})}function sm(d){return typeof d=="object"&&d!==null?d:null}function ft(d){return typeof d=="string"?d:""}function Fu(d){return typeof d=="number"?d:null}function $u(d){if(typeof d=="boolean")return d;if(typeof d=="string"){const c=d.toLowerCase();if(c==="completed"||c==="done"||c==="true")return!0;if(c==="incomplete"||c==="pending"||c==="false")return!1}return null}function gy(d){if(!d)return"";const c=new Date(d);return Number.isNaN(c.getTime())?"":new Intl.DateTimeFormat("da-DK",{day:"2-digit",month:"short",year:"numeric"}).format(c)}function py(d,c){const u=sm(d);if(!u)return null;const r=ft(u.id)||ft(u.interview_id)||`interview-${c}`,m=ft(u.job_name)||ft(u.job_title)||ft(u.title)||"Interview",v=ft(u.company_name)||ft(u.companyName)||"Ukendt virksomhed",U=ft(u.interview_date)||ft(u.created_at)||ft(u.updated_at)||ft(u.date),Y=$u(u.is_completed)??$u(u.completed)??$u(u.status)??!0,R=Fu(u.duration_minutes)??Fu(u.duration)??Fu(u.length_minutes),b=ft(u.personality_name)||ft(u.simulation_personality_name)||ft(u.personality)||"Professionel";return{id:r,title:m,companyName:v,dateLabel:gy(U),completed:Y,durationMinutes:R,personality:b}}class vy{constructor(c=new bs,u=new lm){this.jobsViewModel=c,this.simulationService=u}async getCandidateProfile(){return this.jobsViewModel.getCandidateProfile()}async getJobs(){try{return await this.jobsViewModel.getTabItems("jobs")}catch{return[]}}async getPersonalities(){try{const c=await this.simulationService.listSimulationPersonalities();return Array.isArray(c)?c:[]}catch{return[]}}async getInterviews(c=12){try{const u=await this.simulationService.listInterviews(c,0),r=sm(u);return(Array.isArray(r?.interviews)?r.interviews:Array.isArray(u)?u:[]).map((v,U)=>py(v,U)).filter(v=>!!v)}catch{return[]}}}const yy=[{id:"sim-1",title:"Senior Frontend-udvikler",companyName:"Lunar",completed:!0,durationMinutes:15,personality:"Professionel",dateLabel:"12. okt 2023"},{id:"sim-2",title:"Fullstack Developer",companyName:"Pleo",completed:!1,durationMinutes:20,personality:"Afslappet",dateLabel:"10. okt 2023"},{id:"sim-3",title:"UX Designer",companyName:"Trustpilot",completed:!0,durationMinutes:10,personality:"Sarkastisk",dateLabel:"05. okt 2023"},{id:"sim-4",title:"Product Manager",companyName:"Danske Bank",completed:!0,durationMinutes:5,personality:"Stress-test",dateLabel:"01. okt 2023"}];function by(d){return{id:d.id,title:d.title,companyName:d.companyName,completed:d.completed,durationMinutes:d.durationMinutes??15,personality:d.personality||"Professionel",dateLabel:d.dateLabel||"Nyligt"}}function jy(d){return`${d.title||"Stilling"}${d.companyName?` · ${d.companyName}`:""}`}function xy({onLogout:d,onNavigate:c,onToggleTheme:u,theme:r}){const m=C.useMemo(()=>new vy,[]),[v,U]=C.useState("Lasse"),[Y,R]=C.useState(void 0),[b,V]=C.useState([]),[T,q]=C.useState([]),[Q,ee]=C.useState([]),[B,re]=C.useState(!0),[oe,ge]=C.useState(""),[K,ne]=C.useState(""),[se,Z]=C.useState("Dansk"),[D,fe]=C.useState("15"),[je,Se]=C.useState(!1);C.useEffect(()=>{let _=!0;async function O(){re(!0);const[I,ue,h,x]=await Promise.all([m.getCandidateProfile(),m.getJobs(),m.getInterviews(),m.getPersonalities()]);_&&(U(I.name),R(I.imageUrl),V(ue),q(h.map(by)),ee(x.map(E=>({id:E.id,name:E.name}))),ue.length>0&&ge(E=>E||ue[0].id),x.length>0&&ne(E=>E||String(x[0].id)),re(!1))}return O(),()=>{_=!1}},[m]);const H=T.length>0?T:yy,J={id:"fallback-job",title:"Senior Frontend-udvikler",companyName:"Lunar"},ae=b.length>0?b:[J],P=ae.find(_=>_.id===oe)||ae[0],W=Q.find(_=>String(_.id)===K)?.name||"Professionel & Grundig",k=[{id:"ai-1",sender:"ai",text:`Hej Lasse, og velkommen til! Vi er rigtig glade for at have dig til samtalen omkring rollen som ${P.title||"Senior Frontend-udvikler"}. Kan du fortælle om et nyligt projekt, hvor din erfaring med React gjorde en stor forskel for slutresultatet?`},{id:"me-1",sender:"me",text:"I mit seneste projekt migrerede vi en stor dashboard-løsning til Next.js. Jeg implementerede virtualisering og strammere state management med Zustand, hvilket reducerede load-tid med over 60%."},{id:"ai-2",sender:"ai",text:"Det lyder som en rigtig solid forbedring. Når du nævner Zustand frem for Redux, hvad var overvejelserne bag det valg i jeres use-case?"}];return n.jsxs("section",{className:`dash-root ${r==="dark"?"theme-dark":""}`,children:[n.jsx("div",{className:"dash-orb dash-orb-1"}),n.jsx("div",{className:"dash-orb dash-orb-2"}),n.jsx("div",{className:"dash-orb dash-orb-3"}),n.jsx(ia,{active:"simulator",onNavigate:c}),n.jsxs("main",{className:"dash-main custom-scrollbar sim-main",children:[n.jsx(sa,{name:v,imageUrl:Y,onLogout:d,theme:r,onToggleTheme:u,actions:je?n.jsxs("button",{type:"button",className:"sim-leave-btn",onClick:()=>Se(!1),children:[n.jsx(Bh,{size:15,strokeWidth:1.8}),n.jsx("span",{children:"Forlad simulering"})]}):void 0}),je?n.jsxs("div",{className:"sim-live-wrap",children:[n.jsxs("div",{className:"sim-live-head",children:[n.jsx("h1",{children:"Live Jobsamtale"}),n.jsx("p",{children:"Du er i øjeblikket i en simuleret teknisk samtale. Brug mikrofonen til at svare."})]}),n.jsxs("div",{className:"sim-live-grid",children:[n.jsxs("section",{className:"sim-live-chat-card",children:[n.jsxs("div",{className:"sim-live-chat-head",children:[n.jsxs("div",{className:"sim-live-ai-row",children:[n.jsx("div",{className:"sim-live-ai-avatar",children:n.jsx(Hl,{size:18,strokeWidth:1.8})}),n.jsxs("div",{children:[n.jsx("h3",{children:"Sarah (AI Interviewer)"}),n.jsxs("p",{children:[n.jsx(Av,{size:12,strokeWidth:1.8})," Venter på dit svar..."]})]})]}),n.jsx("button",{type:"button",className:"sim-live-more-btn",children:n.jsx(Mp,{size:16,strokeWidth:1.8})})]}),n.jsx("div",{className:"sim-live-chat-scroll custom-scrollbar",children:k.map(_=>n.jsxs("div",{className:_.sender==="ai"?"sim-live-msg-row ai":"sim-live-msg-row me",children:[n.jsx("div",{className:_.sender==="ai"?"sim-live-msg-avatar ai":"sim-live-msg-avatar me",children:_.sender==="ai"?n.jsx(Hl,{size:13,strokeWidth:1.8}):Y?n.jsx("img",{src:Y,alt:v}):n.jsx("span",{children:v.slice(0,1).toUpperCase()})}),n.jsx("div",{className:_.sender==="ai"?"sim-live-msg-bubble ai":"sim-live-msg-bubble me",children:n.jsx("p",{children:_.text})})]},_.id))}),n.jsxs("div",{className:"sim-live-voice",children:[n.jsxs("div",{className:"sim-live-time-row",children:[n.jsxs("div",{className:"sim-live-time",children:[n.jsx("small",{children:"Tid gået"}),n.jsx("strong",{children:"04:23"})]}),n.jsx("div",{className:"sim-live-wave",children:Array.from({length:7}).map((_,O)=>n.jsx("span",{style:{animationDelay:`${O*.14}s`}},`wave-${O}`))}),n.jsxs("div",{className:"sim-live-time",children:[n.jsx("small",{children:"Tilbage"}),n.jsx("strong",{children:"10:37"})]})]}),n.jsx("button",{type:"button",className:"sim-live-mic-btn",children:n.jsx(iv,{size:22,strokeWidth:1.8})}),n.jsx("p",{children:"Optager dit svar..."})]})]}),n.jsxs("aside",{className:"sim-live-side custom-scrollbar",children:[n.jsxs("article",{className:"sim-live-side-card",children:[n.jsx("h2",{children:"Session Status"}),n.jsxs("div",{className:"sim-live-side-list",children:[n.jsxs("div",{children:[n.jsx("small",{children:"Stilling"}),n.jsxs("p",{children:[P.title||"Senior Frontend-udvikler"," @ ",P.companyName||"Lunar"]})]}),n.jsxs("div",{children:[n.jsx("small",{children:"Samtaletype"}),n.jsxs("p",{children:[n.jsx(er,{size:14,strokeWidth:1.8})," Teknisk Dybde"]})]}),n.jsxs("div",{children:[n.jsx("small",{children:"Interviewer stil"}),n.jsxs("p",{children:[n.jsx(Hl,{size:14,strokeWidth:1.8})," ",W]})]}),n.jsxs("div",{children:[n.jsxs("div",{className:"sim-live-progress-head",children:[n.jsx("small",{children:"Fremgang"}),n.jsx("strong",{children:"Spørgsmål 2 af 5"})]}),n.jsx("div",{className:"sim-live-progress-track",children:n.jsx("span",{})})]})]})]}),n.jsxs("article",{className:"sim-live-coach-card",children:[n.jsxs("h2",{children:[n.jsx(Wp,{size:15,strokeWidth:1.8})," Live Coach"]}),n.jsxs("div",{className:"sim-live-coach-list",children:[n.jsxs("div",{children:[n.jsx(tt,{size:14,strokeWidth:1.8}),n.jsxs("div",{children:[n.jsx("strong",{children:"Godt brug af STAR-metoden"}),n.jsx("p",{children:"Dit forrige svar beskrev situationen og resultatet meget tydeligt."})]})]}),n.jsxs("div",{children:[n.jsx(vs,{size:14,strokeWidth:1.8}),n.jsxs("div",{children:[n.jsx("strong",{children:"Næste skridt"}),n.jsx("p",{children:"Uddyb hvorfor Zustand var bedre end Redux i jeres specifikke use-case."})]})]})]})]}),n.jsx("article",{className:"sim-live-side-card",children:n.jsxs("div",{className:"sim-live-actions",children:[n.jsxs("button",{type:"button",children:[n.jsx(vp,{size:16,strokeWidth:1.8})," Sæt på pause"]}),n.jsxs("button",{type:"button",className:"stop",children:[n.jsx(Np,{size:16,strokeWidth:1.8})," Afslut & Få Feedback"]})]})})]})]})]}):n.jsxs("div",{className:"sim-wrap",children:[n.jsxs("section",{className:"sim-hero-card",children:[n.jsx("div",{className:"sim-hero-glow"}),n.jsxs("div",{className:"sim-hero-left",children:[n.jsx("h1",{children:"Job Interview Simulator"}),n.jsx("p",{children:"Ov dig pa jobsamtaler med vores AI-drevne simulator. Du far skraeddersyede sporgsmal baseret pa den jobtype, du soger, og modtager detaljeret feedback pa dine svar."}),n.jsxs("ul",{className:"sim-benefits",children:[n.jsxs("li",{children:[n.jsx(tt,{size:16,strokeWidth:1.8})," Personaliserede interviewsporgsmal"]}),n.jsxs("li",{children:[n.jsx(tt,{size:16,strokeWidth:1.8})," Ojeblikkelig AI-feedback pa dine svar"]}),n.jsxs("li",{children:[n.jsx(tt,{size:16,strokeWidth:1.8})," Detaljeret evaluering efter interviewet"]}),n.jsxs("li",{children:[n.jsx(tt,{size:16,strokeWidth:1.8})," Gem og gennemga tidligere interviews"]})]}),n.jsxs("button",{type:"button",className:"sim-start-btn",onClick:()=>Se(!0),children:[n.jsx(bp,{size:18,strokeWidth:1.8}),"Start ny simulering"]})]}),n.jsxs("div",{className:"sim-config-card",children:[n.jsxs("div",{className:"sim-config-head",children:[n.jsx("h3",{children:"Simuleringsindstillinger"}),n.jsx("p",{children:"Vaelg dine praeferencer for start"})]}),n.jsxs("label",{children:["Gemt job",n.jsxs("div",{className:"sim-select-wrap",children:[n.jsx(sr,{size:16,strokeWidth:1.8}),n.jsx("select",{value:oe,onChange:_=>ge(_.target.value),children:ae.map(_=>n.jsx("option",{value:_.id,children:jy(_)},_.id))}),n.jsx(Hn,{size:15,strokeWidth:1.8,className:"sim-caret"})]})]}),n.jsxs("label",{children:["Personlighed (AI)",n.jsxs("div",{className:"sim-select-wrap",children:[n.jsx(Hl,{size:16,strokeWidth:1.8}),n.jsx("select",{value:K,onChange:_=>ne(_.target.value),children:(Q.length>0?Q:[{id:1,name:"Professionel & Grundig"}]).map(_=>n.jsx("option",{value:String(_.id),children:_.name},_.id))}),n.jsx(Hn,{size:15,strokeWidth:1.8,className:"sim-caret"})]})]}),n.jsxs("div",{className:"sim-mini-grid",children:[n.jsxs("label",{children:["Sprog",n.jsxs("div",{className:"sim-select-wrap",children:[n.jsx(gs,{size:16,strokeWidth:1.8}),n.jsxs("select",{value:se,onChange:_=>Z(_.target.value),children:[n.jsx("option",{children:"Dansk"}),n.jsx("option",{children:"Engelsk"})]}),n.jsx(Hn,{size:15,strokeWidth:1.8,className:"sim-caret"})]})]}),n.jsxs("label",{children:["Varighed",n.jsxs("div",{className:"sim-select-wrap",children:[n.jsx(Pu,{size:16,strokeWidth:1.8}),n.jsxs("select",{value:D,onChange:_=>fe(_.target.value),children:[n.jsx("option",{value:"5",children:"5 min"}),n.jsx("option",{value:"10",children:"10 min"}),n.jsx("option",{value:"15",children:"15 min"}),n.jsx("option",{value:"20",children:"20 min"})]}),n.jsx(Hn,{size:15,strokeWidth:1.8,className:"sim-caret"})]})]})]})]})]}),n.jsxs("div",{className:"sim-history-head",children:[n.jsx("h2",{children:"Tidligere simuleringer"}),n.jsxs("button",{type:"button",children:[n.jsx(Qh,{size:15,strokeWidth:1.8})," Filtrer"]})]}),B?n.jsx("p",{className:"dash-loading",children:"Indlaeser simuleringer..."}):null,n.jsx("section",{className:"sim-history-grid",children:H.map(_=>n.jsxs("article",{className:_.completed?"sim-card done":"sim-card draft",children:[n.jsxs("div",{className:"sim-card-head",children:[n.jsxs("div",{children:[n.jsx("h3",{children:_.title}),n.jsx("p",{children:_.companyName})]}),n.jsx("span",{className:_.completed?"sim-status done":"sim-status draft",children:_.completed?"Faerdig":"Ikke faerdig"})]}),n.jsxs("div",{className:"sim-tags",children:[n.jsxs("span",{children:[n.jsx(Pu,{size:13,strokeWidth:1.8})," ",_.durationMinutes," min"]}),n.jsxs("span",{children:[n.jsx(Hl,{size:13,strokeWidth:1.8})," ",_.personality]})]}),n.jsxs("div",{className:"sim-card-foot",children:[n.jsx("small",{children:_.dateLabel}),_.completed?n.jsxs("button",{type:"button",className:"sim-link-btn",children:["Se evaluering ",n.jsx($a,{size:14,strokeWidth:1.8})]}):n.jsxs("button",{type:"button",className:"sim-link-btn",children:["Fortsæt ",n.jsx(vv,{size:14,strokeWidth:1.8})]})]})]},_.id))})]})]})]})}class Sy{constructor(c=new Pa,u=new ys){this.candidateService=c,this.subscriptionService=u}async getCandidateProfile(){try{const c=await this.candidateService.getCandidate();return{name:c.firstName?.trim()||c.name?.trim()||"Lasse",imageUrl:c.imageUrl||c.image||void 0}}catch{return{name:"Lasse"}}}async getSnapshot(){const[c,u]=await Promise.allSettled([this.subscriptionService.getPaymentOverview(),this.subscriptionService.getSubscriptionProducts()]);return{paymentOverview:c.status==="fulfilled"?c.value:null,products:u.status==="fulfilled"?u.value:null}}async redeemCode(c){await this.subscriptionService.redeemCode(c)}}const Vh=["Download et professionelt CV - Klar til brug med et enkelt klik","Karriereagent med personlige anbefalinger","Øget synlighed – bliv fundet af virksomheder","Lad systemet lave din ansøgning for dig","Optimer dit CV med intelligente forslag","Job simulatoren – træn til din næste jobsamtale"];function cm(d){if(!d)return null;const c=d instanceof Date?d:new Date(d);return Number.isNaN(c.getTime())?null:c}function Ny(d){const c=cm(d);return c?new Intl.DateTimeFormat("da-DK",{day:"2-digit",month:"2-digit",year:"numeric"}).format(c):"Ukendt dato"}function ky(d){if(!d)return!1;const c=cm(d.activeToDate);return c?c.getTime()>Date.now():!1}function Ay(d){const c=d?.premium_30?.price??49,u=d?.premium_90?.price??99,r=d?.premium_365?.price??249;return{30:{title:"30 dage",priceText:`${c} kr.`,dailyText:"Svarer til 1.63 kr. pr. dag",description:"Månedlig adgang til alle premium-funktioner"},90:{title:"90 dage",priceText:`${u} kr.`,dailyText:"Svarer til 1.10 kr. pr. dag",savings:"Spar 33%",description:"Mest populære valg med ekstra besparelse"},365:{title:"365 dage",priceText:`${r} kr.`,dailyText:"Svarer til 0.68 kr. pr. dag",savings:"Spar 58%",description:"Inkluderer gavekode til 3 måneders premium"}}}function _y({onLogout:d,onNavigate:c,onToggleTheme:u,theme:r}){const m=C.useMemo(()=>new Sy,[]),[v,U]=C.useState("Lasse"),[Y,R]=C.useState(void 0),[b,V]=C.useState(null),[T,q]=C.useState(null),[Q,ee]=C.useState(!0),[B,re]=C.useState("90"),[oe,ge]=C.useState(!1),[K,ne]=C.useState(""),[se,Z]=C.useState(""),[D,fe]=C.useState(!1),[je,Se]=C.useState(null);C.useEffect(()=>{let W=!0;async function k(){ee(!0);const[_,O]=await Promise.all([m.getCandidateProfile(),m.getSnapshot()]);W&&(U(_.name),R(_.imageUrl),V(O.paymentOverview),q(O.products),ee(!1))}return k(),()=>{W=!1}},[m]);const H=C.useMemo(()=>Ay(T),[T]),J=ky(b),ae=je??J;async function P(){const W=K.trim();if(!(!W||D)){Z(""),fe(!0);try{await m.redeemCode(W),Z("Koden blev indløst. Opdaterer abonnement...");const k=await m.getSnapshot();V(k.paymentOverview),q(k.products),ne("")}catch{Z("Kunne ikke indløse kode. Prøv igen.")}finally{fe(!1)}}}return n.jsxs("section",{className:`dash-root ${r==="dark"?"theme-dark":""}`,children:[n.jsx("div",{className:"dash-orb dash-orb-1"}),n.jsx("div",{className:"dash-orb dash-orb-2"}),n.jsx("div",{className:"dash-orb dash-orb-3"}),n.jsx(ia,{active:"subscription",onNavigate:c}),n.jsxs("main",{className:"dash-main custom-scrollbar sub-main",children:[n.jsx(sa,{name:v,imageUrl:Y,onLogout:d,theme:r,onToggleTheme:u,actions:n.jsxs("div",{className:"sub-top-actions",children:[n.jsxs("div",{className:"sub-crumb-pill",children:[n.jsx(tr,{size:15,strokeWidth:1.8})," Abonnement"]}),n.jsx("button",{type:"button",className:"sub-toggle-btn",onClick:()=>Se(W=>W===null?!J:!W),children:ae?'Vis "Unsubscribed" state':'Vis "Subscribed" state'})]})}),n.jsxs("div",{className:"sub-head",children:[n.jsxs("div",{className:"sub-head-title-row",children:[n.jsx("div",{className:"sub-head-icon",children:n.jsx(tr,{size:18,strokeWidth:1.8})}),n.jsx("h1",{children:"Dit Abonnement"})]}),n.jsx("p",{children:"Administrer dit medlemskab og lås op for alle de intelligente værktøjer, der gør din jobsøgning nemmere."})]}),n.jsxs("div",{className:"sub-wrap",children:[n.jsxs("section",{className:"sub-redeem-card",children:[n.jsxs("div",{className:"sub-redeem-head",children:[n.jsx("span",{children:"🎟️"}),n.jsx("h2",{children:"Indløs kode"})]}),n.jsx("p",{children:"Har du en rabatkode eller gavekode? Indtast den her og få den aktiveret med det samme"}),n.jsxs("div",{className:"sub-redeem-row",children:[n.jsx("input",{type:"text",value:K,onChange:W=>ne(W.target.value),placeholder:"Indtast kode her..."}),n.jsx("button",{type:"button",onClick:()=>{P()},disabled:D,children:D?"Indløser...":"Indløs"})]}),se?n.jsx("small",{children:se}):null]}),Q?n.jsx("p",{className:"dash-loading",children:"Indlaeser abonnement..."}):null,!Q&&!ae?n.jsxs(n.Fragment,{children:[n.jsx("section",{className:"sub-plan-grid",children:["30","90","365"].map(W=>{const k=H[W],_=B===W,O=W==="90",I=W==="365";return n.jsxs("label",{className:["sub-plan-card",_?"selected":"",O?"popular":"",I?"yearly":""].join(" ").trim(),children:[O?n.jsx("div",{className:"sub-popular-badge",children:"Mest populær"}):null,n.jsx("input",{type:"radio",name:"pricing-plan",checked:_,onChange:()=>re(W)}),n.jsx("div",{className:"sub-radio-indicator",children:n.jsx("i",{})}),n.jsxs("div",{className:"sub-plan-content",children:[n.jsxs("div",{className:"sub-plan-title-row",children:[n.jsx("h3",{children:k.title}),k.savings?n.jsx("span",{children:k.savings}):null]}),n.jsx("div",{className:"sub-price",children:k.priceText}),n.jsx("p",{className:"sub-price-daily",children:k.dailyText}),I?n.jsxs("div",{className:"sub-gift-box",children:[n.jsx(Hp,{size:17,strokeWidth:1.8}),n.jsxs("div",{children:[n.jsx("strong",{children:"Giv en gave"}),n.jsx("small",{children:"Få en gratis 3-måneders Premium-kode med i købet til en ven."})]})]}):null,n.jsx("div",{className:"sub-divider"}),n.jsx("ul",{children:Vh.map(ue=>n.jsxs("li",{children:[n.jsx(tt,{size:15,strokeWidth:1.8}),n.jsx("span",{children:ue})]},`${W}-${ue}`))})]})]},W)})}),n.jsxs("section",{className:"sub-checkout-card",children:[n.jsxs("div",{children:[n.jsx("h3",{children:"Klar til at opgradere?"}),n.jsx("p",{children:"Vælg en plan ovenfor og få adgang til alle Premium-funktioner med det samme."})]}),n.jsxs("div",{className:"sub-checkout-actions",children:[n.jsxs("label",{children:[n.jsx("input",{type:"checkbox",checked:oe,onChange:W=>ge(W.target.checked)}),n.jsx("span",{className:"sub-checkbox",children:n.jsx(hp,{size:13,strokeWidth:2.2})}),n.jsx("span",{children:"Jeg accepterer handelsbetingelser"})]}),n.jsx("button",{type:"button",disabled:!oe,children:"Gå til betaling"})]})]})]}):null,!Q&&ae?n.jsxs("div",{className:"sub-active-wrap",children:[n.jsxs("section",{className:"sub-gift-alert",children:[n.jsx("div",{className:"sub-gift-glow"}),n.jsx("div",{className:"sub-gift-icon",children:"🎁"}),n.jsxs("div",{children:[n.jsx("h2",{children:"Din gave venter!"}),n.jsx("p",{children:"Klik på gaven nedenfor for at se indholdet"})]}),n.jsx("button",{type:"button",children:"Åbn gave"})]}),n.jsxs("section",{className:"sub-active-card",children:[n.jsxs("div",{className:"sub-active-head",children:[n.jsx("span",{children:"👑"}),n.jsx("h2",{children:"Premium abonnement"})]}),n.jsxs("div",{className:"sub-active-grid",children:[n.jsx("div",{className:"sub-active-features",children:n.jsx("ul",{children:Vh.map(W=>n.jsxs("li",{children:[n.jsx(tt,{size:16,strokeWidth:1.8}),n.jsx("span",{children:W})]},`active-${W}`))})}),n.jsxs("div",{className:"sub-active-status-col",children:[n.jsxs("div",{className:"sub-active-status-box",children:[n.jsx("div",{className:"sub-active-check",children:n.jsx(tt,{size:34,strokeWidth:1.8})}),n.jsx("h3",{children:"Dit abonnement er aktivt"}),n.jsxs("strong",{children:[H[B].priceText," for ",H[B].title]}),n.jsx("p",{children:H[B].dailyText}),n.jsxs("div",{className:"sub-renew-pill",children:[n.jsx(up,{size:16,strokeWidth:1.8}),"Fornyes d. ",Ny(b?.renewDate)]})]}),n.jsx("button",{type:"button",className:"sub-manage-link",children:"Administrer betalingsoplysninger"})]})]})]})]}):null]})]})]})}function Ty(){const d=C.useMemo(()=>!!window.localStorage.getItem("token"),[]),c=C.useMemo(()=>window.localStorage.getItem("theme")==="dark"?"dark":"light",[]),[u,r]=C.useState(d),[m,v]=C.useState(c),[U,Y]=C.useState("dashboard"),[R,b]=C.useState(null);function V(B){(B==="dashboard"||B==="jobs"||B==="cv"||B==="messages"||B==="agents"||B==="ai-agent"||B==="simulator"||B==="subscription")&&Y(B)}function T(B,re,oe="jobs"){b({id:B,fromJobnet:re,returnPage:oe}),Y("job-detail")}function q(){Y(R?.returnPage??"jobs")}async function Q(){await ql.clearCredentials(),Y("dashboard"),b(null),r(!1)}function ee(){v(B=>{const re=B==="light"?"dark":"light";return window.localStorage.setItem("theme",re),re})}return u?U==="jobs"?n.jsx(oy,{onLogout:Q,onNavigate:V,onOpenJobDetail:T,theme:m,onToggleTheme:ee}):U==="cv"?n.jsx(G0,{onLogout:Q,onNavigate:V,theme:m,onToggleTheme:ee}):U==="messages"?n.jsx(my,{onLogout:Q,onNavigate:V,theme:m,onToggleTheme:ee}):U==="agents"?n.jsx(b0,{onLogout:Q,onNavigate:V,onOpenJobDetail:T,theme:m,onToggleTheme:ee}):U==="ai-agent"?n.jsx(k0,{onLogout:Q,onNavigate:V,theme:m,onToggleTheme:ee}):U==="simulator"?n.jsx(xy,{onLogout:Q,onNavigate:V,theme:m,onToggleTheme:ee}):U==="subscription"?n.jsx(_y,{onLogout:Q,onNavigate:V,theme:m,onToggleTheme:ee}):U==="job-detail"&&R?n.jsx(iy,{jobId:R.id,fromJobnet:R.fromJobnet,onBack:q,onLogout:Q,onNavigate:V,theme:m,onToggleTheme:ee}):n.jsx(ey,{onLogout:Q,onNavigate:V,onOpenJobDetail:T,theme:m,onToggleTheme:ee}):n.jsx(c0,{onAuthenticated:()=>r(!0)})}qg.createRoot(document.getElementById("root")).render(n.jsx(C.StrictMode,{children:n.jsx(Ty,{})})); diff --git a/dist/index.html b/dist/index.html index 9a2cf2b..6ca2388 100644 --- a/dist/index.html +++ b/dist/index.html @@ -5,8 +5,8 @@ arbejd-react - - + +
diff --git a/node_modules/.tmp/tsconfig.app.tsbuildinfo b/node_modules/.tmp/tsconfig.app.tsbuildinfo index ae4e77c..22d5ca0 100644 --- a/node_modules/.tmp/tsconfig.app.tsbuildinfo +++ b/node_modules/.tmp/tsconfig.app.tsbuildinfo @@ -1 +1 @@ -{"root":["../../src/app.tsx","../../src/main.tsx","../../src/environments/environment.ts","../../src/mvvm/index.ts","../../src/mvvm/core/async-state.ts","../../src/mvvm/core/http-client.ts","../../src/mvvm/core/index.ts","../../src/mvvm/models/paymentintentresponse.ts","../../src/mvvm/models/ai-generated-cv-description.interface.ts","../../src/mvvm/models/all-language.interface.ts","../../src/mvvm/models/application-examination.interface.ts","../../src/mvvm/models/applied-job.interface.ts","../../src/mvvm/models/auth.interface.ts","../../src/mvvm/models/candidate-application.interface.ts","../../src/mvvm/models/candidate-retention-response.interface.ts","../../src/mvvm/models/candidate-subscription-gift.interface.ts","../../src/mvvm/models/candidate.interface.ts","../../src/mvvm/models/chat-message-thread.interface.ts","../../src/mvvm/models/chat-message.interface.ts","../../src/mvvm/models/cv-language.interface.ts","../../src/mvvm/models/cv-suggestion.interface.ts","../../src/mvvm/models/cv-upload-data.interface.ts","../../src/mvvm/models/driver-license-group.interface.ts","../../src/mvvm/models/driver-license-type.interface.ts","../../src/mvvm/models/education-search.interface.ts","../../src/mvvm/models/error-response.interface.ts","../../src/mvvm/models/esco.interface.ts","../../src/mvvm/models/filter-job-search.interface.ts","../../src/mvvm/models/generated-job-application.ts","../../src/mvvm/models/index.ts","../../src/mvvm/models/job-agent-filter.interface.ts","../../src/mvvm/models/job-application.interface.ts","../../src/mvvm/models/job-detail.interface.ts","../../src/mvvm/models/job-posting-overview.interface.ts","../../src/mvvm/models/job-search-container.ts","../../src/mvvm/models/job-search-filter.interface.ts","../../src/mvvm/models/job.interface.ts","../../src/mvvm/models/jobnet-job-detail.interface.ts","../../src/mvvm/models/level.interface.ts","../../src/mvvm/models/login.interface.ts","../../src/mvvm/models/notification-setting.interface.ts","../../src/mvvm/models/notification.interface.ts","../../src/mvvm/models/occupation-categorization.interface.ts","../../src/mvvm/models/occupation.interface.ts","../../src/mvvm/models/payment-overview.interface.ts","../../src/mvvm/models/predefined-user-input.interface.ts","../../src/mvvm/models/qualification-search.interface.ts","../../src/mvvm/models/saved-job.interface.ts","../../src/mvvm/models/school.interface.ts","../../src/mvvm/models/search-job.interface.ts","../../src/mvvm/models/searched-certification.interface.ts","../../src/mvvm/models/select-language.interface.ts","../../src/mvvm/models/simulation-personality.interface.ts","../../src/mvvm/models/subscription-product.interface.ts","../../src/mvvm/models/translation.interface.ts","../../src/mvvm/models/zip-v2.interface.ts","../../src/mvvm/models/zip.interface.ts","../../src/mvvm/models/post/save-candidate.interface.ts","../../src/mvvm/models/post/save-education.interface.ts","../../src/mvvm/models/post/upload-cv.interface.ts","../../src/mvvm/services/ai-handler.service.ts","../../src/mvvm/services/audio.service.ts","../../src/mvvm/services/auth.service.ts","../../src/mvvm/services/candidate-education.service.ts","../../src/mvvm/services/candidate-experience.service.ts","../../src/mvvm/services/candidate-search-filter.service.ts","../../src/mvvm/services/candidate-subscription-gift.service.ts","../../src/mvvm/services/candidate.service.ts","../../src/mvvm/services/certification.service.ts","../../src/mvvm/services/chat-messages.service.ts","../../src/mvvm/services/cv-upload.service.ts","../../src/mvvm/services/cv.service.ts","../../src/mvvm/services/driver-license.service.ts","../../src/mvvm/services/education.service.ts","../../src/mvvm/services/esco.service.ts","../../src/mvvm/services/firemessagingservice.service.ts","../../src/mvvm/services/google-tag-manager.service.ts","../../src/mvvm/services/index.ts","../../src/mvvm/services/institution.service.ts","../../src/mvvm/services/ios-mat-select-fix.service.ts","../../src/mvvm/services/job-agent.service.ts","../../src/mvvm/services/job.service.ts","../../src/mvvm/services/language.service.ts","../../src/mvvm/services/level.service.ts","../../src/mvvm/services/local-storage.service.ts","../../src/mvvm/services/message.service.ts","../../src/mvvm/services/notification.service.ts","../../src/mvvm/services/occupation.service.ts","../../src/mvvm/services/payment.service.ts","../../src/mvvm/services/permissions.service.ts","../../src/mvvm/services/places.service.ts","../../src/mvvm/services/qualification.service.ts","../../src/mvvm/services/simulation.service.ts","../../src/mvvm/services/sse.service.ts","../../src/mvvm/services/subscription.service.ts","../../src/mvvm/services/toaster.service.ts","../../src/mvvm/services/zip.service.ts","../../src/mvvm/viewmodels/aiagentviewmodel.ts","../../src/mvvm/viewmodels/aijobagentviewmodel.ts","../../src/mvvm/viewmodels/authviewmodel.ts","../../src/mvvm/viewmodels/cvpageviewmodel.ts","../../src/mvvm/viewmodels/dashboardviewmodel.ts","../../src/mvvm/viewmodels/jobdetailviewmodel.ts","../../src/mvvm/viewmodels/jobspageviewmodel.ts","../../src/mvvm/viewmodels/messagesviewmodel.ts","../../src/mvvm/viewmodels/index.ts","../../src/presentation/ai-agent/pages/aiagentpage.tsx","../../src/presentation/auth/types.ts","../../src/presentation/auth/components/authinput.tsx","../../src/presentation/auth/components/forgotpasswordview.tsx","../../src/presentation/auth/components/loginview.tsx","../../src/presentation/auth/components/registerview.tsx","../../src/presentation/auth/hooks/useauthpage.ts","../../src/presentation/auth/pages/authpage.tsx","../../src/presentation/cv/pages/cvpage.tsx","../../src/presentation/dashboard/components/dashboardsidebar.tsx","../../src/presentation/dashboard/components/dashboardtopbar.tsx","../../src/presentation/dashboard/pages/dashboardpage.tsx","../../src/presentation/jobs/pages/jobdetailpage.tsx","../../src/presentation/jobs/pages/jobspage.tsx","../../src/presentation/messages/pages/messagespage.tsx"],"version":"5.9.3"} \ No newline at end of file +{"root":["../../src/app.tsx","../../src/main.tsx","../../src/environments/environment.ts","../../src/mvvm/index.ts","../../src/mvvm/core/async-state.ts","../../src/mvvm/core/http-client.ts","../../src/mvvm/core/index.ts","../../src/mvvm/models/paymentintentresponse.ts","../../src/mvvm/models/ai-generated-cv-description.interface.ts","../../src/mvvm/models/all-language.interface.ts","../../src/mvvm/models/application-examination.interface.ts","../../src/mvvm/models/applied-job.interface.ts","../../src/mvvm/models/auth.interface.ts","../../src/mvvm/models/candidate-application.interface.ts","../../src/mvvm/models/candidate-retention-response.interface.ts","../../src/mvvm/models/candidate-subscription-gift.interface.ts","../../src/mvvm/models/candidate.interface.ts","../../src/mvvm/models/chat-message-thread.interface.ts","../../src/mvvm/models/chat-message.interface.ts","../../src/mvvm/models/cv-language.interface.ts","../../src/mvvm/models/cv-suggestion.interface.ts","../../src/mvvm/models/cv-upload-data.interface.ts","../../src/mvvm/models/driver-license-group.interface.ts","../../src/mvvm/models/driver-license-type.interface.ts","../../src/mvvm/models/education-search.interface.ts","../../src/mvvm/models/error-response.interface.ts","../../src/mvvm/models/esco.interface.ts","../../src/mvvm/models/filter-job-search.interface.ts","../../src/mvvm/models/generated-job-application.ts","../../src/mvvm/models/index.ts","../../src/mvvm/models/job-agent-filter.interface.ts","../../src/mvvm/models/job-application.interface.ts","../../src/mvvm/models/job-detail.interface.ts","../../src/mvvm/models/job-posting-overview.interface.ts","../../src/mvvm/models/job-search-container.ts","../../src/mvvm/models/job-search-filter.interface.ts","../../src/mvvm/models/job.interface.ts","../../src/mvvm/models/jobnet-job-detail.interface.ts","../../src/mvvm/models/level.interface.ts","../../src/mvvm/models/login.interface.ts","../../src/mvvm/models/notification-setting.interface.ts","../../src/mvvm/models/notification.interface.ts","../../src/mvvm/models/occupation-categorization.interface.ts","../../src/mvvm/models/occupation.interface.ts","../../src/mvvm/models/payment-overview.interface.ts","../../src/mvvm/models/predefined-user-input.interface.ts","../../src/mvvm/models/qualification-search.interface.ts","../../src/mvvm/models/saved-job.interface.ts","../../src/mvvm/models/school.interface.ts","../../src/mvvm/models/search-job.interface.ts","../../src/mvvm/models/searched-certification.interface.ts","../../src/mvvm/models/select-language.interface.ts","../../src/mvvm/models/simulation-personality.interface.ts","../../src/mvvm/models/subscription-product.interface.ts","../../src/mvvm/models/translation.interface.ts","../../src/mvvm/models/zip-v2.interface.ts","../../src/mvvm/models/zip.interface.ts","../../src/mvvm/models/post/save-candidate.interface.ts","../../src/mvvm/models/post/save-education.interface.ts","../../src/mvvm/models/post/upload-cv.interface.ts","../../src/mvvm/services/ai-handler.service.ts","../../src/mvvm/services/audio.service.ts","../../src/mvvm/services/auth.service.ts","../../src/mvvm/services/candidate-education.service.ts","../../src/mvvm/services/candidate-experience.service.ts","../../src/mvvm/services/candidate-search-filter.service.ts","../../src/mvvm/services/candidate-subscription-gift.service.ts","../../src/mvvm/services/candidate.service.ts","../../src/mvvm/services/certification.service.ts","../../src/mvvm/services/chat-messages.service.ts","../../src/mvvm/services/cv-upload.service.ts","../../src/mvvm/services/cv.service.ts","../../src/mvvm/services/driver-license.service.ts","../../src/mvvm/services/education.service.ts","../../src/mvvm/services/esco.service.ts","../../src/mvvm/services/firemessagingservice.service.ts","../../src/mvvm/services/google-tag-manager.service.ts","../../src/mvvm/services/index.ts","../../src/mvvm/services/institution.service.ts","../../src/mvvm/services/ios-mat-select-fix.service.ts","../../src/mvvm/services/job-agent.service.ts","../../src/mvvm/services/job.service.ts","../../src/mvvm/services/language.service.ts","../../src/mvvm/services/level.service.ts","../../src/mvvm/services/local-storage.service.ts","../../src/mvvm/services/message.service.ts","../../src/mvvm/services/notification.service.ts","../../src/mvvm/services/occupation.service.ts","../../src/mvvm/services/payment.service.ts","../../src/mvvm/services/permissions.service.ts","../../src/mvvm/services/places.service.ts","../../src/mvvm/services/qualification.service.ts","../../src/mvvm/services/simulation.service.ts","../../src/mvvm/services/sse.service.ts","../../src/mvvm/services/subscription.service.ts","../../src/mvvm/services/toaster.service.ts","../../src/mvvm/services/zip.service.ts","../../src/mvvm/viewmodels/aiagentviewmodel.ts","../../src/mvvm/viewmodels/aijobagentviewmodel.ts","../../src/mvvm/viewmodels/authviewmodel.ts","../../src/mvvm/viewmodels/cvpageviewmodel.ts","../../src/mvvm/viewmodels/dashboardviewmodel.ts","../../src/mvvm/viewmodels/jobdetailviewmodel.ts","../../src/mvvm/viewmodels/jobspageviewmodel.ts","../../src/mvvm/viewmodels/messagesviewmodel.ts","../../src/mvvm/viewmodels/simulatorviewmodel.ts","../../src/mvvm/viewmodels/subscriptionpageviewmodel.ts","../../src/mvvm/viewmodels/index.ts","../../src/presentation/ai-agent/pages/aiagentpage.tsx","../../src/presentation/ai-agent/pages/careeragentpage.tsx","../../src/presentation/auth/types.ts","../../src/presentation/auth/components/authinput.tsx","../../src/presentation/auth/components/forgotpasswordview.tsx","../../src/presentation/auth/components/loginview.tsx","../../src/presentation/auth/components/registerview.tsx","../../src/presentation/auth/hooks/useauthpage.ts","../../src/presentation/auth/pages/authpage.tsx","../../src/presentation/cv/pages/cvpage.tsx","../../src/presentation/dashboard/components/dashboardsidebar.tsx","../../src/presentation/dashboard/components/dashboardtopbar.tsx","../../src/presentation/dashboard/pages/dashboardpage.tsx","../../src/presentation/jobs/pages/jobdetailpage.tsx","../../src/presentation/jobs/pages/jobspage.tsx","../../src/presentation/messages/pages/messagespage.tsx","../../src/presentation/simulator/pages/simulatorpage.tsx","../../src/presentation/subscription/pages/subscriptionpage.tsx"],"version":"5.9.3"} \ No newline at end of file diff --git a/src/App.tsx b/src/App.tsx index 76a4f6d..3cb1c7c 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -2,12 +2,15 @@ import { useMemo, useState } from 'react'; import { localStorageService } from './mvvm/services/local-storage.service'; import { AuthPage } from './presentation/auth/pages/AuthPage'; import { AiAgentPage } from './presentation/ai-agent/pages/AiAgentPage'; +import { CareerAgentPage } from './presentation/ai-agent/pages/CareerAgentPage'; import { CvPage } from './presentation/cv/pages/CvPage'; import type { DashboardNavKey } from './presentation/dashboard/components/DashboardSidebar'; import { DashboardPage } from './presentation/dashboard/pages/DashboardPage'; import { JobDetailPage } from './presentation/jobs/pages/JobDetailPage'; import { JobsPage } from './presentation/jobs/pages/JobsPage'; import { MessagesPage } from './presentation/messages/pages/MessagesPage'; +import { SimulatorPage } from './presentation/simulator/pages/SimulatorPage'; +import { SubscriptionPage } from './presentation/subscription/pages/SubscriptionPage'; type AppPage = DashboardNavKey | 'job-detail'; @@ -36,6 +39,8 @@ function App() { || target === 'messages' || target === 'agents' || target === 'ai-agent' + || target === 'simulator' + || target === 'subscription' ) { setActivePage(target); } @@ -89,7 +94,7 @@ function App() { return ; } - if (activePage === 'agents' || activePage === 'ai-agent') { + if (activePage === 'agents') { return ( + ); + } + + if (activePage === 'simulator') { + return ; + } + + if (activePage === 'subscription') { + return ; + } + if (activePage === 'job-detail' && jobDetailSelection) { return ( { + return this.jobsViewModel.getCandidateProfile(); + } + + async getJobs(): Promise { + try { + return await this.jobsViewModel.getTabItems('jobs'); + } catch { + return []; + } + } + + async getPersonalities(): Promise { + try { + const list = await this.simulationService.listSimulationPersonalities(); + return Array.isArray(list) ? list : []; + } catch { + return []; + } + } + + async getInterviews(limit: number = 12): Promise { + try { + const payload = await this.simulationService.listInterviews(limit, 0); + const root = asRecord(payload); + const list = Array.isArray(root?.interviews) ? root.interviews : (Array.isArray(payload) ? payload : []); + + return list + .map((item, index) => mapInterview(item, index)) + .filter((item): item is SimulatorInterviewItem => Boolean(item)); + } catch { + return []; + } + } +} diff --git a/src/mvvm/viewmodels/SubscriptionPageViewModel.ts b/src/mvvm/viewmodels/SubscriptionPageViewModel.ts new file mode 100644 index 0000000..10683f9 --- /dev/null +++ b/src/mvvm/viewmodels/SubscriptionPageViewModel.ts @@ -0,0 +1,44 @@ +import type { PaymentOverview } from '../models/payment-overview.interface'; +import type { SubscriptionProductInterface } from '../models/subscription-product.interface'; +import { CandidateService } from '../services/candidate.service'; +import { SubscriptionService } from '../services/subscription.service'; + +export interface SubscriptionSnapshot { + paymentOverview: PaymentOverview | null; + products: SubscriptionProductInterface | null; +} + +export class SubscriptionPageViewModel { + constructor( + private readonly candidateService: CandidateService = new CandidateService(), + private readonly subscriptionService: SubscriptionService = new SubscriptionService(), + ) {} + + async getCandidateProfile(): Promise<{ imageUrl?: string; name: string }> { + try { + const candidate = await this.candidateService.getCandidate(); + return { + name: candidate.firstName?.trim() || candidate.name?.trim() || 'Lasse', + imageUrl: candidate.imageUrl || candidate.image || undefined, + }; + } catch { + return { name: 'Lasse' }; + } + } + + async getSnapshot(): Promise { + const [paymentResult, productsResult] = await Promise.allSettled([ + this.subscriptionService.getPaymentOverview(), + this.subscriptionService.getSubscriptionProducts(), + ]); + + return { + paymentOverview: paymentResult.status === 'fulfilled' ? paymentResult.value : null, + products: productsResult.status === 'fulfilled' ? productsResult.value : null, + }; + } + + async redeemCode(code: string): Promise { + await this.subscriptionService.redeemCode(code); + } +} diff --git a/src/presentation/ai-agent/pages/AiAgentPage.tsx b/src/presentation/ai-agent/pages/AiAgentPage.tsx index 857e33b..a378eba 100644 --- a/src/presentation/ai-agent/pages/AiAgentPage.tsx +++ b/src/presentation/ai-agent/pages/AiAgentPage.tsx @@ -133,7 +133,7 @@ export function AiAgentPage({ onLogout, onNavigate, onOpenJobDetail, onToggleThe
- +
-

AI-agenter

-

Saet din jobsogning pa autopilot. Lad AI overvage og matche dig med de perfekte jobs.

+

Jobagenter

+

Saet din jobsogning pa autopilot. Lad agenter overvage og matche dig med de perfekte jobs.

-

Opret ny AI-agent

+

Opret ny jobagent

@@ -206,7 +206,7 @@ export function AiAgentPage({ onLogout, onNavigate, onOpenJobDetail, onToggleThe
- +
@@ -255,11 +255,11 @@ export function AiAgentPage({ onLogout, onNavigate, onOpenJobDetail, onToggleThe className="ai-job-card" role="button" tabIndex={0} - onClick={() => onOpenJobDetail(job.id, job.fromJobnet, 'ai-agent')} + onClick={() => onOpenJobDetail(job.id, job.fromJobnet, 'agents')} onKeyDown={(event) => { if (event.key === 'Enter' || event.key === ' ') { event.preventDefault(); - onOpenJobDetail(job.id, job.fromJobnet, 'ai-agent'); + onOpenJobDetail(job.id, job.fromJobnet, 'agents'); } }} > @@ -270,7 +270,7 @@ export function AiAgentPage({ onLogout, onNavigate, onOpenJobDetail, onToggleThe :
{initials(job.companyName)}
}
{deriveMatch(index)}% Match
- Via: {activeFilters[0]?.escoName || 'AI-agent'} + Via: {activeFilters[0]?.escoName || 'Jobagent'}
@@ -291,7 +291,7 @@ export function AiAgentPage({ onLogout, onNavigate, onOpenJobDetail, onToggleThe type="button" onClick={(event) => { event.stopPropagation(); - onOpenJobDetail(job.id, job.fromJobnet, 'ai-agent'); + onOpenJobDetail(job.id, job.fromJobnet, 'agents'); }} > Læs mere diff --git a/src/presentation/ai-agent/pages/CareerAgentPage.tsx b/src/presentation/ai-agent/pages/CareerAgentPage.tsx new file mode 100644 index 0000000..6821dfb --- /dev/null +++ b/src/presentation/ai-agent/pages/CareerAgentPage.tsx @@ -0,0 +1,296 @@ +import { useEffect, useMemo, useState } from 'react'; +import { + BadgeCheck, + CheckCircle2, + Filter, + Globe, + GraduationCap, + PlusCircle, + Car, + Shield, + Sparkles, + Star, + Target, + Trophy, + WandSparkles, +} from 'lucide-react'; +import { AiAgentViewModel, type AiAgentInitialData, type SuggestionImprovement } from '../../../mvvm/viewmodels/AiAgentViewModel'; +import { DashboardSidebar, type DashboardNavKey } from '../../dashboard/components/DashboardSidebar'; +import { DashboardTopbar } from '../../dashboard/components/DashboardTopbar'; +import '../../dashboard/pages/dashboard.css'; +import './career-agent.css'; + +interface CareerAgentPageProps { + onLogout: () => void; + onNavigate: (target: DashboardNavKey) => void; + onToggleTheme: () => void; + theme: 'light' | 'dark'; +} + +const EMPTY_DATA: AiAgentInitialData = { + paymentOverview: null, + jobAgentFilters: [], + cvSuggestions: [], + escos: [], +}; + +function defaultAgents(): string[] { + return [ + 'Diamantskærer', + 'Ministerialbetjent', + 'Kiropraktor', + 'System Developer', + 'Senior Software Developer', + 'Founder and Developer', + 'Senior .Net Developer', + 'Freelance Programmer', + 'Støberichef', + 'Softwareudvikler, frontend', + 'CSR-ansvarlig', + 'Lagerchef inden for råstof', + 'Ios developer', + 'Kokkeelev', + 'IT-kvalitetsmedarbejder', + 'Efterretningsofficer', + ]; +} + +function mapTone(chance: number): { text: string; kind: 'strong' | 'neutral' | 'soft' } { + if (chance >= 70) { + return { text: 'Kan styrke dine chancer i ansøgningsbunken', kind: 'strong' }; + } + if (chance >= 40) { + return { text: 'Ofte efterspurgt – forbedrer dine jobmuligheder markant', kind: 'neutral' }; + } + return { text: 'Et godt første skridt mod flere relevante job', kind: 'soft' }; +} + +function iconForType(type: string) { + if (type === 'education') { + return GraduationCap; + } + if (type === 'language') { + return Globe; + } + if (type === 'driversLicense') { + return Car; + } + if (type === 'certificate') { + return BadgeCheck; + } + if (type === 'qualification') { + return Target; + } + return Star; +} + +function colorClass(type: string): string { + if (type === 'education') { + return 'blue'; + } + if (type === 'language') { + return 'emerald'; + } + if (type === 'driversLicense') { + return 'orange'; + } + if (type === 'certificate') { + return 'rose'; + } + if (type === 'qualification') { + return 'indigo'; + } + return 'slate'; +} + +export function CareerAgentPage({ onLogout, onNavigate, onToggleTheme, theme }: CareerAgentPageProps) { + const viewModel = useMemo(() => new AiAgentViewModel(), []); + + const [name, setName] = useState('Lasse'); + const [imageUrl, setImageUrl] = useState(undefined); + const [data, setData] = useState(EMPTY_DATA); + const [isLoading, setIsLoading] = useState(true); + const [selectedAgent, setSelectedAgent] = useState(''); + + useEffect(() => { + let active = true; + + async function load() { + setIsLoading(true); + const [profile, snapshot] = await Promise.all([ + viewModel.getCandidateProfile(), + viewModel.loadInitialData(), + ]); + + if (!active) { + return; + } + + setName(profile.name); + setImageUrl(profile.imageUrl); + setData(snapshot); + + const firstAgent = snapshot.jobAgentFilters[0]?.escoName || defaultAgents()[1]; + setSelectedAgent((current) => current || firstAgent); + setIsLoading(false); + } + + void load(); + + return () => { + active = false; + }; + }, [viewModel]); + + const leftAgents = data.jobAgentFilters.length > 0 + ? data.jobAgentFilters.map((item) => item.escoName) + : defaultAgents(); + + const selectedFilter = data.jobAgentFilters.find((item) => item.escoName === selectedAgent) || data.jobAgentFilters[0]; + + const selectedSuggestions = (selectedFilter + ? data.cvSuggestions.find((item) => item.escoId === selectedFilter.escoId)?.improvements + : data.cvSuggestions[0]?.improvements) || []; + + const cards = (selectedSuggestions.length > 0 + ? selectedSuggestions + : [ + { + name: 'Grundkursus i sikkerhed og beredskab', + jobChanceIncrease: 78, + improvementType: 'education', + }, + { + name: 'Service og kommunikation i offentlige institutioner', + jobChanceIncrease: 52, + improvementType: 'qualification', + }, + { + name: 'Dansk (Flydende)', + jobChanceIncrease: 65, + improvementType: 'language', + }, + { + name: 'B - Almindelig bil', + jobChanceIncrease: 34, + improvementType: 'driversLicense', + }, + { + name: 'Konflikthåndtering', + jobChanceIncrease: 72, + improvementType: 'qualification', + }, + { + name: 'Førstehjælpsbevis', + jobChanceIncrease: 44, + improvementType: 'certificate', + }, + { + name: 'Sikkerhedsgodkendelse (PET)', + jobChanceIncrease: 81, + improvementType: 'certificate', + }, + ]) as SuggestionImprovement[]; + + return ( +
+
+
+
+ + + +
+ + + CV analyseret +
+ )} + /> + +
+
+
+

Karriereagent

+
+

Din Karriereagent Foreslår

+

+ Boost din profil ved hjælp af kunstig intelligens. Forslagene er udvalgt til din profil ud fra analyser + af over 100.000+ jobopslag og dit nuværende CV. +

+
+ +
+ + +
+
+

+ Viser anbefalinger for + {selectedAgent || 'Ministerialbetjent'} +

+ +
+ + {isLoading ?

Indlaeser anbefalinger...

: null} + +
+ {cards.map((item, index) => { + const Icon = iconForType(item.improvementType || 'qualification'); + const tone = mapTone(item.jobChanceIncrease || 0); + const color = colorClass(item.improvementType || 'qualification'); + + return ( +
+
+
+
+
+ +
+

{item.shortName || item.name}

+

+ {tone.kind === 'strong' + ? + : tone.kind === 'neutral' + ? + : } + {tone.text} +

+
+
+ ); + })} +
+
+
+ +
+ ); +} diff --git a/src/presentation/ai-agent/pages/career-agent.css b/src/presentation/ai-agent/pages/career-agent.css new file mode 100644 index 0000000..c50204b --- /dev/null +++ b/src/presentation/ai-agent/pages/career-agent.css @@ -0,0 +1,375 @@ +.career-main { + position: relative; +} + +.career-status-pill { + border-radius: 999px; + border: 1px solid #99f6e4; + background: rgba(240, 253, 250, 0.8); + color: #0f766e; + display: inline-flex; + align-items: center; + gap: 6px; + padding: 7px 11px; + font-size: 0.8rem; + font-weight: 500; +} + +.career-head { + max-width: 760px; + margin-bottom: 20px; +} + +.career-head-title-row { + display: flex; + align-items: center; + gap: 10px; + margin-bottom: 6px; +} + +.career-head-icon { + width: 40px; + height: 40px; + border-radius: 12px; + background: linear-gradient(135deg, #2dd4bf, #06b6d4); + color: #ffffff; + display: grid; + place-items: center; +} + +.career-head h1 { + margin: 0; + font-size: clamp(2rem, 3.4vw, 2.6rem); + letter-spacing: -0.03em; + color: #111827; +} + +.career-head-kicker { + margin: 12px 0 6px; + color: #0f766e; + text-transform: uppercase; + letter-spacing: 0.04em; + font-size: 0.72rem; + font-weight: 600; +} + +.career-head-desc { + margin: 0; + color: #6b7280; + line-height: 1.65; +} + +.career-grid { + display: grid; + grid-template-columns: minmax(0, 1fr) minmax(0, 3fr); + gap: 18px; + min-height: calc(100vh - 250px); + padding-bottom: 18px; +} + +.career-agents-col { + border-radius: 24px; + border: 1px solid rgba(229, 231, 235, 0.8); + background: rgba(255, 255, 255, 0.62); + backdrop-filter: blur(22px); + -webkit-backdrop-filter: blur(22px); + box-shadow: 0 8px 24px rgba(0, 0, 0, 0.03); + overflow: hidden; + display: flex; + flex-direction: column; +} + +.career-agents-head { + padding: 16px; + border-bottom: 1px solid rgba(229, 231, 235, 0.7); + background: rgba(255, 255, 255, 0.42); +} + +.career-agents-head h2 { + margin: 0 0 10px; + color: #111827; + font-size: 0.9rem; +} + +.career-agents-head button { + width: 100%; + border: 0; + border-radius: 12px; + background: linear-gradient(to right, #14b8a6, #06b6d4); + color: #ffffff; + padding: 10px; + display: inline-flex; + align-items: center; + justify-content: center; + gap: 7px; + font-size: 0.82rem; + font-weight: 500; + cursor: pointer; + box-shadow: 0 4px 14px rgba(20, 184, 166, 0.39); +} + +.career-agents-list { + flex: 1; + overflow-y: auto; + padding: 10px; + display: grid; + align-content: start; + gap: 4px; +} + +.career-agents-list button { + width: 100%; + text-align: left; + border: 0; + border-radius: 10px; + background: transparent; + color: #4b5563; + padding: 10px 11px; + font-size: 0.82rem; + cursor: pointer; + display: flex; + align-items: center; + justify-content: space-between; + gap: 8px; +} + +.career-agents-list button:hover { + background: rgba(249, 250, 251, 0.9); + color: #111827; +} + +.career-agents-list button.active { + border: 1px solid #99f6e4; + background: #f0fdfa; + color: #0f766e; + font-weight: 500; +} + +.career-agents-list button.active i { + width: 6px; + height: 6px; + border-radius: 999px; + background: #14b8a6; +} + +.career-reco-col { + min-width: 0; + display: flex; + flex-direction: column; +} + +.career-reco-head { + margin-bottom: 10px; + display: flex; + align-items: center; + justify-content: space-between; + gap: 8px; +} + +.career-reco-head h2 { + margin: 0; + color: #111827; + font-size: 1.03rem; + font-weight: 500; + display: flex; + align-items: center; + gap: 7px; +} + +.career-reco-head h2 span { + color: #0f766e; + border: 1px solid #99f6e4; + background: #f0fdfa; + border-radius: 6px; + padding: 2px 8px; + font-size: 0.84rem; +} + +.career-reco-head button { + border: 0; + background: transparent; + color: #6b7280; + font-size: 0.75rem; + font-weight: 500; + display: inline-flex; + align-items: center; + gap: 5px; + cursor: pointer; +} + +.career-cards { + flex: 1; + overflow-y: auto; + padding-right: 6px; +} + +.career-cards { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 10px; + align-content: start; + grid-auto-rows: min-content; +} + +.career-card { + position: relative; + overflow: hidden; + border-radius: 14px; + border: 1px solid rgba(153, 246, 228, 0.5); + background: linear-gradient(135deg, #ffffff, rgba(240, 253, 250, 0.45)); + padding: 12px; + transition: border-color 0.4s ease, box-shadow 0.4s ease; +} + +.career-card:hover { + border-color: #5eead4; + box-shadow: 0 8px 20px rgba(20, 184, 166, 0.08); +} + +.career-card-glow { + position: absolute; + top: -24px; + right: -24px; + width: 100px; + height: 100px; + border-radius: 999px; + background: linear-gradient(to bottom right, rgba(45, 212, 191, 0.18), rgba(34, 211, 238, 0.16)); + filter: blur(22px); + transition: transform 0.5s ease; +} + +.career-card:hover .career-card-glow { + transform: scale(1.5); +} + +.career-card-wand { + position: absolute; + top: 11px; + right: 11px; + color: #5eead4; +} + +.career-card-content { + position: relative; + z-index: 1; +} + +.career-card-icon { + width: 34px; + height: 34px; + border-radius: 9px; + display: grid; + place-items: center; + margin-bottom: 10px; +} + +.career-card-icon.blue { background: #eff6ff; color: #3b82f6; } +.career-card-icon.indigo { background: #eef2ff; color: #6366f1; } +.career-card-icon.emerald { background: #ecfdf5; color: #10b981; } +.career-card-icon.orange { background: #fff7ed; color: #f97316; } +.career-card-icon.rose { background: #fff1f2; color: #f43f5e; } +.career-card-icon.slate { background: #f1f5f9; color: #475569; } + +.career-card h3 { + margin: 0 0 6px; + color: #111827; + font-size: 0.8rem; + font-weight: 500; + line-height: 1.4; +} + +.career-card p { + margin: 0; + font-size: 0.7rem; + line-height: 1.4; + display: inline-flex; + align-items: flex-start; + gap: 5px; +} + +.career-card p.tone.strong { color: #0f766e; } +.career-card p.tone.neutral { color: #4f46e5; } +.career-card p.tone.soft { color: #6b7280; } + +.theme-dark .career-status-pill { + border-color: rgba(20, 184, 166, 0.35); + background: rgba(20, 184, 166, 0.12); + color: #2dd4bf; +} + +.theme-dark .career-head h1, +.theme-dark .career-agents-head h2, +.theme-dark .career-reco-head h2, +.theme-dark .career-card h3 { + color: #ffffff; +} + +.theme-dark .career-head-desc, +.theme-dark .career-agents-list button, +.theme-dark .career-reco-head button, +.theme-dark .career-card p.tone.soft, +.theme-dark .career-head-kicker { + color: #9ca3af; +} + +.theme-dark .career-head-icon, +.theme-dark .career-agents-col, +.theme-dark .career-card { + border-color: rgba(255, 255, 255, 0.08); +} + +.theme-dark .career-agents-col, +.theme-dark .career-card { + background: rgba(255, 255, 255, 0.02); +} + +.theme-dark .career-agents-head { + border-color: rgba(255, 255, 255, 0.08); + background: rgba(255, 255, 255, 0.03); +} + +.theme-dark .career-agents-list button:hover { + background: rgba(255, 255, 255, 0.06); + color: #f3f4f6; +} + +.theme-dark .career-agents-list button.active { + border-color: rgba(20, 184, 166, 0.35); + background: rgba(20, 184, 166, 0.12); + color: #2dd4bf; +} + +.theme-dark .career-reco-head h2 span { + border-color: rgba(20, 184, 166, 0.35); + background: rgba(20, 184, 166, 0.12); + color: #2dd4bf; +} + +.theme-dark .career-card-glow { + background: linear-gradient(to bottom right, rgba(45, 212, 191, 0.15), rgba(99, 102, 241, 0.14)); +} + +.theme-dark .career-card-wand { + color: #2dd4bf; +} + +@media (max-width: 1180px) { + .career-grid { + grid-template-columns: 1fr; + min-height: auto; + } + + .career-agents-col { + max-height: 280px; + } + + .career-cards { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } +} + +@media (max-width: 760px) { + .career-cards { + grid-template-columns: 1fr; + } +} diff --git a/src/presentation/dashboard/components/DashboardSidebar.tsx b/src/presentation/dashboard/components/DashboardSidebar.tsx index f1edd1c..316c08a 100644 --- a/src/presentation/dashboard/components/DashboardSidebar.tsx +++ b/src/presentation/dashboard/components/DashboardSidebar.tsx @@ -1,4 +1,4 @@ -import { Briefcase, Bot, FileText, Gamepad2, LayoutGrid, MessageCircle, Radar, Sparkles } from 'lucide-react'; +import { Briefcase, Bot, Crown, FileText, Gamepad2, LayoutGrid, MessageCircle, Radar, Sparkles } from 'lucide-react'; import type { ComponentType } from 'react'; interface DashboardSidebarProps { @@ -6,7 +6,7 @@ interface DashboardSidebarProps { onNavigate?: (target: DashboardNavKey) => void; } -export type DashboardNavKey = 'dashboard' | 'jobs' | 'cv' | 'messages' | 'agents' | 'ai-agent' | 'simulator'; +export type DashboardNavKey = 'dashboard' | 'jobs' | 'cv' | 'messages' | 'agents' | 'ai-agent' | 'simulator' | 'subscription'; interface NavItem { accent?: boolean; @@ -28,6 +28,7 @@ const secondaryItems: NavItem[] = [ { key: 'agents', label: 'Jobagenter', icon: Radar, dot: true }, { key: 'ai-agent', label: 'AI-agent', icon: Bot, accent: true }, { key: 'simulator', label: 'Simulator', icon: Gamepad2 }, + { key: 'subscription', label: 'Abonnement', icon: Crown }, ]; export function DashboardSidebar({ active = 'dashboard', onNavigate }: DashboardSidebarProps) { diff --git a/src/presentation/simulator/pages/SimulatorPage.tsx b/src/presentation/simulator/pages/SimulatorPage.tsx new file mode 100644 index 0000000..2658acb --- /dev/null +++ b/src/presentation/simulator/pages/SimulatorPage.tsx @@ -0,0 +1,459 @@ +import { useEffect, useMemo, useState } from 'react'; +import { + ArrowLeft, + ArrowRight, + Briefcase, + ChevronDown, + CheckCircle2, + Clock3, + Code2, + Filter, + Globe, + Lightbulb, + Mic, + MoreHorizontal, + PauseCircle, + Play, + PlayCircle, + Radio, + StopCircle, + Target, + UserRound, +} from 'lucide-react'; +import { SimulatorViewModel, type SimulatorInterviewItem } from '../../../mvvm/viewmodels/SimulatorViewModel'; +import type { JobsListItem } from '../../../mvvm/viewmodels/JobsPageViewModel'; +import { DashboardSidebar, type DashboardNavKey } from '../../dashboard/components/DashboardSidebar'; +import { DashboardTopbar } from '../../dashboard/components/DashboardTopbar'; +import '../../dashboard/pages/dashboard.css'; +import './simulator.css'; + +interface SimulatorPageProps { + onLogout: () => void; + onNavigate: (target: DashboardNavKey) => void; + onToggleTheme: () => void; + theme: 'light' | 'dark'; +} + +interface InterviewCard { + id: string; + title: string; + companyName: string; + completed: boolean; + durationMinutes: number; + personality: string; + dateLabel: string; +} + +const FALLBACK_INTERVIEWS: InterviewCard[] = [ + { + id: 'sim-1', + title: 'Senior Frontend-udvikler', + companyName: 'Lunar', + completed: true, + durationMinutes: 15, + personality: 'Professionel', + dateLabel: '12. okt 2023', + }, + { + id: 'sim-2', + title: 'Fullstack Developer', + companyName: 'Pleo', + completed: false, + durationMinutes: 20, + personality: 'Afslappet', + dateLabel: '10. okt 2023', + }, + { + id: 'sim-3', + title: 'UX Designer', + companyName: 'Trustpilot', + completed: true, + durationMinutes: 10, + personality: 'Sarkastisk', + dateLabel: '05. okt 2023', + }, + { + id: 'sim-4', + title: 'Product Manager', + companyName: 'Danske Bank', + completed: true, + durationMinutes: 5, + personality: 'Stress-test', + dateLabel: '01. okt 2023', + }, +]; + +function toInterviewCard(item: SimulatorInterviewItem): InterviewCard { + return { + id: item.id, + title: item.title, + companyName: item.companyName, + completed: item.completed, + durationMinutes: item.durationMinutes ?? 15, + personality: item.personality || 'Professionel', + dateLabel: item.dateLabel || 'Nyligt', + }; +} + +function jobLabel(job: JobsListItem): string { + return `${job.title || 'Stilling'}${job.companyName ? ` · ${job.companyName}` : ''}`; +} + +export function SimulatorPage({ onLogout, onNavigate, onToggleTheme, theme }: SimulatorPageProps) { + const viewModel = useMemo(() => new SimulatorViewModel(), []); + + const [name, setName] = useState('Lasse'); + const [imageUrl, setImageUrl] = useState(undefined); + const [jobs, setJobs] = useState([]); + const [interviews, setInterviews] = useState([]); + const [personalities, setPersonalities] = useState>([]); + const [isLoading, setIsLoading] = useState(true); + + const [selectedJobId, setSelectedJobId] = useState(''); + const [selectedPersonalityId, setSelectedPersonalityId] = useState(''); + const [selectedLanguage, setSelectedLanguage] = useState('Dansk'); + const [selectedDuration, setSelectedDuration] = useState('15'); + const [isLiveSession, setIsLiveSession] = useState(false); + + useEffect(() => { + let active = true; + + async function load() { + setIsLoading(true); + + const [profile, jobsData, interviewData, personalityData] = await Promise.all([ + viewModel.getCandidateProfile(), + viewModel.getJobs(), + viewModel.getInterviews(), + viewModel.getPersonalities(), + ]); + + if (!active) { + return; + } + + setName(profile.name); + setImageUrl(profile.imageUrl); + setJobs(jobsData); + setInterviews(interviewData.map(toInterviewCard)); + setPersonalities(personalityData.map((item) => ({ id: item.id, name: item.name }))); + + if (jobsData.length > 0) { + setSelectedJobId((current) => current || jobsData[0].id); + } + + if (personalityData.length > 0) { + setSelectedPersonalityId((current) => current || String(personalityData[0].id)); + } + + setIsLoading(false); + } + + void load(); + + return () => { + active = false; + }; + }, [viewModel]); + + const cards = interviews.length > 0 ? interviews : FALLBACK_INTERVIEWS; + const fallbackJob = { id: 'fallback-job', title: 'Senior Frontend-udvikler', companyName: 'Lunar' } as JobsListItem; + const jobOptions = jobs.length > 0 ? jobs : [fallbackJob]; + const activeJob = jobOptions.find((job) => job.id === selectedJobId) || jobOptions[0]; + const activePersonality = personalities.find((item) => String(item.id) === selectedPersonalityId)?.name || 'Professionel & Grundig'; + + const liveMessages = [ + { + id: 'ai-1', + sender: 'ai', + text: + 'Hej Lasse, og velkommen til! Vi er rigtig glade for at have dig til samtalen omkring rollen som ' + + `${activeJob.title || 'Senior Frontend-udvikler'}. Kan du fortælle om et nyligt projekt, ` + + 'hvor din erfaring med React gjorde en stor forskel for slutresultatet?', + }, + { + id: 'me-1', + sender: 'me', + text: + 'I mit seneste projekt migrerede vi en stor dashboard-løsning til Next.js. ' + + 'Jeg implementerede virtualisering og strammere state management med Zustand, ' + + 'hvilket reducerede load-tid med over 60%.', + }, + { + id: 'ai-2', + sender: 'ai', + text: + 'Det lyder som en rigtig solid forbedring. Når du nævner Zustand frem for Redux, ' + + 'hvad var overvejelserne bag det valg i jeres use-case?', + }, + ] as const; + + return ( +
+
+
+
+ + + +
+ setIsLiveSession(false)}> + + Forlad simulering + + ) : undefined} + /> + + {isLiveSession ? ( +
+
+

Live Jobsamtale

+

Du er i øjeblikket i en simuleret teknisk samtale. Brug mikrofonen til at svare.

+
+ +
+
+
+
+
+
+

Sarah (AI Interviewer)

+

Venter på dit svar...

+
+
+ +
+ +
+ {liveMessages.map((message) => ( +
+
+ {message.sender === 'ai' + ? + : (imageUrl ? {name} : {name.slice(0, 1).toUpperCase()})} +
+
+

{message.text}

+
+
+ ))} +
+ +
+
+
+ Tid gået + 04:23 +
+
+ {Array.from({ length: 7 }).map((_, index) => ( + + ))} +
+
+ Tilbage + 10:37 +
+
+ + +

Optager dit svar...

+
+
+ + +
+
+ ) : ( +
+
+
+ +
+

Job Interview Simulator

+

+ Ov dig pa jobsamtaler med vores AI-drevne simulator. Du far skraeddersyede sporgsmal + baseret pa den jobtype, du soger, og modtager detaljeret feedback pa dine svar. +

+ +
    +
  • Personaliserede interviewsporgsmal
  • +
  • Ojeblikkelig AI-feedback pa dine svar
  • +
  • Detaljeret evaluering efter interviewet
  • +
  • Gem og gennemga tidligere interviews
  • +
+ + +
+ +
+
+

Simuleringsindstillinger

+

Vaelg dine praeferencer for start

+
+ + + + + +
+ + + +
+
+
+ +
+

Tidligere simuleringer

+ +
+ + {isLoading ?

Indlaeser simuleringer...

: null} + +
+ {cards.map((item) => ( +
+
+
+

{item.title}

+

{item.companyName}

+
+ + {item.completed ? 'Faerdig' : 'Ikke faerdig'} + +
+ +
+ {item.durationMinutes} min + {item.personality} +
+ +
+ {item.dateLabel} + {item.completed ? ( + + ) : ( + + )} +
+
+ ))} +
+
+ )} +
+
+ ); +} diff --git a/src/presentation/simulator/pages/simulator.css b/src/presentation/simulator/pages/simulator.css new file mode 100644 index 0000000..d9608fc --- /dev/null +++ b/src/presentation/simulator/pages/simulator.css @@ -0,0 +1,967 @@ +.sim-main { + position: relative; +} + +.sim-leave-btn { + border: 1px solid rgba(229, 231, 235, 0.82); + background: rgba(255, 255, 255, 0.62); + border-radius: 999px; + padding: 8px 12px; + display: inline-flex; + align-items: center; + gap: 8px; + color: #6b7280; + font-size: 0.8rem; + font-weight: 500; + cursor: pointer; +} + +.sim-leave-btn:hover { + color: #111827; + background: rgba(255, 255, 255, 0.85); +} + +.sim-wrap { + max-width: 1160px; + margin: 0 auto; + padding-bottom: 30px; +} + +.sim-live-wrap { + padding-bottom: 24px; +} + +.sim-live-head { + margin-bottom: 22px; +} + +.sim-live-head h1 { + margin: 0 0 8px; + font-size: clamp(1.9rem, 3vw, 2.3rem); + letter-spacing: -0.03em; + color: #111827; +} + +.sim-live-head p { + margin: 0; + color: #6b7280; +} + +.sim-live-grid { + min-height: calc(100vh - 260px); + display: grid; + grid-template-columns: minmax(0, 2fr) minmax(0, 1fr); + gap: 22px; +} + +.sim-live-chat-card { + border-radius: 24px; + border: 1px solid rgba(229, 231, 235, 0.82); + background: rgba(255, 255, 255, 0.62); + backdrop-filter: blur(22px); + -webkit-backdrop-filter: blur(22px); + box-shadow: 0 8px 24px rgba(0, 0, 0, 0.04); + display: flex; + flex-direction: column; + overflow: hidden; +} + +.sim-live-chat-head { + padding: 14px 18px; + border-bottom: 1px solid rgba(229, 231, 235, 0.7); + background: rgba(255, 255, 255, 0.42); + display: flex; + align-items: center; + justify-content: space-between; + gap: 10px; +} + +.sim-live-ai-row { + display: flex; + align-items: center; + gap: 10px; +} + +.sim-live-ai-avatar { + width: 40px; + height: 40px; + border-radius: 999px; + border: 1px solid #c7d2fe; + background: #eef2ff; + color: #4f46e5; + display: grid; + place-items: center; +} + +.sim-live-ai-row h3 { + margin: 0 0 2px; + color: #111827; + font-size: 0.86rem; + font-weight: 500; +} + +.sim-live-ai-row p { + margin: 0; + color: #6366f1; + font-size: 0.74rem; + display: inline-flex; + align-items: center; + gap: 4px; +} + +.sim-live-ai-row p svg { + animation: sim-pulse 1.8s ease-in-out infinite; +} + +.sim-live-more-btn { + width: 30px; + height: 30px; + border-radius: 999px; + border: 0; + background: rgba(243, 244, 246, 0.8); + color: #6b7280; + display: grid; + place-items: center; + cursor: pointer; +} + +.sim-live-chat-scroll { + flex: 1; + overflow-y: auto; + padding: 20px; + display: grid; + align-content: start; + gap: 18px; +} + +.sim-live-msg-row { + display: flex; + align-items: flex-start; + gap: 10px; + max-width: 88%; +} + +.sim-live-msg-row.me { + margin-left: auto; + flex-direction: row-reverse; +} + +.sim-live-msg-avatar { + width: 30px; + height: 30px; + border-radius: 999px; + flex-shrink: 0; + overflow: hidden; + display: grid; + place-items: center; +} + +.sim-live-msg-avatar.ai { + border: 1px solid #c7d2fe; + background: #eef2ff; + color: #4f46e5; +} + +.sim-live-msg-avatar.me { + border: 1px solid #d1d5db; + background: #f9fafb; + color: #6b7280; +} + +.sim-live-msg-avatar img { + width: 100%; + height: 100%; + object-fit: cover; +} + +.sim-live-msg-bubble { + padding: 14px 16px; + border-radius: 16px; + box-shadow: 0 2px 10px rgba(15, 23, 42, 0.05); +} + +.sim-live-msg-bubble.ai { + border-top-left-radius: 4px; + border: 1px solid rgba(229, 231, 235, 0.85); + background: #ffffff; +} + +.sim-live-msg-bubble.me { + border-top-right-radius: 4px; + background: #4f46e5; + color: #eef2ff; +} + +.sim-live-msg-bubble p { + margin: 0; + font-size: 0.86rem; + line-height: 1.6; +} + +.sim-live-msg-bubble.ai p { + color: #4b5563; +} + +.sim-live-voice { + border-top: 1px solid rgba(229, 231, 235, 0.72); + background: rgba(255, 255, 255, 0.78); + padding: 18px; + display: grid; + justify-items: center; + gap: 10px; +} + +.sim-live-time-row { + width: min(420px, 100%); + display: flex; + align-items: center; + justify-content: space-between; + gap: 10px; +} + +.sim-live-time { + text-align: center; +} + +.sim-live-time small { + display: block; + color: #9ca3af; + font-size: 0.68rem; + margin-bottom: 4px; +} + +.sim-live-time strong { + color: #111827; + font-size: 0.84rem; + font-weight: 600; +} + +.sim-live-wave { + flex: 1; + max-width: 180px; + display: flex; + align-items: center; + justify-content: center; + gap: 6px; +} + +.sim-live-wave span { + width: 4px; + height: 28px; + border-radius: 999px; + background: #6366f1; + transform-origin: center; + animation: sim-wave 1.2s ease-in-out infinite; +} + +.sim-live-mic-btn { + width: 62px; + height: 62px; + border-radius: 999px; + border: 2px solid #fecdd3; + background: #fff1f2; + color: #e11d48; + display: grid; + place-items: center; + cursor: pointer; + position: relative; +} + +.sim-live-mic-btn::before { + content: ''; + position: absolute; + inset: -2px; + border-radius: 999px; + background: rgba(251, 113, 133, 0.2); + animation: sim-pulse-soft 2s ease-in-out infinite; + z-index: 0; +} + +.sim-live-mic-btn svg { + position: relative; + z-index: 1; +} + +.sim-live-voice > p { + margin: 0; + color: #e11d48; + font-size: 0.76rem; + animation: sim-pulse 2s ease-in-out infinite; +} + +.sim-live-side { + overflow-y: auto; + padding-right: 2px; + display: grid; + align-content: start; + gap: 14px; +} + +.sim-live-side-card { + border-radius: 24px; + border: 1px solid rgba(229, 231, 235, 0.82); + background: rgba(255, 255, 255, 0.62); + padding: 16px; +} + +.sim-live-side-card h2 { + margin: 0 0 14px; + font-size: 0.78rem; + color: #6b7280; + text-transform: uppercase; + letter-spacing: 0.03em; +} + +.sim-live-side-list { + display: grid; + gap: 14px; +} + +.sim-live-side-list small { + display: block; + color: #6b7280; + font-size: 0.7rem; + margin-bottom: 3px; +} + +.sim-live-side-list p { + margin: 0; + color: #111827; + font-size: 0.82rem; + display: inline-flex; + align-items: center; + gap: 6px; +} + +.sim-live-progress-head { + display: flex; + align-items: center; + justify-content: space-between; + gap: 8px; + margin-bottom: 8px; +} + +.sim-live-progress-head strong { + color: #111827; + font-size: 0.72rem; +} + +.sim-live-progress-track { + height: 6px; + background: #e5e7eb; + border-radius: 999px; + overflow: hidden; +} + +.sim-live-progress-track > span { + display: block; + width: 40%; + height: 100%; + background: #6366f1; + box-shadow: 0 0 8px rgba(99, 102, 241, 0.5); +} + +.sim-live-coach-card { + border-radius: 24px; + border: 1px solid #c7d2fe; + background: linear-gradient(to bottom right, rgba(238, 242, 255, 0.7), rgba(255, 255, 255, 0.8)); + padding: 16px; +} + +.sim-live-coach-card h2 { + margin: 0 0 12px; + font-size: 0.82rem; + color: #312e81; + display: inline-flex; + align-items: center; + gap: 6px; +} + +.sim-live-coach-list { + display: grid; + gap: 10px; +} + +.sim-live-coach-list > div { + border-radius: 12px; + border: 1px solid rgba(224, 231, 255, 0.9); + background: #ffffff; + padding: 11px; + display: flex; + align-items: flex-start; + gap: 8px; +} + +.sim-live-coach-list > div:first-child svg { + color: #10b981; +} + +.sim-live-coach-list > div:last-child svg { + color: #f59e0b; +} + +.sim-live-coach-list strong { + display: block; + margin-bottom: 3px; + color: #111827; + font-size: 0.75rem; +} + +.sim-live-coach-list p { + margin: 0; + color: #6b7280; + font-size: 0.72rem; + line-height: 1.5; +} + +.sim-live-actions { + display: grid; + gap: 10px; +} + +.sim-live-actions button { + border-radius: 12px; + border: 1px solid rgba(229, 231, 235, 0.82); + background: #f9fafb; + color: #4b5563; + padding: 10px 12px; + display: inline-flex; + align-items: center; + justify-content: center; + gap: 8px; + font-size: 0.82rem; + font-weight: 500; + cursor: pointer; +} + +.sim-live-actions button:hover { + background: #f3f4f6; + color: #111827; +} + +.sim-live-actions button.stop { + border-color: #111827; + background: #111827; + color: #ffffff; +} + +.sim-live-actions button.stop:hover { + background: #1f2937; +} + +@keyframes sim-wave { + 0%, 100% { transform: scaleY(0.35); } + 50% { transform: scaleY(1); } +} + +@keyframes sim-pulse-soft { + 0%, 100% { transform: scale(1); opacity: 1; } + 50% { transform: scale(1.1); opacity: 0.8; } +} + +@keyframes sim-pulse { + 0%, 100% { opacity: 1; } + 50% { opacity: 0.7; } +} + +.sim-hero-card { + position: relative; + overflow: hidden; + border-radius: 30px; + border: 1px solid rgba(229, 231, 235, 0.8); + background: rgba(255, 255, 255, 0.62); + backdrop-filter: blur(24px); + -webkit-backdrop-filter: blur(24px); + box-shadow: 0 8px 30px rgba(0, 0, 0, 0.04); + padding: 30px; + margin-bottom: 28px; + display: grid; + grid-template-columns: minmax(0, 1.8fr) minmax(0, 0.9fr); + gap: 24px; +} + +.sim-hero-glow { + position: absolute; + top: -80px; + right: -80px; + width: 260px; + height: 260px; + border-radius: 999px; + background: rgba(99, 102, 241, 0.12); + filter: blur(70px); + pointer-events: none; +} + +.sim-hero-left h1 { + margin: 0 0 12px; + font-size: clamp(1.9rem, 3vw, 2.55rem); + letter-spacing: -0.03em; + color: #111827; +} + +.sim-hero-left p { + margin: 0 0 22px; + line-height: 1.65; + color: #4b5563; +} + +.sim-benefits { + margin: 0 0 24px; + padding: 0; + list-style: none; + display: grid; + gap: 10px; +} + +.sim-benefits li { + display: inline-flex; + align-items: center; + gap: 9px; + color: #374151; + font-size: 0.88rem; +} + +.sim-benefits li svg { + color: #10b981; + flex-shrink: 0; +} + +.sim-start-btn { + border: 0; + border-radius: 12px; + background: #111827; + color: #ffffff; + padding: 11px 16px; + display: inline-flex; + align-items: center; + gap: 8px; + font-size: 0.86rem; + font-weight: 500; + cursor: pointer; +} + +.sim-start-btn:hover { + background: #1f2937; +} + +.sim-config-card { + border-radius: 24px; + border: 1px solid rgba(229, 231, 235, 0.8); + background: rgba(255, 255, 255, 0.78); + box-shadow: 0 2px 8px rgba(15, 23, 42, 0.04); + padding: 18px; + display: grid; + gap: 12px; + align-content: start; +} + +.sim-config-head h3 { + margin: 0; + font-size: 0.92rem; + color: #111827; +} + +.sim-config-head p { + margin: 3px 0 0; + color: #6b7280; + font-size: 0.74rem; +} + +.sim-config-card label { + display: grid; + gap: 6px; + font-size: 0.75rem; + color: #6b7280; + font-weight: 500; +} + +.sim-select-wrap { + border: 1px solid rgba(229, 231, 235, 0.8); + background: #ffffff; + border-radius: 12px; + padding: 0 12px; + display: flex; + align-items: center; + gap: 8px; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.02); + transition: border-color 0.2s ease, box-shadow 0.2s ease; +} + +.sim-select-wrap svg { + color: #9ca3af; + flex-shrink: 0; + transition: color 0.2s ease; +} + +.sim-select-wrap select { + width: 100%; + min-width: 0; + border: 0; + background: transparent; + color: #374151; + font-size: 0.84rem; + font-weight: 500; + padding: 11px 0; + outline: none; + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; + cursor: pointer; +} + +.sim-caret { + color: #9ca3af; +} + +.sim-select-wrap:hover { + border-color: rgba(156, 163, 175, 0.8); + box-shadow: 0 5px 12px rgba(15, 23, 42, 0.06); +} + +.sim-select-wrap:hover > svg, +.sim-select-wrap:hover .sim-caret { + color: #6366f1; +} + +.sim-mini-grid { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 10px; +} + +.sim-history-head { + margin-bottom: 14px; + display: flex; + align-items: center; + justify-content: space-between; + gap: 10px; +} + +.sim-history-head h2 { + margin: 0; + color: #111827; + font-size: 1.25rem; + font-weight: 500; +} + +.sim-history-head button { + border: 0; + background: transparent; + display: inline-flex; + align-items: center; + gap: 6px; + color: #6b7280; + cursor: pointer; + font-size: 0.84rem; + font-weight: 500; +} + +.sim-history-head button:hover { + color: #111827; +} + +.sim-history-grid { + display: grid; + grid-template-columns: 1fr 1fr 1fr; + gap: 16px; +} + +.sim-card { + border-radius: 22px; + border: 1px solid rgba(229, 231, 235, 0.8); + background: rgba(255, 255, 255, 0.8); + box-shadow: 0 8px 18px rgba(0, 0, 0, 0.03); + padding: 18px; + display: flex; + flex-direction: column; + min-height: 100%; +} + +.sim-card.draft { + background: rgba(249, 250, 251, 0.8); + opacity: 0.85; +} + +.sim-card-head { + display: flex; + align-items: flex-start; + justify-content: space-between; + gap: 8px; + margin-bottom: 14px; +} + +.sim-card-head h3 { + margin: 0 0 2px; + color: #111827; + font-size: 0.95rem; + letter-spacing: -0.01em; +} + +.sim-card-head p { + margin: 0; + color: #6b7280; + font-size: 0.82rem; +} + +.sim-status { + font-size: 0.69rem; + font-weight: 500; + border-radius: 8px; + padding: 4px 8px; + border: 1px solid; + flex-shrink: 0; +} + +.sim-status.done { + color: #059669; + background: #ecfdf5; + border-color: #a7f3d0; +} + +.sim-status.draft { + color: #4b5563; + background: rgba(229, 231, 235, 0.45); + border-color: rgba(209, 213, 219, 0.9); +} + +.sim-tags { + display: flex; + flex-wrap: wrap; + gap: 8px; + margin-bottom: 18px; +} + +.sim-tags span { + display: inline-flex; + align-items: center; + gap: 6px; + border-radius: 8px; + border: 1px solid rgba(229, 231, 235, 0.8); + background: rgba(249, 250, 251, 0.85); + color: #4b5563; + font-size: 0.72rem; + font-weight: 500; + padding: 6px 9px; +} + +.sim-card-foot { + margin-top: auto; + padding-top: 12px; + border-top: 1px solid rgba(229, 231, 235, 0.65); + display: flex; + justify-content: space-between; + align-items: center; + gap: 8px; +} + +.sim-card-foot small { + color: #9ca3af; + font-size: 0.72rem; +} + +.sim-link-btn { + border: 0; + background: transparent; + display: inline-flex; + align-items: center; + gap: 6px; + color: #4f46e5; + cursor: pointer; + font-size: 0.82rem; + font-weight: 500; +} + +.sim-link-btn:hover { + color: #4338ca; +} + +.theme-dark .sim-hero-card, +.theme-dark .sim-config-card, +.theme-dark .sim-card, +.theme-dark .sim-live-chat-card, +.theme-dark .sim-live-side-card { + background: rgba(255, 255, 255, 0.02); + border-color: rgba(255, 255, 255, 0.06); +} + +.theme-dark .sim-hero-left h1, +.theme-dark .sim-config-head h3, +.theme-dark .sim-history-head h2, +.theme-dark .sim-card-head h3, +.theme-dark .sim-live-head h1, +.theme-dark .sim-live-ai-row h3, +.theme-dark .sim-live-side-list p, +.theme-dark .sim-live-progress-head strong, +.theme-dark .sim-live-coach-list strong, +.theme-dark .sim-live-time strong { + color: #ffffff; +} + +.theme-dark .sim-hero-left p, +.theme-dark .sim-benefits li, +.theme-dark .sim-config-head p, +.theme-dark .sim-config-card label, +.theme-dark .sim-card-head p, +.theme-dark .sim-tags span, +.theme-dark .sim-history-head button, +.theme-dark .sim-live-head p, +.theme-dark .sim-live-side-list small, +.theme-dark .sim-live-coach-list p, +.theme-dark .sim-live-time small, +.theme-dark .sim-leave-btn { + color: #9ca3af; +} + +.theme-dark .sim-start-btn { + background: rgba(255, 255, 255, 0.1); + border: 1px solid rgba(255, 255, 255, 0.12); +} + +.theme-dark .sim-select-wrap { + background: rgba(255, 255, 255, 0.03); + border-color: rgba(255, 255, 255, 0.08); +} + +.theme-dark .sim-select-wrap select { + color: #d1d5db; +} + +.theme-dark .sim-live-chat-head, +.theme-dark .sim-live-voice { + border-color: rgba(255, 255, 255, 0.08); + background: rgba(255, 255, 255, 0.04); +} + +.theme-dark .sim-live-more-btn { + background: rgba(255, 255, 255, 0.08); + color: #9ca3af; +} + +.theme-dark .sim-live-ai-avatar, +.theme-dark .sim-live-msg-avatar.ai { + background: rgba(99, 102, 241, 0.2); + border-color: rgba(129, 140, 248, 0.4); + color: #a5b4fc; +} + +.theme-dark .sim-live-msg-avatar.me { + border-color: rgba(255, 255, 255, 0.12); + background: rgba(255, 255, 255, 0.06); +} + +.theme-dark .sim-live-msg-bubble.ai { + background: rgba(255, 255, 255, 0.04); + border-color: rgba(255, 255, 255, 0.1); +} + +.theme-dark .sim-live-msg-bubble.ai p { + color: #d1d5db; +} + +.theme-dark .sim-live-msg-bubble.me { + background: #4f46e5; +} + +.theme-dark .sim-live-progress-track { + background: rgba(255, 255, 255, 0.1); +} + +.theme-dark .sim-live-coach-card { + background: linear-gradient(to bottom right, rgba(79, 70, 229, 0.18), rgba(255, 255, 255, 0.03)); + border-color: rgba(129, 140, 248, 0.45); +} + +.theme-dark .sim-live-coach-card h2 { + color: #c7d2fe; +} + +.theme-dark .sim-live-coach-list > div { + background: rgba(255, 255, 255, 0.04); + border-color: rgba(255, 255, 255, 0.1); +} + +.theme-dark .sim-tags span { + background: rgba(255, 255, 255, 0.03); + border-color: rgba(255, 255, 255, 0.08); +} + +.theme-dark .sim-status.done { + background: rgba(16, 185, 129, 0.15); + border-color: rgba(16, 185, 129, 0.45); + color: #34d399; +} + +.theme-dark .sim-status.draft { + background: rgba(255, 255, 255, 0.07); + border-color: rgba(255, 255, 255, 0.12); + color: #d1d5db; +} + +.theme-dark .sim-card-foot { + border-top-color: rgba(255, 255, 255, 0.08); +} + +.theme-dark .sim-link-btn { + color: #818cf8; +} + +.theme-dark .sim-live-actions button { + background: rgba(255, 255, 255, 0.04); + border-color: rgba(255, 255, 255, 0.1); + color: #d1d5db; +} + +.theme-dark .sim-live-actions button.stop { + background: #1f2937; + border-color: #374151; + color: #ffffff; +} + +@media (max-width: 1180px) { + .sim-live-grid { + grid-template-columns: 1fr; + min-height: auto; + } + + .sim-live-chat-card { + min-height: 520px; + } + + .sim-live-side { + overflow: visible; + padding-right: 0; + } + + .sim-hero-card { + grid-template-columns: 1fr; + } + + .sim-history-grid { + grid-template-columns: 1fr 1fr; + } +} + +@media (max-width: 760px) { + .sim-live-chat-card { + min-height: auto; + } + + .sim-live-time-row { + flex-direction: column; + gap: 8px; + } + + .sim-wrap { + padding-bottom: 18px; + } + + .sim-hero-card { + padding: 20px; + border-radius: 24px; + } + + .sim-history-grid, + .sim-mini-grid { + grid-template-columns: 1fr; + } +} diff --git a/src/presentation/subscription/pages/SubscriptionPage.tsx b/src/presentation/subscription/pages/SubscriptionPage.tsx new file mode 100644 index 0000000..61816fc --- /dev/null +++ b/src/presentation/subscription/pages/SubscriptionPage.tsx @@ -0,0 +1,370 @@ +import { useEffect, useMemo, useState } from 'react'; +import { CalendarDays, Check, CheckCircle2, Crown, Filter, Gift, Sparkles, Ticket } from 'lucide-react'; +import type { PaymentOverview } from '../../../mvvm/models/payment-overview.interface'; +import type { SubscriptionProductInterface } from '../../../mvvm/models/subscription-product.interface'; +import { SubscriptionPageViewModel } from '../../../mvvm/viewmodels/SubscriptionPageViewModel'; +import { DashboardSidebar, type DashboardNavKey } from '../../dashboard/components/DashboardSidebar'; +import { DashboardTopbar } from '../../dashboard/components/DashboardTopbar'; +import '../../dashboard/pages/dashboard.css'; +import './subscription.css'; + +interface SubscriptionPageProps { + onLogout: () => void; + onNavigate: (target: DashboardNavKey) => void; + onToggleTheme: () => void; + theme: 'light' | 'dark'; +} + +type PlanKey = '30' | '90' | '365'; + +interface PlanItem { + dailyText: string; + description: string; + priceText: string; + savings?: string; + title: string; +} + +const PLAN_FEATURES = [ + 'Download et professionelt CV - Klar til brug med et enkelt klik', + 'Karriereagent med personlige anbefalinger', + 'Øget synlighed – bliv fundet af virksomheder', + 'Lad systemet lave din ansøgning for dig', + 'Optimer dit CV med intelligente forslag', + 'Job simulatoren – træn til din næste jobsamtale', +]; + +function toDate(value: Date | string | null | undefined): Date | null { + if (!value) { + return null; + } + const parsed = value instanceof Date ? value : new Date(value); + return Number.isNaN(parsed.getTime()) ? null : parsed; +} + +function formatRenewDate(value: Date | string | null | undefined): string { + const date = toDate(value); + if (!date) { + return 'Ukendt dato'; + } + return new Intl.DateTimeFormat('da-DK', { + day: '2-digit', + month: '2-digit', + year: 'numeric', + }).format(date); +} + +function isCurrentlySubscribed(paymentOverview: PaymentOverview | null): boolean { + if (!paymentOverview) { + return false; + } + const activeToDate = toDate(paymentOverview.activeToDate); + if (!activeToDate) { + return false; + } + return activeToDate.getTime() > Date.now(); +} + +function extractPlans(products: SubscriptionProductInterface | null): Record { + const p30 = products?.premium_30?.price ?? 49; + const p90 = products?.premium_90?.price ?? 99; + const p365 = products?.premium_365?.price ?? 249; + + return { + '30': { + title: '30 dage', + priceText: `${p30} kr.`, + dailyText: 'Svarer til 1.63 kr. pr. dag', + description: 'Månedlig adgang til alle premium-funktioner', + }, + '90': { + title: '90 dage', + priceText: `${p90} kr.`, + dailyText: 'Svarer til 1.10 kr. pr. dag', + savings: 'Spar 33%', + description: 'Mest populære valg med ekstra besparelse', + }, + '365': { + title: '365 dage', + priceText: `${p365} kr.`, + dailyText: 'Svarer til 0.68 kr. pr. dag', + savings: 'Spar 58%', + description: 'Inkluderer gavekode til 3 måneders premium', + }, + }; +} + +export function SubscriptionPage({ onLogout, onNavigate, onToggleTheme, theme }: SubscriptionPageProps) { + const viewModel = useMemo(() => new SubscriptionPageViewModel(), []); + + const [name, setName] = useState('Lasse'); + const [imageUrl, setImageUrl] = useState(undefined); + const [paymentOverview, setPaymentOverview] = useState(null); + const [products, setProducts] = useState(null); + const [isLoading, setIsLoading] = useState(true); + + const [selectedPlan, setSelectedPlan] = useState('90'); + const [acceptedTerms, setAcceptedTerms] = useState(false); + const [redeemCode, setRedeemCode] = useState(''); + const [redeemStatus, setRedeemStatus] = useState(''); + const [isRedeeming, setIsRedeeming] = useState(false); + + const [previewSubscribed, setPreviewSubscribed] = useState(null); + + useEffect(() => { + let active = true; + + async function load() { + setIsLoading(true); + + const [profile, snapshot] = await Promise.all([ + viewModel.getCandidateProfile(), + viewModel.getSnapshot(), + ]); + + if (!active) { + return; + } + + setName(profile.name); + setImageUrl(profile.imageUrl); + setPaymentOverview(snapshot.paymentOverview); + setProducts(snapshot.products); + setIsLoading(false); + } + + void load(); + + return () => { + active = false; + }; + }, [viewModel]); + + const plans = useMemo(() => extractPlans(products), [products]); + const subscribedFromData = isCurrentlySubscribed(paymentOverview); + const showSubscribed = previewSubscribed ?? subscribedFromData; + + async function handleRedeem() { + const code = redeemCode.trim(); + if (!code || isRedeeming) { + return; + } + + setRedeemStatus(''); + setIsRedeeming(true); + try { + await viewModel.redeemCode(code); + setRedeemStatus('Koden blev indløst. Opdaterer abonnement...'); + const snapshot = await viewModel.getSnapshot(); + setPaymentOverview(snapshot.paymentOverview); + setProducts(snapshot.products); + setRedeemCode(''); + } catch { + setRedeemStatus('Kunne ikke indløse kode. Prøv igen.'); + } finally { + setIsRedeeming(false); + } + } + + return ( +
+
+
+
+ + + +
+ +
Abonnement
+ +
+ )} + /> + +
+
+
+

Dit Abonnement

+
+

+ Administrer dit medlemskab og lås op for alle de intelligente værktøjer, + der gør din jobsøgning nemmere. +

+
+ +
+
+
+ 🎟️ +

Indløs kode

+
+

Har du en rabatkode eller gavekode? Indtast den her og få den aktiveret med det samme

+
+ setRedeemCode(event.target.value)} + placeholder="Indtast kode her..." + /> + +
+ {redeemStatus ? {redeemStatus} : null} +
+ + {isLoading ?

Indlaeser abonnement...

: null} + + {!isLoading && !showSubscribed ? ( + <> +
+ {(['30', '90', '365'] as PlanKey[]).map((planKey) => { + const plan = plans[planKey]; + const selected = selectedPlan === planKey; + const popular = planKey === '90'; + const yearly = planKey === '365'; + + return ( +
+ +
+
+

Klar til at opgradere?

+

Vælg en plan ovenfor og få adgang til alle Premium-funktioner med det samme.

+
+ +
+ + +
+
+ + ) : null} + + {!isLoading && showSubscribed ? ( +
+
+
+
🎁
+
+

Din gave venter!

+

Klik på gaven nedenfor for at se indholdet

+
+ +
+ +
+
+ 👑 +

Premium abonnement

+
+ +
+
+
    + {PLAN_FEATURES.map((feature) => ( +
  • + + {feature} +
  • + ))} +
+
+ +
+
+
+

Dit abonnement er aktivt

+ {plans[selectedPlan].priceText} for {plans[selectedPlan].title} +

{plans[selectedPlan].dailyText}

+
+ + Fornyes d. {formatRenewDate(paymentOverview?.renewDate)} +
+
+ + +
+
+
+
+ ) : null} +
+ +
+ ); +} diff --git a/src/presentation/subscription/pages/subscription.css b/src/presentation/subscription/pages/subscription.css new file mode 100644 index 0000000..e8ba384 --- /dev/null +++ b/src/presentation/subscription/pages/subscription.css @@ -0,0 +1,750 @@ +.sub-main { + position: relative; +} + +.sub-top-actions { + display: inline-flex; + align-items: center; + gap: 10px; +} + +.sub-crumb-pill { + border-radius: 999px; + border: 1px solid rgba(229, 231, 235, 0.8); + background: rgba(255, 255, 255, 0.62); + padding: 7px 11px; + font-size: 0.8rem; + color: #4b5563; + display: inline-flex; + align-items: center; + gap: 6px; +} + +.sub-crumb-pill svg { + color: #14b8a6; +} + +.sub-toggle-btn { + border: 0; + border-radius: 999px; + background: #111827; + color: #ffffff; + font-size: 0.72rem; + font-weight: 500; + padding: 8px 12px; + cursor: pointer; +} + +.sub-toggle-btn:hover { + background: #1f2937; +} + +.sub-head { + margin-bottom: 18px; + max-width: 850px; +} + +.sub-head-title-row { + display: flex; + align-items: center; + gap: 10px; + margin-bottom: 6px; +} + +.sub-head-icon { + width: 40px; + height: 40px; + border-radius: 12px; + background: linear-gradient(135deg, #2dd4bf, #06b6d4); + color: #ffffff; + display: grid; + place-items: center; +} + +.sub-head h1 { + margin: 0; + color: #111827; + font-size: clamp(2rem, 3.2vw, 2.5rem); + letter-spacing: -0.03em; +} + +.sub-head p { + margin: 0; + color: #6b7280; + line-height: 1.65; +} + +.sub-wrap { + max-width: 1200px; + padding-bottom: 20px; +} + +.sub-redeem-card { + max-width: 900px; + border-radius: 24px; + border: 1px solid rgba(229, 231, 235, 0.8); + background: rgba(255, 255, 255, 0.62); + backdrop-filter: blur(22px); + -webkit-backdrop-filter: blur(22px); + box-shadow: 0 8px 24px rgba(0, 0, 0, 0.03); + padding: 20px; + margin-bottom: 22px; +} + +.sub-redeem-head { + display: flex; + align-items: center; + gap: 6px; + margin-bottom: 6px; +} + +.sub-redeem-head h2 { + margin: 0; + color: #111827; + font-size: 1.06rem; +} + +.sub-redeem-card p { + margin: 0 0 12px; + color: #6b7280; + font-size: 0.86rem; +} + +.sub-redeem-row { + max-width: 560px; + display: grid; + grid-template-columns: 1fr auto; + gap: 8px; +} + +.sub-redeem-row input { + border-radius: 12px; + border: 1px solid rgba(229, 231, 235, 0.8); + background: rgba(255, 255, 255, 0.85); + color: #111827; + font-size: 0.86rem; + padding: 10px 12px; + outline: none; +} + +.sub-redeem-row input:focus { + border-color: rgba(20, 184, 166, 0.7); + box-shadow: 0 0 0 3px rgba(20, 184, 166, 0.12); +} + +.sub-redeem-row button { + border: 0; + border-radius: 12px; + background: #111827; + color: #ffffff; + font-size: 0.82rem; + font-weight: 500; + padding: 10px 14px; + cursor: pointer; +} + +.sub-redeem-row button:hover { + background: #1f2937; +} + +.sub-redeem-row button:disabled { + opacity: 0.7; + cursor: not-allowed; +} + +.sub-redeem-card small { + margin-top: 8px; + display: block; + color: #0f766e; +} + +.sub-plan-grid { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 16px; +} + +.sub-plan-card { + position: relative; + border-radius: 24px; + border: 1px solid rgba(229, 231, 235, 0.8); + background: rgba(255, 255, 255, 0.62); + backdrop-filter: blur(22px); + -webkit-backdrop-filter: blur(22px); + padding: 20px; + cursor: pointer; +} + +.sub-plan-card.popular { + background: rgba(255, 255, 255, 0.8); +} + +.sub-plan-card.yearly { + border-color: rgba(199, 210, 254, 0.9); +} + +.sub-plan-card.selected { + border-color: rgba(20, 184, 166, 0.8); + box-shadow: 0 8px 28px rgba(20, 184, 166, 0.12); + background: rgba(240, 253, 250, 0.42); +} + +.sub-plan-card.yearly.selected { + border-color: rgba(99, 102, 241, 0.8); + box-shadow: 0 8px 28px rgba(99, 102, 241, 0.12); + background: rgba(238, 242, 255, 0.35); +} + +.sub-plan-card input { + position: absolute; + opacity: 0; + pointer-events: none; +} + +.sub-popular-badge { + position: absolute; + top: -12px; + left: 50%; + transform: translateX(-50%); + border-radius: 999px; + padding: 4px 10px; + background: #111827; + color: #ffffff; + font-size: 0.64rem; + font-weight: 600; + letter-spacing: 0.05em; + text-transform: uppercase; +} + +.sub-radio-indicator { + position: absolute; + top: 20px; + right: 20px; + width: 20px; + height: 20px; + border-radius: 999px; + border: 1px solid #d1d5db; + display: grid; + place-items: center; +} + +.sub-radio-indicator i { + width: 8px; + height: 8px; + border-radius: 999px; + background: #ffffff; + opacity: 0; +} + +.sub-plan-card.selected .sub-radio-indicator { + border-color: #14b8a6; + background: #14b8a6; +} + +.sub-plan-card.selected .sub-radio-indicator i { + opacity: 1; +} + +.sub-plan-card.yearly.selected .sub-radio-indicator { + border-color: #6366f1; + background: #6366f1; +} + +.sub-plan-content { + display: grid; + align-content: start; + height: 100%; +} + +.sub-plan-title-row { + display: flex; + align-items: center; + gap: 8px; +} + +.sub-plan-title-row h3 { + margin: 0; + color: #111827; + font-size: 1.08rem; +} + +.sub-plan-title-row span { + border-radius: 6px; + border: 1px solid rgba(153, 246, 228, 0.7); + background: rgba(240, 253, 250, 0.9); + color: #0f766e; + font-size: 0.64rem; + font-weight: 600; + padding: 2px 6px; +} + +.sub-price { + margin-top: 10px; + color: #111827; + font-size: 2rem; + font-weight: 600; + letter-spacing: -0.03em; +} + +.sub-price-daily { + margin: 2px 0 0; + color: #6b7280; + font-size: 0.8rem; +} + +.sub-gift-box { + margin-top: 12px; + border-radius: 12px; + border: 1px solid rgba(199, 210, 254, 0.8); + background: linear-gradient(to bottom right, rgba(238, 242, 255, 0.9), rgba(245, 243, 255, 0.8)); + padding: 10px; + display: flex; + align-items: flex-start; + gap: 8px; +} + +.sub-gift-box strong { + display: block; + color: #111827; + font-size: 0.78rem; + margin-bottom: 2px; +} + +.sub-gift-box small { + color: #4b5563; + font-size: 0.72rem; + line-height: 1.45; +} + +.sub-divider { + margin: 14px 0; + height: 1px; + background: rgba(229, 231, 235, 0.8); +} + +.sub-plan-content ul { + margin: 0; + padding: 0; + list-style: none; + display: grid; + gap: 10px; +} + +.sub-plan-content li { + display: flex; + align-items: flex-start; + gap: 8px; +} + +.sub-plan-content li svg { + color: #14b8a6; + margin-top: 2px; + flex-shrink: 0; +} + +.sub-plan-card.yearly .sub-plan-content li svg { + color: #6366f1; +} + +.sub-plan-content li span { + color: #374151; + font-size: 0.8rem; + line-height: 1.5; +} + +.sub-checkout-card { + margin-top: 20px; + border-radius: 24px; + border: 1px solid rgba(229, 231, 235, 0.8); + background: rgba(255, 255, 255, 0.62); + padding: 20px; + display: flex; + align-items: center; + justify-content: space-between; + gap: 20px; +} + +.sub-checkout-card h3 { + margin: 0 0 4px; + color: #111827; + font-size: 1.06rem; +} + +.sub-checkout-card p { + margin: 0; + color: #6b7280; + font-size: 0.84rem; +} + +.sub-checkout-actions { + display: grid; + gap: 10px; + justify-items: end; +} + +.sub-checkout-actions label { + display: inline-flex; + align-items: center; + gap: 8px; + cursor: pointer; + color: #4b5563; + font-size: 0.8rem; +} + +.sub-checkout-actions input { + position: absolute; + opacity: 0; + pointer-events: none; +} + +.sub-checkbox { + width: 18px; + height: 18px; + border-radius: 5px; + border: 1px solid #d1d5db; + background: #ffffff; + display: grid; + place-items: center; + color: #ffffff; +} + +.sub-checkout-actions input:checked + .sub-checkbox { + background: #14b8a6; + border-color: #14b8a6; +} + +.sub-checkout-actions .sub-checkbox svg { + opacity: 0; +} + +.sub-checkout-actions input:checked + .sub-checkbox svg { + opacity: 1; +} + +.sub-checkout-actions > button { + border: 0; + border-radius: 12px; + background: #111827; + color: #ffffff; + font-size: 0.92rem; + font-weight: 500; + padding: 11px 22px; + cursor: pointer; +} + +.sub-checkout-actions > button:hover { + background: #1f2937; +} + +.sub-checkout-actions > button:disabled { + opacity: 0.65; + cursor: not-allowed; +} + +.sub-active-wrap { + max-width: 940px; +} + +.sub-gift-alert { + position: relative; + overflow: hidden; + border-radius: 22px; + background: linear-gradient(to right, #6366f1, #8b5cf6, #6366f1); + color: #ffffff; + padding: 18px; + margin-bottom: 18px; + display: flex; + align-items: center; + gap: 12px; +} + +.sub-gift-glow { + position: absolute; + right: -60px; + top: -60px; + width: 180px; + height: 180px; + border-radius: 999px; + background: rgba(255, 255, 255, 0.24); + filter: blur(40px); +} + +.sub-gift-icon { + width: 50px; + height: 50px; + border-radius: 14px; + border: 1px solid rgba(255, 255, 255, 0.22); + background: rgba(255, 255, 255, 0.18); + display: grid; + place-items: center; + font-size: 1.6rem; + position: relative; + z-index: 1; +} + +.sub-gift-alert h2 { + margin: 0 0 2px; + font-size: 1.16rem; +} + +.sub-gift-alert p { + margin: 0; + font-size: 0.82rem; + color: #e0e7ff; +} + +.sub-gift-alert button { + margin-left: auto; + border-radius: 10px; + border: 1px solid rgba(255, 255, 255, 0.25); + background: rgba(255, 255, 255, 0.14); + color: #ffffff; + font-size: 0.78rem; + font-weight: 500; + padding: 8px 12px; + cursor: pointer; + position: relative; + z-index: 1; +} + +.sub-active-card { + border-radius: 24px; + border: 1px solid rgba(229, 231, 235, 0.8); + background: rgba(255, 255, 255, 0.62); + overflow: hidden; +} + +.sub-active-head { + padding: 18px; + border-bottom: 1px solid rgba(229, 231, 235, 0.72); + display: flex; + align-items: center; + gap: 8px; +} + +.sub-active-head h2 { + margin: 0; + color: #111827; + font-size: 1.24rem; +} + +.sub-active-grid { + display: grid; + grid-template-columns: 1fr 1fr; +} + +.sub-active-features { + padding: 18px; + border-right: 1px solid rgba(229, 231, 235, 0.7); + background: rgba(249, 250, 251, 0.4); +} + +.sub-active-features ul { + margin: 0; + padding: 0; + list-style: none; + display: grid; + gap: 10px; +} + +.sub-active-features li { + display: flex; + align-items: flex-start; + gap: 8px; +} + +.sub-active-features li svg { + color: #14b8a6; + margin-top: 2px; +} + +.sub-active-features li span { + color: #374151; + font-size: 0.82rem; + line-height: 1.5; +} + +.sub-active-status-col { + padding: 18px; +} + +.sub-active-status-box { + border-radius: 16px; + border: 1px solid rgba(153, 246, 228, 0.72); + background: linear-gradient(to bottom right, rgba(240, 253, 250, 0.8), rgba(236, 254, 255, 0.7)); + padding: 18px; + text-align: center; +} + +.sub-active-check { + width: 56px; + height: 56px; + border-radius: 999px; + border: 1px solid rgba(153, 246, 228, 0.8); + background: #ffffff; + color: #14b8a6; + display: grid; + place-items: center; + margin: 0 auto 10px; +} + +.sub-active-status-box h3 { + margin: 0 0 5px; + color: #111827; + font-size: 1rem; +} + +.sub-active-status-box strong { + display: block; + color: #0f766e; + font-size: 0.95rem; +} + +.sub-active-status-box p { + margin: 3px 0 10px; + color: #0f766e; + font-size: 0.82rem; +} + +.sub-renew-pill { + border-radius: 12px; + border: 1px solid rgba(153, 246, 228, 0.72); + background: rgba(255, 255, 255, 0.8); + color: #374151; + font-size: 0.82rem; + font-weight: 500; + padding: 9px 11px; + display: inline-flex; + align-items: center; + gap: 8px; +} + +.sub-renew-pill svg { + color: #14b8a6; +} + +.sub-manage-link { + margin-top: 12px; + width: 100%; + border: 0; + background: transparent; + color: #6b7280; + font-size: 0.8rem; + text-decoration: underline; + text-underline-offset: 3px; + cursor: pointer; +} + +.theme-dark .sub-crumb-pill, +.theme-dark .sub-redeem-card, +.theme-dark .sub-plan-card, +.theme-dark .sub-checkout-card, +.theme-dark .sub-active-card { + border-color: rgba(255, 255, 255, 0.08); + background: rgba(255, 255, 255, 0.03); +} + +.theme-dark .sub-head h1, +.theme-dark .sub-redeem-head h2, +.theme-dark .sub-plan-title-row h3, +.theme-dark .sub-checkout-card h3, +.theme-dark .sub-active-head h2, +.theme-dark .sub-active-status-box h3 { + color: #ffffff; +} + +.theme-dark .sub-head p, +.theme-dark .sub-redeem-card p, +.theme-dark .sub-price-daily, +.theme-dark .sub-plan-content li span, +.theme-dark .sub-checkout-card p, +.theme-dark .sub-checkout-actions label, +.theme-dark .sub-active-features li span, +.theme-dark .sub-manage-link, +.theme-dark .sub-crumb-pill { + color: #9ca3af; +} + +.theme-dark .sub-redeem-row input, +.theme-dark .sub-checkbox, +.theme-dark .sub-renew-pill, +.theme-dark .sub-gift-box { + border-color: rgba(255, 255, 255, 0.1); + background: rgba(255, 255, 255, 0.05); + color: #d1d5db; +} + +.theme-dark .sub-price, +.theme-dark .sub-active-status-box strong, +.theme-dark .sub-active-status-box p, +.theme-dark .sub-renew-pill { + color: #f3f4f6; +} + +.theme-dark .sub-divider, +.theme-dark .sub-active-head, +.theme-dark .sub-active-features { + border-color: rgba(255, 255, 255, 0.08); +} + +.theme-dark .sub-active-features { + background: rgba(255, 255, 255, 0.02); +} + +.theme-dark .sub-toggle-btn, +.theme-dark .sub-redeem-row button, +.theme-dark .sub-checkout-actions > button { + background: rgba(255, 255, 255, 0.12); + border: 1px solid rgba(255, 255, 255, 0.14); +} + +.theme-dark .sub-gift-alert { + background: linear-gradient(to right, rgba(79, 70, 229, 0.78), rgba(124, 58, 237, 0.74), rgba(79, 70, 229, 0.78)); +} + +@media (max-width: 1200px) { + .sub-plan-grid { + grid-template-columns: 1fr 1fr; + } + + .sub-active-grid { + grid-template-columns: 1fr; + } + + .sub-active-features { + border-right: 0; + border-bottom: 1px solid rgba(229, 231, 235, 0.72); + } +} + +@media (max-width: 860px) { + .sub-top-actions { + flex-wrap: wrap; + justify-content: flex-end; + } + + .sub-redeem-row { + grid-template-columns: 1fr; + } + + .sub-plan-grid { + grid-template-columns: 1fr; + } + + .sub-checkout-card { + flex-direction: column; + align-items: stretch; + } + + .sub-checkout-actions { + justify-items: start; + } + + .sub-gift-alert { + flex-wrap: wrap; + } + + .sub-gift-alert button { + margin-left: 0; + } +}