@font-face{font-family:Newsreader;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/newsreader-latin-400-normal.BFBkh4jY.woff2)format("woff2"),url(/_astro/newsreader-latin-400-normal.gRTjlS2D.woff)format("woff")}@font-face{font-family:Newsreader;font-style:italic;font-display:swap;font-weight:400;src:url(/_astro/newsreader-latin-400-italic.CEihAR-f.woff2)format("woff2"),url(/_astro/newsreader-latin-400-italic.CNZoH1hn.woff)format("woff")}@font-face{font-family:Newsreader;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/newsreader-latin-500-normal.B66TYsaK.woff2)format("woff2"),url(/_astro/newsreader-latin-500-normal.DFwuUcdu.woff)format("woff")}@font-face{font-family:"Source Sans 3";font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/source-sans-3-latin-400-normal.DQi5PRDE.woff2)format("woff2"),url(/_astro/source-sans-3-latin-400-normal.AFMiCETP.woff)format("woff")}@font-face{font-family:"Source Sans 3";font-style:italic;font-display:swap;font-weight:400;src:url(/_astro/source-sans-3-latin-400-italic.bFKvakRX.woff2)format("woff2"),url(/_astro/source-sans-3-latin-400-italic.BbFJQg2j.woff)format("woff")}@font-face{font-family:"Source Sans 3";font-style:normal;font-display:swap;font-weight:600;src:url(/_astro/source-sans-3-latin-600-normal.DeckBYAU.woff2)format("woff2"),url(/_astro/source-sans-3-latin-600-normal.BvDVuF-j.woff)format("woff")}:root{color-scheme:light;--paper:#fbfaf7;--paper-2:#f1efe9;--ink:#1c1a17;--ink-2:#5f5a52;--rule:#e0dcd3;--rule-strong:#1c1a17;--accent:#1f5fd1;--accent-ink:#fff;--todo-bg:#fde68a;--todo-ink:#1c1a17;--font-display:"Newsreader", "Iowan Old Style", "Palatino Linotype", Georgia, serif;--font-text:"Source Sans 3", "Segoe UI", system-ui, -apple-system, sans-serif;--step--1:.875rem;--step-0:clamp(1.0625rem, 1rem + .25vw, 1.1875rem);--step-1:clamp(1.25rem, 1.15rem + .45vw, 1.5rem);--step-2:clamp(1.5rem, 1.3rem + .9vw, 2rem);--step-3:clamp(1.875rem, 1.5rem + 1.6vw, 2.75rem);--step-4:clamp(2.375rem, 1.7rem + 3vw, 4rem);--step-5:clamp(2.75rem, 1.6rem + 6vw, 6.25rem);--gutter:16px;--max:74rem;--measure:38rem;--space-1:.5rem;--space-2:1rem;--space-3:1.5rem;--space-4:2.5rem;--space-5:4rem;--space-6:6rem}@media (width>=40rem){:root{--gutter:28px}}@media (width>=64rem){:root{--gutter:40px}}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;text-size-adjust:100%;scroll-padding-top:1rem}:root{--paper-grain:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='220' height='220'%3E%3Cfilter id='g'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='3' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 .11 0 0 0 0 .10 0 0 0 0 .09 .3 0 0 0 -.12'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23g)'/%3E%3C/svg%3E");--paper-cloud:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='640' height='640'%3E%3Cfilter id='c'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.004 .009' numOctaves='3' seed='7' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 .45 0 0 0 0 .38 0 0 0 0 .28 .14 0 0 0 -.05'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23c)'/%3E%3C/svg%3E")}body{background:var(--paper-grain), var(--paper-cloud), var(--paper);color:var(--ink);font-family:var(--font-text);font-size:var(--step-0);font-kerning:normal;font-variant-numeric:oldstyle-nums proportional-nums;text-rendering:optimizelegibility;margin:0;line-height:1.6;overflow-x:hidden}img,svg,video{max-width:100%;height:auto;display:block}h1,h2,h3,h4{font-family:var(--font-display);letter-spacing:-.01em;text-wrap:balance;margin:0;font-weight:500;line-height:1.1}p,ul,ol,dl,blockquote,figure,table{margin:0}p{text-wrap:pretty}a{color:inherit;text-decoration-line:underline;text-decoration-thickness:1px;text-decoration-color:var(--accent);text-underline-offset:.2em;transition:text-decoration-thickness .12s,color .12s}a:hover{color:var(--accent);text-decoration-thickness:2px}:focus-visible{outline:3px solid var(--accent);outline-offset:3px;border-radius:1px}::selection{background:var(--accent);color:var(--accent-ink)}hr{border:0;border-top:1px solid var(--rule);margin:var(--space-4) 0}.sr-only{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{left:var(--gutter);z-index:10;background:var(--ink);color:var(--paper);padding:.6rem 1rem;font-weight:600;text-decoration:none;position:absolute;top:-100px}.skip-link:focus{top:.75rem}mark.todo{background:var(--todo-bg);color:var(--todo-ink);font-family:var(--font-text);-webkit-box-decoration-break:clone;box-decoration-break:clone;border-radius:2px;padding:.05em .3em;font-size:.85em;font-style:normal;font-weight:600}.wrap{width:100%;max-width:calc(var(--max) + 2 * var(--gutter));padding-inline:var(--gutter);margin-inline:auto}.kicker{font-family:var(--font-text);font-size:var(--step--1);letter-spacing:.08em;text-transform:uppercase;color:var(--accent);font-weight:600}.kicker a{text-decoration:none}.kicker a:hover{text-decoration:underline}.deck{font-family:var(--font-display);font-style:italic;font-size:var(--step-1);color:var(--ink-2);max-width:40rem;line-height:1.35}.muted{color:var(--ink-2)}.masthead{border-top:6px solid var(--accent);border-bottom:1px solid var(--rule-strong)}.masthead-inner{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:.25rem 1.5rem;padding-block:1.1rem .9rem;display:flex}.wordmark{font-family:var(--font-display);letter-spacing:-.01em;font-size:1.5rem;font-weight:500;line-height:1;text-decoration:none}.wordmark:hover{color:inherit}.wordmark .dot{color:var(--accent)}.nav ul{gap:1.25rem;padding:0;list-style:none;display:flex}.nav a{padding-block:.4rem;font-size:1rem;font-weight:600;text-decoration:none;display:inline-block}.nav a:hover{text-decoration:underline;text-decoration-color:var(--accent)}.nav a[aria-current]{text-decoration:underline 2px;text-decoration-color:var(--accent)}.section{padding-block:var(--space-5) 0}.section-head{border-top:1px solid var(--rule-strong);margin-bottom:var(--space-3);justify-content:space-between;align-items:baseline;gap:1rem;padding-top:.75rem;display:flex}.section-head h2{font-family:var(--font-text);font-size:var(--step--1);letter-spacing:.08em;text-transform:uppercase;color:var(--accent);font-weight:600}.section-head a{font-size:var(--step--1);white-space:nowrap;font-weight:600}.page-head{padding-block:clamp(2rem, 1rem + 5vw, 4rem) var(--space-4);gap:var(--space-2);display:grid}.page-head h1{font-size:var(--step-4);max-width:20ch}.page-head .deck{margin-top:.25rem}.hero{gap:var(--space-3);padding-block:clamp(2rem, 1rem + 5vw, 4rem) var(--space-3);display:grid}.hero h1{font-size:var(--step-5);letter-spacing:-.025em;line-height:.95}.hero .deck{font-size:var(--step-2);max-width:22em;color:var(--ink);line-height:1.2}.hero-body{gap:var(--space-2);max-width:var(--measure);display:grid}.hero-aside{font-size:var(--step--1);color:var(--ink-2);align-content:start;gap:.35rem;display:grid}.hero-aside p{gap:.5rem;display:flex}.hero-aside .label{min-width:5.5rem;color:var(--ink);font-weight:600}@media (width>=56rem){.hero{column-gap:var(--space-5);grid-template-columns:minmax(0,8fr) minmax(0,4fr);align-items:end}.hero h1,.hero .deck,.hero .kicker{grid-column:1/-1}.hero-aside{border-left:1px solid var(--rule);padding-left:var(--space-3)}}.contact-line{font-family:var(--font-display);font-size:var(--step-2);padding-block:var(--space-3) var(--space-5);line-height:1.25}.contact-line a{overflow-wrap:anywhere}.section-note{max-width:44rem;margin-bottom:var(--space-2)}.section-note-lg{font-family:var(--font-display);font-size:var(--step-1);line-height:1.35}.portfolio-contact{font-size:var(--step--1);margin-top:calc(-1 * var(--space-3))}.work-list{counter-reset:work;padding:0;list-style:none}.work-item{border-top:1px solid var(--rule);padding-block:var(--space-3);column-gap:var(--space-2);grid-template-columns:2.5rem minmax(0,1fr);row-gap:.4rem;display:grid;position:relative}.work-item:last-child{border-bottom:1px solid var(--rule)}.work-num{font-family:var(--font-display);font-size:var(--step-1);color:var(--accent);font-variant-numeric:lining-nums tabular-nums;line-height:1.2}.work-main{gap:.4rem;display:grid}.work-title{font-size:var(--step-2);line-height:1.15}.work-title a{text-decoration:none}.work-title a:after{content:"";position:absolute;inset:0}.work-item:hover .work-title a{color:var(--accent)}.work-item:has(a:focus-visible){outline:3px solid var(--accent);outline-offset:2px}.work-item a:focus-visible{outline:none}.work-summary{color:var(--ink-2);max-width:44rem}.work-meta{font-size:var(--step--1);color:var(--ink-2);flex-wrap:wrap;grid-column:2;gap:.25rem 1rem;display:flex}.work-meta strong{color:var(--ink);font-weight:600}@media (width>=56rem){.work-item{column-gap:var(--space-3);grid-template-columns:4rem minmax(0,1fr) 16rem}.work-meta{flex-direction:column;grid-area:1/3;padding-top:.35rem}}.tag-concept{letter-spacing:.08em;text-transform:uppercase;border:1.5px solid var(--accent);width:fit-content;color:var(--accent);padding:.1rem .45rem;font-size:.75rem;font-weight:600;line-height:1.4;display:inline-block}.post-list{padding:0;list-style:none}.post-item{border-top:1px solid var(--rule);padding-block:var(--space-3);gap:.35rem;display:grid;position:relative}.post-item:last-child{border-bottom:1px solid var(--rule)}.post-item time{font-size:var(--step--1);color:var(--ink-2);font-variant-numeric:lining-nums}.post-item h3{font-size:var(--step-2)}.post-item h3 a{text-decoration:none}.post-item h3 a:after{content:"";position:absolute;inset:0}.post-item:hover h3 a{color:var(--accent)}.post-item:has(a:focus-visible){outline:3px solid var(--accent);outline-offset:2px}.post-item a:focus-visible{outline:none}.post-item p{color:var(--ink-2);max-width:44rem}@media (width>=56rem){.post-item{column-gap:var(--space-3);grid-template-columns:10rem minmax(0,1fr)}.post-item time{grid-row:1/span 2;padding-top:.45rem}}.concept-banner{border:2px solid var(--accent);padding:var(--space-2);gap:.25rem;max-width:44rem;display:grid}.concept-banner strong{font-size:var(--step--1);letter-spacing:.08em;text-transform:uppercase;color:var(--accent)}.facts{gap:var(--space-2) var(--space-3);border-top:1px solid var(--rule-strong);border-bottom:1px solid var(--rule);padding-block:var(--space-2);font-size:var(--step--1);grid-template-columns:repeat(auto-fit,minmax(9rem,1fr));display:grid}.facts dt{letter-spacing:.06em;text-transform:uppercase;color:var(--ink-2);font-size:.75rem;font-weight:600}.facts dd{margin:.15rem 0 0}.role-box{margin-block:var(--space-4);background:var(--paper-2);border-top:4px solid var(--accent);padding:var(--space-3) var(--space-2);gap:var(--space-2);display:grid}.role-box h2{font-size:var(--step-2)}.role-box .role-title{font-family:var(--font-display);font-size:var(--step-1);line-height:1.3}.role-cols{gap:var(--space-3);display:grid}.role-cols h3{font-family:var(--font-text);font-size:var(--step--1);letter-spacing:.06em;text-transform:uppercase;margin-bottom:.5rem;font-weight:600}.role-cols ul{gap:.4rem;padding-left:1.1rem;display:grid}@media (width>=48rem){.role-box{padding:var(--space-4)}.role-cols{grid-template-columns:1fr 1fr}}.case-layout{gap:var(--space-4);display:grid}.gallery{gap:var(--space-4);margin-top:var(--space-4);display:grid}.next-link{border-top:1px solid var(--rule-strong);margin-top:var(--space-5);padding-block:var(--space-3) var(--space-5);justify-content:space-between;gap:var(--space-2);flex-wrap:wrap;display:flex}.next-link a{font-family:var(--font-display);font-size:var(--step-1)}.prose{max-width:var(--measure);gap:1.1em;display:grid}.prose>*+h2{margin-top:1.2em}.prose>*+h3{margin-top:.6em}.prose h2{font-size:var(--step-2)}.prose h3{font-size:var(--step-1)}.prose ul,.prose ol{gap:.4em;padding-left:1.25rem;display:grid}.prose li::marker{color:var(--ink-2)}.prose blockquote{border-left:3px solid var(--accent);padding-left:var(--space-2);font-family:var(--font-display);font-size:1.0625em;font-style:italic;line-height:1.55}.prose blockquote p+p{margin-top:.75em}.prose code{background:var(--paper-2);border-radius:2px;padding:.05em .3em;font-size:.9em}.prose pre{background:var(--paper-2);padding:var(--space-2);font-size:.875rem;overflow-x:auto}.prose pre code{background:0 0;padding:0}.prose table{border-collapse:collapse;font-size:var(--step--1);font-variant-numeric:lining-nums tabular-nums;display:block;overflow-x:auto}.prose th,.prose td{text-align:left;border-bottom:1px solid var(--rule);vertical-align:top;padding:.5rem .9rem .5rem 0}.prose th{border-bottom-color:var(--rule-strong);font-weight:600}.prose img{width:100%}.prose hr{margin:1em 0}.prose sup a{color:var(--accent);padding-inline:.1em;font-weight:600;text-decoration:none}.prose .footnotes{border-top:1px solid var(--rule);margin-top:var(--space-3);padding-top:var(--space-2);font-size:var(--step--1);color:var(--ink-2)}.prose .footnotes h2{font-family:var(--font-text);font-size:var(--step--1);letter-spacing:.08em;text-transform:uppercase;font-weight:600}.prose .footnotes ol{margin-top:.75rem}.prose .data-footnote-backref{text-decoration:none}figure.figure{gap:.6rem;display:grid}figure.figure.wide{max-width:none}figure.figure img{background:var(--paper-2);width:100%;height:auto}figcaption{font-size:var(--step--1);color:var(--ink-2);border-left:1px solid var(--rule);padding-left:.75rem}.figure-clip{position:relative}.figure.is-collapsed .figure-clip{aspect-ratio:1;overflow:hidden}.figure.is-collapsed .figure-clip:after{content:"";background:linear-gradient(to bottom, transparent, var(--paper));pointer-events:none;height:35%;position:absolute;inset:auto 0 0}.figure-toggle{cursor:pointer;z-index:1;border:0;justify-self:center;font-family:inherit;position:sticky;bottom:1rem}.figure.is-collapsed .figure-toggle{margin-top:-2.5rem;position:relative;bottom:auto}.callout{border:1px solid var(--rule);border-left:4px solid var(--accent);background:var(--paper-2);padding:var(--space-2) var(--space-3);gap:.6rem;font-size:.97em;display:grid}.callout-title{font-family:var(--font-display);font-weight:500;font-size:var(--step-1);line-height:1.25}.callout-body{gap:.75em;display:grid}.callout-body ul,.callout-body ol{gap:.3em;padding-left:1.25rem;display:grid}.video{gap:.6rem;display:grid}.video-link{text-decoration:none;display:block;position:relative}.video-link .play{background:var(--ink);color:var(--paper);font-weight:600;font-size:var(--step--1);padding:.35rem .75rem;position:absolute;bottom:.75rem;left:.75rem}.video-link:hover .play{background:var(--accent);color:var(--accent-ink)}.video details{font-size:var(--step--1)}.video summary{cursor:pointer;font-weight:600}.wrap.post{max-width:calc(var(--measure) + 2 * var(--gutter))}.button{background:var(--ink);width:fit-content;color:var(--paper);align-items:center;gap:.55rem;padding:.75rem 1.15rem;font-size:1rem;font-weight:600;line-height:1.2;text-decoration:none;transition:background-color .12s;display:inline-flex}.button:hover{background:var(--accent);color:var(--accent-ink)}.button svg{width:1em;height:1em}.resume-contact{flex-wrap:wrap;gap:.25rem 1.5rem;padding:0;list-style:none;display:flex}.resume-contact a{overflow-wrap:anywhere}@media (width>=48rem){.resume-head{grid-template-columns:minmax(0,1fr) auto;align-items:end}.resume-head .button{grid-area:1/2/span 2}}.resume{padding-bottom:var(--space-5);display:grid}.resume>*{min-width:0}.resume h2{font-family:var(--font-text);font-size:var(--step--1);letter-spacing:.08em;text-transform:uppercase;color:var(--accent);border-top:1px solid var(--rule-strong);margin-top:var(--space-4);padding-top:.75rem;font-weight:600;line-height:1.4}.resume h2:first-child{margin-top:0}.resume h2+*{margin-top:.75rem}.resume h2:first-child+p{font-family:var(--font-display);font-size:var(--step-1);line-height:1.4}.resume h3,.resume h4{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:.1rem 1.5rem;display:flex}.resume h3{font-size:var(--step-1);margin-top:var(--space-3);line-height:1.2}.resume h4{font-family:var(--font-text);font-size:var(--step-0);letter-spacing:0;margin-top:var(--space-3);font-weight:600;line-height:1.35}.resume h3+h4{margin-top:.4rem}.resume :is(h3,h4) em{font-family:var(--font-text);font-size:var(--step--1);letter-spacing:0;color:var(--ink-2);white-space:nowrap;font-variant-numeric:lining-nums;font-style:normal;font-weight:400}.resume h3+p{color:var(--ink-2);margin-top:.15rem}.resume ul{gap:.4em;margin-top:.6rem;padding-left:1.15rem;display:grid}.resume li::marker{color:var(--ink-2)}.resume #skills+ul{padding-left:0;list-style:none}@media (width>=56rem){.resume{grid-template-columns:14rem minmax(0,1fr)}.resume>*{grid-column:2;padding-right:max(0px,100% - 46rem)}.resume>h2{padding-right:var(--space-2);grid-column:1}.resume>h2+*{border-top:1px solid var(--rule-strong);margin-top:var(--space-4);padding-top:.6rem}.resume>h2:first-child+*{margin-top:0}.resume>h2+ul{padding-top:.6rem}}.site-footer{margin-top:var(--space-6);border-top:1px solid var(--rule-strong);padding-block:var(--space-4);font-size:var(--step--1);color:var(--ink-2);position:relative;overflow:hidden}.footer-inner{gap:var(--space-3);display:grid;position:relative}.footer-inner .wordmark{color:var(--ink);font-size:1.25rem}.footer-links{flex-wrap:wrap;gap:.5rem 1.25rem;padding:0;list-style:none;display:flex}.footer-links a{color:var(--ink);font-weight:600}.grid-motif{color:var(--rule);width:100%;max-width:34rem;height:auto}.grid-motif .canal{stroke:var(--accent)}@media (width>=56rem){.footer-inner{grid-template-columns:1fr auto;align-items:end}.footer-inner .grid-motif{grid-column:1/-1}}.not-found{padding-block:var(--space-6);gap:var(--space-3);display:grid}.not-found h1{font-size:var(--step-5)}:root{--ht-cell:3px;--ht-half:1.5px;--ht-r:1.05px;--ht-gap:color-mix(in srgb, var(--ink) 70%, var(--paper))}@supports (background-clip:text){.page-head h1,.hero h1,.not-found h1{background:radial-gradient(circle, var(--ink) var(--ht-r), transparent calc(var(--ht-r) + .5px)) 0 0 / var(--ht-cell) var(--ht-cell), radial-gradient(circle, var(--ink) var(--ht-r), transparent calc(var(--ht-r) + .5px)) var(--ht-half) var(--ht-half) / var(--ht-cell) var(--ht-cell), var(--ht-gap);color:#0000;-webkit-background-clip:text;background-clip:text}}@media (forced-colors:active){.page-head h1,.hero h1,.not-found h1{color:canvastext;background:0 0}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}@media print{@page{margin:18mm 16mm}:root{--paper:#fff;--paper-2:#f4f1ec;--ink:#000;--ink-2:#333;--rule:#bbb;--rule-strong:#000;--accent:#1a4fae}html{font-size:10.5pt}body{background:#fff;line-height:1.45}.skip-link,.nav,.site-footer,.next-link,.grid-motif,.section-head a,.button{display:none!important}.masthead{border-bottom:1px solid #000}.masthead-inner{padding-block:0 4mm}.masthead-inner:after{content:attr(data-domain);color:#333;font-size:9pt}.page-head,.hero{padding-block:6mm 4mm}.page-head h1{font-size:24pt}.deck{font-size:13pt}.role-box{break-inside:avoid;background:#fff;border:1px solid #000;border-top-width:3pt;padding:5mm}figure,.callout,table,blockquote,.work-item,.post-item{break-inside:avoid}h2,h3{break-after:avoid}.prose{max-width:none}.prose a[href^=http]:after{content:" (" attr(href) ")";color:#333;word-break:break-all;font-size:8.5pt}.work-title a:after,.post-item h3 a:after{content:none}mark.todo{border:1px solid #000}.video-link .play,.figure-toggle{display:none}.figure.is-collapsed .figure-clip{aspect-ratio:auto;overflow:visible}.figure.is-collapsed .figure-clip:after{content:none}.page-head h1,.hero h1,.not-found h1{color:var(--ink)!important;background:0 0!important}.video details,.video details>:not(summary){display:block}}
