/* ============================================================
   MERIDIAN — THE SIGNAL
   ------------------------------------------------------------
   Chrome specific to the signal environment. Loaded on top of
   styles.css + inner.css. The Signal Card chassis (.sig-card)
   is the unit that lives on this surface, and is shared with
   the Briefing's signal-of-the-day and the X share-card kit.
   ------------------------------------------------------------
   Loaded by:
     /app/signal/index.html         — horizon-fractionalized index
     /app/signal/{slug}.html        — single signal detail
     /app/signal/live-demo.html     — mocked live updates
   ============================================================ */


/* ----------------------------------------------------------
   Live indicator strip (sits beside the masthead clock).
   Tiny, quiet — green dot + LIVE label.
   ---------------------------------------------------------- */

.live-indicator {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  margin-left: 16px;
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--ink-quiet);
  font-variant-numeric: tabular-nums;
}
.live-indicator__dot {
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: var(--green);
  box-shadow: 0 0 0 3px rgba(58, 124, 86, 0.16);
}
@media (prefers-reduced-motion: no-preference) {
  .live-indicator__dot { animation: livePulse 2s ease-in-out infinite; }
}
@keyframes livePulse {
  0%, 100% { box-shadow: 0 0 0 3px rgba(58, 124, 86, 0.16); }
  50%      { box-shadow: 0 0 0 5px rgba(58, 124, 86, 0.04); }
}
.live-indicator--reconnecting .live-indicator__dot { background: var(--ink-quiet); animation: none; }
.live-indicator--reconnecting { color: var(--oxblood); }

.live-log__item {
  padding: 8px 0;
  border-bottom: 1px solid rgba(122, 116, 104, 0.12);
}
.live-log__time {
  color: var(--ink-quiet);
  margin-right: 14px;
  font-variant-numeric: tabular-nums;
}
.live-log__label { color: var(--ink); }
.live-log__label--green { color: var(--green); }
.live-log__label--red { color: var(--red); }
.live-log__label--oxblood { color: var(--oxblood); }
.live-log__label--quiet { color: var(--ink-quiet); }

/* ----------------------------------------------------------
   Section head — Signal page variant
   ---------------------------------------------------------- */

.section-head__live {
  display: inline-flex;
  align-items: center;
  gap: 8px;
}

/* ----------------------------------------------------------
   Horizon strip — the four bands (Intraday / Swing / Positional / Thematic)
   ---------------------------------------------------------- */

.horizons {
  margin-left: calc(var(--line-x) + 32px - var(--gutter));
  position: relative;
  z-index: 2;
  margin-bottom: 80px;
}
@media (max-width: 920px) { .horizons { margin-left: 0; } }

.horizon {
  border-top: 1px solid var(--ink);
  padding: 32px 0 40px;
}
.horizon:first-child { border-top: 1px solid var(--ink); }
.horizon:last-child { border-bottom: 1px solid var(--rule); padding-bottom: 56px; }

.horizon__head {
  display: grid;
  grid-template-columns: 1fr auto;
  align-items: baseline;
  gap: 24px;
  margin-bottom: 24px;
}
.horizon__nameline {
  display: flex;
  align-items: baseline;
  gap: 18px;
  flex-wrap: wrap;
}
.horizon__name {
  font-family: var(--display);
  font-size: clamp(28px, 3.6vw, 44px);
  font-weight: 400;
  font-variation-settings: "opsz" 144, "SOFT" 30;
  letter-spacing: -0.025em;
  line-height: 1;
  color: var(--ink);
}
.horizon__hold {
  font-family: var(--serif);
  font-style: italic;
  font-size: 16px;
  color: var(--ink-mid);
}
.horizon__count {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--oxblood);
  font-variant-numeric: tabular-nums;
}
.horizon__count--idle { color: var(--ink-quiet); }
.horizon__head-meta {
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.20em;
  text-transform: uppercase;
  color: var(--ink-quiet);
  font-variant-numeric: tabular-nums;
}

.horizon__cards {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(420px, 1fr));
  gap: 24px;
}
@media (max-width: 720px) {
  .horizon__cards { grid-template-columns: 1fr; gap: 18px; }
}

.horizon__empty {
  font-family: var(--serif);
  font-style: italic;
  font-size: 16px;
  color: var(--ink-quiet);
  padding: 18px 0;
  border-top: 1px dashed var(--rule);
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 24px;
}
.horizon__empty-label {
  font-family: var(--mono);
  font-style: normal;
  font-size: 10px;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--oxblood);
}


