:root{color-scheme:light dark;--bg:#faf9f7;--text:#1c1c1a;--text-sub:#6b6a66;--line:#e5e3de;--code-bg:#f3f1ed;--bg:light-dark(#faf9f7, #141412);--text:light-dark(#1c1c1a, #f2f0eb);--text-sub:light-dark(#6b6a66, #97948d);--line:light-dark(#e5e3de, #302f2b);--code-bg:light-dark(#f3f1ed, #1c1b19)}:root[data-theme=light]{color-scheme:light}:root[data-theme=dark]{color-scheme:dark}*{box-sizing:border-box}html{scrollbar-gutter:stable}body{margin:0;background:var(--bg);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,segoe ui,apple sd gothic neo,malgun gothic,sans-serif;line-height:1.7;-webkit-font-smoothing:antialiased}.wrap{max-width:640px;margin:0 auto;padding:0 20px}.site-head{display:flex;align-items:center;justify-content:space-between;gap:16px;padding-top:40px;padding-bottom:32px}.site-name{font-size:17px;font-weight:700;letter-spacing:.16em;color:var(--text);text-decoration:none;border:0}.site-nav{display:flex;flex:none;align-items:center;gap:14px}.site-nav>a{font-size:14px;color:var(--text-sub);text-decoration:none;border:0}.site-nav>a:hover{color:var(--text)}.theme-toggle{display:flex;flex:none;align-items:center;justify-content:center;width:32px;height:32px;padding:0;border:0;border-radius:8px;background:0 0;color:var(--text-sub);cursor:pointer}.theme-toggle:hover{color:var(--text);background:var(--code-bg)}.theme-toggle:focus-visible{outline:2px solid var(--text-sub);outline-offset:2px}.theme-toggle svg{display:block}.theme-toggle .icon-sun{display:none}:root[data-theme=dark] .theme-toggle .icon-moon{display:none}:root[data-theme=dark] .theme-toggle .icon-sun{display:block}.site-foot{margin-top:64px;padding-top:20px;padding-bottom:48px;border-top:1px solid var(--line);font-size:14px}.foot-links{display:flex;align-items:center;gap:4px;margin-left:-7px}.foot-links a{display:inline-flex;text-decoration:none;align-items:center;justify-content:center;width:32px;height:32px;border-radius:8px;color:var(--text-sub)}.foot-links a:hover{color:var(--text);background:var(--code-bg)}.foot-links a:focus-visible{outline:2px solid var(--text-sub);outline-offset:2px}.foot-links svg{display:block}.page-title{margin:0 0 28px;font-size:24px;font-weight:700;letter-spacing:-.01em}.post-list{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:28px}.post-item{background:var(--code-bg);border:1px solid var(--line);border-radius:10px;overflow:hidden}.post-item .post-cover{display:block;text-decoration:none}.post-item .post-cover img{display:block;width:100%;height:auto;border-bottom:1px solid var(--line)}.post-item a:not(.post-cover){display:block;margin:18px 20px 0;font-size:21px;font-weight:600;line-height:1.45;color:var(--text);text-decoration:none;border:0}.post-item a:not(.post-cover):hover{text-decoration:underline;text-underline-offset:3px}.post-summary{margin:8px 20px 0;color:var(--text-sub);font-size:15px;line-height:1.7}.post-item time{display:block;margin:10px 20px 18px;font-size:13px;color:var(--text-sub);font-variant-numeric:tabular-nums}.post-head{margin-bottom:36px}.post>.post-cover{display:block;width:100%;height:auto;margin:0 0 36px}.post-date{display:block;margin-top:10px;font-size:13px;color:var(--text-sub);font-variant-numeric:tabular-nums}.prose{font-size:17px;line-height:1.8}.prose h2{margin:48px 0 14px;font-size:20px;font-weight:700;letter-spacing:-.01em}.prose h3{margin:32px 0 10px;font-size:17px;font-weight:700}.prose .heading-anchor{display:none}@media(hover:hover){.prose .heading-anchor{display:inline;margin-left:.35em;border:0;color:var(--text-sub);font-weight:400;opacity:0}.prose h2>.heading-anchor,.prose h3>.heading-anchor{opacity:.28}.prose h2:hover>.heading-anchor,.prose h3:hover>.heading-anchor{opacity:.55}.prose .heading-anchor:hover{opacity:1;color:var(--text)}.prose .heading-anchor:focus-visible{opacity:1;outline:2px solid var(--text-sub);outline-offset:2px}}.prose h2[id],.prose h3[id]{scroll-margin-top:24px}.prose p{margin:0 0 20px}.prose ul,.prose ol{margin:0 0 20px;padding-left:22px}.prose li{margin:6px 0}.prose blockquote{margin:24px 0;padding:2px 0 2px 16px;border-left:3px solid var(--line);color:var(--text-sub)}.prose blockquote p:last-child{margin-bottom:0}.prose a{color:var(--text);text-decoration:none;border-bottom:1px solid var(--text-sub)}.prose a:hover{border-bottom-color:var(--text)}.prose hr{margin:40px 0;border:0;border-top:1px solid var(--line)}.prose img{max-width:100%;height:auto}.prose>img,.prose figure img{display:block;margin-inline:auto}.prose>img{margin-block:32px}.prose figure{margin:32px 0}.prose figcaption{margin-top:10px;color:var(--text-sub);font-size:14px;line-height:1.6;text-align:center}.prose pre{margin:0 0 20px;padding:16px 18px;overflow-x:auto;background:var(--code-bg);border:1px solid var(--line);border-radius:6px;font-size:14px;line-height:1.6;-webkit-overflow-scrolling:touch}.prose pre code{display:block;padding:0;background:0 0;border:0;white-space:pre;font-size:inherit}.prose code{padding:2px 5px;background:var(--code-bg);border:1px solid var(--line);border-radius:4px;font-size:.88em}.prose code,.prose pre{font-family:ui-monospace,SFMono-Regular,sf mono,Consolas,liberation mono,Menlo,monospace}.prose .chroma{background:var(--code-bg)}.prose .table-wrap{overflow-x:auto;margin:0 0 20px}.prose table{border-collapse:collapse;width:100%;min-width:420px;font-size:15px}.prose th,.prose td{padding:8px 12px;border:1px solid var(--line);text-align:left}.prose th{background:var(--code-bg);font-weight:600}.prose .footnote-ref{padding:0 1px;border:0;font-size:12px;font-weight:600;color:var(--text-sub)}.prose .footnote-ref:hover{color:var(--text)}.prose [id^=fnref],.prose .footnotes li{scroll-margin-top:24px}.prose .footnotes{margin-top:48px;font-size:14px;line-height:1.7;color:var(--text-sub)}.prose .footnotes ol{margin:0;padding-left:20px}.prose .footnotes li{margin:10px 0}.prose .footnotes p{margin:0}.prose .footnotes li:target{background:var(--code-bg);border-radius:4px;box-shadow:0 0 0 6px var(--code-bg)}.prose .footnote-backref{border:0}.post-nav{display:flex;justify-content:space-between;gap:16px;margin-top:64px;font-size:14px}.post-nav a{color:var(--text-sub);text-decoration:none}.post-nav a:hover{color:var(--text)}.post-nav .next{margin-left:auto;text-align:right}.note{color:var(--text-sub)}@media(min-width:640px){.site-head{padding-top:56px}.page-title{font-size:30px}.prose h2{font-size:22px}.prose h3{font-size:18px}}@media(min-width:800px){.wrap{max-width:720px}}.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 .or{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}:root[data-theme=dark]{.chroma span{color:inherit}.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:.4em;padding:0 .4em;color:#737679}.chroma .ln{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding: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:700}.chroma .no{color:#79c0ff;font-weight:700}.chroma .nd{color:#d2a8ff;font-weight:700}.chroma .ni{color:#ffa657}.chroma .ne{color:#f0883e;font-weight:700}.chroma .nl{color:#79c0ff;font-weight:700}.chroma .nn{color:#ff7b72}.chroma .nx{color:#e6edf3}.chroma .py{color:#79c0ff}.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:700}.chroma .fm{color:#d2a8ff;font-weight:700}.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:700}.chroma .ow{color:#ff7b72;font-weight:700}.chroma .or{color:#ff7b72;font-weight:700}.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:700;font-style:italic}.chroma .cp{color:#8b949e;font-weight:700;font-style:italic}.chroma .cpf{color:#8b949e;font-weight:700;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:700}.chroma .gi{color:#56d364;background-color:#0f5323}.chroma .go{color:#8b949e}.chroma .gp{color:#8b949e}.chroma .gs{font-weight:700}.chroma .gu{color:#79c0ff}.chroma .gt{color:#ff7b72}.chroma .gl{text-decoration:underline}.chroma .w{color:#6e7681}.prose .chroma{background:var(--code-bg)}}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){.chroma span{color:inherit}.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:.4em;padding:0 .4em;color:#737679}.chroma .ln{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding: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:700}.chroma .no{color:#79c0ff;font-weight:700}.chroma .nd{color:#d2a8ff;font-weight:700}.chroma .ni{color:#ffa657}.chroma .ne{color:#f0883e;font-weight:700}.chroma .nl{color:#79c0ff;font-weight:700}.chroma .nn{color:#ff7b72}.chroma .nx{color:#e6edf3}.chroma .py{color:#79c0ff}.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:700}.chroma .fm{color:#d2a8ff;font-weight:700}.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:700}.chroma .ow{color:#ff7b72;font-weight:700}.chroma .or{color:#ff7b72;font-weight:700}.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:700;font-style:italic}.chroma .cp{color:#8b949e;font-weight:700;font-style:italic}.chroma .cpf{color:#8b949e;font-weight:700;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:700}.chroma .gi{color:#56d364;background-color:#0f5323}.chroma .go{color:#8b949e}.chroma .gp{color:#8b949e}.chroma .gs{font-weight:700}.chroma .gu{color:#79c0ff}.chroma .gt{color:#ff7b72}.chroma .gl{text-decoration:underline}.chroma .w{color:#6e7681}.prose .chroma{background:var(--code-bg)}}}