/* Live-feed indicator dots (spec: static/mockups/live-indicator.html).
   States per book per market table: green pulsing = realtime (OP websocket),
   amber solid = ~1 min poll (OB/SGO), gray = paused (feed degraded).
   Decorated by static/js/scriptv3/features/feedStatus.js; included behind the
   feed_indicator flag. */

.feed{display:inline-block;width:7px;height:7px;border-radius:50%;flex:none}
.feed.live{background:var(--jb-feed-live,#00E676);box-shadow:0 0 7px rgba(0,230,118,.9);animation:feedpulse 1.7s ease-in-out infinite}
.feed.delay{background:var(--jb-feed-delay,#FFD54F);box-shadow:0 0 4px rgba(255,213,79,.45)}
.feed.stale{background:var(--jb-feed-stale,#6B7280);box-shadow:none;animation:none}
@keyframes feedpulse{50%{opacity:.3;box-shadow:0 0 2px rgba(0,230,118,.3)}}
@media (prefers-reduced-motion: reduce){.feed.live{animation:none}}

/* Classic view: one dot per book column header, after the code */
th.classic-book-header .feed{margin-left:5px;vertical-align:1px}

/* JB view: corner badge on the Book / Alt chip cells — bottom-right, layered
   over the cell content (absolute ⇒ never widens the cell; top corner clipped
   under the sticky header on the first row) */
td.feed-chip-host{position:relative}
.feed-corner{position:absolute;bottom:2px;right:2px;width:9px;height:9px;z-index:2;pointer-events:none;border:1px solid rgba(0,0,0,.75)}

/* Titlebar summary pills: visible-book counts per state, one pill per
   non-empty state, appended to the line-selector strip by feedStatus.js */
.feedsum{display:inline-flex;align-items:center;gap:8px;flex-wrap:wrap}
.feedsum .feed-pill{display:inline-flex;align-items:center;gap:6px;font-size:11px;padding:4px 10px;border-radius:999px;border:1px solid var(--jb-feed-pill-border,#2A2A3A);background:var(--jb-feed-pill-bg,#12121A);color:var(--jb-feed-pill-text,#9C9CAD);white-space:nowrap;cursor:help}
.feedsum .feed-pill b{color:var(--jb-feed-pill-strong,#E6E6F0);font-weight:600}
@media (max-width:480px){.feedsum{display:none}}

/* Pill hover popup: .hover-popup chrome (black card, accent border, branded
   book cells) + feedStatus dot/age decoration. Self-styled table so it works
   before hover.js ever injects its own popup-table styles. */
.feedsum-popup{position:absolute;z-index:10000;padding:10px 12px;min-width:170px;max-width:215px}
.feedsum-popup .feedsum-pop-head{display:flex;align-items:center;gap:7px;font-size:12.5px;font-weight:700;margin:0 0 5px}
.feedsum-popup .feedsum-pop-copy{font-size:11px;line-height:1.5;color:var(--jb-feed-pill-text,#9C9CAD);margin:0 0 8px}
/* .hover-popup.feedsum-popup outranks hover.js's injected .hover-popup table
   rules (green cell borders), which land later in source order. Natural table
   layout: the name column sizes to the widest book, so every brand chip is
   the same width (matches the odds popup), centered inside the card. */
.hover-popup.feedsum-popup .feedsum-books{max-height:440px;overflow-y:auto}
.hover-popup.feedsum-popup table{border-collapse:separate;border-spacing:0 2px;width:auto;margin:0 auto}
.hover-popup.feedsum-popup td{font-size:12px;padding:3px 10px;white-space:nowrap;border:none !important}
.hover-popup.feedsum-popup td:first-child{border-radius:6px}

/* Hover popup: per-row dot before the book name + "· 6m" change-age chip in
   the odds cell (after price/arrow, before the liq max chip — mock B) */
.hover-popup .feed-pop,.hover-popup-base .feed-pop{margin-right:6px;vertical-align:1px;border:1px solid rgba(0,0,0,.75)}
.hover-popup .feed-none,.hover-popup-base .feed-none{visibility:hidden;background:none;box-shadow:none;animation:none}
.hover-popup .feed-chg,.hover-popup-base .feed-chg{color:var(--jb-feed-age,#8b949e);font-size:10px;margin:0 5px 0 6px;white-space:nowrap;cursor:help}
.hover-popup tr.is-stale,.hover-popup-base tr.is-stale{opacity:.55}

/* Pull-ghosts (v2): a freshly pulled price rendered as history — the final
   price dimmed with its pull age. The cell is NULL upstream, so a ghost never
   feeds best-odds, Edge, EV or averages. Popup rows via hover.js; classic
   cells via classicTable.js withPullGhost + the realtime null-transition. */
.hover-popup tr.pull-ghost td,.hover-popup-base tr.pull-ghost td{opacity:.5}
.hover-popup tr.pull-ghost .ghost-age,.hover-popup-base tr.pull-ghost .ghost-age{color:var(--jb-feed-age,#8b949e);font-size:10.5px;white-space:nowrap}
td.classic-odds-cell .ghost-odds{opacity:.45;cursor:help}
