:root{--bg: #ffffff;--bg-subtle: #f6f7f9;--surface: #ffffff;--border: #e4e7eb;--border-strong: #cfd4da;--text: #1d2128;--text-body: #2b3038;--text-muted: #5b6470;--text-subtle: #848d99;--accent: #2563eb;--accent-hover: #1d4ed8;--accent-soft: #eef3fe;--code-bg: #f6f8fa;--code-border: #e4e7eb;--inline-code-bg: #eff1f4;--inline-code-text: #c2255c;--mark-bg: #fff3bf;--shadow: 0 1px 2px rgba(16, 24, 40, .04), 0 1px 3px rgba(16, 24, 40, .06);--shadow-lg: 0 8px 24px rgba(16, 24, 40, .08);--font-sans: "Pretendard Variable", Pretendard, -apple-system, BlinkMacSystemFont, system-ui, "Apple SD Gothic Neo", "Noto Sans KR", "Malgun Gothic", sans-serif;--font-mono: "JetBrains Mono", D2Coding, ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace;--header-h: 60px;--container: 1180px;--prose: 740px;--radius: 8px;color-scheme:light}:root[data-theme=dark]{--bg: #0f1218;--bg-subtle: #161b23;--surface: #161b23;--border: #262d38;--border-strong: #353e4b;--text: #e8ecf1;--text-body: #d3d9e0;--text-muted: #9aa4b1;--text-subtle: #6f7a87;--accent: #6aa1ff;--accent-hover: #93bbff;--accent-soft: rgba(106, 161, 255, .12);--code-bg: #161b22;--code-border: #262d38;--inline-code-bg: rgba(110, 118, 129, .25);--inline-code-text: #ff8fb1;--mark-bg: rgba(250, 204, 21, .25);--shadow: 0 1px 2px rgba(0, 0, 0, .3);--shadow-lg: 0 8px 24px rgba(0, 0, 0, .4);color-scheme:dark}*,*:before,*:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;scroll-padding-top:calc(var(--header-h) + 20px)}@media (prefers-reduced-motion: no-preference){html{scroll-behavior:smooth}}body{margin:0;min-height:100vh;display:flex;flex-direction:column;font-family:var(--font-sans);font-size:16px;line-height:1.6;color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility;transition:background-color .2s ease,color .2s ease}main{flex:1}a{color:var(--accent);text-decoration:none}a:hover{color:var(--accent-hover)}img{max-width:100%;height:auto}button{font:inherit;color:inherit;cursor:pointer}:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:4px}hr{border:0;border-top:1px solid var(--border);margin:2.5em 0}code,kbd,samp,pre{font-family:var(--font-mono);font-variant-ligatures:none}.container{width:100%;max-width:var(--container);margin:0 auto;padding:0 24px}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.site-header{position:sticky;top:0;z-index:50;height:var(--header-h);background:color-mix(in srgb,var(--bg) 85%,transparent);backdrop-filter:saturate(180%) blur(12px);-webkit-backdrop-filter:saturate(180%) blur(12px);border-bottom:1px solid var(--border)}.site-header .container{height:100%;display:flex;align-items:center;gap:16px}.brand{display:flex;align-items:baseline;gap:10px;color:var(--text);font-weight:700;font-size:17px;letter-spacing:-.01em;margin-right:auto}.brand:hover{color:var(--text)}.brand small{font-weight:400;font-size:13px;color:var(--text-subtle)}.site-nav ul{display:flex;gap:4px;margin:0;padding:0;list-style:none}.site-nav a{display:block;padding:6px 12px;border-radius:6px;font-size:14.5px;font-weight:500;color:var(--text-muted);transition:color .15s ease,background-color .15s ease}.site-nav a:hover,.site-nav a[aria-current=page]{color:var(--text);background:var(--bg-subtle)}.icon-btn{display:inline-grid;place-items:center;width:36px;height:36px;padding:0;border:1px solid var(--border);border-radius:8px;background:transparent;color:var(--text-muted);transition:color .15s ease,border-color .15s ease,background-color .15s ease}.icon-btn:hover{color:var(--text);border-color:var(--border-strong);background:var(--bg-subtle)}.icon-btn svg{width:18px;height:18px}.theme-toggle .icon-sun{display:none}:root[data-theme=dark] .theme-toggle .icon-sun{display:block}:root[data-theme=dark] .theme-toggle .icon-moon{display:none}.menu-toggle{display:none}.progress{position:absolute;left:0;bottom:-1px;height:2px;width:0;background:var(--accent);transition:width .1s linear}.site-footer{margin-top:96px;border-top:1px solid var(--border);background:var(--bg-subtle);color:var(--text-subtle);font-size:14px}.site-footer .container{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px 24px;padding-top:28px;padding-bottom:28px}.site-footer p{margin:0}.site-footer .links{display:flex;gap:16px}.site-footer a{color:var(--text-muted)}.site-footer a:hover{color:var(--text)}.site-footer .links i{font-size:18px}.back-to-top{position:fixed;right:24px;bottom:24px;z-index:40;width:42px;height:42px;border-radius:50%;background:var(--surface);box-shadow:var(--shadow-lg);opacity:0;visibility:hidden;transform:translateY(8px);transition:opacity .2s ease,transform .2s ease,visibility .2s}.back-to-top.show{opacity:1;visibility:visible;transform:none}.page-head{padding:56px 0 32px}.page-head h1{margin:0;font-size:34px;font-weight:800;letter-spacing:-.025em;line-height:1.25;color:var(--text)}.page-head p{margin:10px 0 0;font-size:16px;color:var(--text-muted)}.page-head .eyebrow{display:inline-block;margin:0 0 8px;font-size:13px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--accent)}.with-sidebar{display:grid;grid-template-columns:minmax(0,1fr) 260px;gap:56px;align-items:start}.sidebar{position:sticky;top:calc(var(--header-h) + 24px);display:flex;flex-direction:column;gap:28px}.side-section h2{margin:0 0 12px;font-size:12px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--text-subtle)}.side-list{margin:0;padding:0;list-style:none;font-size:14px}.side-list li+li{margin-top:2px}.side-list a{display:flex;justify-content:space-between;gap:8px;padding:5px 10px;margin:0 -10px;border-radius:6px;color:var(--text-muted);line-height:1.45}.side-list a:hover{color:var(--text);background:var(--bg-subtle)}.side-list .count{flex-shrink:0;color:var(--text-subtle);font-variant-numeric:tabular-nums}.post-list{margin:0;padding:0;list-style:none}.post-item{padding:28px 0;border-bottom:1px solid var(--border)}.post-item:first-child{padding-top:4px}.post-item h2{margin:0;font-size:21px;font-weight:700;line-height:1.45;letter-spacing:-.015em;word-break:keep-all;overflow-wrap:break-word}.post-item h2 a{color:var(--text)}.post-item h2 a:hover{color:var(--accent)}.post-item .subtitle{margin:6px 0 0;font-size:15.5px;line-height:1.65;color:var(--text-muted);word-break:keep-all}.meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 14px;margin-top:12px;font-size:13.5px;color:var(--text-subtle)}.meta time{font-variant-numeric:tabular-nums}.meta .dot:before{content:"·";margin-right:14px;margin-left:-8px;color:var(--border-strong)}.meta a{color:var(--text-muted)}.meta a:hover{color:var(--accent)}.tag-list{display:flex;flex-wrap:wrap;gap:6px;margin:0;padding:0;list-style:none}.tag{display:inline-block;padding:2px 10px;border-radius:999px;background:var(--bg-subtle);border:1px solid var(--border);font-size:12.5px;line-height:1.6;color:var(--text-muted);transition:color .15s ease,border-color .15s ease,background-color .15s ease}a.tag:hover{color:var(--accent);border-color:color-mix(in srgb,var(--accent) 40%,transparent);background:var(--accent-soft)}.category-chip{display:inline-block;padding:1px 8px;border-radius:4px;background:var(--accent-soft);color:var(--accent);font-size:12.5px;font-weight:600}a.category-chip:hover{color:var(--accent-hover)}.pagination{display:flex;justify-content:center;align-items:center;gap:8px;margin-top:40px;font-size:14px}.pagination a,.pagination span{display:inline-grid;place-items:center;min-width:36px;height:36px;padding:0 10px;border-radius:8px;border:1px solid var(--border);color:var(--text-muted);font-variant-numeric:tabular-nums}.pagination a:hover{color:var(--text);border-color:var(--border-strong);background:var(--bg-subtle)}.pagination .current{border-color:transparent;color:var(--text);font-weight:600}.pagination .disabled{opacity:.4}.group+.group{margin-top:48px}.group-title{display:flex;align-items:baseline;gap:10px;margin:0 0 8px;padding-bottom:10px;border-bottom:1px solid var(--border);font-size:20px;font-weight:700;letter-spacing:-.01em;color:var(--text)}.group-title .count{font-size:14px;font-weight:500;color:var(--text-subtle)}.compact-list{margin:0;padding:0;list-style:none}.compact-list li{display:grid;grid-template-columns:96px minmax(0,1fr) auto;align-items:baseline;gap:16px;padding:10px 0;border-bottom:1px dashed var(--border)}.compact-list li:last-child{border-bottom:0}.compact-list time{font-size:13.5px;color:var(--text-subtle);font-variant-numeric:tabular-nums}.compact-list .title{color:var(--text);font-weight:500;line-height:1.5;word-break:keep-all;overflow-wrap:break-word}.compact-list .title:hover{color:var(--accent)}.compact-list .aside{font-size:13px}.tag-cloud{display:flex;flex-wrap:wrap;gap:6px}.tag-cloud .tag .count{margin-left:4px;color:var(--text-subtle)}.post-wrap{display:grid;grid-template-columns:minmax(0,var(--prose)) 240px;justify-content:center;gap:72px;align-items:start}.post-header{padding:56px 0 36px;margin-bottom:40px;border-bottom:1px solid var(--border)}.post-header .category-chip{margin-bottom:14px}.post-header h1{margin:0;font-size:38px;font-weight:800;line-height:1.3;letter-spacing:-.03em;color:var(--text);word-break:keep-all;overflow-wrap:break-word}.post-header .subtitle{margin:14px 0 0;font-size:19px;line-height:1.6;color:var(--text-muted);word-break:keep-all}.post-header .meta{margin-top:22px;font-size:14px}.post-header .tag-list{margin-top:18px}.toc-aside{position:sticky;top:calc(var(--header-h) + 32px);margin-top:56px;max-height:calc(100vh - var(--header-h) - 64px);overflow-y:auto;scrollbar-width:thin}.toc-title{margin:0 0 12px;font-size:12px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--text-subtle)}.toc ul{margin:0;padding:0;list-style:none;border-left:1px solid var(--border)}.toc li a{display:block;margin-left:-1px;padding:5px 0 5px 14px;border-left:2px solid transparent;font-size:13.5px;line-height:1.5;color:var(--text-subtle);word-break:keep-all;transition:color .15s ease,border-color .15s ease}.toc li.depth-3 a{padding-left:28px;font-size:13px}.toc li a:hover{color:var(--text)}.toc li a.active{color:var(--accent);border-left-color:var(--accent);font-weight:600}.toc-inline{display:none;margin:0 0 32px;border:1px solid var(--border);border-radius:var(--radius);background:var(--bg-subtle)}.toc-inline summary{padding:12px 16px;font-size:14px;font-weight:600;color:var(--text-muted);cursor:pointer}.toc-inline .toc{padding:0 16px 14px}.post-footer{margin-top:64px;padding-top:32px;border-top:1px solid var(--border)}.post-nav{display:grid;grid-template-columns:1fr 1fr;gap:16px}.post-nav a{display:block;padding:16px 18px;border:1px solid var(--border);border-radius:var(--radius);color:var(--text);transition:border-color .15s ease,background-color .15s ease}.post-nav a:hover{border-color:var(--accent);background:var(--accent-soft)}.post-nav .label{display:block;margin-bottom:4px;font-size:12.5px;color:var(--text-subtle)}.post-nav .t{display:block;font-weight:600;line-height:1.45;word-break:keep-all}.post-nav .next{grid-column:2;text-align:right}.comments{margin-top:56px}.comments h2{margin:0 0 20px;font-size:20px;font-weight:700}.prose{font-size:17px;line-height:1.85;color:var(--text-body);word-break:keep-all;overflow-wrap:break-word}.prose>:first-child{margin-top:0}.prose p{margin:0 0 1.4em}.prose a{color:var(--accent);text-decoration:underline;text-decoration-color:color-mix(in srgb,var(--accent) 35%,transparent);text-decoration-thickness:1px;text-underline-offset:3px;transition:text-decoration-color .15s ease}.prose a:hover{text-decoration-color:currentColor}.prose strong{font-weight:700;color:var(--text)}.prose em{font-style:italic}.prose mark{background:var(--mark-bg);color:inherit;padding:0 2px;border-radius:2px}.prose h1,.prose h2,.prose h3,.prose h4,.prose h5,.prose h6{position:relative;color:var(--text);font-weight:700;letter-spacing:-.02em;word-break:keep-all}.prose h1{font-size:1.75em;line-height:1.35;margin:2.2em 0 .8em}.prose h2{font-size:1.5em;line-height:1.4;margin:2.6em 0 .9em;padding-bottom:.4em;border-bottom:1px solid var(--border)}.prose h3{font-size:1.25em;line-height:1.45;margin:2.2em 0 .7em}.prose h4{font-size:1.08em;line-height:1.5;margin:1.9em 0 .6em}.prose h5,.prose h6{font-size:1em;line-height:1.5;margin:1.6em 0 .5em;color:var(--text-muted)}.prose .heading-anchor{position:absolute;left:-1.1em;padding-right:.3em;color:var(--text-subtle);font-weight:400;text-decoration:none;opacity:0;transition:opacity .15s ease}.prose :is(h2,h3,h4):hover .heading-anchor,.prose .heading-anchor:focus{opacity:1}.prose ul,.prose ol{margin:0 0 1.4em;padding-left:1.5em}.prose li{margin:.4em 0;padding-left:.2em}.prose li::marker{color:var(--text-subtle)}.prose ol>li::marker{font-weight:600;font-variant-numeric:tabular-nums}.prose li>ul,.prose li>ol{margin:.4em 0 0}.prose li>p{margin:.4em 0}.prose blockquote{margin:1.8em 0;padding:.9em 1.3em;border-left:3px solid var(--accent);background:var(--bg-subtle);border-radius:0 var(--radius) var(--radius) 0;color:var(--text-muted)}.prose blockquote>:last-child{margin-bottom:0}.prose hr{margin:3em auto;width:64px;border-top:2px solid var(--border-strong)}.prose img{display:block;margin:2em auto;border-radius:var(--radius);border:1px solid var(--border)}.prose p>img:only-child{margin:0 auto}.prose figure{margin:2em 0}.prose figcaption{margin-top:.6em;text-align:center;font-size:.85em;color:var(--text-subtle)}.prose :not(pre)>code{padding:.15em .4em;border-radius:5px;background:var(--inline-code-bg);color:var(--inline-code-text);font-size:.86em;word-break:break-word}.prose a code{color:inherit}.code-block{position:relative;margin:1.8em 0;border:1px solid var(--code-border);border-radius:var(--radius);background:var(--code-bg);overflow:hidden}.code-block .code-head{display:flex;justify-content:space-between;align-items:center;height:36px;padding:0 8px 0 14px;border-bottom:1px solid var(--code-border);font-family:var(--font-mono);font-size:12px;color:var(--text-subtle);text-transform:lowercase}.code-block .copy-btn{display:inline-flex;align-items:center;gap:6px;height:26px;padding:0 8px;border:0;border-radius:5px;background:transparent;color:var(--text-subtle);font-family:var(--font-sans);font-size:12px;text-transform:none}.code-block .copy-btn:hover{background:var(--border);color:var(--text)}.code-block .copy-btn.copied{color:#16a34a}.code-block .copy-btn svg{width:14px;height:14px}.prose pre{margin:1.8em 0;padding:16px 18px;overflow-x:auto;border-radius:var(--radius);border:1px solid var(--code-border);font-size:14px;line-height:1.65;tab-size:4;word-break:normal;overflow-wrap:normal;scrollbar-width:thin}.code-block pre{margin:0;border:0;border-radius:0}.prose pre code{font-size:inherit;background:none;padding:0;color:inherit}.astro-code{background-color:var(--code-bg)!important}:root[data-theme=dark] .astro-code,:root[data-theme=dark] .astro-code span{color:var(--shiki-dark)!important;font-style:var(--shiki-dark-font-style)!important;font-weight:var(--shiki-dark-font-weight)!important;text-decoration:var(--shiki-dark-text-decoration)!important}.table-wrap{margin:1.8em 0;overflow-x:auto;border:1px solid var(--border);border-radius:var(--radius)}.prose table{width:100%;border-collapse:collapse;font-size:.9em;line-height:1.6}.prose>table{margin:1.8em 0;display:block;overflow-x:auto}.prose th,.prose td{padding:10px 14px;text-align:left;vertical-align:top;border-bottom:1px solid var(--border)}.prose th+th,.prose td+td{border-left:1px solid var(--border)}.prose thead th{background:var(--bg-subtle);color:var(--text);font-weight:600;white-space:nowrap}.prose tbody tr:last-child td{border-bottom:0}.prose tbody tr:hover{background:color-mix(in srgb,var(--bg-subtle) 60%,transparent)}.prose .footnotes{margin-top:3em;font-size:.88em;color:var(--text-muted)}@media (max-width: 1100px){.post-wrap{grid-template-columns:minmax(0,var(--prose))}.toc-aside{display:none}.toc-inline{display:block}}@media (max-width: 900px){.with-sidebar{grid-template-columns:minmax(0,1fr)}.sidebar{display:none}}@media (max-width: 720px){:root{--header-h: 56px}.container{padding:0 18px}.brand small{display:none}.menu-toggle{display:inline-grid}.site-nav{position:absolute;top:var(--header-h);left:0;right:0;padding:8px 18px 14px;background:var(--bg);border-bottom:1px solid var(--border);box-shadow:var(--shadow-lg);display:none}.site-nav.open{display:block}.site-nav ul{flex-direction:column}.site-nav a{padding:10px 12px;font-size:15px}.page-head{padding:36px 0 24px}.page-head h1{font-size:28px}.post-header{padding:36px 0 28px;margin-bottom:32px}.post-header h1{font-size:28px}.post-header .subtitle{font-size:17px}.prose{font-size:16.5px;line-height:1.8}.prose .heading-anchor{display:none}.prose pre{font-size:13px}.code-block,.prose>pre{margin-left:-18px;margin-right:-18px;border-radius:0;border-left:0;border-right:0}.post-item h2{font-size:19px}.compact-list li{grid-template-columns:minmax(0,1fr);gap:2px}.compact-list time{order:-1}.post-nav{grid-template-columns:1fr}.post-nav .next{grid-column:1}.back-to-top{right:16px;bottom:16px}}@media print{.site-header,.site-footer,.toc-aside,.toc-inline,.post-footer,.comments,.back-to-top,.copy-btn{display:none!important}.post-wrap{display:block}}.chips{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:14px}.post-header .chips .category-chip{margin-bottom:0}.series-chip{display:inline-block;padding:1px 10px;border:1px solid var(--border-strong);border-radius:999px;font-size:12.5px;font-weight:500;color:var(--text-muted);font-variant-numeric:tabular-nums}.series-chip:hover{color:var(--accent);border-color:var(--accent)}.series-list{margin:0;padding:0;list-style:none}.series-list li{display:grid;grid-template-columns:40px minmax(0,1fr) auto;gap:12px;align-items:baseline;padding:12px 0;border-bottom:1px dashed var(--border)}.series-no{font-size:13px;font-variant-numeric:tabular-nums;color:var(--text-subtle);text-align:right}.series-list .title{color:var(--text);font-weight:600;line-height:1.5;word-break:keep-all}.series-list .title:hover{color:var(--accent)}.series-sub{margin:2px 0 0;font-size:14px;color:var(--text-muted);word-break:keep-all}.series-list time{font-size:13px;color:var(--text-subtle);font-variant-numeric:tabular-nums}.related{margin-top:40px}.related h2{margin:0 0 12px;font-size:18px;font-weight:700}.related ul{margin:0;padding:0;list-style:none}.related li{display:flex;justify-content:space-between;gap:16px;padding:9px 0;border-bottom:1px dashed var(--border)}.related a{color:var(--text);font-weight:500;word-break:keep-all}.related a:hover{color:var(--accent)}.related time{flex-shrink:0;font-size:13px;color:var(--text-subtle);font-variant-numeric:tabular-nums}kbd{padding:1px 6px;border:1px solid var(--border-strong);border-bottom-width:2px;border-radius:4px;background:var(--bg-subtle);font-size:.85em}.search-note{max-width:var(--prose);padding:14px 16px;border:1px solid var(--border);border-radius:var(--radius);background:var(--bg-subtle);color:var(--text-muted);font-size:14px}.search-box{--pagefind-ui-scale: .95;--pagefind-ui-primary: var(--accent);--pagefind-ui-text: var(--text);--pagefind-ui-background: var(--bg);--pagefind-ui-border: var(--border-strong);--pagefind-ui-tag: var(--bg-subtle);--pagefind-ui-border-width: 1px;--pagefind-ui-border-radius: 8px;--pagefind-ui-font: var(--font-sans)}.search-box mark{background:var(--mark-bg);color:inherit}@media (max-width: 720px){.series-list li{grid-template-columns:28px minmax(0,1fr)}.series-list time{grid-column:2}}
