1(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,898879,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"default",{enumerable:!0,get:function(){return o}});let n=e.r(271645),a="u"<typeof window,i=a?()=>{}:n.useLayoutEffect,s=a?()=>{}:n.useEffect;function o(e){let{headManager:t,reduceComponentsToState:r}=e;function o(){if(t&&t.mountedInstances){let e=n.Children.toArray(Array.from(t.mountedInstances).filter(Boolean));t.updateHead(r(e))}}return a&&(t?.mountedInstances?.add(e.children),o()),i(()=>(t?.mountedInstances?.add(e.children),()=>{t?.mountedInstances?.delete(e.children)})),i(()=>(t&&(t._pendingUpdate=o),()=>{t&&(t._pendingUpdate=o)})),s(()=>(t&&t._pendingUpdate&&(t._pendingUpdate(),t._pendingUpdate=null),()=>{t&&t._pendingUpdate&&(t._pendingUpdate(),t._pendingUpdate=null)})),null}},325633,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={default:function(){return f},defaultHead:function(){return u}};for(var a in n)Object.defineProperty(r,a,{enumerable:!0,get:n[a]});let i=e.r(555682),s=e.r(190809),o=e.r(843476),l=s._(e.r(271645)),d=i._(e.r(898879)),c=e.r(742732);function u(){return[(0,o.jsx)("meta",{charSet:"utf-8"},"charset"),(0,o.jsx)("meta",{name:"viewport",content:"width=device-width"},"viewport")]}function m(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(233525);let p=["name","httpEquiv","charSet","itemProp"];function g(e){let t,r,n,a;return e.reduce(m,[]).reverse().concat(u().reverse()).filter((t=new Set,r=new Set,n=new Set,a={},e=>{let i=!0,s=!1;if(e.key&&"number"!=typeof e.key&&e.key.indexOf("$")>0){s=!0;let r=e.key.slice(e.key.indexOf("$")+1);t.has(r)?i=!1:t.add(r)}switch(e.type){case"title":case"base":r.has(e.type)?i=!1:r.add(e.type);break;case"meta":for(let t=0,r=p.length;t<r;t++){let r=p[t];if(e.props.hasOwnProperty(r))if("charSet"===r)n.has(r)?i=!1:n.add(r);else{let t=e.props[r],n=a[r]||new Set;("name"!==r||!s)&&n.has(t)?i=!1:(n.add(t),a[r]=n)}}}return i})).reverse().map((e,t)=>{let r=e.key||t;return l.default.cloneElement(e,{key:r})})}let f=function({children:e}){let t=(0,l.useContext)(c.HeadManagerContext);return(0,o.jsx)(d.default,{reduceComponentsToState:g,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)},488143,(e,t,r)=>{"use strict";function n({widthInt:e,heightInt:t,blurWidth:r,blurHeight:a,blurDataURL:i,objectFit:s}){let o=r?40*r:e,l=a?40*a:t,d=o&&l?`viewBox='0 0 ${o} ${l}'`:"";return`%3Csvg xmlns='http://www.w3.org/2000/svg' ${d}%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='${d?"none":"contain"===s?"xMidYMid":"cover"===s?"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}})},987690,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={VALID_LOADERS:function(){return i},imageConfigDefault:function(){return s}};for(var a in n)Object.defineProperty(r,a,{enumerable:!0,get:n[a]});let i=["default","imgix","cloudinary","akamai","custom"],s={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"],maximumDiskCacheSize:void 0,maximumRedirects:3,maximumResponseBody:5e7,dangerouslyAllowLocalIP:!1,dangerouslyAllowSVG:!1,
1contentSecurityPolicy:"script-src 'none'; frame-src 'none'; sandbox;",contentDispositionType:"attachment",localPatterns:void 0,remotePatterns:[],qualities:[75],unoptimized:!1,customCacheHandler:!1}},908927,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"getImgProps",{enumerable:!0,get:function(){return d}}),e.r(233525);let n=e.r(543369),a=e.r(488143),i=e.r(987690),s=["-moz-initial","fill","none","scale-down",void 0];function o(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 d({src:e,sizes:t,unoptimized:r=!1,priority:c=!1,preload:u=!1,loading:m,className:p,quality:g,width:f,height:h,fill:y=!1,style:v,overrideSrc:x,onLoad:b,onLoadingComplete:w,placeholder:j="empty",blurDataURL:S,fetchPriority:C,decoding:k="async",layout:E,objectFit:M,objectPosition:R,lazyBoundary:A,lazyRoot:N,...I},P){var D;let _,O,T,{imgConf:L,showAltText:F,blurComplete:U,defaultLoader:z}=P,W=L||i.imageConfigDefault;if("allSizes"in W)_=W;else{let e=[...W.deviceSizes,...W.imageSizes].sort((e,t)=>e-t),t=W.deviceSizes.sort((e,t)=>e-t),r=W.qualities?.sort((e,t)=>e-t);_={...W,allSizes:e,deviceSizes:t,qualities:r}}if(void 0===z)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 H=I.loader||z;delete I.loader,delete I.srcSet;let J="__next_img_default"in H;if(J){if("custom"===_.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=H;H=t=>{let{config:r,...n}=t;return e(n)}}if(E){"fill"===E&&(y=!0);let e={intrinsic:{maxWidth:"100%",height:"auto"},responsive:{width:"100%",height:"auto"}}[E];e&&(v={...v,...e});let r={responsive:"100vw",fill:"100vw"}[E];r&&!t&&(t=r)}let B="",$=l(f),V=l(h);if((D=e)&&"object"==typeof D&&(o(D)||void 0!==D.src)){let t=o(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)}`),"__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(O=t.blurWidth,T=t.blurHeight,S=S||t.blurDataURL,B=t.src,!y)if($||V){if($&&!V){let e=$/t.width;V=Math.round(t.height*e)}else if(!$&&V){let e=V/t.height;$=Math.round(t.width*e)}}else $=t.width,V=t.height}let G=!c&&!u&&("lazy"===m||void 0===m);(!(e="string"==typeof e?e:B)||e.startsWith("data:")||e.startsWith("blob:"))&&(r=!0,G=!1),_.unoptimized&&(r=!0),J&&!_.dangerouslyAllowSVG&&e.split("?",1)[0].endsWith(".svg")&&(r=!0);let X=l(g),q=Object.assign(y?{position:"absolute",height:"100%",width:"100%",left:0,top:0,right:0,bottom:0,objectFit:M,objectPosition:R}:{},F?{}:{color:"transparent"},v),Y=U||"empty"===j?null:"blur"===j?`url("data:image/svg+xml;charset=utf-8,${(0,a.getImageBlurSvg)({widthInt:$,heightInt:V,blurWidth:O,blurHeight:T,blurDataURL:S||"",objectFit:q.objectFit})}")`:`url("${j}")`,Q=s.includes(q.objectFit)?"fill"===q.objectFit?"100% 100%":"cover":q.objectFit,K=Y?{backgroundSize:Q,backgroundPosition:q.objectPosition||"50% 50%",backgroundRepeat:"no-repeat",backgroundImage:Y}:{},Z=function({config:e,src:t,unoptimized:r,width:a,quality:i,sizes:s,loader:o}){if(r){if(t.startsWith("/")&&!t.startsWith("//")){let e=(0,n.getDeploymentId)();if(e){let r=t.indexOf("?");if(-1!==r){let n=new URLSearchParams(t.slice(r+1));n.get("dpl")||(n.append("dpl",e),t=t.slice(0,r)+"?"+n.toString())}else t+=`?dpl=${e}`}}return{src:t,srcSet:void 0,sizes:void 0}}let{widths:l,kind:d}=function({deviceSizes:e,allSizes:t},r,n){if(n){let r=/(^|\s)(1?\d?\d)vw/g,a=[];for(let e;e=r.exec(n);)a.push(parseInt(e[2]));if(a.length){let r=.01*Math.min(...a);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,a,s),c=l.length-1;return{sizes:s||"w"!==d?s:"100vw",srcSet:l.map((r,n)=>`${o({config:e,src:t,quality:i,width:r})} ${"w"===d?r:n+1}${d}`).join(", "),src:o({config:e,src:t,quality:i,width:l[c]})}}({config:_,src:e,unoptimized:r,width:$,quality:X,sizes:t,loader:H}),ee=G?"lazy":m;return{props:{...I,loading:ee,fetchPriority:C,width:$,height:V,decoding:k,className:p,style:{...q,...K},sizes:Z.sizes,srcSet:Z.srcSet,src:x||Z.src},meta:{unoptimized:r,preload:u||c,placeholder:j,fill:y}}}},918556,(e,t,r)=>{"use strict";
2Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"ImageConfigContext",{enumerable:!0,get:function(){return i}});let n=e.r(555682)._(e.r(271645)),a=e.r(987690),i=n.default.createContext(a.imageConfigDefault)},65856,(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(555682)._(e.r(271645)).default.createContext(null)},670965,(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,t.qualities[0]):r}Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"findClosestQuality",{enumerable:!0,get:function(){return n}})},1948,(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(670965),a=e.r(543369);function i({config:e,src:t,width:r,quality:s}){let o=(0,a.getDeploymentId)();if(t.startsWith("/")&&!t.startsWith("//")){let e=t.indexOf("?");if(-1!==e){let r=new URLSearchParams(t.slice(e+1)),n=r.get("dpl");if(n){o=n,r.delete("dpl");let a=r.toString();t=t.slice(0,e)+(a?"?"+a:"")}}}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 l=(0,n.findClosestQuality)(s,e);return`${e.path}?url=${encodeURIComponent(t)}&w=${r}&q=${l}${t.startsWith("/")&&o?`&dpl=${o}`:""}`}i.__next_img_default=!0;let s=i},605500,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"Image",{enumerable:!0,get:function(){return b}});let n=e.r(555682),a=e.r(190809),i=e.r(843476),s=a._(e.r(271645)),o=n._(e.r(174080)),l=n._(e.r(325633)),d=e.r(908927),c=e.r(987690),u=e.r(918556);e.r(233525);let m=e.r(65856),p=n._(e.r(1948)),g=e.r(818581),f={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 h(e,t,r,n,a,i,s){let o=e?.src;e&&e["data-loaded-src"]!==o&&(e["data-loaded-src"]=o,("decode"in e?e.decode():Promise.resolve()).catch(()=>{}).then(()=>{if(e.parentElement&&e.isConnected){if("empty"!==t&&a(!0),r?.current){let t=new Event("load");Object.defineProperty(t,"target",{writable:!1,value:e});let n=!1,a=!1;r.current({...t,nativeEvent:t,currentTarget:e,target:e,isDefaultPrevented:()=>n,isPropagationStopped:()=>a,persist:()=>{},preventDefault:()=>{n=!0,t.preventDefault()},stopPropagation:()=>{a=!0,t.stopPropagation()}})}n?.current&&n.current(e)}}))}function y(e){return s.use?{fetchPriority:e}:{fetchpriority:e}}"u"<typeof window&&(globalThis.__NEXT_IMAGE_IMPORTED=!0);let v=(0,s.forwardRef)(({src:e,srcSet:t,sizes:r,height:n,width:a,decoding:o,className:l,style:d,fetchPriority:c,placeholder:u,loading:m,unoptimized:p,fill:f,onLoadRef:v,onLoadingCompleteRef:x,setBlurComplete:b,setShowAltText:w,sizesInput:j,onLoad:S,onError:C,...k},E)=>{let M=(0,s.useCallback)(e=>{e&&(C&&(e.src=e.src),e.complete&&h(e,u,v,x,b,p,j))},[e,u,v,x,b,C,p,j]),R=(0,g.useMergedRef)(E,M);return(0,i.jsx)("img",{...k,...y(c),loading:m,width:a,height:n,decoding:o,"data-nimg":f?"fill":"1",className:l,style:d,sizes:r,srcSet:t,src:e,ref:R,onLoad:e=>{h(e.currentTarget,u,v,x,b,p,j)},onError:e=>{w(!0),"empty"!==u&&b(!0),C&&C(e)}})});function x({isAppRouter:e,imgAttributes:t}){let r={as:"image",imageSrcSet:t.srcSet,imageSizes:t.sizes,crossOrigin:t.crossOrigin,referrerPolicy:t.referrerPolicy,...y(t.fetchPriority)};return e&&o.default.preload?(o.default.preload(t.src,r),null):(0,i.jsx)(l.default,{children:(0,i.jsx)("link",{rel:"preload",href:t.srcSet?void 0:t.src,...r},"__nimg-"+t.src+t.srcSet+t.sizes)})}let b=(0,s.forwardRef)((e,t)=>{let r=(0,s.useContext)(m.RouterContext),n=(0,s.useContext)(u.ImageConfigContext),a=(0,s.useMemo)(()=>{let e=f||n||c.imageConfigDefault,t=[...e.deviceSizes,...e.imageSizes].sort((e,t)=>
3e-t),r=e.deviceSizes.sort((e,t)=>e-t),a=e.qualities?.sort((e,t)=>e-t);return{...e,allSizes:t,deviceSizes:r,qualities:a,localPatterns:"u"<typeof window?n?.localPatterns:e.localPatterns}},[n]),{onLoad:o,onLoadingComplete:l}=e,g=(0,s.useRef)(o);(0,s.useEffect)(()=>{g.current=o},[o]);let h=(0,s.useRef)(l);(0,s.useEffect)(()=>{h.current=l},[l]);let[y,b]=(0,s.useState)(!1),[w,j]=(0,s.useState)(!1),{props:S,meta:C}=(0,d.getImgProps)(e,{defaultLoader:p.default,imgConf:a,blurComplete:y,showAltText:w});return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(v,{...S,unoptimized:C.unoptimized,placeholder:C.placeholder,fill:C.fill,onLoadRef:g,onLoadingCompleteRef:h,setBlurComplete:b,setShowAltText:j,sizesInput:e.sizes,ref:t}),C.preload?(0,i.jsx)(x,{isAppRouter:!r,imgAttributes:S}):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)},204124,e=>{"use strict";var t=e.i(843476),r=e.i(271645),n=e.i(174080);e.s(["default",0,function({resumeUrl:e,buttonClassName:a,label:i="Resume"}){let[s,o]=(0,r.useState)(!1),l=(0,r.useCallback)(()=>o(!1),[]);return(0,r.useEffect)(()=>{if(!s)return;document.body.style.overflow="hidden";let e=e=>{"Escape"===e.key&&l()};return window.addEventListener("keydown",e),()=>{document.body.style.overflow="",window.removeEventListener("keydown",e)}},[s,l]),(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("button",{type:"button",onClick:()=>o(!0),className:a,children:i}),s&&(0,n.createPortal)((0,t.jsxs)("div",{className:"fixed inset-0 z-[300]",role:"dialog","aria-modal":"true","aria-label":"Resume",children:[(0,t.jsx)("button",{type:"button","aria-label":"Close resume",onClick:l,className:"rp-backdrop absolute inset-0 bg-black/70 backdrop-blur-sm"}),(0,t.jsxs)("aside",{className:"rp-panel absolute inset-y-0 right-0 flex w-full flex-col bg-[#101012] shadow-2xl sm:w-[min(92vw,60rem)]",children:[(0,t.jsxs)("header",{className:"flex items-center justify-between border-b border-white/10 px-5 py-4",children:[(0,t.jsx)("span",{className:"font-mono text-[0.65rem] uppercase tracking-[0.24em] text-white/60",children:"Resume"}),(0,t.jsxs)("div",{className:"flex items-center gap-3",children:[(0,t.jsx)("a",{href:e,download:!0,className:"rounded-full border border-white/20 px-4 py-1.5 text-xs text-white/80 transition-colors hover:border-white/50 hover:text-white",children:"Download PDF"}),(0,t.jsx)("a",{href:e,target:"_blank",rel:"noopener noreferrer",className:"rounded-full border border-white/20 px-4 py-1.5 text-xs text-white/80 transition-colors hover:border-white/50 hover:text-white",children:"Open full tab"}),(0,t.jsx)("button",{type:"button",onClick:l,"aria-label":"Close",className:"grid h-8 w-8 place-items-center rounded-full border border-white/20 text-white/80 transition-colors hover:border-white/50 hover:text-white",children:(0,t.jsx)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none","aria-hidden":!0,children:(0,t.jsx)("path",{d:"M6 6l12 12M18 6L6 18",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round"})})})]})]}),(0,t.jsx)("iframe",{src:`${e}#view=FitH&pagemode=none&toolbar=1&navpanes=0`,title:"Resume PDF",className:"h-full w-full flex-1 bg-white"})]})]}),document.body)]})}])},755838,(e,t,r)=>{"use strict";var n=e.r(271645),a="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},i=n.useState,s=n.useEffect,o=n.useLayoutEffect,l=n.useDebugValue;function d(e){var t=e.getSnapshot;e=e.value;try{var r=t();return!a(e,r)}catch(e){return!0}}var c="u"<typeof window||void 0===window.document||void 0===window.document.createElement?function(e,t){return t()}:function(e,t){var r=t(),n=i({inst:{value:r,getSnapshot:t}}),a=n[0].inst,c=n[1];return o(function(){a.value=r,a.getSnapshot=t,d(a)&&c({inst:a})},[e,r,t]),s(function(){return d(a)&&c({inst:a}),e(function(){d(a)&&c({inst:a})})},[e]),l(r),r};r.useSyncExternalStore=void 0!==n.useSyncExternalStore?n.useSyncExternalStore:c},802239,(e,t,r)=>{"use strict";t.exports=e.r(755838)},752822,(e,t,r)=>{"use strict";var n=e.r(271645),a=e.r(802239),i="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},s=a.useSyncExternalStore,o=n.useRef,l=n.useEffect,d=n.useMemo,c=n.useDebugValue;r.useSyncExternalStoreWithSelector=function(e,t,r,n,a){var u=o(null);if(null===u.current){var m={hasValue:!1,value:null};u.current=m}else m=u.current;var p=s(e,(u=d(function(){function e(e){if(!l){if(l=!0,s=e,e=n(e),void 0!==a&&m.hasValue){var t=m.value;if(a(t,e))return o=t}return o=e}if(t=o,i(s,e))return t;var r=n(e);return void 0!==a&&a(t,r)?(s=e,t):(s=e,o=r)}var s,o,l=!1,d=void 0===r?null:r;return[function(){return e(t())},null===d?void 0:function(){return e(d())}]},[t,r,n,a]))[0],u[1]);return l(function(){m.hasValue=!0,m.value=p},[p]),c(p),p}},430224,(e,t,r)=>{"use strict";
3t.exports=e.r(752822)},382987,e=>{"use strict";var t=e.i(271645),r=e.i(546607),n=e.i(989970);let a={up:{y:48,opacity:0},fade:{opacity:0},scale:{scale:1.08,opacity:0},mask:{yPercent:110}};e.s(["default",0,function({children:e,as:i,variant:s="up",delay:o=0,stagger:l,start:d="top 85%",className:c,id:u}){let m=(0,t.useRef)(null);return(0,t.useEffect)(()=>{let e=m.current;if(!e||(0,r.prefersReducedMotion)())return;let t=n.gsap.context(()=>{let t=l?e.querySelectorAll("[data-reveal-child]"):[e];t.length&&(n.gsap.set(t,a[s]),n.gsap.to(t,{y:0,yPercent:0,opacity:1,scale:1,duration:1,delay:o,ease:"expo.out",stagger:l??0,scrollTrigger:{trigger:e,start:d,once:!0}}))},e);return()=>t.revert()},[s,o,l,d]),(0,t.createElement)(i??"div",{ref:m,id:u,"data-reveal":"",className:c,style:"mask"===s?{display:"block"}:void 0},e)}])},828600,e=>{"use strict";var t=e.i(801950);e.s(["useThree",()=>t.C])},79585,e=>{"use strict";e.s(["ERAS",0,[{years:"2007-08",role:"Agile Labs · Technical Assistant",theme:"Axpert ERP Platform",heading:"Where it began",body:"Axpert ERP screens, layouts and workflow-driven interfaces, with front-end HTML and CSS. Learned enterprise software, business workflows and information organization from the ground up."},{years:"2010-11",role:"Rycoweb · Senior Web Designer & Developer",theme:"Web & Front-End",heading:"Designing for the web",body:"Responsive websites, interfaces and branding for international retail, manufacturing and service clients, built with HTML, CSS, Photoshop and Illustrator, from concept through delivery."},{years:"2012-13",role:"SourceN India · Senior UI Designer",theme:"Dell · SAP · Disney",heading:"Visual craft at scale",body:"High-fidelity interfaces, branding, illustration and prototypes for Dell, SAP, Disney, Badgeville and digital health, with front-end across HTML5, CSS3, Bootstrap, Android, iOS and Windows."},{years:"2013-15",role:"SpurTree Technologies · Lead UI/UX Designer",theme:"Transportation · Tourism · Analytics",heading:"Leading multi-platform design",body:"Lead UI/UX for transportation, mobility, tourism, analytics and mobile products across desktop, tablet, Android, iOS and Windows, from user flows and wireframes to high-fidelity design."},{years:"2015-16",role:"Modee Software R&D · UX Manager",theme:"iShippo eCommerce Platform",heading:"Owning a product and a team",body:"UX strategy, product design and team management for the iShippo marketplace connecting artisans and weavers with consumers across web, iOS and Android, plus UX processes and standards."},{years:"2016-19",role:"Mindtree · Technical Lead",theme:"Rolls-Royce MTU · Bosch · Titan · SC Johnson · Cargill",heading:"Enterprise design systems",body:"Established the design-system foundation for Rolls-Royce MTU, reimagined the Bosch help desk, redesigned Titan Tanishq POS, and shaped UI foundations for SC Johnson and Cargill."},{years:"2019-20",role:"Wipro · UX Architect",theme:"DHL Supply Chain",heading:"Finance transformation",body:"UX strategy and architecture for DHL Supply Chain's global Oracle Cloud finance program, simplifying Procure-to-Pay and Record-to-Report into intuitive, task-oriented enterprise journeys."},{years:"2020-21",role:"GlobalLogic · Design Architect & Product Owner",theme:"Mars Veterinary Health · VCA",heading:"Healthcare at enterprise scale",body:"Owned UX for Doctor Compensation, Code Catalog, Administration and Voyager PI3, and helped build the VCA Voyager design system across the Mars Veterinary Health ecosystem."},{years:"2021-22",role:"UCRYA LLC · Senior UX Consultant / Developer",theme:"Citizens Property Insurance · Federal health",heading:"Government and insurance",body:"UX architecture and front-end for a federal health-monitoring program and for Citizens Property Insurance, with Section 508 and ADA accessibility throughout."},{years:"2022-23",role:"S4 Technosoft · UI/UX Architect (Dow Jones)",theme:"Joining Dow Jones",heading:"Foundations at Dow Jones",body:"Onboarding, content discovery, ranking systems and publishing experiences across Dow Jones subscription platforms, plus the early evolution of the Unified Design System and accessibility.",hot:!0},{years:"2023-Now",role:"Dow Jones · Product Designer II / Senior UX Architect",theme:"AI, Search & Personalization",heading:"Leading AI and systems",body:"Factiva AI, Risk Journal V1, OpenFin (IMS), Factiva Search, W
3SJ Mobile Search, WSJ Vertical Video, WSJ+ personalization and Yomiuri V1, and the Unified Design System's move toward Index Design Systems.",hot:!0}],"MEDIUM_ARTICLES",0,[{pub:"Design Systems Collective",date:"Jul 2026",read:"9 min read",title:"I Asked Claude to Fix Its Own UX Using CLAUDE.md and DESIGN.md. It Failed.",excerpt:"A reproducible experiment that uncovered a missing layer in AI-readable design systems.",url:"https://www.designsystemscollective.com/i-asked-claude-to-fix-its-own-ux-using-claude-md-and-design-md-it-failed-d06ff6f3dae9",image:"https://cdn-images-1.medium.com/max/1672/1*PabDgO3KGewZgOULgayySQ.png"},{pub:"Design Systems Collective",date:"Jul 2026",read:"7 min read",title:"The Design File Is No Longer the Source of Truth",excerpt:"Why Storybook is becoming the executable layer of modern product systems.",url:"https://www.designsystemscollective.com/the-design-file-is-no-longer-the-source-of-truth-7d0264e61c85",image:"https://cdn-images-1.medium.com/max/1672/1*w22O0rqLcEN80zAtr-pukA.png"},{pub:"Design Systems Collective",date:"Jul 2026",read:"6 min read",title:"AI to Agentic to Autonomous to You",excerpt:"We stopped chatting with AI. Now we manage it. Here is the rest of the ladder.",url:"https://www.designsystemscollective.com/ai-to-agentic-to-autonomous-to-you-30983a469ba6",image:"https://cdn-images-1.medium.com/max/1672/1*GlLQql8jhRgYr0kfS57osA.png"},{pub:"Bootcamp",date:"Jul 2026",read:"12 min read",title:"The Motion Envelope: 30 Years After Flash, Figma Motion Still Cannot Say Why Anything Moves",excerpt:"Keyframes record how pixels move and nothing else. The Motion Envelope makes every animation declare its purpose, and a verifier proves the compiled output matches that intent.",url:"https://medium.com/design-bootcamp/the-motion-envelope-30-years-after-flash-figma-motion-still-cannot-say-why-anything-moves-8d87c19c997a"},{pub:"Design Systems Collective",date:"Jul 2026",read:"8 min read",title:"The Token Structure That Survives Five Products (Google Uses It Too)",excerpt:"It is the same three-tier system Google runs across Android in Material 3. But the reason to build it changed this year.",url:"https://www.designsystemscollective.com/the-token-structure-that-survives-five-products-google-uses-it-too-c480e864ef64"},{pub:"Bootcamp",date:"Jun 2026",read:"9 min read",title:"AI Can Generate the Flow. It Cannot Question the Experience.",excerpt:"A few months ago, I generated an onboarding flow in 4 minutes. It looked good. Clean screens. Logical steps. The right components in the right places.",url:"https://medium.com/design-bootcamp/ai-can-generate-the-flow-it-cannot-question-the-experience-888741ea6471",image:"/seed/medium/888741ea6471.jpg"},{pub:"Design Systems Collective",date:"Jun 2026",read:"5 min read",title:"From Design Files to Living Product Systems",excerpt:"I left thinking we had been using the wrong mental model for product development.",url:"https://www.designsystemscollective.com/from-design-files-to-living-product-systems-4dbce638c8b2",image:"/seed/medium/4dbce638c8b2.png"},{pub:"Design Systems Collective",date:"Jun 2026",read:"3 min read",title:"How I Use Claude as a UX Architect",excerpt:"In the first article of this series, I introduced a concept I call Experience Drift, what happens when requirements, design artifacts, and components drift apart.",url:"https://www.designsystemscollective.com/how-i-use-claude-as-a-ux-architect-f8a404822093",image:"/seed/medium/f8a404822093.png"},{pub:"Design Systems Collective",date:"Apr 2025",read:"6 min read",title:"Everyone Is Learning to Prompt. Nobody Is Learning to Think.",excerpt:"We are getting better at talking to AI, but worse at deciding what to build.",url:"https://medium.com/design-systems-collective/everyone-is-learning-to-prompt-nobody-is-learning-to-think-9e2e70b06091",image:"/seed/medium/9e2e70b06091.jpg"},{pub:"Design Systems Collective",date:"Jun 2025",read:"7 min read",title:"Your Design System Has Two Users Now. You Only Documented It for One.",excerpt:"Human contributors and AI agents both read your system now. Most teams only document it for one.",url:"https://medium.com/design-systems-collective/your-design-system-has-two-users-now-you-only-documented-it-for-one-b7ce74f3edea",image:"/seed/medium/b7ce74f3edea.jpg"},{pub:"Design Systems Collective",date:"Mar 2025",read:"8 min read",title:"From Design Systems to Design System Agents",excerpt:"How DSI evolved from a smarter checker into a broader vision for design-system governance.",url:"https://medium.com/design-systems-collective/from-design-systems-to-design-system-agents-why-i-started-rethinking-the-future-of-ui-governance-7bad9db49a9c",image:"/seed/medium/7bad9db49a9c.jpg"},{pub:"Design Systems Collective",date:"Oct 2025",read:"10 min read",title:"How Figma Could Tap Into MCP",excerpt:"My journey, imagination, and a practical guide. Tokens go out of sync; here is a way through.",url:"https://medium.com/design-systems-collective/how-figma-could-tap-into-mcp-my-journey-imagination-and-a-practical-guide-c4782405d240",image:"/seed/medium/c4782405d240.jpg"},{pub:"Design Systems Collective",date:"Jun 2025",read:"6 min read",title:"Figma Finally Has Native Slots. Here Is the Intelligence Layer On Top.",excerpt:"Every design system eventually hits the same invisible wall. Here is what is on the other side.",url:"https://medium.com/design-systems-collective/figma-finally-has-native-slots-here-is-the-intelligence-layer-built-on-top-of-them-5b674591ec56",image:"/seed/medium/5b674591ec56.jpg"},{pub:"Bootcamp",date:"Jun 2025",read:"5 min read",title:"Why Are Navigation Apps So Hard to See With Polarized Sunglasses?",excerpt:"A real-world accessibility failure most designers never test for, and how to fix it.",url:"https://medium.com/design-bootcamp/why-are-navigation-apps-so-hard-to-see-with-polarized-sunglasses-132269c638fc",image:"/seed/medium/132269c638fc.jpg"},{pub:"Design Systems Collective",date:"Sep 2025",read:"7 min read",title:"Design Systems for the Next Era: Flexibility, Accessibility, and AI",excerpt:"Where design systems go next, and how flexibility, accessibility, and AI reshape them.",url:"https://medium.com/design-systems-collective/design-systems-for-the-next-era-flexibility-accessibility-and-ai-5e3e750649a5",
3image:"/seed/medium/5e3e750649a5.jpg"},{pub:"Design Systems Collective",date:"Jun 2025",read:"6 min read",title:"Apple and Google Just Turned Your Design Tokens Into Suggestions.",excerpt:"What platform-level theming means for the tokens you thought you controlled.",url:"https://medium.com/design-systems-collective/apple-and-google-just-turned-your-design-tokens-into-suggestions-c57533f6ee23",image:"/seed/medium/c57533f6ee23.jpg"},{pub:"Design Systems Collective",date:"May 2025",read:"7 min read",title:"I Gave My Agent CLAUDE.md and DESIGN.md. It Ignored My Entire Component Library.",excerpt:"What happens when an AI agent ignores your component library, and what to do about it.",url:"https://medium.com/design-systems-collective/i-gave-my-agent-claude-md-and-design-md-it-ignored-my-entire-component-library-c6d7e9be34d4",image:"/seed/medium/c6d7e9be34d4.jpg"},{pub:"Design Systems Collective",date:"2026",read:"6 min read",title:"The End of Static Mockups",excerpt:"Why static mockups are giving way to living, intelligent design artifacts.",url:"https://medium.com/design-systems-collective/the-end-of-static-mockups-5ff9c888938d",image:"/seed/medium/5ff9c888938d.jpg"}],"PODCAST",0,{name:"Design by Suren",blurb:"My podcast on design systems, accessibility, and designing for everyone. Streaming on Spotify.",episodeLabel:"Episode · 2025",episodeTitle:"Figma and Neurodiversity",episodeBlurb:"How design systems can support neurodiverse users and improve accessibility, and why the tools we build should work with, not against, the way different minds think.",spotify:"https://open.spotify.com/episode/6FQ8ib8gxWnvqsSzjhuzX2"}])},948700,e=>{"use strict";var t=e.i(843476),r=e.i(271645),n=e.i(522016),a=e.i(546607),i=e.i(989970),s=e.i(875324),o=e.i(575056),l=e.i(925234),d=e.i(828600),c=e.i(190072);function u({reduced:e}){let{scene:t,camera:n}=(0,d.useThree)(),a=(0,r.useMemo)(()=>{let e,t,r;return(e=document.createElement("canvas")).width=e.height=64,(r=(t=e.getContext("2d")).createRadialGradient(32,32,0,32,32,32)).addColorStop(0,"rgba(255,255,255,1)"),r.addColorStop(.3,"rgba(255,225,180,.8)"),r.addColorStop(1,"rgba(255,190,130,0)"),t.fillStyle=r,t.fillRect(0,0,64,64),new c.CanvasTexture(e)},[]),i=(0,r.useRef)({x:0,y:0}),s=(0,r.useRef)(new c.Clock),o=(0,r.useRef)(null),m=(0,r.useRef)(null),p=(0,r.useRef)(new c.Group),g=(0,r.useRef)(null),f=(0,r.useRef)(null),h=(0,r.useRef)(null),y=(0,r.useRef)(null),v=(0,r.useRef)(0),x=(0,r.useRef)(!1),b=(0,r.useRef)(null),w=(0,r.useRef)(null),j=(0,r.useRef)(new c.Raycaster),S=(0,r.useRef)(new c.Vector2(-2,-2)),C=(0,r.useRef)(new c.Vector2(0,0)),k=(0,r.useRef)(0),E=(0,r.useRef)(0),M=(0,r.useRef)(!1),R=(0,r.useRef)(-99),A=(0,r.useRef)(!1),N=(0,r.useRef)(new c.Vector2(-2,-2));return(0,r.useEffect)(()=>{let r=new c.BufferGeometry,n=new Float32Array(900),s=new Float32Array(300);for(let e=0;e<300;e++)n[3*e]=(Math.random()-.5)*40,n[3*e+1]=(Math.random()-.5)*24,n[3*e+2]=(Math.random()-.5)*16,s[e]=.1+.4*Math.random();r.setAttribute("position",new c.BufferAttribute(n,3));let l=new c.PointsMaterial({size:.16,map:a,transparent:!0,color:new c.Color("#f5d6a0"),opacity:.8,depthWrite:!1,blending:c.AdditiveBlending}),d=new c.Points(r,l);o.current=d,m.current=s,t.add(d);let u=p.current;u.position.set(6.2,.3,0),t.add(u);let j=new Image;j.crossOrigin="anonymous",j.onload=()=>(t=>{let r,n=document.createElement("canvas");n.width=280,n.height=280;let i=n.getContext("2d"),s=.62*Math.min(t.width,t.height);i.drawImage(t,.2*t.width,.02*t.height,s,s,0,0,280,280);try{r=i.getImageData(0,0,280,280).data}catch{return}let o=[],l=[],d=[],m=[];for(let e=0;e<280;e++)for(let t=0;t<280;t++){let n=(280*e+t)*4,a=(.299*r[n]+.587*r[n+1]+.114*r[n+2])/255,i=t/280-.5,s=e/280-.5,c=i/.46*(i/.46)+(s+.02)/.52*((s+.02)/.52);if(a<.17||c>=1)continue;let u=Math.max(0,(c-.5)/.5);if(Math.random()>.995*(1-.45*u))continue;let p=u*u*2;o.push(11*i+(Math.random()-.5)*p,-(11.6*s)+(Math.random()-.5)*p,(Math.random()-.5)*(.18+.5*p)),m.push(u);let g=Math.min(1.7,.85+ +a);d.push(g,g,g);let f=2*Math.random()-1,h=2*Math.random()-1,y=2*Math.random()-1,v=Math.hypot(f,h,y)||1,x=4+16*Math.random();l.push(f/v*x,h/v*x+4,y/v*x)}
3v.current=o.length/3,f.current=new Float32Array(o),h.current=new Float32Array(l),y.current=new Float32Array(m);let p=new c.BufferGeometry;p.setAttribute("position",new c.Float32BufferAttribute(e?o.slice():l.slice(),3)),p.setAttribute("color",new c.Float32BufferAttribute(d,3));let j=new c.PointsMaterial({size:.062,map:a,vertexColors:!0,transparent:!0,opacity:1,depthWrite:!1,blending:c.AdditiveBlending}),S=new c.Points(p,j);S.renderOrder=1,g.current=S,u.add(S);let C=new c.CanvasTexture(n);C.colorSpace=c.SRGBColorSpace;let k=new c.ShaderMaterial({transparent:!0,depthWrite:!1,uniforms:{uMap:{value:C},uCursor:{value:new c.Vector2(.5,.5)},uActive:{value:0},uRadius:{value:.17},uFull:{value:0}},vertexShader:` 4 varying vec2 vUv; 5 void main() { 6 vUv = uv; 7 gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0); 8 }`,fragmentShader:` 9 varying vec2 vUv; 10 uniform sampler2D uMap; 11 uniform vec2 uCursor; 12 uniform float uActive; 13 uniform float uRadius; 14 uniform float uFull; 15 void main() { 16 vec4 tex = texture2D(uMap, vUv); 17 float lum = dot(tex.rgb, vec3(0.299, 0.587, 0.114)); 18 // ellipse face mask (matches the particle crop) to hide the corners 19 float nx = (vUv.x - 0.5) / 0.46; 20 float ny = (vUv.y - 0.5) / 0.52; 21 float e = nx * nx + ny * ny; 22 float face = 1.0 - smoothstep(0.72, 1.0, e); 23 // soft circular reveal around the cursor 24 float dist = distance(vUv, uCursor); 25 float circle = 1.0 - smoothstep(uRadius * 0.45, uRadius, dist); 26 // hover reveals a circle under the cursor; a click reveals the whole 27 // portrait (uFull), relaxing the luminance gate so darker tones show. 28 float shown = max(circle * uActive, uFull); 29 float gate = mix(smoothstep(0.1, 0.3, lum), 1.0, uFull); 30 float a = shown * face * gate; 31 gl_FragColor = vec4(tex.rgb * 1.12, a); 32 }`}),E=new c.Mesh(new c.PlaneGeometry(11,11.6),k);E.position.set(0,0,-.3),E.renderOrder=0,w.current=k,b.current=E,u.add(E),x.current=!0})(j),j.src="/seed/surendar-selvaraj-product-designer.jpg";let C=e=>{i.current.x=e.clientX/window.innerWidth-.5,i.current.y=e.clientY/window.innerHeight-.5,S.current.set(e.clientX/window.innerWidth*2-1,-(e.clientY/window.innerHeight*2-1))};e||window.addEventListener("mousemove",C);let k=e=>{N.current.set(e.clientX/window.innerWidth*2-1,-(e.clientY/window.innerHeight*2-1)),A.current=!0};return e||window.addEventListener("click",k),()=>{window.removeEventListener("mousemove",C),window.removeEventListener("click",k),t.remove(d),t.remove(u),r.dispose(),l.dispose()}},[t,a,e]),(0,l.useFrame)(()=>{let t=s.current.getElapsedTime(),r=e?0:i.current.x,a=e?0:i.current.y,l=o.current,d=m.current;if(l&&d){let e=l.geometry.attributes.position.array;for(let t=0;t<d.length;t++)e[3*t+1]+=.01*d[t],e[3*t+1]>12&&(e[3*t+1]=-12);l.geometry.attributes.position.needsUpdate=!0,l.rotation.y=.015*t}if(x.current&&g.current&&f.current&&h.current){var c;let i=e?1:(c=Math.max(0,Math.min(1,c=t/2.6)))*c*(3-2*c),s=Math.min(1,(window.scrollY||0)/(.8*window.innerHeight)),o=0,l=0;if(!e&&b.current&&w.current){let e=!1;if(i>.6&&s<.5){j.current.setFromCamera(S.current,n);let t=j.current.intersectObject(b.current);if(t.length&&t[0].uv){e=!0;let r=t[0].uv;w.current.uniforms.uCursor.value.set(r.x,r.y),C.current.set((r.x-.5)*11,(r.y-.5)*11.6)}}if(k.current+=(!!e-k.current)*(e?.18:.1),w.current.uniforms.uActive.value=k.current*(1-s),A.current&&(A.current=!1,i>.6&&s<.5)){j.current.setFromCamera(N.current,n);let e=j.current.intersectObject(b.current);if(e.length&&e[0].uv){let r=(e[0].uv.x-.5)/.46,n=(e[0].uv.y-.5)/.52;r*r+n*n<1.05&&(M.current=!0,R.current=t)}}let r=0;if(M.current){let e=t-R.current;r=+(e<3.2),e>4.4&&(M.current=!1)}E.current+=(r-E.current)*.1,w.current.uniforms.uFull.value=E.current*(1-s)}o=C.current.x,l=C.current.y;let d=k.current,u=g.current.geometry.attributes.position.array,m=f.current,x=h.current,I=y.current,P=e?0:.03*Math.sin(.9*t),D=i*(1-s)*(1-E.current);for(let r=0;r<v.current;r++){let n=3*r,a=I?I[r]:0,i=e?0:.02+a*a*.55,s=Math.sin(.8*t+.7*r)*i,c=Math.cos(+t+1.3*r)*i,p=Math.sin(.6*t+.5*r)*i,g=x[n]+(m[n]-x[n])*D+s*D,f=x[n+1]+(m[n+1]-x[n+1])*D+(P+c)*D,h=x[n+2]+(m[n+2]-x[n+2])*D+p*D;if(d>.001){let e=g-o,t=f-l,r=Math.hypot(e,t)||1;if(r<2.4){let n=(1-r/2.4)*2.6*d;g+=e/r*n,f+=t/r*n}}u[n]=g,u[n+1]=f,u[n+2]=h}g.current.geometry.attributes.position.needsUpdate=!0,g.current.material.opacity=Math.min(1,1.3*i)*(1-.8*s)*(1-.82*E.current),p.current.rotation.y=.18*r,p.current.rotation.x=.1*a,p.current.position.y=.3-3*s}n.position.x+=(2*r-n.position.x)*.04,n.position.y+=(-(1.4*a)-n.position.y)*.04,n.lookAt(.8,.3,0)}),null}
32function m(){return(0,t.jsxs)("div",{"aria-hidden":!0,className:"absolute inset-0 overflow-hidden opacity-50 md:opacity-100",children:[(0,t.jsx)("div",{className:"absolute right-[-8%] top-1/2 h-[82vh] w-[82vh] max-w-[120vw] -translate-y-1/2",style:{backgroundImage:"url(/seed/surendar-selvaraj-product-designer.jpg)",backgroundSize:"cover",backgroundPosition:"32% 8%",filter:"saturate(0.92) contrast(1.05) brightness(1.02)",WebkitMaskImage:"radial-gradient(ellipse 46% 52% at 50% 45%, #000 52%, transparent 76%)",maskImage:"radial-gradient(ellipse 46% 52% at 50% 45%, #000 52%, transparent 76%)"}}),(0,t.jsx)("div",{className:"absolute right-[-8%] top-1/2 h-[82vh] w-[82vh] max-w-[120vw] -translate-y-1/2 mix-blend-soft-light",style:{background:"radial-gradient(ellipse 46% 52% at 50% 45%, rgba(245,214,160,0.45) 0%, transparent 70%)",WebkitMaskImage:"radial-gradient(ellipse 46% 52% at 50% 45%, #000 52%, transparent 76%)",maskImage:"radial-gradient(ellipse 46% 52% at 50% 45%, #000 52%, transparent 76%)"}})]})}function p(){let[e,n]=(0,r.useState)("pending");if((0,r.useEffect)(()=>{n(!window.matchMedia("(max-width: 767px)").matches&&function(){try{let e=document.createElement("canvas");return!!(window.WebGLRenderingContext&&(e.getContext("webgl")||e.getContext("experimental-webgl")))}catch{return!1}}()?"webgl":"fallback")},[]),"pending"===e)return null;if("fallback"===e)return(0,t.jsx)(m,{});let i=(0,a.prefersReducedMotion)();return(0,t.jsx)(o.Canvas,{camera:{fov:60,near:.1,far:100,position:[0,0,14]},gl:{alpha:!0,antialias:!0},dpr:[1,2],style:{pointerEvents:"none"},children:(0,t.jsx)(u,{reduced:i})})}var g=e.i(204124);let f="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789/<>*";function h({text:e,as:t,className:n,duration:i=700}){let s=(0,r.useRef)(null);(0,r.useEffect)(()=>{let t=s.current;if(!t)return;if((0,a.prefersReducedMotion)()){t.textContent=e;return}let r=0,n=!1,o=()=>{if(n)return;n=!0;let a=performance.now(),s=o=>{let l=Math.min((o-a)/i,1),d=Math.floor(l*e.length),c="";for(let t=0;t<e.length;t++)t<d||" "===e[t]?c+=e[t]:c+=f[Math.floor(Math.random()*f.length)];t.textContent=c,l<1?r=requestAnimationFrame(s):(t.textContent=e,n=!1)};r=requestAnimationFrame(s)};t.textContent=e;let l=new IntersectionObserver(([e])=>{e.isIntersecting&&(o(),l.disconnect())},{threshold:.6});return l.observe(t),t.addEventListener("pointerenter",o),()=>{cancelAnimationFrame(r),l.disconnect(),t.removeEventListener("pointerenter",o)}},[e,i]);let o=e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">");return(0,r.createElement)(t??"span",{ref:s,className:n,suppressHydrationWarning:!0,dangerouslySetInnerHTML:{__html:o}})}e.s(["default",0,function({profile:e}){let o=(0,r.useRef)(null);(0,r.useEffect)(()=>{let e=o.current;if(!e||(0,a.prefersReducedMotion)())return;let t=e.querySelectorAll("[data-hero-fade]"),r=window.setTimeout(()=>{t.forEach(e=>{e.style.opacity="1",e.style.transform="none"})},1400),n=i.gsap.context(()=>{let t=Array.from(e.querySelectorAll("[data-hero-line]")).map(e=>new s.SplitText(e,{type:"chars,words"})),r=t.flatMap(e=>e.chars);return i.gsap.set(r,{yPercent:60}),i.gsap.set("[data-hero-fade]",{opacity:.6,y:12}),i.gsap.timeline({delay:.1}).to(r,{yPercent:0,duration:.9,ease:"expo.out",stagger:.014}).to("[data-hero-fade]",{opacity:1,y:0,duration:1,ease:"expo.out",stagger:.12},"-=0.7"),i.gsap.to("[data-hero-name]",{yPercent:18,ease:"none",scrollTrigger:{trigger:e,start:"top top",end:"bottom top",scrub:!0}}),()=>t.forEach(e=>e.revert())},e);return()=>{clearTimeout(r),n.revert()}},[]);let[l,...d]=e.name.split(" ");return(0,t.jsxs)("section",{ref:o,className:"relative flex min-h-[84svh] flex-col justify-center overflow-hidden py-24",children:[(0,t.jsx)("div",{className:"absolute inset-0 z-0",children:(0,t.jsx)(p,{})}),(0,t.jsx)("div",{"aria-hidden":!0,className:"pointer-events-none absolute inset-0 z-[1] bg-gradient-to-r from-bg via-bg/65 to-transparent"}),(0,t.jsx)("div",{"aria-hidden":!0,className:"pointer-events-none absolute inset-0 z-[1] bg-gradient-to-t from-bg/50 via-transparent to-bg/30"}),(0,t.jsx)("div",{"aria-hidden":!0,className:"pointer-events-none absolute right-[8%] top-1/4 z-[1] h-[60vh] w-[60vh] rounded-full opacity-20 blur-[120px]",style:{background:"radial-gradient(circle, var(--color-accent) 0%, transparent 60%)"}}),(0,t.jsx)("div",{className:"container-x relative z-10",children:(0,t.jsxs)("div",{className:"max-w-2xl",children:[(0,t.jsxs)("div",{"data-hero-fade":!0,className:"mb-7 flex max-w-[22rem] flex-col gap-2",children:[(0,t.jsx)(h,{as:"span",className:"eyebrow",text:e.location}),(0,t.jsx)(h,{as:"span",className:"eyebrow block text-fg-faint",text:"Product Design Leader · Experience Strategy · Content Experiences · AI Products · Design Systems"})]}),(0,t.jsxs)("h1",{"data-hero-name":!0,className:"font-display leading-[0.92] tracking-[-0.03em]",style:{fontSize:"clamp(2.8rem,6.5vw,6.5rem)"},children:[(0,t.jsx)("span",{className:"line-mask",children:(0,t.jsx)("span",{"data-hero-line":!0,className:"block",suppressHydrationWarning:!0,dangerouslySetInnerHTML:{__html:l}})}),(0,t.jsx)("span",{className:"line-mask",children:(0,t.jsx)("span",{"data-hero-line":!0,className:"block text-fg-muted",suppressHydrationWarning:!0,dangerouslySetInnerHTML:{__html:d.join(" ")}})})]}),(0,t.jsx)("p",{"data-hero-fade":!0,className:"mt-8 max-w-xl text-balance text-lg text-fg-muted md:text-xl",children:e.tagline}),(0,t.jsx)("p",{"data-hero-fade":!0,className:"mt-5 max-w-xl text-sm leading-relaxed text-fg-muted",children:"I lead product vision and execution across editorial video, content discovery, personalization, AI-powered research, and multi-platform design systems for The Wall Street Journal, Factiva, and Dow Jones."}),(0,t.jsxs)("div",{"data-hero-fade":!0,className:"mt-9 flex flex-wrap gap-4",children:[(0,t.jsx)(n.default,{href:"/work",className:"rounded-full bg-fg px-7 py-3 text-sm font-medium text-bg transition-transform hover:-translate-y-0.5",children:"View work"}),(0,t.jsx)("a",{href:"#getintouch",className:"rounded-full border border-accent px-7 py-3 text-sm font-medium text-accent transition-colors hover:bg-accent hover:text-bg",children:"Get in touch"}),e.resumeUrl&&(0,t.jsx)(g.default,{resumeUrl:e.resumeUrl,buttonClassName:"rounded-full border border-line px-7 py-3 text-sm text-fg transition-colors hover:border-accent hover:text-accent"})]}),(0,t.jsxs)("a",{"data-hero-fade":!0,href:"#work",className:"mt-14 inline-flex items-center gap-3 text-xs text-fg-faint transition-colors hover:text-accent",children:[(0,t.jsx)("span",{className:"h-10 w-px animate-pulse bg-line","aria-hidden":!0}),"View my case studies"]})]})})]})}],948700)},396262,e=>{"use strict";var t=e.i(843476),r=e.i(271645),n=e.i(522016),a=e.i(546607),i=e.i(989970);let s=[{name:"The Wall Street Journal",slug:"06-wsj-vertical-video"},{name:"Factiva AI",slug:"01-factiva-ai-smart-content"},{name:"Dow Jones Risk Journal",slug:"08-dow-jones-risk-journal"}
32,{name:"Barron's",slug:"dj-financial-advisor-onboarding"},{name:"WSJ+",slug:"wsj-subscriber-onboarding"},{name:"Dow Jones Design System",slug:"dow-jones-unified-design-system"},{name:"Rolls-Royce MTU",slug:"seed-design-system"},{name:"DHL Supply Chain",slug:"dhl-warehouse-operations-intelligence"},{name:"SAP",slug:"sap-corporate-profile"},{name:"Disney",slug:"disney-workflow-engagement"},{name:"Levi Strauss & Co.",slug:"capillary-levis-retail-crm"},{name:"VCA Animal Hospitals",slug:"vca-doctor-compensation"},{name:"Sennheiser",slug:"sennheiser-personas-journey-mapping"},{name:"Amadeus",slug:"amadeus-intranet-journey-mapping"}],o=s.slice(0,7),l=s.slice(7),d=e=>e.slug?`/work/${e.slug}`:"/work";function c({items:e,trackRef:r,onEnter:a,onLeave:i}){return(0,t.jsx)("div",{ref:r,"aria-hidden":!0,className:"flex w-max items-center will-change-transform",children:[...e,...e].map((e,r)=>(0,t.jsxs)("span",{className:"flex items-center",children:[(0,t.jsx)(n.default,{href:d(e),tabIndex:-1,className:"inline-block px-7 font-display text-[clamp(1.5rem,3.4vw,2.75rem)] leading-none tracking-tight text-fg-muted transition-all duration-300 hover:-translate-y-0.5 hover:text-accent",onMouseEnter:()=>a(e),onMouseLeave:i,children:e.name}),(0,t.jsx)("span",{className:"h-1.5 w-1.5 shrink-0 rounded-full bg-line","aria-hidden":!0})]},`${e.name}-${r}`))})}e.s(["default",0,function({studies:e=[]}){let u=(0,r.useRef)(null),m=(0,r.useRef)(null),p=(0,r.useRef)(null),[g,f]=(0,r.useState)(null),[h,y]=(0,r.useState)({x:0,y:0}),v=(0,r.useMemo)(()=>new Map(e.map(e=>[e.slug,e])),[e]);(0,r.useEffect)(()=>{if((0,a.prefersReducedMotion)())return;let e=i.gsap.context(()=>{let e=i.gsap.to(m.current,{xPercent:-50,duration:30,ease:"none",repeat:-1});i.gsap.set(p.current,{xPercent:-50});let t=[e,i.gsap.to(p.current,{xPercent:0,duration:34,ease:"none",repeat:-1})],r=e=>t.forEach(t=>i.gsap.to(t,{timeScale:e,duration:.6,ease:"power2.out"})),n=u.current,a=()=>r(0),s=()=>r(1);return n?.addEventListener("mouseenter",a),n?.addEventListener("mouseleave",s),()=>{n?.removeEventListener("mouseenter",a),n?.removeEventListener("mouseleave",s)}},u);return()=>e.revert()},[]);let x=g?.slug?v.get(g.slug):void 0;return(0,t.jsxs)("section",{className:"border-t border-line py-24 md:py-32",children:[(0,t.jsxs)("div",{className:"container-x",children:[(0,t.jsx)("p",{className:"eyebrow",children:"[ Selected clients & platforms ]"}),(0,t.jsx)("p",{className:"mt-5 max-w-5xl font-display text-[clamp(1.5rem,3vw,2.4rem)] leading-[1.15] tracking-tight",children:"Design systems and product work for enterprises across finance, news, logistics, healthcare, and retail."}),(0,t.jsxs)("p",{className:"mt-5 flex items-center gap-2.5 font-mono text-[11px] uppercase tracking-[0.16em] text-fg-faint",children:[(0,t.jsx)("span",{className:"inline-block h-1.5 w-1.5 shrink-0 rounded-full bg-accent","aria-hidden":!0}),"Hover to preview a case study, click to open"]})]}),(0,t.jsx)("ul",{className:"sr-only",children:s.map(e=>(0,t.jsx)("li",{children:(0,t.jsx)(n.default,{href:d(e),children:e.name})},e.name))}),(0,t.jsx)("div",{className:"container-x mt-10 hidden flex-wrap gap-x-8 gap-y-3 motion-reduce:flex",children:s.map(e=>(0,t.jsx)(n.default,{href:d(e),className:"font-display text-2xl tracking-tight text-fg-muted transition-colors hover:text-accent",children:e.name},e.name))}),(0,t.jsxs)("div",{ref:u,onMouseMove:e=>y({x:e.clientX,y:e.clientY}),onMouseLeave:()=>f(null),className:"relative mt-12 flex flex-col gap-5 overflow-hidden py-2 motion-reduce:hidden",children:[(0,t.jsx)("div",{className:"pointer-events-none absolute inset-y-0 left-0 z-10 w-24 bg-gradient-to-r from-bg to-transparent md:w-40"}),(0,t.jsx)("div",{className:"pointer-events-none absolute inset-y-0 right-0 z-10 w-24 bg-gradient-to-l from-bg to-transparent md:w-40"}),(0,t.jsx)(c,{items:o,trackRef:m,onEnter:f,onLeave:()=>f(null)}),(0,t.jsx)(c,{items:l,trackRef:p,onEnter:f,onLeave:()=>f(null)})]}),g&&(0,t.jsx)("div",{className:"pointer-events-none fixed z-[60] hidden w-[300px] lg:block",style:{left:Math.min(h.x+18,window.innerWidth-316),top:h.y+18},children:(0,t.jsxs)("div",{className:"overflow-hidden rounded-xl border border-line bg-bg-elev shadow-2xl",children:[(0,t.jsxs)("div",{className:"relative grid h-[150px] w-full place-items-center bg-bg-soft",children:[(0,t.jsx)("span",{className:"font-display text-4xl text-fg-faint",children:g.name.charAt(0)}),x?.cover&&(0,t.jsx)("img",{src:x.cover,alt:"",className:"absolute inset-0 h-full w-full object-cover object-top",onError:e=>{e.currentTarget.style.display="none"}})]}),(0,t.jsxs)("div",{className:"p-4",children:[(0,t.jsx)("p",{className:"font-mono text-[10px] uppercase tracking-[0.16em] text-accent",children:g.name}),(0,t.jsx)("h3",{className:"mt-1 font-display text-lg leading-tight tracking-tight",children:x?.title??"Selected work"}),(0,t.jsx)("p",{className:"mt-1 line-clamp-2 text-xs text-fg-muted",children:x?.summary??"Browse the full archive of enterprise case studies."})]})]})})]})}])},518508,e=>{"use strict";var t=e.i(843476),r=e.i(271645),n=e.i(546607),a=e.i(989970),i=e.i(883495),s=e.i(382987),o=e.i(79585);e.s(["default",0,function(){let e=(0,r.useRef)(null),l=(0,r.useRef)(null);return(0,r.useEffect)(()=>{let t=e.current;if(!t||(0,n.prefersReducedMotion)())return;let r=a.gsap.context(()=>{i.ScrollTrigger.create({trigger:t,start:"top 60%",end:"bottom 80%",onUpdate:e=>{l.current&&(l.current.style.width=`${100*e.progress}%`)}})},t);return()=>r.revert()},[]),(0,t.jsx)("section",{ref:e,id:"journey",className:"relative border-t border-line py-24 md:py-32",style:{background:"radial-gradient(120% 80% at 75% 30%, #1a150f 0%, #100c09 55%, #0a0a0b 100%)"},children:(0,t.jsxs)("div",{className:"container-x grid gap-10 md:grid-cols-[33
32%_67%] md:gap-12",children:[(0,t.jsxs)("div",{className:"md:sticky md:top-28 md:self-start",children:[(0,t.jsx)("p",{className:"eyebrow",children:"[ My journey ]"}),(0,t.jsx)("h2",{className:"mt-3 max-w-[14ch] font-display text-[clamp(2rem,4vw,3.4rem)] leading-[1.02] tracking-tight",children:"Where I have worked"}),(0,t.jsx)("p",{className:"mt-4 max-w-sm text-sm leading-relaxed text-fg-muted",children:"Product design across content, AI, and enterprise, spanning financial intelligence, news, healthcare, logistics, and retail, from foundational craft to AI-native systems."}),(0,t.jsxs)("div",{className:"mt-8 hidden w-[min(320px,80%)] flex-col gap-3 md:flex",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between font-mono text-[10px] uppercase tracking-[0.16em] text-fg-faint",children:[(0,t.jsx)("span",{children:"Foundations"}),(0,t.jsx)("span",{children:"Today"})]}),(0,t.jsx)("div",{className:"relative h-0.5 w-full overflow-hidden rounded-full bg-accent/15",children:(0,t.jsx)("div",{ref:l,className:"absolute left-0 top-0 h-full w-0 rounded-full",style:{background:"linear-gradient(90deg,#e9b872,#f6c48a)",boxShadow:"0 0 10px rgba(233,184,114,.6)"}})})]})]}),(0,t.jsx)("ol",{className:"relative flex flex-col gap-12 border-l border-line/50 pl-6 md:gap-16 md:pl-10",children:o.ERAS.map((e,r)=>(0,t.jsxs)(s.default,{as:"li",variant:"up",delay:r%2*.05,className:"relative",children:[(0,t.jsx)("span",{"aria-hidden":!0,className:"absolute -left-[1.6rem] top-1.5 h-2.5 w-2.5 rounded-full ring-4 ring-bg md:-left-[2.85rem]",style:{background:e.hot?"#e9b872":"#7fd4c6"}}),(0,t.jsx)("p",{className:"font-mono text-[11px] uppercase tracking-[0.16em]",style:{color:e.hot?"#e9b872":"#7fd4c6"},children:e.role}),(0,t.jsxs)("p",{className:"mt-1 font-mono text-[10px] uppercase tracking-[0.12em] text-fg-faint",children:[e.theme," · ",e.years]}),(0,t.jsx)("h3",{className:"mt-3 max-w-[24ch] font-display text-2xl leading-tight tracking-tight md:text-3xl",children:e.heading}),(0,t.jsx)("p",{className:"mt-3 max-w-[52ch] text-[15px] leading-relaxed text-fg-muted",children:e.body})]},e.years))})]})})}])},264992,e=>{"use strict";var t=e.i(843476),r=e.i(271645);e.s(["default",0,function({sections:e}){let[n,a]=(0,r.useState)("");return(0,r.useEffect)(()=>{let t=e.map(e=>document.getElementById(e.id)).filter(e=>!!e);if(!t.length)return;let r=new IntersectionObserver(e=>{e.forEach(e=>{e.isIntersecting&&a(e.target.id)})},{rootMargin:"-50% 0px -50% 0px"});return t.forEach(e=>r.observe(e)),()=>r.disconnect()},[e]),(0,t.jsx)("nav",{"aria-label":"Jump to section",className:"fixed right-5 z-40 hidden flex-col items-end gap-3.5 lg:flex",style:{to
32p:"calc(50% - 105px)",transform:"translateY(-100%)"},children:e.map(e=>{let r=n===e.id;return(0,t.jsxs)("a",{href:`#${e.id}`,"aria-current":r?"true":void 0,className:"group flex items-center justify-end gap-3 py-0.5",children:[(0,t.jsx)("span",{className:`whitespace-nowrap font-mono text-[10px] uppercase tracking-[0.18em] transition-opacity duration-300 ${r?"text-fg opacity-100":"text-fg-muted opacity-0 group-hover:opacity-100"}`,children:e.label}),(0,t.jsx)("span",{className:`h-px transition-all duration-300 ${r?"w-8 bg-accent":"w-4 bg-line group-hover:w-6 group-hover:bg-fg-muted"}`})]},e.id)})})}])}]);
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.