*{box-sizing:border-box}body{color:#000;-webkit-font-smoothing:antialiased;background:#fff;margin:0;padding:0;font-family:system-ui,-apple-system,Segoe UI,Helvetica,Arial,sans-serif;font-size:13px;line-height:1.65}#shell{min-height:100vh;display:flex}#nav{flex-direction:column;flex-shrink:0;gap:20px;width:200px;height:100vh;padding:32px 24px;display:flex;position:sticky;top:0}.nav-brand a{color:#000;font-weight:500;text-decoration:none}.nav-brand a:hover{text-decoration:underline}.nav-links{flex-direction:column;gap:4px;display:flex}.nav-links a{color:#000;font-weight:400;text-decoration:none}.nav-links a:hover{text-decoration:underline}.nav-links a.active{font-weight:600}#content{flex:1;max-width:520px;padding:32px 0 80px}#content p{color:#282828;margin:0 0 14px}#content a{color:#000;text-decoration:underline}#content a:hover{opacity:.6}.dim,.dim a{color:#8c8c8c}.accordion{margin-top:20px}.accordion-section{border-top:1px solid #00000014}.accordion-section:last-child{border-bottom:1px solid #00000014}.accordion-header{cursor:pointer;text-align:left;-webkit-tap-highlight-color:transparent;background:0 0;border:none;justify-content:space-between;align-items:center;gap:12px;width:100%;padding:11px 0;display:flex}.accordion-label{letter-spacing:.07em;text-transform:uppercase;color:#969696;font-size:11px;font-weight:600;transition:color .12s}.accordion-header:hover .accordion-label,.accordion-header.open .accordion-label{color:#000}.accordion-meta{flex-shrink:0;align-items:center;gap:8px;display:flex}.accordion-count{color:#b4b4b4;font-variant-numeric:tabular-nums;font-size:11px}.accordion-chevron{color:#b4b4b4;font-size:16px;line-height:1;transition:transform .2s,color .12s;display:inline-block}.accordion-header.open .accordion-chevron{color:#787878;transform:rotate(90deg)}.accordion-body{grid-template-rows:0fr;transition:grid-template-rows .22s;display:grid}.accordion-body.open{grid-template-rows:1fr}.accordion-body-inner{padding-bottom:0;transition:padding-bottom .22s;overflow:hidden}.accordion-body.open .accordion-body-inner{padding-bottom:10px}.section-note{color:#969696;margin:6px 0 10px;font-size:12px}.project{border-radius:3px;margin:0 -6px;padding:6px;transition:background .13s}@media (hover:hover){.project:hover{background:#00000009}}.project-name{margin-bottom:2px;font-weight:500;display:block}.project-name a{color:inherit;text-decoration:none}.project-name a:hover{text-decoration:underline}.link-arrow{vertical-align:super;margin-left:3px;font-size:10px;line-height:0}@media (hover:hover){.link-arrow{opacity:0;transition:opacity .13s}.project:hover .link-arrow{opacity:.45}}@media (hover:none){.link-arrow{opacity:.25}}.project-desc{color:#3c3c3c;margin:0;line-height:1.55}.project-tag{color:#a0a0a0;margin-top:3px;font-size:11px;display:inline-block}.project-links{flex-wrap:wrap;gap:10px;margin-top:5px;display:flex}.blog-list{margin-top:24px}.blog-entry{border-top:1px solid #00000014;padding:14px 0 16px}.blog-entry:last-child{border-bottom:1px solid #00000014}.blog-entry p{white-space:pre-wrap}.blog-entry-meta{color:#8c8c8c;letter-spacing:.04em;text-transform:uppercase;align-items:center;gap:10px;margin-bottom:6px;font-size:11px;display:flex}.blog-kind{border:1px solid #00000014;border-radius:999px;align-items:center;padding:2px 6px;display:inline-flex}.blog-kind-post{color:#464646}.blog-kind-log{color:#0746a5;border-color:#0746a529}.blog-kind-thought{color:#1d6e39;border-color:#1d6e3929}.blog-kind-voice{color:#783cb4;border-color:#783cb429}.blog-audio{accent-color:#282828;border-radius:4px;width:100%;height:36px;margin-top:2px;display:block}@media (prefers-color-scheme:dark){.blog-audio{accent-color:#c8c8c8}}.tweet-card{color:inherit;border:1px solid #00000014;border-left:2px solid #00000026;border-radius:4px;flex-direction:column;gap:6px;margin-top:10px;padding:10px 12px;text-decoration:none;transition:border-color .15s,background .15s;display:flex}.tweet-card:hover{background:#00000005;border-color:#0003 #0003 #0003 #00000059}.tweet-author{color:#3c3c3c;align-items:baseline;gap:6px;font-size:11px;font-weight:500;display:flex}.tweet-handle{color:#8c8c8c;font-weight:400}.tweet-text{color:#1e1e1e;font-size:13px;line-height:1.5}@media (prefers-color-scheme:dark){.tweet-card{border-color:#ffffff14 #ffffff14 #ffffff14 #fff3}.tweet-card:hover{background:#ffffff08;border-color:#ffffff26 #ffffff26 #ffffff26 #ffffff59}.tweet-author{color:#c8c8c8}.tweet-handle{color:#787878}.tweet-text{color:#dcdcdc}}.blog-empty{border-top:1px solid #00000014;border-bottom:1px solid #00000014;margin-top:24px;padding:16px 0}.blog-empty code,#content code{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:12px}.project-link{color:#8c8c8c;font-size:11px;text-decoration:none}.project-link:hover{color:#000;text-decoration:underline}@media (prefers-color-scheme:dark){.project-link{color:#787878}.project-link:hover{color:#fff}}.log-entry{border-top:1px solid #00000014;margin-top:32px;padding-top:32px}.log-entry:first-of-type{border-top:none;margin-top:20px;padding-top:0}.log-meta{margin-bottom:10px}.log-date{color:#a0a0a0;font-variant-numeric:tabular-nums;letter-spacing:.04em;font-size:11px}.log-title{font-weight:500;margin-bottom:16px!important}.contact-row{gap:16px;margin-top:28px;display:flex}.contact-row a{color:#8c8c8c;font-size:12px;text-decoration:none}.contact-row a:hover{color:#000}.rule{border:none;border-top:1px solid #0000001f;margin:28px 0}@media (max-width:800px){#shell{flex-direction:column}#nav{z-index:10;background:#fff;border-bottom:1px solid #00000012;flex-direction:row;justify-content:space-between;align-items:center;gap:0;width:100%;height:auto;padding:14px 20px;position:sticky;top:0}.nav-links{flex-direction:row;gap:20px}#content{max-width:none;padding:24px 20px 64px}}@media (max-width:800px) and (prefers-color-scheme:dark){#nav{background:#000;border-bottom-color:#ffffff12}}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.nav-brand a,.nav-links a{color:#fff}#content p,.project-desc{color:#bebebe}#content a,.project-name{color:#fff}.rule{border-color:#ffffff1f}.accordion-section{border-color:#ffffff14}.accordion-header:hover .accordion-label,.accordion-header.open .accordion-label{color:#fff}@media (hover:hover){.project:hover{background:#ffffff0a}}}
