:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--bg:#fdfbf7;--bg-soft:#f3e9df;--card:#fffdfaf2;--text:#2c241c;--muted:#6e6358;--line:#c9a882;--accent:#3d2e22;--border:#e5d9cc;--text-body:#524942;--section-label:#756a5f;--warm-glow:#fde8d4;--warm-glow-2:#f3e0d4;--sidebar-width:260px;--site-top-offset:3rem;--site-sticky-offset:var(--site-top-offset);font-family:Inter,ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif}*{box-sizing:border-box}body{background:radial-gradient(circle at 12% 14%, var(--warm-glow) 0%, transparent 38%), radial-gradient(circle at 88% 6%, var(--warm-glow-2) 0%, transparent 32%), linear-gradient(145deg, var(--bg) 0%, #fff9f3 64%);min-height:100dvh;color:var(--text);margin:0}body.has-custom-cursor,body.has-custom-cursor a,body.has-custom-cursor button,body.has-custom-cursor summary,body.has-custom-cursor .project-image-zoom{cursor:none}.custom-cursor{pointer-events:none;opacity:0;z-index:9999;background:radial-gradient(circle,#ffffff12 0%,#ffffff05 45%,#fff0 70%);border:2px solid #2c241c52;border-radius:999px;width:20px;height:20px;transition:opacity .16s,border-color .2s,background .22s;position:fixed;top:0;left:0}.custom-cursor-dot{background:#ffffffeb;border-radius:999px;width:6px;height:6px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.custom-cursor.is-visible{opacity:1}.custom-cursor.is-hovering{background:radial-gradient(circle,#ffffff29 0%,#ffffff12 48%,#fff0 74%);border-color:#3d2e2261}.custom-cursor.is-pressed{background:radial-gradient(circle,#ffffff3d 0%,#ffffff1a 50%,#fff0 72%)}.custom-cursor.is-scrolling{border-color:#2c241c42}.app-shell{grid-template-columns:var(--sidebar-width) 1fr;gap:4rem;max-width:1100px;min-height:100dvh;margin:0 auto;padding:0 2rem;display:grid}.sidebar{scrollbar-width:none;height:100dvh;position:sticky;top:0;overflow-y:auto}.sidebar::-webkit-scrollbar{display:none}.sidebar-inner{flex-direction:column;gap:0;min-height:100%;padding:3rem 0 2.5rem;display:flex}.sidebar-top{flex-direction:column;align-items:flex-start;gap:0;margin-bottom:2.5rem;display:flex}.name{letter-spacing:-.02em;margin:0;font-size:clamp(1.35rem,2.5vw,3.7rem);line-height:1.1}.title{color:#5a4e43;margin:.4rem 0 0;font-size:.95rem}.tagline{color:var(--muted);margin:.65rem 0 0;font-size:.88rem;line-height:1.55}.section-nav{flex-direction:column;align-items:flex-start;gap:.1rem;display:flex}.social-links{align-items:center;gap:.6rem;margin-top:1.25rem;display:flex}.content-area{align-content:start;gap:5rem;padding:3rem 0 5rem;display:grid}.social-link{border:1px solid var(--border);width:2.2rem;height:2.2rem;color:var(--muted);background:#ffffffb8;border-radius:999px;justify-content:center;align-items:center;transition:transform .18s,color .18s,border-color .18s,background-color .18s;display:inline-flex}.social-link:hover{color:var(--accent);border-color:var(--line);background:#fff;transform:translateY(-2px)}.social-link:focus-visible{outline:2px solid var(--line);outline-offset:2px}.social-link svg{fill:currentColor;width:1.05rem;height:1.05rem}.nav-link{text-transform:uppercase;letter-spacing:.14em;width:fit-content;color:var(--muted);justify-content:flex-start;align-items:center;padding:.4rem 0;font-size:.76rem;font-weight:700;text-decoration:none;transition:color .18s;display:inline-flex;position:relative}.nav-link:after{content:"";background:var(--accent);transform-origin:50%;opacity:0;border-radius:99px;height:2px;transition:transform .18s,opacity .18s;position:absolute;bottom:0;left:0;right:0;transform:scaleX(0)}.nav-link:hover,.nav-link.active{color:var(--accent)}.nav-link:hover:after,.nav-link.active:after{opacity:1;transform:scaleX(1)}.content-section{scroll-margin-top:var(--site-sticky-offset)}.content-section h2{letter-spacing:.14em;text-transform:uppercase;color:var(--section-label);margin:0 0 1.1rem;font-size:.85rem}.content-section p{color:var(--text-body);margin:0 0 1rem;line-height:1.65}.about-copy p:last-child{margin-bottom:0}.about-copy ul{color:var(--text-body);font-family:inherit;font-size:inherit;margin:.85rem 0 0;padding-left:1.15rem;line-height:1.65}.about-copy li+li{margin-top:.35rem}#about.content-section{padding-bottom:38vh}.about-card{border:1px solid var(--border);background:var(--card);border-radius:16px;align-items:stretch;display:flex;overflow:hidden;box-shadow:0 2px 14px #2c241c0a}.about-card-figure{background:linear-gradient(155deg,#e8c4a0 0%,#d4a574 48%,#c4836a 100%);flex:0 0 min(220px,38vw);width:min(220px,38vw);margin:0;overflow:hidden}.profile-image{object-fit:cover;object-position:52% 18%;width:100%;height:100%;display:block}.about-card-body{flex-direction:column;flex:1;justify-content:center;min-width:0;padding:1.75rem 1.6rem;display:flex}.experience-grid{--timeline-x:7.1rem;--timeline-gap:1.5rem;padding-left:calc(var(--timeline-x) + var(--timeline-gap));gap:1rem;display:grid;position:relative}.experience-grid:before{content:"";left:var(--timeline-x);background:linear-gradient(#e8d4c4 0%,#efe0d6 100%);border-radius:99px;width:2px;position:absolute;top:.55rem;bottom:.55rem}.experience-entry{position:relative}.experience-card{background:var(--card);border:1px solid var(--border);cursor:pointer;border-radius:14px;padding:1rem 3rem 1rem 1rem;position:relative}.experience-card:before{content:"";left:calc((var(--timeline-gap) * -1) - .4rem);border:2px solid var(--bg-soft);background:#b88968;border-radius:999px;width:.8rem;height:.8rem;position:absolute;top:1.15rem;box-shadow:0 0 0 2px #dcc9ba}.experience-time{top:.95rem;left:calc((var(--timeline-gap) * -1) - 1.15rem);color:var(--muted);white-space:nowrap;font-size:.75rem;position:absolute;transform:translate(-100%)}.experience-meta{color:var(--muted);flex-wrap:wrap;gap:.5rem;font-size:.75rem;display:flex}.experience-card h3{margin:.65rem 0 0;font-size:1rem}.experience-card p{margin:0}.experience-details{margin-top:0}.experience-details summary{cursor:pointer;color:#5c5248;border-radius:999px;justify-content:center;align-items:center;width:1.65rem;height:1.65rem;list-style:none;transition:background-color .18s,color .18s;display:inline-flex;position:absolute;top:.85rem;right:.85rem}.experience-card:hover .experience-details summary,.experience-details summary:hover{color:var(--accent);background:#f2e7dc}.experience-details summary::-webkit-details-marker{display:none}.experience-details-toggle{fill:none;stroke:currentColor;stroke-width:2px;stroke-linecap:round;stroke-linejoin:round;width:1rem;height:1rem;transition:transform .18s;display:block}.experience-details[open] .experience-details-toggle{transform:rotate(180deg)}.experience-details-content{margin-top:.7rem}.experience-details-content p{margin:0}.experience-details-content p+p{margin-top:.65rem}.project-cards-list{flex-direction:column;gap:1.25rem;display:flex}.project-card{border:1px solid var(--border);background:var(--card);height:clamp(10.5rem,17vw,12rem);color:var(--text);border-radius:14px;flex-direction:row;align-items:stretch;text-decoration:none;transition:box-shadow .2s,transform .2s;display:flex;overflow:hidden}.project-card:hover,.project-card:focus-visible{transform:translateY(-2px);box-shadow:0 12px 28px #2c241c1a}.project-card-thumb{background:#faf5ef;flex-direction:column;flex:0 0 clamp(5.75rem,20vw,10.5rem);align-self:stretch;width:clamp(5.75rem,20vw,10.5rem);min-height:6.5rem;margin:0;display:flex;overflow:hidden}.project-card-img-placeholder{background:linear-gradient(145deg,#faf3eb 0%,#eadfd2 62%),repeating-linear-gradient(-30deg,#b8896814 0 9px,#b8896808 9px 18px);flex:1;width:100%;min-height:0}.project-card-img{object-fit:cover;object-position:50% 22%;transform-origin:50% 28%;flex:1;width:100%;height:100%;min-height:0;transition:transform .28s;display:block;transform:scale(1.18)}.project-card--bike-shop-wordpress-site .project-card-img{object-fit:cover;object-position:50% 28%;transform-origin:50% 28%;transform:scale(1.12)}.project-card--thesis-work .project-card-img{object-position:100% 0;transform-origin:100% 0;transform:scale(3.6)}.project-card:hover .project-card-img,.project-card:focus-visible .project-card-img{transform:scale(1.22)}.project-card--bike-shop-wordpress-site:hover .project-card-img,.project-card--bike-shop-wordpress-site:focus-visible .project-card-img{transform:scale(1.2)}.project-card--thesis-work:hover .project-card-img,.project-card--thesis-work:focus-visible .project-card-img{transform:scale(3.75)}.project-card-body{flex-direction:column;flex:1;gap:.45rem;min-width:0;padding:1rem 1.1rem;display:flex;overflow:hidden}.project-card-meta{justify-content:flex-end;align-items:baseline;display:flex}.project-card-tags-line{text-transform:uppercase;letter-spacing:.09em;color:var(--section-label);-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;margin:.35rem 0 0;font-size:.65rem;font-weight:600;line-height:1.4;display:-webkit-box;overflow:hidden}.project-card-year{color:var(--muted);flex-shrink:0;font-size:.78rem;font-weight:500}.project-card-title{color:var(--text);letter-spacing:-.01em;margin:0;font-size:1rem;line-height:1.25}.project-card-desc{color:var(--text-body);-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;margin:0;font-size:.86rem;line-height:1.55;display:-webkit-box;overflow:hidden}.project-page{width:min(1040px,94vw);margin:0 auto;padding:2rem 0 4rem}.project-back-link{letter-spacing:.04em;color:var(--muted);border-bottom:1px solid #0000;font-size:.82rem;font-weight:600;text-decoration:none;transition:color .16s,border-color .16s;display:inline-flex}.project-back-link:hover{color:var(--accent);border-color:var(--accent)}.project-page-header{margin-bottom:0}.project-page-footer{margin-top:2.5rem}.project-content{flex-direction:column;gap:2rem;margin-top:1.5rem;display:flex}.project-content>:first-child{margin-top:0}.project-content p{color:var(--text-body);margin:0;font-size:.92rem;line-height:1.65}.project-content p+p{margin-top:.85rem}.project-content ul{color:var(--text-body);margin:.85rem 0 0;padding-left:1.15rem;font-size:.92rem;line-height:1.65}.project-content li+li{margin-top:.35rem}.proj-title{letter-spacing:-.02em;margin:0;font-size:clamp(2rem,4vw,3rem);line-height:1.08}.proj-lead{color:var(--text-body);margin:0;font-size:.95rem;line-height:1.65}.proj-meta{align-items:baseline;gap:.45rem;display:flex}.proj-year{color:var(--muted);font-size:.82rem;font-weight:600}.proj-meta-sep{color:var(--border);font-size:.82rem}.proj-timeframe{color:var(--muted);font-size:.82rem}.proj-tags{text-transform:uppercase;letter-spacing:.1em;color:var(--section-label);margin:0;font-size:.68rem;font-weight:600;line-height:1.5}.proj-external-link{width:fit-content;color:var(--accent);border-bottom:1px solid var(--line);font-size:.82rem;font-weight:600;text-decoration:none;transition:border-color .16s,color .16s}.proj-external-link:hover{color:var(--text);border-bottom-color:var(--accent)}.proj-external-link:focus-visible{outline:2px solid var(--line);outline-offset:3px}.proj-hero{border-bottom:1px solid var(--border);flex-direction:column;gap:1.5rem;padding-bottom:1.5rem;display:flex}.proj-hero--split{grid-template-columns:1fr auto;align-items:center;gap:2.5rem;display:grid}.proj-hero--split .proj-gallery,.proj-hero--split>.proj-media{justify-self:end}.proj-hero--split-70{justify-content:initial;flex-direction:unset;flex-wrap:unset;grid-template-columns:minmax(0,1fr) minmax(0,1fr);display:grid}.proj-hero--split-70 .proj-hero-text{flex:initial;max-width:none}.proj-hero--split-70>.proj-media{justify-self:start;width:100%}.proj-hero--split-70>.proj-media--hero img{width:100%;height:auto}.proj-hero--split-70 .proj-gallery{justify-content:flex-start;justify-self:start;width:100%}.proj-hero--split-70 .proj-gallery .proj-media--phone{flex:0 0 calc(50% - .375rem);width:calc(50% - .375rem);height:auto}.proj-hero--split-70 .proj-gallery .proj-media--phone img{width:100%;height:auto}.proj-hero-text{flex-direction:column;gap:.75rem;min-width:0;display:flex}.proj-hero--split .proj-hero-text{max-width:28rem}.proj-section{flex-direction:column;gap:.6rem;display:flex}.proj-section-label{text-transform:uppercase;letter-spacing:.1em;color:var(--section-label);margin-bottom:.5rem;font-size:.72rem;font-weight:700}.proj-split{grid-template-columns:minmax(0,1fr);align-items:center;gap:1.5rem;display:grid}.proj-split:has(.proj-media){grid-template-columns:minmax(0,1fr) auto}.proj-split--media-left:has(.proj-media){grid-template-columns:auto minmax(0,1fr)}.proj-split--media-left .proj-split-text{order:2}.proj-split-text{min-width:0}.proj-media{margin:0}.project-image-zoom{cursor:none;touch-action:none;overflow:hidden}.project-image-zoom img{transform-origin:50%;will-change:transform}.proj-media img{width:100%;height:auto;display:block}.proj-media--hero{border:1px solid var(--border);background:linear-gradient(145deg,#faf3eb 0%,#eadfd2 68%),repeating-linear-gradient(-30deg,#b8896817 0 9px,#b8896808 9px 18px);border-radius:16px;overflow:hidden}.proj-media--hero img{width:auto;height:clamp(320px,52vh,560px)}.proj-hero--bare-media .proj-media--hero{background:0 0;border:0}.proj-media--phone img{width:auto;height:clamp(320px,52vh,560px)}.proj-media--thumb{width:clamp(120px,22vw,170px)}.proj-media--thumb img,.proj-media--wide img{border-radius:12px}.proj-media--wide{margin-top:.85rem}.proj-media--screenshot{border:1px solid var(--border);background:#f4f4f4;border-radius:12px;overflow:hidden}.proj-media--screenshot img{width:100%;height:auto}.proj-gallery{flex-direction:row;align-items:center;gap:.75rem;display:flex}.proj-gallery .proj-media--phone{aspect-ratio:1312/2656;justify-content:center;align-items:center;width:auto;height:clamp(260px,38vh,400px);display:flex}.proj-gallery .proj-media--phone img{object-fit:contain;width:100%;height:100%}.project-page--flowpass-mobile-redesign .proj-section--with-support{--flowpass-support-width:clamp(140px, 18vw, 180px);--flowpass-support-gap:2rem;min-height:410px;width:calc(100% - var(--flowpass-support-width) - var(--flowpass-support-gap));position:relative}.project-page--flowpass-mobile-redesign .proj-media--support{top:.35rem;right:calc(-1 * (var(--flowpass-support-width) + var(--flowpass-support-gap)));width:var(--flowpass-support-width);position:absolute}.project-page--flowpass-mobile-redesign .proj-media--support img{border-radius:12px}.proj-before-after{border-top:1px solid var(--border);padding-top:2.5rem}.before-after-carousel{flex-direction:column;gap:2rem;display:flex}.before-after-carousel-header{justify-content:space-between;align-items:flex-start;gap:2rem;display:flex}.before-after-carousel-title-group{flex-direction:column;flex:1;gap:.55rem;min-width:0;padding-top:.15rem;display:flex}.before-after-section-eyebrow{letter-spacing:.1em;text-transform:uppercase;color:var(--section-label);font-size:.68rem;font-weight:700}.before-after-carousel-title{color:var(--text);letter-spacing:-.01em;margin:0;font-size:clamp(1.35rem,2.8vw,1.75rem);font-weight:600;line-height:1.2}.before-after-carousel-desc{max-width:38rem;color:var(--text-body);margin:.25rem 0 0;font-size:.92rem;line-height:1.65}.before-after-carousel-desc[hidden]{display:none}.before-after-carousel-controls{flex-shrink:0;align-items:center;gap:.5rem;display:flex}.before-after-counter{color:var(--muted);letter-spacing:.04em;text-align:center;min-width:2.8rem;font-size:.75rem;font-weight:600}.before-after-btn{border:1.5px solid var(--border);background:var(--card);width:2rem;height:2rem;color:var(--text);cursor:pointer;border-radius:50%;justify-content:center;align-items:center;padding:0;font-size:.9rem;line-height:1;transition:background .15s,border-color .15s,color .15s;display:inline-flex}.before-after-btn:hover:not(:disabled){background:var(--bg-soft);border-color:var(--line);color:var(--accent)}.before-after-btn:disabled{opacity:.3;cursor:default}.before-after-track{position:relative}.before-after-slide{grid-template-columns:1fr 1fr;gap:1rem;display:none}.before-after-slide--active{display:grid}.before-after-figure{flex-direction:column;align-items:center;gap:.6rem;margin:0;display:flex}.before-after-zoom{border:1px solid var(--border);border-radius:10px;width:100%}.before-after-zoom img{border:none;border-radius:0;width:100%;height:auto;display:block}.before-after-figure>img{border:1px solid var(--border);border-radius:10px;width:100%;height:auto;display:block}.before-after-caption{letter-spacing:.08em;text-transform:uppercase;color:var(--muted);text-align:center;font-size:.72rem;font-weight:700}.before-after-placeholder{aspect-ratio:16/10;border:1.5px dashed var(--line);background:repeating-linear-gradient(-45deg, var(--bg-soft), var(--bg-soft) 6px, var(--bg) 6px, var(--bg) 14px);opacity:.7;border-radius:10px;width:100%}.project-page-sibling-nav{border-top:1px solid var(--border);justify-content:space-between;align-items:center;padding-top:1.75rem;display:flex}.project-sibling-link{letter-spacing:.04em;color:var(--muted);border-bottom:1px solid #0000;font-size:.82rem;font-weight:600;text-decoration:none;transition:color .16s,border-color .16s;display:inline-flex}.project-sibling-link:hover{color:var(--accent);border-bottom-color:var(--accent)}.project-sibling-link--next{margin-left:auto}@media (width<=860px){.app-shell{grid-template-columns:1fr;gap:0;padding:0 1.25rem}.sidebar{height:auto;position:static;overflow:visible}.sidebar-inner{gap:1.5rem;padding:2rem 0 1.5rem}.sidebar-top{align-items:flex-start;margin-bottom:0}.section-nav{flex-flow:wrap;gap:.35rem 1.5rem}.social-links{margin-top:0}.content-area{border-top:1px solid var(--border);gap:3.5rem;padding-top:2rem}.experience-grid{padding-left:0}.experience-grid:before,.experience-card:before{display:none}.experience-time{margin:0 0 .4rem .15rem;display:block;position:static;transform:none}.proj-hero--split{grid-template-columns:1fr;gap:1.5rem}.proj-hero--split .proj-gallery,.proj-hero--split>.proj-media{justify-self:center}.proj-hero--split-70{grid-template-columns:1fr;gap:1.5rem}.proj-media--hero img,.proj-media--phone img{width:100%;height:auto}:is(.proj-split:has(.proj-media),.proj-split--media-left:has(.proj-media)){grid-template-columns:1fr;justify-items:center}.proj-split--media-left .proj-split-text{order:0}.project-page--flowpass-mobile-redesign .proj-section--with-support{width:100%;min-height:0}.project-page--flowpass-mobile-redesign .proj-media--support{width:clamp(120px,42vw,170px);margin-top:1rem;position:static}}@media (width<=500px){.app-shell{padding:0 1rem}.about-card-figure{width:clamp(100px,30vw,140px)}#about.content-section{padding-bottom:28vh}}