/* ============================================================
   THE SIGNAL CARD (.sig-card)
   ------------------------------------------------------------
   Single chassis, four horizon-driven proportions. Used on the
   index, on the single-signal page, on the live demo, on the
   Briefing's signal-of-the-day. Deliberately framed so the
   eye reads ticker → levels → conviction every time.
   ============================================================ */

.sig-card {
  position: relative;
  background: var(--paper);
  border: 1px solid var(--ink);
  padding: 28px 28px 24px;
  display: grid;
  grid-template-rows: auto auto auto auto auto;
  gap: 18px;
  min-width: 0;
  overflow: hidden;
}
@media (max-width: 540px) {
  .sig-card { padding: 22px 20px; gap: 14px; }
}
.sig-card::before {
  content: '';
  position: absolute;
  top: 0; left: 0; right: 0;
  height: 3px;
  background: var(--oxblood);
}
.sig-card--receipt::before { background: var(--green); }
.sig-card--stopped::before { background: var(--red); }

/* Tag row: live pulse + horizon + ticker + dateline */
.sig-card__tag {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 10px;
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.20em;
  text-transform: uppercase;
  color: var(--ink-quiet);
  font-variant-numeric: tabular-nums;
}
.sig-card__pulse {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--oxblood);
  box-shadow: 0 0 0 4px rgba(107, 28, 46, 0.14);
}
@media (prefers-reduced-motion: no-preference) {
  .sig-card__pulse { animation: signalPulse 2.4s ease-in-out infinite; }
}
.sig-card--receipt .sig-card__pulse {
  background: var(--green);
  box-shadow: 0 0 0 4px rgba(58, 124, 86, 0.14);
  animation: none;
}
.sig-card--stopped .sig-card__pulse {
  background: var(--red);
  box-shadow: 0 0 0 4px rgba(139, 36, 36, 0.12);
  animation: none;
}
.sig-card__tag-horizon {
  color: var(--oxblood);
  border-left: 1px solid var(--rule);
  padding-left: 10px;
  margin-left: 4px;
}
.sig-card__tag-time {
  margin-left: auto;
  color: var(--ink-quiet);
}

/* Headline: ticker (display) + asset descriptor + direction tag */
.sig-card__head {
  display: grid;
  grid-template-columns: 1fr auto;
  align-items: baseline;
  gap: 16px;
}
.sig-card__ticker {
  font-family: var(--display);
  font-size: clamp(36px, 4.6vw, 56px);
  font-weight: 400;
  font-variation-settings: "opsz" 144, "SOFT" 30;
  letter-spacing: -0.035em;
  line-height: 0.95;
  color: var(--ink);
  display: flex;
  align-items: baseline;
  gap: 14px;
}
.sig-card__ticker-name {
  font-family: var(--mono);
  font-size: 13px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--ink-quiet);
  font-weight: 400;
}
.sig-card__direction {
  font-family: var(--mono);
  font-size: 12px;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  background: var(--green);
  color: var(--paper);
  padding: 7px 14px;
  font-weight: 500;
  align-self: start;
}
.sig-card__direction--short { background: var(--red); }
.sig-card__direction--watch { background: var(--ink-quiet); }

/* Conviction row sits under the headline as a thin strip — supporting context */
.sig-card__conviction {
  display: flex;
  align-items: baseline;
  gap: 8px;
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.20em;
  text-transform: uppercase;
  color: var(--ink-quiet);
  padding-bottom: 4px;
  border-bottom: 1px solid var(--rule);
}
.sig-card__conviction-num {
  font-family: var(--display);
  font-style: normal;
  font-size: 28px;
  font-variation-settings: "opsz" 60;
  letter-spacing: -0.02em;
  color: var(--oxblood);
  font-weight: 400;
  margin-right: 4px;
  transition: color 0.4s ease;
}
.sig-card__conviction-num.flash-up { color: var(--green); }
.sig-card__conviction-num.flash-down { color: var(--red); }
.sig-card__conviction-num.flash-tween { transition: color 0.6s ease; }
.sig-card__conviction-of {
  color: var(--ink-faint);
  letter-spacing: 0.10em;
}
.sig-card__conviction-delta {
  margin-left: auto;
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.18em;
  color: var(--green);
  font-weight: 500;
  opacity: 0;
  transition: opacity 0.4s ease;
}
.sig-card__conviction-delta.is-visible { opacity: 1; }
.sig-card__conviction-delta--down { color: var(--red); }

