  :root{
    /* Colourblind-safe palette (Okabe-Ito-inspired for dark backgrounds).
       Crit = vermillion, High = orange, Med = yellow, Low/Accent = sky blue,
       Info = reddish-purple, Ok = bluish-green. These pairs are
       distinguishable for protanopia/deuteranopia/tritanopia + we add icons
       (✓/⚠/◷/✗) and patterns to convey status redundantly. */
    --bg:#0f1115; --panel:#171a21; --panel-2:#1f232c; --border:#2a2f3a;
    --text:#e6e8ee; --muted:#9aa3b2;
    --accent:#56B4E9; --accent-2:#2C8FCB;
    --crit:#FF6B47; --crit-deep:#D55E00;
    --high:#FFB74A; --high-deep:#E69F00;
    --med:#F0E442;
    --low:#56B4E9;
    --info:#CC79A7;
    --inh:#9aa3b2;
    --ok:#26C291; --ok-deep:#009E73;
    --off:#576574;
    --code-bg:#0b0d12;
    /* Coverage heat scale stays as a sequential blue ramp (already CB-safe). */
    --heat-0:#1a1f2a; --heat-1:#1d3552; --heat-2:#214e7a; --heat-3:#2767a3; --heat-4:#3786cf; --heat-5:#5ea7ee;
    /* CB-safe state semantics, used when we want named colours independent of
       priority palette: */
    --st-good:#26C291; --st-good-bg:rgba(38,194,145,.18); --st-good-bd:rgba(38,194,145,.55);
    --st-warn:#FFB74A; --st-warn-bg:rgba(255,183,74,.16);  --st-warn-bd:rgba(255,183,74,.55);
    --st-bad:#FF6B47;  --st-bad-bg:rgba(255,107,71,.18);   --st-bad-bd:rgba(255,107,71,.55);
    --st-mid:#F0E442;  --st-mid-bg:rgba(240,228,66,.16);
  }
  /* Browser default for [hidden] is display:none, but author rules with
     display:flex/grid override it. Force [hidden] to always win. */
  [hidden]{display:none!important}
  *{box-sizing:border-box}
  html,body{margin:0;padding:0;background:var(--bg);color:var(--text);font:14px/1.45 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif}
  a{color:var(--accent);text-decoration:none}
  a:hover{text-decoration:underline}

  .topnav{display:flex;align-items:center;background:#10131a;border-bottom:1px solid var(--border);padding:0 16px;gap:6px;position:sticky;top:0;z-index:30}
  .topnav h1{font-size:14px;font-weight:600;margin:0;padding:14px 12px 14px 0;color:var(--text);letter-spacing:.2px}
  .navtab{padding:14px 14px;color:var(--muted);font-size:13px;cursor:pointer;border-bottom:2px solid transparent}
  .navtab.on{color:var(--text);border-bottom-color:var(--accent-2)}
  .topnav .stat{margin-left:auto;color:var(--muted);font-size:12px;padding-right:4px}

  header{position:sticky;top:var(--topnav-h, 49px);z-index:10;background:var(--panel);border-bottom:1px solid var(--border);padding:10px 16px}
  header .row1{display:flex;gap:12px;align-items:center;flex-wrap:wrap}
  .search{flex:1;min-width:280px;display:flex;gap:8px;align-items:center}
  .search input{flex:1;background:var(--panel-2);border:1px solid var(--border);color:var(--text);
    padding:9px 12px;border-radius:8px;font-size:13.5px;outline:none}
  .search input:focus{border-color:var(--accent)}
  .search .scope{display:flex;gap:4px;background:var(--panel-2);border:1px solid var(--border);border-radius:8px;padding:3px}
  .search .scope label{font-size:11.5px;color:var(--muted);padding:4px 8px;border-radius:6px;cursor:pointer;user-select:none}
  .search .scope input{display:none}
  .search .scope input:checked + span{background:var(--accent-2);color:#fff}
  .search .scope span{display:inline-block;padding:4px 8px;border-radius:6px}
  .syntax-hint{font-size:11px;color:var(--muted);padding:6px 0 0;flex-basis:100%}
  .syntax-hint code{background:var(--panel-2);padding:1px 5px;border-radius:4px;font-size:11px}

  .filters{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px}
  .chipgroup{display:flex;gap:4px;flex-wrap:wrap;align-items:center;background:var(--panel-2);border:1px solid var(--border);
    border-radius:8px;padding:5px 8px}
  .chipgroup .label{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.6px;margin-right:2px}
  .chip{font-size:11.5px;padding:3px 9px;border-radius:999px;border:1px solid var(--border);background:var(--panel);
    color:var(--text);cursor:pointer;user-select:none;display:inline-flex;gap:5px;align-items:center}
  .chip .ct{font-size:10px;color:var(--muted);background:#10131a;border-radius:8px;padding:0 6px}
  .chip.active{background:var(--accent-2);border-color:var(--accent-2);color:#fff}
  .chip.active .ct{color:#fff;background:rgba(255,255,255,.18)}
  .chip.crit.active{background:var(--crit);border-color:var(--crit)}
  .chip.high.active{background:var(--high);border-color:var(--high);color:#241400}
  .chip.med.active{background:var(--med);border-color:var(--med);color:#241400}
  .chip.low.active{background:var(--low);border-color:var(--low)}
  .chip.info.active{background:var(--info);border-color:var(--info);color:#101218}
  .chip.inh.active{background:var(--inh);border-color:var(--inh)}
  .chip.cust.active{background:#5e60ce;border-color:#5e60ce}
  .chip.mdr.active{background:#48a999;border-color:#48a999;color:#04231d}
  .clear{background:none;border:1px dashed var(--border);color:var(--muted);font-size:11.5px;padding:3px 9px;border-radius:999px;cursor:pointer}
  .clear:hover{color:var(--text);border-color:var(--text)}
  .btn{background:var(--panel-2);border:1px solid var(--border);color:var(--text);font-size:11.5px;padding:4px 10px;border-radius:6px;cursor:pointer}
  .btn:hover{border-color:var(--accent)}

  main{padding:12px 16px}
  .toolbar{display:flex;gap:10px;align-items:center;color:var(--muted);font-size:12.5px;margin-bottom:8px;flex-wrap:wrap}
  .toolbar .grow{flex:1}
  .toolbar select, .toolbar input[type=search]{background:var(--panel-2);color:var(--text);border:1px solid var(--border);border-radius:6px;padding:4px 8px;font-size:12.5px}

  table{width:100%;border-collapse:separate;border-spacing:0;background:var(--panel);border:1px solid var(--border);border-radius:10px;overflow:hidden}
  thead th{background:var(--panel-2);text-align:left;font-weight:600;font-size:12px;color:var(--muted);
    text-transform:uppercase;letter-spacing:.5px;padding:9px 12px;border-bottom:1px solid var(--border);white-space:nowrap}
  tbody td{padding:10px 12px;border-bottom:1px solid var(--border);vertical-align:top;font-size:13px}
  tbody tr{cursor:pointer}
  tbody tr:hover{background:#1c2029}
  tbody tr.open{background:#1c2029}
  .pill{display:inline-block;font-size:11px;padding:1px 7px;border-radius:999px;border:1px solid var(--border);color:var(--muted)}
  .pill.crit{background:rgba(255,107,71,.12);border-color:rgba(255,107,71,.5);color:#FF9F7E}
  .pill.high{background:rgba(255,183,74,.12);border-color:rgba(255,183,74,.5);color:#FFC773}
  .pill.med{background:rgba(240,228,66,.10);border-color:rgba(240,228,66,.4);color:#F4DC6E}
  .pill.low{background:rgba(84,160,255,.12);border-color:rgba(84,160,255,.5);color:#7bb5ff}
  .pill.info{background:rgba(164,176,190,.12);border-color:rgba(164,176,190,.4);color:#bfc6d3}
  .pill.inh{background:rgba(119,140,163,.15);border-color:rgba(119,140,163,.4);color:#9aabbe}
  .pill.act{background:rgba(38,194,145,.12);border-color:rgba(38,194,145,.5);color:#4be0bb}
  .pill.off{background:rgba(87,101,116,.18);border-color:rgba(87,101,116,.5);color:#a8b3c0}
  .pill.cust{background:rgba(94,96,206,.18);border-color:rgba(94,96,206,.55);color:#a3a4f0}
  .pill.mdr{background:rgba(72,169,153,.18);border-color:rgba(72,169,153,.55);color:#7ed6c7}
  .tags{display:flex;gap:4px;flex-wrap:wrap}
  .tag{font-size:11px;padding:1px 7px;border-radius:6px;background:#222733;border:1px solid var(--border);color:#cbd2dc}
  .name{font-weight:500;color:var(--text)}
  .desc{color:var(--muted);font-size:12px;margin-top:2px;
    display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
  mark{background:#ffe066;color:#1a1300;padding:0 2px;border-radius:2px}
  .name .r7-link{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border-radius:4px;
    color:var(--accent);font-size:11px;text-decoration:none;margin-left:6px;opacity:.55;vertical-align:middle;border:1px solid transparent}
  .name .r7-link:hover{opacity:1;background:rgba(44,143,203,.18);border-color:var(--accent-2);text-decoration:none}
  .detail .meta .kv .r7-link{color:var(--accent);font-size:11px;text-decoration:none;margin-left:6px}
  .detail .meta .kv .r7-link:hover{text-decoration:underline}
  /* allow text selection inside rule content (overrides cursor:pointer click target) */
  tbody .name, tbody .desc, .detail .body p, .detail pre, .detail .meta .kv span,
  .infra-card .title, .infra-card .note, .infra-card .pot,
  .ls-item .ls-name, .ls-item .ls-types,
  .cov-card .v, .cov-card .sub, .tcell .lbl{user-select:text;-webkit-user-select:text}

  .detail{background:#10131a;border-top:1px solid var(--border)}
  .detail-inner{padding:14px 16px;display:grid;grid-template-columns:240px 1fr;gap:18px}
  .detail h3{margin:0 0 6px;font-size:12px;text-transform:uppercase;letter-spacing:.6px;color:var(--muted)}
  .detail .meta{display:flex;flex-direction:column;gap:10px;font-size:12.5px}
  .detail .meta .kv{color:var(--muted)}
  .detail .meta .kv span{color:var(--text);display:block;margin-top:1px;word-break:break-all}
  .detail .body p{margin:0 0 10px;color:#d6dae3}
  .detail pre{background:var(--code-bg);border:1px solid var(--border);border-radius:8px;padding:12px;
    overflow:auto;font:12px/1.5 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;color:#d6dae3;max-height:480px}

  .pager{display:flex;justify-content:center;gap:6px;margin:14px 0 24px;align-items:center;color:var(--muted)}
  .pager button{background:var(--panel-2);border:1px solid var(--border);color:var(--text);
    padding:5px 10px;border-radius:6px;cursor:pointer;font-size:12.5px}
  .pager button:disabled{opacity:.4;cursor:not-allowed}

  .empty{padding:60px 0;text-align:center;color:var(--muted)}
  .loading{padding:80px 0;text-align:center;color:var(--muted)}
  .loading .spinner{width:24px;height:24px;border:2px solid var(--border);border-top-color:var(--accent);
    border-radius:50%;animation:spin 1s linear infinite;margin:0 auto 12px}
  @keyframes spin{to{transform:rotate(360deg)}}

  .copy{font-size:11px;color:var(--muted);background:var(--panel-2);border:1px solid var(--border);
    padding:2px 8px;border-radius:6px;cursor:pointer;float:right}
  .copy:hover{color:var(--text)}

  .cov-stats{display:flex;gap:14px;flex-wrap:wrap;margin:6px 0 12px}
  .cov-card{background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:10px 14px;min-width:140px}
  .cov-card .k{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.6px}
  .cov-card .v{font-size:20px;font-weight:600;color:var(--text);margin-top:2px}
  .cov-card .sub{font-size:11px;color:var(--muted);margin-top:2px}

  .matrix-toolbar{display:flex;align-items:center;gap:10px;margin:18px 0 8px;flex-wrap:wrap}
  .matrix-toolbar h2{font-size:13px;color:var(--muted);text-transform:uppercase;letter-spacing:.6px;margin:0;font-weight:600}
  .matrix-toolbar h2{cursor:pointer;user-select:none;display:flex;align-items:center;gap:6px}
  .matrix-toolbar h2 .toggle-arrow{font-size:11px;color:var(--muted);transition:transform .15s}
  .matrix-toolbar.collapsed h2 .toggle-arrow{transform:rotate(-90deg)}
  .matrix-toolbar.collapsed + .matrix-wrap,
  .matrix-toolbar.collapsed + .gapcat-wrap{display:none}
  .toggle{display:inline-flex;align-items:center;gap:8px;font-size:12px;color:var(--muted);cursor:pointer;user-select:none}
  .toggle input{appearance:none;width:30px;height:16px;background:var(--panel-2);border:1px solid var(--border);border-radius:9px;position:relative;cursor:pointer;transition:.15s}
  .toggle input::before{content:'';position:absolute;top:1px;left:1px;width:12px;height:12px;background:var(--muted);border-radius:50%;transition:.15s}
  .toggle input:checked{background:var(--accent-2);border-color:var(--accent-2)}
  .toggle input:checked::before{transform:translateX(14px);background:#fff}

  .matrix-wrap{overflow-x:auto;border:1px solid var(--border);border-radius:10px;background:var(--panel);margin-bottom:18px}
  .matrix{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(160px,1fr);min-width:1400px}
  .mat-col{border-right:1px solid var(--border);padding:0;display:flex;flex-direction:column}
  .mat-col:last-child{border-right:none}
  .mat-head{padding:10px 10px 8px;background:var(--panel-2);border-bottom:1px solid var(--border)}
  .mat-head .tac{font-size:10px;color:var(--muted);text-transform:uppercase;letter-spacing:.5px}
  .mat-head .name{font-weight:600;font-size:12.5px;color:var(--text);margin-top:2px;line-height:1.3}
  .mat-head .meter{height:4px;background:#0c0f15;border-radius:3px;margin-top:7px;overflow:hidden}
  .mat-head .meter > div{height:100%;background:linear-gradient(90deg,var(--accent-2),#a0c4ff)}
  .mat-head .nums{font-size:10.5px;color:var(--muted);margin-top:4px}
  .mat-cells{display:flex;flex-direction:column;padding:6px}
  .tcell{display:flex;justify-content:space-between;align-items:center;font-size:11.5px;
    padding:5px 7px;margin:1px 0;border-radius:5px;cursor:pointer;color:#d6dae3;background:var(--heat-1);gap:6px}
  .tcell .lbl{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .tcell .ct{font-size:10px;color:#0b0d12;background:#cbd2dc;border-radius:6px;padding:0 5px;flex-shrink:0}
  .tcell .lbl{display:flex;align-items:baseline;gap:6px;min-width:0}
  .tcell .lbl .tid{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:10.5px;color:rgba(255,255,255,.65);flex-shrink:0}
  .tcell .lbl .tn{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
  .tcell.parent .lbl .tid{font-weight:600;color:rgba(255,255,255,.85)}
  .tcell.h5 .lbl .tid,.tcell.parent.h5 .lbl .tid{color:rgba(11,13,18,.7)}
  .tcell .ext{flex-shrink:0;font-size:11px;line-height:1;padding:2px 5px;border-radius:4px;color:inherit;opacity:.55;text-decoration:none}
  .tcell .ext:hover{opacity:1;background:rgba(255,255,255,.18);text-decoration:none}
  .mat-head .name{display:flex;align-items:baseline;gap:6px}
  .mat-head .name .ext{font-size:11px;color:var(--accent);text-decoration:none;opacity:.7}
  .mat-head .name .ext:hover{opacity:1;text-decoration:underline}
  .tcell.h2{background:var(--heat-2)}
  .tcell.h3{background:var(--heat-3);color:#fff}
  .tcell.h4{background:var(--heat-4);color:#fff}
  .tcell.h5{background:var(--heat-5);color:#0b0d12}
  .tcell.empty{background:transparent;color:#4a5161;cursor:default}
  .tcell.empty .ct{display:none}
  .tcell:hover:not(.empty){outline:1px solid #fff8}
  .tcell.selected{outline:2px solid var(--accent)}
  /* Gap visualisation */
  .tcell.gap-none{background:transparent;color:#4a5161}
  .tcell.gap-zero{background:rgba(255,107,71,.18);color:#FF9F7E;border:1px dashed rgba(255,107,71,.5)}
  .tcell.gap-zero:hover:not(.empty){outline:1px solid #FF9F7E}
  .tcell .gap{font-size:9.5px;color:#FF9F7E;background:rgba(255,107,71,.18);border-radius:8px;padding:0 5px;margin-left:4px;flex-shrink:0;font-weight:600}
  .tcell.h5 .gap{color:#751515;background:rgba(11,13,18,.18)}
  .tcell.gap-low{background:rgba(255,183,74,.20);color:#FFC773}
  .tcell.gap-mid{background:rgba(240,228,66,.18);color:#F4DC6E}
  .tcell.gap-good{background:rgba(38,194,145,.20);color:#7EE0BE}

  /* Gap analysis by source category */
  .gapcat-wrap{overflow-x:auto;border:1px solid var(--border);border-radius:10px;background:var(--panel);margin-bottom:18px}
  .gapcat-table{width:100%;border-collapse:collapse;font-size:12px;min-width:900px}
  .gapcat-table th,.gapcat-table td{padding:8px 10px;text-align:center;border-bottom:1px solid var(--border);border-right:1px solid var(--border);font-variant-numeric:tabular-nums}
  .gapcat-table th:last-child,.gapcat-table td:last-child{border-right:none}
  .gapcat-table thead th{background:var(--panel-2);color:var(--muted);font-size:10.5px;text-transform:uppercase;letter-spacing:.5px;font-weight:600;text-align:center;position:sticky;top:0}
  .gapcat-table thead th .desc{display:block;font-size:9.5px;text-transform:none;letter-spacing:0;color:#6b7280;font-weight:400;margin-top:2px;line-height:1.2;max-width:160px}
  .gapcat-table .tac-row td:first-child{text-align:left;background:var(--panel-2);font-weight:600;color:var(--text);white-space:nowrap}
  .gapcat-table .tac-row td:first-child .id{font-size:10.5px;color:var(--muted);font-weight:500;margin-right:6px}
  .gapcat-table .totals-row td{background:rgba(44,143,203,.06);font-weight:600;border-top:2px solid var(--accent-2)}
  .gapcat-table .totals-row td:first-child{text-align:left;color:var(--accent)}
  .gapcat-cell{cursor:pointer;font-size:11.5px;line-height:1.3}
  /* Attack Coverage tab */
  .atk-mode-tabs{display:inline-flex;background:var(--panel-2);border:1px solid var(--border);border-radius:8px;padding:2px;gap:2px}
  .atk-mode-tab{font-size:12px;padding:6px 14px;border-radius:6px;border:none;background:transparent;color:var(--muted);cursor:pointer;font-weight:500;transition:background .1s,color .1s}
  .atk-mode-tab:hover{color:var(--text)}
  .atk-mode-tab.on{background:var(--accent-2);color:#fff}
  .atk-tag-filters{display:flex;flex-direction:column;gap:6px;margin:6px 0 12px;padding:8px 10px;background:var(--panel-2);border:1px solid var(--border);border-radius:8px}
  .atk-tag-row{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
  .atk-tag-row .lbl{font-size:10.5px;color:var(--muted);text-transform:uppercase;letter-spacing:.6px;min-width:160px;flex-shrink:0;font-weight:600}
  .atk-tag-chip{font-size:11px;padding:3px 9px;border-radius:999px;border:1px solid var(--border);background:var(--panel);cursor:pointer;color:var(--muted);user-select:none;display:inline-flex;align-items:center;gap:4px;line-height:1.3}
  .atk-tag-chip:hover{border-color:var(--accent)}
  .atk-tag-chip.on{background:var(--accent-2);border-color:var(--accent-2);color:#fff}
  .atk-tag-chip.any{background:transparent;font-style:italic}
  .atk-tag-chip .ct{font-size:9.5px;background:rgba(255,255,255,.12);border-radius:6px;padding:0 4px}
  .atk-tag-chip:not(.on) .ct{background:#10131a;color:var(--muted)}
  .atk-toolbar{display:flex;gap:8px;align-items:center;margin:6px 0 10px;flex-wrap:wrap}
  .atk-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:8px;max-height:560px;overflow-y:auto;padding:4px;background:var(--panel-2);border:1px solid var(--border);border-radius:8px}
  .atk-card{display:flex;align-items:center;gap:10px;padding:8px 10px;border:1px solid var(--border);border-radius:8px;background:var(--panel);cursor:pointer;transition:background .1s,border-color .1s;user-select:none;position:relative;overflow:hidden}
  .atk-card:hover{border-color:var(--accent)}
  .atk-card.on{border-color:var(--accent-2);background:#1d2434;box-shadow:inset 0 0 0 1px var(--accent-2)}
  .atk-card .check{width:18px;height:18px;border-radius:4px;border:1.5px solid var(--border);flex-shrink:0;display:flex;align-items:center;justify-content:center;color:#fff;font-size:12px;background:transparent}
  .atk-card.on .check{background:var(--accent-2);border-color:var(--accent-2)}
  .atk-card .id{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;color:var(--muted);min-width:46px;flex-shrink:0}
  .atk-card .body{flex:1;min-width:0}
  .atk-card .nm{font-size:13px;font-weight:600;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .atk-card .al{font-size:10.5px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:1px}
  .atk-card .stat-block{display:flex;flex-direction:column;align-items:flex-end;flex-shrink:0;gap:2px;padding-left:6px;border-left:1px solid var(--border)}
  .atk-card .pct{font-size:14px;font-weight:700;line-height:1}
  .atk-card .pct.low{color:#FF9F7E}
  .atk-card .pct.mid{color:#FFC773}
  .atk-card .pct.good{color:#7EE0BE}
  .atk-card .pct.zero{color:var(--muted)}
  .atk-card .ct{font-size:10px;color:var(--muted)}
  .atk-card .bar{position:absolute;left:0;bottom:0;height:2px;background:var(--accent);opacity:.6}
  .atk-card .bar.low{background:#FF6B47}
  .atk-card .bar.mid{background:#ff9f43}
  .atk-card .bar.good{background:#26C291}
  .atk-card .ext{font-size:11px;line-height:1;padding:2px 5px;border-radius:4px;color:var(--muted);text-decoration:none;flex-shrink:0;margin-left:4px;opacity:.6}
  .atk-card .ext:hover{opacity:1;background:rgba(255,255,255,.10);text-decoration:none}
  .atk-card .expander{font-size:11px;line-height:1;padding:3px 6px;border-radius:4px;color:var(--muted);cursor:pointer;flex-shrink:0;margin-left:4px;background:rgba(255,255,255,.06);user-select:none}
  .atk-card .expander:hover{color:var(--text);background:rgba(255,255,255,.14)}
  .atk-card.expanded .expander{color:var(--accent);background:rgba(86,180,233,.2)}
  .atk-tags{display:flex;gap:3px;flex-wrap:wrap;margin-top:3px;max-width:100%}
  .atk-tag{font-size:9.5px;padding:1px 6px;border-radius:6px;background:#10131a;color:var(--muted);border:1px solid var(--border);line-height:1.4;white-space:nowrap}
  .atk-tag.tg-origin{background:rgba(86,180,233,.16);color:#a8c2ff;border-color:rgba(86,180,233,.3)}
  .atk-tag.tg-type{background:rgba(255,183,74,.16);color:#ffc28a;border-color:rgba(255,183,74,.3)}
  .atk-tag.tg-activity{background:rgba(255,107,71,.16);color:#FFC9B3;border-color:rgba(255,107,71,.3)}
  .atk-tag.tg-target{background:rgba(38,194,145,.14);color:#86D9BC;border-color:rgba(38,194,145,.3)}
  /* Per-group campaign sublist */
  .atk-camp-list{grid-column:1/-1;margin-top:-4px;margin-bottom:8px;padding:6px 10px;background:#0c0e13;border:1px solid var(--border);border-top:none;border-radius:0 0 8px 8px;display:flex;flex-direction:column;gap:4px}
  .atk-camp-list .camp-item{display:flex;align-items:center;gap:8px;padding:5px 8px;border-radius:6px;background:var(--panel);border:1px solid var(--border);cursor:pointer;transition:background .1s}
  .atk-camp-list .camp-item:hover{border-color:var(--accent)}
  .atk-camp-list .camp-item.on{border-color:var(--accent-2);background:#1d2434}
  .atk-camp-list .camp-item .check{width:14px;height:14px;border-radius:3px;border:1.5px solid var(--border);flex-shrink:0;display:flex;align-items:center;justify-content:center;color:#fff;font-size:9px;background:transparent}
  .atk-camp-list .camp-item.on .check{background:var(--accent-2);border-color:var(--accent-2)}
  .atk-camp-list .camp-item .id{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:10.5px;color:var(--muted);min-width:50px;flex-shrink:0}
  .atk-camp-list .camp-item .nm{flex:1;font-size:12px;color:var(--text);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .atk-camp-list .camp-item .ts{font-size:10.5px;color:var(--muted);flex-shrink:0;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}
  .atk-camp-list .camp-item .pct{font-size:11px;font-weight:600;flex-shrink:0;min-width:38px;text-align:right}
  .atk-camp-list .camp-item .pct.low{color:#FF9F7E}
  .atk-camp-list .camp-item .pct.mid{color:#FFC773}
  .atk-camp-list .camp-item .pct.good{color:#7EE0BE}
  .atk-camp-list .camp-item .pct.zero{color:var(--muted)}
  .atk-camp-list .camp-item .ext{font-size:10.5px;line-height:1;padding:2px 4px;border-radius:3px;color:var(--muted);opacity:.6;text-decoration:none;flex-shrink:0}
  .atk-camp-list .camp-item .ext:hover{opacity:1;background:rgba(255,255,255,.12)}
  .atk-camp-list .camp-item.no-tech{opacity:.55;cursor:default}
  .atk-camp-list .none{color:var(--muted);font-size:11.5px;font-style:italic;padding:4px 6px}
  /* Attack-category grid */
  .atk-cat-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:8px}
  .atk-cat-card{position:relative;display:flex;align-items:center;gap:10px;padding:12px;background:var(--panel);border:1px solid var(--border);border-radius:10px;cursor:pointer;transition:background .1s,border-color .1s;overflow:hidden;user-select:none}
  .atk-cat-card:hover{border-color:var(--accent)}
  .atk-cat-card.on{border-color:var(--accent-2);background:#1d2434;box-shadow:inset 0 0 0 1px var(--accent-2)}
  .atk-cat-card .icon{font-size:24px;flex-shrink:0}
  .atk-cat-card .body{flex:1;min-width:0}
  .atk-cat-card .nm{font-size:13.5px;font-weight:600;color:var(--text)}
  .atk-cat-card .desc{font-size:11px;color:var(--muted);margin-top:2px;line-height:1.3}
  .atk-cat-card .stat-block{display:flex;flex-direction:column;align-items:flex-end;flex-shrink:0;gap:2px;padding-left:8px;border-left:1px solid var(--border)}
  .atk-cat-card .pct{font-size:18px;font-weight:700;line-height:1}
  .atk-cat-card .pct.low{color:#FF9F7E}
  .atk-cat-card .pct.mid{color:#FFC773}
  .atk-cat-card .pct.good{color:#7EE0BE}
  .atk-cat-card .pct.zero{color:var(--muted)}
  .atk-cat-card .ct{font-size:10px;color:var(--muted)}
  .atk-cat-card .bar{position:absolute;left:0;bottom:0;height:2px;background:var(--accent);opacity:.6}
  .atk-cat-card .bar.low{background:#FF6B47}
  .atk-cat-card .bar.mid{background:#ff9f43}
  .atk-cat-card .bar.good{background:#26C291}
  /* Make atk-list a 2-col grid that allows full-width campaign rows */
  .atk-list{grid-template-columns:repeat(auto-fill,minmax(360px,1fr))}
  /* Coverage by source breakdown (Attack Coverage tab) */
  .atk-source-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(360px,1fr));gap:8px;margin-bottom:16px}
  .atk-src-row{position:relative;display:flex;align-items:center;gap:10px;padding:9px 12px;background:var(--panel);border:1px solid var(--border);border-radius:8px;overflow:hidden}
  .atk-src-row.gap{border-color:rgba(255,107,71,.45);background:rgba(255,107,71,.06)}
  .atk-src-row.planned{border-color:rgba(255,183,74,.45);background:rgba(255,183,74,.05)}
  .atk-src-row.zero{opacity:.65}
  .atk-src-row .icon{font-size:16px;flex-shrink:0;width:22px;text-align:center}
  .atk-src-row .body{flex:1;min-width:0}
  .atk-src-row .nm{font-size:12.5px;font-weight:600;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .atk-src-row .ctx{font-size:10.5px;color:var(--muted);margin-top:1px}
  .atk-src-row .stat-block{flex-shrink:0;display:flex;flex-direction:column;align-items:flex-end;padding-left:8px;border-left:1px solid var(--border);min-width:74px}
  .atk-src-row .pct{font-size:14px;font-weight:700;line-height:1}
  .atk-src-row .pct.zero{color:#FF9F7E}
  .atk-src-row .pct.low{color:#FF9F7E}
  .atk-src-row .pct.mid{color:#FFC773}
  .atk-src-row .pct.good{color:#7EE0BE}
  .atk-src-row .ct{font-size:10px;color:var(--muted);margin-top:1px;white-space:nowrap}
  .atk-src-row .bar{position:absolute;left:0;bottom:0;height:2px;background:var(--accent);opacity:.55}
  .atk-src-row .bar.gap{background:#FF6B47}
  .atk-src-row .bar.planned{background:#ff9f43}
  .atk-src-row .bar.live{background:#26C291}
  /* Source detail config-hint enhancements */
  .src-detail .hint-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:8px;margin:6px 0 10px}
  .src-detail .hint-card{background:#0c0e13;border:1px solid var(--border);border-radius:6px;padding:8px 10px;font-size:12px}
  .src-detail .hint-card .hk{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.6px;margin-bottom:3px}
  .src-detail .hint-card .hv{color:var(--text);font-size:12.5px;line-height:1.4}
  .src-detail .hint-card.warn{border-color:rgba(255,183,74,.4);background:rgba(255,183,74,.05)}
  .src-detail .hint-card.warn .hk{color:#FFC773}
  .src-detail .hint-card.crit{border-color:rgba(255,107,71,.4);background:rgba(255,107,71,.06)}
  .src-detail .hint-card.crit .hk{color:#FF9F7E}
  .src-detail .hint-card .extra{margin-top:4px;color:var(--muted);font-size:11px;line-height:1.3}
  .src-detail .hint-card code{background:#1f232c;padding:1px 4px;border-radius:3px;font-size:11.5px;color:#a8c2ff}
  /* Attack-overlay matrix uses its own colour set */
  .tcell.atk-attacked-cov{background:rgba(38,194,145,.28);color:#BCE9D6;border:1px solid rgba(38,194,145,.55)}
  .tcell.atk-attacked-gap{background:repeating-linear-gradient(45deg,rgba(255,107,71,.32) 0 6px,rgba(255,107,71,.12) 6px 12px);color:#FFC9B3;border:1px dashed rgba(255,107,71,.75)}
  .tcell.atk-cov-only{background:#1d3552;color:#cbd2dc}
  .tcell.atk-none{background:transparent;color:#5a6172}
  .tcell.atk-attacked-cov .ct{background:rgba(11,13,18,.4);color:#e6e8ee}
  .tcell.atk-attacked-gap .ct{background:rgba(11,13,18,.4);color:#FFC9B3}
  .tcell.atk-cov-only .ct{background:rgba(11,13,18,.4);color:#cbd2dc}
  .tcell.atk-none .ct{display:none}
  /* Attack group detail rule list reuses .gapcat-cell-like dark table */
  
  .gapcat-cell.full{background:rgba(38,194,145,.18);color:#7EE0BE}
  .gapcat-cell.most{background:rgba(38,194,145,.10);color:#BCE9D6}
  .gapcat-cell.partial{background:rgba(240,228,66,.16);color:#F4DC6E}
  .gapcat-cell.thin{background:rgba(255,183,74,.18);color:#FFC773}
  .gapcat-cell.zero{background:rgba(255,107,71,.18);color:#FF9F7E}
  .gapcat-cell.none{background:transparent;color:#4a5161;cursor:default}
  .gapcat-cell:hover:not(.none){outline:1px solid #fff8}
  .gapcat-cell.selected{outline:2px solid var(--accent)}
  .gapcat-cell .frac{display:block;font-weight:600;font-size:12.5px}
  .gapcat-cell .pct{display:block;font-size:9.5px;opacity:.85}
  .gapcat-cell .pl{display:inline-block;margin-left:4px;font-size:9.5px;color:#FF9F7E;background:rgba(255,107,71,.18);border-radius:6px;padding:0 4px}
  .tcell.parent{font-weight:600}
  .tcell.parent.has-subs::after{content:'▾';font-size:9px;color:rgba(255,255,255,.55);margin-left:4px;flex-shrink:0}
  .tcell.parent.synthetic{background:transparent;color:#9aa3b2;font-weight:500}
  .tcell.parent.synthetic .ct{background:#374151;color:#cbd2dc}
  .tcell.sub{margin-left:14px;font-size:11px;padding:4px 7px 4px 11px;position:relative}
  .tcell.sub::before{content:'';position:absolute;left:2px;top:0;bottom:50%;width:7px;border-left:1px solid #374151;border-bottom:1px solid #374151;border-radius:0 0 0 3px}

  .legend{display:flex;align-items:center;gap:6px;padding:8px 12px;font-size:11px;color:var(--muted);border-top:1px solid var(--border);flex-wrap:wrap}
  .legend .sw{display:inline-block;width:14px;height:10px;border-radius:2px;margin-right:3px;vertical-align:middle}
  .legend .lab{margin-right:8px}

  .picker{background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:10px 12px;margin-bottom:10px}
  .picker.collapsed > *:not(h2){display:none}
  .picker.collapsed{padding-bottom:10px}
  .picker h2 .toggle-arrow{margin-left:auto;font-size:11px;color:var(--muted);transition:transform .15s}
  .picker.collapsed h2 .toggle-arrow{transform:rotate(-90deg)}
  .picker h2{margin:0 0 8px;cursor:pointer;user-select:none;font-size:12px;color:var(--muted);text-transform:uppercase;letter-spacing:.6px;font-weight:600;display:flex;align-items:center;gap:8px}
  .picker h2 .info{font-size:11px;text-transform:none;color:var(--muted);font-weight:400;letter-spacing:0}
  .picker .row{display:flex;gap:6px;flex-wrap:wrap}
  .picker .actions{margin-top:6px;display:flex;gap:8px;align-items:center;font-size:12px;color:var(--muted);flex-wrap:wrap}
  .ls-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:6px}
  .ls-item{display:flex;align-items:flex-start;gap:8px;padding:7px 10px;border:1px solid var(--border);border-radius:8px;
    background:var(--panel-2);cursor:pointer;user-select:none;font-size:12.5px;line-height:1.35}
  .ls-item:hover{border-color:var(--accent)}
  .ls-item.on{border-color:var(--accent-2);background:rgba(44,143,203,.10)}
  .ls-item .check{flex:0 0 14px;height:14px;width:14px;border:1.5px solid var(--border);border-radius:3px;margin-top:1px;
    display:flex;align-items:center;justify-content:center;font-size:10px;color:#fff}
  .ls-item.on .check{background:var(--accent-2);border-color:var(--accent-2)}
  .ls-item .ls-text{flex:1;min-width:0}
  .ls-item .ls-name{color:var(--text);font-weight:500}
  .ls-item .ls-types{color:var(--muted);font-size:11px;margin-top:2px;word-break:break-word}
  .ls-item .ls-stat{flex-shrink:0;display:flex;flex-direction:column;align-items:flex-end;gap:1px;font-variant-numeric:tabular-nums}
  .ls-item .ls-stat .n{font-weight:700;font-size:14px;color:var(--text)}
  .ls-item .ls-stat .l{font-size:10px;color:var(--muted);text-transform:uppercase;letter-spacing:.4px}
  .ls-item.cov-zero .ls-stat .n{color:#FF9F7E}
  .ls-item.cov-low  .ls-stat .n{color:#FFC773}
  .ls-item.cov-mid  .ls-stat .n{color:#F4DC6E}
  .ls-item.cov-high .ls-stat .n{color:#7EE0BE}

  /* Infrastructure dashboard */
  .infra-wrap{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:14px;margin-top:8px}
  .infra-cat{background:var(--panel-2);border:1px solid var(--border);border-radius:10px;padding:10px 12px}
  .infra-cat h3{margin:0 0 8px;font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.6px;font-weight:600;display:flex;align-items:center;gap:6px}
  .infra-cat h3 .ic{font-size:13px}
  .infra-cards{display:flex;flex-direction:column;gap:6px}
  .infra-card{display:grid;grid-template-columns:30px 1fr auto;gap:8px;align-items:center;padding:10px 12px;border:1px solid var(--border);border-radius:8px;background:var(--panel);cursor:pointer;user-select:none;position:relative;transition:.12s}
  .infra-card:hover{border-color:var(--accent)}
  .infra-card.on{border-color:var(--accent-2);background:linear-gradient(180deg,rgba(44,143,203,.12),rgba(44,143,203,.04))}
  .infra-card.on::after{content:'✓';position:absolute;top:6px;right:6px;font-size:10px;color:#fff;background:var(--accent-2);width:14px;height:14px;border-radius:50%;display:flex;align-items:center;justify-content:center;line-height:1}
  .infra-card .icon{font-size:22px;text-align:center;line-height:1}
  .infra-card .body{min-width:0}
  .infra-card .title{font-weight:600;font-size:13px;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .infra-card .note{font-size:11px;color:var(--muted);margin-top:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .infra-card .stat{display:flex;flex-direction:column;align-items:flex-end;gap:2px;text-align:right;flex-shrink:0}
  .infra-card .stat .n{font-weight:700;font-size:15px;color:var(--text);font-variant-numeric:tabular-nums}
  .infra-card .stat .l{font-size:10px;color:var(--muted);text-transform:uppercase;letter-spacing:.5px}
  .infra-card .bar{position:absolute;left:0;bottom:0;height:3px;background:var(--accent-2);transition:width .25s}
  .infra-card.cov-none .bar{background:var(--crit)}
  .infra-card.cov-low  .bar{background:var(--high)}
  .infra-card.cov-mid  .bar{background:var(--med)}
  .infra-card.cov-high .bar{background:var(--ok)}
  .infra-card.gap{border-style:dashed}
  .infra-card.gap .icon{filter:saturate(1.2)}
  .infra-card.gap .stat .n{color:var(--high)}
  .infra-card .pot{font-size:10.5px;color:var(--muted);margin-top:2px}
  .infra-card .pot strong{color:var(--high)}
  .infra-card.planned{border-color:var(--crit);border-style:dashed;background:linear-gradient(180deg,rgba(255,107,71,.07),rgba(255,107,71,.02))}
  .infra-card.planned .stat .n{color:var(--crit)}
  .infra-card.planned .stat .l{color:#FF9F7E}
  .infra-card.planned.on{border-style:solid;background:linear-gradient(180deg,rgba(255,107,71,.18),rgba(255,107,71,.06))}
  .infra-card.planned.on::after{background:var(--crit)}
  .infra-card.planned .bar{background:var(--crit) !important;opacity:.55}
  .infra-card.planned .pot{color:#FF9F7E}
  .infra-card.planned .planned-tag{display:inline-block;font-size:9.5px;letter-spacing:.5px;color:#fff;background:var(--crit);padding:1px 6px;border-radius:8px;margin-left:6px;text-transform:uppercase;font-weight:600;vertical-align:middle}
  .cov-card .breakdown{margin-top:6px;display:flex;gap:8px;font-size:11px}
  .cov-card .breakdown .live{color:var(--ok)}
  .cov-card .breakdown .potential{color:#FF9F7E}

  details.es{margin-top:8px}
  details.es summary{font-size:12px;color:var(--muted);cursor:pointer;user-select:none;padding:3px 0}
  details.es[open] summary{margin-bottom:6px}

  @media (max-width:780px){
    .detail-inner{grid-template-columns:1fr}
    thead th.col-dates,tbody td.col-dates{display:none}
  }

  /* ==== Print / PDF export ==== */
  .print-only{display:none}
  @media print{
    @page{size:A4 portrait;margin:14mm}
    body{background:#fff !important;color:#0b0d12 !important;font-size:10pt}
    a{color:#1f4ea3 !important}
    .topnav,.search,.scope,.toolbar,.pager,.filters .clear,.btn,.clear,
    #etChips,#esChips,details.es,.picker .actions,header,.matrix-toolbar .toggle,
    .syntax-hint{display:none !important}
    section[hidden]{display:none !important}
    main{padding:0 !important}
    .picker{background:#fff !important;border:1px solid #cbd2dc !important;color:#0b0d12 !important;page-break-inside:avoid}
    .picker h2,.picker h2 .info{color:#525866 !important}
    .infra-card{background:#fff !important;color:#0b0d12 !important;border:1px solid #cbd2dc !important;page-break-inside:avoid}
    .infra-card .title,.infra-card .note,.infra-card .pot{color:#0b0d12 !important}
    .infra-card.on{background:#eff4ff !important;border-color:#5b8cff !important}
    .infra-card.planned{border-color:#d63031 !important;border-style:dashed !important;background:#fff6f6 !important}
    .infra-card.planned.on{background:#ffe8e8 !important}
    .infra-card.planned .stat .n{color:#d63031 !important}
    .cov-card{background:#fff !important;color:#0b0d12 !important;border:1px solid #cbd2dc !important;page-break-inside:avoid}
    .cov-card .v,.cov-card .k,.cov-card .sub{color:#0b0d12 !important}
    .matrix-wrap{break-inside:avoid;border:1px solid #cbd2dc;overflow:visible !important;background:#fff !important}
    .matrix{min-width:0 !important;display:grid !important;grid-template-columns:repeat(7,minmax(0,1fr)) !important}
    .mat-col{border-right:1px solid #cbd2dc;page-break-inside:avoid}
    .mat-head{background:#f6f8fb !important;border-bottom:1px solid #cbd2dc !important;color:#0b0d12 !important}
    .mat-head .tac,.mat-head .name,.mat-head .nums{color:#0b0d12 !important}
    .tcell{font-size:8.5pt !important;color:#0b0d12 !important;background:#f6f8fb !important;-webkit-print-color-adjust:exact;print-color-adjust:exact}
    .tcell.h2{background:#cbd9ee !important}
    .tcell.h3{background:#9bb6e0 !important;color:#0b0d12 !important}
    .tcell.h4{background:#6790d2 !important;color:#fff !important}
    .tcell.h5{background:#3786cf !important;color:#fff !important}
    .tcell.gap-zero{background:#ffd6d6 !important;color:#751515 !important;border:1px dashed #d63031 !important}
    .tcell.gap-low{background:#ffe1c0 !important;color:#5d3000 !important}
    .tcell.gap-mid{background:#fff3c0 !important;color:#5d4500 !important}
    .tcell.gap-good{background:#cfeede !important;color:#13524a !important}
    .tcell .gap{background:#ffd6d6 !important;color:#751515 !important;font-weight:700}
    .ls-item,.ls-item .ls-name,.ls-item .ls-types{background:#fff !important;color:#0b0d12 !important;border:1px solid #cbd2dc !important}
    table{background:#fff !important;border:1px solid #cbd2dc !important}
    thead th{background:#f6f8fb !important;color:#0b0d12 !important;border-bottom:1px solid #cbd2dc !important}
    tbody td{background:#fff !important;color:#0b0d12 !important;border-bottom:1px solid #e5e7ec !important}
    .pill{border-color:#cbd2dc !important}
    .print-only{display:block !important}
    .print-header{display:flex !important;align-items:center;justify-content:space-between;border-bottom:3px solid #00a36c;padding:0 0 10px;margin:0 0 12px}
    .print-header .brand{display:flex;align-items:center;gap:10px}
    .print-header .logo{width:36px;height:36px;border-radius:8px;background:#00a36c;color:#fff;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:20px;letter-spacing:-0.5px}
    .print-header .title{font-size:16pt;font-weight:700;color:#0b0d12;margin:0;line-height:1.1}
    .print-header .sub{font-size:9pt;color:#525866;margin-top:2px}
    .print-header .meta{text-align:right;font-size:9pt;color:#525866}
    .print-header .meta strong{color:#0b0d12}
    .print-summary{margin:0 0 14px;padding:10px 12px;border:1px solid #cbd2dc;border-radius:6px;background:#f6f8fb;font-size:9.5pt;page-break-inside:avoid}
    .print-summary h3{margin:0 0 6px;font-size:10pt;color:#525866;text-transform:uppercase;letter-spacing:.5px}
    .print-summary .row{display:flex;flex-wrap:wrap;gap:14px;color:#0b0d12}
    .print-footer{position:fixed;bottom:6mm;left:0;right:0;text-align:center;font-size:8pt;color:#9aa3b2}
  }
  @media screen{.print-only{display:none !important}}

  /* CSV export modal */
  .modal-bg{position:fixed;inset:0;background:rgba(0,0,0,.55);z-index:100;backdrop-filter:blur(2px)}
  .modal-card{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);
    background:var(--panel);border:1px solid var(--border);border-radius:12px;
    width:620px;max-width:92vw;max-height:90vh;overflow:hidden;display:flex;flex-direction:column;
    z-index:101;box-shadow:0 12px 40px rgba(0,0,0,.6)}
  .modal-card .head{padding:14px 18px;border-bottom:1px solid var(--border)}
  .modal-card h2{font-size:15px;margin:0 0 4px;color:var(--text);font-weight:600}
  .modal-card .sub{font-size:12.5px;color:var(--muted);margin:0}
  .modal-card .body{padding:14px 18px;overflow-y:auto;flex:1}
  .modal-card .actions{padding:12px 18px;border-top:1px solid var(--border);display:flex;gap:8px;align-items:center}
  .modal-card .actions .grow{flex:1}
  .export-fields{display:grid;grid-template-columns:1fr 1fr;gap:6px}
  @media (max-width:600px){.export-fields{grid-template-columns:1fr}}
  .export-field{display:flex;align-items:center;gap:8px;padding:7px 10px;
    background:var(--panel-2);border:1px solid var(--border);border-radius:6px;
    font-size:12.5px;color:var(--text);cursor:pointer;user-select:none}
  .export-field input{margin:0;cursor:pointer}
  .export-field:hover{border-color:var(--accent)}
  .btn.primary{background:var(--accent-2);border-color:var(--accent-2);color:#fff}
  .btn.primary:hover{background:#7aa2ff;border-color:#7aa2ff}
  .btn.primary:disabled{opacity:.4;cursor:not-allowed}
  .btn.danger{color:#FF9F7E;border-color:rgba(255,107,71,.3)}


  /* ==== Sources view ==== */
  .sources-layout{display:grid;grid-template-columns:280px 1fr;gap:14px;align-items:flex-start}
  .sources-side{position:sticky;top:80px;background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:8px;max-height:calc(100vh - 110px);overflow-y:auto}
  .sources-side .group{margin-bottom:8px}
  .sources-side .group-h{font-size:10.5px;color:var(--muted);text-transform:uppercase;letter-spacing:.6px;font-weight:600;padding:6px 8px}
  .src-link{display:flex;align-items:center;gap:8px;padding:7px 9px;border-radius:6px;color:var(--text);font-size:12.5px;cursor:pointer;border:1px solid transparent}
  .src-link:hover{background:var(--panel-2);border-color:var(--border)}
  .src-link.on{background:rgba(44,143,203,.18);border-color:var(--accent-2);color:#fff}
  .src-link .ic{font-size:14px;flex-shrink:0;width:18px;text-align:center}
  .src-link .nm{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .src-link .badge{font-size:9.5px;padding:1px 6px;border-radius:8px;flex-shrink:0;letter-spacing:.4px;font-weight:600;text-transform:uppercase}
  .src-link .badge.live{background:rgba(38,194,145,.20);color:#7EE0BE}
  .src-link .badge.planned{background:rgba(255,107,71,.20);color:#FF9F7E}
  .src-link .badge.gap{background:rgba(255,183,74,.20);color:#FFC773}

  .src-detail{background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:18px 20px}
  .src-detail .head{display:flex;align-items:flex-start;gap:14px;border-bottom:1px solid var(--border);padding-bottom:14px;margin-bottom:14px}
  .src-detail .head .icon{font-size:36px;line-height:1;flex-shrink:0}
  .src-detail .head .title{flex:1}
  .src-detail .head h2{margin:0 0 4px;font-size:20px;color:var(--text);font-weight:700}
  .src-detail .head .cat{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.6px;display:flex;gap:8px;align-items:center;flex-wrap:wrap}
  .src-detail .head .cat .badge{font-size:10px;padding:2px 7px;border-radius:8px;letter-spacing:.4px;font-weight:600;text-transform:uppercase}
  .src-detail .head .cat .badge.live{background:rgba(38,194,145,.20);color:#7EE0BE}
  .src-detail .head .cat .badge.planned{background:rgba(255,107,71,.20);color:#FF9F7E}
  .src-detail .head .cat .badge.gap{background:rgba(255,183,74,.20);color:#FFC773}
  .src-detail .head .actions{margin-left:auto;display:flex;gap:8px;flex-wrap:wrap}
  .src-detail h3{font-size:12px;color:var(--muted);text-transform:uppercase;letter-spacing:.6px;margin:18px 0 8px;font-weight:600}
  .src-detail h3:first-child{margin-top:0}
  .src-detail p{color:#d6dae3;line-height:1.55;margin:0 0 8px;user-select:text}
  .src-detail .stat-row{display:flex;gap:14px;flex-wrap:wrap;margin:8px 0 4px}
  .src-detail .stat-row .stat-pill{background:var(--panel-2);border:1px solid var(--border);border-radius:8px;padding:8px 12px}
  .src-detail .stat-row .stat-pill .k{font-size:10.5px;color:var(--muted);text-transform:uppercase;letter-spacing:.5px}
  .src-detail .stat-row .stat-pill .v{font-size:18px;font-weight:700;color:var(--text);margin-top:1px}
  .tac-bars{display:flex;flex-direction:column;gap:6px}
  .tac-bar{display:grid;grid-template-columns:120px 1fr 50px;gap:10px;align-items:center;font-size:12.5px}
  .tac-bar .nm{color:var(--text)}
  .tac-bar .bar{height:6px;background:#0c0f15;border-radius:3px;overflow:hidden}
  .tac-bar .bar > div{height:100%;background:linear-gradient(90deg,var(--accent-2),#a0c4ff)}
  .tac-bar .ct{color:var(--muted);text-align:right;font-variant-numeric:tabular-nums}
  .field-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:6px}
  .field-grid .field{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11.5px;background:var(--panel-2);border:1px solid var(--border);border-radius:6px;padding:5px 9px;color:#cbd2dc;display:flex;align-items:center;justify-content:space-between;gap:8px;user-select:text}
  .field-grid .field .ct{font-size:10px;color:var(--muted);background:#10131a;border-radius:6px;padding:0 5px;font-family:inherit}
  .toprules-list{display:flex;flex-direction:column;gap:6px}
  .toprules-list .tr-row{display:grid;grid-template-columns:auto 1fr auto;gap:10px;align-items:center;padding:7px 10px;background:var(--panel-2);border:1px solid var(--border);border-radius:6px;font-size:12.5px}
  .toprules-list .tr-row .pill{flex-shrink:0}
  .toprules-list .tr-row .nm{color:var(--text);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;user-select:text}
  .toprules-list .tr-row .open{color:var(--accent);font-size:11px;text-decoration:none}
  .toprules-list .tr-row .open:hover{text-decoration:underline}
  .src-empty{text-align:center;padding:60px 20px;color:var(--muted)}
  @media (max-width:900px){.sources-layout{grid-template-columns:1fr}.sources-side{position:static;max-height:none}}

  /* Status icons (CB-safe redundancy: never rely on colour alone) */
  .badge.live::before     { content:"\2713\00a0"; }       /* ✓ */
  .badge.planned::before  { content:"\23F3\00a0"; }       /* ⏳ */
  .badge.gap::before      { content:"\26A0\00a0"; }       /* ⚠ */
  /* Coverage % indicators — text icons for redundancy */
  .pct.good::after { content:"\00a0\2713"; }
  .pct.zero::after { content:"\00a0\2715"; }
  .pct.low::after  { content:"\00a0\26A0"; }
  /* Source breakdown rows — pattern + icon for gap/planned */
  .atk-src-row.gap     .nm::before { content:"\26A0\00a0"; color:var(--st-bad); }
  .atk-src-row.planned .nm::before { content:"\23F3\00a0"; color:var(--st-warn); }
  /* Severity hint cards — leading symbol */
  .src-detail .hint-card.crit .hk::before { content:"\26A0\00a0"; }
  .src-detail .hint-card.warn .hk::before { content:"\1F6C8\00a0"; }
  /* Attack-overlay matrix cells — leading icon for clarity (small but clear) */
  .tcell.atk-attacked-cov .lbl::before { content:"\2713\00a0"; opacity:.85; font-weight:700; }
  .tcell.atk-attacked-gap .lbl::before { content:"\26A0\00a0"; opacity:.95; font-weight:700; }
  /* Trends tab */
  .trends-toolbar{display:flex;gap:8px;align-items:center;margin:6px 0 12px;flex-wrap:wrap}
  .trends-chart-wrap{background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:12px;margin-bottom:14px}
  .trends-chart-wrap svg{display:block;width:100%;height:300px;overflow:visible}
  .trends-chart-wrap .legend{display:flex;gap:14px;flex-wrap:wrap;margin-top:8px;font-size:11.5px;color:var(--muted)}
  .trends-chart-wrap .legend label{display:inline-flex;gap:6px;align-items:center;cursor:pointer;user-select:none}
  .trends-chart-wrap .legend label input{accent-color:var(--accent)}
  .trends-chart-wrap .legend .sw{width:14px;height:14px;border-radius:3px;display:inline-block}
  .trends-chart-wrap .empty{padding:40px;text-align:center;color:var(--muted)}
  .trends-table-wrap table{width:100%;border-collapse:collapse;font-size:12.5px}
  .trends-table-wrap th{text-align:left;padding:8px 10px;background:var(--panel-2);color:var(--muted);font-weight:600;text-transform:uppercase;font-size:11px;letter-spacing:.5px;border-bottom:1px solid var(--border)}
  .trends-table-wrap td{padding:8px 10px;border-bottom:1px solid var(--border);color:var(--text);vertical-align:top}
  .trends-table-wrap tr:hover td{background:rgba(255,255,255,.02)}
  .trends-table-wrap .ts{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11.5px;color:var(--muted);white-space:nowrap}
  .trends-table-wrap .num{font-variant-numeric:tabular-nums}
  .trends-table-wrap .delta-up{color:var(--st-good)}
  .trends-table-wrap .delta-down{color:var(--st-bad)}
  .trends-table-wrap .delta-flat{color:var(--muted)}
  .trends-table-wrap .scope{font-size:11px;color:var(--muted)}
  .trends-table-wrap .row-actions{display:flex;gap:4px}
  .trends-table-wrap .row-actions button{font-size:11px;padding:3px 8px;border-radius:4px;background:transparent;border:1px solid var(--border);color:var(--muted);cursor:pointer}
  .trends-table-wrap .row-actions button:hover{border-color:var(--st-bad);color:var(--st-bad)}
  .toast{position:fixed;bottom:20px;right:20px;background:var(--panel);border:1px solid var(--accent);color:var(--text);padding:10px 16px;border-radius:8px;font-size:13px;box-shadow:0 4px 24px rgba(0,0,0,.4);z-index:1000;animation:toastIn .25s ease-out}
  .toast.ok{border-color:var(--st-good)}
  .toast.warn{border-color:var(--st-warn)}
  .toast.err{border-color:var(--st-bad)}
  @keyframes toastIn{from{transform:translateY(20px);opacity:0}to{transform:translateY(0);opacity:1}}
    /* Help / README tab */
  .help-layout{display:flex;gap:24px;align-items:flex-start;padding:6px 4px}
  .help-toc{position:sticky;top:60px;width:260px;flex-shrink:0;background:var(--panel-2);border:1px solid var(--border);border-radius:10px;padding:12px 14px;max-height:calc(100vh - 80px);overflow-y:auto;font-size:12.5px}
  .help-toc h3{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.6px;margin:0 0 8px;font-weight:600}
  .help-toc .toc{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:3px}
  .help-toc .toc a{display:block;color:var(--text);text-decoration:none;padding:4px 6px;border-radius:5px;line-height:1.35}
  .help-toc .toc a:hover{background:rgba(86,180,233,.12);color:var(--accent);text-decoration:none}
  .help-toc .toc a.active{background:var(--accent-2);color:#fff;font-weight:600}
  .help-toc .toc > li.lv2 > a{font-weight:600;font-size:12.5px}
  .help-toc .toc .sub{list-style:none;padding:0 0 0 10px;margin:2px 0 6px;border-left:1px solid var(--border);display:flex;flex-direction:column;gap:1px}
  .help-toc .toc .sub a{font-size:12px;color:var(--muted)}
  .help-toc .toc .sub a:hover{color:var(--accent)}
  .help-content{flex:1;min-width:0;max-width:980px;line-height:1.65;color:var(--text);font-size:14px;padding-bottom:60px}
  .help-content h1{font-size:24px;margin:0 0 16px;color:var(--text);font-weight:700;border-bottom:1px solid var(--border);padding-bottom:10px;scroll-margin-top:60px}
  .help-content h2{font-size:18px;margin:28px 0 10px;color:var(--accent);font-weight:700;scroll-margin-top:60px}
  .help-content h3{font-size:15px;margin:22px 0 8px;color:var(--text);font-weight:600;scroll-margin-top:60px}
  .help-content h4{font-size:13px;margin:16px 0 6px;color:var(--muted);font-weight:700;text-transform:uppercase;letter-spacing:.5px;scroll-margin-top:60px}
  .help-content p{margin:8px 0}
  .help-content a{color:var(--accent);text-decoration:none;border-bottom:1px dotted var(--accent)}
  .help-content a:hover{color:var(--text);border-bottom-color:var(--text);text-decoration:none}
  .help-content ul, .help-content ol{margin:8px 0;padding-left:24px}
  .help-content li{margin:3px 0}
  .help-content li ul, .help-content li ol{margin:3px 0}
  .help-content strong{color:#fff;font-weight:600}
  .help-content em{color:var(--muted);font-style:italic}
  .help-content hr{border:none;border-top:1px solid var(--border);margin:24px 0}
  .help-content code{background:#0c0e13;border:1px solid var(--border);padding:1px 6px;border-radius:4px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12.5px;color:#a8c2ff}
  .help-content pre{background:#0c0e13;border:1px solid var(--border);border-radius:8px;padding:12px 14px;overflow-x:auto;margin:10px 0;font-size:12.5px;line-height:1.55}
  .help-content pre code{background:transparent;border:none;padding:0;color:var(--text);font-size:12.5px}
  .help-content table{border-collapse:collapse;width:100%;margin:14px 0;font-size:12.5px;display:block;overflow-x:auto}
  .help-content table thead{background:var(--panel-2)}
  .help-content table th{text-align:left;padding:8px 10px;color:var(--muted);font-weight:600;text-transform:uppercase;letter-spacing:.4px;font-size:11px;border-bottom:1px solid var(--border);white-space:nowrap}
  .help-content table td{padding:8px 10px;border-bottom:1px solid var(--border);vertical-align:top;color:var(--text)}
  .help-content table td:first-child{font-weight:600;color:var(--text)}
  .help-content table tr:hover td{background:rgba(255,255,255,.02)}
  .help-content blockquote{border-left:3px solid var(--accent);background:rgba(86,180,233,.05);padding:8px 14px;margin:12px 0;color:var(--muted);font-style:italic;border-radius:0 6px 6px 0}
  @media (max-width: 880px){
    .help-layout{flex-direction:column}
    .help-toc{position:static;width:100%;max-height:none}
  }
  /* Log Analysis tab */
  .log-upload{border:2px dashed var(--border);border-radius:12px;padding:30px 20px;background:var(--panel-2);margin:6px 0 12px;transition:border-color .15s,background .15s;cursor:pointer;position:relative;min-height:120px;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:8px;text-align:center}
  .log-upload:hover{border-color:var(--accent)}
  .log-upload.drag-over{border-color:var(--accent-2);background:rgba(86,180,233,.08)}
  .log-upload .icon{font-size:36px;line-height:1}
  .log-upload .title{font-size:14px;font-weight:600;color:var(--text)}
  .log-upload .title a{color:var(--accent);text-decoration:underline}
  .log-upload .sub{font-size:11.5px;color:var(--muted);max-width:540px}
  .log-drop-busy{display:flex;align-items:center;gap:14px}
  .log-drop-busy .spinner{width:24px;height:24px;border:3px solid var(--border);border-top-color:var(--accent);border-radius:50%;animation:spin .9s linear infinite}
  @keyframes spin{to{transform:rotate(360deg)}}
  .log-drop-loaded{display:flex;align-items:center;gap:14px;flex-direction:row;justify-content:center;text-align:left}
  .log-drop-loaded .icon{font-size:32px}
  .log-drop-loaded .loaded-meta{flex:1;min-width:0}
  .log-drop-loaded .fn{font-size:13.5px;font-weight:600;color:var(--text);word-break:break-all}
  .log-drop-loaded .sub{font-size:11.5px;color:var(--muted);margin-top:2px}
  .log-paste-wrap{background:var(--panel);border:1px solid var(--border);border-radius:8px;padding:8px 12px;margin-bottom:14px;font-size:12.5px}
  .log-paste-wrap summary{cursor:pointer;color:var(--muted);user-select:none;padding:4px 0}
  .log-paste-wrap summary:hover{color:var(--text)}
  .log-paste-wrap[open] summary{margin-bottom:8px}
  #logPasteArea{width:100%;min-height:140px;background:#0c0e13;border:1px solid var(--border);border-radius:6px;color:var(--text);padding:10px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12px;line-height:1.5;resize:vertical;outline:none}
  #logPasteArea:focus{border-color:var(--accent)}
  .log-paste-actions{display:flex;gap:8px;margin-top:8px}
  /* Event-type breakdown */
  #logEventTypeBreakdown{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:8px;margin-bottom:14px}
  .log-et-row{display:flex;align-items:center;gap:10px;padding:9px 12px;background:var(--panel);border:1px solid var(--border);border-radius:8px;overflow:hidden;position:relative}
  .log-et-row.zero-rules{border-color:rgba(255,107,71,.45);background:rgba(255,107,71,.05)}
  .log-et-row .et{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12px;color:#a8c2ff;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .log-et-row .count{font-size:13px;font-weight:600;color:var(--text);min-width:50px;text-align:right;font-variant-numeric:tabular-nums}
  .log-et-row .rules{font-size:11px;color:var(--muted);min-width:64px;text-align:right;white-space:nowrap}
  .log-et-row .bar{position:absolute;left:0;bottom:0;height:2px;background:var(--accent);opacity:.6}
  .log-et-row.zero-rules .bar{background:var(--st-bad)}
  /* Matched rules */
  #logMatchedRules table{width:100%;border-collapse:collapse;font-size:12.5px;background:var(--panel);border:1px solid var(--border);border-radius:8px;overflow:hidden}
  #logMatchedRules th{background:var(--panel-2);color:var(--muted);padding:8px 10px;text-align:left;font-weight:600;text-transform:uppercase;font-size:11px;letter-spacing:.5px;border-bottom:1px solid var(--border)}
  #logMatchedRules td{padding:8px 10px;border-bottom:1px solid var(--border);vertical-align:top}
  #logMatchedRules tr:hover td{background:rgba(255,255,255,.02)}
  #logMatchedRules tr:last-child td{border-bottom:none}
  #logMatchedRules .empty{padding:18px;text-align:center;color:var(--muted)}
  /* MITRE matrix re-uses .matrix styles from Coverage tab */
  #logMitreMatrix{min-width:1100px}
  /* Field gaps */
  #logFieldGaps{display:grid;grid-template-columns:repeat(auto-fill,minmax(380px,1fr));gap:8px;margin-bottom:14px}
  .log-gap-card{background:var(--panel);border:1px solid var(--border);border-radius:8px;padding:10px 12px}
  .log-gap-card .gh{font-size:12.5px;font-weight:600;color:var(--text);margin-bottom:4px;display:flex;align-items:center;gap:6px}
  .log-gap-card .gh .pill{font-size:9.5px;padding:1px 5px}
  .log-gap-card .gh .ext{color:var(--muted);text-decoration:none;font-size:11px;margin-left:auto;opacity:.7}
  .log-gap-card .gh .ext:hover{opacity:1}
  .log-gap-card .gd{font-size:11.5px;color:var(--muted);line-height:1.4;margin-bottom:5px}
  .log-gap-card .missing{font-size:11.5px;color:var(--text)}
  .log-gap-card .missing code{background:#0c0e13;border:1px solid var(--border);padding:1px 5px;border-radius:3px;font-size:11px;color:#FFC773;margin:0 2px 2px 0;display:inline-block}
  .log-gap-card.severe{border-color:rgba(255,107,71,.4);background:rgba(255,107,71,.04)}
  .log-gap-card.partial{border-color:rgba(255,183,74,.4);background:rgba(255,183,74,.04)}
  /* External-filter banner (Rules tab — when filter pushed from Log Analysis) */
  .ext-filter-banner{display:flex;align-items:center;gap:10px;padding:10px 14px;background:rgba(86,180,233,.08);border-bottom:1px solid rgba(86,180,233,.4);font-size:12.5px;color:var(--text)}
  .ext-filter-banner .efb-label{flex:1}
  .ext-filter-banner .efb-label strong{color:var(--accent)}
  .ext-filter-banner button{font-size:11.5px;padding:5px 10px;background:var(--panel-2);border:1px solid var(--border);border-radius:5px;color:var(--text);cursor:pointer}
  .ext-filter-banner button:hover{border-color:var(--accent);color:var(--accent)}
  /* Diagnostic banner — appears after analysis runs, summarising what happened */
  .log-diag-banner{padding:10px 14px;border-radius:8px;margin:0 0 12px;font-size:12.5px;line-height:1.5}
  .log-diag-banner.ok{background:rgba(38,194,145,.08);border:1px solid rgba(38,194,145,.4);color:var(--text)}
  .log-diag-banner.err{background:rgba(255,107,71,.10);border:1px solid rgba(255,107,71,.55);color:var(--text)}
  .log-diag-banner h4{margin:0 0 4px;font-size:12px;text-transform:uppercase;letter-spacing:.5px;color:#7EE0BE}
  .log-diag-banner.err h4{color:#FF6B47}
  .log-diag-banner ul{margin:4px 0;padding-left:22px}
  .log-diag-banner li{margin:2px 0}
  .log-diag-banner code{background:#0c0e13;border:1px solid var(--border);padding:1px 5px;border-radius:3px;font-size:11.5px;color:#a8c2ff}
  .log-diag-banner pre{background:#0c0e13;border:1px solid var(--border);padding:8px;border-radius:4px;font-size:11px;overflow-x:auto;max-height:200px;color:#FFC773;margin:6px 0}
  /* Log structure analysis debug panel */
  .log-struct-debug{margin:8px 0 12px;background:#0c0e13;border:1px solid var(--border);border-radius:8px;padding:8px 12px;font-size:12.5px}
  .log-struct-debug > summary{cursor:pointer;color:var(--accent);user-select:none;padding:4px 0;font-weight:500}
  .log-struct-debug > summary:hover{color:var(--text)}
  .log-struct-debug[open] > summary{margin-bottom:8px;color:var(--text)}
  .log-struct-debug h4{margin:10px 0 4px;font-size:12px;color:var(--text);text-transform:uppercase;letter-spacing:.4px;font-weight:700}
  .log-struct-debug .lsd-note{font-size:11px;color:var(--muted);margin:2px 0 6px;line-height:1.4}
  .log-struct-debug .lsd-fields{display:flex;flex-wrap:wrap;gap:4px;max-height:180px;overflow-y:auto;padding:4px;background:var(--panel-2);border-radius:4px;border:1px solid var(--border)}
  .log-struct-debug .lsd-fields code{background:#1f232c;border:1px solid var(--border);padding:2px 6px;border-radius:3px;font-size:11px;color:#a8c2ff;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}
  .log-struct-debug .lsd-cat-table{width:100%;border-collapse:collapse;font-size:11.5px;margin:4px 0 6px;background:var(--panel-2);border:1px solid var(--border);border-radius:4px;overflow:hidden}
  .log-struct-debug .lsd-cat-table th{text-align:left;padding:6px 8px;background:#1f232c;color:var(--muted);text-transform:uppercase;font-size:10.5px;letter-spacing:.4px;border-bottom:1px solid var(--border);font-weight:600}
  .log-struct-debug .lsd-cat-table td{padding:6px 8px;border-bottom:1px solid var(--border);vertical-align:top}
  .log-struct-debug .lsd-cat-table td.num{font-variant-numeric:tabular-nums;font-weight:600}
  .log-struct-debug .lsd-cat-table tr.lsd-cat-match td:first-child{color:#7EE0BE}
  .log-struct-debug .lsd-cat-table tr.lsd-cat-match td.num{color:#7EE0BE}
  .log-struct-debug .lsd-cat-table tr.lsd-cat-no td{opacity:.6}
  .log-struct-debug .lsd-cat-table code{background:#0c0e13;border:1px solid var(--border);padding:1px 4px;border-radius:3px;font-size:10.5px}
  /* Log-type banner */
  .log-type-banner{display:flex;align-items:flex-start;gap:14px;padding:14px 16px;border-radius:10px;margin:0 0 14px;border:1px solid var(--border)}
  .log-type-banner.detected{background:rgba(86,180,233,.07);border-color:rgba(86,180,233,.4)}
  .log-type-banner.unknown{background:rgba(154,163,178,.07);border-color:var(--border)}
  .log-type-banner.category{background:rgba(255,183,74,.06);border-color:rgba(255,183,74,.35)}
  .parser-add-cov{margin:6px 0 10px;padding:8px 10px;background:rgba(86,180,233,.06);border:1px solid rgba(86,180,233,.35);border-radius:6px;display:flex;align-items:center;gap:10px;flex-wrap:wrap}
  .parser-add-cov .btn.primary{background:var(--accent-2);color:#fff;border-color:var(--accent-2);font-weight:600}
  .parser-add-cov .btn.primary:hover{filter:brightness(1.1)}
  .parser-add-cov-note{font-size:11px;color:var(--muted);flex:1;min-width:200px}
  .parser-add-cov-msg{font-size:12px;color:#7EE0BE}
  .log-type-banner .ltb-icon{font-size:24px;flex-shrink:0;line-height:1}
  .log-type-banner .ltb-body{flex:1;min-width:0}
  .log-type-banner .ltb-h{font-size:14px;font-weight:600;color:var(--text);margin-bottom:3px}
  .log-type-banner .ltb-conf{font-size:11px;color:var(--muted);font-weight:400;margin-left:6px}
  .log-type-banner .ltb-sub{font-size:11.5px;color:var(--muted);line-height:1.4}
  .log-type-banner code{background:#0c0e13;border:1px solid var(--border);padding:1px 5px;border-radius:3px;font-size:11px;color:#a8c2ff}
  /* Wide suggestion card (used for detected-log-type detailed breakdown) */
  .log-sug-card.wide{grid-column:1/-1}
  .log-sug-card .sd p{margin:6px 0}
  .log-sug-card .sd table.log-map{border-collapse:collapse;width:100%;font-size:11.5px;margin-top:6px;background:#0c0e13;border-radius:6px;overflow:hidden}
  .log-sug-card .sd table.log-map th{text-align:left;padding:6px 10px;color:var(--muted);text-transform:uppercase;font-size:10.5px;letter-spacing:.5px;background:var(--panel-2);border-bottom:1px solid var(--border);font-weight:600}
  .log-sug-card .sd table.log-map td{padding:6px 10px;border-bottom:1px solid var(--border);vertical-align:top}
  .log-sug-card .sd table.log-map tr:last-child td{border-bottom:none}
  .log-sug-card .sd .log-map-sample{margin-top:8px;padding:8px 10px;background:rgba(86,180,233,.06);border-left:3px solid var(--accent);border-radius:0 4px 4px 0;font-size:11.5px;color:var(--text)}
  .log-sug-card .sd table.log-map td.num{text-align:right;font-variant-numeric:tabular-nums;color:var(--text);font-weight:700}
  .rmap-card tr.rmap-missing td{background:rgba(255,107,71,.05)}
  .rmap-card tr.rmap-have td{background:rgba(38,194,145,.05)}
  .rmap-card tr.rmap-strong td{background:rgba(38,194,145,.05)}
  .rmap-card .rmap-field{background:none;border:none;padding:0;margin:0;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:inherit;color:#A8D7F1;cursor:pointer;text-decoration:underline dotted;text-underline-offset:2px}
  .rmap-card .rmap-field:hover{color:#7EE0BE}
  /* Field-usage modal */
  .fu-modal{position:fixed;inset:0;background:rgba(0,0,0,.62);display:flex;align-items:center;justify-content:center;z-index:1100;padding:24px}
  .fu-modal[hidden]{display:none}
  .fu-dialog{background:var(--panel);border:1px solid var(--border);border-radius:10px;max-width:920px;width:100%;max-height:88vh;display:flex;flex-direction:column;box-shadow:0 18px 60px rgba(0,0,0,.55)}
  .fu-head{display:flex;align-items:center;gap:10px;padding:13px 18px;border-bottom:1px solid var(--border);flex-wrap:wrap}
  .fu-head h2{margin:0;font-size:15px;color:var(--text)}
  .fu-head h2 code{font-size:13px;color:#A8D7F1}
  .fu-count{color:var(--muted);font-size:12px}
  .fu-search{margin-left:auto;flex:0 1 260px}
  .fu-search input{width:100%;background:#0c0e13;border:1px solid var(--border);border-radius:6px;color:var(--text);font-size:12px;padding:6px 9px;font-family:inherit}
  .fu-search input:focus{border-color:var(--accent);outline:none;box-shadow:0 0 0 2px rgba(86,180,233,.15)}
  .fu-close{background:none;border:none;color:var(--muted);font-size:22px;cursor:pointer;line-height:1;padding:0 4px}
  .fu-close:hover{color:var(--accent)}
  .fu-body{padding:12px 18px;overflow-y:auto}
  .fu-rule{border:1px solid var(--border);border-radius:8px;padding:10px 12px;margin-bottom:10px;background:var(--panel-2)}
  .fu-rule .fu-rh{display:flex;align-items:center;gap:8px;margin-bottom:5px}
  .fu-rule .fu-rh .nm{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text);font-weight:600}
  .fu-rule .fu-meta{font-size:11px;color:var(--muted);margin-bottom:6px}
  .fu-leql{margin:0;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11.5px;white-space:pre-wrap;word-break:break-word;background:var(--code-bg);border:1px solid var(--border);border-radius:6px;padding:8px 10px;color:var(--muted);line-height:1.55}
  .fu-leql .fu-field{background:rgba(86,180,233,.22);color:#A8D7F1;border-radius:3px;padding:0 2px;font-weight:700}
  .fu-leql .fu-op{color:#FFD58F}
  .fu-leql .fu-val{background:rgba(38,194,145,.18);color:#7EE0BE;border-radius:3px;padding:0 2px}
  .fu-empty{color:var(--muted);text-align:center;padding:18px}
  /* Confidence pill (in matched-rules table) */
  .log-conf{font-size:10px;padding:1px 6px;border-radius:999px;font-weight:600;letter-spacing:.3px;text-transform:uppercase;display:inline-block;white-space:nowrap}
  .log-conf.high{background:rgba(38,194,145,.20);color:#7EE0BE}
  .log-conf.med {background:rgba(86,180,233,.18);color:#9FCDF2}
  .log-conf.low {background:rgba(154,163,178,.18);color:var(--muted)}
  .log-conf::before{content:""}
  .log-conf.high::before{content:"\2713\00a0"}
  .log-conf.low::before{content:"\003F\00a0"}
  /* Reparse-match cards */
  #logReparseMatches{display:grid;grid-template-columns:repeat(auto-fill,minmax(420px,1fr));gap:8px;margin-bottom:14px}
  .log-rep-card{background:var(--panel);border:1px solid var(--border);border-radius:8px;padding:10px 12px;border-left:3px solid var(--st-warn)}
  .log-rep-card .rh{font-size:12.5px;font-weight:600;color:var(--text);margin-bottom:4px;display:flex;align-items:center;gap:6px}
  .log-rep-card .rh .ext{margin-left:auto;color:var(--muted);text-decoration:none;font-size:11px;opacity:.7}
  .log-rep-card .rh .ext:hover{opacity:1}
  .log-rep-card .rd{font-size:11.5px;color:var(--muted);line-height:1.4;margin-bottom:5px}
  .log-rep-card .rinfo{font-size:11.5px;color:var(--text);line-height:1.45}
  .log-rep-card .rinfo code{background:#0c0e13;border:1px solid var(--border);padding:1px 5px;border-radius:3px;font-size:11px;color:#FFC773}
  .log-rep-card .rinfo .needle{background:rgba(86,180,233,.16);color:#9FCDF2;padding:1px 5px;border-radius:3px;font-size:11px;margin:0 2px 2px 0;display:inline-block;font-family:ui-monospace,Menlo,Consolas,monospace}
  .log-rep-card .expects{color:#FFC773;font-weight:600}
  .log-rep-card .have{color:var(--muted)}
  /* Reparse-matches explainer */
  .reparse-explainer{background:#0c0e13;border:1px solid var(--border);border-radius:8px;padding:8px 12px;margin:6px 0 12px;font-size:12.5px;color:var(--text)}
  .reparse-explainer summary{cursor:pointer;color:var(--accent);font-weight:500;user-select:none;padding:4px 0}
  .reparse-explainer summary:hover{color:var(--text)}
  .reparse-explainer[open] summary{margin-bottom:6px;color:var(--text)}
  .reparse-explainer .rx-body p{margin:6px 0;line-height:1.5;color:var(--text)}
  .reparse-explainer .rx-body code{background:#1f232c;border:1px solid var(--border);padding:1px 5px;border-radius:3px;font-size:11.5px;color:#a8c2ff}
  .reparse-explainer .rx-body strong{color:var(--text)}
  .reparse-explainer .rx-body em{color:var(--muted)}
  /* "What does this mean?" expander for LEQL highlight legend */
  details.lq-help{margin:2px 0 8px;font-size:11.5px;color:var(--muted)}
  details.lq-help summary{cursor:pointer;color:var(--accent);user-select:none;padding:2px 0}
  details.lq-help summary:hover{color:var(--text)}
  details.lq-help[open] summary{margin-bottom:4px}
  details.lq-help ul{margin:6px 0 0;padding-left:20px;color:var(--text)}
  details.lq-help li{margin:4px 0;line-height:1.5}
  details.lq-help li strong{color:var(--text)}
  details.lq-help code{background:#1f232c;border:1px solid var(--border);padding:1px 5px;border-radius:3px;font-size:11px;color:#a8c2ff}
  /* Tier filter chips + tier badges in rule previews */
  .rule-tier-filters{display:flex;flex-wrap:wrap;gap:6px;margin:6px 0 12px;padding:8px 10px;background:var(--panel-2);border:1px solid var(--border);border-radius:8px}
  .chip.tier-chip{background:var(--panel);border:1px solid var(--border);color:var(--muted);font-size:11.5px;padding:5px 10px;border-radius:999px;cursor:pointer;display:inline-flex;align-items:center;gap:5px;user-select:none}
  .chip.tier-chip:hover{border-color:var(--accent);color:var(--text)}
  .chip.tier-chip.on{background:var(--accent-2);border-color:var(--accent-2);color:#fff}
  .chip.tier-chip .ct{font-size:10.5px;padding:1px 6px;border-radius:8px;background:rgba(0,0,0,.18)}
  .chip.tier-chip.on .ct{background:rgba(255,255,255,.18)}
  .tier-send-btn{font-size:11.5px;padding:5px 12px;background:var(--accent-2);border:1px solid var(--accent-2);color:#fff;border-radius:6px;cursor:pointer;font-weight:600}
  .tier-send-btn:hover{filter:brightness(1.1)}
  /* Rules-tab event_type chip group */
  .chipgroup-et .chip.et{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;padding:3px 8px}
  .chipgroup-et .chip.et.active{background:var(--accent-2);border-color:var(--accent-2);color:#fff}
  .chipgroup-et details.chipgroup-more{display:inline-block;margin-left:4px}
  .chipgroup-et details.chipgroup-more summary{cursor:pointer;color:var(--muted);font-size:11px;padding:2px 8px;border:1px dashed var(--border);border-radius:999px;background:var(--panel)}
  .chipgroup-et details.chipgroup-more summary:hover{color:var(--accent);border-color:var(--accent)}
  .chipgroup-et details.chipgroup-more[open] summary{margin-bottom:4px}
  .chipgroup-et .chipgroup-more-list{display:inline-flex;flex-wrap:wrap;gap:3px;margin-left:4px}
  .prp-badge.tier-just_et_change{background:rgba(38,194,145,.18);color:#7EE0BE;border:1px solid rgba(38,194,145,.45);font-size:10px;font-weight:600;padding:1px 7px;border-radius:10px;text-transform:none;letter-spacing:.2px;margin-left:4px;vertical-align:middle}
  .prp-badge.tier-mapping_change{background:rgba(255,183,74,.16);color:#FFC773;border:1px solid rgba(255,183,74,.45);font-size:10px;font-weight:600;padding:1px 7px;border-radius:10px;margin-left:4px;vertical-align:middle}
  .prp-badge.tier-new_mapping{background:rgba(255,107,71,.16);color:#FF9F7E;border:1px solid rgba(255,107,71,.45);font-size:10px;font-weight:600;padding:1px 7px;border-radius:10px;margin-left:4px;vertical-align:middle}
  .prp-badge.tier-subquery{background:rgba(204,121,167,.16);color:#E8B0D0;border:1px solid rgba(204,121,167,.45);font-size:10px;font-weight:600;padding:1px 7px;border-radius:10px;margin-left:4px;vertical-align:middle}
  /* Parser plan pagination */
  .parser-plan-pager{display:flex;align-items:center;gap:8px;padding:10px 4px;margin-top:8px;border-top:1px solid var(--border)}
  .parser-plan-pager button{font-size:11.5px;padding:5px 10px;background:var(--panel-2);border:1px solid var(--border);border-radius:6px;color:var(--text);cursor:pointer}
  .parser-plan-pager button:hover:not(:disabled){border-color:var(--accent);color:var(--accent)}
  .parser-plan-pager button:disabled{opacity:.4;cursor:not-allowed}
  .parser-plan-pager .info{font-size:11.5px;color:var(--muted);font-variant-numeric:tabular-nums}
  .parser-plan-pager .grow{flex:1}
  .parser-rule-list{display:block}
  /* "🔬 Analyze" button (small) — appears on rule detail panels */
  .r7-analyze-btn{margin-left:6px;font-size:11px;padding:3px 8px;background:rgba(204,121,167,.15);border:1px solid rgba(204,121,167,.45);border-radius:5px;color:#E8B0D0;cursor:pointer;font-weight:500;vertical-align:middle}
  .r7-analyze-btn:hover{background:rgba(204,121,167,.25);border-color:#CC79A7}

  /* Rule Analysis tab layout */
  .ran-empty{text-align:center;padding:48px 24px;color:var(--muted)}
  .ran-empty-icon{font-size:48px;margin-bottom:8px}
  .ran-empty h2{font-size:18px;color:var(--text);margin:0 0 12px}
  .ran-empty p{margin:6px 0;font-size:13px;color:var(--muted);max-width:600px;margin-left:auto;margin-right:auto}
  .ran-empty ul{list-style:none;padding:0;margin:8px auto;max-width:520px;text-align:left}
  .ran-empty ul li{padding:6px 12px;background:var(--panel-2);border:1px solid var(--border);border-radius:5px;margin:4px 0;font-size:12.5px;color:var(--text)}
  .ran-pushed-list{display:flex;flex-wrap:wrap;gap:6px;padding:8px 12px;background:var(--panel-2);border-bottom:1px solid var(--border)}
  .ran-pushed-list:empty{display:none}
  .ran-tab{display:inline-flex;align-items:center;gap:6px;padding:5px 10px;background:var(--panel);border:1px solid var(--border);border-radius:6px;color:var(--text);font-size:11.5px;cursor:pointer;max-width:280px}
  .ran-tab:hover{border-color:var(--accent)}
  .ran-tab.on{border-color:var(--accent-2);background:#1d2434}
  .ran-tab-name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .ran-tab-close{color:var(--muted);font-weight:700;padding:0 4px;border-radius:3px}
  .ran-tab-close:hover{background:rgba(255,107,71,.2);color:#FF6B47}
  .ran-grid{display:grid;grid-template-columns:minmax(0, 1fr) minmax(0, 1.4fr);gap:16px;padding:14px}
  @media (max-width: 1100px){ .ran-grid{grid-template-columns:1fr} }
  .ran-log-pane, .ran-rule-pane{background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:12px;min-width:0}
  .ran-pane-h{display:flex;align-items:baseline;gap:10px;border-bottom:1px solid var(--border);padding-bottom:6px;margin-bottom:10px;flex-wrap:wrap}
  .ran-pane-h h3{margin:0;font-size:14px;color:var(--text);font-weight:600;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .ran-pane-meta{font-size:11px;color:var(--muted)}
  .ran-pane-meta code{background:#0c0e13;border:1px solid var(--border);padding:1px 5px;border-radius:3px;font-size:10.5px;color:#a8c2ff}
  .ran-log-pretty{background:#0c0e13;border:1px solid var(--border);border-radius:6px;padding:10px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;line-height:1.55;overflow:auto;max-height:600px;color:var(--text);white-space:pre-wrap;word-break:break-word}
  /* Rule Analysis — editable log */
  .ran-log-toolbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:6px;font-size:11px}
  .r7-mini-btn{background:var(--panel-2);border:1px solid var(--border);color:var(--text);padding:3px 9px;border-radius:5px;font-size:11px;cursor:pointer}
  .r7-mini-btn:hover{border-color:var(--accent);color:var(--accent)}
  .ran-log-status{padding:2px 7px;border-radius:9px;font-size:10.5px;font-weight:600;border:1px solid var(--border);background:var(--panel-2)}
  .ran-log-status.ok{color:#7EE0BE;border-color:rgba(38,194,145,.55);background:rgba(38,194,145,.10)}
  .ran-log-status.bad{color:#FF9F7E;border-color:rgba(255,107,71,.55);background:rgba(255,107,71,.10)}
  .ran-log-status.muted{color:var(--muted)}
  .ran-log-diff{font-size:10.5px;color:var(--muted);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .ran-log-diff code{background:#0c0e13;border:1px solid var(--border);padding:0 4px;border-radius:3px;font-size:10px;color:#a8c2ff}
  .ran-diff-clean{color:#7EE0BE}
  .ran-diff-added{color:#7EE0BE}
  .ran-diff-removed{color:#FF9F7E}
  .ran-diff-modified{color:#FFC773}
  .ran-log-edit{width:100%;min-height:380px;max-height:680px;background:#0c0e13;border:1px solid var(--border);border-radius:6px;padding:10px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;line-height:1.55;color:var(--text);resize:vertical;outline:none;box-sizing:border-box}
  .ran-log-edit:focus{border-color:var(--accent);box-shadow:0 0 0 2px rgba(86,180,233,.15)}
  .ran-log-hint{font-size:11px;color:var(--muted);margin:6px 2px 0;line-height:1.4}
  /* Field-presence pills on the right pane */
  .ran-fp-summary{display:flex;flex-wrap:wrap;gap:6px;margin:6px 0 10px}
  .ran-fp-pill{display:inline-flex;align-items:center;gap:4px;font-size:11px;padding:3px 9px;border-radius:9px;border:1px solid var(--border);background:var(--panel-2);font-weight:600}
  .ran-fp-pill.rc-fp-in{background:rgba(38,194,145,.12);border-color:rgba(38,194,145,.45);color:#7EE0BE}
  .ran-fp-pill.rc-fp-parser{background:rgba(86,180,233,.12);border-color:rgba(86,180,233,.45);color:#A8D7F1}
  .ran-fp-pill.rc-fp-missing{background:rgba(255,107,71,.12);border-color:rgba(255,107,71,.45);color:#FF9F7E}
  .ran-fp-pill.rc-fp-opaque{background:rgba(204,121,167,.12);border-color:rgba(204,121,167,.45);color:#E8B0D0}
  .rc-fp{display:inline-block;width:14px;height:14px;line-height:14px;text-align:center;border-radius:50%;font-size:10px;font-weight:700}
  .rc-fp.rc-fp-in{background:rgba(38,194,145,.25);color:#7EE0BE}
  .rc-fp.rc-fp-parser{background:rgba(86,180,233,.25);color:#A8D7F1}
  .rc-fp.rc-fp-missing{background:rgba(255,107,71,.22);color:#FF9F7E}
  .rc-fp.rc-fp-opaque{background:rgba(204,121,167,.22);color:#E8B0D0}
  .rc-fp-cell{text-align:center;width:36px}
  /* Suggested parsed log */
  .ran-suggested{margin-top:14px;padding:10px;background:var(--panel-2);border:1px solid var(--border);border-radius:8px}
  .ran-suggested-h{display:flex;align-items:center;gap:10px;margin-bottom:4px}
  .ran-suggested-h h4{margin:0;font-size:12px;text-transform:uppercase;color:var(--muted);letter-spacing:.5px;font-weight:700;flex:1}
  .ran-suggested-meta{font-size:11px;color:var(--muted);margin:0 0 8px;line-height:1.4}
  .ran-suggested-meta code{background:#0c0e13;border:1px solid var(--border);padding:0 4px;border-radius:3px;font-size:10.5px;color:#a8c2ff}
  .ran-suggested-changes{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:8px;font-size:11px}
  .ran-suggested-changes:empty{display:none}
  .ran-sl-chip{display:inline-flex;align-items:center;gap:5px;padding:3px 9px;border-radius:9px;font-size:10.5px;border:1px solid var(--border);background:var(--panel)}
  .ran-sl-chip code{background:#0c0e13;border:1px solid var(--border);padding:0 4px;border-radius:3px;font-size:10px;color:#a8c2ff}
  .ran-sl-added{background:rgba(38,194,145,.10);border-color:rgba(38,194,145,.50);color:#7EE0BE}
  .ran-sl-changed{background:rgba(255,183,74,.10);border-color:rgba(255,183,74,.50);color:#FFC773}
  .ran-sl-clean{color:#7EE0BE;font-size:11px}
  .ran-sl-via{color:var(--muted);font-size:10px;margin-left:4px}
  .ran-suggested-pre{background:#0c0e13;border:1px solid var(--border);border-radius:6px;padding:10px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;line-height:1.55;overflow:auto;max-height:380px;color:var(--text);white-space:pre-wrap;word-break:break-word;margin:0}
  .ran-suggested-pre .ran-sl-changed{display:inline;background:rgba(255,183,74,.18);color:#FFD58F;padding:0 2px;border-radius:2px;border:none}
  /* Rename chip variant */
  .ran-sl-chip.ran-sl-renamed{background:rgba(155,93,229,.12);border-color:rgba(155,93,229,.50);color:#D7C4F4}
  .ran-sl-chip.ran-sl-renamed code{color:#cfb9ff}
  /* Dedicated renames table */
  .ran-suggested-renames:empty{display:none}
  .ran-suggested-renames{margin:8px 0 10px;padding:8px 10px;background:rgba(155,93,229,.06);border:1px solid rgba(155,93,229,.40);border-radius:6px}
  .ran-rename-h{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;margin-bottom:6px}
  .ran-rename-title{font-size:11px;font-weight:700;color:#D7C4F4;letter-spacing:.3px;text-transform:uppercase}
  .ran-rename-sub{font-size:11px;color:var(--muted)}
  .ran-rename-table{width:100%;border-collapse:collapse;font-size:11.5px;background:transparent}
  .ran-rename-table th{text-align:left;padding:4px 6px;color:var(--muted);font-size:10px;text-transform:uppercase;letter-spacing:.4px;font-weight:600;border-bottom:1px solid rgba(155,93,229,.25)}
  .ran-rename-table td{padding:4px 6px;border-bottom:1px solid rgba(155,93,229,.18);vertical-align:top}
  .ran-rename-table tr:last-child td{border-bottom:none}
  .ran-rename-table code.ran-raw{background:rgba(255,107,71,.10);border:1px solid rgba(255,107,71,.35);color:#FFB89A;padding:1px 5px;border-radius:3px;font-size:10.5px}
  .ran-rename-table code.ran-canon{background:rgba(38,194,145,.10);border:1px solid rgba(38,194,145,.45);color:#8AE5C2;padding:1px 5px;border-radius:3px;font-size:10.5px}
  .ran-rename-table code.ran-val{background:#0c0e13;border:1px solid var(--border);color:#a8c2ff;padding:1px 5px;border-radius:3px;font-size:10.5px;word-break:break-all}
  .ran-rename-table td.ran-arrow{color:#D7C4F4;font-weight:700;text-align:center;padding:0 4px}
  .ran-rename-note td{padding:2px 6px 6px;border-bottom:none}
  .ran-rename-note-text{font-size:10.5px;color:var(--muted);font-style:italic}
  .ran-rename-note-text code{background:#0c0e13;border:1px solid var(--border);padding:0 4px;border-radius:3px;font-size:10px;color:#a8c2ff}
  /* Rule category chips (rules table rows + detail panels + parser plan) */
  .rcat-row{display:flex;flex-wrap:wrap;gap:4px;margin-top:5px}
  .rcat-row:empty{display:none}
  .rcat-chip{display:inline-block;font-size:10px;line-height:1.4;padding:1px 7px;border-radius:9px;border:1px solid var(--border);background:var(--panel-2);color:var(--text);font-weight:600;white-space:nowrap}
  .rcat-chip-vendor{background:rgba(86,180,233,.10);border-color:rgba(86,180,233,.45);color:#A8D7F1}
  .rcat-chip-type{background:rgba(38,194,145,.10);border-color:rgba(38,194,145,.45);color:#7EE0BE}
  .rcat-chip-vendor::before{content:"\25C6 ";opacity:.7;font-size:8px;vertical-align:1px}
  .rcat-chip-type::before{content:"\25B8 ";opacity:.7}
  .rcat-chip-more{background:var(--panel-2);color:var(--muted);font-weight:500}
  /* Log-category chip bar on Log Analysis */
  .log-cat-bar{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin:10px 0 4px;padding:8px 10px;background:var(--panel-2);border:1px solid var(--border);border-radius:8px}
  .log-cat-label{font-size:11px;color:var(--muted);font-weight:700;text-transform:uppercase;letter-spacing:.4px;margin-right:4px}
  .log-cat-hint{font-size:11px;color:var(--muted);font-style:italic;margin-left:4px}
  .log-cat-chip{font-size:11px;padding:4px 10px;border-radius:14px;border:1px solid var(--border);background:var(--panel);color:var(--text);cursor:pointer;font-weight:600;position:relative}
  .log-cat-chip:hover{border-color:var(--accent)}
  /* Tri-state: off = base, inc (include only) = green/blue solid, exc = red solid */
  .log-cat-chip.log-cat-off{background:var(--panel);color:var(--muted)}
  .log-cat-chip.log-cat-vendor{border-color:rgba(86,180,233,.45);color:#A8D7F1}
  .log-cat-chip.log-cat-vendor.log-cat-inc{background:rgba(86,180,233,.85);border-color:rgba(86,180,233,1);color:#0a0d15}
  .log-cat-chip.log-cat-vendor.log-cat-exc{background:rgba(255,107,71,.30);border-color:rgba(255,107,71,.85);color:#FFB89A;text-decoration:line-through}
  .log-cat-chip.log-cat-type{border-color:rgba(38,194,145,.45);color:#7EE0BE}
  .log-cat-chip.log-cat-type.log-cat-inc{background:rgba(38,194,145,.85);border-color:rgba(38,194,145,1);color:#0a0d15}
  .log-cat-chip.log-cat-type.log-cat-exc{background:rgba(255,107,71,.30);border-color:rgba(255,107,71,.85);color:#FFB89A;text-decoration:line-through}
  .log-cat-hint em{color:var(--text);font-style:italic}
  .log-cat-clear{font-size:11px;padding:3px 10px;border-radius:9px;border:1px dashed var(--border);background:transparent;color:var(--muted);cursor:pointer}
  .log-cat-clear:hover{color:var(--accent);border-color:var(--accent)}
  /* Re-parse / similar-rule stackable filter bar (Log Analysis) */
  .rep-filter{display:flex;flex-direction:column;gap:8px;margin:8px 0 12px;padding:10px 12px;background:var(--panel-2);border:1px solid var(--border);border-radius:8px}
  .rep-filter[hidden]{display:none}
  .rep-filter .rep-row{display:flex;flex-wrap:wrap;align-items:center;gap:6px}
  .rep-filter .rep-label{font-size:11px;color:var(--muted);font-weight:700;text-transform:uppercase;letter-spacing:.4px;min-width:80px}
  .rep-filter select#repMode{background:#0c0e13;border:1px solid var(--border);border-radius:6px;color:var(--text);font-size:12px;padding:5px 8px;font-family:inherit}
  .rep-filter input#repText{flex:1;min-width:200px;background:#0c0e13;border:1px solid var(--border);border-radius:6px;color:var(--text);font-size:12px;padding:6px 9px;font-family:inherit}
  .rep-filter input#repText:focus,.rep-filter select#repMode:focus{border-color:var(--accent);outline:none;box-shadow:0 0 0 2px rgba(86,180,233,.15)}
  .rep-chips{display:flex;flex-wrap:wrap;gap:5px}
  .rep-chip{font-size:11px;padding:3px 9px;border-radius:13px;border:1px solid var(--border);background:var(--panel);color:var(--text);cursor:pointer;font-weight:600;white-space:nowrap}
  .rep-chip:hover{border-color:var(--accent)}
  .rep-chip.on{background:rgba(86,180,233,.85);border-color:rgba(86,180,233,1);color:#0a0d15}
  .rep-chip .rc-count{opacity:.7;font-weight:700;margin-left:4px}
  .rep-chip.sug{border-color:rgba(38,194,145,.55);color:#7EE0BE}
  .rep-chip.sug.on{background:rgba(38,194,145,.9);border-color:rgba(38,194,145,1);color:#06120d}
  .rep-chip.needle{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}
  .rep-clear{margin-left:auto;font-size:11px;padding:3px 10px;border-radius:9px;border:1px dashed var(--border);background:transparent;color:var(--muted);cursor:pointer}
  .rep-clear:hover{color:var(--accent);border-color:var(--accent)}
  .rep-hint{font-size:11px;color:var(--muted);font-style:italic}
  /* CUSTOM rule indicator + custom-count badge */
  .custom-pill{display:inline-block;font-size:9.5px;font-weight:800;letter-spacing:.6px;padding:1px 7px;border-radius:9px;background:rgba(155,93,229,.22);color:#D7C4F4;border:1px solid rgba(155,93,229,.55);margin-right:4px;vertical-align:middle}
  .custom-count{font-size:11px;color:#D7C4F4;background:rgba(155,93,229,.12);border:1px solid rgba(155,93,229,.40);border-radius:9px;padding:1px 7px;font-weight:600;margin-left:6px}
  .include-custom-toggle{display:inline-flex;align-items:center;gap:5px;font-size:12px;color:var(--text);cursor:pointer;user-select:none}
  .include-custom-toggle input{margin:0}
  /* Custom rule modal */
  .custom-modal{position:fixed;inset:0;background:rgba(0,0,0,.62);display:flex;align-items:center;justify-content:center;z-index:1000;padding:20px}
  .custom-modal[hidden]{display:none}
  .custom-modal-dialog{background:var(--panel);border:1px solid var(--border);border-radius:10px;max-width:760px;width:100%;max-height:90vh;display:flex;flex-direction:column;box-shadow:0 18px 60px rgba(0,0,0,.55)}
  .custom-modal-h{display:flex;align-items:center;padding:14px 18px;border-bottom:1px solid var(--border)}
  .custom-modal-h h2{margin:0;font-size:16px;flex:1;color:var(--text)}
  .custom-modal-close{background:none;border:none;color:var(--muted);font-size:22px;cursor:pointer;line-height:1;padding:0 4px}
  .custom-modal-close:hover{color:var(--accent)}
  .custom-modal-body{padding:14px 18px;overflow-y:auto;flex:1}
  .cmf-row{margin-bottom:11px}
  .cmf-row label{display:block;font-size:11px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.4px;margin-bottom:4px}
  .cmf-req{color:#FF6B47;font-weight:700}
  .cmf-hint{color:var(--muted);font-weight:400;font-size:10.5px;text-transform:none;letter-spacing:0;font-style:italic}
  .cmf-row input[type="text"], .cmf-row textarea, .cmf-row select,
  .cmf-grid input, .cmf-grid textarea, .cmf-grid select,
  .cmf-grid-2 input, .cmf-grid-2 select{width:100%;background:#0c0e13;border:1px solid var(--border);border-radius:5px;padding:7px 9px;color:var(--text);font-size:12.5px;box-sizing:border-box;font-family:inherit}
  .cmf-row textarea, .cmf-grid textarea{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11.5px;resize:vertical}
  .cmf-row input:focus, .cmf-row textarea:focus, .cmf-row select:focus,
  .cmf-grid input:focus, .cmf-grid select:focus,
  .cmf-grid-2 input:focus{border-color:var(--accent);outline:none;box-shadow:0 0 0 2px rgba(86,180,233,.15)}
  .cmf-grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px;margin-bottom:11px}
  .cmf-grid-2{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:11px}
  .cmf-grid label, .cmf-grid-2 label{display:block;font-size:11px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.4px;margin-bottom:4px}
  .custom-modal-footer{display:flex;gap:8px;align-items:center;padding:12px 18px;border-top:1px solid var(--border)}
  .custom-modal-footer .grow{flex:1}
  .cmf-delete{color:#FF9F7E;border-color:rgba(255,107,71,.45) !important}
  .cmf-delete:hover{background:rgba(255,107,71,.15) !important;border-color:#FF6B47 !important}
  .r7-primary-btn{background:var(--accent);border:1px solid var(--accent);color:#0a0d15;padding:6px 14px;border-radius:5px;cursor:pointer;font-weight:700;font-size:12.5px}
  .r7-primary-btn:hover{filter:brightness(1.1)}
  /* Rule Designer tab */
  .rd-grid{display:grid;grid-template-columns:minmax(0, 380px) minmax(0, 1fr);gap:14px;padding:14px;grid-template-rows:auto auto;grid-template-areas:"input adapt" "results results"}
  @media (max-width: 1100px){ .rd-grid{grid-template-columns:1fr;grid-template-areas:"input" "adapt" "results"} }
  /* Adapt panel empty state */
  .rd-adapt-empty{text-align:center;padding:24px 16px;color:var(--muted)}
  .rd-adapt-empty-icon{font-size:32px;margin-bottom:6px}
  .rd-adapt-empty p{font-size:12px;line-height:1.4;margin:0}
  .rd-adapt-empty strong{color:var(--text)}
  /* Result filter bar */
  .rd-filter-bar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;padding:8px 10px;background:var(--panel-2);border:1px solid var(--border);border-radius:8px;margin-bottom:10px;font-size:11px}
  .rd-filter-bar input[type="search"]{flex:1;min-width:180px;max-width:300px;background:#0c0e13;border:1px solid var(--border);border-radius:5px;padding:5px 9px;color:var(--text);font-size:12px;outline:none}
  .rd-filter-bar input[type="search"]:focus{border-color:var(--accent)}
  .rd-filter-chips{display:flex;align-items:center;gap:4px;flex-wrap:wrap}
  .rd-filter-label{font-size:10.5px;color:var(--muted);font-weight:700;text-transform:uppercase;letter-spacing:.3px;margin-right:2px}
  .rd-prio-chip, .rd-filter-vendor-chip{font-size:10.5px;padding:2px 8px;border-radius:9px;border:1px solid var(--border);background:var(--panel);color:var(--muted);cursor:pointer}
  .rd-prio-chip:hover, .rd-filter-vendor-chip:hover{color:var(--accent);border-color:var(--accent)}
  .rd-prio-chip.on, .rd-filter-vendor-chip.on{background:var(--accent-2);border-color:var(--accent-2);color:#fff}
  .rd-filter-exvendor-chip,.rd-filter-et-chip{font-size:10.5px;padding:2px 8px;border-radius:9px;border:1px solid var(--border);background:var(--panel);color:var(--muted);cursor:pointer}
  .rd-filter-exvendor-chip:hover,.rd-filter-et-chip:hover{color:var(--accent);border-color:var(--accent)}
  .rd-filter-exvendor-chip.on{background:rgba(255,107,71,.85);border-color:rgba(255,107,71,1);color:#1a0d09}
  .rd-filter-et-chip.on{background:var(--accent-2);border-color:var(--accent-2);color:#fff}
  .rd-bulk-bar{display:flex;flex-wrap:wrap;align-items:center;gap:10px;padding:8px 10px;background:var(--panel-2);border:1px solid var(--border);border-radius:8px;margin-bottom:10px;font-size:12px}
  .rd-bulk-all{display:inline-flex;align-items:center;gap:6px;color:var(--text);cursor:pointer;font-weight:600}
  .rd-bulk-count{color:var(--muted)}
  .rd-bulk-actions{margin-left:auto;display:inline-flex;gap:6px;flex-wrap:wrap}
  .rd-cand-check{width:15px;height:15px;cursor:pointer;flex:0 0 auto}
  .rd-adapted-badge{font-size:9.5px;font-weight:700;color:#7EE0BE;background:rgba(38,194,145,.16);border:1px solid rgba(38,194,145,.5);border-radius:8px;padding:1px 6px;margin-left:4px;white-space:nowrap}
  .rda-why{font-size:11px;color:var(--muted);margin:3px 0 7px;line-height:1.45;font-style:italic}
  .rda-why code{font-style:normal}
  .rd-log-used{margin-top:10px;border:1px solid var(--border);border-radius:8px;background:var(--code-bg);overflow:hidden}
  .rd-log-used .rlu-h{font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.4px;color:var(--muted);padding:8px 10px;border-bottom:1px solid var(--border);display:flex;align-items:center;gap:8px}
  .rd-log-used .rlu-count{margin-left:auto;color:#A8D7F1;font-weight:600;text-transform:none;letter-spacing:0}
  .rd-log-used pre{margin:0;padding:10px;max-height:380px;overflow:auto;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11.5px;line-height:1.55;white-space:pre;color:var(--muted)}
  .rd-log-used .jk{color:#9aa3b2}
  .rd-log-used .jk-used{background:rgba(86,180,233,.22);color:#A8D7F1;border-radius:3px;padding:0 3px;font-weight:700;box-shadow:0 0 0 1px rgba(86,180,233,.45)}
  .rd-log-used .jv-str{color:#7EE0BE}
  .rd-log-used .jv-num{color:#F0E442}
  .rd-log-used .jv-null{color:#FF9F7E}
  .rd-log-used .rlu-none{font-size:11px;color:var(--muted);font-style:italic;padding:0 10px 10px}
  /* Auto-adapt summary */
  .rda-summary{margin-top:10px;padding:10px;background:var(--panel-2);border:1px solid var(--border);border-radius:6px;font-size:11.5px}
  .rda-summary:empty{display:none}
  .rda-summary-h{font-size:11px;text-transform:uppercase;color:var(--muted);letter-spacing:.4px;font-weight:700;margin-bottom:6px;padding-bottom:5px;border-bottom:1px solid var(--border)}
  .rda-summary-section{margin-top:7px}
  .rda-summary-section h6{margin:4px 0 3px;font-size:10.5px;text-transform:uppercase;color:var(--muted);letter-spacing:.3px;font-weight:700}
  .rda-summary-unmapped h6{color:#FF9F7E}
  .rda-sub-row{padding:2px 0;line-height:1.5;font-size:11px}
  .rda-sub-row code.rda-from{background:rgba(255,107,71,.10);border:1px solid rgba(255,107,71,.35);color:#FFB89A;padding:0 5px;border-radius:3px;font-size:10.5px}
  .rda-sub-row code.rda-to{background:rgba(38,194,145,.10);border:1px solid rgba(38,194,145,.45);color:#8AE5C2;padding:0 5px;border-radius:3px;font-size:10.5px}
  .rda-st{font-size:10px;color:var(--muted);font-style:italic;margin-left:4px}
  .rda-st-warn .rda-st{color:#FFC773}
  .rda-st-bad .rda-st{color:#FF9F7E}
  /* Source side panel — Add button */
  .src-add-row{padding:4px 6px;margin-bottom:4px;border-bottom:1px dashed var(--border)}
  /* "No detection rules yet" banner on source detail */
  .src-no-rules-banner{display:flex;gap:12px;align-items:flex-start;padding:12px 14px;margin:8px 0 14px;background:rgba(255,183,74,.08);border:1px solid rgba(255,183,74,.55);border-left:4px solid #FFB74A;border-radius:6px}
  .src-no-rules-icon{font-size:24px;color:#FFC773;line-height:1;flex-shrink:0}
  .src-no-rules-body{flex:1;font-size:12px}
  .src-no-rules-title{font-weight:700;color:#FFD58F;margin-bottom:4px}
  .src-no-rules-detail{font-size:11.5px;color:var(--text);line-height:1.5}
  .src-no-rules-detail strong{color:#FFD58F}
  /* "Needs rules" badge on the Sources side panel */
  .src-link .badge.needs-rules{background:rgba(255,183,74,.18);color:#FFC773;border:1px solid rgba(255,183,74,.50);margin-left:4px;font-size:9px;text-transform:uppercase;letter-spacing:.3px}
  .src-link .badge.needs-parser{background:rgba(255,107,71,.18);color:#FFB89A;border:1px solid rgba(255,107,71,.55);margin-left:4px;font-size:9px;text-transform:uppercase;letter-spacing:.3px}
  /* 5-stage source lifecycle badges */
  .src-link .badge.ingesting{background:rgba(255,183,74,.20);color:#FFC773;border:1px solid rgba(255,183,74,.55)}
  .src-link .badge.parsed{background:rgba(86,180,233,.20);color:#A8D7F1;border:1px solid rgba(86,180,233,.55)}
  .src-link .badge.not_possible{background:rgba(120,120,120,.18);color:#BDBDBD;border:1px solid rgba(120,120,120,.55);text-transform:uppercase;letter-spacing:.3px;font-size:9px}
  /* Coverage infra card stage tags — colour by lifecycle stage */
  .infra-card .planned-tag.stage-tag-planned{background:rgba(155,93,229,.20);color:#D7C4F4;border:1px solid rgba(155,93,229,.55)}
  .infra-card .planned-tag.stage-tag-ingesting{background:rgba(255,183,74,.22);color:#FFD58F;border:1px solid rgba(255,183,74,.55)}
  .infra-card .planned-tag.stage-tag-parsed{background:rgba(86,180,233,.22);color:#A8D7F1;border:1px solid rgba(86,180,233,.55)}
  .infra-card .planned-tag.stage-tag-live{background:rgba(38,194,145,.22);color:#7EE0BE;border:1px solid rgba(38,194,145,.55)}
  .infra-card .planned-tag.stage-tag-gap{background:rgba(255,107,71,.22);color:#FFB89A;border:1px solid rgba(255,107,71,.55)}
  .infra-card .planned-tag.stage-tag-not_possible{background:rgba(120,120,120,.20);color:#BDBDBD;border:1px solid rgba(120,120,120,.55)}
  /* Make ALL infra-card lifecycle tags consistently sized & legible (previously only 'planned' cards got padding). */
  .infra-card .planned-tag[class*="stage-tag-"]{display:inline-block;font-size:10.5px;letter-spacing:.4px;padding:2px 8px;border-radius:9px;margin-left:6px;text-transform:uppercase;font-weight:700;vertical-align:middle;line-height:1.5}
  /* Log Source lifecycle status badges (Coverage tab) */
  .ls-item .ls-badge{display:inline-block;font-size:9.5px;letter-spacing:.4px;padding:1px 7px;border-radius:8px;margin-left:6px;text-transform:uppercase;font-weight:700;vertical-align:middle;white-space:nowrap}
  .ls-item .ls-badge.stage-tag-planned{background:rgba(155,93,229,.20);color:#D7C4F4;border:1px solid rgba(155,93,229,.55)}
  .ls-item .ls-badge.stage-tag-ingesting{background:rgba(255,183,74,.22);color:#FFD58F;border:1px solid rgba(255,183,74,.55)}
  .ls-item .ls-badge.stage-tag-parsed{background:rgba(86,180,233,.22);color:#A8D7F1;border:1px solid rgba(86,180,233,.55)}
  .ls-item .ls-badge.stage-tag-live{background:rgba(38,194,145,.22);color:#7EE0BE;border:1px solid rgba(38,194,145,.55)}
  .ls-item .ls-badge.stage-tag-gap{background:rgba(255,107,71,.22);color:#FFB89A;border:1px solid rgba(255,107,71,.55)}
  /* Per-card subtle stage accent (uses left border) */
  .infra-card.stage-parsed{border-left:3px solid rgba(86,180,233,.65)}
  .infra-card.stage-live{border-left:3px solid rgba(38,194,145,.65)}
  .infra-card.stage-ingesting{border-left:3px solid rgba(255,183,74,.65)}
  .infra-card.stage-planned{border-left:3px solid rgba(155,93,229,.65)}
  .infra-card.stage-gap{border-left:3px solid rgba(255,107,71,.65)}
  .infra-card.stage-not_possible{border-left:3px solid rgba(120,120,120,.55);opacity:.75}
  /* Stepper "Not possible" lane styling */
  .src-stepper .step.on.step-not_possible{background:rgba(120,120,120,.22);border-color:rgba(120,120,120,.70);color:#D0D0D0}
  /* Stage banner colour for not_possible */
  .src-stage-banner.src-stage-not_possible{background:rgba(120,120,120,.10);border:1px solid rgba(120,120,120,.50);color:#D0D0D0}
  /* Lifecycle stepper on the source detail head */
  .src-stepper{display:flex;align-items:center;gap:6px;flex-wrap:wrap;padding:10px 12px;background:var(--panel-2);border:1px solid var(--border);border-radius:8px;margin:8px 0 6px}
  .src-stepper .step{display:flex;align-items:center;gap:6px;padding:5px 11px;background:var(--panel);border:1px solid var(--border);color:var(--muted);border-radius:7px;cursor:pointer;font-size:11.5px;font-weight:600;transition:.12s}
  .src-stepper .step:hover{border-color:var(--accent);color:var(--accent)}
  .src-stepper .step.done{color:#7EE0BE;border-color:rgba(38,194,145,.45);background:rgba(38,194,145,.08)}
  .src-stepper .step.done .step-n{background:#26C291;color:#fff}
  .src-stepper .step.on{color:var(--text);font-weight:700;box-shadow:0 0 0 1px var(--accent-2)}
  .src-stepper .step.on.step-planned{background:rgba(155,93,229,.22);border-color:rgba(155,93,229,.70);color:#D7C4F4}
  .src-stepper .step.on.step-ingesting{background:rgba(255,183,74,.22);border-color:rgba(255,183,74,.70);color:#FFD58F}
  .src-stepper .step.on.step-parsed{background:rgba(86,180,233,.22);border-color:rgba(86,180,233,.70);color:#A8D7F1}
  .src-stepper .step.on.step-live{background:rgba(38,194,145,.22);border-color:rgba(38,194,145,.70);color:#7EE0BE}
  .src-stepper .step.on.step-gap{background:rgba(255,107,71,.22);border-color:rgba(255,107,71,.70);color:#FFB89A}
  .src-stepper .step-n{display:inline-flex;width:18px;height:18px;align-items:center;justify-content:center;border-radius:50%;background:var(--border);color:var(--muted);font-size:10px;font-weight:700}
  .src-stepper .step-arrow{color:var(--muted);font-size:14px;margin:0 2px}
  .src-stepper .step-sep{color:var(--muted);font-size:10.5px;text-transform:uppercase;letter-spacing:.5px;font-style:italic;margin:0 6px}
  .src-stepper .step-gap{font-size:11px}
  /* Stage description banner under the stepper */
  .src-stage-banner{display:flex;gap:10px;align-items:flex-start;padding:9px 12px;border-radius:6px;margin:0 0 12px;font-size:11.5px;line-height:1.5}
  .src-stage-banner-icon{font-size:18px;line-height:1;flex-shrink:0}
  .src-stage-banner.src-stage-planned{background:rgba(155,93,229,.08);border:1px solid rgba(155,93,229,.45);color:#D7C4F4}
  .src-stage-banner.src-stage-ingesting{background:rgba(255,183,74,.08);border:1px solid rgba(255,183,74,.55);color:#FFD58F}
  .src-stage-banner.src-stage-parsed{background:rgba(86,180,233,.08);border:1px solid rgba(86,180,233,.50);color:#A8D7F1}
  .src-stage-banner.src-stage-live{background:rgba(38,194,145,.08);border:1px solid rgba(38,194,145,.45);color:#7EE0BE}
  .src-stage-banner.src-stage-gap{background:rgba(255,107,71,.08);border:1px solid rgba(255,107,71,.50);color:#FFB89A}
  .src-stage-banner strong{color:inherit}
  /* Stat pill sub-line for stage indicator */
  .src-detail .stat-pill .sub{font-size:10px;color:var(--muted);margin-top:2px;text-transform:uppercase;letter-spacing:.3px;font-weight:600}
  /* Field map panel */
  .rda-fieldmap{margin-top:10px;padding:10px;background:var(--panel-2);border:1px solid var(--border);border-radius:6px;font-size:11.5px}
  .rda-fieldmap:empty{display:none}
  .rfm-h{margin:0 0 4px;font-size:11px;text-transform:uppercase;color:var(--muted);letter-spacing:.4px;font-weight:700}
  .rfm-hint{font-size:11px;color:var(--muted);margin:0 0 8px;line-height:1.4}
  .rfm-table{width:100%;border-collapse:collapse;font-size:11px}
  .rfm-table th{text-align:left;padding:4px 6px;color:var(--muted);font-size:10px;text-transform:uppercase;letter-spacing:.4px;font-weight:600;border-bottom:1px solid var(--border)}
  .rfm-table td{padding:4px 6px;border-bottom:1px solid var(--border);vertical-align:middle}
  .rfm-table tr:last-child td{border-bottom:none}
  .rfm-arrow{color:var(--muted);text-align:center;padding:0 4px}
  .rfm-row.rfm-st-unmapped code.rda-from{background:rgba(255,107,71,.15);border-color:rgba(255,107,71,.45);color:#FFB89A}
  .rfm-row.rfm-st-unmapped code.rda-to{background:rgba(255,107,71,.10);border-color:rgba(255,107,71,.35);color:#FF9F7E}
  .rfm-row.rfm-st-partial-match code.rda-to{background:rgba(255,183,74,.10);border-color:rgba(255,183,74,.45);color:#FFC773}
  .rfm-row.rfm-st-canonical code.rda-from, .rfm-row.rfm-st-canonical code.rda-to{background:rgba(86,180,233,.10);border-color:rgba(86,180,233,.45);color:#A8D7F1}
  .rfm-row.rfm-st-unchanged code.rda-to{background:rgba(38,194,145,.10);border-color:rgba(38,194,145,.45);color:#8AE5C2}
  .rfm-st{display:inline-block;padding:1px 6px;border-radius:7px;font-size:10px;background:var(--panel);border:1px solid var(--border);color:var(--muted)}
  .rfm-st-exact, .rfm-st-tail-match, .rfm-st-tail-match-normalized, .rfm-st-unchanged{color:#7EE0BE;border-color:rgba(38,194,145,.45);background:rgba(38,194,145,.10)}
  .rfm-st-partial-match{color:#FFC773;border-color:rgba(255,183,74,.45);background:rgba(255,183,74,.10)}
  .rfm-st-unmapped{color:#FF9F7E;border-color:rgba(255,107,71,.45);background:rgba(255,107,71,.10)}
  .rfm-st-canonical{color:#A8D7F1;border-color:rgba(86,180,233,.45);background:rgba(86,180,233,.10)}
  .rda-sample{background:#0c0e13;border:1px solid var(--border);color:#a8c2ff;padding:1px 5px;border-radius:3px;font-size:10.5px;word-break:break-all;display:inline-block;max-width:280px;overflow:hidden;text-overflow:ellipsis}
  .rda-no-sample{color:var(--muted);font-style:italic}
  .rfm-actions{display:flex;gap:8px;margin-top:10px;flex-wrap:wrap}
  /* Highlighted LEQL preview */
  .rda-highlight{margin:10px 0;padding:10px;background:var(--panel-2);border:1px solid var(--border);border-radius:6px}
  .rda-highlight-h{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:6px}
  .rda-highlight-title{font-size:11px;text-transform:uppercase;color:var(--muted);letter-spacing:.4px;font-weight:700;flex:1}
  .rda-highlight-legend{display:flex;gap:5px;flex-wrap:wrap;font-size:10px}
  .rda-highlight-legend .rda-hl{padding:1px 7px;border-radius:9px;font-weight:600;text-transform:uppercase;letter-spacing:.3px;font-size:9.5px;cursor:help}
  .rda-highlight-pre{background:#0c0e13;border:1px solid var(--border);border-radius:6px;padding:10px;font-family:ui-monospace,Menlo,Consolas,monospace;font-size:11px;line-height:1.55;overflow:auto;max-height:420px;color:var(--text);white-space:pre-wrap;word-break:break-word;margin:0}
  .rda-highlight-hint{font-size:10.5px;color:var(--muted);font-style:italic;margin:6px 0 0;line-height:1.4}
  /* Inline highlight spans */
  .rda-hl{display:inline;padding:0 3px;border-radius:3px;cursor:help;border:1px solid transparent}
  .rda-hl-rewrite{background:rgba(86,180,233,.22);color:#A8D7F1;border-color:rgba(86,180,233,.55);text-decoration:underline dotted 2px;text-underline-offset:2px}
  .rda-hl-field{background:rgba(255,183,74,.20);color:#FFD58F;border-color:rgba(255,183,74,.55);text-decoration:underline solid 2px;text-underline-offset:2px}
  .rda-hl-unmapped{background:rgba(255,107,71,.22);color:#FFB89A;border-color:rgba(255,107,71,.60);text-decoration:underline wavy rgba(255,107,71,.6)}
  .rda-hl:hover{filter:brightness(1.15)}
  .rd-pane{background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:12px;min-width:0}
  .rd-input-pane{grid-area:input}
  .rd-results-pane{grid-area:results}
  .rd-adapt-pane{grid-area:adapt}
  .rd-pane-h{display:flex;align-items:baseline;gap:10px;border-bottom:1px solid var(--border);padding-bottom:6px;margin-bottom:10px}
  .rd-pane-h h3{margin:0;font-size:13px;color:var(--text);font-weight:700;flex:1}
  .rd-pane-meta{font-size:11px;color:var(--muted)}
  .rd-hint{font-size:11.5px;color:var(--muted);margin:6px 0;line-height:1.45}
  .rd-hint strong{color:var(--text)}
  #rdLog{width:100%;min-height:220px;background:#0c0e13;border:1px solid var(--border);border-radius:6px;padding:10px;font-family:ui-monospace,Menlo,Consolas,monospace;font-size:11px;line-height:1.5;color:var(--text);resize:vertical;outline:none;box-sizing:border-box}
  #rdLog:focus{border-color:var(--accent);box-shadow:0 0 0 2px rgba(86,180,233,.15)}
  .rd-input-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:8px;align-items:center}
  .rd-input-actions .grow{flex:1}
  .rd-detected{margin-top:14px;padding-top:12px;border-top:1px solid var(--border)}
  .rd-detected h4{margin:0 0 6px;font-size:11px;text-transform:uppercase;color:var(--muted);letter-spacing:.5px;font-weight:700}
  .rd-cats{display:flex;flex-wrap:wrap;gap:5px}
  .rd-cat-chip{font-size:11px;padding:4px 10px;border-radius:14px;border:1px solid var(--border);background:var(--panel-2);color:var(--text);cursor:pointer;font-weight:600}
  .rd-cat-chip.rd-cat-vendor{border-color:rgba(86,180,233,.45);color:#A8D7F1}
  .rd-cat-chip.rd-cat-vendor.on{background:rgba(255,107,71,.20);border-color:rgba(255,107,71,.70);color:#FFB89A}
  .rd-cat-chip.rd-cat-type{border-color:rgba(38,194,145,.45);color:#7EE0BE}
  .rd-cat-chip.rd-cat-type.on{background:rgba(38,194,145,.30);border-color:rgba(38,194,145,.85);color:#fff}
  /* Candidate cards */
  .rd-cand{padding:9px 12px;margin-bottom:6px;background:var(--panel-2);border:1px solid var(--border);border-radius:6px;cursor:pointer;transition:border-color .12s,background .12s}
  .rd-cand:hover{border-color:var(--accent);background:#1d2434}
  .rd-cand.rd-cand-on{border-color:var(--accent-2);background:#1d2434;box-shadow:0 0 0 1px var(--accent-2)}
  .rd-cand-h{display:flex;align-items:center;gap:8px;margin-bottom:4px}
  .rd-cand-name{flex:1;font-weight:600;font-size:12.5px;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .rd-cand-cats{display:flex;flex-wrap:wrap;gap:3px;margin:3px 0 4px}
  .rd-cand-desc{font-size:11px;color:var(--muted);line-height:1.4}
  /* Adapt panel */
  .rd-adapt-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}
  @media (max-width: 900px){ .rd-adapt-grid{grid-template-columns:1fr} }
  .rd-adapt-col h4{margin:0 0 6px;font-size:12px;text-transform:uppercase;color:var(--muted);letter-spacing:.4px;font-weight:700}
  .rd-adapt-col h5{margin:10px 0 4px;font-size:10.5px;text-transform:uppercase;color:var(--muted);letter-spacing:.4px;font-weight:600}
  .rd-adapt-meta{display:flex;flex-wrap:wrap;gap:4px;margin:0 0 6px}
  .rd-adapt-desc{font-size:11.5px;color:var(--muted);line-height:1.45;margin:4px 0 6px}
  .rd-leql-pre{background:#0c0e13;border:1px solid var(--border);border-radius:6px;padding:10px;font-family:ui-monospace,Menlo,Consolas,monospace;font-size:11px;line-height:1.5;color:var(--text);overflow:auto;max-height:520px;white-space:pre-wrap;word-break:break-word}
  .rd-field{display:block;margin-bottom:8px;font-size:11px}
  .rd-field>span{display:block;color:var(--muted);font-weight:700;text-transform:uppercase;letter-spacing:.4px;margin-bottom:3px;font-size:10.5px}
  .rd-field input, .rd-field textarea, .rd-field select{width:100%;background:#0c0e13;border:1px solid var(--border);border-radius:5px;padding:7px 9px;color:var(--text);font-size:12.5px;box-sizing:border-box;font-family:inherit}
  .rd-field textarea{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:11px;resize:vertical}
  .rd-field input:focus, .rd-field textarea:focus, .rd-field select:focus{border-color:var(--accent);outline:none}
  .rd-adapt-targets{display:flex;flex-wrap:wrap;gap:8px;margin:8px 0;font-size:11px;color:var(--muted)}
  .rd-tag-target{padding:3px 8px;background:rgba(155,93,229,.10);border:1px solid rgba(155,93,229,.45);border-radius:9px;color:#D7C4F4}
  .rd-tag-target code{background:#0c0e13;border:1px solid rgba(155,93,229,.30);padding:0 4px;border-radius:3px;font-size:10.5px;color:#cfb9ff}
  .rd-adapt-actions{display:flex;gap:6px;margin-bottom:6px}
  .rd-adapt-grid-2{display:grid;grid-template-columns:1fr 1fr;gap:8px}
  .rd-adapt-save-actions{display:flex;gap:8px;margin-top:10px;flex-wrap:wrap}
  .ran-verdict{display:flex;gap:12px;align-items:flex-start;padding:12px;border-radius:8px;margin-bottom:12px}
  .ran-verdict.ok{background:rgba(38,194,145,.10);border:1px solid rgba(38,194,145,.55)}
  .ran-verdict.pending{background:rgba(86,180,233,.10);border:1px solid rgba(86,180,233,.55)}
  .ran-verdict.warn{background:rgba(255,183,74,.10);border:1px solid rgba(255,183,74,.55)}
  .ran-verdict.bad{background:rgba(255,107,71,.10);border:1px solid rgba(255,107,71,.55)}
  .ran-verdict.unknown{background:var(--panel-2);border:1px solid var(--border)}
  .ran-verdict-icon{font-size:32px;line-height:1;flex-shrink:0}
  .ran-verdict.ok .ran-verdict-icon{color:#7EE0BE}
  .ran-verdict.pending .ran-verdict-icon{color:#A8D7F1}
  .ran-verdict.warn .ran-verdict-icon{color:#FFC773}
  .ran-verdict.bad .ran-verdict-icon{color:#FF9F7E}
  .ran-verdict-title{font-size:14px;font-weight:700;color:var(--text);margin-bottom:3px}
  .ran-verdict-detail{font-size:11.5px;color:var(--muted);line-height:1.45}
  .ran-verdict-stats{font-size:10.5px;color:var(--muted);margin-top:4px;font-style:italic}
  .ran-rule-pane h4{margin:14px 0 6px;font-size:12px;text-transform:uppercase;color:var(--muted);letter-spacing:.5px;font-weight:700}
  .ran-clause-table{width:100%;border-collapse:collapse;font-size:11.5px;background:var(--panel-2);border:1px solid var(--border);border-radius:6px;overflow:hidden;margin:4px 0}
  .ran-clause-table th{text-align:left;padding:6px 8px;background:#0c0e13;color:var(--muted);text-transform:uppercase;font-size:10px;letter-spacing:.4px;border-bottom:1px solid var(--border);font-weight:600}
  .ran-clause-table td{padding:6px 8px;border-bottom:1px solid var(--border);vertical-align:top}
  .ran-clause-table tr:last-child td{border-bottom:none}
  .ran-clause-table .rc-op{color:var(--muted);font-size:10.5px;font-family:ui-monospace,Menlo,Consolas,monospace}
  .ran-clause-table .rc-note{color:var(--muted);font-size:10.5px;line-height:1.4}
  .ran-clause-table code{background:#0c0e13;border:1px solid var(--border);padding:1px 5px;border-radius:3px;font-size:10.5px;color:#a8c2ff}
  .rc-verdict{display:inline-block;padding:2px 7px;border-radius:9px;font-size:10px;font-weight:600;white-space:nowrap}
  .rc-verdict.rc-matches{background:rgba(38,194,145,.20);color:#7EE0BE;border:1px solid rgba(38,194,145,.45)}
  .rc-verdict.rc-fires-after-parsing{background:rgba(86,180,233,.20);color:#A8D7F1;border:1px solid rgba(86,180,233,.45)}
  .rc-verdict.rc-parser-retag-needed,
  .rc-verdict.rc-needs-source,
  .rc-verdict.rc-value-missing{background:rgba(255,183,74,.20);color:#FFC773;border:1px solid rgba(255,183,74,.45)}
  .rc-verdict.rc-wont-fire{background:rgba(255,107,71,.18);color:#FF9F7E;border:1px solid rgba(255,107,71,.45)}
  .rc-verdict.rc-opaque{background:rgba(204,121,167,.16);color:#E8B0D0;border:1px solid rgba(204,121,167,.45)}
  .rc-verdict.rc-unknown{background:var(--panel-2);color:var(--muted);border:1px solid var(--border)}
  /* Sources tab — per-source status override control */
  .src-status-ctrl{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--muted);padding:0 6px}
  .src-status-ctrl select{background:var(--panel-2);color:var(--text);border:1px solid var(--border);border-radius:5px;padding:5px 8px;font-size:12px;cursor:pointer}
  .src-status-ctrl select:hover{border-color:var(--accent)}
  /* Raw-field mapping hint shown next to each rule requirement */
  .req-map-hint{font-size:10.5px;color:var(--muted);margin-left:6px}
  .req-map-hint code{background:#1f232c;border:1px solid var(--border);padding:1px 4px;border-radius:3px;font-size:10.5px;color:#a8c2ff}
  .req-map-hint.ok{color:#7EE0BE}
  .req-map-hint.ok code{color:#A8D7F1;background:rgba(86,180,233,.10);border-color:rgba(86,180,233,.30)}
  .req-map-hint.warn{color:#FFC773}
  .req-map-hint.warn code{color:#FFC773;background:rgba(255,183,74,.10);border-color:rgba(255,183,74,.30)}
  .req-map-hint.miss{color:var(--muted);font-style:italic}
  /* Threat Intel badge on rule preview */
  .prp-badge.ti{display:inline-block;background:rgba(204,121,167,.16);color:#E8B0D0;border:1px solid rgba(204,121,167,.45);font-size:10px;font-weight:600;padding:1px 7px;border-radius:10px;text-transform:none;letter-spacing:.2px;margin-left:4px;vertical-align:middle}
  /* SUBQUERY row in the requirements panel */
  .rule-reqs li.req-subquery{display:block;border-left:2px solid #CC79A7;padding-left:8px;background:rgba(204,121,167,.05);border-radius:3px;margin:3px 0}
  .rule-reqs li.req-subquery code{background:rgba(204,121,167,.10);color:#E8B0D0;border-color:rgba(204,121,167,.30)}
  .rule-reqs li.req-subquery .req-subquery-note{display:block;color:var(--muted);font-size:10.5px;line-height:1.4;margin-top:3px;font-style:italic}
  /* "To trigger this rule" requirements panel */
  .rule-reqs{margin:6px 0 4px;background:#0c0e13;border:1px solid var(--border);border-radius:6px;padding:6px 10px;font-size:12px}
  .rule-reqs summary{cursor:pointer;color:var(--accent);user-select:none;padding:2px 0;font-weight:500}
  .rule-reqs summary:hover{color:var(--text)}
  .rule-reqs[open] summary{margin-bottom:4px;color:var(--text)}
  .rule-reqs ul.req-list{list-style:none;padding:0;margin:4px 0 2px;display:flex;flex-direction:column;gap:4px}
  .rule-reqs ul.req-list li{font-size:11.5px;line-height:1.5;color:var(--text);padding:3px 0;border-bottom:1px dotted rgba(255,255,255,.04);display:flex;flex-wrap:wrap;align-items:baseline;gap:6px}
  .rule-reqs ul.req-list li:last-child{border-bottom:none}
  .rule-reqs .req-field{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11.5px}
  .rule-reqs .req-op{font-size:10.5px;color:var(--muted);text-transform:uppercase;letter-spacing:.4px;padding:0 4px}
  .rule-reqs code{background:#1f232c;border:1px solid var(--border);padding:1px 5px;border-radius:3px;font-size:11px;color:#FFC773}
  .rule-reqs code.req-val-hit{color:#9FCDF2;border-color:rgba(86,180,233,.4);background:rgba(86,180,233,.10)}
  .rule-reqs code.req-val-hit::after{content:" \2713";font-weight:700}
  /* Explicit mapping block per requirement row */
  .rule-reqs li.req-row{display:block;flex-direction:column;align-items:flex-start;gap:4px;padding:6px 0;border-bottom:1px solid rgba(255,255,255,.06)}
  .rule-reqs li.req-row:last-child{border-bottom:none}
  .rule-reqs li.req-row .req-line{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin-bottom:4px}
  .rule-reqs .req-mapping{font-size:11px;color:var(--muted);background:#0c0e13;border:1px solid var(--border);border-radius:4px;padding:5px 8px;line-height:1.5;margin-top:2px}
  .rule-reqs .req-mapping.ok{border-color:rgba(38,194,145,.4);background:rgba(38,194,145,.05);color:#A8D7F1}
  .rule-reqs .req-mapping.ok strong{color:#7EE0BE}
  .rule-reqs .req-mapping.warn{border-color:rgba(255,183,74,.4);background:rgba(255,183,74,.05);color:#FFC773}
  .rule-reqs .req-mapping.warn strong{color:#FFC773}
  .rule-reqs .req-mapping.miss{border-color:rgba(255,107,71,.35);background:rgba(255,107,71,.04);color:var(--muted);font-style:italic}
  .rule-reqs .req-mapping.miss strong{color:#FF9F7E;font-style:normal}
  .rule-reqs .req-mapping code{background:#1f232c;border:1px solid var(--border);padding:1px 5px;border-radius:3px;font-size:11px;color:#a8c2ff;font-style:normal}
  .rule-reqs .req-mapping .req-arrow{color:var(--muted);font-weight:600;margin:0 2px}
  .rule-reqs .req-mapping .req-status{font-size:10.5px;display:inline-block;margin-left:4px}
  /* LEQL highlighting — colour-blind-safe via underline-style differentiation:
       solid underline + green = field present in your log (good)
       dashed underline + orange = field expected by rule but absent (gap)
       solid underline + blue   = string literal found in your log content   */
  .leql-hl{background:#0c0e13;border:1px solid var(--border);border-radius:6px;padding:10px 12px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11.5px;line-height:1.75;overflow-x:auto;white-space:pre-wrap;word-break:break-word;color:#cbd2dc;margin:6px 0}
  .leql-hl .lq-match{background:rgba(86,180,233,.20);color:#A8D7F1;border-bottom:2px solid #56B4E9;padding:0 2px;border-radius:2px;font-weight:600}
  .leql-hl .lq-gap{background:rgba(255,183,74,.22);color:#FFC773;border-bottom:2px dashed #FFB74A;padding:0 2px;border-radius:2px;font-weight:600}
  .leql-hl .lq-str-hit{background:rgba(204,121,167,.18);color:#E8B0D0;border-bottom:1.5px dotted #CC79A7;padding:0 2px;border-radius:2px;font-weight:600}
  .lq-legend{display:flex;flex-wrap:wrap;gap:10px 14px;font-size:11px;color:var(--muted);margin:4px 0 8px;align-items:center}
  .lq-legend .swatch{padding:1px 6px;border-radius:3px;font-weight:600;display:inline-block}
  .lq-legend .swatch.match{background:rgba(86,180,233,.20);color:#A8D7F1;border-bottom:2px solid #56B4E9}
  .lq-legend .swatch.gap{background:rgba(255,183,74,.22);color:#FFC773;border-bottom:2px dashed #FFB74A}
  .lq-legend .swatch.hit{background:rgba(204,121,167,.18);color:#E8B0D0;border-bottom:1.5px dotted #CC79A7}
  /* Parser-plan steps + rule previews */
  .parser-steps{list-style:none;counter-reset:pstep;margin:0 0 14px;padding:0;display:flex;flex-direction:column;gap:8px}
  .parser-steps li{counter-increment:pstep;background:#0c0e13;border:1px solid var(--border);border-radius:8px;padding:10px 14px 10px 50px;position:relative;font-size:12.5px;line-height:1.5;color:var(--text)}
  .parser-steps li::before{content:counter(pstep);position:absolute;left:12px;top:10px;width:28px;height:28px;border-radius:50%;background:var(--accent-2);color:#fff;font-weight:700;font-size:13px;display:flex;align-items:center;justify-content:center}
  .parser-steps li strong{color:var(--text);display:block;margin-bottom:3px;font-size:13px}
  .parser-steps li code{background:#1f232c;padding:1px 5px;border-radius:3px;font-size:11.5px;color:#a8c2ff}
  .parser-steps li pre{background:#1f232c;border:1px solid var(--border);border-radius:4px;padding:6px 8px;margin:5px 0;font-size:11.5px;line-height:1.5;overflow-x:auto;white-space:pre-wrap}
  .parser-steps li a{color:var(--accent)}
  .parser-rule-preview{background:#0c0e13;border:1px solid var(--border);border-radius:8px;padding:10px 12px;margin:6px 0}
  .parser-rule-preview .prp-h{display:flex;align-items:center;gap:8px;margin-bottom:4px}
  .parser-rule-preview .prp-h strong{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text);font-size:12.5px}
  .parser-rule-preview .prp-h .ext{margin-left:auto;color:var(--muted);text-decoration:none;font-size:11px;opacity:.7}
  .parser-rule-preview .prp-h .ext:hover{opacity:1}
  .parser-rule-preview .prp-desc{font-size:11.5px;color:var(--muted);margin-bottom:5px;line-height:1.4}
  .parser-rule-preview .prp-meta{font-size:11px;color:var(--muted);margin-top:3px}
  .parser-rule-preview .prp-meta .tag{font-size:10.5px}
  .parser-plan-more{display:block;margin-top:8px;color:var(--accent);text-decoration:none;font-size:11.5px;cursor:pointer}
  .parser-plan-more:hover{text-decoration:underline}
  /* Inline rule details in reparse cards */
  .log-rep-expand{color:var(--accent);text-decoration:none;font-size:11.5px}
  .log-rep-expand:hover{text-decoration:underline}
  .log-rep-leql summary{cursor:pointer;color:var(--accent);font-size:11.5px;user-select:none;padding:3px 0}
  .log-rep-leql .leql-pre{background:#0c0e13;border:1px solid var(--border);border-radius:5px;padding:8px 10px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;line-height:1.5;overflow-x:auto;color:var(--text);margin:6px 0;white-space:pre-wrap;word-break:break-word}
  .log-rep-rec{font-size:11.5px;color:var(--muted);line-height:1.4;margin-top:6px}
  .log-rep-rec strong{color:var(--text)}
  /* Make matched-rules expanded rows readable */
  #logMatchedRules tr.detail{background:#0c0e13}
  /* Suggestions */
  #logSuggestions{display:grid;grid-template-columns:repeat(auto-fill,minmax(360px,1fr));gap:8px;margin-bottom:14px}
  .log-sug-card{background:var(--panel);border:1px solid var(--border);border-radius:8px;padding:11px 14px;border-left:3px solid var(--accent)}
  .log-sug-card.crit{border-left-color:var(--st-bad)}
  .log-sug-card.warn{border-left-color:var(--st-warn)}
  .log-sug-card.info{border-left-color:var(--accent)}
  .log-sug-card .sh{font-size:12.5px;font-weight:600;color:var(--text);margin-bottom:4px}
  .log-sug-card .sh::before{content:"\1F4A1\00a0"}
  .log-sug-card.crit .sh::before{content:"\26A0\00a0"}
  .log-sug-card.warn .sh::before{content:"\26A0\00a0"}
  .log-sug-card .sd{font-size:11.5px;color:var(--muted);line-height:1.45}
  .log-sug-card .sd code{background:#0c0e13;border:1px solid var(--border);padding:1px 5px;border-radius:3px;font-size:11px;color:#a8c2ff}
  .log-sug-card .sd strong{color:var(--text)}
  .log-sug-card .impact{margin-top:6px;font-size:11px;color:#7EE0BE;font-weight:600}

  /* ============ AI Copilot (Log Analysis tab) ============ */
  .copilot{background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:16px;margin:14px 0}
  .copilot-head h2{margin:0 0 4px;font-size:15px}
  .copilot-head .sub{font-size:11.5px;color:var(--muted);display:block;margin-bottom:10px}
  .copilot-ask{display:flex;gap:10px;align-items:flex-start}
  .copilot-ask textarea,.copilot-follow textarea{flex:1;background:var(--panel-2);border:1px solid var(--border);color:var(--text);border-radius:8px;padding:8px 10px;font:12.5px/1.4 inherit;resize:vertical}
  .copilot-ask .btn,.copilot-follow .btn{white-space:nowrap}
  .copilot-redact{margin-top:8px;font-size:11.5px;color:#FFB74A}
  .copilot-redact details{display:inline}
  .copilot-progress{margin-top:12px;font-size:12px;color:var(--muted);border-left:3px solid #56B4E9;padding:6px 10px;background:var(--panel-2);border-radius:0 8px 8px 0}
  .copilot-progress .cp-line{padding:2px 0}
  .copilot-progress .cp-line.cp-active::after{content:"…";animation:cpblink 1.2s infinite}
  @keyframes cpblink{0%,100%{opacity:.25}50%{opacity:1}}
  .copilot-out{margin-top:14px}
  .copilot-md{font-size:12.5px;line-height:1.55;color:var(--text)}
  .copilot-md h1,.copilot-md h2,.copilot-md h3{font-size:13.5px;margin:12px 0 4px}
  .copilot-md code{background:#0c0e13;border:1px solid var(--border);padding:1px 5px;border-radius:3px;font-size:11.5px;color:#a8c2ff}
  .copilot-md pre{background:#0c0e13;border:1px solid var(--border);padding:10px;border-radius:8px;overflow-x:auto}
  .copilot-md pre code{border:0;padding:0}
  .copilot-md ul{margin:6px 0;padding-left:20px}
  .copilot-panel{background:var(--panel-2);border:1px solid var(--border);border-radius:10px;padding:12px 14px;margin:10px 0}
  .copilot-panel>h3{margin:0 0 8px;font-size:13px;display:flex;align-items:center;gap:8px}
  .copilot-fieldchips{display:flex;flex-wrap:wrap;gap:5px;margin-top:8px}
  .copilot-fieldchips .fc{font-size:10.5px;background:#0c0e13;border:1px solid var(--border);border-radius:4px;padding:2px 6px;color:#a8c2ff;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}
  .airule{background:var(--panel-2);border:1px solid var(--border);border-radius:10px;padding:12px 14px;margin:10px 0}
  .airule-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
  .airule-head .nm{font-weight:600;font-size:13px}
  .airule-badge{font-size:10px;font-weight:700;letter-spacing:.4px;border-radius:4px;padding:2px 7px;text-transform:uppercase}
  .airule-badge.adapted{background:rgba(86,180,233,.15);color:#56B4E9;border:1px solid rgba(86,180,233,.4)}
  .airule-badge.new{background:rgba(38,194,145,.12);color:#26C291;border:1px solid rgba(38,194,145,.4)}
  .airule-badge.custom{background:rgba(204,121,167,.15);color:#CC79A7;border:1px solid rgba(204,121,167,.4)}
  .airule-badge.prio-CRITICAL{background:rgba(255,107,71,.15);color:#FF6B47;border:1px solid rgba(255,107,71,.45)}
  .airule-badge.prio-HIGH{background:rgba(255,183,74,.15);color:#FFB74A;border:1px solid rgba(255,183,74,.45)}
  .airule-badge.prio-MEDIUM{background:rgba(240,228,66,.12);color:#F0E442;border:1px solid rgba(240,228,66,.4)}
  .airule-badge.prio-LOW,.airule-badge.prio-INFORMATIONAL{background:rgba(154,163,178,.12);color:var(--muted);border:1px solid var(--border)}
  .airule-badge.lint-fail{background:rgba(255,107,71,.2);color:#FF6B47;border:1px solid #FF6B47}
  .airule .desc{font-size:12px;color:var(--muted);margin:6px 0}
  .airule .basis{font-size:11.5px;margin:6px 0;color:#56B4E9}
  .airule pre.leql{background:#0c0e13;border:1px solid var(--border);border-radius:8px;padding:10px;font-size:11.5px;overflow-x:auto;white-space:pre-wrap;word-break:break-word}
  .airule .meta-row{display:flex;flex-wrap:wrap;gap:6px;margin:8px 0 0;font-size:11px}
  .airule .meta-row .mchip{background:#0c0e13;border:1px solid var(--border);border-radius:4px;padding:2px 7px;color:var(--muted)}
  .airule .kv{font-size:11.5px;margin-top:8px}
  .airule .kv .k{color:var(--muted);font-weight:600}
  .airule .rule-actions{display:flex;gap:8px;margin-top:10px;flex-wrap:wrap}
  .airule details.diffwrap{margin-top:8px}
  .airule details.diffwrap summary{cursor:pointer;font-size:11.5px;color:#56B4E9}
  .aidiff{font:11px/1.5 ui-monospace,SFMono-Regular,Menlo,monospace;background:#0c0e13;border:1px solid var(--border);border-radius:8px;margin-top:6px;overflow-x:auto}
  .aidiff .dl{padding:0 10px;white-space:pre-wrap;word-break:break-word}
  .aidiff .dl.add{background:rgba(38,194,145,.12);color:#7EE0BE}
  .aidiff .dl.add::before{content:"+ "}
  .aidiff .dl.del{background:rgba(255,107,71,.12);color:#FFB89A;text-decoration:line-through;text-decoration-color:rgba(255,107,71,.5)}
  .aidiff .dl.del::before{content:"- "}
  .aidiff .dl.ctx{color:var(--muted)}
  .aidiff .dl.ctx::before{content:"  "}
  .copilot-follow{display:flex;gap:10px;margin-top:12px;align-items:flex-start}
  .copilot-usage{font-size:10.5px;color:var(--muted);margin-top:8px;text-align:right}
