:root{--bg:#0b141a;--panel:#101e26;--panel-2:#0e1a21;--code:#0d1a22;--ink:#e9eef0;--muted:#8aa0ab;--accent:#4cc38a;--accent-2:#8fe0b8;--line:#1e3039;--line-2:#182730;--crit:#f26d57;--high:#e8a33d;--sans:"PingFang SC","Microsoft YaHei",system-ui,-apple-system,"Segoe UI",sans-serif;--mono:ui-monospace,"SFMono-Regular",Menlo,Consolas,"Liberation Mono",monospace}*{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth}body{background:var(--bg);color:var(--ink);font-family:var(--sans);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;line-height:1.7}a{color:inherit;text-decoration:none}.wrap{max-width:1080px;margin:0 auto;padding:0 40px}::selection{color:var(--ink);background:#4cc38a40}a:focus-visible,button:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:2px}header.site{border-bottom:1px solid var(--line);backdrop-filter:blur(10px);z-index:5;background:#0b141aeb;position:sticky;top:0}.nav{justify-content:space-between;align-items:center;gap:20px;height:64px;display:flex}.brand{flex:none;align-items:center;gap:10px;display:flex}.brand .wm{width:auto;height:16px}.nav ul{align-items:center;gap:30px;list-style:none;display:flex}.nav ul a{color:var(--muted);border-bottom:1px solid #0000;padding:6px 0;font-size:14px;transition:color .15s,border-color .15s}.nav ul a:hover{color:var(--ink)}.nav ul a.active{color:var(--ink);border-bottom-color:var(--accent)}.mnav{display:none}.nav .meta{flex:none;align-items:center;gap:16px;display:flex}.portal{border:1px solid var(--line);color:var(--muted);border-radius:4px;padding:6px 14px;font-size:13px;transition:border-color .15s,color .15s}.portal:hover{border-color:var(--accent);color:var(--accent)}@media (width<=760px){.wrap{padding:0 22px}.nav ul{display:none}.mnav{border-top:1px solid var(--line-2);scrollbar-width:none;gap:24px;padding-top:11px;padding-bottom:11px;display:flex;overflow-x:auto}.mnav::-webkit-scrollbar{display:none}.mnav a{color:var(--muted);white-space:nowrap;border-bottom:1px solid #0000;padding-bottom:2px;font-size:13.5px}.mnav a:hover{color:var(--ink)}.mnav a.active{color:var(--ink);border-bottom-color:var(--accent)}}.hero{border-bottom:1px solid var(--line);padding:72px 0 52px}.cols{grid-template-columns:1.5fr 1fr;align-items:end;gap:52px;display:grid}.kicker{letter-spacing:.14em;color:var(--muted);text-transform:uppercase;margin-bottom:20px;font-size:12.5px;font-weight:600}.hero h1{letter-spacing:-.015em;max-width:19ch;font-size:42px;font-weight:650;line-height:1.22}.hero p{color:var(--muted);max-width:56ch;margin-top:22px;font-size:16.5px}.facts{border-top:1px solid var(--line);padding-top:16px}.facts dt{letter-spacing:.08em;color:var(--muted);text-transform:uppercase;margin-top:16px;font-size:11.5px;font-weight:600}.facts dt:first-child{margin-top:0}.facts dd{color:var(--ink);margin-top:2px;font-size:14px}section{border-bottom:1px solid var(--line);padding:48px 0}.sec-head{justify-content:space-between;align-items:baseline;margin-bottom:20px;display:flex}.sec-head h2{letter-spacing:-.01em;font-size:21px;font-weight:650}.sec-head a{color:var(--accent);font-size:13.5px}.sec-head a:hover{color:var(--accent-2)}.idx{border-top:1px solid var(--line-2)}.row{border-bottom:1px solid var(--line-2);grid-template-columns:104px 1fr auto;align-items:baseline;gap:22px;padding:18px 0;display:grid}.row .date{font-family:var(--mono);color:var(--muted);font-size:12px}.row .t{font-size:18px;font-weight:550;line-height:1.42;transition:color .15s}.row:hover .t{color:var(--accent-2)}.row .dek{color:var(--muted);max-width:72ch;margin-top:4px;font-size:14px}.row .tags{flex-wrap:wrap;gap:7px;margin-top:10px;display:flex}.tag{font-family:var(--mono);letter-spacing:.04em;color:var(--muted);border:1px solid var(--line);background:var(--panel-2);border-radius:3px;padding:2px 7px;font-size:10.5px}.row .rt{font-family:var(--mono);color:var(--muted);white-space:nowrap;font-size:12px}.reports{grid-template-columns:1fr 1fr;gap:14px;display:grid}.rep{background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:20px 22px;transition:border-color .15s;display:block}.rep:hover{border-color:#2c4650}.rep .top{align-items:center;gap:10px;margin-bottom:11px;display:flex}.sev{font-family:var(--mono);letter-spacing:.08em;color:#0b141a;border-radius:3px;padding:3px 9px;font-size:10.5px;font-weight:600}.sev.c{background:var(--crit)}.sev.h{background:var(--high)}.cvss{font-family:var(--mono);color:var(--muted);font-size:12px}.rep h3{font-size:17.5px;font-weight:550;line-height:1.4}.rep .metaline{font-family:var(--mono);color:var(--muted);flex-wrap:wrap;gap:13px;margin-top:13px;font-size:11px;display:flex}.rep .lock{color:var(--accent)}.areas{grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:14px;display:grid}.area{border:1px solid var(--line);background:var(--panel-2);border-radius:8px;padding:18px 20px}.area h3{margin-bottom:6px;font-size:15px;font-weight:600}.area p{color:var(--muted);font-size:13.5px;line-height:1.6}footer.site{border-top:1px solid var(--line);background:var(--panel-2);margin-top:0;padding:44px 0 56px}.foot{color:var(--muted);flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:36px;font-size:13.5px;display:flex}.foot .col b{color:var(--ink);margin-bottom:10px;font-size:13px;font-weight:550;display:block}.foot .col a{color:var(--muted);padding:3px 0;font-size:13px;transition:color .15s;display:block}.foot .col a:hover{color:var(--accent)}.foot .sig{color:var(--muted);font-size:12px;line-height:1.9}.foot .sig b{color:var(--ink);letter-spacing:.04em;font-weight:600}@media (width<=760px){.cols{grid-template-columns:1fr;gap:32px}.hero{padding:52px 0 40px}.hero h1{font-size:30px}.reports{grid-template-columns:1fr}}.empty{color:var(--muted);padding:8px 0 2px;font-size:15px}.empty-panel{background:var(--panel-2);border:1px solid var(--line);color:var(--muted);border-radius:8px;margin-top:14px;padding:22px 24px;font-size:14.5px}.empty-panel b{color:var(--ink);font-weight:550}.empty-panel .mono{color:var(--muted);letter-spacing:.1em;text-transform:uppercase;margin-bottom:8px;font-size:11.5px;font-weight:600;display:block}.page-head{border-bottom:1px solid var(--line);padding:48px 0 28px}.page-head .eyebrow{letter-spacing:.14em;color:var(--muted);text-transform:uppercase;margin-bottom:16px;font-size:12.5px;font-weight:600}.page-head h1{letter-spacing:-.015em;font-size:34px;font-weight:650}.page-head p{color:var(--muted);max-width:62ch;margin-top:14px;font-size:16px}.crumb{color:var(--muted);padding:26px 0 0;font-size:13px}.crumb a:hover{color:var(--accent)}.crumb .sep{opacity:.5;margin:0 7px}.crumb .cur{color:var(--accent)}.art-head{border-bottom:1px solid var(--line);padding:18px 0 24px}.dtags{flex-wrap:wrap;gap:7px;margin-bottom:14px;display:flex}.art-title{letter-spacing:-.015em;max-width:26ch;font-size:32px;font-weight:650;line-height:1.24}.dek{color:var(--muted);max-width:62ch;margin-top:14px;font-size:17px}.byline{color:var(--muted);flex-wrap:wrap;align-items:center;gap:13px;margin-top:22px;font-size:13px;display:flex}.byline .who{align-items:center;gap:9px;display:flex}.byline .ava{width:30px;height:30px;color:var(--accent-2);font-size:12px;font-weight:600;font-family:var(--mono);background:#14262f;border-radius:50%;justify-content:center;align-items:center;display:flex}.byline .who b{color:var(--ink);font-weight:550}.byline .dot{opacity:.4}.art-layout{grid-template-columns:1fr 200px;align-items:start;gap:52px;padding:34px 0 20px;display:grid}.prose{min-width:0;font-size:16.5px;line-height:1.75}.prose>p{margin:0 0 20px}.prose>h2{margin:38px 0 14px;scroll-margin-top:82px;font-size:20px;font-weight:650}.prose>h3{margin:26px 0 10px;scroll-margin-top:82px;font-size:16.5px;font-weight:600}.prose a{color:var(--accent);border-bottom:1px solid #4cc38a59}.prose a:hover{border-bottom-color:var(--accent)}.prose ul,.prose ol{margin:0 0 20px;padding-left:22px}.prose li{margin:7px 0}.prose strong{color:var(--ink);font-weight:600}.prose :not(pre)>code{font-family:var(--mono);border:1px solid var(--line);color:var(--accent-2);word-break:break-word;background:#132630;border-radius:4px;padding:1px 6px;font-size:.88em}.prose pre{border:1px solid var(--line);border-radius:8px;margin:0 0 22px;padding:16px 18px;font-size:13.5px;line-height:1.75;overflow-x:auto;background:var(--code)!important}.prose pre code{font-family:var(--mono);background:0 0;border:none;padding:0}.prose blockquote{border-left:3px solid var(--accent);color:var(--ink);margin:0 0 22px;padding:2px 0 2px 18px}.prose blockquote p{margin:0}.prose table{border-collapse:collapse;max-width:100%;margin:0 0 22px;font-size:14px;display:block;overflow-x:auto}.prose th,.prose td{text-align:left;border-bottom:1px solid var(--line-2);white-space:nowrap;padding:8px 13px}.prose th{color:var(--muted);font-weight:500;font-family:var(--mono);letter-spacing:.03em;font-size:12px}.prose figure{margin:0 0 24px}.prose figure.diagram{background:var(--panel-2);border:1px solid var(--line);border-radius:8px;padding:16px}.prose figure.diagram svg{width:100%;height:auto;display:block}.prose hr{border:none;border-top:1px solid var(--line);margin:30px 0}.prose>p:last-child{color:var(--muted);font-size:14.5px}.callout{background:var(--panel);border:1px solid var(--line);border-left:3px solid var(--crit);border-radius:0 8px 8px 0;margin:0 0 26px;padding:16px 20px}.callout .cl-top{flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:8px;display:flex}.sev-tag{font-family:var(--mono);letter-spacing:.08em;color:#0b141a;background:var(--crit);border-radius:3px;padding:3px 9px;font-size:10.5px;font-weight:600}.callout .cl-meta{font-family:var(--mono);color:var(--muted);font-size:12px}.callout .cl-body{color:var(--ink);font-size:14.5px}aside.toc{font-size:13px;position:sticky;top:88px}aside.toc .lbl{letter-spacing:.1em;color:var(--muted);text-transform:uppercase;margin-bottom:12px;font-size:11.5px;font-weight:600}aside.toc a{border-left:2px solid var(--line);color:var(--muted);padding:5px 0 5px 12px;line-height:1.4;transition:color .15s,border-color .15s;display:block}aside.toc a:hover{color:var(--ink);border-left-color:var(--muted)}@media (width<=860px){.art-layout{grid-template-columns:1fr;gap:0}aside.toc{display:none}.art-title{font-size:26px}.page-head h1{font-size:27px}}