/* Levels — the actionable hero data */
.sig-card__levels {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 0;
}
.sig-card__level {
  display: flex;
  flex-direction: column;
  gap: 4px;
  padding-right: 16px;
  border-right: 1px solid var(--rule);
  min-width: 0;
}
.sig-card__level:last-child { border-right: 0; padding-right: 0; }
.sig-card__level + .sig-card__level { padding-left: 16px; }
@media (max-width: 540px) {
  .sig-card__levels {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    row-gap: 18px;
  }
  .sig-card__level {
    padding: 0;
    border-right: 0;
  }
  .sig-card__level + .sig-card__level { padding-left: 0; }
  .sig-card__level:nth-child(odd) {
    padding-right: 16px;
    border-right: 1px solid var(--rule);
  }
  .sig-card__level:nth-child(even) { padding-left: 16px; }
}
.sig-card__level-label {
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--ink-quiet);
}
.sig-card__level-value {
  font-family: var(--mono);
  font-size: clamp(20px, 1.8vw, 26px);
  letter-spacing: -0.005em;
  color: var(--ink);
  font-variant-numeric: tabular-nums;
  font-weight: 500;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.sig-card__level-value.pos { color: var(--green); }
.sig-card__level-value.neg { color: var(--red); }
.sig-card__level-value.live-zone {
  color: var(--green);
  text-decoration: underline;
  text-decoration-color: var(--green);
  text-decoration-thickness: 2px;
  text-underline-offset: 4px;
}

/* Thesis */
.sig-card__thesis {
  font-family: var(--serif);
  font-size: 16px;
  line-height: 1.55;
  color: var(--ink);
  border-top: 1px solid var(--rule);
  padding-top: 14px;
  max-width: 60ch;
}
.sig-card__thesis em {
  font-style: italic;
  font-variation-settings: "opsz" 60, "SOFT" 100, "WONK" 1;
  color: var(--oxblood);
}

/* Footer: status + record link */
.sig-card__foot {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  padding-top: 12px;
  border-top: 1px solid var(--rule);
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.20em;
  text-transform: uppercase;
  color: var(--ink-quiet);
  font-variant-numeric: tabular-nums;
}
.sig-card__foot a {
  color: var(--oxblood);
  border-bottom: 1px solid var(--oxblood);
  padding-bottom: 1px;
}

/* Receipt (closed) mode chips */
.sig-card__stamp {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 6px 12px;
  border: 1px solid var(--green);
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.20em;
  text-transform: uppercase;
  color: var(--green);
  background: rgba(58, 124, 86, 0.08);
  font-variant-numeric: tabular-nums;
}
.sig-card__stamp strong {
  font-family: var(--display);
  font-style: normal;
  font-weight: 400;
  font-variation-settings: "opsz" 60;
  font-size: 17px;
  letter-spacing: -0.01em;
}
.sig-card__stamp--loss { border-color: var(--red); color: var(--red); background: rgba(139, 36, 36, 0.06); }


/* ----------------------------------------------------------
   Card horizon variants — proportional tweaks per holding period
   ---------------------------------------------------------- */

.sig-card--intraday { border-left: 3px solid var(--oxblood); }
.sig-card--intraday .sig-card__tag-horizon { color: var(--oxblood); font-weight: 500; }

.sig-card--positional .sig-card__thesis { font-size: 17px; line-height: 1.6; }
.sig-card--positional { padding-bottom: 28px; }

.sig-card--thematic { padding: 32px; }
.sig-card--thematic .sig-card__ticker { font-size: clamp(40px, 4.8vw, 60px); }
.sig-card--thematic .sig-card__thesis { font-size: 18px; line-height: 1.65; max-width: 62ch; }
.sig-card--thematic .sig-card__levels {
  border-top: 1px solid var(--rule);
  padding-top: 14px;
}


/* ----------------------------------------------------------
   Conviction breakdown panel — Pro tier only
   ---------------------------------------------------------- */

.sig-breakdown {
  border: 1px solid var(--rule);
  background: var(--paper-deep);
  padding: 28px;
  margin-top: 24px;
}
.sig-breakdown__head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  margin-bottom: 18px;
}
.sig-breakdown__title {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--oxblood);
}
.sig-breakdown__tier {
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--ink-quiet);
  border: 1px solid var(--ink-quiet);
  padding: 4px 10px;
}
.sig-breakdown__list {
  list-style: none;
  display: grid;
  gap: 14px;
}
.sig-breakdown__row {
  display: grid;
  grid-template-columns: 220px 1fr 48px;
  gap: 18px;
  align-items: center;
  font-family: var(--serif);
  font-size: 14px;
  color: var(--ink);
}
.sig-breakdown__bar {
  height: 6px;
  background: rgba(10, 14, 20, 0.06);
  position: relative;
}
.sig-breakdown__bar-fill {
  position: absolute;
  inset: 0 auto 0 0;
  background: var(--oxblood);
  width: var(--score, 0%);
}
.sig-breakdown__bar-fill--96 { width: 96%; }
.sig-breakdown__bar-fill--92 { width: 92%; }
.sig-breakdown__bar-fill--91 { width: 91%; }
.sig-breakdown__bar-fill--90 { width: 90%; }
.sig-breakdown__bar-fill--88 { width: 88%; }
.sig-breakdown__bar-fill--84 { width: 84%; }
.sig-breakdown__num {
  font-family: var(--mono);
  font-size: 14px;
  letter-spacing: -0.005em;
  color: var(--ink);
  font-variant-numeric: tabular-nums;
  text-align: right;
}
@media (max-width: 720px) {
  .sig-breakdown { padding: 22px; }
  .sig-breakdown__row { grid-template-columns: 1fr 32px; gap: 8px; }
  .sig-breakdown__row .sig-breakdown__bar { grid-column: 1 / -1; }
}

