.home{--project-surface: var(--clay-wash)}.hero{display:grid;gap:var(--s-7);padding-block:clamp(2rem,5cqi,4.5rem);align-items:center;min-height:calc(100svh - var(--bar-h));align-content:center}.hero__kicker{display:flex;align-items:center;gap:var(--s-2);margin-bottom:var(--s-5)}.hero__dot{width:var(--s-2);height:var(--s-2);background:var(--accent);border-radius:var(--r-pill)}.hero__title{max-width:11em;font:400 var(--t-h1) / .98 var(--serif-display);letter-spacing:var(--track-display);text-wrap:balance}.hero__lead{margin-top:var(--s-5);max-width:28em;font-size:var(--t-lead);line-height:var(--lh-lead);color:var(--lead)}.hero__actions{display:flex;flex-wrap:wrap;gap:var(--s-3);margin-top:var(--s-6)}.action{display:inline-flex;align-items:center;justify-content:space-between;gap:var(--s-5);padding:var(--s-3) var(--s-5);min-height:var(--target);font:550 var(--t-ui) / 1.4 var(--sans);transition:transform var(--dur-out) var(--ease-out),background-color var(--dur-out) var(--ease-out)}.action--primary{background:var(--accent);color:var(--sheet)}.action--quiet{border:1px solid var(--rule)}.action span{transition:transform var(--dur-out) var(--ease-out)}.action:active{transform:translateY(1px)}.hero__location{margin-top:var(--s-6)}.hero__profile{display:grid;gap:var(--s-5);justify-self:center;width:min(100%,var(--hero-portrait))}.hero__portrait{width:100%}.hero__portrait .shot__caption{display:none}.hero__portrait .shot__media{aspect-ratio:1;-o-object-fit:cover;object-fit:cover;border-radius:50%}.hero__name{font:500 var(--t-h3) / 1.3 var(--serif-display);margin-bottom:var(--s-2)}.hero__profile-copy>a{display:inline-block;margin-top:var(--s-4);font:500 var(--t-ui) / 1.5 var(--sans)}.activity{padding-top:var(--s-6);padding-bottom:var(--section)}.activity__heading{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:var(--s-4);margin-bottom:var(--s-5)}.activity__heading .section__title{margin:0}.activity__heading>a{font:500 var(--t-ui) / 1.5 var(--sans)}.activity__scroll{overflow-x:auto;border:1px solid var(--rule);padding:var(--s-5);background:var(--sheet)}.activity__graph{width:100%;min-width:50rem;height:auto}.activity__label{font:10px var(--sans);fill:var(--lead)}.activity__day,.activity__legend i{fill:var(--contribution-0);background:var(--contribution-0)}.activity__foot{display:flex;flex-wrap:wrap;justify-content:space-between;gap:var(--s-3);margin-top:var(--s-3);font-size:var(--t-small)}.activity__legend{display:flex;align-items:center;gap:var(--s-1)}.activity__legend i{width:.7rem;height:.7rem;border-radius:2px}.work,.removals,.build,.now,.about,.plain{padding-bottom:var(--section)}.section__heading{display:flex;align-items:baseline;justify-content:space-between;flex-wrap:wrap;gap:var(--s-4);margin-bottom:var(--s-6)}.section__heading>a{font:450 var(--t-ui) / 1.5 var(--sans)}.section__title{font:400 var(--t-h2) / var(--lh-heading) var(--serif-display);letter-spacing:var(--track-heading);margin-bottom:var(--s-6)}.section__heading .section__title{margin:0}.section__title--quiet{padding-top:var(--s-5);border-top:1px solid var(--rule)}.work__featured{display:grid;gap:var(--s-7)}.plate{display:grid;gap:var(--s-5)}.plate__visual{display:flex;align-items:center;justify-content:center;background:var(--project-surface);padding:clamp(1.25rem,3cqi,2.5rem);min-width:0}#paperling{--project-surface: var(--blue-wash)}#vuoom{--project-surface: var(--clay-wash)}#netlogo-mcp{--project-surface: var(--lavender-wash)}.plate__visual .shot{width:100%;max-width:var(--project-media-w)!important}.plate__visual .shot__media{max-height:var(--project-media-h);-o-object-fit:contain;object-fit:contain}.plate__visual .shot__caption>span{display:none}.plate__visual .shot__caption{justify-content:flex-end}.plate__visual .shot:not(:has(.shot__toggle)){gap:0}.plate__visual .shot__caption:empty{display:none}.plate__content{min-width:0;align-self:center}.plate__name{font:400 var(--t-name) / 1 var(--serif-display);letter-spacing:var(--track-display)}.plate__quote{font-size:var(--t-lead);line-height:var(--lh-lead);margin-top:var(--s-3)}.plate__body{display:grid;gap:var(--s-4);margin-top:var(--s-4);color:var(--lead);font-size:var(--t-body)}.plate__links{display:flex;flex-wrap:wrap;gap:var(--s-3) var(--s-5);margin-top:var(--s-5);font:550 var(--t-small) / 1.6 var(--sans)}.plate__links a{padding-block:var(--s-2)}.plate__facts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--s-3);padding-top:var(--s-4);border-top:1px solid var(--rule)}.plate__facts dt{font-size:var(--t-small)}.plate__facts dd{margin-top:var(--s-1);font:450 var(--t-small) / 1.5 var(--sans);color:var(--ink);overflow-wrap:anywhere}.work__grid{display:grid;gap:var(--s-6);margin-top:var(--s-7)}.work__card{padding:var(--s-5);background:var(--sheet);border:1px solid var(--rule);min-width:0}.work__card .plate__visual{height:var(--card-media-h);background:var(--wash);padding:var(--s-4);margin-bottom:var(--s-5)}.work__card .shot{height:100%;display:block}.work__card .shot__media{height:100%;-o-object-fit:contain;object-fit:contain;box-shadow:none}.work__card .shot__caption{display:none}.work__card .plate__name{font-size:var(--t-h3)}.work__card .plate__quote{font-size:var(--t-body)}.work__card:not(:has(.plate__visual)){background:var(--blue-wash);display:flex;align-items:center;align-self:start}.plate__details{margin-top:var(--s-4)}.plate__details summary{width:-moz-fit-content;width:fit-content;cursor:pointer;font:500 var(--t-small) / 1.5 var(--sans);padding-block:var(--s-3)}.plate__details summary:active{transform:translateY(1px)}.plate__details[open] summary{color:var(--accent)}.plate__details .plate__body{margin-top:var(--s-2)}.removals__list{display:grid;-moz-column-gap:var(--s-7);column-gap:var(--s-7)}.removals__row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:var(--s-4);padding:var(--s-5) var(--s-2) var(--s-5) var(--ink-row-gutter);border-top:1px solid var(--rule);transition:background-color var(--dur-out) var(--ease-out)}.removals__name{font:550 var(--t-ui) / 1.3 var(--sans)}.removals__what{grid-column:1;font-size:var(--t-ui);line-height:1.45;color:var(--lead)}.removals__year{grid-column:2;grid-row:1}.removals__row:active{transform:translateY(1px)}.build__steps{display:grid;-moz-column-gap:var(--s-7);column-gap:var(--s-7)}.build__step{padding-block:var(--s-5);padding-left:var(--ink-row-gutter);border-top:1px solid var(--rule)}.build__swap{font:400 var(--t-h3) / 1.1 var(--serif-display);letter-spacing:var(--track-heading)}.build__proof{margin-top:var(--s-3);font-size:var(--t-body);line-height:var(--lh-body);color:var(--lead);max-width:34em}.now__company{display:grid;gap:var(--s-6);align-items:center;margin-bottom:var(--s-7)}.now__name{font:400 var(--t-name) / 1 var(--serif-display);letter-spacing:var(--track-display)}.now__role{margin-top:var(--s-3)}.now__body{max-width:var(--measure);margin-top:var(--s-4);font-size:var(--t-body)}.now__links{margin-top:var(--s-4);font:550 var(--t-ui) / 1.5 var(--sans)}.now__shot .shot{max-width:var(--project-media-w)!important;margin-inline:auto}.now__shot .shot__caption{margin-top:var(--ink-caption-gap)}.now__text{padding-block:var(--s-4)}.now__ledger{padding-left:var(--ink-row-gutter)}.now__subtitle{margin-bottom:var(--s-3)}.dated__row{display:grid;gap:var(--s-2) var(--s-5);border-top:1px solid var(--rule);padding-block:var(--s-4)}.dated__who{font:550 var(--t-ui) / 1.4 var(--sans)}.dated__what{font-size:var(--t-body);color:var(--lead)}.about__grid{display:grid;gap:var(--s-5) var(--s-7)}.about__portrait{max-width:var(--portrait-w)}.about__portrait .shot__media{filter:grayscale(.25)}.about__portrait .shot__caption{display:none}.about__text{display:grid;align-content:start;gap:var(--s-4);max-width:var(--measure)}.about__first{font-size:var(--t-lead);line-height:var(--lh-lead)}.about__figure{max-width:100%}.about__figure .shot__media{max-height:var(--terrain-h);-o-object-fit:cover;object-fit:cover;mix-blend-mode:multiply}.about__figure .shot__caption{font-size:var(--t-small)}.contact{padding-top:var(--s-6);padding-bottom:var(--s-7);background:var(--clay-wash)}.contact .section__title{border:0;padding-top:0;font:450 var(--t-ui) / 1.4 var(--sans);color:var(--accent)}.contact__line{font:400 var(--t-h2) / var(--lh-heading) var(--serif-display);letter-spacing:var(--track-heading)}.contact__main{display:grid;gap:var(--s-6);padding-bottom:var(--s-4)}.contact__intro .contact__note{margin-top:var(--s-4);max-width:28em;color:var(--lead)}.contact__reach{align-self:center}.contact__reach .contact__email{font-size:var(--t-lead)}.contact__email{display:block;width:-moz-fit-content;width:fit-content;max-width:100%;margin-top:var(--s-3);font-size:var(--t-h2);overflow-wrap:anywhere;color:var(--accent);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:.15em}.contact__email:active{transform:translateY(1px)}.contact__copy{margin-top:var(--s-3);min-height:var(--target);padding-block:var(--s-2);text-decoration:underline;text-underline-offset:.25em;color:var(--ink)}.contact__copy:active{transform:translateY(1px)}.contact__foot{display:grid;gap:var(--s-4);margin-top:var(--s-5);padding-top:var(--s-5);border-top:1px solid var(--rule)}.contact__note{max-width:var(--measure)}.contact__links{display:flex;flex-wrap:wrap;gap:var(--s-3) var(--s-5);font:550 var(--t-ui) / 1.5 var(--sans)}.contact__links a{padding-block:var(--s-2)}.contact__links a:hover{text-decoration:underline;text-underline-offset:.25em}.contact__links a:active{transform:translateY(1px)}.contact__colophon{max-width:65em;font-size:var(--t-small)}.plain .prose{max-width:var(--measure)}@container reader (min-width: 44rem){.contact__main{grid-template-columns:minmax(0,1.2fr) minmax(0,1fr);gap:var(--s-7)}.contact__foot{grid-template-columns:minmax(0,1fr) auto;align-items:baseline}.contact__colophon{max-width:22em;text-align:right}.hero{grid-template-columns:minmax(0,1.5fr) minmax(0,1fr);gap:var(--s-6)}.work__grid,.removals__list,.build__steps,.now__company{grid-template-columns:repeat(2,minmax(0,1fr))}.dated__row{grid-template-columns:1fr 1fr 2fr}.about__grid{grid-template-columns:minmax(0,1fr) minmax(0,2fr)}.about__portrait{grid-row:1 / span 2}.about__figure{grid-column:2}}@container reader (max-width: 43.99rem){.hero{gap:var(--s-5);padding-top:var(--s-8)}.hero__profile{grid-template-columns:auto minmax(0,1fr);align-items:center;justify-self:stretch;width:100%;padding-top:var(--s-5);border-top:1px solid var(--rule)}.hero__portrait{width:var(--hero-portrait-small)}.hero__lead+.hero__lead{margin-top:var(--s-3)}.hero__actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--s-2);margin-top:var(--s-5)}.hero__actions .action{padding-inline:var(--s-4);gap:var(--s-3)}.hero__actions .action--primary{grid-column:1 / -1}.hero__location{margin-top:var(--s-4)}}@container reader (min-width: 64rem){.hero{gap:var(--s-8)}.plate{grid-template-columns:minmax(0,1.15fr) minmax(0,1fr);gap:var(--s-7)}.plate:nth-child(2n){grid-template-columns:minmax(0,1fr) minmax(0,1.15fr)}.plate:nth-child(2n) .plate__visual{grid-column:2;grid-row:1}.plate:nth-child(2n) .plate__content{grid-column:1;grid-row:1}.plate__visual{align-self:stretch}.work__grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--s-6)}.work__card{padding:var(--s-4)}.work__card .plate__facts{grid-template-columns:1fr}.build__steps{grid-template-columns:repeat(3,minmax(0,1fr))}.build__swap{font-size:var(--t-lead)}.build__proof{font-size:var(--t-body)}}@media(hover:hover){.action--primary:hover{background:var(--accent-deep)}.action--quiet:hover,.removals__row:hover{background:var(--wash)}.action:hover span{transform:translate(2px,-2px)}}@media(hover:hover)and (prefers-reduced-motion:no-preference){.plate__visual .shot__media{transition:transform var(--dur-move) var(--ease-out)}.plate__visual:hover .shot__media{transform:translateY(-4px)}}@media print{.work__grid{grid-template-columns:repeat(2,minmax(0,1fr))}.source-access{display:none}}.about{padding-top:var(--s-6);background:var(--blue-wash)}.about>.section__title{border:0;padding:0}.about__grid{align-items:center}.about__portrait{width:100%;max-width:var(--portrait-w)}.about__portrait .shot__media{border-radius:var(--r-window);filter:none}.about__text{max-width:none}.about__facts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--s-5);margin-top:var(--s-3)}.about__facts>div{border-top:1px solid var(--rule);padding-top:var(--s-3)}.about__facts dd{margin-top:var(--s-2);font:500 var(--t-ui) / 1.5 var(--sans)}@container reader (min-width: 44rem){.about__portrait{grid-row:auto}.about__grid{grid-template-columns:minmax(0,1fr) minmax(0,2.5fr)}}@media(prefers-reduced-motion:no-preference){html[data-view=reader]{scroll-behavior:smooth}}.home{position:relative}.home>*{position:relative;z-index:1}.home>.ink{position:sticky;top:0;z-index:0;display:block;width:100%;max-width:none;height:100vh;height:100lvh;margin:calc(-1 * var(--bar-h)) 0 calc(var(--bar-h) - 100vh);margin-bottom:calc(var(--bar-h) - 100lvh);pointer-events:none}.home:not([data-ink])>.ink{visibility:hidden}.home[data-ink] .about,.home[data-ink] .contact,.home[data-ink] .work__featured .plate:nth-child(-n+3) .plate__visual{background:none}.home[data-ink] .work__card{background:none;border-color:transparent}.home[data-ink] .work__card .plate__content{padding-left:var(--s-3)}.home[data-ink] .about,.home[data-ink] .contact{--lead: var(--lead-deep)}@media screen and (scripting:enabled)and (prefers-reduced-motion:no-preference){.home:has(>.ink) .about{margin-top:var(--about-rise);scroll-margin-top:calc(var(--about-rise) * 1.15 + var(--ink-anchor-clearance))}.home:has(>.ink) .activity__heading{margin-bottom:calc(var(--s-5) + var(--activity-rise))}}@media print{.home>.ink{display:none}.home[data-ink] .about{background:var(--blue-wash)}.home[data-ink] .contact{background:var(--clay-wash)}.home[data-ink] .work__featured .plate__visual{background:var(--project-surface)}}.activity [data-level="1"]{fill:var(--contribution-1);background:var(--contribution-1)}.activity [data-level="2"]{fill:var(--contribution-2);background:var(--contribution-2)}.activity [data-level="3"]{fill:var(--contribution-3);background:var(--contribution-3)}.activity [data-level="4"]{fill:var(--contribution-4);background:var(--contribution-4)}.work__card .plate__visual:has([data-frame=phone]){height:var(--phone-preview-h)}.work__card .shot[data-frame=phone] .shot__media{max-height:none}
