*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}:root{--bg:#fffcf0;--text:#22211d;--text-muted:#6f6e69;--accent:#147d82;--accent-hover:#0f5f63;--border:#e0ddd5;--code-bg:#f0ede4;--tag-bg:#e8e5db;--tag-text:#4a4941;--font-sans:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Arial,sans-serif;--font-mono:"SFMono-Regular",Consolas,"Liberation Mono",Menlo,Courier,monospace}[data-theme=dark]{--bg:#100f0f;--text:#cecdc3;--text-muted:#878580;--accent:#5bc0be;--accent-hover:#7dd3d1;--border:#2a2926;--code-bg:#1c1b1a;--tag-bg:#2a2926;--tag-text:#a09f97}html{font-family:var(--font-sans);font-size:clamp(16px,1vw + 12px,19px);line-height:1.65;color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased}body{max-width:680px;margin:0 auto;padding:2rem 1.25rem}a{color:var(--accent);text-decoration:none}a:hover{color:var(--accent-hover);text-decoration:underline}h1,h2,h3,h4{font-weight:600;line-height:1.3;margin-top:1.8em;margin-bottom:.5em}h1{font-size:1.8rem;margin-top:0}h2{font-size:1.4rem}h3{font-size:1.15rem}p{margin-bottom:1.25em}ul,ol{margin-bottom:1.25em;padding-left:1.5em}li{margin-bottom:.35em}blockquote{border-left:3px solid var(--border);padding-left:1em;color:var(--text-muted);margin-bottom:1.25em;font-style:italic}hr{border:none;border-top:1px solid var(--border);margin:2.5em 0}img{max-width:100%;height:auto;border-radius:4px}table{width:100%;border-collapse:collapse;margin-bottom:1.25em}th,td{padding:.5em .75em;text-align:left;border-bottom:1px solid var(--border)}th{font-weight:600}code{font-family:var(--font-mono);font-size:.875em;background:var(--code-bg);padding:.15em .35em;border-radius:3px}pre{background:var(--code-bg);padding:1em;border-radius:6px;overflow-x:auto;margin-bottom:1.25em;line-height:1.5}pre code{background:0 0;padding:0;font-size:.85em}.site-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:3rem;padding-bottom:1rem;border-bottom:1px solid var(--border)}.site-name{font-size:1.15rem;font-weight:700;color:var(--text);text-decoration:none}.site-name:hover{color:var(--accent);text-decoration:none}.site-nav{display:flex;align-items:center;gap:1.25rem}.site-nav a{color:var(--text-muted);font-size:.9rem}.site-nav a:hover{color:var(--accent)}.theme-toggle{background:0 0;border:1px solid var(--border);border-radius:6px;cursor:pointer;padding:.3em .5em;font-size:1rem;color:var(--text-muted);line-height:1;display:flex;align-items:center}.theme-toggle:hover{border-color:var(--accent);color:var(--accent)}[data-theme=dark] .theme-toggle .icon-sun{display:inline}[data-theme=dark] .theme-toggle .icon-moon{display:none}[data-theme=light] .theme-toggle .icon-sun{display:none}[data-theme=light] .theme-toggle .icon-moon{display:inline}.post-list{list-style:none;padding:0}.post-item{margin-bottom:2rem}.post-item h2{margin-top:0;margin-bottom:.2em;font-size:1.25rem}.post-item h2 a{color:var(--text);text-decoration:none}.post-item h2 a:hover{color:var(--accent)}.post-summary{color:var(--text-muted);font-size:.95rem;margin-bottom:.3em}.post-meta{font-size:.85rem;color:var(--text-muted);display:flex;align-items:center;flex-wrap:wrap;gap:.5em}.post-meta time{white-space:nowrap}.post-meta .sep{color:var(--border)}.tag{display:inline-block;background:var(--tag-bg);color:var(--tag-text);padding:.15em .5em;border-radius:3px;font-size:.8rem;text-decoration:none}.tag:hover{background:var(--accent);color:var(--bg);text-decoration:none}.post-header{margin-bottom:2rem}.post-header h1{margin-bottom:.3em}.post-content{margin-bottom:3rem}.site-footer{margin-top:3rem;padding-top:1rem;border-top:1px solid var(--border);font-size:.85rem;color:var(--text-muted)}.taxonomy-list{list-style:none;padding:0;display:flex;flex-wrap:wrap;gap:.5em}.taxonomy-list li a{display:inline-block}.bg{background-color:#f7f7f7}.chroma{background-color:#f7f7f7;-webkit-text-size-adjust:none}.chroma .err{color:#f6f8fa;background-color:#82071e}.chroma .lnlinks{outline:none;text-decoration:none;color:inherit}.chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}.chroma .lntable{border-spacing:0;padding:0;margin:0;border:0}.chroma .hl{background-color:#dedede}.chroma .lnt{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f}.chroma .ln{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f}.chroma .line{display:flex}.chroma .k{color:#cf222e}.chroma .kc{color:#cf222e}.chroma .kd{color:#cf222e}.chroma .kn{color:#cf222e}.chroma .kp{color:#cf222e}.chroma .kr{color:#cf222e}.chroma .kt{color:#cf222e}.chroma .na{color:#1f2328}.chroma .nc{color:#1f2328}.chroma .no{color:#0550ae}.chroma .nd{color:#0550ae}.chroma .ni{color:#6639ba}.chroma .nl{color:#900;font-weight:700}.chroma .nn{color:#24292e}.chroma .nx{color:#1f2328}.chroma .nt{color:#0550ae}.chroma .nb{color:#6639ba}.chroma .bp{color:#6a737d}.chroma .nv{color:#953800}.chroma .vc{color:#953800}.chroma .vg{color:#953800}.chroma .vi{color:#953800}.chroma .vm{color:#953800}.chroma .nf{color:#6639ba}.chroma .fm{color:#6639ba}.chroma .s{color:#0a3069}.chroma .sa{color:#0a3069}.chroma .sb{color:#0a3069}.chroma .sc{color:#0a3069}.chroma .dl{color:#0a3069}.chroma .sd{color:#0a3069}.chroma .s2{color:#0a3069}.chroma .se{color:#0a3069}.chroma .sh{color:#0a3069}.chroma .si{color:#0a3069}.chroma .sx{color:#0a3069}.chroma .sr{color:#0a3069}.chroma .s1{color:#0a3069}.chroma .ss{color:#032f62}.chroma .m{color:#0550ae}.chroma .mb{color:#0550ae}.chroma .mf{color:#0550ae}.chroma .mh{color:#0550ae}.chroma .mi{color:#0550ae}.chroma .il{color:#0550ae}.chroma .mo{color:#0550ae}.chroma .o{color:#0550ae}.chroma .ow{color:#0550ae}.chroma .p{color:#1f2328}.chroma .c{color:#57606a}.chroma .ch{color:#57606a}.chroma .cm{color:#57606a}.chroma .c1{color:#57606a}.chroma .cs{color:#57606a}.chroma .cp{color:#57606a}.chroma .cpf{color:#57606a}.chroma .gd{color:#82071e;background-color:#ffebe9}.chroma .ge{color:#1f2328}.chroma .gi{color:#116329;background-color:#dafbe1}.chroma .go{color:#1f2328}.chroma .gl{text-decoration:underline}.chroma .w{color:#fff}[data-theme=dark]{.bg { color:#e6edf3;background-color:#0d1117; } .chroma { color:#e6edf3;background-color:#0d1117;-webkit-text-size-adjust:none; } .chroma .err { color:#f85149 } .chroma .lnlinks { outline:none;text-decoration:none;color:inherit } .chroma .lntd { vertical-align:top;padding:0;margin:0;border:0; } .chroma .lntable { border-spacing:0;padding:0;margin:0;border:0; } .chroma .hl { background-color:#6e7681 } .chroma .lnt { white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679 } .chroma .ln { white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#6e7681 } .chroma .line { display:flex; } .chroma .k { color:#ff7b72 } .chroma .kc { color:#79c0ff } .chroma .kd { color:#ff7b72 } .chroma .kn { color:#ff7b72 } .chroma .kp { color:#79c0ff } .chroma .kr { color:#ff7b72 } .chroma .kt { color:#ff7b72 } .chroma .nc { color:#f0883e;font-weight:bold } .chroma .no { color:#79c0ff;font-weight:bold } .chroma .nd { color:#d2a8ff;font-weight:bold } .chroma .ni { color:#ffa657 } .chroma .ne { color:#f0883e;font-weight:bold } .chroma .nl { color:#79c0ff;font-weight:bold } .chroma .nn { color:#ff7b72 } .chroma .nx { color:#e6edf3 } .chroma .na { color:#79c0ff } .chroma .nb { color:#d2a8ff } .chroma .bp { color:#8b949e } .chroma .py { color:#79c0ff } .chroma .p { color:#e6edf3 } .chroma .nt { color:#7ee787 } .chroma .nv { color:#79c0ff } .chroma .vc { color:#79c0ff } .chroma .vg { color:#79c0ff } .chroma .vi { color:#79c0ff } .chroma .vm { color:#79c0ff } .chroma .nf { color:#d2a8ff;font-weight:bold } .chroma .fm { color:#d2a8ff;font-weight:bold } .chroma .l { color:#a5d6ff } .chroma .ld { color:#79c0ff } .chroma .s { color:#a5d6ff } .chroma .sa { color:#79c0ff } .chroma .sb { color:#a5d6ff } .chroma .sc { color:#a5d6ff } .chroma .dl { color:#79c0ff } .chroma .sd { color:#a5d6ff } .chroma .s2 { color:#a5d6ff } .chroma .se { color:#79c0ff } .chroma .sh { color:#79c0ff } .chroma .si { color:#a5d6ff } .chroma .sx { color:#a5d6ff } .chroma .sr { color:#79c0ff } .chroma .s1 { color:#a5d6ff } .chroma .ss { color:#a5d6ff } .chroma .m { color:#a5d6ff } .chroma .mb { color:#a5d6ff } .chroma .mf { color:#a5d6ff } .chroma .mh { color:#a5d6ff } .chroma .mi { color:#a5d6ff } .chroma .il { color:#a5d6ff } .chroma .mo { color:#a5d6ff } .chroma .o { color:#ff7b72;font-weight:bold } .chroma .ow { color:#ff7b72;font-weight:bold } .chroma .c { color:#8b949e;font-style:italic } .chroma .ch { color:#8b949e;font-style:italic } .chroma .cm { color:#8b949e;font-style:italic } .chroma .c1 { color:#8b949e;font-style:italic } .chroma .cs { color:#8b949e;font-weight:bold;font-style:italic } .chroma .cp { color:#8b949e;font-weight:bold;font-style:italic } .chroma .cpf { color:#8b949e;font-weight:bold;font-style:italic } .chroma .gd { color:#ffa198;background-color:#490202 } .chroma .ge { font-style:italic } .chroma .gr { color:#ffa198 } .chroma .gh { color:#79c0ff;font-weight:bold } .chroma .gi { color:#56d364;background-color:#0f5323 } .chroma .go { color:#8b949e } .chroma .gp { color:#8b949e } .chroma .gs { font-weight:bold } .chroma .gu { color:#79c0ff } .chroma .gt { color:#ff7b72 } .chroma .gl { text-decoration:underline } .chroma .w { color:#6e7681 }}