/* Locked state shown to non-Pro readers */
.sig-breakdown--locked { position: relative; }
.sig-breakdown--locked .sig-breakdown__list { filter: blur(4px); pointer-events: none; user-select: none; }
.sig-breakdown__lock {
  position: absolute;
  inset: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 12px;
  text-align: center;
  background: linear-gradient(180deg, rgba(244, 239, 229, 0.55) 0%, rgba(244, 239, 229, 0.92) 60%);
  padding: 32px 24px;
}
.sig-breakdown__lock-head {
  font-family: var(--display);
  font-size: 22px;
  font-weight: 400;
  font-variation-settings: "opsz" 60, "SOFT" 30;
  letter-spacing: -0.018em;
  color: var(--ink);
  max-width: 36ch;
}
.sig-breakdown__lock-head em {
  font-style: italic;
  color: var(--oxblood);
}
.sig-breakdown__lock-sub {
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.20em;
  text-transform: uppercase;
  color: var(--ink-quiet);
}


/* ----------------------------------------------------------
   Locked-levels overlay (free-tier readers see the asset
   and direction but the levels are blurred behind a CTA).
   ---------------------------------------------------------- */

.sig-card--locked .sig-card__levels {
  filter: blur(5px);
  pointer-events: none;
  user-select: none;
}
.sig-card--locked {
  position: relative;
  overflow: hidden;
}
.sig-card__lock {
  position: absolute;
  inset: auto 0 0 0;
  padding: 20px 28px 24px;
  background: linear-gradient(180deg, transparent 0%, rgba(244, 239, 229, 0.94) 30%);
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
}
.sig-card__lock a {
  color: var(--oxblood);
  border-bottom: 1px solid var(--oxblood);
  padding-bottom: 1px;
}


/* ----------------------------------------------------------
   Filters bar above the unified stream
   ---------------------------------------------------------- */

.sig-filters {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 16px 24px;
  margin-left: calc(var(--line-x) + 32px - var(--gutter));
  margin-bottom: 32px;
  padding: 18px 0;
  border-top: 1px solid var(--ink);
  border-bottom: 1px solid var(--rule);
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--ink-quiet);
  position: relative;
  z-index: 2;
}
@media (max-width: 920px) { .sig-filters { margin-left: 0; } }
.sig-filters__group {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
}
.sig-filters__label { color: var(--ink-quiet); }
.sig-filters__opt {
  padding: 6px 12px;
  border: 1px solid var(--rule);
  cursor: pointer;
  font-variant-numeric: tabular-nums;
  transition: border-color 0.2s ease, color 0.2s ease, background 0.2s ease;
}
.sig-filters__opt:hover { border-color: var(--ink); color: var(--ink); }
.sig-filters__opt.is-active { background: var(--ink); color: var(--paper); border-color: var(--ink); }


