Files
ragusaitweb/build/assets/index-BR63qlJT.js
2026-01-22 00:27:57 +01:00

129 lines
160 KiB
JavaScript

import{r as f,j as p,R as te,c as br}from"./three-1foLNQd8.js";import{g as wr,s as fn,i as mn,a as St,b as pn,c as _r,d as Er,e as Cr,f as Sr,r as Mr,h as Pr,j as gn,k as Rr,l as Lr,m as jr,o as Tr,S as Ir,H as Ar,F as ne,n as kr,p as vn,q as ke,t as Nr,u as Mt,v as X,w as yn,x as Fr,y as Dr,z as Or,A as Ne,B as nt,C as Pt,D as zr,E as $r,G as Y,I as Vr,J as Br,K as Wr,L as Rt,M as Ur,N as Hr,O as Gr,P as qr,Q as Le,R as Yr,T as Xr,U as xn,V as Kr,W as Zr}from"./motion-BIOHP8Ul.js";(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))r(i);new MutationObserver(i=>{for(const s of i)if(s.type==="childList")for(const a of s.addedNodes)a.tagName==="LINK"&&a.rel==="modulepreload"&&r(a)}).observe(document,{childList:!0,subtree:!0});function n(i){const s={};return i.integrity&&(s.integrity=i.integrity),i.referrerPolicy&&(s.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?s.credentials="include":i.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function r(i){if(i.ep)return;i.ep=!0;const s=n(i);fetch(i.href,s)}})();var Lt="popstate";function Jr(t={}){function e(r,i){let{pathname:s,search:a,hash:o}=r.location;return rt("",{pathname:s,search:a,hash:o},i.state&&i.state.usr||null,i.state&&i.state.key||"default")}function n(r,i){return typeof i=="string"?i:ve(i)}return ei(e,n,null,t)}function A(t,e){if(t===!1||t===null||typeof t>"u")throw new Error(e)}function q(t,e){if(!t){typeof console<"u"&&console.warn(e);try{throw new Error(e)}catch{}}}function Qr(){return Math.random().toString(36).substring(2,10)}function jt(t,e){return{usr:t.state,key:t.key,idx:e}}function rt(t,e,n=null,r){return{pathname:typeof t=="string"?t:t.pathname,search:"",hash:"",...typeof e=="string"?le(e):e,state:n,key:e&&e.key||r||Qr()}}function ve({pathname:t="/",search:e="",hash:n=""}){return e&&e!=="?"&&(t+=e.charAt(0)==="?"?e:"?"+e),n&&n!=="#"&&(t+=n.charAt(0)==="#"?n:"#"+n),t}function le(t){let e={};if(t){let n=t.indexOf("#");n>=0&&(e.hash=t.substring(n),t=t.substring(0,n));let r=t.indexOf("?");r>=0&&(e.search=t.substring(r),t=t.substring(0,r)),t&&(e.pathname=t)}return e}function ei(t,e,n,r={}){let{window:i=document.defaultView,v5Compat:s=!1}=r,a=i.history,o="POP",l=null,u=h();u==null&&(u=0,a.replaceState({...a.state,idx:u},""));function h(){return(a.state||{idx:null}).idx}function c(){o="POP";let y=h(),x=y==null?null:y-u;u=y,l&&l({action:o,location:v.location,delta:x})}function d(y,x){o="PUSH";let b=rt(v.location,y,x);u=h()+1;let w=jt(b,u),_=v.createHref(b);try{a.pushState(w,"",_)}catch(E){if(E instanceof DOMException&&E.name==="DataCloneError")throw E;i.location.assign(_)}s&&l&&l({action:o,location:v.location,delta:1})}function m(y,x){o="REPLACE";let b=rt(v.location,y,x);u=h();let w=jt(b,u),_=v.createHref(b);a.replaceState(w,"",_),s&&l&&l({action:o,location:v.location,delta:0})}function g(y){return ti(y)}let v={get action(){return o},get location(){return t(i,a)},listen(y){if(l)throw new Error("A history only accepts one active listener");return i.addEventListener(Lt,c),l=y,()=>{i.removeEventListener(Lt,c),l=null}},createHref(y){return e(i,y)},createURL:g,encodeLocation(y){let x=g(y);return{pathname:x.pathname,search:x.search,hash:x.hash}},push:d,replace:m,go(y){return a.go(y)}};return v}function ti(t,e=!1){let n="http://localhost";typeof window<"u"&&(n=window.location.origin!=="null"?window.location.origin:window.location.href),A(n,"No window.location.(origin|href) available to create URL");let r=typeof t=="string"?t:ve(t);return r=r.replace(/ $/,"%20"),!e&&r.startsWith("//")&&(r=n+r),new URL(r,n)}function bn(t,e,n="/"){return ni(t,e,n,!1)}function ni(t,e,n,r){let i=typeof e=="string"?le(e):e,s=J(i.pathname||"/",n);if(s==null)return null;let a=wn(t);ri(a);let o=null;for(let l=0;o==null&&l<a.length;++l){let u=mi(s);o=di(a[l],u,r)}return o}function wn(t,e=[],n=[],r="",i=!1){let s=(a,o,l=i,u)=>{let h={relativePath:u===void 0?a.path||"":u,caseSensitive:a.caseSensitive===!0,childrenIndex:o,route:a};if(h.relativePath.startsWith("/")){if(!h.relativePath.startsWith(r)&&l)return;A(h.relativePath.startsWith(r),`Absolute route path "${h.relativePath}" nested under path "${r}" is not valid. An absolute child route path must start with the combined path of all its parent routes.`),h.relativePath=h.relativePath.slice(r.length)}let c=Z([r,h.relativePath]),d=n.concat(h);a.children&&a.children.length>0&&(A(a.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${c}".`),wn(a.children,e,d,c,l)),!(a.path==null&&!a.index)&&e.push({path:c,score:ui(c,a.index),routesMeta:d})};return t.forEach((a,o)=>{if(a.path===""||!a.path?.includes("?"))s(a,o);else for(let l of _n(a.path))s(a,o,!0,l)}),e}function _n(t){let e=t.split("/");if(e.length===0)return[];let[n,...r]=e,i=n.endsWith("?"),s=n.replace(/\?$/,"");if(r.length===0)return i?[s,""]:[s];let a=_n(r.join("/")),o=[];return o.push(...a.map(l=>l===""?s:[s,l].join("/"))),i&&o.push(...a),o.map(l=>t.startsWith("/")&&l===""?"/":l)}function ri(t){t.sort((e,n)=>e.score!==n.score?n.score-e.score:hi(e.routesMeta.map(r=>r.childrenIndex),n.routesMeta.map(r=>r.childrenIndex)))}var ii=/^:[\w-]+$/,si=3,ai=2,oi=1,li=10,ci=-2,Tt=t=>t==="*";function ui(t,e){let n=t.split("/"),r=n.length;return n.some(Tt)&&(r+=ci),e&&(r+=ai),n.filter(i=>!Tt(i)).reduce((i,s)=>i+(ii.test(s)?si:s===""?oi:li),r)}function hi(t,e){return t.length===e.length&&t.slice(0,-1).every((r,i)=>r===e[i])?t[t.length-1]-e[e.length-1]:0}function di(t,e,n=!1){let{routesMeta:r}=t,i={},s="/",a=[];for(let o=0;o<r.length;++o){let l=r[o],u=o===r.length-1,h=s==="/"?e:e.slice(s.length)||"/",c=Fe({path:l.relativePath,caseSensitive:l.caseSensitive,end:u},h),d=l.route;if(!c&&u&&n&&!r[r.length-1].route.index&&(c=Fe({path:l.relativePath,caseSensitive:l.caseSensitive,end:!1},h)),!c)return null;Object.assign(i,c.params),a.push({params:i,pathname:Z([s,c.pathname]),pathnameBase:yi(Z([s,c.pathnameBase])),route:d}),c.pathnameBase!=="/"&&(s=Z([s,c.pathnameBase]))}return a}function Fe(t,e){typeof t=="string"&&(t={path:t,caseSensitive:!1,end:!0});let[n,r]=fi(t.path,t.caseSensitive,t.end),i=e.match(n);if(!i)return null;let s=i[0],a=s.replace(/(.)\/+$/,"$1"),o=i.slice(1);return{params:r.reduce((u,{paramName:h,isOptional:c},d)=>{if(h==="*"){let g=o[d]||"";a=s.slice(0,s.length-g.length).replace(/(.)\/+$/,"$1")}const m=o[d];return c&&!m?u[h]=void 0:u[h]=(m||"").replace(/%2F/g,"/"),u},{}),pathname:s,pathnameBase:a,pattern:t}}function fi(t,e=!1,n=!0){q(t==="*"||!t.endsWith("*")||t.endsWith("/*"),`Route path "${t}" will be treated as if it were "${t.replace(/\*$/,"/*")}" because the \`*\` character must always follow a \`/\` in the pattern. To get rid of this warning, please change the route path to "${t.replace(/\*$/,"/*")}".`);let r=[],i="^"+t.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(a,o,l)=>(r.push({paramName:o,isOptional:l!=null}),l?"/?([^\\/]+)?":"/([^\\/]+)")).replace(/\/([\w-]+)\?(\/|$)/g,"(/$1)?$2");return t.endsWith("*")?(r.push({paramName:"*"}),i+=t==="*"||t==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):n?i+="\\/*$":t!==""&&t!=="/"&&(i+="(?:(?=\\/|$))"),[new RegExp(i,e?void 0:"i"),r]}function mi(t){try{return t.split("/").map(e=>decodeURIComponent(e).replace(/\//g,"%2F")).join("/")}catch(e){return q(!1,`The URL path "${t}" could not be decoded because it is a malformed URL segment. This is probably due to a bad percent encoding (${e}).`),t}}function J(t,e){if(e==="/")return t;if(!t.toLowerCase().startsWith(e.toLowerCase()))return null;let n=e.endsWith("/")?e.length-1:e.length,r=t.charAt(n);return r&&r!=="/"?null:t.slice(n)||"/"}var En=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,pi=t=>En.test(t);function gi(t,e="/"){let{pathname:n,search:r="",hash:i=""}=typeof t=="string"?le(t):t,s;if(n)if(pi(n))s=n;else{if(n.includes("//")){let a=n;n=n.replace(/\/\/+/g,"/"),q(!1,`Pathnames cannot have embedded double slashes - normalizing ${a} -> ${n}`)}n.startsWith("/")?s=It(n.substring(1),"/"):s=It(n,e)}else s=e;return{pathname:s,search:xi(r),hash:bi(i)}}function It(t,e){let n=e.replace(/\/+$/,"").split("/");return t.split("/").forEach(i=>{i===".."?n.length>1&&n.pop():i!=="."&&n.push(i)}),n.length>1?n.join("/"):"/"}function Ue(t,e,n,r){return`Cannot include a '${t}' character in a manually specified \`to.${e}\` field [${JSON.stringify(r)}]. Please separate it out to the \`to.${n}\` field. Alternatively you may provide the full path as a string in <Link to="..."> and the router will parse it for you.`}function vi(t){return t.filter((e,n)=>n===0||e.route.path&&e.route.path.length>0)}function Cn(t){let e=vi(t);return e.map((n,r)=>r===e.length-1?n.pathname:n.pathnameBase)}function Sn(t,e,n,r=!1){let i;typeof t=="string"?i=le(t):(i={...t},A(!i.pathname||!i.pathname.includes("?"),Ue("?","pathname","search",i)),A(!i.pathname||!i.pathname.includes("#"),Ue("#","pathname","hash",i)),A(!i.search||!i.search.includes("#"),Ue("#","search","hash",i)));let s=t===""||i.pathname==="",a=s?"/":i.pathname,o;if(a==null)o=n;else{let c=e.length-1;if(!r&&a.startsWith("..")){let d=a.split("/");for(;d[0]==="..";)d.shift(),c-=1;i.pathname=d.join("/")}o=c>=0?e[c]:"/"}let l=gi(i,o),u=a&&a!=="/"&&a.endsWith("/"),h=(s||a===".")&&n.endsWith("/");return!l.pathname.endsWith("/")&&(u||h)&&(l.pathname+="/"),l}var Z=t=>t.join("/").replace(/\/\/+/g,"/"),yi=t=>t.replace(/\/+$/,"").replace(/^\/*/,"/"),xi=t=>!t||t==="?"?"":t.startsWith("?")?t:"?"+t,bi=t=>!t||t==="#"?"":t.startsWith("#")?t:"#"+t,wi=class{constructor(t,e,n,r=!1){this.status=t,this.statusText=e||"",this.internal=r,n instanceof Error?(this.data=n.toString(),this.error=n):this.data=n}};function _i(t){return t!=null&&typeof t.status=="number"&&typeof t.statusText=="string"&&typeof t.internal=="boolean"&&"data"in t}function Ei(t){return t.map(e=>e.route.path).filter(Boolean).join("/").replace(/\/\/*/g,"/")||"/"}var Mn=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";function Pn(t,e){let n=t;if(typeof n!="string"||!En.test(n))return{absoluteURL:void 0,isExternal:!1,to:n};let r=n,i=!1;if(Mn)try{let s=new URL(window.location.href),a=n.startsWith("//")?new URL(s.protocol+n):new URL(n),o=J(a.pathname,e);a.origin===s.origin&&o!=null?n=o+a.search+a.hash:i=!0}catch{q(!1,`<Link to="${n}"> contains an invalid URL which will probably break when clicked - please update to a valid URL path.`)}return{absoluteURL:r,isExternal:i,to:n}}Object.getOwnPropertyNames(Object.prototype).sort().join("\0");var Rn=["POST","PUT","PATCH","DELETE"];new Set(Rn);var Ci=["GET",...Rn];new Set(Ci);var ce=f.createContext(null);ce.displayName="DataRouter";var Ve=f.createContext(null);Ve.displayName="DataRouterState";var Si=f.createContext(!1),Ln=f.createContext({isTransitioning:!1});Ln.displayName="ViewTransition";var Mi=f.createContext(new Map);Mi.displayName="Fetchers";var Pi=f.createContext(null);Pi.displayName="Await";var U=f.createContext(null);U.displayName="Navigation";var xe=f.createContext(null);xe.displayName="Location";var Q=f.createContext({outlet:null,matches:[],isDataRoute:!1});Q.displayName="Route";var ut=f.createContext(null);ut.displayName="RouteError";var jn="REACT_ROUTER_ERROR",Ri="REDIRECT",Li="ROUTE_ERROR_RESPONSE";function ji(t){if(t.startsWith(`${jn}:${Ri}:{`))try{let e=JSON.parse(t.slice(28));if(typeof e=="object"&&e&&typeof e.status=="number"&&typeof e.statusText=="string"&&typeof e.location=="string"&&typeof e.reloadDocument=="boolean"&&typeof e.replace=="boolean")return e}catch{}}function Ti(t){if(t.startsWith(`${jn}:${Li}:{`))try{let e=JSON.parse(t.slice(40));if(typeof e=="object"&&e&&typeof e.status=="number"&&typeof e.statusText=="string")return new wi(e.status,e.statusText,e.data)}catch{}}function Ii(t,{relative:e}={}){A(be(),"useHref() may be used only in the context of a <Router> component.");let{basename:n,navigator:r}=f.useContext(U),{hash:i,pathname:s,search:a}=we(t,{relative:e}),o=s;return n!=="/"&&(o=s==="/"?n:Z([n,s])),r.createHref({pathname:o,search:a,hash:i})}function be(){return f.useContext(xe)!=null}function re(){return A(be(),"useLocation() may be used only in the context of a <Router> component."),f.useContext(xe).location}var Tn="You should call navigate() in a React.useEffect(), not when your component is first rendered.";function In(t){f.useContext(U).static||f.useLayoutEffect(t)}function Ai(){let{isDataRoute:t}=f.useContext(Q);return t?Gi():ki()}function ki(){A(be(),"useNavigate() may be used only in the context of a <Router> component.");let t=f.useContext(ce),{basename:e,navigator:n}=f.useContext(U),{matches:r}=f.useContext(Q),{pathname:i}=re(),s=JSON.stringify(Cn(r)),a=f.useRef(!1);return In(()=>{a.current=!0}),f.useCallback((l,u={})=>{if(q(a.current,Tn),!a.current)return;if(typeof l=="number"){n.go(l);return}let h=Sn(l,JSON.parse(s),i,u.relative==="path");t==null&&e!=="/"&&(h.pathname=h.pathname==="/"?e:Z([e,h.pathname])),(u.replace?n.replace:n.push)(h,u.state,u)},[e,n,s,i,t])}f.createContext(null);function we(t,{relative:e}={}){let{matches:n}=f.useContext(Q),{pathname:r}=re(),i=JSON.stringify(Cn(n));return f.useMemo(()=>Sn(t,JSON.parse(i),r,e==="path"),[t,i,r,e])}function Ni(t,e){return An(t,e)}function An(t,e,n,r,i){A(be(),"useRoutes() may be used only in the context of a <Router> component.");let{navigator:s}=f.useContext(U),{matches:a}=f.useContext(Q),o=a[a.length-1],l=o?o.params:{},u=o?o.pathname:"/",h=o?o.pathnameBase:"/",c=o&&o.route;{let b=c&&c.path||"";Nn(u,!c||b.endsWith("*")||b.endsWith("*?"),`You rendered descendant <Routes> (or called \`useRoutes()\`) at "${u}" (under <Route path="${b}">) but the parent route path has no trailing "*". This means if you navigate deeper, the parent won't match anymore and therefore the child routes will never render.
Please change the parent <Route path="${b}"> to <Route path="${b==="/"?"*":`${b}/*`}">.`)}let d=re(),m;if(e){let b=typeof e=="string"?le(e):e;A(h==="/"||b.pathname?.startsWith(h),`When overriding the location using \`<Routes location>\` or \`useRoutes(routes, location)\`, the location pathname must begin with the portion of the URL pathname that was matched by all parent routes. The current pathname base is "${h}" but pathname "${b.pathname}" was given in the \`location\` prop.`),m=b}else m=d;let g=m.pathname||"/",v=g;if(h!=="/"){let b=h.replace(/^\//,"").split("/");v="/"+g.replace(/^\//,"").split("/").slice(b.length).join("/")}let y=bn(t,{pathname:v});q(c||y!=null,`No routes matched location "${m.pathname}${m.search}${m.hash}" `),q(y==null||y[y.length-1].route.element!==void 0||y[y.length-1].route.Component!==void 0||y[y.length-1].route.lazy!==void 0,`Matched leaf route at location "${m.pathname}${m.search}${m.hash}" does not have an element or Component. This means it will render an <Outlet /> with a null value by default resulting in an "empty" page.`);let x=$i(y&&y.map(b=>Object.assign({},b,{params:Object.assign({},l,b.params),pathname:Z([h,s.encodeLocation?s.encodeLocation(b.pathname.replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:b.pathname]),pathnameBase:b.pathnameBase==="/"?h:Z([h,s.encodeLocation?s.encodeLocation(b.pathnameBase.replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:b.pathnameBase])})),a,n,r,i);return e&&x?f.createElement(xe.Provider,{value:{location:{pathname:"/",search:"",hash:"",state:null,key:"default",...m},navigationType:"POP"}},x):x}function Fi(){let t=Hi(),e=_i(t)?`${t.status} ${t.statusText}`:t instanceof Error?t.message:JSON.stringify(t),n=t instanceof Error?t.stack:null,r="rgba(200,200,200, 0.5)",i={padding:"0.5rem",backgroundColor:r},s={padding:"2px 4px",backgroundColor:r},a=null;return console.error("Error handled by React Router default ErrorBoundary:",t),a=f.createElement(f.Fragment,null,f.createElement("p",null,"💿 Hey developer 👋"),f.createElement("p",null,"You can provide a way better UX than this when your app throws errors by providing your own ",f.createElement("code",{style:s},"ErrorBoundary")," or"," ",f.createElement("code",{style:s},"errorElement")," prop on your route.")),f.createElement(f.Fragment,null,f.createElement("h2",null,"Unexpected Application Error!"),f.createElement("h3",{style:{fontStyle:"italic"}},e),n?f.createElement("pre",{style:i},n):null,a)}var Di=f.createElement(Fi,null),kn=class extends f.Component{constructor(t){super(t),this.state={location:t.location,revalidation:t.revalidation,error:t.error}}static getDerivedStateFromError(t){return{error:t}}static getDerivedStateFromProps(t,e){return e.location!==t.location||e.revalidation!=="idle"&&t.revalidation==="idle"?{error:t.error,location:t.location,revalidation:t.revalidation}:{error:t.error!==void 0?t.error:e.error,location:e.location,revalidation:t.revalidation||e.revalidation}}componentDidCatch(t,e){this.props.onError?this.props.onError(t,e):console.error("React Router caught the following error during render",t)}render(){let t=this.state.error;if(this.context&&typeof t=="object"&&t&&"digest"in t&&typeof t.digest=="string"){const n=Ti(t.digest);n&&(t=n)}let e=t!==void 0?f.createElement(Q.Provider,{value:this.props.routeContext},f.createElement(ut.Provider,{value:t,children:this.props.component})):this.props.children;return this.context?f.createElement(Oi,{error:t},e):e}};kn.contextType=Si;var He=new WeakMap;function Oi({children:t,error:e}){let{basename:n}=f.useContext(U);if(typeof e=="object"&&e&&"digest"in e&&typeof e.digest=="string"){let r=ji(e.digest);if(r){let i=He.get(e);if(i)throw i;let s=Pn(r.location,n);if(Mn&&!He.get(e))if(s.isExternal||r.reloadDocument)window.location.href=s.absoluteURL||s.to;else{const a=Promise.resolve().then(()=>window.__reactRouterDataRouter.navigate(s.to,{replace:r.replace}));throw He.set(e,a),a}return f.createElement("meta",{httpEquiv:"refresh",content:`0;url=${s.absoluteURL||s.to}`})}}return t}function zi({routeContext:t,match:e,children:n}){let r=f.useContext(ce);return r&&r.static&&r.staticContext&&(e.route.errorElement||e.route.ErrorBoundary)&&(r.staticContext._deepestRenderedBoundaryId=e.route.id),f.createElement(Q.Provider,{value:t},n)}function $i(t,e=[],n=null,r=null,i=null){if(t==null){if(!n)return null;if(n.errors)t=n.matches;else if(e.length===0&&!n.initialized&&n.matches.length>0)t=n.matches;else return null}let s=t,a=n?.errors;if(a!=null){let h=s.findIndex(c=>c.route.id&&a?.[c.route.id]!==void 0);A(h>=0,`Could not find a matching route for errors on route IDs: ${Object.keys(a).join(",")}`),s=s.slice(0,Math.min(s.length,h+1))}let o=!1,l=-1;if(n)for(let h=0;h<s.length;h++){let c=s[h];if((c.route.HydrateFallback||c.route.hydrateFallbackElement)&&(l=h),c.route.id){let{loaderData:d,errors:m}=n,g=c.route.loader&&!d.hasOwnProperty(c.route.id)&&(!m||m[c.route.id]===void 0);if(c.route.lazy||g){o=!0,l>=0?s=s.slice(0,l+1):s=[s[0]];break}}}let u=n&&r?(h,c)=>{r(h,{location:n.location,params:n.matches?.[0]?.params??{},unstable_pattern:Ei(n.matches),errorInfo:c})}:void 0;return s.reduceRight((h,c,d)=>{let m,g=!1,v=null,y=null;n&&(m=a&&c.route.id?a[c.route.id]:void 0,v=c.route.errorElement||Di,o&&(l<0&&d===0?(Nn("route-fallback",!1,"No `HydrateFallback` element provided to render during initial hydration"),g=!0,y=null):l===d&&(g=!0,y=c.route.hydrateFallbackElement||null)));let x=e.concat(s.slice(0,d+1)),b=()=>{let w;return m?w=v:g?w=y:c.route.Component?w=f.createElement(c.route.Component,null):c.route.element?w=c.route.element:w=h,f.createElement(zi,{match:c,routeContext:{outlet:h,matches:x,isDataRoute:n!=null},children:w})};return n&&(c.route.ErrorBoundary||c.route.errorElement||d===0)?f.createElement(kn,{location:n.location,revalidation:n.revalidation,component:v,error:m,children:b(),routeContext:{outlet:null,matches:x,isDataRoute:!0},onError:u}):b()},null)}function ht(t){return`${t} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function Vi(t){let e=f.useContext(ce);return A(e,ht(t)),e}function Bi(t){let e=f.useContext(Ve);return A(e,ht(t)),e}function Wi(t){let e=f.useContext(Q);return A(e,ht(t)),e}function dt(t){let e=Wi(t),n=e.matches[e.matches.length-1];return A(n.route.id,`${t} can only be used on routes that contain a unique "id"`),n.route.id}function Ui(){return dt("useRouteId")}function Hi(){let t=f.useContext(ut),e=Bi("useRouteError"),n=dt("useRouteError");return t!==void 0?t:e.errors?.[n]}function Gi(){let{router:t}=Vi("useNavigate"),e=dt("useNavigate"),n=f.useRef(!1);return In(()=>{n.current=!0}),f.useCallback(async(i,s={})=>{q(n.current,Tn),n.current&&(typeof i=="number"?await t.navigate(i):await t.navigate(i,{fromRouteId:e,...s}))},[t,e])}var At={};function Nn(t,e,n){!e&&!At[t]&&(At[t]=!0,q(!1,n))}f.memo(qi);function qi({routes:t,future:e,state:n,onError:r}){return An(t,void 0,n,r,e)}function je(t){A(!1,"A <Route> is only ever to be used as the child of <Routes> element, never rendered directly. Please wrap your <Route> in a <Routes>.")}function Yi({basename:t="/",children:e=null,location:n,navigationType:r="POP",navigator:i,static:s=!1,unstable_useTransitions:a}){A(!be(),"You cannot render a <Router> inside another <Router>. You should never have more than one in your app.");let o=t.replace(/^\/*/,"/"),l=f.useMemo(()=>({basename:o,navigator:i,static:s,unstable_useTransitions:a,future:{}}),[o,i,s,a]);typeof n=="string"&&(n=le(n));let{pathname:u="/",search:h="",hash:c="",state:d=null,key:m="default"}=n,g=f.useMemo(()=>{let v=J(u,o);return v==null?null:{location:{pathname:v,search:h,hash:c,state:d,key:m},navigationType:r}},[o,u,h,c,d,m,r]);return q(g!=null,`<Router basename="${o}"> is not able to match the URL "${u}${h}${c}" because it does not start with the basename, so the <Router> won't render anything.`),g==null?null:f.createElement(U.Provider,{value:l},f.createElement(xe.Provider,{children:e,value:g}))}function Xi({children:t,location:e}){return Ni(it(t),e)}function it(t,e=[]){let n=[];return f.Children.forEach(t,(r,i)=>{if(!f.isValidElement(r))return;let s=[...e,i];if(r.type===f.Fragment){n.push.apply(n,it(r.props.children,s));return}A(r.type===je,`[${typeof r.type=="string"?r.type:r.type.name}] is not a <Route> component. All component children of <Routes> must be a <Route> or <React.Fragment>`),A(!r.props.index||!r.props.children,"An index route cannot have child routes.");let a={id:r.props.id||s.join("-"),caseSensitive:r.props.caseSensitive,element:r.props.element,Component:r.props.Component,index:r.props.index,path:r.props.path,middleware:r.props.middleware,loader:r.props.loader,action:r.props.action,hydrateFallbackElement:r.props.hydrateFallbackElement,HydrateFallback:r.props.HydrateFallback,errorElement:r.props.errorElement,ErrorBoundary:r.props.ErrorBoundary,hasErrorBoundary:r.props.hasErrorBoundary===!0||r.props.ErrorBoundary!=null||r.props.errorElement!=null,shouldRevalidate:r.props.shouldRevalidate,handle:r.props.handle,lazy:r.props.lazy};r.props.children&&(a.children=it(r.props.children,s)),n.push(a)}),n}var Te="get",Ie="application/x-www-form-urlencoded";function Be(t){return typeof HTMLElement<"u"&&t instanceof HTMLElement}function Ki(t){return Be(t)&&t.tagName.toLowerCase()==="button"}function Zi(t){return Be(t)&&t.tagName.toLowerCase()==="form"}function Ji(t){return Be(t)&&t.tagName.toLowerCase()==="input"}function Qi(t){return!!(t.metaKey||t.altKey||t.ctrlKey||t.shiftKey)}function es(t,e){return t.button===0&&(!e||e==="_self")&&!Qi(t)}var Se=null;function ts(){if(Se===null)try{new FormData(document.createElement("form"),0),Se=!1}catch{Se=!0}return Se}var ns=new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);function Ge(t){return t!=null&&!ns.has(t)?(q(!1,`"${t}" is not a valid \`encType\` for \`<Form>\`/\`<fetcher.Form>\` and will default to "${Ie}"`),null):t}function rs(t,e){let n,r,i,s,a;if(Zi(t)){let o=t.getAttribute("action");r=o?J(o,e):null,n=t.getAttribute("method")||Te,i=Ge(t.getAttribute("enctype"))||Ie,s=new FormData(t)}else if(Ki(t)||Ji(t)&&(t.type==="submit"||t.type==="image")){let o=t.form;if(o==null)throw new Error('Cannot submit a <button> or <input type="submit"> without a <form>');let l=t.getAttribute("formaction")||o.getAttribute("action");if(r=l?J(l,e):null,n=t.getAttribute("formmethod")||o.getAttribute("method")||Te,i=Ge(t.getAttribute("formenctype"))||Ge(o.getAttribute("enctype"))||Ie,s=new FormData(o,t),!ts()){let{name:u,type:h,value:c}=t;if(h==="image"){let d=u?`${u}.`:"";s.append(`${d}x`,"0"),s.append(`${d}y`,"0")}else u&&s.append(u,c)}}else{if(Be(t))throw new Error('Cannot submit element that is not <form>, <button>, or <input type="submit|image">');n=Te,r=null,i=Ie,a=t}return s&&i==="text/plain"&&(a=s,s=void 0),{action:r,method:n.toLowerCase(),encType:i,formData:s,body:a}}Object.getOwnPropertyNames(Object.prototype).sort().join("\0");function ft(t,e){if(t===!1||t===null||typeof t>"u")throw new Error(e)}function is(t,e,n,r){let i=typeof t=="string"?new URL(t,typeof window>"u"?"server://singlefetch/":window.location.origin):t;return n?i.pathname.endsWith("/")?i.pathname=`${i.pathname}_.${r}`:i.pathname=`${i.pathname}.${r}`:i.pathname==="/"?i.pathname=`_root.${r}`:e&&J(i.pathname,e)==="/"?i.pathname=`${e.replace(/\/$/,"")}/_root.${r}`:i.pathname=`${i.pathname.replace(/\/$/,"")}.${r}`,i}async function ss(t,e){if(t.id in e)return e[t.id];try{let n=await import(t.module);return e[t.id]=n,n}catch(n){return console.error(`Error loading route module \`${t.module}\`, reloading page...`),console.error(n),window.__reactRouterContext&&window.__reactRouterContext.isSpaMode,window.location.reload(),new Promise(()=>{})}}function as(t){return t==null?!1:t.href==null?t.rel==="preload"&&typeof t.imageSrcSet=="string"&&typeof t.imageSizes=="string":typeof t.rel=="string"&&typeof t.href=="string"}async function os(t,e,n){let r=await Promise.all(t.map(async i=>{let s=e.routes[i.route.id];if(s){let a=await ss(s,n);return a.links?a.links():[]}return[]}));return hs(r.flat(1).filter(as).filter(i=>i.rel==="stylesheet"||i.rel==="preload").map(i=>i.rel==="stylesheet"?{...i,rel:"prefetch",as:"style"}:{...i,rel:"prefetch"}))}function kt(t,e,n,r,i,s){let a=(l,u)=>n[u]?l.route.id!==n[u].route.id:!0,o=(l,u)=>n[u].pathname!==l.pathname||n[u].route.path?.endsWith("*")&&n[u].params["*"]!==l.params["*"];return s==="assets"?e.filter((l,u)=>a(l,u)||o(l,u)):s==="data"?e.filter((l,u)=>{let h=r.routes[l.route.id];if(!h||!h.hasLoader)return!1;if(a(l,u)||o(l,u))return!0;if(l.route.shouldRevalidate){let c=l.route.shouldRevalidate({currentUrl:new URL(i.pathname+i.search+i.hash,window.origin),currentParams:n[0]?.params||{},nextUrl:new URL(t,window.origin),nextParams:l.params,defaultShouldRevalidate:!0});if(typeof c=="boolean")return c}return!0}):[]}function ls(t,e,{includeHydrateFallback:n}={}){return cs(t.map(r=>{let i=e.routes[r.route.id];if(!i)return[];let s=[i.module];return i.clientActionModule&&(s=s.concat(i.clientActionModule)),i.clientLoaderModule&&(s=s.concat(i.clientLoaderModule)),n&&i.hydrateFallbackModule&&(s=s.concat(i.hydrateFallbackModule)),i.imports&&(s=s.concat(i.imports)),s}).flat(1))}function cs(t){return[...new Set(t)]}function us(t){let e={},n=Object.keys(t).sort();for(let r of n)e[r]=t[r];return e}function hs(t,e){let n=new Set;return new Set(e),t.reduce((r,i)=>{let s=JSON.stringify(us(i));return n.has(s)||(n.add(s),r.push({key:s,link:i})),r},[])}function Fn(){let t=f.useContext(ce);return ft(t,"You must render this element inside a <DataRouterContext.Provider> element"),t}function ds(){let t=f.useContext(Ve);return ft(t,"You must render this element inside a <DataRouterStateContext.Provider> element"),t}var mt=f.createContext(void 0);mt.displayName="FrameworkContext";function Dn(){let t=f.useContext(mt);return ft(t,"You must render this element inside a <HydratedRouter> element"),t}function fs(t,e){let n=f.useContext(mt),[r,i]=f.useState(!1),[s,a]=f.useState(!1),{onFocus:o,onBlur:l,onMouseEnter:u,onMouseLeave:h,onTouchStart:c}=e,d=f.useRef(null);f.useEffect(()=>{if(t==="render"&&a(!0),t==="viewport"){let v=x=>{x.forEach(b=>{a(b.isIntersecting)})},y=new IntersectionObserver(v,{threshold:.5});return d.current&&y.observe(d.current),()=>{y.disconnect()}}},[t]),f.useEffect(()=>{if(r){let v=setTimeout(()=>{a(!0)},100);return()=>{clearTimeout(v)}}},[r]);let m=()=>{i(!0)},g=()=>{i(!1),a(!1)};return n?t!=="intent"?[s,d,{}]:[s,d,{onFocus:de(o,m),onBlur:de(l,g),onMouseEnter:de(u,m),onMouseLeave:de(h,g),onTouchStart:de(c,m)}]:[!1,d,{}]}function de(t,e){return n=>{t&&t(n),n.defaultPrevented||e(n)}}function ms({page:t,...e}){let{router:n}=Fn(),r=f.useMemo(()=>bn(n.routes,t,n.basename),[n.routes,t,n.basename]);return r?f.createElement(gs,{page:t,matches:r,...e}):null}function ps(t){let{manifest:e,routeModules:n}=Dn(),[r,i]=f.useState([]);return f.useEffect(()=>{let s=!1;return os(t,e,n).then(a=>{s||i(a)}),()=>{s=!0}},[t,e,n]),r}function gs({page:t,matches:e,...n}){let r=re(),{future:i,manifest:s,routeModules:a}=Dn(),{basename:o}=Fn(),{loaderData:l,matches:u}=ds(),h=f.useMemo(()=>kt(t,e,u,s,r,"data"),[t,e,u,s,r]),c=f.useMemo(()=>kt(t,e,u,s,r,"assets"),[t,e,u,s,r]),d=f.useMemo(()=>{if(t===r.pathname+r.search+r.hash)return[];let v=new Set,y=!1;if(e.forEach(b=>{let w=s.routes[b.route.id];!w||!w.hasLoader||(!h.some(_=>_.route.id===b.route.id)&&b.route.id in l&&a[b.route.id]?.shouldRevalidate||w.hasClientLoader?y=!0:v.add(b.route.id))}),v.size===0)return[];let x=is(t,o,i.unstable_trailingSlashAwareDataRequests,"data");return y&&v.size>0&&x.searchParams.set("_routes",e.filter(b=>v.has(b.route.id)).map(b=>b.route.id).join(",")),[x.pathname+x.search]},[o,i.unstable_trailingSlashAwareDataRequests,l,r,s,h,e,t,a]),m=f.useMemo(()=>ls(c,s),[c,s]),g=ps(c);return f.createElement(f.Fragment,null,d.map(v=>f.createElement("link",{key:v,rel:"prefetch",as:"fetch",href:v,...n})),m.map(v=>f.createElement("link",{key:v,rel:"modulepreload",href:v,...n})),g.map(({key:v,link:y})=>f.createElement("link",{key:v,nonce:n.nonce,...y})))}function vs(...t){return e=>{t.forEach(n=>{typeof n=="function"?n(e):n!=null&&(n.current=e)})}}var ys=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";try{ys&&(window.__reactRouterVersion="7.12.0")}catch{}function xs({basename:t,children:e,unstable_useTransitions:n,window:r}){let i=f.useRef();i.current==null&&(i.current=Jr({window:r,v5Compat:!0}));let s=i.current,[a,o]=f.useState({action:s.action,location:s.location}),l=f.useCallback(u=>{n===!1?o(u):f.startTransition(()=>o(u))},[n]);return f.useLayoutEffect(()=>s.listen(l),[s,l]),f.createElement(Yi,{basename:t,children:e,location:a.location,navigationType:a.action,navigator:s,unstable_useTransitions:n})}var On=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,oe=f.forwardRef(function({onClick:e,discover:n="render",prefetch:r="none",relative:i,reloadDocument:s,replace:a,state:o,target:l,to:u,preventScrollReset:h,viewTransition:c,unstable_defaultShouldRevalidate:d,...m},g){let{basename:v,unstable_useTransitions:y}=f.useContext(U),x=typeof u=="string"&&On.test(u),b=Pn(u,v);u=b.to;let w=Ii(u,{relative:i}),[_,E,C]=fs(r,m),M=Es(u,{replace:a,state:o,target:l,preventScrollReset:h,relative:i,viewTransition:c,unstable_defaultShouldRevalidate:d,unstable_useTransitions:y});function T(R){e&&e(R),R.defaultPrevented||M(R)}let P=f.createElement("a",{...m,...C,href:b.absoluteURL||w,onClick:b.isExternal||s?e:T,ref:vs(g,E),target:l,"data-discover":!x&&n==="render"?"true":void 0});return _&&!x?f.createElement(f.Fragment,null,P,f.createElement(ms,{page:w})):P});oe.displayName="Link";var bs=f.forwardRef(function({"aria-current":e="page",caseSensitive:n=!1,className:r="",end:i=!1,style:s,to:a,viewTransition:o,children:l,...u},h){let c=we(a,{relative:u.relative}),d=re(),m=f.useContext(Ve),{navigator:g,basename:v}=f.useContext(U),y=m!=null&&Rs(c)&&o===!0,x=g.encodeLocation?g.encodeLocation(c).pathname:c.pathname,b=d.pathname,w=m&&m.navigation&&m.navigation.location?m.navigation.location.pathname:null;n||(b=b.toLowerCase(),w=w?w.toLowerCase():null,x=x.toLowerCase()),w&&v&&(w=J(w,v)||w);const _=x!=="/"&&x.endsWith("/")?x.length-1:x.length;let E=b===x||!i&&b.startsWith(x)&&b.charAt(_)==="/",C=w!=null&&(w===x||!i&&w.startsWith(x)&&w.charAt(x.length)==="/"),M={isActive:E,isPending:C,isTransitioning:y},T=E?e:void 0,P;typeof r=="function"?P=r(M):P=[r,E?"active":null,C?"pending":null,y?"transitioning":null].filter(Boolean).join(" ");let R=typeof s=="function"?s(M):s;return f.createElement(oe,{...u,"aria-current":T,className:P,ref:h,style:R,to:a,viewTransition:o},typeof l=="function"?l(M):l)});bs.displayName="NavLink";var ws=f.forwardRef(({discover:t="render",fetcherKey:e,navigate:n,reloadDocument:r,replace:i,state:s,method:a=Te,action:o,onSubmit:l,relative:u,preventScrollReset:h,viewTransition:c,unstable_defaultShouldRevalidate:d,...m},g)=>{let{unstable_useTransitions:v}=f.useContext(U),y=Ms(),x=Ps(o,{relative:u}),b=a.toLowerCase()==="get"?"get":"post",w=typeof o=="string"&&On.test(o),_=E=>{if(l&&l(E),E.defaultPrevented)return;E.preventDefault();let C=E.nativeEvent.submitter,M=C?.getAttribute("formmethod")||a,T=()=>y(C||E.currentTarget,{fetcherKey:e,method:M,navigate:n,replace:i,state:s,relative:u,preventScrollReset:h,viewTransition:c,unstable_defaultShouldRevalidate:d});v&&n!==!1?f.startTransition(()=>T()):T()};return f.createElement("form",{ref:g,method:b,action:x,onSubmit:r?l:_,...m,"data-discover":!w&&t==="render"?"true":void 0})});ws.displayName="Form";function _s(t){return`${t} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function zn(t){let e=f.useContext(ce);return A(e,_s(t)),e}function Es(t,{target:e,replace:n,state:r,preventScrollReset:i,relative:s,viewTransition:a,unstable_defaultShouldRevalidate:o,unstable_useTransitions:l}={}){let u=Ai(),h=re(),c=we(t,{relative:s});return f.useCallback(d=>{if(es(d,e)){d.preventDefault();let m=n!==void 0?n:ve(h)===ve(c),g=()=>u(t,{replace:m,state:r,preventScrollReset:i,relative:s,viewTransition:a,unstable_defaultShouldRevalidate:o});l?f.startTransition(()=>g()):g()}},[h,u,c,n,r,e,t,i,s,a,o,l])}var Cs=0,Ss=()=>`__${String(++Cs)}__`;function Ms(){let{router:t}=zn("useSubmit"),{basename:e}=f.useContext(U),n=Ui(),r=t.fetch,i=t.navigate;return f.useCallback(async(s,a={})=>{let{action:o,method:l,encType:u,formData:h,body:c}=rs(s,e);if(a.navigate===!1){let d=a.fetcherKey||Ss();await r(d,n,a.action||o,{unstable_defaultShouldRevalidate:a.unstable_defaultShouldRevalidate,preventScrollReset:a.preventScrollReset,formData:h,body:c,formMethod:a.method||l,formEncType:a.encType||u,flushSync:a.flushSync})}else await i(a.action||o,{unstable_defaultShouldRevalidate:a.unstable_defaultShouldRevalidate,preventScrollReset:a.preventScrollReset,formData:h,body:c,formMethod:a.method||l,formEncType:a.encType||u,replace:a.replace,state:a.state,fromRouteId:n,flushSync:a.flushSync,viewTransition:a.viewTransition})},[r,i,e,n])}function Ps(t,{relative:e}={}){let{basename:n}=f.useContext(U),r=f.useContext(Q);A(r,"useFormAction must be used inside a RouteContext");let[i]=r.matches.slice(-1),s={...we(t||".",{relative:e})},a=re();if(t==null){s.search=a.search;let o=new URLSearchParams(s.search),l=o.getAll("index");if(l.some(h=>h==="")){o.delete("index"),l.filter(c=>c).forEach(c=>o.append("index",c));let h=o.toString();s.search=h?`?${h}`:""}}return(!t||t===".")&&i.route.index&&(s.search=s.search?s.search.replace(/^\?/,"?index&"):"?index"),n!=="/"&&(s.pathname=s.pathname==="/"?n:Z([n,s.pathname])),ve(s)}function Rs(t,{relative:e}={}){let n=f.useContext(Ln);A(n!=null,"`useViewTransitionState` must be used within `react-router-dom`'s `RouterProvider`. Did you accidentally import `RouterProvider` from `react-router`?");let{basename:r}=zn("useViewTransitionState"),i=we(t,{relative:e});if(!n.isTransitioning)return!1;let s=J(n.currentLocation.pathname,r)||n.currentLocation.pathname,a=J(n.nextLocation.pathname,r)||n.nextLocation.pathname;return Fe(i.pathname,a)!=null||Fe(i.pathname,s)!=null}const Ls={nav:{home:"Startseite",about:"Über uns",contact:"Kontakt"},hero:{greeting:"Willkommen bei",company:"Ragusa IT-Consulting",tagline:"Ihr Partner für",rotatingWords:["Webentwicklung","IT-Support","Digitale Lösungen","Tech-Beratung"],cta:"Projekt starten",ctaSecondary:"Mehr erfahren",scroll:"Scrollen"},services:{title:"Unsere Leistungen",subtitle:"Professionelle IT-Lösungen für Ihr Unternehmen",items:[{title:"Webentwicklung",description:"Moderne, responsive Websites und Web-Applikationen mit React, TypeScript und aktuellen Technologien.",icon:"code"},{title:"Tech-Support",description:"Schnelle und zuverlässige technische Unterstützung für Hardware und Software vor Ort.",icon:"support"},{title:"IT-Beratung",description:"Strategische Beratung für Ihre IT-Infrastruktur und digitale Transformation.",icon:"consulting"},{title:"Hosting & Wartung",description:"Zuverlässiges Webhosting, regelmäßige Updates und proaktive Wartung Ihrer Systeme.",icon:"hosting"}]},about:{title:"Über uns",subtitle:"Ihr lokaler IT-Partner",intro:"Ragusa IT-Consulting bietet professionelle IT-Dienstleistungen mit persönlichem Service. Wir kombinieren technische Expertise mit einem tiefen Verständnis für die Bedürfnisse unserer Kunden.",experience:"Mit jahrelanger Erfahrung in der Webentwicklung und IT-Beratung unterstützen wir Unternehmen und Privatpersonen dabei, ihre technischen Herausforderungen zu meistern.",skills:{title:"Technologien",subtitle:"Moderne Tools für moderne Lösungen"},values:{title:"Warum Ragusa IT?",items:[{title:"Persönlicher Service",description:"Direkter Ansprechpartner für alle Ihre IT-Anliegen."},{title:"Lokale Präsenz",description:"Vor-Ort-Support und persönliche Beratungsgespräche."},{title:"Faire Preise",description:"Transparente Preisgestaltung ohne versteckte Kosten."},{title:"Schnelle Reaktion",description:"Kurze Reaktionszeiten bei Anfragen und Problemen."}]}},contact:{title:"Kontakt",subtitle:"Lassen Sie uns zusammenarbeiten",intro:"Haben Sie ein Projekt im Sinn oder benötigen Sie technische Unterstützung? Ich freue mich auf Ihre Nachricht!",form:{name:"Name",namePlaceholder:"Ihr Name",email:"E-Mail",emailPlaceholder:"ihre@email.de",subject:"Betreff",subjectPlaceholder:"Worum geht es?",message:"Nachricht",messagePlaceholder:"Ihre Nachricht...",submit:"Nachricht senden",sending:"Wird gesendet...",success:"Nachricht erfolgreich gesendet! Ich melde mich bald bei Ihnen.",error:"Fehler beim Senden. Bitte versuchen Sie es erneut oder kontaktieren Sie mich direkt."},info:{title:"Kontaktdaten",email:"E-Mail",location:"Standort",github:"GitHub"}},footer:{copyright:"© {year} Ragusa IT-Consulting. Alle Rechte vorbehalten.",madeIn:"Entwickelt in Deutschland mit",love:"Liebe"}},js={nav:{home:"Home",about:"About",contact:"Contact"},hero:{greeting:"Welcome to",company:"Ragusa IT-Consulting",tagline:"Your partner for",rotatingWords:["Web Development","IT Support","Digital Solutions","Tech Consulting"],cta:"Start Project",ctaSecondary:"Learn More",scroll:"Scroll"},services:{title:"Our Services",subtitle:"Professional IT solutions for your business",items:[{title:"Web Development",description:"Modern, responsive websites and web applications built with React, TypeScript, and cutting-edge technologies.",icon:"code"},{title:"Tech Support",description:"Fast and reliable technical support for hardware and software, available on-site.",icon:"support"},{title:"IT Consulting",description:"Strategic consulting for your IT infrastructure and digital transformation.",icon:"consulting"},{title:"Hosting & Maintenance",description:"Reliable web hosting, regular updates, and proactive maintenance of your systems.",icon:"hosting"}]},about:{title:"About Us",subtitle:"Your local IT partner",intro:"Ragusa IT-Consulting provides professional IT services with a personal touch. We combine technical expertise with a deep understanding of our clients' needs.",experience:"With years of experience in web development and IT consulting, we help businesses and individuals overcome their technical challenges.",skills:{title:"Technologies",subtitle:"Modern tools for modern solutions"},values:{title:"Why Ragusa IT?",items:[{title:"Personal Service",description:"Direct point of contact for all your IT needs."},{title:"Local Presence",description:"On-site support and in-person consultations."},{title:"Fair Pricing",description:"Transparent pricing with no hidden costs."},{title:"Quick Response",description:"Short response times for inquiries and issues."}]}},contact:{title:"Contact",subtitle:"Let's work together",intro:"Have a project in mind or need technical support? I look forward to hearing from you!",form:{name:"Name",namePlaceholder:"Your name",email:"Email",emailPlaceholder:"your@email.com",subject:"Subject",subjectPlaceholder:"What is it about?",message:"Message",messagePlaceholder:"Your message...",submit:"Send Message",sending:"Sending...",success:"Message sent successfully! I'll get back to you soon.",error:"Error sending message. Please try again or contact me directly."},info:{title:"Contact Info",email:"Email",location:"Location",github:"GitHub"}},footer:{copyright:"© {year} Ragusa IT-Consulting. All rights reserved.",madeIn:"Made in Germany with",love:"love"}},Ts={de:Ls,en:js},$n=f.createContext(void 0),Vn="ragusa-it-lang";function Is(){if(typeof window>"u")return"de";const t=localStorage.getItem(Vn);return t==="de"||t==="en"?t:navigator.language.split("-")[0]==="en"?"en":"de"}function As({children:t}){const[e,n]=f.useState("de"),[r,i]=f.useState(!1);f.useEffect(()=>{n(Is()),i(!0)},[]);const s=o=>{n(o),localStorage.setItem(Vn,o),document.documentElement.lang=o};f.useEffect(()=>{r&&(document.documentElement.lang=e)},[e,r]);const a={language:e,setLanguage:s,t:Ts[e]};return p.jsx($n.Provider,{value:a,children:t})}function ue(){const t=f.useContext($n);if(!t)throw new Error("useTranslation must be used within a LanguageProvider");return t}const Bn=f.createContext({});function ks(t){const e=f.useRef(null);return e.current===null&&(e.current=t()),e.current}const Wn=typeof window<"u",Ns=Wn?f.useLayoutEffect:f.useEffect,pt=f.createContext(null),Un=f.createContext({transformPagePoint:t=>t,isStatic:!1,reducedMotion:"never"});function Fs(t=!0){const e=f.useContext(pt);if(e===null)return[!0,null];const{isPresent:n,onExitComplete:r,register:i}=e,s=f.useId();f.useEffect(()=>{if(t)return i(s)},[t]);const a=f.useCallback(()=>t&&r&&r(s),[s,r,t]);return!n&&r?[!1,a]:[!0]}const Hn=f.createContext({strict:!1}),Nt={animation:["animate","variants","whileHover","whileTap","exit","whileInView","whileFocus","whileDrag"],exit:["exit"],drag:["drag","dragControls"],focus:["whileFocus"],hover:["whileHover","onHoverStart","onHoverEnd"],tap:["whileTap","onTap","onTapStart","onTapCancel"],pan:["onPan","onPanStart","onPanSessionStart","onPanEnd"],inView:["whileInView","onViewportEnter","onViewportLeave"],layout:["layout","layoutId"]};let Ft=!1;function Ds(){if(Ft)return;const t={};for(const e in Nt)t[e]={isEnabled:n=>Nt[e].some(r=>!!n[r])};fn(t),Ft=!0}function Gn(){return Ds(),wr()}function Os(t){const e=Gn();for(const n in t)e[n]={...e[n],...t[n]};fn(e)}const zs=new Set(["animate","exit","variants","initial","style","values","variants","transition","transformTemplate","custom","inherit","onBeforeLayoutMeasure","onAnimationStart","onAnimationComplete","onUpdate","onDragStart","onDrag","onDragEnd","onMeasureDragConstraints","onDirectionLock","onDragTransitionEnd","_dragX","_dragY","onHoverStart","onHoverEnd","onViewportEnter","onViewportLeave","globalTapTarget","ignoreStrict","viewport"]);function De(t){return t.startsWith("while")||t.startsWith("drag")&&t!=="draggable"||t.startsWith("layout")||t.startsWith("onTap")||t.startsWith("onPan")||t.startsWith("onLayout")||zs.has(t)}let qn=t=>!De(t);function $s(t){typeof t=="function"&&(qn=e=>e.startsWith("on")?!De(e):t(e))}try{$s(require("@emotion/is-prop-valid").default)}catch{}function Vs(t,e,n){const r={};for(const i in t)i==="values"&&typeof t.values=="object"||(qn(i)||n===!0&&De(i)||!e&&!De(i)||t.draggable&&i.startsWith("onDrag"))&&(r[i]=t[i]);return r}const We=f.createContext({});function Bs(t,e){if(mn(t)){const{initial:n,animate:r}=t;return{initial:n===!1||St(n)?n:void 0,animate:St(r)?r:void 0}}return t.inherit!==!1?e:{}}function Ws(t){const{initial:e,animate:n}=Bs(t,f.useContext(We));return f.useMemo(()=>({initial:e,animate:n}),[Dt(e),Dt(n)])}function Dt(t){return Array.isArray(t)?t.join(" "):t}const gt=()=>({style:{},transform:{},transformOrigin:{},vars:{}});function Yn(t,e,n){for(const r in e)!pn(e[r])&&!_r(r,n)&&(t[r]=e[r])}function Us({transformTemplate:t},e){return f.useMemo(()=>{const n=gt();return Er(n,e,t),Object.assign({},n.vars,n.style)},[e])}function Hs(t,e){const n=t.style||{},r={};return Yn(r,n,t),Object.assign(r,Us(t,e)),r}function Gs(t,e){const n={},r=Hs(t,e);return t.drag&&t.dragListener!==!1&&(n.draggable=!1,r.userSelect=r.WebkitUserSelect=r.WebkitTouchCallout="none",r.touchAction=t.drag===!0?"none":`pan-${t.drag==="x"?"y":"x"}`),t.tabIndex===void 0&&(t.onTap||t.onTapStart||t.whileTap)&&(n.tabIndex=0),n.style=r,n}const Xn=()=>({...gt(),attrs:{}});function qs(t,e,n,r){const i=f.useMemo(()=>{const s=Xn();return Cr(s,e,Sr(r),t.transformTemplate,t.style),{...s.attrs,style:{...s.style}}},[e]);if(t.style){const s={};Yn(s,t.style,t),i.style={...s,...i.style}}return i}const Ys=["animate","circle","defs","desc","ellipse","g","image","line","filter","marker","mask","metadata","path","pattern","polygon","polyline","rect","stop","switch","symbol","svg","text","tspan","use","view"];function vt(t){return typeof t!="string"||t.includes("-")?!1:!!(Ys.indexOf(t)>-1||/[A-Z]/u.test(t))}function Xs(t,e,n,{latestValues:r},i,s=!1,a){const l=(a??vt(t)?qs:Gs)(e,r,i,t),u=Vs(e,typeof t=="string",s),h=t!==f.Fragment?{...u,...l,ref:n}:{},{children:c}=e,d=f.useMemo(()=>pn(c)?c.get():c,[c]);return f.createElement(t,{...h,children:d})}function Ks({scrapeMotionValuesFromProps:t,createRenderState:e},n,r,i){return{latestValues:Zs(n,r,i,t),renderState:e()}}function Zs(t,e,n,r){const i={},s=r(t,{});for(const d in s)i[d]=Mr(s[d]);let{initial:a,animate:o}=t;const l=mn(t),u=Pr(t);e&&u&&!l&&t.inherit!==!1&&(a===void 0&&(a=e.initial),o===void 0&&(o=e.animate));let h=n?n.initial===!1:!1;h=h||a===!1;const c=h?o:a;if(c&&typeof c!="boolean"&&!gn(c)){const d=Array.isArray(c)?c:[c];for(let m=0;m<d.length;m++){const g=Rr(t,d[m]);if(g){const{transitionEnd:v,transition:y,...x}=g;for(const b in x){let w=x[b];if(Array.isArray(w)){const _=h?w.length-1:0;w=w[_]}w!==null&&(i[b]=w)}for(const b in v)i[b]=v[b]}}}return i}const Kn=t=>(e,n)=>{const r=f.useContext(We),i=f.useContext(pt),s=()=>Ks(t,e,r,i);return n?s():ks(s)},Js=Kn({scrapeMotionValuesFromProps:Lr,createRenderState:gt}),Qs=Kn({scrapeMotionValuesFromProps:jr,createRenderState:Xn}),ea=Symbol.for("motionComponentSymbol");function ta(t,e,n){const r=f.useRef(n);f.useInsertionEffect(()=>{r.current=n});const i=f.useRef(null);return f.useCallback(s=>{s&&t.onMount?.(s),e&&(s?e.mount(s):e.unmount());const a=r.current;if(typeof a=="function")if(s){const o=a(s);typeof o=="function"&&(i.current=o)}else i.current?(i.current(),i.current=null):a(s);else a&&(a.current=s)},[e])}const Zn=f.createContext({});function me(t){return t&&typeof t=="object"&&Object.prototype.hasOwnProperty.call(t,"current")}function na(t,e,n,r,i,s){const{visualElement:a}=f.useContext(We),o=f.useContext(Hn),l=f.useContext(pt),u=f.useContext(Un).reducedMotion,h=f.useRef(null);r=r||o.renderer,!h.current&&r&&(h.current=r(t,{visualState:e,parent:a,props:n,presenceContext:l,blockInitialAnimation:l?l.initial===!1:!1,reducedMotionConfig:u,isSVG:s}));const c=h.current,d=f.useContext(Zn);c&&!c.projection&&i&&(c.type==="html"||c.type==="svg")&&ra(h.current,n,i,d);const m=f.useRef(!1);f.useInsertionEffect(()=>{c&&m.current&&c.update(n,l)});const g=n[Tr],v=f.useRef(!!g&&!window.MotionHandoffIsComplete?.(g)&&window.MotionHasOptimisedAnimation?.(g));return Ns(()=>{c&&(m.current=!0,window.MotionIsMounted=!0,c.updateFeatures(),c.scheduleRenderMicrotask(),v.current&&c.animationState&&c.animationState.animateChanges())}),f.useEffect(()=>{c&&(!v.current&&c.animationState&&c.animationState.animateChanges(),v.current&&(queueMicrotask(()=>{window.MotionHandoffMarkAsComplete?.(g)}),v.current=!1),c.enteringChildren=void 0)}),c}function ra(t,e,n,r){const{layoutId:i,layout:s,drag:a,dragConstraints:o,layoutScroll:l,layoutRoot:u,layoutCrossfade:h}=e;t.projection=new n(t.latestValues,e["data-framer-portal-id"]?void 0:Jn(t.parent)),t.projection.setOptions({layoutId:i,layout:s,alwaysMeasureLayout:!!a||o&&me(o),visualElement:t,animationType:typeof s=="string"?s:"both",initialPromotionConfig:r,crossfade:h,layoutScroll:l,layoutRoot:u})}function Jn(t){if(t)return t.options.allowProjection!==!1?t.projection:Jn(t.parent)}function qe(t,{forwardMotionProps:e=!1,type:n}={},r,i){r&&Os(r);const s=n?n==="svg":vt(t),a=s?Qs:Js;function o(u,h){let c;const d={...f.useContext(Un),...u,layoutId:ia(u)},{isStatic:m}=d,g=Ws(u),v=a(u,m);if(!m&&Wn){sa();const y=aa(d);c=y.MeasureLayout,g.visualElement=na(t,v,d,i,y.ProjectionNode,s)}return p.jsxs(We.Provider,{value:g,children:[c&&g.visualElement?p.jsx(c,{visualElement:g.visualElement,...d}):null,Xs(t,u,ta(v,g.visualElement,h),v,m,e,s)]})}o.displayName=`motion.${typeof t=="string"?t:`create(${t.displayName??t.name??""})`}`;const l=f.forwardRef(o);return l[ea]=t,l}function ia({layoutId:t}){const e=f.useContext(Bn).id;return e&&t!==void 0?e+"-"+t:t}function sa(t,e){f.useContext(Hn).strict}function aa(t){const e=Gn(),{drag:n,layout:r}=e;if(!n&&!r)return{};const i={...n,...r};return{MeasureLayout:n?.isEnabled(t)||r?.isEnabled(t)?i.MeasureLayout:void 0,ProjectionNode:i.ProjectionNode}}function oa(t,e){if(typeof Proxy>"u")return qe;const n=new Map,r=(s,a)=>qe(s,a,t,e),i=(s,a)=>r(s,a);return new Proxy(i,{get:(s,a)=>a==="create"?r:(n.has(a)||n.set(a,qe(a,void 0,t,e)),n.get(a))})}const la=(t,e)=>e.isSVG??vt(t)?new Ir(e):new Ar(e,{allowProjection:t!==f.Fragment});class ca extends ne{constructor(e){super(e),e.animationState||(e.animationState=kr(e))}updateAnimationControlsSubscription(){const{animate:e}=this.node.getProps();gn(e)&&(this.unmountControls=e.subscribe(this.node))}mount(){this.updateAnimationControlsSubscription()}update(){const{animate:e}=this.node.getProps(),{animate:n}=this.node.prevProps||{};e!==n&&this.updateAnimationControlsSubscription()}unmount(){this.node.animationState.reset(),this.unmountControls?.()}}let ua=0;class ha extends ne{constructor(){super(...arguments),this.id=ua++}update(){if(!this.node.presenceContext)return;const{isPresent:e,onExitComplete:n}=this.node.presenceContext,{isPresent:r}=this.node.prevPresenceContext||{};if(!this.node.animationState||e===r)return;const i=this.node.animationState.setActive("exit",!e);n&&!e&&i.then(()=>{n(this.id)})}mount(){const{register:e,onExitComplete:n}=this.node.presenceContext||{};n&&n(this.id),e&&(this.unmount=e(this.id))}unmount(){}}const da={animation:{Feature:ca},exit:{Feature:ha}};function _e(t){return{point:{x:t.pageX,y:t.pageY}}}const fa=t=>e=>vn(e)&&t(e,_e(e));function pe(t,e,n,r){return ke(t,e,fa(n),r)}const Qn=({current:t})=>t?t.ownerDocument.defaultView:null,Ot=new Set(["auto","scroll"]);class er{constructor(e,n,{transformPagePoint:r,contextWindow:i=window,dragSnapToOrigin:s=!1,distanceThreshold:a=3,element:o}={}){if(this.startEvent=null,this.lastMoveEvent=null,this.lastMoveEventInfo=null,this.handlers={},this.contextWindow=window,this.scrollPositions=new Map,this.removeScrollListeners=null,this.onElementScroll=m=>{this.handleScroll(m.target)},this.onWindowScroll=()=>{this.handleScroll(window)},this.updatePoint=()=>{if(!(this.lastMoveEvent&&this.lastMoveEventInfo))return;const m=Xe(this.lastMoveEventInfo,this.history),g=this.startEvent!==null,v=Nr(m.offset,{x:0,y:0})>=this.distanceThreshold;if(!g&&!v)return;const{point:y}=m,{timestamp:x}=Mt;this.history.push({...y,timestamp:x});const{onStart:b,onMove:w}=this.handlers;g||(b&&b(this.lastMoveEvent,m),this.startEvent=this.lastMoveEvent),w&&w(this.lastMoveEvent,m)},this.handlePointerMove=(m,g)=>{this.lastMoveEvent=m,this.lastMoveEventInfo=Ye(g,this.transformPagePoint),X.update(this.updatePoint,!0)},this.handlePointerUp=(m,g)=>{this.end();const{onEnd:v,onSessionEnd:y,resumeAnimation:x}=this.handlers;if((this.dragSnapToOrigin||!this.startEvent)&&x&&x(),!(this.lastMoveEvent&&this.lastMoveEventInfo))return;const b=Xe(m.type==="pointercancel"?this.lastMoveEventInfo:Ye(g,this.transformPagePoint),this.history);this.startEvent&&v&&v(m,b),y&&y(m,b)},!vn(e))return;this.dragSnapToOrigin=s,this.handlers=n,this.transformPagePoint=r,this.distanceThreshold=a,this.contextWindow=i||window;const l=_e(e),u=Ye(l,this.transformPagePoint),{point:h}=u,{timestamp:c}=Mt;this.history=[{...h,timestamp:c}];const{onSessionStart:d}=n;d&&d(e,Xe(u,this.history)),this.removeListeners=yn(pe(this.contextWindow,"pointermove",this.handlePointerMove),pe(this.contextWindow,"pointerup",this.handlePointerUp),pe(this.contextWindow,"pointercancel",this.handlePointerUp)),o&&this.startScrollTracking(o)}startScrollTracking(e){let n=e.parentElement;for(;n;){const r=getComputedStyle(n);(Ot.has(r.overflowX)||Ot.has(r.overflowY))&&this.scrollPositions.set(n,{x:n.scrollLeft,y:n.scrollTop}),n=n.parentElement}this.scrollPositions.set(window,{x:window.scrollX,y:window.scrollY}),window.addEventListener("scroll",this.onElementScroll,{capture:!0,passive:!0}),window.addEventListener("scroll",this.onWindowScroll,{passive:!0}),this.removeScrollListeners=()=>{window.removeEventListener("scroll",this.onElementScroll,{capture:!0}),window.removeEventListener("scroll",this.onWindowScroll)}}handleScroll(e){const n=this.scrollPositions.get(e);if(!n)return;const r=e===window,i=r?{x:window.scrollX,y:window.scrollY}:{x:e.scrollLeft,y:e.scrollTop},s={x:i.x-n.x,y:i.y-n.y};s.x===0&&s.y===0||(r?this.lastMoveEventInfo&&(this.lastMoveEventInfo.point.x+=s.x,this.lastMoveEventInfo.point.y+=s.y):this.history.length>0&&(this.history[0].x-=s.x,this.history[0].y-=s.y),this.scrollPositions.set(e,i),X.update(this.updatePoint,!0))}updateHandlers(e){this.handlers=e}end(){this.removeListeners&&this.removeListeners(),this.removeScrollListeners&&this.removeScrollListeners(),this.scrollPositions.clear(),Fr(this.updatePoint)}}function Ye(t,e){return e?{point:e(t.point)}:t}function zt(t,e){return{x:t.x-e.x,y:t.y-e.y}}function Xe({point:t},e){return{point:t,delta:zt(t,tr(e)),offset:zt(t,ma(e)),velocity:pa(e,.1)}}function ma(t){return t[0]}function tr(t){return t[t.length-1]}function pa(t,e){if(t.length<2)return{x:0,y:0};let n=t.length-1,r=null;const i=tr(t);for(;n>=0&&(r=t[n],!(i.timestamp-r.timestamp>Dr(e)));)n--;if(!r)return{x:0,y:0};const s=Or(i.timestamp-r.timestamp);if(s===0)return{x:0,y:0};const a={x:(i.x-r.x)/s,y:(i.y-r.y)/s};return a.x===1/0&&(a.x=0),a.y===1/0&&(a.y=0),a}function ga(t,{min:e,max:n},r){return e!==void 0&&t<e?t=r?Ne(e,t,r.min):Math.max(t,e):n!==void 0&&t>n&&(t=r?Ne(n,t,r.max):Math.min(t,n)),t}function $t(t,e,n){return{min:e!==void 0?t.min+e:void 0,max:n!==void 0?t.max+n-(t.max-t.min):void 0}}function va(t,{top:e,left:n,bottom:r,right:i}){return{x:$t(t.x,n,i),y:$t(t.y,e,r)}}function Vt(t,e){let n=e.min-t.min,r=e.max-t.max;return e.max-e.min<t.max-t.min&&([n,r]=[r,n]),{min:n,max:r}}function ya(t,e){return{x:Vt(t.x,e.x),y:Vt(t.y,e.y)}}function xa(t,e){let n=.5;const r=nt(t),i=nt(e);return i>r?n=Pt(e.min,e.max-r,t.min):r>i&&(n=Pt(t.min,t.max-i,e.min)),zr(0,1,n)}function ba(t,e){const n={};return e.min!==void 0&&(n.min=e.min-t.min),e.max!==void 0&&(n.max=e.max-t.min),n}const st=.35;function wa(t=st){return t===!1?t=0:t===!0&&(t=st),{x:Bt(t,"left","right"),y:Bt(t,"top","bottom")}}function Bt(t,e,n){return{min:Wt(t,e),max:Wt(t,n)}}function Wt(t,e){return typeof t=="number"?t:t[e]||0}const _a=new WeakMap;class Ea{constructor(e){this.openDragLock=null,this.isDragging=!1,this.currentDirection=null,this.originPoint={x:0,y:0},this.constraints=!1,this.hasMutatedConstraints=!1,this.elastic=$r(),this.latestPointerEvent=null,this.latestPanInfo=null,this.visualElement=e}start(e,{snapToCursor:n=!1,distanceThreshold:r}={}){const{presenceContext:i}=this.visualElement;if(i&&i.isPresent===!1)return;const s=c=>{n?(this.stopAnimation(),this.snapToCursor(_e(c).point)):this.pauseAnimation()},a=(c,d)=>{this.stopAnimation();const{drag:m,dragPropagation:g,onDragStart:v}=this.getProps();if(m&&!g&&(this.openDragLock&&this.openDragLock(),this.openDragLock=Hr(m),!this.openDragLock))return;this.latestPointerEvent=c,this.latestPanInfo=d,this.isDragging=!0,this.currentDirection=null,this.resolveConstraints(),this.visualElement.projection&&(this.visualElement.projection.isAnimationBlocked=!0,this.visualElement.projection.target=void 0),Y(x=>{let b=this.getAxisMotionValue(x).get()||0;if(Gr.test(b)){const{projection:w}=this.visualElement;if(w&&w.layout){const _=w.layout.layoutBox[x];_&&(b=nt(_)*(parseFloat(b)/100))}}this.originPoint[x]=b}),v&&X.postRender(()=>v(c,d)),Rt(this.visualElement,"transform");const{animationState:y}=this.visualElement;y&&y.setActive("whileDrag",!0)},o=(c,d)=>{this.latestPointerEvent=c,this.latestPanInfo=d;const{dragPropagation:m,dragDirectionLock:g,onDirectionLock:v,onDrag:y}=this.getProps();if(!m&&!this.openDragLock)return;const{offset:x}=d;if(g&&this.currentDirection===null){this.currentDirection=Ca(x),this.currentDirection!==null&&v&&v(this.currentDirection);return}this.updateAxis("x",d.point,x),this.updateAxis("y",d.point,x),this.visualElement.render(),y&&y(c,d)},l=(c,d)=>{this.latestPointerEvent=c,this.latestPanInfo=d,this.stop(c,d),this.latestPointerEvent=null,this.latestPanInfo=null},u=()=>Y(c=>this.getAnimationState(c)==="paused"&&this.getAxisMotionValue(c).animation?.play()),{dragSnapToOrigin:h}=this.getProps();this.panSession=new er(e,{onSessionStart:s,onStart:a,onMove:o,onSessionEnd:l,resumeAnimation:u},{transformPagePoint:this.visualElement.getTransformPagePoint(),dragSnapToOrigin:h,distanceThreshold:r,contextWindow:Qn(this.visualElement),element:this.visualElement.current})}stop(e,n){const r=e||this.latestPointerEvent,i=n||this.latestPanInfo,s=this.isDragging;if(this.cancel(),!s||!i||!r)return;const{velocity:a}=i;this.startAnimation(a);const{onDragEnd:o}=this.getProps();o&&X.postRender(()=>o(r,i))}cancel(){this.isDragging=!1;const{projection:e,animationState:n}=this.visualElement;e&&(e.isAnimationBlocked=!1),this.endPanSession();const{dragPropagation:r}=this.getProps();!r&&this.openDragLock&&(this.openDragLock(),this.openDragLock=null),n&&n.setActive("whileDrag",!1)}endPanSession(){this.panSession&&this.panSession.end(),this.panSession=void 0}updateAxis(e,n,r){const{drag:i}=this.getProps();if(!r||!Me(e,i,this.currentDirection))return;const s=this.getAxisMotionValue(e);let a=this.originPoint[e]+r[e];this.constraints&&this.constraints[e]&&(a=ga(a,this.constraints[e],this.elastic[e])),s.set(a)}resolveConstraints(){const{dragConstraints:e,dragElastic:n}=this.getProps(),r=this.visualElement.projection&&!this.visualElement.projection.layout?this.visualElement.projection.measure(!1):this.visualElement.projection?.layout,i=this.constraints;e&&me(e)?this.constraints||(this.constraints=this.resolveRefConstraints()):e&&r?this.constraints=va(r.layoutBox,e):this.constraints=!1,this.elastic=wa(n),i!==this.constraints&&r&&this.constraints&&!this.hasMutatedConstraints&&Y(s=>{this.constraints!==!1&&this.getAxisMotionValue(s)&&(this.constraints[s]=ba(r.layoutBox[s],this.constraints[s]))})}resolveRefConstraints(){const{dragConstraints:e,onMeasureDragConstraints:n}=this.getProps();if(!e||!me(e))return!1;const r=e.current,{projection:i}=this.visualElement;if(!i||!i.layout)return!1;const s=Vr(r,i.root,this.visualElement.getTransformPagePoint());let a=ya(i.layout.layoutBox,s);if(n){const o=n(Br(a));this.hasMutatedConstraints=!!o,o&&(a=Wr(o))}return a}startAnimation(e){const{drag:n,dragMomentum:r,dragElastic:i,dragTransition:s,dragSnapToOrigin:a,onDragTransitionEnd:o}=this.getProps(),l=this.constraints||{},u=Y(h=>{if(!Me(h,n,this.currentDirection))return;let c=l&&l[h]||{};a&&(c={min:0,max:0});const d=i?200:1e6,m=i?40:1e7,g={type:"inertia",velocity:r?e[h]:0,bounceStiffness:d,bounceDamping:m,timeConstant:750,restDelta:1,restSpeed:10,...s,...c};return this.startAxisValueAnimation(h,g)});return Promise.all(u).then(o)}startAxisValueAnimation(e,n){const r=this.getAxisMotionValue(e);return Rt(this.visualElement,e),r.start(Ur(e,r,0,n,this.visualElement,!1))}stopAnimation(){Y(e=>this.getAxisMotionValue(e).stop())}pauseAnimation(){Y(e=>this.getAxisMotionValue(e).animation?.pause())}getAnimationState(e){return this.getAxisMotionValue(e).animation?.state}getAxisMotionValue(e){const n=`_drag${e.toUpperCase()}`,r=this.visualElement.getProps(),i=r[n];return i||this.visualElement.getValue(e,(r.initial?r.initial[e]:void 0)||0)}snapToCursor(e){Y(n=>{const{drag:r}=this.getProps();if(!Me(n,r,this.currentDirection))return;const{projection:i}=this.visualElement,s=this.getAxisMotionValue(n);if(i&&i.layout){const{min:a,max:o}=i.layout.layoutBox[n],l=s.get()||0;s.set(e[n]-Ne(a,o,.5)+l)}})}scalePositionWithinConstraints(){if(!this.visualElement.current)return;const{drag:e,dragConstraints:n}=this.getProps(),{projection:r}=this.visualElement;if(!me(n)||!r||!this.constraints)return;this.stopAnimation();const i={x:0,y:0};Y(a=>{const o=this.getAxisMotionValue(a);if(o&&this.constraints!==!1){const l=o.get();i[a]=xa({min:l,max:l},this.constraints[a])}});const{transformTemplate:s}=this.visualElement.getProps();this.visualElement.current.style.transform=s?s({},""):"none",r.root&&r.root.updateScroll(),r.updateLayout(),this.resolveConstraints(),Y(a=>{if(!Me(a,e,null))return;const o=this.getAxisMotionValue(a),{min:l,max:u}=this.constraints[a];o.set(Ne(l,u,i[a]))})}addListeners(){if(!this.visualElement.current)return;_a.set(this.visualElement,this);const e=this.visualElement.current,n=pe(e,"pointerdown",l=>{const{drag:u,dragListener:h=!0}=this.getProps(),c=l.target,d=c!==e&&qr(c);u&&h&&!d&&this.start(l)}),r=()=>{const{dragConstraints:l}=this.getProps();me(l)&&l.current&&(this.constraints=this.resolveRefConstraints())},{projection:i}=this.visualElement,s=i.addEventListener("measure",r);i&&!i.layout&&(i.root&&i.root.updateScroll(),i.updateLayout()),X.read(r);const a=ke(window,"resize",()=>this.scalePositionWithinConstraints()),o=i.addEventListener("didUpdate",(({delta:l,hasLayoutChanged:u})=>{this.isDragging&&u&&(Y(h=>{const c=this.getAxisMotionValue(h);c&&(this.originPoint[h]+=l[h].translate,c.set(c.get()+l[h].translate))}),this.visualElement.render())}));return()=>{a(),n(),s(),o&&o()}}getProps(){const e=this.visualElement.getProps(),{drag:n=!1,dragDirectionLock:r=!1,dragPropagation:i=!1,dragConstraints:s=!1,dragElastic:a=st,dragMomentum:o=!0}=e;return{...e,drag:n,dragDirectionLock:r,dragPropagation:i,dragConstraints:s,dragElastic:a,dragMomentum:o}}}function Me(t,e,n){return(e===!0||e===t)&&(n===null||n===t)}function Ca(t,e=10){let n=null;return Math.abs(t.y)>e?n="y":Math.abs(t.x)>e&&(n="x"),n}class Sa extends ne{constructor(e){super(e),this.removeGroupControls=Le,this.removeListeners=Le,this.controls=new Ea(e)}mount(){const{dragControls:e}=this.node.getProps();e&&(this.removeGroupControls=e.subscribe(this.controls)),this.removeListeners=this.controls.addListeners()||Le}update(){const{dragControls:e}=this.node.getProps(),{dragControls:n}=this.node.prevProps||{};e!==n&&(this.removeGroupControls(),e&&(this.removeGroupControls=e.subscribe(this.controls)))}unmount(){this.removeGroupControls(),this.removeListeners(),this.controls.endPanSession()}}const Ut=t=>(e,n)=>{t&&X.postRender(()=>t(e,n))};class Ma extends ne{constructor(){super(...arguments),this.removePointerDownListener=Le}onPointerDown(e){this.session=new er(e,this.createPanHandlers(),{transformPagePoint:this.node.getTransformPagePoint(),contextWindow:Qn(this.node)})}createPanHandlers(){const{onPanSessionStart:e,onPanStart:n,onPan:r,onPanEnd:i}=this.node.getProps();return{onSessionStart:Ut(e),onStart:Ut(n),onMove:r,onEnd:(s,a)=>{delete this.session,i&&X.postRender(()=>i(s,a))}}}mount(){this.removePointerDownListener=pe(this.node.current,"pointerdown",e=>this.onPointerDown(e))}update(){this.session&&this.session.updateHandlers(this.createPanHandlers())}unmount(){this.removePointerDownListener(),this.session&&this.session.end()}}let Ke=!1;class Pa extends f.Component{componentDidMount(){const{visualElement:e,layoutGroup:n,switchLayoutGroup:r,layoutId:i}=this.props,{projection:s}=e;s&&(n.group&&n.group.add(s),r&&r.register&&i&&r.register(s),Ke&&s.root.didUpdate(),s.addEventListener("animationComplete",()=>{this.safeToRemove()}),s.setOptions({...s.options,onExitComplete:()=>this.safeToRemove()})),Yr.hasEverUpdated=!0}getSnapshotBeforeUpdate(e){const{layoutDependency:n,visualElement:r,drag:i,isPresent:s}=this.props,{projection:a}=r;return a&&(a.isPresent=s,Ke=!0,i||e.layoutDependency!==n||n===void 0||e.isPresent!==s?a.willUpdate():this.safeToRemove(),e.isPresent!==s&&(s?a.promote():a.relegate()||X.postRender(()=>{const o=a.getStack();(!o||!o.members.length)&&this.safeToRemove()}))),null}componentDidUpdate(){const{projection:e}=this.props.visualElement;e&&(e.root.didUpdate(),Xr.postRender(()=>{!e.currentAnimation&&e.isLead()&&this.safeToRemove()}))}componentWillUnmount(){const{visualElement:e,layoutGroup:n,switchLayoutGroup:r}=this.props,{projection:i}=e;Ke=!0,i&&(i.scheduleCheckAfterUnmount(),n&&n.group&&n.group.remove(i),r&&r.deregister&&r.deregister(i))}safeToRemove(){const{safeToRemove:e}=this.props;e&&e()}render(){return null}}function nr(t){const[e,n]=Fs(),r=f.useContext(Bn);return p.jsx(Pa,{...t,layoutGroup:r,switchLayoutGroup:f.useContext(Zn),isPresent:e,safeToRemove:n})}const Ra={pan:{Feature:Ma},drag:{Feature:Sa,ProjectionNode:xn,MeasureLayout:nr}};function Ht(t,e,n){const{props:r}=t;t.animationState&&r.whileHover&&t.animationState.setActive("whileHover",n==="Start");const i="onHover"+n,s=r[i];s&&X.postRender(()=>s(e,_e(e)))}class La extends ne{mount(){const{current:e}=this.node;e&&(this.unmount=Kr(e,(n,r)=>(Ht(this.node,r,"Start"),i=>Ht(this.node,i,"End"))))}unmount(){}}class ja extends ne{constructor(){super(...arguments),this.isActive=!1}onFocus(){let e=!1;try{e=this.node.current.matches(":focus-visible")}catch{e=!0}!e||!this.node.animationState||(this.node.animationState.setActive("whileFocus",!0),this.isActive=!0)}onBlur(){!this.isActive||!this.node.animationState||(this.node.animationState.setActive("whileFocus",!1),this.isActive=!1)}mount(){this.unmount=yn(ke(this.node.current,"focus",()=>this.onFocus()),ke(this.node.current,"blur",()=>this.onBlur()))}unmount(){}}function Gt(t,e,n){const{props:r}=t;if(t.current instanceof HTMLButtonElement&&t.current.disabled)return;t.animationState&&r.whileTap&&t.animationState.setActive("whileTap",n==="Start");const i="onTap"+(n==="End"?"":n),s=r[i];s&&X.postRender(()=>s(e,_e(e)))}class Ta extends ne{mount(){const{current:e}=this.node;e&&(this.unmount=Zr(e,(n,r)=>(Gt(this.node,r,"Start"),(i,{success:s})=>Gt(this.node,i,s?"End":"Cancel")),{useGlobalTarget:this.node.props.globalTapTarget}))}unmount(){}}const at=new WeakMap,Ze=new WeakMap,Ia=t=>{const e=at.get(t.target);e&&e(t)},Aa=t=>{t.forEach(Ia)};function ka({root:t,...e}){const n=t||document;Ze.has(n)||Ze.set(n,{});const r=Ze.get(n),i=JSON.stringify(e);return r[i]||(r[i]=new IntersectionObserver(Aa,{root:t,...e})),r[i]}function Na(t,e,n){const r=ka(e);return at.set(t,n),r.observe(t),()=>{at.delete(t),r.unobserve(t)}}const Fa={some:0,all:1};class Da extends ne{constructor(){super(...arguments),this.hasEnteredView=!1,this.isInView=!1}startObserver(){this.unmount();const{viewport:e={}}=this.node.getProps(),{root:n,margin:r,amount:i="some",once:s}=e,a={root:n?n.current:void 0,rootMargin:r,threshold:typeof i=="number"?i:Fa[i]},o=l=>{const{isIntersecting:u}=l;if(this.isInView===u||(this.isInView=u,s&&!u&&this.hasEnteredView))return;u&&(this.hasEnteredView=!0),this.node.animationState&&this.node.animationState.setActive("whileInView",u);const{onViewportEnter:h,onViewportLeave:c}=this.node.getProps(),d=u?h:c;d&&d(l)};return Na(this.node.current,a,o)}mount(){this.startObserver()}update(){if(typeof IntersectionObserver>"u")return;const{props:e,prevProps:n}=this.node;["amount","margin","root"].some(Oa(e,n))&&this.startObserver()}unmount(){}}function Oa({viewport:t={}},{viewport:e={}}={}){return n=>t[n]!==e[n]}const za={inView:{Feature:Da},tap:{Feature:Ta},focus:{Feature:ja},hover:{Feature:La}},$a={layout:{ProjectionNode:xn,MeasureLayout:nr}},Va={...da,...za,...Ra,...$a},I=oa(Va,la),Ba="_header_1c7on_1",Wa="_scrolled_1c7on_14",Ua="_nav_1c7on_20",Ha="_logo_1c7on_27",Ga="_logoImage_1c7on_33",qa="_navLinks_1c7on_38",Ya="_navLink_1c7on_38",Xa="_active_1c7on_61",Ka="_activeIndicator_1c7on_66",Za="_actions_1c7on_78",Ja="_langToggle_1c7on_84",Qa="_langDivider_1c7on_104",eo="_activeLang_1c7on_108",to="_mobileMenuBtn_1c7on_112",no="_hamburger_1c7on_122",ro="_open_1c7on_153",D={header:Ba,scrolled:Wa,nav:Ua,logo:Ha,logoImage:Ga,navLinks:qa,navLink:Ya,active:Xa,activeIndicator:Ka,actions:Za,langToggle:Ja,langDivider:Qa,activeLang:eo,mobileMenuBtn:to,hamburger:no,open:ro};function io(){const{t,language:e,setLanguage:n}=ue(),r=re(),[i,s]=f.useState(!1),[a,o]=f.useState(!1),[l,u]=f.useState(0),h=f.useRef(null),c=f.useRef([]),d=[{path:"/",label:t.nav.home},{path:"/about",label:t.nav.about},{path:"/contact",label:t.nav.contact}],m=d.findIndex(v=>v.path===r.pathname);f.useEffect(()=>{const v=()=>{s(window.scrollY>20)};return window.addEventListener("scroll",v,{passive:!0}),()=>window.removeEventListener("scroll",v)},[]),f.useEffect(()=>{o(!1)},[r.pathname]),f.useEffect(()=>{const v=()=>{const y=c.current[m],x=h.current;if(y&&x){const b=x.getBoundingClientRect(),w=y.getBoundingClientRect(),_=w.left-b.left+w.width/2;u(_)}};return v(),window.addEventListener("resize",v),()=>window.removeEventListener("resize",v)},[m,e]);const g=()=>{n(e==="de"?"en":"de")};return p.jsx(I.header,{className:`${D.header} ${i?D.scrolled:""}`,initial:{y:-100},animate:{y:0},transition:{duration:.5,ease:"easeOut"},children:p.jsxs("nav",{className:`${D.nav} container`,children:[p.jsx(oe,{to:"/",className:D.logo,children:p.jsx("img",{src:"/logo.svg",alt:"RagusaIT",className:D.logoImage})}),p.jsxs("div",{ref:h,className:`${D.navLinks} ${a?D.open:""}`,children:[d.map((v,y)=>p.jsx(oe,{ref:x=>{c.current[y]=x},to:v.path,className:`${D.navLink} ${r.pathname===v.path?D.active:""}`,children:v.label},v.path)),m!==-1&&p.jsx(I.div,{className:D.activeIndicator,animate:{x:l},transition:{type:"spring",stiffness:380,damping:30}})]}),p.jsxs("div",{className:D.actions,children:[p.jsxs("button",{onClick:g,className:D.langToggle,"aria-label":`Switch to ${e==="de"?"English":"German"}`,children:[p.jsx("span",{className:e==="de"?D.activeLang:"",children:"DE"}),p.jsx("span",{className:D.langDivider,children:"/"}),p.jsx("span",{className:e==="en"?D.activeLang:"",children:"EN"})]}),p.jsx("button",{className:D.mobileMenuBtn,onClick:()=>o(!a),"aria-label":"Toggle menu","aria-expanded":a,children:p.jsx("span",{className:`${D.hamburger} ${a?D.open:""}`})})]})]})})}const so="_footer_qrb1s_1",ao="_content_qrb1s_8",oo="_brand_qrb1s_16",lo="_logoImage_qrb1s_23",co="_copyright_qrb1s_28",uo="_links_qrb1s_34",ho="_socialLink_qrb1s_40",fo="_credit_qrb1s_58",mo="_heart_qrb1s_64",K={footer:so,content:ao,brand:oo,logoImage:lo,copyright:co,links:uo,socialLink:ho,credit:fo,heart:mo};function po(){const{t}=ue(),e=new Date().getFullYear();return p.jsx("footer",{className:K.footer,children:p.jsxs("div",{className:`${K.content} container`,children:[p.jsxs("div",{className:K.brand,children:[p.jsx("img",{src:"/logo.svg",alt:"RagusaIT",className:K.logoImage}),p.jsx("p",{className:K.copyright,children:t.footer.copyright.replace("{year}",String(e))})]}),p.jsx("div",{className:K.links,children:p.jsx("a",{href:"https://github.com/ragusa-it",target:"_blank",rel:"noopener noreferrer",className:K.socialLink,"aria-label":"GitHub",children:p.jsx("svg",{viewBox:"0 0 24 24",width:"24",height:"24",fill:"currentColor","aria-hidden":"true",children:p.jsx("path",{d:"M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0024 12c0-6.63-5.37-12-12-12z"})})})}),p.jsx("div",{className:K.credit,children:p.jsxs("p",{children:[t.footer.madeIn," ",p.jsx("span",{className:K.heart,children:t.footer.love})]})})]})})}const go=f.memo(()=>{const t=f.useRef(null),[e,n]=f.useState(!1);return f.useEffect(()=>{if(typeof window<"u"&&("ontouchstart"in window||navigator.maxTouchPoints>0)){n(!0);return}const r=t.current;if(!r)return;let i;const s=a=>{cancelAnimationFrame(i),i=requestAnimationFrame(()=>{r.style.transform=`translate3d(${a.clientX}px, ${a.clientY}px, 0) translate(-50%, -50%)`;const o=document.elementFromPoint(a.clientX,a.clientY),l=r.classList,u=!!o?.closest("#custom-resize-handle"),h=!!o?.closest('input[type="text"], input[type="email"], textarea, [contenteditable="true"]'),c=!!o?.closest('a, button, [role="button"], input[type="submit"], input[type="button"]');l.toggle("resize-hover",u),l.toggle("text-hover",h&&!u),l.toggle("link-hover",c&&!h&&!u)})};return window.addEventListener("mousemove",s,{passive:!0}),()=>{window.removeEventListener("mousemove",s),cancelAnimationFrame(i)}},[]),e?null:p.jsxs("div",{ref:t,id:"fancy-cursor",style:{willChange:"transform"},children:[p.jsx("div",{className:"fancy-cursor-dot"}),p.jsx("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:p.jsx("path",{d:"M5 19L19 5M5 19L9 19M5 19L5 15M19 5L15 5M19 5L19 9",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})})]})});function vo({words:t,typingSpeed:e=100,deletingSpeed:n=50,pauseDuration:r=2e3}){const[i,s]=f.useState(0),[a,o]=f.useState(""),[l,u]=f.useState(!1),[h,c]=f.useState(!1),d=f.useCallback(()=>{const m=t[i];h||(l?(o(m.substring(0,a.length-1)),a.length===0&&(u(!1),s(g=>(g+1)%t.length))):(o(m.substring(0,a.length+1)),a===m&&(c(!0),setTimeout(()=>{c(!1),u(!0)},r))))},[a,i,l,h,t,r]);return f.useEffect(()=>{const g=setTimeout(d,l?n:e);return()=>clearTimeout(g)},[d,l,e,n]),{text:a,isTyping:!l&&!h,isDeleting:l,currentWordIndex:i}}function ge(t){let e=t[0],n=t[1],r=t[2];return Math.sqrt(e*e+n*n+r*r)}function ot(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function yo(t,e,n,r){return t[0]=e,t[1]=n,t[2]=r,t}function qt(t,e,n){return t[0]=e[0]+n[0],t[1]=e[1]+n[1],t[2]=e[2]+n[2],t}function Yt(t,e,n){return t[0]=e[0]-n[0],t[1]=e[1]-n[1],t[2]=e[2]-n[2],t}function xo(t,e,n){return t[0]=e[0]*n[0],t[1]=e[1]*n[1],t[2]=e[2]*n[2],t}function bo(t,e,n){return t[0]=e[0]/n[0],t[1]=e[1]/n[1],t[2]=e[2]/n[2],t}function Je(t,e,n){return t[0]=e[0]*n,t[1]=e[1]*n,t[2]=e[2]*n,t}function wo(t,e){let n=e[0]-t[0],r=e[1]-t[1],i=e[2]-t[2];return Math.sqrt(n*n+r*r+i*i)}function _o(t,e){let n=e[0]-t[0],r=e[1]-t[1],i=e[2]-t[2];return n*n+r*r+i*i}function Xt(t){let e=t[0],n=t[1],r=t[2];return e*e+n*n+r*r}function Eo(t,e){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t}function Co(t,e){return t[0]=1/e[0],t[1]=1/e[1],t[2]=1/e[2],t}function lt(t,e){let n=e[0],r=e[1],i=e[2],s=n*n+r*r+i*i;return s>0&&(s=1/Math.sqrt(s)),t[0]=e[0]*s,t[1]=e[1]*s,t[2]=e[2]*s,t}function rr(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function Kt(t,e,n){let r=e[0],i=e[1],s=e[2],a=n[0],o=n[1],l=n[2];return t[0]=i*l-s*o,t[1]=s*a-r*l,t[2]=r*o-i*a,t}function So(t,e,n,r){let i=e[0],s=e[1],a=e[2];return t[0]=i+r*(n[0]-i),t[1]=s+r*(n[1]-s),t[2]=a+r*(n[2]-a),t}function Mo(t,e,n,r,i){const s=Math.exp(-r*i);let a=e[0],o=e[1],l=e[2];return t[0]=n[0]+(a-n[0])*s,t[1]=n[1]+(o-n[1])*s,t[2]=n[2]+(l-n[2])*s,t}function Po(t,e,n){let r=e[0],i=e[1],s=e[2],a=n[3]*r+n[7]*i+n[11]*s+n[15];return a=a||1,t[0]=(n[0]*r+n[4]*i+n[8]*s+n[12])/a,t[1]=(n[1]*r+n[5]*i+n[9]*s+n[13])/a,t[2]=(n[2]*r+n[6]*i+n[10]*s+n[14])/a,t}function Ro(t,e,n){let r=e[0],i=e[1],s=e[2],a=n[3]*r+n[7]*i+n[11]*s+n[15];return a=a||1,t[0]=(n[0]*r+n[4]*i+n[8]*s)/a,t[1]=(n[1]*r+n[5]*i+n[9]*s)/a,t[2]=(n[2]*r+n[6]*i+n[10]*s)/a,t}function Lo(t,e,n){let r=e[0],i=e[1],s=e[2];return t[0]=r*n[0]+i*n[3]+s*n[6],t[1]=r*n[1]+i*n[4]+s*n[7],t[2]=r*n[2]+i*n[5]+s*n[8],t}function jo(t,e,n){let r=e[0],i=e[1],s=e[2],a=n[0],o=n[1],l=n[2],u=n[3],h=o*s-l*i,c=l*r-a*s,d=a*i-o*r,m=o*d-l*c,g=l*h-a*d,v=a*c-o*h,y=u*2;return h*=y,c*=y,d*=y,m*=2,g*=2,v*=2,t[0]=r+h+m,t[1]=i+c+g,t[2]=s+d+v,t}const To=(function(){const t=[0,0,0],e=[0,0,0];return function(n,r){ot(t,n),ot(e,r),lt(t,t),lt(e,e);let i=rr(t,e);return i>1?0:i<-1?Math.PI:Math.acos(i)}})();function Io(t,e){return t[0]===e[0]&&t[1]===e[1]&&t[2]===e[2]}class G extends Array{constructor(e=0,n=e,r=e){return super(e,n,r),this}get x(){return this[0]}get y(){return this[1]}get z(){return this[2]}set x(e){this[0]=e}set y(e){this[1]=e}set z(e){this[2]=e}set(e,n=e,r=e){return e.length?this.copy(e):(yo(this,e,n,r),this)}copy(e){return ot(this,e),this}add(e,n){return n?qt(this,e,n):qt(this,this,e),this}sub(e,n){return n?Yt(this,e,n):Yt(this,this,e),this}multiply(e){return e.length?xo(this,this,e):Je(this,this,e),this}divide(e){return e.length?bo(this,this,e):Je(this,this,1/e),this}inverse(e=this){return Co(this,e),this}len(){return ge(this)}distance(e){return e?wo(this,e):ge(this)}squaredLen(){return Xt(this)}squaredDistance(e){return e?_o(this,e):Xt(this)}negate(e=this){return Eo(this,e),this}cross(e,n){return n?Kt(this,e,n):Kt(this,this,e),this}scale(e){return Je(this,this,e),this}normalize(){return lt(this,this),this}dot(e){return rr(this,e)}equals(e){return Io(this,e)}applyMatrix3(e){return Lo(this,this,e),this}applyMatrix4(e){return Po(this,this,e),this}scaleRotateMatrix4(e){return Ro(this,this,e),this}applyQuaternion(e){return jo(this,this,e),this}angle(e){return To(this,e)}lerp(e,n){return So(this,this,e,n),this}smoothLerp(e,n,r){return Mo(this,this,e,n,r),this}clone(){return new G(this[0],this[1],this[2])}fromArray(e,n=0){return this[0]=e[n],this[1]=e[n+1],this[2]=e[n+2],this}toArray(e=[],n=0){return e[n]=this[0],e[n+1]=this[1],e[n+2]=this[2],e}transformDirection(e){const n=this[0],r=this[1],i=this[2];return this[0]=e[0]*n+e[4]*r+e[8]*i,this[1]=e[1]*n+e[5]*r+e[9]*i,this[2]=e[2]*n+e[6]*r+e[10]*i,this.normalize()}}const Zt=new G;let Ao=1,ko=1,Jt=!1;class No{constructor(e,n={}){e.canvas||console.error("gl not passed as first argument to Geometry"),this.gl=e,this.attributes=n,this.id=Ao++,this.VAOs={},this.drawRange={start:0,count:0},this.instancedCount=0,this.gl.renderer.bindVertexArray(null),this.gl.renderer.currentGeometry=null,this.glState=this.gl.renderer.state;for(let r in n)this.addAttribute(r,n[r])}addAttribute(e,n){if(this.attributes[e]=n,n.id=ko++,n.size=n.size||1,n.type=n.type||(n.data.constructor===Float32Array?this.gl.FLOAT:n.data.constructor===Uint16Array?this.gl.UNSIGNED_SHORT:this.gl.UNSIGNED_INT),n.target=e==="index"?this.gl.ELEMENT_ARRAY_BUFFER:this.gl.ARRAY_BUFFER,n.normalized=n.normalized||!1,n.stride=n.stride||0,n.offset=n.offset||0,n.count=n.count||(n.stride?n.data.byteLength/n.stride:n.data.length/n.size),n.divisor=n.instanced||0,n.needsUpdate=!1,n.usage=n.usage||this.gl.STATIC_DRAW,n.buffer||this.updateAttribute(n),n.divisor){if(this.isInstanced=!0,this.instancedCount&&this.instancedCount!==n.count*n.divisor)return console.warn("geometry has multiple instanced buffers of different length"),this.instancedCount=Math.min(this.instancedCount,n.count*n.divisor);this.instancedCount=n.count*n.divisor}else e==="index"?this.drawRange.count=n.count:this.attributes.index||(this.drawRange.count=Math.max(this.drawRange.count,n.count))}updateAttribute(e){const n=!e.buffer;n&&(e.buffer=this.gl.createBuffer()),this.glState.boundBuffer!==e.buffer&&(this.gl.bindBuffer(e.target,e.buffer),this.glState.boundBuffer=e.buffer),n?this.gl.bufferData(e.target,e.data,e.usage):this.gl.bufferSubData(e.target,0,e.data),e.needsUpdate=!1}setIndex(e){this.addAttribute("index",e)}setDrawRange(e,n){this.drawRange.start=e,this.drawRange.count=n}setInstancedCount(e){this.instancedCount=e}createVAO(e){this.VAOs[e.attributeOrder]=this.gl.renderer.createVertexArray(),this.gl.renderer.bindVertexArray(this.VAOs[e.attributeOrder]),this.bindAttributes(e)}bindAttributes(e){e.attributeLocations.forEach((n,{name:r,type:i})=>{if(!this.attributes[r]){console.warn(`active attribute ${r} not being supplied`);return}const s=this.attributes[r];this.gl.bindBuffer(s.target,s.buffer),this.glState.boundBuffer=s.buffer;let a=1;i===35674&&(a=2),i===35675&&(a=3),i===35676&&(a=4);const o=s.size/a,l=a===1?0:a*a*4,u=a===1?0:a*4;for(let h=0;h<a;h++)this.gl.vertexAttribPointer(n+h,o,s.type,s.normalized,s.stride+l,s.offset+h*u),this.gl.enableVertexAttribArray(n+h),this.gl.renderer.vertexAttribDivisor(n+h,s.divisor)}),this.attributes.index&&this.gl.bindBuffer(this.gl.ELEMENT_ARRAY_BUFFER,this.attributes.index.buffer)}draw({program:e,mode:n=this.gl.TRIANGLES}){this.gl.renderer.currentGeometry!==`${this.id}_${e.attributeOrder}`&&(this.VAOs[e.attributeOrder]||this.createVAO(e),this.gl.renderer.bindVertexArray(this.VAOs[e.attributeOrder]),this.gl.renderer.currentGeometry=`${this.id}_${e.attributeOrder}`),e.attributeLocations.forEach((i,{name:s})=>{const a=this.attributes[s];a.needsUpdate&&this.updateAttribute(a)});let r=2;this.attributes.index?.type===this.gl.UNSIGNED_INT&&(r=4),this.isInstanced?this.attributes.index?this.gl.renderer.drawElementsInstanced(n,this.drawRange.count,this.attributes.index.type,this.attributes.index.offset+this.drawRange.start*r,this.instancedCount):this.gl.renderer.drawArraysInstanced(n,this.drawRange.start,this.drawRange.count,this.instancedCount):this.attributes.index?this.gl.drawElements(n,this.drawRange.count,this.attributes.index.type,this.attributes.index.offset+this.drawRange.start*r):this.gl.drawArrays(n,this.drawRange.start,this.drawRange.count)}getPosition(){const e=this.attributes.position;if(e.data)return e;if(!Jt)return console.warn("No position buffer data found to compute bounds"),Jt=!0}computeBoundingBox(e){e||(e=this.getPosition());const n=e.data,r=e.size;this.bounds||(this.bounds={min:new G,max:new G,center:new G,scale:new G,radius:1/0});const i=this.bounds.min,s=this.bounds.max,a=this.bounds.center,o=this.bounds.scale;i.set(1/0),s.set(-1/0);for(let l=0,u=n.length;l<u;l+=r){const h=n[l],c=n[l+1],d=n[l+2];i.x=Math.min(h,i.x),i.y=Math.min(c,i.y),i.z=Math.min(d,i.z),s.x=Math.max(h,s.x),s.y=Math.max(c,s.y),s.z=Math.max(d,s.z)}o.sub(s,i),a.add(i,s).divide(2)}computeBoundingSphere(e){e||(e=this.getPosition());const n=e.data,r=e.size;this.bounds||this.computeBoundingBox(e);let i=0;for(let s=0,a=n.length;s<a;s+=r)Zt.fromArray(n,s),i=Math.max(i,this.bounds.center.squaredDistance(Zt));this.bounds.radius=Math.sqrt(i)}remove(){for(let e in this.VAOs)this.gl.renderer.deleteVertexArray(this.VAOs[e]),delete this.VAOs[e];for(let e in this.attributes)this.gl.deleteBuffer(this.attributes[e].buffer),delete this.attributes[e]}}let Fo=1;const Qt={};class Do{constructor(e,{vertex:n,fragment:r,uniforms:i={},transparent:s=!1,cullFace:a=e.BACK,frontFace:o=e.CCW,depthTest:l=!0,depthWrite:u=!0,depthFunc:h=e.LEQUAL}={}){e.canvas||console.error("gl not passed as first argument to Program"),this.gl=e,this.uniforms=i,this.id=Fo++,n||console.warn("vertex shader not supplied"),r||console.warn("fragment shader not supplied"),this.transparent=s,this.cullFace=a,this.frontFace=o,this.depthTest=l,this.depthWrite=u,this.depthFunc=h,this.blendFunc={},this.blendEquation={},this.stencilFunc={},this.stencilOp={},this.transparent&&!this.blendFunc.src&&(this.gl.renderer.premultipliedAlpha?this.setBlendFunc(this.gl.ONE,this.gl.ONE_MINUS_SRC_ALPHA):this.setBlendFunc(this.gl.SRC_ALPHA,this.gl.ONE_MINUS_SRC_ALPHA)),this.vertexShader=e.createShader(e.VERTEX_SHADER),this.fragmentShader=e.createShader(e.FRAGMENT_SHADER),this.program=e.createProgram(),e.attachShader(this.program,this.vertexShader),e.attachShader(this.program,this.fragmentShader),this.setShaders({vertex:n,fragment:r})}setShaders({vertex:e,fragment:n}){if(e&&(this.gl.shaderSource(this.vertexShader,e),this.gl.compileShader(this.vertexShader),this.gl.getShaderInfoLog(this.vertexShader)!==""&&console.warn(`${this.gl.getShaderInfoLog(this.vertexShader)}
Vertex Shader
${en(e)}`)),n&&(this.gl.shaderSource(this.fragmentShader,n),this.gl.compileShader(this.fragmentShader),this.gl.getShaderInfoLog(this.fragmentShader)!==""&&console.warn(`${this.gl.getShaderInfoLog(this.fragmentShader)}
Fragment Shader
${en(n)}`)),this.gl.linkProgram(this.program),!this.gl.getProgramParameter(this.program,this.gl.LINK_STATUS))return console.warn(this.gl.getProgramInfoLog(this.program));this.uniformLocations=new Map;let r=this.gl.getProgramParameter(this.program,this.gl.ACTIVE_UNIFORMS);for(let a=0;a<r;a++){let o=this.gl.getActiveUniform(this.program,a);this.uniformLocations.set(o,this.gl.getUniformLocation(this.program,o.name));const l=o.name.match(/(\w+)/g);o.uniformName=l[0],o.nameComponents=l.slice(1)}this.attributeLocations=new Map;const i=[],s=this.gl.getProgramParameter(this.program,this.gl.ACTIVE_ATTRIBUTES);for(let a=0;a<s;a++){const o=this.gl.getActiveAttrib(this.program,a),l=this.gl.getAttribLocation(this.program,o.name);l!==-1&&(i[l]=o.name,this.attributeLocations.set(o,l))}this.attributeOrder=i.join("")}setBlendFunc(e,n,r,i){this.blendFunc.src=e,this.blendFunc.dst=n,this.blendFunc.srcAlpha=r,this.blendFunc.dstAlpha=i,e&&(this.transparent=!0)}setBlendEquation(e,n){this.blendEquation.modeRGB=e,this.blendEquation.modeAlpha=n}setStencilFunc(e,n,r){this.stencilRef=n,this.stencilFunc.func=e,this.stencilFunc.ref=n,this.stencilFunc.mask=r}setStencilOp(e,n,r){this.stencilOp.stencilFail=e,this.stencilOp.depthFail=n,this.stencilOp.depthPass=r}applyState(){this.depthTest?this.gl.renderer.enable(this.gl.DEPTH_TEST):this.gl.renderer.disable(this.gl.DEPTH_TEST),this.cullFace?this.gl.renderer.enable(this.gl.CULL_FACE):this.gl.renderer.disable(this.gl.CULL_FACE),this.blendFunc.src?this.gl.renderer.enable(this.gl.BLEND):this.gl.renderer.disable(this.gl.BLEND),this.cullFace&&this.gl.renderer.setCullFace(this.cullFace),this.gl.renderer.setFrontFace(this.frontFace),this.gl.renderer.setDepthMask(this.depthWrite),this.gl.renderer.setDepthFunc(this.depthFunc),this.blendFunc.src&&this.gl.renderer.setBlendFunc(this.blendFunc.src,this.blendFunc.dst,this.blendFunc.srcAlpha,this.blendFunc.dstAlpha),this.gl.renderer.setBlendEquation(this.blendEquation.modeRGB,this.blendEquation.modeAlpha),this.stencilFunc.func||this.stencilOp.stencilFail?this.gl.renderer.enable(this.gl.STENCIL_TEST):this.gl.renderer.disable(this.gl.STENCIL_TEST),this.gl.renderer.setStencilFunc(this.stencilFunc.func,this.stencilFunc.ref,this.stencilFunc.mask),this.gl.renderer.setStencilOp(this.stencilOp.stencilFail,this.stencilOp.depthFail,this.stencilOp.depthPass)}use({flipFaces:e=!1}={}){let n=-1;this.gl.renderer.state.currentProgram===this.id||(this.gl.useProgram(this.program),this.gl.renderer.state.currentProgram=this.id),this.uniformLocations.forEach((i,s)=>{let a=this.uniforms[s.uniformName];for(const o of s.nameComponents){if(!a)break;if(o in a)a=a[o];else{if(Array.isArray(a.value))break;a=void 0;break}}if(!a)return tn(`Active uniform ${s.name} has not been supplied`);if(a&&a.value===void 0)return tn(`${s.name} uniform is missing a value parameter`);if(a.value.texture)return n=n+1,a.value.update(n),Qe(this.gl,s.type,i,n);if(a.value.length&&a.value[0].texture){const o=[];return a.value.forEach(l=>{n=n+1,l.update(n),o.push(n)}),Qe(this.gl,s.type,i,o)}Qe(this.gl,s.type,i,a.value)}),this.applyState(),e&&this.gl.renderer.setFrontFace(this.frontFace===this.gl.CCW?this.gl.CW:this.gl.CCW)}remove(){this.gl.deleteProgram(this.program)}}function Qe(t,e,n,r){r=r.length?Oo(r):r;const i=t.renderer.state.uniformLocations.get(n);if(r.length)if(i===void 0||i.length!==r.length)t.renderer.state.uniformLocations.set(n,r.slice(0));else{if(zo(i,r))return;i.set?i.set(r):$o(i,r),t.renderer.state.uniformLocations.set(n,i)}else{if(i===r)return;t.renderer.state.uniformLocations.set(n,r)}switch(e){case 5126:return r.length?t.uniform1fv(n,r):t.uniform1f(n,r);case 35664:return t.uniform2fv(n,r);case 35665:return t.uniform3fv(n,r);case 35666:return t.uniform4fv(n,r);case 35670:case 5124:case 35678:case 36306:case 35680:case 36289:return r.length?t.uniform1iv(n,r):t.uniform1i(n,r);case 35671:case 35667:return t.uniform2iv(n,r);case 35672:case 35668:return t.uniform3iv(n,r);case 35673:case 35669:return t.uniform4iv(n,r);case 35674:return t.uniformMatrix2fv(n,!1,r);case 35675:return t.uniformMatrix3fv(n,!1,r);case 35676:return t.uniformMatrix4fv(n,!1,r)}}function en(t){let e=t.split(`
`);for(let n=0;n<e.length;n++)e[n]=n+1+": "+e[n];return e.join(`
`)}function Oo(t){const e=t.length,n=t[0].length;if(n===void 0)return t;const r=e*n;let i=Qt[r];i||(Qt[r]=i=new Float32Array(r));for(let s=0;s<e;s++)i.set(t[s],s*n);return i}function zo(t,e){if(t.length!==e.length)return!1;for(let n=0,r=t.length;n<r;n++)if(t[n]!==e[n])return!1;return!0}function $o(t,e){for(let n=0,r=t.length;n<r;n++)t[n]=e[n]}let et=0;function tn(t){et>100||(console.warn(t),et++,et>100&&console.warn("More than 100 program warnings - stopping logs."))}const tt=new G;let Vo=1;class Bo{constructor({canvas:e=document.createElement("canvas"),width:n=300,height:r=150,dpr:i=1,alpha:s=!1,depth:a=!0,stencil:o=!1,antialias:l=!1,premultipliedAlpha:u=!1,preserveDrawingBuffer:h=!1,powerPreference:c="default",autoClear:d=!0,webgl:m=2}={}){const g={alpha:s,depth:a,stencil:o,antialias:l,premultipliedAlpha:u,preserveDrawingBuffer:h,powerPreference:c};this.dpr=i,this.alpha=s,this.color=!0,this.depth=a,this.stencil=o,this.premultipliedAlpha=u,this.autoClear=d,this.id=Vo++,m===2&&(this.gl=e.getContext("webgl2",g)),this.isWebgl2=!!this.gl,this.gl||(this.gl=e.getContext("webgl",g)),this.gl||console.error("unable to create webgl context"),this.gl.renderer=this,this.setSize(n,r),this.state={},this.state.blendFunc={src:this.gl.ONE,dst:this.gl.ZERO},this.state.blendEquation={modeRGB:this.gl.FUNC_ADD},this.state.cullFace=!1,this.state.frontFace=this.gl.CCW,this.state.depthMask=!0,this.state.depthFunc=this.gl.LEQUAL,this.state.premultiplyAlpha=!1,this.state.flipY=!1,this.state.unpackAlignment=4,this.state.framebuffer=null,this.state.viewport={x:0,y:0,width:null,height:null},this.state.textureUnits=[],this.state.activeTextureUnit=0,this.state.boundBuffer=null,this.state.uniformLocations=new Map,this.state.currentProgram=null,this.extensions={},this.isWebgl2?(this.getExtension("EXT_color_buffer_float"),this.getExtension("OES_texture_float_linear")):(this.getExtension("OES_texture_float"),this.getExtension("OES_texture_float_linear"),this.getExtension("OES_texture_half_float"),this.getExtension("OES_texture_half_float_linear"),this.getExtension("OES_element_index_uint"),this.getExtension("OES_standard_derivatives"),this.getExtension("EXT_sRGB"),this.getExtension("WEBGL_depth_texture"),this.getExtension("WEBGL_draw_buffers")),this.getExtension("WEBGL_compressed_texture_astc"),this.getExtension("EXT_texture_compression_bptc"),this.getExtension("WEBGL_compressed_texture_s3tc"),this.getExtension("WEBGL_compressed_texture_etc1"),this.getExtension("WEBGL_compressed_texture_pvrtc"),this.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc"),this.vertexAttribDivisor=this.getExtension("ANGLE_instanced_arrays","vertexAttribDivisor","vertexAttribDivisorANGLE"),this.drawArraysInstanced=this.getExtension("ANGLE_instanced_arrays","drawArraysInstanced","drawArraysInstancedANGLE"),this.drawElementsInstanced=this.getExtension("ANGLE_instanced_arrays","drawElementsInstanced","drawElementsInstancedANGLE"),this.createVertexArray=this.getExtension("OES_vertex_array_object","createVertexArray","createVertexArrayOES"),this.bindVertexArray=this.getExtension("OES_vertex_array_object","bindVertexArray","bindVertexArrayOES"),this.deleteVertexArray=this.getExtension("OES_vertex_array_object","deleteVertexArray","deleteVertexArrayOES"),this.drawBuffers=this.getExtension("WEBGL_draw_buffers","drawBuffers","drawBuffersWEBGL"),this.parameters={},this.parameters.maxTextureUnits=this.gl.getParameter(this.gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS),this.parameters.maxAnisotropy=this.getExtension("EXT_texture_filter_anisotropic")?this.gl.getParameter(this.getExtension("EXT_texture_filter_anisotropic").MAX_TEXTURE_MAX_ANISOTROPY_EXT):0}setSize(e,n){this.width=e,this.height=n,this.gl.canvas.width=e*this.dpr,this.gl.canvas.height=n*this.dpr,this.gl.canvas.style&&Object.assign(this.gl.canvas.style,{width:e+"px",height:n+"px"})}setViewport(e,n,r=0,i=0){this.state.viewport.width===e&&this.state.viewport.height===n||(this.state.viewport.width=e,this.state.viewport.height=n,this.state.viewport.x=r,this.state.viewport.y=i,this.gl.viewport(r,i,e,n))}setScissor(e,n,r=0,i=0){this.gl.scissor(r,i,e,n)}enable(e){this.state[e]!==!0&&(this.gl.enable(e),this.state[e]=!0)}disable(e){this.state[e]!==!1&&(this.gl.disable(e),this.state[e]=!1)}setBlendFunc(e,n,r,i){this.state.blendFunc.src===e&&this.state.blendFunc.dst===n&&this.state.blendFunc.srcAlpha===r&&this.state.blendFunc.dstAlpha===i||(this.state.blendFunc.src=e,this.state.blendFunc.dst=n,this.state.blendFunc.srcAlpha=r,this.state.blendFunc.dstAlpha=i,r!==void 0?this.gl.blendFuncSeparate(e,n,r,i):this.gl.blendFunc(e,n))}setBlendEquation(e,n){e=e||this.gl.FUNC_ADD,!(this.state.blendEquation.modeRGB===e&&this.state.blendEquation.modeAlpha===n)&&(this.state.blendEquation.modeRGB=e,this.state.blendEquation.modeAlpha=n,n!==void 0?this.gl.blendEquationSeparate(e,n):this.gl.blendEquation(e))}setCullFace(e){this.state.cullFace!==e&&(this.state.cullFace=e,this.gl.cullFace(e))}setFrontFace(e){this.state.frontFace!==e&&(this.state.frontFace=e,this.gl.frontFace(e))}setDepthMask(e){this.state.depthMask!==e&&(this.state.depthMask=e,this.gl.depthMask(e))}setDepthFunc(e){this.state.depthFunc!==e&&(this.state.depthFunc=e,this.gl.depthFunc(e))}setStencilMask(e){this.state.stencilMask!==e&&(this.state.stencilMask=e,this.gl.stencilMask(e))}setStencilFunc(e,n,r){this.state.stencilFunc===e&&this.state.stencilRef===n&&this.state.stencilFuncMask===r||(this.state.stencilFunc=e||this.gl.ALWAYS,this.state.stencilRef=n||0,this.state.stencilFuncMask=r||0,this.gl.stencilFunc(e||this.gl.ALWAYS,n||0,r||0))}setStencilOp(e,n,r){this.state.stencilFail===e&&this.state.stencilDepthFail===n&&this.state.stencilDepthPass===r||(this.state.stencilFail=e,this.state.stencilDepthFail=n,this.state.stencilDepthPass=r,this.gl.stencilOp(e,n,r))}activeTexture(e){this.state.activeTextureUnit!==e&&(this.state.activeTextureUnit=e,this.gl.activeTexture(this.gl.TEXTURE0+e))}bindFramebuffer({target:e=this.gl.FRAMEBUFFER,buffer:n=null}={}){this.state.framebuffer!==n&&(this.state.framebuffer=n,this.gl.bindFramebuffer(e,n))}getExtension(e,n,r){return n&&this.gl[n]?this.gl[n].bind(this.gl):(this.extensions[e]||(this.extensions[e]=this.gl.getExtension(e)),n?this.extensions[e]?this.extensions[e][r].bind(this.extensions[e]):null:this.extensions[e])}sortOpaque(e,n){return e.renderOrder!==n.renderOrder?e.renderOrder-n.renderOrder:e.program.id!==n.program.id?e.program.id-n.program.id:e.zDepth!==n.zDepth?e.zDepth-n.zDepth:n.id-e.id}sortTransparent(e,n){return e.renderOrder!==n.renderOrder?e.renderOrder-n.renderOrder:e.zDepth!==n.zDepth?n.zDepth-e.zDepth:n.id-e.id}sortUI(e,n){return e.renderOrder!==n.renderOrder?e.renderOrder-n.renderOrder:e.program.id!==n.program.id?e.program.id-n.program.id:n.id-e.id}getRenderList({scene:e,camera:n,frustumCull:r,sort:i}){let s=[];if(n&&r&&n.updateFrustum(),e.traverse(a=>{if(!a.visible)return!0;a.draw&&(r&&a.frustumCulled&&n&&!n.frustumIntersectsMesh(a)||s.push(a))}),i){const a=[],o=[],l=[];s.forEach(u=>{u.program.transparent?u.program.depthTest?o.push(u):l.push(u):a.push(u),u.zDepth=0,!(u.renderOrder!==0||!u.program.depthTest||!n)&&(u.worldMatrix.getTranslation(tt),tt.applyMatrix4(n.projectionViewMatrix),u.zDepth=tt.z)}),a.sort(this.sortOpaque),o.sort(this.sortTransparent),l.sort(this.sortUI),s=a.concat(o,l)}return s}render({scene:e,camera:n,target:r=null,update:i=!0,sort:s=!0,frustumCull:a=!0,clear:o}){r===null?(this.bindFramebuffer(),this.setViewport(this.width*this.dpr,this.height*this.dpr)):(this.bindFramebuffer(r),this.setViewport(r.width,r.height)),(o||this.autoClear&&o!==!1)&&(this.depth&&(!r||r.depth)&&(this.enable(this.gl.DEPTH_TEST),this.setDepthMask(!0)),(this.stencil||!r||r.stencil)&&(this.enable(this.gl.STENCIL_TEST),this.setStencilMask(255)),this.gl.clear((this.color?this.gl.COLOR_BUFFER_BIT:0)|(this.depth?this.gl.DEPTH_BUFFER_BIT:0)|(this.stencil?this.gl.STENCIL_BUFFER_BIT:0))),i&&e.updateMatrixWorld(),n&&n.updateMatrixWorld(),this.getRenderList({scene:e,camera:n,frustumCull:a,sort:s}).forEach(u=>{u.draw({camera:n})})}}function Wo(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t}function Uo(t,e,n,r,i){return t[0]=e,t[1]=n,t[2]=r,t[3]=i,t}function Ho(t,e){let n=e[0],r=e[1],i=e[2],s=e[3],a=n*n+r*r+i*i+s*s;return a>0&&(a=1/Math.sqrt(a)),t[0]=n*a,t[1]=r*a,t[2]=i*a,t[3]=s*a,t}function Go(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]+t[3]*e[3]}function qo(t){return t[0]=0,t[1]=0,t[2]=0,t[3]=1,t}function Yo(t,e,n){n=n*.5;let r=Math.sin(n);return t[0]=r*e[0],t[1]=r*e[1],t[2]=r*e[2],t[3]=Math.cos(n),t}function nn(t,e,n){let r=e[0],i=e[1],s=e[2],a=e[3],o=n[0],l=n[1],u=n[2],h=n[3];return t[0]=r*h+a*o+i*u-s*l,t[1]=i*h+a*l+s*o-r*u,t[2]=s*h+a*u+r*l-i*o,t[3]=a*h-r*o-i*l-s*u,t}function Xo(t,e,n){n*=.5;let r=e[0],i=e[1],s=e[2],a=e[3],o=Math.sin(n),l=Math.cos(n);return t[0]=r*l+a*o,t[1]=i*l+s*o,t[2]=s*l-i*o,t[3]=a*l-r*o,t}function Ko(t,e,n){n*=.5;let r=e[0],i=e[1],s=e[2],a=e[3],o=Math.sin(n),l=Math.cos(n);return t[0]=r*l-s*o,t[1]=i*l+a*o,t[2]=s*l+r*o,t[3]=a*l-i*o,t}function Zo(t,e,n){n*=.5;let r=e[0],i=e[1],s=e[2],a=e[3],o=Math.sin(n),l=Math.cos(n);return t[0]=r*l+i*o,t[1]=i*l-r*o,t[2]=s*l+a*o,t[3]=a*l-s*o,t}function Jo(t,e,n,r){let i=e[0],s=e[1],a=e[2],o=e[3],l=n[0],u=n[1],h=n[2],c=n[3],d,m,g,v,y;return m=i*l+s*u+a*h+o*c,m<0&&(m=-m,l=-l,u=-u,h=-h,c=-c),1-m>1e-6?(d=Math.acos(m),g=Math.sin(d),v=Math.sin((1-r)*d)/g,y=Math.sin(r*d)/g):(v=1-r,y=r),t[0]=v*i+y*l,t[1]=v*s+y*u,t[2]=v*a+y*h,t[3]=v*o+y*c,t}function Qo(t,e){let n=e[0],r=e[1],i=e[2],s=e[3],a=n*n+r*r+i*i+s*s,o=a?1/a:0;return t[0]=-n*o,t[1]=-r*o,t[2]=-i*o,t[3]=s*o,t}function el(t,e){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t[3]=e[3],t}function tl(t,e){let n=e[0]+e[4]+e[8],r;if(n>0)r=Math.sqrt(n+1),t[3]=.5*r,r=.5/r,t[0]=(e[5]-e[7])*r,t[1]=(e[6]-e[2])*r,t[2]=(e[1]-e[3])*r;else{let i=0;e[4]>e[0]&&(i=1),e[8]>e[i*3+i]&&(i=2);let s=(i+1)%3,a=(i+2)%3;r=Math.sqrt(e[i*3+i]-e[s*3+s]-e[a*3+a]+1),t[i]=.5*r,r=.5/r,t[3]=(e[s*3+a]-e[a*3+s])*r,t[s]=(e[s*3+i]+e[i*3+s])*r,t[a]=(e[a*3+i]+e[i*3+a])*r}return t}function nl(t,e,n="YXZ"){let r=Math.sin(e[0]*.5),i=Math.cos(e[0]*.5),s=Math.sin(e[1]*.5),a=Math.cos(e[1]*.5),o=Math.sin(e[2]*.5),l=Math.cos(e[2]*.5);return n==="XYZ"?(t[0]=r*a*l+i*s*o,t[1]=i*s*l-r*a*o,t[2]=i*a*o+r*s*l,t[3]=i*a*l-r*s*o):n==="YXZ"?(t[0]=r*a*l+i*s*o,t[1]=i*s*l-r*a*o,t[2]=i*a*o-r*s*l,t[3]=i*a*l+r*s*o):n==="ZXY"?(t[0]=r*a*l-i*s*o,t[1]=i*s*l+r*a*o,t[2]=i*a*o+r*s*l,t[3]=i*a*l-r*s*o):n==="ZYX"?(t[0]=r*a*l-i*s*o,t[1]=i*s*l+r*a*o,t[2]=i*a*o-r*s*l,t[3]=i*a*l+r*s*o):n==="YZX"?(t[0]=r*a*l+i*s*o,t[1]=i*s*l+r*a*o,t[2]=i*a*o-r*s*l,t[3]=i*a*l-r*s*o):n==="XZY"&&(t[0]=r*a*l-i*s*o,t[1]=i*s*l-r*a*o,t[2]=i*a*o+r*s*l,t[3]=i*a*l+r*s*o),t}const rl=Wo,il=Uo,sl=Go,al=Ho;class ol extends Array{constructor(e=0,n=0,r=0,i=1){super(e,n,r,i),this.onChange=()=>{},this._target=this;const s=["0","1","2","3"];return new Proxy(this,{set(a,o){const l=Reflect.set(...arguments);return l&&s.includes(o)&&a.onChange(),l}})}get x(){return this[0]}get y(){return this[1]}get z(){return this[2]}get w(){return this[3]}set x(e){this._target[0]=e,this.onChange()}set y(e){this._target[1]=e,this.onChange()}set z(e){this._target[2]=e,this.onChange()}set w(e){this._target[3]=e,this.onChange()}identity(){return qo(this._target),this.onChange(),this}set(e,n,r,i){return e.length?this.copy(e):(il(this._target,e,n,r,i),this.onChange(),this)}rotateX(e){return Xo(this._target,this._target,e),this.onChange(),this}rotateY(e){return Ko(this._target,this._target,e),this.onChange(),this}rotateZ(e){return Zo(this._target,this._target,e),this.onChange(),this}inverse(e=this._target){return Qo(this._target,e),this.onChange(),this}conjugate(e=this._target){return el(this._target,e),this.onChange(),this}copy(e){return rl(this._target,e),this.onChange(),this}normalize(e=this._target){return al(this._target,e),this.onChange(),this}multiply(e,n){return n?nn(this._target,e,n):nn(this._target,this._target,e),this.onChange(),this}dot(e){return sl(this._target,e)}fromMatrix3(e){return tl(this._target,e),this.onChange(),this}fromEuler(e,n){return nl(this._target,e,e.order),n||this.onChange(),this}fromAxisAngle(e,n){return Yo(this._target,e,n),this.onChange(),this}slerp(e,n){return Jo(this._target,this._target,e,n),this.onChange(),this}fromArray(e,n=0){return this._target[0]=e[n],this._target[1]=e[n+1],this._target[2]=e[n+2],this._target[3]=e[n+3],this.onChange(),this}toArray(e=[],n=0){return e[n]=this[0],e[n+1]=this[1],e[n+2]=this[2],e[n+3]=this[3],e}}const ll=1e-6;function cl(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t}function ul(t,e,n,r,i,s,a,o,l,u,h,c,d,m,g,v,y){return t[0]=e,t[1]=n,t[2]=r,t[3]=i,t[4]=s,t[5]=a,t[6]=o,t[7]=l,t[8]=u,t[9]=h,t[10]=c,t[11]=d,t[12]=m,t[13]=g,t[14]=v,t[15]=y,t}function hl(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function dl(t,e){let n=e[0],r=e[1],i=e[2],s=e[3],a=e[4],o=e[5],l=e[6],u=e[7],h=e[8],c=e[9],d=e[10],m=e[11],g=e[12],v=e[13],y=e[14],x=e[15],b=n*o-r*a,w=n*l-i*a,_=n*u-s*a,E=r*l-i*o,C=r*u-s*o,M=i*u-s*l,T=h*v-c*g,P=h*y-d*g,R=h*x-m*g,j=c*y-d*v,L=c*x-m*v,N=d*x-m*y,S=b*N-w*L+_*j+E*R-C*P+M*T;return S?(S=1/S,t[0]=(o*N-l*L+u*j)*S,t[1]=(i*L-r*N-s*j)*S,t[2]=(v*M-y*C+x*E)*S,t[3]=(d*C-c*M-m*E)*S,t[4]=(l*R-a*N-u*P)*S,t[5]=(n*N-i*R+s*P)*S,t[6]=(y*_-g*M-x*w)*S,t[7]=(h*M-d*_+m*w)*S,t[8]=(a*L-o*R+u*T)*S,t[9]=(r*R-n*L-s*T)*S,t[10]=(g*C-v*_+x*b)*S,t[11]=(c*_-h*C-m*b)*S,t[12]=(o*P-a*j-l*T)*S,t[13]=(n*j-r*P+i*T)*S,t[14]=(v*w-g*E-y*b)*S,t[15]=(h*E-c*w+d*b)*S,t):null}function ir(t){let e=t[0],n=t[1],r=t[2],i=t[3],s=t[4],a=t[5],o=t[6],l=t[7],u=t[8],h=t[9],c=t[10],d=t[11],m=t[12],g=t[13],v=t[14],y=t[15],x=e*a-n*s,b=e*o-r*s,w=e*l-i*s,_=n*o-r*a,E=n*l-i*a,C=r*l-i*o,M=u*g-h*m,T=u*v-c*m,P=u*y-d*m,R=h*v-c*g,j=h*y-d*g,L=c*y-d*v;return x*L-b*j+w*R+_*P-E*T+C*M}function rn(t,e,n){let r=e[0],i=e[1],s=e[2],a=e[3],o=e[4],l=e[5],u=e[6],h=e[7],c=e[8],d=e[9],m=e[10],g=e[11],v=e[12],y=e[13],x=e[14],b=e[15],w=n[0],_=n[1],E=n[2],C=n[3];return t[0]=w*r+_*o+E*c+C*v,t[1]=w*i+_*l+E*d+C*y,t[2]=w*s+_*u+E*m+C*x,t[3]=w*a+_*h+E*g+C*b,w=n[4],_=n[5],E=n[6],C=n[7],t[4]=w*r+_*o+E*c+C*v,t[5]=w*i+_*l+E*d+C*y,t[6]=w*s+_*u+E*m+C*x,t[7]=w*a+_*h+E*g+C*b,w=n[8],_=n[9],E=n[10],C=n[11],t[8]=w*r+_*o+E*c+C*v,t[9]=w*i+_*l+E*d+C*y,t[10]=w*s+_*u+E*m+C*x,t[11]=w*a+_*h+E*g+C*b,w=n[12],_=n[13],E=n[14],C=n[15],t[12]=w*r+_*o+E*c+C*v,t[13]=w*i+_*l+E*d+C*y,t[14]=w*s+_*u+E*m+C*x,t[15]=w*a+_*h+E*g+C*b,t}function fl(t,e,n){let r=n[0],i=n[1],s=n[2],a,o,l,u,h,c,d,m,g,v,y,x;return e===t?(t[12]=e[0]*r+e[4]*i+e[8]*s+e[12],t[13]=e[1]*r+e[5]*i+e[9]*s+e[13],t[14]=e[2]*r+e[6]*i+e[10]*s+e[14],t[15]=e[3]*r+e[7]*i+e[11]*s+e[15]):(a=e[0],o=e[1],l=e[2],u=e[3],h=e[4],c=e[5],d=e[6],m=e[7],g=e[8],v=e[9],y=e[10],x=e[11],t[0]=a,t[1]=o,t[2]=l,t[3]=u,t[4]=h,t[5]=c,t[6]=d,t[7]=m,t[8]=g,t[9]=v,t[10]=y,t[11]=x,t[12]=a*r+h*i+g*s+e[12],t[13]=o*r+c*i+v*s+e[13],t[14]=l*r+d*i+y*s+e[14],t[15]=u*r+m*i+x*s+e[15]),t}function ml(t,e,n){let r=n[0],i=n[1],s=n[2];return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t[3]=e[3]*r,t[4]=e[4]*i,t[5]=e[5]*i,t[6]=e[6]*i,t[7]=e[7]*i,t[8]=e[8]*s,t[9]=e[9]*s,t[10]=e[10]*s,t[11]=e[11]*s,t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t}function pl(t,e,n,r){let i=r[0],s=r[1],a=r[2],o=Math.hypot(i,s,a),l,u,h,c,d,m,g,v,y,x,b,w,_,E,C,M,T,P,R,j,L,N,S,V;return Math.abs(o)<ll?null:(o=1/o,i*=o,s*=o,a*=o,l=Math.sin(n),u=Math.cos(n),h=1-u,c=e[0],d=e[1],m=e[2],g=e[3],v=e[4],y=e[5],x=e[6],b=e[7],w=e[8],_=e[9],E=e[10],C=e[11],M=i*i*h+u,T=s*i*h+a*l,P=a*i*h-s*l,R=i*s*h-a*l,j=s*s*h+u,L=a*s*h+i*l,N=i*a*h+s*l,S=s*a*h-i*l,V=a*a*h+u,t[0]=c*M+v*T+w*P,t[1]=d*M+y*T+_*P,t[2]=m*M+x*T+E*P,t[3]=g*M+b*T+C*P,t[4]=c*R+v*j+w*L,t[5]=d*R+y*j+_*L,t[6]=m*R+x*j+E*L,t[7]=g*R+b*j+C*L,t[8]=c*N+v*S+w*V,t[9]=d*N+y*S+_*V,t[10]=m*N+x*S+E*V,t[11]=g*N+b*S+C*V,e!==t&&(t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t)}function gl(t,e){return t[0]=e[12],t[1]=e[13],t[2]=e[14],t}function sr(t,e){let n=e[0],r=e[1],i=e[2],s=e[4],a=e[5],o=e[6],l=e[8],u=e[9],h=e[10];return t[0]=Math.hypot(n,r,i),t[1]=Math.hypot(s,a,o),t[2]=Math.hypot(l,u,h),t}function vl(t){let e=t[0],n=t[1],r=t[2],i=t[4],s=t[5],a=t[6],o=t[8],l=t[9],u=t[10];const h=e*e+n*n+r*r,c=i*i+s*s+a*a,d=o*o+l*l+u*u;return Math.sqrt(Math.max(h,c,d))}const ar=(function(){const t=[1,1,1];return function(e,n){let r=t;sr(r,n);let i=1/r[0],s=1/r[1],a=1/r[2],o=n[0]*i,l=n[1]*s,u=n[2]*a,h=n[4]*i,c=n[5]*s,d=n[6]*a,m=n[8]*i,g=n[9]*s,v=n[10]*a,y=o+c+v,x=0;return y>0?(x=Math.sqrt(y+1)*2,e[3]=.25*x,e[0]=(d-g)/x,e[1]=(m-u)/x,e[2]=(l-h)/x):o>c&&o>v?(x=Math.sqrt(1+o-c-v)*2,e[3]=(d-g)/x,e[0]=.25*x,e[1]=(l+h)/x,e[2]=(m+u)/x):c>v?(x=Math.sqrt(1+c-o-v)*2,e[3]=(m-u)/x,e[0]=(l+h)/x,e[1]=.25*x,e[2]=(d+g)/x):(x=Math.sqrt(1+v-o-c)*2,e[3]=(l-h)/x,e[0]=(m+u)/x,e[1]=(d+g)/x,e[2]=.25*x),e}})();function yl(t,e,n,r){let i=ge([t[0],t[1],t[2]]);const s=ge([t[4],t[5],t[6]]),a=ge([t[8],t[9],t[10]]);ir(t)<0&&(i=-i),n[0]=t[12],n[1]=t[13],n[2]=t[14];const l=t.slice(),u=1/i,h=1/s,c=1/a;l[0]*=u,l[1]*=u,l[2]*=u,l[4]*=h,l[5]*=h,l[6]*=h,l[8]*=c,l[9]*=c,l[10]*=c,ar(e,l),r[0]=i,r[1]=s,r[2]=a}function xl(t,e,n,r){const i=t,s=e[0],a=e[1],o=e[2],l=e[3],u=s+s,h=a+a,c=o+o,d=s*u,m=s*h,g=s*c,v=a*h,y=a*c,x=o*c,b=l*u,w=l*h,_=l*c,E=r[0],C=r[1],M=r[2];return i[0]=(1-(v+x))*E,i[1]=(m+_)*E,i[2]=(g-w)*E,i[3]=0,i[4]=(m-_)*C,i[5]=(1-(d+x))*C,i[6]=(y+b)*C,i[7]=0,i[8]=(g+w)*M,i[9]=(y-b)*M,i[10]=(1-(d+v))*M,i[11]=0,i[12]=n[0],i[13]=n[1],i[14]=n[2],i[15]=1,i}function bl(t,e){let n=e[0],r=e[1],i=e[2],s=e[3],a=n+n,o=r+r,l=i+i,u=n*a,h=r*a,c=r*o,d=i*a,m=i*o,g=i*l,v=s*a,y=s*o,x=s*l;return t[0]=1-c-g,t[1]=h+x,t[2]=d-y,t[3]=0,t[4]=h-x,t[5]=1-u-g,t[6]=m+v,t[7]=0,t[8]=d+y,t[9]=m-v,t[10]=1-u-c,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function wl(t,e,n,r,i){let s=1/Math.tan(e/2),a=1/(r-i);return t[0]=s/n,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=s,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=(i+r)*a,t[11]=-1,t[12]=0,t[13]=0,t[14]=2*i*r*a,t[15]=0,t}function _l(t,e,n,r,i,s,a){let o=1/(e-n),l=1/(r-i),u=1/(s-a);return t[0]=-2*o,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*l,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*u,t[11]=0,t[12]=(e+n)*o,t[13]=(i+r)*l,t[14]=(a+s)*u,t[15]=1,t}function El(t,e,n,r){let i=e[0],s=e[1],a=e[2],o=r[0],l=r[1],u=r[2],h=i-n[0],c=s-n[1],d=a-n[2],m=h*h+c*c+d*d;m===0?d=1:(m=1/Math.sqrt(m),h*=m,c*=m,d*=m);let g=l*d-u*c,v=u*h-o*d,y=o*c-l*h;return m=g*g+v*v+y*y,m===0&&(u?o+=1e-6:l?u+=1e-6:l+=1e-6,g=l*d-u*c,v=u*h-o*d,y=o*c-l*h,m=g*g+v*v+y*y),m=1/Math.sqrt(m),g*=m,v*=m,y*=m,t[0]=g,t[1]=v,t[2]=y,t[3]=0,t[4]=c*y-d*v,t[5]=d*g-h*y,t[6]=h*v-c*g,t[7]=0,t[8]=h,t[9]=c,t[10]=d,t[11]=0,t[12]=i,t[13]=s,t[14]=a,t[15]=1,t}function sn(t,e,n){return t[0]=e[0]+n[0],t[1]=e[1]+n[1],t[2]=e[2]+n[2],t[3]=e[3]+n[3],t[4]=e[4]+n[4],t[5]=e[5]+n[5],t[6]=e[6]+n[6],t[7]=e[7]+n[7],t[8]=e[8]+n[8],t[9]=e[9]+n[9],t[10]=e[10]+n[10],t[11]=e[11]+n[11],t[12]=e[12]+n[12],t[13]=e[13]+n[13],t[14]=e[14]+n[14],t[15]=e[15]+n[15],t}function an(t,e,n){return t[0]=e[0]-n[0],t[1]=e[1]-n[1],t[2]=e[2]-n[2],t[3]=e[3]-n[3],t[4]=e[4]-n[4],t[5]=e[5]-n[5],t[6]=e[6]-n[6],t[7]=e[7]-n[7],t[8]=e[8]-n[8],t[9]=e[9]-n[9],t[10]=e[10]-n[10],t[11]=e[11]-n[11],t[12]=e[12]-n[12],t[13]=e[13]-n[13],t[14]=e[14]-n[14],t[15]=e[15]-n[15],t}function Cl(t,e,n){return t[0]=e[0]*n,t[1]=e[1]*n,t[2]=e[2]*n,t[3]=e[3]*n,t[4]=e[4]*n,t[5]=e[5]*n,t[6]=e[6]*n,t[7]=e[7]*n,t[8]=e[8]*n,t[9]=e[9]*n,t[10]=e[10]*n,t[11]=e[11]*n,t[12]=e[12]*n,t[13]=e[13]*n,t[14]=e[14]*n,t[15]=e[15]*n,t}class Oe extends Array{constructor(e=1,n=0,r=0,i=0,s=0,a=1,o=0,l=0,u=0,h=0,c=1,d=0,m=0,g=0,v=0,y=1){return super(e,n,r,i,s,a,o,l,u,h,c,d,m,g,v,y),this}get x(){return this[12]}get y(){return this[13]}get z(){return this[14]}get w(){return this[15]}set x(e){this[12]=e}set y(e){this[13]=e}set z(e){this[14]=e}set w(e){this[15]=e}set(e,n,r,i,s,a,o,l,u,h,c,d,m,g,v,y){return e.length?this.copy(e):(ul(this,e,n,r,i,s,a,o,l,u,h,c,d,m,g,v,y),this)}translate(e,n=this){return fl(this,n,e),this}rotate(e,n,r=this){return pl(this,r,e,n),this}scale(e,n=this){return ml(this,n,typeof e=="number"?[e,e,e]:e),this}add(e,n){return n?sn(this,e,n):sn(this,this,e),this}sub(e,n){return n?an(this,e,n):an(this,this,e),this}multiply(e,n){return e.length?n?rn(this,e,n):rn(this,this,e):Cl(this,this,e),this}identity(){return hl(this),this}copy(e){return cl(this,e),this}fromPerspective({fov:e,aspect:n,near:r,far:i}={}){return wl(this,e,n,r,i),this}fromOrthogonal({left:e,right:n,bottom:r,top:i,near:s,far:a}){return _l(this,e,n,r,i,s,a),this}fromQuaternion(e){return bl(this,e),this}setPosition(e){return this.x=e[0],this.y=e[1],this.z=e[2],this}inverse(e=this){return dl(this,e),this}compose(e,n,r){return xl(this,e,n,r),this}decompose(e,n,r){return yl(this,e,n,r),this}getRotation(e){return ar(e,this),this}getTranslation(e){return gl(e,this),this}getScaling(e){return sr(e,this),this}getMaxScaleOnAxis(){return vl(this)}lookAt(e,n,r){return El(this,e,n,r),this}determinant(){return ir(this)}fromArray(e,n=0){return this[0]=e[n],this[1]=e[n+1],this[2]=e[n+2],this[3]=e[n+3],this[4]=e[n+4],this[5]=e[n+5],this[6]=e[n+6],this[7]=e[n+7],this[8]=e[n+8],this[9]=e[n+9],this[10]=e[n+10],this[11]=e[n+11],this[12]=e[n+12],this[13]=e[n+13],this[14]=e[n+14],this[15]=e[n+15],this}toArray(e=[],n=0){return e[n]=this[0],e[n+1]=this[1],e[n+2]=this[2],e[n+3]=this[3],e[n+4]=this[4],e[n+5]=this[5],e[n+6]=this[6],e[n+7]=this[7],e[n+8]=this[8],e[n+9]=this[9],e[n+10]=this[10],e[n+11]=this[11],e[n+12]=this[12],e[n+13]=this[13],e[n+14]=this[14],e[n+15]=this[15],e}}function Sl(t,e,n="YXZ"){return n==="XYZ"?(t[1]=Math.asin(Math.min(Math.max(e[8],-1),1)),Math.abs(e[8])<.99999?(t[0]=Math.atan2(-e[9],e[10]),t[2]=Math.atan2(-e[4],e[0])):(t[0]=Math.atan2(e[6],e[5]),t[2]=0)):n==="YXZ"?(t[0]=Math.asin(-Math.min(Math.max(e[9],-1),1)),Math.abs(e[9])<.99999?(t[1]=Math.atan2(e[8],e[10]),t[2]=Math.atan2(e[1],e[5])):(t[1]=Math.atan2(-e[2],e[0]),t[2]=0)):n==="ZXY"?(t[0]=Math.asin(Math.min(Math.max(e[6],-1),1)),Math.abs(e[6])<.99999?(t[1]=Math.atan2(-e[2],e[10]),t[2]=Math.atan2(-e[4],e[5])):(t[1]=0,t[2]=Math.atan2(e[1],e[0]))):n==="ZYX"?(t[1]=Math.asin(-Math.min(Math.max(e[2],-1),1)),Math.abs(e[2])<.99999?(t[0]=Math.atan2(e[6],e[10]),t[2]=Math.atan2(e[1],e[0])):(t[0]=0,t[2]=Math.atan2(-e[4],e[5]))):n==="YZX"?(t[2]=Math.asin(Math.min(Math.max(e[1],-1),1)),Math.abs(e[1])<.99999?(t[0]=Math.atan2(-e[9],e[5]),t[1]=Math.atan2(-e[2],e[0])):(t[0]=0,t[1]=Math.atan2(e[8],e[10]))):n==="XZY"&&(t[2]=Math.asin(-Math.min(Math.max(e[4],-1),1)),Math.abs(e[4])<.99999?(t[0]=Math.atan2(e[6],e[5]),t[1]=Math.atan2(e[8],e[0])):(t[0]=Math.atan2(-e[9],e[10]),t[1]=0)),t}const on=new Oe;class Ml extends Array{constructor(e=0,n=e,r=e,i="YXZ"){super(e,n,r),this.order=i,this.onChange=()=>{},this._target=this;const s=["0","1","2"];return new Proxy(this,{set(a,o){const l=Reflect.set(...arguments);return l&&s.includes(o)&&a.onChange(),l}})}get x(){return this[0]}get y(){return this[1]}get z(){return this[2]}set x(e){this._target[0]=e,this.onChange()}set y(e){this._target[1]=e,this.onChange()}set z(e){this._target[2]=e,this.onChange()}set(e,n=e,r=e){return e.length?this.copy(e):(this._target[0]=e,this._target[1]=n,this._target[2]=r,this.onChange(),this)}copy(e){return this._target[0]=e[0],this._target[1]=e[1],this._target[2]=e[2],this.onChange(),this}reorder(e){return this._target.order=e,this.onChange(),this}fromRotationMatrix(e,n=this.order){return Sl(this._target,e,n),this.onChange(),this}fromQuaternion(e,n=this.order,r){return on.fromQuaternion(e),this._target.fromRotationMatrix(on,n),r||this.onChange(),this}fromArray(e,n=0){return this._target[0]=e[n],this._target[1]=e[n+1],this._target[2]=e[n+2],this}toArray(e=[],n=0){return e[n]=this[0],e[n+1]=this[1],e[n+2]=this[2],e}}class Pl{constructor(){this.parent=null,this.children=[],this.visible=!0,this.matrix=new Oe,this.worldMatrix=new Oe,this.matrixAutoUpdate=!0,this.worldMatrixNeedsUpdate=!1,this.position=new G,this.quaternion=new ol,this.scale=new G(1),this.rotation=new Ml,this.up=new G(0,1,0),this.rotation._target.onChange=()=>this.quaternion.fromEuler(this.rotation,!0),this.quaternion._target.onChange=()=>this.rotation.fromQuaternion(this.quaternion,void 0,!0)}setParent(e,n=!0){this.parent&&e!==this.parent&&this.parent.removeChild(this,!1),this.parent=e,n&&e&&e.addChild(this,!1)}addChild(e,n=!0){~this.children.indexOf(e)||this.children.push(e),n&&e.setParent(this,!1)}removeChild(e,n=!0){~this.children.indexOf(e)&&this.children.splice(this.children.indexOf(e),1),n&&e.setParent(null,!1)}updateMatrixWorld(e){this.matrixAutoUpdate&&this.updateMatrix(),(this.worldMatrixNeedsUpdate||e)&&(this.parent===null?this.worldMatrix.copy(this.matrix):this.worldMatrix.multiply(this.parent.worldMatrix,this.matrix),this.worldMatrixNeedsUpdate=!1,e=!0);for(let n=0,r=this.children.length;n<r;n++)this.children[n].updateMatrixWorld(e)}updateMatrix(){this.matrix.compose(this.quaternion,this.position,this.scale),this.worldMatrixNeedsUpdate=!0}traverse(e){if(!e(this))for(let n=0,r=this.children.length;n<r;n++)this.children[n].traverse(e)}decompose(){this.matrix.decompose(this.quaternion._target,this.position,this.scale),this.rotation.fromQuaternion(this.quaternion)}lookAt(e,n=!1){n?this.matrix.lookAt(this.position,e,this.up):this.matrix.lookAt(e,this.position,this.up),this.matrix.getRotation(this.quaternion._target),this.rotation.fromQuaternion(this.quaternion)}}function Rl(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[4],t[4]=e[5],t[5]=e[6],t[6]=e[8],t[7]=e[9],t[8]=e[10],t}function Ll(t,e){let n=e[0],r=e[1],i=e[2],s=e[3],a=n+n,o=r+r,l=i+i,u=n*a,h=r*a,c=r*o,d=i*a,m=i*o,g=i*l,v=s*a,y=s*o,x=s*l;return t[0]=1-c-g,t[3]=h-x,t[6]=d+y,t[1]=h+x,t[4]=1-u-g,t[7]=m-v,t[2]=d-y,t[5]=m+v,t[8]=1-u-c,t}function jl(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t}function Tl(t,e,n,r,i,s,a,o,l,u){return t[0]=e,t[1]=n,t[2]=r,t[3]=i,t[4]=s,t[5]=a,t[6]=o,t[7]=l,t[8]=u,t}function Il(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t}function Al(t,e){let n=e[0],r=e[1],i=e[2],s=e[3],a=e[4],o=e[5],l=e[6],u=e[7],h=e[8],c=h*a-o*u,d=-h*s+o*l,m=u*s-a*l,g=n*c+r*d+i*m;return g?(g=1/g,t[0]=c*g,t[1]=(-h*r+i*u)*g,t[2]=(o*r-i*a)*g,t[3]=d*g,t[4]=(h*n-i*l)*g,t[5]=(-o*n+i*s)*g,t[6]=m*g,t[7]=(-u*n+r*l)*g,t[8]=(a*n-r*s)*g,t):null}function ln(t,e,n){let r=e[0],i=e[1],s=e[2],a=e[3],o=e[4],l=e[5],u=e[6],h=e[7],c=e[8],d=n[0],m=n[1],g=n[2],v=n[3],y=n[4],x=n[5],b=n[6],w=n[7],_=n[8];return t[0]=d*r+m*a+g*u,t[1]=d*i+m*o+g*h,t[2]=d*s+m*l+g*c,t[3]=v*r+y*a+x*u,t[4]=v*i+y*o+x*h,t[5]=v*s+y*l+x*c,t[6]=b*r+w*a+_*u,t[7]=b*i+w*o+_*h,t[8]=b*s+w*l+_*c,t}function kl(t,e,n){let r=e[0],i=e[1],s=e[2],a=e[3],o=e[4],l=e[5],u=e[6],h=e[7],c=e[8],d=n[0],m=n[1];return t[0]=r,t[1]=i,t[2]=s,t[3]=a,t[4]=o,t[5]=l,t[6]=d*r+m*a+u,t[7]=d*i+m*o+h,t[8]=d*s+m*l+c,t}function Nl(t,e,n){let r=e[0],i=e[1],s=e[2],a=e[3],o=e[4],l=e[5],u=e[6],h=e[7],c=e[8],d=Math.sin(n),m=Math.cos(n);return t[0]=m*r+d*a,t[1]=m*i+d*o,t[2]=m*s+d*l,t[3]=m*a-d*r,t[4]=m*o-d*i,t[5]=m*l-d*s,t[6]=u,t[7]=h,t[8]=c,t}function Fl(t,e,n){let r=n[0],i=n[1];return t[0]=r*e[0],t[1]=r*e[1],t[2]=r*e[2],t[3]=i*e[3],t[4]=i*e[4],t[5]=i*e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t}function Dl(t,e){let n=e[0],r=e[1],i=e[2],s=e[3],a=e[4],o=e[5],l=e[6],u=e[7],h=e[8],c=e[9],d=e[10],m=e[11],g=e[12],v=e[13],y=e[14],x=e[15],b=n*o-r*a,w=n*l-i*a,_=n*u-s*a,E=r*l-i*o,C=r*u-s*o,M=i*u-s*l,T=h*v-c*g,P=h*y-d*g,R=h*x-m*g,j=c*y-d*v,L=c*x-m*v,N=d*x-m*y,S=b*N-w*L+_*j+E*R-C*P+M*T;return S?(S=1/S,t[0]=(o*N-l*L+u*j)*S,t[1]=(l*R-a*N-u*P)*S,t[2]=(a*L-o*R+u*T)*S,t[3]=(i*L-r*N-s*j)*S,t[4]=(n*N-i*R+s*P)*S,t[5]=(r*R-n*L-s*T)*S,t[6]=(v*M-y*C+x*E)*S,t[7]=(y*_-g*M-x*w)*S,t[8]=(g*C-v*_+x*b)*S,t):null}class Ol extends Array{constructor(e=1,n=0,r=0,i=0,s=1,a=0,o=0,l=0,u=1){return super(e,n,r,i,s,a,o,l,u),this}set(e,n,r,i,s,a,o,l,u){return e.length?this.copy(e):(Tl(this,e,n,r,i,s,a,o,l,u),this)}translate(e,n=this){return kl(this,n,e),this}rotate(e,n=this){return Nl(this,n,e),this}scale(e,n=this){return Fl(this,n,e),this}multiply(e,n){return n?ln(this,e,n):ln(this,this,e),this}identity(){return Il(this),this}copy(e){return jl(this,e),this}fromMatrix4(e){return Rl(this,e),this}fromQuaternion(e){return Ll(this,e),this}fromBasis(e,n,r){return this.set(e[0],e[1],e[2],n[0],n[1],n[2],r[0],r[1],r[2]),this}inverse(e=this){return Al(this,e),this}getNormalMatrix(e){return Dl(this,e),this}}let zl=0;class $l extends Pl{constructor(e,{geometry:n,program:r,mode:i=e.TRIANGLES,frustumCulled:s=!0,renderOrder:a=0}={}){super(),e.canvas||console.error("gl not passed as first argument to Mesh"),this.gl=e,this.id=zl++,this.geometry=n,this.program=r,this.mode=i,this.frustumCulled=s,this.renderOrder=a,this.modelViewMatrix=new Oe,this.normalMatrix=new Ol,this.beforeRenderCallbacks=[],this.afterRenderCallbacks=[]}onBeforeRender(e){return this.beforeRenderCallbacks.push(e),this}onAfterRender(e){return this.afterRenderCallbacks.push(e),this}draw({camera:e}={}){e&&(this.program.uniforms.modelMatrix||Object.assign(this.program.uniforms,{modelMatrix:{value:null},viewMatrix:{value:null},modelViewMatrix:{value:null},normalMatrix:{value:null},projectionMatrix:{value:null},cameraPosition:{value:null}}),this.program.uniforms.projectionMatrix.value=e.projectionMatrix,this.program.uniforms.cameraPosition.value=e.worldPosition,this.program.uniforms.viewMatrix.value=e.viewMatrix,this.modelViewMatrix.multiply(e.viewMatrix,this.worldMatrix),this.normalMatrix.getNormalMatrix(this.modelViewMatrix),this.program.uniforms.modelMatrix.value=this.worldMatrix,this.program.uniforms.modelViewMatrix.value=this.modelViewMatrix,this.program.uniforms.normalMatrix.value=this.normalMatrix),this.beforeRenderCallbacks.forEach(r=>r&&r({mesh:this,camera:e}));let n=this.program.cullFace&&this.worldMatrix.determinant()<0;this.program.use({flipFaces:n}),this.geometry.draw({mode:this.mode,program:this.program}),this.afterRenderCallbacks.forEach(r=>r&&r({mesh:this,camera:e}))}}class Vl extends No{constructor(e,{attributes:n={}}={}){Object.assign(n,{position:{size:2,data:new Float32Array([-1,-1,3,-1,-1,3])},uv:{size:2,data:new Float32Array([0,0,2,0,0,2])}}),super(e,n)}}const Pe=8,Bl=t=>{const e=t.replace("#","").padEnd(6,"0"),n=parseInt(e.slice(0,2),16)/255,r=parseInt(e.slice(2,4),16)/255,i=parseInt(e.slice(4,6),16)/255;return[n,r,i]},Wl=t=>{const e=(t&&t.length?t:["#FF9FFC","#5227FF"]).slice(0,Pe);for(e.length===1&&e.push(e[0]);e.length<Pe;)e.push(e[e.length-1]);const n=[];for(let i=0;i<Pe;i++)n.push(Bl(e[i]));const r=Math.max(2,Math.min(Pe,t?.length??2));return{arr:n,count:r}},Ul=({className:t,dpr:e,paused:n=!1,gradientColors:r,angle:i=0,noise:s=.3,blindCount:a=16,blindMinWidth:o=60,mouseDampening:l=.15,mirrorGradient:u=!1,spotlightRadius:h=.5,spotlightSoftness:c=1,spotlightOpacity:d=1,distortAmount:m=0,shineDirection:g="left",mixBlendMode:v="lighten"})=>{const y=f.useRef(null),x=f.useRef(null),b=f.useRef(null),w=f.useRef(null),_=f.useRef(null),E=f.useRef(null),C=f.useRef([0,0]),M=f.useRef(0),T=f.useRef(!0);return f.useEffect(()=>{const P=y.current;if(!P)return;const R=new Bo({dpr:e??(typeof window<"u"&&window.devicePixelRatio||1),alpha:!0,antialias:!0});E.current=R;const j=R.gl,L=j.canvas;L.style.width="100%",L.style.height="100%",L.style.display="block",P.appendChild(L);const N=`
attribute vec2 position;
attribute vec2 uv;
varying vec2 vUv;
void main() {
vUv = uv;
gl_Position = vec4(position, 0.0, 1.0);
}
`,S=`
#ifdef GL_ES
precision mediump float;
#endif
uniform vec3 iResolution;
uniform vec2 iMouse;
uniform float iTime;
uniform float uAngle;
uniform float uNoise;
uniform float uBlindCount;
uniform float uSpotlightRadius;
uniform float uSpotlightSoftness;
uniform float uSpotlightOpacity;
uniform float uMirror;
uniform float uDistort;
uniform float uShineFlip;
uniform vec3 uColor0;
uniform vec3 uColor1;
uniform vec3 uColor2;
uniform vec3 uColor3;
uniform vec3 uColor4;
uniform vec3 uColor5;
uniform vec3 uColor6;
uniform vec3 uColor7;
uniform int uColorCount;
varying vec2 vUv;
float rand(vec2 co){
return fract(sin(dot(co, vec2(12.9898,78.233))) * 43758.5453);
}
vec2 rotate2D(vec2 p, float a){
float c = cos(a);
float s = sin(a);
return mat2(c, -s, s, c) * p;
}
vec3 getGradientColor(float t){
float tt = clamp(t, 0.0, 1.0);
int count = uColorCount;
if (count < 2) count = 2;
float scaled = tt * float(count - 1);
float seg = floor(scaled);
float f = fract(scaled);
if (seg < 1.0) return mix(uColor0, uColor1, f);
if (seg < 2.0 && count > 2) return mix(uColor1, uColor2, f);
if (seg < 3.0 && count > 3) return mix(uColor2, uColor3, f);
if (seg < 4.0 && count > 4) return mix(uColor3, uColor4, f);
if (seg < 5.0 && count > 5) return mix(uColor4, uColor5, f);
if (seg < 6.0 && count > 6) return mix(uColor5, uColor6, f);
if (seg < 7.0 && count > 7) return mix(uColor6, uColor7, f);
if (count > 7) return uColor7;
if (count > 6) return uColor6;
if (count > 5) return uColor5;
if (count > 4) return uColor4;
if (count > 3) return uColor3;
if (count > 2) return uColor2;
return uColor1;
}
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
vec2 uv0 = fragCoord.xy / iResolution.xy;
float aspect = iResolution.x / iResolution.y;
vec2 p = uv0 * 2.0 - 1.0;
p.x *= aspect;
vec2 pr = rotate2D(p, uAngle);
pr.x /= aspect;
vec2 uv = pr * 0.5 + 0.5;
vec2 uvMod = uv;
if (uDistort > 0.0) {
float a = uvMod.y * 6.0;
float b = uvMod.x * 6.0;
float w = 0.01 * uDistort;
uvMod.x += sin(a) * w;
uvMod.y += cos(b) * w;
}
float t = uvMod.x;
if (uMirror > 0.5) {
t = 1.0 - abs(1.0 - 2.0 * fract(t));
}
vec3 base = getGradientColor(t);
vec2 offset = vec2(iMouse.x/iResolution.x, iMouse.y/iResolution.y);
float d = length(uv0 - offset);
float r = max(uSpotlightRadius, 1e-4);
float dn = d / r;
float spot = (1.0 - 2.0 * pow(dn, uSpotlightSoftness)) * uSpotlightOpacity;
vec3 cir = vec3(spot);
float stripe = fract(uvMod.x * max(uBlindCount, 1.0));
if (uShineFlip > 0.5) stripe = 1.0 - stripe;
vec3 ran = vec3(stripe);
vec3 col = cir + base - ran;
col += (rand(gl_FragCoord.xy + iTime) - 0.5) * uNoise;
fragColor = vec4(col, 1.0);
}
void main() {
vec4 color;
mainImage(color, vUv * iResolution.xy);
gl_FragColor = color;
}
`,{arr:V,count:yr}=Wl(r),ee={iResolution:{value:[j.drawingBufferWidth,j.drawingBufferHeight,1]},iMouse:{value:[0,0]},iTime:{value:0},uAngle:{value:i*Math.PI/180},uNoise:{value:s},uBlindCount:{value:Math.max(1,a)},uSpotlightRadius:{value:h},uSpotlightSoftness:{value:c},uSpotlightOpacity:{value:d},uMirror:{value:u?1:0},uDistort:{value:m},uShineFlip:{value:g==="right"?1:0},uColor0:{value:V[0]},uColor1:{value:V[1]},uColor2:{value:V[2]},uColor3:{value:V[3]},uColor4:{value:V[4]},uColor5:{value:V[5]},uColor6:{value:V[6]},uColor7:{value:V[7]},uColorCount:{value:yr}},xt=new Do(j,{vertex:N,fragment:S,uniforms:ee});b.current=xt;const bt=new Vl(j);_.current=bt;const xr=new $l(j,{geometry:bt,program:xt});w.current=xr;const wt=()=>{const z=P.getBoundingClientRect();if(R.setSize(z.width,z.height),ee.iResolution.value=[j.drawingBufferWidth,j.drawingBufferHeight,1],o&&o>0){const F=Math.max(1,Math.floor(z.width/o)),W=a?Math.min(a,F):F;ee.uBlindCount.value=Math.max(1,W)}else ee.uBlindCount.value=Math.max(1,a);if(T.current){T.current=!1;const F=j.drawingBufferWidth/2,W=j.drawingBufferHeight/2;ee.iMouse.value=[F,W],C.current=[F,W]}};wt();const _t=new ResizeObserver(wt);_t.observe(P);const Et=z=>{const F=L.getBoundingClientRect(),W=R.dpr||1,se=(z.clientX-F.left)*W,he=(F.height-(z.clientY-F.top))*W;C.current=[se,he],l<=0&&(ee.iMouse.value=[se,he])};L.addEventListener("pointermove",Et);const Ct=z=>{if(x.current=requestAnimationFrame(Ct),ee.iTime.value=z*.001,l>0){M.current||(M.current=z);const F=(z-M.current)/1e3;M.current=z;const W=Math.max(1e-4,l);let se=1-Math.exp(-F/W);se>1&&(se=1);const he=C.current,Ce=ee.iMouse.value;Ce[0]+=(he[0]-Ce[0])*se,Ce[1]+=(he[1]-Ce[1])*se}else M.current=z;if(!n&&b.current&&w.current)try{R.render({scene:w.current})}catch(F){console.error(F)}};return x.current=requestAnimationFrame(Ct),()=>{x.current&&cancelAnimationFrame(x.current),L.removeEventListener("pointermove",Et),_t.disconnect(),L.parentElement===P&&P.removeChild(L);const z=(F,W)=>{F&&typeof F[W]=="function"&&F[W].call(F)};z(b.current,"remove"),z(_.current,"remove"),z(w.current,"remove"),z(E.current,"destroy"),b.current=null,_.current=null,w.current=null,E.current=null}},[e,n,r,i,s,a,o,l,u,h,c,d,m,g]),p.jsx("div",{ref:y,className:`gradient-blinds-container ${t}`,style:{...v&&{mixBlendMode:v}}})},Hl=te.memo(Ul),Gl="_button_yjd5k_1",ql="_sm_yjd5k_23",Yl="_md_yjd5k_28",Xl="_lg_yjd5k_33",Kl="_primary_yjd5k_39",Zl="_secondary_yjd5k_49",Jl="_outline_yjd5k_58",Ql="_loader_yjd5k_69",ec="_spin_yjd5k_1",Re={button:Gl,sm:ql,md:Yl,lg:Xl,primary:Kl,secondary:Zl,outline:Jl,loader:Ql,spin:ec};function ct({variant:t="primary",size:e="md",children:n,isLoading:r,disabled:i,className:s,type:a="button",onClick:o}){return p.jsx(I.button,{type:a,className:`${Re.button} ${Re[t]} ${Re[e]} ${s||""}`,disabled:i||r,whileHover:{scale:1.02},whileTap:{scale:.98},onClick:o,children:r?p.jsx("span",{className:Re.loader}):n})}const tc="_card_mghl3_1",nc="_hoverable_mghl3_13",rc="_icon_mghl3_22",ic="_title_mghl3_39",sc="_description_mghl3_46",ye={card:tc,hoverable:nc,icon:rc,title:ic,description:sc};function ae({children:t,className:e,hover:n=!0}){return p.jsx(I.div,{className:`${ye.card} ${n?ye.hoverable:""} ${e||""}`,whileHover:n?{y:-4}:void 0,transition:{duration:.2},children:t})}function ac({children:t}){return p.jsx("div",{className:ye.icon,children:t})}function oc({children:t}){return p.jsx("h3",{className:ye.title,children:t})}function lc({children:t}){return p.jsx("p",{className:ye.description,children:t})}ae.Icon=ac;ae.Title=oc;ae.Description=lc;const cc="_field_1azqc_1",uc="_label_1azqc_7",hc="_input_1azqc_13",dc="_textarea_1azqc_42",fc="_hasError_1azqc_47",mc="_error_1azqc_55",H={field:cc,label:uc,input:hc,textarea:dc,hasError:fc,error:mc},Ae=f.forwardRef(({label:t,error:e,id:n,className:r,...i},s)=>{const a=n||t.toLowerCase().replace(/\s+/g,"-");return p.jsxs("div",{className:`${H.field} ${e?H.hasError:""} ${r||""}`,children:[p.jsx("label",{htmlFor:a,className:H.label,children:t}),p.jsx("input",{ref:s,id:a,className:H.input,...i}),e&&p.jsx("span",{className:H.error,children:e})]})});Ae.displayName="Input";const or=f.forwardRef(({label:t,error:e,id:n,className:r,...i},s)=>{const a=n||t.toLowerCase().replace(/\s+/g,"-");return p.jsxs("div",{className:`${H.field} ${e?H.hasError:""} ${r||""}`,children:[p.jsx("label",{htmlFor:a,className:H.label,children:t}),p.jsx("textarea",{ref:s,id:a,className:`${H.input} ${H.textarea}`,...i}),e&&p.jsx("span",{className:H.error,children:e})]})});or.displayName="Textarea";const pc="_hero_lgffv_1",gc="_backgroundContainer_lgffv_12",vc="_content_lgffv_21",yc="_text_lgffv_29",xc="_greeting_lgffv_34",bc="_title_lgffv_43",wc="_tagline_lgffv_70",_c="_typed_lgffv_82",Ec="_cursor_lgffv_89",Cc="_cta_lgffv_104",Sc="_scrollIndicator_lgffv_112",Mc="_scrollMouse_lgffv_124",Pc="_scrollWheel_lgffv_134",Rc="_scrollText_lgffv_141",B={hero:pc,backgroundContainer:gc,content:vc,text:yc,greeting:xc,title:bc,tagline:wc,typed:_c,cursor:Ec,cta:Cc,scrollIndicator:Sc,scrollMouse:Mc,scrollWheel:Pc,scrollText:Rc},Lc=["#26a269","#8ff0a4"];function jc(){const{t}=ue(),[e,n]=f.useState(!0);f.useEffect(()=>{const i=()=>{n(window.scrollY<50)};return window.addEventListener("scroll",i,{passive:!0}),()=>window.removeEventListener("scroll",i)},[]);const{text:r}=vo({words:t.hero.rotatingWords,typingSpeed:80,deletingSpeed:40,pauseDuration:2500});return p.jsxs("section",{className:B.hero,children:[p.jsx("div",{className:B.backgroundContainer,children:p.jsx(Hl,{gradientColors:Lc,angle:134,noise:.31,blindCount:12,blindMinWidth:50,spotlightRadius:.4,spotlightSoftness:1,spotlightOpacity:1,mouseDampening:.15,distortAmount:13,shineDirection:"left",mixBlendMode:"lighten"})}),p.jsx("div",{className:`${B.content} container`,children:p.jsxs(I.div,{className:B.text,initial:{opacity:0,y:30},animate:{opacity:1,y:0},transition:{duration:.6,ease:"easeOut"},children:[p.jsx(I.p,{className:B.greeting,initial:{opacity:0},animate:{opacity:1},transition:{delay:.2},children:t.hero.greeting}),p.jsx(I.h1,{className:B.title,initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{delay:.3,duration:.5},children:t.hero.company}),p.jsxs(I.div,{className:B.tagline,initial:{opacity:0},animate:{opacity:1},transition:{delay:.5},children:[p.jsx("span",{children:t.hero.tagline}),p.jsxs("span",{className:B.typed,children:[r,p.jsx("span",{className:B.cursor,children:"|"})]})]}),p.jsxs(I.div,{className:B.cta,initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{delay:.7,duration:.5},children:[p.jsx(oe,{to:"/contact",children:p.jsx(ct,{variant:"primary",size:"lg",children:t.hero.cta})}),p.jsx(oe,{to:"/about",children:p.jsx(ct,{variant:"outline",size:"lg",children:t.hero.ctaSecondary})})]})]})}),e&&p.jsxs(I.div,{className:B.scrollIndicator,initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},transition:{duration:.3},children:[p.jsx(I.div,{className:B.scrollMouse,animate:{y:[0,8,0]},transition:{repeat:1/0,duration:1.5,ease:"easeInOut"},children:p.jsx("span",{className:B.scrollWheel})}),p.jsx("span",{className:B.scrollText,children:t.hero.scroll})]})]})}const Tc="_services_1bb0v_1",Ic="_header_1bb0v_6",Ac="_title_1bb0v_11",kc="_subtitle_1bb0v_18",Nc="_grid_1bb0v_26",fe={services:Tc,header:Ic,title:Ac,subtitle:kc,grid:Nc},Fc={code:p.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[p.jsx("polyline",{points:"16 18 22 12 16 6"}),p.jsx("polyline",{points:"8 6 2 12 8 18"})]}),support:p.jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:p.jsx("path",{d:"M21 12a9 9 0 0 1-9 9m9-9a9 9 0 0 0-9-9m9 9H3m9 9a9 9 0 0 1-9-9m9 9c1.657 0 3-4.03 3-9s-1.343-9-3-9m0 18c-1.657 0-3-4.03-3-9s1.343-9 3-9m-9 9a9 9 0 0 1 9-9"})}),consulting:p.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[p.jsx("path",{d:"M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z"}),p.jsx("path",{d:"M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z"})]}),hosting:p.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[p.jsx("rect",{x:"2",y:"2",width:"20",height:"8",rx:"2",ry:"2"}),p.jsx("rect",{x:"2",y:"14",width:"20",height:"8",rx:"2",ry:"2"}),p.jsx("line",{x1:"6",y1:"6",x2:"6.01",y2:"6"}),p.jsx("line",{x1:"6",y1:"18",x2:"6.01",y2:"18"})]})},Dc={hidden:{opacity:0},visible:{opacity:1,transition:{staggerChildren:.15}}},Oc={hidden:{opacity:0,y:30},visible:{opacity:1,y:0,transition:{duration:.5,ease:[.4,0,.2,1]}}};function zc(){const{t}=ue();return p.jsx("section",{className:fe.services,children:p.jsxs("div",{className:"container",children:[p.jsxs(I.div,{className:fe.header,initial:{opacity:0,y:20},whileInView:{opacity:1,y:0},viewport:{once:!0,margin:"-100px"},transition:{duration:.5},children:[p.jsx("h2",{className:fe.title,children:t.services.title}),p.jsx("p",{className:fe.subtitle,children:t.services.subtitle})]}),p.jsx(I.div,{className:fe.grid,variants:Dc,initial:"hidden",whileInView:"visible",viewport:{once:!0,margin:"-50px"},children:t.services.items.map((e,n)=>p.jsx(I.div,{variants:Oc,children:p.jsxs(ae,{children:[p.jsx(ae.Icon,{children:Fc[e.icon]}),p.jsx(ae.Title,{children:e.title}),p.jsx(ae.Description,{children:e.description})]})},n))})]})})}function $c(){return p.jsxs("main",{children:[p.jsx(jc,{}),p.jsx(zc,{})]})}var lr={color:void 0,size:void 0,className:void 0,style:void 0,attr:void 0},cn=te.createContext&&te.createContext(lr),Vc=["attr","size","title"];function Bc(t,e){if(t==null)return{};var n=Wc(t,e),r,i;if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(t);for(i=0;i<s.length;i++)r=s[i],!(e.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function Wc(t,e){if(t==null)return{};var n={};for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r)){if(e.indexOf(r)>=0)continue;n[r]=t[r]}return n}function ze(){return ze=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},ze.apply(this,arguments)}function un(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),n.push.apply(n,r)}return n}function $e(t){for(var e=1;e<arguments.length;e++){var n=arguments[e]!=null?arguments[e]:{};e%2?un(Object(n),!0).forEach(function(r){Uc(t,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):un(Object(n)).forEach(function(r){Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(n,r))})}return t}function Uc(t,e,n){return e=Hc(e),e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function Hc(t){var e=Gc(t,"string");return typeof e=="symbol"?e:e+""}function Gc(t,e){if(typeof t!="object"||!t)return t;var n=t[Symbol.toPrimitive];if(n!==void 0){var r=n.call(t,e);if(typeof r!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(t)}function cr(t){return t&&t.map((e,n)=>te.createElement(e.tag,$e({key:n},e.attr),cr(e.child)))}function ie(t){return e=>te.createElement(qc,ze({attr:$e({},t.attr)},e),cr(t.child))}function qc(t){var e=n=>{var{attr:r,size:i,title:s}=t,a=Bc(t,Vc),o=i||n.size||"1em",l;return n.className&&(l=n.className),t.className&&(l=(l?l+" ":"")+t.className),te.createElement("svg",ze({stroke:"currentColor",fill:"currentColor",strokeWidth:"0"},n.attr,r,a,{className:l,style:$e($e({color:t.color||n.color},n.style),t.style),height:o,width:o,xmlns:"http://www.w3.org/2000/svg"}),s&&te.createElement("title",null,s),t.children)};return cn!==void 0?te.createElement(cn.Consumer,null,n=>e(n)):e(lr)}function Yc(t){return ie({attr:{role:"img",viewBox:"0 0 24 24"},child:[{tag:"path",attr:{d:"M13.983 11.078h2.119a.186.186 0 00.186-.185V9.006a.186.186 0 00-.186-.186h-2.119a.185.185 0 00-.185.185v1.888c0 .102.083.185.185.185m-2.954-5.43h2.118a.186.186 0 00.186-.186V3.574a.186.186 0 00-.186-.185h-2.118a.185.185 0 00-.185.185v1.888c0 .102.082.185.185.185m0 2.716h2.118a.187.187 0 00.186-.186V6.29a.186.186 0 00-.186-.185h-2.118a.185.185 0 00-.185.185v1.887c0 .102.082.185.185.186m-2.93 0h2.12a.186.186 0 00.184-.186V6.29a.185.185 0 00-.185-.185H8.1a.185.185 0 00-.185.185v1.887c0 .102.083.185.185.186m-2.964 0h2.119a.186.186 0 00.185-.186V6.29a.185.185 0 00-.185-.185H5.136a.186.186 0 00-.186.185v1.887c0 .102.084.185.186.186m5.893 2.715h2.118a.186.186 0 00.186-.185V9.006a.186.186 0 00-.186-.186h-2.118a.185.185 0 00-.185.185v1.888c0 .102.082.185.185.185m-2.93 0h2.12a.185.185 0 00.184-.185V9.006a.185.185 0 00-.184-.186h-2.12a.185.185 0 00-.184.185v1.888c0 .102.083.185.185.185m-2.964 0h2.119a.185.185 0 00.185-.185V9.006a.185.185 0 00-.184-.186h-2.12a.186.186 0 00-.186.186v1.887c0 .102.084.185.186.185m-2.92 0h2.12a.185.185 0 00.184-.185V9.006a.185.185 0 00-.184-.186h-2.12a.185.185 0 00-.184.185v1.888c0 .102.082.185.185.185M23.763 9.89c-.065-.051-.672-.51-1.954-.51-.338.001-.676.03-1.01.087-.248-1.7-1.653-2.53-1.716-2.566l-.344-.199-.226.327c-.284.438-.49.922-.612 1.43-.23.97-.09 1.882.403 2.661-.595.332-1.55.413-1.744.42H.751a.751.751 0 00-.75.748 11.376 11.376 0 00.692 4.062c.545 1.428 1.355 2.48 2.41 3.124 1.18.723 3.1 1.137 5.275 1.137.983.003 1.963-.086 2.93-.266a12.248 12.248 0 003.823-1.389c.98-.567 1.86-1.288 2.61-2.136 1.252-1.418 1.998-2.997 2.553-4.4h.221c1.372 0 2.215-.549 2.68-1.009.309-.293.55-.65.707-1.046l.098-.288Z"},child:[]}]})(t)}function Xc(t){return ie({attr:{role:"img",viewBox:"0 0 24 24"},child:[{tag:"path",attr:{d:"M19.455 8.369c-.538-.748-1.778-2.285-3.681-4.569-.826-.991-1.535-1.832-1.884-2.245a146 146 0 0 0-.488-.576l-.207-.245-.113-.133-.022-.032-.01-.005L12.57 0l-.609.488c-1.555 1.246-2.828 2.851-3.681 4.64-.523 1.064-.864 2.105-1.043 3.176-.047.241-.088.489-.121.738-.209-.017-.421-.028-.632-.033-.018-.001-.035-.002-.059-.003a7.46 7.46 0 0 0-2.28.274l-.317.089-.163.286c-.765 1.342-1.198 2.869-1.252 4.416-.07 2.01.477 3.954 1.583 5.625 1.082 1.633 2.61 2.882 4.42 3.611l.236.095.071.025.003-.001a9.59 9.59 0 0 0 2.941.568q.171.006.342.006c1.273 0 2.513-.249 3.69-.742l.008.004.313-.145a9.63 9.63 0 0 0 3.927-3.335c1.01-1.49 1.577-3.234 1.641-5.042.075-2.161-.643-4.304-2.133-6.371m-7.083 6.695c.328 1.244.264 2.44-.191 3.558-1.135-1.12-1.967-2.352-2.475-3.665-.543-1.404-.87-2.74-.974-3.975.48.157.922.366 1.315.622 1.132.737 1.914 1.902 2.325 3.461zm.207 6.022c.482.368.99.712 1.513 1.028-.771.21-1.565.302-2.369.273a8 8 0 0 1-.373-.022c.458-.394.869-.823 1.228-1.279zm1.347-6.431c-.516-1.957-1.527-3.437-3.002-4.398-.647-.421-1.385-.741-2.194-.95.011-.134.026-.268.043-.4.014-.113.03-.216.046-.313.133-.689.332-1.37.589-2.025.099-.25.206-.499.321-.74l.004-.008c.177-.358.376-.719.61-1.105l.092-.152-.003-.001c.544-.851 1.197-1.627 1.942-2.311l.288.341c.672.796 1.304 1.548 1.878 2.237 1.291 1.549 2.966 3.583 3.612 4.48 1.277 1.771 1.893 3.579 1.83 5.375-.049 1.395-.461 2.755-1.195 3.933-.694 1.116-1.661 2.05-2.8 2.708-.636-.318-1.559-.839-2.539-1.599.79-1.575.952-3.28.479-5.072zm-2.575 5.397c-.725.939-1.587 1.55-2.09 1.856-.081-.029-.163-.06-.243-.093l-.065-.026c-1.49-.616-2.747-1.656-3.635-3.01-.907-1.384-1.356-2.993-1.298-4.653.041-1.19.338-2.327.882-3.379.316-.07.638-.114.96-.131l.084-.002c.162-.003.324-.003.478 0 .227.011.454.035.677.07.073 1.513.445 3.145 1.105 4.852.637 1.644 1.694 3.162 3.144 4.515z"},child:[]}]})(t)}function Kc(t){return ie({attr:{role:"img",viewBox:"0 0 24 24"},child:[{tag:"path",attr:{d:"M23.546 10.93L13.067.452c-.604-.603-1.582-.603-2.188 0L8.708 2.627l2.76 2.76c.645-.215 1.379-.07 1.889.441.516.515.658 1.258.438 1.9l2.658 2.66c.645-.223 1.387-.078 1.9.435.721.72.721 1.884 0 2.604-.719.719-1.881.719-2.6 0-.539-.541-.674-1.337-.404-1.996L12.86 8.955v6.525c.176.086.342.203.488.348.713.721.713 1.883 0 2.6-.719.721-1.889.721-2.609 0-.719-.719-.719-1.879 0-2.598.182-.18.387-.316.605-.406V8.835c-.217-.091-.424-.222-.6-.401-.545-.545-.676-1.342-.396-2.009L7.636 3.7.45 10.881c-.6.605-.6 1.584 0 2.189l10.48 10.477c.604.604 1.582.604 2.186 0l10.43-10.43c.605-.603.605-1.582 0-2.187"},child:[]}]})(t)}function Zc(t){return ie({attr:{role:"img",viewBox:"0 0 24 24"},child:[{tag:"path",attr:{d:"M11.998,24c-0.321,0-0.641-0.084-0.922-0.247l-2.936-1.737c-0.438-0.245-0.224-0.332-0.08-0.383 c0.585-0.203,0.703-0.25,1.328-0.604c0.065-0.037,0.151-0.023,0.218,0.017l2.256,1.339c0.082,0.045,0.197,0.045,0.272,0l8.795-5.076 c0.082-0.047,0.134-0.141,0.134-0.238V6.921c0-0.099-0.053-0.192-0.137-0.242l-8.791-5.072c-0.081-0.047-0.189-0.047-0.271,0 L3.075,6.68C2.99,6.729,2.936,6.825,2.936,6.921v10.15c0,0.097,0.054,0.189,0.139,0.235l2.409,1.392 c1.307,0.654,2.108-0.116,2.108-0.89V7.787c0-0.142,0.114-0.253,0.256-0.253h1.115c0.139,0,0.255,0.112,0.255,0.253v10.021 c0,1.745-0.95,2.745-2.604,2.745c-0.508,0-0.909,0-2.026-0.551L2.28,18.675c-0.57-0.329-0.922-0.945-0.922-1.604V6.921 c0-0.659,0.353-1.275,0.922-1.603l8.795-5.082c0.557-0.315,1.296-0.315,1.848,0l8.794,5.082c0.57,0.329,0.924,0.944,0.924,1.603 v10.15c0,0.659-0.354,1.273-0.924,1.604l-8.794,5.078C12.643,23.916,12.324,24,11.998,24z M19.099,13.993 c0-1.9-1.284-2.406-3.987-2.763c-2.731-0.361-3.009-0.548-3.009-1.187c0-0.528,0.235-1.233,2.258-1.233 c1.807,0,2.473,0.389,2.747,1.607c0.024,0.115,0.129,0.199,0.247,0.199h1.141c0.071,0,0.138-0.031,0.186-0.081 c0.048-0.054,0.074-0.123,0.067-0.196c-0.177-2.098-1.571-3.076-4.388-3.076c-2.508,0-4.004,1.058-4.004,2.833 c0,1.925,1.488,2.457,3.895,2.695c2.88,0.282,3.103,0.703,3.103,1.269c0,0.983-0.789,1.402-2.642,1.402 c-2.327,0-2.839-0.584-3.011-1.742c-0.02-0.124-0.126-0.215-0.253-0.215h-1.137c-0.141,0-0.254,0.112-0.254,0.253 c0,1.482,0.806,3.248,4.655,3.248C17.501,17.007,19.099,15.91,19.099,13.993z"},child:[]}]})(t)}function Jc(t){return ie({attr:{role:"img",viewBox:"0 0 24 24"},child:[{tag:"path",attr:{d:"M23.5594 14.7228a.5269.5269 0 0 0-.0563-.1191c-.139-.2632-.4768-.3418-1.0074-.2321-1.6533.3411-2.2935.1312-2.5256-.0191 1.342-2.0482 2.445-4.522 3.0411-6.8297.2714-1.0507.7982-3.5237.1222-4.7316a1.5641 1.5641 0 0 0-.1509-.235C21.6931.9086 19.8007.0248 17.5099.0005c-1.4947-.0158-2.7705.3461-3.1161.4794a9.449 9.449 0 0 0-.5159-.0816 8.044 8.044 0 0 0-1.3114-.1278c-1.1822-.0184-2.2038.2642-3.0498.8406-.8573-.3211-4.7888-1.645-7.2219.0788C.9359 2.1526.3086 3.8733.4302 6.3043c.0409.818.5069 3.334 1.2423 5.7436.4598 1.5065.9387 2.7019 1.4334 3.582.553.9942 1.1259 1.5933 1.7143 1.7895.4474.1491 1.1327.1441 1.8581-.7279.8012-.9635 1.5903-1.8258 1.9446-2.2069.4351.2355.9064.3625 1.39.3772a.0569.0569 0 0 0 .0004.0041 11.0312 11.0312 0 0 0-.2472.3054c-.3389.4302-.4094.5197-1.5002.7443-.3102.064-1.1344.2339-1.1464.8115-.0025.1224.0329.2309.0919.3268.2269.4231.9216.6097 1.015.6331 1.3345.3335 2.5044.092 3.3714-.6787-.017 2.231.0775 4.4174.3454 5.0874.2212.5529.7618 1.9045 2.4692 1.9043.2505 0 .5263-.0291.8296-.0941 1.7819-.3821 2.5557-1.1696 2.855-2.9059.1503-.8707.4016-2.8753.5388-4.1012.0169-.0703.0357-.1207.057-.1362.0007-.0005.0697-.0471.4272.0307a.3673.3673 0 0 0 .0443.0068l.2539.0223.0149.001c.8468.0384 1.9114-.1426 2.5312-.4308.6438-.2988 1.8057-1.0323 1.5951-1.6698zM2.371 11.8765c-.7435-2.4358-1.1779-4.8851-1.2123-5.5719-.1086-2.1714.4171-3.6829 1.5623-4.4927 1.8367-1.2986 4.8398-.5408 6.108-.13-.0032.0032-.0066.0061-.0098.0094-2.0238 2.044-1.9758 5.536-1.9708 5.7495-.0002.0823.0066.1989.0162.3593.0348.5873.0996 1.6804-.0735 2.9184-.1609 1.1504.1937 2.2764.9728 3.0892.0806.0841.1648.1631.2518.2374-.3468.3714-1.1004 1.1926-1.9025 2.1576-.5677.6825-.9597.5517-1.0886.5087-.3919-.1307-.813-.5871-1.2381-1.3223-.4796-.839-.9635-2.0317-1.4155-3.5126zm6.0072 5.0871c-.1711-.0428-.3271-.1132-.4322-.1772.0889-.0394.2374-.0902.4833-.1409 1.2833-.2641 1.4815-.4506 1.9143-1.0002.0992-.126.2116-.2687.3673-.4426a.3549.3549 0 0 0 .0737-.1298c.1708-.1513.2724-.1099.4369-.0417.156.0646.3078.26.3695.4752.0291.1016.0619.2945-.0452.4444-.9043 1.2658-2.2216 1.2494-3.1676 1.0128zm2.094-3.988-.0525.141c-.133.3566-.2567.6881-.3334 1.003-.6674-.0021-1.3168-.2872-1.8105-.8024-.6279-.6551-.9131-1.5664-.7825-2.5004.1828-1.3079.1153-2.4468.079-3.0586-.005-.0857-.0095-.1607-.0122-.2199.2957-.2621 1.6659-.9962 2.6429-.7724.4459.1022.7176.4057.8305.928.5846 2.7038.0774 3.8307-.3302 4.7363-.084.1866-.1633.3629-.2311.5454zm7.3637 4.5725c-.0169.1768-.0358.376-.0618.5959l-.146.4383a.3547.3547 0 0 0-.0182.1077c-.0059.4747-.054.6489-.115.8693-.0634.2292-.1353.4891-.1794 1.0575-.11 1.4143-.8782 2.2267-2.4172 2.5565-1.5155.3251-1.7843-.4968-2.0212-1.2217a6.5824 6.5824 0 0 0-.0769-.2266c-.2154-.5858-.1911-1.4119-.1574-2.5551.0165-.5612-.0249-1.9013-.3302-2.6462.0044-.2932.0106-.5909.019-.8918a.3529.3529 0 0 0-.0153-.1126 1.4927 1.4927 0 0 0-.0439-.208c-.1226-.4283-.4213-.7866-.7797-.9351-.1424-.059-.4038-.1672-.7178-.0869.067-.276.1831-.5875.309-.9249l.0529-.142c.0595-.16.134-.3257.213-.5012.4265-.9476 1.0106-2.2453.3766-5.1772-.2374-1.0981-1.0304-1.6343-2.2324-1.5098-.7207.0746-1.3799.3654-1.7088.5321a5.6716 5.6716 0 0 0-.1958.1041c.0918-1.1064.4386-3.1741 1.7357-4.4823a4.0306 4.0306 0 0 1 .3033-.276.3532.3532 0 0 0 .1447-.0644c.7524-.5706 1.6945-.8506 2.802-.8325.4091.0067.8017.0339 1.1742.081 1.939.3544 3.2439 1.4468 4.0359 2.3827.8143.9623 1.2552 1.9315 1.4312 2.4543-1.3232-.1346-2.2234.1268-2.6797.779-.9926 1.4189.543 4.1729 1.2811 5.4964.1353.2426.2522.4522.2889.5413.2403.5825.5515.9713.7787 1.2552.0696.087.1372.1714.1885.245-.4008.1155-1.1208.3825-1.0552 1.717-.0123.1563-.0423.4469-.0834.8148-.0461.2077-.0702.4603-.0994.7662zm.8905-1.6211c-.0405-.8316.2691-.9185.5967-1.0105a2.8566 2.8566 0 0 0 .135-.0406 1.202 1.202 0 0 0 .1342.103c.5703.3765 1.5823.4213 3.0068.1344-.2016.1769-.5189.3994-.9533.6011-.4098.1903-1.0957.333-1.7473.3636-.7197.0336-1.0859-.0807-1.1721-.151zm.5695-9.2712c-.0059.3508-.0542.6692-.1054 1.0017-.055.3576-.112.7274-.1264 1.1762-.0142.4368.0404.8909.0932 1.3301.1066.887.216 1.8003-.2075 2.7014a3.5272 3.5272 0 0 1-.1876-.3856c-.0527-.1276-.1669-.3326-.3251-.6162-.6156-1.1041-2.0574-3.6896-1.3193-4.7446.3795-.5427 1.3408-.5661 2.1781-.463zm.2284 7.0137a12.3762 12.3762 0 0 0-.0853-.1074l-.0355-.0444c.7262-1.1995.5842-2.3862.4578-3.4385-.0519-.4318-.1009-.8396-.0885-1.2226.0129-.4061.0666-.7543.1185-1.0911.0639-.415.1288-.8443.1109-1.3505.0134-.0531.0188-.1158.0118-.1902-.0457-.4855-.5999-1.938-1.7294-3.253-.6076-.7073-1.4896-1.4972-2.6889-2.0395.5251-.1066 1.2328-.2035 2.0244-.1859 2.0515.0456 3.6746.8135 4.8242 2.2824a.908.908 0 0 1 .0667.1002c.7231 1.3556-.2762 6.2751-2.9867 10.5405zm-8.8166-6.1162c-.025.1794-.3089.4225-.6211.4225a.5821.5821 0 0 1-.0809-.0056c-.1873-.026-.3765-.144-.5059-.3156-.0458-.0605-.1203-.178-.1055-.2844.0055-.0401.0261-.0985.0925-.1488.1182-.0894.3518-.1226.6096-.0867.3163.0441.6426.1938.6113.4186zm7.9305-.4114c.0111.0792-.049.201-.1531.3102-.0683.0717-.212.1961-.4079.2232a.5456.5456 0 0 1-.075.0052c-.2935 0-.5414-.2344-.5607-.3717-.024-.1765.2641-.3106.5611-.352.297-.0414.6111.0088.6356.1851z"},child:[]}]})(t)}function Qc(t){return ie({attr:{role:"img",viewBox:"0 0 24 24"},child:[{tag:"path",attr:{d:"M14.25.18l.9.2.73.26.59.3.45.32.34.34.25.34.16.33.1.3.04.26.02.2-.01.13V8.5l-.05.63-.13.55-.21.46-.26.38-.3.31-.33.25-.35.19-.35.14-.33.1-.3.07-.26.04-.21.02H8.77l-.69.05-.59.14-.5.22-.41.27-.33.32-.27.35-.2.36-.15.37-.1.35-.07.32-.04.27-.02.21v3.06H3.17l-.21-.03-.28-.07-.32-.12-.35-.18-.36-.26-.36-.36-.35-.46-.32-.59-.28-.73-.21-.88-.14-1.05-.05-1.23.06-1.22.16-1.04.24-.87.32-.71.36-.57.4-.44.42-.33.42-.24.4-.16.36-.1.32-.05.24-.01h.16l.06.01h8.16v-.83H6.18l-.01-2.75-.02-.37.05-.34.11-.31.17-.28.25-.26.31-.23.38-.2.44-.18.51-.15.58-.12.64-.1.71-.06.77-.04.84-.02 1.27.05zm-6.3 1.98l-.23.33-.08.41.08.41.23.34.33.22.41.09.41-.09.33-.22.23-.34.08-.41-.08-.41-.23-.33-.33-.22-.41-.09-.41.09zm13.09 3.95l.28.06.32.12.35.18.36.27.36.35.35.47.32.59.28.73.21.88.14 1.04.05 1.23-.06 1.23-.16 1.04-.24.86-.32.71-.36.57-.4.45-.42.33-.42.24-.4.16-.36.09-.32.05-.24.02-.16-.01h-8.22v.82h5.84l.01 2.76.02.36-.05.34-.11.31-.17.29-.25.25-.31.24-.38.2-.44.17-.51.15-.58.13-.64.09-.71.07-.77.04-.84.01-1.27-.04-1.07-.14-.9-.2-.73-.25-.59-.3-.45-.33-.34-.34-.25-.34-.16-.33-.1-.3-.04-.25-.02-.2.01-.13v-5.34l.05-.64.13-.54.21-.46.26-.38.3-.32.33-.24.35-.2.35-.14.33-.1.3-.06.26-.04.21-.02.13-.01h5.84l.69-.05.59-.14.5-.21.41-.28.33-.32.27-.35.2-.36.15-.36.1-.35.07-.32.04-.28.02-.21V6.07h2.09l.14.01zm-6.47 14.25l-.23.33-.08.41.08.41.23.33.33.23.41.08.41-.08.33-.23.23-.33.08-.41-.08-.41-.23-.33-.33-.23-.41-.08-.41.08z"},child:[]}]})(t)}function eu(t){return ie({attr:{role:"img",viewBox:"0 0 24 24"},child:[{tag:"path",attr:{d:"M14.23 12.004a2.236 2.236 0 0 1-2.235 2.236 2.236 2.236 0 0 1-2.236-2.236 2.236 2.236 0 0 1 2.235-2.236 2.236 2.236 0 0 1 2.236 2.236zm2.648-10.69c-1.346 0-3.107.96-4.888 2.622-1.78-1.653-3.542-2.602-4.887-2.602-.41 0-.783.093-1.106.278-1.375.793-1.683 3.264-.973 6.365C1.98 8.917 0 10.42 0 12.004c0 1.59 1.99 3.097 5.043 4.03-.704 3.113-.39 5.588.988 6.38.32.187.69.275 1.102.275 1.345 0 3.107-.96 4.888-2.624 1.78 1.654 3.542 2.603 4.887 2.603.41 0 .783-.09 1.106-.275 1.374-.792 1.683-3.263.973-6.365C22.02 15.096 24 13.59 24 12.004c0-1.59-1.99-3.097-5.043-4.032.704-3.11.39-5.587-.988-6.38-.318-.184-.688-.277-1.092-.278zm-.005 1.09v.006c.225 0 .406.044.558.127.666.382.955 1.835.73 3.704-.054.46-.142.945-.25 1.44-.96-.236-2.006-.417-3.107-.534-.66-.905-1.345-1.727-2.035-2.447 1.592-1.48 3.087-2.292 4.105-2.295zm-9.77.02c1.012 0 2.514.808 4.11 2.28-.686.72-1.37 1.537-2.02 2.442-1.107.117-2.154.298-3.113.538-.112-.49-.195-.964-.254-1.42-.23-1.868.054-3.32.714-3.707.19-.09.4-.127.563-.132zm4.882 3.05c.455.468.91.992 1.36 1.564-.44-.02-.89-.034-1.345-.034-.46 0-.915.01-1.36.034.44-.572.895-1.096 1.345-1.565zM12 8.1c.74 0 1.477.034 2.202.093.406.582.802 1.203 1.183 1.86.372.64.71 1.29 1.018 1.946-.308.655-.646 1.31-1.013 1.95-.38.66-.773 1.288-1.18 1.87-.728.063-1.466.098-2.21.098-.74 0-1.477-.035-2.202-.093-.406-.582-.802-1.204-1.183-1.86-.372-.64-.71-1.29-1.018-1.946.303-.657.646-1.313 1.013-1.954.38-.66.773-1.286 1.18-1.868.728-.064 1.466-.098 2.21-.098zm-3.635.254c-.24.377-.48.763-.704 1.16-.225.39-.435.782-.635 1.174-.265-.656-.49-1.31-.676-1.947.64-.15 1.315-.283 2.015-.386zm7.26 0c.695.103 1.365.23 2.006.387-.18.632-.405 1.282-.66 1.933-.2-.39-.41-.783-.64-1.174-.225-.392-.465-.774-.705-1.146zm3.063.675c.484.15.944.317 1.375.498 1.732.74 2.852 1.708 2.852 2.476-.005.768-1.125 1.74-2.857 2.475-.42.18-.88.342-1.355.493-.28-.958-.646-1.956-1.1-2.98.45-1.017.81-2.01 1.085-2.964zm-13.395.004c.278.96.645 1.957 1.1 2.98-.45 1.017-.812 2.01-1.086 2.964-.484-.15-.944-.318-1.37-.5-1.732-.737-2.852-1.706-2.852-2.474 0-.768 1.12-1.742 2.852-2.476.42-.18.88-.342 1.356-.494zm11.678 4.28c.265.657.49 1.312.676 1.948-.64.157-1.316.29-2.016.39.24-.375.48-.762.705-1.158.225-.39.435-.788.636-1.18zm-9.945.02c.2.392.41.783.64 1.175.23.39.465.772.705 1.143-.695-.102-1.365-.23-2.006-.386.18-.63.406-1.282.66-1.933zM17.92 16.32c.112.493.2.968.254 1.423.23 1.868-.054 3.32-.714 3.708-.147.09-.338.128-.563.128-1.012 0-2.514-.807-4.11-2.28.686-.72 1.37-1.536 2.02-2.44 1.107-.118 2.154-.3 3.113-.54zm-11.83.01c.96.234 2.006.415 3.107.532.66.905 1.345 1.727 2.035 2.446-1.595 1.483-3.092 2.295-4.11 2.295-.22-.005-.406-.05-.553-.132-.666-.38-.955-1.834-.73-3.703.054-.46.142-.944.25-1.438zm4.56.64c.44.02.89.034 1.345.034.46 0 .915-.01 1.36-.034-.44.572-.895 1.095-1.345 1.565-.455-.47-.91-.993-1.36-1.565z"},child:[]}]})(t)}function tu(t){return ie({attr:{role:"img",viewBox:"0 0 24 24"},child:[{tag:"path",attr:{d:"M1.125 0C.502 0 0 .502 0 1.125v21.75C0 23.498.502 24 1.125 24h21.75c.623 0 1.125-.502 1.125-1.125V1.125C24 .502 23.498 0 22.875 0zm17.363 9.75c.612 0 1.154.037 1.627.111a6.38 6.38 0 0 1 1.306.34v2.458a3.95 3.95 0 0 0-.643-.361 5.093 5.093 0 0 0-.717-.26 5.453 5.453 0 0 0-1.426-.2c-.3 0-.573.028-.819.086a2.1 2.1 0 0 0-.623.242c-.17.104-.3.229-.393.374a.888.888 0 0 0-.14.49c0 .196.053.373.156.529.104.156.252.304.443.444s.423.276.696.41c.273.135.582.274.926.416.47.197.892.407 1.266.628.374.222.695.473.963.753.268.279.472.598.614.957.142.359.214.776.214 1.253 0 .657-.125 1.21-.373 1.656a3.033 3.033 0 0 1-1.012 1.085 4.38 4.38 0 0 1-1.487.596c-.566.12-1.163.18-1.79.18a9.916 9.916 0 0 1-1.84-.164 5.544 5.544 0 0 1-1.512-.493v-2.63a5.033 5.033 0 0 0 3.237 1.2c.333 0 .624-.03.872-.09.249-.06.456-.144.623-.25.166-.108.29-.234.373-.38a1.023 1.023 0 0 0-.074-1.089 2.12 2.12 0 0 0-.537-.5 5.597 5.597 0 0 0-.807-.444 27.72 27.72 0 0 0-1.007-.436c-.918-.383-1.602-.852-2.053-1.405-.45-.553-.676-1.222-.676-2.005 0-.614.123-1.141.369-1.582.246-.441.58-.804 1.004-1.089a4.494 4.494 0 0 1 1.47-.629 7.536 7.536 0 0 1 1.77-.201zm-15.113.188h9.563v2.166H9.506v9.646H6.789v-9.646H3.375z"},child:[]}]})(t)}const nu="_about_1n62r_1",ru="_hero_1n62r_6",iu="_title_1n62r_16",su="_subtitle_1n62r_22",au="_intro_1n62r_29",ou="_introContent_1n62r_33",lu="_introText_1n62r_38",cu="_sectionHeader_1n62r_47",uu="_skills_1n62r_63",hu="_techGrid_1n62r_68",du="_techCard_1n62r_76",fu="_techIcon_1n62r_93",mu="_techName_1n62r_97",pu="_values_1n62r_104",gu="_valuesGrid_1n62r_108",vu="_valueCard_1n62r_114",yu="_valueNumber_1n62r_126",xu="_valueTitle_1n62r_134",bu="_valueDescription_1n62r_140",k={about:nu,hero:ru,title:iu,subtitle:su,intro:au,introContent:ou,introText:lu,sectionHeader:cu,skills:uu,techGrid:hu,techCard:du,techIcon:fu,techName:mu,values:pu,valuesGrid:gu,valueCard:vu,valueNumber:yu,valueTitle:xu,valueDescription:bu},wu=[{name:"React",icon:eu},{name:"TypeScript",icon:tu},{name:"Node.js",icon:Zc},{name:"Python",icon:Qc},{name:"Firebase",icon:Xc},{name:"PostgreSQL",icon:Jc},{name:"Docker",icon:Yc},{name:"Git",icon:Kc}],hn={hidden:{opacity:0},visible:{opacity:1,transition:{staggerChildren:.1}}},dn={hidden:{opacity:0,y:20},visible:{opacity:1,y:0,transition:{duration:.4}}};function _u(){const{t}=ue();return p.jsxs("main",{className:k.about,children:[p.jsx("section",{className:k.hero,children:p.jsx("div",{className:"container",children:p.jsxs(I.div,{initial:{opacity:0,y:30},animate:{opacity:1,y:0},transition:{duration:.6},children:[p.jsx("h1",{className:k.title,children:t.about.title}),p.jsx("p",{className:k.subtitle,children:t.about.subtitle})]})})}),p.jsx("section",{className:k.intro,children:p.jsx("div",{className:"container",children:p.jsxs(I.div,{className:k.introContent,initial:{opacity:0,y:30},whileInView:{opacity:1,y:0},viewport:{once:!0},transition:{duration:.5},children:[p.jsx("p",{className:k.introText,children:t.about.intro}),p.jsx("p",{className:k.introText,children:t.about.experience})]})})}),p.jsx("section",{className:k.skills,children:p.jsxs("div",{className:"container",children:[p.jsxs(I.div,{className:k.sectionHeader,initial:{opacity:0,y:20},whileInView:{opacity:1,y:0},viewport:{once:!0},transition:{duration:.5},children:[p.jsx("h2",{children:t.about.skills.title}),p.jsx("p",{children:t.about.skills.subtitle})]}),p.jsx(I.div,{className:k.techGrid,variants:hn,initial:"hidden",whileInView:"visible",viewport:{once:!0},children:wu.map(e=>p.jsxs(I.div,{className:k.techCard,variants:dn,whileHover:{scale:1.05,y:-4},children:[p.jsx("span",{className:k.techIcon,children:p.jsx(e.icon,{})}),p.jsx("span",{className:k.techName,children:e.name})]},e.name))})]})}),p.jsx("section",{className:k.values,children:p.jsxs("div",{className:"container",children:[p.jsx(I.div,{className:k.sectionHeader,initial:{opacity:0,y:20},whileInView:{opacity:1,y:0},viewport:{once:!0},transition:{duration:.5},children:p.jsx("h2",{children:t.about.values.title})}),p.jsx(I.div,{className:k.valuesGrid,variants:hn,initial:"hidden",whileInView:"visible",viewport:{once:!0},children:t.about.values.items.map((e,n)=>p.jsxs(I.div,{className:k.valueCard,variants:dn,children:[p.jsxs("div",{className:k.valueNumber,children:["0",n+1]}),p.jsx("h3",{className:k.valueTitle,children:e.title}),p.jsx("p",{className:k.valueDescription,children:e.description})]},n))})]})})]})}class Ee{constructor(e=0,n="Network Error"){this.status=e,this.text=n}}const Eu=()=>{if(!(typeof localStorage>"u"))return{get:t=>Promise.resolve(localStorage.getItem(t)),set:(t,e)=>Promise.resolve(localStorage.setItem(t,e)),remove:t=>Promise.resolve(localStorage.removeItem(t))}},$={origin:"https://api.emailjs.com",blockHeadless:!1,storageProvider:Eu()},yt=t=>t?typeof t=="string"?{publicKey:t}:t.toString()==="[object Object]"?t:{}:{},Cu=(t,e="https://api.emailjs.com")=>{if(!t)return;const n=yt(t);$.publicKey=n.publicKey,$.blockHeadless=n.blockHeadless,$.storageProvider=n.storageProvider,$.blockList=n.blockList,$.limitRate=n.limitRate,$.origin=n.origin||e},ur=async(t,e,n={})=>{const r=await fetch($.origin+t,{method:"POST",headers:n,body:e}),i=await r.text(),s=new Ee(r.status,i);if(r.ok)return s;throw s},hr=(t,e,n)=>{if(!t||typeof t!="string")throw"The public key is required. Visit https://dashboard.emailjs.com/admin/account";if(!e||typeof e!="string")throw"The service ID is required. Visit https://dashboard.emailjs.com/admin";if(!n||typeof n!="string")throw"The template ID is required. Visit https://dashboard.emailjs.com/admin/templates"},Su=t=>{if(t&&t.toString()!=="[object Object]")throw"The template params have to be the object. Visit https://www.emailjs.com/docs/sdk/send/"},dr=t=>t.webdriver||!t.languages||t.languages.length===0,fr=()=>new Ee(451,"Unavailable For Headless Browser"),Mu=(t,e)=>{if(!Array.isArray(t))throw"The BlockList list has to be an array";if(typeof e!="string")throw"The BlockList watchVariable has to be a string"},Pu=t=>!t.list?.length||!t.watchVariable,Ru=(t,e)=>t instanceof FormData?t.get(e):t[e],mr=(t,e)=>{if(Pu(t))return!1;Mu(t.list,t.watchVariable);const n=Ru(e,t.watchVariable);return typeof n!="string"?!1:t.list.includes(n)},pr=()=>new Ee(403,"Forbidden"),Lu=(t,e)=>{if(typeof t!="number"||t<0)throw"The LimitRate throttle has to be a positive number";if(e&&typeof e!="string")throw"The LimitRate ID has to be a non-empty string"},ju=async(t,e,n)=>{const r=Number(await n.get(t)||0);return e-Date.now()+r},gr=async(t,e,n)=>{if(!e.throttle||!n)return!1;Lu(e.throttle,e.id);const r=e.id||t;return await ju(r,e.throttle,n)>0?!0:(await n.set(r,Date.now().toString()),!1)},vr=()=>new Ee(429,"Too Many Requests"),Tu=async(t,e,n,r)=>{const i=yt(r),s=i.publicKey||$.publicKey,a=i.blockHeadless||$.blockHeadless,o=i.storageProvider||$.storageProvider,l={...$.blockList,...i.blockList},u={...$.limitRate,...i.limitRate};return a&&dr(navigator)?Promise.reject(fr()):(hr(s,t,e),Su(n),n&&mr(l,n)?Promise.reject(pr()):await gr(location.pathname,u,o)?Promise.reject(vr()):ur("/api/v1.0/email/send",JSON.stringify({lib_version:"4.4.1",user_id:s,service_id:t,template_id:e,template_params:n}),{"Content-type":"application/json"}))},Iu=t=>{if(!t||t.nodeName!=="FORM")throw"The 3rd parameter is expected to be the HTML form element or the style selector of the form"},Au=t=>typeof t=="string"?document.querySelector(t):t,ku=async(t,e,n,r)=>{const i=yt(r),s=i.publicKey||$.publicKey,a=i.blockHeadless||$.blockHeadless,o=$.storageProvider||i.storageProvider,l={...$.blockList,...i.blockList},u={...$.limitRate,...i.limitRate};if(a&&dr(navigator))return Promise.reject(fr());const h=Au(n);hr(s,t,e),Iu(h);const c=new FormData(h);return mr(l,c)?Promise.reject(pr()):await gr(location.pathname,u,o)?Promise.reject(vr()):(c.append("lib_version","4.4.1"),c.append("service_id",t),c.append("template_id",e),c.append("user_id",s),ur("/api/v1.0/email/send-form",c))},Nu={init:Cu,send:Tu,sendForm:ku,EmailJSResponseStatus:Ee},Fu="_contact_1lm51_1",Du="_hero_1lm51_6",Ou="_title_1lm51_16",zu="_subtitle_1lm51_22",$u="_content_1lm51_29",Vu="_grid_1lm51_33",Bu="_formSection_1lm51_46",Wu="_intro_1lm51_50",Uu="_form_1lm51_46",Hu="_success_1lm51_63",Gu="_error_1lm51_72",qu="_infoSection_1lm51_82",Yu="_infoTitle_1lm51_90",Xu="_infoList_1lm51_96",Ku="_infoItem_1lm51_102",Zu="_infoIcon_1lm51_108",O={contact:Fu,hero:Du,title:Ou,subtitle:zu,content:$u,grid:Vu,formSection:Bu,intro:Wu,form:Uu,success:Hu,error:Gu,infoSection:qu,infoTitle:Yu,infoList:Xu,infoItem:Ku,infoIcon:Zu},Ju="YOUR_SERVICE_ID",Qu="YOUR_TEMPLATE_ID",e1="YOUR_PUBLIC_KEY";function t1(){const{t}=ue(),[e,n]=f.useState({name:"",email:"",subject:"",message:""}),[r,i]=f.useState({}),[s,a]=f.useState(!1),[o,l]=f.useState("idle"),u=()=>{const d={};return e.name.trim()||(d.name="Required"),e.email.trim()?/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e.email)||(d.email="Invalid email"):d.email="Required",e.subject.trim()||(d.subject="Required"),e.message.trim()||(d.message="Required"),i(d),Object.keys(d).length===0},h=async d=>{if(d.preventDefault(),!!u()){a(!0),l("idle");try{await Nu.send(Ju,Qu,{from_name:e.name,from_email:e.email,subject:e.subject,message:e.message},e1),l("success"),n({name:"",email:"",subject:"",message:""})}catch{l("error")}finally{a(!1)}}},c=(d,m)=>{n(g=>({...g,[d]:m})),r[d]&&i(g=>({...g,[d]:void 0}))};return p.jsxs("main",{className:O.contact,children:[p.jsx("section",{className:O.hero,children:p.jsx("div",{className:"container",children:p.jsxs(I.div,{initial:{opacity:0,y:30},animate:{opacity:1,y:0},transition:{duration:.6},children:[p.jsx("h1",{className:O.title,children:t.contact.title}),p.jsx("p",{className:O.subtitle,children:t.contact.subtitle})]})})}),p.jsx("section",{className:O.content,children:p.jsx("div",{className:"container",children:p.jsxs("div",{className:O.grid,children:[p.jsxs(I.div,{className:O.formSection,initial:{opacity:0,x:-30},animate:{opacity:1,x:0},transition:{duration:.5,delay:.2},children:[p.jsx("p",{className:O.intro,children:t.contact.intro}),p.jsxs("form",{onSubmit:h,className:O.form,children:[p.jsx(Ae,{label:t.contact.form.name,placeholder:t.contact.form.namePlaceholder,value:e.name,onChange:d=>c("name",d.target.value),error:r.name}),p.jsx(Ae,{label:t.contact.form.email,type:"email",placeholder:t.contact.form.emailPlaceholder,value:e.email,onChange:d=>c("email",d.target.value),error:r.email}),p.jsx(Ae,{label:t.contact.form.subject,placeholder:t.contact.form.subjectPlaceholder,value:e.subject,onChange:d=>c("subject",d.target.value),error:r.subject}),p.jsx(or,{label:t.contact.form.message,placeholder:t.contact.form.messagePlaceholder,value:e.message,onChange:d=>c("message",d.target.value),error:r.message,rows:6}),p.jsx(ct,{type:"submit",variant:"primary",size:"lg",isLoading:s,disabled:s,children:s?t.contact.form.sending:t.contact.form.submit}),o==="success"&&p.jsx(I.p,{className:O.success,initial:{opacity:0,y:10},animate:{opacity:1,y:0},children:t.contact.form.success}),o==="error"&&p.jsx(I.p,{className:O.error,initial:{opacity:0,y:10},animate:{opacity:1,y:0},children:t.contact.form.error})]})]}),p.jsxs(I.div,{className:O.infoSection,initial:{opacity:0,x:30},animate:{opacity:1,x:0},transition:{duration:.5,delay:.3},children:[p.jsx("h2",{className:O.infoTitle,children:t.contact.info.title}),p.jsxs("div",{className:O.infoList,children:[p.jsxs("div",{className:O.infoItem,children:[p.jsx("div",{className:O.infoIcon,children:p.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[p.jsx("path",{d:"M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"}),p.jsx("polyline",{points:"22,6 12,13 2,6"})]})}),p.jsxs("div",{children:[p.jsx("h3",{children:t.contact.info.email}),p.jsx("a",{href:"mailto:info@ragusa-it.dev",children:"info@ragusa-it.dev"})]})]}),p.jsxs("div",{className:O.infoItem,children:[p.jsx("div",{className:O.infoIcon,children:p.jsx("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:p.jsx("path",{d:"M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0024 12c0-6.63-5.37-12-12-12z"})})}),p.jsxs("div",{children:[p.jsx("h3",{children:t.contact.info.github}),p.jsx("a",{href:"https://github.com/ragusa-it",target:"_blank",rel:"noopener noreferrer",children:"github.com/ragusa-it"})]})]})]})]})]})})})]})}function n1(){return p.jsx(As,{children:p.jsxs(xs,{children:[p.jsx(go,{}),p.jsx(io,{}),p.jsxs(Xi,{children:[p.jsx(je,{path:"/",element:p.jsx($c,{})}),p.jsx(je,{path:"/about",element:p.jsx(_u,{})}),p.jsx(je,{path:"/contact",element:p.jsx(t1,{})})]}),p.jsx(po,{})]})})}br.createRoot(document.getElementById("root")).render(p.jsx(f.StrictMode,{children:p.jsx(n1,{})}));