.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 .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 .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}:root{--bg:#ffffff;--surface:#f6f8fa;--surface2:#eef1f4;--border:#d0d7de;--text:#1f2328;--muted:#636c76;--accent:#0969da;--accent-soft:#ddf4ff;--radius:8px;--maxw:1180px;--mono:ui-monospace,"SF Mono","JetBrains Mono",Menlo,Consolas,"Liberation Mono",monospace;--sans:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans JP",Meiryo,sans-serif}html[data-theme=dark]{--bg:#0e1116;--surface:#161b22;--surface2:#1c2330;--border:#30363d;--text:#e6edf3;--muted:#8b949e;--accent:#4493f8;--accent-soft:#10243e}*{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth;scroll-padding-top:80px}body{background:var(--bg);color:var(--text);font-family:var(--sans);line-height:1.8;font-size:16px;-webkit-font-smoothing:antialiased}a{color:var(--accent)}.icon{width:1em;height:1em;display:inline-block;vertical-align:-.14em;flex:none;stroke-width:2}.spin{animation:spin .9s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.site-header{position:sticky;top:0;z-index:50;background:var(--bg);border-bottom:1px solid var(--border);backdrop-filter:saturate(180%)blur(8px)}.site-header .inner{max-width:var(--maxw);margin:0 auto;padding:12px 24px;display:flex;align-items:center;gap:20px}.logo{font-family:var(--mono);font-weight:700;font-size:18px;color:var(--text);text-decoration:none;letter-spacing:-.5px}.logo .accent{color:var(--accent)}.nav{display:flex;gap:18px;margin-left:8px}.nav a{color:var(--muted);text-decoration:none;font-size:14px}.nav a:hover{color:var(--text)}.header-spacer{flex:1}.search-box{display:flex;align-items:center;gap:7px;background:var(--surface);border:1px solid var(--border);border-radius:6px;padding:6px 10px;color:var(--muted);font-size:13px;cursor:text}.search-box .icon{width:15px;height:15px}.search-box kbd{font-family:var(--mono);font-size:11px;background:var(--bg);border:1px solid var(--border);border-radius:4px;padding:1px 5px}.theme-toggle{background:var(--surface);border:1px solid var(--border);color:var(--text);width:34px;height:34px;border-radius:6px;cursor:pointer;display:flex;align-items:center;justify-content:center}.theme-toggle .icon{width:17px;height:17px}.theme-toggle:hover{border-color:var(--accent);color:var(--accent)}.hero{border-bottom:1px solid var(--border);background:linear-gradient(180deg,var(--surface),var(--bg))}.hero .inner{max-width:var(--maxw);margin:0 auto;padding:44px 24px 38px}.hero h1{font-size:30px;font-weight:800;letter-spacing:-.5px;margin-bottom:8px;line-height:1.4}.hero h1 .accent{color:var(--accent)}.hero p{color:var(--muted);font-size:15px;margin-bottom:20px}.hero-search{display:flex;align-items:center;gap:9px;max-width:480px;background:var(--bg);border:1px solid var(--border);border-radius:8px;padding:10px 14px;color:var(--muted);font-size:14px;cursor:text}.hero-search .icon{width:17px;height:17px}.hero-search .hk{margin-left:auto;font-family:var(--mono);font-size:11px}.hero-search kbd{font-family:var(--mono);font-size:11px;background:var(--surface);border:1px solid var(--border);border-radius:4px;padding:1px 5px}.layout{max-width:var(--maxw);margin:0 auto;padding:28px 24px 70px;display:grid;grid-template-columns:1fr 260px;gap:46px}@media(max-width:900px){.layout{grid-template-columns:1fr}.side-col{display:none}}.section-label{font-size:12px;text-transform:uppercase;letter-spacing:1px;color:var(--muted);font-weight:700;margin-bottom:14px}.cat-filter{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:22px}.cat-pill{background:var(--surface);border:1px solid var(--border);color:var(--muted);border-radius:20px;padding:5px 14px;font-size:13px;cursor:pointer;font-family:var(--sans);text-decoration:none}.cat-pill:hover{color:var(--text);border-color:var(--accent)}.cat-pill.active{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:600}.post-card{display:block;border:1px solid var(--border);border-radius:var(--radius);padding:18px 20px;margin-bottom:14px;background:var(--surface);text-decoration:none;color:inherit;transition:border-color .15s,transform .15s}.post-card:hover{border-color:var(--accent);transform:translateY(-2px)}.post-cat{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;font-weight:700;padding:3px 9px;border-radius:5px;margin-bottom:9px}.post-cat .icon{width:12px;height:12px}.post-title{font-size:18.5px;font-weight:700;line-height:1.5;margin-bottom:6px;letter-spacing:-.2px}.post-card:hover .post-title{color:var(--accent)}.post-excerpt{color:var(--muted);font-size:14px;line-height:1.75;margin-bottom:12px}.post-meta{display:flex;flex-wrap:wrap;align-items:center;gap:14px;font-size:12.5px;color:var(--muted)}.post-meta>span{display:inline-flex;align-items:center;gap:5px}.post-meta .icon{width:13px;height:13px}.post-tags{font-family:var(--mono);font-size:12px}.post-tags .tg{color:var(--accent);margin-right:8px}.cat-server{color:#4493f8;background:rgba(68,147,248,.14)}.cat-security{color:#f85149;background:rgba(248,81,73,.14)}.cat-network{color:#3fb950;background:rgba(63,185,80,.14)}.cat-db{color:#bc8cff;background:rgba(188,140,255,.14)}.cat-auto{color:#d29922;background:rgba(210,153,34,.14)}.cat-virt{color:#39c5cf;background:rgba(57,197,207,.14)}.pagination{display:flex;align-items:center;justify-content:center;gap:6px;margin-top:28px;flex-wrap:wrap}.pagination a,.pagination span{min-width:34px;height:34px;padding:0 8px;display:flex;align-items:center;justify-content:center;border-radius:6px;border:1px solid var(--border);font-size:13.5px;text-decoration:none;color:var(--text)}.pagination a:hover{border-color:var(--accent);color:var(--accent)}.pagination .current{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:700}.pagination .disabled{opacity:.35}.page-info{text-align:center;color:var(--muted);font-size:12.5px;margin-top:10px}.breadcrumb{font-size:13px;color:var(--muted);margin-bottom:16px}.breadcrumb a{color:var(--muted);text-decoration:none}.breadcrumb a:hover{color:var(--accent)}.article-title{font-size:32px;line-height:1.35;font-weight:800;letter-spacing:-.5px;margin-bottom:14px}.article-meta{display:flex;flex-wrap:wrap;gap:14px;align-items:center;font-size:13px;color:var(--muted);margin-bottom:8px}.article-meta span{display:inline-flex;align-items:center;gap:5px}.article-meta .icon{width:14px;height:14px;opacity:.85}.tag{background:var(--accent-soft);color:var(--accent);font-size:12px;padding:2px 9px;border-radius:20px;font-weight:600;text-decoration:none}.featured-image{width:100%;max-height:380px;object-fit:cover;border-radius:var(--radius);border:1px solid var(--border);margin:18px 0 4px;display:block}.content img{max-width:100%;height:auto;display:block;margin:18px auto;border-radius:var(--radius);border:1px solid var(--border)}.related{margin:48px 0 0;border-top:1px solid var(--border);padding-top:26px}.related h3{font-size:16px;margin-bottom:16px;display:flex;align-items:center;gap:7px}.related h3 .icon{width:16px;height:16px;color:var(--accent)}.related-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:14px}.related-item{display:flex;flex-direction:column;text-decoration:none;color:inherit;border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;background:var(--surface);transition:border-color .15s,transform .15s}.related-item:hover{border-color:var(--accent);transform:translateY(-2px)}.related-item:hover .related-title{color:var(--accent)}.related-item img{width:100%;height:110px;object-fit:cover;display:block}.related-body{padding:10px 12px 11px}.related-title{font-size:13.5px;font-weight:600;line-height:1.5;margin-bottom:5px}.related-meta{font-size:11.5px;color:var(--muted);font-family:var(--mono)}.content{font-size:16px}.content h2{font-size:23px;font-weight:700;margin:42px 0 16px;padding-bottom:8px;border-bottom:1px solid var(--border);scroll-margin-top:80px}.content h3{font-size:18px;font-weight:700;margin:30px 0 12px;scroll-margin-top:80px}.content p{margin:14px 0}.content ul,.content ol{margin:14px 0 14px 26px}.content li{margin:5px 0}.content>p>code,.content li code,.content p code,code.inline{font-family:var(--mono);font-size:.86em;background:var(--surface2);border:1px solid var(--border);border-radius:5px;padding:1px 6px}.anchor{opacity:0;color:var(--muted);text-decoration:none;margin-left:8px;font-size:.7em}.content h2:hover .anchor,.content h3:hover .anchor{opacity:1}.content table{border-collapse:collapse;margin:18px 0;width:100%;font-size:14.5px}.content table th,.content table td{border:1px solid var(--border);padding:8px 12px;text-align:left;vertical-align:top;line-height:1.65}.content table th{background:var(--surface);font-weight:700;font-size:13px;color:var(--muted);text-transform:uppercase;letter-spacing:.3px}.content table tr:nth-child(even) td{background:var(--surface)}.content table strong{color:var(--accent)}.codeblock{margin:20px 0;border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;background:#0d1117}.cb-head{display:flex;align-items:center;gap:8px;background:#1c2230;border-bottom:1px solid var(--border);padding:7px 12px;font-size:12.5px}.cb-file{font-family:var(--mono);color:#e6edf3;font-weight:600}.cb-lang{font-family:var(--mono);color:#8b949e;text-transform:uppercase;font-size:11px;letter-spacing:.5px}.cb-spacer{flex:1}.cb-btn{background:0 0;border:1px solid #30363d;color:#8b949e;border-radius:5px;padding:3px 9px;font-size:12px;cursor:pointer;display:inline-flex;align-items:center;gap:5px;font-family:var(--sans)}.cb-btn .icon{width:13px;height:13px}.cb-btn:hover{border-color:var(--accent);color:var(--accent)}.cb-btn.copied{color:#3fb950;border-color:#3fb950}.codeblock .highlight,.codeblock .lntable{margin:0}.codeblock .lntable{width:100%;border-spacing:0}.codeblock pre.chroma{margin:0;padding:13px 16px;overflow-x:auto;font-family:var(--mono);font-size:13.5px;line-height:1.7;background:#0d1117!important}.codeblock .lntd:first-child{width:1%}.codeblock .lntd:first-child pre.chroma{padding-right:0}.codeblock .lntd:last-child pre.chroma{padding-left:10px}.codeblock .chroma .line{display:flex;min-width:fit-content}.codeblock .chroma .hl{background:rgba(187,128,9,.18);box-shadow:inset 3px 0 #bb8009}.codeblock .chroma .cl{display:inline-block}.codeblock.cmd .chroma .cl::before{content:"$ ";color:#3fb950;font-weight:700;user-select:none}.output{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);margin:8px 0 20px}.output .out-label{font-family:var(--mono);font-size:11px;color:var(--muted);padding:5px 12px;border-bottom:1px solid var(--border);letter-spacing:.5px;display:flex;align-items:center;gap:5px}.output .out-label .icon{width:13px;height:13px}.output pre{margin:0;padding:11px 14px;overflow-x:auto}.output pre code{font-family:var(--mono);font-size:13px;color:var(--muted);background:0 0;line-height:1.65}.ph{background:rgba(187,128,9,.22);border-radius:3px;padding:0 3px;border-bottom:1px dashed #d29922;color:#e3b341;font-weight:600}.ph-set{background:rgba(63,185,80,.18);color:#7ee787;border-bottom:1px solid #3fb950}.varbar{border:1px solid var(--accent);border-radius:var(--radius);margin:24px 0;background:var(--surface);overflow:hidden}.varbar-head{background:var(--accent-soft);color:var(--accent);font-weight:700;font-size:13px;padding:9px 14px;display:flex;align-items:center;gap:7px}.varbar-head .icon{width:15px;height:15px}.varbar-body{padding:8px 14px}.var-row{display:flex;align-items:center;gap:12px;padding:6px 0}.var-row label{width:170px;flex:none;font-size:13.5px}.var-row input{flex:1;min-width:0;font-family:var(--mono);font-size:13px;background:var(--bg);color:var(--text);border:1px solid var(--border);border-radius:6px;padding:6px 10px}.var-row input:focus{outline:none;border-color:var(--accent)}.var-row input.filled{border-color:#3fb950;box-shadow:inset 3px 0 #3fb950}.var-count{flex:none;width:46px;text-align:right;font-size:11.5px;color:var(--muted)}.varbar-foot{display:flex;align-items:center;gap:12px;padding:8px 14px;border-top:1px solid var(--border)}.var-hint{font-size:11.5px;color:var(--muted)}@media(max-width:560px){.var-row{flex-wrap:wrap}.var-row label{width:auto}}.pkg-panel{margin:8px 0 22px}.pkg-result{border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);overflow:hidden}.pkg-row{display:flex;align-items:center;gap:12px;padding:11px 14px;border-bottom:1px solid var(--border);font-size:13.5px;flex-wrap:wrap}.pkg-row:last-child{border-bottom:none}.pkg-name{font-family:var(--mono);font-weight:700;display:inline-flex;align-items:center;gap:6px}.pkg-name .icon{width:15px;height:15px;color:var(--accent)}.pkg-ver{font-family:var(--mono)}.pkg-badge{font-size:11.5px;font-weight:700;padding:2px 9px;border-radius:20px;display:inline-flex;align-items:center;gap:5px}.pkg-badge .icon{width:12px;height:12px}.b-ok{background:rgba(63,185,80,.16);color:#3fb950}.b-warn{background:rgba(210,153,34,.16);color:#d29922}.b-old{background:rgba(248,81,73,.16);color:#f85149}.b-load{background:var(--surface2);color:var(--muted)}.pkg-note{color:var(--muted);font-size:12.5px;flex-basis:100%}.pkg-src{font-size:11px;color:var(--muted);padding:6px 14px;background:var(--surface2);font-family:var(--mono)}.tree{background:#0d1117;border:1px solid var(--border);border-radius:var(--radius);font-family:var(--mono);font-size:13px;line-height:1.85;padding:14px 16px;overflow-x:auto;margin:20px 0;color:#c9d1d9;white-space:pre}.tree .dir{color:#4493f8;font-weight:600}.tree .cmt{color:#6e7681}.callout{border:1px solid var(--border);border-left-width:4px;border-radius:6px;padding:12px 16px;margin:20px 0;background:var(--surface)}.callout .ttl{font-weight:700;font-size:13px;margin-bottom:3px;display:flex;align-items:center;gap:6px}.callout .ttl .icon{width:15px;height:15px}.callout p{margin:4px 0 0;font-size:14.5px}.c-note{border-left-color:#4493f8}.c-note .ttl{color:#4493f8}.c-tip{border-left-color:#3fb950}.c-tip .ttl{color:#3fb950}.c-warn{border-left-color:#d29922}.c-warn .ttl{color:#d29922}.c-danger{border-left-color:#f85149}.c-danger .ttl{color:#f85149}.tabs{margin:20px 0}.tab-btns{display:flex;gap:4px;border-bottom:1px solid var(--border)}.tab-btn{background:0 0;border:none;border-bottom:2px solid transparent;color:var(--muted);padding:8px 14px;cursor:pointer;font-size:13.5px;font-family:var(--sans);font-weight:600}.tab-btn.active{color:var(--accent);border-bottom-color:var(--accent)}.tab-panel{display:none}.tab-panel.active{display:block}.mermaid{margin:20px 0;text-align:center;background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:18px;overflow-x:auto}.mermaid:not([data-processed]){color:transparent;min-height:40px}.mermaid svg{max-width:100%;height:auto}.steps{counter-reset:step;margin:20px 0;padding-left:36px}.steps .step{position:relative;padding-bottom:18px;border-left:2px solid var(--border);padding-left:24px;margin-left:6px}.steps .step:last-child{border-left-color:transparent}.steps .step::before{counter-increment:step;content:counter(step);position:absolute;left:-15px;top:-2px;width:26px;height:26px;border-radius:50%;background:var(--accent);color:#fff;font-weight:700;font-size:13px;display:flex;align-items:center;justify-content:center}.steps .step h4{font-size:15px;margin:0 0 4px}.steps .step p{margin:0}.prereq{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:16px 20px;margin:24px 0}.prereq .ttl{font-size:14px;font-weight:700;margin-bottom:8px;display:flex;align-items:center;gap:7px}.prereq .ttl .icon{width:16px;height:16px;color:var(--accent)}.prereq ul{margin:0 0 0 20px;font-size:14px}.toc{position:sticky;top:80px;font-size:13px}.toc .toc-ttl{font-size:11px;text-transform:uppercase;letter-spacing:1px;color:var(--muted);font-weight:700;margin-bottom:10px}.toc a{display:block;color:var(--muted);text-decoration:none;padding:3px 0 3px 12px;border-left:2px solid var(--border)}.toc a:hover{color:var(--text)}.toc a.active{color:var(--accent);border-left-color:var(--accent);font-weight:600}.toc a.lv3{padding-left:24px;font-size:12.5px}.side-col{display:flex;flex-direction:column;gap:24px}.side-box{border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);overflow:hidden}.side-box h3{font-size:13px;font-weight:700;padding:11px 15px;border-bottom:1px solid var(--border);display:flex;align-items:center;gap:7px}.side-box h3 .icon{width:15px;height:15px;color:var(--accent)}.side-box .body{padding:6px 15px 12px}.cat-list{list-style:none}.cat-list li a{display:flex;justify-content:space-between;align-items:center;padding:7px 0;text-decoration:none;color:var(--text);font-size:13.5px;border-bottom:1px solid var(--border)}.cat-list li:last-child a{border-bottom:none}.cat-list li a:hover{color:var(--accent)}.cat-list .name{display:inline-flex;align-items:center;gap:8px}.cat-list .name .icon{width:14px;height:14px}.cat-list .count{font-family:var(--mono);font-size:12px;color:var(--muted)}.popular{list-style:none;counter-reset:pop}.popular li{counter-increment:pop;display:flex;gap:11px;padding:9px 0;border-bottom:1px solid var(--border)}.popular li:last-child{border-bottom:none}.popular li::before{content:counter(pop);font-family:var(--mono);font-weight:700;color:var(--accent);font-size:14px;flex:none;width:18px}.popular a{font-size:13px;line-height:1.55;text-decoration:none;color:var(--text)}.popular a:hover{color:var(--accent)}.tag-cloud{display:flex;flex-wrap:wrap;gap:7px}.tag-cloud a{font-family:var(--mono);font-size:12px;color:var(--muted);background:var(--bg);border:1px solid var(--border);border-radius:5px;padding:3px 8px;text-decoration:none}.tag-cloud a:hover{color:var(--accent);border-color:var(--accent)}.site-footer{border-top:1px solid var(--border);padding:28px 24px;text-align:center;color:var(--muted);font-size:13px}