/* ----------------------------------------------------------
   Receipts stream below the strips
   ---------------------------------------------------------- */

.sig-stream {
  margin-left: calc(var(--line-x) + 32px - var(--gutter));
  display: grid;
  gap: 16px;
  position: relative;
  z-index: 2;
  margin-bottom: 80px;
}
@media (max-width: 920px) { .sig-stream { margin-left: 0; } }


/* ----------------------------------------------------------
   Live demo controls — small dev panel at bottom-left
   (only on live-demo.html). Discoverable but quiet.
   ---------------------------------------------------------- */

.live-demo-controls {
  position: fixed;
  bottom: 24px;
  left: 24px;
  background: var(--paper);
  border: 1px solid var(--ink);
  padding: 14px 18px;
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--ink-quiet);
  display: flex;
  align-items: center;
  gap: 12px;
  z-index: 70;
  box-shadow: 0 8px 24px rgba(10, 14, 20, 0.06);
}
.live-demo-controls__label { color: var(--oxblood); }
.live-demo-controls button {
  font: inherit;
  background: transparent;
  border: 1px solid var(--rule);
  padding: 6px 10px;
  color: var(--ink);
  cursor: pointer;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  transition: background 0.2s ease, color 0.2s ease;
}
.live-demo-controls button:hover { background: var(--ink); color: var(--paper); }


/* ============================================================
   DARK-MODE coverage for the new signal chrome
   ============================================================ */

[data-theme="dark"] .horizon { border-top-color: var(--paper); }
[data-theme="dark"] .horizon:last-child { border-bottom-color: var(--rule); }
[data-theme="dark"] .horizon__name { color: var(--paper); }
[data-theme="dark"] .horizon__hold { color: var(--ink-mid); }
[data-theme="dark"] .horizon__count { color: var(--oxblood); }

[data-theme="dark"] .sig-card { background: var(--paper-deep); border-color: var(--paper); }
[data-theme="dark"] .sig-card::before { background: var(--oxblood); }
[data-theme="dark"] .sig-card__ticker { color: var(--paper); }
[data-theme="dark"] .sig-card__direction { color: var(--ink); }
[data-theme="dark"] .sig-card__level-value { color: var(--paper); }
[data-theme="dark"] .sig-card__thesis { color: var(--paper); }

[data-theme="dark"] .sig-card__lock {
  background: linear-gradient(180deg, transparent 0%, rgba(20, 24, 32, 0.94) 30%);
}
[data-theme="dark"] .sig-card__lock a { color: var(--oxblood); border-color: var(--oxblood); }

[data-theme="dark"] .sig-breakdown { background: rgba(244, 239, 229, 0.04); border-color: var(--rule); }
[data-theme="dark"] .sig-breakdown__row { color: var(--paper); }
[data-theme="dark"] .sig-breakdown__num { color: var(--paper); }
[data-theme="dark"] .sig-breakdown__bar { background: rgba(244, 239, 229, 0.10); }

[data-theme="dark"] .sig-breakdown__lock {
  background: linear-gradient(180deg, rgba(20, 24, 32, 0.55) 0%, rgba(20, 24, 32, 0.92) 60%);
}
[data-theme="dark"] .sig-breakdown__lock-head { color: var(--paper); }

[data-theme="dark"] .sig-filters { border-top-color: var(--paper); }
[data-theme="dark"] .sig-filters__opt { border-color: var(--rule); color: var(--ink-quiet); }
[data-theme="dark"] .sig-filters__opt:hover { border-color: var(--paper); color: var(--paper); }
[data-theme="dark"] .sig-filters__opt.is-active { background: var(--paper); color: var(--ink); border-color: var(--paper); }

[data-theme="dark"] .live-demo-controls { background: var(--paper-deep); border-color: var(--paper); color: var(--ink-mid); }
[data-theme="dark"] .live-demo-controls button { color: var(--paper); border-color: var(--rule); }
[data-theme="dark"] .live-demo-controls button:hover { background: var(--paper); color: var(--ink); }

/* ============================================================
   SIGNALS PORTAL (app/signal/portal.html)
   The spec-reconciled surface: the two signal classes, the
   honesty rules, and the three records they land on.
   ============================================================ */

