1(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,36181,e=>{"use strict";var t=e.i(43476),s=e.i(22016),a=e.i(32181),i=e.i(72328),n=e.i(23091),r=e.i(71645),l=e.i(57688),o=e.i(88653);let c='<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>',d='</title><path d="',u='"/></svg>',h=[{slug:"bluvi",screen:"screen-home.webp",name:"Bluvi",tag:"React Native · NestJS"},{slug:"clubo",screen:"screen-home.webp",name:"Super Brain",tag:"React Native · Firebase"},{slug:"secom-professional",screen:"screen-home.webp",name:"Secom Professional",tag:"React Native · AWS"},{slug:"vic",screen:"screen-home.webp",name:"VIC",tag:"React · React Native"},{slug:"ssm-holding",screen:"screen-01.webp",name:"SSM Holding",tag:"React Native · PostgreSQL"}],m=[{radius:122,duration:58},{radius:198,duration:86}],p=(e,t,s,a)=>({title:e.title,hex:e.hex,path:e.path,ring:t,angle:s,size:a}),x=[p({title:"React",slug:"react",get svg(){return c+"React"+d+this.path+u},path:"M14.23 12.004a2.236 2.236 0 0 1-2.235 2.236 2.236 2.236 0 0 1-2.236-2.236 2.236 2.236 0 0 1 2.235-2.236 2.236 2.236 0 0 1 2.236 2.236zm2.648-10.69c-1.346 0-3.107.96-4.888 2.622-1.78-1.653-3.542-2.602-4.887-2.602-.41 0-.783.093-1.106.278-1.375.793-1.683 3.264-.973 6.365C1.98 8.917 0 10.42 0 12.004c0 1.59 1.99 3.097 5.043 4.03-.704 3.113-.39 5.588.988 6.38.32.187.69.275 1.102.275 1.345 0 3.107-.96 4.888-2.624 1.78 1.654 3.542 2.603 4.887 2.603.41 0 .783-.09 1.106-.275 1.374-.792 1.683-3.263.973-6.365C22.02 15.096 24 13.59 24 12.004c0-1.59-1.99-3.097-5.043-4.032.704-3.11.39-5.587-.988-6.38-.318-.184-.688-.277-1.092-.278zm-.005 1.09v.006c.225 0 .406.044.558.127.666.382.955 1.835.73 3.704-.054.46-.142.945-.25 1.44-.96-.236-2.006-.417-3.107-.534-.66-.905-1.345-1.727-2.035-2.447 1.592-1.48 3.087-2.292 4.105-2.295zm-9.77.02c1.012 0 2.514.808 4.11 2.28-.686.72-1.37 1.537-2.02 2.442-1.107.117-2.154.298-3.113.538-.112-.49-.195-.964-.254-1.42-.23-1.868.054-3.32.714-3.707.19-.09.4-.127.563-.132zm4.882 3.05c.455.468.91.992 1.36 1.564-.44-.02-.89-.034-1.345-.034-.46 0-.915.01-1.36.034.44-.572.895-1.096 1.345-1.565zM12 8.1c.74 0 1.477.034 2.202.093.406.582.802 1.203 1.183 1.86.372.64.71 1.29 1.018 1.946-.308.655-.646 1.31-1.013 1.95-.38.66-.773 1.288-1.18 1.87-.728.063-1.466.098-2.21.098-.74 0-1.477-.035-2.202-.093-.406-.582-.802-1.204-1.183-1.86-.372-.64-.71-1.29-1.018-1.946.303-.657.646-1.313 1.013-1.954.38-.66.773-1.286 1.18-1.868.728-.064 1.466-.098 2.21-.098zm-3.635.254c-.24.377-.48.763-.704 1.16-.225.39-.435.782-.635 1.174-.265-.656-.49-1.31-.676-1.947.64-.15 1.315-.283 2.015-.386zm7.26 0c.695.103 1.365.23 2.006.387-.18.632-.405 1.282-.66 1.933-.2-.39-.41-.783-.64-1.174-.225-.392-.465-.774-.705-1.146zm3.063.675c.484.15.944.317 1.375.498 1.732.74 2.852 1.708 2.852 2.476-.005.768-1.125 1.74-2.857 2.475-.42.18-.88.342-1.355.493-.28-.958-.646-1.956-1.1-2.98.45-1.017.81-2.01 1.085-2.964zm-13.395.004c.278.96.645 1.957 1.1 2.98-.45 1.017-.812 2.01-1.086 2.964-.484-.15-.944-.318-1.37-.5-1.732-.737-2.852-1.706-2.852-2.474 0-.768 1.12-1.742 2.852-2.476.42-.18.88-.342 1.356-.494zm11.678 4.28c.265.657.49 1.312.676 1.948-.64.157-1.316.29-2.016.39.24-.375.48-.762.705-1.158.225-.39.435-.788.636-1.18zm-9.945.02c.2.392.41.783.64 1.175.23.39.465.772.705 1.143-.695-.102-1.365-.23-2.006-.386.18-.63.406-1.282.66-1.933zM17.92 16.32c.112.493.2.968.254 1.423.23 1.868-.054 3.32-.714 3.708-.147.09-.338.128-.563.128-1.012 0-2.514-.807-4.11-2.28.686-.72 1.37-1.536 2.02-2.44 1.107-.118 2.154-.3 3.113-.54zm-11.83.01c.96.234 2.006.415 3.107.532.66.905 1.345 1.727 2.035 2.446-1.595 1.483-3.092 2.295-4.11 2.295-.22-.005-.406-.05-.553-.132-.666-.38-.955-1.834-.73-3.703.054-.46.142-.944.25-1.438zm4.56.64c.44.02.89.034 1.345.034.46 0 .915-.01 1.36-.034-.44.572-.895 1.095-1.345 1.565-.455-.47-.91-.993-1.36-1.565z",source:"https://github.com/facebook/create-react-app/blob/282c03f9525fdf8061ffa1ec50dce89296d916bd/test/fixtures/relative-paths/src/logo.svg",hex:"61DAFB"},0,8,60),p({title:"Figma",slug:"figma",get svg(){return c+"Figma"+d+this.path+u},path:"M15.852 8.981h-4.588V0h4.588c2.476 0 4.49 2.014 4.49 4.49s-2.014 4.491-4.49 4.491zM12.735 7.51h3.117c1.665 0 3.019-1.355 3.019-3.019s-1.355-3.019-3.019-3.019h-3.117V7.51zm0 1.471H8.148c-2.476 0-4.49-2.014-4.49-4.49S5.672 0 8.148 0h4.588v8.981zm-4.587-7.51c-1.665 0-3.019 1.355-3.019 3.019s1.354 3.02 3.019 3.02h3.117V1.471H8.148zm4.587 15.019H8.148c-2.476 0-4.49-2.014-4.49-4.49s2.014-4.49 4.49-4.49h4.588v8.98zM8.148 8.981c-1.
1665 0-3.019 1.355-3.019 3.019s1.355 3.019 3.019 3.019h3.117V8.981H8.148zM8.172 24c-2.489 0-4.515-2.014-4.515-4.49s2.014-4.49 4.49-4.49h4.588v4.441c0 2.503-2.047 4.539-4.563 4.539zm-.024-7.51a3.023 3.023 0 0 0-3.019 3.019c0 1.665 1.365 3.019 3.044 3.019 1.705 0 3.093-1.376 3.093-3.068v-2.97H8.148zm7.704 0h-.098c-2.476 0-4.49-2.014-4.49-4.49s2.014-4.49 4.49-4.49h.098c2.476 0 4.49 2.014 4.49 4.49s-2.014 4.49-4.49 4.49zm-.097-7.509c-1.665 0-3.019 1.355-3.019 3.019s1.355 3.019 3.019 3.019h.098c1.665 0 3.019-1.355 3.019-3.019s-1.355-3.019-3.019-3.019h-.098z",source:"https://www.figma.com/using-the-figma-brand/",hex:"F24E1E",guidelines:"https://www.figma.com/using-the-figma-brand/"},0,98,52),p({title:"Kotlin",slug:"kotlin",get svg(){return c+"Kotlin"+d+this.path+u},path:"M24 24H0V0h24L12 12Z",source:"https://www.jetbrains.com/company/brand/logos/",hex:"7F52FF",guidelines:"https://www.jetbrains.com/company/brand/"},0,188,48),p({title:"Angular",slug:"angular",get svg(){return c+"Angular"+d+this.path+u},path:"M16.712 17.711H7.288l-1.204 2.916L12 24l5.916-3.373-1.204-2.916ZM14.692 0l7.832 16.855.814-12.856L14.692 0ZM9.308 0 .662 3.999l.814 12.856L9.308 0Zm-.405 13.93h6.198L12 6.396 8.903 13.93Z",source:"https://angular.dev/press-kit",hex:"0F0F11",guidelines:"https://angular.dev/press-kit",license:{type:"CC-BY-4.0",url:"https://spdx.org/licenses/CC-BY-4.0"}}
1,0,278,50),p({title:"Next.js",slug:"nextdotjs",get svg(){return c+"Next.js"+d+this.path+u},path:"M18.665 21.978C16.758 23.255 14.465 24 12 24 5.377 24 0 18.623 0 12S5.377 0 12 0s12 5.377 12 12c0 3.583-1.574 6.801-4.067 9.001L9.219 7.2H7.2v9.596h1.615V9.251l9.85 12.727Zm-3.332-8.533 1.6 2.061V7.2h-1.6v6.245Z",source:"https://vercel.com/design/brands#next-js",hex:"000000",guidelines:"https://vercel.com/design/brands#next-js"},1,46,56),p({title:"TypeScript",slug:"typescript",get svg(){return c+"TypeScript"+d+this.path+u},path:"M1.125 0C.502 0 0 .502 0 1.125v21.75C0 23.498.502 24 1.125 24h21.75c.623 0 1.125-.502 1.125-1.125V1.125C24 .502 23.498 0 22.875 0zm17.363 9.75c.612 0 1.154.037 1.627.111a6.38 6.38 0 0 1 1.306.34v2.458a3.95 3.95 0 0 0-.643-.361 5.093 5.093 0 0 0-.717-.26 5.453 5.453 0 0 0-1.426-.2c-.3 0-.573.028-.819.086a2.1 2.1 0 0 0-.623.242c-.17.104-.3.229-.393.374a.888.888 0 0 0-.14.49c0 .196.053.373.156.529.104.156.252.304.443.444s.423.276.696.41c.273.135.582.274.926.416.47.197.892.407 1.266.628.374.222.695.473.963.753.268.279.472.598.614.957.142.359.214.776.214 1.253 0 .657-.125 1.21-.373 1.656a3.033 3.033 0 0 1-1.012 1.085 4.38 4.38 0 0 1-1.487.596c-.566.12-1.163.18-1.79.18a9.916 9.916 0 0 1-1.84-.164 5.544 5.544 0 0 1-1.512-.493v-2.63a5.033 5.033 0 0 0 3.237 1.2c.333 0 .624-.03.872-.09.249-.06.456-.144.623-.25.166-.108.29-.234.373-.38a1.023 1.023 0 0 0-.074-1.089 2.12 2.12 0 0 0-.537-.5 5.597 5.597 0 0 0-.807-.444 27.72 27.72 0 0 0-1.007-.436c-.918-.383-1.602-.852-2.053-1.405-.45-.553-.676-1.222-.676-2.005 0-.614.123-1.141.369-1.582.246-.441.58-.804 1.004-1.089a4.494 4.494 0 0 1 1.47-.629 7.536 7.536 0 0 1 1.77-.201zm-15.113.188h9.563v2.166H9.506v9.646H6.789v-9.646H3.375z",source:"https://www.typescriptlang.org/branding",hex:"3178C6",guidelines:"https://www.typescriptlang.org/branding"},1,132,52),p({title:"Flutter",slug:"flutter",get svg(){return c+"Flutter"+d+this.path+u},path:"M14.314 0L2.3 12 6 15.7 21.684.013h-7.357zm.014 11.072L7.857 17.53l6.47 6.47H21.7l-6.46-6.468 6.46-6.46h-7.37z",source:"https://flutter.dev/brand",hex:"02569B",guidelines:"https://flutter.dev/brand"},1,216,58),p({title:"Node.js",slug:"nodedotjs",get svg(){return c+"Node.js"+d+this.path+u},path:"M11.998,24c-0.321,0-0.641-0.084-0.922-0.247l-2.936-1.737c-0.438-0.245-0.224-0.332-0.08-0.383 c0.585-0.203,0.703-0.25,1.328-0.604c0.065-0.037,0.151-0.023,0.218,0.017l2.256,1.339c0.082,0.045,0.197,0.045,0.272,0l8.795-5.076 c0.082-0.047,0.134-0.141,0.134-0.238V6.921c0-0.099-0.053-0.192-0.137-0.242l-8.791-5.072c-0.081-0.047-0.189-0.047-0.271,0 L3.075,6.68C2.99,6.729,2.936,6.825,2.936,6.921v10.15c0,0.097,0.054,0.189,0.139,0.235l2.409,1.392 c1.307,0.654,2.108-0.116,2.108-0.89V7.787c0-0.142,0.114-0.253,0.256-0.253h1.115c0.139,0,0.255,0.112,0.255,0.253v10.021 c0,1.745-0.95,2.745-2.604,2.745c-0.508,0-0.909,0-2.026-0.551L2.28,18.675c-0.57-0.329-0.922-0.945-0.922-1.604V6.921 c0-0.659,0.353-1.275,0.922-1.603l8.795-5.082c0.557-0.315,1.296-0.315,1.848,0l8.794,5.082c0.57,0.329,0.924,0.944,0.924,1.603 v10.15c0,0.659-0.354,1.273-0.924,1.604l-8.794,5.078C12.643,23.916,12.324,24,11.998,24z M19.099,13.993 c0-1.9-1.284-2.406-3.987-2.763c-2.731-0.361-3.009-0.548-3.009-1.187c0-0.528,0.235-1.233,2.258-1.233 c1.807,0,2.473,0.389,2.747,1.607c0.024,0.115,0.129,0.199,0.247,0.199h1.141c0.071,0,0.138-0.031,0.186-0.081 c0.048-0.054,0.074-0.123,0.067-0.196c-0.177-2.098-1.571-3.076-4.388-3.076c-2.508,0-4.004,1.058-4.004,2.833 c0,1.925,1.488,2.457,3.895,2.695c2.88,0.282,3.103,0.703,3.103,1.269c0,0.983-0.789,1.402-2.642,1.402 c-2.327,0-2.839-0.584-3.011-1.742c-0.02-0.124-0.126-0.215-0.253-0.215h-1.137c-0.141,0-0.254,0.112-0.254,0.253 c0,1.482,0.806,3.248,4.655,3.248C17.501,17.007,19.099,15.91,19.099,13.993z",source:"https://nodejs.org/en/about/branding",hex:"5FA04E",guidelines:"https://nodejs.org/en/about/branding"},1,318,54)];function f({reduce:e}){let[s,i]=(0,r.useState)(0);(0,r.useEffect)(()=>{if(e)return;let t=setInterval(()=>i(e=>e+1),4800);return()=>clearInterval(t)},[e]);let n=h[s%h.length];return(0,t.jsxs)(a.motion.div,{"aria-hidden":!0,initial:!e&&{opacity:0,scale:.95,y:24}
1,animate:{opacity:1,scale:1,y:0},transition:{duration:.8,delay:.25,ease:[.16,1,.3,1]},className:"relative hidden h-[34rem] lg:block",children:[(0,t.jsx)("div",{className:"pointer-events-none absolute left-[58%] top-1/2 -z-10 h-[30rem] w-[30rem] -translate-x-1/2 -translate-y-1/2 rounded-full bg-[radial-gradient(circle,rgba(1,194,187,0.16),transparent_62%)]"}),(0,t.jsx)("div",{className:"pointer-events-none absolute left-[58%] top-1/2 -z-10 -translate-x-1/2 -translate-y-1/2",children:m.map(e=>(0,t.jsx)("div",{className:"absolute left-0 top-0 -translate-x-1/2 -translate-y-1/2 rounded-full border border-ink/[0.05]",style:{width:2*e.radius,height:2*e.radius}},e.radius))}),(0,t.jsx)("div",{className:"absolute left-[58%] top-1/2",children:m.map((s,i)=>(0,t.jsx)(a.motion.div,{className:"absolute left-0 top-0",animate:e?void 0:{rotate:360},transition:{duration:s.duration,ease:"linear",repeat:1/0},children:x.filter(e=>e.ring===i).map(i=>(0,t.jsx)("div",{className:"absolute left-0 top-0",style:{transform:`rotate(${i.angle}deg) translateY(-${s.radius}px) rotate(${-i.angle}deg)`},children:(0,t.jsx)(a.motion.div,{animate:e?void 0:{rotate:-360},transition:{duration:s.duration,ease:"linear",repeat:1/0},style:{width:i.size,height:i.size,marginLeft:-i.size/2,marginTop:-i.size/2},children:(0,t.jsx)("div",{className:"flex h-full w-full items-center justify-center rounded-[22%] bg-white shadow-[var(--shadow-card)]",children:(0,t.jsx)("svg",{"aria-hidden":!0,viewBox:"0 0 24 24",className:"h-[52%] w-[52%]",fill:`#${i.hex}`,children:(0,t.jsx)("path",{d:i.path})})})})},i.title))},i))}),(0,t.jsx)("div",{className:"absolute left-[4%] top-1/2 z-10 w-[46%] -translate-y-1/2",children:(0,t.jsx)("div",{className:"relative aspect-[9/19.5] w-full rounded-[14%/6.5%] bg-ink p-[3.5%] shadow-2xl ring-1 ring-black/30",children:(0,t.jsxs)("div",{className:"relative h-full w-full overflow-hidden rounded-[11%/5.2%] bg-white",children:[(0,t.jsx)("div",{className:"absolute inset-0 isolate",children:(0,t.jsx)(o.AnimatePresence,{initial:!1,children:(0,t.jsx)(a.motion.div,{initial:!e&&{opacity:0},animate:{opacity:1,transition:{duration:.8,ease:"easeInOut"}},exit:{opacity:0,transition:{duration:.01,delay:.85}},style:{zIndex:s},className:"absolute inset-0",children:(0,t.jsx)(l.default,{src:`/images/work/${n.slug}/${n.screen}`,alt:"",fill:!0,sizes:"(min-width:1024px) 240px, 0px",className:"object-cover object-top",priority:0===s})},s)})}),(0,t.jsx)("div",{className:"absolute left-1/2 top-[2.5%] h-[3.5%] w-[28%] -translate-x-1/2 rounded-full bg-ink"})]})})})]})}var g=e.i(56475);function v({disabled:e}){return(0,t.jsx)("svg",{className:"absolute -bottom-2 left-0 h-3 w-full text-teal",viewBox:"0 0 200 12",preserveAspectRatio:"none",fill:"none","aria-hidden":!0,children:(0,t.jsx)(a.motion.path,{d:"M2 8 C 50 2, 150 2, 198 8",stroke:"currentColor",strokeWidth:4,strokeLinecap:"round",initial:e?{pathLength:1}:{pathLength:0},animate:{pathLength:1},transition:{duration:.8*!e,delay:.6,ease:"easeOut"}})})}function b({disabled:e}){return(0,t.jsx)("div",{className:"pointer-events-none absolute inset-0 -z-10 overflow-hidden",children:[{color:"var(--color-teal)",size:280,x:"8%",y:"12%",d:14},{color:"var(--color-indigo)",size:220,x:"78%",y:"8%",d:18},{color:"var(--color-amber)",size:200,x:"70%",y:"62%",d:16}].map((s,i)=>(0,t.jsx)(a.motion.span,{className:"absolute rounded-full opacity-[0.18] blur-3xl",style:{width:s.size,height:s.size,left:s.x,top:s.y,background:s.color},animate:e?void 0:{y:[0,-24,0],x:[0,12,0],scale:[1,1.08,1]},transition:{duration:s.d,repeat:1/0,ease:"easeInOut"}},i))})}e.s(["Hero",0,function(){let e=(0,i.useReducedMotion)(),r={hidden:{opacity:0,y:24*!e},show:{opacity:1,y:0,transition:{duration:.7*!e,ease:[.16,1,.3,1]}}};return(0,t.jsxs)("section",{className:"relative overflow-hidden",children:[(0,t.jsx)("div",{className:"bg-mesh pointer-events-none absolute inset-0 -z-10"}),(0,t.jsx)(b,{disabled:!!e}),(0,t.jsxs)("div",{className:"mx-auto grid max-w-7xl items-center gap-12 px-5 pb-20 pt-16 sm:px-8 sm:pt-24 lg:grid-cols-[1.05fr_0.92fr] lg:pt-28",children:[(0,t.jsxs)(a.motion.div,{variants:{hidden:{},show:{transition:{staggerChildren:.08*!e,delayChildren:.05}}},initial:"hidden",animate:"show",className:"max-w-2xl",children:[(0,t.jsx)(a.motion.div,{variants:r,children:(0,t.jsxs)("span",{className:"inline-flex items-center gap-2 rounded-full border border-ink/10 bg-white/60 px-4 py-1.5 text-sm font-medium text-ink-soft backdrop-blur",children:[(0,t.jsx)(n.LogoMark,{className:"h-4 w-4 text-teal"}),"Digital transformation partner · ",g.site.location]})}),(0,t.jsxs)(a.motion.h1,{variants:r,className:"mt-6 font-display text-5xl font-bold leading-[1.02] tracking-tight text-ink sm:text-6xl lg:text-6xl xl:text-7xl text-balance",children:["We build software that"," ",(0,t.jsxs)("span",{className:"relative whitespace-nowrap",children:[(0,t.jsx)("span",{className:"relative z-10",children:"moves people"}),(0,t.jsx)(v,{disabled:!!e})]})," ","forward."]}),(0,t.jsxs)(a.motion.p,{variants:r,className:"mt-6 max-w-2xl text-lg text-ink-soft sm:text-xl text-balance",children:[g.site.tagline," From discovery to production, we ship people-centric web and mobile products with dedicated teams â and we sweat every detail of the end-user experience."]}),(0,t.jsxs)(a.motion.div,{variants:r,className:"mt-9 flex flex-col gap-3 sm:flex-row",children:[(0,t.jsxs)(s.default,{href:"/work",className:"inline-flex items-center justify-center gap-2 rounded-full bg-ink px-7 py-3.5 text-base font-semibold text-paper transition-transform hover:-translate-y-0.5 hover:bg-teal-ink",children:["See our work",(0,t.jsx)("svg",{viewBox:"0 0 24 24",className:"h-4 w-4",fill:"none",stroke:"currentColor",strokeWidth:2.2,strokeLinecap:"round",strokeLinejoin:"round",children:(0,t.jsx)("path",{d:"M5 12h14M13 6l6 6-6 6"})})]}),(0,t.jsx)(s.default,{href:"/contact",className:"inline-flex items-center justify-center rounded-full border border-ink/15 bg-white/70 px-7 py-3.5 text-base font-semibold text-ink backdrop-blur transition-colors hover:border-ink/40",children:"Start a project"})]})]}),(0,t.jsx)(f,{reduce:!!e})]})]})}],36181)},49492,e=>{"use strict";class t{constructor(e){this.stop=()=>this.runAll("stop"),this.animations=e.filter(Boolean)}get finished(){return Promise.all(this.animations.map(e=>e.finished))}getAll(e){return this.animations[0][e]}setAll(e,t){for(let s=0;s<this.animations.length;s++)this.animations[s][e]=t}attachTimeline(e){let t=this.animations.map(t=>t.attachTimeline(e));return()=>{t.forEach((e,t)=>{e&&e(),this.animations[t].stop()})}}get time(){return this.getAll("time")}set time(e){this.setAll("time",e)}get speed(){return this.getAll("speed")}set speed(e){this.setAll("speed",e)}get state(){return this.getAll("state")}get startTime(){return this.getAll("startTime")}get duration(){return s(this.animations,"duration")}get iterationDuration(){return s(this.animations,"iterationDuration")}runAll(e){this.animations.forEach(t=>t[e]())}play(){this.runAll("play")}pause(){this.runAll("pause")}cancel(){this.runAll("cancel")}complete(){this.runAll("complete")}}function s(e,t){let s=0;for(let a=0;a<e.length;a++){let i=e[a][t];null!==i&&i>s&&(s=i)}return s}class a extends t{then(e,t){return this.finished.finally(e).then(()=>{})}}var i=e.i(33887),n=e.i(86427),r=e.i(28409),l=e.i(83411),o=e.i(15923),c=e.i(97307),d=e.i(21748),u=e.i(15932),h=e.i(83920),m=e.i(63074),p=e.i(65566),x=e.i(30151),f=e.i(93544);function g(e,t){var s;let a;return(0,f.isEasingArray)(e)?e[s=e.length,((t-0)%(a=s-0)+a)%a+0]:e}var v=e.i(49652);function b(e){return"object"==typeof e&&!Array.isArray(e)}function y(e,t,s,a){return null==e?[]:"string"==typeof e&&b(t)?(0,v.resolveElements)(e,s,a):e instanceof NodeList?Array.from(e):Array.isArray(e)?e.filter(e=>null!=e):[e]}function w(e,t,s,a){return"number"==typeof t?t:t.startsWith("-")||t.startsWith("+")?Math.max(0,e+parseFloat(t)):"<"===t?s:t.startsWith("<")?Math.max(0,s+parseFloat(t.slice(1))):a.get(t)??e}var j=e.i(706);function N(e,t){return e.at!==t.at?e.at-t.at:null===e.value?1:null===t.value?-1:0}function k(e,t){return t.has(e)||t.set(e,{}),t.get(e)}function z(e,t){return t[e]||(t[e]=[]),t[e]}let M=e=>"number"==typeof e,A=e=>e.every(M);var S=e.i(68705),C=e.i(72094),V=e.i(72323),E=e.i(89026),I=e.i(36331),L=e.i(75737),F=e.i(86783),R=e.i(30162),B=e.i(17218);class H extends B.VisualElement{constructor(){super(...arguments),this.type="object"}readValueFromInstance(e,t){if(t in e){let s=e[t];if("string"==typeof s||"number"==typeof s)return s}}getBaseTargetFromProps(){}removeValueFromRenderState(e,t){delete t.output[e]}measureInstanceViewportBox(){return(0,R.createBox)()}build(e,t){Object.assign(e.output,t)}renderInstance(e,{output:t}){Object.assign(e,t)}sortInstanceNodePosition(){return 0}}function $(e){let t={presenceContext:null,props:{}
1,visualState:{renderState:{transform:{},transformOrigin:{},style:{},vars:{},attrs:{}},latestValues:{}}},s=(0,E.isSVGElement)(e)&&!(0,I.isSVGSVGElement)(e)?new L.SVGVisualElement(t):new F.HTMLVisualElement(t);s.mount(e),C.visualElementStore.set(e,s)}function P(e){let t=new H({presenceContext:null,props:{},visualState:{renderState:{output:{}},latestValues:{}}});t.mount(e),C.visualElementStore.set(e,t)}function T(e,t,s,a){let i=[];if((0,l.isMotionValue)(e)||"number"==typeof e||"string"==typeof e&&!b(t))i.push((0,S.animateSingleValue)(e,b(t)&&t.default||t,s&&s.default||s));else{if(null==e)return i;let n=y(e,t,a),r=n.length;(0,p.invariant)(!!r,"No valid elements provided.","no-valid-elements");for(let e=0;e<r;e++){let a=n[e],l=a instanceof Element?$:P;C.visualElementStore.has(a)||l(a);let o=C.visualElementStore.get(a),c={...s};"delay"in c&&"function"==typeof c.delay&&(c.delay=c.delay(e,r)),i.push(...(0,V.animateTarget)(o,{...t,transition:c},{}))}}return i}let _=function(e={}){let{scope:t,reduceMotion:s,skipAnimations:f}=e;return function(e,v,b){var M;let S,C=[],V={};if(void 0!==s&&(V.reduceMotion=s),void 0!==f&&(V.skipAnimations=f),Array.isArray(e)&&e.some(Array.isArray)){let s,{onComplete:a,...f}=v||{};"function"==typeof a&&(S=a),M={...V,...f},s=[],(function(e,{defaultTransition:t={},...s}={},a,n){let r=t.duration||.3,f=new Map,v=new Map,b={},M=new Map,S=0,C=0,V=0;for(let s=0;s<e.length;s++){let h=e[s];if("string"==typeof h){M.set(h,C);continue}if(!Array.isArray(h)){M.set(h.name,w(C,h.at,S,M));continue}let[f,N,L={}]=h;void 0!==L.at&&(C=w(C,L.at,S,M));let F=0,R=(e,s,a,l=0,h=0)=>{var f;let v=Array.isArray(f=e)?f:[f],{delay:b=0,times:y=(0,o.defaultOffset)(v),type:w=t.type||"keyframes",repeat:N,repeatType:k,repeatDelay:z=0,...M}=s,{ease:S=t.ease||"easeOut",duration:E}=s,I="function"==typeof b?b(l,h):b,L=v.length,R=(0,c.isGenerator)(w)?w:n?.[w||"keyframes"];if(L<=2&&R){let e=100;2===L&&A(v)&&(e=Math.abs(v[1]-v[0]));let s={...t,...M};void 0!==E&&(s.duration=(0,m.secondsToMilliseconds)(E));let a=(0,d.createGeneratorEasing)(s,e,R);S=a.ease,E=a.duration}E??(E=r);let B=C+I;1===y.length&&0===y[0]&&(y[1]=1);let H=y.length-v.length;if(H>0&&(0,u.fillOffset)(y,H),1===v.length&&v.unshift(null),N&&(0,p.warning)(N<20,`Sequence segments can't repeat ${N} times â ignoring repeat option. Use a value below 20 or apply repeat at the sequence level instead.`),N&&N<20){let e=E>0?z/E:0;E=E*(N+1)+z*N;let t=[...v],s=[...y],a=[...S=Array.isArray(S)?[...S]:[S]],i="reverse"===k||"mirror"===k,n=t,r=a;i&&(n=[...t].reverse(),"reverse"===k&&(r=[...a].reverse().map(e=>"function"==typeof e?(0,x.reverseEasing)(e):e)));for(let l=0;l<N;l++){let o=i&&l%2==0,c=o?n:t,d=o?r:a,u=(l+1)*(1+e);e>0&&(v.push(v[v.length-1]),y.push(u),S.push("linear")),v.push(...c);for(let e=0;e<c.length;e++)y.push(s[e]+u),S.push(0===e?"linear":g(d,e-1))}!function(e,t,s=0){let a=t+1+t*s;for(let t=0;t<e.length;t++)e[t]=e[t]/a}(y,N,e)}let $=B+E;!function(e,t,s,a,n,r){for(let t=0;t<e.length;t++){let s=e[t];s.at>n&&s.at<r&&((0,i.removeItem)(e,s),t--)}for(let i=0;i<t.length;i++)e.push({value:t[i],at:(0,j.mixNumber)(n,r,a[i]),easing:g(s,i)})}(a,v,S,y,B,$),F=Math.max(I+E,F),V=Math.max($,V)};if((0,l.isMotionValue)(f))R(N,L,z("default",k(f,v)));else{let e=y(f,N,a,b),t=e.length;for(let s=0;s<t;s++){let a=k(e[s],v);for(let e in N){var E,I;R(N[e],(E=L,I=e,E&&E[I]?{...E,...E[I]}:{...E}),z(e,a),s,t)}}}S=C,C+=F}return v.forEach((e,a)=>{for(let i in e){let n=e[i];n.sort(N);let r=[],l=[],o=[];for(let e=0;e<n.length;e++){let{at:t,value:s,easing:a}=n[e];r.push(s),l.push((0,h.progress)(0,V,t)),o.push(a||"easeOut")}0!==l[0]&&(l.unshift(0),r.unshift(r[0]),o.unshift("easeInOut")),1!==l[l.length-1]&&(l.push(1),r.push(null)),f.has(a)||f.set(a,{keyframes:{},transition:{}});let c=f.get(a);c.keyframes[i]=r;let{type:d,...u}=t;c.transition[i]={...u,duration:V,ease:o,times:l,...s}}}),f})(e.map(e=>{if(Array.isArray(e)&&"function"==typeof e[0]){let t=e[0],s=(0,n.motionValue)(0);return(s.on("change",t),1===e.length)?[s,[0,1]]:2===e.length?[s,[0,1],e[1]]:[s,e[1],e[2]]}return e}),M,t,{spring:r.spring}).forEach(({keyframes:e,transition:t},a)=>{s.push(...T(a,e,t))}),C=s}else{let{onComplete:s,...a}=b||{};"function"==typeof s&&(S=s),C=T(e,v,{...V,...a},t)}let E=new a(C);return S&&E.finished.then(S),t&&(t.animations.push(E),E.finished.then(()=>{(0,i.removeItem)(t.animations,E)})),E}}();e.s(["animate",0,_],49492)},19868,e=>{"use strict";var t=e.i(43476),s=e.i(49492),a=e.i(87652),i=e.i(72328),n=e.i(71645);e.s(["AnimatedCounter",0,function({value:e,suffix:r="",duration:l=1.6,className:o}){let c=(0,n.useRef)(null),d=(0,a.useInView)(c,{once:!0,margin:"-40px"}
1),u=(0,i.useReducedMotion)(),[h,m]=(0,n.useState)(0);return(0,n.useEffect)(()=>{if(!d||u)return;let t=(0,s.animate)(0,e,{duration:l,ease:[.16,1,.3,1],onUpdate:e=>m(Math.round(e))});return()=>t.stop()},[d,e,l,u]),(0,t.jsxs)("span",{ref:c,className:o,children:[u?e:h,r]})}])},35584,e=>{"use strict";var t=e.i(43476),s=e.i(71645),a=e.i(22016),i=e.i(49492),n=e.i(32181),r=e.i(87652),l=e.i(72328),o=e.i(86045),c=e.i(47163),d=e.i(64630),u=e.i(88653),h=e.i(29119);function m({media:e,intervalMs:a=3e3,sizes:i,className:r}){let o=(0,l.useReducedMotion)(),[d,p]=(0,s.useState)(0),[x,f]=(0,s.useState)(!1);if((0,s.useEffect)(()=>{if(o||x||e.length<2)return;let t=setInterval(()=>p(t=>(t+1)%e.length),a);return()=>clearInterval(t)},[o,x,e.length,a]),0===e.length)return null;let g=e[Math.min(d,e.length-1)];return(0,t.jsxs)("div",{className:r,onMouseEnter:()=>f(!0),onMouseLeave:()=>f(!1),children:[(0,t.jsx)(u.AnimatePresence,{mode:"wait",children:(0,t.jsx)(n.motion.div,{initial:{opacity:0,y:12},animate:{opacity:1,y:0},exit:{opacity:0,y:-12},transition:{duration:.5,ease:[.16,1,.3,1]},children:(0,t.jsx)(h.ProjectMedia,{media:g,sizes:i})},g.src)}),e.length>1&&(0,t.jsx)("div",{className:"mt-4 flex justify-center gap-1.5",children:e.map((e,s)=>(0,t.jsx)("button",{type:"button","aria-label":`Show screen ${s+1}`,onClick:()=>p(s),className:(0,c.cn)("h-1.5 rounded-full transition-all duration-300",s===d?"w-5 bg-white":"w-1.5 bg-white/50")},e.src))})]})}function p({media:e,intervalMs:a=3800,className:i}){let r=(0,l.useReducedMotion)(),[o,d]=(0,s.useState)(0),[u,m]=(0,s.useState)(!1),x=e.length;return((0,s.useEffect)(()=>{if(r||u||x<2)return;let e=setInterval(()=>d(e=>(e+1)%x),a);return()=>clearInterval(e)},[r,u,x,a]),0===x)?null:(0,t.jsxs)("div",{className:(0,c.cn)("relative flex items-center justify-center [perspective:1200px]",i),onMouseEnter:()=>m(!0),onMouseLeave:()=>m(!1),children:[e.map((e,s)=>{let a,i=((a=s-o)>x/2&&(a-=x),a<-x/2&&(a+=x),a),r=Math.abs(i);return r>1?null:(0,t.jsx)(n.motion.button,{type:"button","aria-label":`Show screen ${s+1}`,onClick:()=>d(s),className:"absolute w-[52%] max-w-[192px] cursor-pointer [transform-style:preserve-3d]",initial:!1,animate:{x:`${72*i}%`,rotateY:-(30*i),scale:0===i?1.02:.78,opacity:0===i?1:.45,filter:0===i?"brightness(1)":"brightness(0.9)",zIndex:30-10*r},transition:{duration:.65,ease:[.16,1,.3,1]},style:{zIndex:30-10*r},children:(0,t.jsx)(h.ProjectMedia,{media:e,sizes:"220px"})},e.src)}),(0,t.jsx)("div",{className:"absolute bottom-0 left-1/2 z-40 flex -translate-x-1/2 gap-1.5",children:e.map((e,s)=>(0,t.jsx)("button",{type:"button","aria-label":`Go to screen ${s+1}`,onClick:()=>d(s),className:(0,c.cn)("h-1.5 rounded-full transition-all duration-300",s===o?"w-5 bg-white":"w-1.5 bg-white/50")},e.src))})]})}function x({web:e,mobile:s,className:a}){return(0,t.jsxs)("div",{className:(0,c.cn)("relative w-full",a),children:[(0,t.jsx)(h.ProjectMedia,{media:e,sizes:"(min-width:1024px) 460px, 80vw"}),(0,t.jsx)("div",{className:"absolute -bottom-5 -right-2 w-[26%] max-w-[112px] drop-shadow-[0_18px_30px_rgba(0,0,0,0.35)]",children:(0,t.jsx)(h.ProjectMedia,{media:s,sizes:"120px"})})]})}let f=[.16,1,.3,1],g={"secom-professional":"#1fb5a4",clubo:"#3160dc",votemonitor:"#f2ac24",recorder:"#d8332c","ssm-holding":"#4a4dc2","european-youth-foundation":"#15589f",safefield:"#2f7cc6"},v={hidden:{opacity:0,y:32},show:{opacity:1,y:0,transition:{duration:.5,ease:f,staggerChildren:.12}}},b={hidden:{},show:{transition:{staggerChildren:.07,delayChildren:.05}}},y={hidden:{opacity:0,y:16},show:{opacity:1,y:0,transition:{duration:.5,ease:f}}},w={hidden:{opacity:0,scale:.94,y:18},show:{opacity:1,scale:1,y:0,transition:{duration:.6,ease:f}}};function j({value:e,prefix:a="",suffix:n=""}){let o=(0,l.useReducedMotion)(),c=(0,s.useRef)(null),d=(0,r.useInView)(c,{once:!0,amount:.6}),u=+!Number.isInteger(e),[h,m]=(0,s.useState)(o?e:0);return(0,s.useEffect)(()=>{if(o||!d)return;let t=(0,i.animate)(0,e,{duration:1.1,ease:f,onUpdate:e=>m(e)});return()=>t.stop()},[d,e,o]),(0,t.jsxs)("span",{ref:c,children:[a,h.toFixed(u),n]})}function N(e){return{"--stack-index":e,zIndex:e+1}}function k({label:e,value:s}){return(0,t.jsxs)("div",{children:[(0,t.jsx)("p",{className:"text-[11px] font-semibold uppercase tracking-wider text-ink-soft/55",children:e}),(0,t.jsx)("p",{className:"mt-0.5 text-sm font-semibold text-ink",children:s})]})}function z({project:e,index:s}){let i=(0,d.getMedia)(e.slug),r=i[0],l=i.find(e=>"browser"===e.type||"mockup-wide"===e.type),u=i.find(e=>"phone"===e.type||"shot"===e.type||"mockup"===e.type),h=o.accentHex[e.accent],f=g[e.slug]??h;
1return(0,t.jsxs)(n.motion.article,{variants:v,initial:"hidden",whileInView:"show",viewport:{once:!0,amount:.2},style:N(s),className:"industry-stack-card grid items-stretch gap-8 overflow-hidden rounded-[var(--radius-xl2)] border border-ink/8 bg-white p-6 shadow-[var(--shadow-card-hover)] sm:p-8 lg:grid-cols-2 lg:gap-10",children:[(0,t.jsxs)(n.motion.div,{variants:b,className:"flex flex-col",children:[(0,t.jsx)(n.motion.p,{variants:y,className:"mb-2 font-display text-lg font-medium italic",style:{color:h},children:e.industry}),(0,t.jsx)(n.motion.h3,{variants:y,className:"font-display text-3xl font-bold tracking-tight text-ink sm:text-4xl text-balance",children:e.name}),(0,t.jsx)(n.motion.p,{variants:y,className:"mt-3 max-w-md text-lg text-ink-soft text-balance",children:e.description}),e.metrics&&e.metrics.length>0&&(0,t.jsx)(n.motion.dl,{variants:y,className:"mt-7 grid grid-cols-3 gap-3",children:e.metrics.map(e=>(0,t.jsxs)("div",{className:"rounded-2xl p-4 ring-1 ring-ink/5",style:{backgroundColor:`${h}12`},children:[(0,t.jsx)("dt",{className:"sr-only",children:e.label}),(0,t.jsxs)("dd",{children:[(0,t.jsx)("span",{className:"font-display text-2xl font-bold leading-none text-ink sm:text-3xl",children:(0,t.jsx)(j,{value:e.value,prefix:e.prefix,suffix:e.suffix})}),(0,t.jsx)("span",{className:"mt-1.5 block text-xs font-medium leading-snug text-ink-soft",children:e.label})]})]},e.label))}),e.testimonial&&(0,t.jsxs)(n.motion.figure,{variants:y,className:"mt-6 border-l-2 pl-4",style:{borderColor:h},children:[(0,t.jsxs)("blockquote",{className:"text-base italic text-ink/90 text-balance",children:["â",e.testimonial.quote,"â"]}),(0,t.jsxs)("figcaption",{className:"mt-2 flex items-center gap-2.5",children:[(0,t.jsx)("span",{className:"grid h-8 w-8 place-items-center rounded-full text-xs font-bold text-white",style:{backgroundColor:h},"aria-hidden":!0,children:e.testimonial.author.slice(0,1)}),(0,t.jsxs)("span",{className:"text-sm text-ink-soft",children:[(0,t.jsx)("span",{className:"font-semibold text-ink",children:e.testimonial.author})," ","· ",e.testimonial.role]})]})]}),(0,t.jsxs)(n.motion.div,{variants:y,className:"mt-auto flex flex-wrap items-start gap-x-7 gap-y-4 pt-7",children:[(0,t.jsx)(k,{label:"Platforms",value:e.platforms.join(" · ")}),(0,t.jsx)(k,{label:"Shipped",value:String(e.year)}),(0,t.jsx)("div",{className:"flex flex-wrap gap-1.5 pt-0.5",children:e.tech.slice(0,4).map(s=>(0,t.jsx)("span",{className:(0,c.cn)("rounded-full px-2.5 py-1 text-xs font-medium",o.accentSoft[e.accent]),children:s},s))})]}),(0,t.jsx)(n.motion.div,{variants:y,children:(0,t.jsxs)(a.default,{href:`/work/${e.slug}`,className:"mt-5 inline-flex items-center gap-2 rounded-full bg-ink px-6 py-3 text-sm font-semibold text-paper transition-all hover:-translate-y-0.5 hover:bg-teal-ink",children:["View project",(0,t.jsx)("span",{"aria-hidden":!0,children:"â"})]})})]}),(0,t.jsxs)(n.motion.div,{variants:w,className:"group relative order-first flex min-h-[300px] items-center justify-center overflow-hidden rounded-[var(--radius-xl2)] p-8 lg:order-none",style:{backgroundImage:`linear-gradient(150deg, ${f} 0%, ${f}cc 55%, ${f}99 100%)`},children:[(0,t.jsx)("div",{className:"absolute inset-0 bg-[radial-gradient(120%_120%_at_80%_-10%,rgba(255,255,255,0.45),transparent_55%)]"}),(0,t.jsx)("div",{"aria-hidden":!0,className:"absolute -bottom-16 left-1/2 h-40 w-3/4 -translate-x-1/2 rounded-full blur-3xl op
1acity-50",style:{backgroundColor:f}}),l&&u?(0,t.jsx)("div",{className:"relative w-full max-w-[440px] transition-transform duration-500 ease-out group-hover:-translate-y-1.5 group-hover:scale-[1.02]",children:(0,t.jsx)(x,{web:l,mobile:u})}):r&&("browser"===r.type||"mockup-wide"===r.type)?(0,t.jsx)("div",{className:"relative w-full max-w-[460px] transition-transform duration-500 ease-out group-hover:-translate-y-1.5 group-hover:scale-[1.02]",children:(0,t.jsx)(m,{media:i,sizes:"(min-width:1024px) 460px, 80vw"})}):r?(0,t.jsx)(p,{media:i,className:"h-[440px] w-full max-w-[480px]"}):null]})]})}function M({index:e,tiles:s}){return(0,t.jsxs)(n.motion.article,{variants:v,initial:"hidden",whileInView:"show",viewport:{once:!0,amount:.2},style:N(e),className:"industry-stack-card grid items-stretch gap-8 overflow-hidden rounded-[var(--radius-xl2)] border border-ink/8 bg-white p-6 shadow-[var(--shadow-card-hover)] sm:p-8 lg:grid-cols-2 lg:gap-10",children:[(0,t.jsxs)(n.motion.div,{variants:b,className:"flex flex-col justify-center",children:[(0,t.jsx)(n.motion.p,{variants:y,className:"mb-2 font-display text-lg font-medium italic text-teal-ink",children:"And many more"}),(0,t.jsx)(n.motion.h3,{variants:y,className:"font-display text-3xl font-bold tracking-tight text-ink sm:text-4xl text-balance",children:"Many products, one craft."}),(0,t.jsx)(n.motion.p,{variants:y,className:"mt-3 max-w-md text-lg text-ink-soft text-balance",children:"From civic-tech apps to B2B platforms, consumer products and online stores â explore everything we've designed and shipped."}),(0,t.jsx)(n.motion.div,{variants:y,children:(0,t.jsxs)(a.default,{href:"/work",className:"mt-7 inline-flex items-center gap-2 rounded-full bg-ink px-6 py-3 text-sm font-semibold text-paper transition-all hover:-translate-y-0.5 hover:bg-teal-ink",children:["View all our work",(0,t.jsx)("span",{"aria-hidden":!0,children:"â"})]})})]}),(0,t.jsxs)(n.motion.div,{variants:w,className:"relative order-first flex min-h-[300px] items-center overflow-hidden rounded-[var(--radius-xl2)] bg-ink p-4 lg:
1order-none",children:[(0,t.jsx)("div",{className:"grid w-full grid-cols-4 gap-2",children:s.map((e,s)=>(0,t.jsx)("img",{src:e,alt:"","aria-hidden":!0,loading:"lazy",className:"aspect-[3/5] w-full rounded-lg object-cover object-top ring-1 ring-white/10 transition-transform duration-500 hover:scale-[1.04]"},e+s))}),(0,t.jsx)("div",{className:"pointer-events-none absolute inset-0 bg-[radial-gradient(120%_90%_at_50%_120%,rgba(0,0,0,0.55),transparent_60%)]"})]})]})}e.s(["IndustryShowcase",0,function({projects:e}){let s=["bluvi","vic","secom-professional","clubo","ssm-holding","ptsd-help","votemonitor","silent-auction"].map(e=>(0,d.getMedia)(e).find(e=>"phone"===e.type||"shot"===e.type)?.src).filter(e=>!!e);return(0,t.jsx)("section",{className:"py-20 sm:py-28",children:(0,t.jsxs)("div",{className:"mx-auto max-w-7xl px-5 sm:px-8",children:[(0,t.jsxs)("p",{className:"mb-3 inline-flex items-center gap-2 rounded-full border border-ink/15 bg-white/60 px-3 py-1 text-sm font-semibold text-ink-soft",children:[(0,t.jsx)("span",{className:"h-2 w-2 rounded-full bg-teal"}),"Industry wins"]}),(0,t.jsxs)("h2",{className:"max-w-2xl font-display text-4xl font-bold tracking-tight text-ink sm:text-5xl text-balance",children:["Proven success in"," ",(0,t.jsx)("span",{className:"italic text-teal-ink",children:"every industry"}),"."]}),(0,t.jsxs)("div",{className:"mt-10 space-y-6 sm:mt-12",children:[e.map((e,s)=>(0,t.jsx)(z,{project:e,index:s},e.slug)),(0,t.jsx)(M,{index:e.length,tiles:s})]})]})})}],35584)}]);
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.