:root{--bg:#fbfbf9;--fg:#1c1d1f;--muted:#64666d;--line:#e5e5e0;--card:#fff;--accent:#2f7d4f;--accent-soft:#e8f3ec;--code:#f5f5f1;--warn:#fff6e0;--warn-line:#f0d58c}
@media (prefers-color-scheme:dark){:root{--bg:#121315;--fg:#ebecef;--muted:#a3a5ad;--line:#2a2c31;--card:#1a1b1f;--accent:#6fcf97;--accent-soft:#1d2e24;--code:#191b1f;--warn:#2b2615;--warn-line:#5b4b1d}}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-padding-top:16px}
body{margin:0;background:var(--bg);color:var(--fg);font:16px/1.75 -apple-system,BlinkMacSystemFont,"Apple SD Gothic Neo","Pretendard","Noto Sans KR",sans-serif;word-break:keep-all;overflow-wrap:anywhere}
a{color:var(--accent)}
.wrap{max-width:780px;margin:0 auto;padding:0 16px}
/* header */
.top{background:var(--card);border-bottom:1px solid var(--line)}
.bar{display:flex;align-items:center;justify-content:space-between;gap:12px;padding-top:12px;padding-bottom:8px}
.brand{display:flex;align-items:center;gap:8px;font-weight:800;font-size:18px;color:var(--fg);text-decoration:none;white-space:nowrap}
.hsearch input{width:200px;max-width:42vw;padding:7px 12px;border:1px solid var(--line);border-radius:999px;background:var(--bg);color:var(--fg);font:inherit;font-size:14px}
.cats{display:flex;gap:18px;overflow-x:auto;scrollbar-width:none;padding-top:2px;padding-bottom:10px}
.cats::-webkit-scrollbar{display:none}
.cats a{color:var(--muted);text-decoration:none;font-weight:600;font-size:14.5px;white-space:nowrap}
.cats a:hover{color:var(--fg)}
/* home */
.hero{padding:32px 0 8px}
.hero h1{margin:0 0 6px;font-size:30px;line-height:1.3;letter-spacing:-.01em}
.hero p{margin:0 0 18px;color:var(--muted)}
.bigsearch{display:flex;gap:8px;margin:0 0 16px}
.bigsearch input{flex:1;min-width:0;padding:12px 16px;border:1px solid var(--line);border-radius:12px;background:var(--card);color:var(--fg);font:inherit}
.bigsearch input:focus,.hsearch input:focus{outline:2px solid var(--accent);outline-offset:1px}
.bigsearch button{padding:0 18px;border:0;border-radius:12px;background:var(--accent);color:#fff;font:inherit;font-weight:700;cursor:pointer}
@media (prefers-color-scheme:dark){.bigsearch button{color:#0d1a12}}
.chips{display:flex;flex-wrap:wrap;gap:8px}
.chips a{font-size:14px;padding:4px 12px;border:1px solid var(--line);border-radius:999px;text-decoration:none;color:var(--fg);background:var(--card)}
.chips a:hover{border-color:var(--accent);color:var(--accent)}
.chips span{color:var(--muted);font-size:12px;margin-left:2px}
.cloud{margin:16px 0 32px}
.section-title{font-size:15px;color:var(--muted);font-weight:700;margin:32px 0 4px;letter-spacing:.02em}
.side-block{margin-bottom:24px}
.intro{padding:28px 0 4px}.intro h1{margin:0 0 4px;font-size:27px;line-height:1.35}.intro>p{margin:0 0 12px;color:var(--muted)}
.crumbs{margin:0 0 4px!important;font-size:14px}.crumbs a{text-decoration:none}
/* post rows */
.rows{list-style:none;padding:0;margin:8px 0}
.row{border-bottom:1px solid var(--line)}
.row a{display:block;padding:18px 0;color:inherit;text-decoration:none}
.row a:hover h2{color:var(--accent)}
.row h2{margin:4px 0;font-size:18px;line-height:1.45}
.row p{margin:0 0 6px;color:var(--muted);font-size:15px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.rows.compact .row p{display:none}
.rows.compact .row a{padding:12px 0}
.rows.compact .row h2{font-size:16px}
.cat{display:inline-flex;align-items:center;gap:6px;font-size:13px;font-weight:700;color:var(--muted);text-decoration:none}
.cat::before{content:"";width:8px;height:8px;border-radius:50%;background:var(--c,var(--accent))}
.meta,time{color:var(--muted);font-size:13px}
.pager{display:flex;justify-content:space-between;align-items:center;margin:24px 0;color:var(--muted);font-size:15px}
.pager a{text-decoration:none;font-weight:600;padding:8px 14px;border:1px solid var(--line);border-radius:10px;background:var(--card)}
.groups{padding-left:20px}.groups li{margin:4px 0}.groups span{color:var(--muted);font-size:13px}
/* post */
.post{padding:28px 0 8px}
.post-head h1{font-size:29px;line-height:1.38;margin:10px 0 8px;letter-spacing:-.01em}
.post-head .meta{margin:0 0 20px;font-size:14px}
.aging{font-size:14px;line-height:1.6;background:var(--warn);border:1px solid var(--warn-line);border-radius:10px;padding:10px 14px;margin:0 0 20px}
.toc{border:1px solid var(--line);background:var(--card);border-radius:12px;padding:10px 16px;margin:0 0 24px;font-size:15px}
.toc summary{font-weight:700;cursor:pointer}
.toc ol{list-style:none;padding:0;margin:8px 0 2px}
.toc li{margin:3px 0}.toc li.d1{padding-left:16px}.toc li.d2{padding-left:32px;font-size:14px}
.toc a{color:var(--fg);text-decoration:none}.toc a:hover{color:var(--accent)}
.body{font-size:16.5px;line-height:1.85}
.body p{margin:0 0 .9em}
.body p.gap{margin:0;height:.6em}
.body h1,.body h2{font-size:22px;line-height:1.4;margin:1.8em 0 .6em}
.body h3{font-size:19px;margin:1.6em 0 .5em}
.body h4{font-size:17px;margin:1.4em 0 .4em}
.body img{max-width:100%;height:auto!important;border-radius:8px}
.body figure{margin:18px 0}
.body figcaption{color:var(--muted);font-size:14px;text-align:center}
.body span[style*="font-size"],.body p[style*="font-size"],.body div[style*="font-size"]{font-size:inherit!important}
.body [style*="font-family"]{font-family:inherit!important}
@media (prefers-color-scheme:dark){.body [style*="color"]{color:inherit!important}.body [style*="background"]{background:transparent!important}}
.body ul,.body ol{padding-left:22px}
.body blockquote{margin:18px 0;padding:6px 16px;border-left:4px solid var(--accent);background:var(--card);border-radius:0 8px 8px 0}
.body hr{border:0;border-top:1px solid var(--line);margin:28px 0}
.callout{background:var(--code);border:1px solid var(--line);border-left:4px solid var(--accent);border-radius:8px;padding:12px 16px;margin:16px 0;font-family:ui-monospace,SFMono-Regular,Menlo,"D2Coding",monospace;font-size:14.5px;line-height:1.65}
.callout p{margin:0}
.code{margin:18px 0;border:1px solid var(--line);border-radius:10px;overflow:hidden;background:var(--code)}
.code-bar{display:flex;align-items:center;justify-content:space-between;padding:5px 8px 5px 14px;border-bottom:1px solid var(--line);background:var(--card)}
.code pre{background:var(--code);padding:12px 16px;overflow-x:auto;margin:0;font-size:14px;line-height:1.6;tab-size:4}
.code pre code{font-family:ui-monospace,SFMono-Regular,Menlo,"D2Coding",monospace;white-space:pre}
.code-lang{font-size:11.5px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}
.copy{font:inherit;font-size:12px;padding:3px 10px;border:1px solid var(--line);border-radius:6px;background:var(--card);color:var(--muted);cursor:pointer;opacity:.85}
.copy:hover{opacity:1;color:var(--fg)}
.body :not(pre)>code{background:var(--code);border:1px solid var(--line);padding:1px 5px;border-radius:5px;font-size:.9em}
.table-wrap{overflow-x:auto;margin:16px 0}
.body table{border-collapse:collapse;min-width:60%;font-size:15px}
.body td,.body th{border:1px solid var(--line);padding:6px 10px}
.body iframe,.body video{max-width:100%}
.tags{margin:28px 0 0;display:flex;flex-wrap:wrap;gap:6px}
.tags a{color:var(--muted);font-size:13.5px;text-decoration:none;padding:3px 10px;background:var(--card);border:1px solid var(--line);border-radius:999px}
.prevnext{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:32px 0 8px}
.prevnext a{display:block;padding:14px 16px;border:1px solid var(--line);border-radius:12px;background:var(--card);color:var(--fg);text-decoration:none;font-weight:600;font-size:15px;line-height:1.5}
.prevnext a:hover{border-color:var(--accent)}
.prevnext span{display:block;color:var(--muted);font-size:12.5px;font-weight:600;margin-bottom:2px}
.prevnext .next{text-align:right}
@media (max-width:560px){.prevnext{grid-template-columns:1fr}.prevnext .next{text-align:left}.hero h1{font-size:26px}.post-head h1{font-size:25px}.hsearch input{width:120px}}
.related{margin:16px 0 24px}
.foot{border-top:1px solid var(--line);margin-top:40px;padding:20px 0;color:var(--muted);font-size:13px}
.foot p{margin:4px 0}.foot a{color:var(--muted)}
mark{background:var(--accent-soft);color:inherit;border-radius:3px;padding:0 2px}
sup.cite{font-size:.7em;line-height:0}sup.cite a{text-decoration:none;font-weight:700}
.sources{font-size:14px;line-height:1.6;padding-left:20px}.sources li{margin:4px 0}.sources span{color:var(--muted)}
.ai-note{margin-top:20px;font-size:13.5px;color:var(--muted);background:var(--card);border:1px solid var(--line);border-radius:10px;padding:10px 14px}

td.linenos .normal { color: #666666; background-color: transparent; padding-left: 5px; padding-right: 5px; }
span.linenos { color: #666666; background-color: transparent; padding-left: 5px; padding-right: 5px; }
td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
.hl .hll { background-color: #ffffcc }
.hl .c { color: #60A0B0; font-style: italic } /* Comment */
.hl .err { border: 1px solid #F00 } /* Error */
.hl .k { color: #007020; font-weight: bold } /* Keyword */
.hl .o { color: #666 } /* Operator */
.hl .ch { color: #60A0B0; font-style: italic } /* Comment.Hashbang */
.hl .cm { color: #60A0B0; font-style: italic } /* Comment.Multiline */
.hl .cp { color: #007020 } /* Comment.Preproc */
.hl .cpf { color: #60A0B0; font-style: italic } /* Comment.PreprocFile */
.hl .c1 { color: #60A0B0; font-style: italic } /* Comment.Single */
.hl .cs { color: #60A0B0; background-color: #FFF0F0 } /* Comment.Special */
.hl .gd { color: #A00000 } /* Generic.Deleted */
.hl .ge { font-style: italic } /* Generic.Emph */
.hl .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */
.hl .gr { color: #F00 } /* Generic.Error */
.hl .gh { color: #000080; font-weight: bold } /* Generic.Heading */
.hl .gi { color: #00A000 } /* Generic.Inserted */
.hl .go { color: #888 } /* Generic.Output */
.hl .gp { color: #C65D09; font-weight: bold } /* Generic.Prompt */
.hl .gs { font-weight: bold } /* Generic.Strong */
.hl .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.hl .gt { color: #04D } /* Generic.Traceback */
.hl .kc { color: #007020; font-weight: bold } /* Keyword.Constant */
.hl .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */
.hl .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */
.hl .kp { color: #007020 } /* Keyword.Pseudo */
.hl .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */
.hl .kt { color: #902000 } /* Keyword.Type */
.hl .m { color: #40A070 } /* Literal.Number */
.hl .s { color: #4070A0 } /* Literal.String */
.hl .na { color: #4070A0 } /* Name.Attribute */
.hl .nb { color: #007020 } /* Name.Builtin */
.hl .nc { color: #0E84B5; font-weight: bold } /* Name.Class */
.hl .no { color: #60ADD5 } /* Name.Constant */
.hl .nd { color: #555; font-weight: bold } /* Name.Decorator */
.hl .ni { color: #D55537; font-weight: bold } /* Name.Entity */
.hl .ne { color: #007020 } /* Name.Exception */
.hl .nf { color: #06287E } /* Name.Function */
.hl .nl { color: #002070; font-weight: bold } /* Name.Label */
.hl .nn { color: #0E84B5; font-weight: bold } /* Name.Namespace */
.hl .nt { color: #062873; font-weight: bold } /* Name.Tag */
.hl .nv { color: #BB60D5 } /* Name.Variable */
.hl .ow { color: #007020; font-weight: bold } /* Operator.Word */
.hl .w { color: #BBB } /* Text.Whitespace */
.hl .mb { color: #40A070 } /* Literal.Number.Bin */
.hl .mf { color: #40A070 } /* Literal.Number.Float */
.hl .mh { color: #40A070 } /* Literal.Number.Hex */
.hl .mi { color: #40A070 } /* Literal.Number.Integer */
.hl .mo { color: #40A070 } /* Literal.Number.Oct */
.hl .sa { color: #4070A0 } /* Literal.String.Affix */
.hl .sb { color: #4070A0 } /* Literal.String.Backtick */
.hl .sc { color: #4070A0 } /* Literal.String.Char */
.hl .dl { color: #4070A0 } /* Literal.String.Delimiter */
.hl .sd { color: #4070A0; font-style: italic } /* Literal.String.Doc */
.hl .s2 { color: #4070A0 } /* Literal.String.Double */
.hl .se { color: #4070A0; font-weight: bold } /* Literal.String.Escape */
.hl .sh { color: #4070A0 } /* Literal.String.Heredoc */
.hl .si { color: #70A0D0; font-style: italic } /* Literal.String.Interpol */
.hl .sx { color: #C65D09 } /* Literal.String.Other */
.hl .sr { color: #235388 } /* Literal.String.Regex */
.hl .s1 { color: #4070A0 } /* Literal.String.Single */
.hl .ss { color: #517918 } /* Literal.String.Symbol */
.hl .bp { color: #007020 } /* Name.Builtin.Pseudo */
.hl .fm { color: #06287E } /* Name.Function.Magic */
.hl .vc { color: #BB60D5 } /* Name.Variable.Class */
.hl .vg { color: #BB60D5 } /* Name.Variable.Global */
.hl .vi { color: #BB60D5 } /* Name.Variable.Instance */
.hl .vm { color: #BB60D5 } /* Name.Variable.Magic */
.hl .il { color: #40A070 } /* Literal.Number.Integer.Long */
@media (prefers-color-scheme: dark) {
td.linenos .normal { color: #6e7681; background-color: #0d1117; padding-left: 5px; padding-right: 5px; }
span.linenos { color: #6e7681; background-color: #0d1117; padding-left: 5px; padding-right: 5px; }
td.linenos .special { color: #e6edf3; background-color: #6e7681; padding-left: 5px; padding-right: 5px; }
span.linenos.special { color: #e6edf3; background-color: #6e7681; padding-left: 5px; padding-right: 5px; }
.hl .hll { background-color: #6e7681 }
.hl .c { color: #8B949E; font-style: italic } /* Comment */
.hl .err { color: #F85149 } /* Error */
.hl .esc { color: #E6EDF3 } /* Escape */
.hl .g { color: #E6EDF3 } /* Generic */
.hl .k { color: #FF7B72 } /* Keyword */
.hl .l { color: #A5D6FF } /* Literal */
.hl .n { color: #E6EDF3 } /* Name */
.hl .o { color: #FF7B72; font-weight: bold } /* Operator */
.hl .x { color: #E6EDF3 } /* Other */
.hl .p { color: #E6EDF3 } /* Punctuation */
.hl .ch { color: #8B949E; font-style: italic } /* Comment.Hashbang */
.hl .cm { color: #8B949E; font-style: italic } /* Comment.Multiline */
.hl .cp { color: #8B949E; font-weight: bold; font-style: italic } /* Comment.Preproc */
.hl .cpf { color: #8B949E; font-style: italic } /* Comment.PreprocFile */
.hl .c1 { color: #8B949E; font-style: italic } /* Comment.Single */
.hl .cs { color: #8B949E; font-weight: bold; font-style: italic } /* Comment.Special */
.hl .gd { color: #FFA198; background-color: #490202 } /* Generic.Deleted */
.hl .ge { color: #E6EDF3; font-style: italic } /* Generic.Emph */
.hl .ges { color: #E6EDF3; font-weight: bold; font-style: italic } /* Generic.EmphStrong */
.hl .gr { color: #FFA198 } /* Generic.Error */
.hl .gh { color: #79C0FF; font-weight: bold } /* Generic.Heading */
.hl .gi { color: #56D364; background-color: #0F5323 } /* Generic.Inserted */
.hl .go { color: #8B949E } /* Generic.Output */
.hl .gp { color: #8B949E } /* Generic.Prompt */
.hl .gs { color: #E6EDF3; font-weight: bold } /* Generic.Strong */
.hl .gu { color: #79C0FF } /* Generic.Subheading */
.hl .gt { color: #FF7B72 } /* Generic.Traceback */
.hl .g-Underline { color: #E6EDF3; text-decoration: underline } /* Generic.Underline */
.hl .kc { color: #79C0FF } /* Keyword.Constant */
.hl .kd { color: #FF7B72 } /* Keyword.Declaration */
.hl .kn { color: #FF7B72 } /* Keyword.Namespace */
.hl .kp { color: #79C0FF } /* Keyword.Pseudo */
.hl .kr { color: #FF7B72 } /* Keyword.Reserved */
.hl .kt { color: #FF7B72 } /* Keyword.Type */
.hl .ld { color: #79C0FF } /* Literal.Date */
.hl .m { color: #A5D6FF } /* Literal.Number */
.hl .s { color: #A5D6FF } /* Literal.String */
.hl .na { color: #E6EDF3 } /* Name.Attribute */
.hl .nb { color: #E6EDF3 } /* Name.Builtin */
.hl .nc { color: #F0883E; font-weight: bold } /* Name.Class */
.hl .no { color: #79C0FF; font-weight: bold } /* Name.Constant */
.hl .nd { color: #D2A8FF; font-weight: bold } /* Name.Decorator */
.hl .ni { color: #FFA657 } /* Name.Entity */
.hl .ne { color: #F0883E; font-weight: bold } /* Name.Exception */
.hl .nf { color: #D2A8FF; font-weight: bold } /* Name.Function */
.hl .nl { color: #79C0FF; font-weight: bold } /* Name.Label */
.hl .nn { color: #FF7B72 } /* Name.Namespace */
.hl .nx { color: #E6EDF3 } /* Name.Other */
.hl .py { color: #79C0FF } /* Name.Property */
.hl .nt { color: #7EE787 } /* Name.Tag */
.hl .nv { color: #79C0FF } /* Name.Variable */
.hl .ow { color: #FF7B72; font-weight: bold } /* Operator.Word */
.hl .pm { color: #E6EDF3 } /* Punctuation.Marker */
.hl .w { color: #6E7681 } /* Text.Whitespace */
.hl .mb { color: #A5D6FF } /* Literal.Number.Bin */
.hl .mf { color: #A5D6FF } /* Literal.Number.Float */
.hl .mh { color: #A5D6FF } /* Literal.Number.Hex */
.hl .mi { color: #A5D6FF } /* Literal.Number.Integer */
.hl .mo { color: #A5D6FF } /* Literal.Number.Oct */
.hl .sa { color: #79C0FF } /* Literal.String.Affix */
.hl .sb { color: #A5D6FF } /* Literal.String.Backtick */
.hl .sc { color: #A5D6FF } /* Literal.String.Char */
.hl .dl { color: #79C0FF } /* Literal.String.Delimiter */
.hl .sd { color: #A5D6FF } /* Literal.String.Doc */
.hl .s2 { color: #A5D6FF } /* Literal.String.Double */
.hl .se { color: #79C0FF } /* Literal.String.Escape */
.hl .sh { color: #79C0FF } /* Literal.String.Heredoc */
.hl .si { color: #A5D6FF } /* Literal.String.Interpol */
.hl .sx { color: #A5D6FF } /* Literal.String.Other */
.hl .sr { color: #79C0FF } /* Literal.String.Regex */
.hl .s1 { color: #A5D6FF } /* Literal.String.Single */
.hl .ss { color: #A5D6FF } /* Literal.String.Symbol */
.hl .bp { color: #E6EDF3 } /* Name.Builtin.Pseudo */
.hl .fm { color: #D2A8FF; font-weight: bold } /* Name.Function.Magic */
.hl .vc { color: #79C0FF } /* Name.Variable.Class */
.hl .vg { color: #79C0FF } /* Name.Variable.Global */
.hl .vi { color: #79C0FF } /* Name.Variable.Instance */
.hl .vm { color: #79C0FF } /* Name.Variable.Magic */
.hl .il { color: #A5D6FF } /* Literal.Number.Integer.Long */
}
