:root {
  color-scheme: dark;
  --bg: #05080c;
  --bg-soft: #080d13;
  --panel: #0a1119;
  --panel-2: #0d151f;
  --panel-3: #111c27;
  --line: #1c2b39;
  --line-bright: #2c4357;
  --text: #e5edf5;
  --soft: #9bb0c1;
  --muted: #62798b;
  --gold: #f1bd4b;
  --gold-soft: rgba(241, 189, 75, .12);
  --blue: #71a7ff;
  --cyan: #55d6e8;
  --green: #6ce1a4;
  --red: #ff7885;
  --orange: #ffad57;
  --violet: #b896ff;
  --shadow: 0 16px 46px rgba(0, 0, 0, .28);
  --radius: 12px;
  font-family: "IBM Plex Mono", "Cascadia Code", "Segoe UI Mono", Consolas, monospace;
  font-synthesis: none;
}

.gip-light {
  color-scheme: light;
  --bg: #eef3f7;
  --bg-soft: #e5edf3;
  --panel: #f9fbfc;
  --panel-2: #f2f6f9;
  --panel-3: #e8eff4;
  --line: #cad7e1;
  --line-bright: #9eb4c4;
  --text: #14222d;
  --soft: #395266;
  --muted: #6a8091;
  --gold: #9a6900;
  --gold-soft: rgba(154, 105, 0, .1);
  --blue: #2464b8;
  --cyan: #007d8d;
  --green: #087447;
  --red: #b7273a;
  --orange: #a45100;
  --violet: #6942a8;
  --shadow: 0 16px 44px rgba(45, 70, 89, .13);
}

* { box-sizing: border-box; }

html { min-width: 320px; background: var(--bg); scroll-behavior: smooth; }
body { min-height: 100vh; margin: 0; padding-bottom: 122px; color: var(--text); background:
  radial-gradient(circle at 5% -10%, rgba(113, 167, 255, .08), transparent 25%),
  radial-gradient(circle at 92% 0%, rgba(241, 189, 75, .055), transparent 26%),
  var(--bg); }
button, input, select { font: inherit; }
button { color: inherit; }

body::before {
  position: fixed;
  z-index: -1;
  inset: 0;
  pointer-events: none;
  content: "";
  opacity: .18;
  background-image: linear-gradient(rgba(255,255,255,.012) 1px, transparent 1px), linear-gradient(90deg, rgba(255,255,255,.01) 1px, transparent 1px);
  background-size: 32px 32px;
  mask-image: linear-gradient(to bottom, black, transparent 72%);
}

.gip-app { min-height: 100vh; }
.gip-main, .gip-header, .gip-product-strip, .gip-tabs, .gip-footer { width: min(1760px, calc(100% - 32px)); margin-inline: auto; }

.gip-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 28px;
  min-height: 92px;
  padding: 18px 20px;
  border: 1px solid var(--line);
  border-top: 0;
  border-radius: 0 0 var(--radius) var(--radius);
  background: linear-gradient(135deg, rgba(12, 20, 29, .97), rgba(6, 10, 15, .98));
  box-shadow: 0 10px 35px rgba(0, 0, 0, .2);
}
.gip-light .gip-header { background: linear-gradient(135deg, rgba(249,251,252,.98), rgba(235,242,247,.98)); }
.gip-brand { display: flex; align-items: center; gap: 15px; min-width: 300px; }
.gip-brand__mark { position: relative; display: grid; place-items: center; width: 46px; height: 46px; flex: 0 0 auto; border: 1px solid rgba(241,189,75,.52); border-radius: 50%; box-shadow: inset 0 0 24px rgba(241,189,75,.07), 0 0 28px rgba(241,189,75,.07); }
.gip-brand__mark::before, .gip-brand__mark::after, .gip-brand__mark span { position: absolute; content: ""; border-radius: 50%; }
.gip-brand__mark::before { width: 27px; height: 27px; border: 1px solid rgba(85,214,232,.5); }
.gip-brand__mark::after { width: 9px; height: 9px; background: var(--gold); box-shadow: 0 0 18px var(--gold); }
.gip-brand__mark span { width: 2px; height: 36px; background: linear-gradient(transparent, var(--blue), transparent); transform: rotate(42deg); animation: gip-brand-scan 9s linear infinite; }
.gip-brand__mark::after { animation: gip-brand-core 2.8s ease-in-out infinite; }
@keyframes gip-brand-scan { to { transform: rotate(402deg); } }
@keyframes gip-brand-core { 50% { opacity: .62; box-shadow: 0 0 26px var(--gold); transform: scale(.82); } }
.gip-eyebrow { color: var(--blue); font-size: 9px; font-weight: 900; letter-spacing: 1.65px; text-transform: uppercase; }
.gip-brand h1 { margin: 4px 0 2px; font-family: "Segoe UI", sans-serif; font-size: 21px; letter-spacing: -.4px; }
.gip-brand h1 b { color: var(--gold); font-weight: 800; }
.gip-brand p { margin: 0; color: var(--muted); font-size: 8px; line-height: 1.4; text-transform: uppercase; }

.gip-header__actions { display: flex; align-items: center; justify-content: flex-end; gap: 8px; }
.gip-header__actions button, .gip-source-panel button {
  min-height: 34px;
  padding: 8px 11px;
  border: 1px solid var(--line-bright);
  border-radius: 7px;
  color: var(--soft);
  background: rgba(8, 14, 20, .72);
  cursor: pointer;
  font-size: 8px;
  font-weight: 900;
  letter-spacing: .65px;
  text-transform: uppercase;
  transition: border-color .18s ease, color .18s ease, background .18s ease, transform .18s ease;
}
.gip-light .gip-header__actions button, .gip-light .gip-source-panel button { background: rgba(255,255,255,.8); }
.gip-header__actions button:hover, .gip-source-panel button:hover { border-color: var(--blue); color: var(--text); background: rgba(113,167,255,.1); }
.gip-header__actions button:active { transform: translateY(1px); }
.gip-header__actions button:disabled { cursor: progress; opacity: .55; }
.gip-header__actions .gip-button--primary { border-color: rgba(241,189,75,.48); color: var(--gold); background: var(--gold-soft); }
.gip-header__status { display: flex; flex-direction: column; min-width: 146px; padding-right: 13px; border-right: 1px solid var(--line); text-align: right; }
.gip-header__status span { color: var(--muted); font-size: 9px; letter-spacing: 1px; }
.gip-header__status strong { margin: 3px 0; color: var(--soft); font-size: 9px; }
.gip-header__status small { color: var(--muted); font-size: 9px; }

.gip-product-strip {
  display: flex;
  align-items: center;
  gap: 22px;
  min-height: 42px;
  margin-top: 10px;
  padding: 7px 12px;
  border: 1px solid var(--line);
  border-radius: 9px;
  background: rgba(7, 12, 18, .82);
}
.gip-light .gip-product-strip { background: rgba(249,251,252,.86); }
.gip-product-strip > div { display: flex; align-items: center; gap: 7px; color: var(--muted); font-size: 9px; text-transform: uppercase; }
.gip-product-strip p { margin: 0 0 0 auto; color: var(--orange); font-size: 9px; text-align: right; }
.gip-dot { width: 7px; height: 7px; border-radius: 50%; }
.gip-dot--green { background: var(--green); box-shadow: 0 0 9px rgba(108,225,164,.7); }
.gip-dot--blue { background: var(--blue); box-shadow: 0 0 9px rgba(113,167,255,.7); }

.gip-tabs {
  display: grid;
  grid-template-columns: repeat(10, minmax(0, 1fr));
  gap: 5px;
  margin-top: 10px;
  padding: 5px;
  border: 1px solid var(--line);
  border-radius: 10px;
  background: rgba(7, 12, 18, .78);
}
.gip-light .gip-tabs { background: rgba(249,251,252,.8); }
.gip-tabs button { display: flex; flex-direction: column; align-items: flex-start; justify-content: center; min-width: 0; min-height: 48px; padding: 8px 10px; border: 1px solid rgba(44,67,87,.62); border-radius: 7px; color: var(--muted); background: rgba(3,7,11,.3); cursor: pointer; text-align: left; }
.gip-tabs button span { overflow: hidden; width: 100%; font-size: 8px; font-weight: 900; letter-spacing: .65px; text-overflow: ellipsis; text-transform: uppercase; white-space: nowrap; }
.gip-tabs button small { overflow: hidden; width: 100%; margin-top: 4px; font-size: 9px; text-overflow: ellipsis; white-space: nowrap; }
.gip-tabs button:hover { border-color: var(--line-bright); color: var(--soft); background: rgba(113,167,255,.05); }
.gip-tabs button.is-active { border-color: rgba(113,167,255,.55); color: var(--blue); background: rgba(113,167,255,.105); box-shadow: inset 0 0 20px rgba(113,167,255,.04); }
.gip-tabs button.is-active small { color: var(--soft); }
.gip-tabs button.is-planned:not(.is-active) { border-color: rgba(241,189,75,.14); color: var(--gold); }

.gip-main { min-height: calc(100vh - 255px); padding-block: 14px 30px; }
.gip-page { animation: gip-page-in .22s ease both; }
@keyframes gip-page-in { from { opacity: .4; transform: translateY(3px); } to { opacity: 1; transform: none; } }
.gip-grid { display: grid; align-items: start; gap: 10px; }
/* GOLD NOW deliberately narrow, structure wide: the price card holds one
   number while the zone table holds names that were truncating. */
