:root{--paper: #f6f7f4;--surface: #ffffff;--ink: #1f2622;--muted: #5f6b63;--tech: #14707e;--life: #c07a2e;--line: #e1e4dc}@media(prefers-color-scheme:dark){:root{--paper: #171a18;--surface: #1f2320;--ink: #e8ebe5;--muted: #97a29a;--tech: #4fb3c0;--life: #e0a45e;--line: #2a2e2a}}*{box-sizing:border-box}body{margin:0;background:var(--paper);color:var(--ink);font-family:"Source Serif 4",Georgia,Times New Roman,serif;font-size:1.05rem;line-height:1.7}.wrap{max-width:44rem;margin:0 auto;padding:0 1.25rem}h1,h2,h3,.display{font-family:Bricolage Grotesque,Avenir Next,Helvetica Neue,sans-serif;line-height:1.15;text-wrap:balance}h1{font-size:clamp(2rem,6vw,2.9rem);font-weight:700;margin:0 0 .6rem}h2{font-size:1.45rem;font-weight:600;margin:2.2rem 0 .7rem}h3{font-size:1.15rem;font-weight:600;margin:1.8rem 0 .5rem}p{margin:0 0 1.05rem}a{color:inherit;text-decoration-color:var(--muted);text-underline-offset:3px}a:hover{text-decoration-color:currentColor}a:focus-visible{outline:2px solid var(--tech);outline-offset:2px;border-radius:2px}.mono{font-family:IBM Plex Mono,ui-monospace,SF Mono,monospace;font-size:.78rem;letter-spacing:.02em}header.site{border-bottom:1px solid var(--line);margin-bottom:2.5rem}header.site .wrap{display:flex;align-items:baseline;justify-content:space-between;gap:1rem;padding-top:1.1rem;padding-bottom:1.1rem;flex-wrap:wrap}.brand{font-family:Bricolage Grotesque,sans-serif;font-weight:700;font-size:1.05rem;text-decoration:none}.brand .dot-tech{color:var(--tech)}.brand .dot-life{color:var(--life)}nav.site-nav{display:flex;gap:1.1rem;flex-wrap:wrap}nav.site-nav a{font-family:Bricolage Grotesque,sans-serif;font-size:.9rem;font-weight:500;text-decoration:none;color:var(--muted)}nav.site-nav a[aria-current=page],nav.site-nav a:hover{color:var(--ink)}.byte-badge{font-family:IBM Plex Mono,ui-monospace,monospace;font-size:.72rem;letter-spacing:.14em;padding:.15rem .45rem;border:1px solid var(--line);border-radius:4px;color:var(--muted);white-space:nowrap}.byte-badge b{font-weight:500}.stream-tech .byte-badge b,.byte-badge.tech b{color:var(--tech)}.stream-life .byte-badge b,.byte-badge.life b{color:var(--life)}ul.bytes{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:1.35rem}ul.bytes li{display:flex;flex-direction:column;gap:.15rem}ul.bytes .meta{display:flex;align-items:center;gap:.7rem;color:var(--muted)}ul.bytes .title{font-family:Bricolage Grotesque,sans-serif;font-weight:600;font-size:1.12rem;text-decoration:none}ul.bytes .title:hover{text-decoration:underline}ul.bytes .desc{color:var(--muted);font-size:.95rem;margin:0}.stream-head{display:flex;align-items:baseline;gap:.7rem}.stream-head .tick{width:.85rem;height:.85rem;border-radius:3px;align-self:center}.stream-tech .tick{background:var(--tech)}.stream-life .tick{background:var(--life)}article.byte .meta{display:flex;align-items:center;gap:.8rem;color:var(--muted);margin-bottom:2rem;flex-wrap:wrap}article.byte{padding-bottom:3rem}article.byte blockquote{margin:1.2rem 0;padding:.2rem 0 .2rem 1.1rem;border-left:3px solid var(--line);color:var(--muted)}article.byte pre{background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:1rem 1.2rem;overflow-x:auto;font-size:.85rem;line-height:1.6}article.byte code{font-family:IBM Plex Mono,ui-monospace,monospace;font-size:.88em}article.byte :not(pre)>code{background:var(--surface);border:1px solid var(--line);border-radius:4px;padding:.05em .3em}article.byte img{max-width:100%;border-radius:8px}article.byte table{border-collapse:collapse;display:block;overflow-x:auto}article.byte th,article.byte td{border:1px solid var(--line);padding:.4rem .7rem;text-align:left}.intro{margin-bottom:3rem}.intro .lede{font-size:1.15rem;color:var(--muted)}.streams{display:grid;grid-template-columns:1fr 1fr;gap:2.5rem}@media(max-width:40rem){.streams{grid-template-columns:1fr}}.resume section{margin-bottom:2rem}.resume .role{display:flex;justify-content:space-between;gap:1rem;flex-wrap:wrap;align-items:baseline}.resume .role h3{margin:0}.resume .role .when{color:var(--muted)}.resume .org{color:var(--muted);margin:.1rem 0 .5rem}.resume ul{margin:0 0 1rem;padding-left:1.2rem}.resume li{margin-bottom:.35rem}.skills{display:flex;flex-wrap:wrap;gap:.45rem;padding:0;list-style:none}.skills li{font-family:IBM Plex Mono,ui-monospace,monospace;font-size:.78rem;border:1px solid var(--line);border-radius:4px;padding:.15rem .5rem;color:var(--muted)}.projects .group{margin-bottom:3.2rem;padding-top:1.7rem;border-top:1px solid var(--line)}.projects .group h2{font-size:clamp(1.6rem,4.5vw,1.95rem);font-weight:700;letter-spacing:-.015em;margin:0 0 .4rem}.projects .group-note{color:var(--muted);font-size:.95rem;margin-bottom:1.6rem}ul.project-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:1.7rem}ul.project-list .head{display:flex;align-items:baseline;gap:.7rem;flex-wrap:wrap}ul.project-list h3{margin:0;font-size:1.12rem}ul.project-list h3 a{text-decoration:none}ul.project-list h3 a:hover{text-decoration:underline}ul.project-list p{margin:.3rem 0 0;color:var(--muted);font-size:.97rem}.chip{border:1px solid var(--line);border-radius:4px;padding:.12rem .45rem;color:var(--muted);white-space:nowrap}ul.project-list .live{text-decoration:none;color:var(--tech);border-bottom:1px solid var(--line)}ul.project-list .live:hover{border-bottom-color:currentColor}ul.compact-list{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:max-content 1fr;gap:.7rem .9rem;align-items:baseline}ul.compact-list li{display:contents}@media(max-width:40rem){ul.compact-list{grid-template-columns:1fr;gap:.2rem}ul.compact-list li{display:block;margin-bottom:.7rem}}ul.compact-list .repo{justify-self:start;font-size:.85rem;text-decoration:none;border-bottom:1px solid var(--line)}ul.compact-list .repo:hover{border-bottom-color:currentColor}ul.compact-list .note{color:var(--muted);font-size:.93rem}footer.site{border-top:1px solid var(--line);margin-top:3.5rem}footer.site .wrap{padding-top:1.2rem;padding-bottom:2.2rem;color:var(--muted);font-size:.85rem;display:flex;justify-content:space-between;gap:1rem;flex-wrap:wrap}@media print{header.site,footer.site{display:none}body{background:#fff;color:#000}}
