@import "https://fonts.googleapis.com/css2?family=Geist:wght@300;400;500;600;700&family=Geist+Mono:wght@400;500;600&display=swap";:root{--nav-height:88px;--color-bg:#fff;--color-bg-dark:#111;--color-bg-cream:#f5f3ee;--color-bg-cream2:#f0ede6;--color-text:#111;--color-text-light:#555;--color-text-muted:#888;--color-border:#e9eaeb;--color-border-dark:#111;--color-accent-blue:#6366f1;--color-accent-blue-light:#6366f114;--color-accent-blue-hover:#4f46e5;--color-accent-yellow:#f5c518;--color-accent-yellow-light:#f5c5181f;--container-max:1920px;--container-padding:208px;--font-primary:"Geist", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--font-mono:"SF Mono", "Fira Code", "Fira Mono", monospace;--text-xs:12px;--text-sm:14px;--text-base:16px;--text-md:18px;--text-lg:20px;--text-xl:24px;--text-2xl:32px;--text-3xl:40px;--text-4xl:56px;--text-5xl:72px;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:24px;--space-6:32px;--space-7:48px;--space-8:64px;--space-9:96px;--space-10:128px}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}body{font-family:var(--font-primary);font-size:var(--text-base);color:var(--color-text);background-color:var(--color-bg);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;line-height:1.5;overflow-x:hidden}body::-webkit-scrollbar{display:none}#root{width:100%}img{max-width:100%;height:auto;display:block}a{color:inherit;text-decoration:none}button{font-family:var(--font-primary);cursor:pointer;background:0 0;border:none}.container{max-width:var(--container-max);padding:0 var(--container-padding);margin:0 auto}.btn-primary{color:#fff;height:48px;font-family:var(--font-mono);font-size:var(--text-xs);letter-spacing:.1em;text-transform:uppercase;cursor:pointer;white-space:nowrap;background:#111;border:1px solid #111;border-radius:160px;justify-content:center;align-items:center;gap:8px;padding:0 28px;font-weight:500;line-height:1.2;text-decoration:none;transition:background .25s,color .25s;display:inline-flex}.btn-primary:hover{color:#111;background:#ffc934;border-color:#ffc934}.btn-secondary{color:#111;border:1px solid var(--color-border);height:44px;font-family:var(--font-primary);font-size:var(--text-base);cursor:pointer;white-space:nowrap;background:0 0;border-radius:160px;justify-content:center;align-items:center;padding:0 24px;font-weight:400;transition:border-color .2s;display:inline-flex}.btn-secondary:hover{border-color:#111}.btn-md{height:48px;font-size:var(--text-base);padding:0 28px}.btn-outline{color:#111;border:1px solid var(--color-border);height:44px;font-family:var(--font-primary);font-size:var(--text-base);cursor:pointer;white-space:nowrap;background:0 0;border-radius:160px;justify-content:center;align-items:center;padding:0 24px;font-weight:400;text-decoration:none;transition:border-color .25s,background .25s,color .25s;display:inline-flex}.btn-outline:hover{color:#111;background:#ffc934;border-color:#ffc934}@media (width<=1024px){:root{--container-padding:32px}}@media (width<=768px){:root{--container-padding:24px;--nav-height:64px}}.section-title{letter-spacing:-.03em;color:var(--color-text);font-size:clamp(28px,3.5vw,56px);font-weight:500;line-height:1.1}.section-eyebrow{font-size:var(--text-xs);color:var(--color-text-muted);letter-spacing:.01em}.page-transition{will-change:transform, opacity;animation-timing-function:cubic-bezier(.4,0,.2,1);animation-fill-mode:both}.page-zoom-in{animation-name:zoomFadeIn;animation-duration:.5s}.page-zoom-out{animation-name:zoomFadeOut;animation-duration:.4s}@keyframes zoomFadeIn{0%{opacity:0;transform:scale(1.06)}40%{opacity:.4;transform:scale(1.02)}to{opacity:1;transform:scale(1)}}@keyframes zoomFadeOut{0%{opacity:1;transform:scale(1)}60%{opacity:.4;transform:scale(.97)}to{opacity:0;transform:scale(.94)}}.anim-fade-in-down{animation:.7s ease-out both fadeInDown}.anim-fade-in-left{animation:.6s ease-out both fadeInLeft}@keyframes fadeInDown{0%{opacity:0;transform:translateY(-24px)}to{opacity:1;transform:translateY(0)}}@keyframes fadeInLeft{0%{opacity:0;transform:translate(-24px)}to{opacity:1;transform:translate(0)}}.fade-up-section{opacity:0;transition:opacity .8s cubic-bezier(.25,.46,.45,.94),transform .8s cubic-bezier(.25,.46,.45,.94);transform:translateY(50px)}.fade-up-section.fade-up-visible{opacity:1;transform:translateY(0)}.navbar{z-index:100;height:var(--nav-height);-webkit-backdrop-filter:blur(12px);border-bottom:1px solid var(--color-border);background:#ffffffeb;position:fixed;top:0;left:0;right:0}.navbar-progress{z-index:101;background:#111;height:2px;transition:width .1s linear;position:absolute;top:0;left:0}.navbar-inner{align-items:center;gap:var(--space-5);max-width:1100px;height:100%;padding-left:var(--container-padding);padding-right:var(--container-padding);margin-left:auto;margin-right:auto;display:flex}.navbar-logo{align-items:center;gap:var(--space-2);margin-right:auto;display:flex}.navbar-logo-icon{flex-shrink:0}.navbar-logo-text{font-size:var(--text-base);letter-spacing:-.01em;color:var(--color-text);font-weight:500;font-family:var(--font-primary)}.navbar-links{align-items:center;gap:var(--space-6);display:flex}.navbar-link{color:var(--color-text);letter-spacing:.02em;font-size:14px;font-weight:500;transition:opacity .2s}.navbar-link:hover{opacity:.55}.navbar-actions{margin-left:var(--space-6)}@media (width<=768px){.navbar-links{display:none}.navbar-inner{gap:var(--space-3)}}.footer{background:var(--color-bg-dark);color:#fff;padding:var(--space-7) 0}.footer-top{justify-content:space-between;align-items:flex-start;gap:var(--space-8);padding-bottom:var(--space-6);margin-bottom:var(--space-5);border-bottom:1px solid #ffffff1a;display:flex}.footer-brand{gap:var(--space-3);flex-direction:column;display:flex}.footer-logo{letter-spacing:.06em;color:#fff;font-size:15px;font-weight:600}.footer-tagline{font-size:var(--text-xs);color:#fff6;line-height:1.5}.footer-links-row{gap:var(--space-6);display:flex}.footer-link{font-size:var(--text-sm);color:#ffffff8c;transition:color .2s}.footer-link:hover{color:#fff}.footer-bottom{align-items:center;display:flex}.footer-legal{font-size:var(--text-xs);color:#ffffff40}@media (width<=768px){.footer-top{gap:var(--space-5);flex-direction:column}.footer-links-row{gap:var(--space-4);flex-wrap:wrap}}.hero{padding-top:var(--nav-height);flex-direction:column;min-height:100vh;display:flex;position:relative;overflow:hidden}.hero-wrap{width:100%;max-width:var(--container-max);padding-left:var(--container-padding);padding-right:var(--container-padding);margin-left:auto;margin-right:auto}.hero-inner{align-items:center;gap:0 var(--space-7);padding-top:var(--space-9);padding-bottom:var(--space-7);z-index:2;flex:1;grid-template-columns:1.2fr .8fr;display:grid;position:relative}.hero-content{gap:var(--space-6);flex-direction:column;display:flex}.hero-title{letter-spacing:-.03em;color:var(--color-text);font-size:clamp(36px,3.5vw,56px);font-weight:500;line-height:1.15}.hero-title-block{display:grid}.hero-title-block>.hero-title,.hero-title-block>.hero-title-reserve{grid-area:1/1}.hero-title-reserve{visibility:hidden;letter-spacing:-.03em;pointer-events:none;font-size:clamp(36px,3.5vw,56px);font-weight:500;line-height:1.15}.hero-typing-text{color:var(--color-text-light);font-style:italic}.hero-cursor{color:var(--color-accent-yellow);margin-left:1px;font-style:normal;font-weight:300;animation:.7s step-end infinite cursorBlink}.hero-cursor--typing{opacity:1;animation:none}@keyframes cursorBlink{0%,to{opacity:1}50%{opacity:0}}.hero-cta-row{align-items:center;gap:var(--space-5);display:flex}.hero-desc-text{font-size:var(--text-base);color:var(--color-text-light);max-width:520px;line-height:1.7}.hero-illustration{justify-content:center;align-items:center;display:flex}.hero-portrait-container{border-radius:8px;width:100%;max-width:420px;position:relative;overflow:hidden}.hero-portrait-img{object-fit:cover;border-radius:8px;width:100%;height:auto;display:block}.hero-portrait-illustration{z-index:1;transition:opacity 1.2s cubic-bezier(.4,0,.2,1);position:relative}.hero-portrait-photo{z-index:0;object-position:center 15%;position:absolute;top:0;left:0}.hero-portrait-container:hover .hero-portrait-illustration{opacity:0}.hero-doodles{z-index:3;pointer-events:none;position:absolute;inset:0;overflow:hidden}.hero-bottom{border-top:1px solid var(--color-border);z-index:2;position:relative}.hero-stats{border-bottom:1px solid var(--color-border);grid-template-columns:repeat(3,1fr);display:grid}.hero-stat{text-align:center;align-items:center;gap:var(--space-2);padding:var(--space-7) 0;border-right:1px solid var(--color-border);flex-direction:column;display:flex}.hero-stat:last-child{border-right:none}.hero-stat-value{letter-spacing:-.02em;color:var(--color-text);font-size:clamp(24px,2.5vw,36px);font-weight:500;line-height:1}.hero-stat-label{font-size:var(--text-sm);color:var(--color-text-muted);line-height:1.5}@media (width<=1024px){.hero-inner{gap:var(--space-7) 0;padding-top:var(--space-8);grid-template-columns:1fr}.hero-illustration{order:-1}.hero-portrait-container{max-width:300px}.hero-doodles{display:none}}@media (width<=768px){.hero{min-height:auto}.hero-title,.hero-title-reserve{font-size:32px}.hero-portrait-container{max-width:240px}.hero-stats{grid-template-columns:1fr}.hero-stat{border-right:none;border-bottom:1px solid var(--color-border)}.hero-stat:last-child{border-bottom:none}}.doodle{opacity:.35;pointer-events:none;position:absolute}.doodle--hero-browser{width:156px;bottom:12%;left:2%;transform:rotate(-6deg)}.doodle--hero-chart{width:144px;top:12%;right:1%;transform:rotate(6deg)}.doodle--hero-code{width:114px;bottom:14%;right:1%;transform:rotate(10deg)}.recs-doodles{z-index:0;pointer-events:none;position:absolute;inset:0;overflow:hidden}.doodle--recs-lightbulb{width:100px;top:8%;left:2%;transform:rotate(-15deg)}.doodle--recs-target{width:110px;bottom:18%;right:1%;transform:rotate(10deg)}.doodle--recs-chat{width:120px;bottom:5%;left:3%;transform:rotate(-8deg)}.projects-doodles{z-index:0;pointer-events:none;position:absolute;inset:0;overflow:hidden}.doodle--projects-flowchart{width:130px;top:6%;right:1%;transform:rotate(5deg)}.doodle--projects-pencil{width:100px;bottom:12%;left:2%;transform:rotate(-20deg)}.doodle--projects-gear{width:110px;top:45%;right:2%;transform:rotate(12deg)}.contact-doodles{z-index:0;pointer-events:none;position:absolute;inset:0;overflow:hidden}.doodle--contact-chat{width:120px;top:15%;right:3%;transform:rotate(8deg)}.doodle--contact-lightbulb{width:90px;bottom:15%;left:4%;transform:rotate(-12deg)}@media (width<=1024px){.hero-doodles,.recs-doodles,.projects-doodles,.contact-doodles{display:none}}.editable-text{display:inline;position:relative}.editable-text--idle{cursor:default}.editable-text--idle:hover .editable-text__pencil{opacity:1;transform:scale(1)}.editable-text__content{display:inline}.editable-text__pencil{color:#7c3aed;cursor:pointer;opacity:0;vertical-align:middle;background:#7c3aed1a;border:1px solid #7c3aed99;border-radius:4px;justify-content:center;align-items:center;width:22px;height:22px;margin-left:4px;padding:0;transition:opacity .15s,transform .15s;display:inline-flex;transform:scale(.85)}.editable-text__pencil:hover{background:#7c3aed33}.editable-text--editing{display:block}.editable-text__input{color:#111;width:100%;font:inherit;font-size:inherit;line-height:inherit;resize:vertical;background:#fff;border:2px solid #7c3aed;border-radius:6px;outline:none;padding:6px 10px;display:block;box-shadow:0 0 0 3px #7c3aed26}textarea.editable-text__input{min-height:80px}.editable-text__hint{color:#888;-webkit-user-select:none;user-select:none;margin-top:4px;font-size:11px;display:block}.brands{padding:var(--space-9) 0;border-bottom:1px solid var(--color-border);overflow:hidden}.brands-wrap{width:100%;max-width:var(--container-max);padding-left:var(--container-padding);padding-right:var(--container-padding);margin-left:auto;margin-right:auto}.brands-eyebrow{font-size:var(--text-sm);color:var(--color-text-muted);margin-bottom:var(--space-7);text-align:center}.brands-ticker-container{width:100%;overflow:hidden;-webkit-mask-image:linear-gradient(90deg,#0000 0%,#000 5% 95%,#0000 100%);mask-image:linear-gradient(90deg,#0000 0%,#000 5% 95%,#0000 100%)}.brands-ticker{align-items:center;gap:var(--space-9);width:max-content;animation:35s linear infinite ticker-scroll;display:flex}.brands-ticker:hover{animation-play-state:paused}@keyframes ticker-scroll{0%{transform:translate(0)}to{transform:translate(-50%)}}.brand-ticker-item{align-items:center;gap:var(--space-4);cursor:default;flex-shrink:0;display:flex}.brand-ticker-logo{object-fit:contain;filter:grayscale();opacity:.5;width:40px;height:40px;transition:filter .25s,opacity .25s}.brand-ticker-item:hover .brand-ticker-logo{filter:grayscale(0%);opacity:1}.brand-ticker-name{font-size:var(--text-lg);color:var(--color-text-muted);white-space:nowrap;letter-spacing:-.01em;font-weight:500;transition:color .25s}.brand-ticker-item:hover .brand-ticker-name{color:var(--color-text)}@media (width<=768px){.brands-ticker{gap:var(--space-7)}.brand-ticker-logo{width:28px;height:28px}.brand-ticker-name{font-size:var(--text-base)}}.recs{padding:var(--space-9) 0;border-bottom:1px solid var(--color-border);position:relative}.recs-header{margin-bottom:var(--space-7);text-align:center}.recs-accordion{gap:var(--space-5);flex-direction:column;max-width:900px;margin:0 auto;display:flex}.rec-item{border-radius:14px;transition:box-shadow .4s,background .4s;overflow:hidden;box-shadow:0 2px 8px #00000012,0 1px 3px #0000000d}.rec-item:hover{box-shadow:0 8px 28px #0000001a,0 4px 10px #0000000f}.rec-item--cream{background:var(--color-bg-cream)}.rec-item--white{background:var(--color-bg)}.rec-item--expanded{box-shadow:0 8px 28px #0000001a,0 4px 10px #0000000f}.rec-item-header{justify-content:space-between;align-items:center;gap:var(--space-5);width:100%;padding:var(--space-5) var(--space-6);cursor:pointer;text-align:left;background:0 0;border:none;font-family:inherit;transition:opacity .2s;display:flex}.rec-item-header:hover{opacity:.75}.rec-pull-quote{font-size:var(--text-base);color:var(--color-text);flex:1;min-width:0;font-style:normal;line-height:1.55;transition:color .5s}.rec-item--expanded .rec-pull-quote{color:var(--color-text-muted)}.rec-header-right{align-items:center;gap:var(--space-4);flex-shrink:0;display:flex}.rec-person-info{text-align:right}.rec-name{font-size:var(--text-sm);color:var(--color-text);font-weight:600;line-height:1.4}.rec-title{color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.04em;margin-top:2px;font-size:11px;line-height:1.4}.rec-toggle-icon{width:28px;height:28px;color:var(--color-text-muted);flex-shrink:0;justify-content:center;align-items:center;transition:color .3s,transform .3s;display:flex}.rec-item--expanded .rec-toggle-icon{color:var(--color-text)}.rec-item-body{opacity:0;max-height:0;transition:max-height .45s cubic-bezier(.25,.46,.45,.94),opacity .3s;overflow:hidden}.rec-item-body--open{opacity:1;max-height:600px;transition:max-height .55s cubic-bezier(.25,.46,.45,.94),opacity .45s .2s}.rec-item-body-inner{padding:0 var(--space-6) var(--space-6)}.rec-quote{font-size:var(--text-base);color:var(--color-text);padding-top:var(--space-4);border-top:1px solid var(--color-border);line-height:1.8}.rec-keyword{color:#111;font-weight:600}.recs-footer{max-width:900px;padding:var(--space-7) 0;justify-content:flex-end;margin:0 auto;display:flex}.recs-linkedin-link{font-family:var(--font-mono);font-size:var(--text-xs);letter-spacing:.1em;text-transform:uppercase;color:var(--color-text);align-items:center;gap:8px;font-weight:500;text-decoration:none;transition:opacity .2s;display:inline-flex}.recs-linkedin-link:hover{opacity:.55}@media (width<=768px){.rec-item-header{align-items:flex-start;gap:var(--space-3);flex-direction:column}.rec-header-right{justify-content:space-between;width:100%}.rec-person-info{text-align:left}}.projects{padding:var(--space-9) 0;border-bottom:1px solid var(--color-border);position:relative;overflow:hidden}.projects-wrap{width:100%;max-width:var(--container-max);padding-left:var(--container-padding);padding-right:var(--container-padding);margin-left:auto;margin-right:auto}.projects .section-title{margin-bottom:var(--space-2)}.projects-subtitle{font-size:var(--text-sm);color:var(--color-text-muted);margin-bottom:var(--space-7)}.projects-tabs{gap:var(--space-6);flex-direction:column;display:flex}.projects-tab-list{border-bottom:1px solid var(--color-border);-webkit-overflow-scrolling:touch;scrollbar-width:none;gap:0;display:flex;overflow-x:auto}.projects-tab-list::-webkit-scrollbar{display:none}.projects-tab{gap:var(--space-2);min-width:160px;padding:var(--space-6) var(--space-5);cursor:pointer;text-align:left;font-family:var(--font-primary);background:0 0;border:none;border-bottom:2px solid #0000;flex-direction:column;flex:1;transition:border-color .25s,background .2s;display:flex}.projects-tab:hover{background:var(--color-bg-cream)}.projects-tab--active{border-bottom-color:var(--color-accent-yellow)}.projects-tab-subtitle{font-size:calc(var(--text-sm) * 1.3);color:var(--color-text);letter-spacing:-.01em;font-weight:500;line-height:1.35}.projects-tab-company{font-size:calc(var(--text-xs) * 1.3);color:var(--color-text-muted);align-items:center;gap:var(--space-2);line-height:1.4;display:flex}.projects-tab-wip{letter-spacing:.06em;color:var(--color-text-muted);background:var(--color-bg-cream);border-radius:20px;padding:2px 8px;font-size:10px;font-weight:700}.projects-tab--active .projects-tab-subtitle{color:#111}.projects-tab--active .projects-tab-company{color:var(--color-text-light)}.projects-tab-panel{animation:.45s cubic-bezier(.25,.46,.45,.94) both tabFadeIn}@keyframes tabFadeIn{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}.projects-tab-image-link{color:inherit;border-radius:12px;text-decoration:none;transition:transform .3s,box-shadow .3s;display:block;overflow:hidden}.projects-tab-image-link:hover{transform:translateY(-4px);box-shadow:0 8px 30px #00000014}.projects-tab-image-wrap{aspect-ratio:16/10;background:var(--color-bg-cream);border:1px solid var(--color-border);border-radius:12px;width:100%;max-width:900px;margin:0 auto;overflow:hidden}.projects-tab-img{object-fit:contain;object-position:center;width:100%;height:100%;padding:16px}@media (width<=1024px){.projects-tab-list{flex-wrap:nowrap}.projects-tab{min-width:140px}}@media (width<=768px){.projects-tab-list{gap:0}.projects-tab{min-width:120px;padding:var(--space-3) var(--space-4)}.projects-tab-subtitle{font-size:var(--text-xs)}.projects-tab-image-wrap{aspect-ratio:4/3}}.editable-image{width:100%;line-height:0;display:block;position:relative}.editable-image__img{width:100%;height:auto;display:block}.editable-image__controls{opacity:0;pointer-events:none;border-radius:inherit;background:#00000080;flex-direction:column;justify-content:flex-start;align-items:flex-start;gap:6px;padding:8px;transition:opacity .18s;display:flex;position:absolute;inset:0}.editable-image:hover .editable-image__controls{opacity:1;pointer-events:auto}.editable-image__camera{color:#fff;cursor:pointer;background:#7c3aedcc;border:1px solid #ffffff80;border-radius:6px;justify-content:center;align-items:center;width:34px;height:34px;transition:background .15s;display:inline-flex}.editable-image__camera:hover:not(:disabled){background:#7c3aed}.editable-image__camera:disabled{opacity:.6;cursor:default}.editable-image__spinner{animation:.8s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.editable-image__zoom-label{color:#fff;background:#0009;border-radius:6px;align-items:center;gap:6px;padding:4px 8px;display:flex}.editable-image__zoom-slider{accent-color:#7c3aed;cursor:pointer;width:90px}.editable-image__zoom-value{text-align:right;color:#ddd;font-variant-numeric:tabular-nums;min-width:32px;font-size:11px}.editable-image__error{color:#fca5a5;background:#000000b3;border-radius:4px;padding:2px 6px;font-size:11px}.contact{padding:var(--space-9) 0;border-bottom:1px solid var(--color-border);position:relative;overflow:hidden}.contact .section-title{margin-bottom:var(--space-6);text-align:center}.contact-form{max-width:560px;margin:0 auto}.contact-box{border:1px solid var(--color-border);padding:var(--space-5);gap:var(--space-4);border-radius:12px;flex-direction:column;transition:border-color .2s;display:flex}.contact-box:focus-within{border-color:var(--color-text)}.contact-textarea{width:100%;font-family:var(--font-primary);font-size:var(--text-base);color:var(--color-text);resize:none;background:0 0;border:none;padding:0;line-height:1.6}.contact-textarea:focus{outline:none}.contact-textarea::placeholder{color:var(--color-text-muted)}.contact-box-footer{justify-content:flex-end;display:flex}.contact-send:disabled{opacity:.6;cursor:default}.photography--page{padding-top:calc(var(--nav-height) + var(--space-7));min-height:100vh;padding-bottom:var(--space-9)}.back-link{font-size:var(--text-sm);color:var(--color-text-muted);margin-bottom:var(--space-5);align-items:center;gap:6px;font-weight:500;text-decoration:none;transition:color .2s;display:inline-flex}.back-link:hover{color:var(--color-text)}.photo-header{margin-bottom:var(--space-7);max-width:700px}.photo-header .section-title{margin-bottom:var(--space-5)}.photo-quote{font-size:var(--text-base);color:var(--color-text-light);border-left:3px solid var(--color-border);padding-left:var(--space-5);font-style:italic;line-height:1.8}.photo-carousel{align-items:center;gap:var(--space-4);display:flex;position:relative}.photo-carousel-track{gap:var(--space-4);scroll-snap-type:x mandatory;scroll-behavior:smooth;-webkit-overflow-scrolling:touch;scrollbar-width:none;padding:var(--space-2) 0;display:flex;overflow-x:auto}.photo-carousel-track::-webkit-scrollbar{display:none}.photo-slide{scroll-snap-align:center;cursor:pointer;opacity:.4;border-radius:12px;flex:none;width:100%;max-width:900px;transition:opacity .4s,transform .4s;overflow:hidden;transform:scale(.95)}.photo-slide--active{opacity:1;transform:scale(1)}.photo-slide img{object-fit:cover;width:100%;height:auto;max-height:600px;display:block}.photo-nav{z-index:5;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border:1px solid var(--color-border);cursor:pointer;width:44px;height:44px;color:var(--color-text);background:#ffffffe6;border-radius:50%;justify-content:center;align-items:center;transition:background .2s,border-color .2s;display:flex;position:absolute;top:50%;transform:translateY(-50%)}.photo-nav:hover{background:#fff;border-color:#111}.photo-nav--prev{left:-8px}.photo-nav--next{right:-8px}.photo-counter{margin-top:var(--space-5);font-family:var(--font-mono);font-size:var(--text-sm);color:var(--color-text-muted);justify-content:center;align-items:center;gap:4px;display:flex}.photo-counter-current{color:var(--color-text);font-weight:500}@media (width<=768px){.photo-slide{max-width:85vw}.photo-nav{width:36px;height:36px}}.research{padding:var(--space-9) 0;border-bottom:1px solid var(--color-border)}.research--page{padding-top:calc(var(--nav-height) + var(--space-9));border-bottom:none;min-height:100vh}.research-wrap{width:100%;max-width:1100px;padding-left:var(--container-padding);padding-right:var(--container-padding);margin-left:auto;margin-right:auto}.research .section-title{margin-bottom:var(--space-3)}.research-intro{font-size:var(--text-base);color:var(--color-text-light);max-width:650px;margin-bottom:var(--space-8);line-height:1.7}.research-section{margin-bottom:var(--space-8)}.research-section:last-child{margin-bottom:0}.research-heading{font-size:var(--text-xs);text-transform:uppercase;letter-spacing:.08em;color:var(--color-text-muted);margin-bottom:var(--space-5);padding-bottom:var(--space-3);border-bottom:1px solid var(--color-border);font-weight:600}.research-list{flex-direction:column;gap:0;display:flex}.research-item{padding:var(--space-5) 0;border-bottom:1px solid var(--color-border);transition:background .2s}.research-item:hover{margin-left:calc(var(--space-4) * -1);margin-right:calc(var(--space-4) * -1);padding-left:var(--space-4);padding-right:var(--space-4);background:#6495ff0a;border-radius:6px}.research-item:last-child{border-bottom:none}.research-item-row{justify-content:space-between;align-items:flex-start;gap:var(--space-5);display:flex}.research-item-title{font-size:var(--text-base);color:var(--color-text);margin-bottom:var(--space-1);font-weight:500;line-height:1.4}.research-item-year{font-size:var(--text-sm);color:var(--color-text-light);margin-bottom:var(--space-1);line-height:1.5}.research-item-authors{font-size:var(--text-sm);color:var(--color-text-muted);line-height:1.5}.research-item-journal{font-size:var(--text-sm);color:var(--color-text-light);margin-top:var(--space-1);font-style:italic;line-height:1.5}.research-item-venue{font-size:var(--text-sm);color:var(--color-text-light);line-height:1.5}.research-item-year{font-size:var(--text-sm);color:var(--color-text-muted);white-space:nowrap;flex-shrink:0}.research-download{color:var(--color-text-muted);border:1px solid var(--color-border);white-space:nowrap;border-radius:160px;flex-shrink:0;align-items:center;gap:6px;padding:6px 14px;font-size:13px;font-weight:500;text-decoration:none;transition:color .2s,border-color .2s,background .2s;display:inline-flex}.research-download:hover{color:#111;background:#00000008;border-color:#111}.research-bottom-nav{padding-top:var(--space-8)}@media (width<=768px){.research-item-row{gap:var(--space-3);flex-direction:column}}.case-study--page{padding-top:calc(var(--nav-height) + var(--space-7));min-height:100vh;padding-bottom:var(--space-9)}.case-study-wrap{width:100%;max-width:860px;padding:0 var(--container-padding);margin:0 auto}.case-study-header{margin-bottom:var(--space-7)}.case-study-subtitle{font-size:var(--text-lg);color:var(--color-text-light);margin-top:var(--space-2)}.case-study-wip-badge{margin-top:var(--space-3);font-size:var(--text-xs);letter-spacing:.04em;color:var(--color-text-muted);background:var(--color-bg-cream);border-radius:20px;padding:6px 14px;font-weight:600;display:inline-block}.case-study-hero-image{background:var(--color-bg-cream);width:100%;margin-bottom:var(--space-7);border-radius:12px;overflow:hidden}.case-study-hero-image img{width:100%;height:auto;display:block}.case-study-meta{gap:var(--space-4);padding:var(--space-6) 0;border-top:1px solid var(--color-border);border-bottom:1px solid var(--color-border);margin-bottom:var(--space-7);grid-template-columns:repeat(4,1fr);display:grid}.case-study-meta-label{font-size:calc(var(--text-xs) * 1.5);color:var(--color-text-muted);margin-bottom:var(--space-2);text-transform:uppercase;letter-spacing:.04em;display:block}.case-study-meta-value{font-size:calc(var(--text-sm) * 1.5);color:var(--color-text);font-weight:500;line-height:1.4;display:block}.case-study-overview{margin-bottom:var(--space-8)}.case-study-overview p{font-size:var(--text-md);color:var(--color-text-light);line-height:1.8}.case-study-overview--above-meta{margin-top:var(--space-5);margin-bottom:var(--space-6)}.case-study-content{gap:var(--space-7);flex-direction:column;display:flex}.case-study-section-heading{font-size:var(--text-xl);letter-spacing:-.02em;color:var(--color-text);margin-bottom:var(--space-3);font-weight:500}.case-study-section-text{font-size:var(--text-base);color:var(--color-text-light);line-height:1.8}.cs-section{margin-bottom:var(--space-5)}.cs-heading-hero{letter-spacing:-.02em;color:var(--color-text);padding-top:var(--space-6);padding-bottom:var(--space-3);border-bottom:2px solid var(--color-border);font-size:32px;font-weight:600}.cs-heading{font-size:var(--text-lg);color:var(--color-text);margin-bottom:var(--space-2);font-weight:600}.cs-text{font-size:var(--text-base);color:var(--color-text-light);line-height:1.8}.cs-image{background:var(--color-bg-cream);margin-top:var(--space-3);border-radius:12px;overflow:hidden}.cs-image img{width:100%;height:auto;display:block}.cs-caption{font-size:var(--text-xs);color:var(--color-text-muted);border-top:1px solid var(--color-border);padding:10px 16px}.cs-image-grid{gap:var(--space-4);grid-template-columns:1fr 1fr;display:grid}.cs-list{margin:0 0 var(--space-3) var(--space-5);font-size:var(--text-base);color:var(--color-text-light);line-height:1.8}.cs-list li{margin-bottom:var(--space-2)}@media (width<=600px){.cs-image-grid{grid-template-columns:1fr}.cs-heading-hero{font-size:24px}}.case-study-bottom-nav{padding-top:var(--space-8);border-top:1px solid var(--color-border);margin-top:var(--space-9);justify-content:space-between;align-items:center;display:flex}.cs-next-link{margin-left:auto}.case-study--fullwidth{padding-top:calc(var(--nav-height) + 20px);padding-bottom:20px}.cs-fw-wrap{width:100%;padding:0 180px}.cs-toast{top:calc(var(--nav-height) + 12px);z-index:1000;color:#fff;white-space:nowrap;background:#111;border-radius:8px;padding:12px 24px;font-size:14px;font-weight:500;position:fixed;left:50%;transform:translate(-50%);box-shadow:0 4px 24px #00000026}.cs-intro-columns{gap:var(--space-8);margin-top:calc(var(--space-4) * 1.3);margin-bottom:calc(var(--space-8) * 1.3);grid-template-columns:30% 70%;align-items:start;display:grid}.cs-intro-right--text{gap:var(--space-6);padding:calc(var(--space-6) + var(--space-5) + 5.75rem) 0 0 0;background:0 0;border-radius:0;grid-template-columns:1fr 1fr 1fr;align-items:start;display:grid;overflow:visible}.cs-intro-text-block .cs-row-heading{font-size:var(--text-md);color:var(--color-text);margin-bottom:var(--space-2);font-weight:600}.cs-intro-text-block .cs-row-body{font-size:var(--text-md);color:var(--color-text-light);margin:0;line-height:1.65}.cs-intro-left--plain{background:0 0;border-radius:0;padding:0}.cs-intro-left{padding:var(--space-6);background:var(--color-bg-cream);border-radius:12px;flex-direction:column;gap:0;display:flex}.cs-intro-title{margin:0 0 var(--space-5) 0;line-height:1.15;font-size:var(--text-3xl)}.cs-intro-overview{font-size:calc(var(--text-sm) * 1.5);color:var(--color-text-light);margin:0;line-height:1.75}.cs-intro-meta{gap:var(--space-3);padding-top:var(--space-4);margin-top:var(--space-5);border-top:1px solid var(--color-border);flex-direction:column;display:flex}.cs-intro-meta .case-study-meta-label{font-size:var(--text-xs);letter-spacing:.06em}.cs-intro-meta .case-study-meta-value{font-size:var(--text-base);font-weight:400}.cs-intro-right{background:var(--color-bg-cream);border-radius:12px;overflow:hidden}.cs-intro-right img{width:100%;height:auto;display:block}.cs-intro-right--cropped{max-height:110px}.cs-intro-right--cropped img{object-fit:cover;object-position:top center;width:100%;height:110px}.cs-hero-cropped{display:none}.cs-fw-meta-row{gap:var(--space-8);padding:var(--space-6) 0;border-top:1px solid var(--color-border);border-bottom:1px solid var(--color-border);margin-bottom:var(--space-7);display:flex}.cs-rows{gap:calc(var(--space-10) * 1.95);margin-top:calc(var(--space-8) * 1.3);flex-direction:column;display:flex}.cs-row{grid-template-columns:60% 40%;align-items:center;gap:0;display:grid}.cs-row--img-right{grid-template-columns:40% 60%}.cs-row--img-right .cs-row-image{order:2}.cs-row--img-right .cs-row-text{order:1}.cs-row-image{background:var(--color-bg-cream);border-radius:12px;justify-content:center;align-items:center;display:flex;overflow:hidden}.cs-row-image img{object-fit:contain;width:auto;max-width:100%;height:auto;max-height:700px;display:block}.cs-row-image--no-bg{background:0 0;border-radius:0;overflow:visible}.cs-row-image--no-bg img{object-fit:contain;width:100%;height:auto;max-height:none}.cs-row-image--grid{grid-template-columns:repeat(var(--grid-cols,1), 1fr);gap:var(--space-3);background:0 0;border-radius:0;display:grid;overflow:visible}.cs-row-image--grid img{object-fit:cover;background:var(--color-bg-cream);border-radius:8px;width:100%;height:auto;max-height:none}.cs-row--wide{grid-template-columns:80% 20%}.cs-row--wide.cs-row--img-right{grid-template-columns:20% 80%}.cs-row-image--grid-1-2{gap:var(--space-3);background:0 0;border-radius:0;grid-template-columns:1fr 1fr;display:grid;overflow:visible}.cs-row-image--grid-1-2 img{object-fit:cover;background:var(--color-bg-cream);border-radius:8px;width:100%;height:auto}.cs-row-image--grid-1-2 img:first-child{grid-column:1/-1;width:70%;margin:0 auto}.cs-row-image--diagonal{background:0 0;border-radius:0;flex-direction:column;gap:0;display:flex;position:relative;overflow:visible}.cs-row-image--diagonal img{background:var(--color-bg-cream);border-radius:8px;width:85%;position:relative}.cs-row-image--diagonal img:first-child{z-index:1;align-self:flex-start}.cs-row-image--diagonal img:last-child{z-index:2;align-self:flex-end;margin-top:-15%}.cs-vision-block{text-align:center;max-width:800px;padding:var(--space-8) 0;border-bottom:1px solid var(--color-border);margin:0 auto}.cs-vision-block .cs-row-heading{font-size:var(--text-2xl);color:var(--color-text);letter-spacing:-.02em;margin-bottom:var(--space-4);font-weight:600}.cs-vision-image{max-width:960px;margin:var(--space-6) auto 0;border-radius:12px;overflow:hidden}.cs-vision-image img{width:100%;height:auto;display:block}.cs-standalone-image{max-width:960px;margin:var(--space-8) auto;text-align:center}.cs-standalone-image img{border-radius:12px;width:100%;height:auto;display:block}.cs-closing-image{max-width:100%;margin:var(--space-8) auto;text-align:center}.cs-closing-image img{border-radius:12px;width:100%;height:auto;display:block}.cs-closing-image--original-size img{border-radius:8px;width:auto;max-width:75%;display:inline-block}.cs-standalone-grid{gap:var(--space-4);width:100%;margin:var(--space-6) 0;grid-template-rows:auto auto;grid-template-columns:1fr 1fr;grid-auto-flow:column;display:grid}.cs-standalone-grid img{border-radius:12px;width:100%;height:auto;display:block}.cs-row-text{justify-content:center;gap:var(--space-3);padding:var(--space-6) var(--space-7);flex-direction:column;display:flex}.cs-row-heading{font-size:var(--text-xl);color:var(--color-text);letter-spacing:-.02em;font-weight:600}.cs-row-body{font-size:var(--text-base);color:var(--color-text-light);white-space:pre-line;line-height:1.8}.cs-row-body+.cs-row-body{margin-top:var(--space-4)}.cs-standalone-text{max-width:800px;padding:calc(var(--space-8) * 1.3) 0;border-bottom:1px solid var(--color-border);text-align:center;margin-left:auto;margin-right:auto}.cs-standalone-text .cs-row-heading{font-size:var(--text-2xl);color:var(--color-text);letter-spacing:-.02em;margin-bottom:var(--space-4);font-weight:600}.cs-standalone-text .cs-row-body{font-size:var(--text-md);color:var(--color-text-light);line-height:1.8}.cs-standalone-text--left{text-align:left;max-width:960px;margin-left:0;margin-right:auto}.cs-section--text{text-align:center;max-width:800px;margin-left:auto;margin-right:auto}.cs-parallax{transition:transform .9s cubic-bezier(.25,.46,.45,.94),opacity .9s cubic-bezier(.25,.46,.45,.94)}.cs-row-animate:not(.cs-anim-visible) .cs-parallax{opacity:0;transform:translateY(60px)}.cs-anim-visible .cs-parallax{opacity:1;transform:translateY(0)}.cs-row-connector{background:var(--color-border-dark);width:0;height:1px;transition:width .5s .3s;position:absolute;top:50%}.cs-row--img-left .cs-row-connector{left:0;transform:translate(-100%)}.cs-row--img-right .cs-row-connector{right:0;transform:translate(100%)}.cs-anim-visible .cs-row-connector{width:var(--space-7)}.cs-row-text-animated{position:relative}.cs-row-animate:not(.cs-anim-visible) .cs-row-text-animated .cs-row-heading,.cs-row-animate:not(.cs-anim-visible) .cs-row-text-animated .cs-row-body{opacity:0;transform:translate(-24px)}.cs-anim-visible .cs-row-text-animated .cs-row-heading,.cs-anim-visible .cs-row-text-animated .cs-row-body{animation:.8s ease-out .4s both fadeInLeft}.cs-back-to-top{z-index:999;border:1px solid var(--color-border);background:var(--color-bg,#fff);width:48px;height:48px;color:var(--color-text);cursor:pointer;border-radius:50%;justify-content:center;align-items:center;padding:0;transition:transform .2s,box-shadow .25s,background .2s;animation:.25s ease-out both csBttFadeIn;display:inline-flex;position:fixed;bottom:28px;right:28px;box-shadow:0 4px 18px #00000014,0 2px 6px #0000000d}.cs-back-to-top:hover{background:var(--color-bg-cream,#faf7f2);transform:translateY(-2px);box-shadow:0 8px 24px #0000001f,0 3px 8px #00000012}.cs-back-to-top:focus-visible{outline:2px solid var(--color-accent-yellow,#f5c518);outline-offset:3px}@keyframes csBttFadeIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@media (width<=768px){.case-study-meta{grid-template-columns:repeat(2,1fr)}.cs-back-to-top{width:44px;height:44px;bottom:16px;right:16px}}@media (width<=480px){.case-study-meta{grid-template-columns:1fr}}.cs-figma-row{margin:var(--space-8) 0}.cs-figma-embed{cursor:pointer;background:#1a1a1a;border-radius:12px;position:relative;overflow:hidden}.cs-figma-embed iframe{border:none;width:100%;display:block}.cs-figma-preview{position:relative}.cs-figma-preview img{width:100%;transition:opacity .2s;display:block}.cs-figma-embed:hover .cs-figma-preview img{opacity:.82}.cs-figma-play-btn{pointer-events:none;background:#000000a6;border-radius:50%;justify-content:center;align-items:center;width:72px;height:72px;transition:background .2s,transform .2s;display:flex;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.cs-figma-embed:hover .cs-figma-play-btn{background:#000000d1;transform:translate(-50%,-50%)scale(1.08)}.cs-figma-play-btn svg{fill:#fff;width:30px;height:30px;margin-left:4px}.cs-figma-caption{text-align:center;margin-top:var(--space-3);font-size:var(--text-sm);color:var(--color-text-muted)}.cv--page{padding-top:calc(var(--nav-height) + var(--space-9));min-height:100vh}.cv-wrap{width:100%;max-width:1100px;padding-left:var(--container-padding);padding-right:var(--container-padding);padding-bottom:var(--space-10);margin-left:auto;margin-right:auto}.cv-header{margin-bottom:var(--space-8);padding-bottom:var(--space-7);border-bottom:1px solid var(--color-border)}.cv-name{font-size:var(--text-3xl);color:var(--color-text);margin:0 0 var(--space-2) 0;font-weight:700;line-height:1.1}.cv-title{font-size:var(--text-lg);color:var(--color-text-light);margin:0 0 var(--space-4) 0;font-weight:400}.cv-contact{gap:var(--space-3) var(--space-5);font-size:var(--text-sm);color:var(--color-text-muted);flex-wrap:wrap;display:flex}.cv-contact a{color:var(--color-text-muted);text-decoration:none;transition:color .2s}.cv-contact a:hover{color:var(--color-text)}.cv-section{margin-bottom:var(--space-8)}.cv-section:last-child{margin-bottom:0}.cv-section-heading{font-size:var(--text-xs);text-transform:uppercase;letter-spacing:.08em;color:var(--color-text-muted);margin-bottom:var(--space-5);padding-bottom:var(--space-3);border-bottom:1px solid var(--color-border);font-weight:600}.cv-summary{font-size:var(--text-base);color:var(--color-text-light);margin:0;line-height:1.75}.cv-skills{font-size:var(--text-sm);color:var(--color-text-light);margin:0;line-height:1.75}.cv-skills-tools{margin-top:var(--space-3);font-size:var(--text-sm);color:var(--color-text-muted);line-height:1.75}.cv-skills-tools strong{color:var(--color-text-light);font-weight:500}.cv-roles{flex-direction:column;display:flex}.cv-role{padding:var(--space-5) 0;border-bottom:1px solid var(--color-border)}.cv-role:last-child{border-bottom:none;padding-bottom:0}.cv-role-header{justify-content:space-between;align-items:baseline;gap:var(--space-4);margin-bottom:var(--space-1);display:flex}.cv-role-company{font-size:var(--text-base);color:var(--color-text);font-weight:600}.cv-role-dates{font-size:var(--text-sm);color:var(--color-text-muted);white-space:nowrap;flex-shrink:0}.cv-role-title{font-size:var(--text-sm);color:var(--color-text-light);margin-bottom:var(--space-3)}.cv-role-bullets{padding:0 0 0 var(--space-4);gap:var(--space-1);flex-direction:column;margin:0;display:flex}.cv-role-bullets li{font-size:var(--text-sm);color:var(--color-text-light);line-height:1.65}.cv-edu-items{gap:var(--space-5);flex-direction:column;display:flex}.cv-edu-degree{font-size:var(--text-base);color:var(--color-text);margin-bottom:var(--space-1);font-weight:500}.cv-edu-school{font-size:var(--text-sm);color:var(--color-text-muted)}.cv-bottom-nav{padding-top:var(--space-8);border-top:1px solid var(--color-border);margin-top:var(--space-8)}@media (width<=600px){.cv-role-header{gap:var(--space-1);flex-direction:column}.cv-contact{gap:var(--space-2);flex-direction:column}}.admin-login{background:#f5f5f3;justify-content:center;align-items:center;min-height:100vh;font-family:system-ui,-apple-system,sans-serif;display:flex}.admin-login__card{background:#fff;border-radius:12px;width:100%;max-width:400px;padding:48px 40px;box-shadow:0 4px 32px #00000014}.admin-login__title{color:#111;margin:0 0 4px;font-size:24px;font-weight:700}.admin-login__subtitle{color:#888;margin:0 0 32px;font-size:14px}.admin-login__form{flex-direction:column;gap:12px;display:flex}.admin-login__label{color:#333;font-size:13px;font-weight:600}.admin-login__input{color:#111;border:1.5px solid #ddd;border-radius:8px;outline:none;padding:10px 14px;font-size:15px;transition:border-color .15s,box-shadow .15s}.admin-login__input:focus{border-color:#7c3aed;box-shadow:0 0 0 3px #7c3aed26}.admin-login__input:disabled{opacity:.6;cursor:not-allowed}.admin-login__error{color:#dc2626;background:#fef2f2;border:1px solid #fecaca;border-radius:6px;margin:0;padding:8px 12px;font-size:13px}.admin-login__submit{color:#fff;cursor:pointer;background:#7c3aed;border:none;border-radius:8px;margin-top:8px;padding:12px;font-size:15px;font-weight:600;transition:background .15s}.admin-login__submit:hover:not(:disabled){background:#6d28d9}.admin-login__submit:disabled{opacity:.5;cursor:not-allowed}.admin-bar{z-index:9999;color:#e0e0e0;background:#1a1a1a;border-top:1px solid #333;justify-content:space-between;align-items:center;gap:16px;padding:10px 24px;font-family:system-ui,-apple-system,sans-serif;font-size:13px;display:flex;position:fixed;bottom:0;left:0;right:0;box-shadow:0 -2px 16px #0006}.admin-bar__left{align-items:center;gap:12px;min-width:0;display:flex}.admin-bar__badge{color:#fff;letter-spacing:.04em;text-transform:uppercase;background:#7c3aed;border-radius:4px;flex-shrink:0;align-items:center;padding:2px 8px;font-size:11px;font-weight:700;display:inline-flex}.admin-bar__status{color:#aaa;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.admin-bar__error{color:#f87171;flex-shrink:0;font-size:12px}.admin-bar__actions{flex-shrink:0;align-items:center;gap:8px;display:flex}.admin-bar__btn{cursor:pointer;white-space:nowrap;border:1px solid #0000;border-radius:6px;padding:6px 16px;font-size:13px;font-weight:500;transition:background .15s,opacity .15s}.admin-bar__btn:disabled{opacity:.45;cursor:default}.admin-bar__btn--save{color:#fff;background:#7c3aed}.admin-bar__btn--save:not(:disabled):hover{background:#6d28d9}.admin-bar__btn--saved{background:#059669}.admin-bar__btn--discard{color:#ccc;background:0 0;border-color:#555}.admin-bar__btn--discard:hover{background:#2a2a2a}.admin-bar__btn--logout{color:#999;background:0 0;border-color:#444}.admin-bar__btn--logout:hover{color:#f87171;border-color:#f87171}body:has(.admin-bar){padding-bottom:52px}
