  :root{
    --bg:#0b0710; --panel:#151021; --panel2:#1d1630; --edge:#2f2542;
    --ink:#ece7f5; --muted:#9d93b0; --accent:#a371f7; --link:#c9a2ff;
    --hi:#3fb950; --med:#e3b341; --low:#8b98a5; --review:#f0883e;
    --pR:#f85149; --pD:#4a9eff; --src:#7ee0d3; --derived:#c9a2ff;
    --fed:#f0b36b;
  }
  *{box-sizing:border-box}
  body{margin:0;background:var(--bg);color:var(--ink);
    font:15px/1.5 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif}
  a{color:var(--link);text-decoration:none;cursor:pointer}a:hover{text-decoration:underline}
  header{position:relative;padding:15px 24px;border-bottom:1px solid var(--edge);background:linear-gradient(180deg,#160f24,#0b0710)}
  .xlink{position:fixed;bottom:12px;right:12px;z-index:20;width:26px;height:26px;display:flex;align-items:center;
    justify-content:center;border:1px solid var(--edge);border-radius:5px;color:var(--muted);background:rgba(21,16,33,.72);text-decoration:none}
  .xlink:hover{color:var(--link);border-color:var(--accent);background:var(--panel2);text-decoration:none}
  .brand{display:flex;align-items:baseline;gap:11px;flex-wrap:wrap}
  header h1{margin:0;font-size:21px;letter-spacing:.3px} header h1 .mk{color:var(--accent)}
  .tagline{color:var(--muted);font-size:12.5px}
  header p{margin:7px 0 0;color:var(--muted);font-size:12px;max-width:1010px}
  .discl{margin-top:8px;font-size:11px;color:#8a7fa3;max-width:1010px;border-left:2px solid var(--edge);padding-left:9px}
  .wrap{display:flex;gap:18px;padding:18px 24px;align-items:flex-start;flex-wrap:wrap}
  .mapcol{flex:1 1 500px;min-width:340px;animation:mapIn .28s ease-out}
  /* replays each time the map view is opened (display:none -> flex re-triggers it) */
  @keyframes mapIn{from{opacity:0;transform:translateY(5px)}to{opacity:1;transform:none}}
  @media (prefers-reduced-motion:reduce){.mapcol{animation:none}}
  @media(min-width:1000px){.mapcol{position:sticky;top:18px}}
  .panel{flex:1 1 560px;min-width:340px;background:var(--panel);border:1px solid var(--edge);
    border-radius:12px;padding:16px 18px;max-height:85vh;overflow:auto}
  /* directory-first home: the map is its own view, not the front door */
  .wrap.nomap .mapcol{display:none}
  .wrap.nomap .panel{flex:1 1 100%;max-height:none;overflow:visible}
  .cardgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(238px,1fr));gap:12px;margin-top:14px}
  .statecard{display:block;background:var(--panel2);border:1px solid var(--edge);border-radius:12px;padding:16px;text-decoration:none;color:var(--ink);transition:border-color .14s ease,transform .14s ease,box-shadow .14s ease;cursor:pointer}
  .statecard:hover{border-color:var(--accent);text-decoration:none;transform:translateY(-2px);box-shadow:0 8px 22px rgba(0,0,0,.35)}
  .statecard:active{transform:translateY(0);box-shadow:0 3px 10px rgba(0,0,0,.3);transition-duration:.05s}
  @media (prefers-reduced-motion:reduce){.statecard,.statecard:hover,.statecard:active{transform:none;transition:border-color .14s ease}}
  .sc-name{font-size:16px;font-weight:700;margin-bottom:9px}
  .sc-stats{display:flex;flex-direction:column;gap:3px;color:var(--muted);font-size:12px}
  .sc-stats b{color:var(--ink);font-variant-numeric:tabular-nums;font-size:13px}
  .mapcard{background:linear-gradient(180deg,#191030,#120c1e)}
  svg{width:100%;height:auto;display:block}
  .state{stroke:#0b0710;stroke-width:.6px;transition:fill .15s}
  .state.hasdata{cursor:pointer} .state.hasdata:hover{stroke:#fff;stroke-width:1.2px}
  .state.sel{stroke:#fff;stroke-width:1.8px}
  .legend{margin-top:11px;color:var(--muted);font-size:12px}
  .scale{display:flex;height:12px;border-radius:3px;overflow:hidden;margin:5px 0 3px;max-width:360px}
  .scale i{flex:1}
  .scalelbl{display:flex;justify-content:space-between;max-width:360px;font-size:11px}
  .lrow{margin-top:7px;display:flex;flex-wrap:wrap;gap:12px;align-items:center}
  .sw{display:inline-block;width:11px;height:11px;border-radius:3px;vertical-align:-1px;margin-right:5px}
  .tip{position:fixed;pointer-events:none;background:#0a0713;border:1px solid var(--edge);border-radius:9px;
    padding:10px 12px;font-size:12.5px;opacity:0;transition:opacity .1s;z-index:9;max-width:260px}
  .tip b{font-size:13.5px} .tip .k{color:var(--muted)}
  h2{font-size:17px;margin:2px 0 3px} .sub{color:var(--muted);font-size:12.5px}
  .stat{display:flex;gap:20px;margin:12px 0 4px;flex-wrap:wrap}
  .stat div b{display:block;font-size:18px} .stat div span{color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.4px}
  .stat .fedstat b{color:var(--fed)}
  .part{margin-top:20px} .part>h3{font-size:14px;margin:0 0 2px} .part>.psub{color:var(--muted);font-size:12px;margin-bottom:8px}
  .graphwrap{margin-top:10px}
  .graph{width:100%;height:520px;background:radial-gradient(circle at 50% 40%,#140d24,#0a0713);border:1px solid #241a3a;border-radius:10px;overflow:hidden}
  .graph svg{display:block} .graph circle:hover{stroke:#fff;stroke-width:1.4px}
  .glegend{display:flex;flex-wrap:wrap;gap:6px 16px;align-items:center;margin-top:8px;font-size:11.5px;color:var(--muted)}
  .glegend span{display:inline-flex;align-items:center;gap:5px} .glegend i{width:10px;height:10px;border-radius:50%;display:inline-block}
  .glegend .gk{color:#6b6088;font-style:italic}
  .nhbanner{margin:12px 0;padding:11px 13px;border:1px solid #3f2f5c;border-radius:9px;background:#140f1f;color:var(--muted);font-size:12.5px;line-height:1.5}
  .nhbanner b{color:var(--ink)} .nhbanner a{white-space:nowrap}
  .chh{font-size:11.5px;text-transform:uppercase;letter-spacing:.6px;color:var(--muted);margin:14px 0 4px}
  table{width:100%;border-collapse:collapse;font-size:13px}
  thead th{text-align:left;color:var(--muted);font-weight:500;font-size:11px;text-transform:uppercase;letter-spacing:.4px;
    border-bottom:1px solid var(--edge);padding:6px 8px;position:sticky;top:0;background:var(--panel);cursor:pointer;user-select:none}
  th.r,td.r{text-align:right}
  tbody tr.row{border-bottom:1px solid #241c33;cursor:pointer} tbody tr.row:hover{background:var(--panel2)}
  tbody tr.row.z{opacity:.5}
  td{padding:7px 8px;vertical-align:middle}
  .nm{font-weight:600;color:var(--ink)}
  a.nm{cursor:pointer;border-bottom:1px dotted var(--accent)}                 /* every name link is clickable → its profile */
  a.nm:hover{color:var(--link);border-bottom:1px solid var(--link)}
  a.nm[data-did]::after{content:"›";color:var(--accent);font-weight:700;margin-left:3px;opacity:.55}  /* donor → full profile cue */
  a.nm[data-did]:hover::after{opacity:1;color:var(--link)}
  .amt{font-variant-numeric:tabular-nums;font-weight:600} .ratio{font-variant-numeric:tabular-nums;color:var(--muted)}
  .pm{display:inline-block;min-width:17px;text-align:center;font-size:10.5px;font-weight:700;padding:0 4px;
    border-radius:4px;margin-right:7px;border:1px solid currentColor;line-height:16px}
  .meter{display:inline-block;width:70px;height:9px;background:#241c33;border-radius:5px;overflow:hidden;vertical-align:middle}
  .meter i{display:block;height:100%;border-radius:5px}
  .mlbl{font-size:11px;color:var(--muted);margin-left:6px;font-variant-numeric:tabular-nums}
  .yrpill{display:inline-block;font-size:10px;padding:1px 6px;border-radius:20px;border:1px solid var(--edge);color:var(--muted);margin-left:6px}
  .cf{font-size:9.5px;padding:1px 6px;border-radius:20px;border:1px solid}
  .cf.hi{color:var(--hi);border-color:#1f6f2e} .cf.med{color:var(--med);border-color:#6b5312} .cf.low{color:var(--low);border-color:#3a424c}
  .srclink{color:var(--src)}
  .none{color:var(--muted);font-size:12px;padding:8px 0}
  .badge{display:inline-block;font-size:9.5px;padding:1px 6px;border-radius:4px;border:1px solid;margin-left:4px}
  .badge.src{color:var(--src);border-color:#2c5750} .badge.der{color:var(--derived);border-color:#3f2f5c}
  .badge.fed{color:var(--fed);border-color:#6b4a1f} .badge.org{color:var(--muted);border-color:#3a424c}
  .dtags{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}
  .dtag{font-size:10.5px;padding:2px 9px;border-radius:20px;border:1px solid var(--edge);color:var(--muted);background:var(--panel2)}
  .dtag.pool{color:var(--accent);border-color:var(--accent);font-weight:700}
  .dtag.pool a{color:var(--accent)}
  .disc{margin-top:16px;padding:10px 12px;border:1px dashed var(--edge);border-radius:9px;color:var(--muted);font-size:11.5px;background:#100b1c}
  details.method{margin-top:14px;border:1px solid var(--edge);border-radius:9px;background:#100b1c}
  details.method summary{cursor:pointer;padding:10px 12px;color:var(--accent);font-size:12.5px;font-weight:600}
  details.method .mbody{padding:0 14px 12px;color:var(--muted);font-size:12px} details.method h4{color:var(--ink);font-size:12px;margin:12px 0 4px}
  .back{display:inline-block;margin-bottom:10px;color:var(--accent);font-size:12.5px}
  .psec{margin-top:18px} .psec h3{font-size:12px;text-transform:uppercase;letter-spacing:.5px;color:var(--muted);
    border-bottom:1px solid var(--edge);padding-bottom:5px;margin:0 0 8px}
  .fedbox{margin-top:12px;border:1px solid #4a361a;border-radius:9px;background:#160f07;padding:12px 14px}
  .fedbox h3{color:var(--fed);border:0;padding:0;margin:0 0 6px;font-size:12px;text-transform:uppercase;letter-spacing:.5px}
  .phead .m{color:var(--muted);font-size:12.5px;margin-top:2px}
  tr.row:focus-visible,th:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
  .searchwrap{margin-top:11px;max-width:440px}
  #search{width:100%;background:var(--panel2);border:1px solid var(--edge);border-radius:8px;color:var(--ink);padding:8px 11px;font-size:13px}
  #search:focus{outline:2px solid var(--accent);border-color:var(--accent)}
  .filters{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin:12px 0 2px}
  .filters select,.filters input[type=text]{background:var(--panel2);border:1px solid var(--edge);border-radius:7px;color:var(--ink);padding:5px 9px;font-size:12px}
  .filters label{font-size:12px;color:var(--muted);display:flex;align-items:center;gap:5px;cursor:pointer}
  .filters button{background:none;border:1px solid var(--edge);color:var(--muted);border-radius:7px;padding:5px 9px;font-size:12px;cursor:pointer}
  .filters .cnt{font-size:11px;color:var(--muted);margin-left:auto}
  .restype{font-size:9.5px;color:var(--accent);border:1px solid #3f2f5c;border-radius:4px;padding:1px 6px;margin-left:7px;text-transform:uppercase;letter-spacing:.4px}
  .modes{display:flex;gap:6px;margin:12px 0 2px}
  .modes button{background:var(--panel2);color:var(--muted);border:1px solid var(--edge);
    border-radius:7px;padding:5px 10px;font-size:12px;cursor:pointer;
    transition:background .15s ease,color .15s ease,border-color .15s ease}
  .modes button:hover{color:var(--ink);border-color:var(--accent)}
  .modes button[aria-pressed=true]{background:var(--accent);color:#0b0710;border-color:var(--accent);font-weight:600}
  .spin{color:var(--muted);font-size:12.5px;padding:12px 0}
  /* soft settle when the panel swaps to a new view/tab — eases in from a high
     opacity so cached switches feel seamless rather than hard-popping */
  @keyframes panelSwap{from{opacity:.55}to{opacity:1}}
  .panel.swap{animation:panelSwap .16s ease-out}
  @media (prefers-reduced-motion:reduce){.panel.swap{animation:none}}
  /* action interface — contact a public official, frictionless (adapted from Tony's ACTION_INTERFACES) */
  .ai-card{display:flex;gap:14px;align-items:flex-start;background:#170f26;border:1px solid var(--edge);border-radius:12px;padding:14px 16px;margin:16px 0}
  .ai-photo{flex:0 0 auto;width:74px;height:74px;border-radius:9px;overflow:hidden;background:#211636}
  .ai-photo img{width:100%;height:100%;object-fit:cover;object-position:center top;display:block}
  .ai-body{flex:1 1 auto;min-width:0}
  .ai-h{font-weight:800;font-size:12px;text-transform:uppercase;letter-spacing:.6px;color:var(--accent)}
  .ai-h .ai-sub{display:block;text-transform:none;letter-spacing:0;font-weight:400;color:var(--muted);font-size:12px;margin-top:2px}
  .ai-actions{display:flex;gap:8px;flex-wrap:wrap;margin:11px 0 2px}
  .ai-btn{display:inline-flex;align-items:center;gap:6px;padding:9px 15px;border-radius:9px;font-weight:700;font-size:12.5px;cursor:pointer;text-decoration:none;border:1px solid var(--edge);background:var(--panel2);color:var(--ink)}
  .ai-btn.call{background:linear-gradient(90deg,#a371f7,#6d3bd1);color:#fff;border:none}
  .ai-btn.email{background:transparent;color:var(--link);border:1.5px solid var(--accent)}
  .ai-btn.sign{background:var(--accent);color:#180608;border:none}
  .ai-btn:hover{text-decoration:none;filter:brightness(1.1)}
  .ai-script{margin-top:9px;padding:11px 12px;border:1px dashed var(--edge);border-radius:9px;background:#100b1c;font-size:12.5px;line-height:1.55;white-space:pre-wrap;color:var(--ink)}
  .ai-note{margin-top:8px;color:var(--muted);font-size:12px}
  .citechip{display:inline-block;font-size:9.5px;padding:1px 7px;border-radius:20px;border:1px solid var(--edge);color:var(--muted);cursor:pointer;margin-left:7px;white-space:nowrap}
  .citechip:hover{color:var(--link);border-color:var(--accent)}
  .citechip.on{color:#180608;background:var(--accent);border-color:var(--accent)}
  /* expandable breakdown rows (Monday.com-style sub-items) */
  .caret{display:inline-block;width:10px;color:var(--muted);transition:transform .12s}
  tr.row.open .caret{transform:rotate(90deg)}
  td.det{background:#0f0a1a;padding:0 8px 10px 8px}
  td.det table{margin-top:4px;font-size:12px}
  td.det thead th{position:static;background:#0f0a1a;cursor:default}
  td.det tbody tr{border-bottom:1px solid #1d1630}
  .bh{display:flex;align-items:baseline;justify-content:space-between;gap:10px;flex-wrap:wrap}
  .bh .hint{font-size:11px;color:var(--muted);font-weight:400;text-transform:none;letter-spacing:0}
  /* state block gets a prominent panel; federal is a compact secondary card */
  .stateblock{margin-top:16px;border:1px solid var(--edge);border-left:3px solid var(--accent);
    border-radius:10px;background:#130e20;padding:14px 16px}
  .fedbox{margin-top:14px;border:1px solid #3a2c15;border-radius:9px;background:#140d06;padding:10px 13px}
  .fedbox h3{color:var(--fed);border:0;padding:0;margin:0 0 4px;font-size:11px;text-transform:uppercase;letter-spacing:.5px}
  .fedline{display:flex;gap:18px;align-items:baseline;flex-wrap:wrap}
  .fedline b{font-size:17px;color:var(--fed);font-variant-numeric:tabular-nums}
  .fedline .u{font-size:10.5px;color:var(--muted);text-transform:uppercase;letter-spacing:.4px;margin-left:4px}
  /* click-to-open "?" explainers */
  .qmark{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border:1px solid var(--edge);
    border-radius:50%;color:var(--muted);font-size:11px;font-weight:700;cursor:pointer;margin-left:5px;vertical-align:middle}
  .qmark:hover,.qmark.on{color:#0b0710;background:var(--accent);border-color:var(--accent)}
  #pop{position:fixed;max-width:320px;background:#0a0713;border:1px solid var(--accent);border-radius:10px;padding:11px 13px;
    font-size:12px;line-height:1.5;color:var(--ink);z-index:30;box-shadow:0 10px 30px rgba(0,0,0,.6);display:none;
    font-weight:400;text-transform:none;letter-spacing:normal;white-space:pre-line}
  /* pool-mode (ISR) legislator overlay */
  .poolsec{border:1px solid #3f2f5c;border-radius:10px;padding:12px 14px;background:linear-gradient(180deg,#151020,transparent)}
  .poolsec>.bh h3{color:var(--accent)}
  body.pool .brand h1 .mk{color:var(--accent)}
  .poolamt{color:var(--accent)}
