@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/2c55a0e60120577a-s.03ez25a9g3i0n.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/9c72aa0f40e4eef8-s.3i9rha7jpxn0q.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/ad66f9afd8947f86-s.2o7ko1d-5m1xu.woff2)format("woff2");unicode-range:U+1F??}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/5476f68d60460930-s.1ee5w62fj497l.woff2)format("woff2");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/2bbe8d2671613f1f-s.1way2z9fj6cig.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/1bffadaabf893a1e-s.0szrwpqb9mkwe.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/83afe278b6a6bb3c-s.p.45535valc9rzk.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter Fallback;src:local(Arial);ascent-override:90.44%;descent-override:22.52%;line-gap-override:0.0%;size-adjust:107.12%}.inter_6df599c7-module__VpuGNq__className{font-family:Inter,Inter Fallback;font-style:normal}.inter_6df599c7-module__VpuGNq__variable{--font-sans:"Inter", "Inter Fallback"}
@font-face{font-family:"Source Serif 4";font-style:italic;font-weight:200 900;font-display:swap;src:url(../media/62492e45f348cf87-s.3gua8xictboza.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:"Source Serif 4";font-style:italic;font-weight:200 900;font-display:swap;src:url(../media/8f9704ed0c18c9e0-s.2utp9m0-kbg7n.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:"Source Serif 4";font-style:italic;font-weight:200 900;font-display:swap;src:url(../media/c73d4b34880585a8-s.3-_lg5umlo0tj.woff2)format("woff2");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:"Source Serif 4";font-style:italic;font-weight:200 900;font-display:swap;src:url(../media/f00b8cc54454926d-s.190-b0rnunf57.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:"Source Serif 4";font-style:italic;font-weight:200 900;font-display:swap;src:url(../media/741805f5bd1ef272-s.41q8r466ocsbj.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:"Source Serif 4";font-style:italic;font-weight:200 900;font-display:swap;src:url(../media/ea3421846039b7f3-s.p.3d58dkudqlgaq.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:"Source Serif 4";font-style:normal;font-weight:200 900;font-display:swap;src:url(../media/20aee433927f7d4b-s.2u46yrlpkdxrh.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:"Source Serif 4";font-style:normal;font-weight:200 900;font-display:swap;src:url(../media/256e1f7f180674ba-s.444m1fhac1z6e.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:"Source Serif 4";font-style:normal;font-weight:200 900;font-display:swap;src:url(../media/be3bf58b83159894-s.1298pfel08g2l.woff2)format("woff2");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:"Source Serif 4";font-style:normal;font-weight:200 900;font-display:swap;src:url(../media/753b6407f468151f-s.1wcle8r8k1a_g.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:"Source Serif 4";font-style:normal;font-weight:200 900;font-display:swap;src:url(../media/292081311a6a8abc-s.3irbj1um1c5rd.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:"Source Serif 4";font-style:normal;font-weight:200 900;font-display:swap;src:url(../media/68d403cf9f2c68c5-s.p.42000xkkqj0am.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:"Source Serif 4 Fallback";src:local(Times New Roman);ascent-override:87.87%;descent-override:28.41%;line-gap-override:0.0%;size-adjust:117.91%}.source_serif_4_581814e6-module__zzEoeq__className{font-family:"Source Serif 4","Source Serif 4 Fallback"}.source_serif_4_581814e6-module__zzEoeq__variable{--font-serif:"Source Serif 4", "Source Serif 4 Fallback"}
:root{--bg:#faf8f5;--text:#222;--secondary:#5f5b56;--accent:#1d4ed8;--line:#e6e1da;--surface:#f3f0eb;--serif:var(--font-serif), Georgia, "Times New Roman", serif;--sans:var(--font-sans), Arial, Helvetica, sans-serif;--mono:ui-monospace, "SF Mono", Menlo, Consolas, monospace;--measure:680px}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{background:var(--bg);color:var(--text);font-family:var(--sans);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizelegibility;margin:0;font-size:16px;line-height:1.5}a{color:var(--accent);text-underline-offset:.18em;text-decoration:underline;text-decoration-thickness:1px;-webkit-text-decoration-color:color-mix(in srgb, var(--accent) 40%, transparent);text-decoration-color:color-mix(in srgb, var(--accent) 40%, transparent);transition:text-decoration-color .15s}a:hover{-webkit-text-decoration-color:var(--accent);text-decoration-color:var(--accent)}::selection{background:color-mix(in srgb, var(--accent) 16%, transparent)}.layout{align-items:flex-start;gap:80px;max-width:1120px;margin:0 auto;padding:72px 40px 128px;display:flex}.sidebar{flex:0 0 220px;max-height:calc(100vh - 96px);position:sticky;top:72px;overflow-y:auto}.content{min-width:0;max-width:var(--measure);flex:auto}.sidebar-name{letter-spacing:-.01em;margin:0 0 28px;font-size:17px;font-weight:600}.sidebar-name a{color:var(--text);text-decoration:none}.nav-list{margin:0;padding:0;list-style:none}.nav-list a{color:var(--secondary);padding:7px 0;font-size:15px;line-height:1.4;text-decoration:none;transition:color .15s;display:block}.nav-list a:hover{color:var(--text)}.nav-list li.active a{color:var(--text);font-weight:600}.content h1+.meta{margin-top:-24px}.content h1{font-family:var(--sans);letter-spacing:-.025em;margin:0 0 44px;font-size:clamp(36px,2.4rem + 1.6vw,56px);font-weight:650;line-height:1.1}.content h2,.content h3,.content h4{font-family:var(--sans);color:var(--text);font-weight:600}.content h2{letter-spacing:-.015em;margin:2.4em 0 .8em;font-size:28px;line-height:1.2}.content h3{letter-spacing:-.01em;margin:2em 0 .6em;font-size:21px;line-height:1.3}.content h4{margin:1.8em 0 .5em;font-size:18px;line-height:1.35}.content .meta,.content .post-date,.content .project-meta,.content .back-link,.content .nav-section-label,.content figcaption{font-family:var(--sans);color:var(--secondary);font-size:14px;line-height:1.5}.content .meta{margin:0 0 48px;font-size:15px}.content .back-link{margin-bottom:36px;text-decoration:none;display:inline-block}.content .back-link:hover{color:var(--accent)}.content .nav-section-label{border-top:1px solid var(--line);letter-spacing:.06em;text-transform:uppercase;margin:72px 0 24px;padding-top:24px;font-weight:500}.content p,.content li,.content blockquote{font-family:var(--serif);font-size:20px;line-height:1.7}.content p{margin:0 0 1.35em}.content strong{font-weight:600}.content ul:not([class]),.content ol:not([class]),.content .todo-list{margin:0 0 1.35em;padding-left:1.3em}.content ul:not([class])>li,.content ol>li,.content .todo-list>li{margin-bottom:.45em;padding-left:.2em}.content li>ul:not([class]),.content li>ol:not([class]){margin:.45em 0 0}.content li::marker{color:var(--secondary)}.content .todo-list{padding-left:0;list-style:none}.content .todo input{vertical-align:1px;accent-color:var(--accent);margin:0 8px 0 0}.content blockquote{border-left:2px solid var(--line);color:var(--secondary);margin:1.8em 0;padding-left:1.2em;font-style:italic}.content blockquote p{margin-bottom:.8em}.content blockquote p:last-child,.callout p:last-child{margin-bottom:0}.callout{background:var(--surface);border-radius:6px;gap:14px;margin:1.8em 0;padding:20px 24px;display:flex}.callout-icon{font-size:20px;line-height:1.7}.content code{font-family:var(--mono);background:var(--surface);border-radius:4px;padding:.1em .35em;font-size:.8em}.content pre{background:var(--surface);border-radius:6px;margin:1.8em 0;padding:20px 24px;font-size:15px;line-height:1.6;overflow-x:auto}.content pre code{font-size:inherit;background:0 0;padding:0}.content hr{border:0;border-top:1px solid var(--line);margin:3.2em 0}.content figure{margin:2.4em 0}.content img{border-radius:4px;max-width:100%;height:auto;display:block}.content figcaption{margin-top:12px}.content details{margin:0 0 1.35em}.content summary{cursor:pointer;font-family:var(--serif);font-size:20px;line-height:1.7}.content details[open]>summary{margin-bottom:.8em}.content summary>h2,.content summary>h3,.content summary>h4{display:inline}.content .indent{padding-left:1.3em}.table-wrap{margin:1.8em 0;overflow-x:auto}.content table{border-collapse:collapse;font-family:var(--sans);font-size:15px;line-height:1.5}.content th,.content td{border-bottom:1px solid var(--line);text-align:left;vertical-align:top;padding:10px 14px}.content th{font-weight:600}.columns{gap:32px;display:flex}.column{flex:1 1 0;min-width:0}.post-list{margin:0;padding:0;list-style:none}.content .post-list>li{margin:0 0 44px}.content .post-title{font-family:var(--sans);letter-spacing:-.01em;margin:0 0 6px;font-size:21px;font-weight:600;line-height:1.3}.post-title a{color:var(--text);text-decoration:none}.post-title a:hover{color:var(--accent)}.content .post-date{margin:0 0 10px}.content .post-summary{color:var(--secondary);margin:0;font-size:18px}.project-list{margin:0;padding:0;list-style:none}.project-item{border-bottom:1px solid var(--line);padding:36px 0}.project-item:first-child{padding-top:8px}.content .project-title{font-family:var(--sans);letter-spacing:-.01em;margin:0 0 4px;font-size:21px;font-weight:600;line-height:1.3}.project-title a{color:var(--text);text-decoration:none}.project-title a:hover{color:var(--accent)}.content .project-meta{margin:0 0 12px}.content .project-summary{margin:0 0 16px;font-size:18px}.tag-list{flex-wrap:wrap;gap:8px;margin:0;padding:0;list-style:none;display:flex}.content .tag-list li{font-family:var(--sans);color:var(--secondary);background:var(--surface);border-radius:999px;margin:0;padding:3px 10px;font-size:14px;line-height:1.5}@media (max-width:860px){.layout{flex-direction:column;gap:48px;padding:40px 22px 96px}.sidebar{border-bottom:1px solid var(--line);flex-basis:auto;width:100%;max-height:none;padding-bottom:28px;position:static;overflow:visible}.sidebar-name{margin-bottom:16px}.nav-list{flex-wrap:wrap;gap:2px 20px;display:flex}.nav-list a{padding:4px 0}.content p,.content li,.content blockquote,.content summary{font-size:18px}.content .post-summary,.content .project-summary{font-size:17px}.content h2{font-size:26px}.columns{flex-direction:column;gap:0}}
