/* Portfolio tracker: sticky header, KPI tiles, report cards, tables, chart kit, customer 360, setup grids. */
.pf-head{align-items:flex-end;position:sticky;top:0;z-index:5;background:var(--paper);padding:10px 0 12px;margin:-10px 0 14px;border-bottom:1px solid transparent}
.pf-head h1{font-size:24px}
.pf-controls{align-items:flex-end}
.pf-f{min-width:0}.pf-f select,.pf-f input{width:auto;min-width:96px}
.pf-body{transition:opacity .15s}
.pf-body.is-loading{opacity:.45;pointer-events:none}
.pf-tabs{margin-top:-4px}
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:12px;margin-bottom:16px}
.kpi{background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:14px 16px;display:flex;flex-direction:column;gap:2px;min-width:0}
.kpi-l{font-size:12px;color:var(--ink-3)}
.kpi-v{font-size:22px;font-weight:600;letter-spacing:-.01em;line-height:1.2;overflow:hidden;text-overflow:ellipsis}
.kpi-s{font-size:12px;color:var(--ink-3)}
.kpi.hero{border-color:var(--accent-line);background:linear-gradient(180deg,var(--accent-soft),var(--panel) 70%)}
.kpi.hero .kpi-v{font-size:30px}
.kpi.sk,.pcard.sk{min-height:84px;background:linear-gradient(90deg,var(--panel) 25%,var(--panel-2) 50%,var(--panel) 75%);background-size:200% 100%;animation:sk 1.2s infinite}
@keyframes sk{to{background-position:-200% 0}}
@media (prefers-reduced-motion:reduce){.kpi.sk,.pcard.sk{animation:none}}
.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:1px;background:var(--line);border:1px solid var(--line);border-radius:8px;overflow:hidden;margin-bottom:16px}
.facts>div{background:var(--panel);padding:10px 14px;display:flex;flex-direction:column;min-width:0}
.facts span{font-size:11.5px;color:var(--ink-3)}.facts b{font-weight:600;font-size:14px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pcard{background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:16px 18px;margin-bottom:16px;min-width:0}
.pcard>header{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:12px;flex-wrap:wrap}
.pcard>header>div:first-child{flex:1 1 260px;min-width:0}   /* title + subtitle take the room; switches stay on the same row */
.pcard-act{display:flex;gap:8px;align-items:center;flex-wrap:wrap;justify-content:flex-end}
.pcard-act .cot-seg{margin:0}
.pcard>header h3{font-size:15px}
.pcard>header p{margin:2px 0 0;font-size:12.5px;color:var(--ink-3)}
.pcard-act{flex:none}
.pgrid{display:grid;gap:16px;align-items:start}
.pgrid>.pcard,.pgrid>div>.pcard{margin-bottom:16px}
.g-1-1{grid-template-columns:repeat(2,minmax(0,1fr))}.g-2-1{grid-template-columns:minmax(0,2fr) minmax(0,1fr)}
@media (max-width:1100px){.g-1-1,.g-2-1{grid-template-columns:minmax(0,1fr)}}
.pnote{font-size:12.5px;color:var(--ink-2);background:var(--panel-2);border-radius:6px;padding:8px 12px;margin:0 0 12px}
.pnote a,.kpi-s a{color:var(--accent)}
h4.minor{font-size:12px;color:var(--ink-3);font-weight:500;margin:14px 0 6px;text-transform:uppercase;letter-spacing:.06em}
.key{display:inline-block;width:10px;height:10px;border-radius:2px;margin-right:7px;vertical-align:-1px}
.delta{font-family:var(--mono);font-size:12.5px;white-space:nowrap}.delta.good{color:var(--good)}.delta.bad{color:var(--bad)}
.pos{color:var(--good)}.neg{color:var(--bad)}
.spill{display:inline-block;font-size:11.5px;font-weight:600;padding:1px 8px;border-radius:10px;white-space:nowrap;background:var(--panel-2);color:var(--ink-2)}
.spill.good{background:var(--accent-soft);color:var(--good)}.spill.bad{background:var(--red-soft);color:var(--bad)}
/* tables */
.ptbl-box{position:relative}
.ptbl-tools{display:flex;justify-content:flex-end;margin:-6px 0 4px}
.ptbl{overflow:auto;border:1px solid var(--line);border-radius:6px;max-width:100%}
.ptbl table{font-size:13px}
.ptbl th,.ptbl td{padding:6px 8px;white-space:nowrap}
/* fit the card instead of scrolling sideways: headings wrap onto two lines, text cells wrap, numbers stay on one line */
.ptbl th{white-space:normal;vertical-align:bottom;line-height:1.25;min-width:56px;max-width:120px}
.ptbl td:not(.num){white-space:normal;min-width:80px;max-width:240px;overflow-wrap:anywhere}
.ptbl td.num{font-size:12.5px}
.ptbl.dense th,.ptbl.dense td{padding:5px 8px;font-size:12.5px}
.ptbl.sticky thead th{position:sticky;top:0;z-index:2}
.ptbl th[data-sort]{cursor:pointer;user-select:none}.ptbl th[data-sort]:hover{color:var(--ink)}
.ptbl tfoot td{font-weight:600;background:var(--panel-2);border-top:1px solid var(--line-strong);position:sticky;bottom:0}
.ptbl td.stick,.ptbl th.stick{position:sticky;left:0;background:var(--panel);z-index:1;max-width:280px;overflow:hidden;text-overflow:ellipsis}
.ptbl thead th.stick{z-index:3;background:var(--panel-2)}
.ptbl tbody tr:hover td{background:var(--panel-2)}
.ptbl a{color:var(--accent);text-decoration:none}.ptbl a:hover{text-decoration:underline}
.ptbl .cell{display:block;margin:-6px -8px;padding:6px 8px}
/* when a table is still wider than its card, its first column stays in view while scrolling */
.ptbl tbody td:first-child,.ptbl thead th:first-child,.ptbl tfoot td:first-child{position:sticky;left:0;z-index:1;background:var(--panel)}
.ptbl thead th:first-child{z-index:3;background:var(--panel-2)}.ptbl tfoot td:first-child{background:var(--panel-2)}
.ptbl tbody tr:hover td:first-child{background:var(--panel-2)}
.pf-toolbar input[type=text]{max-width:280px}
/* chart kit */
.viz svg{width:100%;height:auto;display:block;overflow:visible}
.viz .gl{stroke:var(--grid);stroke-width:1}.viz .base{stroke:var(--axis);stroke-width:1}
.viz .ref{stroke:var(--ink-2);stroke-width:1.5;stroke-dasharray:0}
.viz .tick{fill:var(--tick);font-size:11px;font-family:var(--sans)}.viz .tick.strong{fill:var(--ink);font-weight:600}
.viz .hit{fill:transparent;cursor:crosshair;outline:none}.viz .hit:hover,.viz .hit:focus{fill:var(--ink);fill-opacity:.04}
.viz .ring{stroke:var(--panel);stroke-width:2}
.vlegend{display:flex;flex-wrap:wrap;gap:4px 16px;font-size:12.5px;color:var(--ink-2);margin:0 0 8px}
.vlegend span{display:inline-flex;align-items:center;gap:6px}.vlegend i{width:10px;height:10px;border-radius:2px;display:inline-block}
.vlegend b{font-family:var(--mono);font-weight:500;color:var(--ink)}
.viz-tip{position:fixed;z-index:100;pointer-events:none;background:var(--panel);color:var(--ink);border:1px solid var(--line);box-shadow:var(--shadow);border-radius:6px;padding:8px 10px;font-size:12.5px;opacity:0;transition:opacity .1s;max-width:320px}
.viz-tip.on{opacity:1}.viz-tip .tt{font-weight:600;margin-bottom:4px}
.viz-tip .tr{display:flex;align-items:center;gap:8px;line-height:1.6}.viz-tip .tr i{width:12px;height:2px;border-radius:1px;display:inline-block}
.viz-tip .tr b{font-family:var(--mono);font-weight:600}.viz-tip .tr span{color:var(--ink-3)}
.hbars{display:flex;flex-direction:column;gap:4px}
.hb{display:grid;grid-template-columns:minmax(90px,34%) 1fr auto;align-items:center;gap:10px;font-size:12.5px;padding:2px 0;border-radius:4px;outline:none}
.hb:hover,.hb:focus{background:var(--panel-2)}
.hb-l{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ink-2)}
.hb-t{position:relative;height:14px}
.hb-t i{position:absolute;top:0;bottom:0;left:0;border-radius:0;min-width:2px}
.hbars.div .hb-t{border-left:0;background:linear-gradient(var(--axis),var(--axis)) 50% 0/1px 100% no-repeat}
.hbars.div .hb-t i.neg{border-radius:0}
.hb-v{font-family:var(--mono);font-size:12px;min-width:64px;text-align:right}
.mixbar{display:flex;height:14px;gap:2px;border-radius:0;overflow:hidden;margin:2px 0 8px}
.mixbar i{display:block;min-width:2px;outline:none}.mixbar i:hover,.mixbar i:focus{filter:brightness(1.1)}
.mix-months{display:flex;flex-direction:column;gap:2px;margin-top:10px}
.mix-months>div{display:grid;grid-template-columns:32px 1fr;align-items:center;gap:8px;font-size:11.5px;color:var(--ink-3)}
.mix-months .mixbar{margin:0;height:10px}
.mix-rows{display:flex;flex-direction:column;gap:6px;margin-bottom:8px}
.mix-row{display:grid;grid-template-columns:minmax(100px,24%) 1fr 72px;gap:10px;align-items:center;font-size:12.5px}
.mix-row span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ink-2)}.mix-row .mixbar{margin:0}.mix-row b{font-weight:500;font-size:12px}
.chan{margin-bottom:14px}.chan-h{display:flex;justify-content:space-between;font-size:13px;margin-bottom:2px}
.cot{display:flex;flex-direction:column}.cot-seg{align-self:flex-end;margin:0 0 8px}   /* in the flow: never on top of a card's own switches */
.trk-seg{margin-bottom:12px}
.comment-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}
@media (max-width:900px){.comment-grid{grid-template-columns:1fr}}
.c360-head{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin-bottom:14px}
.c360-head select{width:auto;min-width:280px;font-size:16px;font-weight:600}
.c360-meta{font-size:13px;color:var(--ink-3)}
.c360-pick{max-width:420px}
.chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:12px}
.chip{font-size:12.5px;padding:3px 10px;border-radius:12px;background:var(--panel-2);color:var(--ink-2);text-decoration:none}.chip:hover{background:var(--accent-soft);color:var(--accent)}
/* setup grids */
.grid-tbl input,.grid-tbl select{padding:4px 6px;font-size:13px;min-width:0}
.grid-tbl input.num{width:84px;text-align:right}
.grid-tbl td{padding:4px 6px}
.su-foot{display:flex;gap:8px;justify-content:flex-end;margin-top:12px;flex-wrap:wrap}
tr.dirty td{background:var(--accent-soft)}
label.chk{display:flex;gap:8px;align-items:center;font-size:13.5px}
.line-row{display:inline-block;padding-left:22px;color:var(--ink-2)}
/* weekly target: progress towards a target */
.reach{position:relative;height:16px;min-width:110px;background:var(--panel-2)}
.reach i{position:absolute;inset:0 auto 0 0;display:block}
.reach i.ok{background:var(--good)}.reach i.near{background:var(--s4)}.reach i.low{background:var(--bad)}
.reach span{position:relative;font-family:var(--mono);font-size:11.5px;padding-left:6px;line-height:16px;color:var(--ink)}
/* commitments grid */
.cm-tbl td.cm{min-width:104px;vertical-align:top}
.cm-tbl td.cm.ok{box-shadow:inset 3px 0 0 var(--good)}.cm-tbl td.cm.near{box-shadow:inset 3px 0 0 var(--s4)}.cm-tbl td.cm.low{box-shadow:inset 3px 0 0 var(--bad)}
.cm-tbl input.cm-in{width:96px;padding:4px 6px;text-align:right}
.cm-tbl td.cm.cm-dirty{background:var(--accent-soft)}.cm-tbl td.cm.cm-dirty input.cm-in{border-color:var(--accent);font-weight:600}
.cm-tbl td.cm.cm-bad input.cm-in{border-color:var(--red);background:var(--red-soft)}
.cm-bar{position:sticky;top:0;z-index:3;display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap;padding:8px 10px;margin-bottom:8px;background:var(--panel-2);border:1px solid var(--line);border-radius:var(--radius)}
.cm-bar-btns{display:flex;gap:6px}
.sdot{display:inline-block;width:12px;height:12px;vertical-align:-1px}   /* customer status path */
.fcst{color:var(--ink-2)}   /* forecast (not yet closed) month in the run-rate outlook */

/* customer volume classes (Customers › Tracker) */
.vcl-line{display:flex;flex-wrap:wrap;gap:4px 8px;margin:0 0 8px;line-height:1.5}
.vcl{display:inline-block;padding:0 6px;border-radius:8px;font-size:11px;white-space:nowrap;background:var(--panel-2)}
.vcl[data-vcl="Key accounts"]{background:var(--accent-soft);color:var(--accent);font-weight:600}
.vcl[data-vcl="Core"]{background:var(--blue-soft);color:var(--blue)}
.vcl[data-vcl="Lapsing"]{background:var(--amber-soft);color:var(--amber)}
