@charset "UTF-8";
:root { color-scheme: light; --paper:#f4f0e7; --ink:#25251f; --muted:#706e63; --rule:#d5cfc0; --red:#a33b30; --dark:#191a18; font-family:Georgia,'Times New Roman',serif; }
* { box-sizing:border-box; }
html { scroll-behavior:smooth; scroll-padding-top:84px; }
body { margin:0; background:var(--paper); color:var(--ink); }
button, a { -webkit-tap-highlight-color:transparent; }
button { font:inherit; }
a { color:inherit; text-decoration-color:var(--red); text-underline-offset:4px; }
a:hover { color:var(--red); }
button:focus-visible, a:focus-visible, summary:focus-visible { outline:3px solid #c16b44; outline-offset:5px; }
button { cursor:pointer; }
.skip { position:fixed; top:-100px; left:16px; padding:12px 18px; background:var(--paper); z-index:20; }
.skip:focus { top:12px; }
.masthead { width:min(1240px,calc(100% - 64px)); margin:auto; padding:28px 0; display:flex; align-items:baseline; justify-content:space-between; border-bottom:1px solid var(--rule); }
.wordmark { font:700 23px/1.1 Arial,Helvetica,sans-serif; letter-spacing:-1.5px; text-decoration:none; }
.wordmark span { color:var(--red); }
.masthead .credit { font:12px/1.3 ui-monospace,SFMono-Regular,Consolas,monospace; color:var(--muted); }
.cold-open { width:min(1000px,calc(100% - 64px)); margin:0 auto; padding:76px 0 64px; }
.kicker { font:11px/1.5 ui-monospace,SFMono-Regular,Consolas,monospace; text-transform:uppercase; letter-spacing:2px; color:var(--muted); }
.cold-open h1 { max-width:980px; margin:22px 0 28px; font-size:clamp(30px,4.1vw,54px); font-weight:400; line-height:1.2; letter-spacing:-1.5px; }
.cold-open h1 em { font-weight:400; color:var(--red); }
.identifiers { display:flex; flex-wrap:wrap; align-items:center; gap:10px 18px; font:12px/1.6 ui-monospace,SFMono-Regular,Consolas,monospace; }
.identifiers a { text-decoration:none; border-bottom:1px solid var(--rule); }
.rating { color:var(--red); }
.invitation { margin:40px 0 0; max-width:710px; font-size:clamp(21px,2.2vw,28px); font-style:italic; line-height:1.5; }
.shortcuts { display:flex; flex-wrap:wrap; gap:24px; margin:24px 0 0; font:12px/1.5 Arial,Helvetica,sans-serif; }
.shortcuts a { text-decoration:none; }
.comic { background:var(--dark); color:#eee7d7; padding-bottom:70px; }
.reader-toolbar { position:sticky; top:0; z-index:5; background:rgba(25,26,24,.97); border-bottom:1px solid #44443e; }
.reader-toolbar-inner { max-width:1100px; margin:auto; min-height:62px; padding:10px 22px; display:flex; align-items:center; justify-content:space-between; gap:18px; }
.era-links { display:flex; gap:24px; font:12px/1.4 ui-monospace,SFMono-Regular,Consolas,monospace; }
.era-links a { color:#b5b3a8; text-decoration:none; }
.era-links a:hover, .era-links a[aria-current] { color:#f1d3aa; }
.reader-mode { display:flex; border:1px solid #54544a; border-radius:3px; padding:3px; gap:3px; }
.reader-mode button { color:#b5b3a8; background:none; border:0; padding:7px 12px; font:12px/1.4 Arial,Helvetica,sans-serif; border-radius:1px; }
.reader-mode button[aria-pressed="true"] { color:#1b1c19; background:#e4dac6; }
.chapter { max-width:1060px; margin:auto; padding:48px 22px 0; scroll-margin-top:64px; }
.chapter-heading { display:flex; justify-content:space-between; align-items:baseline; gap:20px; padding:0 0 18px; }
.chapter-heading h2 { margin:0; font-size:26px; font-weight:400; }
.chapter-heading h2 span { color:#c1a685; margin-right:12px; }
.chapter-heading small { font:11px/1.4 ui-monospace,SFMono-Regular,Consolas,monospace; color:#aaa99f; }
.chapter-description, .comic-transition { color:#ded6c5; font-size:19px; line-height:1.8; }
.chapter-description { margin:4px 0 28px; text-align:left; }
.chapter-description p, .comic-transition p { margin:0 0 21px; }
.chapter-description p:last-child, .comic-transition p:last-child { margin-bottom:0; }
.chapter-description a, .comic-transition a { color:#eed3af; text-decoration-color:#8b765c; }
.chapter-description code, .comic-transition code { background:#33352d; color:#e4d5bb; }
.chapter-context { margin-top:30px; }
.comic-transition { max-width:1060px; margin:54px auto 0; padding:0 22px; text-align:left; }
.comic-transition p { max-width:none; }
.comic-image { display:block; position:relative; width:100%; padding:0; border:0; background:#111; color:inherit; text-align:inherit; }
.comic-image picture { display:block; width:100%; }
.comic-image img { display:block; width:100%; height:auto; }
.panel-layout { display:none; gap:14px; }
.comic-page-gap { height:28px; }
.comic[data-mode="panels"] .page-layout { display:none; }
.comic[data-mode="panels"] .panel-layout { display:grid; }
.comic[data-mode="panels"] .chapter, .comic[data-mode="panels"] .comic-transition, .comic[data-mode="panels"] .comic-end { max-width:760px; }
.transcript { color:#c3c0b4; margin:19px 0 0; font:14px/1.7 Arial,Helvetica,sans-serif; }
.transcript summary { width:fit-content; cursor:pointer; color:#aaa99f; font:12px/1.5 ui-monospace,SFMono-Regular,Consolas,monospace; }
.transcript p { margin:16px 0 0; }
.comic-end { max-width:1060px; margin:48px auto 0; padding:0 22px; text-align:left; }
.comic-end p { font-size:24px; line-height:1.5; }
.comic-end a { color:#edceaa; font:12px/1.5 ui-monospace,SFMono-Regular,Consolas,monospace; text-decoration:none; }
.writeup-shell { max-width:1240px; margin:auto; padding:88px 32px 100px; display:grid; grid-template-columns:190px minmax(0,740px); gap:68px; justify-content:center; }
.contents { align-self:start; position:sticky; top:40px; font:12px/1.5 Arial,Helvetica,sans-serif; }
.contents p { margin:0 0 20px; color:var(--muted); font-size:10px; text-transform:uppercase; letter-spacing:1.8px; }
.contents a { display:block; color:var(--muted); text-decoration:none; padding:8px 0; border-top:1px solid var(--rule); }
.contents a:hover { color:var(--red); }
.article-header { margin:0 0 54px; }
.prose .article-header h2 { font-size:clamp(35px,4vw,51px); font-weight:400; line-height:1.13; letter-spacing:-1.4px; margin:15px 0 24px; padding:0; border:0; }
.byline { font:13px/1.5 Arial,Helvetica,sans-serif; color:var(--muted); }
.prose { min-width:0; font-size:19px; line-height:1.8; }
.prose p { margin:0 0 23px; }
.prose h2 { margin:72px 0 24px; padding-top:24px; border-top:1px solid var(--rule); font-size:32px; font-weight:400; line-height:1.25; letter-spacing:-.5px; }
.prose > h2:first-child { margin-top:0; padding-top:0; border-top:0; }
.prose h3 { font-size:23px; line-height:1.4; margin:46px 0 20px; font-weight:400; }
.prose ul, .prose ol { padding-left:25px; margin:24px 0; }
.prose li { margin:9px 0; }
code { font: .78em/1.6 ui-monospace,SFMono-Regular,Consolas,monospace; overflow-wrap:anywhere; background:#e8e2d5; padding:2px 5px; border-radius:2px; }
pre { max-width:100%; overflow:auto; overscroll-behavior-x:contain; background:#20231f; color:#e4dfd1; border-radius:3px; margin:28px 0 34px; padding:22px; line-height:1.6; font-size:13px; tab-size:4; }
pre code { padding:0; background:none; font-size:inherit; overflow-wrap:normal; }
.highlight .c, .highlight .cm, .highlight .c1 { color:#a4a692; }
.highlight .k, .highlight .kt, .highlight .kd { color:#e8b984; }
.highlight .s, .highlight .s1, .highlight .s2 { color:#b7c99c; }
.highlight .mi, .highlight .mh { color:#d9a896; }
.highlight .nf { color:#acd4d1; }
.impact { padding:25px 28px; border-left:3px solid var(--red); background:#eae3d6; margin:30px 0; font-size:18px; }
.impact p:last-child { margin-bottom:0; }
.deployment-table { width:100%; border-collapse:collapse; font:14px/1.6 Arial,Helvetica,sans-serif; margin:30px 0; }
.deployment-table th, .deployment-table td { text-align:left; padding:14px 10px 14px 0; vertical-align:top; border-bottom:1px solid var(--rule); }
.deployment-table th { color:var(--muted); font-weight:400; font-size:11px; text-transform:uppercase; letter-spacing:1px; }
.tested-apps { font:14px/1.8 Arial,Helvetica,sans-serif; margin:25px 0; padding-bottom:20px; border-bottom:1px solid var(--rule); }
.tested-apps summary { cursor:pointer; color:var(--red); width:fit-content; }
.timeline { list-style:none; padding:0!important; border-left:1px solid #b9ad98; margin:34px 0!important; }
.timeline li { position:relative; padding:0 0 24px 26px; margin:0; }
.timeline li::before { content:''; position:absolute; width:7px; height:7px; background:var(--red); border-radius:50%; left:-4px; top:11px; }
.timeline time { display:block; font:12px/1.6 ui-monospace,SFMono-Regular,Consolas,monospace; color:var(--red); margin-bottom:7px; }
.closing { margin-top:56px; padding-top:28px; border-top:1px solid var(--rule); color:var(--muted); font-size:16px; }
.site-footer { border-top:1px solid var(--rule); padding:28px 32px; display:flex; justify-content:space-between; gap:24px; font:12px/1.5 Arial,Helvetica,sans-serif; color:var(--muted); }
[hidden] { display:none!important; }
@media (min-width:761px) { .comic[data-mode="panels"] .panel-layout { grid-template-columns:1fr; } }
@media (max-width:1000px) { .writeup-shell { grid-template-columns:150px minmax(0,1fr); gap:35px; } }
@media (max-width:760px) {
 html { scroll-padding-top:76px; }
 .masthead { width:calc(100% - 36px); padding:22px 0; }
 .masthead .credit { font-size:10px; }
 .cold-open { width:calc(100% - 40px); padding:43px 0 42px; }
 .cold-open h1 { letter-spacing:-.8px; line-height:1.24; }
 .identifiers { gap:8px 14px; font-size:10px; }
 .rating { flex-basis:100%; margin-top:3px; }
 .invitation { margin-top:27px; }
 .shortcuts { gap:20px; margin-top:20px; }
 .reader-toolbar-inner { padding:9px 12px; min-height:58px; gap:10px; }
 .era-links { gap:16px; font-size:11px; }
 .reader-mode button { padding:7px 10px; font-size:11px; }
 .chapter { padding:30px 10px 0; }
 .chapter-heading { padding:0 0 15px; }
 .chapter-heading h2 { font-size:21px; }
 .chapter-heading small { font-size:10px; }
 .chapter-description { padding:0; margin-bottom:22px; font-size:17px; line-height:1.75; }
 .chapter-context { margin-top:25px; }
 .comic-transition { padding:0 10px; font-size:17px; line-height:1.75; margin-top:36px; }
 .comic[data-mode="auto"] .page-layout { display:none; }
 .comic[data-mode="auto"] .panel-layout { display:grid; }
 .transcript { margin:19px 0 0; font-size:15px; }
 .comic { padding-bottom:44px; }
 .comic-end { padding:0 10px; margin-top:30px; }
 .comic-end p { font-size:22px; }
 .writeup-shell { display:block; padding:50px 22px 65px; }
 .contents { position:static; margin:0 0 43px; }
 .contents p { margin-bottom:10px; }
 .contents nav { display:flex; flex-wrap:wrap; gap:8px 18px; }
 .contents a { border:0; padding:4px 0; text-decoration:underline; text-decoration-color:var(--rule); }
 .article-header { margin-bottom:35px; }
 .prose { font-size:18px; line-height:1.75; }
 .prose h2 { margin-top:48px; padding-top:21px; font-size:29px; }
 .prose h3 { font-size:23px; }
 .impact { padding:20px; font-size:17px; }
 pre { font-size:11px; padding:16px; }
 .deployment-table { font-size:12px; }
 .site-footer { padding:24px 22px; font-size:11px; }
}
@media (prefers-reduced-motion:reduce) { html { scroll-behavior:auto; } }
@media print { .comic,.contents,.shortcuts,.site-footer,.reader-toolbar { display:none!important; } body { background:white; } .writeup-shell { display:block; padding:0; } .cold-open { padding:20px 0; } }

.research-logo { display:block; max-width:100%; width:auto; height:auto; margin:48px auto 0; }

.exploit-video { width:100%; aspect-ratio:16/9; margin:28px 0 34px; background:#111; border-radius:6px; overflow:hidden; }
.exploit-video iframe { display:block; width:100%; height:100%; border:0; }