.gip-grid--dashboard-top, .gip-grid--decision-row { grid-template-columns: minmax(0, .58fr) minmax(0, 1.62fr) minmax(0, .8fr); }
.gip-grid--decision-row { margin-top: 10px; }
.gip-grid--context { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.gip-grid--structure-top { grid-template-columns: .72fr 1.28fr .72fr; }
/* Round 21 (owner): two cards exist — the third, widest track sat empty. */
.gip-grid--currency-summary { grid-template-columns: repeat(2, minmax(0, 1fr)); }
/* Round 19 (owner): the latest-release card shrinks so the evidence card gets
 * the width its five window tiles actually need. */
.gip-grid--econ-top { grid-template-columns: .85fr .75fr 1.4fr; }
.gip-grid--news-top { grid-template-columns: 1.6fr .7fr; }
.gip-grid--sources { grid-template-columns: repeat(4, minmax(0, 1fr)); }

.gip-grid--dashboard-top,
.gip-grid--decision-row,
.gip-grid--context { align-items: stretch; }

.gip-grid--dashboard-top > .gip-card,
.gip-grid--decision-row > .gip-card,
.gip-grid--context > .gip-card {
  display: grid;
  height: 100%;
  grid-template-rows: auto 1fr auto;
}

.gip-card {
  position: relative;
  min-width: 0;
  overflow: hidden;
  border: 1px solid var(--line);
  border-radius: var(--radius);
  background: linear-gradient(145deg, rgba(12, 20, 29, .96), rgba(7, 12, 18, .98));
  box-shadow: var(--shadow), inset 0 1px 0 rgba(255,255,255,.018);
}
.gip-light .gip-card { background: linear-gradient(145deg, rgba(255,255,255,.98), rgba(241,246,249,.98)); }
.gip-card__header { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; padding: 14px 14px 0; }
.gip-card__header h2 { overflow-wrap: anywhere; margin: 5px 0 0; color: var(--text); font-family: "Segoe UI", sans-serif; font-size: 13px; line-height: 1.28; letter-spacing: -.15px; }
.gip-card__body { padding: 14px; }
.gip-card__footer { padding: 9px 14px; border-top: 1px solid rgba(44,67,87,.55); color: var(--muted); font-size: 9px; line-height: 1.55; }
.gip-card--wide { padding-top: 2px; }

.gip-pill, .gip-direction {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 21px;
  max-width: 100%;
  padding: 3px 7px;
  border: 1px solid var(--line-bright);
  border-radius: 999px;
  font-size: 9px;
  font-weight: 900;
  letter-spacing: .55px;
  line-height: 1.2;
  text-align: center;
  text-transform: uppercase;
  white-space: nowrap;
}
.gip-pill--ready { border-color: rgba(108,225,164,.44); color: var(--green); background: rgba(108,225,164,.08); }
.gip-pill--partial { border-color: rgba(85,214,232,.42); color: var(--cyan); background: rgba(85,214,232,.07); }
.gip-pill--waiting { border-color: rgba(241,189,75,.43); color: var(--gold); background: rgba(241,189,75,.07); }
.gip-pill--stale { border-color: rgba(255,173,87,.45); color: var(--orange); background: rgba(255,173,87,.08); }
.gip-pill--missing { border-color: rgba(255,120,133,.44); color: var(--red); background: rgba(255,120,133,.07); }
.gip-pill--neutral { color: var(--soft); background: rgba(98,121,139,.07); }
/* Round 18 (owner spec): UP/DOWN pills — slightly stronger border/contrast; a
 * dimmed base word with a bright layer that REVEALS inside the stationary
 * letters. Nothing moves. SIDEWAYS keeps its existing treatment exactly. */
.gip-direction--up { position: relative; border-color: rgba(108,225,164,.7); color: rgba(108,225,164,.42); background: rgba(108,225,164,.12); box-shadow: 0 0 6px rgba(108,225,164,.14); }
.gip-direction--down { position: relative; border-color: rgba(255,120,133,.7); color: rgba(255,120,133,.42); background: rgba(255,120,133,.12); box-shadow: 0 0 6px rgba(255,120,133,.14); }
.gip-direction--side { border-color: rgba(241,189,75,.45); color: var(--gold); background: rgba(241,189,75,.08); }
.gip-direction__fill { position: absolute; inset: 0; display: inline-flex; align-items: center; justify-content: center; padding: 3px 7px; pointer-events: none; white-space: nowrap; }
.gip-direction--up .gip-direction__fill { color: var(--green); animation: gip-fill-rise 5s ease-in-out infinite; }
.gip-direction--down .gip-direction__fill { color: var(--red); animation: gip-fill-fall 5s ease-in-out infinite; }
.gip-direction--up .gip-direction__fill .gip-dir-glyph { color: var(--green); }
.gip-direction--down .gip-direction__fill .gip-dir-glyph { color: var(--red); }

.gip-card--price { border-color: rgba(241,189,75,.27); background: radial-gradient(circle at 90% 12%, rgba(241,189,75,.11), transparent 38%), linear-gradient(145deg, rgba(21,20,16,.98), rgba(7,12,18,.98)); }
.gip-light .gip-card--price { background: radial-gradient(circle at 90% 12%, rgba(154,105,0,.1), transparent 38%), linear-gradient(145deg, #fff, #f5f2e9); }
.gip-price { margin: 4px 0 2px; color: var(--gold); font-family: "Segoe UI", sans-serif; font-size: clamp(31px, 3vw, 43px); font-weight: 800; letter-spacing: -1.6px; }
.gip-price-source { margin: 0 0 15px; color: var(--muted); font-size: 9px; text-transform: uppercase; }
.gip-data-stack { display: grid; }
.gip-data-line { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; padding: 7px 0; border-top: 1px solid rgba(44,67,87,.48); color: var(--muted); font-size: 9px; line-height: 1.45; }
.gip-data-line strong { max-width: 68%; color: var(--soft); font-weight: 700; text-align: right; overflow-wrap: anywhere; }
.gip-data-line--emphasis strong { color: var(--gold); font-size: 9px; }

.gip-card--structure-pair { border-color: rgba(113,167,255,.26); }
.gip-level-columns { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.gip-level-columns > section { min-width: 0; padding: 9px; border: 1px solid rgba(44,67,87,.55); border-radius: 8px; background: rgba(3,7,11,.34); }
.gip-light .gip-level-columns > section { background: rgba(230,238,244,.52); }
.gip-level-heading { margin-bottom: 6px; font-size: 9px; font-weight: 900; letter-spacing: .7px; text-transform: uppercase; }
.gip-level-heading--above { color: var(--red); }
.gip-level-heading--below { color: var(--green); }
.gip-level-row { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 7px 0; border-top: 1px solid rgba(44,67,87,.4); }
.gip-level-row > div { display: flex; min-width: 0; flex-direction: column; gap: 2px; }
.gip-level-row strong { overflow: hidden; color: var(--soft); font-size: 9px; text-overflow: ellipsis; white-space: nowrap; }
.gip-level-row span { color: var(--muted); font-size: 9px; }
.gip-level-row b { color: var(--gold); font-size: 8px; white-space: nowrap; }
.gip-inline-missing { padding: 9px 0; color: var(--muted); font-size: 9px; line-height: 1.5; }

/* Where price is right now, relative to saved areas. Observation, not instruction. */
.gip-inside-now { margin: 0 0 10px; padding: 8px 10px; border: 1px solid rgba(108,225,164,.34); border-radius: 8px; background: rgba(108,225,164,.06); }
.gip-light .gip-inside-now { border-color: rgba(8,116,71,.3); background: rgba(8,116,71,.05); }
.gip-inside-now__head { display: flex; align-items: baseline; gap: 8px; margin-bottom: 6px; }
.gip-inside-now__head span { color: var(--muted); font-size: 9px; letter-spacing: .5px; text-transform: uppercase; }
.gip-inside-now__head b { color: var(--green); font-size: 8px; }
.gip-inside-now ul { display: grid; gap: 3px; margin: 0; padding: 0; list-style: none; }
.gip-inside-now li { display: flex; align-items: baseline; gap: 8px; }
.gip-inside-now li em { min-width: 26px; color: var(--muted); font-size: 9px; font-style: normal; text-transform: uppercase; }
.gip-inside-now li b { color: var(--green); font-size: 8px; white-space: nowrap; }
.gip-inside-now li span { margin-left: auto; color: var(--muted); font-size: 9px; text-transform: uppercase; }
.gip-inside-now p { margin: 6px 0 0; color: var(--muted); font-size: 9px; line-height: 1.5; }

/* ===== Gold structure chart (ported from gip-v2, readability floor applied) ===== */
.gip-structure-chart { margin: 0 0 14px; padding: 12px; border: 1px solid rgba(113,167,255,.22); border-radius: 10px; background: linear-gradient(180deg, rgba(6,13,20,.9), rgba(3,8,13,.74)); overflow: hidden; }
.gip-light .gip-structure-chart { background: linear-gradient(180deg, #f9fbfd, #edf3f7); }
.gip-structure-chart__meta { display: flex; align-items: flex-start; justify-content: space-between; gap: 14px; margin-bottom: 8px; }
.gip-structure-chart__meta > div { display: flex; min-width: 0; flex-direction: column; gap: 3px; }
.gip-structure-chart__meta strong { color: var(--text); font-family: "Segoe UI", sans-serif; font-size: 15px; }
.gip-structure-chart__meta span { color: var(--muted); font-size: 10px; text-transform: uppercase; }
.gip-structure-chart__plot { display: block; width: 100%; height: auto; min-height: 260px; border: 1px solid rgba(44,67,87,.48); border-radius: 8px; background: rgba(2,7,12,.5); }
.gip-light .gip-structure-chart__plot { background: rgba(255,255,255,.72); }
/* Round 14 clarity: axis-aligned strokes snap to device pixels (crispEdges) and
 * candle bodies are near-solid — the sharp look of a professional platform. */
.gip-chart-grid line { stroke: rgba(98,121,139,.24); stroke-width: 1; shape-rendering: crispEdges; }
.gip-chart-grid text, .gip-chart-time { fill: var(--muted); font-size: 13px; font-weight: 700; }
/* Round 18 follow-up: the finished time axis — baseline, per-bar ticks, day stamps. */
.gip-chart-axisline { stroke: rgba(148,170,196,.35); stroke-width: 1; }
.gip-chart-axistick { stroke: rgba(148,170,196,.3); stroke-width: 1; }
.gip-chart-time__day { fill: rgba(241,189,75,.75); font-size: 10.5px; font-weight: 900; letter-spacing: .5px; }
/* Round 21 (owner): the plot is framed on top and both sides so the forming slot
 * and the tag edge read as a finished chart, not a cut-off. */
.gip-chart-frame line { stroke: rgba(148,170,196,.22); stroke-width: 1; }
/* Round 21 (owner): upcoming events collapse to hoverable dots. */
.gip-upcoming__next { display: flex; align-items: center; gap: 8px; margin: 6px 0; font-size: 9.5px; }
.gip-upcoming__next em { color: var(--muted); font-style: normal; font-weight: 800; }
.gip-upcoming__next b { color: var(--text); overflow-wrap: anywhere; }
.gip-upcoming__next .gip-countdown { color: var(--gold); font-weight: 800; }
.gip-upcoming__dots { display: flex; flex-wrap: wrap; gap: 7px; margin-top: 4px; }
.gip-event-dot { width: 10px; height: 10px; border: 1px solid rgba(113,167,255,.6); border-radius: 50%; background: rgba(113,167,255,.18); cursor: help; }
.gip-event-dot--high { border-color: rgba(241,189,75,.75); background: rgba(241,189,75,.28); }
.gip-event-dot:hover, .gip-event-dot:focus-visible { background: rgba(113,167,255,.45); }
.gip-event-dot--high:hover, .gip-event-dot--high:focus-visible { background: rgba(241,189,75,.6); }
/* Round 26 (owner): MARKET BREADTH — split bars counting live reads per group.
 * Round 27 (owner): bigger everything, plain words beside each bar, and the
 * house one-shot reveal on the segments. */
.gip-breadth { margin-bottom: 18px; padding: 20px 24px; border: 1px solid rgba(44,67,87,.55); border-radius: 12px; background: rgba(3,7,11,.3); }
.gip-light .gip-breadth { background: rgba(235,242,247,.55); }
.gip-breadth__head { display: flex; align-items: baseline; gap: 14px; margin-bottom: 14px; }
.gip-breadth__head .gip-eyebrow { font-size: 12px; }
.gip-breadth__head small { color: var(--muted); font-size: 10px; }
/* Round 28 (owner): each group keeps its bar and words TOGETHER, left-packed —
 * the words were drifting so far right they read as the next group's. */
.gip-breadth__groups { display: grid; grid-template-columns: repeat(auto-fit, minmax(340px, 1fr)); gap: 26px; justify-items: start; }
.gip-breadth__group h5 { margin: 0 0 10px; color: var(--text); font-size: 16px; font-weight: 900; letter-spacing: .7px; }
.gip-breadth__row { display: flex; gap: 12px; align-items: center; margin-bottom: 10px; }
.gip-breadth__row > span { width: 44px; color: var(--muted); font-size: 12px; font-weight: 900; letter-spacing: .4px; }
.gip-breadth__bar { display: flex; width: 190px; flex: none; height: 30px; border-radius: 7px; overflow: hidden; }
.gip-breadth__seg { display: grid; place-items: center; min-width: 26px; font-size: 13px; font-weight: 900; font-style: normal; transform-origin: left center; animation: gip-breadth-reveal .6s ease-out 1; }
.gip-breadth__seg--up { background: rgba(108,225,164,.28); color: var(--green); }
.gip-breadth__seg--down { background: rgba(255,107,107,.28); color: var(--red); }
.gip-breadth__seg--flat { background: rgba(241,189,75,.22); color: var(--gold); }
.gip-breadth__words { display: flex; gap: 12px; white-space: nowrap; }
.gip-breadth__word { font-size: 13px; font-weight: 900; letter-spacing: .3px; }
.gip-breadth__word--up { color: var(--green); }
.gip-breadth__word--down { color: var(--red); }
.gip-breadth__word--flat { color: var(--gold); }
@keyframes gip-breadth-reveal { 0% { transform: scaleX(0); } 62% { transform: scaleX(1); } 70% { filter: brightness(1.35); } 100% { transform: scaleX(1); filter: brightness(1); } }
@media (prefers-reduced-motion: reduce) { .gip-breadth__seg { animation: none; } }
@media (max-width: 900px) { .gip-breadth__row { grid-template-columns: 40px 1fr; } .gip-breadth__words { grid-column: 2; } }

/* Round 25 (owner): the currency tab as a picture — verdict header, two-sided
 * strength beam around the dollar, one glyph per pair. */
.gip-fx-header { display: flex; align-items: center; justify-content: space-between; gap: 14px; flex-wrap: wrap; margin-bottom: 12px; }
.gip-fx-header__verdict { display: flex; align-items: center; gap: 10px; }
/* Round 28 (owner): first-glance sizing. */
.gip-fx-header__verdict b { font-family: "Segoe UI", sans-serif; font-size: 32px; font-weight: 800; letter-spacing: -.4px; color: var(--text); }
.gip-fx-header__stats { display: flex; gap: 20px; }
.gip-fx-header__stats span { color: var(--text); font-size: 20px; font-weight: 800; cursor: help; font-variant-numeric: tabular-nums; }
.gip-fx-header__stats small { display: block; color: var(--muted); font-size: 9px; font-weight: 900; letter-spacing: .7px; }
.gip-fx-beam { display: grid; grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr); gap: 14px; align-items: center; padding: 14px 16px; border: 1px solid rgba(44,67,87,.55); border-radius: 10px; background: rgba(3,7,11,.3); }
.gip-light .gip-fx-beam { background: rgba(235,242,247,.55); }
.gip-fx-beam__usd { display: grid; place-items: center; width: 96px; height: 96px; border: 2px solid rgba(241,189,75,.55); border-radius: 50%; background: radial-gradient(circle, rgba(241,189,75,.16) 0 40%, transparent 75%); }
.gip-fx-beam__usd b { color: var(--gold); font-size: 19px; font-weight: 900; letter-spacing: .5px; }
.gip-fx-beam__usd span { color: var(--muted); font-size: 9px; font-weight: 900; letter-spacing: .5px; }
.gip-fx-beam__side h5 { margin: 0 0 8px; color: var(--muted); font-size: 11px; font-weight: 900; letter-spacing: .8px; }
.gip-fx-beam__side--stronger { text-align: right; }
.gip-fx-beam__side--stronger h5 { color: rgba(108,225,164,.8); }
.gip-fx-beam__side--weaker h5 { color: rgba(255,107,107,.8); }
.gip-fx-beam__side > div { display: flex; gap: 6px; flex-wrap: wrap; }
.gip-fx-beam__side--stronger > div { justify-content: flex-end; }
.gip-fx-beam__side em { color: var(--muted); font-size: 8.5px; }
.gip-fx-chip { padding: 8px 15px; border-radius: 999px; font-size: 14px; font-weight: 900; font-style: normal; letter-spacing: .4px; cursor: help; }
.gip-fx-beam__side--stronger .gip-fx-chip { color: var(--green); border: 1px solid rgba(108,225,164,.45); background: rgba(108,225,164,.08); }
.gip-fx-beam__side--weaker .gip-fx-chip { color: var(--red); border: 1px solid rgba(255,107,107,.45); background: rgba(255,107,107,.08); }
.gip-fx-flat { margin: 6px 2px 0; color: var(--gold); font-size: 8.5px; font-weight: 700; }
.gip-fx-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 10px; }
.gip-fx-tile { display: grid; gap: 2px; position: relative; padding: 12px 14px; border: 1px solid rgba(44,67,87,.5); border-radius: 9px; background: rgba(3,7,11,.3); cursor: help; }
.gip-light .gip-fx-tile { background: rgba(235,242,247,.55); }
.gip-fx-tile span { color: var(--muted); font-size: 11px; font-weight: 900; letter-spacing: .5px; }
.gip-fx-tile b { font-size: 23px; line-height: 1.1; }
.gip-fx-tile--up b { color: var(--green); }
.gip-fx-tile--down b { color: var(--red); }
.gip-fx-tile--side b { color: var(--gold); }
.gip-fx-tile small { color: var(--text); font-size: 10px; font-weight: 800; }
.gip-fx-dot { position: absolute; top: 8px; right: 8px; width: 6px; height: 6px; border-radius: 50%; background: var(--green); box-shadow: 0 0 6px rgba(108,225,164,.5); }
.gip-fx-dot.is-stale { background: var(--gold); box-shadow: 0 0 6px rgba(241,189,75,.5); }

/* Round 23 (owner): observed share/index tiles — sign colouring only.
 * Round 25: indices and shares sit side by side as two columns. */
.gip-shares-observed { margin-top: 14px; }
.gip-shares-observed { display: block; }
.gip-shares-columns { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px; }
@media (max-width: 980px) { .gip-shares-columns { grid-template-columns: 1fr; } }
.gip-share-group { margin-top: 8px; }
.gip-share-group h4 { margin: 0 0 6px; color: var(--muted); font-size: 9px; font-weight: 900; letter-spacing: .8px; text-transform: uppercase; }
.gip-share-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(132px, 1fr)); gap: 7px; }
.gip-share-tile { display: grid; gap: 2px; padding: 8px 10px; border: 1px solid rgba(44,67,87,.5); border-radius: 7px; background: rgba(3,7,11,.3); cursor: help; }
.gip-light .gip-share-tile { background: rgba(235,242,247,.55); }
.gip-share-tile span { color: var(--muted); font-size: 8.5px; font-weight: 900; letter-spacing: .5px; }
.gip-share-tile b { color: var(--text); font-size: 12.5px; font-variant-numeric: tabular-nums; }
.gip-share-tile i { font-size: 9px; font-weight: 800; font-style: normal; }
.gip-share-tile i small { color: var(--muted); font-size: 7px; font-weight: 900; }
.gip-share-tile--up i { color: var(--green); }
.gip-share-tile--down i { color: var(--red); }
.gip-share-tile--flat i { color: var(--gold); }
.gip-share-tile--up { border-color: rgba(108,225,164,.3); }
.gip-share-tile--down { border-color: rgba(255,107,107,.3); }
/* Round 24: per-window live reads + visible observed time on every tile. */
.gip-share-reads { display: flex; gap: 5px; margin-top: 2px; }
.gip-share-read { font-size: 7.5px; font-weight: 900; font-style: normal; letter-spacing: .3px; }
.gip-share-read--up { color: var(--green); }
.gip-share-read--down { color: var(--red); }
.gip-share-read--flat { color: var(--gold); }
.gip-share-read small { margin-left: 2px; color: var(--muted); font-size: 6.5px; font-weight: 700; }
.gip-share-tile time { color: var(--muted); font-size: 6.5px; font-weight: 700; }

/* Round 22 (owner): the free 50-headline stack. */
.gip-news-stack { margin-top: 14px; }
.gip-news-list { display: grid; gap: 5px; }
.gip-news-row { display: grid; grid-template-columns: 118px minmax(0, 1fr) auto; gap: 12px; align-items: start; padding: 7px 10px; border: 1px solid rgba(44,67,87,.45); border-radius: 7px; background: rgba(3,7,11,.28); }
.gip-light .gip-news-row { background: rgba(235,242,247,.55); }
.gip-news-row.is-relevant { border-color: rgba(241,189,75,.35); }
.gip-news-row em { color: var(--muted); font-size: 8.5px; font-style: normal; font-weight: 800; }
.gip-news-row b { display: block; color: var(--text); font-size: 9.5px; font-weight: 700; line-height: 1.4; overflow-wrap: anywhere; }
.gip-news-row small { color: var(--muted); font-size: 8px; }
.gip-news-row__reads { display: flex; flex-wrap: wrap; gap: 4px; justify-content: flex-end; max-width: 260px; }
.gip-news-read { padding: 2px 6px; border-radius: 999px; font-size: 7.5px; font-weight: 900; font-style: normal; letter-spacing: .3px; cursor: help; }
.gip-news-read--up { color: var(--green); border: 1px solid rgba(108,225,164,.35); }
.gip-news-read--down { color: var(--red); border: 1px solid rgba(255,107,107,.35); }
.gip-news-read--side { color: var(--gold); border: 1px solid rgba(241,189,75,.35); }
@media (max-width: 900px) { .gip-news-row { grid-template-columns: 1fr; } .gip-news-row__reads { justify-content: flex-start; max-width: none; } }
/* Round 21 (owner): meta facts live in one small hoverable line, not big cards. */
.gip-meta-line { display: flex; gap: 14px; margin: 12px 0 0; color: var(--muted); font-size: 8.5px; font-weight: 800; letter-spacing: .5px; }
.gip-meta-line span { padding: 4px 8px; border: 1px solid rgba(44,67,87,.5); border-radius: 999px; cursor: help; }
/* Round 21 (owner): the dashboard H4 chart is the full structure chart; this
 * strip carries its caption, live value and jump link above it. */
.gip-mini-chart-head { display: flex; align-items: center; gap: 12px; margin-bottom: 8px; color: var(--muted); font-size: 10px; font-weight: 800; letter-spacing: .6px; }
.gip-mini-chart-head .gip-mini-chart__link { margin-left: auto; }
.gip-chart-candle line { stroke-width: 1.4; shape-rendering: crispEdges; }
.gip-chart-candle rect { stroke-width: 1; shape-rendering: crispEdges; }
.gip-chart-candle--up line, .gip-chart-candle--up rect { stroke: var(--green); fill: rgba(108,225,164,.78); }
.gip-chart-candle--down line, .gip-chart-candle--down rect { stroke: var(--red); fill: rgba(255,120,133,.75); }

/* Structure zones sit behind the price and stay faint; they are context, not signal.
 * Round 14: bands are static (no breathing) and each level adds a crisp 1px line. */
.gip-chart-zone { opacity: .12; shape-rendering: crispEdges; }
.gip-chart-zone--above { fill: var(--red); }
.gip-chart-zone--below { fill: var(--green); }
.gip-light .gip-chart-zone { opacity: .1; }
.gip-chart-zone.is-active { opacity: .26; }
.gip-chart-level { stroke-width: 1; opacity: .55; shape-rendering: crispEdges; }
.gip-chart-level--above { stroke: var(--red); }
.gip-chart-level--below { stroke: var(--green); }

/* Round 18: the genuine forming candle — real OHLC, drawn in the reserved
 * right inset, subtly distinct: lighter body fill, brighter outline, a tiny
 * LIVE tag. Stale/market-closed softens it. Display-only by contract. */
.gip-chart-candle--forming rect { fill-opacity: .35; stroke-width: 1.4; }
.gip-chart-candle--forming line { stroke-width: 1.6; }
.gip-chart-candle--forming .gip-chart-candle__live { fill: var(--gold); font-size: 8.5px; font-weight: 900; letter-spacing: .8px; stroke: none; }
.gip-chart-candle--forming.is-stale rect, .gip-chart-candle--forming.is-stale line { opacity: .55; }
.gip-chart-candle--forming.is-stale .gip-chart-candle__live { opacity: .5; }

/* Session breaks: the market was shut, so the line stops rather than crossing.
 * The label runs vertically along its own line (Round 14 overlap fix). */
.gip-chart-break line { stroke: rgba(125,147,166,.45); stroke-width: 1; stroke-dasharray: 2 5; shape-rendering: crispEdges; }
.gip-chart-break text { fill: var(--muted); font-size: 9.5px; font-weight: 600; letter-spacing: 1px; opacity: .7; }

/* High-to-low band keeps the extremes a level is actually tested at. */
.gip-chart-range { fill: var(--gold); opacity: .12; }
.gip-chart-wavefill { fill: url(#gip-wave-fade); opacity: .5; }
.gip-chart-wave { fill: none; stroke: var(--gold); stroke-width: 2.4; stroke-linejoin: round; stroke-linecap: round; }

/* The live price reads as "now": solid, gold, pulsing. Closed bars never are. */
.gip-chart-price line { stroke: var(--gold); stroke-width: 1.6; stroke-dasharray: 5 4; }
.gip-chart-price__dot { fill: var(--gold); stroke: none; }
.gip-chart-price__halo { fill: var(--gold); opacity: .35; }

/* Reach line to the nearest area; its length is the real distance. */
.gip-chart-reach line { stroke-width: 1.2; stroke-dasharray: 2 3; opacity: .8; }
.gip-chart-reach--above line, .gip-chart-reach--above circle { stroke: var(--red); fill: var(--red); }
.gip-chart-reach--below line, .gip-chart-reach--below circle { stroke: var(--green); fill: var(--green); }

/*
 * Animation is CSS-only and deliberately small: three properties on a handful of
 * elements, never one per bar. Nothing runs per frame in JavaScript, so it is
 * composited by the GPU and cannot block the app. It is also fully disabled for
 * anyone who has asked their system to reduce motion.
 */
@keyframes gip-price-pulse { 0%, 100% { opacity: .35; r: 5; } 50% { opacity: 0; r: 11; } }
@keyframes gip-price-shimmer { to { stroke-dashoffset: -18; } }
@keyframes gip-reach-travel { to { stroke-dashoffset: -10; } }
.gip-chart-price__halo { animation: gip-price-pulse 2.4s ease-in-out infinite; }
.gip-chart-price line { animation: gip-price-shimmer 3.6s linear infinite; }
.gip-chart-reach line { animation: gip-reach-travel 1.6s linear infinite; }

@media (prefers-reduced-motion: reduce) {
  .gip-chart-price__halo,
  .gip-chart-price line,
  .gip-chart-reach line { animation: none; }
}

/* Plain statement of where price sits: inside an area, or a measured distance from one. */
.gip-chart-proximity { display: flex; flex-wrap: wrap; align-items: baseline; gap: 8px; margin: 0 0 8px; padding: 7px 10px; border: 1px solid rgba(241,189,75,.28); border-radius: 7px; background: rgba(241,189,75,.06); }
.gip-chart-proximity span { color: var(--muted); font-size: 9.5px; letter-spacing: .5px; text-transform: uppercase; }
.gip-chart-proximity b { color: var(--text); font-size: 12px; }
.gip-chart-proximity em { margin-left: auto; color: var(--gold); font-style: normal; font-size: 12px; font-weight: 700; }
.gip-chart-proximity.is-inside { border-color: rgba(108,225,164,.4); background: rgba(108,225,164,.07); }
.gip-chart-proximity.is-inside b { color: var(--green); }

/*
 * Level labels are reference, not headline. They sit back so the price line and the
 * zone price is currently in stay the loudest things on the chart; only the current
 * price is drawn at full strength.
 */
.gip-chart-mark line { stroke-width: 1; stroke-dasharray: 3 3; opacity: .45; }
.gip-chart-mark text { font-size: 12.5px; font-weight: 600; opacity: .72; letter-spacing: .2px; }
.gip-chart-mark__price { font-size: 12px; font-weight: 700; opacity: .95; }
.gip-chart-mark--above line { stroke: var(--red); }
.gip-chart-mark--above text { fill: var(--red); }
.gip-chart-mark--below line { stroke: var(--green); }
.gip-chart-mark--below text { fill: var(--green); }
.gip-chart-mark--current line { stroke: var(--gold); stroke-dasharray: none; opacity: .8; }
.gip-chart-mark--current text { fill: var(--gold); font-weight: 800; opacity: 1; }
.gip-chart-edge { font-size: 11px; font-weight: 600; fill: var(--muted); opacity: .8; }

/* Chart style switch: a view preference, so it reads as a control, not as data. */
.gip-structure-chart__tools { display: flex; align-items: center; gap: 9px; }
.gip-chart-style { display: inline-flex; padding: 2px; border: 1px solid rgba(44,67,87,.66); border-radius: 7px; background: rgba(3,7,11,.45); }
.gip-light .gip-chart-style { border-color: rgba(158,180,196,.6); background: rgba(255,255,255,.7); }
.gip-chart-style button { padding: 4px 11px; border: 0; border-radius: 5px; color: var(--muted); background: transparent; font: inherit; font-size: 10.5px; letter-spacing: .4px; text-transform: uppercase; cursor: pointer; }
.gip-chart-style button:hover { color: var(--text); }
.gip-chart-style button.is-on { color: #06131c; background: var(--gold); font-weight: 700; }
.gip-light .gip-chart-style button.is-on { color: #fff; }
.gip-chart-style button:focus-visible { outline: 2px solid var(--blue); outline-offset: 1px; }

/* Off-scale levels: exact prices and true distances, never a fake plotted position. */
.gip-chart-rail { margin-top: 10px; padding: 9px 11px; border: 1px solid rgba(44,67,87,.5); border-radius: 8px; background: rgba(3,8,13,.42); }
.gip-light .gip-chart-rail { border-color: rgba(158,180,196,.6); background: rgba(237,243,247,.7); }
.gip-chart-rail h4 { margin: 0 0 2px; color: var(--soft); font-size: 11px; letter-spacing: .5px; text-transform: uppercase; }
.gip-chart-rail p { margin: 0 0 8px; color: var(--muted); font-size: 10px; line-height: 1.5; }
.gip-chart-rail ul { display: grid; grid-template-columns: repeat(auto-fit, minmax(210px, 1fr)); gap: 6px; margin: 0; padding: 0; list-style: none; }
.gip-chart-rail__item { display: flex; align-items: center; gap: 8px; min-width: 0; padding: 6px 8px; border: 1px solid rgba(44,67,87,.55); border-radius: 6px; background: rgba(3,7,11,.34); }
.gip-light .gip-chart-rail__item { border-color: rgba(158,180,196,.55); background: rgba(255,255,255,.75); }
.gip-chart-rail__item i { font-size: 11px; font-style: normal; }
.gip-chart-rail__item div { display: flex; min-width: 0; flex-direction: column; gap: 1px; }
.gip-chart-rail__item b { color: var(--text); font-size: 12px; white-space: nowrap; }
.gip-chart-rail__item em { color: var(--muted); font-size: 9px; font-style: normal; text-transform: uppercase; }
.gip-chart-rail__item > span { margin-left: auto; color: var(--soft); font-size: 10px; white-space: nowrap; }
.gip-chart-rail__item--above i, .gip-chart-rail__item--above b { color: var(--red); }
.gip-chart-rail__item--below i, .gip-chart-rail__item--below b { color: var(--green); }
.gip-structure-chart figcaption { margin-top: 8px; color: var(--muted); font-size: 10px; line-height: 1.5; }
.gip-structure-chart--unavailable { display: grid; gap: 8px; min-height: 150px; align-content: center; text-align: center; }
.gip-structure-chart--unavailable strong { color: var(--soft); font-size: 14px; }
.gip-structure-chart--unavailable p { margin: 0; color: var(--muted); font-size: 11px; line-height: 1.55; }
.gip-card--structure-chart .gip-level-columns { margin-top: 2px; }

.gip-confirmation-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 6px; }
.gip-confirmation-item { display: grid; min-width: 0; grid-template-columns: minmax(0, 1fr); align-content: start; gap: 6px; padding: 7px 8px; border: 1px solid rgba(44,67,87,.52); border-radius: 7px; background: rgba(3,7,11,.3); }
.gip-light .gip-confirmation-item { background: rgba(230,238,244,.48); }
.gip-confirmation-item > span { color: var(--soft); font-size: 9px; font-weight: 800; }
.gip-confirmation-item .gip-pill, .gip-confirmation-item .gip-direction { justify-self: start; white-space: normal; }
.gip-confirmation-item small { color: var(--muted); font-size: 9px; }
.gip-copy { margin: 13px 0 0; color: var(--soft); font-size: 9.5px; line-height: 1.68; }
.gip-copy--large { font-size: 9px; line-height: 1.8; }

.gip-card--decision { border-color: rgba(184,150,255,.27); background: radial-gradient(circle at 95% 10%, rgba(184,150,255,.08), transparent 36%), linear-gradient(145deg, rgba(14,18,27,.98), rgba(7,12,18,.98)); }
.gip-light .gip-card--decision { background: radial-gradient(circle at 95% 10%, rgba(105,66,168,.08), transparent 36%), #fff; }
.gip-pending-lock { display: flex; align-items: center; gap: 9px; margin: 2px 0 12px; padding: 9px 10px; border: 1px solid rgba(241,189,75,.2); border-radius: 8px; color: var(--gold); background: rgba(241,189,75,.045); font-size: 9px; letter-spacing: .7px; }
.gip-pending-lock span { width: 8px; height: 8px; border: 1px solid var(--gold); border-radius: 2px; box-shadow: inset 0 0 6px rgba(241,189,75,.3); }
.gip-card--driver { border-color: rgba(113,167,255,.25); }
.gip-card--alignment { border-color: rgba(108,225,164,.22); }
.gip-evidence-chain { display: flex; align-items: center; flex-wrap: wrap; gap: 5px; margin: 11px 0; }
.gip-evidence-chain span { padding: 5px 6px; border: 1px solid rgba(44,67,87,.55); border-radius: 5px; color: var(--soft); font-size: 9px; }
.gip-evidence-chain i { color: var(--blue); font-style: normal; font-size: 9px; }
.gip-alignment-lock { display: flex; align-items: center; justify-content: space-between; gap: 15px; padding: 9px 0; border-top: 1px solid rgba(44,67,87,.5); }
.gip-alignment-lock span { color: var(--muted); font-size: 9px; }
.gip-alignment-lock b { color: var(--gold); font-size: 9px; text-align: right; }

.gip-section { margin-top: 20px; }
.gip-section--first { margin-top: 2px; }
.gip-section-heading { display: flex; align-items: flex-end; justify-content: space-between; gap: 28px; margin: 0 2px 9px; }
.gip-section-heading h2 { margin: 4px 0 0; font-family: "Segoe UI", sans-serif; font-size: 16px; letter-spacing: -.25px; }
.gip-section-heading p { max-width: 650px; margin: 0; color: var(--muted); font-size: 9px; line-height: 1.55; text-align: right; }
.gip-limitations { display: grid; grid-template-columns: .8fr 1.2fr; gap: 20px; margin-top: 10px; padding: 12px 15px; border: 1px solid rgba(255,173,87,.27); border-radius: 10px; background: rgba(255,173,87,.035); }
.gip-limitations > div { display: flex; flex-direction: column; gap: 5px; }
.gip-limitations span { color: var(--orange); font-size: 9px; font-weight: 900; letter-spacing: .8px; }
.gip-limitations strong { color: var(--soft); font-size: 8px; line-height: 1.55; }
.gip-limitations ul { display: grid; grid-template-columns: 1fr 1fr; gap: 5px 14px; margin: 0; padding-left: 17px; color: var(--muted); font-size: 9px; line-height: 1.5; }

.gip-timeframes { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 5px; }
.gip-timeframe { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 6px; min-width: 0; min-height: 68px; padding: 6px 3px; border: 1px solid rgba(44,67,87,.5); border-radius: 7px; background: rgba(3,7,11,.28); }
.gip-light .gip-timeframe { background: rgba(230,238,244,.48); }
.gip-timeframe > span { color: var(--blue); font-size: 9px; font-weight: 900; }
.gip-timeframe .gip-pill, .gip-timeframe .gip-direction { overflow: hidden; max-width: calc(100% - 4px); font-size: 9px; text-overflow: ellipsis; }
.gip-timeframe small { overflow: hidden; max-width: calc(100% - 4px); color: var(--muted); font-size: 9px; text-overflow: ellipsis; white-space: nowrap; }
.gip-metric-grid { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 5px; margin-top: 12px; }
.gip-metric-grid > div { display: flex; flex-direction: column; gap: 4px; padding: 8px 5px; border: 1px solid rgba(44,67,87,.5); border-radius: 7px; text-align: center; }
.gip-metric-grid span { color: var(--muted); font-size: 9px; text-transform: uppercase; }
.gip-metric-grid b { color: var(--blue); font-size: 10px; }

.gip-asset-grid { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 8px; }
.gip-asset { min-width: 0; padding: 12px; border: 1px solid var(--line); border-radius: 10px; background: linear-gradient(145deg, rgba(12,20,29,.94), rgba(7,12,18,.96)); box-shadow: var(--shadow); }
.gip-light .gip-asset { background: #f9fbfc; }
.gip-asset[data-asset="gold"] { border-color: rgba(241,189,75,.28); }
.gip-asset__top { display: flex; align-items: flex-start; justify-content: space-between; gap: 8px; }
.gip-asset__top > div > span { color: var(--muted); font-size: 9px; text-transform: uppercase; }
.gip-asset__top h3 { margin: 4px 0 0; font-family: "Segoe UI", sans-serif; font-size: 11px; }
.gip-asset__meta { display: flex; align-items: center; flex-wrap: wrap; gap: 5px; margin: 10px 0; color: var(--muted); font-size: 9px; }
.gip-asset__meta > span:not(.gip-pill) { overflow: hidden; max-width: 100%; padding-right: 5px; border-right: 1px solid var(--line); text-overflow: ellipsis; white-space: nowrap; }
.gip-asset > p { min-height: 28px; margin: 10px 0 0; color: var(--muted); font-size: 9px; line-height: 1.5; }
.gip-asset > footer { margin-top: 8px; padding-top: 7px; border-top: 1px solid rgba(44,67,87,.46); color: var(--muted); font-size: 9px; line-height: 1.4; }
.gip-asset--compact > p { min-height: 0; }

.gip-strength-list { display: grid; grid-template-columns: 1fr 1fr; gap: 5px; }
.gip-strength-list > div { display: grid; grid-template-columns: auto 1fr auto; align-items: center; gap: 6px; padding: 6px 7px; border: 1px solid rgba(44,67,87,.5); border-radius: 6px; }
.gip-strength-list b { display: grid; place-items: center; width: 17px; height: 17px; border-radius: 50%; color: var(--blue); background: rgba(113,167,255,.08); font-size: 9px; }
.gip-strength-list strong { color: var(--soft); font-size: 9px; }
.gip-strength-list span { color: var(--gold); font-size: 9px; }
.gip-strength-list small { grid-column: 2 / -1; color: var(--muted); font-size: 9px; }

.gip-card--table { overflow: hidden; }
.gip-table { padding: 9px 14px 14px; }
.gip-table__head, .gip-table__row { display: grid; grid-template-columns: .5fr .72fr .62fr .4fr .4fr 1.8fr; align-items: center; gap: 8px; min-height: 38px; border-top: 1px solid rgba(44,67,87,.48); font-size: 8px; }
.gip-table__head { min-height: 28px; color: var(--muted); font-size: 9px; font-weight: 900; letter-spacing: .55px; text-transform: uppercase; }
.gip-table__row strong { color: var(--blue); }
.gip-table__row span { overflow: hidden; color: var(--soft); text-overflow: ellipsis; white-space: nowrap; }

.gip-health-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 8px; }
.gip-health-grid > article { min-width: 0; padding: 12px; border: 1px solid var(--line); border-radius: 9px; background: rgba(10,17,25,.85); }
.gip-light .gip-health-grid > article { background: #f9fbfc; }
.gip-health-grid article > div { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
.gip-health-grid article > div > span { color: var(--soft); font-size: 9px; font-weight: 900; text-transform: uppercase; }
.gip-health-grid b { display: block; margin-top: 12px; color: var(--green); font-size: 13px; }
.gip-health-grid p { margin: 5px 0 0; color: var(--muted); font-size: 9px; line-height: 1.5; }

.gip-page--centered { display: grid; grid-template-columns: minmax(500px, 980px); justify-content: center; gap: 12px; padding-top: 10px; }
.gip-card--feature-state { border-color: rgba(241,189,75,.26); }
.gip-feature-slots { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 8px; margin-top: 18px; }
.gip-feature-slots > div { display: flex; flex-direction: column; gap: 7px; min-height: 78px; padding: 11px; border: 1px solid rgba(44,67,87,.55); border-radius: 8px; background: rgba(3,7,11,.28); }
.gip-light .gip-feature-slots > div { background: rgba(230,238,244,.45); }
.gip-feature-slots span { color: var(--muted); font-size: 9px; text-transform: uppercase; }
.gip-feature-slots b { margin-top: auto; color: var(--gold); font-size: 9px; }
.gip-explainer { margin-top: 12px; padding: 13px 15px; border: 1px solid rgba(113,167,255,.22); border-radius: 10px; background: rgba(113,167,255,.035); }
.gip-explainer strong { color: var(--blue); font-size: 9px; letter-spacing: .7px; text-transform: uppercase; }
.gip-explainer p { margin: 6px 0 0; color: var(--soft); font-size: 9.5px; line-height: 1.65; }
.gip-feature-slots small { color: var(--muted); font-size: 10px; line-height: 1.45; }

.gip-access-boundary { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-top: 14px; padding: 13px 15px; border: 1px solid rgba(108,225,164,.22); border-radius: 10px; background: rgba(108,225,164,.035); }
.gip-access-boundary > div { display: flex; flex-direction: column; gap: 5px; min-width: 0; }
.gip-access-boundary span { color: var(--green); font-size: 9.5px; font-weight: 900; letter-spacing: .75px; }
.gip-access-boundary strong { color: var(--soft); font-size: 11px; line-height: 1.55; }
.gip-access-boundary p { grid-column: 1 / -1; margin: 0; padding-top: 8px; border-top: 1px solid rgba(108,225,164,.14); color: var(--muted); font-size: 10px; line-height: 1.55; }

.gip-simulation-banner { width: min(1760px, calc(100% - 32px)); margin-inline: auto; padding: 8px 14px; border: 1px solid rgba(255,173,87,.45); border-top: 0; border-radius: 0 0 9px 9px; color: var(--orange); background: rgba(64,35,8,.92); text-align: center; }
.gip-simulation-banner strong { margin-right: 12px; font-size: 11px; letter-spacing: .75px; }
.gip-simulation-banner span { color: #ffd2a5; font-size: 10px; }

.gip-assistant-orb { position: fixed; z-index: 12; right: 22px; bottom: 18px; display: grid; place-items: center; width: 84px; height: 84px; border: 1px solid rgba(85,214,232,.45); border-radius: 50%; color: var(--text); background: radial-gradient(circle, rgba(232,255,255,.95) 0 7%, rgba(85,214,232,.42) 8%, rgba(10,42,51,.93) 33%, rgba(4,11,16,.94) 70%); box-shadow: 0 0 25px rgba(85,214,232,.25), inset 0 0 28px rgba(85,214,232,.25); pointer-events: none; }
.gip-assistant-orb__rings, .gip-assistant-orb__rings span, .gip-assistant-orb__rings i { position: absolute; inset: 8px; border: 1px solid rgba(145,238,249,.35); border-radius: 50%; }
.gip-assistant-orb__rings { animation: gip-assistant-spin 12s linear infinite; }
.gip-assistant-orb__rings span:nth-child(1) { inset: 8px 1px; border-inline-color: transparent; }
.gip-assistant-orb__rings span:nth-child(2) { inset: 1px 12px; border-block-color: transparent; transform: rotate(55deg); }
.gip-assistant-orb__rings span:nth-child(3) { inset: 17px 2px; border-color: rgba(255,255,255,.26); }
.gip-assistant-orb__rings i { inset: -2px; border-color: transparent; }
.gip-assistant-orb__rings i::after { position: absolute; top: 0; right: 6px; width: 8px; height: 8px; border: 1px solid #ffd07c; border-radius: 50%; content: ""; background: var(--orange); box-shadow: 0 0 10px var(--orange); }
.gip-assistant-orb b { margin-top: 9px; font-family: "Segoe UI", sans-serif; font-size: 14px; text-shadow: 0 1px 5px #000; }
.gip-assistant-orb small { position: absolute; bottom: 10px; color: #ffd07c; font-size: 8px; font-weight: 900; letter-spacing: .7px; }
@keyframes gip-assistant-spin { to { transform: rotate(360deg); } }

.gip-broadcast-watermark { display: none; }
.gip-broadcast .gip-broadcast-watermark { position: fixed; z-index: 9; right: 118px; bottom: 24px; display: block; color: rgba(229,237,245,.36); font-size: 13px; font-weight: 900; letter-spacing: .4px; pointer-events: none; }
.gip-broadcast .gip-card__header h2 { font-size: 20px; }
.gip-broadcast .gip-section-heading h2 { font-size: 22px; }
.gip-broadcast .gip-eyebrow { font-size: 13px; }
.gip-broadcast .gip-copy, .gip-broadcast .gip-data-line, .gip-broadcast .gip-table__row, .gip-broadcast .gip-card__footer, .gip-broadcast .gip-section-heading p, .gip-broadcast .gip-explainer p { font-size: 16px; }
.gip-broadcast .gip-pill, .gip-broadcast .gip-direction, .gip-broadcast .gip-level-heading, .gip-broadcast .gip-tabs button span { font-size: 14px; }
.gip-broadcast .gip-product-strip > div, .gip-broadcast .gip-product-strip p, .gip-broadcast .gip-tabs button small, .gip-broadcast .gip-price-source, .gip-broadcast .gip-level-row span, .gip-broadcast .gip-confirmation-item small { font-size: 13px; }
.gip-broadcast .gip-level-row strong, .gip-broadcast .gip-level-row b, .gip-broadcast .gip-confirmation-item > span { font-size: 15px; }
.gip-broadcast .gip-level-row { align-items: flex-start; flex-wrap: wrap; }
.gip-broadcast .gip-level-row > div { flex: 1 1 170px; }
.gip-broadcast .gip-level-row strong { overflow: visible; text-overflow: clip; white-space: normal; }
.gip-broadcast .gip-level-row b { margin-left: auto; }

.gip-loading, .gip-empty { display: flex; align-items: center; justify-content: center; min-height: 420px; flex-direction: column; gap: 10px; border: 1px solid var(--line); border-radius: 12px; color: var(--muted); text-align: center; background: rgba(8,13,19,.75); }
.gip-light .gip-loading, .gip-light .gip-empty { background: rgba(249,251,252,.86); }
.gip-loading > span { position: relative; width: 40px; height: 40px; border: 1px solid rgba(113,167,255,.42); border-radius: 50%; animation: gip-orbit 1.5s linear infinite; }
.gip-loading > span::after { position: absolute; top: 2px; left: 50%; width: 7px; height: 7px; border-radius: 50%; content: ""; background: var(--gold); box-shadow: 0 0 12px var(--gold); transform: translateX(-50%); }
@keyframes gip-orbit { to { transform: rotate(360deg); } }
.gip-loading strong, .gip-empty h3 { margin: 0; color: var(--soft); font-size: 10px; }
.gip-loading small, .gip-empty p { max-width: 560px; margin: 0; font-size: 9px; line-height: 1.65; }

.gip-source-panel { position: fixed; z-index: 20; inset: 0; visibility: hidden; pointer-events: none; }
.gip-source-panel.is-open { visibility: visible; pointer-events: auto; }
.gip-source-panel__backdrop { position: absolute; inset: 0; opacity: 0; background: rgba(1,4,7,.66); backdrop-filter: blur(3px); transition: opacity .2s ease; }
.gip-source-panel.is-open .gip-source-panel__backdrop { opacity: 1; }
.gip-source-panel > section { position: absolute; top: 0; right: 0; width: min(470px, 94vw); height: 100%; border-left: 1px solid var(--line-bright); background: var(--panel); box-shadow: -24px 0 60px rgba(0,0,0,.38); transform: translateX(100%); transition: transform .22s ease; }
.gip-source-panel.is-open > section { transform: none; }
.gip-source-panel header { display: flex; align-items: center; justify-content: space-between; padding: 18px; border-bottom: 1px solid var(--line); }
.gip-source-panel h2 { margin: 5px 0 0; font-family: "Segoe UI", sans-serif; font-size: 17px; }
.gip-source-panel header button { display: grid; place-items: center; width: 34px; padding: 0; font-size: 18px; }
.gip-source-panel__body { padding: 14px 18px 30px; overflow-y: auto; max-height: calc(100% - 75px); }
.gip-source-statuses { display: flex; flex-wrap: wrap; gap: 6px; padding: 14px 0; }
.gip-source-rule { margin-top: 8px; padding: 12px; border: 1px solid var(--line); border-radius: 8px; background: var(--panel-2); }
.gip-source-rule strong { color: var(--blue); font-size: 9px; text-transform: uppercase; }
.gip-source-rule p { margin: 6px 0 0; color: var(--soft); font-size: 9px; line-height: 1.65; }

.gip-footer { display: flex; justify-content: space-between; gap: 15px; min-height: 42px; padding: 12px 2px; border-top: 1px solid var(--line); color: var(--muted); font-size: 9px; letter-spacing: .55px; text-transform: uppercase; }
.gip-boot, .gip-noscript { display: flex; align-items: center; justify-content: center; min-height: 100vh; flex-direction: column; padding: 30px; text-align: center; }
.gip-boot p { color: var(--blue); font-size: 8px; font-weight: 900; letter-spacing: 1.3px; }
.gip-boot h1 { margin: 5px 0; font-family: "Segoe UI", sans-serif; font-size: 20px; }
.gip-boot small { color: var(--muted); font-size: 9px; }
.gip-boot__mark { position: relative; width: 50px; height: 50px; margin-bottom: 10px; border: 1px solid var(--line-bright); border-radius: 50%; animation: gip-orbit 2s linear infinite; }
.gip-boot__mark span { position: absolute; top: 3px; left: 50%; width: 7px; height: 7px; border-radius: 50%; background: var(--gold); box-shadow: 0 0 13px var(--gold); }

/* Customer readability floor: preserve the terminal language without requiring zoom. */
.gip-brand p,
.gip-header__actions button,
.gip-source-panel button,
.gip-product-strip > div,
.gip-product-strip p,
.gip-tabs button small,
.gip-card__footer,
.gip-price-source,
.gip-level-heading,
.gip-level-row span,
.gip-inline-missing,
.gip-confirmation-item small,
.gip-pending-lock,
.gip-evidence-chain span,
.gip-alignment-lock span,
.gip-alignment-lock b,
.gip-limitations span,
.gip-limitations ul,
.gip-timeframe > span,
.gip-timeframe small,
.gip-metric-grid span,
.gip-asset__top > div > span,
.gip-asset__meta,
.gip-asset > p,
.gip-asset > footer,
.gip-strength-list b,
.gip-strength-list span,
.gip-table__head,
.gip-health-grid p,
.gip-feature-slots span,
.gip-explainer strong,
.gip-loading small,
.gip-empty p,
.gip-source-rule strong,
.gip-footer,
.gip-boot small { font-size: 10px; }
.gip-header__status span,
.gip-header__status small { font-size: 9.5px; }
.gip-header__status strong,
.gip-tabs button span,
.gip-data-line,
.gip-level-row strong,
.gip-level-row b,
.gip-confirmation-item > span,
.gip-copy,
.gip-section-heading p,
.gip-limitations strong,
.gip-asset__top h3,
.gip-strength-list strong,
.gip-health-grid article > div > span,
.gip-feature-slots b,
.gip-explainer p,
.gip-source-rule p { font-size: 11px; }
.gip-pill,
.gip-direction,
.gip-timeframe .gip-pill,
.gip-timeframe .gip-direction { font-size: 10px; }
.gip-eyebrow,
.gip-table__head { font-size: 9.5px; }
.gip-table__row { font-size: 11px; }
.gip-card__header h2 { font-size: 15px; }
.gip-copy--large { font-size: 12px; }

@media (max-width: 1440px) {
  /* Owner request: the tab row stays ONE line at desktop widths. The owner's
     terminal runs 1440 CSS px at 2x scale, which used to land in this block
     and collapse to two rows of five while also stacking GOLD NOW huge. Tabs
     shrink instead of wrapping; the dashboard keeps three-across with the
     narrow price card. Below 980px the single-column layout still applies. */
  .gip-tabs { grid-template-columns: repeat(10, minmax(0, 1fr)); gap: 4px; }
  .gip-tabs button { min-height: 44px; padding: 6px 6px; }
  .gip-tabs button span { font-size: 9.5px; letter-spacing: .04em; }
  .gip-tabs button small { font-size: 9px; margin-top: 3px; }
  .gip-grid--dashboard-top, .gip-grid--decision-row { grid-template-columns: minmax(0, .58fr) minmax(0, 1.62fr) minmax(0, .8fr); }
  .gip-grid--context { grid-template-columns: 1fr 1fr; }
  .gip-asset-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .gip-health-grid { grid-template-columns: 1fr 1fr; }
}

@media (max-width: 980px) {
  .gip-header { align-items: flex-start; flex-direction: column; }
  .gip-header__actions { width: 100%; flex-wrap: wrap; justify-content: flex-start; }
  .gip-header__status { margin-right: auto; text-align: left; }
  .gip-grid--dashboard-top, .gip-grid--decision-row, .gip-grid--structure-top, .gip-grid--currency-summary, .gip-grid--econ-top, .gip-grid--news-top { grid-template-columns: 1fr; }
  .gip-grid--dashboard-top > :last-child, .gip-grid--decision-row > :last-child { grid-column: auto; }
  .gip-asset-grid { grid-template-columns: 1fr 1fr; }
  .gip-feature-slots { grid-template-columns: 1fr 1fr; }
  .gip-limitations { grid-template-columns: 1fr; }
  .gip-section-heading { align-items: flex-start; flex-direction: column; gap: 6px; }
  .gip-section-heading p { text-align: left; }
}

@media (max-width: 680px) {
  .gip-main, .gip-header, .gip-product-strip, .gip-tabs, .gip-footer { width: min(100% - 18px, 1760px); }
  .gip-header { padding: 14px; }
  .gip-brand { min-width: 0; }
  .gip-brand h1 { font-size: 18px; }
  .gip-header__actions button { flex: 1 1 44%; }
  .gip-header__status { width: 100%; border-right: 0; border-bottom: 1px solid var(--line); padding: 0 0 8px; }
  .gip-product-strip { align-items: flex-start; flex-wrap: wrap; }
  .gip-product-strip p { width: 100%; margin-left: 0; text-align: left; }
  .gip-tabs { grid-template-columns: 1fr 1fr; }
  .gip-grid--dashboard-top, .gip-grid--context, .gip-grid--sources { grid-template-columns: 1fr; }
  .gip-grid--dashboard-top > :last-child { grid-column: auto; }
  .gip-level-columns, .gip-asset-grid, .gip-health-grid, .gip-feature-slots, .gip-confirmation-grid, .gip-access-boundary { grid-template-columns: 1fr; }
  .gip-access-boundary p { grid-column: auto; }
  .gip-limitations ul { grid-template-columns: 1fr; }
  .gip-timeframes { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .gip-page--centered { grid-template-columns: 1fr; }
  .gip-table { overflow-x: auto; }
  .gip-table__head, .gip-table__row { min-width: 780px; }
  .gip-footer { flex-direction: column; }
}

@media (orientation: portrait) and (max-width: 1100px) {
  .gip-main, .gip-header, .gip-product-strip, .gip-tabs, .gip-footer, .gip-simulation-banner { width: calc(100% - 24px); }
  .gip-header { align-items: flex-start; flex-direction: column; }
  .gip-header__actions { width: 100%; flex-wrap: wrap; justify-content: flex-start; }
  .gip-header__status { width: 100%; padding: 0 0 9px; border-right: 0; border-bottom: 1px solid var(--line); text-align: left; }
  .gip-tabs { grid-template-columns: 1fr 1fr; }
  .gip-grid--dashboard-top, .gip-grid--decision-row, .gip-grid--context, .gip-grid--structure-top, .gip-grid--currency-summary, .gip-grid--econ-top, .gip-grid--news-top, .gip-grid--sources, .gip-level-columns, .gip-asset-grid, .gip-health-grid, .gip-feature-slots, .gip-confirmation-grid, .gip-access-boundary { grid-template-columns: 1fr; }
  .gip-grid--dashboard-top > :last-child, .gip-access-boundary p { grid-column: auto; }
  .gip-table { overflow: visible; }
  .gip-table__head { display: none; }
  .gip-table__row { display: grid; grid-template-columns: 1fr; gap: 7px; min-width: 0; margin-top: 10px; padding: 12px; border: 1px solid var(--line); border-radius: 9px; }
  .gip-table__row > [data-label] { display: grid; grid-template-columns: minmax(112px, .7fr) 1.3fr; align-items: start; gap: 8px; overflow: visible; white-space: normal; }
  .gip-table__row > [data-label]::before { color: var(--muted); content: attr(data-label); font-size: 11px; font-weight: 900; text-transform: uppercase; }
  .gip-broadcast .gip-brand h1 { font-size: 28px; }
  .gip-broadcast .gip-tabs button { min-height: 64px; }
  .gip-broadcast .gip-card__header h2 { font-size: 24px; }
  .gip-broadcast .gip-section-heading h2 { font-size: 26px; }
  .gip-broadcast .gip-copy, .gip-broadcast .gip-data-line, .gip-broadcast .gip-table__row, .gip-broadcast .gip-card__footer, .gip-broadcast .gip-section-heading p, .gip-broadcast .gip-explainer p { font-size: 18px; }
  .gip-broadcast .gip-pill, .gip-broadcast .gip-direction, .gip-broadcast .gip-level-heading, .gip-broadcast .gip-tabs button span { font-size: 16px; }
  .gip-broadcast .gip-product-strip > div, .gip-broadcast .gip-product-strip p, .gip-broadcast .gip-tabs button small, .gip-broadcast .gip-price-source, .gip-broadcast .gip-level-row span, .gip-broadcast .gip-confirmation-item small { font-size: 15px; }
  .gip-broadcast .gip-assistant-orb { width: 72px; height: 72px; }
}

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { scroll-behavior: auto !important; animation-duration: .001ms !important; animation-iteration-count: 1 !important; transition-duration: .001ms !important; }
}

/*
 * Customer and broadcast readability tokens.
 * These final selectors intentionally win the older compact terminal floor.
 */
:root {
  --gip-type-meta: 11px;
  --gip-type-body: 13px;
  --gip-type-pill: 11px;
  --gip-type-tab: 12px;
  --gip-type-title: 17px;
  --gip-type-section-title: 18px;
  --gip-type-large: 14px;
  --gip-type-brand: 21px;
  --gip-type-footer: 11px;
}

:root.gip-broadcast {
  --gip-type-meta: 13px;
  --gip-type-body: 16px;
  --gip-type-pill: 14px;
  --gip-type-tab: 14px;
  --gip-type-title: 20px;
  --gip-type-section-title: 22px;
  --gip-type-large: 18px;
  --gip-type-brand: 28px;
  --gip-type-footer: 16px;
}

@media (orientation: portrait) and (max-width: 1100px) {
  :root.gip-broadcast {
    --gip-type-meta: 15px;
    --gip-type-body: 18px;
    --gip-type-pill: 16px;
    --gip-type-tab: 16px;
    --gip-type-title: 24px;
    --gip-type-section-title: 26px;
    --gip-type-large: 20px;
    --gip-type-brand: 28px;
    --gip-type-footer: 18px;
  }
}

:root .gip-brand p,
:root .gip-eyebrow,
:root .gip-header__status span,
:root .gip-header__status small,
:root .gip-product-strip > div,
:root .gip-product-strip p,
:root .gip-tabs button small,
:root .gip-price-source,
:root .gip-level-row span,
:root .gip-inline-missing,
:root .gip-confirmation-item small,
:root .gip-evidence-chain span,
:root .gip-evidence-chain i,
:root .gip-alignment-lock span,
:root .gip-limitations span,
:root .gip-timeframe > span,
:root .gip-timeframe small,
:root .gip-metric-grid span,
:root .gip-asset__top > div > span,
:root .gip-asset__meta,
:root .gip-asset > footer,
:root .gip-strength-list b,
:root .gip-strength-list small,
:root .gip-table__head,
:root .gip-health-grid p,
:root .gip-feature-slots span,
:root .gip-explainer strong,
:root .gip-access-boundary span,
:root .gip-simulation-banner span,
:root .gip-loading small,
:root .gip-empty p,
:root .gip-source-rule strong,
:root .gip-footer,
:root .gip-boot p,
:root .gip-boot small,
:root .gip-table__row > [data-label]::before,
:root .gip-broadcast-watermark { font-size: var(--gip-type-meta); }

:root .gip-header__actions button,
:root .gip-header__status strong,
:root .gip-data-line,
:root .gip-data-line--emphasis strong,
:root .gip-level-row strong,
:root .gip-level-row b,
:root .gip-confirmation-item > span,
:root .gip-copy,
:root .gip-section-heading p,
:root .gip-limitations strong,
:root .gip-limitations ul,
:root .gip-metric-grid b,
:root .gip-asset__top h3,
:root .gip-asset > p,
:root .gip-strength-list strong,
:root .gip-strength-list span,
:root .gip-table__row,
:root .gip-health-grid article > div > span,
:root .gip-health-grid b,
:root .gip-feature-slots b,
:root .gip-feature-slots small,
:root .gip-explainer p,
:root .gip-access-boundary strong,
:root .gip-access-boundary p,
:root .gip-simulation-banner strong,
:root .gip-loading strong,
:root .gip-empty h3,
:root .gip-source-rule p { font-size: var(--gip-type-body); }

:root .gip-pill,
:root .gip-direction,
:root .gip-level-heading,
:root .gip-pending-lock,
:root .gip-timeframe .gip-pill,
:root .gip-timeframe .gip-direction { font-size: var(--gip-type-pill); }

:root .gip-tabs button span { font-size: var(--gip-type-tab); }
:root .gip-card__header h2,
:root .gip-source-panel h2,
:root .gip-boot h1 { font-size: var(--gip-type-title); }
:root .gip-section-heading h2 { font-size: var(--gip-type-section-title); }
:root .gip-copy--large { font-size: var(--gip-type-large); }
:root .gip-brand h1 { font-size: var(--gip-type-brand); }
:root .gip-card__footer { font-size: var(--gip-type-footer); }
:root .gip-source-panel header button { font-size: 18px; }

/* Preserve direction pills; let long Market Bias titles wrap instead. */
.gip-asset__top > div { min-width: 0; flex: 1 1 auto; }
.gip-asset__top > .gip-direction { max-width: none; flex: 0 0 auto; }

/* Equal-height cards only for rows intended to read as one visual group. */
.gip-grid--structure-top,
.gip-grid--currency-summary,
.gip-grid--econ-top,
.gip-grid--news-top { align-items: stretch; }

.gip-grid--structure-top > .gip-card,
.gip-grid--currency-summary > .gip-card,
.gip-grid--econ-top > .gip-card,
.gip-grid--news-top > .gip-card {
  display: grid;
  height: 100%;
  grid-template-rows: auto minmax(0, 1fr) auto;
}

/* Planned visuals stay in document flow and can never cover evidence. */
body { padding-bottom: 16px; }
.gip-assistant-orb {
  position: relative;
  z-index: 1;
  right: auto;
  bottom: auto;
  margin: 12px max(16px, calc((100vw - 1760px) / 2)) 20px auto;
}

.gip-broadcast .gip-broadcast-watermark {
  position: relative;
  z-index: 1;
  right: auto;
  bottom: auto;
  width: min(1760px, calc(100% - 32px));
  margin: 8px auto 0;
  text-align: right;
}

@media (orientation: portrait) and (max-width: 1100px) {
  .gip-assistant-orb { margin-right: 12px; }
  .gip-broadcast .gip-broadcast-watermark { width: calc(100% - 24px); }
}

/* ===== Round 10: direction glyphs, H4 mini-chart, sound button ===== */
.gip-dir-glyph { margin-right: 4px; font-style: normal; font-size: 9px; }
.gip-direction--up .gip-dir-glyph, .gip-dir-glyph--up { color: var(--green); }
.gip-direction--down .gip-dir-glyph, .gip-dir-glyph--down { color: var(--red); }
.gip-direction--side .gip-dir-glyph { color: var(--gold); }
.gip-evidence-chain .gip-dir-glyph { margin-right: 3px; }

.gip-mini-chart { margin: 12px 0 0; padding: 10px 12px 6px; border: 1px solid rgba(113,167,255,.2); border-radius: 9px; background: rgba(6,13,20,.55); }
.gip-light .gip-mini-chart { background: rgba(240,246,250,.7); }
.gip-mini-chart figcaption { margin-bottom: 6px; color: var(--muted); font-size: 9px; font-weight: 800; letter-spacing: .6px; }
.gip-mini-chart svg { display: block; width: 100%; height: auto; }
/* Round 18 follow-up (owner): the four-hour chart owns a full-width row — both
 * sides of the page are used and the bars render at readable size. */
.gip-section--mini-chart { margin-top: 14px; }
.gip-section--mini-chart .gip-mini-chart { margin: 0; padding: 12px 16px 8px; }
.gip-section--mini-chart .gip-mini-chart figcaption { font-size: 10px; }
.gip-mini-chart--empty { padding: 12px; color: var(--muted); font-size: 9.5px; }

[data-sound][aria-pressed="true"] { border-color: rgba(108,225,164,.6); color: var(--green); }

/* ===== Round 11: smaller raised draggable assistant orb, journey, mini link ===== */
.gip-assistant-orb,
.gip-broadcast .gip-assistant-orb {
  position: fixed;
  z-index: 12;
  right: 14px;
  bottom: 64px;
  width: 56px;
  height: 56px;
  margin: 0;
  opacity: .88;
  pointer-events: auto;
  touch-action: none;
  cursor: grab;
  user-select: none;
  box-shadow: 0 0 10px rgba(85,214,232,.18), inset 0 0 18px rgba(85,214,232,.24);
}
.gip-assistant-orb:hover, .gip-assistant-orb:focus-visible { opacity: 1; }
.gip-assistant-orb:focus-visible { outline: 2px solid var(--blue); outline-offset: 3px; }
.gip-assistant-orb.is-dragging { cursor: grabbing; }
.gip-assistant-orb__rings, .gip-assistant-orb__rings span, .gip-assistant-orb__rings i { inset: 5px; }
.gip-assistant-orb__rings span:nth-child(1) { inset: 5px 1px; }
.gip-assistant-orb__rings span:nth-child(2) { inset: 1px 8px; }
.gip-assistant-orb__rings span:nth-child(3) { inset: 11px 1.5px; }
.gip-assistant-orb b { margin-top: 6px; font-size: 10px; }
.gip-assistant-orb small { bottom: 6px; font-size: 6.5px; }

.gip-mini-chart figcaption { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.gip-mini-chart__link { padding: 4px 8px; border: 1px solid rgba(113,167,255,.45); border-radius: 6px; background: rgba(113,167,255,.08); color: var(--blue); font-size: 9px; font-weight: 900; letter-spacing: .5px; cursor: pointer; }
.gip-mini-chart__link:hover { border-color: var(--blue); background: rgba(113,167,255,.16); }

.gip-journey__plot { display: block; width: 100%; height: auto; margin: 10px 0 4px; }
.gip-journey__baseline { stroke: rgba(138,165,181,.4); stroke-width: 1; stroke-dasharray: 4 4; }
.gip-journey__path { fill: none; stroke: var(--gold); stroke-width: 2; }
.gip-journey__point circle { fill: var(--gold); }
.gip-journey__point--up circle { fill: var(--green); }
.gip-journey__point--down circle { fill: var(--red); }
.gip-journey__point--na circle { fill: rgba(138,165,181,.5); }
.gip-journey__point text { fill: var(--muted); font-size: 11px; font-weight: 800; }
.gip-journey__value { fill: var(--soft); font-size: 10.5px; font-weight: 700; }
.gip-journey-rates { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 6px; margin-top: 8px; }
.gip-journey-rate { display: grid; gap: 3px; padding: 8px 8px; border: 1px solid rgba(44,67,87,.55); border-radius: 7px; background: rgba(3,7,11,.3); }
.gip-light .gip-journey-rate { background: rgba(230,238,244,.5); }
.gip-journey-rate span { color: var(--muted); font-size: 9px; font-weight: 900; letter-spacing: .5px; }
.gip-journey-rate b { color: var(--green); font-size: 15px; }
.gip-journey-rate b.gip-journey-rate__empty { color: var(--gold); font-size: 9.5px; }
.gip-journey-rate small { color: var(--muted); font-size: 9px; line-height: 1.35; }
.gip-journey-rate[data-state="NO_ELIGIBLE_SAMPLE"] { border-color: rgba(241,189,75,.3); }

.gip-verify { display: inline-grid; place-items: center; width: 15px; height: 15px; margin-left: 5px; border: 1px solid rgba(113,167,255,.55); border-radius: 50%; background: rgba(113,167,255,.1); color: var(--blue); font-size: 9.5px; font-weight: 900; font-style: normal; cursor: help; vertical-align: 1px; }
.gip-verify:hover { background: rgba(113,167,255,.2); }
.gip-verify-note { color: var(--muted); font-size: 9.5px; }
.gip-table--cot { margin-top: 10px; }

.gip-impact-row { display: grid; gap: 6px; margin-top: 9px; padding-top: 8px; border-top: 1px solid rgba(44,67,87,.5); }
.gip-impact-engine { color: var(--muted); font-size: 9px; font-weight: 900; letter-spacing: .5px; }
.gip-impact-row > div { display: flex; flex-wrap: wrap; gap: 5px; }
.gip-impact-chip { display: inline-flex; align-items: center; gap: 4px; color: var(--soft); font-size: 9.5px; }
.gip-score-tiles { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; margin-top: 10px; }
.gip-score-tile { display: grid; gap: 2px; padding: 8px 10px; border: 1px solid rgba(113,167,255,.3); border-radius: 8px; background: rgba(113,167,255,.06); }
.gip-score-tile span { color: var(--muted); font-size: 9px; font-weight: 900; letter-spacing: .5px; }
.gip-score-tile b { color: var(--blue); font-size: 16px; }
.gip-score-tile small { color: var(--muted); font-size: 9px; }

/* ===== Round 13: liveness — breathing text, drifting arrows, update flash =====
 * Round 14: the chart itself is exempt — its lines, zones and tags are static and
 * crisp (owner: the fading lines read as blur, not as professional). The fade floor
 * rose from .35 to .55 so breathing text never looks washed out either. */
@keyframes gip-breathe { 0%, 100% { opacity: .85; } 50% { opacity: .55; } }
@keyframes gip-drift-up { 0% { transform: translateY(2px); opacity: .25; } 40% { opacity: 1; } 100% { transform: translateY(-3px); opacity: .25; } }
@keyframes gip-drift-down { 0% { transform: translateY(-2px); opacity: .25; } 40% { opacity: 1; } 100% { transform: translateY(3px); opacity: .25; } }
@keyframes gip-updated-flash { 0% { box-shadow: inset 0 0 0 2px rgba(241,189,75,.55); } 100% { box-shadow: inset 0 0 0 2px rgba(241,189,75,0); } }
@keyframes gip-dash-flow { to { stroke-dashoffset: -18; } }

.gip-chart-price line { stroke-dasharray: 6 5; animation: gip-dash-flow 1.4s linear infinite; }
.gip-mini-chart .gip-chart-price line { stroke-dasharray: 6 5; animation: gip-dash-flow 1.4s linear infinite; }
.gip-level-row strong, .gip-level-row b { animation: gip-breathe 4.2s ease-in-out infinite; }
.gip-inside-now li b { animation: gip-breathe 4.2s ease-in-out 1.3s infinite; }

.gip-dir-glyph { display: inline-block; }
/* Round 18: UP/DOWN arrows no longer move (owner spec — stationary fill
 * instead); standalone journey glyphs keep the drift; SIDEWAYS unchanged. */
.gip-dir-glyph--up { animation: gip-drift-up 1.5s ease-in-out infinite; }
.gip-dir-glyph--down { animation: gip-drift-down 1.5s ease-in-out infinite; }
.gip-direction--side .gip-dir-glyph { animation: gip-breathe 2s ease-in-out infinite; }

.gip-updated { animation: gip-updated-flash 1.2s ease-out 1; border-radius: 10px; }

/*
 * Round 18 (owner spec): verdict words are STATIONARY — the letters never
 * move. A bright inner layer reveals inside them: green rises for bullish,
 * red falls for bearish, one restrained brightness pulse, then rest.
 * Reveal+pulse ≈ 1.3s of a 5s cycle. HAWKISH/DOVISH and mixed words stay
 * static (owner: separate treatment later).
 */
@keyframes gip-fill-rise {
  0% { clip-path: inset(100% 0 0 0); filter: brightness(1); }
  18% { clip-path: inset(0 0 0 0); filter: brightness(1); }
  22% { clip-path: inset(0 0 0 0); filter: brightness(1.45); }
  27% { clip-path: inset(0 0 0 0); filter: brightness(1); }
  100% { clip-path: inset(0 0 0 0); filter: brightness(1); }
}
@keyframes gip-fill-fall {
  0% { clip-path: inset(0 0 100% 0); filter: brightness(1); }
  18% { clip-path: inset(0 0 0 0); filter: brightness(1); }
  22% { clip-path: inset(0 0 0 0); filter: brightness(1.45); }
  27% { clip-path: inset(0 0 0 0); filter: brightness(1); }
  100% { clip-path: inset(0 0 0 0); filter: brightness(1); }
}
.gip-verdict { position: relative; display: inline-block; font-weight: 900; }
.gip-verdict--bull { color: rgba(108,225,164,.4); }
.gip-verdict--bear { color: rgba(255,120,133,.4); }
.gip-verdict--mixed { color: var(--gold); }
.gip-verdict--static.gip-verdict--bull { color: var(--green); }
.gip-verdict--static.gip-verdict--bear { color: var(--red); }
.gip-verdict__fill { position: absolute; inset: 0; pointer-events: none; }
.gip-verdict--bull .gip-verdict__fill { color: var(--green); animation: gip-fill-rise 5s ease-in-out infinite; }
.gip-verdict--bear .gip-verdict__fill { color: var(--red); animation: gip-fill-fall 5s ease-in-out infinite; }

@media (prefers-reduced-motion: reduce) {
  .gip-chart-price line, .gip-verdict__fill, .gip-direction__fill,
  .gip-dir-glyph, .gip-updated, .gip-level-row strong, .gip-level-row b, .gip-inside-now li b { animation: none !important; }
  /* Reduced motion: states fully visible and static (owner spec). */
  .gip-verdict--bull, .gip-direction--up { color: var(--green) !important; }
  .gip-verdict--bear, .gip-direction--down { color: var(--red) !important; }
}

/* Option B level tags: neutral ice for facts, gold only for the live price.
 * Round 14: one-line tags, solid curved leader, fully opaque text — no fades. */
.gip-chart-tag rect { fill: rgba(14,26,36,.94); stroke: rgba(216,255,250,.3); stroke-width: 1; }
.gip-chart-tag__stub { fill: none; stroke: rgba(216,255,250,.45); stroke-width: 1.2; }
.gip-chart-mark text { opacity: 1; }
.gip-chart-mark--level text { fill: #c6d8e2; }
.gip-chart-mark--level .gip-chart-mark__price { fill: #e5edf5; }
.gip-chart-mark--current rect { fill: rgba(42,34,16,.95); stroke: rgba(241,189,75,.6); }
.gip-chart-mark--current text, .gip-chart-mark--current .gip-chart-mark__price { fill: var(--gold); }
.gip-chart-mark--current .gip-chart-tag__stub { stroke: rgba(241,189,75,.6); }

/* ===== Round 15: customer clock, live mini-chart chip, compact decision row ===== */
.gip-upcoming { margin-top: 10px; padding-top: 8px; border-top: 1px solid rgba(44,67,87,.5); }
.gip-upcoming h4 { margin: 0 0 6px; color: var(--soft); font-size: 10px; letter-spacing: .6px; text-transform: uppercase; }
.gip-upcoming ul { display: grid; gap: 4px; margin: 0; padding: 0; list-style: none; }
.gip-upcoming li { display: flex; align-items: baseline; gap: 8px; min-width: 0; }
.gip-upcoming em { flex: none; color: var(--gold); font-size: 10.5px; font-style: normal; font-weight: 700; font-variant-numeric: tabular-nums; }
.gip-upcoming b { overflow: hidden; min-width: 0; color: var(--text); font-size: 11px; text-overflow: ellipsis; white-space: nowrap; }
.gip-upcoming .gip-countdown { margin-left: auto; color: var(--blue); font-size: 10.5px; font-weight: 800; font-variant-numeric: tabular-nums; }
.gip-journey-rate__today { display: block; margin-top: 4px; color: var(--soft); font-size: 9px; font-weight: 800; }
.gip-journey-rate__today em { color: var(--muted); font-style: italic; font-weight: 600; }
/* Round 18 (owner screenshot): tile text must never escape its box. */
.gip-journey-rate { min-width: 0; overflow: hidden; }
.gip-journey-rate small { display: block; overflow-wrap: break-word; white-space: normal; line-height: 1.35; }

/* Round 18 (owner): market-bias becomes clean horizontal blocks — one card
 * per row, its facts flowing into columns; nothing overflows its card. */
/* Round 21 (owner): the two verdict cards sit side by side as equals. */
[data-page="market-bias"] .gip-grid--decision-row { grid-template-columns: repeat(2, minmax(0, 1fr)); }
[data-page="market-bias"] .gip-grid--decision-row .gip-card__header h2 { font-size: 15px; overflow-wrap: break-word; }
[data-page="market-bias"] .gip-grid--decision-row .gip-data-stack { display: grid; grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); column-gap: 18px; align-items: start; }
[data-page="market-bias"] .gip-data-line strong { overflow-wrap: break-word; }
.gip-mini-live { margin-left: auto; color: var(--muted); font-size: 9px; font-weight: 900; letter-spacing: .5px; }
.gip-mini-live b { color: var(--gold); font-size: 11px; font-variant-numeric: tabular-nums; }
.gip-mini-chart figcaption { display: flex; align-items: center; gap: 10px; }
/* Decision row: cards end where their content ends instead of stretching to the
 * tallest neighbour, and long verdict titles wrap between words, never inside. */
.gip-grid--decision-row { align-items: start; }
.gip-grid--decision-row .gip-card__header h2 { overflow-wrap: normal; word-break: normal; font-size: 17px; line-height: 1.25; }

.gip-request-history { margin-top: 8px; padding: 6px 10px; border: 1px solid rgba(113,167,255,.4); border-radius: 6px; background: rgba(113,167,255,.07); color: var(--blue); font-size: 9.5px; font-weight: 900; letter-spacing: .4px; cursor: pointer; }
.gip-request-history:hover { background: rgba(113,167,255,.14); }
.gip-request-history[data-open="1"] + .gip-request-note { display: block; }
.gip-request-note { display: none; margin-top: 6px; color: var(--muted); font-size: 9.5px; }
/* Round 19: the request carries a bounded size, and the trial terms are stated. */
.gip-request-row { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-top: 8px; }
.gip-request-row .gip-request-history { margin-top: 0; }
.gip-request-range { display: inline-flex; border: 1px solid rgba(113,167,255,.35); border-radius: 6px; overflow: hidden; }
.gip-request-range button { padding: 6px 10px; border: 0; background: transparent; color: var(--muted); font-size: 9px; font-weight: 900; letter-spacing: .4px; cursor: pointer; font-family: inherit; }
.gip-request-range button.is-active { background: rgba(113,167,255,.16); color: var(--blue); }
.gip-trial-note { margin-top: 6px; color: rgba(241,189,75,.8); font-size: 9px; font-weight: 700; }
/* Round 20: bounded requester identity — installed builds fill these from the licence. */
.gip-request-field { min-width: 150px; padding: 6px 8px; border: 1px solid rgba(113,167,255,.3); border-radius: 6px; background: rgba(6,13,20,.6); color: var(--text); font-size: 9px; font-family: inherit; }
.gip-light .gip-request-field { background: rgba(240,246,250,.8); }
.gip-request-field::placeholder { color: var(--muted); }
/* Round 19: granted history — every approved release renders as the same
 * evidence block the live econ card uses, laid out two per row. */
.gip-granted-history { margin-top: 14px; }
.gip-granted-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(420px, 1fr)); gap: 12px; }
.gip-granted-block .gip-journey__plot { max-height: 150px; }
/* Round 19 (owner): journey tiles were clipping their own copy — everything
 * inside a tile may wrap, and the this-release line lays out as a wrapping row. */
.gip-journey-rate span, .gip-journey-rate small { overflow-wrap: anywhere; white-space: normal; }
.gip-journey-rate__today { display: flex; flex-wrap: wrap; align-items: center; gap: 3px; }
.gip-ai-soon { display: inline-flex; align-items: center; gap: 5px; margin-left: 8px; padding: 4px 9px; border: 1px solid rgba(241,189,75,.45); border-radius: 999px; color: var(--gold); font-size: 9px; font-weight: 900; cursor: pointer; }

/* ── Round 29: rich CME tab — public FedWatch probabilities ─────────────── */
.gip-cme-odds { display: flex; gap: 10px; flex-wrap: wrap; margin-bottom: 12px; }
.gip-cme-odd { flex: 1 1 120px; display: grid; gap: 2px; justify-items: center; border: 1px solid rgba(148,170,190,.28); border-radius: 10px; padding: 10px 12px; background: rgba(148,170,190,.06); }
.gip-cme-odd span { font-size: 10px; font-weight: 900; letter-spacing: 1.2px; color: var(--muted); }
.gip-cme-odd b { font-size: 26px; font-weight: 900; font-variant-numeric: tabular-nums; }
.gip-cme-odd--hold b { color: var(--gold); }
.gip-cme-odd--hike b { color: var(--green); }
.gip-cme-odd--cut b { color: var(--red); }
.gip-cme-shift { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; border: 1px solid rgba(148,170,190,.24); border-radius: 10px; padding: 10px 14px; margin: 10px 0; }
.gip-cme-shift div { display: grid; gap: 2px; }
.gip-cme-shift span { font-size: 9px; font-weight: 900; letter-spacing: .8px; color: var(--muted); }
.gip-cme-shift b { font-size: 14px; font-weight: 900; font-variant-numeric: tabular-nums; }
.gip-cme-shift__arrow { font-style: normal; font-size: 18px; color: var(--gold); }
.gip-cme-shift p { flex-basis: 100%; margin: 2px 0 0; font-size: 11px; color: var(--muted); }
.gip-cme-path { margin-top: 14px; }
.gip-cme-path__rows { display: grid; gap: 7px; margin-top: 10px; }
.gip-cme-meeting { display: grid; grid-template-columns: 110px minmax(160px, 1fr) auto; align-items: center; gap: 10px; }
.gip-cme-meeting em { font-style: normal; font-size: 11px; font-weight: 900; color: var(--muted); }
.gip-cme-meeting b { font-size: 11px; font-weight: 900; font-variant-numeric: tabular-nums; white-space: nowrap; }
.gip-cme-meeting__bar { display: flex; height: 16px; border-radius: 5px; overflow: hidden; background: rgba(148,170,190,.12); }
.gip-cme-seg { display: inline-block; height: 100%; }
.gip-cme-seg--cut { background: var(--red); }
.gip-cme-seg--hold { background: var(--gold); }
.gip-cme-seg--hike { background: var(--green); }
.gip-cme-path__legend { display: flex; align-items: center; gap: 7px; font-size: 10px; color: var(--muted); font-weight: 900; }
.gip-cme-path__legend .gip-cme-seg { width: 14px; height: 9px; border-radius: 2px; }

/* ── Round 29: COT balance bars — public CFTC longs vs shorts ───────────── */
.gip-cot-block { border: 1px solid rgba(148,170,190,.24); border-radius: 10px; padding: 12px 14px; margin: 10px 0; }
.gip-cot-block__head { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; margin-bottom: 8px; }
.gip-cot-block__head b { font-size: 13px; font-weight: 900; letter-spacing: .8px; }
.gip-cot-block__head span { font-size: 11px; color: var(--muted); font-weight: 700; }
.gip-cot-block__head em { font-style: normal; margin-left: auto; font-size: 10px; color: var(--muted); }
.gip-cot-bar { display: flex; height: 26px; border-radius: 6px; overflow: hidden; }
.gip-cot-bar__long, .gip-cot-bar__short { display: flex; align-items: center; min-width: 34px; padding: 0 8px; font-style: normal; }
.gip-cot-bar__long { background: color-mix(in srgb, var(--green) 30%, transparent); border-right: 1px solid rgba(0,0,0,.35); }
.gip-cot-bar__short { background: color-mix(in srgb, var(--red) 28%, transparent); justify-content: flex-end; }
.gip-cot-bar__long span, .gip-cot-bar__short span { font-size: 10px; font-weight: 900; letter-spacing: .5px; white-space: nowrap; font-variant-numeric: tabular-nums; }
.gip-cot-bar__long span { color: var(--green); }
.gip-cot-bar__short span { color: var(--red); }
.gip-cot-block__net { display: flex; align-items: center; gap: 8px; margin-top: 8px; flex-wrap: wrap; }
.gip-cot-block__net b { font-size: 12px; font-weight: 900; font-variant-numeric: tabular-nums; }
.gip-cot-block__net span { font-size: 11px; color: var(--muted); }

/* ── Round 29: the USD medallion spins like the assistant orb ───────────── */
.gip-fx-beam__usd { position: relative; }
.gip-fx-beam__ring { position: absolute; inset: -7px; border-radius: 50%; pointer-events: none;
  border: 2px solid transparent; border-top-color: var(--gold); border-right-color: rgba(241,189,75,.35);
  animation: gip-usd-spin 6s linear infinite; }
.gip-fx-beam__ring--counter { inset: -13px; border-top-color: rgba(241,189,75,.5); border-right-color: transparent;
  animation: gip-usd-spin 11s linear infinite reverse; }
.gip-fx-beam__usd[data-usd-state="stronger"] .gip-fx-beam__ring { border-top-color: var(--green); border-right-color: color-mix(in srgb, var(--green) 40%, transparent); }
.gip-fx-beam__usd[data-usd-state="stronger"] .gip-fx-beam__ring--counter { border-top-color: color-mix(in srgb, var(--green) 55%, transparent); border-right-color: transparent; }
.gip-fx-beam__usd[data-usd-state="weaker"] .gip-fx-beam__ring { border-top-color: var(--red); border-right-color: color-mix(in srgb, var(--red) 40%, transparent); }
.gip-fx-beam__usd[data-usd-state="weaker"] .gip-fx-beam__ring--counter { border-top-color: color-mix(in srgb, var(--red) 55%, transparent); border-right-color: transparent; }
.gip-fx-beam__usd[data-usd-state="stronger"] { border-color: color-mix(in srgb, var(--green) 55%, transparent); }
.gip-fx-beam__usd[data-usd-state="weaker"] { border-color: color-mix(in srgb, var(--red) 55%, transparent); }
@keyframes gip-usd-spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: reduce) {
  .gip-fx-beam__ring, .gip-fx-beam__ring--counter { animation: none; }
}

/* ── Round 30: currency-flow visual language on CME and COT ─────────────── */
.gip-grid--halves { grid-template-columns: repeat(2, minmax(0, 1fr)); }
@media (max-width: 760px) { .gip-grid--halves { grid-template-columns: 1fr; } }
/* Generic ring colour states so any medallion (FED, GOLD, USD net) can reuse
 * the spinning rings without borrowing the USD stronger/weaker wording. */
.gip-fx-beam__usd[data-ring="green"] .gip-fx-beam__ring { border-top-color: var(--green); border-right-color: color-mix(in srgb, var(--green) 40%, transparent); }
.gip-fx-beam__usd[data-ring="green"] .gip-fx-beam__ring--counter { border-top-color: color-mix(in srgb, var(--green) 55%, transparent); border-right-color: transparent; }
.gip-fx-beam__usd[data-ring="red"] .gip-fx-beam__ring { border-top-color: var(--red); border-right-color: color-mix(in srgb, var(--red) 40%, transparent); }
.gip-fx-beam__usd[data-ring="red"] .gip-fx-beam__ring--counter { border-top-color: color-mix(in srgb, var(--red) 55%, transparent); border-right-color: transparent; }
.gip-fx-beam__usd[data-ring="green"] { border-color: color-mix(in srgb, var(--green) 55%, transparent); }
.gip-fx-beam__usd[data-ring="red"] { border-color: color-mix(in srgb, var(--red) 55%, transparent); }
.gip-fx-beam--cme, .gip-fx-beam--cot { margin-bottom: 10px; }
.gip-fx-beam--cot + .gip-fx-flat { margin-top: -4px; }
.gip-fx-chip--long { border-color: color-mix(in srgb, var(--green) 55%, transparent); color: var(--green); font-variant-numeric: tabular-nums; }
.gip-fx-chip--short { border-color: color-mix(in srgb, var(--red) 55%, transparent); color: var(--red); font-variant-numeric: tabular-nums; }

/* ── Round 30: per-currency read tiles (alphabetical, never ranked) ─────── */
.gip-ccy-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(108px, 1fr)); gap: 8px; margin-top: 10px; }
.gip-ccy-tile { display: grid; gap: 2px; justify-items: center; border: 1px solid rgba(148,170,190,.28); border-radius: 10px; padding: 9px 10px; background: rgba(148,170,190,.05); cursor: help; }
.gip-ccy-tile span { font-size: 12px; font-weight: 900; letter-spacing: .8px; color: var(--text); }
.gip-ccy-tile b { font-size: 14px; font-weight: 900; }
.gip-ccy-tile small { font-size: 9px; color: var(--muted); font-variant-numeric: tabular-nums; }
.gip-ccy-tile--up b { color: var(--green); }
.gip-ccy-tile--down b { color: var(--red); }
.gip-ccy-tile--side b { color: var(--gold); }

/* ── Round 31: COT beams share one row ──────────────────────────────────── */
.gip-cot-pair { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; margin-bottom: 10px; }
@media (max-width: 900px) { .gip-cot-pair { grid-template-columns: 1fr; } }
.gip-cot-cell .gip-fx-beam--cot { grid-template-columns: auto auto auto; justify-content: center; }

/* ── Round 31: news lanes (rule-based, no AI) ───────────────────────────── */
.gip-news-lanes { display: flex; gap: 8px; flex-wrap: wrap; margin: 12px 0 4px; }
.gip-news-lane { border: 1px solid rgba(148,170,190,.35); border-radius: 999px; background: rgba(148,170,190,.06); color: var(--muted); font-size: 11px; font-weight: 900; letter-spacing: .6px; padding: 7px 13px; cursor: pointer; font-family: inherit; }
.gip-news-lane b { color: var(--text); font-variant-numeric: tabular-nums; }
.gip-news-lane.is-active { border-color: var(--gold); color: var(--gold); background: color-mix(in srgb, var(--gold) 12%, transparent); }
.gip-news-lane.is-active b { color: var(--gold); }
.gip-news-lane:hover { border-color: rgba(148,170,190,.6); }

/* ── Round 31: CONTACT US card ──────────────────────────────────────────── */
.gip-contact { margin: 16px 0 6px; border: 1px solid rgba(148,170,190,.28); border-radius: 12px; padding: 14px 16px; background: rgba(148,170,190,.04); }
.gip-contact__head { display: flex; align-items: baseline; gap: 12px; flex-wrap: wrap; margin-bottom: 10px; }
.gip-contact__head b { font-size: 13px; font-weight: 900; letter-spacing: 1.2px; color: var(--text); }
.gip-contact__head span { font-size: 11px; color: var(--muted); }
.gip-contact__fields { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; margin-bottom: 8px; }
@media (max-width: 700px) { .gip-contact__fields { grid-template-columns: 1fr; } }
.gip-contact__message { width: 100%; resize: vertical; }
.gip-contact__actions { display: flex; align-items: center; gap: 12px; margin-top: 8px; flex-wrap: wrap; }
.gip-contact__status { font-size: 11px; color: var(--muted); }

/* ── Round 31: compact verdict medallion (dashboard / market bias) ──────── */
.gip-verdict-orb { display: grid; place-items: center; width: 74px; height: 74px; border: 2px solid rgba(241,189,75,.55); border-radius: 50%; background: radial-gradient(circle, rgba(241,189,75,.14) 0 40%, transparent 75%); position: relative; flex: 0 0 auto; }
.gip-verdict-orb b { font-size: 11px; font-weight: 900; letter-spacing: .5px; color: var(--text); text-align: center; line-height: 1.2; }
.gip-verdict-orb span { font-size: 9px; font-weight: 900; color: var(--muted); }
.gip-verdict-orb .gip-fx-beam__ring { inset: -6px; }
.gip-verdict-orb .gip-fx-beam__ring--counter { inset: -11px; }
.gip-verdict-orb[data-ring="green"] { border-color: color-mix(in srgb, var(--green) 55%, transparent); }
.gip-verdict-orb[data-ring="red"] { border-color: color-mix(in srgb, var(--red) 55%, transparent); }
.gip-verdict-orb[data-ring="green"] .gip-fx-beam__ring { border-top-color: var(--green); border-right-color: color-mix(in srgb, var(--green) 40%, transparent); }
.gip-verdict-orb[data-ring="green"] .gip-fx-beam__ring--counter { border-top-color: color-mix(in srgb, var(--green) 55%, transparent); border-right-color: transparent; }
.gip-verdict-orb[data-ring="red"] .gip-fx-beam__ring { border-top-color: var(--red); border-right-color: color-mix(in srgb, var(--red) 40%, transparent); }
.gip-verdict-orb[data-ring="red"] .gip-fx-beam__ring--counter { border-top-color: color-mix(in srgb, var(--red) 55%, transparent); border-right-color: transparent; }
.gip-verdict-row { display: flex; align-items: center; gap: 16px; }

/* ── Round 32: NEWS PULSE ticker + fresh-headline dot ───────────────────── */
.gip-news-pulse { display: grid; gap: 3px; min-width: 0; }
.gip-news-pulse b { font-family: "Segoe UI", sans-serif; font-size: 22px; font-weight: 800; letter-spacing: -.2px; color: var(--text); }
.gip-news-ticker { height: 22px; overflow: hidden; max-width: 720px; }
.gip-news-ticker ul { margin: 0; padding: 0; list-style: none; animation: gip-ticker 15s cubic-bezier(.65,0,.35,1) infinite; }
.gip-news-ticker li { height: 22px; line-height: 22px; font-size: 13px; color: var(--soft); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
@keyframes gip-ticker {
  0%, 28% { transform: translateY(0); }
  33%, 61% { transform: translateY(-22px); }
  66%, 94% { transform: translateY(-44px); }
  100% { transform: translateY(-66px); }
}
.gip-news-live-dot { display: inline-block; width: 7px; height: 7px; margin-right: 5px; border-radius: 50%; background: var(--green); animation: gip-news-pulse-dot 1.6s ease-in-out infinite; vertical-align: middle; }
.gip-news-row.is-fresh em { color: var(--green); }
@keyframes gip-news-pulse-dot { 0%, 100% { opacity: 1; transform: scale(1); } 50% { opacity: .35; transform: scale(.72); } }
.gip-news-lane { animation: gip-lane-in .5s ease-out backwards; }
.gip-news-lanes .gip-news-lane:nth-child(2) { animation-delay: .06s; }
.gip-news-lanes .gip-news-lane:nth-child(3) { animation-delay: .12s; }
.gip-news-lanes .gip-news-lane:nth-child(4) { animation-delay: .18s; }
.gip-news-lanes .gip-news-lane:nth-child(5) { animation-delay: .24s; }
.gip-news-lanes .gip-news-lane:nth-child(6) { animation-delay: .3s; }
@keyframes gip-lane-in { from { opacity: 0; transform: translateY(5px); } to { opacity: 1; transform: none; } }

/* ── Round 32: CME probability donuts ───────────────────────────────────── */
.gip-fx-header__stats--donuts { align-items: center; }
.gip-cme-donut { position: relative; width: 86px; height: 86px; border-radius: 50%; display: grid; place-items: center; cursor: help; background: rgba(148,170,190,.16); }
.gip-cme-donut em { position: relative; z-index: 1; display: grid; place-items: center; width: 66px; height: 66px; border-radius: 50%; background: var(--panel); font-style: normal; gap: 1px; }
.gip-cme-donut b { font-size: 17px; font-weight: 900; font-variant-numeric: tabular-nums; color: var(--text); }
.gip-cme-donut span { font-size: 9px; font-weight: 900; letter-spacing: 1px; color: var(--muted); }
.gip-cme-donut .gip-fx-beam__ring { inset: -5px; }
.gip-cme-donut[data-arc-color="green"] .gip-fx-beam__ring { border-top-color: var(--green); border-right-color: color-mix(in srgb, var(--green) 40%, transparent); }
.gip-cme-donut[data-arc-color="red"] .gip-fx-beam__ring { border-top-color: var(--red); border-right-color: color-mix(in srgb, var(--red) 40%, transparent); }
@media (prefers-reduced-motion: reduce) {
  .gip-news-ticker ul, .gip-news-live-dot, .gip-news-lane, .gip-cme-donut .gip-fx-beam__ring { animation: none; }
}

/* ── Round 36: customer trial gate (dormant on the owner surface) ───────── */
.gip-trial-overlay { position: fixed; inset: 0; z-index: 400; display: grid; place-items: center; background: rgba(3, 6, 10, .88); backdrop-filter: blur(6px); }
.gip-trial-card { width: min(440px, calc(100vw - 40px)); border: 1px solid rgba(148,170,190,.35); border-radius: 14px; background: var(--panel); padding: 26px 28px; display: grid; gap: 12px; box-shadow: var(--shadow); }
.gip-trial-card h2 { margin: 0; font-family: "Segoe UI", sans-serif; font-size: 22px; font-weight: 800; color: var(--text); }
.gip-trial-card p { margin: 0; font-size: 12px; line-height: 1.7; color: var(--soft); }
.gip-trial-card b { color: var(--gold); }
.gip-trial-btn { display: block; text-align: center; padding: 11px 14px; border-radius: 8px; border: 1px solid var(--gold); background: color-mix(in srgb, var(--gold) 14%, transparent); color: var(--gold); font-size: 12px; font-weight: 900; letter-spacing: .8px; cursor: pointer; text-decoration: none; font-family: inherit; }
.gip-trial-btn--unlock { border-color: var(--green); background: color-mix(in srgb, var(--green) 12%, transparent); color: var(--green); }
.gip-trial-divider { text-align: center; font-size: 10px; font-weight: 900; letter-spacing: 1px; color: var(--muted); }
.gip-trial-error { min-height: 14px; font-size: 11px; color: var(--red); }

/* ── Round 37: market breadth in the circle language + RISK PULSE ───────── */
.gip-breadth2 { border: 1px solid rgba(148,170,190,.24); border-radius: 12px; padding: 14px 16px; margin-bottom: 12px; }
.gip-breadth2__layout { display: grid; grid-template-columns: auto 1fr; gap: 22px; align-items: center; margin-top: 10px; }
@media (max-width: 980px) { .gip-breadth2__layout { grid-template-columns: 1fr; } }
.gip-breadth2__pulse { display: flex; align-items: center; gap: 14px; max-width: 330px; }
.gip-breadth2__pulse p { margin: 0; font-size: 12px; line-height: 1.6; color: var(--soft); }
.gip-breadth2__pulse small { color: var(--muted); font-size: 10px; }
.gip-breadth2__groups { display: grid; grid-template-columns: repeat(auto-fit, minmax(210px, 1fr)); gap: 14px; }
.gip-breadth2__group h5 { margin: 0 0 8px; font-size: 12px; font-weight: 900; letter-spacing: 1px; color: var(--text); display: flex; align-items: baseline; gap: 8px; }
.gip-breadth2__lean { font-size: 10px; font-weight: 900; letter-spacing: .5px; color: var(--gold); }
.gip-breadth2__lean--up { color: var(--green); }
.gip-breadth2__lean--down { color: var(--red); }
.gip-breadth2__orbs { display: flex; gap: 12px; }
.gip-breadth-orb { cursor: help; }
.gip-breadth-orb__ring { width: 88px; height: 88px; border-radius: 50%; display: grid; place-items: center; background: rgba(148,170,190,.16); }
.gip-breadth-orb__ring em { display: grid; place-items: center; gap: 1px; width: 68px; height: 68px; border-radius: 50%; background: var(--panel); font-style: normal; }
.gip-breadth-orb__ring b { font-size: 13px; font-weight: 900; font-variant-numeric: tabular-nums; color: var(--text); white-space: nowrap; }
.gip-breadth-orb__ring span { font-size: 9px; font-weight: 900; letter-spacing: 1px; color: var(--muted); }

/* ── Round 37: structure evidence counts as circle chips ────────────────── */
.gip-count-orbs { display: flex; gap: 10px; flex-wrap: wrap; margin-top: 10px; }
.gip-count-orb { width: 84px; height: 84px; border-radius: 50%; border: 2px solid color-mix(in srgb, var(--blue) 45%, transparent); background: radial-gradient(circle, color-mix(in srgb, var(--blue) 10%, transparent) 0 40%, transparent 75%); display: grid; place-items: center; align-content: center; gap: 2px; cursor: help; }
.gip-count-orb b { font-size: 18px; font-weight: 900; font-variant-numeric: tabular-nums; color: var(--text); }
.gip-count-orb span { font-size: 8px; font-weight: 900; letter-spacing: .6px; color: var(--muted); text-align: center; max-width: 74px; line-height: 1.25; }
.gip-count-orb.is-zero { border-color: rgba(148,170,190,.25); opacity: .75; }

/* ── Round 41: market-closed banner (owner ask: a closed market must never
   look like a broken product). Amber = calm notice, not an error. ────────── */
.gip-market-schedule { width: min(1760px, calc(100% - 32px)); margin: 8px auto 0; display: flex; flex-wrap: wrap; align-items: baseline; gap: 8px 14px; border: 1px solid color-mix(in srgb, var(--amber, #ffab40) 55%, transparent); background: color-mix(in srgb, var(--amber, #ffab40) 8%, transparent); border-radius: 10px; padding: 8px 14px; }
.gip-market-schedule__state { font-size: 11px; font-weight: 900; letter-spacing: 1px; color: var(--amber, #ffab40); }
.gip-market-schedule__reopens { font-size: 10px; font-weight: 700; color: var(--text); }
.gip-market-schedule__note { flex-basis: 100%; font-size: 8.5px; color: var(--muted); }
