/* widgets/the-business — the vitals rail: live .vr micro-rows (post-7/13 Fresh Take)
   plus the DORMANT Stage-5 tile-grid chrome (.lr-vc/.vt/.vgrip/drag states) that pairs
   with the reorder machinery kept in render.js. Moved verbatim from index.html <style>.
   (.lr-vkick stays in index.html — the close-spine banner wears it.) */
/* Vitals micro-row — ONE ANATOMY (Craig 7/16 punch #12): label left · fixed spark slot ·
   value right · sub-line row always in the layout (empty keeps the space) so every rail
   tile is one height and every value right-aligns to one column. */
#ops-pane-today .vr{display:flex;flex-wrap:wrap;align-items:center;gap:1px 8px;padding:7px 10px;border-radius:10px;background:#fff;border:1px solid #e7e2d4;cursor:pointer;transition:border-color .12s;min-width:0;width:100%;text-align:left}
#ops-pane-today .vr:hover{border-color:var(--brand-line,#b9d8b4)}
#ops-pane-today .vr .vr-lb{font:600 var(--fs-label,11px) Inter;letter-spacing:.05em;text-transform:uppercase;color:var(--motm-grey-500,#8a918d);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:18px}
#ops-pane-today .vr .vr-n{font:700 15px/18px Inter;color:var(--motm-charcoal,#1a1d1c);font-variant-numeric:tabular-nums;flex:none;white-space:nowrap}
#ops-pane-today .vr .vr-spk{width:50px;height:13px;flex:none;overflow:hidden}
#ops-pane-today .vr .vr-spk svg{display:block;width:100%;height:100%}
/* trend pending → a quiet dashed hairline in the same slot; deliberate, never a random hole */
#ops-pane-today .vr .vr-spk.dormant::before{content:'';display:block;margin-top:6px;border-top:1px dashed #e9e4d6}
#ops-pane-today .vr.attn{border-color:var(--action-line,#8fdba8)}
#ops-pane-today .vr.attn .vr-n{color:var(--action-deep,#0c7a38)}
#ops-pane-today .vr.vr-live{border-color:var(--brand-line,#b9d8b4);animation:btLivePulse 1.9s ease-out infinite}
/* the sub-line row: one muted line, always present (min-height reserves the space) */
#ops-pane-today .vr .vr-lbs{order:10;width:100%;min-height:13px;font:400 var(--fs-micro,10px)/13px Inter;letter-spacing:0;text-transform:none;color:#b3b9b0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* ═══ FIRM VITALS STRIP (7/1 packet rebuilt 7/5 ON the restacked landing) — grouped card view
   (The Books · The Business) with health dots + trend delta + 7-day sparkline, toggling back to
   the slim 7/4 ribbon. COURT-HONEST: no amber/red ink in this strip, ever — alarm color lives
   ONLY in the your-court band above. Health here = calm states: green (clear/under-cap),
   slate (workload), gray (neutral). */
