/* pulse.css from the DatumPulse prototype (datumpulse.netlify.app), fetched 2026-09-07.
   Every selector is scoped under .pulse so it reaches only the boards that opt in.
   Do not hand-edit: re-run scratchpad/scope.cjs against a fresh pulse.css instead. */
/* ==========================================================================
   Datum Pulse — dashboard component set
   Datum Intelligence primer design system v3.1, applied to a working
   dashboard. Libre Caslon Text + Questrial. Forest is chrome, never a data
   mark. Gold is the story colour, once per board. Every delta carries an
   arrow glyph as well as colour. Gold as text ships at #7F6111.
   ========================================================================== */
.pulse{
  --green-900:#0B3D28; --green-700:#16583A; --green-500:#1E7A4E; --green-400:#3E8E68;
  --green-200:#7FBFA0; --green-050:#E7F2EC;
  --gold:#C9962F; --gold-deep:#7F6111; --gold-100:#FAF3E3; --gold-line:#EDE3CC;
  --cream:#FAF6EC; --cream-alt:#F7F1E5;
  --ink-1:#0F172A; --ink-2:#111827; --ink-3:#334155; --ink-4:#475569; --ink-5:#64748B; --ink-6:#94A3B8;
  --rule:#E2E8F0; --rule-3:#EEF0F4; --rule-4:#E8EAF0; --mist:#CBD5E1; --paper:#fff; --ground:#F4F5F8;
  --pos:#059669; --neg:#DC2626;              /* system status, fills only    */
  --pos-text:#047857; --neg-text:#B91C1C;    /* the same signals as text     */
  --warn-text:#7F6111; --warn-bg:#FAF3E3; --neg-bg:#FEF2F2; --pos-bg:#E7F2EC;
  --serif:'Libre Caslon Text','Questrial',Georgia,serif; /* Libre Caslon Text carries no rupee sign (U+20B9). Measured: the glyph
     is absent at 400 and at 700, while digits, percent, en dash and the
     multiplication sign are all present. Every serif figure on the dashboard
     was therefore drawing its rupee from whatever serif the operating system
     offered - Georgia on a Mac, something else on Windows or Android - so one
     number was set in two faces and looked different per machine. Questrial
     sits in the stack purely to supply that character. It covers all Latin in
     Caslon, so Questrial only ever answers for a glyph Caslon does not have,
     and the rupee in a heading now matches the rupee in the tables below it,
     which already run in Questrial. */
  --sans:'Questrial',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
  --rail:236px;
}
.pulse *{margin:0;padding:0;box-sizing:border-box}
.pulse{height:100%}
.pulse{font-family:var(--sans);background:var(--ground);color:var(--ink-1);font-size:13.5px;
  line-height:1.5;-webkit-font-smoothing:antialiased;min-height:100%}
.pulse a{text-decoration:none;color:inherit}
.pulse button{font-family:var(--sans)}
.pulse a:focus-visible,.pulse button:focus-visible,.pulse select:focus-visible,.pulse input:focus-visible{
  outline:2px solid var(--green-500);outline-offset:2px;border-radius:4px}

/* ---- rail ------------------------------------------------------------- */
.pulse .rail{width:var(--rail);flex-shrink:0;position:sticky;top:0;height:100vh;background:var(--paper);
  border-right:1px solid var(--rule);display:flex;flex-direction:column;overflow-y:auto}
.pulse .rail .id{display:flex;align-items:center;gap:11px;padding:16px 18px 15px;border-bottom:1px solid var(--rule)}
.pulse .plate{width:38px;height:38px;border-radius:8px;border:1px solid var(--rule);background:var(--paper);
  display:flex;align-items:center;justify-content:center;padding:5px;flex-shrink:0}
.pulse .plate img{max-width:26px;max-height:26px;width:auto;height:auto;object-fit:contain}
.pulse .idtx .nm{font-family:var(--serif);font-weight:700;font-size:14.5px;letter-spacing:-.2px;line-height:1.2}
.pulse .idtx .sb{font-size:9.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-5);margin-top:2px}
.pulse .rail .grp{padding:12px 10px 4px}
.pulse .rail .gl{font-size:9px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-5);padding:0 8px 6px}
.pulse .rail a,.pulse .rail button.nv{display:flex;align-items:center;gap:9px;width:100%;text-align:left;border:0;
  background:none;font-size:12.5px;color:var(--ink-3);padding:7px 8px 7px 11px;border-radius:6px;
  position:relative;cursor:pointer;line-height:1.3}
.pulse .rail a:hover,.pulse .rail button.nv:hover{background:var(--ground);color:var(--ink-1)}
.pulse .rail .on{background:var(--green-050);color:var(--green-700);font-weight:700}
.pulse .rail .dot{width:7px;height:7px;border-radius:50%;flex-shrink:0;background:var(--mist)}
.pulse .rail .cnt{margin-left:auto;font-size:9.5px;letter-spacing:.06em;color:var(--warn-text);background:var(--warn-bg);
  border:1px solid var(--gold-line);border-radius:10px;padding:1px 7px}
.pulse .rail .cnt.neg{color:var(--neg-text);background:var(--neg-bg);border-color:#FECDD3}
.pulse .rail .soon{color:var(--ink-6)}
.pulse .rail .soon i{margin-left:auto;font-style:normal;font-size:9px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-6)}
.pulse .rail .sub{padding:2px 0 4px 20px}
.pulse .rail .sub a,.pulse .rail .sub button.nv{font-size:11.5px;padding:5px 8px 5px 11px;color:var(--ink-4)}
.pulse .rail .sub .on{background:none;color:var(--green-700)}
.pulse .rail a .hint{margin-left:auto;font-style:normal;font-size:9.5px;color:var(--ink-6);white-space:nowrap}
/* account row: who is signed in, and the one way out. Sits last, reads quiet,
   and cannot be mistaken for navigation. */
.pulse .rail .acct{margin-top:auto;display:flex;align-items:center;gap:10px;padding:12px 16px 14px;border-top:1px solid var(--rule)}
.pulse .rail .acct .av{width:30px;height:30px;border-radius:50%;background:var(--green-050);color:var(--green-700);font-size:10.5px;
  letter-spacing:.04em;display:flex;align-items:center;justify-content:center;flex-shrink:0;font-weight:700}
