﻿/* A readable product shell. Kept after the legacy theme intentionally. */
.ek-system-map { margin:0 0 22px; border:1px solid #cfddc6; border-radius:11px; background:radial-gradient(ellipse at 50% 35%,#e2edda 0,transparent 65%),#f8faf3; padding:20px 24px 14px; }
.ek-system-map figcaption { display:flex; align-items:center; gap:12px; flex-wrap:wrap; padding-bottom:12px; border-bottom:1px dashed #ccd9c2; }
.ek-system-map figcaption .ek-eyebrow { margin:0; font-size:9px; }
.ek-system-map figcaption strong { color:var(--ek-green); font-size:12px; font-weight:600; }
.ek-map-concept { margin-left:auto; font-size:10px; color:var(--ek-muted); }
.ek-map-flow { position:relative; display:grid; grid-template-columns:repeat(3,1fr); gap:14px; padding:28px 0 16px; }
.ek-map-wires { position:absolute; inset:0; width:100%; height:155px; pointer-events:none; stroke:#9bb78a; stroke-width:1.5; fill:none; color:#718f60; }
.ek-map-return { stroke-dasharray:3 5; opacity:.7; }
.ek-map-wire { stroke:#abc796; stroke-width:2; }
.ek-map-packet { stroke:#367b36; stroke-width:3; stroke-dasharray:8 240; opacity:0; }
.ek-map-return-label { position:absolute; top:9px; left:21%; font-size:9px; color:#5a7450; background:#f1f6e9; padding:0 7px; border-radius:3px; }
.ek-map-node { position:relative; z-index:1; text-align:center; min-width:0; }
.ek-map-node img { display:block; width:124px; height:92px; object-fit:contain; margin:0 auto 8px; filter:drop-shadow(0 5px 5px #15310e09); }
.ek-map-node>strong { display:block; font-size:13px; line-height:1.4; color:var(--ek-ink); }
.ek-map-node>span { display:block; color:var(--ek-muted); font-size:11px; line-height:1.5; margin-top:5px; }
.ek-map-verdicts { display:flex; flex-wrap:wrap; justify-content:center; gap:5px; margin-top:7px; }
.ek-map-verdicts>span { font-size:9px; font-weight:600; color:#607458; padding:2px 7px; border:1px solid #d0dec5; border-radius:3px; background:#f8faf4; }
.ek-map-verdicts>span.is-chosen { background:#195b38; border-color:#195b38; color:white; }
.ek-map-verdicts>[data-map-verdict=REVIEW].is-chosen { background:#98640c;border-color:#98640c; }
.ek-map-verdicts>[data-map-verdict=BLOCKED].is-chosen { background:#a13d27;border-color:#a13d27; }
.ek-map-code { display:flex; gap:12px; padding:12px 16px; border-radius:6px; background:#173b29; color:#e0eecd; align-items:baseline; }
.ek-map-code>span { color:#9dc681; font-size:14px; }
.ek-map-code code { background:none; color:inherit; font:11px/1.6 ui-monospace,Consolas,monospace; white-space:normal; overflow-wrap:anywhere; }
.ek-page .ek-map-note { font-size:10px; text-align:center; padding-top:10px; color:#5c7152; }
.ek-system-map.is-running .ek-map-packet { animation:ek-packet 1.6s ease-in-out 2; }
.ek-system-map.is-running .ek-map-node-control img { animation:ek-control-light 1.2s ease-out 2; }
.ek-system-map.has-result .ek-map-return { stroke:#44842f; opacity:1; }
@keyframes ek-packet { 0%{stroke-dashoffset:190;opacity:0}20%{opacity:1}80%{opacity:1}100%{stroke-dashoffset:-280;opacity:0} }
@keyframes ek-control-light { 50%{filter:drop-shadow(0 0 11px #79b35180)} }
@media(max-width:600px) { .ek-system-map{padding:14px 12px 12px}.ek-system-map figcaption{gap:4px 10px}.ek-map-concept{width:100%;margin:0;font-size:9px}.ek-map-flow{gap:5px;padding-top:22px}.ek-map-node img{width:74px;height:64px}.ek-map-node>strong{font-size:10px}.ek-map-node>span{font-size:9px}.ek-map-verdicts{gap:3px}.ek-map-verdicts>span{font-size:8px;padding:2px 4px}.ek-map-wires{height:110px}.ek-map-return-label{font-size:7px;left:15%;top:8px}.ek-map-code{padding:10px;gap:8px}.ek-map-code code{font-size:9px}.ek-page .ek-map-note{font-size:9px} }
.ek-industry-picker { margin:26px 0; }
.ek-industry-picker .ek-field-label>span { font-weight:400; margin-left:8px; color:var(--ek-muted); }
.ek-industry-picker p { margin-top:8px; }
.ek-route-heading { display:flex; justify-content:space-between; border-bottom:1px solid var(--ek-line); padding:16px 0; color:var(--ek-ink); font-size:13px; }
.ek-route-heading span { font-size:12px; color:var(--ek-muted); }
.ek-route-question { padding:24px 0 0; margin:0; border:0; min-width:0; }
.ek-route-question legend { float:left; width:100%; font-size:15px; line-height:1.5; font-weight:650; color:var(--ek-ink); margin-bottom:5px; }
.ek-route-question legend span { font-size:11px; color:var(--ek-green); margin-right:9px; }
.ek-route-question>p { clear:both; }
.ek-route-options { display:flex; flex-wrap:wrap; gap:8px; margin-top:14px; }
.ek-route-options button { border:1px solid #c3d1be; background:white; color:#38513e; border-radius:6px; padding:11px 13px; min-height:42px; font:500 12px/1.5 Inter,sans-serif; cursor:pointer; }
.ek-route-options button:hover { background:#f0f6eb; }
.ek-route-options button[aria-pressed=true] { color:var(--ek-green); background:#e9f3e3; border-color:var(--ek-green); box-shadow:inset 0 0 0 1px var(--ek-green); }
.ek-route-refine { border:1px solid var(--ek-line); border-radius:7px; margin-top:26px; background:#f8faf5; }
.ek-route-refine summary { padding:15px 18px; font-size:13px; color:var(--ek-green); cursor:pointer; }
.ek-route-refine summary>span { font-size:11px; color:var(--ek-muted); margin-left:12px; }
.ek-route-refine-body { padding:6px 18px 20px; }
.ek-route-refine-body>.ek-field-label:not(:first-child) { margin-top:20px; }
.ek-route-refine-body p { margin:7px 0; }
.ek-obligation-combo { position:relative; display:flex; margin-top:12px; }
.ek-obligation-combo input { min-width:0; width:100%; min-height:46px; border:1px solid #b6c8b2; border-radius:6px 0 0 6px; background:white; color:var(--ek-ink); padding:11px 12px; font:400 13px/1.5 Inter,sans-serif; }
.ek-obligation-combo>button { width:42px; flex-shrink:0; border:1px solid #b6c8b2; border-left:0; background:#edf3e7; border-radius:0 6px 6px 0; cursor:pointer; color:var(--ek-green); }
.ek-obligation-combo ul { z-index:10; list-style:none; position:absolute; top:calc(100% + 5px); left:0; right:0; background:white; border:1px solid #b6c8b2; border-radius:6px; padding:5px; margin:0; max-height:235px; overflow:auto; box-shadow:0 12px 20px #162f191a; }
.ek-obligation-combo li { padding:10px; font-size:13px; color:var(--ek-ink); cursor:pointer; border-radius:4px; }
.ek-obligation-combo li:hover,.ek-obligation-combo li[aria-selected=true] { background:#eaf2e4; }
.ek-obligation-combo li.ek-obligation-empty { color:var(--ek-muted); cursor:default; }
.ek-route-hint { font-size:12px!important; margin-top:20px!important; }
.ek-compatible-example { border-top:1px solid var(--ek-line); margin-top:18px; padding-top:18px; }
.ek-compatible-example p { margin-top:8px; }
.ek-compatible-example select:disabled { color:#697360; background:#e9eee3; }
.ek-route-more { border-top:1px solid #d3decb; margin-top:20px; padding-top:14px; }
.ek-route-more summary { font-size:12px; color:var(--ek-green); cursor:pointer; }
.ek-route-more .ek-actions { margin-top:12px; }
@media(max-width:600px) { .ek-route-options {display:grid;grid-template-columns:1fr}.ek-route-options button{text-align:left;padding:12px}.ek-route-question legend{font-size:14px}.ek-route-refine summary>span{margin-left:6px} }
/* Lighthouse uses the same quiet workspace shell, not a second marketing page. */
.product-page .lighthouse-page { background:var(--ek-paper); }
.product-page .lighthouse-wrap { width:100%; max-width:none; }
.ek-workspace-tabs { display:flex; gap:24px; border-bottom:1px solid var(--ek-line); }
.ek-workspace-tabs button { border:0; border-bottom:2px solid transparent; padding:14px 2px; font:600 14px/1.5 Inter,sans-serif; background:none; color:var(--ek-muted); cursor:pointer; }
.ek-workspace-tabs button[aria-pressed=true] { color:var(--ek-green); border-bottom-color:var(--ek-green); }
.product-page .lighthouse-library { padding:28px 0 32px; }
.product-page .lighthouse-library-heading { margin-bottom:20px; }
.product-page .lighthouse-library-heading h2 { font-size:23px; line-height:1.3; letter-spacing:-.6px; margin:0 0 8px; }
.product-page .lighthouse-library-heading p { font-size:13px; }
.product-page .lh-library-toolbar { box-shadow:none; border-radius:9px; border-color:var(--ek-line); background:#fffefa; }
.product-page .lh-library-toolbar label { color:var(--ek-muted); font-size:11px; text-transform:none; letter-spacing:0; }
.product-page .lh-library-toolbar input,.product-page .lh-library-toolbar select { font-size:14px; color:var(--ek-ink); border-color:#becdba; }
.product-page .lh-library-card { box-shadow:none; border-color:var(--ek-line); border-radius:8px; }
.product-page .lh-library-card>summary { grid-template-columns:76px minmax(0,1fr) auto 18px; padding:16px; gap:12px; }
.product-page .lh-library-title strong { font:600 14px/1.4 Inter,sans-serif; color:var(--ek-ink); white-space:normal; }
.product-page .lh-library-title small { font-size:12px; color:var(--ek-muted); }
.product-page .lh-library-type { font-size:9px; letter-spacing:.5px; color:var(--ek-muted); }
.product-page .lh-library-status { font-size:9px; border-radius:4px; }
.product-page .lh-library-detail { top:100px; background:#edf3e8; border:1px solid var(--ek-line); box-shadow:none; border-radius:10px; padding:24px; }
.product-page .lh-library-detail h3 { font:650 23px/1.2 Inter,sans-serif; color:var(--ek-ink); }
.product-page .lh-library-detail>p { font-size:13px; }
.product-page .lh-detail-facts dt { font-size:10px; color:var(--ek-muted); }
.product-page .lh-detail-facts dd { font-size:13px; overflow-wrap:anywhere; }
.product-page .lh-library-workspace { grid-template-columns:minmax(0,1.6fr) minmax(280px,1fr); }
.product-page .lighthouse-boundary { padding:26px 0 42px; gap:30px; grid-template-columns:1fr 2fr; }
.product-page .lighthouse-boundary h2 { font-size:22px; line-height:1.3; margin-top:0; }
.product-page .lighthouse-boundary p { font-size:13px; }
.product-page .lighthouse-boundary .ent-eyebrow { display:none; }
.ek-private-tools { border:1px solid var(--ek-line); background:#f0f4eb; border-radius:8px; margin-bottom:18px; }
.ek-private-tools summary { padding:14px 18px; cursor:pointer; color:var(--ek-green); font-size:12px; font-weight:600; }
.ek-private-tools summary>span { font-size:11px; font-weight:400; color:var(--ek-muted); margin-left:12px; }
.ek-private-tools-body { padding:0 18px 18px; }
.ek-private-tools-body p { font-size:12px; max-width:760px; }
.ek-private-tools-body .ek-actions { margin:18px 0 12px; }
.ek-file-label { position:relative; overflow:hidden; }
.ek-file-label input { position:absolute; inset:0; width:100%; height:100%; opacity:0; cursor:pointer; }
.ek-file-label:focus-within { outline:3px solid var(--ek-green); outline-offset:3px; }
.ek-lh-mode-note { background:#fff1d4; border-left:3px solid #b17b16; padding:14px; font-size:13px; margin-top:18px!important; }
.product-page .lighthouse-flow { perspective:none; gap:12px; padding:24px 0 0; }
.product-page .lighthouse-flow::before { display:none; }
.product-page .lh-step { animation:none; box-shadow:none; border-radius:8px; padding:20px; }
.product-page .lh-step:hover { transform:none; }
.product-page .lh-step strong { font:650 16px/1.3 Inter,sans-serif; color:var(--ek-ink); }
.product-page .lh-step span { font-size:12px; color:var(--ek-muted); }
.product-page .lh-card { box-shadow:none; border-radius:10px; border-color:var(--ek-line); padding:26px; }
.product-page .lh-card h2 { font-size:25px; }
.product-page .lh-card p { font-size:13px; }
.product-page .lh-card input,.product-page .lh-card textarea,.product-page .lh-card select { font-size:13px; border-radius:6px; }
.product-page .lighthouse-page .button { background:var(--ek-green); border-radius:6px; font-size:13px; box-shadow:none; }
.product-page .lighthouse-page button:disabled { opacity:.5; cursor:not-allowed; }
.product-page [data-lh-online-download][aria-disabled=true] { opacity:.45; cursor:not-allowed; }
.product-page .lh-verify-sec h2 { font-size:26px; }
.product-page .lh-verify-sec p { font-size:14px; opacity:1; }
@media(max-width:900px) { .product-page .lh-library-workspace { grid-template-columns:1fr; }.product-page .lh-library-detail{position:static}.product-page .lighthouse-flow{display:grid;grid-template-columns:1fr 1fr}.product-page .lh-arrow{display:none}.product-page .lighthouse-boundary{grid-template-columns:1fr;gap:10px} }
@media(max-width:600px) { .ek-workspace-tabs{gap:18px}.ek-workspace-tabs button{font-size:12px}.ek-private-tools summary>span{display:block;margin:7px 0 0}.product-page .lh-library-card>summary{grid-template-columns:1fr auto 16px;gap:7px 10px}.product-page .lh-library-card>summary .lh-library-title{grid-column:1/-1;grid-row:2}.product-page .lh-library-type{grid-column:1;grid-row:1}.product-page .lh-library-status{grid-column:2;grid-row:1}.product-page .lh-library-chevron{grid-column:3;grid-row:1}.product-page .lh-library-title small{display:none}.product-page .lighthouse-flow{grid-template-columns:1fr}.product-page .lh-card{padding:20px}.product-page .lh-verify-facts div{grid-template-columns:1fr;gap:3px} }
:root { --ek-ink:#142e25; --ek-muted:#53685f; --ek-green:#0d5b3d; --ek-line:#d4ded5; --ek-paper:#fbfaf6; --ek-tint:#edf3ed; }
.ek-nav.nav { background:#fffefa; border-bottom:1px solid var(--ek-line); box-shadow:none; height:80px; }
.ek-nav .nav-inner { max-width:1400px; width:100%; padding:0 36px; gap:32px; height:80px; }
.ek-nav .nav-logo { color:var(--ek-ink); font-size:25px; font-weight:750; letter-spacing:-1px; gap:10px; flex-shrink:0; }
.ek-nav .nav-logo img { width:36px; height:36px; object-fit:contain; }
.ek-nav .nav-links { gap:6px; margin:0 auto; align-items:center; flex-wrap:nowrap; }
.ek-nav .nav-link { display:flex; align-items:center; gap:5px; padding:9px 12px; font-size:14px; color:#354b41; border:0!important; box-shadow:none!important; white-space:nowrap; border-radius:6px; }
.ek-nav .nav-link::after,.ek-nav .nav-link::before { display:none!important; }
.ek-nav .nav-link:hover,.ek-nav .nav-link.active { color:var(--ek-green); background:#eaf1e9; }
.ek-nav-actions { display:flex; align-items:center; gap:16px; flex-shrink:0; }
.ek-nav .nav-account { border:0; background:none; font-size:14px; color:var(--ek-ink); padding:10px 0; white-space:nowrap; }
.ek-lighthouse-icon { width:20px; height:23px; object-fit:contain; }
.ek-footer { color:var(--ek-muted); background:#f1f4ef; border-top:1px solid var(--ek-line); padding:56px 32px 24px; }
.ek-footer-inner { display:grid; grid-template-columns:1.5fr 1fr 1fr 1fr; gap:36px; max-width:1200px; margin:auto; }
.ek-footer h2 { font:700 13px/1.5 Inter,sans-serif; color:var(--ek-ink); margin:0 0 16px; }
.ek-footer a { display:block; color:var(--ek-muted); font-size:13px; line-height:1.6; margin:8px 0; text-decoration:none; }
.ek-footer a:hover { color:var(--ek-green); text-decoration:underline; }
.ek-footer-brand>a { font-size:26px; font-weight:750; letter-spacing:-1px; color:var(--ek-ink); margin-top:0; }
.ek-footer p { color:var(--ek-muted); font-size:13px; line-height:1.7; }
.ek-footer-bottom { grid-column:1/-1; border-top:1px solid var(--ek-line); padding-top:20px; display:flex; justify-content:space-between; gap:24px; }
.ek-footer-bottom>div { display:flex; flex-wrap:wrap; gap:20px; }
.ek-footer-bottom a { margin:0; font-size:12px; }
.product-page { zoom:1!important; background:var(--ek-paper); color:var(--ek-ink); font-family:Inter,Arial,sans-serif; }
.product-page #main-content { background:var(--ek-paper); }
.product-page .scroll-bar { display:none; }
.product-page .btt-btn { display:none; }
.ek-page { max-width:1320px; margin:auto; padding:80px 36px 0; }
.ek-page *, .ek-demo * { box-sizing:border-box; }
.ek-page [hidden],.ek-demo [hidden],.lighthouse-page [hidden] { display:none!important; }
.ek-page h1,.ek-page h2,.ek-page h3,.ek-page h4 { color:var(--ek-ink); font-family:Inter,Arial,sans-serif; margin:0; font-weight:650; }
.ek-page p { color:var(--ek-muted); line-height:1.65; margin:0; }
.ek-eyebrow,.ek-step-label { display:block; color:var(--ek-green); font-size:11px; line-height:1.6; letter-spacing:1.4px; text-transform:uppercase; font-weight:700; }
.ek-eyebrow { margin-bottom:16px; }
.ek-step-label { letter-spacing:1px; }
.ek-hero { text-align:center; padding:66px 0 42px; }
.ek-hero h1 { font-size:clamp(38px,5vw,68px); line-height:1.09; letter-spacing:-3px; }
.ek-hero h1 em { color:var(--ek-green); font-style:normal; }
.ek-hero>p { font-size:18px; margin:22px 0 25px; }
.ek-live-dot { width:7px; height:7px; border-radius:50%; display:inline-block; background:#288758; margin-right:8px; box-shadow:0 0 0 4px #e4eee3; }
.ek-actions { display:flex; flex-wrap:wrap; align-items:center; gap:12px; }
.ek-hero .ek-actions { justify-content:center; }
.ek-button { display:inline-flex; align-items:center; justify-content:center; gap:14px; background:#fffefa; border:1px solid #bfcfc3; color:var(--ek-green); border-radius:7px; padding:12px 18px; min-height:44px; font:600 13px/1.4 Inter,Arial,sans-serif; text-decoration:none; cursor:pointer; box-shadow:0 1px 1px #102e2505; transition:background .18s,border-color .18s,transform .18s; }
.ek-button:hover { background:#edf3eb; border-color:#789b86; color:var(--ek-green); transform:translateY(-1px); }
.ek-button-primary { color:white; background:var(--ek-green); border-color:var(--ek-green); }
.ek-button-primary:hover { background:#094b32; color:white; }
.ek-button:disabled { opacity:.5; cursor:not-allowed; transform:none; }
.ek-text-link { font-size:14px; line-height:1.5; color:var(--ek-green); font-weight:600; text-decoration:none; }
.ek-text-link:hover { text-decoration:underline; }
.ek-demo { border:1px solid #cdd9cc; background:#f0f4ed; padding:20px; border-radius:18px; box-shadow:0 16px 48px #1c3b2010; }
.ek-demo-toolbar { display:flex; justify-content:space-between; align-items:center; gap:10px; padding:0 4px 16px; }
.ek-demo-toolbar .ek-eyebrow { margin:0; }
.ek-demo-label { font-size:11px; color:var(--ek-muted); }
.ek-demo-environment { display:flex; align-items:center; justify-content:space-between; gap:16px; padding:14px 4px 18px; border-top:1px solid #d8e1d3; }
.ek-demo-environment>span { font-size:12px; color:var(--ek-muted); font-weight:600; }
.ek-segment { display:flex; padding:3px; border:1px solid #cbd7cb; border-radius:7px; background:#e5ece2; gap:3px; }
.ek-segment button { flex:1; border:0; border-radius:4px; background:transparent; color:#40594a; font:600 12px/1.5 Inter,Arial,sans-serif; padding:8px 15px; min-height:36px; white-space:nowrap; cursor:pointer; }
.ek-segment button[aria-pressed=true] { background:white; color:var(--ek-green); box-shadow:0 1px 4px #294c2520; }
.ek-segment button:hover { background:#fafcf8; }
.ek-decision-grid { display:grid; grid-template-columns:1fr 1.15fr 1fr; gap:16px; }
.ek-stage { position:relative; display:flex; flex-direction:column; min-width:0; padding:24px; border-radius:12px; border:1px solid #d1dcd0; background:#fffefa; box-shadow:0 3px 7px #273a2206; transition:border-color .25s,box-shadow .25s; }
.ek-stage h2 { font-size:22px; letter-spacing:-.6px; margin:6px 0 26px; line-height:1.3; }
.ek-field-label { display:block; font-size:12px; color:#334e40; font-weight:650; margin-bottom:9px; }
.ek-page select { width:100%; padding:12px 30px 12px 12px; min-height:46px; font:500 13px/1.5 Inter,Arial,sans-serif; border:1px solid #b5c6b7; border-radius:6px; background:#fff; color:var(--ek-ink); cursor:pointer; }

/* A note sitting directly under a control had no room. `.ek-page p{margin:0}`
   further down this file zeroes the margin at equal specificity, so these
   notes rendered flush against the select -- and the focus ring, 3px at 4px
   offset, then reached 7px down into the first line of text and covered it.
   Both halves are fixed: the sibling selector outranks that reset and gives
   the text its gap back, and controls keep the same ring at a tighter
   offset. (A native dropdown list opening upward is drawn by the operating
   system over the page and cannot be moved by CSS; this is the focus ring,
   which can.) */
.ek-page select:focus-visible,
.ek-page input:focus-visible,
.ek-page textarea:focus-visible { outline-offset:2px; }
.ek-page select + p,
.ek-page input + p,
.ek-page textarea + p,
.ek-page .ek-industry-picker p { margin-top:12px; }
.ek-source { display:flex; flex-direction:column; gap:6px; border-left:2px solid #bacdb6; margin:24px 0 15px; padding:2px 0 2px 13px; }
.ek-small-label { font-size:11px; text-transform:uppercase; letter-spacing:1px; color:var(--ek-muted); }
.ek-source strong { font-size:14px; line-height:1.4; }
.ek-source>span:last-child { font-size:12px; color:var(--ek-muted); }
.ek-page .ek-small { font-size:12px; line-height:1.65; }
.ek-stage-bottom { margin-top:auto; padding-top:24px; font-size:11px; font-weight:600; color:var(--ek-green); }
.ek-conditions { display:grid; grid-template-columns:1fr 1fr; gap:7px; }
.ek-conditions button { border:1px solid #d2dcd0; border-radius:5px; background:white; color:var(--ek-muted); padding:9px 8px; font:500 12px/1.4 Inter,sans-serif; cursor:pointer; min-height:36px; }
.ek-given-note { margin:8px 0 0; }
.ek-conditions button[aria-pressed=true] { border-color:var(--ek-green); background:#eaf3e8; color:var(--ek-green); box-shadow:inset 0 0 0 1px var(--ek-green); }
.ek-verdict { display:grid; grid-template-columns:8px 1fr; gap:9px; border:1px solid #d4dfce; background:#f0f5ec; padding:18px 14px; border-radius:7px; margin:16px 0; min-height:115px; align-content:center; }
.ek-verdict strong { font-size:14px; line-height:1.4; }
.ek-verdict p { grid-column:2; font-size:12px; line-height:1.55; }
.ek-status-dot { background:#879a86; border-radius:50%; width:7px; height:7px; margin-top:6px; }
.ek-control>.ek-button { margin-top:auto; }
.ek-verdict[data-tone=ALLOWED] { border-color:#afd5a2; background:#eaf4e5; }
.ek-verdict[data-tone=REVIEW] { border-color:#dfc89b; background:#fff4dd; }
.ek-verdict[data-tone=BLOCKED],.ek-verdict[data-tone=STOPPED] { border-color:#e3b6a7; background:#fff0e9; }
.ek-verdict[data-tone=ALLOWED] .ek-status-dot { background:#318127; }
.ek-verdict[data-tone=REVIEW] .ek-status-dot { background:#b26d08; }
.ek-verdict[data-tone=BLOCKED] .ek-status-dot,.ek-verdict[data-tone=STOPPED] .ek-status-dot { background:#b04423; }
.ek-receipt { margin:0; }
.ek-receipt>div { display:flex; justify-content:space-between; align-items:baseline; padding:12px 0; gap:14px; border-bottom:1px solid #e0e5db; }
.ek-receipt dt { font-size:12px; font-weight:400; color:var(--ek-muted); }
.ek-receipt dd { margin:0; font-size:12px; font-weight:650; text-align:right; color:var(--ek-ink); overflow-wrap:anywhere; }
.ek-seal { display:flex; align-items:center; gap:12px; margin:20px 0; min-height:44px; }
.ek-seal>span { width:38px; height:38px; border:1px dashed #a6b7a2; color:#789170; display:grid; place-items:center; border-radius:50%; flex-shrink:0; font-size:20px; }
.ek-seal p { font-size:12px; }
.ek-seal.is-sealed>span { color:var(--ek-green); border:1px solid #83b17a; background:#edf6e9; }
.ek-proof-actions { display:flex; justify-content:space-between; gap:12px; margin-top:auto; padding-top:12px; border-top:1px dashed #c6d3c2; }
.ek-proof-actions button,.ek-text-button { font:600 12px/1.6 Inter,sans-serif; color:var(--ek-green); background:none; padding:4px 0; border:0; cursor:pointer; }
.ek-proof-actions button:disabled { color:#7d8b7b; cursor:not-allowed; }
.ek-demo-footer { display:flex; align-items:center; justify-content:space-between; gap:24px; padding:18px 4px 4px; }
.ek-demo-footer p { font-size:11px; max-width:700px; }
.ek-demo-footer button { flex-shrink:0; }
.ek-record-details { border-top:1px solid #d6dfcf; margin-top:16px; font-size:12px; }
.ek-record-details summary { padding:14px 4px 0; color:var(--ek-muted); cursor:pointer; }
.ek-record-body { padding:20px 4px 4px; }
.ek-record-body code { display:block; margin:14px 0; overflow-wrap:anywhere; color:var(--ek-green); font-size:12px; }
.ek-record-body .ek-actions { margin:16px 0; }
.ek-record-body pre { margin:20px 0 0; max-height:300px; overflow:auto; font-size:12px; padding:20px; background:#e1e9dc; border-radius:6px; color:var(--ek-ink); white-space:pre-wrap; overflow-wrap:anywhere; }
.ek-tour-message { padding:16px; margin-top:16px; border:1px solid #b6d3b0; border-radius:8px; background:#fffefa; color:var(--ek-green); font-size:13px; }
.ek-stage.is-active { border-color:#4d8c4c; box-shadow:0 0 0 3px #89b96d33; }
.ek-stage.is-updated { animation:ek-result-in .4s ease-out; }
@keyframes ek-result-in { from {transform:translateY(4px);opacity:.65;} to {transform:translateY(0);opacity:1;} }
.ek-model-section { max-width:1040px; margin:80px auto 0; }
.ek-section-heading { text-align:center; margin-bottom:30px; }
.ek-section-heading h2 { font-size:32px; letter-spacing:-1.1px; line-height:1.25; }
.ek-section-heading p { font-size:14px; margin-top:12px; }
.ek-layer-grid { display:grid; grid-template-columns:repeat(3,1fr); gap:16px; }
.ek-layer { text-align:left; position:relative; padding:24px 34px 26px 24px; border:1px solid #cbd7c9; border-radius:10px; background:white; min-width:0; color:var(--ek-ink); cursor:pointer; transition:background .2s,border-color .2s; }
.ek-layer strong { display:block; font:650 18px/1.3 Inter,sans-serif; margin:12px 0 8px; }
.ek-layer>span:not(.ek-step-label):not(.ek-layer-toggle) { display:block; font:400 12px/1.6 Inter,sans-serif; color:var(--ek-muted); }
.ek-layer-toggle { position:absolute; right:16px; top:18px; font-size:20px; color:var(--ek-green); }
.ek-layer:hover,.ek-layer[aria-expanded=true] { background:#edf4e8; border-color:#5c8b58; }
.ek-onthis { display:flex; justify-content:center; align-items:center; gap:20px; margin:20px 0 0; padding:14px; font-size:12px; border-radius:7px; background:#edf2e8; }
.ek-onthis strong { text-transform:uppercase; font-size:10px; letter-spacing:1px; color:var(--ek-muted); }
.ek-onthis span { display:flex; flex-wrap:wrap; gap:20px; }
.ek-onthis a { color:var(--ek-green); text-decoration:none; }
.ek-layer-panel { border:1px solid #d3decc; background:#fffefa; padding:36px; margin-top:16px; border-radius:12px; }
.ek-layer-panel h3 { font-size:26px; letter-spacing:-.6px; line-height:1.3; margin-bottom:12px; }
.ek-layer-panel p { font-size:14px; }
.ek-finder { max-width:820px; margin:auto; }
.ek-finder-environment { margin:26px 0; }
.ek-finder-environment .ek-segment { max-width:460px; }
.ek-finder-environment .ek-small { margin-top:10px; }
.ek-finder-fields { display:grid; grid-template-columns:1fr 1fr; gap:22px; }
.ek-finder-fields p { margin-top:8px; }
.ek-route-result { background:#f1f5ec; border-radius:9px; padding:24px; margin-top:22px; }
.ek-route-result h4 { font-size:21px; margin:0 0 10px; }
.ek-route-result .ek-actions { margin-top:18px; }
.ek-route-result .ek-small { margin-top:10px; }
.ek-route-result .ek-fineprint { font-size:11px; line-height:1.6; margin-top:18px; color:#5b6d58; }
.ek-context-row { display:flex; align-items:center; justify-content:space-between; gap:32px; padding-top:24px; margin-top:28px; border-top:1px solid var(--ek-line); }
.ek-context-row h3 { font-size:18px; margin-bottom:6px; }
.ek-context-row p { font-size:13px; max-width:620px; }
.ek-context-row a { flex-shrink:0; }
.ek-outcomes { display:grid; grid-template-columns:repeat(3,1fr); gap:20px; margin:28px 0; }
.ek-outcomes article { border:1px solid var(--ek-line); padding:22px; border-radius:8px; }
.ek-outcomes h4 { font-size:16px; margin:18px 0 8px; }
.ek-outcomes p { font-size:13px; }
.ek-outcome-tag { display:inline-block; padding:4px 9px; border-radius:4px; background:#edf4e8; color:var(--ek-green); font-size:11px; font-weight:650; }
.ek-outcome-tag[data-tone=REVIEW] { background:#fff0d3; color:#855008; }
.ek-outcome-tag[data-tone=BLOCKED] { background:#feeadf; color:#943f26; }

/* ---- Control Tower path graph -------------------------------------------
   One request travelling the real shape of the runtime: check against the
   pack in force, one of three outcomes, and a signed record either way.
   Two keyframes drive the whole thing. Every element shares the same 3.4s
   cycle and is phase-shifted with a negative delay -- delay = -(1-p)*3.4s
   puts an element at phase p -- so the sequence stays in step without a
   timer per segment. Branch colour is inherited from `color`, which is the
   only thing [data-active] has to change. */
.ekp { margin:26px 0 30px; border:1px solid #cfddc6; border-radius:12px; background:radial-gradient(ellipse at 50% 30%,#e6f0de 0,transparent 62%),#f8faf3; padding:16px 20px 14px; }
.ekp figcaption { display:flex; align-items:center; gap:12px; padding-bottom:10px; border-bottom:1px dashed #ccd9c2; }
.ekp figcaption .ek-eyebrow { margin:0; font-size:9px; }
.ekp-cycle { margin-left:auto; font-size:10px; font-weight:650; letter-spacing:.06em; text-transform:uppercase; color:var(--ekp-tone,var(--ek-green)); }
.ekp-stage { padding:10px 0 4px; overflow-x:auto; -webkit-overflow-scrolling:touch; }
.ekp svg { display:block; width:100%; height:auto; max-height:330px; }
.ekp-wire { stroke:#c7d8bb; stroke-width:3; }
.ekp-flow { stroke:var(--ekp-tone,var(--ek-green)); stroke-width:5.5; stroke-dasharray:12 100; opacity:0; }
.ekp-node rect { fill:#fff; stroke:#cfddc6; stroke-width:2; }
/* Sized in viewBox units, not pixels: the diagram is 920 wide and renders
   into a column that can be ~350px, so type has to be ~3% of the viewBox to
   stay readable once it scales down. */
.ekp-t { font:600 22px/1 Inter,system-ui,sans-serif; fill:var(--ek-ink); text-anchor:middle; }
.ekp-s { font:400 15px/1 Inter,system-ui,sans-serif; fill:var(--ek-muted); text-anchor:middle; }
.ekp-gate rect { fill:#173b29; stroke:#173b29; }
.ekp-gate .ekp-t { fill:#e9f4dd; }
.ekp-gate .ekp-s { fill:#9dc681; }

/* Only the branch in play is drawn in colour. The other two stay visible as
   quiet structure -- the reader has to be able to see that all three
   outcomes exist, so these are dimmed, never hidden. */
.ekp-w-allow, .ekp-w-review, .ekp-w-block { opacity:.3; }
.ekp[data-active=allow]  { --ekp-tone:#0d5b3d; }
.ekp[data-active=review] { --ekp-tone:#855008; }
.ekp[data-active=block]  { --ekp-tone:#943f26; }
.ekp[data-active=allow]  .ekp-w-allow,
.ekp[data-active=review] .ekp-w-review,
.ekp[data-active=block]  .ekp-w-block { opacity:1; stroke:var(--ekp-tone); }
.ekp-out rect, .ekp-out text { transition:opacity .3s ease, stroke .3s ease; }
.ekp[data-active=allow]  .ekp-out[data-branch=allow] rect,
.ekp[data-active=review] .ekp-out[data-branch=review] rect,
.ekp[data-active=block]  .ekp-out[data-branch=block] rect { stroke:var(--ekp-tone); stroke-width:3; }
.ekp[data-active=allow]  .ekp-out:not([data-branch=allow]),
.ekp[data-active=review] .ekp-out:not([data-branch=review]),
.ekp[data-active=block]  .ekp-out:not([data-branch=block]) { opacity:.5; }

.ekp-code { display:flex; gap:11px; padding:11px 15px; border-radius:6px; background:#173b29; align-items:baseline; margin-top:8px; }
.ekp-code>span { color:#9dc681; font-size:13px; }
.ekp-code code { background:none; color:#e0eecd; font:11px/1.6 ui-monospace,Consolas,monospace; overflow-wrap:anywhere; }
.ekp-note { font-size:10px; color:#5c7152; padding-top:9px; margin:0; }

/* The cycle only runs while `is-playing` is set, and the script sets it once
   the figure is on screen. A collapsed layer panel is `hidden`, so a closed
   Control Tower never animates. */
.ekp.is-playing .ekp-flow { animation:ekp-run 3.4s linear infinite; }
.ekp.is-playing .ekp-node { animation:ekp-node 3.4s linear infinite; }
.ekp.is-playing .ekp-flow.ekp-f1 { animation-delay:0s; }
.ekp.is-playing .ekp-flow.ekp-f2 { animation-delay:-2.958s; }
.ekp.is-playing .ekp-flow.ekp-f3 { animation-delay:-2.448s; }
.ekp.is-playing .ekp-flow.ekp-f4 { animation-delay:-1.802s; }
.ekp.is-playing .ekp-n1 { animation-delay:-3.332s; }
.ekp.is-playing .ekp-n2 { animation-delay:-2.856s; }
.ekp.is-playing .ekp-n3 { animation-delay:-2.380s; }
.ekp.is-playing .ekp-out { animation-delay:-1.768s; }
.ekp.is-playing .ekp-n5 { animation-delay:-1.156s; }
/* The two branches standing by neither pulse nor carry a comet. Note this
   suppresses the animation on the waiting nodes but leaves them drawn --
   an earlier version folded them into the opacity:0 rule below and made
   two thirds of the diagram disappear. */
.ekp[data-active=allow]  .ekp-out:not([data-branch=allow]),
.ekp[data-active=review] .ekp-out:not([data-branch=review]),
.ekp[data-active=block]  .ekp-out:not([data-branch=block]) { animation:none; }
.ekp[data-active=allow]  .ekp-flow:is(.ekp-b-review,.ekp-b-block),
.ekp[data-active=review] .ekp-flow:is(.ekp-b-allow,.ekp-b-block),
.ekp[data-active=block]  .ekp-flow:is(.ekp-b-allow,.ekp-b-review) { animation:none; opacity:0; }

/* ---- Gate library -------------------------------------------------------
   A browsable grid rather than a stack of rows: chips at the top narrow it,
   cards flow across and wrap down. The comparison block is styled by what
   kind of claim it is -- a measured gain, a reported one, or an honest
   admission that there is no gain to claim. The third reads differently
   on purpose. */
/* Chips are shared: the gate library, where-it-runs and the Lighthouse
   catalogue all filter the same way, so the control looks the same in all
   three and a reader only learns it once. */
.ek-chipbar { display:flex; flex-wrap:wrap; gap:8px; margin:22px 0 12px; }
.ek-chipbar + .ek-chipbar { margin-top:0; }
.ek-chipbar > .ek-chiplabel { align-self:center; font:650 9.5px/1 ui-monospace,Consolas,monospace;
  letter-spacing:.12em; text-transform:uppercase; color:var(--ek-muted); margin-right:2px; }
.ek-chip { display:inline-flex; align-items:center; gap:7px; cursor:pointer;
  font:600 12px/1 Inter,sans-serif; color:var(--ek-ink); background:#f4f8ef;
  border:1px solid var(--ek-line); border-radius:999px; padding:9px 14px;
  transition:background .16s ease, border-color .16s ease, color .16s ease; }
.ek-chip span { font:650 10px/1 ui-monospace,Consolas,monospace; color:var(--ek-muted);
  background:#fff; border:1px solid var(--ek-line); border-radius:999px; padding:3px 6px; }
.ek-chip:hover { border-color:#9dbb8c; background:#eaf3e2; }
.ek-chip[aria-pressed="true"] { background:var(--ek-green); border-color:var(--ek-green); color:#fff; }
.ek-chip[aria-pressed="true"] span { background:#ffffff26; border-color:#ffffff40; color:#fff; }
/* A chip that would empty the grid is disabled rather than hidden, so the
   bar does not reflow under the cursor as you filter. */
.ek-chip[disabled] { opacity:.4; cursor:not-allowed; }
.ek-chipcount { font:11.5px/1.6 Inter,sans-serif; color:var(--ek-muted); margin-bottom:16px; }

/* Stretch, not start: cards in the same row end on the same line, and the
   figure block below carries margin-top:auto so the headline number sits at
   a consistent depth however long the question above it runs. */
.eklib { display:grid; grid-template-columns:repeat(auto-fill,minmax(330px,1fr));
  gap:18px; margin:0 0 26px; }
.eklib-card { display:flex; flex-direction:column; gap:15px; min-width:0;
  padding:20px 20px 18px; border:1px solid var(--ek-line); border-radius:11px;
  background:#fcfdfa; transition:border-color .16s ease, box-shadow .16s ease; }
.eklib-card:hover { border-color:#b6cfa6; box-shadow:0 6px 20px #15310e0d; }
/* Anchored from the route finder. A ring, not a colour change, so the card
   still reads the same as its neighbours. */
.eklib-card:target { border-color:var(--ek-green); box-shadow:0 0 0 3px #1f7a4a1f; }
.eklib-head .ek-eyebrow { display:block; margin-bottom:8px; }
.eklib-head h3 { font-size:17px; line-height:1.35; letter-spacing:-.3px; margin:0 0 9px;
  text-wrap:balance; }
.eklib-gate { font-size:12px; color:var(--ek-muted); margin:0; }
.eklib-gate b { font:650 12px/1 ui-monospace,Consolas,monospace; color:var(--ek-green); }
.eklib-lbl { display:block; font:650 9.5px/1 ui-monospace,Consolas,monospace;
  letter-spacing:.12em; text-transform:uppercase; color:var(--ek-muted); margin-bottom:7px; }
/* Wraps rather than scrolls. In a narrow card a nowrap strip clips the last
   stage of the path with no cue that it did, and the whole path is the point
   -- a route that ends at "allow / hold / report" reads very differently from
   one that appears to end at "allow". */
.eklib-path code { display:block; font:11px/1.8 ui-monospace,Consolas,monospace;
  background:#173b29; color:#e0eecd; border-radius:6px; padding:10px 13px;
  white-space:normal; overflow-wrap:break-word; }
.eklib-fig { margin-top:auto; }
.eklib-measured { font:650 14.5px/1.5 Inter,sans-serif; color:var(--ek-ink); margin:0; }
.eklib-basis { display:inline-block; margin-top:8px; font:650 9px/1 ui-monospace,Consolas,monospace;
  letter-spacing:.05em; color:#41563c; background:#e7efdf; border:1px solid #cadcbe;
  border-radius:3px; padding:4px 7px; word-break:break-all; }
.eklib-basis.is-reported { color:#855008; background:#fff3dd; border-color:#e6cd9b; }

/* Collapsed so every card ends at the same height. The summary still names
   which of the three kinds of claim it is before it is opened. */
.eklib-vs { border-left:2.5px solid var(--ek-line); padding-left:14px; }
.eklib-vs summary { cursor:pointer; list-style:none; }
.eklib-vs summary::-webkit-details-marker { display:none; }
.eklib-vs summary .eklib-lbl { margin-bottom:5px; }
.eklib-vs-kind { display:inline-flex; align-items:center; gap:6px;
  font:600 12px/1.4 Inter,sans-serif; color:var(--ek-ink); }
.eklib-vs-kind::after { content:"›"; font-size:14px; color:var(--ek-muted);
  transition:transform .16s ease; }
.eklib-vs[open] .eklib-vs-kind::after { transform:rotate(90deg); }
.eklib-vs p { font-size:12.5px; margin:9px 0 0; }
.eklib-vs[data-kind="measured-gain"] { border-left-color:var(--ek-green); }
.eklib-vs[data-kind="reported-gain"] { border-left-color:#e6c890; }
/* No gain to claim. Deliberately not green, so a skim cannot read it as one. */
.eklib-vs[data-kind="honest-no-gain"] { border-left-color:#b9c3b4; }
.eklib-vs[data-kind="honest-no-gain"] .eklib-vs-kind,
.eklib-vs[data-kind="honest-no-gain"] p { color:var(--ek-muted); }

.eklib-acts { display:flex; gap:16px; flex-wrap:wrap; padding-top:3px;
  border-top:1px solid var(--ek-line); margin-top:2px; }
.eklib-acts .ek-text-link { font-size:12px; padding-top:12px; }
.eklib-note { font-size:11.5px; color:#5c7152; line-height:1.7; max-width:76ch;
  padding-top:20px; border-top:1px solid var(--ek-line); }
@media (max-width:560px) {
 .eklib { grid-template-columns:1fr; }
 .eklib-chip { font-size:11.5px; padding:8px 12px; }
}
@media (prefers-reduced-motion:reduce) {
 .eklib-card, .eklib-chip, .eklib-vs-kind::after { transition:none; }
}

/* ---- Where it runs ------------------------------------------------------
   Same chips, same grid as the library. The measured card and the unbuilt
   ones are deliberately NOT the same weight: a logo grid where every tile
   looks alike is how a reader concludes all four clouds are equally proven.
   The unbuilt cards are drawn back, and carry no figure block at all. */
.ekrun-sec { margin:52px 0 8px; }
.ekrun { display:grid; grid-template-columns:repeat(auto-fill,minmax(258px,1fr));
  gap:18px; margin:0 0 12px; }
.ekrun-card { display:flex; flex-direction:column; gap:12px; min-width:0;
  padding:20px; border:1px solid var(--ek-line); border-radius:11px; background:#fcfdfa; }
.ekrun-card.is-measured { border-color:#bcd6ab; background:linear-gradient(#f6faf1,#fcfdfa); }
.ekrun-card.is-planned { background:#fafbf8; }
.ekrun-card header { display:flex; align-items:flex-start; justify-content:space-between; gap:12px; }
.ekrun-card h3 { font-size:16px; line-height:1.3; letter-spacing:-.2px; margin:0; text-wrap:balance; }
.ekrun-badge { flex-shrink:0; font:650 8.5px/1 ui-monospace,Consolas,monospace;
  letter-spacing:.08em; border-radius:3px; padding:5px 7px; }
.ekrun-badge.is-measured { color:#2c5a34; background:#e0efd6; border:1px solid #b6d3a4; }
.ekrun-badge.is-planned { color:#6b6250; background:#f2efe4; border:1px solid #ddd6c3; }
.ekrun-summary { font:600 13px/1.55 Inter,sans-serif; color:var(--ek-ink); margin:0; }
.ekrun-card.is-planned .ekrun-summary { color:#6f7d69; font-weight:500; }
.ekrun-figs { display:grid; grid-template-columns:1fr 1fr; gap:14px 12px; margin:2px 0;
  padding:14px 0; border-top:1px solid var(--ek-line); border-bottom:1px solid var(--ek-line); }
.ekrun-figs div { min-width:0; }
.ekrun-figs dt { font:650 17px/1.1 Inter,sans-serif; color:var(--ek-green);
  letter-spacing:-.4px; font-variant-numeric:tabular-nums; }
.ekrun-figs dd { font-size:10.5px; line-height:1.45; color:var(--ek-muted); margin:5px 0 0; }
.ekrun-detail { font-size:12px; line-height:1.6; color:var(--ek-ink); margin:0; }
.ekrun-boundary { font-size:11px; line-height:1.6; color:var(--ek-muted); margin:auto 0 0;
  padding-top:11px; border-top:1px dashed var(--ek-line); }
@media (max-width:560px) {
 .ekrun { grid-template-columns:1fr; }
 .ekrun-figs { grid-template-columns:1fr; gap:11px; }
}

/* ---- Proof strip, above the fold ---------------------------------------
   The first quantitative thing a visitor meets. Each figure carries how it
   was arrived at, because a number without a provenance is decoration. */
.ek-proofstrip { display:grid; grid-template-columns:repeat(4,1fr); gap:18px; margin:38px auto 0; max-width:940px; padding-top:28px; border-top:1px solid var(--ek-line); text-align:left; }
.ek-proofstrip div { display:flex; flex-direction:column; gap:3px; }
/* Each figure opens its own provenance. The button is styled as the text it
   replaced rather than as a control: it should read as a number you can open,
   not as four buttons competing with the hero's actual call to action. */
.ek-ps-open { display:flex; flex-direction:column; gap:3px; width:100%; text-align:left;
  background:none; border:0; padding:6px 8px 7px; margin:-6px -8px -7px; cursor:pointer;
  border-radius:8px; font:inherit; color:inherit;
  transition:background .15s ease; }
.ek-ps-open:hover { background:#f1f7ec; }
.ek-ps-open:hover strong { text-decoration:underline; text-underline-offset:3px;
  text-decoration-thickness:1.5px; }
.ek-ps-open::after { content:"Details"; font:650 8.5px/1 ui-monospace,Consolas,monospace;
  letter-spacing:.1em; text-transform:uppercase; color:var(--ek-muted); margin-top:5px;
  opacity:0; transition:opacity .15s ease; }
.ek-ps-open:hover::after, .ek-ps-open:focus-visible::after { opacity:1; }

/* A global reset zeroes margin on everything, which defeats the UA's
   margin:auto centring for a modal dialog and pins it to the top left.
   Restoring it here is the whole fix. */
.ek-ps-dialog { margin:auto; position:relative;
  width:min(520px,calc(100vw - 32px)); border:1px solid var(--ek-line);
  border-radius:14px; padding:24px 26px 26px; background:#fcfdfa; color:var(--ek-ink);
  box-shadow:0 24px 60px #15310e26; max-height:calc(100vh - 48px); overflow-y:auto; }
.ek-ps-dialog.is-wide { width:min(600px,calc(100vw - 32px)); }
.ek-ps-dialog::backdrop { background:#16240f7a; }
.ek-ps-dialog h3 { font-size:19px; line-height:1.3; letter-spacing:-.4px; margin:8px 0 12px;
  text-wrap:balance; }
.ek-ps-dialog p { font-size:13.5px; line-height:1.7; }
.ek-ps-close { position:absolute; top:12px; right:14px; cursor:pointer; background:none;
  border:0; font-size:24px; line-height:1; color:var(--ek-muted); padding:4px 8px;
  border-radius:6px; }
.ek-ps-close:hover { background:#eef4e8; color:var(--ek-ink); }
.ek-ps-facts { margin:16px 0; border:1px solid var(--ek-line); border-radius:8px;
  background:#fff; overflow:hidden; }
.ek-ps-facts > div { display:flex; justify-content:space-between; gap:14px;
  padding:9px 13px; border-top:1px solid var(--ek-line); }
.ek-ps-facts > div:first-child { border-top:0; }
.ek-ps-facts dt { font:650 9.5px/1.5 ui-monospace,Consolas,monospace; letter-spacing:.1em;
  text-transform:uppercase; color:var(--ek-muted); }
.ek-ps-facts dd { margin:0; font:650 12px/1.5 Inter,sans-serif; color:var(--ek-ink);
  text-align:right; font-variant-numeric:tabular-nums; overflow-wrap:anywhere; }
.ek-ps-patents { list-style:none; margin:16px 0; padding:0; border:1px solid var(--ek-line);
  border-radius:8px; background:#fff; overflow:hidden; }
.ek-ps-patents li { display:flex; align-items:center; justify-content:space-between;
  gap:16px; padding:11px 13px; border-top:1px solid var(--ek-line); }
.ek-ps-patents li:first-child { border-top:0; }
.ek-ps-patents b { font:650 11.5px/1 ui-monospace,Consolas,monospace; color:var(--ek-green);
  margin-right:8px; }
.ek-ps-patents span { font-size:12.5px; color:var(--ek-ink); }
.ek-ps-patents a { flex-shrink:0; font:650 11px/1 ui-monospace,Consolas,monospace;
  color:var(--ek-green); }
/* The boundary is not a footnote in these dialogs. It is the reason a reader
   can trust the number above it. */
.ek-ps-bound { font-size:11.5px; line-height:1.7; color:#5c7152;
  padding-top:12px; border-top:1px dashed var(--ek-line); }
.ek-ps-dialog .ek-text-link { font-size:12.5px; }
@media (max-width:600px) {
 .ek-ps-patents li { flex-direction:column; align-items:flex-start; gap:6px; }
}
@media (prefers-reduced-motion:reduce) {
 .ek-ps-open, .ek-ps-open::after { transition:none; }
}
.ek-proofstrip strong { font:650 27px/1.05 Inter,sans-serif; color:var(--ek-green); letter-spacing:-.5px; }
.ek-proofstrip span { font-size:12px; color:var(--ek-ink); font-weight:600; }
.ek-proofstrip small { font-size:10px; color:var(--ek-muted); line-height:1.5; }

/* ---- Obligation clock --------------------------------------------------- */
.ek-clock { margin:56px 0 8px; }
.ent-sec .ek-clock { margin:0; }
.ek-clock-head { display:flex; gap:36px; align-items:flex-end; flex-wrap:wrap; margin-bottom:22px; }
.ek-clock-head h2 { font-size:clamp(22px,2.4vw,30px); letter-spacing:-.6px; margin-top:6px; }
.ek-clock-head p { font-size:13px; max-width:420px; margin-left:auto; }
/* Timeline. Pins are positioned by real date, so the spacing is the
   information -- it is deliberately not evenly divided. aria-hidden because
   the table below states the same dates in text, and a screen reader should
   read those once rather than twice. */
.ek-timeline { padding:56px 30px 58px; margin-bottom:22px; border:1px solid var(--ek-line); border-radius:10px; background:linear-gradient(90deg,#f2f8ee,#fbfdf9); }
.ek-timeline-track { position:relative; height:4px; border-radius:2px; background:repeating-linear-gradient(90deg,#cfdcc6 0 7px,transparent 7px 13px); }
.ek-timeline-elapsed { position:absolute; left:0; top:0; height:4px; border-radius:2px; background:var(--ek-green); }
.ek-timeline-pin { position:absolute; top:50%; z-index:2; transform:translate(-50%,-50%); display:flex; flex-direction:column; align-items:center; gap:0; }
.ek-timeline-pin::before { content:""; width:13px; height:13px; border-radius:50%; background:#fff; border:2.5px solid #b9cbb0; order:2; }
.ek-timeline-pin.is-live::before { border-color:var(--ek-green); background:var(--ek-green); box-shadow:0 0 0 4px #0d5b3d1f; }
.ek-timeline-pin b { order:1; padding:0 3px; border-radius:3px; background:#f2f8ee; font:650 11px/1.3 Inter,sans-serif; color:var(--ek-ink); margin-bottom:5px; white-space:nowrap; }
.ek-timeline-pin em { order:0; padding:0 3px; border-radius:3px; background:#f2f8ee; font:400 10px/1.3 Inter,sans-serif; font-style:normal; color:var(--ek-muted); margin-bottom:2px; white-space:nowrap; }
.ek-timeline-pin.is-live b { color:var(--ek-green); }
/* Alternate below the track so neighbouring labels never overlap. */
.ek-timeline-pin.is-below b { order:3; margin:5px 0 0; }
.ek-timeline-pin.is-below em { order:4; margin:2px 0 0; }
.ek-timeline-now { position:absolute; z-index:1; top:-16px; bottom:-16px; width:2px; background:#943f26; transform:translateX(-50%); }
.ek-timeline-now i { position:absolute; top:-29px; left:50%; transform:translateX(-50%); font:650 9px/1 Inter,sans-serif; font-style:normal; letter-spacing:.08em; text-transform:uppercase; color:#fff; background:#943f26; border-radius:3px; padding:4px 7px; white-space:nowrap; }
@media (max-width:760px) {
 /* Below this width the pins collide whatever the spacing, so the table
    carries it alone rather than showing an unreadable track. */
 .ek-timeline { display:none; }
}

.ek-clock-table { border:1px solid var(--ek-line); border-radius:10px; overflow:hidden; background:#fff; }
.ek-clock-row { display:grid; grid-template-columns:1.35fr .85fr 1.75fr .72fr; gap:16px; padding:14px 18px; border-top:1px solid var(--ek-line); font-size:13px; align-items:baseline; }
.ek-clock-row:first-child { border-top:0; }
.ek-clock-row.is-head { background:#f4f8f1; font-size:10px; text-transform:uppercase; letter-spacing:.08em; color:var(--ek-muted); font-weight:650; }
.ek-clock-row b { color:var(--ek-green); font-weight:650; margin-right:6px; }
.ek-clock-date { font-weight:650; color:var(--ek-ink); }
.ek-clock-state { display:block; font-style:normal; font-size:10px; font-weight:650; letter-spacing:.06em; text-transform:uppercase; color:var(--ek-muted); margin-top:3px; }
/* In force reads differently from upcoming, at a glance and not only by date. */
.ek-clock-row.is-live { background:#fbfdf9; }
.ek-clock-row.is-live .ek-clock-state { color:#943f26; }
.ek-clock-row.is-live .ek-clock-state::before { content:"● "; }
.ek-clock-note { font-size:10px; color:#5c7152; margin-top:12px!important; max-width:none; line-height:1.7; }
.ek-clock-detail { margin-top:12px; border:1px solid var(--ek-line); border-radius:9px; background:#f7faf4; }
.ek-clock-detail>summary { padding:12px 14px; cursor:pointer; list-style:none; color:var(--ek-green); font-size:12px; font-weight:650; }
.ek-clock-detail>summary::-webkit-details-marker { display:none; }
.ek-clock-detail>summary::after { content:"+"; float:right; font:16px/1 ui-monospace,Consolas,monospace; }
.ek-clock-detail[open]>summary::after { content:"−"; }
.ek-clock-detail>p { margin:0; padding:0 14px 13px; font-size:11px; line-height:1.65; color:#536771; }
.ek-clock-detail a { color:var(--ek-green); font-weight:650; }

/* ---- EvidencePack specimen ---------------------------------------------- */
.ekspec { margin:22px 0 26px; }
.ekspec figcaption { display:flex; align-items:center; gap:12px; margin-bottom:12px; }
.ekspec figcaption .ek-eyebrow { margin:0; font-size:9px; }
.ekspec-tag { margin-left:auto; font:650 9px/1 ui-monospace,Consolas,monospace; color:#855008; background:#fff3dd; border:1px solid #e6cd9b; border-radius:3px; padding:4px 7px; }
.ekspec-card { border:1px solid #cfddc6; border-radius:11px; background:#fff; overflow:hidden; }
.ekspec-head { display:flex; align-items:center; gap:14px; padding:15px 18px; background:#f6faf2; border-bottom:1px solid var(--ek-line); }
.ekspec-id { font:650 10px/1 ui-monospace,Consolas,monospace; color:var(--ek-muted); display:block; margin-bottom:4px; }
.ekspec-head b { font-size:15px; color:var(--ek-ink); }
.ekspec-verdict { margin-left:auto; font:650 10px/1 Inter,sans-serif; letter-spacing:.06em; padding:7px 11px; border-radius:4px; background:#fff0d3; color:#855008; }
.ekspec-rows { margin:0; }
.ekspec-rows>div { display:grid; grid-template-columns:190px 1fr; gap:18px; padding:15px 18px; border-top:1px solid #eef3ea; }
.ekspec-rows>div:first-child { border-top:0; }
.ekspec-rows dt { font:650 12px/1.4 Inter,sans-serif; color:var(--ek-green); }
.ekspec-rows dd { margin:0; display:grid; grid-template-columns:150px 1fr; gap:5px 14px; align-items:baseline; }
.ekspec-rows dd span { font-size:11px; color:var(--ek-muted); }
.ekspec-rows dd code { font:11px/1.5 ui-monospace,Consolas,monospace; color:var(--ek-ink); background:#f3f7f0; border-radius:3px; padding:2px 6px; overflow-wrap:anywhere; }
.ekspec-foot { display:flex; gap:14px; flex-wrap:wrap; padding:13px 18px; background:#173b29; color:#cfe3bd; font-size:11px; }
.ekspec-foot-b { margin-left:auto; color:#9dc681; font-weight:600; }
.ekspec-note { font-size:10px; color:#5c7152; padding-top:9px; margin:0!important; }

/* ---- Start free --------------------------------------------------------- */
.ekfree { margin:54px 0 10px; padding-top:34px; border-top:1px solid var(--ek-line); }
.ekfree-grid { display:grid; grid-template-columns:repeat(3,1fr); gap:16px; margin-top:26px; }
.ekfree-card { border:1px solid var(--ek-line); border-radius:9px; padding:20px; background:#fff; display:flex; flex-direction:column; gap:9px; }
.ekfree-tag { align-self:flex-start; font:650 9px/1 Inter,sans-serif; letter-spacing:.07em; text-transform:uppercase; color:var(--ek-green); background:#edf4e8; border-radius:3px; padding:5px 8px; }
.ekfree-card h3 { font-size:15px; margin:2px 0 0; }
.ekfree-card p { font-size:12px; flex:1; }
.ekfree-cmd { display:block; font:11px/1.6 ui-monospace,Consolas,monospace; background:#173b29; color:#e0eecd; border-radius:5px; padding:9px 11px; overflow-wrap:anywhere; }
.ekfree-note { font-size:11px; color:var(--ek-muted); margin-top:18px!important; max-width:760px; }

/* ---- Pricing ------------------------------------------------------------ */
.ekprice { display:flex; flex-direction:column; gap:12px; margin:8px 0 0; }
.ekprice-stage { display:grid; grid-template-columns:52px 1fr 210px; gap:22px; align-items:center; border:1px solid var(--ek-line); border-radius:10px; padding:22px; background:#fff; }
.ekprice-stage.is-free { border-color:#bcd3b2; background:#fbfdf9; }
.ekprice-code { font:650 13px/1 ui-monospace,Consolas,monospace; color:var(--ek-green); }
.ekprice-body h2 { font-size:17px; margin-bottom:6px; }
.ekprice-body p { font-size:13px; }
.ekprice-meta { text-align:right; display:flex; flex-direction:column; gap:4px; }
.ekprice-meta b { font-size:13px; color:var(--ek-ink); font-weight:650; }
.ekprice-meta span { font-size:11px; color:var(--ek-muted); }
.ekprice-note { font-size:12px; color:var(--ek-muted); margin:22px 0 42px!important; max-width:760px; }

@media (max-width:900px) {
 .ek-proofstrip { grid-template-columns:repeat(2,1fr); gap:20px 16px; }
 .ekfree-grid { grid-template-columns:1fr; }
 .ek-clock-row { grid-template-columns:1fr 1fr; gap:8px 14px; }
 .ek-clock-row.is-head { display:none; }
 .ekspec-rows>div { grid-template-columns:1fr; gap:9px; }
 .ekspec-rows dd { grid-template-columns:1fr; }
 .ekprice-stage { grid-template-columns:1fr; gap:12px; }
 .ekprice-meta { text-align:left; }
 .ek-clock-head p { margin-left:0; }
}

/* ---- ActionGate ---------------------------------------------------------
   Four filed layers rendered through one skeleton, because that similarity
   is the claim: one architecture applied four times. Switching tabs swaps
   the labels, never the shape. */
.ekg { margin:26px 0 30px; border:1px solid #cfddc6; border-radius:12px; background:radial-gradient(ellipse at 50% 0,#e4efdc 0,transparent 60%),#f8faf3; padding:16px 20px 15px; }
.ekg figcaption { display:flex; align-items:baseline; gap:12px; flex-wrap:wrap; padding-bottom:12px; border-bottom:1px dashed #ccd9c2; }
.ekg figcaption .ek-eyebrow { margin:0; font-size:10px; color:var(--ek-green); }
.ekg-sub { font-size:11px; color:var(--ek-muted); }
.ekg-patent { margin-left:auto; font:650 9px/1 ui-monospace,Consolas,monospace; color:#5c7152; background:#e7efdf; border:1px solid #cadcbe; border-radius:3px; padding:4px 7px; }
.ekg-tabs { display:grid; grid-template-columns:repeat(4,1fr); gap:8px; margin:14px 0 0; }
.ekg-tabs button { text-align:left; border:1px solid #c8d8c0; background:#fff; border-radius:7px; padding:10px 11px; cursor:pointer; min-height:56px; }
.ekg-tabs button b { display:block; font:650 13px/1.3 Inter,sans-serif; color:var(--ek-ink); }
.ekg-tabs button span { display:block; font:400 10px/1.35 Inter,sans-serif; color:var(--ek-muted); margin-top:3px; }
.ekg-tabs button:hover { background:#f1f7ec; }
.ekg-tabs button[aria-selected=true] { border-color:var(--ek-green); background:#e9f3e3; box-shadow:inset 0 0 0 1px var(--ek-green); }
.ekg-tabs button[aria-selected=true] b { color:var(--ek-green); }
.ekg-name { font:600 13px/1.5 Inter,sans-serif; color:var(--ek-ink); margin:16px 0 0!important; }
.ekg-stage { padding:6px 0 2px; overflow-x:auto; -webkit-overflow-scrolling:touch; }
.ekg svg { display:block; width:100%; height:auto; max-height:210px; }
.ekg-wire { stroke:#c7d8bb; stroke-width:3; }
.ekg-flow { stroke:var(--ek-green); stroke-width:5.5; stroke-dasharray:12 100; opacity:0; }
.ekg-node rect { fill:#fff; stroke:#cfddc6; stroke-width:2; }
.ekg-step rect { fill:#fcfdfa; stroke:#b6cdaa; }
.ekg-t { font:650 19px/1 Inter,system-ui,sans-serif; fill:var(--ek-ink); text-anchor:middle; }
.ekg-s { font:400 13px/1 Inter,system-ui,sans-serif; fill:var(--ek-muted); text-anchor:middle; }
.ekg-f { font:400 12px/1 ui-monospace,Consolas,monospace; fill:#75885f; text-anchor:middle; }
.ekg-verdicts { display:flex; flex-wrap:wrap; gap:7px; margin:10px 0 0!important; }
.ekg-pill { font:650 10px/1 Inter,sans-serif; letter-spacing:.04em; padding:6px 10px; border-radius:4px; background:#edf4e8; color:var(--ek-green); }
.ekg-pill[data-v=BLOCK] { background:#feeadf; color:#943f26; }
.ekg-pill[data-v=REVIEW], .ekg-pill[data-v=ABSTAIN], .ekg-pill[data-v=HOLD],
.ekg-pill[data-v=HELD], .ekg-pill[data-v=REQUIRES] { background:#fff0d3; color:#855008; }
.ekg-econ { display:grid; grid-template-columns:repeat(4,1fr); gap:10px; margin-top:14px; padding-top:14px; border-top:1px solid var(--ek-line); }
.ekg-econ div { display:flex; flex-direction:column; gap:3px; }
.ekg-econ span { font-size:10px; color:var(--ek-muted); }
.ekg-econ strong { font:650 19px/1.1 Inter,sans-serif; color:var(--ek-ink); }
.ekg-econ small { font-size:9px; color:#75885f; }
.ekg-econ-punch strong { color:var(--ek-green); }
.ekg-prov { grid-column:1/-1; font-size:10px; color:#5c7152; margin:2px 0 0!important; line-height:1.6; }
.ekg-prov-tag { display:inline-block; font:650 9px/1 ui-monospace,Consolas,monospace; color:#41563c; background:#e7efdf; border:1px solid #cadcbe; border-radius:3px; padding:3px 6px; margin-right:7px; }
/* Reported by a partner document rather than measured here: different colour,
   so the two can never be skimmed as the same kind of claim. */
.ekg-prov-tag.is-reported { color:#855008; background:#fff3dd; border-color:#e6cd9b; }
.ekg-aime { margin-top:14px; padding-top:14px; border-top:1px solid var(--ek-line); }
.ekg-aime-head { display:flex; align-items:baseline; gap:12px; margin-bottom:10px; }
.ekg-aime-head b { font-size:13px; color:var(--ek-ink); }
.ekg-aime-head span { font-size:10px; color:var(--ek-muted); margin-left:auto; }
.ekg-aime-table { border:1px solid var(--ek-line); border-radius:8px; overflow:hidden; background:#fff; }
.ekg-aime-row { display:grid; grid-template-columns:1.7fr .6fr .6fr .8fr 1.3fr; gap:12px; padding:11px 15px; border-top:1px solid #eef3ea; font-size:12px; align-items:baseline; }
.ekg-aime-row:first-child { border-top:0; }
.ekg-aime-row.is-head { background:#f4f8f1; font-size:9px; text-transform:uppercase; letter-spacing:.07em; color:var(--ek-muted); font-weight:650; }
/* The gated row is the finding, so it reads as the finding. */
.ekg-aime-row.is-gated { background:#f6faf2; }
.ekg-aime-row.is-gated b { color:var(--ek-green); }
.ekg-aime-row .is-wrong { color:#943f26; font-weight:650; }
.ekg-aime-punch { font:650 14px/1.5 Inter,sans-serif; color:var(--ek-ink); margin:12px 0 0!important; }
.ekg-attrib { font-size:10px; color:#5c7152; line-height:1.7; margin:5px 0 0!important; }
.ekg-attrib a { color:var(--ek-green); }
.ekg-attrib code { font-size:10px; background:#eaf1e4; border-radius:3px; padding:1px 4px; color:#41563c; }
.ekg-note { font-size:10px; color:#5c7152; padding-top:11px; margin:0!important; }
.ekg-scrollhint { display:none; font-size:9px; color:#5c7152; padding-top:4px; margin:0!important; }
.ekg.is-playing .ekg-flow { animation:ekv-leg 3.2s linear infinite; }
.ekg.is-playing .ekg-node { animation:ekp-node 3.2s linear infinite; }
.ekg.is-playing .ekg-f1 { animation-delay:-3.04s; }
.ekg.is-playing .ekg-f2 { animation-delay:-2.24s; }
.ekg.is-playing .ekg-f3 { animation-delay:-1.44s; }
.ekg.is-playing .ekg-n0 { animation-delay:-3.2s; }
.ekg.is-playing .ekg-n1 { animation-delay:-2.50s; }
.ekg.is-playing .ekg-n2 { animation-delay:-1.70s; }
.ekg.is-playing .ekg-n3 { animation-delay:-0.90s; }
@media (max-width:760px) {
 .ekg { padding:14px 12px 12px; }
 .ekg-tabs { grid-template-columns:repeat(2,1fr); }
 .ekg svg { max-height:none; min-width:640px; }
 .ekg .ekg-scrollhint { display:block; }
 .ekg-econ { grid-template-columns:repeat(2,1fr); }
}
@media (prefers-reduced-motion:reduce) { .ekg.is-playing .ekg-flow, .ekg.is-playing .ekg-node { animation:none; } }

/* ---- Gate reel ----------------------------------------------------------
   Copy left, loop right. The video carries its own aspect ratio so the row
   never jumps height while it loads. */
.ek-reel { margin:46px 0 8px; padding:34px 0; border-top:1px solid var(--ek-line); border-bottom:1px solid var(--ek-line); }
.ek-reel-inner { display:grid; grid-template-columns:minmax(0,0.85fr) minmax(0,1.15fr); gap:44px; align-items:center; }
.ek-reel-copy .ek-eyebrow { display:block; margin-bottom:10px; }
.ek-reel-copy h2 { font-size:clamp(21px,2.3vw,29px); letter-spacing:-.5px; margin-bottom:12px; }
.ek-reel-copy p { font-size:14px; max-width:46ch; }
.ek-reel-video { margin:0; }
.ek-reel-video video { display:block; width:100%; height:auto; border-radius:10px;
  border:1px solid #cfddc6; background:#f1f6ec; box-shadow:0 12px 30px #15311e14; }
.ek-reel-video figcaption { font-size:10px; color:#5c7152; padding-top:9px; }
@media (max-width:820px) {
 .ek-reel-inner { grid-template-columns:1fr; gap:24px; }
 .ek-reel-copy p { max-width:none; }
}

.ek-subhead { margin:34px 0 0; padding-top:26px; border-top:1px solid var(--ek-line); }
.ek-subhead h4 { font-size:17px; margin-bottom:7px; color:var(--ek-ink); }
.ek-subhead p { font-size:13px; max-width:640px; }

/* ---- Selective replay map -----------------------------------------------
   The measured one. Numbers arrive from the benchmark file via the route,
   and the status stamp sits in the caption so the claim boundary travels
   with them wherever this is seen. */
.ekr { margin:26px 0 30px; border:1px solid #cfddc6; border-radius:12px; background:radial-gradient(ellipse at 45% 35%,#e6f0de 0,transparent 62%),#f8faf3; padding:16px 20px 14px; }
.ekr figcaption { display:flex; align-items:center; gap:12px; padding-bottom:10px; border-bottom:1px dashed #ccd9c2; }
.ekr figcaption .ek-eyebrow { margin:0; font-size:9px; }
.ekr-status { margin-left:auto; font:650 9px/1 ui-monospace,Consolas,monospace; letter-spacing:.04em; color:#5c7152; background:#e7efdf; border:1px solid #cadcbe; border-radius:3px; padding:4px 7px; }
.ekr-stage { padding:10px 0 4px; overflow-x:auto; -webkit-overflow-scrolling:touch; }
.ekr svg { display:block; width:100%; height:auto; max-height:360px; }
.ekr-wire { stroke:#c7d8bb; stroke-width:3; }
.ekr-flow { stroke:var(--ekr-tone,var(--ek-green)); stroke-width:5.5; stroke-dasharray:12 100; opacity:0; }
.ekr-node rect { fill:#fff; stroke:#cfddc6; stroke-width:2; }
.ekr-t { font:600 20px/1 Inter,system-ui,sans-serif; fill:var(--ek-ink); text-anchor:middle; }
.ekr-s { font:400 13px/1 Inter,system-ui,sans-serif; fill:var(--ek-muted); text-anchor:middle; }
.ekr-gridlabel { font-size:14px; }
/* Every cell is a record. Two of a hundred carry the change. */
.ekr-cell { fill:#e8eee3; stroke:#d7e2cf; stroke-width:1; transition:fill .3s ease, stroke .3s ease; }
.ekr[data-step="0"] { --ekr-tone:#0d5b3d; }
.ekr[data-step="1"], .ekr[data-step="2"] { --ekr-tone:#943f26; }
.ekr[data-step="3"] { --ekr-tone:#0d5b3d; }
.ekr:not([data-step="0"]) .ekr-cell.is-affected { fill:#d8674a; stroke:#943f26; }
.ekr[data-step="3"] .ekr-cell:not(.is-affected) { fill:#dfe9d8; stroke:#bed0b2; }
.ekr-out { opacity:.45; transition:opacity .35s ease; }
.ekr[data-step="2"] .ekr-out[data-out=affected],
.ekr[data-step="3"] .ekr-out[data-out=preserved] { opacity:1; }
.ekr[data-step="2"] .ekr-out[data-out=affected] rect { stroke:#943f26; stroke-width:3; }
.ekr[data-step="3"] .ekr-out[data-out=preserved] rect { stroke:var(--ek-green); stroke-width:3; }
.ekr .ekr-flow { animation:none; opacity:0; }
.ekr.is-playing[data-step="0"] .ekr-l0,
.ekr.is-playing[data-step="2"] .ekr-l2,
.ekr.is-playing[data-step="3"] .ekr-l3 { animation:ekv-leg 2s linear infinite; }
.ekr.is-playing[data-step="1"] .ekr-cell.is-affected { animation:ekr-hit 2s ease-out infinite; }
.ekr-code { display:flex; gap:11px; padding:11px 15px; border-radius:6px; background:#173b29; align-items:baseline; margin-top:8px; }
.ekr-code>span { color:#9dc681; font-size:13px; }
.ekr-code code { background:none; color:#e0eecd; font:11px/1.6 ui-monospace,Consolas,monospace; overflow-wrap:anywhere; }
.ekr-compare { display:flex; flex-wrap:wrap; gap:8px 22px; align-items:baseline; margin:12px 0 0; font-size:12px; color:var(--ek-muted); }
.ekr-compare b { color:var(--ek-ink); font-weight:650; }
.ekr-factor { margin-left:auto; font-weight:650; color:var(--ek-green); }
.ekr-note { font-size:10px; color:#5c7152; padding-top:9px; margin:0; }
.ekr-note code { font-size:10px; background:#eaf1e4; border-radius:3px; padding:1px 4px; color:#41563c; }
.ekr-scrollhint { display:none; font-size:9px; color:#5c7152; padding-top:4px; margin:0; }
@media (max-width:760px) {
 .ekr { padding:14px 12px 12px; }
 .ekr svg { max-height:none; min-width:640px; }
 .ekr .ekr-scrollhint { display:block; }
 .ekr-note, .ekr-note code { font-size:9px; }
 .ekr-factor { margin-left:0; }
}
@keyframes ekr-hit { 0%,8%{fill:#e8eee3;stroke:#d7e2cf} 22%,100%{fill:#d8674a;stroke:#943f26} }
@media (prefers-reduced-motion:reduce) {
 .ekr.is-playing .ekr-flow, .ekr.is-playing .ekr-cell { animation:none; }
 .ekr .ekr-out { opacity:1; }
 .ekr .ekr-cell.is-affected { fill:#d8674a; stroke:#943f26; }
}

/* ---- EvidencePack map ---------------------------------------------------
   The companion to the path graph: what the company is left holding, and
   the one route out of it. Four steps rather than three branches, because
   these destinations are not alternatives -- the pack is always yours, it
   can always be checked offline, and Lighthouse is the only one gated. */
.ekv { margin:26px 0 30px; border:1px solid #cfddc6; border-radius:12px; background:radial-gradient(ellipse at 42% 40%,#e6f0de 0,transparent 62%),#f8faf3; padding:16px 20px 14px; }
.ekv figcaption { display:flex; align-items:center; gap:12px; padding-bottom:10px; border-bottom:1px dashed #ccd9c2; }
.ekv figcaption .ek-eyebrow { margin:0; font-size:9px; }
.ekv-cycle { margin-left:auto; font-size:10px; font-weight:650; letter-spacing:.06em; text-transform:uppercase; color:var(--ekv-tone,var(--ek-green)); }
.ekv-stage { padding:10px 0 4px; overflow-x:auto; -webkit-overflow-scrolling:touch; }
.ekv svg { display:block; width:100%; height:auto; max-height:360px; }
.ekv-wire { stroke:#c7d8bb; stroke-width:3; }
.ekv-gated { stroke-dasharray:9 8; }
.ekv-flow { stroke:var(--ekv-tone,var(--ek-green)); stroke-width:5.5; stroke-dasharray:12 100; opacity:0; }
.ekv-node rect { fill:#fff; stroke:#cfddc6; stroke-width:2; }
.ekv-pack rect { fill:#fcfdfa; stroke:#b6cdaa; }
.ekv-t { font:600 20px/1 Inter,system-ui,sans-serif; fill:var(--ek-ink); text-anchor:middle; }
.ekv-rt { font:600 15px/1 Inter,system-ui,sans-serif; fill:var(--ek-green); text-anchor:middle; }
.ekv-s { font:400 12px/1 Inter,system-ui,sans-serif; fill:var(--ek-muted); text-anchor:middle; }
.ekv-g { font:600 13px/1 Inter,system-ui,sans-serif; fill:#855008; text-anchor:middle; }
.ekv-gate rect { fill:#fff6e6; stroke:#e0b667; stroke-dasharray:5 4; }
.ekv-lighthouse rect { stroke-dasharray:6 5; }

.ekv[data-step="0"] { --ekv-tone:#0d5b3d; }
.ekv[data-step="1"] { --ekv-tone:#0d5b3d; }
.ekv[data-step="2"] { --ekv-tone:#1c6b8a; }
.ekv[data-step="3"] { --ekv-tone:#855008; }
/* Only the leg in play carries a comet; every other leg stays drawn. */
.ekv .ekv-flow { animation:none; opacity:0; }
.ekv.is-playing[data-step="0"] .ekv-s0,
.ekv.is-playing[data-step="1"] .ekv-s1,
.ekv.is-playing[data-step="2"] .ekv-s2,
.ekv.is-playing[data-step="3"] .ekv-s3 { animation:ekv-leg 1.9s linear infinite; }
.ekv.is-playing[data-step="3"] .ekv-s3b { animation:ekv-leg 1.9s linear infinite; animation-delay:-1.05s; }
.ekv-dest rect, .ekv-dest text, .ekv-row { transition:opacity .35s ease, stroke .35s ease; }
.ekv-dest { opacity:.45; }
.ekv[data-step="1"] .ekv-dest[data-dest=own],
.ekv[data-step="2"] .ekv-dest[data-dest=check],
.ekv[data-step="3"] .ekv-dest[data-dest=lighthouse] { opacity:1; }
.ekv[data-step="1"] .ekv-dest[data-dest=own] rect,
.ekv[data-step="2"] .ekv-dest[data-dest=check] rect,
.ekv[data-step="3"] .ekv-dest[data-dest=lighthouse] rect { stroke:var(--ekv-tone); stroke-width:3; }
.ekv-gate { opacity:.45; }
.ekv[data-step="3"] .ekv-gate { opacity:1; }
.ekv[data-step="0"] .ekv-row { opacity:.35; }
.ekv.is-playing[data-step="0"] .ekv-r1 { animation:ekv-reveal 1.9s ease-out infinite; }
.ekv.is-playing[data-step="0"] .ekv-r2 { animation:ekv-reveal 1.9s ease-out infinite; animation-delay:-1.58s; }
.ekv.is-playing[data-step="0"] .ekv-r3 { animation:ekv-reveal 1.9s ease-out infinite; animation-delay:-1.27s; }
.ekv.is-playing .ekv-pack { animation:ekp-node 1.9s linear infinite; }

.ekv-code { display:flex; gap:11px; padding:11px 15px; border-radius:6px; background:#173b29; align-items:baseline; margin-top:8px; }
.ekv-code>span { color:#9dc681; font-size:13px; }
.ekv-code code { background:none; color:#e0eecd; font:11px/1.6 ui-monospace,Consolas,monospace; overflow-wrap:anywhere; }
.ekv-note { font-size:10px; color:#5c7152; padding-top:9px; margin:0; }
.ekv-scrollhint { display:none; font-size:9px; color:#5c7152; padding-top:4px; margin:0; }
@media (max-width:760px) {
 .ekv { padding:14px 12px 12px; }
 .ekv svg { max-height:none; min-width:620px; }
 .ekv .ekv-scrollhint { display:block; }
 .ekv-note { font-size:9px; }
}
@keyframes ekv-leg { 0%{stroke-dashoffset:12;opacity:0} 2%{opacity:1} 62%{stroke-dashoffset:-100;opacity:1} 68%{opacity:0} 100%{stroke-dashoffset:-100;opacity:0} }
@keyframes ekv-reveal { 0%,10%{opacity:.35} 30%,100%{opacity:1} }
@media (prefers-reduced-motion:reduce) {
 .ekv.is-playing .ekv-flow, .ekv.is-playing .ekv-row, .ekv.is-playing .ekv-pack { animation:none; }
 .ekv .ekv-row { opacity:1; }
 .ekv .ekv-dest { opacity:1; }
}

@keyframes ekp-run { 0%{stroke-dashoffset:12;opacity:0} 1%{opacity:1} 13%{stroke-dashoffset:-100;opacity:1} 15%{opacity:0} 100%{stroke-dashoffset:-100;opacity:0} }
@keyframes ekp-node { 0%,100%{transform:translateY(0)} 3%{transform:translateY(-2px)} 13%{transform:translateY(-2px)} 20%{transform:translateY(0)} }

/* Below ~760px the diagram would scale to about 280px wide, which puts the
   labels at under 7px. It scrolls sideways inside its own container instead,
   at a width that keeps the type readable. The page itself never scrolls
   horizontally. */
@media (max-width:760px) {
 .ekp { padding:14px 12px 12px; }
 .ekp svg { max-height:none; min-width:600px; }
 .ekp-note { font-size:9px; }
 .ekp-stage { scrollbar-width:thin; }
 .ekp .ekp-scrollhint { display:block; }
}
.ekp-scrollhint { display:none; font-size:9px; color:#5c7152; padding-top:4px; margin:0; }
@media (prefers-reduced-motion:reduce) {
 .ekp.is-playing .ekp-flow, .ekp.is-playing .ekp-node { animation:none; }
 .ekp .ekp-flow { opacity:0; }
 .ekp-w-allow, .ekp-w-review, .ekp-w-block { opacity:.75; }
}
.ek-next-step { text-align:center; padding:42px 0 58px; }
.ek-next-step p { font-size:13px; margin-bottom:8px; }
.ek-page-heading { max-width:780px; padding:60px 0 38px; }
.ek-page-heading h1 { font-size:clamp(34px,4vw,52px); line-height:1.13; letter-spacing:-2px; margin-bottom:20px; }
.ek-page-heading p { font-size:17px; max-width:640px; }
.ek-deeper { margin:60px 0; }
.ek-deeper h2 { font-size:28px; letter-spacing:-.8px; }
.ek-link-grid { display:grid; grid-template-columns:repeat(3,1fr); gap:18px; margin-top:26px; }
.ek-link-card { border:1px solid var(--ek-line); border-radius:10px; background:#fffefa; padding:26px; color:var(--ek-ink); display:flex; flex-direction:column; gap:14px; text-decoration:none; transition:border-color .2s; }
.ek-link-card:hover { border-color:#638960; }
.ek-link-card h2,.ek-link-card h3 { font-size:20px; line-height:1.3; letter-spacing:-.4px; }
.ek-link-card p { font-size:13px; }
.ek-link-card .ek-text-link { margin-top:auto; padding-top:10px; }
.ek-notice { border-left:3px solid #bacdaf; padding:16px 20px; margin:28px 0; background:#edf3e7; }
.ek-notice p { font-size:13px; }
.ek-page :focus-visible,.ek-nav :focus-visible,.ek-footer :focus-visible { outline:3px solid #15714a; outline-offset:4px; }
.ek-page section[id],.ek-page div[id] { scroll-margin-top:104px; }
@media(min-width:1101px) { body:has(.ek-nav) { zoom:1; } }
@media(max-width:1100px) { .ek-nav .nav-inner { gap:14px; padding:0 24px; }.ek-nav .nav-link{padding:9px 8px;font-size:13px}.ek-nav-actions{gap:12px}.ek-stage{padding:20px 16px}.ek-page{padding-right:24px;padding-left:24px} }
@media(max-width:900px) { .ek-nav .nav-links,.ek-nav .ek-nav-actions{display:none}.ek-nav .nav-hamburger{display:flex;margin-left:auto}.ek-nav .nav-inner{justify-content:space-between}.ek-decision-grid{grid-template-columns:1fr}.ek-stage{padding:24px}.ek-stage h2{margin-bottom:18px}.ek-stage-bottom{padding-top:20px}.ek-source{margin:18px 0 14px}.ek-control>.ek-button{width:100%}.ek-verdict{min-height:100px}.ek-demo-label{font-size:10px}.ek-demo-footer{align-items:flex-start}.ek-page{max-width:760px}.ek-hero{padding-top:44px}.ek-hero h1{font-size:48px;letter-spacing:-2px}.ek-layer-grid{gap:10px}.ek-layer{padding:20px 30px 20px 18px}.ek-layer strong{font-size:16px}.ek-model-section{margin-top:56px}.ek-layer-panel{padding:28px}.ek-outcomes{gap:12px}.ek-outcomes article{padding:16px}.ek-footer-inner{grid-template-columns:1fr 1fr}.ek-link-grid{grid-template-columns:1fr}.mobile-overlay{background:#fafbf7!important;top:80px!important}.mobile-overlay-inner{padding:36px 28px}.mobile-overlay a{color:var(--ek-ink)!important;font-size:22px!important}.mobile-overlay .ek-button{font-size:15px!important;color:white!important}.mobile-overlay ul{list-style:none}.mobile-overlay li{margin:0 0 22px}.ek-context-row{align-items:flex-start;flex-direction:column;gap:16px} }
@media(min-width:901px) { .ek-nav .nav-hamburger{display:none}.ek-nav .nav-links{display:flex} }
@media(max-width:600px) { .ek-nav.nav,.ek-nav .nav-inner{height:68px}.ek-nav .nav-inner{padding:0 20px}.ek-page{padding:68px 16px 0}.ek-hero{padding:40px 4px 30px}.ek-hero h1{font-size:38px;letter-spacing:-1.6px}.ek-hero>p{font-size:15px}.ek-eyebrow{font-size:10px;letter-spacing:1px}.ek-demo{padding:12px;border-radius:12px}.ek-demo-toolbar{align-items:flex-start;flex-direction:column;gap:5px;padding-bottom:12px}.ek-demo-environment{align-items:stretch;flex-direction:column;gap:10px;padding-top:12px}.ek-segment button{padding:9px 10px}.ek-stage{padding:22px 20px}.ek-demo-footer{flex-direction:column;gap:10px;padding:16px 4px 4px}.ek-section-heading h2{font-size:27px;letter-spacing:-.8px}.ek-layer-grid{grid-template-columns:1fr;gap:10px}.ek-layer{padding:20px 36px 20px 20px}.ek-layer strong{font-size:18px;margin:5px 0}.ek-layer-toggle{top:35px;right:20px}.ek-layer-panel{padding:24px 18px}.ek-layer-panel h3{font-size:23px}.ek-finder-fields{grid-template-columns:1fr;gap:20px}.ek-route-result{padding:20px 16px}.ek-outcomes{grid-template-columns:1fr}.ek-outcomes h4{margin-top:12px}.ek-onthis{align-items:flex-start;flex-direction:column;gap:8px}.ek-onthis span{gap:14px}.ek-page-heading{padding-top:40px}.ek-page-heading h1{font-size:36px;letter-spacing:-1.3px}.ek-page-heading p{font-size:15px}.ek-footer{padding:36px 22px 24px}.ek-footer-inner{gap:26px}.ek-footer-brand{grid-column:1/-1}.ek-footer-bottom{flex-direction:column;gap:16px}.ek-footer-bottom>div{gap:16px}.ek-button{font-size:12px;padding:12px 14px}.mobile-overlay{top:68px!important} }
@media(prefers-reduced-motion:reduce) { .ek-page *, .ek-nav *{animation:none!important;transition:none!important;scroll-behavior:auto!important} }
