@charset "UTF-8";
:root{--paper:#f6f8f7;--white:#fff;--ink:#1c302b;--muted:#65746f;--line:#d9e1dd;--accent:#ff825b;--rust:#a84428;--p:0;--story-p:0;color-scheme:light;font-family:Arial,Helvetica,sans-serif;color:var(--ink);background:var(--paper)}
*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:94px}body{margin:0}a{color:inherit;text-decoration:none}button,a{-webkit-tap-highlight-color:transparent}a:focus-visible{outline:3px solid var(--rust);outline-offset:6px;border-radius:3px}button{font:inherit}::selection{background:#ffd6c7;color:var(--ink)}.wrap{width:min(1200px,calc(100% - 112px));margin-inline:auto}.skip-link{position:fixed;top:-80px;left:20px;padding:16px;background:var(--ink);color:white;z-index:1002}.skip-link:focus{top:12px}.site-header{position:sticky;top:0;background:rgba(246,248,247,.95);backdrop-filter:blur(16px);z-index:1001}.header-inner{max-width:1440px;margin:auto;padding:24px 56px;display:flex;justify-content:space-between;align-items:center}.brand{font-size:26px;font-weight:700;letter-spacing:0;display:inline-flex;align-items:center}.brand svg{width:29px;height:29px;margin-right:9px;fill:none;stroke:var(--ink);stroke-width:1.7}.brand-dot{color:var(--rust)}nav{display:flex;align-items:center;gap:42px;font-size:14px}nav a{padding:9px 0}.nav-story{color:#4d5e58}.nav-cta{font-weight:600}.nav-cta span{margin-left:15px;font-size:19px}.reading-track{height:1px;background:var(--line)}.reading-track span{display:block;height:2px;width:100%;background:var(--accent);transform:scaleX(var(--p));transform-origin:left}
.hero{display:grid;grid-template-columns:1.06fr 1fr;gap:20px 42px;padding-top:80px}.eyebrow{font-size:12px;letter-spacing:1.6px;font-weight:600;margin:0 0 31px;line-height:1.6;display:flex;align-items:center;gap:12px}.tiny-line{width:24px;height:2px;background:var(--rust)}.hero-copy{align-self:center}.hero-claim{color:var(--ink);text-wrap:balance}h1,h2,h3,p{margin-top:0}h1{font-size:clamp(44px,4.85vw,68px);line-height:1.075;letter-spacing:-.05em;font-weight:400;color:#87958e;margin-bottom:26px}.soft-text{color:#84928c}.lead{font-size:19px;line-height:1.55;color:#576860;margin-bottom:27px}.button{min-height:56px;padding:0 25px;display:inline-flex;align-items:center;justify-content:space-between;gap:40px;border-radius:4px;font-size:15px;font-weight:600;transition:background .25s,transform .25s,box-shadow .25s}.button:hover{transform:translateY(-3px);box-shadow:0 8px 18px #1c302b12}.button span{font-size:23px;font-weight:400}.button-dark{background:var(--ink);color:white}.button-dark:hover{background:#30493f}.button-orange{background:var(--accent);color:#242e28}.button-orange:hover{background:#ff966f}.hero-note{margin:15px 0 0;font-size:13px;color:var(--muted)}.hero-visual{align-self:center;position:relative;padding-top:7px}.visual-caption,.visual-foot{display:flex;justify-content:space-between;align-items:center;font-size:12px;letter-spacing:1.4px;color:#6c7a73}.visual-foot{font-size:12px;letter-spacing:0;margin:0 10px}.small-cross{font-size:23px;font-weight:300}.orbit-diagram{display:block;width:100%;overflow:visible;margin:5px 0}.crosshair{fill:none;stroke:#dbe3df;stroke-dasharray:2 6}.orbit-rings circle{fill:none;stroke:#cbd6d0;stroke-width:1}.orbit-rings circle:nth-child(2){stroke-dasharray:3 5}.orbit-highlight{fill:none;stroke:var(--accent);stroke-width:2.3;stroke-dasharray:172 1110;transform:rotate(-52deg);transform-origin:260px 260px}.orbit-scanner{transform-origin:260px 260px;animation:scan 30s linear infinite}.orbit-scanner path{stroke:#c2ccc6;stroke-width:1;stroke-dasharray:3 5}.orbit-scanner circle{fill:var(--accent);stroke:var(--paper);stroke-width:5}.orbit-center rect{fill:var(--ink)}.orbit-center text{fill:white;font-size:12px;font-weight:600;letter-spacing:.4px}.orbit-node circle{fill:var(--ink);stroke:var(--paper);stroke-width:4}.orbit-node rect{fill:#fff;stroke:#dce3df}.orbit-node text{font-size:12px;fill:var(--ink)}.coordinate{fill:none;stroke:#d2dcd6;stroke-width:1}.journey-index{grid-column:1/-1;display:grid;grid-template-columns:repeat(3,1fr);margin:68px 0 0;border-top:1px solid var(--line);padding:25px 0 33px}.journey-index a{display:flex;align-items:center;gap:16px;font-size:14px;padding:8px 25px;border-right:1px solid var(--line);transition:color .2s}.journey-index a:first-child{padding-left:0}.journey-index a:last-child{padding-right:0;border-right:0}.journey-index a:hover{color:var(--rust)}.index-number{font:12px 'Courier New',monospace;color:#718178}.index-arrow{margin-left:auto;font-size:20px;font-weight:400}
.story{background:#fff;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.story-inner{position:relative;display:grid;grid-template-columns:1fr 1.04fr;gap:78px;align-items:start}.story-copy{position:relative;padding-left:48px}.story-line{position:absolute;left:10px;top:127px;bottom:164px;width:1px;background:var(--line);overflow:hidden}.story-line span{display:block;width:1px;height:100%;background:var(--accent);transform-origin:top;transform:scaleY(var(--story-p))}.chapter{min-height:660px;display:flex;flex-direction:column;justify-content:center;align-items:flex-start;position:relative;padding-block:95px;scroll-margin-top:60px}.chapter-marker{position:absolute;left:-54px;top:calc(50% - 214px);width:32px;height:32px;background:#fff;border:1px solid var(--line);border-radius:50%;font:12px 'Courier New',monospace;display:grid;place-items:center;color:#7c8a83;transition:background .4s,border-color .4s,color .4s;z-index:1}.chapter.is-current .chapter-marker{background:var(--ink);border-color:var(--ink);color:#fff}.chapter .eyebrow{color:#6d7a73;margin-bottom:21px;font-size:12px}.hero-claim,.chapter h2{font-size:clamp(38px,3.65vw,51px);line-height:1.14;letter-spacing:-2.1px;font-weight:400;margin:0 0 24px}.chapter h2 em{font-style:normal;color:#87958e}.chapter-description{font-size:17px;line-height:1.65;color:#5f6f67;max-width:390px;margin-bottom:25px}.tags{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:28px}.tags span{border:1px solid #e1e7e3;padding:7px 10px;border-radius:4px;font-size:12px;color:#52655b;background:#fcfdfc}.takeaway{display:flex;gap:10px;font-size:14px;line-height:1.55;font-weight:500;max-width:390px;margin-bottom:25px}.takeaway>span{color:var(--rust);font-size:22px;line-height:1}.next-step{font-size:13px;color:var(--muted);display:inline-flex;gap:20px;align-items:center;min-height:34px;border-bottom:1px solid #d9e1dc}.next-step:hover{color:var(--rust)}.next-step>span{font-size:19px}.story-visual{position:sticky;top:110px;padding:0;margin-top:83px;margin-bottom:83px}.report-frame{border:1px solid #dfe6e1;background:#fff;border-radius:12px;box-shadow:0 16px 45px -20px #24493627;overflow:hidden}.report-header{display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid #e7ece9;padding:21px 26px}.report-brand{font-weight:700;font-size:17px;letter-spacing:0}.report-brand>span{color:var(--rust)}.sample-label{font-size:12px;letter-spacing:.9px;color:#74837a}.report-panels{position:relative;display:grid}.report-panel{padding:25px 27px 24px;position:relative;grid-area:1/1;min-width:0;opacity:0;visibility:hidden;transform:translateY(15px);transition:opacity .45s,transform .65s;pointer-events:none}.report-panel.active{visibility:visible;opacity:1;transform:translateY(0);pointer-events:auto}.report-heading{display:flex;justify-content:space-between;align-items:center;margin-bottom:14px}.report-kicker{font-size:12px;color:#728177;letter-spacing:1px}.report-small-icon{font-size:20px;color:#6d7d73}.report-panel h3{font-size:24px;font-weight:400;line-height:1.18;letter-spacing:-.7px;margin-bottom:9px}.report-sub{font-size:14px;color:#738076;margin-bottom:15px}.surface-map{margin-top:2px;height:144px;display:flex;align-items:center}.surface-map svg{width:100%;height:100%}.surface-map path{stroke:#cdd8d1;fill:none;stroke-width:1.2}.surface-map circle{fill:var(--accent)}.surface-map rect{fill:#f0f4f1;stroke:#d9e2dc}.surface-map text{font-size:13px;fill:var(--ink);font-family:'Courier New',monospace}.surface-map .map-end rect{fill:white}.surface-map .map-end text{font-family:Arial,sans-serif}.findings{font-size:14px}.findings>div{display:flex;align-items:center;justify-content:space-between;padding:10px 0;border-bottom:1px solid #edf0ee}.status{font-size:12px;padding:4px 8px;border-radius:3px}.warning{color:#a04b32;background:#fff0e9}.okay{color:#48715e;background:#edf4f0}.report-insight{display:flex;align-items:center;gap:13px;margin-top:21px;padding:14px 0}.insight-symbol{font-size:25px;color:#b36e52;font-weight:300}.report-insight p{font-size:12px;line-height:1.55;color:#6c7d72;margin:0}.report-footer{border-top:1px solid #e7ece9;padding:17px 27px;display:flex;align-items:center;justify-content:space-between}.report-footer>span{font-size:12px;letter-spacing:1px;color:#758277}.report-dots{display:flex;gap:6px}.report-dots i{display:block;width:5px;height:5px;background:#d7ded9;border-radius:50%;transition:background .4s,width .4s}.report-dots i.active{width:17px;background:var(--accent);border-radius:4px}.report-below{display:flex;justify-content:space-between;font-size:12px;color:#7c8b82;margin:18px 3px 0}.report-below>span:last-child{font-family:'Courier New',monospace}.attack-path{margin:25px 0 17px;position:relative}.attack-path:before{content:"";position:absolute;left:15px;top:15px;bottom:31px;width:1px;background:#d7e1da}.path-row{display:flex;align-items:center;gap:15px;position:relative;margin-bottom:22px}.path-node{flex-shrink:0;display:grid;place-items:center;font:12px 'Courier New',monospace;width:31px;height:31px;background:#f0f4f1;border:1px solid #d9e2dd;border-radius:50%}.path-node.orange{background:#ffe9df;border-color:#ffcab5;color:#a24b2e}.path-node.dark{background:var(--ink);color:white;border-color:var(--ink)}.path-row>div{display:flex;flex-direction:column;gap:6px}.path-row strong{font-size:14px;font-weight:500}.path-row>div>span{font-size:12px;color:#79877e}.path-label{font-size:12px;color:#819086;margin-left:auto;letter-spacing:.8px}.path-label.rust{color:var(--rust)}.priority-card{background:#fff5f0;border:1px solid #f4dcd0;border-radius:5px;padding:13px 15px;display:flex;flex-direction:column;gap:7px}.priority-card>div{display:flex;align-items:center;gap:9px}.priority-card strong{font-size:12px;color:#995137;font-weight:500}.priority-mark{display:grid;place-items:center;width:16px;height:16px;border-radius:50%;background:#fcdcc9;color:#9c4b29;font-size:12px}.priority-card>span{font-size:12px;margin-left:25px;color:#7a695e}.leak-query{display:flex;align-items:center;gap:10px;border:1px solid #dfe6e1;border-radius:5px;background:#f7f9f7;padding:12px 13px;margin:24px 0 14px;font:12px 'Courier New',monospace}.leak-query svg{width:18px;height:18px;fill:none;stroke:#7f9085;stroke-width:1.5}.query-label{font:12px Arial,sans-serif;color:#7a8b7f;margin-left:auto;letter-spacing:1px}.leak-entry{padding:15px 0;border-bottom:1px solid #e8eee9;display:flex;flex-direction:column;gap:8px}.leak-entry>div{display:flex;justify-content:space-between;align-items:center}.leak-type{font-size:12px;letter-spacing:1px;color:#7a8b7f}.leak-entry strong{font:13px 'Courier New',monospace;font-weight:400}.leak-entry>span{font-size:12px;color:#7a8b7f}
.closing{padding-block:79px 89px}.closing-top{display:flex;justify-content:space-between;align-items:center;margin-bottom:44px}.closing-top .eyebrow{margin:0}.closing-index{font-size:12px;color:#7d8b83;letter-spacing:1px}.closing-content{display:grid;grid-template-columns:1.15fr 1fr;gap:100px;align-items:center}.closing h2{font-size:clamp(39px,4.4vw,61px);letter-spacing:-2.7px;font-weight:400;line-height:1.12;margin-bottom:25px}.closing-content p{font-size:17px;line-height:1.6;color:#64746b;margin-bottom:26px}.order-note{display:block;color:#79877e;font-size:12px;margin-top:14px}.order-note a{text-decoration:underline;text-underline-offset:2px}.result-summary{padding:20px 0 20px 30px}.summary-label{font-size:12px;letter-spacing:1.4px;color:#728177;display:block;margin-bottom:20px}.result-summary>div{font-size:16px;display:flex;gap:15px;align-items:center;padding:19px 0;border-bottom:1px solid var(--line)}.check{font-size:14px;color:#496450;display:grid;place-items:center;background:#e6ede8;border-radius:50%;width:23px;height:23px;flex-shrink:0}.summary-foot{font-size:12px;display:block;color:#7d8b81;margin-top:21px}.site-footer{border-top:1px solid var(--line);padding-block:30px 34px;display:flex;align-items:center;justify-content:space-between;gap:20px}.footer-brand{font-size:21px}.site-footer>span{font-size:12px;color:#7a897e}.back-top{font-size:12px;display:flex;gap:20px}.back-top span{font-size:18px}.chapter>*:not(.chapter-marker){transition:opacity .6s,transform .6s}.js-ready .chapter:not(.seen)>*:not(.chapter-marker){opacity:.18;transform:translateY(18px)}
@keyframes scan{to{transform:rotate(360deg)}}
@media(min-width:1500px){.hero{padding-top:100px}.journey-index{margin-top:82px}.chapter{min-height:720px}.story-line{bottom:194px}}
@media(max-width:1100px){.wrap{width:calc(100% - 72px)}.header-inner{padding:22px 36px}.hero{gap:20px 24px;padding-top:64px}h1{letter-spacing:-.05em}.hero .eyebrow{font-size:12px;letter-spacing:1.2px}.hero-visual{margin-top:0}.visual-caption{font-size:12px;letter-spacing:1px}.story-inner{gap:35px;grid-template-columns:1fr 1fr}.story-copy{padding-left:38px}.chapter-marker{left:-44px}.hero-claim,.chapter h2{font-size:40px}.chapter-description{font-size:16px}.report-header{padding:20px}.report-panel{padding:22px 20px 0}.report-panel h3{font-size:23px}.path-row{gap:10px}.path-label{display:none}.report-footer{padding-inline:20px}.report-insight{margin-top:18px}.closing-content{gap:40px}.result-summary{padding-left:10px}.journey-index a{gap:10px;padding-inline:17px;font-size:13px}}
@media(max-width:760px){html{scroll-padding-top:82px}.wrap{width:calc(100% - 40px)}.header-inner{padding:19px 20px}.brand{font-size:23px}.brand svg{width:25px;height:25px}.nav-story{display:none}nav{font-size:13px}.nav-cta span{margin-left:6px}.hero{padding-top:46px;grid-template-columns:1fr;gap:24px}.hero .eyebrow{font-size:12px;letter-spacing:1px;margin-bottom:24px}h1{font-size:clamp(42px,9.1vw,62px);letter-spacing:-.05em;line-height:1.075;margin-bottom:24px}.lead{font-size:17px;margin-bottom:24px}.hero-note{font-size:12px}.hero-visual{width:min(440px,100%);justify-self:center;margin-top:3px}.visual-caption{font-size:12px}.visual-foot{font-size:12px}.journey-index{margin:10px 0 0;padding:12px 0 24px;gap:0}.journey-index a{align-items:flex-start;flex-direction:column;gap:10px;font-size:12px;line-height:1.45;padding:8px 14px}.journey-index a .index-arrow{display:none}.index-number{font-size:12px}.story-inner{display:flex;flex-direction:column;gap:0;width:100%;padding:0 20px}.story-copy{padding-left:0;order:0;width:100%}.story-line{left:15px;top:71px;bottom:60px}.chapter{padding:62px 0 34px 45px;min-height:0;scroll-margin-top:70px}.chapter-marker{left:0;top:60px}.chapter .eyebrow{font-size:12px;letter-spacing:1.3px;margin-bottom:22px;min-height:28px;display:flex;align-items:center}.hero-claim,.chapter h2{font-size:41px;letter-spacing:-1.8px;line-height:1.13;margin-bottom:23px}.chapter-description{font-size:16px;max-width:100%;line-height:1.65}.tags{gap:6px;margin-bottom:22px}.tags span{font-size:12px;padding:7px 8px}.takeaway{font-size:14px;margin-bottom:18px}.next-step{display:none}.story-visual{display:none}.mobile-report{width:calc(100% + 45px);margin:16px 0 0 -45px;background:var(--paper);border:1px solid #e3e9e5;border-radius:9px;overflow:hidden}.mobile-report .report-panel{visibility:visible;opacity:1;transform:none;position:relative;inset:auto;padding:22px;pointer-events:auto;background:#fff}.mobile-report .report-header{padding:16px 22px;background:white}.mobile-report .report-panel h3{font-size:24px}.mobile-report .report-insight{margin-top:10px;padding:14px 0 0}.mobile-report .surface-map{height:151px}.mobile-report .report-kicker{font-size:12px}.mobile-report .report-sub{font-size:12px}.mobile-report .path-label{display:block}.mobile-report .path-row{margin-bottom:24px}.mobile-report .leak-entry{padding-block:16px}.mobile-report .report-footer{padding:15px 22px;background:#fff}.story-copy .chapter:last-child{padding-bottom:58px}.closing{padding-block:57px 52px}.closing-top{margin-bottom:30px}.closing-top .eyebrow{font-size:12px}.closing-index{display:none}.closing-content{grid-template-columns:1fr;gap:32px}.closing h2{font-size:43px;letter-spacing:-2px;line-height:1.15}.closing-content p{font-size:16px}.result-summary{padding:12px 0 0}.result-summary>div{font-size:15px;padding-block:17px}.summary-label{margin-bottom:8px}.site-footer{padding-block:24px;flex-wrap:wrap;gap:20px}.site-footer>span{order:2;width:100%;font-size:12px}.footer-brand{font-size:22px}.back-top{font-size:12px}.js-ready .chapter:not(.seen)>*:not(.chapter-marker){opacity:1;transform:none}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation:none!important;transition:none!important}.js-ready .chapter:not(.seen)>*:not(.chapter-marker){opacity:1;transform:none}}
@media print{.site-header,.hero-visual,.next-step,.journey-index,.story-visual,.reading-track,.back-top{display:none}.wrap{width:100%}.hero,.closing-content{display:block}.hero{padding-top:0}.story-inner{display:block}.story-copy{padding-left:0}.story-line,.chapter-marker{display:none}.chapter{min-height:0;padding:35px 0;break-inside:avoid}.chapter>*{opacity:1!important;transform:none!important}.closing{padding:40px 0}.chapter-description{max-width:none}h1{font-size:44px}.hero-claim,.chapter h2,.closing h2{font-size:32px}.result-summary{padding-left:0}.mobile-report{display:none}}
/* Threat map (#38) */
.threat-map{padding-block:79px 30px;position:relative;isolation:isolate}.threat-map h2{font-size:clamp(34px,3.6vw,52px);line-height:1.1;letter-spacing:-.04em;font-weight:400;margin-bottom:18px}.tm-lead{max-width:640px}
.tm-hero-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:24px;margin-top:36px}
.tm-stat .num{font-size:clamp(28px,3.6vw,46px);letter-spacing:-.04em;line-height:1;color:var(--ink)}
.tm-stat .num.tm-skel{color:#a9b5b0}.tm-stat .lbl{font-size:11px;font-weight:600;letter-spacing:1.6px;text-transform:uppercase;color:var(--muted);margin-top:10px}
.tm-last-updated{font-size:12px;color:var(--muted);margin-top:22px;letter-spacing:1px}
.tm-error{display:none;background:#fff1ec;border:1px solid var(--accent);border-radius:6px;padding:14px 18px;color:var(--rust);font-size:14px;margin-top:20px}.tm-error.show{display:block}
.tm-map-wrap{position:relative;background:var(--white);border:1px solid var(--line);border-radius:8px;overflow:hidden;margin-top:28px}
#tm-map{width:100%;height:520px;background:#f1f5f3}
.tm-map-legend{position:absolute;bottom:18px;right:18px;background:rgba(255,255,255,.92);border:1px solid var(--line);border-radius:6px;padding:7px 11px;font-size:11px;display:flex;align-items:center;gap:8px;color:var(--muted);z-index:401;pointer-events:none}
.tm-map-legend .bar{display:inline-block;width:120px;height:8px;border-radius:2px;background:linear-gradient(90deg,#cfe3d9 0%,#a9c9b9 20%,#ffc9b5 40%,#ffa787 60%,#ff825b 80%,#a84428 100%)}
.tm-noscript{color:var(--muted)}
.leaflet-container{font-family:Arial,Helvetica,sans-serif;outline:0}
.leaflet-tooltip.leaflet-tooltip-top{background:var(--white);color:var(--ink);border:1px solid var(--line);box-shadow:0 8px 22px #1c302b1f;border-radius:6px;padding:9px 12px;font-size:13px}
.tm-tip-muted{color:var(--muted)}.tm-tip-small{font-size:11px;margin-top:3px}
.leaflet-control-attribution{font-size:10px}
@media(max-width:760px){.tm-hero-stats{grid-template-columns:1fr 1fr}#tm-map{height:380px}}
@media print{.tm-map-wrap{display:none}}
.closing .order-note{color:var(--muted)}/* #208: WCAG AA for the 12px order note, #65746f on #f6f8f7 = 4.60:1 (was #79877e, 3.53:1); see tests/check_contrast.py */
/* Pricing (#39) */
.pricing{padding-block:79px 40px}.pricing h2{font-size:clamp(34px,3.6vw,52px);line-height:1.1;letter-spacing:-.04em;font-weight:400;margin-bottom:18px}.pricing-lead{max-width:640px}
.pricing-wrap{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,280px),1fr));gap:28px;margin-top:40px}
.plan{position:relative;background:var(--white);border:1px solid var(--line);border-radius:8px;padding:34px 32px 32px;display:flex;flex-direction:column}
.plan.featured{border-color:var(--accent);box-shadow:0 14px 34px #1c302b14}
.plan-flag{position:absolute;top:-13px;left:32px;background:var(--accent);color:#242e28;font-size:12px;font-weight:600;letter-spacing:.6px;padding:5px 12px;border-radius:999px}
.plan-name{font-size:13px;letter-spacing:1.6px;font-weight:700;margin-bottom:14px;color:var(--rust)}
.plan-price{display:flex;align-items:baseline;gap:8px;margin-bottom:10px}.plan-price .amount{font-size:46px;letter-spacing:-.04em}.plan-price .period{color:var(--muted);font-size:15px}
.plan-tagline{color:#576860;line-height:1.5;min-height:3em}.plan-divider{border:0;border-top:1px solid var(--line);margin:8px 0 18px;width:100%}
.plan-features{list-style:none;padding:0;margin:0 0 28px;display:grid;gap:11px;flex:1}.plan-features li{padding-left:26px;position:relative;line-height:1.4}
.plan-features li::before{content:"✓";position:absolute;left:0;color:var(--rust);font-weight:700}
.soon{font-size:11px;letter-spacing:.5px;text-transform:uppercase;background:#ffe6dd;color:var(--rust);padding:2px 7px;border-radius:999px;margin-left:6px}
.plan-btn{align-self:flex-start}.plan-footnote{color:var(--muted);font-size:14px;margin-top:22px}.plan-footnote a{text-decoration:underline}
@media(max-width:760px){.pricing-wrap{grid-template-columns:1fr}.plan-btn{align-self:stretch;width:100%;justify-content:center;text-align:center}.plan{padding:30px 22px 26px}.plan-flag{left:22px}}
@media print{.plan{break-inside:avoid}}
.team{padding-block:79px 40px}.team h2{font-size:clamp(34px,3.6vw,52px);line-height:1.1;letter-spacing:-.04em;font-weight:400;margin-bottom:18px}.team-lead{max-width:640px}.team-groups{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:28px;margin-top:40px;max-width:980px}.team-group{font-size:12px;letter-spacing:1.4px;text-transform:uppercase;color:#728177;font-weight:500;margin:0 0 6px}.team-list{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.team-member{display:flex;flex-direction:column;align-items:center;text-align:center;gap:4px;height:100%;padding:24px 16px 20px;background:var(--white);border:1px solid var(--line);border-radius:16px;box-shadow:0 1px 2px rgba(28,48,43,.04);transition:transform .2s ease,box-shadow .2s ease,border-color .2s ease}.team-member:hover,.team-member:focus-within{transform:translateY(-3px);border-color:var(--accent);box-shadow:0 10px 24px rgba(28,48,43,.10)}.team-avatar{width:96px;height:96px;flex:none;border-radius:50%;object-fit:cover;background:#e7ece9;display:block;margin-bottom:12px;box-shadow:0 0 0 3px var(--white),0 0 0 4px var(--line)}.team-member:hover .team-avatar,.team-member:focus-within .team-avatar{box-shadow:0 0 0 3px var(--white),0 0 0 5px var(--accent)}.team-initials{display:grid;place-items:center;color:var(--ink);font-size:28px;font-weight:600;letter-spacing:.5px}.team-name{font-size:18px;line-height:1.25;overflow-wrap:anywhere}.team-role{font-size:14px;color:#64746b}.team-link{display:inline-flex;align-items:center;gap:6px;margin-top:auto;padding-top:12px;font-size:14px;color:var(--ink);text-decoration:none}.team-link .team-link-text{text-decoration:underline;text-underline-offset:2px}.team-link:hover,.team-link:focus-visible{color:var(--rust)}.team-li-icon{flex:none;display:block}.visually-hidden{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}
@media(max-width:760px){.team-groups{grid-template-columns:1fr;gap:20px}}@media(max-width:420px){.team-list{gap:12px}.team-member{padding:20px 10px 16px}.team-avatar{width:80px;height:80px}.team-name{font-size:16px}}@media(prefers-reduced-motion:reduce){.team-member:hover,.team-member:focus-within{transform:none}}
/* Early warning CVE briefing (#422), directly below the threat map. Two columns from 961px: the intro, stats, 'Updated' and the CTA on the left, the list (or the empty / unavailable notice) on the right - the fragment's lines are direct children of the section, so they are placed by class. The trailing 1fr row takes the list's extra height, so the left column stays packed. Below 961px everything stacks in source order (list, then the CTA). */
.early-warning{padding-block:72px 48px;display:grid;grid-template-columns:minmax(0,5fr) minmax(0,7fr);grid-template-rows:repeat(10,auto) 1fr;column-gap:72px;align-items:start}
.early-warning>*{grid-column:1}
.early-warning>.ew-list,.early-warning>.ew-empty,.early-warning>.ew-unavailable{grid-column:2;grid-row:1/-1}
.early-warning h2{font-size:clamp(32px,3.2vw,46px);line-height:1.1;letter-spacing:-.04em;font-weight:400;margin-bottom:18px;text-wrap:balance}.ew-lead{max-width:520px;margin-bottom:20px}
.ew-rule{font-size:13px;line-height:1.6;color:#576860;margin:0;max-width:520px;padding:2px 0 2px 14px;border-left:2px solid var(--accent)}
.ew-stats{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px;margin-top:28px;padding-top:24px;border-top:1px solid var(--line);max-width:520px}.ew-stats .num{font-variant-numeric:tabular-nums}
.ew-updated{font-size:12px;color:#576860;margin:18px 0 0;letter-spacing:1px}
/* #422: the one way on from the section - the site's primary (orange) button, a >= 44px tap target (.button is 56px high), full width on mobile. #422 follow-up: on two columns it sits in the last (1fr) row, at its bottom, so the left column ends where the list of 4 does - whichever of the two is taller */
.ew-cta{margin-top:30px;justify-self:start;grid-row:-2;align-self:end}
.ew-list{list-style:none;margin:0;padding:0;display:grid;gap:12px;counter-reset:ew}
.ew-item{position:relative;background:var(--white);border:1px solid var(--line);border-radius:8px;padding:6px 20px 16px 62px;counter-increment:ew;transition:border-color .2s,box-shadow .2s}
.ew-item::before{content:counter(ew,decimal-leading-zero);position:absolute;left:22px;top:20px;font:12px 'Courier New',monospace;color:var(--muted)}
.ew-item:hover,.ew-item:focus-within{border-color:#c5d0ca;box-shadow:0 10px 24px rgba(28,48,43,.08)}
.ew-head{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px;margin:0 0 8px;min-height:44px}
.ew-cve{display:inline-flex;align-items:center;min-height:44px;margin-right:2px;font-size:15px;font-weight:700;color:var(--ink);text-decoration:underline;text-decoration-color:#b9c6bf;text-underline-offset:4px}.ew-cve:hover{color:var(--rust);text-decoration-color:currentColor}
/* #422: inline-block, not flex: the KEV date is a <time> inside the label, and a flex gap would put space around it ('added 12 Oct 2026 )') */
.ew-sig{display:inline-block;background:#fff0e9;border:1px solid #f6d6c8;border-radius:999px;padding:4px 10px;font-size:12px;font-weight:600;line-height:1.35;color:#9c4126}
.ew-sig svg{display:inline-block;vertical-align:-2px;margin-right:6px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
/* #422: scanner templates are informational, so .ew-sig-extra rides next to the main badge as a second, quieter one */
.ew-sig-extra{background:#f3f6f4;border-color:var(--line);font-weight:400;color:#52655b}
/* #422 follow-up: the CVSS label right after the CVE id - the severity word and the score as text ("CRITICAL 9.8", never colour alone); a squarer tag than the badges, so it reads as a rating, not a signal. inline-block like .ew-sig (check_landing.py rejects flex/grid on both). Each text/background pair is AA (check_contrast.py) */
.ew-sev{display:inline-block;border:1px solid;border-radius:4px;padding:3px 7px;font-size:11px;font-weight:700;line-height:1.35;letter-spacing:.06em;font-variant-numeric:tabular-nums}
.ew-sev-critical{background:#fde8e6;border-color:#f1b7b0;color:#9b1c13}
.ew-sev-high{background:#fff1e3;border-color:#f3cda3;color:#8a4200}
.ew-sev-medium{background:#fcf5d7;border-color:#e6d58a;color:#665000}
.ew-sev-low{background:#eaf1fa;border-color:#c3d5ea;color:#2a5682}
.ew-body{display:flex;flex-direction:column;gap:3px;margin:2px 0 0}.ew-product{font-size:14px;font-weight:600;color:var(--ink)}
.ew-summary{font-size:14px;line-height:1.55;color:#576860;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}
.ew-item:hover .ew-summary,.ew-item:focus-within .ew-summary{-webkit-line-clamp:unset;overflow:visible}
/* states inside the markers: .ew-stale banner at the top of the rendered block ("Data may be out of date (last update …)"), .ew-empty in place of the list when the run found no CVE meeting the criteria (the stats and the Updated line stay), .ew-unavailable in place of the whole block once data existed and went away */
.ew-stale{background:#fff6ee;border:1px solid var(--accent);border-radius:6px;padding:12px 16px;color:var(--rust);font-size:14px;line-height:1.45;margin:24px 0 0;max-width:520px}
.ew-empty,.ew-unavailable{background:var(--white);border:1px dashed #c5d0ca;border-radius:8px;padding:28px 24px;color:#576860;font-size:15px;line-height:1.5;margin:0}
.ew-never{background:var(--white);border:1px solid var(--line);border-radius:6px;padding:14px 18px;color:#576860;font-size:14px;margin:26px 0 0}
@media(max-width:960px){.early-warning{grid-template-columns:minmax(0,1fr);grid-template-rows:none}.early-warning>.ew-list,.early-warning>.ew-empty,.early-warning>.ew-unavailable,.ew-cta{grid-column:1;grid-row:auto;margin-top:28px}.ew-cta{margin-top:30px}.ew-lead,.ew-rule,.ew-stats,.ew-stale{max-width:640px}}
@media(max-width:760px){.early-warning{padding-block:56px 32px}.ew-item{padding:4px 16px 14px 48px}.ew-item::before{left:16px;top:18px}.ew-head{gap:6px 8px}.ew-cve{font-size:14px}.ew-sig{font-size:11px;padding:3px 8px}.ew-summary{font-size:13px}.ew-cta{justify-self:stretch;width:100%}}
@media print{.ew-summary{-webkit-line-clamp:unset;overflow:visible}.ew-cta{display:none}}
/* #422: the section shows only what is really rendered between the markers, i.e. a block with an .ew-updated line dating its data (ok, stale, unavailable). Everything else is hidden whole - the .ew-never stub nginx serves while no fragment exists, and the raw SSI include comment on a host without `ssi` (a local file, a static host), which renders nothing at all - so the page never shows a heading, the listing criteria and a CTA over a briefing it does not have. It is hiding in CSS on purpose: the page is read-only for the job, which writes only its own fragment. These two rules stay last in the block, after the media queries, which never touch display. */
.early-warning:not(:has(.ew-updated)){display:none}
/* ... and :has is the only way a stylesheet can look inside the block (CSS has no parent selector), so where it is missing the section cannot tell its own state: it shows nothing at all rather than a heading, the criteria and a CTA over a briefing that may not exist. */
@supports not selector(:has(*)){.early-warning{display:none}}
/* #422: the data attribution of the early warning briefing - one static line in the page footer (index.html, never the job's fragment), so it is on the page whether or not the section is shown. Small print, AA on --paper (check_contrast.py) */
.site-footer{flex-wrap:wrap}
.footer-attrib{order:3;flex:1 1 100%;margin:0;font-size:12px;line-height:1.6;color:var(--muted);max-width:980px}
.footer-attrib-link{color:var(--ink);text-decoration:underline;text-underline-offset:2px}.footer-attrib-link:hover{color:var(--rust)}
