diff --git a/assets/images/tiny_world_3d-be449974.jpg b/assets/images/tiny_world_3d-be449974.jpg new file mode 100644 index 0000000..fdebca1 Binary files /dev/null and b/assets/images/tiny_world_3d-be449974.jpg differ diff --git a/assets/js/index-e73c2262.js b/assets/js/index-76240348.js similarity index 99% rename from assets/js/index-e73c2262.js rename to assets/js/index-76240348.js index 60460af..9f3911e 100644 --- a/assets/js/index-e73c2262.js +++ b/assets/js/index-76240348.js @@ -1,4 +1,4 @@ -function dJ(){import.meta.url,import("_").catch(()=>1);async function*n(){}}function vI(n,e){for(var t=0;ti[r]})}}}return Object.freeze(Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}))}(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))i(r);new MutationObserver(r=>{for(const s of r)if(s.type==="childList")for(const o of s.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&i(o)}).observe(document,{childList:!0,subtree:!0});function t(r){const s={};return r.integrity&&(s.integrity=r.integrity),r.referrerPolicy&&(s.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?s.credentials="include":r.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function i(r){if(r.ep)return;r.ep=!0;const s=t(r);fetch(r.href,s)}})();function xT(n){return n&&n.__esModule&&Object.prototype.hasOwnProperty.call(n,"default")?n.default:n}function xI(n){if(n.__esModule)return n;var e=n.default;if(typeof e=="function"){var t=function i(){if(this instanceof i){var r=[null];r.push.apply(r,arguments);var s=Function.bind.apply(e,r);return new s}return e.apply(this,arguments)};t.prototype=e.prototype}else t={};return Object.defineProperty(t,"__esModule",{value:!0}),Object.keys(n).forEach(function(i){var r=Object.getOwnPropertyDescriptor(n,i);Object.defineProperty(t,i,r.get?r:{enumerable:!0,get:function(){return n[i]}})}),t}var Mf={},_I={get exports(){return Mf},set exports(n){Mf=n}},ig={},z={},AI={get exports(){return z},set exports(n){z=n}},At={};/** +function pJ(){import.meta.url,import("_").catch(()=>1);async function*n(){}}function vI(n,e){for(var t=0;ti[r]})}}}return Object.freeze(Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}))}(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))i(r);new MutationObserver(r=>{for(const s of r)if(s.type==="childList")for(const o of s.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&i(o)}).observe(document,{childList:!0,subtree:!0});function t(r){const s={};return r.integrity&&(s.integrity=r.integrity),r.referrerPolicy&&(s.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?s.credentials="include":r.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function i(r){if(r.ep)return;r.ep=!0;const s=t(r);fetch(r.href,s)}})();function xT(n){return n&&n.__esModule&&Object.prototype.hasOwnProperty.call(n,"default")?n.default:n}function xI(n){if(n.__esModule)return n;var e=n.default;if(typeof e=="function"){var t=function i(){if(this instanceof i){var r=[null];r.push.apply(r,arguments);var s=Function.bind.apply(e,r);return new s}return e.apply(this,arguments)};t.prototype=e.prototype}else t={};return Object.defineProperty(t,"__esModule",{value:!0}),Object.keys(n).forEach(function(i){var r=Object.getOwnPropertyDescriptor(n,i);Object.defineProperty(t,i,r.get?r:{enumerable:!0,get:function(){return n[i]}})}),t}var Mf={},_I={get exports(){return Mf},set exports(n){Mf=n}},ig={},z={},AI={get exports(){return z},set exports(n){z=n}},At={};/** * @license React * react.production.min.js * @@ -3352,8 +3352,8 @@ const s="service_fffw0th",o="template_o9xubcg",a="ufENriPo_UzUtW-82",l="Andrei", Copyright (c) 2018 Jed Watson. Licensed under the MIT License (MIT), see http://jedwatson.github.io/classnames -*/(function(n){(function(){var e={}.hasOwnProperty;function t(){for(var i=[],r=0;r(typeof window=="object"&&document.documentElement.style.setProperty("--line-color",i),oj.default.createElement("div",{className:(0,aj.default)(e,"vertical-timeline",{"vertical-timeline--animate":n,"vertical-timeline--two-columns":t==="2-columns","vertical-timeline--one-column-left":t==="1-column"||t==="1-column-left","vertical-timeline--one-column-right":t==="1-column-right"})},r));wL.propTypes={children:mo.default.oneOfType([mo.default.arrayOf(mo.default.node),mo.default.node]).isRequired,className:mo.default.string,animate:mo.default.bool,layout:mo.default.oneOf(["1-column-left","1-column","2-columns","1-column-right"]),lineColor:mo.default.string};var lj=wL;Zg.default=lj;var qg={};function H1(){return H1=Object.assign||function(n){for(var e=1;e=0)&&(t[r]=n[r]);return t}var W1=new Map,Xp=new WeakMap,dT=0,ML=void 0;function fj(n){ML=n}function hj(n){return n?(Xp.has(n)||(dT+=1,Xp.set(n,dT.toString())),Xp.get(n)):"0"}function dj(n){return Object.keys(n).sort().filter(function(e){return n[e]!==void 0}).map(function(e){return e+"_"+(e==="root"?hj(n.root):n[e])}).toString()}function pj(n){var e=dj(n),t=W1.get(e);if(!t){var i=new Map,r,s=new IntersectionObserver(function(o){o.forEach(function(a){var l,c=a.isIntersecting&&r.some(function(h){return a.intersectionRatio>=h});n.trackVisibility&&typeof a.isVisible>"u"&&(a.isVisible=c),(l=i.get(a.target))==null||l.forEach(function(h){h(c,a)})})},n);r=s.thresholds||(Array.isArray(n.threshold)?n.threshold:[n.threshold||0]),t={id:e,observer:s,elements:i},W1.set(e,t)}return t}function lw(n,e,t,i){if(t===void 0&&(t={}),i===void 0&&(i=ML),typeof window.IntersectionObserver>"u"&&i!==void 0){var r=n.getBoundingClientRect();return e(i,{isIntersecting:i,target:n,intersectionRatio:typeof t.threshold=="number"?t.threshold:0,time:0,boundingClientRect:r,intersectionRect:r,rootBounds:r}),function(){}}var s=pj(t),o=s.id,a=s.observer,l=s.elements,c=l.get(n)||[];return l.has(n)||l.set(n,c),c.push(e),a.observe(n),function(){c.splice(c.indexOf(e),1),c.length===0&&(l.delete(n),a.unobserve(n)),l.size===0&&(a.disconnect(),W1.delete(o))}}var mj=["children","as","triggerOnce","threshold","root","rootMargin","onChange","skip","trackVisibility","delay","initialInView","fallbackInView"];function pT(n){return typeof n.children!="function"}var ng=function(n){uj(e,n);function e(i){var r;return r=n.call(this,i)||this,r.node=null,r._unobserveCb=null,r.handleNode=function(s){r.node&&(r.unobserve(),!s&&!r.props.triggerOnce&&!r.props.skip&&r.setState({inView:!!r.props.initialInView,entry:void 0})),r.node=s||null,r.observeNode()},r.handleChange=function(s,o){s&&r.props.triggerOnce&&r.unobserve(),pT(r.props)||r.setState({inView:s,entry:o}),r.props.onChange&&r.props.onChange(s,o)},r.state={inView:!!i.initialInView,entry:void 0},r}var t=e.prototype;return t.componentDidUpdate=function(r){(r.rootMargin!==this.props.rootMargin||r.root!==this.props.root||r.threshold!==this.props.threshold||r.skip!==this.props.skip||r.trackVisibility!==this.props.trackVisibility||r.delay!==this.props.delay)&&(this.unobserve(),this.observeNode())},t.componentWillUnmount=function(){this.unobserve(),this.node=null},t.observeNode=function(){if(!(!this.node||this.props.skip)){var r=this.props,s=r.threshold,o=r.root,a=r.rootMargin,l=r.trackVisibility,c=r.delay,h=r.fallbackInView;this._unobserveCb=lw(this.node,this.handleChange,{threshold:s,root:o,rootMargin:a,trackVisibility:l,delay:c},h)}},t.unobserve=function(){this._unobserveCb&&(this._unobserveCb(),this._unobserveCb=null)},t.render=function(){if(!pT(this.props)){var r=this.state,s=r.inView,o=r.entry;return this.props.children({inView:s,entry:o,ref:this.handleNode})}var a=this.props,l=a.children,c=a.as,h=cj(a,mj);return z.createElement(c||"div",H1({ref:this.handleNode},h),l)},e}(z.Component);ng.displayName="InView";ng.defaultProps={threshold:0,triggerOnce:!1,initialInView:!1};function gj(n){var e=n===void 0?{}:n,t=e.threshold,i=e.delay,r=e.trackVisibility,s=e.rootMargin,o=e.root,a=e.triggerOnce,l=e.skip,c=e.initialInView,h=e.fallbackInView,d=z.useRef(),p=z.useState({inView:!!c}),m=p[0],v=p[1],y=z.useCallback(function(A){d.current!==void 0&&(d.current(),d.current=void 0),!l&&A&&(d.current=lw(A,function(w,_){v({inView:w,entry:_}),_.isIntersecting&&a&&d.current&&(d.current(),d.current=void 0)},{root:o,rootMargin:s,threshold:t,trackVisibility:r,delay:i},h))},[Array.isArray(t)?t.toString():t,o,s,a,l,r,h,i]);z.useEffect(function(){!d.current&&m.entry&&!a&&!l&&v({inView:!!c})});var x=[y,m.inView,m.entry];return x.ref=x[0],x.inView=x[1],x.entry=x[2],x}const yj=Object.freeze(Object.defineProperty({__proto__:null,InView:ng,default:ng,defaultFallbackInView:fj,observe:lw,useInView:gj},Symbol.toStringTag,{value:"Module"})),vj=xI(yj);qg.__esModule=!0;qg.default=void 0;var go=uw(z),Yt=uw(eg),Yp=uw(tg),xj=vj;function uw(n){return n&&n.__esModule?n:{default:n}}const SL=({children:n="",className:e="",contentArrowStyle:t=null,contentStyle:i=null,date:r="",dateClassName:s="",icon:o=null,iconClassName:a="",iconOnClick:l=null,onTimelineElementClick:c=null,iconStyle:h=null,id:d="",position:p="",style:m=null,textClassName:v="",intersectionObserverProps:y={rootMargin:"0px 0px -40px 0px",triggerOnce:!0},visible:x=!1})=>go.default.createElement(xj.InView,y,({inView:A,ref:w})=>go.default.createElement("div",{ref:w,id:d,className:(0,Yp.default)(e,"vertical-timeline-element",{"vertical-timeline-element--left":p==="left","vertical-timeline-element--right":p==="right","vertical-timeline-element--no-children":n===""}),style:m},go.default.createElement(go.default.Fragment,null,go.default.createElement("span",{style:h,onClick:l,className:(0,Yp.default)(a,"vertical-timeline-element-icon",{"bounce-in":A||x,"is-hidden":!(A||x)})},o),go.default.createElement("div",{style:i,onClick:c,className:(0,Yp.default)(v,"vertical-timeline-element-content",{"bounce-in":A||x,"is-hidden":!(A||x)})},go.default.createElement("div",{style:t,className:"vertical-timeline-element-content-arrow"}),n,go.default.createElement("span",{className:(0,Yp.default)(s,"vertical-timeline-element-date")},r)))));SL.propTypes={children:Yt.default.oneOfType([Yt.default.arrayOf(Yt.default.node),Yt.default.node]),className:Yt.default.string,contentArrowStyle:Yt.default.shape({}),contentStyle:Yt.default.shape({}),date:Yt.default.node,dateClassName:Yt.default.string,icon:Yt.default.element,iconClassName:Yt.default.string,iconStyle:Yt.default.shape({}),iconOnClick:Yt.default.func,onTimelineElementClick:Yt.default.func,id:Yt.default.string,position:Yt.default.string,style:Yt.default.shape({}),textClassName:Yt.default.string,visible:Yt.default.bool,intersectionObserverProps:Yt.default.shape({root:Yt.default.object,rootMargin:Yt.default.string,threshold:Yt.default.number,triggerOnce:Yt.default.bool})};var _j=SL;qg.default=_j;var CL={VerticalTimeline:Zg.default,VerticalTimelineElement:qg.default};const Aj=""+new URL("../images/close-ad0e0ca6.svg",import.meta.url).href,mT=""+new URL("../images/github-3b4e1609.png",import.meta.url).href,gT=""+new URL("../images/gotosite-c51fa3a0.png",import.meta.url).href,wj=""+new URL("../images/logo-31927660.png",import.meta.url).href,Mj=""+new URL("../images/menu-242d80a8.svg",import.meta.url).href,Sj=""+new URL("../images/astro-1faa6528.png",import.meta.url).href,Cj=""+new URL("../images/flutter-ece36059.png",import.meta.url).href,Ej="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPAAAADwCAYAAAA+VemSAAAACXBIWXMAAAsTAAALEwEAmpwYAAAOgElEQVR4nO2dCdCVZRXHz8Pnwi4groElmijuK6m4YCqJpZmJqJla40qGWjgYZZQL5p4GJZlboKKTGzoouWSAiQsuqONY42Q1LVrZYlpZnebcy51B6uO7977LeZ/7/H4z/wGGmfve5zznf577vu+ziAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtIW+JIqIQafkgKSGd8ARMVAMjIEpBBQCZQQmCSgEceeApIZ3wBExUAyMgSkEFAJlBCYJKARx54CkhnfAETFQDIyBKQQUAmUEJgkoBHHngKSGd8ARMVAMjIEpBBQCZQQmCSgEceeApIZ3wBExUAyMgSkEFAJlBCYJKARx54CkhnfAETFQDIyBKQQUAmUEJgkoBHHngKSGd8ARMVAMjIEpBBQCZQQmCSgEceeApIZ3wBExUAyMgSkEFAJlBCYJKARx54CkhnfAETFQDIyBKQQUAmUEJgkoBHHngKSGd8ARMVAMjIEpBBQCZQQmCSgEceeApIZ3wBExUAyMgSkEFAJlBCYJKARx54CkhnfAETFQDIyBKQQUAmUEJgkoBHHngKSGd8ARMVAMjIEpBBQCZQQmCSgEceeApIZ3wBExUAyMgSkEFAJlBCYJKARx54CkhnfAETFQDIyBKQQUAmUEJgkoBHHngKSGd8ARMVAMjIEpBBQCZQQmCSgEceeApIZ3wBExUAyMgSkEFAJlBCYJKARx54CkhnfAETFQDIyBKQQUAmUEJgkoBHHngKSGd8ARMVAMjIEpBBQCZQQmCSgEceeApIZ3wBExUAyMgSkEFAJlBCYJKARx54CkhnfAETFQDIyBKQQUAmUEJgkoBHHngKSGd8ARMVAMjIEpBBQCZQQmCSgEceeApIZ3wBExUAyMgSkEFAJlBCYJKARx54CkhnfAETFQDIyBKQQUAmUEJgkoBHHngKSGd8ARMVAMjIEpBBQCZQQmCSgEceeApIZ3wBExUAyMgSkEFAJlBCYJKARx54CkhnfAETFQDIyB/Sp+yKQJHwmlft+3l4kumiN62dmixx8WdJ9dg246LOjggUH79A4aQv3v79sg6Oab1P//pAlBL50iev9s0b8tq3bBkdTwDnjsisHA7zwj+v1viB62f9C+vbN9395rBx03JuhV00TfXFrF/kgM74DHriob+A8/EZ16YtChg7N9x+40oF/QyccGfXVhlfojMbwDHruqaOB3l4teMkV00IBijLuq1loz6PRJov94rgr9kRjeAY9dVTPwy/eJ7rZtOcZdVVtvHvSp2737IzG8DRC7qmTghdeWN+p2p769g94zEwNj4AqYMyYDz7tcdI0uX/PKCtn3mP01r/5IDG8DxK4qGPjumdUxr6yQvY6aezEGxsAVMGmVDWz3vAP7+xtWunnltGRu2f2RGN4GiF2eBranvttu4W9UWY3WHxL0tYcwMAaugFmrZuDzJ2e/fhkaN6a82WaSGt4GiF1eBv79Y6L9+/qbs1ndcCEGxsAVMGxVDDztZH9TtqIh64Ra0Sm+PxLD2wCxy8PANtNqw6H+pmxWgwcGvWZ6Wf2RGN4GiF0eBr732/nd+24/MugVU0WfuUP09cX11Ub259J5oldPE917l/oroXY//9hDgr6xpMz+SAxvA8QuDwNPOjq7cfv1qd+X/ufFnq9nr4J22LK1z990WKgtPyy/PxLD2wCxy8PANuc46/vZR29qfR3xxPE9f3ZXV9Azjwv61tNe/ZEY3gaIXWUb+O/PSs0kWa553ufba+u/losefuDqf44/eZt3fySGtwFiV9kGfnF+tmvarht/far99trIOmqz//3MGWeK/vP5KvRHYngHPHaVbeAHr8t2zQP2yD6pwh54NeZejx0d9JUFVeqPxPAOeOwq28C2cCHL9T57eD6zor46SfTa85p7CKal9kdieAc8dpVt4NuvzHZN28ius/sjMbwDHrvKNnDWd8AH7omBOwpvA8Susg38yA2S+f2v7VLZuf2RGN4Bj11lG9geGGW95qxzO7k/EsM74LGrbAPb6NmrV7Zrrjso6E/v79T+SAzvgMeusg1s2nJEtmuaRgwPtd08Oq8/EsM74LHLw8C2QCDrdU22Fc+NM6r3Kkgz9UdieAc8dnkY+KaL8t2Jw1YcPXZzp/RHYngHPHZ5GNiOTFlzjfwM3JAdZLZgduz9kRjeAY9dHgY2fXI1iwqyasetgt5yaTXmNmvL/ZEY3gGPXV4GtuWARRm4ITti1FYu/XZRTP2RGN4Bj11eBjbZrKqiTWxae62gnz406LN3xtAfieEd8NjlaeDn75LayYBlmHjl1UwPfLe6T64lNbwDHrs8DWz6+uk+e0NvNzLozZeI/vsF/z54b38khnfAY5e3gc1AB+9TvoEbsu19bruiSv2RGN4Bj13eBja9uVRqI6KXiUWCfvhD/mcDY+AKGCI2VcHApt8tzr7ZXVZ1dQX94gm+q50kNbwNELuqYmDTHx+X2mQMTxOLBN1qRNAnnDa3k9TwNkDsqpKBGycW2iiYdcVSVq3RFfSCM8p/Wi2p4W2A2FU1Azf0w+9JbSKG92h81MGhthUuBsbA7maNycAmO0zshMP8R+OD9irvvlhSw9sAsavKBl55G9j9Rvua+JCxobYxPAbGwO6mjc3ADc2fJbrLNn4mPuv44tsqqeFtgNgVk4EbWjRH9KP7Zjt1sB2FEGq7ahbbH4nhbYDYFaOBG3ruzvo9sh12VpaJN14/29EuPfdHYngbIHbFbOCVZ3JdeY7o+zcux8TnnlZcmyU1vJMndnWCgRt6d7norZeJ7jSqWAMP7B/0z08U1R+J4Z00sauTDLyyFl4rtfnNRZn4m18qqj8SwztRYlenGrghO+93/93zN/Do7Yppt6SGd4LErk43cEN3Xi26wbr5GbhXr6C/frSI/kgM78SIXakY2GR7Y+21c34mnnd5Ef2RGN5JEbtSMrDpradF99gxHwN/4YT82y6p4Z0QMcvm96ZmYNNrD0ntlMOsbT94HwyMgR0T+fXF1TSwLWIouu02LTJr27f5IAbGwE0m3M8flNrWqLboPa8kthP+sibxkQeFXN/jXnhGfXRcOq9YAy+Zm73t6w3BwBi4h0Sz0wVmnCnat3c9aU6ekF/S3Ped7El83Mfz+T7L737vQoVRmxW7DtemQ2Zte78+GBgD93CavW3vsuqE+rtn5pPENtplTeJTJ4bMo+75k6W2+fqqn33OScXeX2e9D+7qwsAYuJvXHXYEZ3erbQYPDPri/OwJvOdO2e8Dp3wm28buq5v2aNva2ESMIsxra3vt87O0vX9fDIyBV9kjeda5UjNoT8lj281kOaX+hXvy2VDdFhG0c1tgG7o3cyrDpsOCvrEkfwO/ujB7+zdaDwNj4BUJZXsS79riYvWhg4P+6Mb2Rp8xOYy+pjuuau3adj6RnR7YyjXGjs7/fvjqadkNvN1IDJy8gf+0VPRzx9Tvp9qd0jfp6FA7c7eZxH17mdQ2asvDvCZbk9vsqDt9UvvnAo/fO799qexzNt8ke9uPGIeBkzbw3ItFNxyaj5HsKfVJE0LtyfJfnnzvdWxr1JfvE71iqtR+kuZlXrumPYTqqZ3LfiC6fQ4nL9i+WLYBfNa4n35MddcFS2p4m7Bd/eyB7A9RVie7jx4xPOjwDetGK+Ia9hCsmbbuvkN+17T7zgWz24u5/QyffGx+3+XB6/LPC0kNbyNmkY2YRRm4DH3l1OYMvHiO5L5/1d671I8JbWanSNss/pZLpfZuOa/r9+1dzHtqSQ1vE2aRLUfLY06ul1o5DGzi+OJ+adi9qE12ue4CqW06d89M0RtnSO1khUP3C7ruoPyvO3E864GTN7Al9mVn+5yPm1X287yVY0dsAYFtReP9vfPSw9cXU9QlNbxH0awyE4wb45+QrcoKT6tttZ+x3t87D+00qrXihYE72MCm3/xYdP0h/onZrGwktddf7bT1xCP8v38VH17pCklqeJsvz3nPZe5vnEUXndV+O+09dB6vlLw0oeD1z5Ia3sbLU3d9q9hXS3nIJkBkffpqvzi2+IB/W1rVsA3yXc6JgTvMwCZ7elr2kSHNymZR5bVO95cP5zuppGj171vOod+SGt6GK0L2sKdPQZMvsuiqafkvKLCn2d7tkh5kSx3vb3PyCAZO0MAmq/Z2Do938jY07eRi7v1spZFNyvBun3SjQQPaWzCCgRMegRv61SP5rNnNIvs5bxMiimynzaf+8intL+goStuPDPrSveX2uaSGt8nKWCN8zfTm1gjnLZvBZBuil9XWx28t/lyjZrTWmkGnnljslj4YOBEDr7xLx6c+Vl8+WMaoa69L7Jplt9PmNl9/gc+9ca9eQT9xQNBXFvj1s6SGt7HKlu2kYdvt/L89pLLKfsIeMra1Oc5FydYP28O8Mu6P1xkQ9JQjQ23JpXe7JTW8A+4l2zvZTsjbd7f63lFZRh3bCcS2uPnFw/7t6u5p9SVT6mbOa7KLvdO1bXptR5F3ctooIA9JangHvAqyA65tIf9XJ4kefmDQnbcOtamZNrJYstpobffQm2xUX8NrezmbYefPqm/u7v39W5GZbdGc+t5hpx1VPx1hhy1DbWMEa2OjmA3oV//3ZsNDbfsgWz1kC/Bvv7K+Ftu7HdqNJDW8A46IgWJgDEwhoBAoIzBJQCGIOwckNbwDjoiBYmAMTCGgECgjMElAIYg7ByQ1vAOOiIFiYAxMIaAQKCMwSUAhiDsHJDW8A46IgWJgDEwhoBAoIzBJQCGIOwckNbwDjoiBYmAMTCGgECgjMElAIYg7ByQ1vAOOiIFiYAxMIaAQKCMwSUAhiDsHJDW8A46IgWJgDEwhoBBoiiMwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEg+/BceiofdqS/+vQAAAABJRU5ErkJggg==",bj=""+new URL("../images/qwik-cdeb8136.png",import.meta.url).href,Tj=""+new URL("../images/reactjs-966214a8.png",import.meta.url).href,Pj=""+new URL("../images/threejs-1d0654a8.svg",import.meta.url).href,Bj="data:image/png;base64,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",Rj=""+new URL("../images/vite-ec39a4eb.png",import.meta.url).href,Lj="data:image/png;base64,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",Ij=""+new URL("../images/freelance-f0214ce1.png",import.meta.url).href,Dj=""+new URL("../images/ai_3d_tshirts-77e21a33.jpg",import.meta.url).href,Fj=""+new URL("../images/ai_summarizer-e11b9c7d.jpg",import.meta.url).href,kj=""+new URL("../images/currency_list-170238cc.jpg",import.meta.url).href,Oj=""+new URL("../images/dcreative-df5e240a.jpg",import.meta.url).href,Nj=""+new URL("../images/game_2048-d09be7e8.jpg",import.meta.url).href,Uj=""+new URL("../images/space_invaders-9514993f.jpg",import.meta.url).href,zj=""+new URL("../images/discord-1bad5f6a.png",import.meta.url).href,Gj=""+new URL("../images/github_alt-cb42ebbe.png",import.meta.url).href,Hj=""+new URL("../images/linkedin-4a15752c.png",import.meta.url).href,Vj="exslym",Wj="exslym",jj="794645643518803978",yT=[{id:"about",title:"About"},{id:"projects",title:"Projects"},{id:"contact",title:"Contact"}],Jj=[{name:"JavaScript",icon:Ej},{name:"TypeScript",icon:Bj},{name:"React",icon:Tj},{name:"Flutter",icon:Cj},{name:"ThreeJS",icon:Pj},{name:"Qwik",icon:bj},{name:"Astro",icon:Sj},{name:"Vite",icon:Rj}],Xj=[{title:"Frontend Developer",company_name:"Doctor At Work",icon:Lj,iconBg:"#383E56",date:"September 2020 - Present",points:["Developed and maintained over 140 commercial websites, banners and emails with responsive design and cross-browser compatibility, as well as other visual materials as a part of clients' advertising campaigns","Created dozens of mini-games, chat bots, quizzes and interactive educational sites with complex animated and interactive elements and detailings using JavaScript, TypeScript and frontend frameworks like React, Astro, Qwik, ThreeJS, etc.","Adapted the code of third-party client projects made in React framework, revised for publication on own or the company's platforms.","Collaborated with cross-functional teams including designers, project managers, and other developers to create high-quality products.","Formed and structured development standards to automate routine tasks, carried out systematic code reviews, created needed templates, developed and implemented various plugins, etc."]},{title:"Frontend Developer",company_name:"Freelance | Self-employed",icon:Ij,iconBg:"#383E56",date:"January 2019 - September 2020",points:["Developed and maintained over 20 websites using JavaScript, HTML5, CSS3, SASS/SCSS and other related technologies","Implemented responsive adaptive design and ensured cross-browser compatibility."]}],Yj=[{name:"3D T-Shirts Design with AI",description:"A website project where you can make custom design t-shirts in 3D with the help of AI in real-time. You can also choose color or upload your own images to make your t-shirt truly unique.",tags:[{name:"threejs",color:"blue-text-gradient"},{name:"react",color:"green-text-gradient"},{name:"tailwindcss",color:"pink-text-gradient"},{name:"openai",color:"yellow-text-gradient"}],image:Dj,source_code_link:"https://github.com/exslym/3D-AI-Project/",website_link:"https://exslym.github.io/3D-AI-Project/"},{name:"Cryptocurrency Prices",description:"A website version of mobile App created using the Flutter framework. The app provides real-time information about the prices of various cryptocurrencies such as Bitcoin, Ethereum, Litecoin, and many others.",tags:[{name:"dart",color:"blue-text-gradient"},{name:"flutter",color:"green-text-gradient"},{name:"bloc",color:"pink-text-gradient"},{name:"firebase",color:"yellow-text-gradient"}],image:kj,source_code_link:"https://github.com/exslym/Crypto-Coins-List/",website_link:"https://cryptocurrency-prices-exslym.vercel.app/"},{name:"AI Article Summarizer",description:"This minimalistic cozy color app is an AI article summarizer that transforms lengthy articles into clear and concise summaries, using an article extractor and summarizer by RapidAPI, powered by openAI GPT-4.",tags:[{name:"javascript",color:"blue-text-gradient"},{name:"react",color:"green-text-gradient"},{name:"tailwindcss",color:"pink-text-gradient"},{name:"openai",color:"yellow-text-gradient"}],image:Fj,source_code_link:"https://github.com/exslym/AI-Summarizer/",website_link:"https://exslym.github.io/AI-Summarizer/"},{name:"2048 [Game]",description:"This is a popular puzzle game where the player must combine numbered tiles to reach the ultimate goal of creating a tile with the number 2048. When two tiles with the same number collide, they merge into one tile with a value equal to the sum of the two.",tags:[{name:"javascript",color:"blue-text-gradient"},{name:"algorithms",color:"green-text-gradient"},{name:"scss",color:"pink-text-gradient"}],image:Nj,source_code_link:"https://github.com/exslym/2048-Game/",website_link:"https://exslym.github.io/2048-Game/"},{name:"D-Creative Studio",description:"An outstanding animate-on-scroll landing for Creative Studio - a team of innovative designers, developers, videographs and artists who specialize in crafting unique and engaging digital experiences for their clients.",tags:[{name:"javascript",color:"blue-text-gradient"},{name:"animate-on-scroll",color:"green-text-gradient"},{name:"scss",color:"pink-text-gradient"}],image:Oj,source_code_link:"https://github.com/exslym/D-Creative-Studio/",website_link:"https://exslym.github.io/D-Creative-Studio/"},{name:"Space Invaders [Game]",description:"Web-based legendary classic arcade game Space Invaders made with JavaScript and Canvas with its iconic pixel graphics and addictive gameplay with mobile adaptivity and touch controls.",tags:[{name:"javascript",color:"blue-text-gradient"},{name:"canvas",color:"green-text-gradient"},{name:"scss",color:"pink-text-gradient"}],image:Uj,source_code_link:"https://github.com/exslym/Space-Invaders_GAME/",website_link:"https://exslym.github.io/Space-Invaders_GAME/"}],Kj=[{name:"linkedin",icon:Hj,link:`https://www.linkedin.com/in/${Wj}/`},{name:"github",icon:Gj,link:`https://github.com/${Vj}/`},{name:"discord",icon:zj,link:`https://github.com/${jj}/`}],Qj=({experience:n})=>nt(CL.VerticalTimelineElement,{contentStyle:{background:"#0b212d",color:"#fff"},contentArrowStyle:{borderRight:"7px solid #0b212d"},date:he("div",{className:" date-desktop",children:he("span",{className:"text-primary",children:n.date})}),iconStyle:{background:n.iconBg},icon:he("div",{className:"flex justify-center items-center w-full h-full",children:he("img",{src:n.icon,alt:n.company_name,className:"w-[60%] h-[60%] object-contain"})}),children:[nt("div",{children:[he("p",{className:"date-mobile text-primary",children:n.date}),he("h3",{className:"text-white text-[24px] font-bold",children:n.title}),he("p",{className:"text-primary text-[16px] font-semibold",style:{margin:0},children:n.company_name})]}),he("ul",{className:"custom-list mt-5 list-disc ml-5 space-y-2",children:n.points.map((e,t)=>he("li",{className:"text-white-100 text-[14px] pl-1 tracking-wider",children:e},`experience-point-${t}`))})]}),Zj=()=>nt(K1,{children:[nt(os.div,{variants:fA(),children:[he("p",{className:Vi.sectionSubText,children:"What I have done so far"}),he("h2",{className:Vi.sectionHeadText,children:"Work Experience."})]}),he("div",{className:"mt-16 flex flex-col",children:he(CL.VerticalTimeline,{children:Xj.map((n,e)=>he(Qj,{experience:n},e))})})]}),qj=Yu(Zj,"work"),$j=()=>nt("section",{className:"relative w-full h-screen mx-auto",children:[nt("div",{className:`${Vi.paddingX} absolute inset-0 lg:top-[100px] md:top-[90px] xs:top-[90px] top-[100px] max-w-7xl mx-auto flex felx-row items-start gap-5 h-max`,children:[nt("div",{className:`flex flex-col justify-center items-center +*/(function(n){(function(){var e={}.hasOwnProperty;function t(){for(var i=[],r=0;r(typeof window=="object"&&document.documentElement.style.setProperty("--line-color",i),oj.default.createElement("div",{className:(0,aj.default)(e,"vertical-timeline",{"vertical-timeline--animate":n,"vertical-timeline--two-columns":t==="2-columns","vertical-timeline--one-column-left":t==="1-column"||t==="1-column-left","vertical-timeline--one-column-right":t==="1-column-right"})},r));wL.propTypes={children:mo.default.oneOfType([mo.default.arrayOf(mo.default.node),mo.default.node]).isRequired,className:mo.default.string,animate:mo.default.bool,layout:mo.default.oneOf(["1-column-left","1-column","2-columns","1-column-right"]),lineColor:mo.default.string};var lj=wL;Zg.default=lj;var qg={};function H1(){return H1=Object.assign||function(n){for(var e=1;e=0)&&(t[r]=n[r]);return t}var W1=new Map,Xp=new WeakMap,dT=0,ML=void 0;function fj(n){ML=n}function hj(n){return n?(Xp.has(n)||(dT+=1,Xp.set(n,dT.toString())),Xp.get(n)):"0"}function dj(n){return Object.keys(n).sort().filter(function(e){return n[e]!==void 0}).map(function(e){return e+"_"+(e==="root"?hj(n.root):n[e])}).toString()}function pj(n){var e=dj(n),t=W1.get(e);if(!t){var i=new Map,r,s=new IntersectionObserver(function(o){o.forEach(function(a){var l,c=a.isIntersecting&&r.some(function(h){return a.intersectionRatio>=h});n.trackVisibility&&typeof a.isVisible>"u"&&(a.isVisible=c),(l=i.get(a.target))==null||l.forEach(function(h){h(c,a)})})},n);r=s.thresholds||(Array.isArray(n.threshold)?n.threshold:[n.threshold||0]),t={id:e,observer:s,elements:i},W1.set(e,t)}return t}function lw(n,e,t,i){if(t===void 0&&(t={}),i===void 0&&(i=ML),typeof window.IntersectionObserver>"u"&&i!==void 0){var r=n.getBoundingClientRect();return e(i,{isIntersecting:i,target:n,intersectionRatio:typeof t.threshold=="number"?t.threshold:0,time:0,boundingClientRect:r,intersectionRect:r,rootBounds:r}),function(){}}var s=pj(t),o=s.id,a=s.observer,l=s.elements,c=l.get(n)||[];return l.has(n)||l.set(n,c),c.push(e),a.observe(n),function(){c.splice(c.indexOf(e),1),c.length===0&&(l.delete(n),a.unobserve(n)),l.size===0&&(a.disconnect(),W1.delete(o))}}var mj=["children","as","triggerOnce","threshold","root","rootMargin","onChange","skip","trackVisibility","delay","initialInView","fallbackInView"];function pT(n){return typeof n.children!="function"}var ng=function(n){uj(e,n);function e(i){var r;return r=n.call(this,i)||this,r.node=null,r._unobserveCb=null,r.handleNode=function(s){r.node&&(r.unobserve(),!s&&!r.props.triggerOnce&&!r.props.skip&&r.setState({inView:!!r.props.initialInView,entry:void 0})),r.node=s||null,r.observeNode()},r.handleChange=function(s,o){s&&r.props.triggerOnce&&r.unobserve(),pT(r.props)||r.setState({inView:s,entry:o}),r.props.onChange&&r.props.onChange(s,o)},r.state={inView:!!i.initialInView,entry:void 0},r}var t=e.prototype;return t.componentDidUpdate=function(r){(r.rootMargin!==this.props.rootMargin||r.root!==this.props.root||r.threshold!==this.props.threshold||r.skip!==this.props.skip||r.trackVisibility!==this.props.trackVisibility||r.delay!==this.props.delay)&&(this.unobserve(),this.observeNode())},t.componentWillUnmount=function(){this.unobserve(),this.node=null},t.observeNode=function(){if(!(!this.node||this.props.skip)){var r=this.props,s=r.threshold,o=r.root,a=r.rootMargin,l=r.trackVisibility,c=r.delay,h=r.fallbackInView;this._unobserveCb=lw(this.node,this.handleChange,{threshold:s,root:o,rootMargin:a,trackVisibility:l,delay:c},h)}},t.unobserve=function(){this._unobserveCb&&(this._unobserveCb(),this._unobserveCb=null)},t.render=function(){if(!pT(this.props)){var r=this.state,s=r.inView,o=r.entry;return this.props.children({inView:s,entry:o,ref:this.handleNode})}var a=this.props,l=a.children,c=a.as,h=cj(a,mj);return z.createElement(c||"div",H1({ref:this.handleNode},h),l)},e}(z.Component);ng.displayName="InView";ng.defaultProps={threshold:0,triggerOnce:!1,initialInView:!1};function gj(n){var e=n===void 0?{}:n,t=e.threshold,i=e.delay,r=e.trackVisibility,s=e.rootMargin,o=e.root,a=e.triggerOnce,l=e.skip,c=e.initialInView,h=e.fallbackInView,d=z.useRef(),p=z.useState({inView:!!c}),m=p[0],v=p[1],y=z.useCallback(function(A){d.current!==void 0&&(d.current(),d.current=void 0),!l&&A&&(d.current=lw(A,function(w,_){v({inView:w,entry:_}),_.isIntersecting&&a&&d.current&&(d.current(),d.current=void 0)},{root:o,rootMargin:s,threshold:t,trackVisibility:r,delay:i},h))},[Array.isArray(t)?t.toString():t,o,s,a,l,r,h,i]);z.useEffect(function(){!d.current&&m.entry&&!a&&!l&&v({inView:!!c})});var x=[y,m.inView,m.entry];return x.ref=x[0],x.inView=x[1],x.entry=x[2],x}const yj=Object.freeze(Object.defineProperty({__proto__:null,InView:ng,default:ng,defaultFallbackInView:fj,observe:lw,useInView:gj},Symbol.toStringTag,{value:"Module"})),vj=xI(yj);qg.__esModule=!0;qg.default=void 0;var go=uw(z),Yt=uw(eg),Yp=uw(tg),xj=vj;function uw(n){return n&&n.__esModule?n:{default:n}}const SL=({children:n="",className:e="",contentArrowStyle:t=null,contentStyle:i=null,date:r="",dateClassName:s="",icon:o=null,iconClassName:a="",iconOnClick:l=null,onTimelineElementClick:c=null,iconStyle:h=null,id:d="",position:p="",style:m=null,textClassName:v="",intersectionObserverProps:y={rootMargin:"0px 0px -40px 0px",triggerOnce:!0},visible:x=!1})=>go.default.createElement(xj.InView,y,({inView:A,ref:w})=>go.default.createElement("div",{ref:w,id:d,className:(0,Yp.default)(e,"vertical-timeline-element",{"vertical-timeline-element--left":p==="left","vertical-timeline-element--right":p==="right","vertical-timeline-element--no-children":n===""}),style:m},go.default.createElement(go.default.Fragment,null,go.default.createElement("span",{style:h,onClick:l,className:(0,Yp.default)(a,"vertical-timeline-element-icon",{"bounce-in":A||x,"is-hidden":!(A||x)})},o),go.default.createElement("div",{style:i,onClick:c,className:(0,Yp.default)(v,"vertical-timeline-element-content",{"bounce-in":A||x,"is-hidden":!(A||x)})},go.default.createElement("div",{style:t,className:"vertical-timeline-element-content-arrow"}),n,go.default.createElement("span",{className:(0,Yp.default)(s,"vertical-timeline-element-date")},r)))));SL.propTypes={children:Yt.default.oneOfType([Yt.default.arrayOf(Yt.default.node),Yt.default.node]),className:Yt.default.string,contentArrowStyle:Yt.default.shape({}),contentStyle:Yt.default.shape({}),date:Yt.default.node,dateClassName:Yt.default.string,icon:Yt.default.element,iconClassName:Yt.default.string,iconStyle:Yt.default.shape({}),iconOnClick:Yt.default.func,onTimelineElementClick:Yt.default.func,id:Yt.default.string,position:Yt.default.string,style:Yt.default.shape({}),textClassName:Yt.default.string,visible:Yt.default.bool,intersectionObserverProps:Yt.default.shape({root:Yt.default.object,rootMargin:Yt.default.string,threshold:Yt.default.number,triggerOnce:Yt.default.bool})};var _j=SL;qg.default=_j;var CL={VerticalTimeline:Zg.default,VerticalTimelineElement:qg.default};const Aj=""+new URL("../images/close-ad0e0ca6.svg",import.meta.url).href,mT=""+new URL("../images/github-3b4e1609.png",import.meta.url).href,gT=""+new URL("../images/gotosite-c51fa3a0.png",import.meta.url).href,wj=""+new URL("../images/logo-31927660.png",import.meta.url).href,Mj=""+new URL("../images/menu-242d80a8.svg",import.meta.url).href,Sj=""+new URL("../images/astro-1faa6528.png",import.meta.url).href,Cj=""+new URL("../images/flutter-ece36059.png",import.meta.url).href,Ej="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPAAAADwCAYAAAA+VemSAAAACXBIWXMAAAsTAAALEwEAmpwYAAAOgElEQVR4nO2dCdCVZRXHz8Pnwi4groElmijuK6m4YCqJpZmJqJla40qGWjgYZZQL5p4GJZlboKKTGzoouWSAiQsuqONY42Q1LVrZYlpZnebcy51B6uO7977LeZ/7/H4z/wGGmfve5zznf577vu+ziAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtIW+JIqIQafkgKSGd8ARMVAMjIEpBBQCZQQmCSgEceeApIZ3wBExUAyMgSkEFAJlBCYJKARx54CkhnfAETFQDIyBKQQUAmUEJgkoBHHngKSGd8ARMVAMjIEpBBQCZQQmCSgEceeApIZ3wBExUAyMgSkEFAJlBCYJKARx54CkhnfAETFQDIyBKQQUAmUEJgkoBHHngKSGd8ARMVAMjIEpBBQCZQQmCSgEceeApIZ3wBExUAyMgSkEFAJlBCYJKARx54CkhnfAETFQDIyBKQQUAmUEJgkoBHHngKSGd8ARMVAMjIEpBBQCZQQmCSgEceeApIZ3wBExUAyMgSkEFAJlBCYJKARx54CkhnfAETFQDIyBKQQUAmUEJgkoBHHngKSGd8ARMVAMjIEpBBQCZQQmCSgEceeApIZ3wBExUAyMgSkEFAJlBCYJKARx54CkhnfAETFQDIyBKQQUAmUEJgkoBHHngKSGd8ARMVAMjIEpBBQCZQQmCSgEceeApIZ3wBExUAyMgSkEFAJlBCYJKARx54CkhnfAETFQDIyBKQQUAmUEJgkoBHHngKSGd8ARMVAMjIEpBBQCZQQmCSgEceeApIZ3wBExUAyMgSkEFAJlBCYJKARx54CkhnfAETFQDIyBKQQUAmUEJgkoBHHngKSGd8ARMVAMjIEpBBQCZQQmCSgEceeApIZ3wBExUAyMgSkEFAJlBCYJKARx54CkhnfAETFQDIyBKQQUAmUEJgkoBHHngKSGd8ARMVAMjIEpBBQCZQQmCSgEceeApIZ3wBExUAyMgSkEFAJlBCYJKARx54CkhnfAETFQDIyB/Sp+yKQJHwmlft+3l4kumiN62dmixx8WdJ9dg246LOjggUH79A4aQv3v79sg6Oab1P//pAlBL50iev9s0b8tq3bBkdTwDnjsisHA7zwj+v1viB62f9C+vbN9395rBx03JuhV00TfXFrF/kgM74DHriob+A8/EZ16YtChg7N9x+40oF/QyccGfXVhlfojMbwDHruqaOB3l4teMkV00IBijLuq1loz6PRJov94rgr9kRjeAY9dVTPwy/eJ7rZtOcZdVVtvHvSp2737IzG8DRC7qmTghdeWN+p2p769g94zEwNj4AqYMyYDz7tcdI0uX/PKCtn3mP01r/5IDG8DxK4qGPjumdUxr6yQvY6aezEGxsAVMGmVDWz3vAP7+xtWunnltGRu2f2RGN4GiF2eBranvttu4W9UWY3WHxL0tYcwMAaugFmrZuDzJ2e/fhkaN6a82WaSGt4GiF1eBv79Y6L9+/qbs1ndcCEGxsAVMGxVDDztZH9TtqIh64Ra0Sm+PxLD2wCxy8PANtNqw6H+pmxWgwcGvWZ6Wf2RGN4GiF0eBr732/nd+24/MugVU0WfuUP09cX11Ub259J5oldPE917l/oroXY//9hDgr6xpMz+SAxvA8QuDwNPOjq7cfv1qd+X/ufFnq9nr4J22LK1z990WKgtPyy/PxLD2wCxy8PANuc46/vZR29qfR3xxPE9f3ZXV9Azjwv61tNe/ZEY3gaIXWUb+O/PSs0kWa553ufba+u/losefuDqf44/eZt3fySGtwFiV9kGfnF+tmvarht/far99trIOmqz//3MGWeK/vP5KvRHYngHPHaVbeAHr8t2zQP2yD6pwh54NeZejx0d9JUFVeqPxPAOeOwq28C2cCHL9T57eD6zor46SfTa85p7CKal9kdieAc8dpVt4NuvzHZN28ius/sjMbwDHrvKNnDWd8AH7omBOwpvA8Susg38yA2S+f2v7VLZuf2RGN4Bj11lG9geGGW95qxzO7k/EsM74LGrbAPb6NmrV7Zrrjso6E/v79T+SAzvgMeusg1s2nJEtmuaRgwPtd08Oq8/EsM74LHLw8C2QCDrdU22Fc+NM6r3Kkgz9UdieAc8dnkY+KaL8t2Jw1YcPXZzp/RHYngHPHZ5GNiOTFlzjfwM3JAdZLZgduz9kRjeAY9dHgY2fXI1iwqyasetgt5yaTXmNmvL/ZEY3gGPXV4GtuWARRm4ITti1FYu/XZRTP2RGN4Bj11eBjbZrKqiTWxae62gnz406LN3xtAfieEd8NjlaeDn75LayYBlmHjl1UwPfLe6T64lNbwDHrs8DWz6+uk+e0NvNzLozZeI/vsF/z54b38khnfAY5e3gc1AB+9TvoEbsu19bruiSv2RGN4Bj13eBja9uVRqI6KXiUWCfvhD/mcDY+AKGCI2VcHApt8tzr7ZXVZ1dQX94gm+q50kNbwNELuqYmDTHx+X2mQMTxOLBN1qRNAnnDa3k9TwNkDsqpKBGycW2iiYdcVSVq3RFfSCM8p/Wi2p4W2A2FU1Azf0w+9JbSKG92h81MGhthUuBsbA7maNycAmO0zshMP8R+OD9irvvlhSw9sAsavKBl55G9j9Rvua+JCxobYxPAbGwO6mjc3ADc2fJbrLNn4mPuv44tsqqeFtgNgVk4EbWjRH9KP7Zjt1sB2FEGq7ahbbH4nhbYDYFaOBG3ruzvo9sh12VpaJN14/29EuPfdHYngbIHbFbOCVZ3JdeY7o+zcux8TnnlZcmyU1vJMndnWCgRt6d7norZeJ7jSqWAMP7B/0z08U1R+J4Z00sauTDLyyFl4rtfnNRZn4m18qqj8SwztRYlenGrghO+93/93zN/Do7Yppt6SGd4LErk43cEN3Xi26wbr5GbhXr6C/frSI/kgM78SIXakY2GR7Y+21c34mnnd5Ef2RGN5JEbtSMrDpradF99gxHwN/4YT82y6p4Z0QMcvm96ZmYNNrD0ntlMOsbT94HwyMgR0T+fXF1TSwLWIouu02LTJr27f5IAbGwE0m3M8flNrWqLboPa8kthP+sibxkQeFXN/jXnhGfXRcOq9YAy+Zm73t6w3BwBi4h0Sz0wVmnCnat3c9aU6ekF/S3Ped7El83Mfz+T7L737vQoVRmxW7DtemQ2Zte78+GBgD93CavW3vsuqE+rtn5pPENtplTeJTJ4bMo+75k6W2+fqqn33OScXeX2e9D+7qwsAYuJvXHXYEZ3erbQYPDPri/OwJvOdO2e8Dp3wm28buq5v2aNva2ESMIsxra3vt87O0vX9fDIyBV9kjeda5UjNoT8lj281kOaX+hXvy2VDdFhG0c1tgG7o3cyrDpsOCvrEkfwO/ujB7+zdaDwNj4BUJZXsS79riYvWhg4P+6Mb2Rp8xOYy+pjuuau3adj6RnR7YyjXGjs7/fvjqadkNvN1IDJy8gf+0VPRzx9Tvp9qd0jfp6FA7c7eZxH17mdQ2asvDvCZbk9vsqDt9UvvnAo/fO799qexzNt8ke9uPGIeBkzbw3ItFNxyaj5HsKfVJE0LtyfJfnnzvdWxr1JfvE71iqtR+kuZlXrumPYTqqZ3LfiC6fQ4nL9i+WLYBfNa4n35MddcFS2p4m7Bd/eyB7A9RVie7jx4xPOjwDetGK+Ia9hCsmbbuvkN+17T7zgWz24u5/QyffGx+3+XB6/LPC0kNbyNmkY2YRRm4DH3l1OYMvHiO5L5/1d671I8JbWanSNss/pZLpfZuOa/r9+1dzHtqSQ1vE2aRLUfLY06ul1o5DGzi+OJ+adi9qE12ue4CqW06d89M0RtnSO1khUP3C7ruoPyvO3E864GTN7Al9mVn+5yPm1X287yVY0dsAYFtReP9vfPSw9cXU9QlNbxH0awyE4wb45+QrcoKT6tttZ+x3t87D+00qrXihYE72MCm3/xYdP0h/onZrGwktddf7bT1xCP8v38VH17pCklqeJsvz3nPZe5vnEUXndV+O+09dB6vlLw0oeD1z5Ia3sbLU3d9q9hXS3nIJkBkffpqvzi2+IB/W1rVsA3yXc6JgTvMwCZ7elr2kSHNymZR5bVO95cP5zuppGj171vOod+SGt6GK0L2sKdPQZMvsuiqafkvKLCn2d7tkh5kSx3vb3PyCAZO0MAmq/Z2Do938jY07eRi7v1spZFNyvBun3SjQQPaWzCCgRMegRv61SP5rNnNIvs5bxMiimynzaf+8intL+goStuPDPrSveX2uaSGt8nKWCN8zfTm1gjnLZvBZBuil9XWx28t/lyjZrTWmkGnnljslj4YOBEDr7xLx6c+Vl8+WMaoa69L7Jplt9PmNl9/gc+9ca9eQT9xQNBXFvj1s6SGt7HKlu2kYdvt/L89pLLKfsIeMra1Oc5FydYP28O8Mu6P1xkQ9JQjQ23JpXe7JTW8A+4l2zvZTsjbd7f63lFZRh3bCcS2uPnFw/7t6u5p9SVT6mbOa7KLvdO1bXptR5F3ctooIA9JangHvAqyA65tIf9XJ4kefmDQnbcOtamZNrJYstpobffQm2xUX8NrezmbYefPqm/u7v39W5GZbdGc+t5hpx1VPx1hhy1DbWMEa2OjmA3oV//3ZsNDbfsgWz1kC/Bvv7K+Ftu7HdqNJDW8A46IgWJgDEwhoBAoIzBJQCGIOwckNbwDjoiBYmAMTCGgECgjMElAIYg7ByQ1vAOOiIFiYAxMIaAQKCMwSUAhiDsHJDW8A46IgWJgDEwhoBAoIzBJQCGIOwckNbwDjoiBYmAMTCGgECgjMElAIYg7ByQ1vAOOiIFiYAxMIaAQKCMwSUAhiDsHJDW8A46IgWJgDEwhoBBoiiMwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEg+/BceiofdqS/+vQAAAABJRU5ErkJggg==",bj=""+new URL("../images/qwik-cdeb8136.png",import.meta.url).href,Tj=""+new URL("../images/reactjs-966214a8.png",import.meta.url).href,Pj=""+new URL("../images/threejs-1d0654a8.svg",import.meta.url).href,Bj="data:image/png;base64,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",Rj=""+new URL("../images/vite-ec39a4eb.png",import.meta.url).href,Lj="data:image/png;base64,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",Ij=""+new URL("../images/freelance-f0214ce1.png",import.meta.url).href,Dj=""+new URL("../images/ai_3d_tshirts-77e21a33.jpg",import.meta.url).href,Fj=""+new URL("../images/ai_summarizer-e11b9c7d.jpg",import.meta.url).href,kj=""+new URL("../images/currency_list-170238cc.jpg",import.meta.url).href,Oj=""+new URL("../images/dcreative-df5e240a.jpg",import.meta.url).href,Nj=""+new URL("../images/game_2048-d09be7e8.jpg",import.meta.url).href,Uj=""+new URL("../images/space_invaders-9514993f.jpg",import.meta.url).href,zj=""+new URL("../images/tiny_world_3d-be449974.jpg",import.meta.url).href,Gj=""+new URL("../images/discord-1bad5f6a.png",import.meta.url).href,Hj=""+new URL("../images/github_alt-cb42ebbe.png",import.meta.url).href,Vj=""+new URL("../images/linkedin-4a15752c.png",import.meta.url).href,Wj="exslym",jj="exslym",Jj="794645643518803978",yT=[{id:"about",title:"About"},{id:"projects",title:"Projects"},{id:"contact",title:"Contact"}],Xj=[{name:"JavaScript",icon:Ej},{name:"TypeScript",icon:Bj},{name:"React",icon:Tj},{name:"Flutter",icon:Cj},{name:"ThreeJS",icon:Pj},{name:"Qwik",icon:bj},{name:"Astro",icon:Sj},{name:"Vite",icon:Rj}],Yj=[{title:"Frontend Developer",company_name:"Doctor At Work",icon:Lj,iconBg:"#383E56",date:"September 2020 - Present",points:["Developed and maintained over 140 commercial websites, banners and emails with responsive design and cross-browser compatibility, as well as other visual materials as a part of clients' advertising campaigns","Created dozens of mini-games, chat bots, quizzes and interactive educational sites with complex animated and interactive elements and detailings using JavaScript, TypeScript and frontend frameworks like React, Astro, Qwik, ThreeJS, etc.","Adapted the code of third-party client projects made in React framework, revised for publication on own or the company's platforms.","Collaborated with cross-functional teams including designers, project managers, and other developers to create high-quality products.","Formed and structured development standards to automate routine tasks, carried out systematic code reviews, created needed templates, developed and implemented various plugins, etc."]},{title:"Frontend Developer",company_name:"Freelance | Self-employed",icon:Ij,iconBg:"#383E56",date:"January 2019 - September 2020",points:["Developed and maintained over 20 websites using JavaScript, HTML5, CSS3, SASS/SCSS and other related technologies","Implemented responsive adaptive design and ensured cross-browser compatibility."]}],Kj=[{name:"3D Tiny World",description:"Take a look at my latest 3D portfolio outstanding animated website with levitating island and flying models using 3D-graphics and animations with ThreeJS, React and Tailwind.",tags:[{name:"javascript",color:"blue-text-gradient"},{name:"react",color:"green-text-gradient"},{name:"tailwindcss",color:"pink-text-gradient"},{name:"threejs",color:"yellow-text-gradient"}],image:zj,source_code_link:"https://github.com/exslym/Tiny-World-3D/",website_link:"https://exslym.github.io/Tiny-World-3D/"},{name:"Cryptocurrency Prices",description:"A website version of mobile App created using the Flutter framework. The app provides real-time information about the prices of various cryptocurrencies such as Bitcoin, Ethereum, Litecoin, and many others.",tags:[{name:"dart",color:"blue-text-gradient"},{name:"flutter",color:"green-text-gradient"},{name:"bloc",color:"pink-text-gradient"},{name:"firebase",color:"yellow-text-gradient"}],image:kj,source_code_link:"https://github.com/exslym/Crypto-Coins-List/",website_link:"https://cryptocurrency-prices-exslym.vercel.app/"},{name:"3D T-Shirts Design with AI",description:"A website project where you can make custom design t-shirts in 3D with the help of AI in real-time. You can also choose color or upload your own images to make your t-shirt truly unique.",tags:[{name:"javascript",color:"blue-text-gradient"},{name:"react",color:"green-text-gradient"},{name:"tailwindcss",color:"pink-text-gradient"},{name:"openai",color:"yellow-text-gradient"}],image:Dj,source_code_link:"https://github.com/exslym/3D-AI-Project/",website_link:"https://exslym.github.io/3D-AI-Project/"},{name:"Space Invaders [Game]",description:"Web-based legendary classic arcade game Space Invaders made with JavaScript and Canvas with its iconic pixel graphics and addictive gameplay with mobile adaptivity and touch controls.",tags:[{name:"javascript",color:"blue-text-gradient"},{name:"html",color:"green-text-gradient"},{name:"scss",color:"pink-text-gradient"},{name:"canvas",color:"yellow-text-gradient"}],image:Uj,source_code_link:"https://github.com/exslym/Space-Invaders_GAME/",website_link:"https://exslym.github.io/Space-Invaders_GAME/"},{name:"AI Article Summarizer",description:"This minimalistic cozy color app is an AI article summarizer that transforms lengthy articles into clear and concise summaries, using an article extractor and summarizer by RapidAPI, powered by openAI GPT-4.",tags:[{name:"javascript",color:"blue-text-gradient"},{name:"react",color:"green-text-gradient"},{name:"tailwindcss",color:"pink-text-gradient"},{name:"openai",color:"yellow-text-gradient"}],image:Fj,source_code_link:"https://github.com/exslym/AI-Summarizer/",website_link:"https://exslym.github.io/AI-Summarizer/"},{name:"2048 [Game]",description:"This is a popular puzzle game where the player must combine numbered tiles to reach the ultimate goal of creating a tile with the number 2048. When two tiles with the same number collide, they merge into one tile with a value equal to the sum of the two.",tags:[{name:"javascript",color:"blue-text-gradient"},{name:"htnl",color:"green-text-gradient"},{name:"scss",color:"pink-text-gradient"},{name:"algorithms",color:"yellow-text-gradient"}],image:Nj,source_code_link:"https://github.com/exslym/2048-Game/",website_link:"https://exslym.github.io/2048-Game/"},{name:"D-Creative Studio",description:"An outstanding animate-on-scroll landing for Creative Studio - a team of innovative designers, developers, videographs and artists who specialize in crafting unique and engaging digital experiences for their clients.",tags:[{name:"javascript",color:"blue-text-gradient"},{name:"html",color:"green-text-gradient"},{name:"scss",color:"pink-text-gradient"},{name:"animations",color:"yellow-text-gradient"}],image:Oj,source_code_link:"https://github.com/exslym/D-Creative-Studio/",website_link:"https://exslym.github.io/D-Creative-Studio/"}],Qj=[{name:"linkedin",icon:Vj,link:`https://www.linkedin.com/in/${jj}/`},{name:"github",icon:Hj,link:`https://github.com/${Wj}/`},{name:"discord",icon:Gj,link:`https://github.com/${Jj}/`}],Zj=({experience:n})=>nt(CL.VerticalTimelineElement,{contentStyle:{background:"#0b212d",color:"#fff"},contentArrowStyle:{borderRight:"7px solid #0b212d"},date:he("div",{className:" date-desktop",children:he("span",{className:"text-primary",children:n.date})}),iconStyle:{background:n.iconBg},icon:he("div",{className:"flex justify-center items-center w-full h-full",children:he("img",{src:n.icon,alt:n.company_name,className:"w-[60%] h-[60%] object-contain"})}),children:[nt("div",{children:[he("p",{className:"date-mobile text-primary",children:n.date}),he("h3",{className:"text-white text-[24px] font-bold",children:n.title}),he("p",{className:"text-primary text-[16px] font-semibold",style:{margin:0},children:n.company_name})]}),he("ul",{className:"custom-list mt-5 list-disc ml-5 space-y-2",children:n.points.map((e,t)=>he("li",{className:"text-white-100 text-[14px] pl-1 tracking-wider",children:e},`experience-point-${t}`))})]}),qj=()=>nt(K1,{children:[nt(os.div,{variants:fA(),children:[he("p",{className:Vi.sectionSubText,children:"What I have done so far"}),he("h2",{className:Vi.sectionHeadText,children:"Work Experience."})]}),he("div",{className:"mt-16 flex flex-col",children:he(CL.VerticalTimeline,{children:Yj.map((n,e)=>he(Zj,{experience:n},e))})})]}),$j=Yu(qj,"work"),eJ=()=>nt("section",{className:"relative w-full h-screen mx-auto",children:[nt("div",{className:`${Vi.paddingX} absolute inset-0 lg:top-[100px] md:top-[90px] xs:top-[90px] top-[100px] max-w-7xl mx-auto flex felx-row items-start gap-5 h-max`,children:[nt("div",{className:`flex flex-col justify-center items-center lg:mt-[1.15rem] md:mt-[1.45rem] sm:mt-[1.45rem] xs:mt-[1.35rem] mt-[1.2rem]`,children:[he("div",{className:` lg:w-[1.28rem] md:w-[1.025rem] sm:w-[1.025rem] xs:w-[0.825rem] w-[0.7rem] lg:h-[1.12rem] md:h-[0.9rem] sm:h-[0.9rem] xs:h-[0.725rem] h-[0.575rem] - rounded-full bg-clr_blue `}),he("div",{className:"lg:w-1 md:w-[3px] sm:w-[3px] w-[2px] lg:h-80 sm:h-60 xs:h-60 h-40 blue-gradient "})]}),nt("div",{children:[nt("h1",{className:`${Vi.heroHeadText} text-white relative z-10`,children:["Hi, I'm ",he("span",{className:"text-clr_blue",children:"Andrei"})]}),nt("p",{className:`${Vi.heroSubText} relative z-10 mt-2 text-white-100 md:max-w-[640px] max-w-[460px] `,children:["I'm a talented frontend developer, ",he("br",{}),"I also develop 3D visuals, user interfaces and web applications."]})]})]}),he("div",{className:"max-h-[500px] xs:max-h-[600px] md:max-h-full h-full relative top-1/2 -translate-y-1/2",children:he(Q7,{})}),he("div",{className:"absolute xs:bottom-4 bottom-32 w-full flex justify-center items-center z-10",children:he("a",{href:"#about",children:he("div",{className:"w-[35px] h-[64px] rounded-3xl border-4 border-primary flex justify-center items-start p-2",children:he(os.div,{animate:{y:[0,24,0]},transition:{duration:1.5,repeat:1/0,repeatType:"loop"},className:"w-3 h-3 rounded-full bg-primary mb-1 "})})})})]}),eJ=()=>{const[n,e]=z.useState(""),[t,i]=z.useState(!1);return he("nav",{className:"w-full flex items-center mx-auto fixed bg-transparent transp-gradient top-0 left-1/2 -translate-x-1/2 z-20",children:nt("div",{className:`${Vi.paddingX} w-full max-w-7xl flex justify-between items-center sm:py-5 py-4 mx-auto`,children:[nt(Ak,{to:"/",className:"flex items-center gap-2",onClick:()=>{e(""),window.scrollTo(0,0)},children:[he("img",{src:wj,alt:"logo",className:"w-10 h-10 rounded-full object-contain mr-1"}),nt("p",{className:"flex text-white text-[18px] font-bold cursor-pointer hover:text-primary",children:["Andrei ",he("span",{className:"sm:block hidden",children:"Tsyplukhin"})]})]}),he("ul",{className:"list-none hidden sm:flex flex-row gap-10",children:yT.map(r=>he("li",{onClick:()=>e(r.title),className:`${n===r.title?"text-clr_blue":"text-white-100"} hover:text-primary text-[18px] font-medium cursor-pointer`,children:he("a",{href:`#${r.id}`,children:r.title})},r.id))}),nt("div",{className:"sm:hidden flex flex-1 justify-end items-center",children:[he("img",{src:t?Aj:Mj,alt:"menu",onClick:()=>i(!t),className:"w-[28px] h-[28px] object-contain cursor-pointer"}),he("div",{className:`${t?"flex":"hidden"} justify-start items-end p-8 bg-transp90 rounded-xl z-10 absolute top-[70px] right-1/2 translate-x-1/2 w-full max-w-menuWidth `,children:he("ul",{className:"list-none flex justify-end items-start flex-col gap-10 w-full",children:yT.map(r=>he("li",{onClick:()=>{i(!t),e(r.title)},className:`${n===r.title?"text-clr_blue":"text-white-100"} font-poppins font-bold cursor-pointer xs:text-[60px] text-[40px] text-right w-full`,children:he("a",{href:`#${r.id}`,children:r.title})},r.id))})})]})]})})},tJ=()=>he("div",{className:"flex flex-row flex-wrap justify-center max-w-[360px] mx-auto gap-6 -mt-0",children:Kj.map(n=>he("a",{className:"xs:w-24 w-[70px] xs:h-24 h-[70px]",href:n.link,target:"_blank",children:he(ej,{icon:n.icon})},n.name))}),nJ=Yu(tJ,"socials"),iJ=()=>he("div",{className:"flex flex-row flex-wrap md:justify-between justify-center xl:max-w-full lg:max-w-xl sm:max-w-xl mx-auto gap-6 xs:-mt-4 xs:-mb-4 sm:-mt-6 sm:-mb-6 lg:-mt-10 -mt-4 lg:-mb-10 -mb-0",children:Jj.map(n=>he("div",{className:"xs:w-28 md:w-[120px] w-[70px] xs:h-28 md:h-[120px] h-[70px]",children:he(Y7,{icon:n.icon})},n.name))}),rJ=Yu(iJ,"tech");function sJ(n,e,t,i){return new(t||(t=Promise))(function(r,s){function o(c){try{l(i.next(c))}catch(h){s(h)}}function a(c){try{l(i.throw(c))}catch(h){s(h)}}function l(c){var h;c.done?r(c.value):(h=c.value,h instanceof t?h:new t(function(d){d(h)})).then(o,a)}l((i=i.apply(n,e||[])).next())})}const vT=(n,e,t,i)=>{n.style.transition=`${e} ${t}ms ${i}`},Ps=(n,e,t)=>Math.min(Math.max(n,e),t);class oJ{constructor(e,t){this.glareAngle=0,this.glareOpacity=0,this.calculateGlareSize=o=>{const{width:a,height:l}=o,c=Math.sqrt(Math.pow(a,2)+Math.pow(l,2));return{width:c,height:c}},this.setSize=o=>{const a=this.calculateGlareSize(o);this.glareEl.style.width=`${a.width}px`,this.glareEl.style.height=`${a.height}px`},this.update=(o,a,l,c)=>{this.updateAngle(o,a.glareReverse),this.updateOpacity(o,a,l,c)},this.updateAngle=(o,a)=>{const{xPercentage:l,yPercentage:c}=o,h=180/Math.PI,d=l?Math.atan2(c,-l)*h:0;this.glareAngle=d-(a?180:0)},this.updateOpacity=(o,a,l,c)=>{const{xPercentage:h,yPercentage:d}=o,{glarePosition:p,glareReverse:m,glareMaxOpacity:v}=a,y=l?-1:1,x=c?-1:1,A=m?-1:1;let w=0;switch(p){case"top":w=-h*y*A;break;case"right":w=d*x*A;break;case"bottom":case void 0:w=h*y*A;break;case"left":w=-d*x*A;break;case"all":w=Math.hypot(h,d)}const _=Ps(w,0,100);this.glareOpacity=_*v/100},this.render=o=>{const{glareColor:a}=o;this.glareEl.style.transform=`rotate(${this.glareAngle}deg) translate(-50%, -50%)`,this.glareEl.style.opacity=this.glareOpacity.toString(),this.glareEl.style.background=`linear-gradient(0deg, rgba(255,255,255,0) 0%, ${a} 100%)`},this.glareWrapperEl=document.createElement("div"),this.glareEl=document.createElement("div"),this.glareWrapperEl.appendChild(this.glareEl),this.glareWrapperEl.className="glare-wrapper",this.glareEl.className="glare";const i={position:"absolute",top:"0",left:"0",width:"100%",height:"100%",overflow:"hidden",borderRadius:t,WebkitMaskImage:"-webkit-radial-gradient(white, black)",pointerEvents:"none"},r=this.calculateGlareSize(e),s={position:"absolute",top:"50%",left:"50%",transformOrigin:"0% 0%",pointerEvents:"none",width:`${r.width}px`,height:`${r.height}px`};Object.assign(this.glareWrapperEl.style,i),Object.assign(this.glareEl.style,s)}}class aJ{constructor(){this.glareAngle=0,this.glareOpacity=0,this.tiltAngleX=0,this.tiltAngleY=0,this.tiltAngleXPercentage=0,this.tiltAngleYPercentage=0,this.update=(e,t)=>{this.updateTilt(e,t),this.updateTiltManualInput(e,t),this.updateTiltReverse(t),this.updateTiltLimits(t)},this.updateTilt=(e,t)=>{const{xPercentage:i,yPercentage:r}=e,{tiltMaxAngleX:s,tiltMaxAngleY:o}=t;this.tiltAngleX=i*s/100,this.tiltAngleY=r*o/100*-1},this.updateTiltManualInput=(e,t)=>{const{tiltAngleXManual:i,tiltAngleYManual:r,tiltMaxAngleX:s,tiltMaxAngleY:o}=t;(i!==null||r!==null)&&(this.tiltAngleX=i!==null?i:0,this.tiltAngleY=r!==null?r:0,e.xPercentage=100*this.tiltAngleX/s,e.yPercentage=100*this.tiltAngleY/o)},this.updateTiltReverse=e=>{const t=e.tiltReverse?-1:1;this.tiltAngleX=t*this.tiltAngleX,this.tiltAngleY=t*this.tiltAngleY},this.updateTiltLimits=e=>{const{tiltAxis:t}=e;this.tiltAngleX=Ps(this.tiltAngleX,-90,90),this.tiltAngleY=Ps(this.tiltAngleY,-90,90),t&&(this.tiltAngleX=t==="x"?this.tiltAngleX:0,this.tiltAngleY=t==="y"?this.tiltAngleY:0)},this.updateTiltAnglesPercentage=e=>{const{tiltMaxAngleX:t,tiltMaxAngleY:i}=e;this.tiltAngleXPercentage=this.tiltAngleX/t*100,this.tiltAngleYPercentage=this.tiltAngleY/i*100},this.render=e=>{e.style.transform+=`rotateX(${this.tiltAngleX}deg) rotateY(${this.tiltAngleY}deg) `}}}const lJ=Object.assign(Object.assign({scale:1,perspective:1e3,flipVertically:!1,flipHorizontally:!1,reset:!0,transitionEasing:"cubic-bezier(.03,.98,.52,.99)",transitionSpeed:400,trackOnWindow:!1,gyroscope:!1},{tiltEnable:!0,tiltReverse:!1,tiltAngleXInitial:0,tiltAngleYInitial:0,tiltMaxAngleX:20,tiltMaxAngleY:20,tiltAxis:void 0,tiltAngleXManual:null,tiltAngleYManual:null}),{glareEnable:!1,glareMaxOpacity:.7,glareColor:"#ffffff",glarePosition:"bottom",glareReverse:!1,glareBorderRadius:"0"});class EL extends z.PureComponent{constructor(){super(...arguments),this.wrapperEl={node:null,size:{width:0,height:0,left:0,top:0},clientPosition:{x:null,y:null,xPercentage:0,yPercentage:0},updateAnimationId:null,scale:1},this.tilt=null,this.glare=null,this.addDeviceOrientationEventListener=()=>sJ(this,void 0,void 0,function*(){if(!window.DeviceOrientationEvent)return;const e=DeviceOrientationEvent.requestPermission;typeof e=="function"?(yield e())==="granted"&&window.addEventListener("deviceorientation",this.onMove):window.addEventListener("deviceorientation",this.onMove)}),this.setSize=()=>{this.setWrapperElSize(),this.glare&&this.glare.setSize(this.wrapperEl.size)},this.mainLoop=e=>{this.wrapperEl.updateAnimationId!==null&&cancelAnimationFrame(this.wrapperEl.updateAnimationId),this.processInput(e),this.update(e.type),this.wrapperEl.updateAnimationId=requestAnimationFrame(this.renderFrame)},this.onEnter=e=>{const{onEnter:t}=this.props;this.setSize(),this.wrapperEl.node.style.willChange="transform",this.setTransitions(),t&&t(e.type)},this.onMove=e=>{this.mainLoop(e),this.emitOnMove(e)},this.onLeave=e=>{const{onLeave:t}=this.props;if(this.setTransitions(),t&&t(e.type),this.props.reset){const i=new CustomEvent("autoreset");this.onMove(i)}},this.processInput=e=>{const{scale:t}=this.props;switch(e.type){case"mousemove":this.wrapperEl.clientPosition.x=e.pageX,this.wrapperEl.clientPosition.y=e.pageY,this.wrapperEl.scale=t;break;case"touchmove":this.wrapperEl.clientPosition.x=e.touches[0].pageX,this.wrapperEl.clientPosition.y=e.touches[0].pageY,this.wrapperEl.scale=t;break;case"deviceorientation":this.processInputDeviceOrientation(e),this.wrapperEl.scale=t;break;case"autoreset":const{tiltAngleXInitial:i,tiltAngleYInitial:r,tiltMaxAngleX:s,tiltMaxAngleY:o}=this.props,a=r/o*100;this.wrapperEl.clientPosition.xPercentage=Ps(i/s*100,-100,100),this.wrapperEl.clientPosition.yPercentage=Ps(a,-100,100),this.wrapperEl.scale=1}},this.processInputDeviceOrientation=e=>{if(!e.gamma||!e.beta||!this.props.gyroscope)return;const{tiltMaxAngleX:t,tiltMaxAngleY:i}=this.props,r=e.gamma;this.wrapperEl.clientPosition.xPercentage=e.beta/t*100,this.wrapperEl.clientPosition.yPercentage=r/i*100,this.wrapperEl.clientPosition.xPercentage=Ps(this.wrapperEl.clientPosition.xPercentage,-100,100),this.wrapperEl.clientPosition.yPercentage=Ps(this.wrapperEl.clientPosition.yPercentage,-100,100)},this.update=e=>{const{tiltEnable:t,flipVertically:i,flipHorizontally:r}=this.props;e!=="autoreset"&&e!=="deviceorientation"&&e!=="propChange"&&this.updateClientInput(),t&&this.tilt.update(this.wrapperEl.clientPosition,this.props),this.updateFlip(),this.tilt.updateTiltAnglesPercentage(this.props),this.glare&&this.glare.update(this.wrapperEl.clientPosition,this.props,i,r)},this.updateClientInput=()=>{const{trackOnWindow:e}=this.props;let t,i;if(e){const{x:r,y:s}=this.wrapperEl.clientPosition;t=s/window.innerHeight*200-100,i=r/window.innerWidth*200-100}else{const{size:{width:r,height:s,left:o,top:a},clientPosition:{x:l,y:c}}=this.wrapperEl;t=(c-a)/s*200-100,i=(l-o)/r*200-100}this.wrapperEl.clientPosition.xPercentage=Ps(t,-100,100),this.wrapperEl.clientPosition.yPercentage=Ps(i,-100,100)},this.updateFlip=()=>{const{flipVertically:e,flipHorizontally:t}=this.props;e&&(this.tilt.tiltAngleX+=180,this.tilt.tiltAngleY*=-1),t&&(this.tilt.tiltAngleY+=180)},this.renderFrame=()=>{this.resetWrapperElTransform(),this.renderPerspective(),this.tilt.render(this.wrapperEl.node),this.renderScale(),this.glare&&this.glare.render(this.props)}}componentDidMount(){if(this.tilt=new aJ,this.initGlare(),this.addEventListeners(),typeof CustomEvent>"u")return;const e=new CustomEvent("autoreset");this.mainLoop(e);const t=new CustomEvent("initial");this.emitOnMove(t)}componentWillUnmount(){this.wrapperEl.updateAnimationId!==null&&cancelAnimationFrame(this.wrapperEl.updateAnimationId),this.removeEventListeners()}componentDidUpdate(){const e=new CustomEvent("propChange");this.mainLoop(e),this.emitOnMove(e)}addEventListeners(){const{trackOnWindow:e,gyroscope:t}=this.props;window.addEventListener("resize",this.setSize),e&&(window.addEventListener("mouseenter",this.onEnter),window.addEventListener("mousemove",this.onMove),window.addEventListener("mouseout",this.onLeave),window.addEventListener("touchstart",this.onEnter),window.addEventListener("touchmove",this.onMove),window.addEventListener("touchend",this.onLeave)),t&&this.addDeviceOrientationEventListener()}removeEventListeners(){const{trackOnWindow:e,gyroscope:t}=this.props;window.removeEventListener("resize",this.setSize),e&&(window.removeEventListener("mouseenter",this.onEnter),window.removeEventListener("mousemove",this.onMove),window.removeEventListener("mouseout",this.onLeave),window.removeEventListener("touchstart",this.onEnter),window.removeEventListener("touchmove",this.onMove),window.removeEventListener("touchend",this.onLeave)),t&&window.DeviceOrientationEvent&&window.removeEventListener("deviceorientation",this.onMove)}setWrapperElSize(){const e=this.wrapperEl.node.getBoundingClientRect();this.wrapperEl.size.width=this.wrapperEl.node.offsetWidth,this.wrapperEl.size.height=this.wrapperEl.node.offsetHeight,this.wrapperEl.size.left=e.left+window.scrollX,this.wrapperEl.size.top=e.top+window.scrollY}initGlare(){const{glareEnable:e,glareBorderRadius:t}=this.props;e&&(this.glare=new oJ(this.wrapperEl.size,t),this.wrapperEl.node.appendChild(this.glare.glareWrapperEl))}emitOnMove(e){const{onMove:t}=this.props;if(!t)return;let i=0,r=0;this.glare&&(i=this.glare.glareAngle,r=this.glare.glareOpacity),t({tiltAngleX:this.tilt.tiltAngleX,tiltAngleY:this.tilt.tiltAngleY,tiltAngleXPercentage:this.tilt.tiltAngleXPercentage,tiltAngleYPercentage:this.tilt.tiltAngleYPercentage,glareAngle:i,glareOpacity:r,eventType:e.type})}resetWrapperElTransform(){this.wrapperEl.node.style.transform=""}renderPerspective(){const{perspective:e}=this.props;this.wrapperEl.node.style.transform+=`perspective(${e}px) `}renderScale(){const{scale:e}=this.wrapperEl;this.wrapperEl.node.style.transform+=`scale3d(${e},${e},${e})`}setTransitions(){const{transitionSpeed:e,transitionEasing:t}=this.props;vT(this.wrapperEl.node,"all",e,t),this.glare&&vT(this.glare.glareEl,"opacity",e,t)}render(){const{children:e,className:t,style:i}=this.props;return ch.createElement("div",{ref:r=>this.wrapperEl.node=r,onMouseEnter:this.onEnter,onMouseMove:this.onMove,onMouseLeave:this.onLeave,onTouchStart:this.onEnter,onTouchMove:this.onMove,onTouchEnd:this.onLeave,className:t,style:i},e)}}EL.defaultProps=lJ;const uJ=({index:n,name:e,description:t,tags:i,image:r,source_code_link:s,website_link:o})=>he(os.div,{variants:hA("up","spring",.4*n,.5),children:he(EL,{options:{max:45,scale:1,speed:450},className:"bg-tertiary rounded-2xl xl:max-w-[362px] lg:max-w-[340px] md:max-w-[304px] h-full green-pink-gradient p-[1px]",children:nt("div",{className:"bg-tertiary w-full h-full rounded-2xl p-4 flex flex-col justify-between",children:[nt("div",{children:[nt("div",{className:"relative w-full rounded-2xl ",children:[he("img",{src:r,alt:e,className:"w-full h-full sm:max-h-full rounded-[10px] object-cover border-[1px] border-secondary"}),nt("div",{className:"absolute inset-0 flex justify-end m-3 card-img_hover",children:[he("div",{onClick:()=>window.open(o,"_blank"),className:"black-gradient w-9 h-9 rounded-full border-[1px] border-secondary flex items-center justify-center cursor-pointer mr-2",children:he("img",{src:gT,alt:gT,className:"w-4/5 h-4/5 object-contain"})}),he("div",{onClick:()=>window.open(s,"_blank"),className:"black-gradient w-9 h-9 rounded-full border-[1px] border-secondary flex items-center justify-center cursor-pointer ",children:he("img",{src:mT,alt:mT,className:"w-4/5 h-4/5 object-contain"})})]})]}),nt("div",{className:"mt-5",children:[he("h3",{className:"text-white font-bold text-[24px]",children:e}),he("p",{className:"mt-2 text-secondary text-[14px]",children:t})]})]}),he("div",{className:"mt-4 flex flex-wrap gap-2",children:i.map(a=>nt("p",{className:`text-[14px] ${a.color}`,children:["#",a.name]},a.name))})]})})}),cJ=()=>nt(K1,{children:[nt(os.div,{variants:fA(),children:[he("p",{className:Vi.sectionSubText,children:"My work"}),he("h2",{className:Vi.sectionHeadText,children:"Projects."})]}),he("div",{className:"w-full flex",children:he(os.p,{variants:hA("","",.1,1),className:"mt-3 text-primary text-[17px] max-w-3xl leading-[30px]",children:"Following projects showcases my skills and experience through real‑world examples of my work. Each project is briefly described with links to code repositores and live demos in it. It reflects my ability to solve complex problems, work with different technologies and manage projects effectively."})}),he("div",{className:"mt-16 flex items-stretch justify-center flex-wrap gap-8",children:Yj.map((n,e)=>he(uJ,{index:e,...n},`project-${e}`))})]}),fJ=Yu(cJ,"projects"),hJ=()=>he(vk,{children:nt("div",{className:"relative z-0 bg-primary1 bg-gradient-to-r from-grad_clr1 via-grad_clr2 to-grad_clr3",children:[nt("div",{className:"bg-hero-pattern bg-cover bg-no-repeat bg-center h-full",children:[he(eJ,{}),he($j,{})]}),he(Dz,{}),he(rJ,{}),he(qj,{}),he(fJ,{}),nt("div",{className:"relative z-0",children:[he(rj,{}),he(nj,{}),he(nJ,{})]})]})});kv.createRoot(document.getElementById("root")).render(he(ch.StrictMode,{children:he(hJ,{})}));export{dJ as __vite_legacy_guard}; + rounded-full bg-clr_blue `}),he("div",{className:"lg:w-1 md:w-[3px] sm:w-[3px] w-[2px] lg:h-80 sm:h-60 xs:h-60 h-40 blue-gradient "})]}),nt("div",{children:[nt("h1",{className:`${Vi.heroHeadText} text-white relative z-10`,children:["Hi, I'm ",he("span",{className:"text-clr_blue",children:"Andrei"})]}),nt("p",{className:`${Vi.heroSubText} relative z-10 mt-2 text-white-100 md:max-w-[640px] max-w-[460px] `,children:["I'm a talented frontend developer, ",he("br",{}),"I also develop 3D visuals, user interfaces and web applications."]})]})]}),he("div",{className:"max-h-[500px] xs:max-h-[600px] md:max-h-full h-full relative top-1/2 -translate-y-1/2",children:he(Q7,{})}),he("div",{className:"absolute xs:bottom-4 bottom-32 w-full flex justify-center items-center z-10",children:he("a",{href:"#about",children:he("div",{className:"w-[35px] h-[64px] rounded-3xl border-4 border-primary flex justify-center items-start p-2",children:he(os.div,{animate:{y:[0,24,0]},transition:{duration:1.5,repeat:1/0,repeatType:"loop"},className:"w-3 h-3 rounded-full bg-primary mb-1 "})})})})]}),tJ=()=>{const[n,e]=z.useState(""),[t,i]=z.useState(!1);return he("nav",{className:"w-full flex items-center mx-auto fixed bg-transparent transp-gradient top-0 left-1/2 -translate-x-1/2 z-20",children:nt("div",{className:`${Vi.paddingX} w-full max-w-7xl flex justify-between items-center sm:py-5 py-4 mx-auto`,children:[nt(Ak,{to:"/",className:"flex items-center gap-2",onClick:()=>{e(""),window.scrollTo(0,0)},children:[he("img",{src:wj,alt:"logo",className:"w-10 h-10 rounded-full object-contain mr-1"}),nt("p",{className:"flex text-white text-[18px] font-bold cursor-pointer hover:text-primary",children:["Andrei ",he("span",{className:"sm:block hidden",children:"Tsyplukhin"})]})]}),he("ul",{className:"list-none hidden sm:flex flex-row gap-10",children:yT.map(r=>he("li",{onClick:()=>e(r.title),className:`${n===r.title?"text-clr_blue":"text-white-100"} hover:text-primary text-[18px] font-medium cursor-pointer`,children:he("a",{href:`#${r.id}`,children:r.title})},r.id))}),nt("div",{className:"sm:hidden flex flex-1 justify-end items-center",children:[he("img",{src:t?Aj:Mj,alt:"menu",onClick:()=>i(!t),className:"w-[28px] h-[28px] object-contain cursor-pointer"}),he("div",{className:`${t?"flex":"hidden"} justify-start items-end p-8 bg-transp90 rounded-xl z-10 absolute top-[70px] right-1/2 translate-x-1/2 w-full max-w-menuWidth `,children:he("ul",{className:"list-none flex justify-end items-start flex-col gap-10 w-full",children:yT.map(r=>he("li",{onClick:()=>{i(!t),e(r.title)},className:`${n===r.title?"text-clr_blue":"text-white-100"} font-poppins font-bold cursor-pointer xs:text-[60px] text-[40px] text-right w-full`,children:he("a",{href:`#${r.id}`,children:r.title})},r.id))})})]})]})})},nJ=()=>he("div",{className:"flex flex-row flex-wrap justify-center max-w-[360px] mx-auto gap-6 -mt-0",children:Qj.map(n=>he("a",{className:"xs:w-24 w-[70px] xs:h-24 h-[70px]",href:n.link,target:"_blank",children:he(ej,{icon:n.icon})},n.name))}),iJ=Yu(nJ,"socials"),rJ=()=>he("div",{className:"flex flex-row flex-wrap md:justify-between justify-center xl:max-w-full lg:max-w-xl sm:max-w-xl mx-auto gap-6 xs:-mt-4 xs:-mb-4 sm:-mt-6 sm:-mb-6 lg:-mt-10 -mt-4 lg:-mb-10 -mb-0",children:Xj.map(n=>he("div",{className:"xs:w-28 md:w-[120px] w-[70px] xs:h-28 md:h-[120px] h-[70px]",children:he(Y7,{icon:n.icon})},n.name))}),sJ=Yu(rJ,"tech");function oJ(n,e,t,i){return new(t||(t=Promise))(function(r,s){function o(c){try{l(i.next(c))}catch(h){s(h)}}function a(c){try{l(i.throw(c))}catch(h){s(h)}}function l(c){var h;c.done?r(c.value):(h=c.value,h instanceof t?h:new t(function(d){d(h)})).then(o,a)}l((i=i.apply(n,e||[])).next())})}const vT=(n,e,t,i)=>{n.style.transition=`${e} ${t}ms ${i}`},Ps=(n,e,t)=>Math.min(Math.max(n,e),t);class aJ{constructor(e,t){this.glareAngle=0,this.glareOpacity=0,this.calculateGlareSize=o=>{const{width:a,height:l}=o,c=Math.sqrt(Math.pow(a,2)+Math.pow(l,2));return{width:c,height:c}},this.setSize=o=>{const a=this.calculateGlareSize(o);this.glareEl.style.width=`${a.width}px`,this.glareEl.style.height=`${a.height}px`},this.update=(o,a,l,c)=>{this.updateAngle(o,a.glareReverse),this.updateOpacity(o,a,l,c)},this.updateAngle=(o,a)=>{const{xPercentage:l,yPercentage:c}=o,h=180/Math.PI,d=l?Math.atan2(c,-l)*h:0;this.glareAngle=d-(a?180:0)},this.updateOpacity=(o,a,l,c)=>{const{xPercentage:h,yPercentage:d}=o,{glarePosition:p,glareReverse:m,glareMaxOpacity:v}=a,y=l?-1:1,x=c?-1:1,A=m?-1:1;let w=0;switch(p){case"top":w=-h*y*A;break;case"right":w=d*x*A;break;case"bottom":case void 0:w=h*y*A;break;case"left":w=-d*x*A;break;case"all":w=Math.hypot(h,d)}const _=Ps(w,0,100);this.glareOpacity=_*v/100},this.render=o=>{const{glareColor:a}=o;this.glareEl.style.transform=`rotate(${this.glareAngle}deg) translate(-50%, -50%)`,this.glareEl.style.opacity=this.glareOpacity.toString(),this.glareEl.style.background=`linear-gradient(0deg, rgba(255,255,255,0) 0%, ${a} 100%)`},this.glareWrapperEl=document.createElement("div"),this.glareEl=document.createElement("div"),this.glareWrapperEl.appendChild(this.glareEl),this.glareWrapperEl.className="glare-wrapper",this.glareEl.className="glare";const i={position:"absolute",top:"0",left:"0",width:"100%",height:"100%",overflow:"hidden",borderRadius:t,WebkitMaskImage:"-webkit-radial-gradient(white, black)",pointerEvents:"none"},r=this.calculateGlareSize(e),s={position:"absolute",top:"50%",left:"50%",transformOrigin:"0% 0%",pointerEvents:"none",width:`${r.width}px`,height:`${r.height}px`};Object.assign(this.glareWrapperEl.style,i),Object.assign(this.glareEl.style,s)}}class lJ{constructor(){this.glareAngle=0,this.glareOpacity=0,this.tiltAngleX=0,this.tiltAngleY=0,this.tiltAngleXPercentage=0,this.tiltAngleYPercentage=0,this.update=(e,t)=>{this.updateTilt(e,t),this.updateTiltManualInput(e,t),this.updateTiltReverse(t),this.updateTiltLimits(t)},this.updateTilt=(e,t)=>{const{xPercentage:i,yPercentage:r}=e,{tiltMaxAngleX:s,tiltMaxAngleY:o}=t;this.tiltAngleX=i*s/100,this.tiltAngleY=r*o/100*-1},this.updateTiltManualInput=(e,t)=>{const{tiltAngleXManual:i,tiltAngleYManual:r,tiltMaxAngleX:s,tiltMaxAngleY:o}=t;(i!==null||r!==null)&&(this.tiltAngleX=i!==null?i:0,this.tiltAngleY=r!==null?r:0,e.xPercentage=100*this.tiltAngleX/s,e.yPercentage=100*this.tiltAngleY/o)},this.updateTiltReverse=e=>{const t=e.tiltReverse?-1:1;this.tiltAngleX=t*this.tiltAngleX,this.tiltAngleY=t*this.tiltAngleY},this.updateTiltLimits=e=>{const{tiltAxis:t}=e;this.tiltAngleX=Ps(this.tiltAngleX,-90,90),this.tiltAngleY=Ps(this.tiltAngleY,-90,90),t&&(this.tiltAngleX=t==="x"?this.tiltAngleX:0,this.tiltAngleY=t==="y"?this.tiltAngleY:0)},this.updateTiltAnglesPercentage=e=>{const{tiltMaxAngleX:t,tiltMaxAngleY:i}=e;this.tiltAngleXPercentage=this.tiltAngleX/t*100,this.tiltAngleYPercentage=this.tiltAngleY/i*100},this.render=e=>{e.style.transform+=`rotateX(${this.tiltAngleX}deg) rotateY(${this.tiltAngleY}deg) `}}}const uJ=Object.assign(Object.assign({scale:1,perspective:1e3,flipVertically:!1,flipHorizontally:!1,reset:!0,transitionEasing:"cubic-bezier(.03,.98,.52,.99)",transitionSpeed:400,trackOnWindow:!1,gyroscope:!1},{tiltEnable:!0,tiltReverse:!1,tiltAngleXInitial:0,tiltAngleYInitial:0,tiltMaxAngleX:20,tiltMaxAngleY:20,tiltAxis:void 0,tiltAngleXManual:null,tiltAngleYManual:null}),{glareEnable:!1,glareMaxOpacity:.7,glareColor:"#ffffff",glarePosition:"bottom",glareReverse:!1,glareBorderRadius:"0"});class EL extends z.PureComponent{constructor(){super(...arguments),this.wrapperEl={node:null,size:{width:0,height:0,left:0,top:0},clientPosition:{x:null,y:null,xPercentage:0,yPercentage:0},updateAnimationId:null,scale:1},this.tilt=null,this.glare=null,this.addDeviceOrientationEventListener=()=>oJ(this,void 0,void 0,function*(){if(!window.DeviceOrientationEvent)return;const e=DeviceOrientationEvent.requestPermission;typeof e=="function"?(yield e())==="granted"&&window.addEventListener("deviceorientation",this.onMove):window.addEventListener("deviceorientation",this.onMove)}),this.setSize=()=>{this.setWrapperElSize(),this.glare&&this.glare.setSize(this.wrapperEl.size)},this.mainLoop=e=>{this.wrapperEl.updateAnimationId!==null&&cancelAnimationFrame(this.wrapperEl.updateAnimationId),this.processInput(e),this.update(e.type),this.wrapperEl.updateAnimationId=requestAnimationFrame(this.renderFrame)},this.onEnter=e=>{const{onEnter:t}=this.props;this.setSize(),this.wrapperEl.node.style.willChange="transform",this.setTransitions(),t&&t(e.type)},this.onMove=e=>{this.mainLoop(e),this.emitOnMove(e)},this.onLeave=e=>{const{onLeave:t}=this.props;if(this.setTransitions(),t&&t(e.type),this.props.reset){const i=new CustomEvent("autoreset");this.onMove(i)}},this.processInput=e=>{const{scale:t}=this.props;switch(e.type){case"mousemove":this.wrapperEl.clientPosition.x=e.pageX,this.wrapperEl.clientPosition.y=e.pageY,this.wrapperEl.scale=t;break;case"touchmove":this.wrapperEl.clientPosition.x=e.touches[0].pageX,this.wrapperEl.clientPosition.y=e.touches[0].pageY,this.wrapperEl.scale=t;break;case"deviceorientation":this.processInputDeviceOrientation(e),this.wrapperEl.scale=t;break;case"autoreset":const{tiltAngleXInitial:i,tiltAngleYInitial:r,tiltMaxAngleX:s,tiltMaxAngleY:o}=this.props,a=r/o*100;this.wrapperEl.clientPosition.xPercentage=Ps(i/s*100,-100,100),this.wrapperEl.clientPosition.yPercentage=Ps(a,-100,100),this.wrapperEl.scale=1}},this.processInputDeviceOrientation=e=>{if(!e.gamma||!e.beta||!this.props.gyroscope)return;const{tiltMaxAngleX:t,tiltMaxAngleY:i}=this.props,r=e.gamma;this.wrapperEl.clientPosition.xPercentage=e.beta/t*100,this.wrapperEl.clientPosition.yPercentage=r/i*100,this.wrapperEl.clientPosition.xPercentage=Ps(this.wrapperEl.clientPosition.xPercentage,-100,100),this.wrapperEl.clientPosition.yPercentage=Ps(this.wrapperEl.clientPosition.yPercentage,-100,100)},this.update=e=>{const{tiltEnable:t,flipVertically:i,flipHorizontally:r}=this.props;e!=="autoreset"&&e!=="deviceorientation"&&e!=="propChange"&&this.updateClientInput(),t&&this.tilt.update(this.wrapperEl.clientPosition,this.props),this.updateFlip(),this.tilt.updateTiltAnglesPercentage(this.props),this.glare&&this.glare.update(this.wrapperEl.clientPosition,this.props,i,r)},this.updateClientInput=()=>{const{trackOnWindow:e}=this.props;let t,i;if(e){const{x:r,y:s}=this.wrapperEl.clientPosition;t=s/window.innerHeight*200-100,i=r/window.innerWidth*200-100}else{const{size:{width:r,height:s,left:o,top:a},clientPosition:{x:l,y:c}}=this.wrapperEl;t=(c-a)/s*200-100,i=(l-o)/r*200-100}this.wrapperEl.clientPosition.xPercentage=Ps(t,-100,100),this.wrapperEl.clientPosition.yPercentage=Ps(i,-100,100)},this.updateFlip=()=>{const{flipVertically:e,flipHorizontally:t}=this.props;e&&(this.tilt.tiltAngleX+=180,this.tilt.tiltAngleY*=-1),t&&(this.tilt.tiltAngleY+=180)},this.renderFrame=()=>{this.resetWrapperElTransform(),this.renderPerspective(),this.tilt.render(this.wrapperEl.node),this.renderScale(),this.glare&&this.glare.render(this.props)}}componentDidMount(){if(this.tilt=new lJ,this.initGlare(),this.addEventListeners(),typeof CustomEvent>"u")return;const e=new CustomEvent("autoreset");this.mainLoop(e);const t=new CustomEvent("initial");this.emitOnMove(t)}componentWillUnmount(){this.wrapperEl.updateAnimationId!==null&&cancelAnimationFrame(this.wrapperEl.updateAnimationId),this.removeEventListeners()}componentDidUpdate(){const e=new CustomEvent("propChange");this.mainLoop(e),this.emitOnMove(e)}addEventListeners(){const{trackOnWindow:e,gyroscope:t}=this.props;window.addEventListener("resize",this.setSize),e&&(window.addEventListener("mouseenter",this.onEnter),window.addEventListener("mousemove",this.onMove),window.addEventListener("mouseout",this.onLeave),window.addEventListener("touchstart",this.onEnter),window.addEventListener("touchmove",this.onMove),window.addEventListener("touchend",this.onLeave)),t&&this.addDeviceOrientationEventListener()}removeEventListeners(){const{trackOnWindow:e,gyroscope:t}=this.props;window.removeEventListener("resize",this.setSize),e&&(window.removeEventListener("mouseenter",this.onEnter),window.removeEventListener("mousemove",this.onMove),window.removeEventListener("mouseout",this.onLeave),window.removeEventListener("touchstart",this.onEnter),window.removeEventListener("touchmove",this.onMove),window.removeEventListener("touchend",this.onLeave)),t&&window.DeviceOrientationEvent&&window.removeEventListener("deviceorientation",this.onMove)}setWrapperElSize(){const e=this.wrapperEl.node.getBoundingClientRect();this.wrapperEl.size.width=this.wrapperEl.node.offsetWidth,this.wrapperEl.size.height=this.wrapperEl.node.offsetHeight,this.wrapperEl.size.left=e.left+window.scrollX,this.wrapperEl.size.top=e.top+window.scrollY}initGlare(){const{glareEnable:e,glareBorderRadius:t}=this.props;e&&(this.glare=new aJ(this.wrapperEl.size,t),this.wrapperEl.node.appendChild(this.glare.glareWrapperEl))}emitOnMove(e){const{onMove:t}=this.props;if(!t)return;let i=0,r=0;this.glare&&(i=this.glare.glareAngle,r=this.glare.glareOpacity),t({tiltAngleX:this.tilt.tiltAngleX,tiltAngleY:this.tilt.tiltAngleY,tiltAngleXPercentage:this.tilt.tiltAngleXPercentage,tiltAngleYPercentage:this.tilt.tiltAngleYPercentage,glareAngle:i,glareOpacity:r,eventType:e.type})}resetWrapperElTransform(){this.wrapperEl.node.style.transform=""}renderPerspective(){const{perspective:e}=this.props;this.wrapperEl.node.style.transform+=`perspective(${e}px) `}renderScale(){const{scale:e}=this.wrapperEl;this.wrapperEl.node.style.transform+=`scale3d(${e},${e},${e})`}setTransitions(){const{transitionSpeed:e,transitionEasing:t}=this.props;vT(this.wrapperEl.node,"all",e,t),this.glare&&vT(this.glare.glareEl,"opacity",e,t)}render(){const{children:e,className:t,style:i}=this.props;return ch.createElement("div",{ref:r=>this.wrapperEl.node=r,onMouseEnter:this.onEnter,onMouseMove:this.onMove,onMouseLeave:this.onLeave,onTouchStart:this.onEnter,onTouchMove:this.onMove,onTouchEnd:this.onLeave,className:t,style:i},e)}}EL.defaultProps=uJ;const cJ=({index:n,name:e,description:t,tags:i,image:r,source_code_link:s,website_link:o})=>he(os.div,{variants:hA("up","spring",.4*n,.5),children:he(EL,{options:{max:45,scale:1,speed:450},className:"bg-tertiary rounded-2xl xl:max-w-[362px] lg:max-w-[340px] md:max-w-[304px] h-full green-pink-gradient p-[1px]",children:nt("div",{className:"bg-tertiary w-full h-full rounded-2xl p-4 flex flex-col justify-between",children:[nt("div",{children:[nt("div",{className:"relative w-full rounded-2xl ",children:[he("img",{src:r,alt:e,className:"w-full h-full sm:max-h-full rounded-[10px] object-cover border-[1px] border-secondary"}),nt("div",{className:"absolute inset-0 flex justify-end m-3 card-img_hover",children:[he("div",{onClick:()=>window.open(o,"_blank"),className:"black-gradient w-9 h-9 rounded-full border-[1px] border-secondary flex items-center justify-center cursor-pointer mr-2",children:he("img",{src:gT,alt:gT,className:"w-4/5 h-4/5 object-contain"})}),he("div",{onClick:()=>window.open(s,"_blank"),className:"black-gradient w-9 h-9 rounded-full border-[1px] border-secondary flex items-center justify-center cursor-pointer ",children:he("img",{src:mT,alt:mT,className:"w-4/5 h-4/5 object-contain"})})]})]}),nt("div",{className:"mt-5",children:[he("h3",{className:"text-white font-bold text-[24px]",children:e}),he("p",{className:"mt-2 text-secondary text-[14px]",children:t})]})]}),he("div",{className:"mt-4 flex flex-wrap gap-2",children:i.map(a=>nt("p",{className:`text-[14px] ${a.color}`,children:["#",a.name]},a.name))})]})})}),fJ=()=>nt(K1,{children:[nt(os.div,{variants:fA(),children:[he("p",{className:Vi.sectionSubText,children:"My work"}),he("h2",{className:Vi.sectionHeadText,children:"Projects."})]}),he("div",{className:"w-full flex",children:he(os.p,{variants:hA("","",.1,1),className:"mt-3 text-primary text-[17px] max-w-3xl leading-[30px]",children:"Following projects showcases my skills and experience through real‑world examples of my work. Each project is briefly described with links to code repositores and live demos in it. It reflects my ability to solve complex problems, work with different technologies and manage projects effectively."})}),he("div",{className:"mt-16 flex items-stretch justify-center flex-wrap gap-8",children:Kj.map((n,e)=>he(cJ,{index:e,...n},`project-${e}`))})]}),hJ=Yu(fJ,"projects"),dJ=()=>he(vk,{children:nt("div",{className:"relative z-0 bg-primary1 bg-gradient-to-r from-grad_clr1 via-grad_clr2 to-grad_clr3",children:[nt("div",{className:"bg-hero-pattern bg-cover bg-no-repeat bg-center h-full",children:[he(tJ,{}),he(eJ,{})]}),he(Dz,{}),he(sJ,{}),he($j,{}),he(hJ,{}),nt("div",{className:"relative z-0",children:[he(rj,{}),he(nj,{}),he(iJ,{})]})]})});kv.createRoot(document.getElementById("root")).render(he(ch.StrictMode,{children:he(dJ,{})}));export{pJ as __vite_legacy_guard}; diff --git a/assets/js/index-legacy-3c76c2f0.js b/assets/js/index-legacy-d892b1fd.js similarity index 96% rename from assets/js/index-legacy-3c76c2f0.js rename to assets/js/index-legacy-d892b1fd.js index e8112c5..93a838b 100644 --- a/assets/js/index-legacy-3c76c2f0.js +++ b/assets/js/index-legacy-d892b1fd.js @@ -28,7 +28,7 @@ var W=o,J=Symbol.for("react.element"),X=Symbol.for("react.fragment"),Y=Object.pr * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ -var le=o,ce=ae;function ue(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n