.portal-class {
  margin-left: calc(var(--line-x) + 32px - var(--gutter));
  margin-bottom: 64px;
  position: relative;
  z-index: 2;
}
@media (max-width: 920px) { .portal-class { margin-left: 0; } }
.portal-class__head {
  display: flex;
  align-items: baseline;
  gap: 18px;
  border-top: 1px solid var(--ink);
  padding: 20px 0 24px;
}
.portal-class__name {
  font-family: var(--display);
  font-size: 28px;
  font-weight: 400;
  letter-spacing: -0.02em;
  color: var(--ink);
}
.portal-class__meta {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--ink-quiet);
}
.portal-class__body {
  font-family: var(--serif);
  font-size: 17px;
  line-height: 1.65;
  color: var(--ink-soft);
  max-width: 70ch;
  margin-bottom: 28px;
}
.portal-class__body em { font-style: italic; color: var(--oxblood); }

/* Specimen treatment — anatomy, not a published signal */
.sig-card--specimen { border-style: dashed; }
.sig-card--specimen::before { background: var(--ink-quiet); }
.sig-card--specimen .sig-card__pulse { animation: none; background: var(--ink-quiet); }
.sig-card__specimen-tag {
  color: var(--oxblood);
  font-weight: 500;
}
.sig-card__provenance {
  margin-top: 18px;
  padding-top: 14px;
  border-top: 1px solid var(--rule);
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.06em;
  line-height: 1.9;
  color: var(--ink-mid);
  font-variant-numeric: tabular-nums;
}
.sig-card__provenance strong { font-weight: 500; color: var(--ink); }

/* Honesty rules grid */
.portal-rules {
  margin-left: calc(var(--line-x) + 32px - var(--gutter));
  margin-bottom: 64px;
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 0;
  border-top: 1px solid var(--ink);
  position: relative;
  z-index: 2;
}
@media (max-width: 920px) { .portal-rules { margin-left: 0; grid-template-columns: 1fr; } }
.portal-rule {
  padding: 28px 32px 28px 0;
  border-bottom: 1px solid var(--rule);
}
.portal-rule:nth-child(odd) { border-right: 1px solid var(--rule); }
.portal-rule:nth-child(even) { padding-left: 32px; }
@media (max-width: 920px) {
  .portal-rule:nth-child(odd) { border-right: 0; }
  .portal-rule:nth-child(even) { padding-left: 0; }
}
.portal-rule__head {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--oxblood);
  display: block;
  margin-bottom: 12px;
}
.portal-rule__body {
  font-family: var(--serif);
  font-size: 16px;
  line-height: 1.6;
  color: var(--ink-soft);
}
.portal-rule__body a { border-bottom: 1px solid var(--rule-strong); }
.portal-rule__body a:hover { border-bottom-color: var(--ink); }

/* The three-records strip on the portal */
.portal-records {
  margin-left: calc(var(--line-x) + 32px - var(--gutter));
  margin-bottom: 64px;
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  border-top: 1px solid var(--ink);
  position: relative;
  z-index: 2;
}
@media (max-width: 920px) {
  .portal-records { margin-left: 0; grid-template-columns: 1fr; }
}
.portal-records__card {
  padding: 24px 24px 24px 0;
  border-right: 1px solid var(--rule);
  display: block;
  transition: opacity 0.2s ease;
}
.portal-records__card:last-child { border-right: 0; }
.portal-records__card + .portal-records__card { padding-left: 24px; }
.portal-records__card:hover { opacity: 0.75; }
@media (max-width: 920px) {
  .portal-records__card { border-right: 0; border-bottom: 1px solid var(--rule); padding-left: 0; }
  .portal-records__card + .portal-records__card { padding-left: 0; }
}
.portal-records__label {
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--ink-quiet);
  display: block;
  margin-bottom: 10px;
}
.portal-records__head {
  font-family: var(--display);
  font-size: 22px;
  font-weight: 400;
  letter-spacing: -0.015em;
  color: var(--ink);
  margin-bottom: 8px;
}
.portal-records__sub {
  font-family: var(--serif);
  font-size: 14px;
  line-height: 1.55;
  color: var(--ink-mid);
}

[data-theme="dark"] .portal-class__head { border-top-color: var(--paper); }
[data-theme="dark"] .portal-class__name { color: var(--paper); }
[data-theme="dark"] .portal-rules { border-top-color: var(--paper); }
[data-theme="dark"] .portal-records { border-top-color: var(--paper); }
[data-theme="dark"] .portal-records__head { color: var(--paper); }
[data-theme="dark"] .sig-card--specimen .sig-card__pulse { background: var(--ink-quiet); }
