article{max-width:720px;margin:0 auto;padding:0 clamp(24px,6vw,80px)}.hero-media{max-width:1000px;margin:clamp(20px,4vh,40px) auto 0;padding:0 clamp(24px,6vw,80px)}.hero-media img{width:100%;height:auto;display:block}.hero-caption a{text-underline-offset:3px;text-decoration:underline}.hero-caption{color:var(--muted);margin-top:10px;font-size:13px;line-height:1.5}.video-frame{aspect-ratio:16/9}.video-frame iframe{border:0;width:100%;height:100%;display:block}.hero-placeholder{aspect-ratio:16/8;background:var(--ph);color:var(--ph-text);letter-spacing:.1em;text-transform:uppercase;justify-content:center;align-items:center;font-size:12px;display:flex}.post-head{text-align:center;margin-top:clamp(28px,5vh,48px)}.post-head .kicker{letter-spacing:.16em;text-transform:uppercase;color:var(--muted);font-size:11px;font-weight:700}article h1{letter-spacing:-.02em;margin-top:14px;font-size:clamp(28px,4.2vw,42px);font-weight:800;line-height:1.15}.dek{color:var(--muted);max-width:560px;margin-top:16px;margin-left:auto;margin-right:auto;font-size:17px;line-height:1.7}.byline{letter-spacing:.1em;text-transform:uppercase;color:var(--muted);margin-top:20px;font-size:12px}.body{margin-top:clamp(36px,6vh,56px)}.body h2{letter-spacing:-.01em;margin:36px 0 12px;font-size:20px;font-weight:800}.body p,.body li{color:#2e2e2e;font-size:16px;line-height:1.8}.body p+p{margin-top:16px}.body p+ul,.body p+ol{margin-top:12px}.body ul,.body ol{margin:0 0 0 20px}.body ul+p,.body ol+p{margin-top:16px}.body li{margin-bottom:8px}.body em{color:var(--muted)}.body img{cursor:zoom-in;max-width:100%;height:auto;margin:28px 0;display:block}.body blockquote{border-left:3px solid var(--text);margin:28px 0;padding-left:20px}.body blockquote p{font-size:17px;font-style:italic}.body blockquote cite{color:var(--muted);margin-top:12px;font-size:14px;font-style:normal;display:block}.body iframe{border:0;max-width:100%;margin:28px 0}.screens{grid-template-columns:1fr 1fr;gap:20px;margin:28px 0;display:grid}@media (width<=560px){.screens{grid-template-columns:1fr}}.screens>div{aspect-ratio:16/10;background:var(--ph);color:var(--ph-text);letter-spacing:.08em;text-transform:uppercase;text-align:center;justify-content:center;align-items:center;padding:12px;font-size:11px;display:flex}.body iframe{border-radius:12px}.body a{text-underline-offset:3px;text-decoration:underline}.body a.pdf-button{background:var(--text);color:#fff;letter-spacing:.12em;text-transform:uppercase;border-radius:2px;margin:28px 0 8px;padding:14px 26px;font-size:12px;font-weight:700;text-decoration:none;display:inline-block}.body a.pdf-button:hover{opacity:.85}.body .pdf-meta{color:var(--muted);font-size:13px;display:block}.origin-note{margin-top:36px}.origin-note p{border-left:3px solid var(--text);color:#2e2e2e;background:#f5f5f5;padding:12px 16px;font-size:14px;line-height:1.6}.origin-note a{text-underline-offset:3px;text-decoration:underline}.skills{border-top:1px solid var(--line);margin-top:44px;padding-top:26px}.skills h2{letter-spacing:.14em;text-transform:uppercase;color:var(--muted);margin-bottom:14px;font-size:12px;font-weight:700}.back{letter-spacing:.1em;text-transform:uppercase;margin-top:44px;font-size:12px;font-weight:500;display:inline-block}html:has(.long-post){scroll-behavior:smooth}.body .long-post h2{letter-spacing:-.015em;margin:64px 0 12px;scroll-margin-top:24px;font-size:24px;font-weight:800;line-height:1.25}.body .long-post>h2:first-child{margin-top:0}.body .long-post h3{letter-spacing:-.005em;margin:32px 0 10px;scroll-margin-top:24px;font-size:17px;font-weight:800;line-height:1.35}.body .long-post p+ul{margin-top:16px}.body .long-post li{margin-bottom:14px}.body .long-post li>p+p{margin-top:12px}.body .long-post strong{color:var(--text);font-weight:700}.body .long-post .note{margin-top:28px}.body .long-post .note p{border-left:3px solid var(--text);color:#2e2e2e;background:#f5f5f5;padding:14px 18px;font-size:15px;line-height:1.65}.body .long-post .note p strong{letter-spacing:.14em;text-transform:uppercase;margin-bottom:4px;font-size:11px;display:block}.long-post .jump{flex-wrap:wrap;align-items:baseline;gap:8px 18px;margin-top:20px;display:flex}.long-post .jump-label{letter-spacing:.14em;text-transform:uppercase;color:var(--muted);font-size:11px;font-weight:700}.body .long-post .jump a{font-size:13.5px;font-weight:500}.body .long-post .extract-section>h2:first-child{margin-top:64px}.body .long-post .extract-section h3{border-top:1px solid var(--line);margin-top:44px;padding-top:30px}.body .long-post .extract-section h3:first-of-type{border-top:none;margin-top:28px;padding-top:0}.body .long-post p.extract-label{letter-spacing:.14em;text-transform:uppercase;color:var(--muted);margin:0 0 4px;font-size:11px;font-weight:700;line-height:1.5}.long-post .table-wrap{margin-top:64px}.long-post table.summary{border-collapse:collapse;width:100%;margin-top:4px}.long-post table.summary caption{text-align:left;padding-bottom:14px}.long-post .t-label{letter-spacing:.14em;text-transform:uppercase;color:var(--muted);font-size:11px;font-weight:700;display:block}.long-post .t-title{letter-spacing:-.015em;margin-top:2px;font-size:22px;font-weight:800;display:block}.long-post table.summary tr{border-top:1px solid var(--line)}.long-post table.summary tr:first-child{border-top:2px solid var(--text)}.long-post table.summary tr:last-child{border-bottom:2px solid var(--text)}.long-post table.summary th[scope=row]{text-align:left;vertical-align:top;width:34%;padding:20px 24px 20px 0;font-size:14.5px;font-weight:700;line-height:1.5}.long-post table.summary td{vertical-align:top;padding:14px 0 6px}.long-post table.summary td ul{margin:0;list-style:none}.body .long-post table.summary li{border-top:1px solid var(--line);margin:0;padding:7px 0 9px;font-size:15px;line-height:1.55}.body .long-post table.summary li:first-child{border-top:none;padding-top:6px}@media (width<=640px){.long-post table.summary,.long-post table.summary tbody,.long-post table.summary tr,.long-post table.summary th,.long-post table.summary td{width:100%;display:block}.long-post table.summary th[scope=row]{width:100%;padding:18px 0 2px}.long-post table.summary td{padding:4px 0 14px}}.body .code-block{border:1px solid var(--line);border-left:3px solid var(--text);background:#f5f5f5;margin:20px 0 28px}.body .code-bar{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:12px;padding:8px 10px 8px 18px;display:flex}.body .code-label{letter-spacing:.14em;text-transform:uppercase;color:var(--muted);font-size:11px;font-weight:700}.body .copy-btn{font-family:var(--sans);letter-spacing:.12em;text-transform:uppercase;background:var(--text);color:#fff;border:1px solid var(--text);cursor:pointer;border-radius:2px;min-width:84px;padding:8px 16px;font-size:11px;font-weight:700}.body .copy-btn:hover{opacity:.85}.body .copy-btn:focus-visible{outline:2px solid var(--text);outline-offset:2px}.body .copy-btn.copied{color:var(--text);background:#fff}.body .code-block pre{overflow-wrap:anywhere;font-family:var(--sans);margin:0;padding:18px 20px 20px;font-size:14.5px;line-height:1.7;white-space:pre-wrap!important;color:#1a1a1a!important;background:0 0!important;overflow:visible!important}.body .code-block pre code,.body .code-block pre span{font:inherit;background:0 0;padding:0;color:inherit!important}.body .long-post img{border:1px solid var(--line)}.body .long-post img[src*=website-folder-on-github]{max-width:320px}
