:root{--spacing-unit: 1rem;--headline-top: 11rem;--max-width: 90rem;--headline-max-width: 78.75rem;--page-gutter: calc(var(--spacing-unit) * 2);--home-hero-bottom: calc(var(--spacing-unit) * 5);--home-logo-gap: calc(var(--spacing-unit) * 3);--animation-duration-fast: .15s;--animation-duration-normal: .6s;--animation-duration-slow: 1s;--animation-duration-slower: 1.2s;--animation-easing: cubic-bezier(.16, 1, .3, 1);--border-radius: 16px;--text-primary: white;--text-secondary: #1a1a1a;--text-secondary-light: #6a6a6a;--contact-accent: #1a1a1a;--page-background: linear-gradient(180deg, #F2EED7 0%, #F9F6F0 32.6%)}*{margin:0;padding:0;box-sizing:border-box}html,body{min-height:100%;overflow-x:hidden}#root{min-height:100vh;background:transparent}body{font-family:"Instrument Serif",serif;background:var(--page-background) no-repeat #f9f6f0}.password-gate{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:calc(var(--spacing-unit) * 2);color:var(--text-secondary);background:transparent}.password-gate__panel{width:min(100%,28rem);padding:clamp(1.5rem,4vw,2.5rem);border:1px solid rgba(255,255,255,.55);border-radius:var(--border-radius);background:#ffffff80;box-shadow:0 1.5rem 4rem #1a1a1a1f;backdrop-filter:blur(24px) saturate(160%);-webkit-backdrop-filter:blur(24px) saturate(160%)}.password-gate__eyebrow,.password-gate__label,.password-gate__input,.password-gate__button,.password-gate__error{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}.password-gate__eyebrow{margin-bottom:.75rem;color:var(--contact-accent);font-size:.875rem;letter-spacing:0}.password-gate__title{margin-bottom:2rem;font-family:Georgia,Times New Roman,serif;font-size:clamp(3rem,8vw,5rem);font-weight:400;line-height:.95}.password-gate__label{display:block;margin-bottom:.5rem;font-size:.9375rem}.password-gate__controls{display:grid;grid-template-columns:1fr auto;gap:.625rem}.password-gate__input,.password-gate__button{min-height:3rem;border-radius:999px;font-size:1rem}.password-gate__input{width:100%;min-width:0;padding:0 1rem;color:var(--text-secondary);background:#ffffffbf;border:1px solid rgba(26,26,26,.25);outline:none}.password-gate__input:focus{border-color:#1a1a1a99;box-shadow:0 0 0 .25rem #1a1a1a1f}.password-gate__button{padding:0 1.35rem;color:#fff;background:var(--contact-accent);border:1px solid transparent;cursor:pointer}.password-gate__button:disabled,.password-gate__input:disabled{opacity:.55;cursor:not-allowed}.password-gate__error{margin-top:.875rem;color:#8f2f36;font-size:.875rem}@media(max-width:32rem){.password-gate__controls{grid-template-columns:1fr}}.main-header{position:fixed;top:0;left:0;right:0;width:100%;z-index:20;pointer-events:none;height:calc(var(--spacing-unit) * 4)}.main-header-home,.main-header-project{position:absolute}.main-nav{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;width:100%;max-width:var(--max-width);margin:0 auto;padding:0 var(--page-gutter);pointer-events:auto;position:absolute;left:0;right:0;top:calc(var(--spacing-unit) * 2);z-index:6}.main-nav-home .nav-link-contact,.main-nav-project .nav-link-previous,.main-nav-project .nav-link-next{position:fixed;top:calc(var(--spacing-unit) * 2);z-index:20}.main-nav-home .nav-link-contact,.main-nav-project .nav-link-next{right:max(var(--page-gutter),calc((100vw - var(--max-width)) / 2 + var(--page-gutter)))}.main-nav-project .nav-link-previous{left:max(var(--page-gutter),calc((100vw - var(--max-width)) / 2 + var(--page-gutter)))}.main-nav-home,.main-nav-project{pointer-events:none}.nav-slot{display:flex;align-items:center}.nav-slot-left{justify-content:flex-start}.nav-slot-center{justify-content:center}.nav-slot-right{justify-content:flex-end}.nav-link{font-family:TikTok Sans,sans-serif;font-size:clamp(.875rem,.8vw + .55rem,1.125rem);font-weight:400;color:var(--contact-accent);text-decoration:none;position:relative;pointer-events:auto;padding:calc(var(--spacing-unit) * .5) calc(var(--spacing-unit) * 1.25);border-radius:999px;background:#ffffff47;backdrop-filter:blur(10px) saturate(180%);-webkit-backdrop-filter:blur(10px) saturate(180%);border:1px solid rgba(255,255,255,.45);transition:all var(--animation-duration-normal) var(--animation-easing);overflow:hidden}.nav-link:hover{background:#ffffff26;border-color:#ffffff4d;transform:translateY(-2px);box-shadow:0 8px 32px #0000001a}.nav-link.is-dark{color:var(--text-secondary);background:#ffffffb3;backdrop-filter:blur(20px) saturate(180%);-webkit-backdrop-filter:blur(20px) saturate(180%);border:1px solid rgba(255,255,255,.5)}.nav-link.is-dark:hover{background:#ffffffd9;border-color:#ffffffb3;box-shadow:0 8px 32px #00000026}.project-hover-button{font-family:TikTok Sans,sans-serif;font-size:clamp(1rem,1.5vw + .5rem,1.5rem);font-weight:400;color:var(--text-secondary);text-decoration:none;position:fixed;padding:calc(var(--spacing-unit) * .5) calc(var(--spacing-unit) * 1.25);border-radius:999px;background:#ffffffb3;backdrop-filter:blur(20px) saturate(180%);-webkit-backdrop-filter:blur(20px) saturate(180%);border:1px solid rgba(255,255,255,.5);transition:transform var(--animation-duration-normal) var(--animation-easing);overflow:hidden;z-index:10;opacity:0;transform:scale(.9);pointer-events:none;white-space:nowrap;transform-origin:top left}.project-hover-button.is-visible{opacity:1;transform:scale(1)}.project-hover-button:hover{background:#ffffffd9;border-color:#ffffffb3;transform:scale(1) translateY(-2px);box-shadow:0 8px 32px #00000026}@media(hover:none){.project-hover-button{display:none}}.scroll-container{position:relative;width:100%;height:auto;min-height:0;background:transparent}.nav-flower-link{display:block;text-decoration:none;pointer-events:auto}.nav-flower{width:50px;height:50px;display:block;color:var(--contact-accent);fill:currentColor;opacity:0;transform:scale(.8) rotate(-180deg);transition:opacity var(--animation-duration-slower) var(--animation-easing),transform var(--animation-duration-slower) var(--animation-easing);transform-origin:center center;will-change:transform;cursor:pointer}.main-nav.is-visible .nav-flower{opacity:1;transform:scale(1) rotate(0);transition-delay:.6s;transition-duration:var(--animation-duration-slower)}.main-nav-home .nav-flower{cursor:default}.content-container{width:100%;min-width:0;max-width:var(--max-width);margin:0 auto;padding:0 var(--page-gutter);padding-top:var(--headline-top);padding-bottom:var(--home-hero-bottom);position:relative;height:auto;display:flex;align-items:flex-start}.hero-copy{flex:1 1 auto;width:100%;min-width:0;max-width:min(58rem,100%);padding-top:0}.hero-eyebrow{font-family:TikTok Sans,sans-serif;font-size:1rem;font-weight:400;line-height:1.2;color:var(--text-secondary-light);margin-bottom:calc(var(--spacing-unit) * 1.25)}.headline{font-family:"Instrument Serif",serif;font-size:3.25rem;font-weight:400;letter-spacing:0;line-height:1.22;color:#1a1a1a;max-width:100%;min-width:0;overflow-wrap:break-word;position:static;margin:0;padding:0;pointer-events:none;z-index:10}.company-logos{margin-top:var(--home-logo-gap);color:var(--text-secondary)}.home-reveal{opacity:0;transform:translateY(40px);transition:opacity .8s var(--animation-easing),transform .8s var(--animation-easing);will-change:opacity,transform}.home-reveal.is-visible{opacity:1;transform:translateY(0)}.company-logos__label{margin-bottom:calc(var(--spacing-unit) * 1);font-family:TikTok Sans,sans-serif;font-size:.875rem;font-weight:400;line-height:1.2;color:var(--text-secondary-light);text-transform:uppercase}.company-logos__list{display:flex;flex-wrap:wrap;align-items:center;gap:calc(var(--spacing-unit) * 1.25) calc(var(--spacing-unit) * 2.5);list-style:none}.company-logos__item{display:flex;align-items:center;justify-content:flex-start;height:2rem}.company-logos__image{display:block;width:auto;max-width:8.5rem;max-height:1.85rem;object-fit:contain;filter:grayscale(1) saturate(0) contrast(1.08);opacity:.72}.company-logos__image[data-logo=Valio]{max-height:2.55rem}.company-logos__image[data-logo=SAK]{max-height:2.05rem}.company-logos__image[data-logo=SSH]{max-width:6.9rem;max-height:1.55rem}.company-logos__image[data-logo="Twice Commerce"]{max-width:5.7rem;max-height:1.25rem}.headline-text{display:inline-block;max-width:var(--headline-max-width)}.project-page-title .word,.headline .word{display:inline-block;opacity:0;transform:translateY(20px);will-change:opacity,transform;animation:revealWord var(--animation-duration-normal) var(--animation-easing) forwards}@keyframes revealWord{to{opacity:1;transform:translateY(0)}}.projects-section{background:transparent;margin-top:0;padding:0}.projects-container{max-width:var(--max-width);margin:0 auto;padding:0 var(--page-gutter)}.projects-header{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:calc(var(--spacing-unit) * 2)}.projects-heading-left{font-family:TikTok Sans,sans-serif;font-size:2rem;font-weight:400;letter-spacing:0;line-height:1.2;color:#1a1a1a}.projects-heading-right{font-family:TikTok Sans,sans-serif;font-size:1.25rem;font-weight:300;letter-spacing:0;line-height:1.2;color:var(--text-secondary-light)}.projects-masonry-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:calc(var(--spacing-unit) * 2);margin-bottom:calc(var(--spacing-unit) * 6)}.project-item{position:relative;opacity:0;transform:translateY(40px);transition:opacity .8s var(--animation-easing),transform .8s var(--animation-easing);will-change:opacity,transform;display:block;text-decoration:none;color:inherit;cursor:pointer}.project-item.is-visible{opacity:1;transform:translateY(0)}.project-image-wrapper{position:relative;width:100%;overflow:hidden;border-radius:var(--border-radius);background:#f5f5f5;aspect-ratio:3 / 2}.project-image-wrapper img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .6s cubic-bezier(.16,1,.3,1)}.project-item:hover .project-image-wrapper img{transform:scale(1.05)}.project-item--preview-only{cursor:default}.project-item--preview-only:hover .project-image-wrapper img{transform:none}.project-title{font-family:TikTok Sans,sans-serif;font-size:1.125rem;font-weight:400;letter-spacing:0;line-height:1.2;color:#1a1a1a;margin:calc(var(--spacing-unit) * .75) 0 0}.contact-section{width:100vw;margin-top:calc(var(--spacing-unit) * 6);padding:calc(var(--spacing-unit) * 6) 0;background:transparent}.contact-text{font-family:"Instrument Serif",serif;font-size:clamp(1.125rem,1.5vw + .5rem,2rem);letter-spacing:-.01em;line-height:1.6;color:var(--contact-accent);font-weight:400;text-align:center;opacity:0;transform:translateY(20px);transition:opacity var(--animation-duration-slow) var(--animation-easing),transform var(--animation-duration-slow) var(--animation-easing);will-change:opacity,transform}.contact-section.is-visible .contact-text{opacity:1;transform:translateY(0);transition-delay:.2s}.contact-link{color:var(--contact-accent);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px;transition:opacity .2s ease}.contact-link:hover{opacity:.7}.contact-flower{width:60px;height:60px;margin:calc(var(--spacing-unit) * 3) auto 0;display:block;color:var(--contact-accent);opacity:0;transform:scale(.8) rotate(-180deg);transition:opacity var(--animation-duration-slower) var(--animation-easing),transform var(--animation-duration-slower) var(--animation-easing);fill:currentColor;transform-origin:center center;will-change:transform}.contact-section.is-visible .contact-flower{opacity:1;transform:scale(1) rotate(0);transition-delay:.6s;transition-duration:var(--animation-duration-slower)}@media(max-width:1400px){.project-page-title{--headline-max-width: 65ch;font-size:clamp(2.5rem,4vw + .75rem,4.5rem)}}@media(max-width:1200px){.project-page-title{--headline-max-width: 60ch;font-size:clamp(2.25rem,3.8vw + .8rem,4.25rem)}}@media(max-width:1024px){.project-page-title{--headline-max-width: 55ch;font-size:clamp(2rem,4vw + .5rem,4rem);line-height:1.32}.headline{font-size:2.75rem}.hero-copy{max-width:50rem}}@media(max-width:600px){.project-page-title{--headline-max-width: 48ch;font-size:clamp(1.625rem,5.5vw + .25rem,3.75rem);line-height:1.33}.headline{font-size:2rem;line-height:1.28}.projects-heading-left{font-size:1.5rem}.projects-heading-right,.project-title{font-size:1rem}.contact-text{font-size:clamp(1.0625rem,3.5vw + .5rem,1.875rem)}}@media(max-width:768px){.project-page-title{--headline-max-width: 50ch;font-size:clamp(1.75rem,5vw + .25rem,3.5rem);line-height:1.35}.scroll-container{height:auto;min-height:0}.content-container{align-items:flex-start;padding-top:var(--headline-top);padding-bottom:calc(var(--spacing-unit) * 3.5)}.hero-copy{padding-top:0;max-width:100%}.company-logos{margin-top:calc(var(--spacing-unit) * 2.5)}.company-logos__list{gap:calc(var(--spacing-unit) * 1) calc(var(--spacing-unit) * 1.75)}.headline{font-size:1.875rem;line-height:1.28}.headline .word{display:inline;opacity:1;transform:none;animation:none;will-change:auto}.nav-link{font-size:clamp(.8125rem,1.2vw + .45rem,1rem);padding:calc(var(--spacing-unit) * .4) calc(var(--spacing-unit) * 1)}}@media(max-width:768px){.projects-masonry-grid{grid-template-columns:repeat(2,1fr);gap:calc(var(--spacing-unit) * 1.5);margin-bottom:calc(var(--spacing-unit) * 6)}.projects-section{padding:0 0 calc(var(--spacing-unit) * 4) 0}.projects-header{flex-direction:column;align-items:flex-start;gap:calc(var(--spacing-unit) * .5);margin-bottom:calc(var(--spacing-unit) * 2)}.projects-heading-left{font-size:1.75rem}.projects-heading-right{font-size:1.125rem}.contact-section{margin-top:calc(var(--spacing-unit) * 2);padding:calc(var(--spacing-unit) * 2) 0}.contact-text{font-size:clamp(1rem,3vw + .5rem,1.75rem)}}@media(max-width:600px){.headline{font-size:1.625rem;line-height:1.3}.company-logos__item{min-width:4rem;height:1.75rem}.company-logos__image{max-width:7rem;max-height:1.5rem}.company-logos__image[data-logo=Valio]{max-height:2.1rem}.company-logos__image[data-logo=SAK]{max-height:1.7rem}.company-logos__image[data-logo=SSH]{max-width:5.8rem;max-height:1.25rem}.company-logos__image[data-logo="Twice Commerce"]{max-width:5rem;max-height:1rem}.projects-masonry-grid{grid-template-columns:1fr}}@media(max-width:480px){:root{--spacing-unit: .875rem;--headline-top: calc(var(--spacing-unit) * 10)}.project-page-title{--headline-max-width: 45ch;font-size:clamp(1.5rem,6vw + .5rem,3rem);line-height:1.4;letter-spacing:-.01em}.headline{font-size:1.625rem;line-height:1.3}.hero-eyebrow{font-size:.9375rem}.projects-container{padding:0 var(--page-gutter)}.projects-masonry-grid{grid-template-columns:1fr;gap:calc(var(--spacing-unit) * 1.5)}.projects-heading-left{font-size:1.5rem}.projects-heading-right{font-size:1rem}.contact-text{font-size:clamp(.9375rem,3.5vw + .5rem,1.75rem)}.contact-flower{width:50px;height:50px}}@media(min-width:1400px){:root{--headline-top: calc(var(--spacing-unit) * 12)}}@media(min-width:1500px){:root{--headline-top: calc(var(--spacing-unit) * 15)}}.project-page{min-height:100vh;padding-bottom:calc(var(--spacing-unit) * 6)}.project-page-header{padding-top:var(--headline-top);padding-bottom:0;background:transparent}.project-info{display:flex;flex-direction:column;gap:calc(var(--spacing-unit) * .25);align-items:flex-end;text-align:right;flex:0 0 clamp(12rem,22vw,18rem)}.project-meta-row,.project-note{font-family:TikTok Sans,sans-serif;font-size:clamp(.8125rem,1vw + .25rem,.875rem);line-height:1.4}.project-meta-row{display:flex;justify-content:flex-end;gap:calc(var(--spacing-unit) * .35)}.project-meta-label{font-weight:400;color:var(--text-secondary)}.project-meta-value,.project-url .project-link{font-weight:300;color:var(--text-secondary)}.project-url .project-link{text-decoration:none;border-bottom:1px solid rgba(26,26,26,.3);padding-bottom:2px;transition:border-color .2s ease;display:inline-flex;align-items:center;gap:calc(var(--spacing-unit) * .25)}.project-url .project-link:hover{border-color:var(--text-secondary)}.project-link-icon{width:1em;height:1em;flex:0 0 auto;stroke-width:1.8}.project-note{font-weight:300;color:var(--text-secondary-light)}.project-page-header .project-page-container{display:block}.project-page-container{max-width:var(--max-width);margin:0 auto;padding:0 var(--page-gutter)}.project-page-title{font-family:"Instrument Serif",serif;font-size:clamp(2.25rem,4.5vw + .5rem,5rem);font-weight:400;letter-spacing:clamp(-.02em,-.02em + .00015vw,-.005em);line-height:1.3;color:var(--text-secondary);margin-bottom:calc(var(--spacing-unit) * 2);max-width:min(75ch,100%)}.project-page-title-container{width:100%}.project-page-intro-row{display:flex;justify-content:space-between;align-items:flex-start;gap:calc(var(--spacing-unit) * 4)}.project-page-description{font-family:TikTok Sans,sans-serif;font-size:clamp(1.125rem,1.75vw + .5rem,1.5rem);line-height:1.6;color:var(--text-secondary);font-weight:300;margin-bottom:0;max-width:50rem;flex:1 1 auto}.project-page-hero-image{width:100%;margin-top:calc(var(--spacing-unit) * 6);margin-bottom:calc(var(--spacing-unit) * 6);border-radius:var(--border-radius);overflow:hidden;background:#f5f5f5}.project-page-hero-image img{width:100%;height:auto;display:block}.project-page-content{display:flex;flex-direction:column;gap:calc(var(--spacing-unit) * 6)}.project-page-section{display:flex;flex-direction:column;gap:calc(var(--spacing-unit) * 4);opacity:0;transform:translateY(40px);transition:opacity .8s var(--animation-easing),transform .8s var(--animation-easing);will-change:opacity,transform}.project-page-section.is-visible{opacity:1;transform:translateY(0)}.project-page-text{font-family:TikTok Sans,sans-serif;font-size:clamp(1rem,1.75vw + .5rem,1.375rem);line-height:1.6;color:var(--text-secondary);font-weight:400;max-width:50rem}.project-page-text p+p{margin-top:calc(var(--spacing-unit) * 1.5)}.project-page-image{border-radius:var(--border-radius);overflow:hidden;background:#f5f5f5;width:var(--project-image-width, 100%);grid-column:span var(--project-image-column-span, 1)}.project-page-image img{width:100%;height:auto;display:block}.project-page-section.project-page-image-grid,.project-page-section.two-column-images{display:grid;grid-template-columns:var(--project-image-grid-template, repeat(2, minmax(0, 1fr)));gap:calc(var(--spacing-unit) * 1)}@media(max-width:768px){.project-page{padding-bottom:calc(var(--spacing-unit) * 4)}.project-page-header{padding-top:var(--headline-top);padding-bottom:0}.project-page-intro-row{flex-direction:column;gap:calc(var(--spacing-unit) * 2)}.project-info{align-items:flex-start;flex-direction:row;justify-content:space-between;flex-wrap:wrap;margin-bottom:calc(var(--spacing-unit) * 1);text-align:left;flex-basis:auto;width:100%}.project-meta-row{justify-content:flex-start}.project-page-title{font-size:clamp(1.75rem,5vw + .25rem,3.5rem);line-height:1.35;letter-spacing:clamp(-.015em,-.015em + .00005vw,-.01em);--headline-max-width: 50ch}.project-page-description{font-size:clamp(1.125rem,2vw + .5rem,1.5rem);margin-bottom:calc(var(--spacing-unit) * 4);--headline-max-width: 50ch}.project-page-hero-image{margin-top:calc(var(--spacing-unit) * 4);margin-bottom:calc(var(--spacing-unit) * 4)}.project-page-content{gap:calc(var(--spacing-unit) * 4)}.project-page-text{font-size:clamp(1rem,2vw + .5rem,1.375rem)}}@media(max-width:480px){.project-page-container{padding:0 var(--page-gutter)}.project-page{padding-bottom:calc(var(--spacing-unit) * 3)}.project-page-header{padding-top:var(--headline-top);padding-bottom:0}.project-info{align-items:flex-start;flex-direction:column;gap:calc(var(--spacing-unit) * .5);margin-bottom:calc(var(--spacing-unit) * 1)}.project-page-title{font-size:clamp(1.5rem,6vw + .5rem,3rem);line-height:1.4;letter-spacing:-.01em;--headline-max-width: 45ch}.project-page-description{font-size:clamp(.9375rem,3vw + .5rem,1.125rem);--headline-max-width: 45ch}.project-page-text{font-size:clamp(.9375rem,3.5vw + .5rem,1.125rem)}.project-page-section.project-page-image-grid,.project-page-section.two-column-images{grid-template-columns:1fr}.project-page-image{grid-column:auto;width:100%}}
