:root{--body-bg:#f5f5fa;--card-bg:#ffffff;--card-bg-hover:#fafafc;--text-main:#1a1a1a;--text-sec:#6b6b70;--text-ter:#8a8a90;--border:rgba(0, 0, 0, 0.07);--accent:#34495e;--accent-text:#ffffff;--link:#2c6fbb;--mark:rgba(255, 196, 0, 0.38);--code-bg:rgba(0, 0, 0, 0.05);--radius:10px;--shadow-1:0 4px 8px rgba(0, 0, 0, 0.04), 0 0 2px rgba(0, 0, 0, 0.06), 0 0 1px rgba(0, 0, 0, 0.04);--shadow-2:0 10px 20px rgba(0, 0, 0, 0.05), 0 2px 6px rgba(0, 0, 0, 0.05), 0 0 1px rgba(0, 0, 0, 0.04);--font:"Pretendard Variable", Pretendard, -apple-system, BlinkMacSystemFont, "Apple SD Gothic Neo", "Malgun Gothic", "Segoe UI", sans-serif;--mono:ui-monospace, SFMono-Regular, Menlo, Consolas, "D2Coding", monospace;color-scheme:light}[data-scheme=dark]{--body-bg:#2b2b2e;--card-bg:#3a3a3e;--card-bg-hover:#404045;--text-main:rgba(255, 255, 255, 0.92);--text-sec:rgba(255, 255, 255, 0.66);--text-ter:rgba(255, 255, 255, 0.5);--border:rgba(255, 255, 255, 0.1);--accent:#ecf0f1;--accent-text:#1a1a1a;--link:#8ab4f8;--mark:rgba(255, 196, 0, 0.3);--code-bg:rgba(255, 255, 255, 0.08);--shadow-1:0 4px 8px rgba(0, 0, 0, 0.12), 0 0 1px rgba(0, 0, 0, 0.2);--shadow-2:0 10px 20px rgba(0, 0, 0, 0.2), 0 0 1px rgba(0, 0, 0, 0.3);color-scheme:dark}*,*::before,*::after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;scroll-padding-top:24px;overflow-x:clip}body{margin:0;background:var(--body-bg);color:var(--text-main);font-family:var(--font);font-size:16px;line-height:1.6;word-break:keep-all;overflow-wrap:anywhere;transition:background-color .3s ease}a{color:inherit;text-decoration:none}img{max-width:100%}button{font:inherit;color:inherit}.icon{width:20px;height:20px;flex-shrink:0}.container{display:flex;align-items:flex-start;gap:32px;max-width:1440px;margin:0 auto;padding:0 24px}.main{flex:1;min-width:0;padding:40px 0 24px}.sidebar{flex-shrink:0;position:sticky;top:0}.left-sidebar{width:190px;height:100vh;padding:36px 0 28px;display:flex;flex-direction:column;gap:24px}.right-sidebar{width:300px;max-height:100vh;overflow-y:auto;overflow-x:hidden;padding:40px 4px 32px;scrollbar-width:none;-ms-overflow-style:none}.right-sidebar::-webkit-scrollbar,.toc::-webkit-scrollbar{display:none}.site-info{display:flex;flex-direction:row;align-items:center;gap:12px}.site-avatar{position:relative;width:48px;height:48px;display:block;flex-shrink:0}.site-avatar img,.avatar-fallback{width:48px;height:48px;border-radius:50%;object-fit:cover;box-shadow:var(--shadow-2);display:block}.avatar-fallback{display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#34495e 0%,#5b7db1 100%);color:#fff;font-size:22px;font-weight:800;letter-spacing:-.02em}.avatar-emoji{position:absolute;right:-4px;bottom:2px;width:20px;height:20px;border-radius:50%;background:var(--card-bg);box-shadow:var(--shadow-1);display:flex;align-items:center;justify-content:center;font-size:11px}.site-name{margin:0;font-size:1.15rem;font-weight:800;letter-spacing:-.02em;line-height:1.3}.site-description{margin:1px 0 0;color:var(--text-sec);font-size:.8rem;line-height:1.4}.site-visits{margin:3px 0 0;color:var(--text-ter);font-size:.74rem}.site-visits strong{color:var(--text-sec);font-weight:700}.menu{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:2px;flex:1}.menu a,#dark-mode-toggle{display:flex;align-items:center;gap:12px;padding:7px 0;color:var(--text-sec);font-size:1rem;font-weight:500;transition:color .2s}.menu a:hover,#dark-mode-toggle:hover{color:var(--text-main)}.menu li.current a{color:var(--text-main);font-weight:700}.menu li.current .icon{stroke-width:2.4}.menu-bottom{margin-top:auto}.menu .icon{width:18px;height:18px}#dark-mode-toggle{background:0 0;border:0;cursor:pointer;width:100%;text-align:left}.switch{width:36px;height:20px;border-radius:999px;background:var(--border);position:relative;flex-shrink:0;transition:background .25s;box-shadow:inset 0 0 0 1.5px var(--text-ter)}.switch span{position:absolute;top:3px;left:3px;width:14px;height:14px;border-radius:50%;background:var(--text-sec);transition:transform .25s,background .25s}[data-scheme=dark] .switch{background:var(--accent);box-shadow:none}[data-scheme=dark] .switch span{transform:translateX(16px);background:var(--accent-text)}.menu-toggle{display:none}.article-list{display:flex;flex-direction:column;gap:28px}.article-card,.main-article,.section-card,.widget-card,.compact-list,.search-form,.term-card,.related-card,.post-nav a{background:var(--card-bg);border-radius:var(--radius);box-shadow:var(--shadow-1)}.article-card{overflow:hidden;transition:box-shadow .3s ease}.article-card:hover{box-shadow:var(--shadow-2)}.article-card .article-image img{width:100%;height:240px;object-fit:cover;display:block}.article-details{padding:26px 30px 28px;display:flex;flex-direction:column;gap:12px}.article-category{display:flex;flex-wrap:wrap;gap:8px}.article-category a{background:var(--cat,var(--accent));color:#fff;font-size:.8rem;font-weight:700;padding:5px 12px;border-radius:6px;letter-spacing:.01em;transition:filter .2s}.article-category a:hover{filter:brightness(1.1)}.article-title{margin:0;font-size:1.55rem;font-weight:800;line-height:1.38;letter-spacing:-.02em}.article-title a:hover{text-decoration:underline;text-underline-offset:4px;text-decoration-thickness:2px}.article-subtitle{margin:0;color:var(--text-sec);font-size:1rem;line-height:1.65}.article-time{display:flex;flex-wrap:wrap;gap:18px;color:var(--text-ter);font-size:.9rem;margin-top:4px}.article-time>div{display:flex;align-items:center;gap:6px}.article-time .icon{width:18px;height:18px}.pagination{display:inline-flex;margin-top:28px;overflow:hidden;background:var(--card-bg);border-radius:var(--radius);box-shadow:var(--shadow-1)}.page-link{min-width:44px;padding:10px 14px;text-align:center;color:var(--text-sec);font-weight:600}.page-link:hover{color:var(--text-main);background:var(--card-bg-hover)}.page-link.current{background:var(--accent);color:var(--accent-text)}.page-link.dots{color:var(--text-ter)}.section-card{display:flex;justify-content:space-between;align-items:flex-end;gap:16px;padding:26px 30px;margin-bottom:28px}.section-label{margin:0;font-size:.85rem;color:var(--text-ter);font-weight:600}.section-title{margin:2px 0 0;font-size:1.75rem;font-weight:800;letter-spacing:-.02em}.section-description{margin:6px 0 0;color:var(--text-sec)}.section-description a{color:var(--link)}.section-count{margin:0;color:var(--text-sec);font-weight:600;white-space:nowrap}.term-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:16px;margin-bottom:32px}.term-card{padding:20px 22px;display:flex;flex-direction:column;gap:4px;transition:box-shadow .3s,transform .3s}.term-card:hover{box-shadow:var(--shadow-2);transform:translateY(-2px)}.term-name{font-weight:800;font-size:1.15rem}.term-count{color:var(--text-ter);font-size:.88rem}.archive-heading{font-size:1.3rem;font-weight:800;margin:8px 0 14px}.compact-list{overflow:hidden;margin-bottom:32px}.compact-item+.compact-item{border-top:1px solid var(--border)}.compact-item>a{display:flex;align-items:center;justify-content:space-between;gap:20px;padding:18px 24px;transition:background .2s}.compact-item>a:hover{background:var(--card-bg-hover)}.compact-details{min-width:0;display:flex;flex-direction:column;gap:4px}.compact-title{margin:0;font-size:1.08rem;font-weight:700;line-height:1.45}.compact-item time,.compact-meta{color:var(--text-ter);font-size:.86rem}.compact-excerpt{margin:2px 0 0;color:var(--text-sec);font-size:.93rem;line-height:1.6}.compact-thumb{flex-shrink:0;width:64px;height:64px;border-radius:8px;overflow:hidden}.compact-thumb img{width:100%;height:100%;object-fit:cover;display:block}mark{background:var(--mark);color:inherit;border-radius:3px;padding:0 2px}.search-form{padding:22px 26px;margin-bottom:20px}.search-form label{display:block;font-size:.85rem;font-weight:600;color:var(--text-ter);margin-bottom:6px}.search-row{display:flex;align-items:center;gap:12px}.search-row input{flex:1;min-width:0;border:0;outline:0;background:0 0;font:inherit;font-size:1.45rem;font-weight:700;color:var(--text-main);padding:4px 0}.search-row input::placeholder{color:var(--text-ter);font-weight:500}.search-row button,.widget-search button{border:0;background:0 0;cursor:pointer;color:var(--text-sec);padding:6px;display:flex}.search-row button .icon{width:26px;height:26px}.search-status{margin:4px 4px 16px;font-size:1rem;font-weight:700;color:var(--text-sec);min-height:1.5em}.search-status small{font-weight:500;color:var(--text-ter);margin-left:6px}.widget{margin-bottom:36px}.widget-icon{color:var(--text-main)}.widget-icon .icon{width:30px;height:30px;stroke-width:1.6}.widget-title{margin:6px 0 14px;font-size:1.1rem;font-weight:800}.widget-search{display:flex;align-items:center;background:var(--card-bg);border-radius:var(--radius);box-shadow:var(--shadow-1);padding:4px 8px 4px 18px}.widget-search input{flex:1;min-width:0;border:0;outline:0;background:0 0;font:inherit;color:var(--text-main);padding:10px 0}.widget-search input::placeholder{color:var(--text-ter)}.widget-list{overflow:hidden}.widget-list a{display:flex;justify-content:space-between;padding:13px 20px;font-weight:600;transition:background .2s}.widget-list a+a{border-top:1px solid var(--border)}.widget-list a:hover{background:var(--card-bg-hover)}.widget-list .count{color:var(--text-ter);font-weight:500}.tag-cloud{display:flex;flex-wrap:wrap;gap:9px}.tag-cloud a{background:var(--card-bg);box-shadow:var(--shadow-1);border-radius:8px;padding:7px 14px;font-size:.88rem;color:var(--text-sec);transition:box-shadow .2s,color .2s}.tag-cloud a:hover{box-shadow:var(--shadow-2);color:var(--text-main)}.toc{padding:14px 8px;max-height:calc(100vh - 180px);overflow-y:auto;scrollbar-width:none}.toc ul,.toc-inline ul{list-style:none;margin:0;padding:0}.toc ul ul,.toc-inline ul ul{padding-left:14px}.toc a{display:block;padding:6px 12px;border-radius:6px;color:var(--text-sec);font-size:.92rem;line-height:1.45;border-left:3px solid transparent;transition:all .2s}.toc a:hover{color:var(--text-main);background:var(--card-bg-hover)}.toc a.active{color:var(--text-main);font-weight:700;border-left-color:var(--accent);background:var(--card-bg-hover)}.toc-inline{display:none;margin:0 30px 8px;padding:12px 18px;border-radius:8px;background:var(--code-bg)}.toc-inline summary{cursor:pointer;font-weight:700;display:flex;align-items:center;gap:8px;list-style:none}.toc-inline summary::-webkit-details-marker{display:none}.toc-inline nav{margin-top:8px}.toc-inline a{display:block;padding:4px 0;color:var(--text-sec);font-size:.95rem}.main-article{overflow:hidden}.main-article .article-image img{width:100%;max-height:420px;object-fit:cover;display:block}.main-article .article-details{padding:32px 36px 20px}.main-article .article-title{font-size:2.05rem;line-height:1.3}.article-content{padding:8px 36px 32px;font-size:1.06rem;line-height:1.9}.article-content>:first-child{margin-top:0}.article-content h2,.article-content h3,.article-content h4{line-height:1.4;letter-spacing:-.015em;margin:2em 0 .7em;scroll-margin-top:24px}.article-content h2{font-size:1.55rem;padding-bottom:.3em;border-bottom:1px solid var(--border)}.article-content h3{font-size:1.28rem}.article-content h4{font-size:1.1rem}.article-content p{margin:0 0 1.3em}.article-content a{color:var(--link);text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px}.article-content img{display:block;margin:1.6em auto;border-radius:8px;height:auto}.article-content blockquote{margin:1.5em 0;padding:14px 20px;border-left:4px solid var(--accent);background:var(--code-bg);border-radius:0 8px 8px 0;color:var(--text-sec)}.article-content blockquote p:last-child{margin-bottom:0}.article-content ul,.article-content ol{padding-left:1.5em;margin:0 0 1.3em}.article-content li+li{margin-top:.35em}.article-content code{font-family:var(--mono);font-size:.88em;background:var(--code-bg);padding:2px 6px;border-radius:5px}.article-content pre{font-size:.9rem;line-height:1.6;padding:18px 20px;border-radius:8px;overflow-x:auto;margin:1.5em 0;background:#272822;color:#f8f8f2}.article-content pre code{background:0 0;padding:0;font-size:inherit}.article-content .highlight pre{margin:0}.article-content .highlight{margin:1.5em 0}.article-content hr{border:0;border-top:1px solid var(--border);margin:2.5em 0}.article-content table{width:100%;border-collapse:collapse;margin:1.5em 0;font-size:.95rem;display:block;overflow-x:auto}.article-content th,.article-content td{border:1px solid var(--border);padding:9px 12px;text-align:left}.article-content th{background:var(--code-bg)}.article-footer{padding:0 36px 30px}.article-tags{display:flex;flex-wrap:wrap;gap:8px}.article-tags a{background:var(--code-bg);color:var(--text-sec);padding:5px 12px;border-radius:6px;font-size:.88rem;font-weight:600}.article-tags a:hover{color:var(--text-main)}.lastmod{margin:16px 0 0;color:var(--text-ter);font-size:.88rem}.post-nav{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:28px}.post-nav a{padding:18px 22px;display:flex;flex-direction:column;gap:4px;transition:box-shadow .3s}.post-nav a:hover{box-shadow:var(--shadow-2)}.post-nav a span{display:flex;align-items:center;gap:6px;color:var(--text-ter);font-size:.86rem}.post-nav .next{text-align:right;align-items:flex-end}.post-nav .icon{width:16px;height:16px}.related{margin-top:36px}.related-title{font-size:1.3rem;font-weight:800;margin:0 0 14px}.related-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:16px}.related-card{overflow:hidden;display:flex;flex-direction:column;transition:box-shadow .3s}.related-card:hover{box-shadow:var(--shadow-2)}.related-image img{width:100%;height:120px;object-fit:cover;display:block}.related-details{padding:14px 16px;display:flex;flex-direction:column;gap:4px}.related-details time{color:var(--text-ter);font-size:.84rem}.site-footer{margin-top:48px;padding:24px 4px;color:var(--text-ter);font-size:.88rem}.site-footer p{margin:0 0 4px}.footer-links{display:flex;flex-wrap:wrap;align-items:center;row-gap:4px}.footer-links a{color:var(--text-sec);font-weight:500}.footer-links>*+*::before{content:"·";margin:0 10px;color:var(--text-ter)}.site-footer a{display:inline-flex;align-items:center;gap:4px}.site-footer a:hover{color:var(--text-main)}.site-footer .icon{width:15px;height:15px}.empty{color:var(--text-sec)}@media(max-width:1199px){.right-sidebar{display:none}.toc-inline{display:block}}@media(max-width:767px){.container{flex-direction:column;gap:0;padding:0 16px}.left-sidebar{position:relative;width:100%;height:auto;padding:24px 0 8px;gap:0}.site-info{flex-direction:row;align-items:center;gap:14px;padding-right:48px}.site-avatar,.site-avatar img,.avatar-fallback{width:48px;height:48px}.avatar-fallback{font-size:22px}.site-name{font-size:1.2rem}.site-description{font-size:.85rem;margin:0}.site-visits{margin-top:2px;font-size:.78rem}.menu-toggle{display:flex;position:absolute;right:0;top:34px;background:var(--card-bg);border:0;border-radius:8px;box-shadow:var(--shadow-1);padding:8px;cursor:pointer}.menu{display:none;margin-top:18px;padding:8px 18px;background:var(--card-bg);border-radius:var(--radius);box-shadow:var(--shadow-1)}body.menu-open .menu{display:flex}.menu-bottom{margin-top:4px;border-top:1px solid var(--border);padding-top:4px}.main{padding-top:16px}.article-card .article-image img{height:180px}.article-details,.main-article .article-details{padding:20px 20px 22px}.article-title{font-size:1.3rem}.main-article .article-title{font-size:1.6rem}.article-content{padding:4px 20px 24px;font-size:1.02rem}.article-footer{padding:0 20px 22px}.toc-inline{margin:0 20px 8px}.section-card{padding:20px;flex-direction:column;align-items:flex-start}.compact-item>a{padding:16px 18px}.post-nav{grid-template-columns:1fr}}.ad-slot{margin-bottom:36px;min-height:250px;width:100%;max-width:100%;overflow:hidden}.ad-slot ins,.ad-slot iframe{max-width:100%!important}.ad-slot .widget-title{margin-top:0;font-size:.75rem;font-weight:600;color:var(--text-ter)}.reading-progress{position:fixed;top:0;left:0;right:0;height:3px;z-index:50;background:var(--accent);transform-origin:0 50%;transform:scaleX(0);transition:transform .08s linear;pointer-events:none}.back-to-top{position:fixed;right:24px;bottom:24px;z-index:40;width:44px;height:44px;border:0;border-radius:50%;cursor:pointer;display:flex;align-items:center;justify-content:center;background:var(--card-bg);color:var(--text-main);box-shadow:var(--shadow-2);opacity:0;visibility:hidden;transform:translateY(10px);transition:opacity .25s,transform .25s,visibility .25s}.back-to-top.show{opacity:1;visibility:visible;transform:none}.back-to-top:hover{background:var(--accent);color:var(--accent-text)}.article-content .has-copy{position:relative}.copy-code{position:absolute;top:8px;right:8px;display:flex;align-items:center;gap:4px;padding:4px 9px;border:0;border-radius:6px;cursor:pointer;font-size:.75rem;font-family:var(--font);background:rgba(255,255,255,.12);color:rgba(255,255,255,.8);opacity:0;transition:opacity .2s,background .2s}.copy-code .icon{width:14px;height:14px}.has-copy:hover .copy-code,.copy-code:focus-visible,.copy-code.done{opacity:1}.copy-code:hover{background:rgba(255,255,255,.22);color:#fff}@media(hover:none){.copy-code{opacity:1}}.article-content img.zoomable{cursor:zoom-in}.lightbox{position:fixed;inset:0;z-index:100;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:24px;background:rgba(0,0,0,.86);cursor:zoom-out;opacity:0;visibility:hidden;transition:opacity .2s,visibility .2s}.lightbox.open{opacity:1;visibility:visible}.lightbox img{max-width:100%;max-height:calc(100vh - 90px);object-fit:contain;border-radius:6px}.lightbox-caption{margin:0;color:rgba(255,255,255,.75);font-size:.9rem}body.no-scroll{overflow:hidden}.comments{margin-top:36px}.comments-card{background:var(--card-bg);border-radius:var(--radius);box-shadow:var(--shadow-1);padding:20px 24px}.main-article.is-page .article-details{padding-bottom:8px}.contact-box{display:flex;flex-wrap:wrap;gap:12px;margin:1.2em 0 1.6em}.article-content .contact-box a{display:inline-flex;align-items:center;gap:8px;text-decoration:none;padding:12px 18px;border-radius:8px;background:var(--accent);color:var(--accent-text);font-weight:700}.contact-box .icon{width:18px;height:18px}@media(max-width:767px){.back-to-top{right:16px;bottom:16px;width:40px;height:40px}}