:root{--mono:"SF Mono", ui-monospace, Menlo, Consolas, "Liberation Mono", monospace;--site-font:"Gellix", "Avenir Next", "Helvetica Neue", Arial, sans-serif;--display-font:"Yowza D", "Avenir Next", "Helvetica Neue", Arial, sans-serif;--content-font-size:18px;--interface-font-size:16px;--label-font-size:14px;--on-accent:#2a1e14}*{box-sizing:border-box}html{background:var(--bg);overflow-x:hidden}body{font-family:var(--site-font);color:var(--text);line-height:1.6;font-size:var(--content-font-size);overflow-wrap:break-word;margin:0}a{box-decoration-break:clone;color:var(--accent);text-decoration-color:var(--accent);text-underline-offset:3px;text-decoration-line:underline;text-decoration-thickness:1px;transition:background-color .14s,box-shadow .14s,color .14s,text-decoration-color .14s}a:focus-visible{background:var(--accent);box-shadow:0 0 0 2px var(--accent);color:var(--on-accent);outline:2px solid var(--accent);outline-offset:4px;text-decoration-color:var(--on-accent);border-radius:2px}@media (hover:hover){a:hover{background:var(--accent);box-shadow:0 0 0 2px var(--accent);color:var(--on-accent);text-decoration-color:var(--on-accent);border-radius:2px}}.wrap{max-width:1280px;margin:0 auto;padding:32px 24px 80px}nav.top{border-bottom:1px solid var(--line);font-size:var(--interface-font-size);flex-wrap:wrap;align-items:baseline;gap:24px;margin-bottom:56px;padding-bottom:14px;display:flex;position:relative}nav.top a{text-decoration:none}nav.top .brand{color:var(--dim)}nav.top .brand b{color:var(--text);font-weight:600}nav.top .links{flex-wrap:wrap;align-items:baseline;gap:18px;margin-left:auto;display:flex}nav.top .links a{color:var(--dim)}nav.top .links a:hover,nav.top .links a[aria-current=page]{color:var(--accent)}nav.top .links a[aria-current=page]{box-shadow:inset 0 -1px 0 var(--amber)}nav.top .links a:focus-visible,nav.top .brand:focus-visible,nav.top .brand:focus-visible b{color:var(--on-accent)}@media (hover:hover){nav.top .links a:hover,nav.top .brand:hover,nav.top .brand:hover b{color:var(--on-accent)}}#theme-toggle{white-space:nowrap;font-family:var(--site-font);cursor:pointer;background:var(--panel);border:1px solid var(--line);color:var(--text);border-radius:4px;justify-content:center;align-items:center;width:34px;height:27px;padding:0;font-size:17px;line-height:1;transition:background-color .14s,border-color .14s,color .14s;display:inline-flex}#theme-toggle:focus-visible{background:var(--accent);border-color:var(--accent);color:var(--on-accent);outline:2px solid var(--accent);outline-offset:3px}@media (hover:hover){#theme-toggle:hover{background:var(--accent);border-color:var(--accent);color:var(--on-accent)}}h1,h2,h3,.term .name,.stat b,.ctf-name{font-family:var(--display-font)}h2.sec{color:var(--text);letter-spacing:.14em;text-transform:uppercase;margin:0 0 18px;font-size:14px;font-weight:650}h2.sec:before{content:"## ";color:var(--amber)}section{margin-bottom:64px}.section-intro{color:var(--dim);margin:0 0 20px}.term{border:1px solid var(--term-line);background:var(--term-bg);color:var(--term-text);border-radius:11px;margin-bottom:40px;overflow:hidden}.term-bar{border-bottom:1px solid var(--term-line);background:var(--term-bg);align-items:center;padding:10px 14px;display:flex;position:relative}.term-bar .dots{gap:8px;display:flex}.term-bar .dots i{border-radius:50%;width:12px;height:12px;display:block}.term-bar .dots i:first-child{background:var(--term-accent)}.term-bar .dots i:nth-child(2){background:var(--term-strong)}.term-bar .dots i:nth-child(3){background:var(--term-dim)}.term-title{text-align:center;color:var(--term-dim);pointer-events:none;margin:0 auto;font-size:12px;font-weight:500;position:absolute;left:0;right:0}.term-body{padding:24px 26px 26px}.prompt{color:var(--term-dim)}.prompt .u{color:var(--term-accent)}.term .out{margin:12px 0 22px}.term .name{color:var(--term-strong);letter-spacing:.5px;font-size:24px;font-weight:700}.term .headline{color:var(--term-accent);margin-top:4px}.term .host{color:var(--term-dim);margin-top:2px;font-size:13px}.term .bio{color:var(--term-text);margin:16px 0 0;line-height:1.7}.cursor{background:var(--term-accent);vertical-align:-3px;width:9px;height:18px;animation:1.1s step-end infinite blink;display:inline-block}@keyframes blink{50%{opacity:0}}@media (prefers-reduced-motion:reduce){a,#theme-toggle{transition:none}.cursor{animation:none}}.home-hero{align-items:center;gap:40px;margin-bottom:28px;display:flex}.home-hero-copy{flex:1;min-width:0}.home-hero h1{letter-spacing:-.025em;margin:0;font-size:clamp(44px,5vw,70px);line-height:1.05}.home-hero-headline{border-left:2px solid var(--amber);color:var(--accent);margin:14px 0 0;padding-left:11px;font-size:19px}.home-hero-bio{color:var(--dim);font-size:var(--content-font-size);max-width:92ch;margin:26px 0 0;line-height:1.7}.home-prose{font-size:var(--content-font-size);max-width:72ch}.home-prose p{margin:0 0 14px}.home-prose p.spacer{margin-top:20px}ul.vendors{margin:0 0 14px;padding:0;list-style:none}ul.vendors li{padding:3px 0}ul.vendors li:before{color:var(--accent);content:"-";margin-right:.6em;display:inline-block}ul.recent-posts{margin:0 0 14px;padding:0;list-style:none}ul.recent-posts li{padding:4px 0}ul.recent-posts li:before{content:"- ";color:var(--accent)}ul.recent-posts time{color:var(--dim);font-variant-numeric:tabular-nums;margin-right:6px;font-size:13px}.stats{flex-wrap:wrap;gap:14px;margin-bottom:64px;display:flex}.stat{border:1px solid var(--line);background:var(--panel);border-radius:6px;flex:1;min-width:150px;padding:14px 20px}.stat b{color:var(--accent);font-variant-numeric:tabular-nums;font-size:24px;display:block}.stat span{color:var(--dim);letter-spacing:.08em;text-transform:uppercase;font-size:12px}.tbl{overflow-x:auto}table{border-collapse:collapse;width:100%;font-size:16px}th{background:var(--bg);color:var(--dim);text-align:left;border-bottom:1px solid var(--line);letter-spacing:.06em;text-transform:uppercase;padding:9px 12px;font-size:12px;font-weight:650}td{padding:12px}td.cve{color:var(--accent);white-space:nowrap}td.yr{color:var(--dim);font-variant-numeric:tabular-nums;white-space:nowrap}td.lnk{white-space:nowrap}td.lnk a{display:block}td.lnk .none{color:var(--dim)}.post{align-items:baseline;gap:18px;padding:12px 0;display:flex}.post+.post{margin-top:8px}.post time{color:var(--dim);white-space:nowrap;font-variant-numeric:tabular-nums;font-size:14px}.post-cv time{min-width:132px;display:inline-block}.experience-body{flex:1;min-width:0}.experience-summary{color:var(--dim);margin:2px 0 0}.experience-highlights{margin:10px 0 0;padding:0;list-style:none}.experience-highlights li{color:var(--dim);margin:7px 0;padding-left:1.15em;position:relative}.experience-highlights li:before{color:var(--accent);content:"-";position:absolute;left:0}.post-press{gap:12px;font-size:15px}.post-press>span{white-space:nowrap;flex:1;align-items:baseline;gap:7px;min-width:0;display:flex}.post-press>span b{flex:none}.post-press>span a{text-overflow:ellipsis;min-width:0;overflow:hidden}.post-blog{grid-template-columns:max-content minmax(0,1fr) max-content;align-items:baseline;gap:18px;padding:9px 0;display:grid}.post-blog+.post-blog{margin-top:0}.post-blog .post-title{justify-self:start;min-width:0;max-width:100%}.vendor-tags{flex-wrap:wrap;justify-content:flex-end;gap:6px;display:flex}.vendor-tag{border:1px solid var(--line);background:var(--panel);color:var(--dim);font-size:var(--label-font-size);letter-spacing:.04em;white-space:nowrap;border-radius:4px;padding:1px 8px}article.prose{max-width:70ch}article.prose h1{color:var(--text);font-size:34px;line-height:1.3}article.prose h2{color:var(--accent);margin-top:2em;font-size:23px}article.prose h3{color:var(--text);font-size:19px}article.prose pre{background:var(--term-bg);color:var(--term-text);border:1px solid var(--term-line);border-radius:6px;padding:14px 16px;font-size:14px;overflow-x:auto}article.prose code{font-family:var(--mono)}article.prose img{border-radius:6px;max-width:100%}article.prose blockquote{border-left:3px solid var(--amber);color:var(--dim);margin-left:0;padding-left:16px}.meta{color:var(--dim);margin-bottom:32px;font-size:14px}.ctf-row time{min-width:52px;display:inline-block}.ctf-body{flex:1;min-width:0}.ctf-title{flex-wrap:wrap;align-items:baseline;gap:3px 12px;display:flex}.ctf-name{color:var(--text);font-size:18px;font-weight:700}.ctf-name a{color:inherit}.ctf-name a:focus-visible{color:var(--on-accent)}@media (hover:hover){.ctf-name a:hover{color:var(--on-accent)}}.ctf-meta{color:var(--dim);font-size:14px}.ctf-desc{color:var(--dim);max-width:82ch;margin:6px 0 0;font-size:17px;line-height:1.6}.ctf-writeups{color:var(--dim);margin:8px 0 0;font-size:14px}.ctf-writeups a{color:var(--accent)}.ctf-writeups a:focus-visible{color:var(--on-accent)}@media (hover:hover){.ctf-writeups a:hover{color:var(--on-accent)}}.ctf-team{align-items:center;gap:16px;margin-bottom:20px;display:flex}.team-logo{border:1px solid var(--line);border-radius:6px;width:56px;height:auto;display:block}.about-intro{align-items:center;gap:24px;display:flex}.about-photo{border:1px solid var(--line);object-fit:cover;border-radius:10px;flex-shrink:0;width:150px;height:150px}.about-intro p{max-width:66ch;margin:0}@media (width<=560px){.about-intro{flex-direction:column;align-items:flex-start;gap:16px}.about-photo{width:120px;height:120px}}.post-blog .post-title{white-space:nowrap;text-overflow:ellipsis;min-width:0;overflow:hidden}.post-line{gap:12px}.post-line .line-main-slot{white-space:nowrap;text-overflow:ellipsis;flex:1;min-width:0;overflow:hidden}.post-line .line-links{white-space:nowrap;font-size:14px}.chips{flex-wrap:wrap;gap:8px;display:flex}.chip{border:1px solid var(--line);color:var(--text);background:var(--panel);border-radius:4px;padding:5px 11px;font-size:14px}footer.bottom{color:var(--dim);font-size:var(--interface-font-size);flex-wrap:wrap;gap:18px;padding-top:18px;display:flex}footer.bottom .right{margin-left:auto}@media (width<=640px){:root{--content-font-size:16px;--interface-font-size:15px;--label-font-size:13px}.wrap{padding-left:12px;padding-right:12px}nav.top{white-space:nowrap;flex-wrap:nowrap;align-items:center;gap:clamp(6px,1.8vw,12px);margin-bottom:40px}nav.top .brand{flex:none;font-size:clamp(10px,2.7vw,12px)}nav.top .links{flex-wrap:nowrap;flex:auto;justify-content:flex-end;gap:clamp(4px,1.4vw,9px);min-width:0}nav.top .links a{flex:none;font-size:clamp(10px,2.7vw,12px)}#theme-toggle{flex:none;width:28px;height:24px;font-size:14px}.post-blog{grid-template-columns:auto 1fr;gap:4px 14px}.post-blog .vendor-tags{grid-column:1/-1;justify-content:flex-start;margin-top:2px}.post-cv{flex-direction:column;align-items:flex-start;gap:4px}.post-cv time{min-width:0}td,th{padding:8px 10px}.tbl{-webkit-overflow-scrolling:touch}.term{padding:20px 18px}.term .headline{word-break:break-word}.home-hero{flex-direction:column;align-items:flex-start;gap:24px}.home-hero h1{font-size:38px}.home-hero-bio{line-height:1.7}}
