:root{--bg:#fafcff;--fg:#12181f;--muted:#466388;--body:#466388;--mono:#6285b0;--line:#12181f40;--grid-line:#12181f40;--hover:#eaf1ff;--act:#466388;--lime:#d5f03f;--tile-a-bg:#12181f;--tile-a-fg:#fafcff;--tile-a-label:#9fbce4;--tile-b-bg:#eaf1ff;--tile-b-fg:#12181f;--tile-b-label:#466388;--portrait-line:#12181f40;--board-dot:#12181f;--board-line:#12181f;--card-bg:#fafcff;--card-line:#12181f;--card-kind:#12181f;--note-bg:#12181f;--note-fg:#fafcff;--anno:#12181f;--timeline-line:#9fbce4;--timeline-marker:#12181f;--timeline-kind:#6285b0;--pulse-line:#12181f;--copy:#2c4362;--dash:#9fbce4;--strong-line:#12181f;--btn-hover:#2c4362;--tile-b-hover:#dbe6fa;--serif:"Fraunces", Georgia, serif;--sans:"Host Grotesk", system-ui, sans-serif;--mono-font:"IBM Plex Mono", ui-monospace, monospace;--hand:"Caveat", cursive;color-scheme:light}:root[data-theme=dark]{--bg:#12181f;--fg:#fafcff;--muted:#9fbce4;--body:#bdd1ef;--mono:#6285b0;--line:#1f2d3f;--grid-line:#2c4362;--hover:#1f2d3f;--act:#d5f03f;--tile-a-bg:#fafcff;--tile-a-fg:#12181f;--tile-a-label:#466388;--tile-b-bg:#1f2d3f;--tile-b-fg:#fafcff;--tile-b-label:#9fbce4;--portrait-line:transparent;--board-dot:#466388;--board-line:#9fbce4;--card-bg:#12181f;--card-line:#9fbce4;--card-kind:#bdd1ef;--note-bg:#fafcff;--note-fg:#12181f;--anno:#d5f03f;--timeline-line:#2c4362;--timeline-marker:#bdd1ef;--timeline-kind:#7fa8d9;--pulse-line:transparent;--copy:#bdd1ef;--dash:#2c4362;--strong-line:#9fbce4;--btn-hover:#bdd1ef;--tile-b-hover:#2c4362;color-scheme:dark}*,:before,:after{box-sizing:border-box}html,body{margin:0;padding:0}body{background:var(--bg);color:var(--fg);font-family:var(--sans);-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}img{max-width:100%;display:block}h1,h2,h3{font-family:var(--serif);margin:0;font-weight:400}.serif{font-family:var(--serif)}.eyebrow{letter-spacing:.12em;text-transform:uppercase;font-size:13px}:focus-visible{outline:2px solid var(--lime);outline-offset:2px}.page{max-width:1200px;margin:0 auto}@media (width>=1202px){.page{border-left:1px solid var(--line);border-right:1px solid var(--line)}}@keyframes pulse{0%,to{opacity:1}50%{opacity:.35}}@media (prefers-reduced-motion:reduce){.pulse{animation:none!important}}.hero{border-bottom:1px solid var(--line);grid-template-rows:220px 220px;grid-template-columns:repeat(4,minmax(0,1fr));display:grid}.hero__domain{color:var(--muted);grid-area:1/1/2/3;padding:40px 40px 0;font-size:14px}.hero__intro{border-right:1px solid var(--line);flex-direction:column;grid-area:1/1/3/3;justify-content:flex-end;gap:16px;padding:40px;display:flex}.hero__intro h1{font-size:64px;line-height:1}.hero__intro p{color:var(--body);max-width:440px;margin:0;font-size:18px;line-height:1.5}.hero__portrait{object-fit:cover;object-position:50% 35%;border-right:1px solid var(--portrait-line);grid-area:1/3/3/4;width:100%;height:100%}.tile{flex-direction:column;justify-content:space-between;padding:28px;transition:background-color .15s;display:flex}.tile--a:hover,.tile--a:focus-visible{background:var(--btn-hover)}.tile--b:hover,.tile--b:focus-visible{background:var(--tile-b-hover)}.nudge{transition:transform .15s;display:inline-block}a:hover .nudge--down,a:focus-visible .nudge--down{transform:translateY(3px)}a:hover .nudge--out,a:focus-visible .nudge--out{transform:translate(2px,-2px)}a:hover .nudge--right,a:focus-visible .nudge--right{transform:translate(3px)}@media (prefers-reduced-motion:reduce){.nudge{transition:none}a:hover .nudge{transform:none}}.tile .serif{font-size:28px}.tile--a{background:var(--tile-a-bg);color:var(--tile-a-fg);grid-area:1/4/2/5}.tile--a .eyebrow{color:var(--tile-a-label)}.tile--b{background:var(--tile-b-bg);color:var(--tile-b-fg);grid-area:2/4/3/5}.tile--b .eyebrow{color:var(--tile-b-label)}.section-head{justify-content:space-between;align-items:baseline;gap:16px;padding:56px 64px 0;display:flex}.section-head h2{font-size:30px}.section-head span{color:var(--muted);font-size:14px}.boxgrid{border-top:1px solid var(--grid-line);border-left:1px solid var(--grid-line);display:grid}.boxgrid a{border-right:1px solid var(--grid-line);border-bottom:1px solid var(--grid-line);flex-direction:column;gap:8px;transition:background .15s;display:flex}.boxgrid a:hover{background:var(--hover)}.boxgrid .tag,.boxgrid .act{font-family:var(--mono-font);font-size:13px}.boxgrid .tag{color:var(--mono)}.boxgrid .act{color:var(--act)}.work{margin-top:24px;padding:0 64px}.work .boxgrid{grid-template-columns:repeat(3,minmax(0,1fr))}.work a{gap:10px;padding:18px 20px}.work .serif{font-size:22px;line-height:1.3}.board{background-image:radial-gradient(var(--board-dot) 1px, transparent 1.2px);border:1px solid var(--board-line);background-size:24px 24px;grid-template-columns:repeat(3,minmax(0,1fr));align-items:start;gap:40px 36px;margin:24px 64px 0;padding:40px;display:grid}.pin{transform:rotate(var(--tilt,0deg));flex-direction:column;gap:8px;display:flex}.card{background:var(--card-bg);color:var(--fg);border:1px solid var(--card-line)}.card--link{flex-direction:column;gap:20px;padding:20px;display:flex}.pin .card{transition:transform .18s}@media (hover:hover){.pin .card:hover{transform:translateY(-3px)}}.arrow{letter-spacing:0;border-radius:50%;flex:none;justify-content:center;align-items:center;width:24px;height:24px;margin:-6px -6px -6px 0;transition:background-color .18s,color .18s;display:inline-flex}a.card:hover .arrow,a.card:focus-visible .arrow{background:var(--fg);color:var(--bg)}.card--img .cap{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.card--img .arrow{margin:-3px -3px -3px 0;font-size:13px}@media (prefers-reduced-motion:reduce){.pin .card,.arrow{transition:none}.pin .card:hover{transform:none}}.card--link .head{letter-spacing:.12em;text-transform:uppercase;color:var(--card-kind);justify-content:space-between;font-size:12px;display:flex}.card--link .serif{font-size:21px;line-height:1.3}.card--link .src{color:var(--muted);font-size:13px}.card--note{background:var(--note-bg);color:var(--note-fg);font-family:var(--serif);border:0;padding:22px;font-size:21px;line-height:1.3}.card--img{flex-direction:column;gap:10px;padding:12px;font-size:15px;display:flex}.card--img img{object-fit:cover;width:100%;height:180px}.anno{font-family:var(--hand);color:var(--anno);font-size:26px}.changelog{flex-direction:column;gap:40px;padding:64px 64px 72px;display:flex}.changelog h2{align-items:center;gap:14px;font-size:30px;display:flex}.timeline .entry[hidden]{display:none}.load-more{all:unset;cursor:pointer;color:var(--fg);text-decoration:underline;text-decoration-color:var(--line);text-underline-offset:5px;align-self:center;margin-top:-8px;font-size:16px;text-decoration-thickness:1px;transition:text-decoration-color .15s}.load-more:hover{text-decoration-color:currentColor}.load-more:focus-visible{outline:2px solid var(--lime);outline-offset:4px}.entry__title:focus{outline:none}.pulse{background:var(--lime);border:1px solid var(--pulse-line);border-radius:50%;width:10px;height:10px;animation:2s infinite pulse}.timeline{border-left:1px solid var(--timeline-line);margin:0 0 0 172px;padding:0;list-style:none}.entry{flex-direction:column;gap:6px;max-width:720px;padding:0 0 32px 40px;display:flex;position:relative}.entry:before{content:"";background:var(--timeline-marker);width:9px;height:9px;position:absolute;top:8px;left:-5px}.entry__date{text-align:right;width:120px;color:var(--muted);font-size:14px;position:absolute;top:4px;left:-146px}.entry__kind{letter-spacing:.12em;text-transform:uppercase;color:var(--timeline-kind);font-size:12px}.entry__meta{display:none}.entry__title{font-size:22px;line-height:1.3}.entry__title a{text-decoration:underline;text-decoration-color:var(--line);text-underline-offset:5px;text-decoration-thickness:1px;transition:text-decoration-color .15s}.entry__title a:hover{text-decoration-color:currentColor}.entry__title a:focus-visible{outline:2px solid var(--lime);outline-offset:3px}.entry__arrow{color:var(--muted);margin-left:.3em;font-size:.8em;text-decoration:none;display:inline-block}.entry__body{color:var(--body);font-size:16px;line-height:1.5}.entry__body p{margin:0}.entry__body p+p{margin-top:.5em}.entry__body a{text-decoration:underline}.footer{border-top:1px solid var(--line);flex-direction:column;gap:24px;padding:40px 64px 24px;display:flex}.footer .boxgrid{grid-template-columns:repeat(4,minmax(0,1fr))}.footer .boxgrid a{padding:16px 18px}.footer .boxgrid .serif{font-size:20px}.footer__bar{font-family:var(--mono-font);color:var(--muted);justify-content:space-between;align-items:center;gap:12px;font-size:13px;display:flex}.footer__short{display:none}.footer__controls{align-items:stretch;gap:8px;display:flex}.modes{border:1px solid var(--grid-line);display:flex}.sound-toggle{all:unset;cursor:pointer;border:1px solid var(--grid-line);width:30px;color:var(--muted);justify-content:center;align-items:center;transition:color .15s,background-color .15s;display:flex}.sound-toggle:hover{color:var(--fg);background:var(--hover)}.sound-toggle:focus-visible{outline:2px solid var(--lime);outline-offset:2px}.sound-toggle__off,:root[data-sound=off] .sound-toggle__on{display:none}:root[data-sound=off] .sound-toggle__off{display:inline}.modes button{all:unset;cursor:pointer;font-family:var(--mono-font);color:var(--muted);padding:6px 12px;font-size:13px;transition:background-color .15s,color .15s}.modes button+button{border-left:1px solid var(--grid-line)}.modes button[aria-pressed=false]:hover{background:var(--hover);color:var(--fg)}.modes button[aria-pressed=true]{background:var(--fg);color:var(--bg)}.modes button:focus-visible{outline:2px solid var(--lime);outline-offset:-2px}.section-head .more{color:var(--fg);border-bottom:1px solid var(--line)}.section-head .more:hover{border-color:var(--fg)}.nav{border-bottom:1px solid var(--line);grid-template-columns:minmax(0,2fr) repeat(3,minmax(0,1fr)) 64px;display:grid}.nav a{color:var(--fg);border-right:1px solid var(--line);transition:background .15s}.nav a:not([aria-current]):hover{background:var(--hover)}.nav__name{font-family:var(--serif);padding:20px 28px;font-size:22px}.nav__link{padding:22px 24px}.nav__link[aria-current=page]{background:var(--fg);color:var(--bg)}.nav__short{display:none}.nav--floating{z-index:10;background:var(--bg);visibility:hidden;width:100%;max-width:1200px;transition:transform .25s,visibility 0s linear .25s;position:fixed;top:0;left:50%;transform:translate(-50%,-100%)}.nav--floating.is-visible{visibility:visible;transition:transform .25s,visibility;transform:translate(-50%)}@media (width>=1202px){.nav--floating{border-left:1px solid var(--line);border-right:1px solid var(--line)}}@media (prefers-reduced-motion:reduce){.nav--floating,.nav--floating.is-visible{transition:none}}.nav__mode{all:unset;cursor:pointer;color:var(--fg);justify-content:center;align-items:center;font-size:16px;display:flex}.nav__mode:hover{background:var(--hover)}.nav__mode:focus-visible{outline:2px solid var(--lime);outline-offset:-2px}.nav__sun{display:none}:root[data-theme=dark] .nav__sun{display:inline}:root[data-theme=dark] .nav__moon{display:none}.resume{flex-direction:column;gap:56px;max-width:820px;margin:0 auto;padding:72px 0 96px;display:flex}.resume__intro{flex-direction:column;gap:20px;display:flex}.resume__head{justify-content:space-between;align-items:flex-end;gap:32px;display:flex}.resume__title{flex-direction:column;gap:12px;display:flex}.resume h1{font-size:56px;line-height:1.05}.resume__headline{font-size:20px}.pdf{background:var(--fg);color:var(--bg);border:1px dashed #2c4362;flex:none;padding:12px 18px;font-size:15px;transition:background-color .15s,color .15s}.pdf:hover,.pdf:focus-visible{background:var(--btn-hover)}.resume__summary{color:var(--copy);text-wrap:pretty;border-top:1px dashed var(--dash);margin:0;padding-top:20px;font-size:17px;line-height:1.65}.resume__section{flex-direction:column;gap:28px;display:flex}.resume__section--skills{gap:20px}.resume h2{font-size:32px}.jobs{border-left:1px solid var(--timeline-line);margin:0 0 0 4px;padding:0;list-style:none}.job{flex-direction:column;gap:10px;padding:0 0 40px 36px;display:flex;position:relative}.job:before{content:"";background:var(--timeline-marker);width:9px;height:9px;position:absolute;top:9px;left:-5px}.job__top{justify-content:space-between;align-items:baseline;gap:24px;display:flex}.job__role{font-size:24px}.job__dates{color:var(--muted);white-space:nowrap;font-size:14px}.job__org{color:var(--muted);font-size:15px}.job__bullets ul{color:var(--copy);flex-direction:column;gap:6px;margin:4px 0 0;padding-left:18px;font-size:16px;line-height:1.55;display:flex}.skills{border-top:1px solid var(--grid-line);border-left:1px solid var(--grid-line);grid-template-columns:repeat(2,minmax(0,1fr));margin:0;display:grid}.skills div{border-right:1px solid var(--grid-line);border-bottom:1px solid var(--grid-line);flex-direction:column;gap:8px;padding:20px 22px;font-size:15px;line-height:1.5;display:flex}.skills dt{font-family:var(--mono-font);color:var(--mono);font-size:13px}.skills dd{margin:0}.archive{flex-direction:column;gap:48px;padding:56px 64px 80px;display:flex}.archive__head{flex-direction:column;gap:10px;display:flex}.archive__head h1{font-size:56px;line-height:1}.archive__head span{color:var(--muted);font-size:16px}.month{grid-template-columns:200px minmax(0,1fr);gap:32px;display:grid}.month h2{padding-top:16px;font-size:24px}.rows{border-top:1px solid var(--strong-line);margin:0;padding:0;list-style:none}.row{border-bottom:1px solid var(--grid-line);color:var(--fg);grid-template-columns:70px 100px minmax(0,1fr) 72px 160px;align-items:center;gap:20px;padding:14px 0;display:grid}a.row{transition:background .15s}a.row:hover{background:var(--hover)}.row__date{color:var(--muted);font-size:14px}.row__tag,.row__meta{font-family:var(--mono-font);color:var(--mono);font-size:13px}.row__meta{display:none}.row__title{font-family:var(--serif);font-size:19px;line-height:1.3}.row__thumb img{object-fit:cover;border:1px solid var(--strong-line);width:72px;height:44px}.row__src{color:var(--muted);text-align:right;font-size:13px}.contact{flex-direction:column;gap:40px;padding:56px 64px 80px;display:flex}.contact__head{flex-direction:column;gap:14px;max-width:640px;display:flex}.contact__head h1{font-size:56px;line-height:1}.contact__head p{color:var(--body);margin:0;font-size:18px;line-height:1.5}.contact__form{color:#fafcff;background:#12181f;border:1px solid #2c4362;max-width:640px;padding:28px 32px 12px}.contact__fallback a{color:#d5f03f}.contact__form iframe{border:0;min-height:200px;display:block}.contact__fallback{margin:0 0 16px;font-size:16px}.contact__fallback a{text-decoration:underline}.lost{flex-direction:column;gap:20px;padding:96px 64px 112px;display:flex;position:relative}.lost:before{content:"";background-image:radial-gradient(var(--board-dot) 1px, transparent 1.2px);opacity:.5;pointer-events:none;background-size:24px 24px;position:absolute;inset:0;mask-image:linear-gradient(#0000,#000 35% 65%,#0000)}.lost>*{position:relative}.lost__code{font-family:var(--mono-font);color:var(--mono);font-size:14px}.lost__text{flex-direction:column;gap:20px;display:flex}.lost h1{max-width:720px;font-size:64px;line-height:1.05}.lost p{color:var(--body);max-width:520px;margin:0;font-size:18px;line-height:1.5}.lost__ways{background:var(--bg);grid-template-columns:repeat(3,minmax(0,1fr));margin-top:28px}.lost__ways a{gap:10px;padding:18px 20px}.lost__ways .serif{font-size:22px;line-height:1.3}@media (width<=1080px){.hero__intro h1{font-size:52px}.board{grid-template-columns:repeat(2,minmax(0,1fr))}.changelog{padding:56px 64px 64px}.timeline{margin-left:140px}.resume{padding:64px 40px 88px}.archive,.contact{padding:48px 40px 72px}.month{grid-template-columns:1fr;gap:12px}.month h2{padding-top:0}.row{grid-template-columns:64px 90px minmax(0,1fr) 72px 130px;gap:16px}}@media (width<=760px){.hero{grid-template-rows:auto auto 300px 110px;grid-template-columns:1fr 1fr}.hero__domain{border-bottom:1px solid var(--line);grid-area:1/1/2/3;padding:16px 20px}.hero__intro{border-right:0;grid-area:2/1/3/3;gap:12px;padding:32px 20px}.hero__intro h1{font-size:44px}.hero__intro p{font-size:16px}.hero__portrait{border-right:0;grid-area:3/1/4/3}.tile{padding:20px}.tile .eyebrow{font-size:12px}.tile .serif{font-size:22px}.tile--a{grid-area:4/1/5/2}.tile--b{grid-area:4/2/5/3}.section-head{padding:40px 20px 0}.section-head h2{font-size:24px}.section-head span{display:none}.work{margin-top:16px;padding:0 20px}.work .boxgrid{grid-template-columns:1fr}.work a{gap:6px;padding:14px 16px}.work .serif{font-size:19px}.work .boxgrid .tag,.work .boxgrid .act{font-size:12px}.board{background-size:20px 20px;grid-template-columns:1fr;gap:24px;margin:16px 20px 0;padding:24px 20px}.pin{gap:6px}.card--link{gap:10px;padding:16px}.card--link .head{justify-content:flex-start;gap:.4em;font-size:11px}.card--link .serif,.card--note{font-size:18px}.card--link .src,.anno{display:none}.card--note{padding:16px}.card--img{gap:8px;padding:10px;font-size:14px}.card--img img{height:150px}.changelog{gap:24px;padding:48px 20px}.changelog h2{font-size:24px}.pulse{display:none}.timeline{margin-left:4px}.load-more{margin-top:-4px;font-size:15px}.entry{padding:0 0 24px 24px}.entry:before{top:5px}.entry__date,.entry__kind{display:none}.entry__meta{letter-spacing:.1em;text-transform:uppercase;color:var(--muted);font-size:12px;display:block}.entry__title{font-size:19px}.entry__body{font-size:14px}.footer{gap:16px;padding:24px 20px}.footer .boxgrid{grid-template-columns:1fr 1fr}.footer .boxgrid a{gap:6px;padding:12px 14px}.footer .boxgrid .tag{font-size:11px}.footer .boxgrid .serif{font-size:17px}.footer .boxgrid .act{display:none}.footer__bar,.modes button{font-size:12px}.footer__long{display:none}.footer__short{display:inline}.nav{grid-template-columns:repeat(3,minmax(0,1fr)) 52px}.nav__name{display:none}.nav__link{text-align:center;padding:16px 12px;font-size:15px}.nav__long{display:none}.nav__short{display:inline}.resume{gap:36px;padding:36px 20px 56px}.resume__intro{gap:14px}.resume__head{flex-direction:column;align-items:stretch;gap:14px}.resume__title{gap:14px}.resume h1{font-size:40px}.resume__headline{font-size:17px}.pdf{text-align:center;border:0;padding:14px 16px}.resume__summary{padding-top:16px;font-size:15px;line-height:1.6}.resume__section{gap:20px}.resume__section--skills{gap:16px}.resume h2{font-size:26px}.job{gap:6px;padding:0 0 32px 22px}.job:before{top:6px}.job__top{flex-direction:column-reverse;gap:6px}.job__dates{letter-spacing:.08em;text-transform:uppercase;font-size:12px}.job__role{font-size:20px}.job__org{font-size:14px}.job__bullets ul{padding-left:16px;font-size:14px;line-height:1.5}.skills{grid-template-columns:1fr}.skills div{gap:4px;padding:14px 16px;font-size:14px}.skills dt{font-size:12px}.archive{gap:32px;padding:32px 20px 48px}.archive__head{gap:8px}.archive__head h1{font-size:40px}.archive__head span{font-size:15px}.month{gap:10px}.month h2{font-size:20px}.row{grid-template-columns:minmax(0,1fr) 56px;grid-template-areas:"meta thumb""title thumb";gap:4px 14px;padding:12px 0}.row__date,.row__tag,.row__src{display:none}.row__meta{grid-area:meta;font-size:12px;display:block}.row__title{grid-area:title;font-size:17px}.row__thumb{grid-area:thumb}.row__thumb img{width:56px;height:40px}.lost{gap:16px;padding:56px 20px 64px}.lost:before{background-size:20px 20px}.lost__text{gap:16px}.lost h1{font-size:40px}.lost p{font-size:16px}.lost__ways{grid-template-columns:1fr;margin-top:16px}.lost__ways a{gap:6px;padding:14px 16px}.lost__ways .serif{font-size:19px}.contact{gap:28px;padding:32px 20px 48px}.contact__head h1{font-size:40px}.contact__head p{font-size:16px}.contact__form{padding:20px 16px 4px}}