#ops-pane-today .lr-vwrap{display:grid;grid-template-columns:var(--vcols,5fr 4fr);gap:10px;margin:0 0 18px}
@media(max-width:980px){#ops-pane-today .lr-vwrap{grid-template-columns:1fr}}
#ops-pane-today .lr-vgrp{background:#fbf9f5;border:1px solid #e7e2d4;border-radius:14px;padding:2px 6px 8px}
#ops-pane-today .lr-vgrp .gh{display:flex;align-items:center;gap:8px;font:700 12px Inter;letter-spacing:.1em;text-transform:uppercase;color:#9aa39b;padding:10px 8px 8px}
/* UNIFORM TILE GRID (Stage 5): auto-FILL (never auto-fit) so a short last row keeps tile-width
   tracks instead of stretching the orphan (Pennyworth) into a full-width rectangle; grid-auto-rows
   equalises every row to one height; align-items:stretch + .lr-vc height:100% make every tile an
   identical cell — same height, corners, padding — regardless of which row it lands on. */
#ops-pane-today .lr-vgrp .cells{display:grid;grid-template-columns:repeat(auto-fill,minmax(118px,1fr));grid-auto-rows:1fr;align-items:stretch;gap:8px;padding:0 2px}
/* SPEC B: .vt — unified vitals tile contract for Books + Business rows.
   Use this class (or ensure .lr-vc meets these constraints) for data-driven tiles.
   Slot1 = .vt-lbl (label, max 2 lines, 28px fixed height, no ellipsis);
   Slot2 = .vt-num (number, --fs-num tabular-nums);
   Slot3 = .vt-foot (footer 18px: delta chip left + spark svg right or em-dash). */
.vt{flex:1 1 148px;min-width:148px;min-height:118px;display:flex;flex-direction:column;gap:6px;padding:14px 16px;background:#fff;border:1px solid var(--motm-grey-100);border-radius:14px;box-sizing:border-box}
.vt .vt-lbl{font:600 var(--fs-label) Inter;text-transform:uppercase;letter-spacing:.08em;color:var(--motm-grey-500);min-height:28px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.vt .vt-num{font:700 var(--fs-num)/1.0 Inter;color:var(--motm-charcoal);font-variant-numeric:tabular-nums;margin-top:auto}
.vt .vt-foot{height:18px;display:flex;align-items:center;gap:6px;margin-top:2px;font:500 var(--fs-micro) Inter}
.vt .vt-delta{border-radius:999px;padding:1px 7px;white-space:nowrap}
.vt .vt-delta.ok{background:#dcfce7;color:var(--brand-ok,#15803d)}
.vt .vt-delta.bad{background:#fee2e2;color:#b91c1c}
#ops-pane-today .lr-vc{position:relative;display:flex;flex-direction:column;align-items:stretch;text-align:left;background:#fff;border:1px solid #e7e2d4;border-radius:14px;padding:9px 11px 8px;cursor:pointer;min-width:148px;min-height:118px;box-sizing:border-box;overflow:hidden;transition:border-color .12s,box-shadow .12s}
#ops-pane-today .lr-vc:hover{border-color:var(--brand-line,#b9d8b4);box-shadow:0 2px 9px rgba(31,74,45,.06)}
/* reorder grip — the app's native flex-drag handle (grab-handle + localStorage order, same pattern
   as the pipeline board; no GridStack/library). Hidden until hover so tiles stay clean. */
#ops-pane-today .lr-vc .vgrip{position:absolute;top:6px;right:6px;width:16px;height:16px;display:none;align-items:center;justify-content:center;color:#c4bdad;cursor:grab;font:700 11px/1 Inter;letter-spacing:-1px;border-radius:5px;z-index:3;user-select:none;touch-action:none}
#ops-pane-today .lr-vc:hover .vgrip{display:flex}
#ops-pane-today .lr-vc .vgrip:hover{background:#f0ece3;color:#8b948c}
#ops-pane-today .lr-vc.vdragging{opacity:.42;box-shadow:0 6px 18px rgba(31,74,45,.16);cursor:grabbing;z-index:5}
#ops-pane-today .lr-vgrp .cells.vdropzone{outline:2px dashed var(--brand-line,#b9d8b4);outline-offset:3px;border-radius:11px}
#ops-pane-today .lr-vc .acc{position:absolute;left:0;top:0;bottom:0;width:3px;background:#5b6570;opacity:.55}
#ops-pane-today .lr-vc .top{display:flex;align-items:center;gap:5px;min-width:0}
#ops-pane-today .lr-vc .top .em{font-size:14px;line-height:1;filter:saturate(.78);opacity:.9;flex:none}
#ops-pane-today .lr-vc .top .lb{font:600 var(--fs-label) Inter;letter-spacing:.08em;text-transform:uppercase;color:var(--motm-grey-500);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#ops-pane-today .lr-vc .top .dot{width:6px;height:6px;border-radius:50%;background:#c9c2b2;flex:none;margin-left:auto}
#ops-pane-today .lr-vc .top .dot.ok{background:var(--brand-ok,#15803d)}
#ops-pane-today .lr-vc .top .dot.work{background:#5b6570}
/* .pw-gold (Pennyworth tile chrome) — moved to widgets/the-vault/styles.css */
#ops-pane-today .lr-vc .nm{font:700 var(--fs-num)/1.0 Inter;color:var(--motm-charcoal);font-variant-numeric:tabular-nums;line-height:1.0;margin-top:7px;display:flex;align-items:baseline;white-space:nowrap;overflow:hidden}
#ops-pane-today .lr-vc .un{font:400 var(--fs-body) Inter;color:#9aa39b;margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#ops-pane-today .lr-vc .vasof{font:400 10px Inter;color:#c3bda9;margin-top:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}
/* 🤖 Bot-time LIVE (Craig 7/7: bot time must mirror live activity) — when the ledger carries a
   status='running' row the tile wears the fleet strip's WORKING-ring language: an expanding green
   ring (box-shadow, so the tile's overflow:hidden can't clip it) + the feed's blinking live dot.
   Calm and court-honest — green only, no size change, no alarm. */
#ops-pane-today .lr-vc.btlive,#ops-pane-today .lr-g.btlive{border-color:var(--brand-line,#b9d8b4);animation:btLivePulse 1.9s ease-out infinite}
#ops-pane-today .lr-vc .top .dot.live,#ops-pane-today .lr-g .dot.live{background:var(--brand-ok,#15803d);animation:mfBlink 1.6s infinite}
@keyframes btLivePulse{0%{box-shadow:0 0 0 0 rgba(21,128,61,.32)}70%{box-shadow:0 0 0 7px rgba(21,128,61,0)}100%{box-shadow:0 0 0 0 rgba(21,128,61,0)}}
#ops-pane-today .vtr{font:700 12px Inter;margin-left:6px;white-space:nowrap;flex:none}
#ops-pane-today .lr-vtog{margin-left:auto;background:#fff;border:1px solid #e7e2d4;border-radius:999px;padding:3px 11px;font:600 12px Inter;color:#5b6b5e;cursor:pointer;letter-spacing:0;text-transform:none;white-space:nowrap}
#ops-pane-today .lr-vtog:hover{border-color:var(--brand-line,#b9d8b4)}
/* fail/warn dots for the Routines vitals card — the handoff's ONE sanctioned alarm color on
   the strip ("court-honest means a red dot on the card face when something failed") */
#ops-pane-today .lr-vc .top .dot.fail{background:#c0524d}
#ops-pane-today .lr-vc .top .dot.warn{background:var(--motm-warning,#b87a14)}
/* THE MACHINE tripwire (Craig 7/22 8:52p): metered-API spend > $0 wears an amber edge + amber
   ink on the tile — the one Fleet-Cost signal that survived that tile's retirement. Sanctioned
   alarm alongside the Routines fail dot: metered spend IS Craig's court (env-leak class). */
#ops-pane-today .vr.vr-amber{border-color:var(--motm-warning,#b87a14)}
#ops-pane-today .vr.vr-amber .vr-n{color:var(--motm-warning,#b87a14)}
