Files
ragusaitweb/build/assets/index-BdWk3V4v.js
2026-01-21 22:38:10 +01:00

4 lines
92 KiB
JavaScript

import{r as a,j as l,C as xn,u as yt,F as bn,M as wn,c as _n}from"./three-CMo9PyBJ.js";import{g as En,s as xt,i as bt,a as qe,b as wt,c as Pn,d as Sn,e as Cn,f as jn,r as Rn,h as Ln,j as _t,k as kn,l as Tn,m as In,o as Mn,S as Nn,H as Dn,F as O,n as An,p as Et,q as ye,t as $n,u as Ye,v as A,w as Pt,x as Vn,y as Fn,z as On,A as xe,B as Me,C as Je,D as Wn,E as Bn,G as D,I as Hn,J as Un,K as zn,L as Xe,M as Gn,N as Kn,O as qn,P as Yn,Q as fe,R as Jn,T as Xn,U as St,V as Qn,W as Zn}from"./motion-BIOHP8Ul.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))r(o);new MutationObserver(o=>{for(const s of o)if(s.type==="childList")for(const i of s.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&r(i)}).observe(document,{childList:!0,subtree:!0});function n(o){const s={};return o.integrity&&(s.integrity=o.integrity),o.referrerPolicy&&(s.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?s.credentials="include":o.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function r(o){if(o.ep)return;o.ep=!0;const s=n(o);fetch(o.href,s)}})();var Qe="popstate";function er(e={}){function t(r,o){let{pathname:s,search:i,hash:c}=r.location;return Ne("",{pathname:s,search:i,hash:c},o.state&&o.state.usr||null,o.state&&o.state.key||"default")}function n(r,o){return typeof o=="string"?o:re(o)}return nr(t,n,null,e)}function E(e,t){if(e===!1||e===null||typeof e>"u")throw new Error(t)}function N(e,t){if(!e){typeof console<"u"&&console.warn(t);try{throw new Error(t)}catch{}}}function tr(){return Math.random().toString(36).substring(2,10)}function Ze(e,t){return{usr:e.state,key:e.key,idx:t}}function Ne(e,t,n=null,r){return{pathname:typeof e=="string"?e:e.pathname,search:"",hash:"",...typeof t=="string"?Y(t):t,state:n,key:t&&t.key||r||tr()}}function re({pathname:e="/",search:t="",hash:n=""}){return t&&t!=="?"&&(e+=t.charAt(0)==="?"?t:"?"+t),n&&n!=="#"&&(e+=n.charAt(0)==="#"?n:"#"+n),e}function Y(e){let t={};if(e){let n=e.indexOf("#");n>=0&&(t.hash=e.substring(n),e=e.substring(0,n));let r=e.indexOf("?");r>=0&&(t.search=e.substring(r),e=e.substring(0,r)),e&&(t.pathname=e)}return t}function nr(e,t,n,r={}){let{window:o=document.defaultView,v5Compat:s=!1}=r,i=o.history,c="POP",d=null,f=h();f==null&&(f=0,i.replaceState({...i.state,idx:f},""));function h(){return(i.state||{idx:null}).idx}function u(){c="POP";let x=h(),b=x==null?null:x-f;f=x,d&&d({action:c,location:y.location,delta:b})}function m(x,b){c="PUSH";let v=Ne(y.location,x,b);f=h()+1;let w=Ze(v,f),j=y.createHref(v);try{i.pushState(w,"",j)}catch(L){if(L instanceof DOMException&&L.name==="DataCloneError")throw L;o.location.assign(j)}s&&d&&d({action:c,location:y.location,delta:1})}function p(x,b){c="REPLACE";let v=Ne(y.location,x,b);f=h();let w=Ze(v,f),j=y.createHref(v);i.replaceState(w,"",j),s&&d&&d({action:c,location:y.location,delta:0})}function g(x){return rr(x)}let y={get action(){return c},get location(){return e(o,i)},listen(x){if(d)throw new Error("A history only accepts one active listener");return o.addEventListener(Qe,u),d=x,()=>{o.removeEventListener(Qe,u),d=null}},createHref(x){return t(o,x)},createURL:g,encodeLocation(x){let b=g(x);return{pathname:b.pathname,search:b.search,hash:b.hash}},push:m,replace:p,go(x){return i.go(x)}};return y}function rr(e,t=!1){let n="http://localhost";typeof window<"u"&&(n=window.location.origin!=="null"?window.location.origin:window.location.href),E(n,"No window.location.(origin|href) available to create URL");let r=typeof e=="string"?e:re(e);return r=r.replace(/ $/,"%20"),!t&&r.startsWith("//")&&(r=n+r),new URL(r,n)}function Ct(e,t,n="/"){return or(e,t,n,!1)}function or(e,t,n,r){let o=typeof t=="string"?Y(t):t,s=V(o.pathname||"/",n);if(s==null)return null;let i=jt(e);sr(i);let c=null;for(let d=0;c==null&&d<i.length;++d){let f=gr(s);c=mr(i[d],f,r)}return c}function jt(e,t=[],n=[],r="",o=!1){let s=(i,c,d=o,f)=>{let h={relativePath:f===void 0?i.path||"":f,caseSensitive:i.caseSensitive===!0,childrenIndex:c,route:i};if(h.relativePath.startsWith("/")){if(!h.relativePath.startsWith(r)&&d)return;E(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 u=$([r,h.relativePath]),m=n.concat(h);i.children&&i.children.length>0&&(E(i.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${u}".`),jt(i.children,t,m,u,d)),!(i.path==null&&!i.index)&&t.push({path:u,score:hr(u,i.index),routesMeta:m})};return e.forEach((i,c)=>{if(i.path===""||!i.path?.includes("?"))s(i,c);else for(let d of Rt(i.path))s(i,c,!0,d)}),t}function Rt(e){let t=e.split("/");if(t.length===0)return[];let[n,...r]=t,o=n.endsWith("?"),s=n.replace(/\?$/,"");if(r.length===0)return o?[s,""]:[s];let i=Rt(r.join("/")),c=[];return c.push(...i.map(d=>d===""?s:[s,d].join("/"))),o&&c.push(...i),c.map(d=>e.startsWith("/")&&d===""?"/":d)}function sr(e){e.sort((t,n)=>t.score!==n.score?n.score-t.score:fr(t.routesMeta.map(r=>r.childrenIndex),n.routesMeta.map(r=>r.childrenIndex)))}var ir=/^:[\w-]+$/,ar=3,lr=2,cr=1,ur=10,dr=-2,et=e=>e==="*";function hr(e,t){let n=e.split("/"),r=n.length;return n.some(et)&&(r+=dr),t&&(r+=lr),n.filter(o=>!et(o)).reduce((o,s)=>o+(ir.test(s)?ar:s===""?cr:ur),r)}function fr(e,t){return e.length===t.length&&e.slice(0,-1).every((r,o)=>r===t[o])?e[e.length-1]-t[t.length-1]:0}function mr(e,t,n=!1){let{routesMeta:r}=e,o={},s="/",i=[];for(let c=0;c<r.length;++c){let d=r[c],f=c===r.length-1,h=s==="/"?t:t.slice(s.length)||"/",u=be({path:d.relativePath,caseSensitive:d.caseSensitive,end:f},h),m=d.route;if(!u&&f&&n&&!r[r.length-1].route.index&&(u=be({path:d.relativePath,caseSensitive:d.caseSensitive,end:!1},h)),!u)return null;Object.assign(o,u.params),i.push({params:o,pathname:$([s,u.pathname]),pathnameBase:br($([s,u.pathnameBase])),route:m}),u.pathnameBase!=="/"&&(s=$([s,u.pathnameBase]))}return i}function be(e,t){typeof e=="string"&&(e={path:e,caseSensitive:!1,end:!0});let[n,r]=pr(e.path,e.caseSensitive,e.end),o=t.match(n);if(!o)return null;let s=o[0],i=s.replace(/(.)\/+$/,"$1"),c=o.slice(1);return{params:r.reduce((f,{paramName:h,isOptional:u},m)=>{if(h==="*"){let g=c[m]||"";i=s.slice(0,s.length-g.length).replace(/(.)\/+$/,"$1")}const p=c[m];return u&&!p?f[h]=void 0:f[h]=(p||"").replace(/%2F/g,"/"),f},{}),pathname:s,pathnameBase:i,pattern:e}}function pr(e,t=!1,n=!0){N(e==="*"||!e.endsWith("*")||e.endsWith("/*"),`Route path "${e}" will be treated as if it were "${e.replace(/\*$/,"/*")}" because the \`*\` character must always follow a \`/\` in the pattern. To get rid of this warning, please change the route path to "${e.replace(/\*$/,"/*")}".`);let r=[],o="^"+e.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(i,c,d)=>(r.push({paramName:c,isOptional:d!=null}),d?"/?([^\\/]+)?":"/([^\\/]+)")).replace(/\/([\w-]+)\?(\/|$)/g,"(/$1)?$2");return e.endsWith("*")?(r.push({paramName:"*"}),o+=e==="*"||e==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):n?o+="\\/*$":e!==""&&e!=="/"&&(o+="(?:(?=\\/|$))"),[new RegExp(o,t?void 0:"i"),r]}function gr(e){try{return e.split("/").map(t=>decodeURIComponent(t).replace(/\//g,"%2F")).join("/")}catch(t){return N(!1,`The URL path "${e}" could not be decoded because it is a malformed URL segment. This is probably due to a bad percent encoding (${t}).`),e}}function V(e,t){if(t==="/")return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let n=t.endsWith("/")?t.length-1:t.length,r=e.charAt(n);return r&&r!=="/"?null:e.slice(n)||"/"}var Lt=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,vr=e=>Lt.test(e);function yr(e,t="/"){let{pathname:n,search:r="",hash:o=""}=typeof e=="string"?Y(e):e,s;if(n)if(vr(n))s=n;else{if(n.includes("//")){let i=n;n=n.replace(/\/\/+/g,"/"),N(!1,`Pathnames cannot have embedded double slashes - normalizing ${i} -> ${n}`)}n.startsWith("/")?s=tt(n.substring(1),"/"):s=tt(n,t)}else s=t;return{pathname:s,search:wr(r),hash:_r(o)}}function tt(e,t){let n=t.replace(/\/+$/,"").split("/");return e.split("/").forEach(o=>{o===".."?n.length>1&&n.pop():o!=="."&&n.push(o)}),n.length>1?n.join("/"):"/"}function Se(e,t,n,r){return`Cannot include a '${e}' character in a manually specified \`to.${t}\` 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 xr(e){return e.filter((t,n)=>n===0||t.route.path&&t.route.path.length>0)}function kt(e){let t=xr(e);return t.map((n,r)=>r===t.length-1?n.pathname:n.pathnameBase)}function Tt(e,t,n,r=!1){let o;typeof e=="string"?o=Y(e):(o={...e},E(!o.pathname||!o.pathname.includes("?"),Se("?","pathname","search",o)),E(!o.pathname||!o.pathname.includes("#"),Se("#","pathname","hash",o)),E(!o.search||!o.search.includes("#"),Se("#","search","hash",o)));let s=e===""||o.pathname==="",i=s?"/":o.pathname,c;if(i==null)c=n;else{let u=t.length-1;if(!r&&i.startsWith("..")){let m=i.split("/");for(;m[0]==="..";)m.shift(),u-=1;o.pathname=m.join("/")}c=u>=0?t[u]:"/"}let d=yr(o,c),f=i&&i!=="/"&&i.endsWith("/"),h=(s||i===".")&&n.endsWith("/");return!d.pathname.endsWith("/")&&(f||h)&&(d.pathname+="/"),d}var $=e=>e.join("/").replace(/\/\/+/g,"/"),br=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),wr=e=>!e||e==="?"?"":e.startsWith("?")?e:"?"+e,_r=e=>!e||e==="#"?"":e.startsWith("#")?e:"#"+e,Er=class{constructor(e,t,n,r=!1){this.status=e,this.statusText=t||"",this.internal=r,n instanceof Error?(this.data=n.toString(),this.error=n):this.data=n}};function Pr(e){return e!=null&&typeof e.status=="number"&&typeof e.statusText=="string"&&typeof e.internal=="boolean"&&"data"in e}function Sr(e){return e.map(t=>t.route.path).filter(Boolean).join("/").replace(/\/\/*/g,"/")||"/"}var It=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";function Mt(e,t){let n=e;if(typeof n!="string"||!Lt.test(n))return{absoluteURL:void 0,isExternal:!1,to:n};let r=n,o=!1;if(It)try{let s=new URL(window.location.href),i=n.startsWith("//")?new URL(s.protocol+n):new URL(n),c=V(i.pathname,t);i.origin===s.origin&&c!=null?n=c+i.search+i.hash:o=!0}catch{N(!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:o,to:n}}Object.getOwnPropertyNames(Object.prototype).sort().join("\0");var Nt=["POST","PUT","PATCH","DELETE"];new Set(Nt);var Cr=["GET",...Nt];new Set(Cr);var J=a.createContext(null);J.displayName="DataRouter";var _e=a.createContext(null);_e.displayName="DataRouterState";var jr=a.createContext(!1),Dt=a.createContext({isTransitioning:!1});Dt.displayName="ViewTransition";var Rr=a.createContext(new Map);Rr.displayName="Fetchers";var Lr=a.createContext(null);Lr.displayName="Await";var I=a.createContext(null);I.displayName="Navigation";var se=a.createContext(null);se.displayName="Location";var F=a.createContext({outlet:null,matches:[],isDataRoute:!1});F.displayName="Route";var Fe=a.createContext(null);Fe.displayName="RouteError";var At="REACT_ROUTER_ERROR",kr="REDIRECT",Tr="ROUTE_ERROR_RESPONSE";function Ir(e){if(e.startsWith(`${At}:${kr}:{`))try{let t=JSON.parse(e.slice(28));if(typeof t=="object"&&t&&typeof t.status=="number"&&typeof t.statusText=="string"&&typeof t.location=="string"&&typeof t.reloadDocument=="boolean"&&typeof t.replace=="boolean")return t}catch{}}function Mr(e){if(e.startsWith(`${At}:${Tr}:{`))try{let t=JSON.parse(e.slice(40));if(typeof t=="object"&&t&&typeof t.status=="number"&&typeof t.statusText=="string")return new Er(t.status,t.statusText,t.data)}catch{}}function Nr(e,{relative:t}={}){E(ie(),"useHref() may be used only in the context of a <Router> component.");let{basename:n,navigator:r}=a.useContext(I),{hash:o,pathname:s,search:i}=ae(e,{relative:t}),c=s;return n!=="/"&&(c=s==="/"?n:$([n,s])),r.createHref({pathname:c,search:i,hash:o})}function ie(){return a.useContext(se)!=null}function W(){return E(ie(),"useLocation() may be used only in the context of a <Router> component."),a.useContext(se).location}var $t="You should call navigate() in a React.useEffect(), not when your component is first rendered.";function Vt(e){a.useContext(I).static||a.useLayoutEffect(e)}function Dr(){let{isDataRoute:e}=a.useContext(F);return e?qr():Ar()}function Ar(){E(ie(),"useNavigate() may be used only in the context of a <Router> component.");let e=a.useContext(J),{basename:t,navigator:n}=a.useContext(I),{matches:r}=a.useContext(F),{pathname:o}=W(),s=JSON.stringify(kt(r)),i=a.useRef(!1);return Vt(()=>{i.current=!0}),a.useCallback((d,f={})=>{if(N(i.current,$t),!i.current)return;if(typeof d=="number"){n.go(d);return}let h=Tt(d,JSON.parse(s),o,f.relative==="path");e==null&&t!=="/"&&(h.pathname=h.pathname==="/"?t:$([t,h.pathname])),(f.replace?n.replace:n.push)(h,f.state,f)},[t,n,s,o,e])}a.createContext(null);function ae(e,{relative:t}={}){let{matches:n}=a.useContext(F),{pathname:r}=W(),o=JSON.stringify(kt(n));return a.useMemo(()=>Tt(e,JSON.parse(o),r,t==="path"),[e,o,r,t])}function $r(e,t){return Ft(e,t)}function Ft(e,t,n,r,o){E(ie(),"useRoutes() may be used only in the context of a <Router> component.");let{navigator:s}=a.useContext(I),{matches:i}=a.useContext(F),c=i[i.length-1],d=c?c.params:{},f=c?c.pathname:"/",h=c?c.pathnameBase:"/",u=c&&c.route;{let v=u&&u.path||"";Wt(f,!u||v.endsWith("*")||v.endsWith("*?"),`You rendered descendant <Routes> (or called \`useRoutes()\`) at "${f}" (under <Route path="${v}">) 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="${v}"> to <Route path="${v==="/"?"*":`${v}/*`}">.`)}let m=W(),p;if(t){let v=typeof t=="string"?Y(t):t;E(h==="/"||v.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 "${v.pathname}" was given in the \`location\` prop.`),p=v}else p=m;let g=p.pathname||"/",y=g;if(h!=="/"){let v=h.replace(/^\//,"").split("/");y="/"+g.replace(/^\//,"").split("/").slice(v.length).join("/")}let x=Ct(e,{pathname:y});N(u||x!=null,`No routes matched location "${p.pathname}${p.search}${p.hash}" `),N(x==null||x[x.length-1].route.element!==void 0||x[x.length-1].route.Component!==void 0||x[x.length-1].route.lazy!==void 0,`Matched leaf route at location "${p.pathname}${p.search}${p.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 b=Br(x&&x.map(v=>Object.assign({},v,{params:Object.assign({},d,v.params),pathname:$([h,s.encodeLocation?s.encodeLocation(v.pathname.replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:v.pathname]),pathnameBase:v.pathnameBase==="/"?h:$([h,s.encodeLocation?s.encodeLocation(v.pathnameBase.replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:v.pathnameBase])})),i,n,r,o);return t&&b?a.createElement(se.Provider,{value:{location:{pathname:"/",search:"",hash:"",state:null,key:"default",...p},navigationType:"POP"}},b):b}function Vr(){let e=Kr(),t=Pr(e)?`${e.status} ${e.statusText}`:e instanceof Error?e.message:JSON.stringify(e),n=e instanceof Error?e.stack:null,r="rgba(200,200,200, 0.5)",o={padding:"0.5rem",backgroundColor:r},s={padding:"2px 4px",backgroundColor:r},i=null;return console.error("Error handled by React Router default ErrorBoundary:",e),i=a.createElement(a.Fragment,null,a.createElement("p",null,"💿 Hey developer 👋"),a.createElement("p",null,"You can provide a way better UX than this when your app throws errors by providing your own ",a.createElement("code",{style:s},"ErrorBoundary")," or"," ",a.createElement("code",{style:s},"errorElement")," prop on your route.")),a.createElement(a.Fragment,null,a.createElement("h2",null,"Unexpected Application Error!"),a.createElement("h3",{style:{fontStyle:"italic"}},t),n?a.createElement("pre",{style:o},n):null,i)}var Fr=a.createElement(Vr,null),Ot=class extends a.Component{constructor(e){super(e),this.state={location:e.location,revalidation:e.revalidation,error:e.error}}static getDerivedStateFromError(e){return{error:e}}static getDerivedStateFromProps(e,t){return t.location!==e.location||t.revalidation!=="idle"&&e.revalidation==="idle"?{error:e.error,location:e.location,revalidation:e.revalidation}:{error:e.error!==void 0?e.error:t.error,location:t.location,revalidation:e.revalidation||t.revalidation}}componentDidCatch(e,t){this.props.onError?this.props.onError(e,t):console.error("React Router caught the following error during render",e)}render(){let e=this.state.error;if(this.context&&typeof e=="object"&&e&&"digest"in e&&typeof e.digest=="string"){const n=Mr(e.digest);n&&(e=n)}let t=e!==void 0?a.createElement(F.Provider,{value:this.props.routeContext},a.createElement(Fe.Provider,{value:e,children:this.props.component})):this.props.children;return this.context?a.createElement(Or,{error:e},t):t}};Ot.contextType=jr;var Ce=new WeakMap;function Or({children:e,error:t}){let{basename:n}=a.useContext(I);if(typeof t=="object"&&t&&"digest"in t&&typeof t.digest=="string"){let r=Ir(t.digest);if(r){let o=Ce.get(t);if(o)throw o;let s=Mt(r.location,n);if(It&&!Ce.get(t))if(s.isExternal||r.reloadDocument)window.location.href=s.absoluteURL||s.to;else{const i=Promise.resolve().then(()=>window.__reactRouterDataRouter.navigate(s.to,{replace:r.replace}));throw Ce.set(t,i),i}return a.createElement("meta",{httpEquiv:"refresh",content:`0;url=${s.absoluteURL||s.to}`})}}return e}function Wr({routeContext:e,match:t,children:n}){let r=a.useContext(J);return r&&r.static&&r.staticContext&&(t.route.errorElement||t.route.ErrorBoundary)&&(r.staticContext._deepestRenderedBoundaryId=t.route.id),a.createElement(F.Provider,{value:e},n)}function Br(e,t=[],n=null,r=null,o=null){if(e==null){if(!n)return null;if(n.errors)e=n.matches;else if(t.length===0&&!n.initialized&&n.matches.length>0)e=n.matches;else return null}let s=e,i=n?.errors;if(i!=null){let h=s.findIndex(u=>u.route.id&&i?.[u.route.id]!==void 0);E(h>=0,`Could not find a matching route for errors on route IDs: ${Object.keys(i).join(",")}`),s=s.slice(0,Math.min(s.length,h+1))}let c=!1,d=-1;if(n)for(let h=0;h<s.length;h++){let u=s[h];if((u.route.HydrateFallback||u.route.hydrateFallbackElement)&&(d=h),u.route.id){let{loaderData:m,errors:p}=n,g=u.route.loader&&!m.hasOwnProperty(u.route.id)&&(!p||p[u.route.id]===void 0);if(u.route.lazy||g){c=!0,d>=0?s=s.slice(0,d+1):s=[s[0]];break}}}let f=n&&r?(h,u)=>{r(h,{location:n.location,params:n.matches?.[0]?.params??{},unstable_pattern:Sr(n.matches),errorInfo:u})}:void 0;return s.reduceRight((h,u,m)=>{let p,g=!1,y=null,x=null;n&&(p=i&&u.route.id?i[u.route.id]:void 0,y=u.route.errorElement||Fr,c&&(d<0&&m===0?(Wt("route-fallback",!1,"No `HydrateFallback` element provided to render during initial hydration"),g=!0,x=null):d===m&&(g=!0,x=u.route.hydrateFallbackElement||null)));let b=t.concat(s.slice(0,m+1)),v=()=>{let w;return p?w=y:g?w=x:u.route.Component?w=a.createElement(u.route.Component,null):u.route.element?w=u.route.element:w=h,a.createElement(Wr,{match:u,routeContext:{outlet:h,matches:b,isDataRoute:n!=null},children:w})};return n&&(u.route.ErrorBoundary||u.route.errorElement||m===0)?a.createElement(Ot,{location:n.location,revalidation:n.revalidation,component:y,error:p,children:v(),routeContext:{outlet:null,matches:b,isDataRoute:!0},onError:f}):v()},null)}function Oe(e){return`${e} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function Hr(e){let t=a.useContext(J);return E(t,Oe(e)),t}function Ur(e){let t=a.useContext(_e);return E(t,Oe(e)),t}function zr(e){let t=a.useContext(F);return E(t,Oe(e)),t}function We(e){let t=zr(e),n=t.matches[t.matches.length-1];return E(n.route.id,`${e} can only be used on routes that contain a unique "id"`),n.route.id}function Gr(){return We("useRouteId")}function Kr(){let e=a.useContext(Fe),t=Ur("useRouteError"),n=We("useRouteError");return e!==void 0?e:t.errors?.[n]}function qr(){let{router:e}=Hr("useNavigate"),t=We("useNavigate"),n=a.useRef(!1);return Vt(()=>{n.current=!0}),a.useCallback(async(o,s={})=>{N(n.current,$t),n.current&&(typeof o=="number"?await e.navigate(o):await e.navigate(o,{fromRouteId:t,...s}))},[e,t])}var nt={};function Wt(e,t,n){!t&&!nt[e]&&(nt[e]=!0,N(!1,n))}a.memo(Yr);function Yr({routes:e,future:t,state:n,onError:r}){return Ft(e,void 0,n,r,t)}function me(e){E(!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 Jr({basename:e="/",children:t=null,location:n,navigationType:r="POP",navigator:o,static:s=!1,unstable_useTransitions:i}){E(!ie(),"You cannot render a <Router> inside another <Router>. You should never have more than one in your app.");let c=e.replace(/^\/*/,"/"),d=a.useMemo(()=>({basename:c,navigator:o,static:s,unstable_useTransitions:i,future:{}}),[c,o,s,i]);typeof n=="string"&&(n=Y(n));let{pathname:f="/",search:h="",hash:u="",state:m=null,key:p="default"}=n,g=a.useMemo(()=>{let y=V(f,c);return y==null?null:{location:{pathname:y,search:h,hash:u,state:m,key:p},navigationType:r}},[c,f,h,u,m,p,r]);return N(g!=null,`<Router basename="${c}"> is not able to match the URL "${f}${h}${u}" because it does not start with the basename, so the <Router> won't render anything.`),g==null?null:a.createElement(I.Provider,{value:d},a.createElement(se.Provider,{children:t,value:g}))}function Xr({children:e,location:t}){return $r(De(e),t)}function De(e,t=[]){let n=[];return a.Children.forEach(e,(r,o)=>{if(!a.isValidElement(r))return;let s=[...t,o];if(r.type===a.Fragment){n.push.apply(n,De(r.props.children,s));return}E(r.type===me,`[${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>`),E(!r.props.index||!r.props.children,"An index route cannot have child routes.");let i={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&&(i.children=De(r.props.children,s)),n.push(i)}),n}var pe="get",ge="application/x-www-form-urlencoded";function Ee(e){return typeof HTMLElement<"u"&&e instanceof HTMLElement}function Qr(e){return Ee(e)&&e.tagName.toLowerCase()==="button"}function Zr(e){return Ee(e)&&e.tagName.toLowerCase()==="form"}function eo(e){return Ee(e)&&e.tagName.toLowerCase()==="input"}function to(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}function no(e,t){return e.button===0&&(!t||t==="_self")&&!to(e)}var ue=null;function ro(){if(ue===null)try{new FormData(document.createElement("form"),0),ue=!1}catch{ue=!0}return ue}var oo=new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);function je(e){return e!=null&&!oo.has(e)?(N(!1,`"${e}" is not a valid \`encType\` for \`<Form>\`/\`<fetcher.Form>\` and will default to "${ge}"`),null):e}function so(e,t){let n,r,o,s,i;if(Zr(e)){let c=e.getAttribute("action");r=c?V(c,t):null,n=e.getAttribute("method")||pe,o=je(e.getAttribute("enctype"))||ge,s=new FormData(e)}else if(Qr(e)||eo(e)&&(e.type==="submit"||e.type==="image")){let c=e.form;if(c==null)throw new Error('Cannot submit a <button> or <input type="submit"> without a <form>');let d=e.getAttribute("formaction")||c.getAttribute("action");if(r=d?V(d,t):null,n=e.getAttribute("formmethod")||c.getAttribute("method")||pe,o=je(e.getAttribute("formenctype"))||je(c.getAttribute("enctype"))||ge,s=new FormData(c,e),!ro()){let{name:f,type:h,value:u}=e;if(h==="image"){let m=f?`${f}.`:"";s.append(`${m}x`,"0"),s.append(`${m}y`,"0")}else f&&s.append(f,u)}}else{if(Ee(e))throw new Error('Cannot submit element that is not <form>, <button>, or <input type="submit|image">');n=pe,r=null,o=ge,i=e}return s&&o==="text/plain"&&(i=s,s=void 0),{action:r,method:n.toLowerCase(),encType:o,formData:s,body:i}}Object.getOwnPropertyNames(Object.prototype).sort().join("\0");function Be(e,t){if(e===!1||e===null||typeof e>"u")throw new Error(t)}function io(e,t,n,r){let o=typeof e=="string"?new URL(e,typeof window>"u"?"server://singlefetch/":window.location.origin):e;return n?o.pathname.endsWith("/")?o.pathname=`${o.pathname}_.${r}`:o.pathname=`${o.pathname}.${r}`:o.pathname==="/"?o.pathname=`_root.${r}`:t&&V(o.pathname,t)==="/"?o.pathname=`${t.replace(/\/$/,"")}/_root.${r}`:o.pathname=`${o.pathname.replace(/\/$/,"")}.${r}`,o}async function ao(e,t){if(e.id in t)return t[e.id];try{let n=await import(e.module);return t[e.id]=n,n}catch(n){return console.error(`Error loading route module \`${e.module}\`, reloading page...`),console.error(n),window.__reactRouterContext&&window.__reactRouterContext.isSpaMode,window.location.reload(),new Promise(()=>{})}}function lo(e){return e==null?!1:e.href==null?e.rel==="preload"&&typeof e.imageSrcSet=="string"&&typeof e.imageSizes=="string":typeof e.rel=="string"&&typeof e.href=="string"}async function co(e,t,n){let r=await Promise.all(e.map(async o=>{let s=t.routes[o.route.id];if(s){let i=await ao(s,n);return i.links?i.links():[]}return[]}));return mo(r.flat(1).filter(lo).filter(o=>o.rel==="stylesheet"||o.rel==="preload").map(o=>o.rel==="stylesheet"?{...o,rel:"prefetch",as:"style"}:{...o,rel:"prefetch"}))}function rt(e,t,n,r,o,s){let i=(d,f)=>n[f]?d.route.id!==n[f].route.id:!0,c=(d,f)=>n[f].pathname!==d.pathname||n[f].route.path?.endsWith("*")&&n[f].params["*"]!==d.params["*"];return s==="assets"?t.filter((d,f)=>i(d,f)||c(d,f)):s==="data"?t.filter((d,f)=>{let h=r.routes[d.route.id];if(!h||!h.hasLoader)return!1;if(i(d,f)||c(d,f))return!0;if(d.route.shouldRevalidate){let u=d.route.shouldRevalidate({currentUrl:new URL(o.pathname+o.search+o.hash,window.origin),currentParams:n[0]?.params||{},nextUrl:new URL(e,window.origin),nextParams:d.params,defaultShouldRevalidate:!0});if(typeof u=="boolean")return u}return!0}):[]}function uo(e,t,{includeHydrateFallback:n}={}){return ho(e.map(r=>{let o=t.routes[r.route.id];if(!o)return[];let s=[o.module];return o.clientActionModule&&(s=s.concat(o.clientActionModule)),o.clientLoaderModule&&(s=s.concat(o.clientLoaderModule)),n&&o.hydrateFallbackModule&&(s=s.concat(o.hydrateFallbackModule)),o.imports&&(s=s.concat(o.imports)),s}).flat(1))}function ho(e){return[...new Set(e)]}function fo(e){let t={},n=Object.keys(e).sort();for(let r of n)t[r]=e[r];return t}function mo(e,t){let n=new Set;return new Set(t),e.reduce((r,o)=>{let s=JSON.stringify(fo(o));return n.has(s)||(n.add(s),r.push({key:s,link:o})),r},[])}function Bt(){let e=a.useContext(J);return Be(e,"You must render this element inside a <DataRouterContext.Provider> element"),e}function po(){let e=a.useContext(_e);return Be(e,"You must render this element inside a <DataRouterStateContext.Provider> element"),e}var He=a.createContext(void 0);He.displayName="FrameworkContext";function Ht(){let e=a.useContext(He);return Be(e,"You must render this element inside a <HydratedRouter> element"),e}function go(e,t){let n=a.useContext(He),[r,o]=a.useState(!1),[s,i]=a.useState(!1),{onFocus:c,onBlur:d,onMouseEnter:f,onMouseLeave:h,onTouchStart:u}=t,m=a.useRef(null);a.useEffect(()=>{if(e==="render"&&i(!0),e==="viewport"){let y=b=>{b.forEach(v=>{i(v.isIntersecting)})},x=new IntersectionObserver(y,{threshold:.5});return m.current&&x.observe(m.current),()=>{x.disconnect()}}},[e]),a.useEffect(()=>{if(r){let y=setTimeout(()=>{i(!0)},100);return()=>{clearTimeout(y)}}},[r]);let p=()=>{o(!0)},g=()=>{o(!1),i(!1)};return n?e!=="intent"?[s,m,{}]:[s,m,{onFocus:Z(c,p),onBlur:Z(d,g),onMouseEnter:Z(f,p),onMouseLeave:Z(h,g),onTouchStart:Z(u,p)}]:[!1,m,{}]}function Z(e,t){return n=>{e&&e(n),n.defaultPrevented||t(n)}}function vo({page:e,...t}){let{router:n}=Bt(),r=a.useMemo(()=>Ct(n.routes,e,n.basename),[n.routes,e,n.basename]);return r?a.createElement(xo,{page:e,matches:r,...t}):null}function yo(e){let{manifest:t,routeModules:n}=Ht(),[r,o]=a.useState([]);return a.useEffect(()=>{let s=!1;return co(e,t,n).then(i=>{s||o(i)}),()=>{s=!0}},[e,t,n]),r}function xo({page:e,matches:t,...n}){let r=W(),{future:o,manifest:s,routeModules:i}=Ht(),{basename:c}=Bt(),{loaderData:d,matches:f}=po(),h=a.useMemo(()=>rt(e,t,f,s,r,"data"),[e,t,f,s,r]),u=a.useMemo(()=>rt(e,t,f,s,r,"assets"),[e,t,f,s,r]),m=a.useMemo(()=>{if(e===r.pathname+r.search+r.hash)return[];let y=new Set,x=!1;if(t.forEach(v=>{let w=s.routes[v.route.id];!w||!w.hasLoader||(!h.some(j=>j.route.id===v.route.id)&&v.route.id in d&&i[v.route.id]?.shouldRevalidate||w.hasClientLoader?x=!0:y.add(v.route.id))}),y.size===0)return[];let b=io(e,c,o.unstable_trailingSlashAwareDataRequests,"data");return x&&y.size>0&&b.searchParams.set("_routes",t.filter(v=>y.has(v.route.id)).map(v=>v.route.id).join(",")),[b.pathname+b.search]},[c,o.unstable_trailingSlashAwareDataRequests,d,r,s,h,t,e,i]),p=a.useMemo(()=>uo(u,s),[u,s]),g=yo(u);return a.createElement(a.Fragment,null,m.map(y=>a.createElement("link",{key:y,rel:"prefetch",as:"fetch",href:y,...n})),p.map(y=>a.createElement("link",{key:y,rel:"modulepreload",href:y,...n})),g.map(({key:y,link:x})=>a.createElement("link",{key:y,nonce:n.nonce,...x})))}function bo(...e){return t=>{e.forEach(n=>{typeof n=="function"?n(t):n!=null&&(n.current=t)})}}var wo=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";try{wo&&(window.__reactRouterVersion="7.12.0")}catch{}function _o({basename:e,children:t,unstable_useTransitions:n,window:r}){let o=a.useRef();o.current==null&&(o.current=er({window:r,v5Compat:!0}));let s=o.current,[i,c]=a.useState({action:s.action,location:s.location}),d=a.useCallback(f=>{n===!1?c(f):a.startTransition(()=>c(f))},[n]);return a.useLayoutEffect(()=>s.listen(d),[s,d]),a.createElement(Jr,{basename:e,children:t,location:i.location,navigationType:i.action,navigator:s,unstable_useTransitions:n})}var Ut=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,q=a.forwardRef(function({onClick:t,discover:n="render",prefetch:r="none",relative:o,reloadDocument:s,replace:i,state:c,target:d,to:f,preventScrollReset:h,viewTransition:u,unstable_defaultShouldRevalidate:m,...p},g){let{basename:y,unstable_useTransitions:x}=a.useContext(I),b=typeof f=="string"&&Ut.test(f),v=Mt(f,y);f=v.to;let w=Nr(f,{relative:o}),[j,L,B]=go(r,p),H=Co(f,{replace:i,state:c,target:d,preventScrollReset:h,relative:o,viewTransition:u,unstable_defaultShouldRevalidate:m,unstable_useTransitions:x});function z(Q){t&&t(Q),Q.defaultPrevented||H(Q)}let G=a.createElement("a",{...p,...B,href:v.absoluteURL||w,onClick:v.isExternal||s?t:z,ref:bo(g,L),target:d,"data-discover":!b&&n==="render"?"true":void 0});return j&&!b?a.createElement(a.Fragment,null,G,a.createElement(vo,{page:w})):G});q.displayName="Link";var Eo=a.forwardRef(function({"aria-current":t="page",caseSensitive:n=!1,className:r="",end:o=!1,style:s,to:i,viewTransition:c,children:d,...f},h){let u=ae(i,{relative:f.relative}),m=W(),p=a.useContext(_e),{navigator:g,basename:y}=a.useContext(I),x=p!=null&&To(u)&&c===!0,b=g.encodeLocation?g.encodeLocation(u).pathname:u.pathname,v=m.pathname,w=p&&p.navigation&&p.navigation.location?p.navigation.location.pathname:null;n||(v=v.toLowerCase(),w=w?w.toLowerCase():null,b=b.toLowerCase()),w&&y&&(w=V(w,y)||w);const j=b!=="/"&&b.endsWith("/")?b.length-1:b.length;let L=v===b||!o&&v.startsWith(b)&&v.charAt(j)==="/",B=w!=null&&(w===b||!o&&w.startsWith(b)&&w.charAt(b.length)==="/"),H={isActive:L,isPending:B,isTransitioning:x},z=L?t:void 0,G;typeof r=="function"?G=r(H):G=[r,L?"active":null,B?"pending":null,x?"transitioning":null].filter(Boolean).join(" ");let Q=typeof s=="function"?s(H):s;return a.createElement(q,{...f,"aria-current":z,className:G,ref:h,style:Q,to:i,viewTransition:c},typeof d=="function"?d(H):d)});Eo.displayName="NavLink";var Po=a.forwardRef(({discover:e="render",fetcherKey:t,navigate:n,reloadDocument:r,replace:o,state:s,method:i=pe,action:c,onSubmit:d,relative:f,preventScrollReset:h,viewTransition:u,unstable_defaultShouldRevalidate:m,...p},g)=>{let{unstable_useTransitions:y}=a.useContext(I),x=Lo(),b=ko(c,{relative:f}),v=i.toLowerCase()==="get"?"get":"post",w=typeof c=="string"&&Ut.test(c),j=L=>{if(d&&d(L),L.defaultPrevented)return;L.preventDefault();let B=L.nativeEvent.submitter,H=B?.getAttribute("formmethod")||i,z=()=>x(B||L.currentTarget,{fetcherKey:t,method:H,navigate:n,replace:o,state:s,relative:f,preventScrollReset:h,viewTransition:u,unstable_defaultShouldRevalidate:m});y&&n!==!1?a.startTransition(()=>z()):z()};return a.createElement("form",{ref:g,method:v,action:b,onSubmit:r?d:j,...p,"data-discover":!w&&e==="render"?"true":void 0})});Po.displayName="Form";function So(e){return`${e} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function zt(e){let t=a.useContext(J);return E(t,So(e)),t}function Co(e,{target:t,replace:n,state:r,preventScrollReset:o,relative:s,viewTransition:i,unstable_defaultShouldRevalidate:c,unstable_useTransitions:d}={}){let f=Dr(),h=W(),u=ae(e,{relative:s});return a.useCallback(m=>{if(no(m,t)){m.preventDefault();let p=n!==void 0?n:re(h)===re(u),g=()=>f(e,{replace:p,state:r,preventScrollReset:o,relative:s,viewTransition:i,unstable_defaultShouldRevalidate:c});d?a.startTransition(()=>g()):g()}},[h,f,u,n,r,t,e,o,s,i,c,d])}var jo=0,Ro=()=>`__${String(++jo)}__`;function Lo(){let{router:e}=zt("useSubmit"),{basename:t}=a.useContext(I),n=Gr(),r=e.fetch,o=e.navigate;return a.useCallback(async(s,i={})=>{let{action:c,method:d,encType:f,formData:h,body:u}=so(s,t);if(i.navigate===!1){let m=i.fetcherKey||Ro();await r(m,n,i.action||c,{unstable_defaultShouldRevalidate:i.unstable_defaultShouldRevalidate,preventScrollReset:i.preventScrollReset,formData:h,body:u,formMethod:i.method||d,formEncType:i.encType||f,flushSync:i.flushSync})}else await o(i.action||c,{unstable_defaultShouldRevalidate:i.unstable_defaultShouldRevalidate,preventScrollReset:i.preventScrollReset,formData:h,body:u,formMethod:i.method||d,formEncType:i.encType||f,replace:i.replace,state:i.state,fromRouteId:n,flushSync:i.flushSync,viewTransition:i.viewTransition})},[r,o,t,n])}function ko(e,{relative:t}={}){let{basename:n}=a.useContext(I),r=a.useContext(F);E(r,"useFormAction must be used inside a RouteContext");let[o]=r.matches.slice(-1),s={...ae(e||".",{relative:t})},i=W();if(e==null){s.search=i.search;let c=new URLSearchParams(s.search),d=c.getAll("index");if(d.some(h=>h==="")){c.delete("index"),d.filter(u=>u).forEach(u=>c.append("index",u));let h=c.toString();s.search=h?`?${h}`:""}}return(!e||e===".")&&o.route.index&&(s.search=s.search?s.search.replace(/^\?/,"?index&"):"?index"),n!=="/"&&(s.pathname=s.pathname==="/"?n:$([n,s.pathname])),re(s)}function To(e,{relative:t}={}){let n=a.useContext(Dt);E(n!=null,"`useViewTransitionState` must be used within `react-router-dom`'s `RouterProvider`. Did you accidentally import `RouterProvider` from `react-router`?");let{basename:r}=zt("useViewTransitionState"),o=ae(e,{relative:t});if(!n.isTransitioning)return!1;let s=V(n.currentLocation.pathname,r)||n.currentLocation.pathname,i=V(n.nextLocation.pathname,r)||n.nextLocation.pathname;return be(o.pathname,i)!=null||be(o.pathname,s)!=null}const Io={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"},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.",madeWith:"Entwickelt mit",and:"und"}},Mo={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"},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.",madeWith:"Built with",and:"and"}},No={de:Io,en:Mo},Gt=a.createContext(void 0),Kt="ragusa-it-lang";function Do(){if(typeof window>"u")return"de";const e=localStorage.getItem(Kt);return e==="de"||e==="en"?e:navigator.language.split("-")[0]==="en"?"en":"de"}function Ao({children:e}){const[t,n]=a.useState("de"),[r,o]=a.useState(!1);a.useEffect(()=>{n(Do()),o(!0)},[]);const s=c=>{n(c),localStorage.setItem(Kt,c),document.documentElement.lang=c};a.useEffect(()=>{r&&(document.documentElement.lang=t)},[t,r]);const i={language:t,setLanguage:s,t:No[t]};return l.jsx(Gt.Provider,{value:i,children:e})}function X(){const e=a.useContext(Gt);if(!e)throw new Error("useTranslation must be used within a LanguageProvider");return e}const qt=a.createContext({});function $o(e){const t=a.useRef(null);return t.current===null&&(t.current=e()),t.current}const Yt=typeof window<"u",Vo=Yt?a.useLayoutEffect:a.useEffect,Ue=a.createContext(null),Jt=a.createContext({transformPagePoint:e=>e,isStatic:!1,reducedMotion:"never"});function Fo(e=!0){const t=a.useContext(Ue);if(t===null)return[!0,null];const{isPresent:n,onExitComplete:r,register:o}=t,s=a.useId();a.useEffect(()=>{if(e)return o(s)},[e]);const i=a.useCallback(()=>e&&r&&r(s),[s,r,e]);return!n&&r?[!1,i]:[!0]}const Xt=a.createContext({strict:!1}),ot={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 st=!1;function Oo(){if(st)return;const e={};for(const t in ot)e[t]={isEnabled:n=>ot[t].some(r=>!!n[r])};xt(e),st=!0}function Qt(){return Oo(),En()}function Wo(e){const t=Qt();for(const n in e)t[n]={...t[n],...e[n]};xt(t)}const Bo=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 we(e){return e.startsWith("while")||e.startsWith("drag")&&e!=="draggable"||e.startsWith("layout")||e.startsWith("onTap")||e.startsWith("onPan")||e.startsWith("onLayout")||Bo.has(e)}let Zt=e=>!we(e);function Ho(e){typeof e=="function"&&(Zt=t=>t.startsWith("on")?!we(t):e(t))}try{Ho(require("@emotion/is-prop-valid").default)}catch{}function Uo(e,t,n){const r={};for(const o in e)o==="values"&&typeof e.values=="object"||(Zt(o)||n===!0&&we(o)||!t&&!we(o)||e.draggable&&o.startsWith("onDrag"))&&(r[o]=e[o]);return r}const Pe=a.createContext({});function zo(e,t){if(bt(e)){const{initial:n,animate:r}=e;return{initial:n===!1||qe(n)?n:void 0,animate:qe(r)?r:void 0}}return e.inherit!==!1?t:{}}function Go(e){const{initial:t,animate:n}=zo(e,a.useContext(Pe));return a.useMemo(()=>({initial:t,animate:n}),[it(t),it(n)])}function it(e){return Array.isArray(e)?e.join(" "):e}const ze=()=>({style:{},transform:{},transformOrigin:{},vars:{}});function en(e,t,n){for(const r in t)!wt(t[r])&&!Pn(r,n)&&(e[r]=t[r])}function Ko({transformTemplate:e},t){return a.useMemo(()=>{const n=ze();return Sn(n,t,e),Object.assign({},n.vars,n.style)},[t])}function qo(e,t){const n=e.style||{},r={};return en(r,n,e),Object.assign(r,Ko(e,t)),r}function Yo(e,t){const n={},r=qo(e,t);return e.drag&&e.dragListener!==!1&&(n.draggable=!1,r.userSelect=r.WebkitUserSelect=r.WebkitTouchCallout="none",r.touchAction=e.drag===!0?"none":`pan-${e.drag==="x"?"y":"x"}`),e.tabIndex===void 0&&(e.onTap||e.onTapStart||e.whileTap)&&(n.tabIndex=0),n.style=r,n}const tn=()=>({...ze(),attrs:{}});function Jo(e,t,n,r){const o=a.useMemo(()=>{const s=tn();return Cn(s,t,jn(r),e.transformTemplate,e.style),{...s.attrs,style:{...s.style}}},[t]);if(e.style){const s={};en(s,e.style,e),o.style={...s,...o.style}}return o}const Xo=["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 Ge(e){return typeof e!="string"||e.includes("-")?!1:!!(Xo.indexOf(e)>-1||/[A-Z]/u.test(e))}function Qo(e,t,n,{latestValues:r},o,s=!1,i){const d=(i??Ge(e)?Jo:Yo)(t,r,o,e),f=Uo(t,typeof e=="string",s),h=e!==a.Fragment?{...f,...d,ref:n}:{},{children:u}=t,m=a.useMemo(()=>wt(u)?u.get():u,[u]);return a.createElement(e,{...h,children:m})}function Zo({scrapeMotionValuesFromProps:e,createRenderState:t},n,r,o){return{latestValues:es(n,r,o,e),renderState:t()}}function es(e,t,n,r){const o={},s=r(e,{});for(const m in s)o[m]=Rn(s[m]);let{initial:i,animate:c}=e;const d=bt(e),f=Ln(e);t&&f&&!d&&e.inherit!==!1&&(i===void 0&&(i=t.initial),c===void 0&&(c=t.animate));let h=n?n.initial===!1:!1;h=h||i===!1;const u=h?c:i;if(u&&typeof u!="boolean"&&!_t(u)){const m=Array.isArray(u)?u:[u];for(let p=0;p<m.length;p++){const g=kn(e,m[p]);if(g){const{transitionEnd:y,transition:x,...b}=g;for(const v in b){let w=b[v];if(Array.isArray(w)){const j=h?w.length-1:0;w=w[j]}w!==null&&(o[v]=w)}for(const v in y)o[v]=y[v]}}}return o}const nn=e=>(t,n)=>{const r=a.useContext(Pe),o=a.useContext(Ue),s=()=>Zo(e,t,r,o);return n?s():$o(s)},ts=nn({scrapeMotionValuesFromProps:Tn,createRenderState:ze}),ns=nn({scrapeMotionValuesFromProps:In,createRenderState:tn}),rs=Symbol.for("motionComponentSymbol");function os(e,t,n){const r=a.useRef(n);a.useInsertionEffect(()=>{r.current=n});const o=a.useRef(null);return a.useCallback(s=>{s&&e.onMount?.(s),t&&(s?t.mount(s):t.unmount());const i=r.current;if(typeof i=="function")if(s){const c=i(s);typeof c=="function"&&(o.current=c)}else o.current?(o.current(),o.current=null):i(s);else i&&(i.current=s)},[t])}const rn=a.createContext({});function te(e){return e&&typeof e=="object"&&Object.prototype.hasOwnProperty.call(e,"current")}function ss(e,t,n,r,o,s){const{visualElement:i}=a.useContext(Pe),c=a.useContext(Xt),d=a.useContext(Ue),f=a.useContext(Jt).reducedMotion,h=a.useRef(null);r=r||c.renderer,!h.current&&r&&(h.current=r(e,{visualState:t,parent:i,props:n,presenceContext:d,blockInitialAnimation:d?d.initial===!1:!1,reducedMotionConfig:f,isSVG:s}));const u=h.current,m=a.useContext(rn);u&&!u.projection&&o&&(u.type==="html"||u.type==="svg")&&is(h.current,n,o,m);const p=a.useRef(!1);a.useInsertionEffect(()=>{u&&p.current&&u.update(n,d)});const g=n[Mn],y=a.useRef(!!g&&!window.MotionHandoffIsComplete?.(g)&&window.MotionHasOptimisedAnimation?.(g));return Vo(()=>{u&&(p.current=!0,window.MotionIsMounted=!0,u.updateFeatures(),u.scheduleRenderMicrotask(),y.current&&u.animationState&&u.animationState.animateChanges())}),a.useEffect(()=>{u&&(!y.current&&u.animationState&&u.animationState.animateChanges(),y.current&&(queueMicrotask(()=>{window.MotionHandoffMarkAsComplete?.(g)}),y.current=!1),u.enteringChildren=void 0)}),u}function is(e,t,n,r){const{layoutId:o,layout:s,drag:i,dragConstraints:c,layoutScroll:d,layoutRoot:f,layoutCrossfade:h}=t;e.projection=new n(e.latestValues,t["data-framer-portal-id"]?void 0:on(e.parent)),e.projection.setOptions({layoutId:o,layout:s,alwaysMeasureLayout:!!i||c&&te(c),visualElement:e,animationType:typeof s=="string"?s:"both",initialPromotionConfig:r,crossfade:h,layoutScroll:d,layoutRoot:f})}function on(e){if(e)return e.options.allowProjection!==!1?e.projection:on(e.parent)}function Re(e,{forwardMotionProps:t=!1,type:n}={},r,o){r&&Wo(r);const s=n?n==="svg":Ge(e),i=s?ns:ts;function c(f,h){let u;const m={...a.useContext(Jt),...f,layoutId:as(f)},{isStatic:p}=m,g=Go(f),y=i(f,p);if(!p&&Yt){ls();const x=cs(m);u=x.MeasureLayout,g.visualElement=ss(e,y,m,o,x.ProjectionNode,s)}return l.jsxs(Pe.Provider,{value:g,children:[u&&g.visualElement?l.jsx(u,{visualElement:g.visualElement,...m}):null,Qo(e,f,os(y,g.visualElement,h),y,p,t,s)]})}c.displayName=`motion.${typeof e=="string"?e:`create(${e.displayName??e.name??""})`}`;const d=a.forwardRef(c);return d[rs]=e,d}function as({layoutId:e}){const t=a.useContext(qt).id;return t&&e!==void 0?t+"-"+e:e}function ls(e,t){a.useContext(Xt).strict}function cs(e){const t=Qt(),{drag:n,layout:r}=t;if(!n&&!r)return{};const o={...n,...r};return{MeasureLayout:n?.isEnabled(e)||r?.isEnabled(e)?o.MeasureLayout:void 0,ProjectionNode:o.ProjectionNode}}function us(e,t){if(typeof Proxy>"u")return Re;const n=new Map,r=(s,i)=>Re(s,i,e,t),o=(s,i)=>r(s,i);return new Proxy(o,{get:(s,i)=>i==="create"?r:(n.has(i)||n.set(i,Re(i,void 0,e,t)),n.get(i))})}const ds=(e,t)=>t.isSVG??Ge(e)?new Nn(t):new Dn(t,{allowProjection:e!==a.Fragment});class hs extends O{constructor(t){super(t),t.animationState||(t.animationState=An(t))}updateAnimationControlsSubscription(){const{animate:t}=this.node.getProps();_t(t)&&(this.unmountControls=t.subscribe(this.node))}mount(){this.updateAnimationControlsSubscription()}update(){const{animate:t}=this.node.getProps(),{animate:n}=this.node.prevProps||{};t!==n&&this.updateAnimationControlsSubscription()}unmount(){this.node.animationState.reset(),this.unmountControls?.()}}let fs=0;class ms extends O{constructor(){super(...arguments),this.id=fs++}update(){if(!this.node.presenceContext)return;const{isPresent:t,onExitComplete:n}=this.node.presenceContext,{isPresent:r}=this.node.prevPresenceContext||{};if(!this.node.animationState||t===r)return;const o=this.node.animationState.setActive("exit",!t);n&&!t&&o.then(()=>{n(this.id)})}mount(){const{register:t,onExitComplete:n}=this.node.presenceContext||{};n&&n(this.id),t&&(this.unmount=t(this.id))}unmount(){}}const ps={animation:{Feature:hs},exit:{Feature:ms}};function le(e){return{point:{x:e.pageX,y:e.pageY}}}const gs=e=>t=>Et(t)&&e(t,le(t));function ne(e,t,n,r){return ye(e,t,gs(n),r)}const sn=({current:e})=>e?e.ownerDocument.defaultView:null,at=new Set(["auto","scroll"]);class an{constructor(t,n,{transformPagePoint:r,contextWindow:o=window,dragSnapToOrigin:s=!1,distanceThreshold:i=3,element:c}={}){if(this.startEvent=null,this.lastMoveEvent=null,this.lastMoveEventInfo=null,this.handlers={},this.contextWindow=window,this.scrollPositions=new Map,this.removeScrollListeners=null,this.onElementScroll=p=>{this.handleScroll(p.target)},this.onWindowScroll=()=>{this.handleScroll(window)},this.updatePoint=()=>{if(!(this.lastMoveEvent&&this.lastMoveEventInfo))return;const p=ke(this.lastMoveEventInfo,this.history),g=this.startEvent!==null,y=$n(p.offset,{x:0,y:0})>=this.distanceThreshold;if(!g&&!y)return;const{point:x}=p,{timestamp:b}=Ye;this.history.push({...x,timestamp:b});const{onStart:v,onMove:w}=this.handlers;g||(v&&v(this.lastMoveEvent,p),this.startEvent=this.lastMoveEvent),w&&w(this.lastMoveEvent,p)},this.handlePointerMove=(p,g)=>{this.lastMoveEvent=p,this.lastMoveEventInfo=Le(g,this.transformPagePoint),A.update(this.updatePoint,!0)},this.handlePointerUp=(p,g)=>{this.end();const{onEnd:y,onSessionEnd:x,resumeAnimation:b}=this.handlers;if((this.dragSnapToOrigin||!this.startEvent)&&b&&b(),!(this.lastMoveEvent&&this.lastMoveEventInfo))return;const v=ke(p.type==="pointercancel"?this.lastMoveEventInfo:Le(g,this.transformPagePoint),this.history);this.startEvent&&y&&y(p,v),x&&x(p,v)},!Et(t))return;this.dragSnapToOrigin=s,this.handlers=n,this.transformPagePoint=r,this.distanceThreshold=i,this.contextWindow=o||window;const d=le(t),f=Le(d,this.transformPagePoint),{point:h}=f,{timestamp:u}=Ye;this.history=[{...h,timestamp:u}];const{onSessionStart:m}=n;m&&m(t,ke(f,this.history)),this.removeListeners=Pt(ne(this.contextWindow,"pointermove",this.handlePointerMove),ne(this.contextWindow,"pointerup",this.handlePointerUp),ne(this.contextWindow,"pointercancel",this.handlePointerUp)),c&&this.startScrollTracking(c)}startScrollTracking(t){let n=t.parentElement;for(;n;){const r=getComputedStyle(n);(at.has(r.overflowX)||at.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(t){const n=this.scrollPositions.get(t);if(!n)return;const r=t===window,o=r?{x:window.scrollX,y:window.scrollY}:{x:t.scrollLeft,y:t.scrollTop},s={x:o.x-n.x,y:o.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(t,o),A.update(this.updatePoint,!0))}updateHandlers(t){this.handlers=t}end(){this.removeListeners&&this.removeListeners(),this.removeScrollListeners&&this.removeScrollListeners(),this.scrollPositions.clear(),Vn(this.updatePoint)}}function Le(e,t){return t?{point:t(e.point)}:e}function lt(e,t){return{x:e.x-t.x,y:e.y-t.y}}function ke({point:e},t){return{point:e,delta:lt(e,ln(t)),offset:lt(e,vs(t)),velocity:ys(t,.1)}}function vs(e){return e[0]}function ln(e){return e[e.length-1]}function ys(e,t){if(e.length<2)return{x:0,y:0};let n=e.length-1,r=null;const o=ln(e);for(;n>=0&&(r=e[n],!(o.timestamp-r.timestamp>Fn(t)));)n--;if(!r)return{x:0,y:0};const s=On(o.timestamp-r.timestamp);if(s===0)return{x:0,y:0};const i={x:(o.x-r.x)/s,y:(o.y-r.y)/s};return i.x===1/0&&(i.x=0),i.y===1/0&&(i.y=0),i}function xs(e,{min:t,max:n},r){return t!==void 0&&e<t?e=r?xe(t,e,r.min):Math.max(e,t):n!==void 0&&e>n&&(e=r?xe(n,e,r.max):Math.min(e,n)),e}function ct(e,t,n){return{min:t!==void 0?e.min+t:void 0,max:n!==void 0?e.max+n-(e.max-e.min):void 0}}function bs(e,{top:t,left:n,bottom:r,right:o}){return{x:ct(e.x,n,o),y:ct(e.y,t,r)}}function ut(e,t){let n=t.min-e.min,r=t.max-e.max;return t.max-t.min<e.max-e.min&&([n,r]=[r,n]),{min:n,max:r}}function ws(e,t){return{x:ut(e.x,t.x),y:ut(e.y,t.y)}}function _s(e,t){let n=.5;const r=Me(e),o=Me(t);return o>r?n=Je(t.min,t.max-r,e.min):r>o&&(n=Je(e.min,e.max-o,t.min)),Wn(0,1,n)}function Es(e,t){const n={};return t.min!==void 0&&(n.min=t.min-e.min),t.max!==void 0&&(n.max=t.max-e.min),n}const Ae=.35;function Ps(e=Ae){return e===!1?e=0:e===!0&&(e=Ae),{x:dt(e,"left","right"),y:dt(e,"top","bottom")}}function dt(e,t,n){return{min:ht(e,t),max:ht(e,n)}}function ht(e,t){return typeof e=="number"?e:e[t]||0}const Ss=new WeakMap;class Cs{constructor(t){this.openDragLock=null,this.isDragging=!1,this.currentDirection=null,this.originPoint={x:0,y:0},this.constraints=!1,this.hasMutatedConstraints=!1,this.elastic=Bn(),this.latestPointerEvent=null,this.latestPanInfo=null,this.visualElement=t}start(t,{snapToCursor:n=!1,distanceThreshold:r}={}){const{presenceContext:o}=this.visualElement;if(o&&o.isPresent===!1)return;const s=u=>{n?(this.stopAnimation(),this.snapToCursor(le(u).point)):this.pauseAnimation()},i=(u,m)=>{this.stopAnimation();const{drag:p,dragPropagation:g,onDragStart:y}=this.getProps();if(p&&!g&&(this.openDragLock&&this.openDragLock(),this.openDragLock=Kn(p),!this.openDragLock))return;this.latestPointerEvent=u,this.latestPanInfo=m,this.isDragging=!0,this.currentDirection=null,this.resolveConstraints(),this.visualElement.projection&&(this.visualElement.projection.isAnimationBlocked=!0,this.visualElement.projection.target=void 0),D(b=>{let v=this.getAxisMotionValue(b).get()||0;if(qn.test(v)){const{projection:w}=this.visualElement;if(w&&w.layout){const j=w.layout.layoutBox[b];j&&(v=Me(j)*(parseFloat(v)/100))}}this.originPoint[b]=v}),y&&A.postRender(()=>y(u,m)),Xe(this.visualElement,"transform");const{animationState:x}=this.visualElement;x&&x.setActive("whileDrag",!0)},c=(u,m)=>{this.latestPointerEvent=u,this.latestPanInfo=m;const{dragPropagation:p,dragDirectionLock:g,onDirectionLock:y,onDrag:x}=this.getProps();if(!p&&!this.openDragLock)return;const{offset:b}=m;if(g&&this.currentDirection===null){this.currentDirection=js(b),this.currentDirection!==null&&y&&y(this.currentDirection);return}this.updateAxis("x",m.point,b),this.updateAxis("y",m.point,b),this.visualElement.render(),x&&x(u,m)},d=(u,m)=>{this.latestPointerEvent=u,this.latestPanInfo=m,this.stop(u,m),this.latestPointerEvent=null,this.latestPanInfo=null},f=()=>D(u=>this.getAnimationState(u)==="paused"&&this.getAxisMotionValue(u).animation?.play()),{dragSnapToOrigin:h}=this.getProps();this.panSession=new an(t,{onSessionStart:s,onStart:i,onMove:c,onSessionEnd:d,resumeAnimation:f},{transformPagePoint:this.visualElement.getTransformPagePoint(),dragSnapToOrigin:h,distanceThreshold:r,contextWindow:sn(this.visualElement),element:this.visualElement.current})}stop(t,n){const r=t||this.latestPointerEvent,o=n||this.latestPanInfo,s=this.isDragging;if(this.cancel(),!s||!o||!r)return;const{velocity:i}=o;this.startAnimation(i);const{onDragEnd:c}=this.getProps();c&&A.postRender(()=>c(r,o))}cancel(){this.isDragging=!1;const{projection:t,animationState:n}=this.visualElement;t&&(t.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(t,n,r){const{drag:o}=this.getProps();if(!r||!de(t,o,this.currentDirection))return;const s=this.getAxisMotionValue(t);let i=this.originPoint[t]+r[t];this.constraints&&this.constraints[t]&&(i=xs(i,this.constraints[t],this.elastic[t])),s.set(i)}resolveConstraints(){const{dragConstraints:t,dragElastic:n}=this.getProps(),r=this.visualElement.projection&&!this.visualElement.projection.layout?this.visualElement.projection.measure(!1):this.visualElement.projection?.layout,o=this.constraints;t&&te(t)?this.constraints||(this.constraints=this.resolveRefConstraints()):t&&r?this.constraints=bs(r.layoutBox,t):this.constraints=!1,this.elastic=Ps(n),o!==this.constraints&&r&&this.constraints&&!this.hasMutatedConstraints&&D(s=>{this.constraints!==!1&&this.getAxisMotionValue(s)&&(this.constraints[s]=Es(r.layoutBox[s],this.constraints[s]))})}resolveRefConstraints(){const{dragConstraints:t,onMeasureDragConstraints:n}=this.getProps();if(!t||!te(t))return!1;const r=t.current,{projection:o}=this.visualElement;if(!o||!o.layout)return!1;const s=Hn(r,o.root,this.visualElement.getTransformPagePoint());let i=ws(o.layout.layoutBox,s);if(n){const c=n(Un(i));this.hasMutatedConstraints=!!c,c&&(i=zn(c))}return i}startAnimation(t){const{drag:n,dragMomentum:r,dragElastic:o,dragTransition:s,dragSnapToOrigin:i,onDragTransitionEnd:c}=this.getProps(),d=this.constraints||{},f=D(h=>{if(!de(h,n,this.currentDirection))return;let u=d&&d[h]||{};i&&(u={min:0,max:0});const m=o?200:1e6,p=o?40:1e7,g={type:"inertia",velocity:r?t[h]:0,bounceStiffness:m,bounceDamping:p,timeConstant:750,restDelta:1,restSpeed:10,...s,...u};return this.startAxisValueAnimation(h,g)});return Promise.all(f).then(c)}startAxisValueAnimation(t,n){const r=this.getAxisMotionValue(t);return Xe(this.visualElement,t),r.start(Gn(t,r,0,n,this.visualElement,!1))}stopAnimation(){D(t=>this.getAxisMotionValue(t).stop())}pauseAnimation(){D(t=>this.getAxisMotionValue(t).animation?.pause())}getAnimationState(t){return this.getAxisMotionValue(t).animation?.state}getAxisMotionValue(t){const n=`_drag${t.toUpperCase()}`,r=this.visualElement.getProps(),o=r[n];return o||this.visualElement.getValue(t,(r.initial?r.initial[t]:void 0)||0)}snapToCursor(t){D(n=>{const{drag:r}=this.getProps();if(!de(n,r,this.currentDirection))return;const{projection:o}=this.visualElement,s=this.getAxisMotionValue(n);if(o&&o.layout){const{min:i,max:c}=o.layout.layoutBox[n],d=s.get()||0;s.set(t[n]-xe(i,c,.5)+d)}})}scalePositionWithinConstraints(){if(!this.visualElement.current)return;const{drag:t,dragConstraints:n}=this.getProps(),{projection:r}=this.visualElement;if(!te(n)||!r||!this.constraints)return;this.stopAnimation();const o={x:0,y:0};D(i=>{const c=this.getAxisMotionValue(i);if(c&&this.constraints!==!1){const d=c.get();o[i]=_s({min:d,max:d},this.constraints[i])}});const{transformTemplate:s}=this.visualElement.getProps();this.visualElement.current.style.transform=s?s({},""):"none",r.root&&r.root.updateScroll(),r.updateLayout(),this.resolveConstraints(),D(i=>{if(!de(i,t,null))return;const c=this.getAxisMotionValue(i),{min:d,max:f}=this.constraints[i];c.set(xe(d,f,o[i]))})}addListeners(){if(!this.visualElement.current)return;Ss.set(this.visualElement,this);const t=this.visualElement.current,n=ne(t,"pointerdown",d=>{const{drag:f,dragListener:h=!0}=this.getProps(),u=d.target,m=u!==t&&Yn(u);f&&h&&!m&&this.start(d)}),r=()=>{const{dragConstraints:d}=this.getProps();te(d)&&d.current&&(this.constraints=this.resolveRefConstraints())},{projection:o}=this.visualElement,s=o.addEventListener("measure",r);o&&!o.layout&&(o.root&&o.root.updateScroll(),o.updateLayout()),A.read(r);const i=ye(window,"resize",()=>this.scalePositionWithinConstraints()),c=o.addEventListener("didUpdate",(({delta:d,hasLayoutChanged:f})=>{this.isDragging&&f&&(D(h=>{const u=this.getAxisMotionValue(h);u&&(this.originPoint[h]+=d[h].translate,u.set(u.get()+d[h].translate))}),this.visualElement.render())}));return()=>{i(),n(),s(),c&&c()}}getProps(){const t=this.visualElement.getProps(),{drag:n=!1,dragDirectionLock:r=!1,dragPropagation:o=!1,dragConstraints:s=!1,dragElastic:i=Ae,dragMomentum:c=!0}=t;return{...t,drag:n,dragDirectionLock:r,dragPropagation:o,dragConstraints:s,dragElastic:i,dragMomentum:c}}}function de(e,t,n){return(t===!0||t===e)&&(n===null||n===e)}function js(e,t=10){let n=null;return Math.abs(e.y)>t?n="y":Math.abs(e.x)>t&&(n="x"),n}class Rs extends O{constructor(t){super(t),this.removeGroupControls=fe,this.removeListeners=fe,this.controls=new Cs(t)}mount(){const{dragControls:t}=this.node.getProps();t&&(this.removeGroupControls=t.subscribe(this.controls)),this.removeListeners=this.controls.addListeners()||fe}update(){const{dragControls:t}=this.node.getProps(),{dragControls:n}=this.node.prevProps||{};t!==n&&(this.removeGroupControls(),t&&(this.removeGroupControls=t.subscribe(this.controls)))}unmount(){this.removeGroupControls(),this.removeListeners(),this.controls.endPanSession()}}const ft=e=>(t,n)=>{e&&A.postRender(()=>e(t,n))};class Ls extends O{constructor(){super(...arguments),this.removePointerDownListener=fe}onPointerDown(t){this.session=new an(t,this.createPanHandlers(),{transformPagePoint:this.node.getTransformPagePoint(),contextWindow:sn(this.node)})}createPanHandlers(){const{onPanSessionStart:t,onPanStart:n,onPan:r,onPanEnd:o}=this.node.getProps();return{onSessionStart:ft(t),onStart:ft(n),onMove:r,onEnd:(s,i)=>{delete this.session,o&&A.postRender(()=>o(s,i))}}}mount(){this.removePointerDownListener=ne(this.node.current,"pointerdown",t=>this.onPointerDown(t))}update(){this.session&&this.session.updateHandlers(this.createPanHandlers())}unmount(){this.removePointerDownListener(),this.session&&this.session.end()}}let Te=!1;class ks extends a.Component{componentDidMount(){const{visualElement:t,layoutGroup:n,switchLayoutGroup:r,layoutId:o}=this.props,{projection:s}=t;s&&(n.group&&n.group.add(s),r&&r.register&&o&&r.register(s),Te&&s.root.didUpdate(),s.addEventListener("animationComplete",()=>{this.safeToRemove()}),s.setOptions({...s.options,onExitComplete:()=>this.safeToRemove()})),Jn.hasEverUpdated=!0}getSnapshotBeforeUpdate(t){const{layoutDependency:n,visualElement:r,drag:o,isPresent:s}=this.props,{projection:i}=r;return i&&(i.isPresent=s,Te=!0,o||t.layoutDependency!==n||n===void 0||t.isPresent!==s?i.willUpdate():this.safeToRemove(),t.isPresent!==s&&(s?i.promote():i.relegate()||A.postRender(()=>{const c=i.getStack();(!c||!c.members.length)&&this.safeToRemove()}))),null}componentDidUpdate(){const{projection:t}=this.props.visualElement;t&&(t.root.didUpdate(),Xn.postRender(()=>{!t.currentAnimation&&t.isLead()&&this.safeToRemove()}))}componentWillUnmount(){const{visualElement:t,layoutGroup:n,switchLayoutGroup:r}=this.props,{projection:o}=t;Te=!0,o&&(o.scheduleCheckAfterUnmount(),n&&n.group&&n.group.remove(o),r&&r.deregister&&r.deregister(o))}safeToRemove(){const{safeToRemove:t}=this.props;t&&t()}render(){return null}}function cn(e){const[t,n]=Fo(),r=a.useContext(qt);return l.jsx(ks,{...e,layoutGroup:r,switchLayoutGroup:a.useContext(rn),isPresent:t,safeToRemove:n})}const Ts={pan:{Feature:Ls},drag:{Feature:Rs,ProjectionNode:St,MeasureLayout:cn}};function mt(e,t,n){const{props:r}=e;e.animationState&&r.whileHover&&e.animationState.setActive("whileHover",n==="Start");const o="onHover"+n,s=r[o];s&&A.postRender(()=>s(t,le(t)))}class Is extends O{mount(){const{current:t}=this.node;t&&(this.unmount=Qn(t,(n,r)=>(mt(this.node,r,"Start"),o=>mt(this.node,o,"End"))))}unmount(){}}class Ms extends O{constructor(){super(...arguments),this.isActive=!1}onFocus(){let t=!1;try{t=this.node.current.matches(":focus-visible")}catch{t=!0}!t||!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=Pt(ye(this.node.current,"focus",()=>this.onFocus()),ye(this.node.current,"blur",()=>this.onBlur()))}unmount(){}}function pt(e,t,n){const{props:r}=e;if(e.current instanceof HTMLButtonElement&&e.current.disabled)return;e.animationState&&r.whileTap&&e.animationState.setActive("whileTap",n==="Start");const o="onTap"+(n==="End"?"":n),s=r[o];s&&A.postRender(()=>s(t,le(t)))}class Ns extends O{mount(){const{current:t}=this.node;t&&(this.unmount=Zn(t,(n,r)=>(pt(this.node,r,"Start"),(o,{success:s})=>pt(this.node,o,s?"End":"Cancel")),{useGlobalTarget:this.node.props.globalTapTarget}))}unmount(){}}const $e=new WeakMap,Ie=new WeakMap,Ds=e=>{const t=$e.get(e.target);t&&t(e)},As=e=>{e.forEach(Ds)};function $s({root:e,...t}){const n=e||document;Ie.has(n)||Ie.set(n,{});const r=Ie.get(n),o=JSON.stringify(t);return r[o]||(r[o]=new IntersectionObserver(As,{root:e,...t})),r[o]}function Vs(e,t,n){const r=$s(t);return $e.set(e,n),r.observe(e),()=>{$e.delete(e),r.unobserve(e)}}const Fs={some:0,all:1};class Os extends O{constructor(){super(...arguments),this.hasEnteredView=!1,this.isInView=!1}startObserver(){this.unmount();const{viewport:t={}}=this.node.getProps(),{root:n,margin:r,amount:o="some",once:s}=t,i={root:n?n.current:void 0,rootMargin:r,threshold:typeof o=="number"?o:Fs[o]},c=d=>{const{isIntersecting:f}=d;if(this.isInView===f||(this.isInView=f,s&&!f&&this.hasEnteredView))return;f&&(this.hasEnteredView=!0),this.node.animationState&&this.node.animationState.setActive("whileInView",f);const{onViewportEnter:h,onViewportLeave:u}=this.node.getProps(),m=f?h:u;m&&m(d)};return Vs(this.node.current,i,c)}mount(){this.startObserver()}update(){if(typeof IntersectionObserver>"u")return;const{props:t,prevProps:n}=this.node;["amount","margin","root"].some(Ws(t,n))&&this.startObserver()}unmount(){}}function Ws({viewport:e={}},{viewport:t={}}={}){return n=>e[n]!==t[n]}const Bs={inView:{Feature:Os},tap:{Feature:Ns},focus:{Feature:Ms},hover:{Feature:Is}},Hs={layout:{ProjectionNode:St,MeasureLayout:cn}},Us={...ps,...Bs,...Ts,...Hs},_=us(Us,ds),zs="_header_o0ezk_1",Gs="_scrolled_o0ezk_11",Ks="_nav_o0ezk_17",qs="_logo_o0ezk_24",Ys="_logoText_o0ezk_34",Js="_logoAccent_o0ezk_38",Xs="_navLinks_o0ezk_42",Qs="_navLink_o0ezk_42",Zs="_active_o0ezk_64",ei="_activeIndicator_o0ezk_69",ti="_actions_o0ezk_80",ni="_langToggle_o0ezk_86",ri="_langDivider_o0ezk_106",oi="_activeLang_o0ezk_110",si="_mobileMenuBtn_o0ezk_114",ii="_hamburger_o0ezk_124",ai="_open_o0ezk_155",S={header:zs,scrolled:Gs,nav:Ks,logo:qs,logoText:Ys,logoAccent:Js,navLinks:Xs,navLink:Qs,active:Zs,activeIndicator:ei,actions:ti,langToggle:ni,langDivider:ri,activeLang:oi,mobileMenuBtn:si,hamburger:ii,open:ai};function li(){const{t:e,language:t,setLanguage:n}=X(),r=W(),[o,s]=a.useState(!1),[i,c]=a.useState(!1);a.useEffect(()=>{const h=()=>{s(window.scrollY>20)};return window.addEventListener("scroll",h,{passive:!0}),()=>window.removeEventListener("scroll",h)},[]),a.useEffect(()=>{c(!1)},[r.pathname]);const d=[{path:"/",label:e.nav.home},{path:"/about",label:e.nav.about},{path:"/contact",label:e.nav.contact}],f=()=>{n(t==="de"?"en":"de")};return l.jsx(_.header,{className:`${S.header} ${o?S.scrolled:""}`,initial:{y:-100},animate:{y:0},transition:{duration:.5,ease:"easeOut"},children:l.jsxs("nav",{className:`${S.nav} container`,children:[l.jsxs(q,{to:"/",className:S.logo,children:[l.jsx("span",{className:S.logoText,children:"Ragusa"}),l.jsx("span",{className:S.logoAccent,children:"IT"})]}),l.jsx("div",{className:`${S.navLinks} ${i?S.open:""}`,children:d.map(h=>l.jsxs(q,{to:h.path,className:`${S.navLink} ${r.pathname===h.path?S.active:""}`,children:[h.label,r.pathname===h.path&&l.jsx(_.div,{className:S.activeIndicator,layoutId:"activeNav",transition:{type:"spring",stiffness:380,damping:30}})]},h.path))}),l.jsxs("div",{className:S.actions,children:[l.jsxs("button",{onClick:f,className:S.langToggle,"aria-label":`Switch to ${t==="de"?"English":"German"}`,children:[l.jsx("span",{className:t==="de"?S.activeLang:"",children:"DE"}),l.jsx("span",{className:S.langDivider,children:"/"}),l.jsx("span",{className:t==="en"?S.activeLang:"",children:"EN"})]}),l.jsx("button",{className:S.mobileMenuBtn,onClick:()=>c(!i),"aria-label":"Toggle menu","aria-expanded":i,children:l.jsx("span",{className:`${S.hamburger} ${i?S.open:""}`})})]})]})})}const ci="_footer_ala36_1",ui="_content_ala36_8",di="_brand_ala36_16",hi="_logo_ala36_22",fi="_logoText_ala36_30",mi="_logoAccent_ala36_34",pi="_copyright_ala36_38",gi="_links_ala36_44",vi="_socialLink_ala36_50",yi="_credit_ala36_68",xi="_heart_ala36_74",k={footer:ci,content:ui,brand:di,logo:hi,logoText:fi,logoAccent:mi,copyright:pi,links:gi,socialLink:vi,credit:yi,heart:xi};function bi(){const{t:e}=X(),t=new Date().getFullYear();return l.jsx("footer",{className:k.footer,children:l.jsxs("div",{className:`${k.content} container`,children:[l.jsxs("div",{className:k.brand,children:[l.jsxs("span",{className:k.logo,children:[l.jsx("span",{className:k.logoText,children:"Ragusa"}),l.jsx("span",{className:k.logoAccent,children:"IT"})]}),l.jsx("p",{className:k.copyright,children:e.footer.copyright.replace("{year}",String(t))})]}),l.jsx("div",{className:k.links,children:l.jsx("a",{href:"https://github.com/ragusa-it",target:"_blank",rel:"noopener noreferrer",className:k.socialLink,"aria-label":"GitHub",children:l.jsx("svg",{viewBox:"0 0 24 24",width:"24",height:"24",fill:"currentColor","aria-hidden":"true",children:l.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"})})})}),l.jsx("div",{className:k.credit,children:l.jsxs("p",{children:[e.footer.madeWith," ",l.jsx("span",{className:k.heart,children:"React"})," ",e.footer.and," ",l.jsx("span",{className:k.heart,children:"TypeScript"})]})})]})})}const wi="_cursor_1b430_1",_i="_cursorDot_1b430_19",Ei="_pointer_1b430_31",Pi="_clicking_1b430_38",Si="_hidden_1b430_44",K={cursor:wi,cursorDot:_i,pointer:Ei,clicking:Pi,hidden:Si};function Ci(){const[e,t]=a.useState({x:0,y:0}),[n,r]=a.useState(!1),[o,s]=a.useState(!0),[i,c]=a.useState(!1),d=a.useCallback(p=>{t({x:p.clientX,y:p.clientY}),s(!1);const g=p.target,y=g.tagName==="A"||g.tagName==="BUTTON"||!!g.closest("a")||!!g.closest("button")||window.getComputedStyle(g).cursor==="pointer";r(y)},[]),f=a.useCallback(()=>c(!0),[]),h=a.useCallback(()=>c(!1),[]),u=a.useCallback(()=>s(!0),[]),m=a.useCallback(()=>s(!1),[]);return a.useEffect(()=>{if(!window.matchMedia("(hover: none)").matches)return document.addEventListener("mousemove",d),document.addEventListener("mousedown",f),document.addEventListener("mouseup",h),document.addEventListener("mouseleave",u),document.addEventListener("mouseenter",m),()=>{document.removeEventListener("mousemove",d),document.removeEventListener("mousedown",f),document.removeEventListener("mouseup",h),document.removeEventListener("mouseleave",u),document.removeEventListener("mouseenter",m)}},[d,f,h,u,m]),typeof window<"u"&&window.matchMedia("(hover: none)").matches?null:l.jsxs(l.Fragment,{children:[l.jsx("div",{className:`${K.cursor} ${n?K.pointer:""} ${o?K.hidden:""} ${i?K.clicking:""}`,style:{left:e.x,top:e.y}}),l.jsx("div",{className:`${K.cursorDot} ${o?K.hidden:""}`,style:{left:e.x,top:e.y}})]})}function ji({words:e,typingSpeed:t=100,deletingSpeed:n=50,pauseDuration:r=2e3}){const[o,s]=a.useState(0),[i,c]=a.useState(""),[d,f]=a.useState(!1),[h,u]=a.useState(!1),m=a.useCallback(()=>{const p=e[o];h||(d?(c(p.substring(0,i.length-1)),i.length===0&&(f(!1),s(g=>(g+1)%e.length))):(c(p.substring(0,i.length+1)),i===p&&(u(!0),setTimeout(()=>{u(!1),f(!0)},r))))},[i,o,d,h,e,r]);return a.useEffect(()=>{const g=setTimeout(m,d?n:t);return()=>clearTimeout(g)},[m,d,t,n]),{text:i,isTyping:!d&&!h,isDeleting:d,currentWordIndex:o}}const Ri="_container_kqnuj_1",Li={container:Ri};function ki(){const e=a.useRef(null);return yt(t=>{e.current&&(e.current.rotation.x=t.clock.elapsedTime*.1,e.current.rotation.y=t.clock.elapsedTime*.15)}),l.jsx(bn,{speed:2,rotationIntensity:.5,floatIntensity:1,children:l.jsxs("mesh",{ref:e,scale:2.5,children:[l.jsx("icosahedronGeometry",{args:[1,1]}),l.jsx(wn,{color:"#7FD998",emissive:"#004D2A",emissiveIntensity:.3,roughness:.4,metalness:.8,distort:.3,speed:2})]})})}function Ti(){const t=a.useMemo(()=>{const r=new Float32Array(300);for(let o=0;o<100;o++)r[o*3]=(Math.random()-.5)*20,r[o*3+1]=(Math.random()-.5)*20,r[o*3+2]=(Math.random()-.5)*20;return r},[]),n=a.useRef(null);return yt(r=>{n.current&&(n.current.rotation.y=r.clock.elapsedTime*.02)}),l.jsxs("points",{ref:n,children:[l.jsx("bufferGeometry",{children:l.jsx("bufferAttribute",{attach:"attributes-position",args:[t,3]})}),l.jsx("pointsMaterial",{size:.05,color:"#7FD998",transparent:!0,opacity:.6,sizeAttenuation:!0})]})}function Ii(){return l.jsx("div",{className:Li.container,children:l.jsxs(xn,{camera:{position:[0,0,8],fov:45},dpr:[1,2],gl:{antialias:!0,alpha:!0},children:[l.jsx("ambientLight",{intensity:.5}),l.jsx("directionalLight",{position:[10,10,5],intensity:1}),l.jsx("pointLight",{position:[-10,-10,-5],intensity:.5,color:"#7FD998"}),l.jsx(ki,{}),l.jsx(Ti,{})]})})}const Mi="_button_yjd5k_1",Ni="_sm_yjd5k_23",Di="_md_yjd5k_28",Ai="_lg_yjd5k_33",$i="_primary_yjd5k_39",Vi="_secondary_yjd5k_49",Fi="_outline_yjd5k_58",Oi="_loader_yjd5k_69",Wi="_spin_yjd5k_1",he={button:Mi,sm:Ni,md:Di,lg:Ai,primary:$i,secondary:Vi,outline:Fi,loader:Oi,spin:Wi};function Ve({variant:e="primary",size:t="md",children:n,isLoading:r,disabled:o,className:s,type:i="button",onClick:c}){return l.jsx(_.button,{type:i,className:`${he.button} ${he[e]} ${he[t]} ${s||""}`,disabled:o||r,whileHover:{scale:1.02},whileTap:{scale:.98},onClick:c,children:r?l.jsx("span",{className:he.loader}):n})}const Bi="_card_mghl3_1",Hi="_hoverable_mghl3_13",Ui="_icon_mghl3_22",zi="_title_mghl3_39",Gi="_description_mghl3_46",oe={card:Bi,hoverable:Hi,icon:Ui,title:zi,description:Gi};function U({children:e,className:t,hover:n=!0}){return l.jsx(_.div,{className:`${oe.card} ${n?oe.hoverable:""} ${t||""}`,whileHover:n?{y:-4}:void 0,transition:{duration:.2},children:e})}function Ki({children:e}){return l.jsx("div",{className:oe.icon,children:e})}function qi({children:e}){return l.jsx("h3",{className:oe.title,children:e})}function Yi({children:e}){return l.jsx("p",{className:oe.description,children:e})}U.Icon=Ki;U.Title=qi;U.Description=Yi;const Ji="_field_1azqc_1",Xi="_label_1azqc_7",Qi="_input_1azqc_13",Zi="_textarea_1azqc_42",ea="_hasError_1azqc_47",ta="_error_1azqc_55",M={field:Ji,label:Xi,input:Qi,textarea:Zi,hasError:ea,error:ta},ve=a.forwardRef(({label:e,error:t,id:n,className:r,...o},s)=>{const i=n||e.toLowerCase().replace(/\s+/g,"-");return l.jsxs("div",{className:`${M.field} ${t?M.hasError:""} ${r||""}`,children:[l.jsx("label",{htmlFor:i,className:M.label,children:e}),l.jsx("input",{ref:s,id:i,className:M.input,...o}),t&&l.jsx("span",{className:M.error,children:t})]})});ve.displayName="Input";const un=a.forwardRef(({label:e,error:t,id:n,className:r,...o},s)=>{const i=n||e.toLowerCase().replace(/\s+/g,"-");return l.jsxs("div",{className:`${M.field} ${t?M.hasError:""} ${r||""}`,children:[l.jsx("label",{htmlFor:i,className:M.label,children:e}),l.jsx("textarea",{ref:s,id:i,className:`${M.input} ${M.textarea}`,...o}),t&&l.jsx("span",{className:M.error,children:t})]})});un.displayName="Textarea";const na="_hero_17syy_1",ra="_content_17syy_11",oa="_text_17syy_19",sa="_greeting_17syy_24",ia="_title_17syy_33",aa="_tagline_17syy_60",la="_typed_17syy_72",ca="_cursor_17syy_79",ua="_cta_17syy_94",da="_scrollIndicator_17syy_102",ha="_scrollMouse_17syy_110",fa="_scrollWheel_17syy_120",T={hero:na,content:ra,text:oa,greeting:sa,title:ia,tagline:aa,typed:la,cursor:ca,cta:ua,scrollIndicator:da,scrollMouse:ha,scrollWheel:fa};function ma(){const{t:e}=X(),{text:t}=ji({words:e.hero.rotatingWords,typingSpeed:80,deletingSpeed:40,pauseDuration:2500});return l.jsxs("section",{className:T.hero,children:[l.jsx(Ii,{}),l.jsx("div",{className:`${T.content} container`,children:l.jsxs(_.div,{className:T.text,initial:{opacity:0,y:30},animate:{opacity:1,y:0},transition:{duration:.6,ease:"easeOut"},children:[l.jsx(_.p,{className:T.greeting,initial:{opacity:0},animate:{opacity:1},transition:{delay:.2},children:e.hero.greeting}),l.jsx(_.h1,{className:T.title,initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{delay:.3,duration:.5},children:e.hero.company}),l.jsxs(_.div,{className:T.tagline,initial:{opacity:0},animate:{opacity:1},transition:{delay:.5},children:[l.jsx("span",{children:e.hero.tagline}),l.jsxs("span",{className:T.typed,children:[t,l.jsx("span",{className:T.cursor,children:"|"})]})]}),l.jsxs(_.div,{className:T.cta,initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{delay:.7,duration:.5},children:[l.jsx(q,{to:"/contact",children:l.jsx(Ve,{variant:"primary",size:"lg",children:e.hero.cta})}),l.jsx(q,{to:"/about",children:l.jsx(Ve,{variant:"outline",size:"lg",children:e.hero.ctaSecondary})})]})]})}),l.jsx("div",{className:T.scrollIndicator,children:l.jsx(_.div,{className:T.scrollMouse,animate:{y:[0,8,0]},transition:{repeat:1/0,duration:1.5,ease:"easeInOut"},children:l.jsx("span",{className:T.scrollWheel})})})]})}const pa="_services_1bb0v_1",ga="_header_1bb0v_6",va="_title_1bb0v_11",ya="_subtitle_1bb0v_18",xa="_grid_1bb0v_26",ee={services:pa,header:ga,title:va,subtitle:ya,grid:xa},ba={code:l.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[l.jsx("polyline",{points:"16 18 22 12 16 6"}),l.jsx("polyline",{points:"8 6 2 12 8 18"})]}),support:l.jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:l.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:l.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[l.jsx("path",{d:"M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z"}),l.jsx("path",{d:"M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z"})]}),hosting:l.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[l.jsx("rect",{x:"2",y:"2",width:"20",height:"8",rx:"2",ry:"2"}),l.jsx("rect",{x:"2",y:"14",width:"20",height:"8",rx:"2",ry:"2"}),l.jsx("line",{x1:"6",y1:"6",x2:"6.01",y2:"6"}),l.jsx("line",{x1:"6",y1:"18",x2:"6.01",y2:"18"})]})},wa={hidden:{opacity:0},visible:{opacity:1,transition:{staggerChildren:.15}}},_a={hidden:{opacity:0,y:30},visible:{opacity:1,y:0,transition:{duration:.5,ease:[.4,0,.2,1]}}};function Ea(){const{t:e}=X();return l.jsx("section",{className:ee.services,children:l.jsxs("div",{className:"container",children:[l.jsxs(_.div,{className:ee.header,initial:{opacity:0,y:20},whileInView:{opacity:1,y:0},viewport:{once:!0,margin:"-100px"},transition:{duration:.5},children:[l.jsx("h2",{className:ee.title,children:e.services.title}),l.jsx("p",{className:ee.subtitle,children:e.services.subtitle})]}),l.jsx(_.div,{className:ee.grid,variants:wa,initial:"hidden",whileInView:"visible",viewport:{once:!0,margin:"-50px"},children:e.services.items.map((t,n)=>l.jsx(_.div,{variants:_a,children:l.jsxs(U,{children:[l.jsx(U.Icon,{children:ba[t.icon]}),l.jsx(U.Title,{children:t.title}),l.jsx(U.Description,{children:t.description})]})},n))})]})})}function Pa(){return l.jsxs("main",{children:[l.jsx(ma,{}),l.jsx(Ea,{})]})}const Sa="_about_1n62r_1",Ca="_hero_1n62r_6",ja="_title_1n62r_16",Ra="_subtitle_1n62r_22",La="_intro_1n62r_29",ka="_introContent_1n62r_33",Ta="_introText_1n62r_38",Ia="_sectionHeader_1n62r_47",Ma="_skills_1n62r_63",Na="_techGrid_1n62r_68",Da="_techCard_1n62r_76",Aa="_techIcon_1n62r_93",$a="_techName_1n62r_97",Va="_values_1n62r_104",Fa="_valuesGrid_1n62r_108",Oa="_valueCard_1n62r_114",Wa="_valueNumber_1n62r_126",Ba="_valueTitle_1n62r_134",Ha="_valueDescription_1n62r_140",P={about:Sa,hero:Ca,title:ja,subtitle:Ra,intro:La,introContent:ka,introText:Ta,sectionHeader:Ia,skills:Ma,techGrid:Na,techCard:Da,techIcon:Aa,techName:$a,values:Va,valuesGrid:Fa,valueCard:Oa,valueNumber:Wa,valueTitle:Ba,valueDescription:Ha},Ua=[{name:"React",icon:"⚛️"},{name:"TypeScript",icon:"📘"},{name:"Node.js",icon:"🟢"},{name:"Python",icon:"🐍"},{name:"Firebase",icon:"🔥"},{name:"PostgreSQL",icon:"🐘"},{name:"Docker",icon:"🐳"},{name:"Git",icon:"📦"}],gt={hidden:{opacity:0},visible:{opacity:1,transition:{staggerChildren:.1}}},vt={hidden:{opacity:0,y:20},visible:{opacity:1,y:0,transition:{duration:.4}}};function za(){const{t:e}=X();return l.jsxs("main",{className:P.about,children:[l.jsx("section",{className:P.hero,children:l.jsx("div",{className:"container",children:l.jsxs(_.div,{initial:{opacity:0,y:30},animate:{opacity:1,y:0},transition:{duration:.6},children:[l.jsx("h1",{className:P.title,children:e.about.title}),l.jsx("p",{className:P.subtitle,children:e.about.subtitle})]})})}),l.jsx("section",{className:P.intro,children:l.jsx("div",{className:"container",children:l.jsxs(_.div,{className:P.introContent,initial:{opacity:0,y:30},whileInView:{opacity:1,y:0},viewport:{once:!0},transition:{duration:.5},children:[l.jsx("p",{className:P.introText,children:e.about.intro}),l.jsx("p",{className:P.introText,children:e.about.experience})]})})}),l.jsx("section",{className:P.skills,children:l.jsxs("div",{className:"container",children:[l.jsxs(_.div,{className:P.sectionHeader,initial:{opacity:0,y:20},whileInView:{opacity:1,y:0},viewport:{once:!0},transition:{duration:.5},children:[l.jsx("h2",{children:e.about.skills.title}),l.jsx("p",{children:e.about.skills.subtitle})]}),l.jsx(_.div,{className:P.techGrid,variants:gt,initial:"hidden",whileInView:"visible",viewport:{once:!0},children:Ua.map(t=>l.jsxs(_.div,{className:P.techCard,variants:vt,whileHover:{scale:1.05,y:-4},children:[l.jsx("span",{className:P.techIcon,children:t.icon}),l.jsx("span",{className:P.techName,children:t.name})]},t.name))})]})}),l.jsx("section",{className:P.values,children:l.jsxs("div",{className:"container",children:[l.jsx(_.div,{className:P.sectionHeader,initial:{opacity:0,y:20},whileInView:{opacity:1,y:0},viewport:{once:!0},transition:{duration:.5},children:l.jsx("h2",{children:e.about.values.title})}),l.jsx(_.div,{className:P.valuesGrid,variants:gt,initial:"hidden",whileInView:"visible",viewport:{once:!0},children:e.about.values.items.map((t,n)=>l.jsxs(_.div,{className:P.valueCard,variants:vt,children:[l.jsxs("div",{className:P.valueNumber,children:["0",n+1]}),l.jsx("h3",{className:P.valueTitle,children:t.title}),l.jsx("p",{className:P.valueDescription,children:t.description})]},n))})]})})]})}class ce{constructor(t=0,n="Network Error"){this.status=t,this.text=n}}const Ga=()=>{if(!(typeof localStorage>"u"))return{get:e=>Promise.resolve(localStorage.getItem(e)),set:(e,t)=>Promise.resolve(localStorage.setItem(e,t)),remove:e=>Promise.resolve(localStorage.removeItem(e))}},R={origin:"https://api.emailjs.com",blockHeadless:!1,storageProvider:Ga()},Ke=e=>e?typeof e=="string"?{publicKey:e}:e.toString()==="[object Object]"?e:{}:{},Ka=(e,t="https://api.emailjs.com")=>{if(!e)return;const n=Ke(e);R.publicKey=n.publicKey,R.blockHeadless=n.blockHeadless,R.storageProvider=n.storageProvider,R.blockList=n.blockList,R.limitRate=n.limitRate,R.origin=n.origin||t},dn=async(e,t,n={})=>{const r=await fetch(R.origin+e,{method:"POST",headers:n,body:t}),o=await r.text(),s=new ce(r.status,o);if(r.ok)return s;throw s},hn=(e,t,n)=>{if(!e||typeof e!="string")throw"The public key is required. Visit https://dashboard.emailjs.com/admin/account";if(!t||typeof t!="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"},qa=e=>{if(e&&e.toString()!=="[object Object]")throw"The template params have to be the object. Visit https://www.emailjs.com/docs/sdk/send/"},fn=e=>e.webdriver||!e.languages||e.languages.length===0,mn=()=>new ce(451,"Unavailable For Headless Browser"),Ya=(e,t)=>{if(!Array.isArray(e))throw"The BlockList list has to be an array";if(typeof t!="string")throw"The BlockList watchVariable has to be a string"},Ja=e=>!e.list?.length||!e.watchVariable,Xa=(e,t)=>e instanceof FormData?e.get(t):e[t],pn=(e,t)=>{if(Ja(e))return!1;Ya(e.list,e.watchVariable);const n=Xa(t,e.watchVariable);return typeof n!="string"?!1:e.list.includes(n)},gn=()=>new ce(403,"Forbidden"),Qa=(e,t)=>{if(typeof e!="number"||e<0)throw"The LimitRate throttle has to be a positive number";if(t&&typeof t!="string")throw"The LimitRate ID has to be a non-empty string"},Za=async(e,t,n)=>{const r=Number(await n.get(e)||0);return t-Date.now()+r},vn=async(e,t,n)=>{if(!t.throttle||!n)return!1;Qa(t.throttle,t.id);const r=t.id||e;return await Za(r,t.throttle,n)>0?!0:(await n.set(r,Date.now().toString()),!1)},yn=()=>new ce(429,"Too Many Requests"),el=async(e,t,n,r)=>{const o=Ke(r),s=o.publicKey||R.publicKey,i=o.blockHeadless||R.blockHeadless,c=o.storageProvider||R.storageProvider,d={...R.blockList,...o.blockList},f={...R.limitRate,...o.limitRate};return i&&fn(navigator)?Promise.reject(mn()):(hn(s,e,t),qa(n),n&&pn(d,n)?Promise.reject(gn()):await vn(location.pathname,f,c)?Promise.reject(yn()):dn("/api/v1.0/email/send",JSON.stringify({lib_version:"4.4.1",user_id:s,service_id:e,template_id:t,template_params:n}),{"Content-type":"application/json"}))},tl=e=>{if(!e||e.nodeName!=="FORM")throw"The 3rd parameter is expected to be the HTML form element or the style selector of the form"},nl=e=>typeof e=="string"?document.querySelector(e):e,rl=async(e,t,n,r)=>{const o=Ke(r),s=o.publicKey||R.publicKey,i=o.blockHeadless||R.blockHeadless,c=R.storageProvider||o.storageProvider,d={...R.blockList,...o.blockList},f={...R.limitRate,...o.limitRate};if(i&&fn(navigator))return Promise.reject(mn());const h=nl(n);hn(s,e,t),tl(h);const u=new FormData(h);return pn(d,u)?Promise.reject(gn()):await vn(location.pathname,f,c)?Promise.reject(yn()):(u.append("lib_version","4.4.1"),u.append("service_id",e),u.append("template_id",t),u.append("user_id",s),dn("/api/v1.0/email/send-form",u))},ol={init:Ka,send:el,sendForm:rl,EmailJSResponseStatus:ce},sl="_contact_1lm51_1",il="_hero_1lm51_6",al="_title_1lm51_16",ll="_subtitle_1lm51_22",cl="_content_1lm51_29",ul="_grid_1lm51_33",dl="_formSection_1lm51_46",hl="_intro_1lm51_50",fl="_form_1lm51_46",ml="_success_1lm51_63",pl="_error_1lm51_72",gl="_infoSection_1lm51_82",vl="_infoTitle_1lm51_90",yl="_infoList_1lm51_96",xl="_infoItem_1lm51_102",bl="_infoIcon_1lm51_108",C={contact:sl,hero:il,title:al,subtitle:ll,content:cl,grid:ul,formSection:dl,intro:hl,form:fl,success:ml,error:pl,infoSection:gl,infoTitle:vl,infoList:yl,infoItem:xl,infoIcon:bl},wl="YOUR_SERVICE_ID",_l="YOUR_TEMPLATE_ID",El="YOUR_PUBLIC_KEY";function Pl(){const{t:e}=X(),[t,n]=a.useState({name:"",email:"",subject:"",message:""}),[r,o]=a.useState({}),[s,i]=a.useState(!1),[c,d]=a.useState("idle"),f=()=>{const m={};return t.name.trim()||(m.name="Required"),t.email.trim()?/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(t.email)||(m.email="Invalid email"):m.email="Required",t.subject.trim()||(m.subject="Required"),t.message.trim()||(m.message="Required"),o(m),Object.keys(m).length===0},h=async m=>{if(m.preventDefault(),!!f()){i(!0),d("idle");try{await ol.send(wl,_l,{from_name:t.name,from_email:t.email,subject:t.subject,message:t.message},El),d("success"),n({name:"",email:"",subject:"",message:""})}catch{d("error")}finally{i(!1)}}},u=(m,p)=>{n(g=>({...g,[m]:p})),r[m]&&o(g=>({...g,[m]:void 0}))};return l.jsxs("main",{className:C.contact,children:[l.jsx("section",{className:C.hero,children:l.jsx("div",{className:"container",children:l.jsxs(_.div,{initial:{opacity:0,y:30},animate:{opacity:1,y:0},transition:{duration:.6},children:[l.jsx("h1",{className:C.title,children:e.contact.title}),l.jsx("p",{className:C.subtitle,children:e.contact.subtitle})]})})}),l.jsx("section",{className:C.content,children:l.jsx("div",{className:"container",children:l.jsxs("div",{className:C.grid,children:[l.jsxs(_.div,{className:C.formSection,initial:{opacity:0,x:-30},animate:{opacity:1,x:0},transition:{duration:.5,delay:.2},children:[l.jsx("p",{className:C.intro,children:e.contact.intro}),l.jsxs("form",{onSubmit:h,className:C.form,children:[l.jsx(ve,{label:e.contact.form.name,placeholder:e.contact.form.namePlaceholder,value:t.name,onChange:m=>u("name",m.target.value),error:r.name}),l.jsx(ve,{label:e.contact.form.email,type:"email",placeholder:e.contact.form.emailPlaceholder,value:t.email,onChange:m=>u("email",m.target.value),error:r.email}),l.jsx(ve,{label:e.contact.form.subject,placeholder:e.contact.form.subjectPlaceholder,value:t.subject,onChange:m=>u("subject",m.target.value),error:r.subject}),l.jsx(un,{label:e.contact.form.message,placeholder:e.contact.form.messagePlaceholder,value:t.message,onChange:m=>u("message",m.target.value),error:r.message,rows:6}),l.jsx(Ve,{type:"submit",variant:"primary",size:"lg",isLoading:s,disabled:s,children:s?e.contact.form.sending:e.contact.form.submit}),c==="success"&&l.jsx(_.p,{className:C.success,initial:{opacity:0,y:10},animate:{opacity:1,y:0},children:e.contact.form.success}),c==="error"&&l.jsx(_.p,{className:C.error,initial:{opacity:0,y:10},animate:{opacity:1,y:0},children:e.contact.form.error})]})]}),l.jsxs(_.div,{className:C.infoSection,initial:{opacity:0,x:30},animate:{opacity:1,x:0},transition:{duration:.5,delay:.3},children:[l.jsx("h2",{className:C.infoTitle,children:e.contact.info.title}),l.jsxs("div",{className:C.infoList,children:[l.jsxs("div",{className:C.infoItem,children:[l.jsx("div",{className:C.infoIcon,children:l.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[l.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"}),l.jsx("polyline",{points:"22,6 12,13 2,6"})]})}),l.jsxs("div",{children:[l.jsx("h3",{children:e.contact.info.email}),l.jsx("a",{href:"mailto:info@ragusa-it.dev",children:"info@ragusa-it.dev"})]})]}),l.jsxs("div",{className:C.infoItem,children:[l.jsx("div",{className:C.infoIcon,children:l.jsx("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:l.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"})})}),l.jsxs("div",{children:[l.jsx("h3",{children:e.contact.info.github}),l.jsx("a",{href:"https://github.com/ragusa-it",target:"_blank",rel:"noopener noreferrer",children:"github.com/ragusa-it"})]})]})]})]})]})})})]})}function Sl(){return l.jsx(Ao,{children:l.jsxs(_o,{children:[l.jsx(Ci,{}),l.jsx(li,{}),l.jsxs(Xr,{children:[l.jsx(me,{path:"/",element:l.jsx(Pa,{})}),l.jsx(me,{path:"/about",element:l.jsx(za,{})}),l.jsx(me,{path:"/contact",element:l.jsx(Pl,{})})]}),l.jsx(bi,{})]})})}_n.createRoot(document.getElementById("root")).render(l.jsx(a.StrictMode,{children:l.jsx(Sl,{})}));