/* Research section (single-page). Builds on styles.css tokens. Hero dark; body is the light "paper" surface. */
.rhero h1{max-width:20ch}
.rbadges{display:flex;flex-wrap:wrap;gap:10px;margin-top:26px}
.rbadge{display:inline-flex;flex-direction:column;border:1px solid var(--line2);border-radius:9px;overflow:hidden;background:var(--panel);min-width:0}
.rbadge .k{font-family:var(--fm);font-size:9.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--dim);padding:5px 10px 2px}
.rbadge .v{font-weight:700;font-size:14px;color:var(--tx);padding:0 10px 6px;font-family:var(--fd)}
.rbadge.rb-crit .v{color:#FF8E91}.rbadge.rb-crit{border-color:rgba(229,72,77,.5);background:rgba(229,72,77,.08)}
.rbadge.rb-ok .v{color:#5FD3A3}.rbadge.rb-ok{border-color:rgba(47,184,122,.45);background:rgba(47,184,122,.07)}
.rbadge.rb-ai .v{color:var(--teal2)}.rbadge.rb-ai{border-color:rgba(27,195,209,.45);background:var(--tealdim)}
.rbadges.sm .rbadge{flex-direction:row;align-items:center;gap:6px}
.rbadges.sm .rbadge .k{padding:4px 2px 4px 9px}.rbadges.sm .rbadge .v{padding:4px 9px 4px 0;font-size:12.5px}
.rmeta{margin-top:22px;font-size:12px;color:var(--dim);letter-spacing:.03em}

/* sticky section nav (links, not tabs) */
.rsecnav{position:sticky;top:calc(var(--navh) + env(safe-area-inset-top,0px));z-index:30;background:rgba(243,246,250,.97);backdrop-filter:blur(8px);border-bottom:1px solid var(--pline)}
.rsecnav .wrap{display:flex;align-items:center;gap:16px}
.rsecnav-lab{font-family:var(--fm);font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:#8A97AC;flex:0 0 auto}
.rsecnav-links{display:flex;gap:2px;overflow-x:auto;scrollbar-width:none}
.rsecnav-links::-webkit-scrollbar{display:none}
.rsecnav-links a{white-space:nowrap;padding:12px 11px;font-size:13.5px;font-weight:600;color:var(--pmut);text-decoration:none;border-bottom:2px solid transparent}
.rsecnav-links a:hover{color:var(--ptx)}
.rsecnav-links a.on{color:#0B6E79;border-bottom-color:#0E9AA8}
html:has(.rsecnav){scroll-padding-top:calc(var(--navh) + 60px)}
@media (max-width:620px){.rsecnav-lab{display:none}}

.rpage{padding-block:0 72px;color-scheme:light}
.rpage a{color:#0B6E79}
.rsec{padding-block:48px 8px;border-top:1px solid var(--pline);scroll-margin-top:calc(var(--navh) + 70px)}
.rsec:first-child{border-top:0}
.rsec-hd{display:flex;align-items:baseline;gap:14px;margin-bottom:20px}
.rsec-no{font-family:var(--fm);font-size:13px;font-weight:600;color:#0E9AA8;background:#E3F5F7;border:1px solid #A9DDE2;border-radius:7px;padding:4px 9px;flex:0 0 auto}
.rsec-hd h2{font-size:clamp(24px,3vw,34px);color:var(--ptx);max-width:none}
.rsec-intro{max-width:92ch;margin:-6px 0 22px;color:var(--pmut);line-height:1.6}
.rinfo-hd{margin:30px 0 14px}
.rinfo-hd h3{font-size:18px;color:var(--ptx);margin:0}
.rinfo-hd .mut{margin:4px 0 0;color:var(--pmut);font-size:14px}

.rprose{max-width:74ch}
.rprose h3{font-size:21px;color:var(--ptx);margin:28px 0 12px}
.rprose h3:first-child{margin-top:0}
.rprose h4{font-size:16px;color:var(--ptx);margin:22px 0 8px}
.rprose p{color:#2A3850;line-height:1.7;margin:0 0 14px}
.rprose ul{margin:0 0 16px;padding-left:22px}
.rprose li{color:#2A3850;line-height:1.65;margin-bottom:8px}
.rprose code{font-family:var(--fm);font-size:13px;background:#ECF1F6;border:1px solid #DBE3EC;border-radius:5px;padding:1px 5px;color:#0B3A52;overflow-wrap:anywhere}
.rprose strong{color:#17263E}
.rnote{font-size:13px;color:#6A7890;border-left:3px solid #C9D5E4;padding-left:12px;margin-top:16px}
.rcref{font-family:var(--fm);font-size:11px;color:#0B6E79;text-decoration:none;white-space:nowrap}
.rcref:hover{text-decoration:underline}

/* KPI strip */
.rkpis{display:grid;grid-template-columns:repeat(6,1fr);gap:12px;margin:0 0 30px}
.rkpi{background:#fff;border:1px solid var(--pline);border-radius:12px;padding:16px 16px 14px;display:flex;flex-direction:column;gap:4px;border-top:3px solid #C9D5E4}
.rkpi-k{font-family:var(--fm);font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:#5C6C86;line-height:1.3}
.rkpi-v{font-family:var(--fd);font-size:clamp(20px,2vw,26px);font-weight:800;color:var(--ptx);letter-spacing:-.02em;line-height:1.1}
.rkpi-s{font-size:11.5px;color:var(--pmut);line-height:1.4}
.rk-crit{border-top-color:#E5484D}.rk-crit .rkpi-v{color:#B42318}
.rk-ok{border-top-color:#2FB87A}.rk-ok .rkpi-v{color:#1B7A4E}
.rk-n{border-top-color:#0E9AA8}
@media (max-width:1100px){.rkpis{grid-template-columns:repeat(3,1fr)}}
@media (max-width:560px){.rkpis{grid-template-columns:1fr 1fr}}

.rgrid2{display:grid;grid-template-columns:1.6fr 1fr;gap:30px;align-items:start}
@media (max-width:960px){.rgrid2{grid-template-columns:1fr}}
.rfacts{background:#fff;border:1px solid var(--pline);border-radius:12px;padding:20px 22px;position:sticky;top:calc(var(--navh) + 110px)}
.rfacts h3{font-size:14px;margin:0 0 12px;font-family:var(--fm);letter-spacing:.08em;text-transform:uppercase;color:#5C6C86}
.rfacts dl{margin:0;display:grid;grid-template-columns:1fr;gap:10px}
.rfacts dt{font-family:var(--fm);font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;color:#8A97AC}
.rfacts dd{margin:2px 0 0;font-size:14px;color:#17263E;line-height:1.4}
.rfacts .rnote{margin-top:16px;border-top:1px solid var(--pline);border-left:0;padding:12px 0 0}
@media (max-width:960px){.rfacts{position:static}}

/* CVSS vector breakdown */
.rcvss{display:grid;grid-template-columns:1fr 1.3fr;gap:26px;align-items:start;background:#0B1830;border-radius:14px;padding:clamp(18px,3vw,30px)}
.rmeter-top{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:8px}
.rmeter-lab{font-family:var(--fm);font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:#9AA9C2}
.rmeter-score{font-family:var(--fd);font-size:34px;font-weight:800;color:#FF8E91}
.rmeter-score small{font-size:16px;color:#9AA9C2;font-weight:600}
.rmeter-bar{position:relative;height:14px;border-radius:7px;background:linear-gradient(90deg,#2FB87A 0%,#D9B64A 40%,#EF8A3E 70%,#E5484D 100%);margin-bottom:6px}
.rmeter-fill{position:absolute;left:0;top:0;bottom:0;border-radius:7px;background:rgba(255,255,255,.14);border-right:2px solid #fff}
.rmeter-tick{position:absolute;top:-4px;transform:translateX(-50%);text-align:center}
.rmeter-tick i{display:block;width:2px;height:22px;background:#fff;margin:0 auto}
.rmeter-tick small{font-family:var(--fm);font-size:10px;color:#fff;letter-spacing:.06em}
.rmeter-scale{display:flex;justify-content:space-between;font-family:var(--fm);font-size:9.5px;color:#6E7F9C;margin-top:10px}
.rvec-str{margin:18px 0 0;font-size:11.5px;color:#9AA9C2;overflow-wrap:anywhere;line-height:1.6}
.rvec-str .rcref{color:var(--teal2)}
.rvecgroup{margin-bottom:16px}
.rvecgroup:last-child{margin-bottom:0}
.rvecgroup h4{font-family:var(--fm);font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:#9AA9C2;margin:0 0 8px}
.rvecrow{display:flex;flex-wrap:wrap;gap:8px}
.rvec{display:flex;flex-direction:column;gap:1px;border:1px solid var(--line2);border-radius:9px;padding:8px 11px;min-width:92px;background:var(--panel)}
.rvec-ab{font-family:var(--fm);font-size:10px;color:var(--dim)}
.rvec-m{font-size:11px;color:#C9D4E5}
.rvec-v{font-weight:700;font-size:14px;color:#fff;font-family:var(--fd)}
.rvec.rv-crit{border-color:rgba(229,72,77,.5);background:rgba(229,72,77,.1)}.rv-crit .rvec-v{color:#FF9EA1}
.rvec.rv-hi{border-color:rgba(239,138,62,.5);background:rgba(239,138,62,.08)}.rv-hi .rvec-v{color:#F2A766}
.rvec.rv-lo{border-color:var(--line2)}.rv-lo .rvec-v{color:#9AA9C2}
@media (max-width:820px){.rcvss{grid-template-columns:1fr}}

/* exposure-window bar */
.rexp{margin:0 0 30px}
.rexp figcaption{font-size:14px;color:#2A3850;margin-bottom:34px;max-width:90ch;line-height:1.6}
.rev-track{position:relative;height:16px;border-radius:8px;background:#E6ECF3;margin:0 10px 56px}
.rev-fill{position:absolute;top:0;bottom:0;border-radius:8px}
.rev-fill.rev-safe{background:repeating-linear-gradient(45deg,#2FB87A,#2FB87A 7px,#3FC98A 7px,#3FC98A 14px);opacity:.85}
.rev-mark{position:absolute;top:50%;transform:translate(-50%,-50%)}
.rev-mark i{display:block;width:15px;height:15px;border-radius:50%;background:#fff;border:3px solid #9AA9C2;position:relative;z-index:2}
.rev-lab{position:absolute;top:20px;left:50%;transform:translateX(-50%);text-align:center;white-space:nowrap}
.rev-lab b{display:block;font-size:12px;color:#17263E;font-family:var(--fd)}
.rev-lab time{font-size:10.5px;color:#6A7890}
.rev-patch i{border-color:#2FB87A}.rev-disclosure i{border-color:#0E9AA8}.rev-poc i{border-color:#D9A43E}.rev-exploit i{border-color:#E5484D}.rev-context i{border-color:#8A97AC}
.rev-edge-l .rev-lab{left:0;transform:none;text-align:left}
.rev-edge-r .rev-lab{left:auto;right:0;transform:none;text-align:right}
.rev-edge-c .rev-lab{top:auto;bottom:20px}
.rev-legend{display:flex;flex-wrap:wrap;gap:16px;font-size:12.5px;color:#53627C}
.rev-key{display:inline-flex;align-items:center;gap:7px}
.rev-key::before{content:"";width:16px;height:10px;border-radius:3px}
.rev-k-patch::before{background:repeating-linear-gradient(45deg,#2FB87A,#2FB87A 4px,#3FC98A 4px,#3FC98A 8px)}
.rev-k-exploit::before{background:#E6ECF3}
@media (max-width:640px){.rev-lab b{font-size:10px}.rev-lab time{display:none}}

/* weak vs strong comparison */
.rcompare{display:grid;grid-template-columns:1fr auto 1fr;gap:16px;align-items:center}
.rcomp{background:#fff;border:1px solid var(--pline);border-radius:12px;padding:18px 20px}
.rcomp-bad{border-top:3px solid #E5484D}.rcomp-good{border-top:3px solid #2FB87A}
.rcomp-h{display:flex;align-items:center;gap:12px;margin-bottom:12px}
.rcomp-ico{width:34px;height:34px;border-radius:9px;display:flex;align-items:center;justify-content:center;flex:0 0 auto}
.rcomp-bad .rcomp-ico{background:#FDECEC;color:#B42318}.rcomp-good .rcomp-ico{background:#E8F7EF;color:#1B7A4E}
.rcomp-ico svg{width:19px;height:19px}
.rcomp-h b{display:block;color:#17263E;font-family:var(--fd);font-size:16px}
.rcomp-h small{font-family:var(--fm);font-size:12px;color:#6A7890}
.rcomp ul{margin:0;padding-left:18px}
.rcomp li{font-size:13.5px;color:#2A3850;margin-bottom:6px;line-height:1.5}
.rcomp li.bad{color:#B42318;font-weight:600;list-style:none;margin-left:-18px;padding-left:18px;position:relative}
.rcomp li.bad::before{content:"\00d7";position:absolute;left:2px;font-weight:700}
.rcomp li.good{color:#1B7A4E;font-weight:600;list-style:none;margin-left:-18px;padding-left:18px;position:relative}
.rcomp li.good::before{content:"\2713";position:absolute;left:2px;font-weight:700}
.rcomp-vs{font-family:var(--fm);font-size:12px;color:#8A97AC;text-align:center}
@media (max-width:760px){.rcompare{grid-template-columns:1fr}.rcomp-vs{padding:2px 0}}

/* ecosystem detection cards */
.recos{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.reco{background:#fff;border:1px solid var(--pline);border-radius:11px;padding:14px 16px}
.reco-lang{display:block;font-family:var(--fd);font-weight:700;color:#17263E;font-size:14.5px;margin-bottom:10px}
.reco-row{display:grid;grid-template-columns:1fr auto 1fr;gap:10px;align-items:center}
.reco-bad,.reco-good{display:flex;flex-direction:column;gap:4px;min-width:0}
.reco-tag{font-family:var(--fm);font-size:9px;letter-spacing:.08em;text-transform:uppercase}
.reco-bad .reco-tag{color:#B42318}.reco-good .reco-tag{color:#1B7A4E}
.reco code{font-family:var(--fm);font-size:12px;overflow-wrap:anywhere;padding:4px 7px;border-radius:6px}
.reco-bad code{background:#FDECEC;color:#8A2018;border:1px solid #F3C9C6}
.reco-good code{background:#E8F7EF;color:#14633F;border:1px solid #BEE6D1}
.reco-arrow{color:#8A97AC}.reco-arrow svg{width:18px;height:18px;display:block}
@media (max-width:820px){.recos{grid-template-columns:1fr}}
@media (max-width:420px){.reco-row{grid-template-columns:1fr;gap:6px}.reco-arrow{transform:rotate(90deg);justify-self:start}}

/* "what changed" shift cards */
.rshifts{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin:4px 0 24px}
.rshift{background:#0B1830;border-radius:12px;padding:18px 20px;color:#DCE5F2}
.rshift-ico{display:inline-flex;width:34px;height:34px;border-radius:9px;background:var(--tealdim);color:var(--teal2);align-items:center;justify-content:center;margin-bottom:12px}
.rshift-ico svg{width:19px;height:19px}
.rshift b{display:block;color:#fff;font-family:var(--fd);font-size:16px;margin-bottom:6px}
.rshift p{margin:0;font-size:13.5px;color:#C9D4E5;line-height:1.55}
@media (max-width:820px){.rshifts{grid-template-columns:1fr}}

/* attack chain */
.rchain{background:#0B1830;border-radius:16px;padding:clamp(20px,3vw,34px);margin:28px 0 8px;position:relative;z-index:2}
.rchain-hd h2{color:#fff;font-size:clamp(22px,2.6vw,30px);max-width:none}
.rchain-hd .mut{color:#9AA9C2;margin:10px 0 22px;max-width:92ch}
.rchain-hd a{color:var(--teal2)}
.rchain-track{display:grid;grid-template-columns:repeat(5,1fr);gap:8px;position:relative}
.rchain-track::before{content:"";position:absolute;left:8%;right:8%;top:30px;height:2px;background:linear-gradient(90deg,var(--teal),rgba(229,72,77,.8));opacity:.5;z-index:0}
.rchain-node{position:relative;z-index:1;display:flex;flex-direction:column;align-items:center;gap:8px;background:var(--panel);border:1px solid var(--line2);border-radius:12px;padding:14px 8px 12px;cursor:pointer;color:#C9D4E5;text-align:center;transition:border-color .2s,background .2s,transform .2s}
.rchain-node:hover{border-color:var(--teal);transform:translateY(-2px)}
.rchain-node.is-on{border-color:var(--teal2);background:var(--panel3);box-shadow:0 0 0 1px var(--teal2)}
.rchain-n{width:26px;height:26px;border-radius:50%;background:#0B1830;border:1px solid var(--line2);display:flex;align-items:center;justify-content:center;font-family:var(--fm);font-size:12px;color:var(--teal2)}
.rchain-node.is-on .rchain-n{background:var(--teal);color:#021318;border-color:var(--teal)}
.rchain-ico{color:var(--teal2);width:22px;height:22px}.rchain-ico svg{width:22px;height:22px}
.rchain-node.is-on .rchain-ico{color:#fff}
.rchain-t{font-size:12.5px;line-height:1.3;font-weight:600;color:#E8EEF7}
.rchain-details{margin-top:16px}
.rchain-detail{background:var(--panel);border:1px solid var(--line2);border-radius:12px;padding:18px 20px}
.rchain-dh{display:flex;align-items:center;gap:12px;margin-bottom:12px}
.rchain-dh h4{color:#fff;font-size:17px;margin:0}
.rchain-cols{display:grid;grid-template-columns:1fr 1fr;gap:18px}
.rchain-lab{display:block;font-family:var(--fm);font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;margin-bottom:5px}
.rchain-cols>div:first-child .rchain-lab{color:#FF9EA1}
.rchain-ctl .rchain-lab{color:var(--teal2)}
.rchain-cols p{margin:0;font-size:14px;color:#C9D4E5;line-height:1.55}
.rchain-ctl{border-left:2px solid rgba(27,195,209,.5);padding-left:14px}
@media (max-width:820px){.rchain-track{grid-template-columns:repeat(2,1fr)}.rchain-track::before{display:none}.rchain-cols{grid-template-columns:1fr;gap:12px}}
@media (max-width:420px){.rchain-track{grid-template-columns:1fr}}

/* timeline */
.rtl{list-style:none;margin:8px 0 0;padding:0;position:relative}
.rtl::before{content:"";position:absolute;left:92px;top:6px;bottom:6px;width:2px;background:var(--pline)}
.rtl-item{position:relative;display:grid;grid-template-columns:78px 1fr;gap:26px;padding:12px 0;align-items:start}
.rtl-date{font-size:12px;color:#5C6C86;text-align:right;padding-top:2px}
.rtl-dot{position:absolute;left:86px;top:16px;width:14px;height:14px;border-radius:50%;background:#fff;border:3px solid #9AA9C2;z-index:1}
.rtl-patch .rtl-dot{border-color:#2FB87A}.rtl-disclosure .rtl-dot{border-color:#0E9AA8}.rtl-poc .rtl-dot{border-color:#D9A43E}.rtl-exploit .rtl-dot{border-color:#E5484D}.rtl-context .rtl-dot{border-color:#8A97AC}
.rtl-body b{display:block;color:#17263E;font-size:15.5px;margin-bottom:3px;font-family:var(--fd)}
.rtl-body p{margin:0;color:#2A3850;font-size:14px;line-height:1.55}
.rcallout{margin-top:24px;background:#0B1830;color:#DCE5F2;border-radius:12px;padding:20px 24px}
.rcallout b{color:#fff;font-size:15px}.rcallout p{margin:8px 0 0;font-size:14.5px;color:#C9D4E5;line-height:1.6}
.rcallout a{color:var(--teal2)}
@media (max-width:560px){.rtl::before{left:6px}.rtl-item{grid-template-columns:1fr;gap:4px;padding-left:28px}.rtl-date{text-align:left}.rtl-dot{left:0;top:6px}}

/* citations */
.rcitebar{display:flex;flex-wrap:wrap;gap:12px;align-items:center;justify-content:space-between;margin:6px 0 18px}
.rfilters{display:flex;flex-wrap:wrap;gap:6px}
.rfilter{border:1px solid #C9D5E4;background:#fff;color:#53627C;border-radius:999px;padding:6px 13px;font-size:12.5px;cursor:pointer;min-height:34px}
.rfilter.is-on{background:#0B1830;border-color:#0B1830;color:#fff}
.rcite-search{font:inherit;font-size:16px;border:1px solid #C9D5E4;border-radius:8px;padding:8px 12px;min-height:40px;min-width:240px;flex:1}
.rcites{display:grid;grid-template-columns:1fr 1fr;gap:14px}
@media (max-width:820px){.rcites{grid-template-columns:1fr}}
.rcite{border:1px solid var(--pline);border-radius:12px;padding:16px 18px;background:#fff;scroll-margin-top:calc(var(--navh) + 80px);transition:box-shadow .3s,border-color .3s}
.rcite[hidden]{display:none}
.rcite-hl{border-color:#0E9AA8;box-shadow:0 0 0 3px rgba(14,154,168,.18)}
.rcite-h{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-bottom:8px;flex-wrap:wrap}
.rcite-org{font-weight:700;color:#17263E;font-family:var(--fd)}
.rcite-tags{display:flex;flex-wrap:wrap;gap:4px}
.rtag{font-family:var(--fm);font-size:10px;letter-spacing:.04em;text-transform:uppercase;color:#0B6E79;background:#E3F5F7;border:1px solid #A9DDE2;border-radius:4px;padding:1px 6px}
.rcite-title{display:block;font-size:15px;font-weight:600;color:#0B6E79!important;text-decoration:none;margin-bottom:6px;line-height:1.35}
.rcite-title:hover{text-decoration:underline}
.rcite-take{margin:0 0 10px;font-size:13.5px;color:#2A3850;line-height:1.55}
.rcite-f{display:flex;flex-wrap:wrap;justify-content:space-between;gap:4px 12px;font-size:11px;color:#6A7890}
.rcite-link{color:#0B6E79!important;text-decoration:none;overflow-wrap:anywhere}
.rcite-empty{font-size:14px;color:var(--pmut);margin-top:12px}

/* hub */
.rhlist{display:grid;gap:16px}
.rhcard{display:block;border:1px solid var(--pline);border-radius:14px;padding:22px 24px;background:#fff;text-decoration:none;transition:border-color .2s,box-shadow .2s,transform .2s}
.rhcard:hover{border-color:#0E9AA8;box-shadow:0 14px 40px -28px rgba(11,24,48,.5);transform:translateY(-2px)}
.rhcard-top{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-bottom:10px}
.rhcard-tag{font-family:var(--fm);font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:#0B6E79;background:#E3F5F7;border:1px solid #A9DDE2;border-radius:6px;padding:3px 9px}
.rhcard-date{font-size:12px;color:#6A7890}
.rhcard h3{font-size:clamp(19px,2.3vw,24px);color:#17263E;margin:0 0 8px}
.rhcard p{margin:0 0 14px;color:#2A3850;font-size:15px;line-height:1.55;max-width:80ch}
.rhcard .rbadges{margin-top:0;margin-bottom:14px}
.rhcard .rbadge{background:#F6F8FB;border-color:#DBE3EC}
.rhcard .rbadge .k{color:#8A97AC}.rhcard .rbadge .v{color:#17263E}
.rhcard .rb-crit{background:#FDECEC;border-color:#F3B8B3}.rhcard .rb-crit .v{color:#B42318}
.rhcard .rb-ai{background:#EAF7F9;border-color:#A9DDE2}.rhcard .rb-ai .v{color:#0B6E79}
.rhcard-more{font-weight:600;color:#0B6E79;font-size:14.5px}
.rcta{margin-top:30px}
@media print{.rsecnav{position:static}}
