/* ================================================================
   FILM Markets — Component Library (Bloomberg Terminal Pro)
   Depends on: tokens.css, base.css
   ================================================================ */

@layer components {

  /* ══════════════════════════════════════════
     TOP BAR  .tbar
     ══════════════════════════════════════════ */

  .tbar {
    position: sticky;
    top: 0;
    z-index: var(--z-header);
    height: var(--header-h);
    background: linear-gradient(90deg, #060c18, #0a1220, #060c18);
    border-bottom: 1px solid var(--bd-accent);
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 0 var(--s-5);
    gap: var(--s-4);
    backdrop-filter: blur(12px);
    box-shadow: var(--sh-md), 0 0 40px rgba(240, 185, 11, 0.04);
  }

  .tbar-left {
    display: flex;
    align-items: center;
    gap: var(--s-4);
    flex-shrink: 0;
  }

  .tbar-logo {
    font-family: var(--ff-display);
    font-size: var(--fs-md);
    font-weight: 700;
    color: var(--alert);
    letter-spacing: var(--ls-widest);
    text-transform: uppercase;
    text-shadow: var(--sh-glow-gold);
    text-decoration: none;
  }
  .tbar-logo-dim {
    color: var(--t-3);
    font-weight: 400;
    letter-spacing: var(--ls-wide);
  }

  .tbar-badge {
    font-family: var(--ff-mono);
    font-size: var(--fs-micro);
    font-weight: 600;
    letter-spacing: var(--ls-widest);
    text-transform: uppercase;
    color: var(--alert);
    background: var(--alert-bg);
    border: 1px solid rgba(240, 185, 11, 0.2);
    padding: 2px var(--s-2);
    border-radius: var(--r-1);
  }

  /* Nav tabs */
  .tbar-nav {
    display: flex;
    align-items: center;
    gap: 0;
    border-left: 1px solid var(--bd-2);
    padding-left: var(--s-4);
    margin-left: var(--s-2);
  }

  .tbar-nav-link {
    font-family: var(--ff-mono);
    font-size: var(--fs-xs);
    font-weight: 600;
    letter-spacing: var(--ls-wider);
    text-transform: uppercase;
    color: var(--t-3);
    padding: 0 var(--s-3);
    height: var(--header-h);
    display: flex;
    align-items: center;
    border-bottom: 2px solid transparent;
    transition: color var(--dur-fast), border-color var(--dur-fast);
    text-decoration: none;
  }
  .tbar-nav-link:hover { color: var(--t-1); }
  .tbar-nav-link.active {
    color: var(--alert);
    border-bottom-color: var(--alert);
  }

  /* Live indicator */
  .tbar-live {
    display: flex;
    align-items: center;
    gap: var(--s-1);
    font-family: var(--ff-mono);
    font-size: var(--fs-micro);
    font-weight: 600;
    letter-spacing: var(--ls-widest);
    color: var(--up);
  }
  .tbar-live-dot {
    width: 6px;
    height: 6px;
    border-radius: 50%;
    background: var(--up);
    box-shadow: var(--sh-glow-up);
    animation: pulse-dot 2s ease-in-out infinite;
  }
  @keyframes pulse-dot {
    0%, 100% { opacity: 1; transform: scale(1); }
    50%       { opacity: 0.4; transform: scale(0.75); }
  }

  /* Right actions */
  .tbar-right {
    display: flex;
    align-items: center;
    gap: var(--s-2);
    flex-shrink: 0;
  }

  .tbar-btn {
    width: 30px;
    height: 30px;
    display: flex;
    align-items: center;
    justify-content: center;
    background: rgba(148, 163, 184, 0.06);
    border: 1px solid var(--bd-1);
    border-radius: var(--r-2);
    color: var(--t-2);
    font-size: var(--fs-sm);
    cursor: pointer;
    transition: background var(--dur-fast), border-color var(--dur-fast), color var(--dur-fast);
    text-decoration: none;
  }
  .tbar-btn:hover {
    background: var(--bg-hover);
    border-color: var(--bd-2);
    color: var(--t-0);
  }
  .tbar-btn.active {
    background: var(--alert-bg);
    border-color: rgba(240, 185, 11, 0.3);
    color: var(--alert);
  }

  /* Market clock */
  .tbar-clock {
    font-family: var(--ff-mono);
    font-size: var(--fs-xs);
    color: var(--t-3);
    letter-spacing: var(--ls-wide);
    padding: 0 var(--s-3);
    border-left: 1px solid var(--bd-1);
  }

  /* ══════════════════════════════════════════
     TICKER TAPE  .ticker
     ══════════════════════════════════════════ */

  .ticker-wrap {
    height: var(--ticker-h);
    background: linear-gradient(180deg, #060c18, #08111e);
    border-bottom: 1px solid var(--bd-1);
    overflow: hidden;
    position: sticky;
    top: var(--header-h);
    z-index: calc(var(--z-header) - 1);
  }

  .ticker-tape {
    display: flex;
    align-items: center;
    height: 100%;
    gap: 0;
    animation: ticker-scroll 60s linear infinite;
    width: max-content;
  }
  .ticker-tape:hover { animation-play-state: paused; }

  @keyframes ticker-scroll {
    from { transform: translateX(0); }
    to   { transform: translateX(-50%); }
  }

  .tpill {
    display: inline-flex;
    align-items: center;
    gap: var(--s-1);
    padding: 0 var(--s-3);
    height: var(--ticker-h);
    border-right: 1px solid var(--bd-1);
    font-family: var(--ff-mono);
    font-size: var(--fs-xs);
    white-space: nowrap;
    cursor: default;
    transition: background var(--dur-fast);
  }
  .tpill:hover { background: var(--bg-hover); }

  .tpill-sym {
    color: var(--t-2);
    font-weight: 600;
    letter-spacing: var(--ls-wide);
    font-size: var(--fs-micro);
    text-transform: uppercase;
  }
  .tpill-price { color: var(--t-0); font-weight: 500; }
  .tpill-chg   { font-size: var(--fs-micro); }
  .tpill-chg.up   { color: var(--up-text); }
  .tpill-chg.down { color: var(--down-text); }
  .tpill-chg.flat { color: var(--flat); }

  /* Section divider in ticker */
  .tpill-sep {
    width: 1px;
    height: 16px;
    background: var(--bd-2);
    margin: 0 var(--s-1);
    flex-shrink: 0;
  }

  /* ══════════════════════════════════════════
     STATUS BAR  .sbar  (sticky bottom)
     ══════════════════════════════════════════ */

  .sbar {
    position: fixed;
    bottom: 0;
    left: 0;
    right: 0;
    z-index: var(--z-header);
    height: var(--statusbar-h);
    background: linear-gradient(90deg, #060a12, #0a1020, #060a12);
    border-top: 1px solid var(--bd-1);
    display: flex;
    align-items: center;
    gap: var(--s-4);
    padding: 0 var(--s-5);
    font-family: var(--ff-mono);
    font-size: var(--fs-micro);
    color: var(--t-3);
    letter-spacing: var(--ls-wide);
    overflow: hidden;
  }

  .sbar-dot {
    width: 5px;
    height: 5px;
    border-radius: 50%;
    flex-shrink: 0;
  }
  .sbar-dot.up   { background: var(--up); box-shadow: var(--sh-glow-up); }
  .sbar-dot.down { background: var(--down); }
  .sbar-dot.warn { background: var(--warn); }

  .sbar-sep { color: var(--bd-3); }

  .sbar-label { color: var(--t-4); text-transform: uppercase; letter-spacing: var(--ls-widest); }
  .sbar-val   { color: var(--t-2); }
  .sbar-val.up   { color: var(--up); }
  .sbar-val.warn { color: var(--warn); }
  .sbar-val.alert { color: var(--alert); }

  .sbar-spacer { flex: 1; }

  /* ══════════════════════════════════════════
     SECTION HEADER  .sec-h
     ══════════════════════════════════════════ */

  .sec-h {
    display: flex;
    align-items: center;
    gap: 0;
    margin-bottom: var(--s-2);
    padding: var(--s-1) 0;
  }

  .sec-num {
    font-family: var(--ff-mono);
    font-size: var(--fs-xs);
    font-weight: 700;
    letter-spacing: var(--ls-wider);
    text-transform: uppercase;
    padding: 3px var(--s-3);
    border-radius: var(--r-1);
    white-space: nowrap;
    min-width: 120px;
    text-align: center;
  }

  .sec-line {
    flex: 1;
    height: 1px;
    margin: 0 var(--s-3);
    opacity: 0.4;
  }

  .sec-sub {
    font-family: var(--ff-mono);
    font-size: var(--fs-micro);
    color: var(--t-3);
    letter-spacing: var(--ls-widest);
    text-transform: uppercase;
    white-space: nowrap;
  }

  .sec-badge {
    font-family: var(--ff-mono);
    font-size: var(--fs-micro);
    color: var(--t-3);
    background: var(--bg-2);
    border: 1px solid var(--bd-1);
    padding: 1px var(--s-2);
    border-radius: var(--r-1);
    letter-spacing: var(--ls-wide);
    margin-left: var(--s-2);
  }

  /* Section color variants */
  .sec-num--eq     { background: rgba(59, 130, 246, 0.15); color: #60a5fa; }
  .sec-num--fx     { background: rgba(167, 139, 250, 0.15); color: #c4b5fd; }
  .sec-num--cm     { background: rgba(240, 185, 11, 0.15); color: #fbbf24; }
  .sec-num--fi     { background: rgba(236, 72, 153, 0.15); color: #f472b6; }
  .sec-num--cr     { background: rgba(245, 158, 11, 0.15); color: #fcd34d; }
  .sec-num--macro  { background: rgba(6, 182, 212, 0.15); color: #22d3ee; }
  .sec-num--risk   { background: rgba(239, 68, 68, 0.15); color: #f87171; }
  .sec-num--alert  { background: rgba(240, 185, 11, 0.15); color: var(--alert); }

  /* ══════════════════════════════════════════
     DATA CARD  .dcard
     ══════════════════════════════════════════ */

  .dcard {
    background: linear-gradient(135deg, var(--bg-1), var(--bg-2));
    border: 1px solid var(--bd-1);
    border-radius: var(--r-2);
    overflow: hidden;
    position: relative;
    transition: border-color var(--dur-fast), transform var(--dur-fast), box-shadow var(--dur-fast);
  }
  .dcard:hover {
    border-color: var(--bd-2);
    transform: translateY(-1px);
    box-shadow: var(--sh-md);
  }

  /* Left accent bar */
  .dcard-bar {
    position: absolute;
    left: 0;
    top: 0;
    width: 2px;
    height: 100%;
    border-radius: 0 var(--r-0) var(--r-0) 0;
  }
  .dcard-bar--eq  { background: var(--eq); }
  .dcard-bar--fx  { background: var(--fx); }
  .dcard-bar--cm  { background: var(--cm); }
  .dcard-bar--fi  { background: var(--fi); }
  .dcard-bar--cr  { background: var(--cr); }
  .dcard-bar--up  { background: var(--up); }
  .dcard-bar--down { background: var(--down); }

  .dcard-head {
    padding: var(--s-1) var(--s-2) var(--s-1) var(--s-3);
    display: flex;
    align-items: center;
    justify-content: space-between;
    border-bottom: 1px solid rgba(30, 41, 59, 0.5);
    background: rgba(10, 16, 24, 0.6);
    min-height: 24px;
    gap: var(--s-2);
  }

  .dcard-name {
    font-family: var(--ff-mono);
    font-size: var(--fs-xs);
    font-weight: 700;
    letter-spacing: var(--ls-wide);
    text-transform: uppercase;
    color: var(--t-1);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
  }

  .dcard-signal {
    font-family: var(--ff-mono);
    font-size: var(--fs-micro);
    color: var(--t-3);
    letter-spacing: var(--ls-base);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    max-width: 58%;
    text-align: right;
    line-height: var(--lh-tight);
  }

  /* Market status dot on card */
  .dcard-status {
    width: 6px;
    height: 6px;
    border-radius: 50%;
    flex-shrink: 0;
  }
  .dcard-status--open   { background: var(--up); box-shadow: var(--sh-glow-up); }
  .dcard-status--pre    { background: var(--warn); }
  .dcard-status--closed { background: var(--t-4); }

  .dcard-body {
    padding: var(--s-2) var(--s-3);
  }

  /* iframe variant */
  .dcard iframe {
    display: block;
    width: 100%;
    border: none;
  }

  /* ══════════════════════════════════════════
     NEWS ROW  .nrow  (dense list item)
     ══════════════════════════════════════════ */

  .nrow {
    display: grid;
    grid-template-columns: 52px 1fr auto;
    align-items: start;
    gap: var(--s-2);
    padding: var(--s-2) var(--s-3);
    border-bottom: 1px solid var(--bd-1);
    cursor: pointer;
    transition: background var(--dur-fast);
    min-height: 36px;
  }
  .nrow:hover { background: var(--bg-hover); }
  .nrow:last-child { border-bottom: none; }

  .nrow--breaking {
    background: var(--alert-bg);
    border-left: 2px solid var(--alert);
  }
  .nrow--high {
    border-left: 2px solid var(--warn);
  }

  .nrow-time {
    font-family: var(--ff-mono);
    font-size: var(--fs-micro);
    color: var(--t-3);
    letter-spacing: var(--ls-base);
    padding-top: 1px;
    white-space: nowrap;
  }

  .nrow-body { overflow: hidden; }

  .nrow-headline {
    font-size: var(--fs-sm);
    color: var(--t-1);
    line-height: var(--lh-tight);
    overflow: hidden;
    text-overflow: ellipsis;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    margin-bottom: var(--s-1);
  }

  .nrow-meta {
    display: flex;
    align-items: center;
    gap: var(--s-1);
    flex-wrap: wrap;
  }

  .nrow-right {
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    gap: var(--s-1);
    flex-shrink: 0;
    padding-top: 1px;
  }

  /* Expanded row content */
  .nrow-expand {
    grid-column: 1 / -1;
    padding: var(--s-3);
    border-top: 1px solid var(--bd-1);
    background: var(--bg-1);
    font-size: var(--fs-sm);
    color: var(--t-2);
    line-height: var(--lh-loose);
    display: none;
  }
  .nrow.expanded .nrow-expand { display: block; }
  .nrow.expanded { background: var(--bg-1); }

  /* ══════════════════════════════════════════
     CHIPS / TAGS  .chip
     ══════════════════════════════════════════ */

  .chip {
    display: inline-flex;
    align-items: center;
    gap: var(--s-1);
    font-family: var(--ff-mono);
    font-size: var(--fs-micro);
    font-weight: 600;
    letter-spacing: var(--ls-wide);
    text-transform: uppercase;
    padding: 1px var(--s-2);
    border-radius: var(--r-1);
    border: 1px solid transparent;
    white-space: nowrap;
    line-height: 1.4;
    flex-shrink: 0;
  }

  /* Sentiment */
  .chip--up      { background: var(--up-bg);    color: var(--up-text);   border-color: rgba(16, 185, 129, 0.2); }
  .chip--down    { background: var(--down-bg);  color: var(--down-text); border-color: rgba(239, 68, 68, 0.2); }
  .chip--flat    { background: var(--flat-bg);  color: var(--flat);      border-color: rgba(148, 163, 184, 0.2); }
  .chip--alert   { background: var(--alert-bg); color: var(--alert);     border-color: rgba(240, 185, 11, 0.25); }
  .chip--warn    { background: var(--warn-bg);  color: var(--warn);      border-color: rgba(245, 158, 11, 0.25); }
  .chip--info    { background: var(--info-bg);  color: var(--info);      border-color: rgba(6, 182, 212, 0.25); }

  /* Asset class */
  .chip--eq { background: rgba(59, 130, 246, 0.1);  color: #93c5fd; border-color: rgba(59, 130, 246, 0.2); }
  .chip--fx { background: rgba(167, 139, 250, 0.1); color: #c4b5fd; border-color: rgba(167, 139, 250, 0.2); }
  .chip--cm { background: rgba(240, 185, 11, 0.1);  color: #fbbf24; border-color: rgba(240, 185, 11, 0.2); }
  .chip--fi { background: rgba(236, 72, 153, 0.1);  color: #f9a8d4; border-color: rgba(236, 72, 153, 0.2); }
  .chip--cr { background: rgba(245, 158, 11, 0.1);  color: #fcd34d; border-color: rgba(245, 158, 11, 0.2); }

  /* Source chip */
  .chip--source {
    background: rgba(30, 58, 95, 0.5);
    color: #93c5fd;
    border-color: rgba(59, 130, 246, 0.15);
    font-weight: 500;
    font-family: var(--ff-sans);
    text-transform: none;
    letter-spacing: 0;
    font-size: var(--fs-micro);
  }

  /* Sentiment dot (inline, no text) */
  .sdot {
    display: inline-block;
    width: 7px;
    height: 7px;
    border-radius: 50%;
    flex-shrink: 0;
  }
  .sdot--up   { background: var(--up); }
  .sdot--down { background: var(--down); }
  .sdot--flat { background: var(--flat); }
  .sdot--alert { background: var(--alert); box-shadow: var(--sh-glow-gold); }

  /* ══════════════════════════════════════════
     FILTER BAR  .fbar  (segmented control)
     ══════════════════════════════════════════ */

  .fbar {
    display: flex;
    align-items: center;
    gap: var(--s-1);
    padding: var(--s-2) 0;
    flex-wrap: wrap;
  }

  .fbar-btn {
    font-family: var(--ff-mono);
    font-size: var(--fs-xs);
    font-weight: 600;
    letter-spacing: var(--ls-wide);
    text-transform: uppercase;
    color: var(--t-3);
    background: transparent;
    border: 1px solid var(--bd-1);
    border-radius: var(--r-2);
    padding: var(--s-1) var(--s-3);
    cursor: pointer;
    transition: all var(--dur-fast);
    white-space: nowrap;
    text-decoration: none;
    display: inline-flex;
    align-items: center;
    gap: var(--s-1);
  }
  .fbar-btn:hover {
    color: var(--t-1);
    border-color: var(--bd-2);
    background: var(--bg-hover);
  }
  .fbar-btn.active {
    color: var(--t-0);
    background: var(--bg-3);
    border-color: var(--bd-3);
  }

  /* Colored active variants */
  .fbar-btn.active[data-filter="usd"]   { color: var(--eq); border-color: rgba(59, 130, 246, 0.4); }
  .fbar-btn.active[data-filter="gold"]  { color: var(--cm); border-color: rgba(240, 185, 11, 0.4); }
  .fbar-btn.active[data-filter="oil"]   { color: var(--warn); border-color: rgba(245, 158, 11, 0.4); }
  .fbar-btn.active[data-filter="fed"]   { color: var(--info); border-color: rgba(6, 182, 212, 0.4); }
  .fbar-btn.active[data-filter="trump"] { color: var(--down-text); border-color: rgba(239, 68, 68, 0.4); }

  .fbar-count {
    font-size: var(--fs-micro);
    background: var(--bg-2);
    border-radius: var(--r-1);
    padding: 0 4px;
    color: var(--t-3);
    min-width: 18px;
    text-align: center;
    line-height: 16px;
  }

  .fbar-sep {
    width: 1px;
    height: 16px;
    background: var(--bd-2);
    margin: 0 var(--s-1);
    flex-shrink: 0;
  }

  /* Inline search */
  .fbar-search {
    flex: 1;
    min-width: 140px;
    max-width: 220px;
    background: var(--bg-1);
    border: 1px solid var(--bd-1);
    border-radius: var(--r-2);
    padding: var(--s-1) var(--s-3);
    font-family: var(--ff-sans);
    font-size: var(--fs-xs);
    color: var(--t-1);
    outline: none;
    transition: border-color var(--dur-fast);
  }
  .fbar-search::placeholder { color: var(--t-4); }
  .fbar-search:focus { border-color: var(--bd-focus); }

  /* ══════════════════════════════════════════
     DATA TABLE  .dtable
     ══════════════════════════════════════════ */

  .dtable-wrap {
    overflow-x: auto;
    border-radius: var(--r-3);
    border: 1px solid var(--bd-1);
    background: var(--bg-1);
  }

  .dtable {
    width: 100%;
    border-collapse: collapse;
    font-size: var(--fs-xs);
  }

  .dtable thead {
    position: sticky;
    top: 0;
    z-index: var(--z-sticky);
  }

  .dtable th {
    font-family: var(--ff-mono);
    font-size: var(--fs-micro);
    font-weight: 600;
    letter-spacing: var(--ls-wider);
    text-transform: uppercase;
    color: var(--t-3);
    background: var(--bg-2);
    padding: var(--s-2) var(--s-3);
    text-align: left;
    border-bottom: 1px solid var(--bd-2);
    white-space: nowrap;
  }
  .dtable th.r { text-align: right; }

  .dtable td {
    padding: var(--s-1) var(--s-3);
    border-bottom: 1px solid var(--bd-1);
    color: var(--t-1);
    white-space: nowrap;
  }
  .dtable td.num {
    font-family: var(--ff-mono);
    font-size: var(--fs-xs);
    text-align: right;
  }
  .dtable td.r { text-align: right; }

  .dtable tbody tr:hover td { background: var(--bg-hover); }
  .dtable tbody tr:last-child td { border-bottom: none; }

  /* Heat cells */
  .dtable td.heat-up   { background: var(--up-bg);   color: var(--up-text); }
  .dtable td.heat-down { background: var(--down-bg); color: var(--down-text); }
  .dtable td.heat-warn { background: var(--warn-bg); color: var(--warn); }

  /* ══════════════════════════════════════════
     SPARKLINE  .spark
     ══════════════════════════════════════════ */

  .spark {
    display: inline-block;
    width: 48px;
    height: 16px;
    vertical-align: middle;
    flex-shrink: 0;
  }
  .spark path {
    fill: none;
    stroke-width: 1.5;
  }
  .spark path.up   { stroke: var(--up); }
  .spark path.down { stroke: var(--down); }
  .spark path.flat { stroke: var(--flat); }

  /* ══════════════════════════════════════════
     PANEL / FLOATING  .fpanel
     ══════════════════════════════════════════ */

  .fpanel {
    position: fixed;
    right: var(--s-4);
    top: calc(var(--header-h) + var(--ticker-h) + var(--s-2));
    width: 260px;
    z-index: var(--z-overlay);
    background: var(--bg-2);
    border: 1px solid var(--bd-2);
    border-radius: var(--r-4);
    box-shadow: var(--sh-xl);
    overflow: hidden;
  }

  .fpanel-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: var(--s-2) var(--s-4);
    background: linear-gradient(135deg, #0b67ff, #7c3aed);
    color: #fff;
    font-family: var(--ff-mono);
    font-size: var(--fs-xs);
    font-weight: 700;
    letter-spacing: var(--ls-wider);
    text-transform: uppercase;
  }

  .fpanel-close {
    background: none;
    border: none;
    color: rgba(255,255,255,0.7);
    cursor: pointer;
    font-size: var(--fs-md);
    line-height: 1;
    padding: 0;
    transition: color var(--dur-fast);
  }
  .fpanel-close:hover { color: #fff; }

  .fpanel-body {
    padding: var(--s-3) var(--s-4);
    font-size: var(--fs-xs);
    color: var(--t-1);
    line-height: 1.8;
    max-height: 360px;
    overflow-y: auto;
    scrollbar-width: thin;
  }

  /* ══════════════════════════════════════════
     TOAST  .toast
     ══════════════════════════════════════════ */

  .toast {
    position: fixed;
    bottom: calc(var(--statusbar-h) + var(--s-3));
    left: 50%;
    transform: translateX(-50%);
    background: var(--bg-3);
    border: 1px solid var(--bd-2);
    border-radius: var(--r-3);
    padding: var(--s-2) var(--s-5);
    font-family: var(--ff-mono);
    font-size: var(--fs-xs);
    color: var(--t-1);
    box-shadow: var(--sh-lg);
    z-index: var(--z-toast);
    cursor: pointer;
    white-space: nowrap;
    transition: opacity var(--dur-base);
  }
  .toast--alert {
    background: var(--alert-bg);
    border-color: rgba(240, 185, 11, 0.4);
    color: var(--alert);
  }

  /* ══════════════════════════════════════════
     MARKET HOURS PILLS  .mh-pill
     ══════════════════════════════════════════ */

  .mh-bar {
    display: flex;
    align-items: center;
    gap: var(--s-2);
    padding: var(--s-1) 0;
    flex-wrap: wrap;
  }

  .mh-pill {
    display: inline-flex;
    align-items: center;
    gap: var(--s-1);
    font-family: var(--ff-mono);
    font-size: var(--fs-micro);
    font-weight: 600;
    letter-spacing: var(--ls-wide);
    padding: 2px var(--s-2);
    border-radius: var(--r-1);
    border: 1px solid transparent;
    white-space: nowrap;
  }
  .mh-pill--open   { background: var(--up-bg);   color: var(--up-text);   border-color: rgba(16, 185, 129, 0.2); }
  .mh-pill--closed { background: var(--flat-bg); color: var(--t-3);       border-color: var(--bd-1); }
  .mh-pill--pre    { background: var(--warn-bg); color: var(--warn);      border-color: rgba(245, 158, 11, 0.2); }

  /* ══════════════════════════════════════════
     GRID LAYOUTS
     ══════════════════════════════════════════ */

  .grid-dense {
    display: grid;
    gap: var(--grid-gap);
  }
  .g-8 { grid-template-columns: repeat(8, 1fr); }
  .g-6 { grid-template-columns: repeat(6, 1fr); }
  .g-5 { grid-template-columns: repeat(5, 1fr); }
  .g-4 { grid-template-columns: repeat(4, 1fr); }
  .g-3 { grid-template-columns: repeat(3, 1fr); }
  .g-2 { grid-template-columns: repeat(2, 1fr); }

  @media (max-width: 1400px) {
    .g-8 { grid-template-columns: repeat(4, 1fr); }
    .g-6 { grid-template-columns: repeat(3, 1fr); }
  }
  @media (max-width: 1000px) {
    .g-8, .g-6, .g-5 { grid-template-columns: repeat(3, 1fr); }
    .g-4 { grid-template-columns: repeat(2, 1fr); }
  }
  @media (max-width: 700px) {
    .grid-dense { grid-template-columns: repeat(2, 1fr) !important; }
  }
  @media (max-width: 450px) {
    .grid-dense { grid-template-columns: 1fr !important; }
  }

  /* 1-column app layout (sidebars removed) */
  .app-layout {
    display: grid;
    grid-template-columns: 1fr;
    gap: var(--grid-gap-md);
    max-width: var(--max-w);
    margin: 0 auto;
    padding: var(--s-3) var(--s-4);
    padding-bottom: calc(var(--statusbar-h) + var(--s-4));
  }

  .app-layout-2col {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: var(--grid-gap-md);
    max-width: var(--max-w);
    margin: 0 auto;
    padding: var(--s-3) var(--s-4);
    padding-bottom: calc(var(--statusbar-h) + var(--s-4));
  }

  .app-sidebar {
    position: sticky;
    top: calc(var(--header-h) + var(--ticker-h) + var(--s-3));
    max-height: calc(100vh - var(--header-h) - var(--ticker-h) - var(--statusbar-h) - var(--s-6));
    overflow-y: auto;
    scrollbar-width: thin;
    scrollbar-color: var(--bd-2) var(--bg-1);
  }

  @media (max-width: 1200px) {
    .app-layout { grid-template-columns: 1fr; }
  }
  @media (max-width: 900px) {
    .app-layout,
    .app-layout-2col { grid-template-columns: 1fr; }
    .app-sidebar { position: static; max-height: none; }
  }

}

/* ── Feed container — no gap, rows separated by border-bottom ── */
#feed {
  display: flex !important;
  flex-direction: column !important;
  gap: 0 !important;
}

/* ── Time group header (Bloomberg override — full-width divider) ── */
.time-group-header {
  position: relative !important;
  width: 100% !important;
  padding: var(--s-2) 0 var(--s-1) !important;
  background: transparent !important;
  border: none !important;
  border-radius: 0 !important;
  font-family: var(--ff-mono) !important;
  font-size: var(--fs-micro) !important;
  font-weight: 600 !important;
  letter-spacing: var(--ls-wider) !important;
  text-transform: uppercase !important;
  color: var(--t-3) !important;
  display: flex !important;
  align-items: center !important;
  gap: var(--s-2) !important;
}
.time-group-header::after {
  content: '';
  flex: 1;
  height: 1px;
  background: var(--bd-1);
}

/* ── Thai-first layout ── */
.nrow-th-inline {
  font-size: var(--fs-base);
  font-family: var(--ff-sans);
  color: var(--t-0);
  font-weight: 600;
  line-height: var(--lh-base);
  margin-bottom: var(--s-1);
}
.nrow-headline--en {
  font-size: var(--fs-sm);
  color: var(--t-2);
  font-weight: 400;
  line-height: var(--lh-base);
}