.pulse .rail .acct .who{display:flex;flex-direction:column;min-width:0;line-height:1.2}
.pulse .rail .acct .who b{font-family:var(--serif);font-size:12.5px;color:var(--ink-1);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pulse .rail .acct .who small{font-size:10px;color:var(--ink-5);margin-top:2px}
.pulse .rail .acct .out{margin-left:auto;width:auto;padding:5px 9px;font-size:11px;color:var(--ink-5);border:1px solid transparent;border-radius:5px}
.pulse .rail .acct .out:hover{color:var(--neg-text);border-color:#FECDD3;background:var(--neg-bg)}

/* ---- main + board ----------------------------------------------------- */
.pulse .main{flex:1;min-width:0;padding:24px 28px 72px}
.pulse .sec{display:none;max-width:1120px}
.pulse .sec.on{display:block}
.pulse .board{background:var(--paper);border:1px solid var(--rule);border-radius:10px;overflow:hidden}
.pulse .board + .board{margin-top:18px}
.pulse .bhead{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;padding:17px 22px 14px;position:relative}
.pulse .bhead::before{content:'';position:absolute;left:22px;right:22px;bottom:0;height:1px;background:var(--rule)}
.pulse .bhead::after{content:'';position:absolute;left:22px;bottom:-1px;width:56px;height:3px;background:var(--gold)}
.pulse .ey{display:inline-flex;align-items:center;gap:10px;font-size:9.5px;letter-spacing:.18em;text-transform:uppercase;color:var(--ink-5)}
.pulse .ey::before{content:'';width:26px;height:2px;background:var(--green-500)}
.pulse .bhead h1{font-family:var(--serif);font-size:24px;font-weight:700;letter-spacing:-.3px;margin-top:8px;line-height:1.18;max-width:46ch}
.pulse .bhead h1 .g{color:var(--gold-deep)}
.pulse .chip{display:inline-flex;align-items:center;gap:7px;font-size:11px;color:var(--ink-4);border:1px solid var(--rule);
  border-radius:20px;padding:5px 12px 5px 9px;white-space:nowrap;flex-shrink:0}
.pulse .chip b{width:9px;height:9px;border-radius:50%;display:block;background:var(--green-500)}
.pulse .tabs{display:flex;gap:2px;padding:0 22px;border-bottom:1px solid var(--rule);overflow-x:auto}
.pulse .tabs button{font-size:12px;color:var(--ink-5);padding:11px 12px 9px;border:0;background:none;
  border-bottom:2px solid transparent;white-space:nowrap;cursor:pointer;margin-bottom:-1px}
.pulse .tabs button:hover{color:var(--ink-3)}
.pulse .tabs button.on{color:var(--green-700);border-bottom-color:var(--green-700);font-weight:700}

/* ---- filter / controls ------------------------------------------------ */
.pulse .filter{display:flex;align-items:center;gap:12px;padding:10px 22px;background:#FBFCFD;border-bottom:1px solid var(--rule);flex-wrap:wrap}
.pulse .dr{font-size:11.5px;color:var(--ink-3);background:var(--paper);border:1px solid var(--rule);border-radius:6px;padding:6px 11px}
.pulse .tg{display:inline-flex;align-items:center;gap:8px;font-size:11.5px;color:var(--ink-5);cursor:pointer;user-select:none;background:none;border:0}
.pulse .tg i{width:26px;height:15px;border-radius:9px;background:var(--rule);position:relative;display:block;transition:background .15s}
.pulse .tg i::after{content:'';position:absolute;top:2px;left:2px;width:11px;height:11px;border-radius:50%;background:#fff;box-shadow:0 1px 2px rgba(0,0,0,.2);transition:left .15s}
.pulse .tg.on i{background:var(--green-500)}
.pulse .tg.on i::after{left:13px}
.pulse .tg.on{color:var(--ink-3)}
.pulse .fresh{font-size:10.5px;color:var(--ink-5);white-space:nowrap}
.pulse .dl-bar{margin-left:auto;display:flex;align-items:center;gap:7px}
.pulse .dl-btn{display:inline-flex;align-items:center;gap:6px;font-size:11px;color:var(--ink-4);background:var(--paper);
  border:1px solid var(--rule);border-radius:5px;padding:5px 10px;cursor:pointer}
.pulse .dl-btn:hover{border-color:var(--green-700);color:var(--green-700)}
.pulse .dl-btn svg{width:12px;height:12px}
.pulse .seg{display:inline-flex;border:1px solid var(--rule);border-radius:6px;overflow:hidden;background:var(--paper)}
.pulse .seg button{font-size:11.5px;color:var(--ink-4);background:none;border:0;border-right:1px solid var(--rule);padding:6px 11px;cursor:pointer;white-space:nowrap}
.pulse .seg button:last-child{border-right:0}
.pulse .seg button:hover{color:var(--ink-1);background:var(--ground)}
.pulse .seg button.on{background:var(--green-700);color:#fff}
.pulse .seg button:disabled{color:var(--ink-6);cursor:not-allowed;background:none}
.pulse .chips{display:inline-flex;gap:6px;flex-wrap:wrap}
.pulse .chipt{display:inline-flex;align-items:center;gap:6px;font-size:11.5px;color:var(--ink-4);background:var(--paper);
  border:1px solid var(--rule);border-radius:20px;padding:4px 11px 4px 8px;cursor:pointer;user-select:none}
.pulse .chipt b{width:8px;height:8px;border-radius:2px;display:block;background:var(--mist)}
.pulse .chipt.on{border-color:var(--green-700);color:var(--green-700);background:var(--green-050)}
.pulse .chipt.off{opacity:.55}
.pulse .chipt.off b{background:var(--rule)!important}
.pulse .fl{font-size:9.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-5);margin-right:2px}
.pulse select.sel{font-family:var(--sans);font-size:11.5px;color:var(--ink-3);background:var(--paper);border:1px solid var(--rule);
  border-radius:6px;padding:6px 28px 6px 10px;appearance:none;-webkit-appearance:none;cursor:pointer;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' fill='none' stroke='%2364748B' stroke-width='1.5'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 10px center}
.pulse input.srch{font-family:var(--sans);font-size:11.5px;color:var(--ink-3);background:var(--paper);border:1px solid var(--rule);border-radius:6px;padding:6px 10px;min-width:200px}

/* ---- KPI row ---------------------------------------------------------- */
.pulse .kpis{display:grid;grid-template-columns:repeat(7,1fr);border-bottom:1px solid var(--rule)}
.pulse .kpis.k4{grid-template-columns:repeat(4,1fr)}
.pulse .kpis.k5{grid-template-columns:repeat(5,1fr)}
.pulse .kpis.k6{grid-template-columns:repeat(6,1fr)}
.pulse .kpi{padding:13px 14px 14px;border-right:1px solid var(--rule-3);min-width:0}
.pulse .kpi:last-child{border-right:0}
.pulse .kl{font-size:9px;letter-spacing:.11em;text-transform:uppercase;color:var(--ink-5);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pulse .kv{font-family:var(--serif);font-size:19px;font-weight:700;letter-spacing:-.4px;margin-top:6px;font-variant-numeric:tabular-nums;white-space:nowrap}
.pulse .kv small{font-family:var(--sans);font-size:10.5px;font-weight:400;color:var(--ink-5);letter-spacing:0;margin-left:4px}
.pulse .kd{font-size:10.5px;margin-top:4px;font-variant-numeric:tabular-nums;white-space:nowrap;color:var(--ink-5)}
.pulse .kr{font-size:10px;margin-top:3px;color:var(--ink-5);white-space:nowrap;font-variant-numeric:tabular-nums}
.pulse .kr .dlt{display:inline;margin-left:4px;font-size:10px}
.pulse.nodelta .dlt,.pulse.nodelta .kd{visibility:hidden}

/* ---- exhibit ---------------------------------------------------------- */
.pulse .exhibit{padding:16px 22px 15px}
.pulse .exhibit + .exhibit{border-top:1px solid var(--rule-3)}
.pulse .exnum{font-size:9.5px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-5)}
.pulse .extitle{font-family:var(--serif);font-size:15px;font-weight:700;margin-top:3px}
.pulse .exun{float:right;font-family:var(--sans);font-size:10.5px;font-weight:400;color:var(--ink-5)}
.pulse .exrule{height:1.5px;background:var(--ink-1);margin-top:7px}
.pulse .bar{display:flex;height:34px;border-radius:4px;overflow:hidden;margin-top:13px}
.pulse .bar span{display:flex;align-items:center;justify-content:center;font-size:11.5px;color:#fff;letter-spacing:.02em;overflow:hidden;white-space:nowrap;text-shadow:0 1px 1px rgba(0,0,0,.28)}
.pulse .bar span + span{box-shadow:inset 1px 0 0 #fff}
.pulse .bar span.dk{color:var(--ink-1);text-shadow:none}
.pulse .leg{display:flex;gap:16px;flex-wrap:wrap;margin-top:10px}
.pulse .leg i{display:inline-flex;align-items:center;gap:6px;font-style:normal;font-size:10.5px;color:var(--ink-4)}
.pulse .leg b{width:9px;height:9px;border-radius:2px;display:block}
.pulse .chartwrap{position:relative;height:280px;margin-top:12px}
.pulse .two{display:grid;grid-template-columns:1fr 1fr;gap:0}
.pulse .two > .exhibit:first-child{border-right:1px solid var(--rule-3)}
.pulse .two > .exhibit + .exhibit{border-top:0}

/* ---- tables ----------------------------------------------------------- */
.pulse .tscroll{overflow-x:auto}
.pulse table.dtab{width:100%;border-collapse:collapse}
.pulse table.dtab th{background:var(--green-700);color:#fff;font-size:9px;letter-spacing:.11em;text-transform:uppercase;font-weight:400;
  text-align:right;padding:0 14px;height:31px;white-space:nowrap}
.pulse table.dtab th:first-child{text-align:left}
.pulse table.dtab td{padding:9px 14px 10px;border-bottom:1px solid var(--rule-3);font-size:12px;color:var(--ink-4);text-align:right;
  font-variant-numeric:tabular-nums;vertical-align:top;white-space:nowrap}
.pulse table.dtab td.nm{text-align:left;font-family:var(--serif);font-weight:700;color:var(--ink-1);font-size:13px}
.pulse table.dtab td.nm small{display:block;font-family:var(--sans);font-weight:400;font-size:10.5px;color:var(--ink-5);margin-top:1px}
.pulse table.dtab td .fig{font-family:var(--serif);font-weight:700;color:var(--ink-1);font-size:12.5px}
.pulse table.dtab td .fig.dim{color:var(--ink-6);font-weight:400;font-family:var(--sans)}
.pulse table.dtab td .dlt{display:block;font-size:9.5px;margin-top:3px;letter-spacing:.01em}
.pulse table.dtab tbody tr.lnk:hover td{background:var(--ground);cursor:pointer}
.pulse table.dtab tbody tr.lnk:hover td.nm{color:var(--green-700)}
.pulse .pd{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:9px;vertical-align:1px}
.pulse table.dtab.clean{margin-top:6px}
.pulse table.dtab.clean th{background:none;color:var(--ink-5);height:28px;padding:0 10px;border-bottom:1px solid var(--ink-1)}
.pulse table.dtab.clean td{padding:10px 10px;border-bottom:1px solid var(--rule-3);font-size:13px;color:var(--ink-1)}
.pulse table.dtab.clean td .fig{font-weight:400;font-size:13.5px}
.pulse table.dtab.clean td.nm{font-size:13px}
.pulse table.dtab.clean tr.tot td{background:none;border-top:1.5px solid var(--ink-1);border-bottom:0;padding-top:12px}
.pulse table.dtab.clean tr.tot td .fig{font-weight:700;font-size:14px}
.pulse table.dtab.clean tr.tot td.nm{color:var(--ink-1)}
.pulse table.dtab.clean td .dlt{display:inline;font-size:12.5px;margin:0}
.pulse table.dtab tr.tot td{background:var(--cream);border-top:2px solid var(--green-700);border-bottom:0}
.pulse table.dtab tr.tot td .fig{font-size:13.5px}
.pulse table.dtab tr.tot td.nm{color:var(--green-700)}
.pulse table.dtab tr.sel td.nm{background:var(--green-050);color:var(--green-700)}
.pulse .heat td.h{color:var(--ink-1)}
.pulse .h0{background:#fff}
.pulse .h1{background:#E7F2EC}
.pulse .h2{background:#C9E3D3}
.pulse .h3{background:#9CCBB0;}
.pulse .h4{background:#5FA983;color:#fff!important}
.pulse .h5{background:#2F7F57;color:#fff!important}
.pulse .h6{background:#0B3D28;color:#fff!important}
.pulse td.out{background:var(--neg-bg);color:var(--neg-text)!important;font-weight:700}
.pulse td.low{background:var(--warn-bg);color:var(--warn-text)!important;font-weight:700}
.pulse td.na{color:var(--ink-6)!important}

/* ---- takeaway, basis, caveat ------------------------------------------- */
.pulse .take{display:flex;align-items:stretch;margin:14px 22px 0;background:var(--cream);border-radius:8px;overflow:hidden}
.pulse .take .tk{display:flex;align-items:center;padding:0 16px;background:var(--green-700);color:#fff;font-size:9.5px;letter-spacing:.18em;text-transform:uppercase;white-space:nowrap}
.pulse .take .tx{padding:11px 16px 12px;font-size:12.5px;line-height:1.5;color:var(--ink-2)}
.pulse .take .tx b{font-family:var(--serif);font-weight:700;color:#000}
.pulse .basis{display:grid;grid-template-columns:repeat(4,1fr);margin:16px 0 0;border-top:1px solid var(--rule);background:#FBFCFD}
.pulse .basis div{padding:11px 22px 12px;border-right:1px solid var(--rule-3)}
.pulse .basis div:last-child{border-right:0}
.pulse .basis dt{font-size:9px;letter-spacing:.11em;text-transform:uppercase;color:var(--ink-5)}
.pulse .basis dd{font-size:11.5px;color:var(--ink-3);margin-top:4px;line-height:1.4}
.pulse .caveat{display:block;padding:12px 22px 14px;border-top:1px solid var(--rule-3);background:var(--cream);font-size:11.5px;line-height:1.55;color:var(--ink-2)}
.pulse .caveat b{font-family:var(--serif);font-weight:700;color:var(--gold-deep);white-space:nowrap}

/* ---- inventory pieces -------------------------------------------------- */
.pulse .pcards{display:grid;grid-template-columns:repeat(3,1fr);gap:0;border-bottom:1px solid var(--rule)}
.pulse .pcard{padding:14px 18px 12px;border-right:1px solid var(--rule-3);display:grid;grid-template-columns:1fr auto;gap:4px 14px;align-items:center}
.pulse .pcard:last-child{border-right:0}
.pulse .pcard .pn{font-family:var(--serif);font-weight:700;font-size:14px;display:flex;align-items:center;gap:8px}
.pulse .pcard .pn b{width:9px;height:9px;border-radius:50%;display:block}
.pulse .pcard .pv{font-family:var(--serif);font-weight:700;font-size:20px;letter-spacing:-.4px;font-variant-numeric:tabular-nums}
.pulse .pcard .pv small{font-family:var(--sans);font-size:10.5px;font-weight:400;color:var(--ink-5);letter-spacing:0;margin-left:5px}
.pulse .pcard .pm{font-size:10.5px;color:var(--ink-5);grid-column:1/-1}
.pulse .pcard svg{grid-row:1/3;width:96px;height:36px}
.pulse .alist{display:grid;grid-template-columns:1fr 1fr;gap:8px;padding:14px 22px 6px}
.pulse .alist.one{grid-template-columns:1fr}
.pulse .al{display:grid;grid-template-columns:auto 1fr auto;gap:3px 12px;align-items:center;padding:9px 12px 9px 12px;border:1px solid var(--rule);border-radius:7px;background:var(--paper)}
.pulse .al .sv{width:8px;height:8px;border-radius:50%;grid-column:1;grid-row:1}
.pulse .al .an{grid-column:2;grid-row:1}
.pulse .al.crit .sv{background:var(--neg)}
.pulse .al.warn .sv{background:var(--gold)}
.pulse .al.ok .sv{background:var(--pos)}
.pulse .al .an{font-family:var(--serif);font-weight:700;font-size:12.5px}
.pulse .al .ad{grid-column:2;grid-row:2;font-size:11px;color:var(--ink-4);line-height:1.4}
.pulse .al .ac{grid-column:3;grid-row:1/3;font-size:9.5px;letter-spacing:.1em;text-transform:uppercase;padding:3px 8px;border-radius:3px;border:1px solid var(--rule);color:var(--ink-4)}
.pulse .al.crit .ac{color:var(--neg-text);border-color:#FECDD3;background:var(--neg-bg)}
.pulse .al.warn .ac{color:var(--warn-text);border-color:var(--gold-line);background:var(--warn-bg)}
.pulse .al.ok .ac{color:var(--green-700);border-color:#BFDCCB;background:var(--pos-bg)}
.pulse .cov{display:inline-flex;align-items:center;gap:8px;justify-content:flex-end}
.pulse .cov i{width:64px;height:6px;border-radius:3px;background:var(--rule);display:block;overflow:hidden}
.pulse .cov i b{display:block;height:100%;background:var(--green-500)}
.pulse .cov.z i b{background:var(--neg)}
.pulse .note{padding:10px 22px 14px;font-size:11px;color:var(--ink-5);line-height:1.5}
.pulse .empty{padding:26px 22px;font-size:12.5px;color:var(--ink-5)}

/* ==========================================================================
   EDITORIAL PASS, 2 Sep 2026. Satish: "too boxy and table".
   Containers go, rules go, whitespace does the structuring. Everything
   below overrides the component defaults above; edit here, not there.
   ========================================================================== */
.pulse{background:var(--paper)}
.pulse .main{padding:30px 44px 22px;background:var(--paper)}
.pulse .sec{max-width:1040px}
.pulse .board{background:none;border:0;border-radius:0;overflow:visible}
.pulse .board + .board{margin-top:48px}
.pulse .bhead{padding:4px 0 18px}
.pulse .bhead::before{display:none}
.pulse .bhead::after{left:0;bottom:0;width:48px;height:2px}
.pulse .bhead h1{font-size:28px;margin-top:10px}
.pulse .chip{border:0;padding:0;color:var(--ink-5);font-size:11px;margin-top:6px}
.pulse .tabs{padding:0;border-bottom:1px solid var(--rule)}
.pulse .tabs button:first-child{padding-left:0}
.pulse .filter{background:none;border:0;padding:14px 0 6px;gap:14px}
.pulse .filter + .filter{padding-top:0}
.pulse .dr{background:none;border:0;padding:0;font-size:12px;color:var(--ink-3)}
.pulse .fresh{color:var(--ink-6)}
.pulse .dl-btn{border-color:transparent;color:var(--ink-5);padding:4px 6px}
.pulse .dl-btn:hover{border-color:var(--rule);color:var(--ink-1)}
.pulse .kpis{border:0;gap:32px;padding:20px 0 4px}
.pulse .kpi{border:0;padding:0}
.pulse .kpis.k4 .kpi:nth-child(4){border:0}

/* exhibits */
.pulse .exhibit{padding:34px 0 6px}
.pulse .exhibit + .exhibit{border:0}
.pulse .exhibit.tight{padding-bottom:0}
.pulse .exrule{height:1px}
.pulse .two{gap:44px}
.pulse .two > .exhibit:first-child{border:0}
.pulse .chartwrap{margin-top:14px}

/* tables: one rule under the head, one above the total, nothing else */
.pulse .tscroll.inset{padding:0}
.pulse table.dtab th{background:none;color:var(--ink-5);height:30px;padding:0 10px;border-bottom:1px solid var(--ink-1);font-size:9px}
.pulse table.dtab th:first-child{padding-left:0}
.pulse table.dtab td{padding:10px 10px;border-bottom:1px solid #F3F4F7;font-size:13px;color:var(--ink-1)}
.pulse table.dtab td.nm{padding-left:0}
.pulse table.dtab td .fig{font-weight:400;font-size:13.5px}
.pulse table.dtab tr.tot td{background:none;border-top:1px solid var(--ink-1);border-bottom:0;padding-top:12px}
.pulse table.dtab tr.tot td .fig{font-weight:700;font-size:14px}
.pulse table.dtab tr.tot td.nm{color:var(--ink-1)}
.pulse table.dtab tbody tr.lnk:hover td{background:none}
.pulse table.dtab td .dlt{font-size:12.5px}
.pulse .heat td.h,.pulse .heat td.out,.pulse .heat td.low{padding:9px 10px}

/* takeaway, basis, caveat: paragraphs, not panels */
.pulse .take{display:block;background:none;margin:30px 0 0;border-radius:0;max-width:78ch}
.pulse .take .tk{display:block;padding:0;background:none;color:var(--green-500);font-size:9.5px;letter-spacing:.18em}
.pulse .take .tk::before{content:'';display:inline-block;width:26px;height:2px;background:var(--green-500);margin-right:10px;vertical-align:3px}
.pulse .take .tx{padding:8px 0 0;font-family:var(--sans);font-size:13.5px;line-height:1.65;color:var(--ink-2);
  max-width:88ch}
.pulse .take .tx b{font-family:var(--serif);font-weight:700;color:var(--green-700)}
.pulse .take .tx b{color:var(--gold-deep)}
.pulse .basis{display:flex;flex-wrap:wrap;gap:4px 26px;background:none;border-top:1px solid var(--rule);margin:30px 0 0;padding:12px 0 0}
.pulse .basis div{padding:0;border:0;display:inline-flex;gap:6px;align-items:baseline}
.pulse .basis dt{font-size:9px}
.pulse .basis dd{margin:0;font-size:11px;color:var(--ink-4)}
.pulse .caveat{background:none;border:0;padding:8px 0 0;font-size:11.5px;color:var(--ink-3);max-width:80ch}
.pulse .note{padding:10px 0 0}
.pulse .empty{padding:20px 0}

/* inventory pieces */
.pulse .pcards{border:0;gap:32px;padding:14px 0 0}
.pulse .pcard{padding:0;border:0}
.pulse .alist{padding:14px 0 0;gap:0}
.pulse .al{border:0;border-bottom:1px solid #F3F4F7;border-radius:0;padding:11px 0}
.pulse .al .ac{border-color:transparent}
.pulse .al.crit .ac,.pulse .al.warn .ac,.pulse .al.ok .ac{border-color:transparent}

/* delta pills: the signal sits on a soft tint, the arrow still carries direction */
.pulse .dlt,.pulse .kd{display:inline-block;padding:1px 6px 1px 5px;border-radius:3px;line-height:1.5}
.pulse .dlt[style*="#047857"],.pulse .kd[style*="#047857"]{background:var(--pos-bg)}
.pulse .dlt[style*="#B91C1C"],.pulse .kd[style*="#B91C1C"]{background:var(--neg-bg)}
.pulse table.dtab td .dlt{display:inline-block}
/* the change pill reads in the same face and size as the figures beside it */
.pulse table.dtab td .dlt{font-family:var(--serif);font-weight:700;font-size:13px;letter-spacing:-.1px}
.pulse table.dtab tr.tot td .dlt{font-size:13.5px}

/* the table is closed top and bottom: a hairline above the column labels, the
   dark rule under them, and a hairline under the total row */
.pulse .pnl table.dtab thead th{border-top:1px solid var(--rule-3);height:30px;font-size:10px;letter-spacing:.10em;
  font-family:var(--serif);font-weight:700;color:var(--ink-4)}
.pulse .pnl table.dtab tr.tot td{border-bottom:1px solid var(--rule-3);padding-bottom:12px}

/* green header band, shared by the overview table and platform compare.
   White label on green, so no ink colour rule may reach these cells. */
.pulse .pnl table.dtab.v1 thead th,.pulse .pnl table.dtab.exec thead th{
  background:var(--green-700);color:#fff;border:0;height:32px;
  font-family:var(--serif);font-weight:700;font-size:10px;letter-spacing:.10em}
.pulse .pnl table.dtab.exec thead th{padding:0 10px}
.pulse .pnl table.dtab.exec thead th:first-child{padding-left:0;text-align:left}
.pulse .pnl table.dtab.exec thead th:first-child{padding-left:12px}
.pulse .pnl table.dtab.exec td.nm{padding-left:12px}
.pulse .pnl table.dtab.exec thead th:last-child{padding-right:12px}
.pulse .pnl table.dtab.exec td:last-child{padding-right:12px}

/* Both numbers tables run in Questrial, on Satish's call 2 Sep 2026.
   Reason it matters: the vendored Libre Caslon Text subsets do not carry
   U+20B9, so every rupee sign was falling back to Georgia and sitting next to
   Caslon digits inside the same figure. Questrial carries the glyph, so symbol
   and digits are one font. Questrial has no bold, so weight stays 400
   everywhere here and the total row is marked by colour and rule instead. */
.pulse .pnl table.dtab.exec thead th,.pulse .pnl table.dtab.v1 thead th{
  font-family:var(--sans);font-weight:400;font-size:9.5px;letter-spacing:.13em}
.pulse .pnl table.dtab.exec td.nm,.pulse .pnl table.dtab.exec td .fig,.pulse .pnl table.dtab.exec td .dlt,.pulse .pnl table.dtab.v1 td.nm,.pulse .pnl table.dtab.v1 td .fig,.pulse .pnl table.dtab.v1 td .dlt{
  font-family:var(--sans);font-weight:400;letter-spacing:0}
.pulse .pnl table.dtab.exec td.nm{font-size:12.5px;color:var(--ink-1)}
.pulse .pnl table.dtab.exec td .fig{font-size:12.5px}
.pulse .pnl table.dtab.exec td .dlt{font-size:12px}
.pulse .pnl table.dtab.v1 td.nm{font-size:12.5px}
.pulse .pnl table.dtab.v1 td .fig{font-size:12.5px}
/* the total row carries weight, a ground of its own and a rule top and bottom */
.pulse .pnl table.dtab.exec tr.tot td,.pulse .pnl table.dtab.v1 tr.tot td{
  border-top:1.5px solid var(--ink-1);border-bottom:1px solid var(--rule);
  background:var(--cream)!important}
.pulse .pnl table.dtab.exec tr.tot td:first-child{border-radius:5px 0 0 5px}
.pulse .pnl table.dtab.exec tr.tot td:last-child{border-radius:0 5px 5px 0}
.pulse .pnl table.dtab.exec tr.tot td.nm,.pulse .pnl table.dtab.exec tr.tot td .fig,.pulse .pnl table.dtab.exec tr.tot td .dlt,.pulse .pnl table.dtab.v1 tr.tot td.nm,.pulse .pnl table.dtab.v1 tr.tot td .fig{
  font-weight:700;color:var(--ink-1);font-size:13px}
.pulse .pnl .cap .sub{max-width:none;white-space:normal}



/* spacing: the caption needs air above the header band, and the rows sit on a
   single rhythm rather than three different paddings */
.pulse .pnl .cap{margin-bottom:2px}
.pulse .pnl .tscroll{margin-top:13px}
.pulse .pnl table.dtab.exec thead th{height:34px}
.pulse .pnl table.dtab.exec thead th:first-child{border-radius:5px 0 0 5px}
.pulse .pnl table.dtab.exec thead th:last-child{border-radius:0 5px 5px 0}
.pulse .pnl table.dtab.exec td{padding:9px 10px}
.pulse .pnl table.dtab.exec tbody tr:first-child td{padding-top:11px}
.pulse .pnl table.dtab.exec tr.tot td{padding-top:13px;padding-bottom:12px}

/* the chart legend is names only and sits left, not stretched across the panel */
.pulse #pcLeg.leg.wide,.pulse #prLeg.leg.wide,.pulse #azLeg1.leg.wide,.pulse #azLeg2.leg.wide{display:flex;flex-wrap:wrap;gap:6px 20px;margin-top:10px}
.pulse #pcLeg.leg.wide i,.pulse #prLeg.leg.wide i,.pulse #azLeg1.leg.wide i,.pulse #azLeg2.leg.wide i{font-family:var(--sans);font-weight:400;font-size:11px;color:var(--ink-4);white-space:nowrap}
.pulse #pcLeg.leg.wide i b,.pulse #prLeg.leg.wide i b,.pulse #azLeg1.leg.wide i b,.pulse #azLeg2.leg.wide i b{width:8px;height:8px;border-radius:2px}

/* platform picker above the exhibits on platform compare */
.pulse .pickrow{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:12px}
.pulse .pickrow .pkl{font-size:9px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-5);flex-shrink:0}
.pulse .pickrow .chips{gap:6px}
.pulse .pickrow .chipt{font-family:var(--sans);font-size:11px;padding:4px 10px 4px 8px;border-radius:14px}
.pulse .pickrow .chipt b{border-radius:50%}
.pulse .pickrow .pkall{background:none;border:0;font-family:var(--sans);font-size:10.5px;
  color:var(--green-700);cursor:pointer;padding:4px 2px;border-bottom:1px solid transparent;margin-left:2px}
.pulse .pickrow .pkall[hidden]{display:none}

/* more than five options: one scrolling strip rather than a wrapping block */
.pulse .scroller{position:relative;display:flex;align-items:center;min-width:0;flex:1}
.pulse .chips.scroll{flex-wrap:nowrap;overflow-x:auto;scroll-behavior:smooth;padding:2px 0;
  scrollbar-width:none;-ms-overflow-style:none;
  -webkit-mask-image:linear-gradient(90deg,transparent 0,#000 14px,#000 calc(100% - 14px),transparent 100%);
  mask-image:linear-gradient(90deg,transparent 0,#000 14px,#000 calc(100% - 14px),transparent 100%)}
.pulse .chips.scroll::-webkit-scrollbar{display:none}
.pulse .chips.scroll .chipt{flex-shrink:0}
.pulse .sarr{position:absolute;top:50%;transform:translateY(-50%);z-index:2;width:20px;height:20px;
  display:flex;align-items:center;justify-content:center;border:1px solid var(--rule);border-radius:50%;
  background:var(--paper);color:var(--ink-4);cursor:pointer;padding:0}
.pulse .sarr svg{width:7px;height:11px}
.pulse .sarr:hover{border-color:var(--green-700);color:var(--green-700)}
.pulse .sarr[hidden]{display:none}
.pulse .sarr.l{left:-4px}
.pulse .sarr.r{right:-4px}
.pulse .pickrow .pkall:hover{border-bottom-color:var(--green-700)}
.pulse .pickrow + .pnl{margin-top:12px}
.pulse .pill.mute{opacity:.55}
.pulse #pcPop{right:0}
.pulse .pnl table.dtab td .fig,.pulse .pnl table.dtab td .dlt{font-variant-numeric:tabular-nums}
.pulse .pnl table.dtab td.nm{font-size:13px}
.pulse .pnl .cap .sub{font-family:var(--serif);font-weight:400;font-size:11.5px;line-height:1.5;max-width:74ch;color:var(--ink-5)}
.pulse .kd{margin-top:6px}



/* ==========================================================================
   OVERVIEW, 2 Sep 2026. Shape from Plausible (metric strip drives one big
   chart, two panels below) and Baremetrics (a breakdown column beside the
   chart). Datum palette, Caslon + Questrial, no boxes: one rule under the
   strip, one soft cream surface for insights, whitespace does the rest.
   ========================================================================== */
.pulse .ovhead{display:flex;align-items:flex-end;justify-content:space-between;gap:20px;padding:2px 0 14px}
.pulse .ovhead h1{font-family:var(--serif);font-size:26px;font-weight:700;letter-spacing:-.4px;line-height:1.15;margin-top:8px;max-width:40ch}
.pulse .ovhead h1 .g{color:var(--gold-deep)}
.pulse .ovhead .ctl{display:flex;align-items:center;gap:8px;flex-shrink:0;padding-bottom:4px}

/* metric strip: click a metric, the chart follows. Active metric carries a
   forest top rule, the rest sit quiet. */
.pulse .mstrip{display:grid;grid-template-columns:repeat(6,1fr);border-top:1px solid var(--rule);border-bottom:1px solid var(--rule)}
.pulse .mstrip button{text-align:left;background:none;border:0;border-top:2px solid transparent;margin-top:-1px;padding:14px 16px 14px 0;cursor:pointer;min-width:0}
.pulse .mstrip button + button{padding-left:16px}
.pulse .mstrip button:hover .ml{color:var(--ink-3)}
.pulse .mstrip button.on{border-top-color:var(--green-700)}
.pulse .mstrip .ml{font-size:9.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-5);white-space:nowrap}
.pulse .mstrip .mv{font-family:var(--serif);font-size:24px;font-weight:700;letter-spacing:-.6px;margin-top:6px;font-variant-numeric:tabular-nums;white-space:nowrap;color:var(--ink-1)}
.pulse .mstrip button.on .mv{color:var(--green-900)}
.pulse .mstrip .md{margin-top:6px;font-size:10.5px;color:var(--ink-5);display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.pulse .mstrip .md .dlt{margin:0}
.pulse .ovchart{padding:22px 0 8px}
.pulse .ovchart .cap{display:flex;align-items:baseline;justify-content:space-between;gap:16px}
.pulse .ovchart .cap h2{font-family:var(--serif);font-size:15px;font-weight:700}
.pulse .ovchart .cap .un{font-size:10.5px;color:var(--ink-5)}
.pulse .ovchart .chartwrap{height:300px;margin-top:10px}
.pulse .ovchart .leg{margin-top:12px}
.pulse .ovchart .leg i{cursor:pointer;padding:3px 8px 3px 6px;border-radius:14px;border:1px solid transparent}
.pulse .ovchart .leg i:hover{border-color:var(--rule)}
.pulse .ovchart .leg i.off{opacity:.45}
.pulse .ovgrid{display:grid;grid-template-columns:1.25fr 1fr;gap:40px;margin-top:30px;align-items:start}
.pulse .panel h2{font-family:var(--serif);font-size:15px;font-weight:700}
.pulse .panel .sub{font-size:10.5px;color:var(--ink-5);margin-top:2px}
.pulse .plist{margin-top:12px}
.pulse .plist .p{display:grid;grid-template-columns:110px 1fr 104px 74px;align-items:center;gap:14px;padding:9px 0;cursor:pointer}
.pulse .plist .p + .p{border-top:1px solid var(--rule-3)}
.pulse .plist .p:hover .pn{color:var(--green-700)}
.pulse .plist .pn{font-family:var(--serif);font-weight:700;font-size:13px;display:flex;align-items:center;gap:9px;white-space:nowrap}
.pulse .plist .pb{height:10px;background:var(--rule-3);border-radius:2px;overflow:hidden}
.pulse .plist .pb b{display:block;height:100%;border-radius:2px}
.pulse .plist .pv{text-align:right;font-family:var(--serif);font-size:13px;font-variant-numeric:tabular-nums}
.pulse .plist .pv small{display:block;font-family:var(--sans);font-size:10px;color:var(--ink-5)}
.pulse .plist .pc{text-align:right;font-size:11px}
.pulse .plist .pc .dlt{font-size:10.5px}
.pulse .plist .tot{border-top:1px solid var(--ink-1);margin-top:2px;padding-top:10px;cursor:default}
.pulse .plist .tot .pn{color:var(--ink-1)}

/* insights: the founder's column. One soft surface, four labelled sentences. */
.pulse .ins{background:var(--cream);border-radius:10px;padding:20px 22px 18px}
.pulse .ins h2{font-family:var(--serif);font-size:15px;font-weight:700}
.pulse .ins .sub{font-size:10.5px;color:var(--ink-5);margin-top:2px}
.pulse .ins ol{list-style:none;margin-top:14px}
.pulse .ins li{padding:11px 0;border-top:1px solid var(--gold-line)}
.pulse .ins li:first-child{border-top:0;padding-top:4px}
.pulse .ins .il{font-size:9.5px;letter-spacing:.16em;text-transform:uppercase;color:var(--green-500)}
.pulse .ins .it{font-family:var(--serif);font-size:13.5px;line-height:1.5;color:var(--ink-1);margin-top:4px}
.pulse .ins .it b{color:var(--gold-deep);font-weight:700}
.pulse .ins .cv{margin-top:12px;padding-top:12px;border-top:1px solid var(--gold-line);font-size:11px;line-height:1.5;color:var(--ink-4)}
.pulse .ins .cv b{font-family:var(--serif);color:var(--ink-1)}
.pulse .ovfoot{display:flex;flex-wrap:wrap;gap:4px 24px;margin-top:28px;padding-top:10px;border-top:1px solid var(--rule);font-size:10.5px;color:var(--ink-5)}
.pulse .ovfoot b{font-weight:400;color:var(--ink-3)}
@media(max-width:1100px){
.pulse .mstrip{grid-template-columns:repeat(3,1fr)}
.pulse .ovgrid{grid-template-columns:1fr}}


/* ==========================================================================
   PANELS, 2 Sep 2026. Satish: "add some bg and borders". Light ground, white
   panels with a hairline border, the way Plausible and Baremetrics sit their
   content. Still no vertical accent bars.
   ========================================================================== */
.pulse,.pulse .main{background:var(--ground)}
.pulse .rail{background:var(--paper)}
.pulse .pnl{background:var(--paper);border:1px solid var(--rule);border-radius:10px;padding:18px 22px}
.pulse .pnl + .pnl,.pulse .pnl + .ovgrid,.pulse .ovgrid + .ovfoot{margin-top:16px}
/* metric cards: rounded, white, the active one on a forest wash */
.pulse .mstrip{display:grid;grid-template-columns:repeat(6,1fr);gap:12px;border:0}
.pulse .mstrip button{background:var(--paper);border:1px solid var(--rule);border-radius:10px;padding:16px 18px 15px;margin:0;
  transition:border-color .15s,background .15s}
.pulse .mstrip button + button{padding-left:18px}
.pulse .mstrip button:hover{border-color:var(--mist)}
.pulse .mstrip button.on{background:var(--green-050);border-color:var(--green-500)}
.pulse .mstrip button.on .ml{color:var(--green-700)}
.pulse .mstrip .md{margin-top:8px}
.pulse .mstrip + .pnl{margin-top:16px}
.pulse .ovhead{padding-bottom:16px}
.pulse .ovchart{padding:18px 22px 16px}
.pulse .ovchart .cap{display:flex;align-items:flex-start;justify-content:space-between}
.pulse .ovchart .cap .un{display:block;margin-top:2px}
.pulse .ovchart{padding:16px 22px 12px}
.pulse .ovchart .chartwrap{height:210px;margin-top:6px}
.pulse .ovchart .leg{margin-top:6px}
.pulse .ovgrid{margin-top:16px;gap:16px}
.pulse .ins{padding:20px 22px 18px;background:var(--cream);border-color:var(--gold-line)}
.pulse .ovfoot{border-top:0;padding-top:4px}
.pulse .sec{max-width:1120px}

/* the table view: the shape Satish pointed at. Forest header band, figure
   over its delta, cream total row. */
.pulse #ovTableBox .tscroll{margin:14px -22px -16px;border-radius:0 0 10px 10px;overflow:hidden}
.pulse table.dtab.v1{width:100%;table-layout:auto}
.pulse table.dtab.v1 td,.pulse table.dtab.v1 th{white-space:nowrap}
.pulse table.dtab.v1 th{background:var(--green-700);color:#fff;height:34px;padding:0 16px;font-size:9.5px;border:0}
.pulse table.dtab.v1 th:first-child{padding-left:22px;text-align:left}
.pulse table.dtab.v1 td{padding:10px 16px 11px;border-bottom:1px solid var(--rule-3);font-size:12px;text-align:right;vertical-align:top;background:none}
.pulse table.dtab.v1 td.nm{padding-left:22px;font-size:13.5px;font-family:var(--serif);font-weight:700;text-align:left}
.pulse table.dtab.v1 td .fig{font-family:var(--serif);font-weight:700;font-size:13.5px;color:var(--ink-1)}
.pulse table.dtab.v1 td .dlt{display:block;font-size:10.5px;margin-top:4px;padding:0;background:none}
.pulse table.dtab.v1 tbody tr:nth-child(even) td{background:#FBFCFD}
.pulse table.dtab.v1 tbody tr.lnk:hover td{background:var(--green-050)}
.pulse table.dtab.v1 tr.tot td{background:var(--cream)!important;border-top:2px solid var(--green-700);border-bottom:0;padding-top:11px}
.pulse table.dtab.v1 tr.tot td.nm{color:var(--green-700)}
.pulse table.dtab.v1 tr.tot td .fig{font-size:14px}


/* ==========================================================================
   RAIL, 2 Sep 2026. Satish: better type, and a background. Forest is chrome,
   so the rail takes the deep green; items set in Caslon at 14px, labels in
   Questrial small caps. Still no accent bars: the active item is a wash.
   ========================================================================== */
.pulse{--rail:248px}
.pulse .rail{background:var(--green-900);border-right:0;color:#fff}
.pulse .rail .id{border-bottom:1px solid rgba(255,255,255,.12);padding:18px 20px 16px}
.pulse .rail .plate{border-color:rgba(255,255,255,.18);background:#fff}
.pulse .rail .idtx .nm{color:#fff;font-size:15px}
.pulse .rail .idtx .sb{color:var(--green-200)}
.pulse .rail .grp{padding:16px 12px 6px}
.pulse .rail .gl{font-size:10px;letter-spacing:.18em;color:var(--green-200);padding:0 10px 8px;opacity:.85}
.pulse .rail a,.pulse .rail button.nv{font-family:var(--sans);font-size:12px;color:rgba(255,255,255,.86);padding:7px 10px 7px 12px;gap:10px;border-radius:7px}
.pulse .rail a:hover,.pulse .rail button.nv:hover{background:rgba(255,255,255,.08);color:#fff}
.pulse .rail .on{background:rgba(255,255,255,.14);color:#fff;font-weight:700}
.pulse .rail .dot{width:8px;height:8px;box-shadow:0 0 0 2px rgba(255,255,255,.08)}
.pulse .rail .cnt{color:#fff;background:rgba(220,38,38,.28);border:1px solid rgba(255,255,255,.18);font-family:var(--sans);font-size:9.5px}
.pulse .rail .cnt.neg{color:#fff;background:rgba(220,38,38,.34);border-color:rgba(255,255,255,.18)}
.pulse .rail .soon{color:rgba(255,255,255,.42);font-family:var(--serif)!important;font-size:12px!important;padding:7px 10px 7px 12px!important}
.pulse .rail .soon .dot{background:rgba(255,255,255,.18);box-shadow:none}
.pulse .rail .soon i{color:rgba(255,255,255,.4);font-family:var(--sans)}
.pulse .rail a .hint{color:rgba(255,255,255,.42);font-family:var(--sans)}
.pulse .rail .sub{padding-left:22px}
.pulse .rail .sub a,.pulse .rail .sub button.nv{font-family:var(--sans);font-size:11.5px;color:rgba(255,255,255,.72);padding:5px 10px}
.pulse .rail .sub .on{background:none;color:#fff}
.pulse .rail .acct{border-top:1px solid rgba(255,255,255,.12);padding:14px 18px 16px}
.pulse .rail .acct .av{background:rgba(255,255,255,.14);color:#fff}
.pulse .rail .acct .who b{color:#fff}
.pulse .rail .acct .who small{color:var(--green-200)}
.pulse .rail .acct .out{color:rgba(255,255,255,.7);border-color:transparent}
.pulse .rail .acct .out:hover{color:#fff;background:rgba(255,255,255,.1);border-color:rgba(255,255,255,.18)}


/* ==========================================================================
   OVERVIEW HEAD, 2 Sep 2026. No eyebrow. Headline, one line of context, a
   toolbar on the right.
   ========================================================================== */
.pulse .ovhead{align-items:flex-start;padding:4px 0 20px}
.pulse .ovhead h1{margin-top:0;font-size:27px;max-width:34ch}
/* the report basis lives at the foot of the rail: it is chrome, not content */
.pulse .railmeta{margin-top:auto;padding:16px 18px 20px;border-top:1px solid rgba(255,255,255,.10);
  display:flex;flex-direction:column;gap:0}
.pulse .railmeta span{display:flex;flex-direction:column;gap:2px;padding-top:11px;border-top:1px solid rgba(255,255,255,.09)}
.pulse .railmeta span:first-child{padding-top:0;border-top:0}
.pulse .railmeta .ml{font-size:8px;letter-spacing:.16em;text-transform:uppercase;color:var(--green-200);opacity:.65}
.pulse .railmeta b{font-family:var(--serif);font-weight:700;font-size:11.5px;color:rgba(255,255,255,.9);letter-spacing:-.1px;line-height:1.25}
.pulse .ovhead .ctl{padding-top:4px;gap:8px}
.pulse .pill,.pulse .tb{display:inline-flex;align-items:center;gap:7px;height:32px;padding:0 12px;border:1px solid var(--rule);border-radius:8px;
  background:var(--paper);font-family:var(--sans);font-size:12px;color:var(--ink-3);white-space:nowrap}
.pulse .pill svg,.pulse .tb svg{width:13px;height:13px;color:var(--ink-5)}
.pulse .tb{cursor:pointer}
.pulse .tb:hover{border-color:var(--green-700);color:var(--green-700)}
.pulse .tb:hover svg{color:var(--green-700)}


/* platforms panel full width, bars stretch across; insights below in two columns */
.pulse .ovgrid{grid-template-columns:1fr}
.pulse .plist .p{grid-template-columns:130px 1fr 120px 84px;gap:18px;padding:10px 0}
.pulse .plist .pb{height:12px}
.pulse .ins ol{display:grid;grid-template-columns:repeat(3,1fr);gap:0 44px}
.pulse .ins li{border-top:1px solid var(--gold-line)}
.pulse .ins li:nth-child(-n+3){border-top:0;padding-top:4px}
@media(max-width:1280px){
.pulse .ins ol{grid-template-columns:1fr 1fr}
.pulse .ins li:nth-child(3){border-top:1px solid var(--gold-line);padding-top:15px}}
@media(max-width:820px){
.pulse .ins ol{grid-template-columns:1fr}
.pulse .ins li:nth-child(2){border-top:1px solid var(--gold-line);padding-top:15px}}


/* one stacked share bar, full width, then the same platforms as rows */
.pulse .sbar{display:flex;height:38px;border-radius:6px;overflow:hidden;margin-top:14px}
.pulse .sbar span{display:flex;align-items:center;justify-content:center;font-size:11.5px;color:#fff;white-space:nowrap;overflow:hidden;
  text-shadow:0 1px 1px rgba(0,0,0,.28)}
.pulse .sbar span + span{box-shadow:inset 1px 0 0 #fff}
.pulse .sbar span.dk{color:var(--ink-1);text-shadow:none}
.pulse .leg.wide{margin-top:12px;gap:18px}
.pulse .plist{margin-top:16px;padding-top:6px;border-top:1px solid var(--rule-3)}
.pulse .panel .cap{display:flex;align-items:flex-start;justify-content:space-between}


/* the rail is sticky at 100vh, so on a long page its dark ground used to stop
   halfway down. Paint the left column on the body instead. */
.pulse{background:linear-gradient(to right,var(--green-900) 0,var(--green-900) var(--rail),var(--ground) var(--rail),var(--ground) 100%)}
.pulse .rail{background:transparent}

/* footer: a closing bar, not loose text */
.pulse .ovfoot{display:flex;align-items:center;gap:10px 28px;flex-wrap:wrap;margin-top:20px;padding:14px 22px;
  background:var(--paper);border:1px solid var(--rule);border-radius:10px;font-size:11.5px;color:var(--ink-5)}
.pulse .ovfoot span{display:inline-flex;align-items:baseline;gap:7px}
.pulse .ovfoot .lbl{font-size:9px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-6)}
.pulse .ovfoot b{font-weight:400;color:var(--ink-3)}
.pulse .ovfoot .wm{margin-left:auto;font-family:var(--serif);font-weight:700;font-size:13px;color:var(--ink-1)}
@media(max-width:760px){
.pulse{background:var(--ground)}
.pulse .rail{background:var(--green-900)}}


/* rail header: the product mark in single-colour white. The lilac tile is a
   third brand colour on a forest ground; white keeps the chrome monochrome,
   which the logo guidelines allow for single-colour use. */
.pulse .rail .brandmark{padding:20px 18px 18px;border-bottom:1px solid rgba(255,255,255,.10);margin-bottom:4px}
.pulse .rail .brandmark img{height:19px;width:auto;display:block}

/* page header: the client mark sits with the title, where the report is about */
.pulse .ovtitle{display:flex;align-items:flex-start;gap:14px}
.pulse .cplate{width:40px;height:40px;border-radius:9px;background:var(--paper);border:1px solid var(--rule);
  display:flex;align-items:center;justify-content:center;flex-shrink:0;padding:6px;margin-top:2px}
.pulse .cplate img{max-width:28px;max-height:28px;width:auto;height:auto;object-fit:contain}
.pulse .ovfoot .wm{display:inline-flex;align-items:center}
.pulse .ovfoot .wm img{height:15px;width:auto;display:block}

/* the share legend now carries value and change, so it reads as a row */
.pulse .leg.wide{display:grid;grid-auto-flow:column;grid-auto-columns:1fr;gap:0 18px;margin-top:14px}
.pulse .leg.wide i{font-size:12px;color:var(--ink-1);gap:8px;align-items:baseline;white-space:nowrap;min-width:0;overflow:hidden;text-overflow:ellipsis}
.pulse .leg.wide i b{width:9px;height:9px;border-radius:2px;flex-shrink:0;position:relative;top:1px}
.pulse .leg.wide i .lsh{color:var(--ink-5);font-size:11px}
.pulse .leg.wide i:hover{color:var(--green-700)}


/* ==========================================================================
   SITE FOOTER. Full bleed, but its content sits in the same column as the
   boards above, so the left gutter lines up with the panels rather than with
   the rail.
   ========================================================================== */
.pulse .shell{display:flex;align-items:stretch}
/* footer content starts at the page's left gutter, under the rail, not at
   the content column */
.pulse .sitefoot{background:var(--green-900);color:rgba(255,255,255,.7);padding:16px 44px 16px 18px}   /* 18px matches the rail's own gutter */
.pulse .sitefoot .fbar{display:flex;align-items:center;justify-content:space-between;gap:24px 40px;flex-wrap:wrap}
.pulse .sitefoot .fnote{font-size:11px;color:rgba(255,255,255,.5)}
.pulse .sitefoot .fnote b{font-family:var(--serif);font-weight:700;color:rgba(255,255,255,.88)}

/* the two marks read as one endorsement block on the right. Both logos are
   drawn for light grounds, so they share a single white plate rather than
   being inverted, which mangled the Commercify wordmark. */
.pulse .sitefoot .fmarks{display:flex;align-items:center;gap:18px;background:#fff;border-radius:8px;padding:8px 16px}
.pulse .sitefoot .fm{display:flex;align-items:center;gap:9px}
.pulse .sitefoot .fm img{height:15px;width:auto;display:block}
.pulse .sitefoot .fl{font-size:8px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-5);white-space:nowrap}
.pulse .sitefoot .fdiv{width:1px;align-self:stretch;background:var(--rule)}
/* account, top right. Name and mark only; the state is implied, and sign out
   is an icon so it does not compete with PNG and Excel below it. */
.pulse .ovhead .ctl{flex-direction:column;align-items:flex-end;gap:12px;padding-top:0;margin-top:-6px}
.pulse .ovhead .ctlrow{display:inline-flex;align-items:center;gap:8px}
.pulse .ovhead .acct{display:inline-flex;align-items:center;gap:8px;height:30px;padding:0 4px 0 4px;background:none;border:0}
.pulse .ovhead .acct .av{width:24px;height:24px;border-radius:50%;background:var(--green-700);color:#fff;font-size:9px;
  letter-spacing:.03em;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;font-weight:700}
.pulse .ovhead .acct .who{font-family:var(--serif);font-weight:700;font-size:12.5px;color:var(--ink-1)}
.pulse .ovhead .acct .out{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;border-radius:7px;
  color:var(--ink-5);border:1px solid transparent}
.pulse .ovhead .acct .out svg{width:14px;height:14px}
.pulse .ovhead .acct .out:hover{color:var(--neg-text);border-color:#FECDD3;background:var(--neg-bg)}
@media(max-width:980px){
.pulse .sitefoot{padding-left:16px;padding-right:20px}}
@media(max-width:760px){
.pulse .sitefoot{padding:16px}
.pulse .sitefoot .fbar{gap:14px}
.pulse .sitefoot .fmarks{padding:8px 12px;gap:12px}}


/* chart and share legends: platform names in Caslon, figures in Caslon,
   the share and the delta stay in Questrial so they read as annotation */
.pulse .leg i,.pulse .ovchart .leg i{font-family:var(--serif);font-weight:700;font-size:12.5px;color:var(--ink-1)}
.pulse .leg.wide i{font-family:var(--serif);font-weight:700;font-size:12.5px}
.pulse .leg.wide i .lsh{font-family:var(--sans);font-weight:400;font-size:10.5px;color:var(--ink-5)}
.pulse .leg.wide i .dlt{font-family:var(--sans)}


/* insights: the number leads in Caslon, the sentence follows in Questrial.
   No font switching inside a sentence, which was wrapping badly. */
.pulse .ins h2{font-size:16.5px;font-weight:700;letter-spacing:-.2px}
.pulse .ins ol{margin-top:6px;gap:0 48px}
.pulse .ins li{padding:15px 0}
.pulse .ins .il{font-size:9px;letter-spacing:.18em;color:var(--green-700);font-weight:700}
.pulse .ins .ifig{display:flex;align-items:baseline;gap:10px;margin-top:7px;flex-wrap:wrap}
.pulse .ins .ifig{font-family:var(--serif);font-weight:700;font-size:22px;letter-spacing:-.5px;color:var(--gold-deep);
  font-variant-numeric:tabular-nums;line-height:1}
.pulse .ins .ifig span{font-family:var(--sans);font-weight:400;font-size:11px;letter-spacing:0;color:var(--ink-5)}
.pulse .ins .it{font-family:var(--sans);font-size:11.5px;line-height:1.6;color:var(--ink-3);margin-top:8px;max-width:44ch}
.pulse .ins .cv{font-size:10.5px;line-height:1.6;color:var(--ink-5)}
.pulse .ins .cv b{font-family:var(--serif);color:var(--ink-3)}


/* eyebrow: a short rule then small caps. Sits above every panel heading and
   the page title, so each block announces itself. */
.pulse .ovhead .ey{margin-bottom:9px}
.pulse .panel .ey,.pulse .ovchart .ey,.pulse .ins .ey{margin-bottom:7px}
.pulse .ins .ey.gold::before{background:var(--gold)}
.pulse .ins .ey.gold{color:var(--gold-deep)}
.pulse .ovchart .cap h2,.pulse .panel .cap h2{margin-top:0}


/* ---- the period picker, one definition ---------------------------------
   A pill that opens a panel: a column of presets, optionally a second column
   for a custom range, over one shared footer carrying the resulting window and
   the actions. Every view on every page uses this and nothing else; there is
   no second variant to drift from. The `one` modifier drops the second column
   for a picker that has nothing to compare against. */
.pulse .picker{position:relative;display:inline-flex}
.pulse .picker .pill{cursor:pointer}
.pulse .picker .pill:hover{border-color:var(--green-700);color:var(--green-700)}
.pulse .picker .pill .cv{width:10px;height:6px;margin-left:2px;color:var(--ink-5)}
.pulse .picker .pill[aria-expanded="true"]{border-color:var(--green-700);color:var(--green-700);box-shadow:0 0 0 3px var(--green-050)}
.pulse .pop{position:absolute;top:calc(100% + 8px);right:0;z-index:80;display:block;padding:0;
  background:var(--paper);border:1px solid var(--rule);border-radius:10px;
  box-shadow:0 12px 32px rgba(15,23,42,.13);overflow:hidden;text-align:left;
  max-width:min(460px,calc(100vw - 40px))}
/* display above outranks the hidden attribute's own display:none, which is why
   the popover would not close until this rule was added */
.pulse .pop[hidden]{display:none}
.pulse .pop .pcols{display:flex;align-items:stretch}
.pulse .pop .pcol{padding:13px 15px 15px;min-width:180px}
.pulse .pop .pcustom{flex:1;min-width:210px;border-left:1px solid var(--rule-3);background:#FBFCFD}
.pulse .pop .ph{font-size:8.5px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-5);margin-bottom:7px}
.pulse .pop .pcustom .ph + .ph,.pulse .pop .pcustom > .ph:not(:first-child){margin-top:13px}
.pulse .pop .pset{display:flex;flex-direction:column;gap:1px}
.pulse .pop .pset button{text-align:left;background:none;border:0;padding:6px 9px;border-radius:6px;
  font-size:11.5px;color:var(--ink-3);cursor:pointer;font-family:var(--sans)}
.pulse .pop .pset button:hover{background:var(--ground);color:var(--ink-1)}
.pulse .pop .pset button.on{background:var(--green-050);color:var(--green-700);font-weight:700}
.pulse .pop .pset button small,.pulse .pop .pset .cust small{display:block;font-size:9.5px;color:var(--ink-5);
  margin-top:2px;font-weight:400;letter-spacing:0}
.pulse .pop .pset button.on small{color:var(--green-500)}
.pulse .pop .pset .cust{padding:6px 9px;border-radius:6px;background:var(--green-050);color:var(--green-700);
  font-weight:700;font-size:11.5px;font-family:var(--sans)}
.pulse .pop .pset .cust small{color:var(--green-500)}
.pulse .pop .pset .cust[hidden]{display:none}
.pulse .pop label{display:flex;align-items:center;justify-content:space-between;gap:10px;
  font-size:11px;color:var(--ink-5);margin-bottom:7px}
.pulse .pop label .sel,.pulse .pop input.dt{min-width:132px;height:27px;font-size:11.5px}
.pulse .pop input.dt{font-family:var(--sans);color:var(--ink-2);background:var(--paper);
  border:1px solid var(--rule);border-radius:6px;padding:6px 8px}
.pulse .pop input.dt::-webkit-calendar-picker-indicator{opacity:.5;cursor:pointer}
.pulse .pop .seg.mini{margin-bottom:9px;width:100%}
.pulse .pop .seg.mini button{flex:1}
.pulse .pop .pfoot{display:flex;align-items:center;justify-content:space-between;gap:14px;
  padding:10px 15px;border-top:1px solid var(--rule-3);background:#FBFCFD}
.pulse .pop .pnote{font-size:10.5px;line-height:1.45;color:var(--ink-5);margin:0;max-width:26ch}
.pulse .pop .pnote b{font-family:var(--serif);font-weight:700;color:var(--ink-3)}
.pulse .pop .pact{display:flex;justify-content:flex-end;gap:8px;margin:0;padding:0;border-top:0;flex-shrink:0}
.pulse .pop .tb.pri{background:var(--green-700);border-color:var(--green-700);color:#fff}
.pulse .pop .tb.pri:hover{background:var(--green-900);border-color:var(--green-900);color:#fff}

/* one column: no custom range to offer, so the panel is just the presets. Week
   and day labels are long, so it is wider than the preset text alone needs. */
.pulse .pop.one{min-width:252px;max-width:320px}
.pulse .pop.one .pcol{min-width:0;width:100%}
.pulse .pop.one .pset button small{line-height:1.4}
.pulse .pop.one .pfoot .pnote{max-width:none}
/* a picker whose list is every month, week or listing scrolls inside the
   panel rather than running off the screen */
.pulse .pop.one .pset{max-height:min(46vh,304px);overflow-y:auto}
.pulse .picker.wide .pill .plab{max-width:30ch;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* a picker that sits at the left of its row drops its panel to the right,
   otherwise the panel runs back under the rail */
.pulse .picker.lpop .pop{left:0;right:auto}

@media(max-width:760px){
.pulse .pop .pcols{flex-direction:column}
.pulse .pop .pcustom{border-left:0;border-top:1px solid var(--rule-3)}}

/* everything down to Exhibit 2 must clear a 900px viewport, so the top of the
   page is tightened: shorter chart, tighter cards, less air between panels */
.pulse .main{padding:18px 36px 20px}
.pulse .ovhead{padding:2px 0 14px}
.pulse .ovhead h1{font-size:24px;margin-top:5px}
.pulse .ovhead .ey{margin-bottom:7px}
.pulse .cplate{width:34px;height:34px;border-radius:8px;padding:5px}
.pulse .cplate img{max-width:24px;max-height:24px}
.pulse .mstrip{gap:10px}
.pulse .mstrip button{padding:12px 14px 12px}
.pulse .mstrip .mv{font-size:21px;margin-top:3px}
.pulse .mstrip .md{margin-top:6px}
.pulse .mstrip .kr,.pulse .mstrip button .kr{margin-top:3px}
.pulse .pnl{padding:14px 20px}
.pulse .pnl + .pnl,.pulse .pnl + .ovgrid,.pulse .mstrip + .pnl,.pulse .sigrid + .pnl{margin-top:12px}
.pulse .ovchart{padding:14px 20px 12px}
.pulse .ovchart .chartwrap{height:172px;margin-top:4px}
.pulse .ovchart .leg{margin-top:6px}
.pulse .panel .cap h2,.pulse .ovchart .cap h2{font-size:14.5px}
.pulse .sbar{height:32px;margin-top:11px}
.pulse .leg.wide{margin-top:11px;gap:0 16px}
.pulse .ovgrid{margin-top:12px}


/* platform compare uses the same furniture as the overview */
.pulse #sec-platforms .mstrip{grid-template-columns:repeat(6,1fr)}
.pulse #sec-platforms .mstrip .md{color:var(--ink-5)}
.pulse #sec-platforms .ins ol{grid-template-columns:repeat(3,1fr)}
.pulse #sec-platforms .ins li:nth-child(-n+3){border-top:0;padding-top:4px}
.pulse .pnl .cap{display:flex;align-items:flex-start;justify-content:space-between;gap:16px}
/* every panel heading is Libre Caslon; the table and insight panels were inheriting Questrial */
.pulse .pnl .cap h2{font-family:var(--serif);font-weight:700;font-size:14.5px;letter-spacing:-.2px;margin-top:0;color:var(--ink-1)}
.pulse .pnl .cap .sub{font-size:10.5px;color:var(--ink-5);margin-top:3px}

/* ---- responsive --------------------------------------------------------- */
@media(max-width:1180px){
.pulse .kpis{grid-template-columns:repeat(4,1fr)}
.pulse .kpi:nth-child(4){border-right:0}}
@media(max-width:980px){
.pulse{--rail:200px}
.pulse .two{grid-template-columns:1fr}
.pulse .two > .exhibit:first-child{border-right:0;border-bottom:1px solid var(--rule-3)}
.pulse .basis{grid-template-columns:repeat(2,1fr)}
.pulse .basis div:nth-child(2){border-right:0}
.pulse .alist{grid-template-columns:1fr}
.pulse .pcards{grid-template-columns:1fr}
.pulse .pcard{border-right:0;border-bottom:1px solid var(--rule-3)}}
@media(max-width:760px){
.pulse .shell{display:block}
.pulse .rail{position:static;width:auto;height:auto;border-right:0;border-bottom:1px solid var(--rule)}
.pulse .rail .grp{padding:8px 10px}
.pulse .main{padding:16px 12px 48px}
.pulse .kpis{grid-template-columns:repeat(2,1fr)}
.pulse .basis{grid-template-columns:1fr}
.pulse .basis div{border-right:0;border-bottom:1px solid var(--rule-3)}}
@media print{
.pulse .shell{display:block}
.pulse{background:#fff}
.pulse .rail,.pulse .dl-bar,.pulse .filter .seg,.pulse .filter .chips{display:none}
.pulse .main{padding:0}
.pulse .board{border:0;border-radius:0}
.pulse table.dtab th,.pulse .h4,.pulse .h5,.pulse .h6,.pulse .take .tk{-webkit-print-color-adjust:exact;print-color-adjust:exact}}

/* ==========================================================================
   WHERE QUESTRIAL IS USED FOR NUMBERS, 2 Sep 2026
   Libre Caslon Text carries no rupee sign, so a ₹ amount set in Caslon renders
   its symbol from a fallback face. Satish's call: the two numbers tables and
   the chart legend run in Questrial; the metric tiles, insight figures and
   everything else stay Libre Caslon as designed.
   ========================================================================== */
.pulse .pnl .cap .sub{font-family:var(--sans);font-size:10.5px;color:var(--ink-5)}

/* the heat grid reads with the same type as the other two tables: Questrial
   for every label and figure, tabular so the columns line up. No green band
   here, because the header would sit on the same green as the darkest cell. */
.pulse .pnl table.dtab.heat thead th{font-family:var(--sans);font-weight:400;font-size:9.5px;letter-spacing:.13em;
  background:var(--green-700);color:#fff;height:32px;border:0;padding:0 10px}
.pulse .pnl table.dtab.heat thead th:first-child{border-radius:5px 0 0 5px;padding-left:12px;text-align:left}
.pulse .pnl table.dtab.heat thead th:last-child{border-radius:0 5px 5px 0;padding-right:12px}
/* a paper gap under the band so it never merges with the darkest heat cells */
.pulse .pnl table.dtab.heat thead::after{content:'';display:table-row;height:4px}
.pulse .pnl table.dtab.heat tbody tr:first-child td{border-top:4px solid var(--paper)}
.pulse .pnl table.dtab.heat td.nm{padding-left:12px}
.pulse .pnl table.dtab.heat td:last-child{padding-right:12px}
/* the total column is the row's answer, so it carries weight */
.pulse .pnl table.dtab.heat td:last-child .fig{font-weight:700;color:var(--ink-1)}
.pulse .pnl table.dtab.heat thead th:last-child{font-weight:400}
.pulse .pnl table.dtab.heat td.nm{font-family:var(--sans);font-weight:400;font-size:12.5px;color:var(--ink-1);letter-spacing:0}
.pulse .pnl table.dtab.heat td.nm small{font-family:var(--sans);font-size:10px;color:var(--ink-5);margin-top:2px}
.pulse .pnl table.dtab.heat td.h,.pulse .pnl table.dtab.heat td .fig{font-family:var(--sans);font-weight:400;font-size:12.5px;
  letter-spacing:0;font-variant-numeric:tabular-nums}
.pulse .pnl table.dtab.heat tr.sel td.nm{background:none;color:var(--green-700)}
.pulse .pnl table.dtab.heat tbody tr.lnk:hover td.nm{color:var(--green-700)}
/* hovering a row must not wipe the heat fill: an earlier rule sets
   background:none on every hovered cell, which made the colours vanish under
   the pointer while scrolling. The heat cells keep their own ground and the
   hover shows as a ring on the row instead. */
.pulse .pnl table.dtab.heat tbody tr.lnk:hover td.h0{background:#fff}
.pulse .pnl table.dtab.heat tbody tr.lnk:hover td.h1{background:#E7F2EC}
.pulse .pnl table.dtab.heat tbody tr.lnk:hover td.h2{background:#C9E3D3}
.pulse .pnl table.dtab.heat tbody tr.lnk:hover td.h3{background:#9CCBB0}
.pulse .pnl table.dtab.heat tbody tr.lnk:hover td.h4{background:#5FA983}
.pulse .pnl table.dtab.heat tbody tr.lnk:hover td.h5{background:#2F7F57}
.pulse .pnl table.dtab.heat tbody tr.lnk:hover td.h6{background:#0B3D28}
.pulse .pnl table.dtab.heat tbody tr.lnk:hover td{box-shadow:inset 0 -1px 0 var(--green-700),inset 0 1px 0 var(--green-700)}


/* ==========================================================================
   INVENTORY QC, brought onto the same furniture as the other three boards
   ========================================================================== */
/* a view with only one window has no period to pick, so it carries a plain
   stamp rather than something shaped like a control that does nothing */
.pulse .stamp{display:inline-flex;align-items:center;height:32px;padding:0 2px;
  font-family:var(--sans);font-size:11.5px;color:var(--ink-5);white-space:nowrap}
.pulse .pickrow.tabsrow{margin-top:14px}
.pulse .pickrow.tabsrow{flex-wrap:nowrap}
/* the base .tabs rule sets overflow-x:auto, which made this row a scroll box
   that wrapped its buttons and painted a scrollbar with the whole width free */
.pulse .pickrow .tabs{display:flex;flex-wrap:wrap;gap:6px;border:0;padding:0;margin:0;overflow:visible;flex:1;min-width:0}
.pulse .pickrow .tabs button{font-family:var(--sans);font-size:11px;color:var(--ink-4);background:var(--paper);
  border:1px solid var(--rule);border-radius:14px;padding:4px 12px;cursor:pointer}
.pulse .pickrow .tabs button:hover{border-color:var(--green-500);color:var(--ink-1)}
.pulse .pickrow .tabs button.on{background:var(--green-700);border-color:var(--green-700);color:#fff}
.pulse .pickrow .pkn{font-family:var(--sans);font-size:10.5px;color:var(--ink-5);margin-left:auto}
.pulse .pickrow .srch{font-family:var(--sans);font-size:11.5px;color:var(--ink-2);background:var(--paper);
  border:1px solid var(--rule);border-radius:6px;padding:5px 10px;min-width:210px;height:27px}
.pulse .pickrow .srch:focus{outline:0;border-color:var(--green-700)}

/* the inventory KPI rows read as the metric strip does */
.pulse .intab .kpis{display:grid;gap:10px;margin-top:12px}
.pulse .intab .kpis.k5{grid-template-columns:repeat(5,1fr)}
.pulse .intab .kpis.k4{grid-template-columns:repeat(4,1fr)}
.pulse .intab .kpis.k3{grid-template-columns:repeat(3,1fr)}
.pulse .intab .kpi{background:var(--paper);border:1px solid var(--rule);border-radius:8px;padding:11px 14px 12px;text-align:left}
.pulse .intab .kpi .kl{font-family:var(--sans);font-size:9px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-5)}
.pulse .intab .kpi .kv{font-family:var(--serif);font-weight:700;font-size:22px;letter-spacing:-.3px;margin-top:6px;color:var(--ink-1);white-space:nowrap}
.pulse .intab .kpi .kv small{font-family:var(--sans);font-weight:400;font-size:10px;color:var(--ink-5);margin-left:6px;letter-spacing:0}
.pulse .intab .kpi .kd{font-family:var(--sans);font-size:10.5px;color:var(--ink-5);margin-top:6px;background:none;padding:0}
.pulse .intab .two{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:12px}
.pulse .intab .pcards + .two,.pulse .intab .kpis + .pcards{margin-top:12px}
.pulse .intab .pnl{margin-top:12px}
.pulse .intab .two .pnl{margin-top:0}
.pulse .pnl.note{font-family:var(--sans);font-size:11px;line-height:1.6;color:var(--ink-5);background:var(--ground);border-style:dashed}
.pulse .pnl.ins .tx{font-family:var(--sans);font-size:11.5px;line-height:1.65;color:var(--ink-3);margin-top:8px;max-width:96ch}
.pulse .pnl.ins .tx b{font-family:var(--serif);font-weight:700;color:var(--gold-deep)}
.pulse #inFoot{margin-top:12px}
.pulse #inFoot .basis{display:grid;grid-template-columns:repeat(4,1fr);gap:10px 22px;margin:0}
.pulse #inFoot .basis dt{font-family:var(--sans);font-size:9px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-5)}
.pulse #inFoot .basis dd{font-family:var(--sans);font-size:11.5px;color:var(--ink-2);margin-top:3px}
.pulse #inFoot .cv{margin-top:12px;padding-top:12px;border-top:1px solid var(--gold-line);font-family:var(--sans);
  font-size:10.5px;line-height:1.6;color:var(--ink-5)}
@media(max-width:1100px){
.pulse .intab .two{grid-template-columns:1fr}
.pulse .intab .kpis.k5,.pulse .intab .kpis.k4{grid-template-columns:repeat(2,1fr)}
.pulse #inFoot .basis{grid-template-columns:repeat(2,1fr)}}

/* the three platform cards on the stock tab sit in panels like everything else */
.pulse .intab .pcards{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;border:0;padding:0;margin-top:10px}
.pulse .intab .pcard{background:var(--paper);border:1px solid var(--rule);border-radius:8px;padding:12px 14px;
  grid-template-columns:1fr auto;gap:4px 12px}
.pulse .intab .pcard .pn{font-size:12.5px}
.pulse .intab .pcard .pv{font-size:20px}
.pulse .intab .pcard svg{width:84px;height:32px}
@media(max-width:1100px){
.pulse .intab .pcards{grid-template-columns:1fr}}

/* No scrollbar in the rail. It fits at 900px and above on every board; on a
   shorter window it still scrolls by wheel or trackpad, it just does not paint
   a light system bar against the dark ground. */
.pulse .railmeta{padding:14px 18px 14px}
.pulse .rail{scrollbar-width:none;-ms-overflow-style:none;overscroll-behavior:contain}
.pulse .rail::-webkit-scrollbar{width:0;height:0;display:none}

/* the inventory caveat is removed, so the foot panel keeps no empty rule */
.pulse #inFoot .cv:empty{display:none}

/* a KPI card that leads somewhere looks and behaves like a link */
.pulse .intab .kpi.lnk{cursor:pointer;font:inherit;width:100%;transition:border-color .12s,background .12s}
.pulse .intab .kpi.lnk:hover{border-color:var(--green-700);background:var(--green-050)}
.pulse .intab .kpi.lnk:hover .kgo{color:var(--green-700)}
.pulse .intab .kpi .kd{display:flex;align-items:baseline;justify-content:space-between;gap:10px}
.pulse .intab .kpi .kgo{font-family:var(--sans);font-size:9px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-6);white-space:nowrap}
.pulse .intab .kpi.lnk:focus-visible{outline:2px solid var(--green-700);outline-offset:2px}

/* platform stock cards: name and figure lead, the sparkline sits to the right
   as the shape behind the number */
.pulse .intab .pcard{grid-template-columns:1fr auto;align-items:center}
.pulse .intab .pcard .pn{grid-column:1;grid-row:1}
.pulse .intab .pcard .pv{grid-column:1;grid-row:2}
.pulse .intab .pcard svg{grid-column:2;grid-row:1/3;width:88px;height:34px}
.pulse .intab .pcard .pm{grid-column:1/-1;grid-row:3;margin-top:6px}

/* the share legend carries name, figure, share and change in one row: at the
   old sizes the change pill was clipped, so the whole item steps down a size */
.pulse #ovBarLeg.leg.wide{gap:0 14px}
.pulse #ovBarLeg.leg.wide i{font-size:10.5px;gap:6px;overflow:visible;text-overflow:clip;letter-spacing:-.1px}
.pulse #ovBarLeg.leg.wide i b{width:8px;height:8px}
.pulse #ovBarLeg.leg.wide i .lsh{font-size:9px;letter-spacing:0}
.pulse #ovBarLeg.leg.wide i .dlt{font-size:9.5px;padding:1px 4px;letter-spacing:0}
@media(max-width:1200px){
.pulse #ovBarLeg.leg.wide i{font-size:10px}
.pulse #ovBarLeg.leg.wide i .lsh{display:none}}

/* ==========================================================================
   FOUNDER'S SUMMARY: words only, no exhibit furniture
   ========================================================================== */
.pulse .rail .cnt{cursor:pointer}
.pulse .rail .cnt:hover{filter:brightness(1.25)}
.pulse #sec-summary .pnl{margin-top:12px}
.pulse .pnl.lede{background:var(--cream);border-color:var(--gold-line);padding:18px 22px 20px}
.pulse .pnl.lede p{font-family:var(--serif);font-size:16px;line-height:1.55;color:var(--ink-1);margin-top:8px;max-width:80ch;letter-spacing:-.05px}
/* a sentence stays in one face. The Questrial rule for rupee figures applies
   to tables and legends, where amounts stack in a column and the fallback
   symbol is obvious; in running copy a face change mid-sentence is worse than
   one fallback glyph. */
.pulse .pnl.lede p b{font-weight:700;color:var(--gold-deep)}
.pulse .hilist{list-style:none;margin-top:12px;display:grid;grid-template-columns:1fr 1fr;gap:0 34px}
.pulse .hilist li{padding:11px 0 11px 15px;border-top:1px solid var(--rule-3);position:relative}
.pulse .hilist li:nth-child(-n+2){border-top:0;padding-top:4px}
.pulse .hilist li::before{content:'';position:absolute;left:0;top:16px;width:7px;height:7px;border-radius:50%;background:var(--ink-6)}
.pulse .hilist li:nth-child(-n+2)::before{top:9px}
.pulse .hilist li.up::before{background:var(--pos)}
.pulse .hilist li.down::before{background:var(--neg)}
.pulse .hilist li b{display:block;font-family:var(--serif);font-weight:700;font-size:13.5px;color:var(--ink-1);line-height:1.35}
.pulse .hilist li span{display:block;font-family:var(--sans);font-size:11.5px;line-height:1.6;color:var(--ink-4);margin-top:4px}
.pulse .hilist.tight{grid-template-columns:1fr;gap:0}
.pulse .hilist.tight li{padding-top:10px;padding-bottom:10px}
.pulse .hilist.tight li:nth-child(-n+2){border-top:1px solid var(--rule-3)}
.pulse .hilist.tight li:first-child{border-top:0;padding-top:4px}
.pulse .hilist.tight li:first-child::before{top:9px}
.pulse .hilist.tight li.tot{border-top:1.5px solid var(--ink-1);padding-left:0}
.pulse .hilist.tight li.tot::before{display:none}
.pulse .hilist.tight li.tot b{color:var(--gold-deep);font-size:14.5px}
.pulse .pnl.recs{background:var(--cream);border-color:var(--gold-line)}
.pulse .reclist{list-style:none;margin-top:10px}
.pulse .reclist li{display:flex;gap:14px;padding:14px 0;border-top:1px solid var(--gold-line)}
.pulse .reclist li:first-child{border-top:0;padding-top:6px}
.pulse .reclist .rn{flex-shrink:0;width:24px;height:24px;border-radius:50%;background:var(--green-700);color:#fff;
  display:flex;align-items:center;justify-content:center;font-family:var(--sans);font-size:11px}
.pulse .reclist .rb{min-width:0}
.pulse .reclist .rt{font-family:var(--serif);font-weight:700;font-size:15px;color:var(--ink-1);letter-spacing:-.2px;
  display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}
.pulse .reclist .rf{font-family:var(--sans);font-weight:400;font-size:11px;letter-spacing:.02em;color:var(--gold-deep);
  background:rgba(201,150,47,.14);border-radius:3px;padding:2px 7px}
.pulse .reclist p{font-family:var(--sans);font-size:11.5px;line-height:1.65;color:var(--ink-3);margin-top:6px;max-width:88ch}
.pulse .reclist .rgo{margin-top:8px;background:none;border:0;padding:0;cursor:pointer;font-family:var(--sans);font-size:10.5px;
  letter-spacing:.06em;color:var(--green-700);border-bottom:1px solid var(--green-200)}
.pulse .reclist .rgo:hover{border-bottom-color:var(--green-700)}
.pulse .smtwo{display:grid;grid-template-columns:1.6fr 1fr;gap:12px;margin-top:12px;align-items:start}
.pulse .smtwo .reclist p{max-width:none}
.pulse .smtwo .reclist .rt{font-size:14px}
.pulse .smtwo .pnl{margin-top:0}
@media(max-width:1100px){
.pulse .hilist{grid-template-columns:1fr}
.pulse .hilist li:nth-child(2){border-top:1px solid var(--rule-3);padding-top:11px}
.pulse .hilist li:nth-child(2)::before{top:16px}
.pulse .smtwo{grid-template-columns:1fr}}

/* alerts: tighter rows, and each row carries the per-platform position */
.pulse #in-alerts .alist{padding:12px 0 2px;gap:0}
.pulse #in-alerts .al{border:0;border-top:1px solid var(--rule-3);border-radius:0;background:none;padding:11px 2px;
  grid-template-columns:auto 1fr auto;gap:2px 11px;align-items:start}
.pulse #in-alerts .al:first-child{border-top:0;padding-top:4px}
.pulse #in-alerts .al .sv{margin-top:5px}
.pulse #in-alerts .al .an{font-size:13px}
.pulse #in-alerts .al .ad{display:flex;align-items:center;flex-wrap:wrap;gap:6px 8px;margin-top:5px}
.pulse #in-alerts .al .ad em{font-style:normal;font-family:var(--sans);font-size:10.5px;color:var(--ink-5)}
.pulse .ap{display:inline-flex;align-items:center;gap:5px;font-family:var(--sans);font-size:10.5px;color:var(--ink-4);
  border:1px solid var(--rule);border-radius:12px;padding:2px 9px 2px 7px;white-space:nowrap}
.pulse .ap i{width:7px;height:7px;border-radius:50%;display:block}
.pulse .ap b{font-weight:400;color:var(--ink-2)}
.pulse .ap.out{border-color:#FECDD3;background:var(--neg-bg)}
.pulse .ap.out b{color:var(--neg-text)}
.pulse .ap.low{border-color:var(--gold-line);background:var(--warn-bg)}
.pulse .ap.low b{color:var(--warn-text)}
.pulse #in-alerts .al .ac{grid-row:1;align-self:center}
.pulse #in-alerts .ins ol{grid-template-columns:repeat(4,1fr);gap:0 30px}
.pulse #in-alerts .ins li{border-top:0;padding-top:4px}
@media(max-width:1200px){
.pulse #in-alerts .ins ol{grid-template-columns:repeat(2,1fr)}
.pulse #in-alerts .ins li:nth-child(n+3){border-top:1px solid var(--gold-line);padding-top:14px}}

/* warehouses gets the same read-this-first panel as the other views */
.pulse #in-warehouses .ins ol{grid-template-columns:repeat(4,1fr);gap:0 30px}
.pulse #in-warehouses .ins li{border-top:0;padding-top:4px}
@media(max-width:1200px){
.pulse #in-warehouses .ins ol{grid-template-columns:repeat(2,1fr)}
.pulse #in-warehouses .ins li:nth-child(n+3){border-top:1px solid var(--gold-line);padding-top:14px}}

/* ==========================================================================
   PLATFORM PAGES (amazon.html and the ones that follow)
   ========================================================================== */
.pulse .mstrip .md .dlt{margin-left:auto}
.pulse table.dtab .mchg{display:block;margin-top:3px}
.pulse table.dtab .mchg .dlt{font-family:var(--sans);font-size:9.5px;padding:0;background:none!important}
.pulse #azTable td{white-space:nowrap}
.pulse .pnl.soonpnl{padding:26px 24px}
.pulse .pnl.soonpnl h2{font-family:var(--serif);font-weight:700;font-size:18px;letter-spacing:-.2px;margin-top:4px}
.pulse .pnl.soonpnl p{font-family:var(--sans);font-size:12px;line-height:1.6;color:var(--ink-4);margin-top:8px;max-width:62ch}
.pulse .pnl.soonpnl a{color:var(--green-700);border-bottom:1px solid var(--green-200)}
.pulse #sec-overview .two{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:12px}
.pulse #sec-overview .two .pnl{margin-top:0}
@media(max-width:1240px){
.pulse #sec-overview .two{grid-template-columns:1fr}}

/* a platform rail holds a dozen views, so they group by what they answer */
.pulse .rail .gsl{font-family:var(--sans);font-size:8px;letter-spacing:.18em;text-transform:uppercase;
  color:rgba(255,255,255,.34);padding:0 0 4px 12px;margin-top:12px}
.pulse .rail .grp .gsl:first-of-type{margin-top:6px}
.pulse .amzgrp button.nv{padding-top:5px;padding-bottom:5px}

/* metric tiles on a platform page carry the window's shape */
.pulse .mstrip .msp{display:block;width:74px;height:22px;margin-top:8px}
.pulse .mstrip button.on .msp{opacity:1}
.pulse .dlt.quiet{color:var(--ink-6)!important;background:none!important}
.pulse #azTable td .mchg .dlt{font-size:9px}
.pulse #azTable td.nm{position:sticky;left:0;background:var(--paper);z-index:1}
.pulse #azTable tr.tot td.nm{background:var(--cream)}
.pulse .rail .gsl{margin-top:10px}

/* the twelve Amazon views sit in four tinted bands, so the group a view belongs
   to is readable before the label is */
.pulse .amzgrp .sgrp{border-radius:9px;padding:8px 6px 9px;margin-top:8px}
.pulse .amzgrp .sgrp:first-of-type{margin-top:4px}
.pulse .amzgrp .sgrp .gsl{margin-top:0;padding-left:10px;padding-bottom:5px}
.pulse .amzgrp .sgrp button.nv{padding-left:10px}
/* the rail ground is already dark green, so a green tint on top reads as green
   on green. The bands lift on cream instead: a warm neutral, no second hue, and
   the label and the dots keep carrying which group is which. */
.pulse .amzgrp .sgrp.trading,.pulse .amzgrp .sgrp.catalogue,.pulse .amzgrp .sgrp.ads,.pulse .amzgrp .sgrp.forward{background:rgba(251,248,239,.075)}
.pulse .amzgrp .sgrp.trading .gsl{color:rgba(127,182,155,.72)}
.pulse .amzgrp .sgrp.catalogue .gsl{color:rgba(185,217,200,.62)}
.pulse .amzgrp .sgrp.ads .gsl{color:rgba(229,185,78,.72)}
.pulse .amzgrp .sgrp.forward .gsl{color:rgba(165,180,196,.66)}

/* plan against actual */
.pulse .pnl.planpnl{background:var(--cream);border-color:var(--gold-line)}
.pulse .planrows{margin-top:12px}
.pulse .planrow{display:grid;grid-template-columns:132px 1fr 108px;gap:0 16px;align-items:center;
  padding:9px 0;border-top:1px solid var(--gold-line)}
.pulse .planrow:first-child{border-top:0;padding-top:4px}
.pulse .planrow .pk{font-family:var(--serif);font-weight:700;font-size:12.5px;color:var(--ink-1)}
.pulse .planrow .pline{display:flex;justify-content:space-between;gap:14px;font-family:var(--sans);font-size:10.5px;color:var(--ink-5)}
.pulse .planrow .pa{color:var(--ink-2)}
.pulse .planrow .pa em{font-style:normal;color:var(--ink-5)}
.pulse .planrow .pbar{position:relative;height:7px;border-radius:4px;background:rgba(15,23,42,.07);margin-top:5px}
.pulse .planrow .pbar i{position:absolute;left:0;top:0;bottom:0;border-radius:4px;display:block}
.pulse .planrow .pbar .pace{position:absolute;top:-3px;bottom:-3px;width:1.5px;background:var(--ink-4);border-radius:1px}
.pulse .planrow.ok .pbar i{background:var(--pos)}
.pulse .planrow.near .pbar i{background:var(--gold-deep)}
.pulse .planrow.off .pbar i{background:var(--neg)}
.pulse .planrow .pt{text-align:right;font-family:var(--sans);font-size:12.5px;color:var(--ink-1);font-variant-numeric:tabular-nums}
@media(max-width:900px){
.pulse .planrow{grid-template-columns:104px 1fr 84px;gap:0 10px}}

/* the two overview charts sit side by side */
.pulse .chartrow{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:12px}
.pulse .chartrow .pnl{margin-top:0}
.pulse .chartrow .chartwrap{height:210px}
@media(max-width:1240px){
.pulse .chartrow{grid-template-columns:1fr}
.pulse .chartrow .chartwrap{height:196px}}

/* a canvas in a grid cell keeps its old pixel width unless the cell is allowed
   to shrink: min-width:auto on a grid item is what pins it open */
.pulse .two > .pnl,.pulse .chartrow > .pnl,.pulse .smtwo > .pnl,.pulse .intab .two > .pnl{min-width:0}
.pulse .chartwrap{min-width:0}
.pulse .chartwrap canvas{max-width:100%!important;height:100%!important}

/* a platform page's metric tiles report, they do not select */
.pulse .mstrip .mtile{background:var(--paper);border:1px solid var(--rule);border-radius:8px;padding:11px 14px 12px;text-align:left}
.pulse .mstrip .mtile .ml{font-family:var(--sans);font-size:9px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-5)}
.pulse .mstrip .mtile .md{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin-top:7px;
  font-family:var(--sans);font-size:10.5px;color:var(--ink-5)}

/* the plan panel needs air above it, and an editor that matches the popover */
.pulse .pnl.planpnl{margin-top:16px}
.pulse .pnl.planpnl .cap{align-items:flex-start}
.pulse .pnl.planpnl .cap .tb{flex-shrink:0}
.pulse .planedit{margin-top:14px}
.pulse .planedit .pgrid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px 16px}
.pulse .planedit .pf{display:flex;flex-direction:column;gap:4px}
.pulse .planedit .pf span{font-family:var(--sans);font-size:9px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-5)}
.pulse .planedit .pf input{font-family:var(--sans);font-size:12.5px;color:var(--ink-1);background:var(--paper);
  border:1px solid var(--rule);border-radius:6px;padding:6px 9px;height:30px;width:100%}
.pulse .planedit .pf input:focus{outline:0;border-color:var(--green-700)}
.pulse .planedit .pact{display:flex;justify-content:flex-end;gap:8px;margin-top:14px;padding-top:12px;border-top:1px solid var(--gold-line)}
.pulse .planedit .tb.pri{background:var(--green-700);border-color:var(--green-700);color:#fff}
.pulse .planedit .tb.pri:hover{background:var(--green-900);border-color:var(--green-900)}
.pulse .planedit .pnote{font-family:var(--sans);font-size:10.5px;color:var(--neg-text);margin-top:8px;text-align:right}
@media(max-width:900px){
.pulse .planedit .pgrid{grid-template-columns:repeat(2,1fr)}}

/* the Amazon groups collapse to their label, the way the inventory sub-menu
   does on the all-platform page */
.pulse .amzgrp .sgrp .gsl{display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%;
  background:none;border:0;cursor:pointer;text-align:left;font-family:var(--sans)}
.pulse .amzgrp .sgrp .gsc{width:8px;height:5px;opacity:.6;transition:transform .15s;flex-shrink:0;margin-right:8px}
.pulse .amzgrp .sgrp.closed{padding-bottom:8px}
.pulse .amzgrp .sgrp.closed button.nv{display:none}
.pulse .amzgrp .sgrp.closed .gsl{padding-bottom:0}
.pulse .amzgrp .sgrp.closed .gsc{transform:rotate(-90deg)}
.pulse .amzgrp .sgrp .gsl:hover{color:#fff}

/* the Amazon block itself minimises to its label */
.pulse .rail .gl.glbtn{display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%;
  background:none;border:0;cursor:pointer;text-align:left;font-family:var(--sans);padding-right:8px}
.pulse .rail .gl.glbtn:hover{color:rgba(255,255,255,.8)}
.pulse .rail .gl.glbtn .gsc{width:8px;height:5px;opacity:.55;transition:transform .15s;flex-shrink:0}
.pulse .amzgrp.mini .gl.glbtn .gsc{transform:rotate(-90deg)}
.pulse .amzgrp.mini .sgrp{display:none}

/* the nine small charts sit three across, each with its own note */
.pulse .cgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px 18px;margin-top:14px}
.pulse .cgrid .cc{min-width:0}
.pulse .cgrid .cct{font-family:var(--serif);font-weight:700;font-size:12.5px;color:var(--ink-1);letter-spacing:-.1px}
.pulse .cgrid .ccw{height:132px;margin-top:8px;min-width:0}
.pulse .cgrid .ccw canvas{max-width:100%!important;height:100%!important}
.pulse .cgrid .ccn{font-family:var(--sans);font-size:10.5px;line-height:1.6;color:var(--ink-4);margin-top:9px;
  background:var(--cream);border:1px solid var(--gold-line);border-radius:7px;padding:9px 11px 10px}
.pulse .cgrid .cc.miss{background:var(--ground);border:1px dashed var(--rule);border-radius:8px;padding:12px 14px}
.pulse .cgrid .cc.miss .cct{color:var(--ink-5);font-size:11.5px}
@media(max-width:1240px){
.pulse .cgrid{grid-template-columns:repeat(2,1fr)}}
@media(max-width:820px){
.pulse .cgrid{grid-template-columns:1fr}}

/* the six metric tiles fold rather than push the page sideways */
@media(max-width:1180px){
.pulse .mstrip{grid-template-columns:repeat(3,1fr)!important}
.pulse #sec-platforms .mstrip{grid-template-columns:repeat(3,1fr)!important}}
@media(max-width:760px){
.pulse .mstrip{grid-template-columns:repeat(2,1fr)!important}
.pulse #sec-platforms .mstrip{grid-template-columns:repeat(2,1fr)!important}}
.pulse .cgrid .ccn b{font-family:var(--serif);font-weight:700;color:var(--gold-deep)}
.pulse .cgrid .cc{display:flex;flex-direction:column}
.pulse .cgrid .cc .ccn{margin-top:auto}
.pulse .pnl .cap .seg.mini{flex-shrink:0}

/* every small chart states its own series */
.pulse .cgrid .cleg{display:flex;gap:6px 16px;margin-top:8px;flex-wrap:wrap}
.pulse .cgrid .cleg i{font-family:var(--sans);font-weight:400;font-size:10px;color:var(--ink-4);gap:6px;white-space:nowrap}
.pulse .cgrid .cleg i b{width:7px;height:7px;border-radius:2px;flex-shrink:0}

/* one takeaway across a grid of charts */
/* the takeaway is the conclusion of the grid below it, so it sits on the dark
   ground rather than the cream the individual notes use */
/* the conclusion of the grid below it: the report's own cream, a gold hairline,
   and a run-in label in the serif, the way the Basis lines read. Bigger and
   quieter than the notes under each chart, so the hierarchy is obvious. */
/* a pale blush, so it separates from the cream the notes and the insight panel
   already use. Kept light enough that the green figures inside it still clear
   4.5:1 against it. */
/* This box and the founder's summary lede are one component with two names, so
   they are set the same way: cream ground, gold hairline, Libre Caslon at 15.5px
   on an 80ch measure. The serif was pulled out of here once because it was set
   at 13.5px across 88 characters, which is a display face doing body work and is
   what made it hard to read. Size and measure were the fault, not the face. */
.pulse .takebox{background:var(--cream);border:1px solid var(--gold-line);border-radius:12px;
  padding:16px 20px 18px;margin-top:15px}
.pulse .takebox:empty{display:none}
.pulse .takebox .tkl{display:none}
.pulse .takebox p{font-family:var(--serif);font-size:15.5px;line-height:1.55;color:var(--ink-1);
  max-width:80ch;letter-spacing:-.05px}
.pulse .takebox p::before{content:'Key takeaway. ';font-family:var(--serif);font-weight:700;color:var(--gold-deep)}
.pulse .takebox p b{font-family:var(--serif);font-weight:700;color:var(--gold-deep)}
.pulse .takebox + .cgrid{margin-top:16px}
.pulse .takebox + .cgrid{margin-top:15px}
/* one chart to a row. Product bar charts carry long titles on the category
   axis, so three across truncated every name; full width gives them room. */
.pulse .cgrid.one{grid-template-columns:1fr;gap:26px 0}
.pulse .cgrid.one .cc.wide2{grid-column:auto}
.pulse .cgrid.one .ccw{height:300px}
.pulse .cgrid.one .ccw.tall{height:300px}
/* the single trend chart carries up to eight lines, so it gets more room */
.pulse #ppGrid3 .ccw.tall{height:340px}
.pulse .cgrid.one .ccn{max-width:none;font-size:11px;padding:11px 15px 12px}
.pulse .cgrid.one .cct{font-size:13.5px}
.pulse .cgrid.one .cc + .cc{border-top:1px solid var(--gold-line);padding-top:20px}
.pulse .cgrid.one .cc.dough .ccw{height:260px;width:520px;max-width:100%;margin:8px auto 0}
@media(max-width:1240px){
.pulse .cgrid.one{grid-template-columns:1fr}}
/* the ranking bar and its share doughnut answer the same question, so they sit
   side by side. The counterweight chart below keeps the full width. */
.pulse .cgrid.one.pair{grid-template-columns:1.85fr 1fr;gap:24px 26px;align-items:start}
.pulse .cgrid.one.pair > .cc{border-top:0;padding-top:0}
.pulse .cgrid.one.pair > .cc:nth-child(3){grid-column:1 / -1;border-top:1px solid var(--gold-line);padding-top:20px}
.pulse .cgrid.one.pair .cc.dough .ccw{width:100%;max-width:100%;height:300px;margin:8px 0 0}
@media(max-width:1080px){
.pulse .cgrid.one.pair{grid-template-columns:1fr}
.pulse .cgrid.one.pair > .cc + .cc{border-top:1px solid var(--gold-line);padding-top:20px}}
@media(max-width:820px){
.pulse .cgrid.one{grid-template-columns:1fr}}
/* this sub is a single line: the cap gives it the room by letting the control shrink */
.pulse #mmBrSub{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pulse .pnl .cap > div:first-child{min-width:0}
/* the products grid runs two wide cards and one narrow, so the last row fills */
.pulse #ppGrid .cc.wide2:last-child{grid-column:span 3}
@media(max-width:1240px){
.pulse #ppGrid .cc.wide2:last-child{grid-column:span 2}}
@media(max-width:820px){
.pulse #ppGrid .cc.wide2:last-child{grid-column:span 1}}

/* the product picker on the month on month panel */
.pulse .ppick{display:grid;grid-template-columns:repeat(3,1fr);gap:6px 18px;margin-top:12px;padding:12px 14px;
  background:var(--ground);border-radius:8px;max-height:230px;overflow-y:auto}
.pulse .ppick[hidden]{display:none}
.pulse .ppick .ppc{display:flex;align-items:center;gap:8px;font-family:var(--sans);font-size:11px;color:var(--ink-3);cursor:pointer}
.pulse .ppick .ppc input{width:14px;height:14px;accent-color:var(--green-700);cursor:pointer;flex-shrink:0}
.pulse #ppTrendLeg{margin-top:11px}
.pulse #ppGrid3 .ccw.tall{height:260px}
@media(max-width:1100px){
.pulse .ppick{grid-template-columns:repeat(2,1fr)}}


/* ---- the seven later Amazon views ------------------------------------- */
/* four health signals, the shape the old pages used, in this system's furniture */
/* Four fixed columns squeezed the cards at every width between the breakpoints
   and let a long figure push its line past the card. auto-fit holds a readable
   floor instead, min-width:0 stops a grid item refusing to shrink below its
   content, and the text wraps rather than running out of the box. */
.pulse .sigrid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-top:14px}
/* Four cards, so the column count has to divide four. auto-fit was choosing
   three between 1100 and 1300, which left the fourth card alone on its own row
   directly above the panel below. 4, then 2, then 1: no orphan at any width.
   minmax(0,1fr) keeps the min-width:0 that stops a long figure running out. */
@media(max-width:1280px){
.pulse .sigrid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:620px){
.pulse .sigrid{grid-template-columns:minmax(0,1fr)}}
.pulse .sigrid .sg{background:var(--paper);border:1px solid var(--rule);border-radius:8px;
  padding:12px 14px 13px;min-width:0;overflow:hidden}
.pulse .sigrid .sg .sgh{display:flex;align-items:center;gap:7px;min-width:0}
.pulse .sigrid .sg .sgd{width:8px;height:8px;border-radius:50%;flex-shrink:0}
.pulse .sigrid .sg b{font-family:var(--serif);font-weight:700;font-size:12.5px;color:var(--ink-1);
  letter-spacing:-.1px;min-width:0;overflow-wrap:anywhere}
.pulse .sigrid .sg p{font-family:var(--sans);font-size:10.5px;line-height:1.6;color:var(--ink-4);
  margin-top:6px;min-width:0;overflow-wrap:anywhere}
.pulse .sigrid .sg p b{font-size:inherit;overflow-wrap:normal;white-space:nowrap}
/* the state reads off the dot and the ground, never a left edge bar */
.pulse .sigrid .sg.ok{background:rgba(4,120,87,.045);border-color:rgba(4,120,87,.22)}
.pulse .sigrid .sg.warn{background:rgba(201,150,47,.07);border-color:rgba(201,150,47,.3)}
.pulse .sigrid .sg.bad{background:rgba(185,28,28,.045);border-color:rgba(185,28,28,.22)}
.pulse .mstrip.four{grid-template-columns:repeat(4,1fr)}
@media(max-width:900px){
.pulse .mstrip.four{grid-template-columns:repeat(2,1fr)}}

/* a search box above a long table */
.pulse .srow{display:flex;align-items:center;gap:12px;margin-top:12px}
.pulse .tsearch{flex:1;min-width:0;font-family:var(--sans);font-size:12px;color:var(--ink-1);background:var(--paper);
  border:1px solid var(--rule);border-radius:6px;padding:7px 11px;height:32px}
.pulse .tsearch:focus{outline:0;border-color:var(--green-700)}
.pulse .srow .pkn{font-family:var(--sans);font-size:10.5px;color:var(--ink-5);white-space:nowrap}
.pulse .morerow{display:flex;justify-content:center;margin-top:12px}
.pulse .pickrow.tight{margin-top:12px;margin-bottom:0}
.pulse .seg.wrap{flex-wrap:wrap}
.pulse .dsel{font-family:var(--sans);font-size:12px;color:var(--ink-1);background:var(--paper);
  border:1px solid var(--rule);border-radius:6px;padding:6px 9px;height:32px;max-width:340px}
.pulse .dsel:focus{outline:0;border-color:var(--green-700)}

/* the optimiser's allocation bar, one segment a product */
.pulse .simbar{display:flex;height:20px;border-radius:5px;overflow:hidden;margin:14px 0 4px;background:var(--ground)}
.pulse .simbar i{display:block;height:100%}
.pulse .simrange{width:130px;vertical-align:middle;accent-color:var(--green-700)}
.pulse .swat{display:inline-block;width:8px;height:8px;border-radius:2px;margin-right:8px;vertical-align:baseline;flex-shrink:0}
/* an ASIN with neither an order nor an ad sale still belongs in the table, quietly */
.pulse table.dtab tbody tr.dim td,.pulse table.dtab tbody tr.dim td .fig{color:var(--ink-5)}
.pulse table.dtab td .simv{font-family:var(--sans);font-size:11px;color:var(--ink-4);margin-left:8px}
.pulse tr.grouphd td{font-family:var(--sans);font-size:9px;letter-spacing:.16em;text-transform:uppercase;
  color:var(--ink-5);background:var(--ground);padding-top:11px;padding-bottom:7px}
.pulse .actchip{display:inline-block;font-family:var(--sans);font-size:9.5px;letter-spacing:.1em;text-transform:uppercase;
  border-radius:4px;padding:2px 7px}
.pulse .actchip.scale{background:rgba(4,120,87,.1);color:var(--pos)}
.pulse .actchip.maintain{background:rgba(11,61,40,.09);color:var(--green-700)}
.pulse .actchip.optimise{background:rgba(201,150,47,.16);color:var(--gold-deep)}
.pulse .actchip.pause{background:rgba(185,28,28,.1);color:var(--neg)}
.pulse .actchip.reactivate{background:rgba(108,15,199,.1);color:#6C0FC7}

/* Compare puts the metric table and the chart on one row. The table carries six
   columns, so it takes the wider half and runs its cells tighter; the chart
   reads fine at the narrower one. These sit at the end of the file because
   .chartrow and .pnl table.dtab.exec are both defined later than the picker
   rules and would otherwise win the cascade. */
.pulse .two.chartrow.cprow{grid-template-columns:1.16fr .84fr}
.pulse .cprow .pnl table.dtab.exec thead th{padding:0 7px}
.pulse .cprow .pnl table.dtab.exec thead th:first-child{padding-left:10px}
.pulse .cprow .pnl table.dtab.exec thead th:last-child{padding-right:10px}
.pulse .cprow .pnl table.dtab.exec td{padding-left:7px;padding-right:7px;font-size:11.5px}
.pulse .cprow .pnl table.dtab.exec td.nm{padding-left:10px;font-size:12px}
.pulse .cprow .pnl table.dtab.exec td:last-child{padding-right:10px}
.pulse .cprow .pnl table.dtab.exec td .fig{font-size:11.5px}
@media(max-width:1240px){
.pulse .two.chartrow.cprow{grid-template-columns:1fr}}

/* Two drawings or two small tables inside one card: the ASIN split rings, and
   the best/worst extremes. Explicit width on the canvas box, because a
   stretched flex item with auto side margins collapses a doughnut to nothing. */
.pulse .ccpair{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin-top:10px}
.pulse .ccpair .ccsub{font-family:var(--sans);font-size:9px;letter-spacing:.16em;text-transform:uppercase;
  color:var(--ink-5);margin-bottom:6px}
.pulse .cgrid.one .ccpair .ccw{height:240px;width:100%;max-width:100%;margin:0}
.pulse .ccpair .tscroll{margin-top:0}
@media(max-width:900px){
.pulse .ccpair{grid-template-columns:1fr}}

/* the ROAS dial: a half doughnut with the reading sitting inside the arc */
.pulse .gwrap{position:relative}
.pulse .cgrid.one .gwrap .ccw.tall{height:268px}
.pulse .gval{position:absolute;left:0;right:0;top:62%;transform:translateY(-50%);text-align:center;pointer-events:none}
.pulse .gval .gl{display:block;font-family:var(--sans);font-size:9px;letter-spacing:.18em;
  text-transform:uppercase;color:var(--ink-5)}
.pulse .gval b{display:block;font-family:var(--serif);font-weight:700;font-size:38px;line-height:1.15;
  color:var(--ink-1);margin:3px 0 5px}
.pulse .gval .gn{display:block;font-family:var(--sans);font-size:11.5px;color:var(--ink-5)}

/* pos and neg are written into table cells all over the build (Compare's change
   columns, ACOS in Campaigns and the two keyword pages, spend with no sales) and
   were never defined, so every one of them printed as plain ink. A rule that
   matches the span beats the colour it would otherwise inherit from .fig. */
.pulse .pos{color:var(--pos-text)}
.pulse .neg{color:var(--neg-text)}

/* the dial is a half ring, so it needs a box about twice as wide as it is tall;
   left at panel width it drew huge and clipped at the bottom */
.pulse .cgrid.one .gwrap{width:470px;max-width:100%;margin:0 auto}

/* The conversion funnel. Three bands drawn to their true share of the step
   above, which a log axis cannot show: on a log scale a hundredth of a percent
   still looks like most of the width. Each row carries its count on the left
   and what it kept on the right. */
.pulse .funnel{display:flex;flex-direction:column;gap:2px;margin-top:14px}
.pulse .fnb{display:grid;grid-template-columns:150px 1fr 132px;align-items:center;gap:16px;
  padding:11px 0;border-bottom:1px solid var(--rule-3)}
.pulse .fnb:last-child{border-bottom:0}
.pulse .fnl b{display:block;font-family:var(--sans);font-size:9.5px;letter-spacing:.15em;
  text-transform:uppercase;color:var(--ink-5);font-weight:400}
.pulse .fnl span{display:block;font-family:var(--serif);font-weight:700;font-size:19px;
  color:var(--ink-1);line-height:1.25;margin-top:2px;font-variant-numeric:tabular-nums}
.pulse .fnbar{height:38px;background:var(--rule-3);border-radius:3px;overflow:hidden;min-width:0}
.pulse .fnbar i{display:block;height:100%;border-radius:3px 2px 2px 3px;min-width:2px}
.pulse .fnr{text-align:right}
.pulse .fnr b{display:block;font-family:var(--serif);font-weight:700;font-size:17px;color:var(--green-700);
  font-variant-numeric:tabular-nums}
.pulse .fnr span{display:block;font-family:var(--sans);font-size:10px;color:var(--ink-5);margin-top:1px}
.pulse .fnr em{font-style:normal;font-family:var(--sans);font-size:10px;color:var(--ink-5)}
.pulse .fnfoot{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--rule-3);
  border:1px solid var(--rule-3);border-radius:8px;overflow:hidden;margin-top:16px}
.pulse .fnfoot > div{background:var(--paper);padding:11px 14px 12px}
.pulse .fnfoot span{display:block;font-family:var(--sans);font-size:9px;letter-spacing:.15em;
  text-transform:uppercase;color:var(--ink-5)}
.pulse .fnfoot b{display:block;font-family:var(--serif);font-weight:700;font-size:16px;color:var(--ink-1);
  margin-top:3px;font-variant-numeric:tabular-nums}
@media(max-width:820px){
.pulse .fnb{grid-template-columns:110px 1fr 96px;gap:10px}
.pulse .fnfoot{grid-template-columns:repeat(2,1fr)}}

/* Performance extremes: two ranked lists rather than two tables. Five rows do
   not need column headers, and the ACOS is the only figure worth setting large. */
.pulse .xgrid{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin-top:14px}
@media(max-width:900px){
.pulse .xgrid{grid-template-columns:1fr}}
.pulse .xcol{border:1px solid var(--rule-3);border-radius:10px;overflow:hidden;background:var(--paper);min-width:0}
.pulse .xcol .xh{padding:13px 16px 12px;border-bottom:1px solid var(--rule-3)}
.pulse .xcol.good .xh{background:var(--pos-bg)}
.pulse .xcol.bad .xh{background:var(--neg-bg)}
.pulse .xcol .xh .ey{font-family:var(--sans);font-size:9px;letter-spacing:.16em;text-transform:uppercase}
.pulse .xcol.good .xh .ey{color:var(--pos-text)}
.pulse .xcol.bad .xh .ey{color:var(--neg-text)}
.pulse .xcol .xh b{display:block;font-family:var(--serif);font-size:14.5px;color:var(--ink-1);margin-top:3px}
.pulse .xcol .xh span{display:block;font-family:var(--sans);font-size:10.5px;color:var(--ink-5);margin-top:2px}
.pulse .xlist{list-style:none;margin:0;padding:0}
.pulse .xlist li{display:grid;grid-template-columns:20px 1fr auto;align-items:baseline;gap:11px;
  padding:11px 16px 12px;border-bottom:1px solid var(--rule-3)}
.pulse .xlist li:last-child{border-bottom:0}
.pulse .xn{font-family:var(--sans);font-size:10.5px;color:var(--ink-5);font-variant-numeric:tabular-nums}
.pulse .xt{font-family:var(--sans);font-size:12.5px;color:var(--ink-1);min-width:0;overflow-wrap:anywhere}
.pulse .xt em{display:block;font-style:normal;font-size:10.5px;color:var(--ink-5);margin-top:2px}
.pulse .xv{font-family:var(--serif);font-weight:700;font-size:16px;font-variant-numeric:tabular-nums;white-space:nowrap}
.pulse .xcol.good .xv{color:var(--pos-text)}
.pulse .xcol.bad .xv{color:var(--neg-text)}

/* Projected against target, one row a metric. A bullet reads the gap directly;
   two bars on a shared axis made the reader measure it by eye. Fill and mark are
   different forms as well as different colours, and every figure is labelled, so
   identity never rests on colour alone. */
.pulse .bullets{display:flex;flex-direction:column;margin-top:14px}
.pulse .blt{display:grid;grid-template-columns:168px 1fr 142px;align-items:center;gap:18px;
  padding:13px 0;border-bottom:1px solid var(--rule-3)}
.pulse .blt:last-child{border-bottom:0}
.pulse .bltl b{display:block;font-family:var(--sans);font-size:9.5px;letter-spacing:.15em;
  text-transform:uppercase;color:var(--ink-5);font-weight:400}
.pulse .bltl span{display:block;font-family:var(--serif);font-weight:700;font-size:19px;color:var(--ink-1);
  line-height:1.25;margin-top:2px;font-variant-numeric:tabular-nums}
.pulse .blttrack{position:relative;height:34px;background:var(--rule-3);border-radius:3px;min-width:0}
/* one fill for every row: the bar is the projection, a single series, so it
   keeps one colour and the legend stays true. Whether the row is ahead or behind
   is carried by the figure on the right, which is labelled as well as coloured.
   Splitting the fill grey/green made two thirds of the chart read as disabled. */
.pulse .bltfill{position:absolute;left:0;top:0;bottom:0;border-radius:3px 2px 2px 3px;
  background:var(--green-900);min-width:2px}
/* the target: a mark, not a bar, so it cannot be mistaken for a second series */
.pulse .blttar{position:absolute;top:-5px;bottom:-5px;width:3px;margin-left:-1.5px;border-radius:2px;
  background:var(--gold);box-shadow:0 0 0 2px var(--paper)}
.pulse .bltr{text-align:right}
.pulse .bltr b{display:block;font-family:var(--serif);font-weight:700;font-size:17px;
  font-variant-numeric:tabular-nums}
.pulse .blt.ok .bltr b{color:var(--pos-text)}
.pulse .blt.near .bltr b{color:var(--gold-deep)}
.pulse .blt.off .bltr b{color:var(--neg-text)}
/* on the pace rows the fill carries the status, and the legend names all
   three, so the colour is true rather than a second meaning on one swatch */
.pulse .bullets.pace .blt.ok .bltfill{background:var(--pos-text)}
.pulse .bullets.pace .blt.near .bltfill{background:var(--gold)}
.pulse .bullets.pace .blt.off .bltfill{background:var(--neg-text)}
.pulse .bullets.pace .bltr b{font-family:var(--sans);font-size:12px;letter-spacing:.02em}
.pulse .bltr span{display:block;font-family:var(--sans);font-size:10px;color:var(--ink-5);margin-top:2px;
  font-variant-numeric:tabular-nums}
.pulse .cleg .lgbar{width:14px;height:9px;border-radius:2px;background:var(--green-900)}
.pulse .cleg .lgtick{width:3px;height:13px;border-radius:2px;background:var(--gold)}
@media(max-width:820px){
.pulse .blt{grid-template-columns:120px 1fr 108px;gap:12px}}

/* Click a column to sort. The mark hangs off the end of the label, not off the
   edge of the cell: the green header bands set their own padding at a higher
   specificity than anything written here, so a cell pinned arrow sat inside
   that padding and touched the last letter of every column name.
   At rest both halves show faintly, so the header says the column sorts before
   anyone hovers. The column in force keeps one solid mark, in gold. */
.pulse table.dtab th.sortable{cursor:pointer;user-select:none}
.pulse table.dtab th.sortable .thl{position:relative;display:inline-block;padding-right:13px}
.pulse table.dtab th.sortable .thl::before,.pulse table.dtab th.sortable .thl::after{
  content:'';position:absolute;right:2px;width:0;height:0;opacity:.3;
  border-left:2.5px solid transparent;border-right:2.5px solid transparent;
  transition:opacity .12s ease}
.pulse table.dtab th.sortable .thl::after{top:50%;margin-top:-4px;border-bottom:3px solid currentColor}
.pulse table.dtab th.sortable .thl::before{top:50%;margin-top:1px;border-top:3px solid currentColor}
.pulse table.dtab th.sortable:hover .thl::before,.pulse table.dtab th.sortable:hover .thl::after{opacity:.55}
/* one mark, not two, once a direction is set: the other half would read as a
   second control rather than as the state of this one */
.pulse table.dtab th.sorted[data-dir="asc"] .thl::after{opacity:1;border-bottom-color:var(--gold-deep)}
.pulse table.dtab th.sorted[data-dir="asc"] .thl::before{opacity:0}
.pulse table.dtab th.sorted[data-dir="desc"] .thl::before{opacity:1;border-top-color:var(--gold-deep)}
.pulse table.dtab th.sorted[data-dir="desc"] .thl::after{opacity:0}
/* on the green bands the mark takes the lighter gold, which is the pair that
   carries on forest, and the deep gold would sink into it */
.pulse .pnl table.dtab.v1 thead th.sorted .thl::after,.pulse .pnl table.dtab.exec thead th.sorted .thl::after{
  border-bottom-color:var(--gold)}
.pulse .pnl table.dtab.v1 thead th.sorted .thl::before,.pulse .pnl table.dtab.exec thead th.sorted .thl::before{
  border-top-color:var(--gold)}
.pulse table.dtab th.sortable:focus-visible{outline:2px solid currentColor;outline-offset:-3px}

/* A control row and the label in front of it are one object wherever they sit:
   the board header, a picker row above the exhibits, or a panel cap. Both were
   scoped - .ctlrow only under .ovhead, .pkl only under .pickrow - so the first
   section control put in a panel cap came out as unstyled body text with no gap
   to the control beside it. Unscoped here, with the two scoped rules left in
   place: they carry the same values and simply keep winning on specificity. */
.pulse .ctlrow{display:inline-flex;align-items:center;gap:8px}
.pulse .pkl{font-family:var(--sans);font-size:9px;letter-spacing:.16em;text-transform:uppercase;
  color:var(--ink-5);flex-shrink:0;white-space:nowrap}
/* in a cap the label sits the same distance from its control as it does in a
   picker row, so the two places read as the same component */
.pulse .pnl .cap .ctlrow{gap:10px}

/* Weekly review jump menu. Sticky at the top of the viewport, on the page
   ground so panels pass cleanly underneath, and the panels carry a
   scroll-margin so a clicked section lands below the bar rather than under it.
   This is the only page with one: it is the only page with six long tables. */
.pulse .secnav{position:sticky;top:0;z-index:6;background:var(--ground);
  margin-top:14px;margin-bottom:0;padding:10px 0;border-bottom:1px solid var(--rule)}
.pulse .secnav .seg{background:var(--paper)}
.pulse #board-wr > .pnl{scroll-margin-top:62px}

/* the signal cards read the ASIN report, which is a different account and a
   different month from the weekly sheet above them, so the block says which */
.pulse .sigcap{font-family:var(--sans);font-size:10px;letter-spacing:.02em;color:var(--ink-5);
  margin-top:14px;margin-bottom:-2px}
