@font-face{font-family:Lora;src:url(/fonts/latin-9bba8f25.woff2)format("woff2-variations");font-weight:400 700;font-style:normal;font-display:swap}@font-face{font-family:KoBody;src:url(/fonts/ko-02f8cebd.woff2)format("woff2-variations");font-weight:400 700;font-style:normal;font-display:swap;size-adjust:94.29%;unicode-range:U+11??,U+3130-318F,U+A960-A97F,U+AC00-D7A3,U+D7B0-D7FF}@font-face{font-family:KoFallback;src:local(Noto Sans KR),local(NotoSansKR-Regular),local(Nanum Gothic);size-adjust:81.49%;ascent-override:110.17%;descent-override:27.91%;line-gap-override:0%;unicode-range:U+11??,U+3130-318F,U+A960-A97F,U+AC00-D7A3,U+D7B0-D7FF}@font-face{font-family:KoFallback;src:local(Apple SD Gothic Neo);size-adjust:81.49%;ascent-override:110.17%;descent-override:27.91%;line-gap-override:0%;unicode-range:U+11??,U+3130-318F,U+A960-A97F,U+AC00-D7A3,U+D7B0-D7FF}@font-face{font-family:KoFallback;src:local(Malgun Gothic);size-adjust:81.49%;ascent-override:110.17%;descent-override:27.91%;line-gap-override:0%;unicode-range:U+11??,U+3130-318F,U+A960-A97F,U+AC00-D7A3,U+D7B0-D7FF}@font-face{font-family:LatinFallback;src:local(Georgia);size-adjust:105%;ascent-override:95.81%;descent-override:26.1%;line-gap-override:0%}:root{--font-display:"Lora", "KoBody", "KoFallback", "LatinFallback", Georgia, "Times New Roman", serif;--font-body:"Lora", "KoBody", "KoFallback", "LatinFallback", Georgia, "Times New Roman", serif;--font-mono:ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--font-sans:"Lora", "KoBody", "KoFallback", "LatinFallback", Georgia, "Times New Roman", serif;--font-serif:"Lora", "KoBody", "KoFallback", "LatinFallback", Georgia, "Times New Roman", serif;color-scheme:light;--crimson-dark:#771120;--crimson:#a51c30;--crimson-bright:#faa2a2;--crimson-wash:#f7ebeb;--crimson-lift:#cb233b;--blue-dark:#0e455f;--blue:#186285;--blue-bright:#70cafa;--blue-wash:#e6f0f7;--ochre-dark:#553a0c;--ochre:#775315;--ochre-bright:#f6ae30;--ochre-wash:#f7ede0;--purple-dark:#5e127b;--purple:#831daa;--purple-bright:#dda3fa;--purple-wash:#f3ebf7;--slate-dark:#453f34;--slate:#605a4e;--slate-bright:#c4bdb0;--slate-wash:#f5eee0;--black:#000;--grey:#b9b8ad;--sand:#faedda;--sand-light:#fffbf4;--sand-dark:#eed6aa;--page-bg:var(--sand-light);--page-fg:var(--black);--page-meta:var(--slate);--page-hairline:var(--grey);--ppc-text:var(--crimson-dark);--ppc-ui:var(--crimson);--ppc-wash:var(--crimson-wash);--fs-small:clamp(.6875rem, .2568vw + .6361rem, .875rem);--fs-medium:clamp(.75rem, .3425vw + .6815rem, 1rem);--fs-body:1rem;--fs-nav:clamp(1rem, .274vw + .9452rem, 1.2rem);--fs-h6:1.0625rem;--fs-h5:clamp(1.125rem, .1712vw + 1.0908rem, 1.25rem);--fs-h4:clamp(1.2188rem, .214vw + 1.1759rem, 1.375rem);--fs-h3:clamp(1.3125rem, .2997vw + 1.2526rem, 1.5313rem);--fs-h2:clamp(1.4375rem, .4709vw + 1.3433rem, 1.7813rem);--fs-h1:clamp(1.6875rem, .9418vw + 1.4991rem, 2.375rem);--fs-xlarge:clamp(1.25rem, .5137vw + 1.1473rem, 1.625rem);--fs-2xlarge:clamp(1.625rem, .5137vw + 1.5223rem, 2rem);--fs-h1-large:clamp(2rem, 1.1986vw + 1.7603rem, 2.875rem);--wp-h1:clamp(1.6875rem, .9418vw + 1.4991rem, 2.375rem);--wp-h5:clamp(1.125rem, .1712vw + 1.0908rem, 1.25rem);--wp-large:clamp(1rem, .2568vw + .9486rem, 1.1875rem);--lh-tight:1.1;--lh-snug:1.2;--lh-close:1.25;--lh-medium:1.4;--lh-base:1.5;--lh-large:1.6;--sp-20:.44rem;--sp-30:.67rem;--sp-40:1rem;--sp-50:1.5rem;--sp-60:2.25rem;--sp-70:3.38rem;--sp-24:1.5rem;--sp-para:.7em;--sp-32:clamp(1.5rem, .5vw + 1.4rem, 2rem);--sp-48:clamp(2rem, 1vw + 1.8rem, 3rem);--sp-64:clamp(2.5rem, 2.2vw + 2rem, 4rem);--sp-80:clamp(2.5rem, 2.5vw + 2rem, 5rem);--sp-120:clamp(4rem, 3.5vw + 3.3rem, 7.5rem);--w-content:928px;--w-page:calc(var(--w-content) + 4.5rem + 1.5rem);--w-wide:1488px;--root-pad:clamp(1rem, 1rem + ((1vw - .48rem) * 1.1111), 1.5rem);--astro-code-background:transparent;--astro-code-foreground:var(--black);--astro-code-token-string:var(--black);--astro-code-token-keyword:var(--purple-dark);--astro-code-token-string-expression:var(--blue-dark);--astro-code-token-punctuation:var(--slate);--astro-code-token-function:var(--crimson-dark);--astro-code-token-comment:var(--ochre-dark);--astro-code-token-constant:var(--blue-dark);--astro-code-token-parameter:var(--black);--astro-code-token-link:var(--blue-dark);--fs-code:clamp(.8125rem, .1315vw + .7817rem, .9rem);--code-pad:var(--sp-40)}.is-writing{--ppc-text:var(--crimson-dark);--ppc-ui:var(--crimson);--ppc-wash:var(--crimson-wash)}.is-code{--ppc-text:var(--blue-dark);--ppc-ui:var(--blue);--ppc-wash:var(--blue-wash)}.is-talk{--ppc-text:var(--ochre-dark);--ppc-ui:var(--ochre);--ppc-wash:var(--ochre-wash)}.is-papers{--ppc-text:var(--purple-dark);--ppc-ui:var(--purple);--ppc-wash:var(--purple-wash)}.is-slate{--ppc-text:var(--slate-dark);--ppc-ui:var(--slate);--ppc-wash:var(--slate-wash)}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;scrollbar-gutter:stable}body{background:var(--page-bg);color:var(--page-fg);font-family:var(--font-body);font-size:var(--fs-body);line-height:var(--lh-large);-webkit-font-smoothing:antialiased;margin:0}h1,h2,h3,h4,h5,h6{font-family:var(--font-display);color:var(--black);text-wrap:balance;margin:0;font-weight:500}h1{font-size:var(--fs-h1);line-height:var(--lh-tight);letter-spacing:-.015em}h2{font-size:var(--fs-h2);line-height:var(--lh-snug)}h3{font-size:var(--fs-h3);line-height:var(--lh-snug)}h4{font-size:var(--fs-h4);line-height:var(--lh-close)}h5{font-size:var(--fs-h5);line-height:var(--lh-medium)}h6{font-size:var(--fs-h6);line-height:var(--lh-medium)}p{margin:0}p+p{margin-block-start:var(--sp-para)}a{color:var(--crimson);font-weight:inherit;text-decoration:none}@media (hover:hover){:is(.prose,.about) a:hover,.post__back a:hover{color:var(--crimson-lift)}}:focus-visible{outline:3px solid var(--ppc-ui);outline-offset:2px}.skip{position:absolute;left:-9999px}.skip:focus{left:var(--root-pad);top:var(--root-pad);z-index:10;background:var(--page-bg);padding:var(--sp-30) var(--sp-40);border:2px solid var(--ppc-ui)}.sr-only{white-space:nowrap;clip-path:inset(50%);border:0;block-size:1px;inline-size:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}main{max-width:calc(var(--w-page) + 2 * var(--root-pad));padding-inline:var(--root-pad);margin-inline:auto}body>header{padding-block:var(--sp-40);padding-inline:max(var(--root-pad), calc((100% - var(--w-page)) / 2));border-bottom:1px solid var(--crimson);line-height:calc(var(--fs-nav) * var(--lh-medium));column-gap:var(--sp-40);row-gap:var(--sp-30);flex-wrap:wrap;justify-content:space-between;align-items:center;display:flex;box-shadow:0 1px 12px #00000012}main{padding-block:var(--sp-64) var(--sp-120)}.site-foot{justify-content:space-between;align-items:baseline;column-gap:var(--sp-48);row-gap:var(--sp-30);padding-inline:max(var(--root-pad), calc((100% - var(--w-page)) / 2));padding-block:var(--sp-40);font-size:var(--fs-small);line-height:var(--lh-base);letter-spacing:.02em;color:var(--page-meta);flex-wrap:wrap;display:flex}.site-foot p{margin:0}.site-foot__social{column-gap:calc(var(--fs-nav) * .8);flex-wrap:wrap;display:flex}.site-foot__social a{color:inherit;font-size:inherit;letter-spacing:inherit;--wipe-y:calc(100% - .07em);font-variant-caps:normal;font-weight:400;text-decoration:none}.site-foot__social a:focus-visible{color:var(--crimson-dark);background-size:100% 2px}@media (hover:hover){.site-foot__social a:hover{color:var(--crimson-dark);background-size:100% 2px}}body>header>.page-name,nav a{font-family:var(--font-body);font-size:var(--fs-nav);letter-spacing:normal;text-transform:none;font-variant-caps:small-caps;font-weight:400;text-decoration:none}body>header>.page-name{font-size:calc(var(--fs-nav) * 1.25);letter-spacing:.15em}nav{gap:var(--sp-50);flex-wrap:wrap;display:flex}body>header nav{column-gap:calc(var(--fs-nav) * .8);row-gap:calc(var(--fs-nav) * .4)}@media (width<=449px){body>header nav{flex-basis:100%}}nav a{color:var(--page-meta)}body>header nav a{position:relative}body>header nav a:before{content:"";inset-inline:0;background:var(--crimson);block-size:2px;transition:transform .3s;position:absolute;bottom:0;transform:scaleX(0)}body>header nav a:focus-visible:before{transform:scaleX(1)}body>header nav a:focus-visible{color:var(--crimson-dark)}@media (hover:hover){body>header nav a:hover{color:var(--crimson-dark)}body>header nav a:hover:before{transform:scaleX(1)}}.site-foot__social a{background-image:linear-gradient(var(--crimson), var(--crimson));background-repeat:no-repeat;background-position:50% var(--wipe-y,100%);-webkit-box-decoration-break:clone;box-decoration-break:clone;background-size:0% 2px;transition:background-size .3s}@media (forced-colors:active){.site-foot__social a:focus-visible{text-decoration:underline}}@media (forced-colors:active) and (hover:hover){.site-foot__social a:hover{text-decoration:underline}}.code{--copy-size:2rem;margin-block:var(--sp-48);padding-block:var(--sp-40);background:var(--sand);margin-inline:0;position:relative}.code[data-language=plaintext]{padding-block-start:calc(var(--sp-40) + var(--copy-size) + var(--sp-40))}:is(h2,h3,h4,h5,h6)+.code{margin-block-start:var(--sp-32)}.code__lang{align-items:center;gap:var(--sp-30);min-block-size:var(--copy-size);padding-inline:var(--code-pad);font-family:var(--font-body);font-size:var(--fs-small);line-height:var(--lh-medium);text-transform:uppercase;letter-spacing:.105rem;color:var(--ppc-text);margin-block-end:var(--sp-40);font-weight:700;display:flex}.code__lang:before{content:"";background:var(--ppc-ui);flex:none;block-size:4px;inline-size:3rem}.code pre{padding-inline:var(--code-pad);font-family:var(--font-mono);font-size:var(--fs-code);line-height:var(--lh-base);font-variant-ligatures:none;tab-size:2;background-image:linear-gradient(to right, var(--sand), transparent), linear-gradient(to left, var(--sand), transparent), linear-gradient(to right, #00000029, #0000), linear-gradient(to left, #00000029, #0000);scrollbar-width:thin;scrollbar-color:var(--sand-dark) transparent;background-position:0,100%,0,100%;background-repeat:no-repeat;background-size:2.5rem 100%,2.5rem 100%,.75rem 100%,.75rem 100%;background-attachment:local,local,scroll,scroll;margin:0}.code pre::-webkit-scrollbar{block-size:6px}.code pre::-webkit-scrollbar-thumb{background:var(--sand-dark)}.code pre::-webkit-scrollbar-track{background:0 0}.code pre code{font-family:inherit}.code pre:focus-visible{outline:3px solid var(--ppc-ui);outline-offset:-3px}.code[data-wrap] pre{white-space:pre-wrap;overflow-wrap:anywhere}.code[data-language=console]{--astro-code-token-punctuation:var(--crimson-dark)}.code[data-language=bash],.code[data-language=sh]{--astro-code-token-keyword:var(--slate)}:not(pre)>code{font-family:var(--font-mono);background:var(--sand);padding:.1em .3em;font-size:.9em}.code__copy{inline-size:var(--copy-size);block-size:var(--copy-size);border:1px solid var(--sand-dark);color:var(--page-meta);cursor:pointer;background:0 0;place-items:center;padding:0;transition:color .12s,border-color .12s,background-color .12s;display:grid;position:absolute;inset-block-start:var(--sp-40);inset-inline-end:var(--code-pad)}.code__copy>svg{display:block}.code__copy [data-glyph]{display:none}.code__copy[data-state=idle] [data-glyph=copy],.code__copy[data-state=done] [data-glyph=done],.code__copy[data-state=fail] [data-glyph=fail]{display:inline}@media (hover:hover){.code__copy:hover{color:var(--ppc-text);border-color:var(--ppc-ui);background:var(--page-bg)}}.code__copy[data-state=done]{color:var(--ppc-text);border-color:var(--ppc-ui)}.code__copy[data-state=fail]{color:var(--ppc-text);border-color:var(--ppc-ui);background:var(--ppc-wash)}@media print{.code{break-inside:avoid;background:0 0}.code__copy{display:none}.code[data-language=plaintext]{padding-block-start:var(--sp-40)}.code__lang{min-block-size:0}.code pre{white-space:pre-wrap;background-image:none;overflow-x:visible!important}}.diagram{margin-block:var(--sp-48);padding:var(--code-pad);border:1px solid var(--sand-dark);margin-inline:0}:is(h2,h3,h4,h5,h6)+.diagram{margin-block-start:var(--sp-32)}.diagram:focus-visible{outline:3px solid var(--ppc-ui);outline-offset:-3px}.diagram>svg{block-size:auto;inline-size:auto;max-inline-size:100%;margin-inline:auto;display:block}@media print{.diagram{break-inside:avoid}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition:none!important;animation:none!important}}
