:root{--color-bg:#fff;--color-surface:#f4f5f7;--color-surface-hover:#eceef1;--color-ink:#000;--color-ink-body:#16140f;--color-muted:#949597;--color-muted-strong:#6e6f72;--color-link:#2a68e0;--color-link-hover:#1d54c0;--color-on-ink:#fff;--color-scrim:#101214;--color-focus:#2a68e0;--nav-bg:#f4f5f7e6;--color-nav-text:#5c5d60;--nav-bg-solid:#f4f5f7;--nav-border:#5454540d;--nav-blur:10px;--shadow-xs:0 1px 2px #0000000a;--shadow-dialog:0 24px 64px #1012142e;--backdrop:#10121466;--scrim:linear-gradient(to top, #101214d9 0%, #101214a6 60%, #10121400 100%);--ff-sans:var(--font-sans), system-ui, sans-serif;--ff-serif:var(--font-serif), Georgia, serif;--fs-display:32px;--lh-display:40px;--fs-body:18px;--lh-body:28px;--fs-label:16px;--lh-label:16px;--lh-title:20px;--fs-small:14px;--lh-small:16px;--fs-button:16px;--fw-regular:400;--fw-medium:500;--fw-semibold:600;--tracking-display:-.01em;--gutter:20px;--section-gap:28px;--header-gap:8px;--card-pad:16px;--card-gap:8px;--gallery-gap:16px;--grid-gap:8px;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:20px;--space-6:24px;--space-8:32px;--space-10:40px;--space-12:48px;--space-16:64px;--button-h:44px;--tap-min:44px;--nav-h:64px;--nav-offset:20px;--nav-w:320px;--logo-size:40px;--card-w:312px;--card-ratio:312 / 382;--measure:680px;--content-max:1240px;--radius-sm:8px;--radius-md:12px;--radius-pill:100px;--ease:cubic-bezier(.4, 0, .2, 1);--dur-fast:.15s;--dur:.2s;--dur-slow:.3s;--nav-clearance:calc(var(--nav-h) + var(--nav-offset) + env(safe-area-inset-bottom,0px) + var(--space-8))}@media (width>=768px){:root{--gutter:32px;--section-gap:48px;--fs-display:44px;--lh-display:52px;--nav-w:auto}}@media (width>=1024px){:root{--gutter:48px;--section-gap:64px;--fs-display:56px;--lh-display:60px;--tracking-display:-.02em;--fs-body:20px;--lh-body:32px}}@media (prefers-reduced-motion:reduce){:root{--dur-fast:0s;--dur:0s;--dur-slow:0s}}*,:before,:after{box-sizing:border-box}*{margin:0}html{-webkit-text-size-adjust:100%;text-size-adjust:100%;scrollbar-gutter:stable}html.is-scroll-locked{overflow:hidden}body{background:var(--color-bg);min-height:100dvh;color:var(--color-ink);font-family:var(--ff-sans);font-size:var(--fs-small);line-height:var(--lh-small);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizelegibility}img,picture,video,svg{max-width:100%;display:block}img{height:auto}button,input,select,textarea{font:inherit;color:inherit}button{cursor:pointer;background:0 0;border:0;padding:0}a{color:inherit;text-decoration:none}h1,h2,h3,h4,p{overflow-wrap:break-word}ul[role=list],ol[role=list]{padding:0;list-style:none}:focus-visible{outline:2px solid var(--color-focus);outline-offset:2px;border-radius:4px}::selection{background:#377af533}[hidden]{display:none!important}.visually-hidden{clip:rect(0 0 0 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;position:absolute!important}.skip-link{top:var(--space-2);left:var(--space-2);z-index:100;padding:var(--space-3) var(--space-4);border-radius:var(--radius-sm);background:var(--color-ink);color:var(--color-on-ink);font-weight:var(--fw-medium);transition:transform var(--dur) var(--ease);position:fixed;transform:translateY(-200%)}.skip-link:focus-visible{transform:none}.page{width:100%;max-width:calc(var(--content-max) + 2 * var(--gutter));padding:var(--space-8) var(--gutter) var(--nav-clearance);margin-inline:auto}.stack{gap:var(--section-gap);flex-direction:column;display:flex}.t-display{font-family:var(--ff-sans);font-weight:var(--fw-semibold);font-size:var(--fs-display);line-height:var(--lh-display);letter-spacing:var(--tracking-display);color:var(--color-ink)}.t-body{font-family:var(--ff-serif);font-weight:var(--fw-regular);font-size:var(--fs-body);line-height:var(--lh-body);color:var(--color-ink-body)}.t-label{font-family:var(--ff-sans);font-weight:var(--fw-medium);font-size:var(--fs-label);line-height:var(--lh-label);color:var(--color-ink)}.t-title{font-family:var(--ff-sans);font-weight:var(--fw-medium);font-size:var(--fs-label);line-height:var(--lh-title);color:var(--color-ink)}.t-meta{font-family:var(--ff-sans);font-weight:var(--fw-regular);font-size:var(--fs-small);line-height:var(--lh-small);color:var(--color-muted-strong)}.t-body a,.text-link{color:var(--color-link);text-underline-offset:.15em;transition:color var(--dur) var(--ease);text-decoration:underline 1px}.t-body a:hover,.text-link:hover{color:var(--color-link-hover)}.section-head{justify-content:space-between;align-items:flex-start;gap:var(--space-4);margin-bottom:var(--header-gap);display:flex}.btn{justify-content:center;align-items:center;gap:var(--space-2);min-height:var(--button-h);padding:0 var(--space-3);border-radius:var(--radius-sm);font-family:var(--ff-sans);font-weight:var(--fw-medium);font-size:var(--fs-button);box-shadow:var(--shadow-xs);transition:background-color var(--dur) var(--ease), color var(--dur) var(--ease), transform var(--dur-fast) var(--ease);line-height:1;display:inline-flex}.btn:active{transform:scale(.98)}.btn--primary{background:var(--color-ink);color:var(--color-on-ink)}.btn--primary:hover{background:#26282b}.btn--secondary{background:var(--color-surface);color:var(--color-ink)}.btn--secondary:hover{background:var(--color-surface-hover)}.btn--pill{min-height:40px;padding:0 var(--space-4);border-radius:var(--radius-pill);font-size:var(--fs-small);box-shadow:none}.project{gap:var(--section-gap);flex-direction:column;display:flex}.project__head{gap:var(--space-3);max-width:var(--measure);flex-direction:column;display:flex}.modal .project__meta,.modal .project__head h1{padding-right:calc(var(--tap-min) - 4px)}.project__meta a{color:inherit;text-underline-offset:.2em;text-decoration:underline 1px}.project__meta a:hover{color:var(--color-ink)}.project__intro{margin-top:calc(var(--section-gap) - var(--space-3))}.prose>*{margin:0}.prose>*+*{margin-top:var(--section-gap)}.prose>figure+figure{margin-top:var(--grid-gap)}.prose>h2{max-width:var(--measure);font-family:var(--ff-sans);font-weight:var(--fw-semibold);letter-spacing:-.01em;color:var(--color-ink);font-size:22px;line-height:28px}.prose>*+h2{margin-top:calc(var(--section-gap) * 1.5)}.prose>h2+*{margin-top:var(--space-3)}.prose>p,.prose>ul,.prose>ol{max-width:var(--measure);font-family:var(--ff-serif);font-size:var(--fs-body);line-height:var(--lh-body);color:var(--color-ink-body)}.prose>ul,.prose>ol{padding-left:1.2em}.prose li+li{margin-top:var(--space-2)}.prose strong{font-weight:600}.prose p a,.prose li a{color:var(--color-link);text-underline-offset:.15em;text-decoration:underline 1px}.img-block{gap:var(--space-2);flex-direction:column;min-width:0;display:flex}.img-block picture,.img-block img{border-radius:var(--radius-md);background:var(--color-surface);width:100%;display:block}.img-block--natural img{height:auto}.img-block--frame img{aspect-ratio:320/224;object-fit:var(--fit,contain);object-position:var(--focus);height:auto}.img-block--cover{--fit:cover}.img-pair{gap:var(--space-2);flex-direction:column;display:flex}.img-pair__grid{gap:var(--grid-gap);grid-template-columns:1fr 1fr;display:grid}.img-pair picture{min-width:0;display:block}.img-pair img{aspect-ratio:156/224;object-fit:var(--fit);border-radius:var(--radius-md);background:var(--color-surface);width:100%;height:auto;display:block}.img-pair--landscape img{aspect-ratio:4/3}.video-block{gap:var(--space-2);flex-direction:column;display:flex}.video-block video{border-radius:var(--radius-md);background:var(--color-surface);width:100%;height:auto;display:block}.bottom-nav[data-astro-cid-dlrkusbo]{left:50%;bottom:calc(var(--nav-offset) + env(safe-area-inset-bottom,0px));z-index:50;width:min(var(--nav-w), calc(100vw - 2 * var(--gutter)));height:var(--nav-h);padding:var(--space-1) var(--space-2);border:1px solid var(--nav-border);border-radius:var(--radius-md);background:var(--nav-bg-solid);align-items:center;display:flex;position:fixed;transform:translate(-50%)}@supports ((-webkit-backdrop-filter:blur(1px)) or (backdrop-filter:blur(1px))){.bottom-nav[data-astro-cid-dlrkusbo]{background:var(--nav-bg);backdrop-filter:blur(var(--nav-blur))}}html.has-modal .bottom-nav[data-astro-cid-dlrkusbo]:not(.bottom-nav--in-modal){visibility:hidden}.bottom-nav__list[data-astro-cid-dlrkusbo]{justify-content:space-between;align-items:center;width:100%;margin:0;display:flex}.bottom-nav__item[data-astro-cid-dlrkusbo]{border-radius:var(--radius-sm);height:34px;font-family:var(--ff-sans);font-weight:var(--fw-medium);font-size:var(--fs-small);white-space:nowrap;color:var(--color-nav-text);transition:background-color var(--dur) var(--ease), color var(--dur) var(--ease), box-shadow var(--dur) var(--ease);align-items:center;padding:0 7px;line-height:1;display:flex;position:relative}.bottom-nav__item[data-astro-cid-dlrkusbo]:after{content:"";position:absolute;inset:-5px 0}.bottom-nav__item[data-astro-cid-dlrkusbo]:hover{color:var(--color-ink)}.bottom-nav__item[data-astro-cid-dlrkusbo].is-current,.bottom-nav__item[data-astro-cid-dlrkusbo].is-active{background:var(--color-bg);color:var(--color-ink);box-shadow:var(--shadow-xs)}.bottom-nav__home[data-astro-cid-dlrkusbo]{width:34px;font-weight:var(--fw-semibold);letter-spacing:-.02em;color:var(--color-ink);justify-content:center;padding:0}@media (width<=359px){.bottom-nav[data-astro-cid-dlrkusbo]{width:calc(100vw - 2 * var(--space-5))}.bottom-nav__item[data-astro-cid-dlrkusbo]{padding:0 6px;font-size:13px}}@media (width>=768px){.bottom-nav[data-astro-cid-dlrkusbo]{width:auto;padding:var(--space-1) var(--space-3)}.bottom-nav__list[data-astro-cid-dlrkusbo]{gap:var(--space-1)}.bottom-nav__item[data-astro-cid-dlrkusbo]{padding:0 var(--space-3)}.bottom-nav__home[data-astro-cid-dlrkusbo]{padding:0}.bottom-nav--in-modal[data-astro-cid-dlrkusbo]{display:none}html.has-modal .bottom-nav[data-astro-cid-dlrkusbo]:not(.bottom-nav--in-modal){visibility:visible}}.modal[data-astro-cid-limcatzk]{background:var(--color-bg);width:100%;max-width:100%;height:100dvh;max-height:100dvh;color:var(--color-ink);overscroll-behavior:contain;transition:transform var(--dur-slow) var(--ease), opacity var(--dur-slow) var(--ease), overlay var(--dur-slow) var(--ease) allow-discrete, display var(--dur-slow) var(--ease) allow-discrete;border:0;margin:0;padding:0;overflow:hidden;transform:translateY(0)}.modal[data-astro-cid-limcatzk][open]{flex-direction:column;display:flex}.modal[data-astro-cid-limcatzk]:not([open]){transform:translateY(100%)}@starting-style{.modal[data-astro-cid-limcatzk][open]{transform:translateY(100%)}}.modal[data-astro-cid-limcatzk]::backdrop{background:0 0}.modal[data-astro-cid-limcatzk]:focus{outline:none}.modal__scroll[data-astro-cid-limcatzk]{overscroll-behavior:contain;-webkit-overflow-scrolling:touch;flex:1;min-height:0;overflow-y:auto}.modal__inner[data-astro-cid-limcatzk]{min-height:100%;padding:var(--space-8) var(--gutter) var(--nav-clearance);flex-direction:column;display:flex}.modal__head[data-astro-cid-limcatzk]{justify-content:space-between;align-items:flex-start;gap:var(--space-4);margin-bottom:var(--section-gap);display:flex;position:relative}.modal__head--bare[data-astro-cid-limcatzk]{z-index:2;justify-content:flex-end;height:0;margin-bottom:0;position:sticky;top:0}.modal__close[data-astro-cid-limcatzk]{width:var(--tap-min);height:var(--tap-min);margin:-2px calc(-1 * (var(--tap-min) - 20px) / 2) 0 0;border-radius:var(--radius-pill);color:var(--color-ink);transition:background-color var(--dur) var(--ease);flex:none;place-items:center;display:grid}.modal__head--bare[data-astro-cid-limcatzk] .modal__close[data-astro-cid-limcatzk]{background:var(--nav-bg-solid)}.modal__close[data-astro-cid-limcatzk]:hover{background:var(--color-surface)}@media (width>=768px){.modal[data-astro-cid-limcatzk]{width:min(480px, calc(100vw - 2 * var(--gutter)));border-radius:var(--radius-md);height:auto;max-height:min(85dvh,900px);box-shadow:var(--shadow-dialog);opacity:1;margin:auto;transform:none}.modal--wide[data-astro-cid-limcatzk]{width:min(1040px, calc(100vw - 2 * var(--gutter)));height:min(90dvh,1200px)}.modal[data-astro-cid-limcatzk]:not([open]){opacity:0;transform:translateY(8px)scale(.99)}@starting-style{.modal[data-astro-cid-limcatzk][open]{opacity:0;transform:translateY(8px)scale(.99)}}.modal[data-astro-cid-limcatzk]::backdrop{background:var(--backdrop);transition:background-color var(--dur-slow) var(--ease), overlay var(--dur-slow) var(--ease) allow-discrete, display var(--dur-slow) var(--ease) allow-discrete}@starting-style{.modal[data-astro-cid-limcatzk][open]::backdrop{background:0 0}}.modal--narrow[data-astro-cid-limcatzk] .modal__scroll[data-astro-cid-limcatzk]{flex:0 auto}.modal--narrow[data-astro-cid-limcatzk] .modal__inner[data-astro-cid-limcatzk]{min-height:0}.modal__inner[data-astro-cid-limcatzk]{padding:var(--space-8)}}.xp-card[data-astro-cid-eo3svtrk]{border-radius:var(--radius-md);background:var(--color-surface);transition:background-color var(--dur) var(--ease)}.xp-card[data-astro-cid-eo3svtrk]:has(.xp-card__head:hover){background:var(--color-surface-hover)}.xp-card__heading[data-astro-cid-eo3svtrk]{font:inherit}.xp-card__head[data-astro-cid-eo3svtrk]{justify-content:space-between;align-items:center;gap:var(--space-4);width:100%;padding:var(--card-pad);border-radius:var(--radius-md);text-align:left;display:flex}.xp-card__head[data-astro-cid-eo3svtrk]:focus-visible{outline-offset:-2px}.xp-card__text[data-astro-cid-eo3svtrk]{flex-direction:column;gap:5px;min-width:0;display:flex}.xp-card__meta[data-astro-cid-eo3svtrk]{line-height:normal}.xp-card__head[data-astro-cid-eo3svtrk] .xp-card__logo{width:var(--logo-size);height:var(--logo-size);border-radius:var(--radius-sm);flex:none}.xp-card__panel[data-astro-cid-eo3svtrk]{visibility:hidden;transition:grid-template-rows var(--dur-slow) var(--ease), visibility 0s linear var(--dur-slow);grid-template-rows:0fr;display:grid}.xp-card[data-astro-cid-eo3svtrk].is-open .xp-card__panel[data-astro-cid-eo3svtrk]{visibility:visible;transition:grid-template-rows var(--dur-slow) var(--ease), visibility 0s;grid-template-rows:1fr}.xp-card__panel-inner[data-astro-cid-eo3svtrk]{min-height:0;overflow:hidden}.xp-card__body[data-astro-cid-eo3svtrk]{align-items:flex-start;gap:var(--space-5);padding:calc(40px - var(--card-pad)) var(--card-pad) var(--card-pad);flex-direction:column;display:flex}.icon-link[data-astro-cid-odm76vm6]{align-items:center;gap:var(--space-1);font-family:var(--ff-sans);font-weight:var(--fw-regular);font-size:var(--fs-small);line-height:var(--lh-small);color:var(--color-link);white-space:nowrap;transition:color var(--dur) var(--ease);flex:none;display:inline-flex;position:relative}.icon-link[data-astro-cid-odm76vm6]:after{content:"";position:absolute;inset:-14px -8px}.icon-link[data-astro-cid-odm76vm6]:hover{color:var(--color-link-hover)}.icon-link[data-astro-cid-odm76vm6]:hover .icon-link__label[data-astro-cid-odm76vm6]{text-underline-offset:.2em;text-decoration:underline}.icon-link__icon[data-astro-cid-odm76vm6]{flex:none}.xp__list[data-astro-cid-wncynjxn]{gap:var(--card-gap);flex-direction:column;margin:0;display:flex}.section-head--end[data-astro-cid-wncynjxn]{justify-content:flex-end}@media (width>=1024px){.xp--page[data-astro-cid-wncynjxn] .xp__list[data-astro-cid-wncynjxn]{grid-template-columns:repeat(2,minmax(0,1fr));align-items:start;display:grid}}.contacts[data-astro-cid-lk7zvccg]{gap:var(--space-8);flex-direction:column;flex:1;display:flex}.contacts__copy[data-astro-cid-lk7zvccg]{min-height:var(--lh-small);margin-top:calc(-1 * var(--section-gap) + var(--space-2));justify-content:flex-end;display:flex}.contacts__copied[data-astro-cid-lk7zvccg]{align-items:center;gap:var(--space-1);font-family:var(--ff-sans);font-size:var(--fs-small);line-height:var(--lh-small);color:var(--color-ink);display:inline-flex}.contacts__copied[data-astro-cid-lk7zvccg][hidden]{display:none}.contacts__list[data-astro-cid-lk7zvccg]{margin:0}.contacts__row[data-astro-cid-lk7zvccg]{flex-wrap:wrap;column-gap:.3em;display:flex}.contacts__row[data-astro-cid-lk7zvccg] dd[data-astro-cid-lk7zvccg]{overflow-wrap:anywhere;min-width:0;margin:0}.contacts__list[data-astro-cid-lk7zvccg] a[data-astro-cid-lk7zvccg]{color:var(--color-ink-body);text-decoration:underline;text-decoration-color:var(--color-muted);text-underline-offset:.18em;transition:text-decoration-color var(--dur) var(--ease);text-decoration-thickness:1px}.contacts__list[data-astro-cid-lk7zvccg] a[data-astro-cid-lk7zvccg]:hover{text-decoration-color:currentColor}.contacts__actions[data-astro-cid-lk7zvccg]{gap:var(--space-2);flex-direction:column;margin-top:auto;display:flex}.contacts__row-2[data-astro-cid-lk7zvccg]{gap:var(--space-2);grid-template-columns:1fr 1fr;display:grid}
