@font-face{font-family:Averia Serif Libre;font-style:normal;font-display:swap;font-weight:300;src:url(/_astro/averia-serif-libre-latin-300-normal.BV8MVjd-.woff2)format("woff2"),url(/_astro/averia-serif-libre-latin-300-normal.BJ3YCYJl.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Averia Serif Libre;font-style:italic;font-display:swap;font-weight:300;src:url(/_astro/averia-serif-libre-latin-300-italic.fnkBLUIr.woff2)format("woff2"),url(/_astro/averia-serif-libre-latin-300-italic.C9d_Sv-b.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Averia Serif Libre;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/averia-serif-libre-latin-400-normal.B48ZlFjk.woff2)format("woff2"),url(/_astro/averia-serif-libre-latin-400-normal.YxHUUm7R.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Averia Serif Libre;font-style:italic;font-display:swap;font-weight:400;src:url(/_astro/averia-serif-libre-latin-400-italic.D4iJQcRI.woff2)format("woff2"),url(/_astro/averia-serif-libre-latin-400-italic.CAQE7r4O.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Averia Serif Libre;font-style:normal;font-display:swap;font-weight:700;src:url(/_astro/averia-serif-libre-latin-700-normal.Cs78DjWF.woff2)format("woff2"),url(/_astro/averia-serif-libre-latin-700-normal.CMD-jnEt.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Averia Serif Libre;font-style:italic;font-display:swap;font-weight:700;src:url(/_astro/averia-serif-libre-latin-700-italic.CwPYuxjq.woff2)format("woff2"),url(/_astro/averia-serif-libre-latin-700-italic.DsysSRIX.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--color-text-primary:#271d00;--color-text-on-color:#fff3ea;--color-bg-page:#fcd75d;--color-bg-intro:#dfedf6;--color-bg-surface:#fff;--color-bg-capsule:#dfedf6;--color-bg-capsule-hover:#d7e1eb;--color-bg-accent:#ff6e00;--color-bg-accent-hover:#e6690a;--color-bg-footer:#703a25;--color-bg-category-ios:#3a8136;--color-bg-category-ios-hover:#2f6a2d;--color-bg-category-web:#ee7cd7;--color-bg-category-web-hover:#d96ac3;--color-bg-category-electronics:#0046b3;--color-bg-category-electronics-hover:#003a8f;--radius-full:999px;--radius-lg:24px;--shadow-sticker:0 8px 24px #00000029;--type-display:80px;--leading-display:88px;--type-section-title:80px;--leading-section-title:88px;--type-hero:44px;--leading-hero:80px;--type-title:40px;--leading-title:48px;--type-heading:32px;--leading-heading:40px;--type-subheading:24px;--leading-subheading:32px;--type-lead:22px;--leading-lead:32px;--type-body:18px;--leading-body:28px;--type-caption:16px;--leading-caption:24px;--type-small:14px;--leading-small:20px;--type-button:20px;--leading-button:24px;--weight-button:400;--space-section-x:120px;--space-section-y:160px;--space-title-gap:96px;--space-back-top:32px;--card-stack-gap:160px;--card-media-size:360px;--card-star-overlap:-100px;--card-actions-width:520px;--card-actions-overlap:-10px;--card-category-overlap:-10px;--card-text-gap:24px;--button-padding-x:24px;--button-padding-y:12px;--button-gap:12px;--title-padding-x:40px;--title-padding-y:12px;--article-block-gap:24px;--article-heading-top:32px;--article-heading-bottom:16px;--article-figure-gap:32px;--article-image-inset:0px;--hero-top:40px;--hero-contact-gap:80px;--hero-cta-gap:48px;--hero-bottom:120px;--hero-sticker:68px;--hero-sticker-gap:12px;--home-projects-top:120px;--home-projects-bottom:160px;--footer-contact-top:0px;--footer-contact-bottom:64px}@media (width<=1099px){:root{--type-display:64px;--leading-display:72px;--type-section-title:64px;--leading-section-title:72px;--type-hero:36px;--leading-hero:64px;--type-title:32px;--leading-title:40px;--type-button:18px;--weight-button:700;--space-section-x:64px;--space-section-y:120px;--space-title-gap:80px;--card-stack-gap:120px;--card-media-size:300px;--card-star-overlap:-80px;--card-actions-width:424px;--title-padding-x:24px;--article-image-inset:65.6px;--hero-top:32px;--hero-contact-gap:64px;--hero-cta-gap:40px;--hero-bottom:96px;--hero-sticker:56px;--home-projects-top:48px;--home-projects-bottom:120px}}@media (width<=639px){:root{--type-display:44px;--leading-display:52px;--type-section-title:48px;--leading-section-title:56px;--type-hero:min(26px, 7vw);--leading-hero:46px;--type-heading:28px;--leading-heading:36px;--type-subheading:22px;--leading-subheading:30px;--type-lead:20px;--leading-lead:28px;--type-body:17px;--leading-body:26px;--type-caption:15px;--leading-caption:22px;--space-section-x:24px;--space-section-y:96px;--space-title-gap:64px;--space-back-top:24px;--card-stack-gap:96px;--card-media-size:200px;--card-star-overlap:-58px;--card-actions-width:318px;--card-category-overlap:-15px;--card-text-gap:20px;--button-padding-x:20px;--article-block-gap:20px;--article-heading-top:24px;--article-heading-bottom:12px;--article-figure-gap:24px;--article-image-inset:0px;--hero-top:24px;--hero-contact-gap:40px;--hero-cta-gap:32px;--hero-bottom:64px;--hero-sticker:40px;--hero-sticker-gap:8px;--home-projects-bottom:48px;--footer-contact-top:24px;--footer-contact-bottom:48px}}html,body{overflow-x:hidden}body{background-color:var(--color-bg-page);color:var(--color-text-primary);font-family:Averia Serif Libre,serif;font-size:var(--type-body);line-height:var(--leading-body);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0}h1,h2,h3,h4,p,ul,ol{margin:0;padding:0}a{color:inherit}::selection{background-color:#ed772f}.screen-content{flex-direction:column;min-height:100dvh;display:flex;position:relative}main{background-color:var(--color-bg-page);flex:1}.cta-accent,.cta-light,.cta-surface{box-sizing:border-box;padding:var(--button-padding-y) var(--button-padding-x);border-radius:var(--radius-full);font-size:var(--type-button);font-style:italic;font-weight:var(--weight-button);line-height:var(--leading-button);text-align:center;white-space:nowrap;text-decoration:none;transition:transform .3s ease-in-out,background-color .3s,background-size .3s;display:inline-block}.cta-accent{background-color:var(--color-bg-accent);color:var(--color-text-on-color)}.cta-accent:hover{background-color:var(--color-bg-accent-hover);transform:scale(1.05)rotate(2deg)}.cta-light{background-color:var(--color-bg-capsule);color:var(--color-text-primary)}.cta-surface{background-color:var(--color-bg-surface);color:var(--color-text-primary)}.cta-light:hover,.cta-surface:hover{background-color:var(--color-bg-capsule-hover);transform:scale(1.05)rotate(-2deg)}.cta-accent,.cta-light,.cta-surface,.category-tag,.hero-group strong{background-image:linear-gradient(currentColor,currentColor);background-position:0 100%;background-repeat:no-repeat;background-size:0 .08em;background-origin:content-box}.cta-accent:hover,.cta-light:hover,.cta-surface:hover,.category-tag:hover,.hero-group:hover strong{background-size:100% .08em}:is(.cta-accent,.cta-light,.cta-surface):is([href^=http],[href^=mailto\:]){padding-right:calc(var(--button-padding-x) + 1em);position:relative}:is(.cta-accent,.cta-light,.cta-surface):is([href^=http],[href^=mailto\:]):after{content:"";top:50%;right:var(--button-padding-x);background-color:currentColor;width:.7em;height:.7em;position:absolute;transform:translateY(-50%);mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' fill='none' stroke='black' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M2 10 10 2M3.5 2H10v6.5'/%3E%3C/svg%3E") 50%/contain no-repeat}.back-button{top:var(--space-back-top);left:var(--space-section-x);z-index:10;position:fixed}.section-title{font-size:var(--type-display);font-weight:300;line-height:var(--leading-display);text-align:center;overflow-wrap:break-word;hyphens:auto}.footer-curve{background-color:var(--color-bg-page);height:17.3806vw;margin-bottom:-5px;position:relative;overflow:clip}.footer-curve-shape{width:100%;height:100%;display:block;position:absolute;inset:0}.footer-curve-text{width:47.76%;height:auto;display:block;position:absolute;top:32.46%;left:26.15%}.contact-info{justify-content:center;align-items:center;gap:var(--button-gap);padding:var(--footer-contact-top) var(--space-section-x) var(--footer-contact-bottom);background-color:var(--color-bg-accent);flex-wrap:wrap;display:flex;position:relative}.fence-footer{background-color:var(--color-bg-accent);width:100%;height:auto;margin-bottom:-5px;display:block}.footer-text{background-color:var(--color-bg-footer);color:var(--color-text-on-color);font-size:var(--type-small);line-height:var(--leading-small);text-align:center;padding:16px;position:relative}@media (width<=639px){.footer-curve{--contact-me-width:min(320px, 82%);--contact-me-arc-diameter:calc(var(--contact-me-width) * 6.405);height:120px}.footer-curve:before{content:"";width:var(--contact-me-arc-diameter);aspect-ratio:1;background-color:var(--color-bg-accent);border-radius:50%;position:absolute;top:0;left:50%;transform:translate(-50%)}.footer-curve-shape{display:none}.footer-curve-text{width:var(--contact-me-width);top:44px;left:50%;transform:translate(-50%)}}.category-tag{box-sizing:border-box;padding:var(--button-padding-y) var(--button-padding-x);border-radius:var(--radius-full);color:var(--color-text-on-color);font-size:var(--type-button);font-style:italic;font-weight:var(--weight-button);line-height:var(--leading-button);text-align:center;white-space:nowrap;text-decoration:none;transition:transform .3s ease-in-out,background-color .3s,background-size .3s;display:inline-block}.category-tag:hover{transform:scale(1.05)rotate(-2deg)}.ios-development-category{background-color:var(--color-bg-category-ios)}.ios-development-category:hover{background-color:var(--color-bg-category-ios-hover)}.web-development-category{background-color:var(--color-bg-category-web)}.web-development-category:hover{background-color:var(--color-bg-category-web-hover)}.electronics-category{background-color:var(--color-bg-category-electronics)}.electronics-category:hover{background-color:var(--color-bg-category-electronics-hover)}.hero{background-color:var(--color-bg-intro);overflow:clip}.hero-contact{justify-content:flex-end;gap:var(--button-gap);padding:var(--hero-top) var(--space-section-x) 0;flex-wrap:wrap;display:flex}.hero-introduction{align-items:flex-start;gap:var(--hero-cta-gap);padding:var(--hero-contact-gap) var(--space-section-x) var(--hero-bottom);flex-direction:column;display:flex}.hero-sentence{font-size:var(--type-hero);line-height:var(--leading-hero)}.hero-name{font-size:inherit;font-weight:700;display:inline}.hero-sentence em{line-height:1}.hero-group{--pill-inset:calc((var(--leading-hero) - var(--hero-sticker)) / 2);--pill-start:var(--pill-inset);--pill-end:var(--hero-sticker-gap);align-items:center;gap:var(--hero-sticker-gap);height:var(--leading-hero);margin-right:calc(var(--pill-end) * -1);margin-left:calc(var(--hero-sticker-gap) - .25em - var(--pill-start));padding-inline:var(--pill-start) var(--pill-end);border-radius:var(--radius-full);color:inherit;white-space:nowrap;vertical-align:top;text-decoration:none;transition:background-color .3s;display:inline-flex}.hero-group--name{--pill-start:var(--hero-sticker-gap);--pill-end:var(--pill-inset);margin-left:calc(var(--pill-start) * -1)}.hero-group:hover{background-color:var(--color-bg-capsule-hover)}.hero-group strong{transition:background-size .3s}.hero-sticker{width:var(--hero-sticker);height:var(--hero-sticker);object-fit:contain;filter:drop-shadow(var(--shadow-sticker));flex:none;transition:transform .3s}.hero-portrait{border-radius:var(--radius-full);object-fit:cover}.hero-group:hover .hero-sticker{transform:rotate(-7deg)}.hero-break-medium,.hero-break-narrow,.hero-group--portrait-start{display:none}.hero-scallops,.hero-scallops img{width:100%;height:auto;display:block}.hero+.projects-section{padding-top:var(--home-projects-top);padding-bottom:var(--home-projects-bottom)}@media (width<=1299px){.hero-break-wide{display:none}.hero-break-medium{display:inline}}@media (width<=639px){.hero-contact{--button-padding-x:clamp(12px, 3.4vw, 16px);gap:8px}}@media (width<=739px){.hero-break-medium,.hero-portrait--end{display:none}.hero-break-narrow{display:inline}.hero-group--portrait-start{display:inline-flex}.hero-group--name{--pill-end:var(--hero-sticker-gap)}}.projects-section{gap:var(--space-title-gap);padding:var(--space-section-y) var(--space-section-x);background-color:var(--color-bg-page);flex-direction:column;display:flex}h2.section-title{font-size:var(--type-section-title);line-height:var(--leading-section-title)}.projects{gap:var(--card-stack-gap);flex-direction:column;display:flex}.project{flex-direction:column;align-items:center;display:flex}.project-link{width:100%;color:inherit;justify-content:center;text-decoration:none;display:flex}.project-media{isolation:isolate;display:flex}.thumbnail-container{z-index:2;width:var(--card-media-size);height:var(--card-media-size);margin-right:var(--card-star-overlap);flex:none;transition:transform .3s;position:relative}.thumbnail-container:hover{transform:rotate(-7deg)}.thumbnail-container img{object-fit:contain;filter:drop-shadow(0 8px 24px #00000029);width:100%;height:100%;display:block}.star-decoration{z-index:1;width:var(--card-media-size);height:var(--card-media-size);flex:none;transition:transform .3s;position:relative}.star-decoration:hover{transform:rotate(7deg)}.project-title{box-sizing:border-box;padding:var(--title-padding-y) var(--title-padding-x);border-radius:var(--radius-full);background-color:var(--color-bg-capsule);color:var(--color-text-primary);font-size:var(--type-title);font-weight:700;line-height:var(--leading-title);white-space:nowrap;align-items:center;gap:8px;transition:transform .3s;display:flex;position:relative}.project-title:hover{transform:rotate(-2deg)}.category-page .project-title{margin-top:var(--card-category-overlap)}.under-title-elements{width:min(100%, var(--card-actions-width));margin-top:var(--card-actions-overlap);flex-wrap:wrap;justify-content:space-between;align-items:center;row-gap:8px;display:flex;position:relative}.project-header{padding:0 var(--space-section-x) 48px}.project-header .under-title-elements{justify-content:center}.cta-label-short{display:none}@media (width<=819px){.project-title{width:min(100%,520px);padding:16px var(--title-padding-x) 24px;text-align:center;white-space:normal;flex-direction:column;gap:4px}.project-title-colon{display:none}.project-title-subtitle{font-size:var(--type-body);font-weight:400;line-height:var(--leading-body)}}@media (width<=639px){.cta-label-long{display:none}.cta-label-short{display:inline}}@media (width<=359px){.under-title-elements{justify-content:center}}.page-container{padding-top:var(--space-section-y);background-color:var(--color-bg-page)}.article-section{padding:0 var(--space-section-x) var(--space-section-y)}.content{box-sizing:border-box;width:100%;max-width:720px;margin:0 auto}.content p{padding-bottom:var(--article-block-gap)}.content ul,.content ol{padding:0 0 var(--article-block-gap) 48px}.content h2,.content h3{padding:var(--article-heading-bottom) 0;font-size:var(--type-subheading);font-weight:700;line-height:var(--leading-subheading)}.project-article h2{padding:var(--article-heading-top) 0 var(--article-heading-bottom);font-size:var(--type-heading);line-height:var(--leading-heading)}.project-article>p:last-child{padding-top:24px}.content .excerpt{padding-bottom:var(--article-figure-gap);font-size:var(--type-lead);line-height:var(--leading-lead)}.content p:has(>img){padding:8px var(--article-image-inset) 16px}.content img{border-radius:var(--radius-lg);cursor:zoom-in;width:100%;height:auto;display:block}.content .image-caption{padding-bottom:var(--article-figure-gap);font-size:var(--type-caption);font-style:italic;line-height:var(--leading-caption);text-align:center}.video{justify-content:center;margin:0;padding:8px 0 16px;display:flex}.video video{border-radius:var(--radius-lg);width:auto;max-width:100%;height:auto;max-height:500px}.content iframe{width:100%;max-width:399px;height:701px;margin:8px auto var(--article-figure-gap);border-radius:var(--radius-lg);border:0;display:block}.content p:has(>.cta-accent){padding:8px 0 var(--article-figure-gap);text-align:center}.content .cta-accent{white-space:normal}.plain-page{gap:var(--space-title-gap);padding-top:var(--space-section-y);background-color:var(--color-bg-page);flex-direction:column;display:flex}.plain-page .section-title{padding:0 var(--space-section-x);text-transform:uppercase}.not-found{align-items:center;gap:var(--card-text-gap);padding:var(--space-title-gap) var(--space-section-x) var(--space-section-y);background-color:var(--color-bg-page);text-align:center;flex-direction:column;display:flex}.lightbox{background:var(--color-bg-surface);cursor:zoom-out;border:none;width:100vw;max-width:none;height:100dvh;max-height:none;margin:0;padding:0}.lightbox[open]{justify-content:center;align-items:center;animation:.25s lightbox-in;display:flex}.lightbox::backdrop{background:0 0}.lightbox img{object-fit:contain;width:100%;max-width:100%;height:auto;max-height:100%}.lightbox-close{top:calc(env(safe-area-inset-top) + 24px);right:calc(env(safe-area-inset-right) + 24px);border-radius:var(--radius-full);background:var(--color-bg-capsule);width:48px;height:48px;color:var(--color-text-primary);cursor:pointer;border:none;justify-content:center;align-items:center;padding:0;display:flex;position:absolute}@keyframes lightbox-in{0%{opacity:0}}@media (prefers-reduced-motion:reduce){.lightbox[open]{animation:none}}.screen{position:relative}.screen--frozen{z-index:1;contain:paint;will-change:transform;background-color:var(--color-bg-page);position:fixed;inset:0;overflow:hidden}.flight-wash{z-index:40;opacity:0;pointer-events:none;will-change:opacity;position:fixed;inset:0}.flight-layer{z-index:50;pointer-events:none;position:fixed;inset:0}.flight-piece{transform-origin:50%;will-change:transform;position:absolute}.flight-copy{box-sizing:border-box;transform:none;width:100%!important;height:100%!important;margin:0!important;transition:none!important;display:block!important;position:relative!important}.flight-copy.thumbnail-container img{width:100%;height:100%}.flight-copy.category-tag{justify-content:center;align-items:center;display:flex!important}.flight-copy.project-title{display:flex!important}.is-flying .thumbnail-container:not(.flight-copy),.is-flying .project-title:not(.flight-copy),.is-flying .star-decoration:not(.flight-copy),.is-flying .category-tag:not(.flight-copy){transition:none!important;transform:none!important}.curtain{z-index:2000;pointer-events:none;position:fixed;inset:0;overflow:hidden}.curtain-sheet{will-change:transform;position:absolute;inset:0}.curtain-sheet--under{background-color:var(--color-bg-accent);fill:var(--color-bg-accent)}.curtain-sheet--over{background-color:var(--color-bg-footer);fill:var(--color-bg-footer)}.curtain-edge{width:100%;display:block;position:absolute;left:0}.curtain-edge--bottom{top:calc(100% - 1px)}.curtain-edge--top{bottom:calc(100% - 1px);transform:scaleY(-1)}.curtain-title{color:var(--color-text-on-color);text-align:center;font:700 clamp(32px,6vw,72px)/1.1 Averia Serif Libre,serif;position:absolute;top:50%;left:8%;right:8%;transform:translateY(-50%)}h1[tabindex="-1"]:focus{outline:none}
