/* widgets/close-spine — month-end close banner + catch-up track + engagement fold.
   Extracted verbatim from the inline #ops-pane-today <style> block; scoping unchanged.
   Borrows the shared .lr-vkick kicker from the vitals strip (stays inline). */
/* Engagement spine rows (catch-up / cleanup loops folded into the close card) */
#ops-pane-today .lr-close .spine-engagements{border-top:1px solid var(--brand-frost,#e8ede6);margin-top:12px;padding-top:6px}
#ops-pane-today .lr-close .se-hd{font:700 var(--fs-label,11px) Inter;letter-spacing:.06em;text-transform:uppercase;color:#647062;margin:0 0 4px 2px}
#ops-pane-today .lr-close .se-row{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:8px;cursor:pointer;min-width:0;width:100%;text-align:left;border:none;background:none;transition:background .1s;font-family:Inter,system-ui,sans-serif}
#ops-pane-today .lr-close .se-row:hover{background:#f7f6f1}
/* ═══ MONTH-END CLOSE TRACKER (Craig 7/7 — "a close tracking bar... like a timeline thing") —
   one dot per Double close stage on a connecting rail, DONE as the end-cap. COURT-HONEST METER:
   green complete · light-green moving · neutral untouched — never alarm ink. Narrow widths
   scroll INSIDE .scroll, never the page. */
/* contain:inline-size — same guard as #fleet-strip: the rail's min-width must scroll INSIDE
   .scroll, never push the main column past the viewport */
/* XL redesign (Craig 7/10): the close-week headline — reads from across the room. Bookkeeper
   toggles (🤖 Bots · Marianne · Sergio · All) re-render every ring/count from close_tracker_all.rollup. */
#ops-pane-today .lr-close{background:#fff;border:1px solid #e7e2d4;border-radius:16px;padding:18px 24px 18px;margin:0;contain:inline-size}
#ops-pane-today .lr-close .hd{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
#ops-pane-today .lr-close .hd .per{font:700 13px Inter;color:var(--brand-mid,#306844);background:var(--brand-mist,#eef3ee);border-radius:99px;padding:3px 12px;white-space:nowrap}
/* .hd .scope removed 8/6 with the grey close-summary text node it styled (Craig: "This text has to
   go to stop the bouncing when I switch users."). Its only producer was render.js's header span;
   the rule is dropped in the same edit so a future reader can't take it as evidence the element
   still ships. The `.scope` word survives elsewhere in this widget as inline-styled popout copy —
   different surface, different selector, untouched. */
#ops-pane-today .lr-close .hd .inv{font:400 11px Inter;color:#736c5d;white-space:nowrap}
/* freshness — Craig asked for real-time; prove it on the surface */
#ops-pane-today .lr-close .synced{display:flex;align-items:center;flex-wrap:wrap;column-gap:12px;row-gap:5px;font:500 12.5px Inter;color:#647062;margin:6px 0 4px}
#ops-pane-today .lr-close .synced b{color:var(--brand-mid,#306844);font-weight:700}
/* bookkeeper toggle pills */
#ops-pane-today .lr-close .ct-tabs{display:contents}
/* ONE HEIGHT, WHATEVER THE LABEL (Craig 8/6 item 5). Padding was already identical on all four
   pills; the Bots pill still measured 39px against the others' 33 because the 🤖 glyph raised its
   line box, and no padding rule can equalise that. The emoji is gone from the label (render.js),
   and this explicit line-height is the guard: any future glyph in this row resizes nothing. */
#ops-pane-today .lr-close .ct-tab{font:600 14px/17px Inter;color:#5b6b5e;background:#f4f6f2;border:1px solid #e2e6dd;border-radius:999px;padding:7px 17px;cursor:pointer;transition:background .12s,color .12s,border-color .12s;white-space:nowrap}
#ops-pane-today .lr-close .ct-tab:hover{background:#eaf0e9}
#ops-pane-today .lr-close .ct-tab.on{background:var(--brand-deep,#1f4a2d);border-color:var(--brand-deep,#1f4a2d);color:#fff}
#ops-pane-today .lr-close .ct-tab .n{font-weight:700;opacity:.6;margin-left:6px;font-variant-numeric:tabular-nums}
#ops-pane-today .lr-close .ct-tab.on .n{opacity:.8}
/* .n.go is RETIRED (item 4) — the count badge is no longer a door, so it no longer wears a
   hover affordance that promised one. Rules kept out rather than left dangling: a hover style
   for a control that does not exist is how a dead click-path looks alive. */
/* THE DELIBERATE ROSTER DOOR (item 4). Reads as a link, not a pill, so it cannot be mistaken
   for a fifth filter — the whole defect was two controls wearing one shape. */
