1(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,30066,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"warnOnce",{enumerable:!0,get:function(){return n}});let n=e=>{}},62770,e=>{"use strict";e.s(["ROUTES",0,{home:"/",about:"/about",projects:"/projects",lab:"/lab",project:e=>`/projects/${e}`,labProject:e=>`/lab/${e}`,homeProjects:"/#projects",homeConnect:"/#connect"}])},41327,(e,t,r)=>{"use strict";function n({widthInt:e,heightInt:t,blurWidth:r,blurHeight:n,blurDataURL:i,objectFit:o}){let a=r?40*r:e,s=n?40*n:t,l=a&&s?`viewBox='0 0 ${a} ${s}'`:"";return`%3Csvg xmlns='http://www.w3.org/2000/svg' ${l}%3E%3Cfilter id='b' color-interpolation-filters='sRGB'%3E%3CfeGaussianBlur stdDeviation='20'/%3E%3CfeColorMatrix values='1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 100 -1' result='s'/%3E%3CfeFlood x='0' y='0' width='100%25' height='100%25'/%3E%3CfeComposite operator='out' in='s'/%3E%3CfeComposite in2='SourceGraphic'/%3E%3CfeGaussianBlur stdDeviation='20'/%3E%3C/filter%3E%3Cimage width='100%25' height='100%25' x='0' y='0' preserveAspectRatio='${l?"none":"contain"===o?"xMidYMid":"cover"===o?"xMidYMid slice":"none"}' style='filter: url(%23b);' href='${i}'/%3E%3C/svg%3E`}Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"getImageBlurSvg",{enumerable:!0,get:function(){return n}})},17827,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={VALID_LOADERS:function(){return o},imageConfigDefault:function(){return a}};for(var i in n)Object.defineProperty(r,i,{enumerable:!0,get:n[i]});let o=["default","imgix","cloudinary","akamai","custom"],a={deviceSizes:[640,750,828,1080,1200,1920,2048,3840],imageSizes:[32,48,64,96,128,256,384],path:"/_next/image",loader:"default",loaderFile:"",domains:[],disableStaticImages:!1,minimumCacheTTL:14400,formats:["image/webp"],maximumRedirects:3,maximumResponseBody:5e7,dangerouslyAllowLocalIP:!1,dangerouslyAllowSVG:!1,contentSecurityPolicy:"script-src 'none'; frame-src 'none'; sandbox;",contentDispositionType:"attachment",localPatterns:void 0,remotePatterns:[],qualities:[75],unoptimized:!1}},89588,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"getImgProps",{enumerable:!0,get:function(){return c}}),e.r(30066);let n=e.r(44722),i=e.r(41327),o=e.r(17827),a=["-moz-initial","fill","none","scale-down",void 0];function s(e){return void 0!==e.default}function l(e){return void 0===e?e:"number"==typeof e?Number.isFinite(e)?e:NaN:"string"==typeof e&&/^[0-9]+$/.test(e)?parseInt(e,10):NaN}function c({src:e,sizes:t,unoptimized:r=!1,priority:c=!1,preload:u=!1,loading:d,className:f,quality:m,width:p,height:h,fill:g=!1,style:b,overrideSrc:v,onLoad:x,onLoadingComplete:y,placeholder:w="empty",blurDataURL:j,fetchPriority:E,decoding:P="async",layout:S,objectFit:_,objectPosition:C,lazyBoundary:O,lazyRoot:k,...R},I){var L;let T,N,$,{imgConf:M,showAltText:A,blurComplete:z,defaultLoader:U}=I,F=M||o.imageConfigDefault;if("allSizes"in F)T=F;else{let e=[...F.deviceSizes,...F.imageSizes].sort((e,t)=>e-t),t=F.deviceSizes.sort((e,t)=>e-t),r=F.qualities?.sort((e,t)=>e-t);T={...F,allSizes:e,deviceSizes:t,qualities:r}}if(void 0===U)throw Object.defineProperty(Error("images.loaderFile detected but the file is missing default export.\nRead more: https://nextjs.org/docs/messages/invalid-images-config"),"__NEXT_ERROR_CODE",{value:"E163",enumerable:!1,configurable:!0});let D=R.loader||U;delete R.loader,delete R.srcSet;let B="__next_img_default"in D;if(B){if("custom"===T.loader)throw Object.defineProperty(Error(`Image with src "${e}" is missing "loader" prop. 2Read more: https://nextjs.org/docs/messages/next-image-missing-loader`),"__NEXT_ERROR_CODE",{value:"E252",enumerable:!1,configurable:!0})}else{let e=D;D=t=>{let{config:r,...n}=t;return e(n)}}if(S){"fill"===S&&(g=!0);let e={intrinsic:{maxWidth:"100%",height:"auto"},responsive:{width:"100%",height:"auto"}}[S];e&&(b={...b,...e});let r={responsive:"100vw",fill:"100vw"}[S];r&&!t&&(t=r)}let H="",W=l(p),q=l(h);if((L=e)&&"object"==typeof L&&(s(L)||void 0!==L.src)){let t=s(e)?e.default:e;if(!t.src)throw Object.defineProperty(Error(`An object should only be passed to the image component src parameter if it comes from a static image import. It must include src. Received ${JSON.stringify(t)}
2`),"__NEXT_ERROR_CODE",{value:"E460",enumerable:!1,configurable:!0});if(!t.height||!t.width)throw Object.defineProperty(Error(`An object should only be passed to the image component src parameter if it comes from a static image import. It must include height and width. Received ${JSON.stringify(t)}`),"__NEXT_ERROR_CODE",{value:"E48",enumerable:!1,configurable:!0});if(N=t.blurWidth,$=t.blurHeight,j=j||t.blurDataURL,H=t.src,!g)if(W||q){if(W&&!q){let e=W/t.width;q=Math.round(t.height*e)}else if(!W&&q){let e=q/t.height;W=Math.round(t.width*e)}}else W=t.width,q=t.height}let V=!c&&!u&&("lazy"===d||void 0===d);(!(e="string"==typeof e?e:H)||e.startsWith("data:")||e.startsWith("blob:"))&&(r=!0,V=!1),T.unoptimized&&(r=!0),B&&!T.dangerouslyAllowSVG&&e.split("?",1)[0].endsWith(".svg")&&(r=!0);let G=l(m),K=Object.assign(g?{position:"absolute",height:"100%",width:"100%",left:0,top:0,right:0,bottom:0,objectFit:_,objectPosition:C}:{},A?{}:{color:"transparent"},b),X=z||"empty"===w?null:"blur"===w?`url("data:image/svg+xml;charset=utf-8,${(0,i.getImageBlurSvg)({widthInt:W,heightInt:q,blurWidth:N,blurHeight:$,blurDataURL:j||"",objectFit:K.objectFit})}")`:`url("${w}")`,Y=a.includes(K.objectFit)?"fill"===K.objectFit?"100% 100%":"cover":K.objectFit,J=X?{backgroundSize:Y,backgroundPosition:K.objectPosition||"50% 50%",backgroundRepeat:"no-repeat",backgroundImage:X}:{},Q=function({config:e,src:t,unoptimized:r,width:i,quality:o,sizes:a,loader:s}){if(r){let e=(0,n.getDeploymentId)();if(t.startsWith("/")&&!t.startsWith("//")&&e){let r=t.includes("?")?"&":"?";t=`${t}${r}dpl=${e}`}return{src:t,srcSet:void 0,sizes:void 0}}let{widths:l,kind:c}=function({deviceSizes:e,allSizes:t},r,n){if(n){let r=/(^|\s)(1?\d?\d)vw/g,i=[];for(let e;e=r.exec(n);)i.push(parseInt(e[2]));if(i.length){let r=.01*Math.min(...i);return{widths:t.filter(t=>t>=e[0]*r),kind:"w"}}return{widths:t,kind:"w"}}return"number"!=typeof r?{widths:e,kind:"w"}:{widths:[...new Set([r,2*r].map(e=>t.find(t=>t>=e)||t[t.length-1]))],kind:"x"}}(e,i,a),u=l.length-1;return{sizes:a||"w"!==c?a:"100vw",srcSet:l.map((r,n)=>`${s({config:e,src:t,quality:o,width:r})} ${"w"===c?r:n+1}${c}`).join(", "),src:s({config:e,src:t,quality:o,width:l[u]})}}({config:T,src:e,unoptimized:r,width:W,quality:G,sizes:t,loader:D}),Z=V?"lazy":d;return{props:{...R,loading:Z,fetchPriority:E,width:W,height:q,decoding:P,className:f,style:{...K,...J},sizes:Q.sizes,srcSet:Q.srcSet,src:v||Q.src},meta:{unoptimized:r,preload:u||c,placeholder:w,fill:g}}}},78144,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"default",{enumerable:!0,get:function(){return s}});let n=e.r(65773),i="u"<typeof window,o=i?()=>{}:n.useLayoutEffect,a=i?()=>{}:n.useEffect;function s(e){let{headManager:t,reduceComponentsToState:r}=e;function s(){if(t&&t.mountedInstances){let e=n.Children.toArray(Array.from(t.mountedInstances).filter(Boolean));t.updateHead(r(e))}}return i&&(t?.mountedInstances?.add(e.children),s()),o(()=>(t?.mountedInstances?.add(e.children),()=>{t?.mountedInstances?.delete(e.children)})),o(()=>(t&&(t._pendingUpdate=s),()=>{t&&(t._pendingUpdate=s)})),a(()=>(t&&t._pendingUpdate&&(t._pendingUpdate(),t._pendingUpdate=null),()=>{t&&t._pendingUpdate&&(t._pendingUpdate(),t._pendingUpdate=null)})),null}},49082,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={default:function(){return h},defaultHead:function(){return d}};for(var i in n)Object.defineProperty(r,i,{enumerable:!0,get:n[i]});let o=e.r(81258),a=e.r(44066),s=e.r(76809),l=a._(e.r(65773)),c=o._(e.r(78144)),u=e.r(23568);function d(){return[(0,s.jsx)("meta",{charSet:"utf-8"},"charset"),(0,s.jsx)("meta",{name:"viewport",content:"width=device-width"},"viewport")]}function f(e,t){return"string"==typeof t||"number"==typeof t?e:t.type===l.default.Fragment?e.concat(l.default.Children.toArray(t.props.children).reduce((e,t)=>"string"==typeof t||"number"==typeof t?e:e.concat(t),[])):e.concat(t)}e.r(30066);let m=["name","httpEquiv","charSet","itemProp"];function p(e){let t,r,n,i;return e.reduce(f,[]).reverse().concat(d().reverse()).filter((t=new Set,r=new Set,n=new Set,i={},e=>{let o=!0,a=!1;if(e.key&&"number"!=typeof e.key&&e.key.indexOf("$")>0){a=!0;let r=e.key.slice(e.key.indexOf("$")+1);t.has(r)?o=!1:t.add(r)}switch(e.type){case"title":case"base":r.has(e.type)?o=!1:r.add(e.type);break;case"meta":for(let t=0,r=m.length;t<r;t++){let r=m[t];if(e.props.hasOwnProperty(r))if("charSet"===r)n.has(r)?o=!1:n.add(r);else{let t=e.props[r],n=i[r]||new Set;
2("name"!==r||!a)&&n.has(t)?o=!1:(n.add(t),i[r]=n)}}}return o})).reverse().map((e,t)=>{let r=e.key||t;return l.default.cloneElement(e,{key:r})})}let h=function({children:e}){let t=(0,l.useContext)(u.HeadManagerContext);return(0,s.jsx)(c.default,{reduceComponentsToState:p,headManager:t,children:e})};("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},33919,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"ImageConfigContext",{enumerable:!0,get:function(){return o}});let n=e.r(81258)._(e.r(65773)),i=e.r(17827),o=n.default.createContext(i.imageConfigDefault)},16932,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"RouterContext",{enumerable:!0,get:function(){return n}});let n=e.r(81258)._(e.r(65773)).default.createContext(null)},38236,(e,t,r)=>{"use strict";function n(e,t){let r=e||75;return t?.qualities?.length?t.qualities.reduce((e,t)=>Math.abs(t-r)<Math.abs(e-r)?t:e,0):r}Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"findClosestQuality",{enumerable:!0,get:function(){return n}})},16301,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"default",{enumerable:!0,get:function(){return a}});let n=e.r(38236),i=e.r(44722);function o({config:e,src:t,width:r,quality:o}){if(t.startsWith("/")&&t.includes("?")&&e.localPatterns?.length===1&&"**"===e.localPatterns[0].pathname&&""===e.localPatterns[0].search)throw Object.defineProperty(Error(`Image with src "${t}" is using a query string which is not configured in images.localPatterns. 3Read more: https://nextjs.org/docs/messages/next-image-unconfigured-localpatterns`),"__NEXT_ERROR_CODE",{value:"E871",enumerable:!1,configurable:!0});let a=(0,n.findClosestQuality)(o,e),s=(0,i.getDeploymentId)();return`${e.path}?url=${encodeURIComponent(t)}&w=${r}&q=${a}${t.startsWith("/")&&s?`&dpl=${s}`:""}`}o.__next_img_default=!0;let a=o},90986,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"Image",{enumerable:!0,get:function(){return y}});let n=e.r(81258),i=e.r(44066),o=e.r(76809),a=i._(e.r(65773)),s=n._(e.r(93739)),l=n._(e.r(49082)),c=e.r(89588),u=e.r(17827),d=e.r(33919);e.r(30066);let f=e.r(16932),m=n._(e.r(16301)),p=e.r(35561),h={deviceSizes:[640,750,828,1080,1200,1920,2048,3840],imageSizes:[32,48,64,96,128,256,384],qualities:[75],path:"/_next/image",loader:"default",dangerouslyAllowSVG:!1,unoptimized:!1};function g(e,t,r,n,i,o,a){let s=e?.src;e&&e["data-loaded-src"]!==s&&(e["data-loaded-src"]=s,("decode"in e?e.decode():Promise.resolve()).catch(()=>{}).then(()=>{if(e.parentElement&&e.isConnected){if("empty"!==t&&i(!0),r?.current){let t=new Event("load");Object.defineProperty(t,"target",{writable:!1,value:e});let n=!1,i=!1;r.current({...t,nativeEvent:t,currentTarget:e,target:e,isDefaultPrevented:()=>n,isPropagationStopped:()=>i,persist:()=>{},preventDefault:()=>{n=!0,t.preventDefault()},stopPropagation:()=>{i=!0,t.stopPropagation()}})}n?.current&&n.current(e)}}))}function b(e){return a.use?{fetchPriority:e}:{fetchpriority:e}}"u"<typeof window&&(globalThis.__NEXT_IMAGE_IMPORTED=!0);let v=(0,a.forwardRef)(({src:e,srcSet:t,sizes:r,height:n,width:i,decoding:s,className:l,style:c,fetchPriority:u,placeholder:d,loading:f,unoptimized:m,fill:h,onLoadRef:v,onLoadingCompleteRef:x,setBlurComplete:y,setShowAltText:w,sizesInput:j,onLoad:E,onError:P,...S},_)=>{let C=(0,a.useCallback)(e=>{e&&(P&&(e.src=e.src),e.complete&&g(e,d,v,x,y,m,j))},[e,d,v,x,y,P,m,j]),O=(0,p.useMergedRef)(_,C);return(0,o.jsx)("img",{...S,...b(u),loading:f,width:i,height:n,decoding:s,"data-nimg":h?"fill":"1",className:l,style:c,sizes:r,srcSet:t,src:e,ref:O,onLoad:e=>{g(e.currentTarget,d,v,x,y,m,j)},onError:e=>{w(!0),"empty"!==d&&y(!0),P&&P(e)}})});function x({isAppRouter:e,imgAttributes:t}){let r={as:"image",imageSrcSet:t.srcSet,imageSizes:t.sizes,crossOrigin:t.crossOrigin,referrerPolicy:t.referrerPolicy,...b(t.fetchPriority)};return e&&s.default.preload?(s.default.preload(t.src,r),null):(0,o.jsx)(l.default,{children:(0,o.jsx)("link",{rel:"preload",href:t.srcSet?void 0:t.src,...r},"__nimg-"+t.src+t.srcSet+t.sizes)})}let y=(0,a.forwardRef)((e,t)=>{let r=(0,a.useContext)(f.RouterContext),n=(0,a.useContext)(d.ImageConfigContext),i=(0,a.useMemo)(()=>{let e=h||n||u.imageConfigDefault,t=[...e.deviceSizes,...e.imageSizes].sort((e,t)=>
3e-t),r=e.deviceSizes.sort((e,t)=>e-t),i=e.qualities?.sort((e,t)=>e-t);return{...e,allSizes:t,deviceSizes:r,qualities:i,localPatterns:"u"<typeof window?n?.localPatterns:e.localPatterns}},[n]),{onLoad:s,onLoadingComplete:l}=e,p=(0,a.useRef)(s);(0,a.useEffect)(()=>{p.current=s},[s]);let g=(0,a.useRef)(l);(0,a.useEffect)(()=>{g.current=l},[l]);let[b,y]=(0,a.useState)(!1),[w,j]=(0,a.useState)(!1),{props:E,meta:P}=(0,c.getImgProps)(e,{defaultLoader:m.default,imgConf:i,blurComplete:b,showAltText:w});return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(v,{...E,unoptimized:P.unoptimized,placeholder:P.placeholder,fill:P.fill,onLoadRef:p,onLoadingCompleteRef:g,setBlurComplete:y,setShowAltText:j,sizesInput:e.sizes,ref:t}),P.preload?(0,o.jsx)(x,{isAppRouter:!r,imgAttributes:E}):null]})});("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},47498,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={default:function(){return u},getImageProps:function(){return c}};for(var i in n)Object.defineProperty(r,i,{enumerable:!0,get:n[i]});let o=e.r(81258),a=e.r(89588),s=e.r(90986),l=o._(e.r(16301));function c(e){let{props:t}=(0,a.getImgProps)(e,{defaultLoader:l.default,imgConf:{deviceSizes:[640,750,828,1080,1200,1920,2048,3840],imageSizes:[32,48,64,96,128,256,384],qualities:[75],path:"/_next/image",loader:"default",dangerouslyAllowSVG:!1,unoptimized:!1}});for(let[e,r]of Object.entries(t))void 0===r&&delete t[e];return{props:t}}let u=s.Image},97444,(e,t,r)=>{t.exports=e.r(47498)},24224,e=>{"use strict";function t(e){return/\.[a-z0-9]+$/i.test(e)}e.s(["isStaticFileHref",()=>t])},30946,e=>{"use strict";var t=e.i(76809),r=e.i(56904),n=e.i(24224);function i({href:e,children:i,className:o,"aria-label":a}){let s=`link-underline${o?` ${o}`:""}`;return e.startsWith("http")?(0,t.jsx)("a",{href:e,target:"_blank",rel:"noopener noreferrer","aria-label":a,className:s,children:i}):e.startsWith("mailto:")||e.startsWith("tel:")||(0,n.isStaticFileHref)(e)?(0,t.jsx)("a",{href:e,"aria-label":a,className:s,children:i}):(0,t.jsx)(r.Link,{href:e,"aria-label":a,className:s,children:i})}e.s(["TextLink",()=>i])},8037,e=>{"use strict";e.s(["PROFILE",0,{name:"Cristina Forés",email:"[email protected]",linkedInUrl:"https://www.linkedin.com/in/cristina-fores",gitHubUrl:"https://github.com/CristinaFores",cvUrl:"/CV-cristina-fores-en.pdf",gyozaUrl:"https://gyoza.es/",role:"Product / AI Engineer",tagline:"Product / AI Engineer. Interfaces web y móviles para flujos reales de producto: pedidos, pagos, acceso y herramientas MCP. Barcelona."}])},61642,e=>{"use strict";e.i(73891);var t=e.i(76809),r=e.i(65773),n=e.i(51860),i=e.i(85525),o=e.i(8162),a=e.i(90099),s=e.i(4017),l=r,c=e.i(69798);function u(e,t){if("function"==typeof e)return e(t);null!=e&&(e.current=t)}class d extends l.Component{getSnapshotBeforeUpdate(e){let t=this.props.childRef.current;if(t&&e.isPresent&&!this.props.isPresent&&!1!==this.props.pop){let e=t.offsetParent,r=(0,s.isHTMLElement)(e)&&e.offsetWidth||0,n=(0,s.isHTMLElement)(e)&&e.offsetHeight||0,i=this.props.sizeRef.current;i.height=t.offsetHeight||0,i.width=t.offsetWidth||0,i.top=t.offsetTop,i.left=t.offsetLeft,i.right=r-i.width-i.left,i.bottom=n-i.height-i.top}return null}componentDidUpdate(){}render(){return this.props.children}}function f({children:e,isPresent:n,anchorX:i,anchorY:o,root:a,pop:s}){let f=(0,l.useId)(),m=(0,l.useRef)(null),p=(0,l.useRef)({width:0,height:0,top:0,left:0,right:0,bottom:0}),{nonce:h}=(0,l.useContext)(c.MotionConfigContext),g=function(...e){return r.useCallback(function(...e){return t=>{let r=!1,n=e.map(e=>{let n=u(e,t);return r||"function"!=typeof n||(r=!0),n});if(r)return()=>{for(let t=0;t<n.length;t++){let r=n[t];"function"==typeof r?r():u(e[t],null)}}}}(...e),e)}(m,e.props?.ref??e?.ref);return(0,l.useInsertionEffect)(()=>{let{width:e,height:t,top:r,left:l,right:c,bottom:u}=p.current;if(n||!1===s||!m.current||!e||!t)return;let d="left"===i?`left: ${l}`:`right: ${c}`,g="bottom"===o?`bottom: ${u}`:`top: ${r}`;m.current.dataset.motionPopId=f;let b=document.createElement("style");h&&(b.nonce=h);let v=a??document.head;return v.appendChild(b),b.sheet&&b.sheet.insertRule(` 4 [data-motion-pop-id="${f}"] { 5 position: absolute !important; 6 width: ${e}px !important; 7 height: ${t}px !important; 8 ${d}px !important; 9 ${g}px !important; 10 } 11 `),()=>{v.contains(b)&&v.removeChild(b)}},[n]),(0,t.jsx)(d,{isPresent:n,childRef:m,sizeRef:p,pop:s,children:!1===s?e:l.cloneElement(e,{ref:g})})}let m=({children:e,initial:n,isPresent:o,onExitComplete:s,custom:l,presenceAffectsLayout:c,mode:u,anchorX:d,anchorY:m,root:h})=>
11{let g=(0,i.useConstant)(p),b=(0,r.useId)(),v=!0,x=(0,r.useMemo)(()=>(v=!1,{id:b,initial:n,isPresent:o,custom:l,onExitComplete:e=>{for(let t of(g.set(e,!0),g.values()))if(!t)return;s&&s()},register:e=>(g.set(e,!1),()=>g.delete(e))}),[o,g,s]);return c&&v&&(x={...x}),(0,r.useMemo)(()=>{g.forEach((e,t)=>g.set(t,!1))},[o]),r.useEffect(()=>{o||g.size||!s||s()},[o]),e=(0,t.jsx)(f,{pop:"popLayout"===u,isPresent:o,anchorX:d,anchorY:m,root:h,children:e}),(0,t.jsx)(a.PresenceContext.Provider,{value:x,children:e})};function p(){return new Map}var h=e.i(58573);let g=e=>e.key||"";function b(e){let t=[];return r.Children.forEach(e,e=>{(0,r.isValidElement)(e)&&t.push(e)}),t}let v=({children:e,custom:a,initial:s=!0,onExitComplete:l,presenceAffectsLayout:c=!0,mode:u="sync",propagate:d=!1,anchorX:f="left",anchorY:p="top",root:v})=>{let[x,y]=(0,h.usePresence)(d),w=(0,r.useMemo)(()=>b(e),[e]),j=d&&!x?[]:w.map(g),E=(0,r.useRef)(!0),P=(0,r.useRef)(w),S=(0,i.useConstant)(()=>new Map),_=(0,r.useRef)(new Set),[C,O]=(0,r.useState)(w),[k,R]=(0,r.useState)(w);(0,o.useIsomorphicLayoutEffect)(()=>{E.current=!1,P.current=w;for(let e=0;e<k.length;e++){let t=g(k[e]);j.includes(t)?(S.delete(t),_.current.delete(t)):!0!==S.get(t)&&S.set(t,!1)}},[k,j.length,j.join("-")]);let I=[];if(w!==C){let e=[...w];for(let t=0;t<k.length;t++){let r=k[t],n=g(r);j.includes(n)||(e.splice(t,0,r),I.push(r))}return"wait"===u&&I.length&&(e=I),R(b(e)),O(w),null}let{forceRender:L}=(0,r.useContext)(n.LayoutGroupContext);return(0,t.jsx)(t.Fragment,{children:k.map(e=>{let r=g(e),n=(!d||!!x)&&(w===k||j.includes(r));return(0,t.jsx)(m,{isPresent:n,initial:(!E.current||!!s)&&void 0,custom:a,presenceAffectsLayout:c,mode:u,root:v,onExitComplete:n?void 0:()=>{if(_.current.has(r)||(_.current.add(r),!S.has(r)))return;S.set(r,!0);let e=!0;S.forEach(t=>{t||(e=!1)}),e&&(L?.(),R(P.current),d&&y?.(),l&&l())},anchorX:f,anchorY:p,children:e},r)})})};e.s(["AnimatePresence",()=>v],61642)},51101,e=>{"use strict";var t=e.i(73891),r=e.i(65773),n=e.i(55280);function i(){return"u">typeof window}function o(){return"production"}function a(){return"development"===((i()?window.vam:o())||"production")}function s(e){return RegExp(`/${e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}(?=[/?#]|$)`)}function l(e){return(0,r.useEffect)(()=>{var t;e.beforeSend&&(null==(t=window.va)||t.call(window,"beforeSend",e.beforeSend))},[e.beforeSend]),(0,r.useEffect)(()=>{!function(e={debug:!0}){var t;if(!i())return;!function(e="auto"){if("auto"===e){window.vam=o();return}window.vam=e}(e.mode),window.va||(window.va=function(...e){(window.vaq=window.vaq||[]).push(e)}),e.beforeSend&&(null==(t=window.va)||t.call(window,"beforeSend",e.beforeSend));let r=e.scriptSrc?e.scriptSrc:a()?"https://va.vercel-scripts.com/v1/script.debug.js":e.basePath?`${e.basePath}/insights/script.js`:"/_vercel/insights/script.js";if(document.head.querySelector(`script[src*="${r}"]`))return;let n=document.createElement("script");n.src=r,n.defer=!0,n.dataset.sdkn="@vercel/analytics"+(e.framework?`/${e.framework}`:""),n.dataset.sdkv="1.6.1",e.disableAutoTrack&&(n.dataset.disableAutoTrack="1"),e.endpoint?n.dataset.endpoint=e.endpoint:e.basePath&&(n.dataset.endpoint=`${e.basePath}/insights`),e.dsn&&(n.dataset.dsn=e.dsn),n.onerror=()=>{let e=a()?"Please check if any ad blockers are enabled and try again.":"Be sure to enable Web Analytics for your project and deploy again. See https://vercel.com/docs/analytics/quickstart for more information.";console.log(`[Vercel Web Analytics] Failed to load script from ${r}. ${e}`)},a()&&!1===e.debug&&(n.dataset.debug="false"),document.head.appendChild(n)}({framework:e.framework||"react",basePath:e.basePath??function(){if(void 0!==t.default&&void 0!==t.default.env)return t.default.env.REACT_APP_VERCEL_OBSERVABILITY_BASEPATH}(),...void 0!==e.route&&{disableAutoTrack:!0},...e})},[]),(0,r.useEffect)(()=>{e.route&&e.path&&function({route:e,path:t}){var r;null==(r=window.va)||r.call(window,"pageview",{route:e,path:t})}({route:e.route,path:e.path})},[e.route,e.path]),null}function c(e){let i,o,a,{route:c,path:u}
11=(i=(0,n.useParams)(),o=(0,n.useSearchParams)(),a=(0,n.usePathname)(),i?{route:function(e,t){if(!e||!t)return e;let r=e;try{let e=Object.entries(t);for(let[t,n]of e)if(!Array.isArray(n)){let e=s(n);e.test(r)&&(r=r.replace(e,`/[${t}]`))}for(let[t,n]of e)if(Array.isArray(n)){let e=s(n.join("/"));e.test(r)&&(r=r.replace(e,`/[...${t}]`))}return r}catch(t){return e}}(a,Object.keys(i).length?i:Object.fromEntries(o.entries())),path:a}:{route:null,path:a});return r.default.createElement(l,{path:u,route:c,...e,basePath:function(){if(void 0!==t.default&&void 0!==t.default.env)return t.default.env.NEXT_PUBLIC_VERCEL_OBSERVABILITY_BASEPATH}(),framework:"next"})}function u(e){return r.default.createElement(r.Suspense,{fallback:null},r.default.createElement(c,{...e}))}e.s(["Analytics",()=>u])},52804,e=>{"use strict";var t=e.i(45911),r=e.i(76809);function n({locale:e,...n}){if(!e)throw Error(void 0);return(0,r.jsx)(t.IntlProvider,{locale:e,...n})}e.s(["default",()=>n])},20770,e=>{"use strict";var t=e.i(76809),r=e.i(33464),n=e.i(96243),i=e.i(30946),o=e.i(14407),a=e.i(8037);function s(){let e=(0,n.useTranslations)(),{fadeUp:s}=(0,o.useMotion)();return(0,t.jsx)(r.motion.footer,{...s(),className:"border-t border-border bg-background mt-auto",children:(0,t.jsxs)("div",{className:"mx-auto flex max-w-5xl flex-row flex-wrap items-center justify-between gap-4 px-6 md:px-[0px] py-8",children:[(0,t.jsxs)("p",{className:"font-mono text-xs text-muted-foreground",children:["© ",new Date().getFullYear()," ",a.PROFILE.name," · ",e("footer.tagline")]}),(0,t.jsxs)("div",{className:"flex items-center gap-4 font-mono text-xs",children:[(0,t.jsx)(i.TextLink,{href:`mailto:${a.PROFILE.email}`,className:"text-muted-foreground hover:text-accent",children:"Email"}),(0,t.jsx)(i.TextLink,{href:a.PROFILE.linkedInUrl,className:"text-muted-foreground hover:text-accent",children:"LinkedIn"}),(0,t.jsx)(i.TextLink,{href:a.PROFILE.gitHubUrl,className:"text-muted-foreground hover:text-accent",children:"GitHub"})]})]})})}e.s(["Footer",()=>s])},48945,e=>{"use strict";var t=e.i(76809),r=e.i(33464),n=e.i(13877),i=e.i(55280),o=e.i(65773);let a=[.22,1,.36,1];function s({children:e}){let s=(0,i.usePathname)(),l=(0,n.useReducedMotion)();return((0,o.useLayoutEffect)(()=>{window.scrollTo({top:0,behavior:"auto"})},[s]),l)?(0,t.jsx)("div",{className:"w-full bg-background",children:e}):(0,t.jsx)(r.motion.div,{initial:{opacity:0,y:8},animate:{opacity:1,y:0},transition:{duration:.22,ease:a},className:"w-full bg-background",children:e},s)}function l({children:e}){return(0,t.jsx)("main",{className:"relative min-h-[50vh] overflow-x-clip",children:(0,t.jsx)(s,{children:e})})}e.s(["MainShell",()=>l],48945)},69342,e=>{"use strict";var t=e.i(76809),r=e.i(33464),n=e.i(61642),i=e.i(97444),o=e.i(45911),a=e.i(96243),s=e.i(65773),l=e.i(93739),c=e.i(14407),u=e.i(56904),d=e.i(79772),f=e.i(42295),m=e.i(62770),p=e.i(8037);function h(e,t){return"/"===e?"/"===t:t===e||t.startsWith(`${e}/`)}let g=[{href:m.ROUTES.home,labelKey:"nav.home"},{href:m.ROUTES.about,labelKey:"nav.about"},{href:m.ROUTES.lab,labelKey:"nav.lab"},{href:m.ROUTES.projects,labelKey:"nav.work"}];function b({locale:e,setLocale:r,onClose:n}){return(0,t.jsxs)("div",{className:"flex h-8 overflow-hidden border border-border",children:[(0,t.jsx)("button",{type:"button",onClick:()=>{r("es"),n?.()},className:(0,d.cn)("flex h-full min-h-8 flex-1 items-center justify-center px-2.5 text-xs font-medium transition-colors","es"===e?"bg-primary text-primary-foreground":"bg-transparent text-muted-foreground hover:bg-secondary hover:text-foreground"),children:"ES"}),(0,t.jsx)("button",{type:"button",onClick:()=>{r("en"),n?.()},className:(0,d.cn)("flex h-full min-h-8 flex-1 items-center justify-center border-l border-border px-2.5 text-xs font-medium transition-colors","en"===e?"bg-primary text-primary-foreground":"bg-transparent text-muted-foreground hover:bg-secondary hover:text-foreground"),children:"EN"})]})}function v({href:e,label:n,active:i,onClick:o,layoutId:a="nav-underline",size:s="sm"}){return(0,t.jsxs)(u.Link,{href:e,onClick:o,className:(0,d.cn)("relative inline-block w-fit py-1 transition-colors","lg"===s?"text-3xl font-semibold tracking-tight":"text-sm",i?"text-foreground":"text-muted-foreground hover:text-foreground"),children:[n,i&&(0,t.jsx)(r.motion.span,{layoutId:a,className:"absolute -bottom-0.5 left-0 right-0 h-px bg-accent",transition:{duration:.25,ease:f.EASE}})]})}function x(){let e=(0,u.usePathname)(),{reduced:f}
11=(0,c.useMotion)(),x=(0,s.useSyncExternalStore)(()=>()=>{},()=>!0,()=>!1),[y,w]=(0,s.useState)(!1),[j,E]=(0,s.useState)(!0),[P,S]=(0,s.useState)(!1),_=(0,a.useTranslations)(),C=(0,o.useLocale)(),O=(0,u.useRouter)(),k=t=>{O.replace(e,{locale:t})},R=(0,s.useRef)(0);(0,s.useEffect)(()=>{let e=()=>{let e=window.scrollY;w(e>20),f||e<20?E(!0):e>R.current&&e>80?E(!1):e<R.current&&E(!0),R.current=e};return window.addEventListener("scroll",e,{passive:!0}),()=>window.removeEventListener("scroll",e)},[f]);let I=(0,s.useRef)(null),L=(0,s.useRef)(null);return(0,s.useEffect)(()=>{if(!P)return;let e=e=>{let t=e.target,r=I.current?.contains(t),n=L.current?.contains(t);r||n||S(!1)};return document.addEventListener("pointerdown",e),()=>document.removeEventListener("pointerdown",e)},[P]),(0,s.useEffect)(()=>{if(!P)return;let e=document.body.style.overflow;return document.body.style.overflow="hidden",()=>{document.body.style.overflow=e}},[P]),(0,s.useEffect)(()=>{if(!P)return;let e=window.matchMedia("(min-width: 768px)"),t=()=>{e.matches&&S(!1)};return e.addEventListener("change",t),()=>e.removeEventListener("change",t)},[P]),(0,t.jsxs)(r.motion.header,{ref:I,animate:{y:j?0:"-100%"},transition:{duration:.3*!f,ease:[.4,0,.2,1]},className:(0,d.cn)("fixed left-0 right-0 top-0 z-50 border-b border-border backdrop-blur-md transition-colors duration-300",y?"bg-background/90":"bg-transparent"),children:[(0,t.jsxs)("nav",{className:"mx-auto flex max-w-5xl items-center justify-between px-6 md:px-[0px] py-4",children:[(0,t.jsxs)(u.Link,{href:m.ROUTES.home,className:"group flex items-center gap-2.5",children:[(0,t.jsx)("span",{className:"flex h-8 w-8 shrink-0 items-center justify-center overflow-hidden rounded-full border border-border bg-[#f5f1ea]",children:(0,t.jsx)(i.default,{src:"/cristina-portrait.webp",alt:p.PROFILE.name,width:30,height:30,priority:!0,className:"max-w-none object-contain object-[center_12%] transition-transform duration-300 group-hover:scale-105"})}),(0,t.jsxs)("span",{className:"flex flex-col gap-0.5 sm:flex-row sm:items-baseline sm:gap-3",children:[(0,t.jsx)("span",{className:"text-sm font-medium tracking-tight text-foreground transition-colors group-hover:text-accent",children:p.PROFILE.name}),(0,t.jsx)("span",{className:"hidden font-mono text-[10px] uppercase tracking-[0.14em] text-muted-foreground/70 sm:inline",children:_("nav.tagline")})]})]}),(0,t.jsxs)("ul",{className:"hidden items-center gap-7 md:flex",children:[g.map(r=>(0,t.jsx)("li",{children:(0,t.jsx)(v,{href:r.href,label:_(r.labelKey),active:h(r.href,e)})},r.href)),(0,t.jsx)("li",{className:"flex items-center gap-2",children:(0,t.jsx)(b,{locale:C,setLocale:k})})]}),(0,t.jsx)("button",{type:"button",onClick:()=>S(e=>!e),className:"flex h-8 w-8 items-center justify-center md:hidden","aria-label":_("nav.toggleMenu"),"aria-expanded":P,children:(0,t.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,t.jsx)("span",{className:(0,d.cn)("block h-px w-5 bg-foreground transition-all duration-300",P&&"translate-y-[3.5px] rotate-45")}),(0,t.jsx)("span",{className:(0,d.cn)("block h-px w-5 bg-foreground transition-all duration-300",P&&"-translate-y-[3.5px] -rotate-45")})]})})]}),x&&(0,l.createPortal)((0,t.jsx)(n.AnimatePresence,{children:P&&(0,t.jsx)(r.motion.div,{ref:L,initial:{y:"-100%"},animate:{y:0},exit:{y:"-100%"},transition:{duration:.3,ease:[.4,0,.2,1]},className:"fixed inset-0 z-40 h-[100dvh] bg-background md:hidden",children:(0,t.jsxs)("ul",{className:"mx-auto flex h-full max-w-5xl flex-col gap-7 px-6 pb-16 pt-28",children:[g.map(r=>(0,t.jsx)("li",{children:(0,t.jsx)(v,{href:r.href,label:_(r.labelKey),active:h(r.href,e),onClick:()=>S(!1),layoutId:"nav-underline-mobile",size:"lg"})},r.href)),(0,t.jsx)("li",{className:"mt-auto flex flex-wrap items-center gap-2",children:(0,t.jsx)(b,{locale:C,setLocale:k,onClose:()=>S(!1)})})]})})}),document.body)]})}e.s(["Navbar",()=>x])},51896,e=>{"use strict";var t=e.i(76809),r=e.i(33464),n=e.i(13877),i=e.i(65773);function o(){let e=(0,n.useReducedMotion)(),[o,a]=(0,i.useState)(0);return((0,i.useEffect)(()=>{let e=()=>{let e=document.documentElement.scrollHeight-window.innerHeight;a(e>0?window.scrollY/e:0)};return e(),window.addEventListener("scroll",e,{passive:!0}),()=>window.removeEventListener("scroll",e)},[]),e)?null:(0,t.jsx)("div",{className:"pointer-events-none fixed left-0 right-0 top-0 z-[60] h-px bg-border/30","aria-hidden":!0,
11children:(0,t.jsx)(r.motion.div,{className:"h-full origin-left bg-accent",style:{scaleX:o},transition:{duration:.1,ease:"linear"}})})}e.s(["ScrollProgress",()=>o])},81064,e=>{"use strict";var t=e.i(76809),r=e.i(65773),n=(e,t,r,n,i,o,a,s)=>{let l=document.documentElement,c=["light","dark"];function u(t){var r;(Array.isArray(e)?e:[e]).forEach(e=>{let r="class"===e,n=r&&o?i.map(e=>o[e]||e):i;r?(l.classList.remove(...n),l.classList.add(o&&o[t]?o[t]:t)):l.setAttribute(e,t)}),r=t,s&&c.includes(r)&&(l.style.colorScheme=r)}if(n)u(n);else try{let e=localStorage.getItem(t)||r,n=a&&"system"===e?window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":e;u(n)}catch(e){}},i=["light","dark"],o="(prefers-color-scheme: dark)",a="u"<typeof window,s=r.createContext(void 0),l=e=>r.useContext(s)?r.createElement(r.Fragment,null,e.children):r.createElement(u,{...e}),c=["light","dark"],u=({forcedTheme:e,disableTransitionOnChange:t=!1,enableSystem:n=!0,enableColorScheme:a=!0,storageKey:l="theme",themes:u=c,defaultTheme:h=n?"system":"light",attribute:g="data-theme",value:b,children:v,nonce:x,scriptProps:y})=>{let[w,j]=r.useState(()=>f(l,h)),[E,P]=r.useState(()=>"system"===w?p():w),S=b?Object.values(b):u,_=r.useCallback(e=>{let r=e;if(!r)return;"system"===e&&n&&(r=p());let o=b?b[r]:r,s=t?m(x):null,l=document.documentElement,c=e=>{"class"===e?(l.classList.remove(...S),o&&l.classList.add(o)):e.startsWith("data-")&&(o?l.setAttribute(e,o):l.removeAttribute(e))};if(Array.isArray(g)?g.forEach(c):c(g),a){let e=i.includes(h)?h:null,t=i.includes(r)?r:e;l.style.colorScheme=t}null==s||s()},[x]),C=r.useCallback(e=>{let t="function"==typeof e?e(w):e;j(t);try{localStorage.setItem(l,t)}catch(e){}},[w]),O=r.useCallback(t=>{P(p(t)),"system"===w&&n&&!e&&_("system")},[w,e]);r.useEffect(()=>{let e=window.matchMedia(o);return e.addListener(O),O(e),()=>e.removeListener(O)},[O]),r.useEffect(()=>{let e=e=>{e.key===l&&(e.newValue?j(e.newValue):C(h))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)},[C]),r.useEffect(()=>{_(null!=e?e:w)},[e,w]);let k=r.useMemo(()=>({theme:w,setTheme:C,forcedTheme:e,resolvedTheme:"system"===w?E:w,themes:n?[...u,"system"]:u,systemTheme:n?E:void 0}),[w,C,e,E,n,u]);return r.createElement(s.Provider,{value:k},r.createElement(d,{forcedTheme:e,storageKey:l,attribute:g,enableSystem:n,enableColorScheme:a,defaultTheme:h,value:b,themes:u,nonce:x,scriptProps:y}),v)},d=r.memo(({forcedTheme:e,storageKey:t,attribute:i,enableSystem:o,enableColorScheme:a,defaultTheme:s,value:l,themes:c,nonce:u,scriptProps:d})=>{let f=JSON.stringify([i,t,s,e,c,l,o,a]).slice(1,-1);return r.createElement("script",{...d,suppressHydrationWarning:!0,nonce:"u"<typeof window?u:"",dangerouslySetInnerHTML:{__html:`(${n.toString()})(${f})`}})}),f=(e,t)=>{let r;if(!a){try{r=localStorage.getItem(e)||void 0}catch(e){}return r||t}},m=e=>{let t=document.createElement("style");return e&&t.setAttribute("nonce",e),t.appendChild(document.createTextNode("*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}")),document.head.appendChild(t),()=>{window.getComputedStyle(document.body),setTimeout(()=>{document.head.removeChild(t)},1)}},p=e=>(e||(e=window.matchMedia(o)),e.matches?"dark":"light");function h({children:e,...r}){return(0,t.jsx)(l,{...r,children:e})}e.s(["ThemeProvider",()=>h],81064)}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.