/* ===== Reset & Base ===== */
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{animation-duration:.01ms!important;transition-duration:.01ms!important}}
body{font-family:'Source Sans 3',system-ui,sans-serif;background:#fafaf9;color:#57534e;line-height:1.6;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}
::selection{background:rgba(168,162,158,.3);color:#1c1917}
a{color:inherit;text-decoration:none}
img{max-width:100%;display:block}
ul,ol{list-style:none}

/* ===== Typography ===== */
.font-serif{font-family:'Source Serif 4',Georgia,serif}
.font-mono{font-family:'IBM Plex Mono',monospace}
.font-sans{font-family:'Source Sans 3',system-ui,sans-serif}

/* ===== Layout ===== */
.container{max-width:48rem;margin:0 auto;padding:0 1.5rem}
.container-narrow{max-width:42rem;margin:0 auto;padding:0 1.5rem}

/* ===== Skip link ===== */
.skip-link{position:absolute;top:-100%;left:1rem;background:#1c1917;color:#fafaf9;padding:.5rem 1rem;z-index:9999;font-size:.75rem}
.skip-link:focus{top:.5rem}

/* ===== Navigation ===== */
.nav{position:sticky;top:0;z-index:100;background:rgba(250,250,249,.85);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-bottom:1px solid #e7e5e4}
.nav-inner{max-width:48rem;margin:0 auto;padding:0 1.5rem;height:3.5rem;display:flex;align-items:center;gap:1.5rem}
.nav-brand{font-family:'Source Serif 4',Georgia,serif;font-size:.875rem;font-weight:600;color:#1c1917;white-space:nowrap}
.nav-links{display:flex;align-items:center;gap:1.25rem;margin-left:auto}
.nav-links a{font-size:.75rem;color:#78716c;letter-spacing:.05em;text-transform:uppercase;transition:color .15s}
.nav-links a:hover,.nav-links a.active{color:#1c1917}
.nav-lang{font-size:.65rem;font-weight:600;letter-spacing:.08em;padding:.25rem .5rem;border:1px solid #d6d3d1;background:transparent;color:#78716c;cursor:pointer;transition:all .15s;margin-left:.5rem}
.nav-lang:hover{border-color:#a8a29e;color:#1c1917}
.nav-mobile-toggle{display:none;background:none;border:none;color:#78716c;cursor:pointer;padding:.25rem}
.nav-mobile-menu{display:none;padding:1rem 1.5rem;border-top:1px solid #e7e5e4}
.nav-mobile-menu a{display:block;padding:.5rem 0;font-size:.8rem;color:#78716c;letter-spacing:.04em;text-transform:uppercase}
.nav-mobile-menu a:hover,.nav-mobile-menu a.active{color:#1c1917}
@media(max-width:640px){
  .nav-links{display:none}
  .nav-mobile-toggle{display:flex;align-items:center;margin-left:auto}
  .nav-lang{margin-left:0}
  .nav-mobile-menu:not(.hidden){display:block}
}

/* ===== Hero ===== */
.hero{min-height:calc(100vh - 3.5rem);display:flex;align-items:center}
.hero-inner{width:100%;padding:5rem 0 6rem}
.hero-label{font-size:.75rem;text-transform:uppercase;letter-spacing:.1em;color:#78716c;margin-bottom:1.5rem}
.hero h1{font-family:'Source Serif 4',Georgia,serif;font-size:clamp(1.75rem,4vw,2.35rem);color:#1c1917;line-height:1.2;letter-spacing:-.01em;margin-bottom:1.5rem}
.hero-sub{font-size:1.05rem;color:#57534e;line-height:1.7;max-width:36rem;margin-bottom:2.5rem}
.hero-ctas{display:flex;flex-wrap:wrap;gap:.75rem}

/* ===== Buttons ===== */
.btn-primary{display:inline-flex;align-items:center;padding:.625rem 1rem;font-size:.75rem;font-weight:500;letter-spacing:.04em;background:#1c1917;color:#fafaf9;transition:background .15s}
.btn-primary:hover{background:#292524}
.btn-secondary{display:inline-flex;align-items:center;padding:.625rem 1rem;font-size:.75rem;font-weight:500;letter-spacing:.04em;border:1px solid #d6d3d1;color:#1c1917;transition:all .15s}
.btn-secondary:hover{border-color:#a8a29e;background:rgba(245,245,244,.8)}

/* ===== Section headings ===== */
.section{padding:3rem 0}
.section-heading{font-size:.75rem;text-transform:uppercase;letter-spacing:.1em;color:#78716c;margin-bottom:1.5rem}

/* ===== Research theme cards ===== */
.theme-grid{display:grid;gap:1.5rem}
.theme-card{border:1px solid #e7e5e4;padding:1.5rem;background:#fff}
.theme-card h3{font-family:'Source Serif 4',Georgia,serif;font-size:1rem;color:#1c1917;margin-bottom:.75rem}
.theme-card dt{font-size:.7rem;text-transform:uppercase;letter-spacing:.08em;color:#a8a29e;margin-bottom:.25rem;margin-top:.75rem}
.theme-card dd{font-size:.875rem;color:#57534e;line-height:1.6}
.theme-card .theme-links{margin-top:.75rem;display:flex;flex-wrap:wrap;gap:.5rem}
.theme-card .theme-links a{font-size:.75rem;color:#78716c;text-decoration:underline;text-underline-offset:3px;decoration-color:#d6d3d1}
.theme-card .theme-links a:hover{color:#1c1917}

/* ===== Flagship cards ===== */
.flagship-list{display:grid;gap:1.25rem}
.flagship-card{border:1px solid #e7e5e4;padding:1.5rem;background:#fff}
.flagship-card h3{font-family:'Source Serif 4',Georgia,serif;font-size:1rem;color:#1c1917;margin-bottom:.75rem}
.flagship-card .flagship-label{font-size:.7rem;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:#a8a29e}
.flagship-card p{font-size:.875rem;color:#57534e;line-height:1.6;margin-bottom:.5rem}
.flagship-links{display:flex;flex-wrap:wrap;gap:.75rem;margin-top:.75rem}
.flagship-links a{font-size:.75rem;color:#1c1917;text-decoration:underline;text-underline-offset:3px;decoration-color:#d6d3d1}
.flagship-links a:hover{color:#44403c}

/* ===== Vulnerability table ===== */
.vuln-table{width:100%;border-collapse:collapse;font-size:.8rem}
.vuln-table th{text-align:left;font-size:.65rem;text-transform:uppercase;letter-spacing:.08em;color:#a8a29e;padding:.5rem .75rem;border-bottom:1px solid #e7e5e4}
.vuln-table td{padding:.625rem .75rem;border-bottom:1px solid #f5f5f4;color:#57534e;vertical-align:top}
.vuln-table tr:hover td{background:#f5f5f4}
.vuln-table a{color:#1c1917;text-decoration:underline;text-underline-offset:2px;decoration-color:#d6d3d1}
.severity{display:inline-block;padding:.125rem .375rem;font-size:.65rem;font-weight:600;letter-spacing:.04em;border-radius:2px}
.severity-critical{background:#fef2f2;color:#991b1b}
.severity-high{background:#fef2f2;color:#991b1b}
.severity-moderate,.severity-medium{background:#fffbeb;color:#92400e}

/* ===== MSF / ZAP entries ===== */
.msf-list{display:grid;gap:1rem}
.msf-card{border:1px solid #e7e5e4;padding:1.25rem;background:#fff}
.msf-card .msf-badge{font-size:.65rem;font-weight:600;letter-spacing:.06em;color:#78716c;margin-bottom:.375rem}
.msf-card h3{font-size:.875rem;color:#1c1917;margin-bottom:.375rem}
.msf-card .msf-module{font-family:'IBM Plex Mono',monospace;font-size:.7rem;color:#a8a29e;margin-bottom:.5rem}
.msf-card p{font-size:.8rem;color:#57534e;line-height:1.6}
.msf-card .msf-link{font-size:.75rem;color:#78716c;text-decoration:underline;text-underline-offset:3px;decoration-color:#d6d3d1;margin-top:.5rem;display:inline-block}

/* ===== Artifact cards ===== */
.artifact-grid{display:grid;gap:1rem}
.artifact-card{border:1px solid #e7e5e4;padding:1.25rem;background:#fff}
.artifact-card h3{font-size:.875rem;color:#1c1917;margin-bottom:.25rem}
.artifact-card .artifact-role{font-size:.7rem;text-transform:uppercase;letter-spacing:.06em;color:#a8a29e;margin-bottom:.5rem}
.artifact-card p{font-size:.8rem;color:#57534e;line-height:1.6}
.artifact-card a{font-size:.75rem;color:#78716c;text-decoration:underline;text-underline-offset:3px;decoration-color:#d6d3d1;margin-top:.5rem;display:inline-block}

/* ===== Publications ===== */
.pub-list{display:grid;gap:1.25rem}
.pub-card{border:1px solid #e7e5e4;padding:1.5rem;background:#fff}
.pub-card h3{font-family:'Source Serif 4',Georgia,serif;font-size:1rem;color:#1c1917;margin-bottom:.25rem}
.pub-card .pub-meta{font-size:.75rem;color:#a8a29e;margin-bottom:.75rem}
.pub-card p{font-size:.875rem;color:#57534e;line-height:1.6;margin-bottom:.75rem}
.pub-card .pub-links{display:flex;flex-wrap:wrap;gap:.75rem}
.pub-card .pub-links a{font-size:.75rem;color:#1c1917;text-decoration:underline;text-underline-offset:3px;decoration-color:#d6d3d1}

/* ===== Timeline ===== */
.timeline-section{margin-bottom:2rem}
.timeline-heading{font-size:.7rem;text-transform:uppercase;letter-spacing:.1em;color:#a8a29e;margin-bottom:1rem}
.timeline-list{border-left:2px solid #e7e5e4;padding-left:1.25rem}
.timeline-entry{margin-bottom:1.25rem;position:relative}
.timeline-entry::before{content:'';position:absolute;left:calc(-1.25rem - 4px);top:.5rem;width:6px;height:6px;background:#d6d3d1;border-radius:50%}
.timeline-entry h4{font-size:.875rem;color:#1c1917;margin-bottom:.125rem}
.timeline-entry .timeline-place{font-size:.8rem;color:#78716c}
.timeline-entry .timeline-date{font-size:.7rem;color:#a8a29e;margin-bottom:.25rem}
.timeline-entry p{font-size:.8rem;color:#57534e;line-height:1.5}

/* ===== Contact grid ===== */
.contact-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:.75rem}
.contact-item{border:1px solid #e7e5e4;padding:1rem;background:#fff}
.contact-item .contact-label{font-size:.65rem;text-transform:uppercase;letter-spacing:.08em;color:#a8a29e;margin-bottom:.25rem}
.contact-item a{font-size:.8rem;color:#1c1917;text-decoration:underline;text-underline-offset:3px;decoration-color:#d6d3d1;word-break:break-all}

/* ===== About bio ===== */
.bio-text{font-size:.95rem;color:#57534e;line-height:1.7}
.bio-text p{margin-bottom:1rem}

/* ===== ADLAH diagram ===== */
.adlah-diagram{border:1px solid #e7e5e4;background:#fff;padding:1.5rem;margin-bottom:2rem;overflow-x:auto}
.adlah-diagram svg{width:100%;max-height:16rem}

/* ===== Blog list ===== */
.blog-filters{display:flex;flex-wrap:wrap;gap:.5rem;margin-bottom:1.5rem}
.blog-filter{font-size:.7rem;text-transform:uppercase;letter-spacing:.06em;padding:.375rem .75rem;border:1px solid #e7e5e4;background:transparent;color:#78716c;cursor:pointer;transition:all .15s}
.blog-filter:hover{border-color:#a8a29e;color:#1c1917}
.blog-filter.active{background:#1c1917;color:#fafaf9;border-color:#1c1917}
.blog-list{display:grid;gap:1rem}
.blog-entry{border:1px solid #e7e5e4;padding:1.25rem;background:#fff;transition:border-color .15s;cursor:pointer}
.blog-entry:hover{border-color:#a8a29e}
.blog-entry h3{font-size:.9rem;color:#1c1917;margin-bottom:.375rem}
.blog-entry .blog-meta{font-size:.7rem;color:#a8a29e;margin-bottom:.5rem;display:flex;flex-wrap:wrap;gap:.5rem;align-items:center}
.blog-entry .blog-meta .blog-cve{font-family:'IBM Plex Mono',monospace;font-size:.65rem;padding:.125rem .375rem;background:#f5f5f4;color:#78716c}
.blog-entry .blog-category{font-size:.6rem;text-transform:uppercase;letter-spacing:.06em;padding:.125rem .375rem;border:1px solid #e7e5e4;color:#78716c}
.blog-entry p{font-size:.8rem;color:#57534e;line-height:1.5}
.blog-tags{display:flex;flex-wrap:wrap;gap:.375rem;margin-top:.5rem}
.blog-tags span{font-size:.6rem;padding:.125rem .375rem;background:#f5f5f4;color:#a8a29e;letter-spacing:.02em}

/* ===== Blog post (prose) ===== */
.prose h2{font-size:.75rem;text-transform:uppercase;letter-spacing:.1em;color:#1c1917;margin-top:2.5rem;margin-bottom:1rem}
.prose p{font-size:.875rem;color:#57534e;line-height:1.7;margin-bottom:1rem}
.prose a{color:#1c1917;text-decoration:underline;text-underline-offset:3px;decoration-color:#a8a29e}
.prose a:hover{decoration-color:#1c1917}
.prose code{font-family:'IBM Plex Mono',monospace;font-size:.8rem;color:#1c1917;background:rgba(214,211,209,.4);padding:.125rem .375rem;border-radius:2px}
.prose pre{background:#f5f5f4;border:1px solid #e7e5e4;border-radius:4px;padding:1rem;overflow-x:auto;margin-bottom:1rem}
.prose pre code{background:none;padding:0;font-size:.75rem;line-height:1.6;color:#44403c}
.prose ul,.prose ol{margin-bottom:1rem;padding-left:1.25rem}
.prose ul{list-style:disc}
.prose ol{list-style:decimal}
.prose li{font-size:.875rem;color:#57534e;line-height:1.6;margin-bottom:.25rem}
.prose table{width:100%;border-collapse:collapse;margin-bottom:1rem;font-size:.8rem}
.prose table td,.prose table th{padding:.5rem .75rem;border-bottom:1px solid #e7e5e4;text-align:left;vertical-align:top}
.prose table td:first-child{color:#78716c;font-size:.75rem;white-space:nowrap;width:1%}
.prose table td:last-child{color:#57534e}
.prose table th{font-size:.65rem;text-transform:uppercase;letter-spacing:.08em;color:#a8a29e}
.prose table tbody tr:hover td{background:#f5f5f4}
.prose strong{color:#1c1917;font-weight:600}
.prose img{border:1px solid #e7e5e4;border-radius:4px;margin:1rem 0}
.prose .img-caption{font-size:.65rem;text-transform:uppercase;letter-spacing:.06em;color:#a8a29e;margin-top:.5rem}
.prose .originally{font-size:.7rem;color:#a8a29e;font-style:italic;margin-bottom:1.5rem}

/* ===== Footer ===== */
.footer{margin-top:6rem;border-top:1px solid #e7e5e4;background:#fafaf9}
.footer-inner{max-width:48rem;margin:0 auto;padding:2.5rem 1.5rem}
.footer-row{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:1.5rem}
.footer-copy{font-size:.75rem;color:#78716c}
.footer-links{display:flex;flex-wrap:wrap;gap:1.5rem;align-items:center}
.footer-links a,.footer-links button{font-size:.75rem;color:#78716c;background:none;border:none;cursor:pointer;transition:color .15s}
.footer-links a:hover,.footer-links button:hover{color:#1c1917}
.footer-gpg{font-family:'IBM Plex Mono',monospace;font-size:.68rem;color:#a8a29e;margin-top:1.5rem;line-height:1.6}
.footer-gpg a{color:inherit;transition:color .15s}
.footer-gpg a:hover{color:#57534e}

/* ===== Breadcrumb ===== */
.breadcrumb{font-size:.75rem;text-transform:uppercase;letter-spacing:.1em;color:#78716c;margin-bottom:1rem}
.breadcrumb a{color:#78716c;text-decoration:none;transition:color .15s}
.breadcrumb a:hover{color:#1c1917}

/* ===== Page header ===== */
.page-title{font-family:'Source Serif 4',Georgia,serif;font-size:1.75rem;color:#1c1917;margin-bottom:.75rem}
.page-lead{font-size:.95rem;color:#78716c;line-height:1.6;margin-bottom:2.5rem;max-width:36rem}

/* ===== Responsive table wrapper ===== */
.table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}

/* ===== Scrollbar ===== */
::-webkit-scrollbar{width:8px;height:8px}
::-webkit-scrollbar-track{background:#fafaf9}
::-webkit-scrollbar-thumb{background:#d6d3d1;border-radius:4px}
::-webkit-scrollbar-thumb:hover{background:#a8a29e}

/* ===== Hidden utility ===== */
.hidden{display:none!important}

/* ===== Back link ===== */
.back-link{font-size:.75rem;color:#78716c;text-decoration:none;transition:color .15s;display:inline-block;margin-bottom:1.5rem}
.back-link:hover{color:#1c1917}

/* ===== 404 ===== */
.not-found{text-align:center;padding:8rem 1.5rem}
.not-found h1{font-family:'Source Serif 4',Georgia,serif;font-size:2rem;color:#1c1917;margin-bottom:.75rem}
.not-found p{color:#78716c;margin-bottom:1.5rem}