#ops-pane-today .lr-close .ct-browse{font:600 12.5px/17px Inter;color:var(--brand-mid,#306844);background:none;border:1px solid transparent;border-radius:999px;padding:7px 12px;margin-left:2px;cursor:pointer;white-space:nowrap;transition:background .12s,border-color .12s}
#ops-pane-today .lr-close .ct-browse:hover{background:#eef3ee;border-color:#dbe6dc;text-decoration:underline}
#ops-pane-today .lr-close .ct-browse:focus-visible{outline:2px solid var(--brand-mid,#306844);outline-offset:2px}
#ops-pane-today .lr-close .scroll{overflow-x:auto;overflow-y:hidden;margin:8px -12px 0;padding:0 12px}
#ops-pane-today .lr-close .rail{display:flex;align-items:flex-start;min-width:780px}
#ops-pane-today .lr-close .st{position:relative;flex:1 1 0;min-width:124px;display:flex;flex-direction:column;align-items:center;text-align:center;background:none;border:none;padding:6px 6px 10px;cursor:pointer;border-radius:14px;transition:background .12s}
#ops-pane-today .lr-close .st:hover{background:#f7f9f5}
#ops-pane-today .lr-close .st .ln{position:absolute;top:46px;left:50%;width:100%;height:3px;background:#ece7d8;pointer-events:none}
#ops-pane-today .lr-close .st .dotw{position:relative;height:80px;display:flex;align-items:center;justify-content:center}
#ops-pane-today .lr-close .st .ct{font:800 24px Inter;font-variant-numeric:tabular-nums;color:#46564d;margin-top:6px;white-space:nowrap;letter-spacing:-.01em;line-height:1}
#ops-pane-today .lr-close .st .ct .tt{font-weight:600;font-size:14.5px;color:#736c5d;letter-spacing:0}
#ops-pane-today .lr-close .st .ct.done{color:var(--brand-ok,#15803d)}
#ops-pane-today .lr-close .st .ct.done .tt{color:#84b393}
#ops-pane-today .lr-close .st .ct.move{color:var(--brand-mid,#306844)}
#ops-pane-today .lr-close .st .lb{font:700 12px Inter;letter-spacing:.03em;text-transform:uppercase;color:#6b7669;margin-top:8px;line-height:1.25;max-width:150px}
#ops-pane-today .lr-close .st .sub{display:inline-block;font:600 11px Inter;color:var(--brand-mid,#306844);background:#f2f7f3;border:1px solid #dbe9dd;border-radius:999px;padding:2px 10px;margin-top:6px;line-height:1.35;max-width:170px}
/* awaiting-cycle caption — calm, never alarm: a statement whose cycle hasn't cut is nobody's court */
#ops-pane-today .lr-close .st .awc{display:inline-block;font:500 10.5px Inter;color:#647062;margin-top:5px;line-height:1.3;max-width:140px;white-space:nowrap}
#ops-pane-today .lr-close .st.cap .dotw{height:92px}
#ops-pane-today .lr-close .st.cap .ct{font-size:28px}
#ops-pane-today .lr-close .st.cap .lb{color:var(--brand-mid,#306844);font-size:13px}
#ops-pane-today .lr-close .st.cap .cap2{font:400 11.5px Inter;color:#647062;margin-top:3px;line-height:1.3;max-width:130px}
@media(max-width:640px){
  #ops-pane-today .lr-close{padding:14px 16px}
  #ops-pane-today .lr-close .st{min-width:108px}
  #ops-pane-today .lr-close .st .dotw{height:70px}
  #ops-pane-today .lr-close .st .ct{font-size:21px}
  #ops-pane-today .lr-close .st.cap .dotw{height:80px}
}
/* Close spine — flat stage cards with progress bars (Fresh Take) */
#ops-pane-today .lr-close .spine-stages{display:flex;gap:8px;margin-top:14px;overflow-x:auto}
@media(max-width:900px){#ops-pane-today .lr-close .spine-stages{flex-wrap:wrap}}
#ops-pane-today .lr-close .stg{flex:1 1 0;min-width:76px;border:1px solid #e7e2d4;border-radius:12px;padding:10px 12px;cursor:pointer;transition:border-color .12s;background:#fff;text-align:left;display:flex;flex-direction:column}
#ops-pane-today .lr-close .stg:hover{border-color:var(--brand-line,#b9d8b4)}
#ops-pane-today .lr-close .stg .stg-lb{font:600 var(--fs-label,11px) Inter;letter-spacing:.06em;text-transform:uppercase;color:#647062;margin-bottom:5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#ops-pane-today .lr-close .stg b{font:700 18px Inter;font-variant-numeric:tabular-nums;color:#1a1d1c;display:block;line-height:1.15}
#ops-pane-today .lr-close .stg .stg-sub{font:400 10.5px Inter;color:#647062;margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1}
#ops-pane-today .lr-close .stg .stg-bar{height:3px;border-radius:2px;background:#ece7db;margin-top:8px;overflow:hidden;flex:none}
#ops-pane-today .lr-close .stg .stg-bar i{display:block;height:100%;background:var(--signal,#3e7d5c);border-radius:2px}
#ops-pane-today .lr-close .stg.done{background:var(--signal-tint,#eaf3ec);border-color:#cfe4d6}
#ops-pane-today .lr-close .stg.done b{color:var(--signal,#3e7d5c)}
#ops-pane-today .lr-close .stg.done .stg-lb{color:var(--signal,#3e7d5c)}
/* ═══ GAP-TO-DONE STRIP (Craig 7/16 7:20p — "instead of having me do math... display gap
   to close"): one row under the stage cards, remaining work per category SPLIT BY COURT.
   COURT-HONEST: the headline counts ONLY fleet-doable work; Craig wears calm amber, the
   client calm gray — chips, never alarm banners. Zero fleet-court = quiet green, no confetti. */
#ops-pane-today .lr-close .gapstrip{display:flex;align-items:stretch;gap:10px;margin-top:10px;border:1px solid #e7e2d4;border-radius:12px;padding:9px 12px;background:#fbfaf6;overflow-x:auto}
#ops-pane-today .lr-close .gapstrip.clear{background:var(--signal-tint,#eaf3ec);border-color:#cfe4d6}
#ops-pane-today .lr-close .gapstrip .gs-hd{flex:none;display:flex;flex-direction:column;justify-content:center;gap:3px;padding-right:12px;border-right:1px solid #ece7db;min-width:112px}
#ops-pane-today .lr-close .gapstrip .gs-kick{font:700 var(--fs-micro,10px) Inter;letter-spacing:.08em;text-transform:uppercase;color:#647062;white-space:nowrap}
#ops-pane-today .lr-close .gapstrip .gs-num{font:800 22px Inter;font-variant-numeric:tabular-nums;color:var(--motm-charcoal,#1a1d1c);line-height:1;white-space:nowrap}
#ops-pane-today .lr-close .gapstrip .gs-num .u{font:600 12.5px Inter;color:#647062;margin-left:4px}
#ops-pane-today .lr-close .gapstrip.clear .gs-num{color:var(--signal,#3e7d5c);font-size:15px}
#ops-pane-today .lr-close .gapstrip .gs-trend{font:600 12px Inter;line-height:1.35;white-space:nowrap;color:#647062}
#ops-pane-today .lr-close .gapstrip .gs-trend.dn{color:var(--brand-ok,#15803d)}
/* .up = the pile GREW. It had no rule at all, so a regression painted the exact grey of "level
   with yesterday" while every improvement went green — the glass celebrated one direction and
   muted the other (render.js:1289, builder2 8/8 truth audit). Amber, never coral: the gap strip
   is bot-run-books work and coral is reserved for Craig's court. */
#ops-pane-today .lr-close .gapstrip .gs-trend.up{color:var(--motm-warning,#b87a14)}
/* The party headline's fourth line ("across 11 books") — the denominator the number is measured
   against, and the row that keeps a party tab the same height as the court tab (8/7: a filter
   click was shoving the board 19px, all of it the court strip's trend chip). Same quiet ink and
   metrics as .gs-trend so the two headlines read as one instrument, never as alarm. */
#ops-pane-today .lr-close .gapstrip .gs-books{font:600 12px Inter;line-height:1.35;white-space:nowrap;color:#647062}
#ops-pane-today .lr-close .gapstrip .gs-cats{display:flex;gap:6px;flex:1;min-width:0}
/* OVERLAP GUARD (Craig 7/21 9:34p): the 12px nowrap sub-lines/chips are wider than an equal
   flex share, so columns must NOT shrink below their own content or neighbours collide. min-width
   :max-content sizes each column to its widest line (chip row or sub) — they still grow to fill a
   wide board, but when the total exceeds the rail the whole strip scrolls-x (overflow:auto above),
   exactly the "scroll before you shrink the type" order Craig asked for. */
#ops-pane-today .lr-close .gapstrip .gs-cat{flex:1 1 auto;min-width:max-content;display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-start;gap:1px;border:1px solid transparent;border-radius:9px;padding:5px 8px;background:none;cursor:pointer;text-align:left;transition:border-color .12s,background .12s;font-family:Inter,system-ui,sans-serif}
#ops-pane-today .lr-close .gapstrip .gs-cat:hover{border-color:var(--brand-line,#b9d8b4);background:#fff}
#ops-pane-today .lr-close .gapstrip .gs-cat .lb{font:600 var(--fs-micro,10px) Inter;letter-spacing:.05em;text-transform:uppercase;color:#647062;white-space:nowrap}
#ops-pane-today .lr-close .gapstrip .gs-cat .n{font:700 15px Inter;font-variant-numeric:tabular-nums;color:#1a1d1c;line-height:1.3;white-space:nowrap}
#ops-pane-today .lr-close .gapstrip .gs-cat .n.z{color:#647062;font-weight:600}
/* THE NAMED-SILENCE TILE (Craig 8/6 item 2, re-scoped 8/7: "the tile still renders and says so in
   plain words … never silently absent, because absence reads as zero-or-broken"). A category the
   publisher cannot split by person renders as a tile wearing an em-dash and the reason, so the row
   of eight keeps its shape on every tab. It is not a metric and must not read like one — muted ink,
   no hover border, default cursor. Naming what a surface cannot split is honesty, not a control.
   As of 8/7 all eight categories DO publish per party, so this styles an empty set on live data —
   kept because the contract is "a hole never appears", not "a hole never can". */
#ops-pane-today .lr-close .gapstrip .gs-cat.gs-cat-note{cursor:default;opacity:.72}
#ops-pane-today .lr-close .gapstrip .gs-cat.gs-cat-note:hover{border-color:transparent;background:none}
/* Recon census (Craig 7/18): the account-reconcile census wears a catch-up/live split sub-line
   and a touch more width, so it reads as a distinct metric from the Reconciliation close stage. */
#ops-pane-today .lr-close .gapstrip .gs-cat.gs-cat-wide{flex:1.7 1 auto}
/* SECONDARY TYPE READABILITY (Craig 7/21 9:34p — "text is too small" on a 34" WQHD at arm's length):
   the sub-lines are SENTENCES, so they leave --fs-micro (chips/badges only) and step up to 12px with
   line-height; the court chips get the same 12px + roomier padding so they don't clip. The 15px .n
   metric numbers and 22px gs-num stay dominant — hierarchy preserved, only the tiny type grows. */
#ops-pane-today .lr-close .gapstrip .gs-cat .gs-sub{font:600 12px Inter;line-height:1.35;letter-spacing:.01em;color:#647062;white-space:nowrap;margin-top:2px}
/* THE OPEN-ME LABEL (Craig 8/5, walkthrough 2 — the statements popout "is just kind of weird how
   it's hidden"). Reads as an affordance and not as another metric: pill-shaped, canopy-tinted, its
   own caret. It sits INSIDE the chip button, so hover lights it with the chip rather than
   pretending to be a control of its own. Court-honest: --signal-tint chrome, never --action. */
#ops-pane-today .lr-close .gapstrip .gs-cat .gs-open{font:700 11px Inter;line-height:1.3;
  letter-spacing:.01em;color:var(--canopy,#1e3b2f);background:var(--signal-tint,#eaf3ec);
  border-radius:999px;padding:2px 8px;margin-top:4px;white-space:nowrap;display:inline-flex;
  align-items:center;gap:4px}
#ops-pane-today .lr-close .gapstrip .gs-cat .gs-open .cv{font-size:9px;opacity:.75}
#ops-pane-today .lr-close .gapstrip .gs-cat:hover .gs-open{background:#dbeade}
#ops-pane-today .lr-close .gapstrip .gs-chip{display:inline-block;font:600 12px Inter;border-radius:99px;padding:2px 8px;margin-left:4px;white-space:nowrap;vertical-align:1px}
/* the shared freshness stamp ('as of 9:33pm · 16s ago') rides the strip head — bump it in-place to
   match, scoped so other tiles' stamps are untouched (freshChip inline-styles, so !important wins). */
#ops-pane-today .lr-close .gapstrip .gs-hd .fchip{font-size:12px!important}
#ops-pane-today .lr-close .gapstrip .gs-chip.cr{color:var(--motm-warning,#b87a14);background:#faf3e3}
#ops-pane-today .lr-close .gapstrip .gs-chip.cl{color:#5f6a76;background:#eef0f3}
@media(max-width:900px){#ops-pane-today .lr-close .gapstrip .gs-cats{min-width:640px}}
/* ═══ OUR-COURT LINE (HQ 7/19 evening — the banner's only job is Craig's court, calmly): one
   quiet single-height line, no wrapping. Gold ink ONLY on his named items; empty state is plain
   ink (the reward). Teammate balls = one muted slate chip. The whole line is a door (court drawer);
   the external accounting lives in the tooltip + its own popouts. Never alarm red. */
#ops-pane-today .lr-close .ourcourt{display:flex;align-items:center;gap:10px;margin:10px 0 2px;border-radius:10px;padding:7px 14px;border:1px solid #ece7da;background:#fbfaf6;cursor:pointer;white-space:nowrap;overflow:hidden;transition:border-color .12s,background .12s}
#ops-pane-today .lr-close .ourcourt:hover{border-color:#d8d2c0;background:#faf8f1}
#ops-pane-today .lr-close .ourcourt:focus-visible{outline:2px solid var(--brand-line,#b9d8b4);outline-offset:1px}
#ops-pane-today .lr-close .ourcourt.you{background:#fdf9ef;border-color:#eee3c8}
#ops-pane-today .lr-close .ourcourt.you:hover{border-color:#e2d3a6}
#ops-pane-today .lr-close .ourcourt .oc-line{font:600 13px Inter;color:#5b6b5e;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#ops-pane-today .lr-close .ourcourt.empty .oc-line{font-weight:500;color:#647062}
#ops-pane-today .lr-close .ourcourt .oc-you{font-weight:800;color:#8a6d1f}
#ops-pane-today .lr-close .ourcourt .oc-sep{color:#736c5d;font-weight:400}
#ops-pane-today .lr-close .ourcourt .oc-team{margin-left:auto;flex:none;font:600 11px Inter;color:#55636f;background:#eef1f4;border:1px solid #dde3e9;border-radius:99px;padding:2px 10px;white-space:nowrap}

/* ═══ RECON CENSUS CARD (Craig GO 7/22 — Designer mock recon-census-popover.html): the anchored
   census popover that replaces the recon chip's plain gray title tooltip. Body-level fixed overlay
   (no strip layout shift); hover-shown, click-pinned. Colors/type transcribed from the mock, mapped
   to app tokens where they exist. Court-honest: alarm-adjacent gold rides Craig-court rows only. */
.rc-pop{position:fixed;z-index:9600;width:428px;max-width:calc(100vw - 20px);
  background:linear-gradient(180deg,#ffffff 0%,var(--paper,#fbf9f4) 100%);
  border:1px solid var(--line,#e7e2d4);border-radius:17px;
  box-shadow:0 1px 0 rgba(255,255,255,.7) inset,0 26px 64px -18px rgba(31,42,30,.42),0 8px 22px -14px rgba(31,42,30,.30);
  overflow:hidden;font-family:Inter,system-ui,sans-serif;color:#1f2937;
  opacity:0;transform:translateY(-4px);pointer-events:none;transition:opacity .12s ease,transform .12s ease}
.rc-pop.show{opacity:1;transform:none;pointer-events:auto}
.rc-pop .rc-caret{position:absolute;top:-9px;left:50%;transform:translateX(-50%) rotate(45deg);width:17px;height:17px;
  background:#fff;border-left:1px solid var(--line,#e7e2d4);border-top:1px solid var(--line,#e7e2d4);border-radius:4px 0 0 0;z-index:2}
/* ═══ PINNED HEAD + FOOT, SCROLLING BODY (Craig 8/5 10:51, screenshot: "Popout is cutoff") ══════
   The card used to take max-height + overflow:auto on the WHOLE panel once it outgrew its slot,
   and two things went wrong with that — both visible in his shot. The footnote and the
   "Open … →" action scrolled clean out of the card (a card whose action is amputated is a dead
   end), and macOS paints OVERLAY scrollbars, invisible until you are already scrolling, so a
   card that technically scrolled was indistinguishable from one simply chopped off mid-row.
   Now the header and footer are pinned and only the rows between them move, behind a scrollbar
   you can SEE and a fade that says there is more. Box, colors and placement are unchanged. */
.rc-pop{display:flex;flex-direction:column}
.rc-pop .rc-hd,.rc-pop .rc-actbar,.rc-pop .rc-foot{flex:none}
.rc-pop .rc-body{position:relative;flex:1 1 auto;min-height:0;display:flex;flex-direction:column}
.rc-pop .rc-scroll{flex:1 1 auto;min-height:0;overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain}
/* THE SCROLLBAR HAS TO BE SEEN. macOS paints OVERLAY scrollbars — zero width, invisible until you
   are already scrolling — and that invisibility is what made a scrollable card read to Craig as a
   cut-off one on 8/5. Styling ::-webkit-scrollbar opts this element out of overlay and into a
   classic bar that takes real layout width (measured: 10px gutter in a headed browser).
   DO NOT add `scrollbar-width`/`scrollbar-color` here: setting the standard property makes Chrome
   IGNORE these rules and hands the element straight back to the invisible overlay bar — measured
   both headless and headed on 8/5, 0px gutter either way. The webkit pseudo-elements are the only
   thing that actually reserves the gutter on this platform. */
.rc-pop .rc-scroll::-webkit-scrollbar{width:10px}
.rc-pop .rc-scroll::-webkit-scrollbar-track{background:#f6f2e8;border-radius:99px;margin:5px 0}
.rc-pop .rc-scroll::-webkit-scrollbar-thumb{background:#cfc9b8;border-radius:99px;border:2px solid #f6f2e8}
.rc-pop .rc-scroll::-webkit-scrollbar-thumb:hover{background:#aca48f}
/* MORE-BELOW cue — only while there IS more below (JS toggles .rc-more on open and on scroll) */
.rc-pop.rc-more .rc-body::after{content:'';position:absolute;left:0;right:10px;bottom:0;height:32px;
  pointer-events:none;z-index:2;
  background:linear-gradient(180deg,rgba(252,251,247,0) 0%,rgba(252,251,247,.94) 72%,rgba(252,251,247,1) 100%)}
/* header */
.rc-pop .rc-hd{padding:20px 22px 15px;border-bottom:1px solid #efeadd;background:linear-gradient(180deg,#fbfaf5 0%,#fdfcf8 100%)}
.rc-pop .rc-eyebrow{font:600 10px Inter,system-ui,sans-serif;letter-spacing:.13em;text-transform:uppercase;color:#647062;display:flex;align-items:center;gap:7px;margin:0 0 9px}
.rc-pop .rc-eyebrow .tick{width:15px;height:1px;background:#cdd6c8;flex:none}
.rc-pop .rc-stat{display:flex;align-items:baseline;flex-wrap:wrap;gap:0 12px}
.rc-pop .rc-stat .big{font:600 30px/1 Fraunces,Georgia,serif;color:var(--canopy,#1f4a2d);letter-spacing:-.01em}
.rc-pop .rc-stat .big .u{font-size:16px;color:#6b7669;font-weight:500;margin-left:3px}
.rc-pop .rc-stat .mid{font:500 14px Fraunces,Georgia,serif;color:#5b6660}
.rc-pop .rc-stat .midsep{color:#736c5d;font-weight:400}
.rc-pop .rc-doable-pill{margin-top:11px;display:inline-flex;align-items:center;gap:7px;
  font:600 12px Inter,system-ui,sans-serif;color:#fff;background:var(--brand-ok,#15803d);
  border-radius:999px;padding:5px 13px 5px 9px;box-shadow:0 2px 8px rgba(21,128,61,.28)}
.rc-pop .rc-doable-pill .lg{width:15px;height:15px;border-radius:50%;background:rgba(255,255,255,.22);display:inline-flex;align-items:center;justify-content:center;font-size:10px}
.rc-pop .rc-doable-pill.none{color:#736c5d;background:#efeade;box-shadow:none;padding:5px 13px;font-weight:500}
/* section labels */
.rc-pop .rc-sec{font:600 9.5px Inter,system-ui,sans-serif;letter-spacing:.12em;text-transform:uppercase;color:#647062;padding:14px 22px 4px;display:flex;align-items:center;gap:8px}
.rc-pop .rc-sec .ln{flex:1;height:1px;background:#efeadd}
.rc-pop .rc-sec.gated{color:#c3a86a}
.rc-pop .rc-sec.craigsec{color:var(--motm-warning,#b87a14)}
/* rows */
.rc-pop .rc-row{display:flex;align-items:center;gap:12px;padding:9px 22px;position:relative}
.rc-pop .rc-row + .rc-row{border-top:1px solid #f4f0e6}
.rc-pop .rc-row.doable{background:linear-gradient(90deg,rgba(234,244,236,.55) 0%,rgba(234,244,236,0) 62%)}
.rc-pop .rc-accent{position:absolute;left:0;top:6px;bottom:6px;width:3px;border-radius:0 3px 3px 0}
.rc-pop .rc-row.doable .rc-accent{background:var(--brand-ok,#15803d)}
.rc-pop .rc-row.gated .rc-accent{background:#e6d3a3}
.rc-pop .rc-main{min-width:0;flex:1}
.rc-pop .rc-name{font:600 15px/1.2 Fraunces,Georgia,serif;color:#1f2937}
.rc-pop .rc-sub{font:400 11px Inter,system-ui,sans-serif;color:#6b7669;margin-top:2px;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.rc-pop .rc-sub .acct{color:#5b6660;font-weight:500}
.rc-pop .rc-sub .hint{color:#647062}
.rc-pop .rc-pips{display:inline-flex;gap:3px;align-items:center}
.rc-pop .rc-pip{width:7px;height:7px;border-radius:2px;background:#e4ded0;border:1px solid #d8d1c0}
.rc-pop .rc-pip.done{background:var(--brand-ok,#15803d);border-color:var(--brand-ok,#15803d)}
.rc-pop .rc-pip.ready{background:#fff;border:1.5px solid var(--brand-ok,#15803d)}
.rc-pop .rc-pip.gated{background:#efe7d4;border-color:#e0d5bd}
/* row chips */
.rc-pop .rc-chip{flex:none;display:inline-flex;align-items:center;font:700 10px Inter,system-ui,sans-serif;letter-spacing:.05em;border-radius:999px;white-space:nowrap;overflow:hidden}
.rc-pop .rc-chip .lab{padding:4px 10px}
.rc-pop .rc-chip.doable{color:#fff;background:var(--brand-ok,#15803d)}
.rc-pop .rc-chip.gated .lab{color:var(--motm-warning,#b87a14);background:#fdf6ea;border:1px solid #f0e2c8;border-right:none;border-radius:999px 0 0 999px;padding:4px 8px 4px 10px}
.rc-pop .rc-chip.gated .age{color:#8a6a1e;background:#f6ecd2;border:1px solid #f0e2c8;padding:4px 9px;font-weight:700;border-radius:0 999px 999px 0}
.rc-pop .rc-chip.craig .lab{color:#fff;background:var(--motm-warning,#b87a14);border-radius:999px 0 0 999px;padding:4px 8px 4px 10px}
.rc-pop .rc-chip.craig .age{color:#7a5510;background:#f6e6c6;padding:4px 9px;font-weight:700;border-radius:0 999px 999px 0}
/* NOT TASKED — the absence bucket (chip-truth audit 8/5). COURT-HONEST COLOUR: this is neither an
   alarm nor a gate, so it takes neither the Craig amber nor the client tan. It is a slate NEUTRAL,
   deliberately quiet — a missing statement source is a fleet gap we have not started, and painting
   it warm would re-create the accusation the audit removed in a new colour. */
.rc-pop .rc-sec.untaskedsec{color:#697585}
.rc-pop .rc-row.untasked{background:linear-gradient(90deg,rgba(238,240,243,.6) 0%,rgba(238,240,243,0) 62%)}
.rc-pop .rc-row.untasked .rc-accent{background:#c3cad3}
.rc-pop .rc-pip.untasked{background:#e8ebee;border-color:#d5dae0;border-style:dashed}
.rc-pop .rc-chip.untasked .lab{color:#5f6b78;background:#eef0f3;border:1px solid #dfe3e8;border-radius:999px;padding:4px 10px}
/* the interim caveat: the published pill and the browser roster disagree, and the card says so */
.rc-pop .rc-foot.rc-caveat{margin:6px 0 0;background:#fbf7ee;border-top:1px solid #f0e6d2;color:#736c5d;padding-bottom:12px}
.rc-pop .rc-foot.rc-caveat + .rc-foot{margin-top:0;border-top:1px solid #efeadd}
.rc-pop .rc-foot.rc-caveat .i{background:#f0e2c4;color:#9a8548}
/* empty + footnote */
.rc-pop .rc-empty{padding:16px 22px;font:400 12px Inter,system-ui,sans-serif;color:#647062}
.rc-pop .rc-foot{margin:6px 0 0;padding:12px 22px 17px;background:#f7f4ec;border-top:1px solid #efeadd;
  font:400 11px/1.55 Inter,system-ui,sans-serif;color:#736c5d;display:flex;gap:9px}
.rc-pop .rc-foot .i{flex:none;width:15px;height:15px;border-radius:50%;background:#e9e2ce;color:#736c5d;font:700 10px Fraunces,Georgia,serif;display:flex;align-items:center;justify-content:center;margin-top:1px}
.rc-pop .rc-foot b{color:#6f6a56;font-weight:600}
/* the pinned anchor chip earns a soft ring so touch users see what's open */
#ops-pane-today .lr-close .gapstrip .gs-cat.rc-anchor{cursor:pointer}

/* ═══ GAP-STRIP METRIC CARDS (Craig 7/22 8:33p — recon-census treatment across the whole bar):
   additions to the SAME rc-pop family, no second popover system. Every strip anchor (headline +
   8 chips) hovers/pins one of these; the go-look moves into the card's footer action. */
/* every card wears its as-of stamp on the eyebrow line (honesty rails) */
.rc-pop .rc-asof{margin-left:auto;font:500 10px Inter,system-ui,sans-serif;letter-spacing:.02em;text-transform:none;color:#736c5d;white-space:nowrap}
/* footer deep-link action — "Open statements board →" (deep-link-every-go-look law) */
.rc-pop .rc-actbar{padding:11px 22px;border-top:1px solid #efeadd;background:#fbfaf5}
.rc-pop .rc-act{display:inline-flex;align-items:center;gap:6px;font:600 12.5px Inter,system-ui,sans-serif;color:var(--brand-mid,#306844);cursor:pointer;text-decoration:none;border-radius:6px}
.rc-pop .rc-act:hover{text-decoration:underline}
.rc-pop .rc-act:focus-visible{outline:2px solid var(--brand-line,#b9d8b4);outline-offset:2px}
.rc-pop .rc-act .ar{font-weight:700}
/* GAP composition card — per-metric delta chips vs yesterday (down = progress = calm green;
   up = neutral ink — a rising queue is information, never alarm) */
.rc-pop .rc-deltas{display:flex;flex-wrap:wrap;gap:5px;padding:8px 22px 4px}
.rc-pop .rc-delta{font:600 11px Inter,system-ui,sans-serif;color:#647062;background:#f4f1e8;border:1px solid #eae4d4;border-radius:99px;padding:3px 10px;white-space:nowrap}
.rc-pop .rc-delta.dn{color:var(--brand-ok,#15803d);background:var(--brand-tint,#dfeee4);border-color:var(--brand-line-pale,#cfe3d3)}
.rc-pop .rc-delta.hd{font-weight:800}
/* honest zero state — a real card beats a dead hover */
.rc-pop .rc-zero{padding:18px 22px 14px;font:500 13px Inter,system-ui,sans-serif;color:#647062}
/* fold-state note (To code hybrid honesty rails — job 47) */
.rc-pop .rc-note{padding:8px 22px 0;font:500 11px Inter,system-ui,sans-serif;color:#7a6a3f;font-style:italic}
/* Craig-court rows: amber accent + wash (court-honest — his gold, never alarm red) */
.rc-pop .rc-row.craig{background:linear-gradient(90deg,rgba(250,243,227,.6) 0%,rgba(250,243,227,0) 62%)}

/* VIEWPORT-FILL DENSITY (Craig 7/27 9:37p — "fill the space available... without a scroll"): a
   card whose natural height still exceeds the FULL viewport (top+bottom margin) tightens its row
   rhythm rather than scrolling — this only ever engages on an exceptionally long roster. */
.rc-pop.rc-tight .rc-hd{padding:14px 22px 10px}
.rc-pop.rc-tight .rc-eyebrow{margin:0 0 6px}
.rc-pop.rc-tight .rc-doable-pill{margin-top:7px;padding:4px 12px 4px 8px}
.rc-pop.rc-tight .rc-sec{padding:8px 22px 3px}
.rc-pop.rc-tight .rc-row{padding:5px 22px}
.rc-pop.rc-tight .rc-name{line-height:1.05}
.rc-pop.rc-tight .rc-deltas{padding:5px 22px 3px}
.rc-pop.rc-tight .rc-foot{margin:4px 0 0;padding:9px 22px 12px}
.rc-pop.rc-tight .rc-actbar{padding:8px 22px}
.rc-pop.rc-tight .rc-zero{padding:12px 22px 10px}
.rc-pop .rc-row.craig .rc-accent{background:var(--motm-warning,#b87a14)}
/* the strip headline is a card anchor too — keyboard reachable (job-51 North Star pattern) */
#ops-pane-today .lr-close .gapstrip .gs-hd.gs-pop{cursor:pointer;border-radius:9px;transition:background .12s}
#ops-pane-today .lr-close .gapstrip .gs-hd.gs-pop:hover{background:#fff}
#ops-pane-today .lr-close .gapstrip .gs-hd.gs-pop:focus-visible,
#ops-pane-today .lr-close .gapstrip .gs-cat:focus-visible{outline:2px solid var(--brand-line,#b9d8b4);outline-offset:1px}
/* pinned anchor ring — touch users see which chip owns the open card */
#ops-pane-today .lr-close .gapstrip .gs-cat.gs-pinned,
#ops-pane-today .lr-close .gapstrip .gs-hd.gs-pinned{border-color:var(--brand-line,#b9d8b4);background:#fff}

/* ── MONTH TOGGLE (Craig 2026-07-26) ── the close strip reuses Mission Feed's day-picker component
   (.mf-day-nav/.mf-pgb/.mf-day-pick) verbatim; it only needs to sit INLINE in the header where the
   static period pill sat, instead of stacking as its own block row. Calm ink only — a browsed prior
   period is a state, never an alarm. */
.lr-close .hd .ct-mon-nav{display:inline-flex;margin-bottom:0;gap:5px;vertical-align:middle}
/* 8/4: the option label gained its scope word ("(77 closes)" rather than a bare "(77)") — give it
   the room, or the native chevron paints on top of the closing paren.
   8/7: it gained the second scope too ("79 books · 77 closes"), and 246px clipped it mid-word —
   caught in the render, not in the markup: the probe read the option's textContent, which is
   complete whatever the box does to it, so only looking at the picture caught this. Any label
   that grows here has to be re-measured on screen; the chevron overpaints silently. */
.lr-close .hd .ct-mon-nav .mf-day-pick{max-width:330px;padding:3px 7px}
.lr-close .hd .ct-mon-nav .mf-pgb{padding:3px 9px}

/* ═══ COMPRESSED GAP STRIP (Craig 7/26 — "healthy sections compress", approved wholesale) ═══
   Anatomy copied from the Catch-up track's compressed-summary grammar, the app's existing
   collapsed-summary vocabulary: eyebrow → hairline → ·-joined counts → chevron. The hairline
   stays GREY on purpose — a collapsed summary makes no health claim. The one concession is the
   clear-state tint, because .gapstrip.clear already earns quiet green when fleet-doable hits 0. */
#ops-pane-today .lr-close .gapzip{width:100%;display:flex;align-items:center;gap:10px;margin-top:10px;
  border:1px solid #cfe4d6;background:var(--signal-tint,#eaf3ec);border-radius:12px;padding:9px 14px;
  cursor:pointer;text-align:left;font-family:Inter,system-ui,sans-serif;transition:background .12s,border-color .12s}
#ops-pane-today .lr-close .gapzip:hover{background:#e3efe6;border-color:#bfdbc8}
#ops-pane-today .lr-close .gapzip .gz-kick{font:700 var(--fs-micro,10px) Inter;letter-spacing:.08em;text-transform:uppercase;
  color:#647062;white-space:nowrap;flex:none}
#ops-pane-today .lr-close .gapzip .gz-state{font:700 13px Inter;color:var(--signal,#3e7d5c);white-space:nowrap;flex:none}
#ops-pane-today .lr-close .gapzip .gz-bar{flex:1;height:3px;border-radius:2px;background:#d5e3d8;overflow:hidden;min-width:26px}
#ops-pane-today .lr-close .gapzip .gz-bar i{display:block;height:100%;background:#b3ac9c;border-radius:2px}
/* the counts give way before the chevron does — a collapsed row that pushes its own expand
   affordance off the end is a row Craig cannot reopen (caught reading the render) */
#ops-pane-today .lr-close .gapzip .gz-sum{font:400 12px Inter;color:#647062;white-space:nowrap;flex:0 1 auto;
  min-width:0;overflow:hidden;text-overflow:ellipsis}
#ops-pane-today .lr-close .gapzip .gz-sum .cr{color:var(--motm-warning,#b87a14);font-weight:600}
#ops-pane-today .lr-close .gapzip .gz-sum .sep{color:#647062;margin:0 5px}
#ops-pane-today .lr-close .gapzip .gz-chev{flex:none;font:600 11px Inter;color:#647062}
/* non-clear compressed variant — Craig's OPT-IN only (auto-compression is reserved for zero):
   parchment, grey number, no green claim anywhere. */
#ops-pane-today .lr-close .gapzip.work{background:#fbfaf6;border-color:#e7e2d4}
#ops-pane-today .lr-close .gapzip.work:hover{background:#f7f5ee}
#ops-pane-today .lr-close .gapzip.work .gz-state{color:var(--motm-charcoal,#1a1d1c);font-weight:800;font-size:15px;font-variant-numeric:tabular-nums}
#ops-pane-today .lr-close .gapzip.work .gz-bar{background:#ece7db}
/* the way back out of the expanded strip — the compressed row's own chevron token, nothing new */
#ops-pane-today .lr-close .gapstrip .gs-kick{display:inline-flex;align-items:center;gap:6px}
#ops-pane-today .lr-close .gapstrip .gz-collapse{background:none;border:none;padding:0;
  font:600 11px Inter;color:#647062;cursor:pointer;line-height:1}
#ops-pane-today .lr-close .gapstrip .gz-collapse:hover{color:var(--brand-mid,#306844)}
/* SCOPE LINE — one fact, "77 in this close". It carried a second scope beside it and an amber gap
   chip between 8/4 and 8/7; both are deleted (Craig flagged the chip twice — tombstone in
   render.js). The decomposition lives in this element's title= hover, which is why cursor:help
   stays. Quiet by design: a legend, not a warning — no alarm ink, no court colour. */
#ops-pane-today .lr-close .ct-scope-note{display:flex;align-items:baseline;flex-wrap:wrap;gap:7px;
  margin:2px 0 8px;font:500 var(--fs-label,11px)/1.35 Inter;color:#647062;cursor:help}
#ops-pane-today .lr-close .ct-scope-note b{font-weight:800;color:var(--brand-mid,#306844);
  font-variant-numeric:tabular-nums}
/* ── .sn-sep / .sn-gap: DELETED 8/7 with the markup that used them. .sn-gap was the amber chip
   ("2 of the 79 assigned files have no July 2026 close"); .sn-sep was the "·" separating the two
   scopes it argued about. Left behind, these would silently re-style the chip the day anyone
   reintroduced the span — dead CSS is how a deleted surface comes back wearing its old clothes. */

/* ── NO-CLOSE STRIP + RULED-STATE CHIPS: DELETED 8/6 (Craig 2:02p) ───────────────────────
   .ct-gap-strip/.ct-gap-hd/.ct-gap-src/.ct-gap-row/.gr-* and .ct-ruled-line/.ct-ruled/.rl-*
   are gone with the markup that used them. Both books they styled are ruled states that roll
   up into the Bots badge and live in the client roster; see the tombstone in render.js.
   The platform chip that lived on .rl-plat now lives on the roster card as .c3plat, which is
   where a book's ledger belongs — on the book, not on an exception list. */

/* GAP-TO-DONE, STOOD DOWN FOR A PARTY IT CANNOT COUNT (Craig 8/6 — the pill that changed nothing).
   Calm and explanatory, never alarm ink: nothing is broken here, the numbers simply are not
   published for this person yet, and court-honest color reserves amber/red for Craig's own court. */
/* SCOPE RIDES THE NUMBER (Craig 8/7 11:44a — "What about this?").
   .gs-scope-note is DELETED, rule and markup together: it was a full-width tinted paragraph
   with a <code> chip in it, sitting hero-sized on a firm-owner's board, and it cost the strip
   a whole row to explain what a five-word label can name. Leaving the rule behind would let the
   box come back wearing its old clothes the day anyone re-added the div (the same reason .sn-gap
   above was deleted rather than merely unused). The <code> rule goes with it — no scope on this
   board renders publisher grammar again.
   What replaces it: one grey line inside .gs-hd, directly under the number it qualifies. Quiet
   ink, never alarm — a scope is a legend, not a warning (court-honest colour: alarm is Craig's
   court only). It wraps, so .gs-hd is allowed a wider max than its 112px floor. */
#ops-pane-today .lr-close .gapstrip .gs-hd{max-width:210px}
#ops-pane-today .lr-close .gapstrip .gs-scope{font:500 var(--fs-micro,10px)/1.35 Inter,system-ui,sans-serif;
  color:#647062;white-space:normal;cursor:help;margin-top:1px}
