/* Vuli web UI - styles of the CVEs tab, CVE drawer, Fixes list and Fix page (screens group A).
   What: the Planted tag and source bar, the Integrity hold chip and box, the "Hide planted"
   toggle, the patch view (plain text in a <pre>, one class per diff line kind), the not-proven
   lists, the pager and the Fixes group rows. Class names follow the central mockup where it has
   them. Rules: tokens only (no new colour outside :root of this file), no inline styles anywhere
   (the CSP forbids them: every state is a class), verdicts stay icon + word, and the layout
   holds at 375 px (tables become labelled cards through style.css .cards-sm). */

:root{--plant:#674a83;--plant-bg:#f6f2fa;--plant-bd:#8a73a6}
.planted{display:inline-flex;align-items:center;gap:4px;font-size:11.5px;font-weight:700;line-height:1.45;color:var(--plant);background:var(--plant-bg);border:1px solid currentColor;border-radius:6px;padding:0 7px 0 5px;white-space:nowrap;vertical-align:middle}
.planted svg{width:13px;height:13px;flex:none}
tr.is-planted > :first-child{border-left:2px dashed var(--plant-bd)}
.cve-src{margin-top:4px}
.src-bar{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;margin:0 0 12px;padding:0 12px}
.src-seg{margin:0}
.src-seg button svg{width:14px;height:14px;vertical-align:-2px;margin-right:4px}
.kpi-note{display:flex;align-items:flex-start;gap:6px;margin:10px 0 0;font-size:12.5px;color:var(--muted)}
.kpi-note svg{width:14px;height:14px;color:var(--plant);flex:none;margin-top:2px}
.kpi-note b{color:var(--heading);font-variant-numeric:tabular-nums}
.btn.plant-toggle[aria-pressed="true"]{background:var(--plant-bg);border-color:var(--plant);color:var(--plant)}
.btn.plant-toggle svg{width:14px;height:14px;vertical-align:-2px;margin-right:4px}
.btn.plant-toggle[aria-pressed="true"]::after{content:" (on)"}
/* Integrity hold: a stored safe whose integrity check did not pass. Gap colours, dashed, never green. */
.verdict.v-hold{color:var(--gap);background:var(--gap-bg);border-style:dashed}
.hold-note{margin:6px 0 0;color:var(--gap);font-weight:600}
.vchip.hold{color:var(--gap);background:var(--gap-bg);border-style:dashed}
.rb .lk.v-hold-f,.rb .nd-r.v-hold-f{fill:var(--gap)}
.rb-legend .hd i{background:var(--gap-bg);border:1px dashed var(--gap)}
.hold-list{margin:6px 0 0;padding-left:18px;font-size:13px;color:var(--text);font-weight:400}
.hold-box{border:1px dashed var(--gap);background:var(--gaps-bg);border-radius:var(--radius);padding:14px 16px;margin:0 0 14px}
.hold-box h3{display:flex;align-items:center;gap:6px;color:var(--gap);margin:0 0 6px}
.hold-box p{margin:0 0 6px}
/* Not proven and steps */
.np-list{margin:0 0 10px;padding-left:20px}
.np-list li{margin:3px 0;overflow-wrap:anywhere}
h4{margin:12px 0 6px;font-size:13px;color:var(--heading)}
.evid{display:inline-block;padding:0 6px;border:1px solid var(--border);border-radius:5px;background:var(--surface-2);text-decoration:none;color:var(--accent);margin:0 2px 2px 0}
.fx-det{border:1px solid var(--border);border-radius:10px;padding:8px 12px;margin:0 0 8px}
.fx-det summary{cursor:pointer;display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.fx-pkg{font-weight:500;overflow-wrap:anywhere}
/* Patch */
pre.patch{margin:0 0 10px;padding:8px 0;border:1px solid var(--border);border-radius:10px;background:var(--inset-bg);overflow:auto;max-height:560px;font-family:var(--mono);font-size:12.5px;line-height:1.5;color:#000}
pre.patch:focus-visible{outline:3px solid var(--focus);outline-offset:2px}
pre.patch .dl{display:block;padding:0 12px;white-space:pre}
pre.patch .dl-add{background:var(--safe-bg);color:#064d2a}
pre.patch .dl-del{background:var(--risky-bg);color:#7d1224}
pre.patch .dl-hunk{background:var(--accent-soft);color:var(--muted)}
pre.patch .dl-meta{color:var(--muted);font-weight:700}
.files-list{list-style:none;margin:0 0 10px;padding:0;display:flex;flex-direction:column;gap:3px;font-size:13px}
.files-list .p{color:var(--safe);font-weight:700}
.files-list .m{color:var(--risky);font-weight:700}
/* Fixes list */
.grp-row th{background:var(--accent-soft);text-transform:none;letter-spacing:0;font-size:13.5px;color:var(--heading)}
.grp-row .hexg{width:20px;height:20px;vertical-align:-5px;margin-right:6px}
.grp-n{margin-left:10px;font-weight:500;color:var(--muted)}
.pager{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding:10px 12px}
.pager select{width:auto}
.filters.toolbar{align-items:flex-end}
.fix-head h1{display:flex;flex-wrap:wrap;gap:8px;align-items:baseline}
@media (max-width:760px){tr.is-planted{border-left:2px dashed var(--plant-bd)} tr.is-planted > :first-child{border-left:0} .src-seg{flex-wrap:wrap}}
/* Fix page numbered diff and Fixes list groups (plan FP7, FX3, FX9): one block per changed file */
.fx-file{margin:0 0 14px}
.fx-file h3{margin:0 0 6px;font-size:14px;text-transform:none;letter-spacing:0}
pre.patch .ln{display:inline-block;min-width:4.5ch;margin-right:10px;text-align:right;color:var(--muted);user-select:none}
.grp-toggle{background:none;border:0;padding:0;margin-right:6px;cursor:pointer;font:inherit;color:var(--heading)}
.grp-toggle:focus-visible{outline:3px solid var(--focus);outline-offset:2px}
.grp-row .vsum{margin-left:10px}
.fx-cves summary{cursor:pointer}
.fx-cves ul{margin:6px 0 0;padding-left:18px}
.fx-file h3 .p{color:var(--safe);font-weight:700}
.fx-file h3 .m{color:var(--risky);font-weight:700}

/* -- phase 2 "run facts" (runfacts-parts.js): per-fix chips, stage log, fix history ------------
   Chips are neutral blue / dashed grey on purpose: a tick says the verdict table holds a fix's
   build or evidence, it is never drawn in a verdict colour. */
.fix-chips{list-style:none;margin:6px 0 10px;padding:0;display:flex;flex-wrap:wrap;gap:8px}
.fix-chip{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;padding:3px 10px;border-radius:99px;border:1px solid var(--border-hi);color:var(--heading);background:var(--surface-2);max-width:100%}
.fix-chip .i{width:14px;height:14px;flex:none}
.fix-chip.chip-done{background:var(--accent-soft);border-color:var(--accent)}
.fix-chip.chip-open{border-style:dashed;color:var(--muted)}
.fix-chip .mono{overflow-wrap:anywhere}
.stage-panel h4{margin:14px 0 4px;font-size:14px}
.stage-log{max-height:260px}
.fx-history{list-style:none;margin:0;padding:0}
.fx-history li{display:flex;flex-wrap:wrap;gap:4px 12px;padding:6px 0;border-top:1px solid var(--row-line)}
.fx-history li:first-child{border-top:0}
.fx-history .when{font-variant-numeric:tabular-nums;color:var(--muted);min-width:11em}
/* What the evidence proves (W10 proven statements, DECISIONS #187): the server's positive lines
   and its one-sentence summary; long engine words wrap instead of widening the page */
.proven-list{margin:0;padding-left:18px}
.proven-list li{margin:0 0 6px;overflow-wrap:anywhere}
.proven-summary{margin:0;overflow-wrap:anywhere}
