/* Raw Senses — the data ticker (sheet stage 2).
   From the Figma frames 171:4350 (a stack of lines), 171:4387 (a line with an excerpt),
   171:4405 / 171:4422 (a line with the number, two orders), 171:4439 (a card, collapsed),
   171:4456 / 171:4468 (a card with its paragraph; a stack with an inactive card at 50%).
   One grammar: a row on the ticker ground (5c5c5c, 3px padding) holds LEFT — the black TAG
   (cyan text), the NUMBER (a cyan pill and an outlined delta), a SENTENCE (Arial Narrow 18,
   cdcdcd) — and RIGHT, a green + and a red ×, right-aligned in a 198px box as drawn. The +
   opens the card, the × dismisses it. TIME left the rows on 05.09 (owner): live, a per-row
   timestamp reads as repetition — ONE authoritative clock pill stands above the stack. */

.rs-ticker{display:flex;flex-direction:column;gap:var(--rs-gap);width:100%}
.rs-ticker--cards{gap:var(--rs-pad)}                       /* cards sit 3px apart (171:4468) */

.rs-tk{background:var(--rs-grey-2);padding:var(--rs-pad);box-sizing:border-box;width:100%;
  display:flex;flex-direction:column;gap:var(--rs-pad);
  transition:opacity var(--rs-t-slow) var(--rs-ease)}
.rs-tk[hidden]{display:none}
.rs-tk--card{padding-bottom:50px}                          /* the card's breathing room, as drawn */
.rs-tk--inactive{opacity:.5}                               /* the other cards of a stack (171:4468) */

/* the header line: LEFT and RIGHT */
.rs-tk-line{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;width:100%;min-width:0}
.rs-tk-left{display:flex;align-items:center;gap:10px;min-width:0;flex-wrap:wrap}
.rs-tk-group{display:flex;align-items:center;gap:var(--rs-gap)}
.rs-tk-right{display:flex;align-items:center;justify-content:flex-end;gap:var(--rs-gap);flex:0 0 var(--rs-ticker-right);width:var(--rs-ticker-right)}

/* the pills */
.rs-tk-tag,.rs-tk-num,.rs-tk-delta,.rs-tk-btn{
  display:inline-flex;align-items:center;justify-content:center;
  height:var(--rs-line);box-sizing:border-box;padding:0 var(--rs-pad);
  font-family:var(--rs-mono);font-size:var(--rs-ui-size);letter-spacing:var(--rs-ui-track);text-transform:uppercase;
  white-space:nowrap;text-box:trim-both cap alphabetic;
}
.rs-tk-tag{background:var(--rs-ink);color:var(--rs-cyan)}
.rs-tk-num{background:var(--rs-cyan);color:var(--rs-ink)}
.rs-tk-delta{border:1px solid var(--rs-cyan);color:var(--rs-cyan)}
.rs-tk-btn{border:0;cursor:pointer;color:var(--rs-ink);font:inherit;font-family:var(--rs-mono);font-size:var(--rs-ui-size);letter-spacing:var(--rs-ui-track);line-height:1;
  transition:filter var(--rs-t-fast) var(--rs-ease)}
.rs-tk-btn--open{background:var(--rs-green)}
.rs-tk-btn--close{background:var(--rs-red)}
.rs-tk-btn:hover{filter:brightness(1.15)}
.rs-tk-btn:focus-visible{outline:1px solid var(--rs-white);outline-offset:1px}
.rs-tk-btn[aria-expanded="true"]{background:var(--rs-cyan)}   /* the + once the card is open — not drawn; proposal */

/* the words */
.rs-tk-sentence{font-family:var(--rs-sans);font-size:18px;line-height:18px;color:var(--rs-silver);margin:0;text-transform:none;letter-spacing:0}
.rs-tk-sentence--inline{display:flex;align-items:flex-end;gap:var(--rs-pad);flex-wrap:wrap}   /* sentence + number, 171:4478 */
.rs-tk-line .rs-tk-sentence{max-width:228px;line-height:var(--rs-line);height:var(--rs-line);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}  /* the excerpt on a line, as drawn: 228px, clipped; rides the row token (V2: 20px) */
.rs-tk-para{font-family:var(--rs-mono);font-size:11px;line-height:14px;letter-spacing:0;color:var(--rs-silver);margin:0;text-transform:none}
.rs-tk-body{display:flex;flex-direction:column;gap:var(--rs-pad);width:100%}
.rs-tk-body[hidden]{display:none}

/* ---- the FACT card (report-wiring, 06.09) — the REPORT header's hard facts in the card
   grammar: the black TAG up top, the NUMBER as the hero (mono, white, one big size), the
   cyan pill and outlined delta riding beside it where a ratio belongs (CLAIMED 111 m² · 34%),
   a mono note underneath. NO + and NO ×: a fact is not dismissible. Composed in columns by
   .rs-tk-grid — 3px gutters like the image grid, folding 4→2→1 with the room.
   🔶 NOT IN THE FIGMA — my reading of the owner's img1 (the terminal facts row) through
   img2 (the ticker card); for Thomas to redraw or bless. ---- */
.rs-tk-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--rs-pad);width:100%}
.rs-tk-grid--3{grid-template-columns:repeat(3,1fr)}
.rs-tk-grid .rs-tk{height:100%}
.rs-tk--fact{justify-content:flex-start}
/* the figure wears the Figma's EXTRA LARGE TEXT — Arial Narrow, 32/36 (owner, 06.09: not the
   mono; the number is text, and it takes the reading face at the reading style's size) */
.rs-tk-figure{display:flex;align-items:center;gap:var(--rs-gap);flex-wrap:wrap;min-width:0;
  font-family:var(--rs-sans);font-size:var(--rs-xl-size);line-height:var(--rs-xl-line);
  letter-spacing:0;color:var(--rs-white);text-transform:none;padding:4px 0 2px}
.rs-tk-figure .rs-tk-num,.rs-tk-figure .rs-tk-delta{margin-left:var(--rs-pad)}
@container rs-view (max-width:900px){
  .rs-tk-grid,.rs-tk-grid--3{grid-template-columns:repeat(2,1fr)}
}
@container rs-view (max-width:430px){
  .rs-tk-grid,.rs-tk-grid--3{grid-template-columns:1fr}
}

/* ---- the INDICATOR GROUP (report-wiring, 06.09) — the REPORT's questionnaire breakdown
   (OWNERSHIP SENTIMENT / AGENCY / DESIRE / VALUE) in the family's grammar: the black TAG as
   the title, the one-line clarification in the mono note face, then answer rows — label,
   proportional wash, right-aligned % (the terminal's green wash translated to the dark
   ground). The owner picked B, 06.09: the DEFAULT is the 3px bar riding UNDER the row at
   --w, the label clean; the dimmed wash stays available as --wash for the record. The % is
   the MINI PILL (owner, same round) — on the card's grey-2 it takes the page grey so the
   pill still reads as a pill. No axes, no frames, no n — the row IS the chart.
   🔶 Not in the Figma; for Thomas. ---- */
.rs-tk--group{gap:var(--rs-pad)}
.rs-tk--group .rs-tk-says{margin:2px 0 6px}   /* the clarification: the reading face, body size */
.rs-tk-meters{display:flex;flex-direction:column;gap:var(--rs-gap)}
.rs-tk-meter{position:relative;display:flex;align-items:center;justify-content:space-between;
  gap:10px;min-height:var(--rs-line);padding:2px 0 5px}
.rs-tk-meter::before{content:"";position:absolute;inset:auto auto 0 0;height:3px;width:var(--w,0%);
  background:var(--rs-green);pointer-events:none}
.rs-tk-meter-label{position:relative;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  font-family:var(--rs-sans);font-size:18px;line-height:20px;letter-spacing:0;text-transform:none;color:var(--rs-silver)}
.rs-tk-meter-val{position:relative;flex:0 0 auto;height:12px;padding:0 4px;display:inline-flex;align-items:center;
  background:var(--rs-grey);color:var(--rs-silver);
  font-family:var(--rs-mono);font-size:8px;letter-spacing:var(--rs-ui-track);text-transform:uppercase}
.rs-tk-meters--wash .rs-tk-meter::before{inset:0 auto 0 0;height:auto;opacity:.22}

/* ---- the PATTERN card (report-wiring, 06.09) — a supported finding wearing the ticker
   card, OPEN by default (owner: to see how it looks): the statement is the card's sentence,
   READ THE PATTERN's evidence rides as the mono paragraph, the + folds it. No × — a finding
   retires when the data stops supporting it, never by hand. ---- */
.rs-tk--pattern .rs-tk-sentence{max-width:none;white-space:normal;height:auto}
/* READ THE PATTERN → and what it opens (the machinery's §16, 06.09). The statement is the
   card's own voice and stays in the reading face; the evidence under it is the counts behind
   that statement, in plain sentences, set in the mono face one size down so the two never
   compete. It opens by default — the owner asked to see the whole card — and the button folds
   it, which is the same + / − grammar the card already has, said in words because this one
   belongs to the finding rather than to the row. */
/* align-self, because .rs-tk is a flex COLUMN: a stretched button centres its own label,
   which read as a centred link sitting under a left-aligned statement */
.rs-tk-read{display:inline-block;align-self:flex-start;text-align:left;border:0;background:none;padding:0;cursor:pointer;
  font-family:var(--rs-mono);font-size:var(--rs-ui-size);letter-spacing:var(--rs-ui-track);
  text-transform:uppercase;color:var(--rs-cyan);line-height:var(--rs-line)}
.rs-tk-read:hover{color:var(--rs-white)}
.rs-tk-read:focus-visible{outline:1px solid var(--rs-white);outline-offset:1px}
.rs-tk-evidence{font-family:var(--rs-mono);font-size:var(--rs-ui-size);line-height:14px;
  letter-spacing:var(--rs-ui-track);color:var(--rs-silver);opacity:.72;margin:0;max-width:52ch;
  text-transform:none}
.rs-tk-evidence[hidden]{display:none}

/* ---- the REGISTER row (report-wiring, 06.09) — one participant on a ticker line: the NN
   as the black tag, the name in the reading face, the role as a mini pill, the relationship
   (CLAIMED n m² / LIVED WITH “…”) riding the line. The line's 228px sentence clip does not
   apply here — a register never ellipsises a person. ---- */
.rs-tk--reg .rs-tk-line{align-items:center}
.rs-tk--reg .rs-tk-left{flex-wrap:nowrap;align-items:center}
.rs-tk--reg .rs-tk-line .rs-tk-sentence{max-width:none;white-space:normal;
  height:auto;line-height:20px;overflow:visible;text-overflow:clip}
.rs-tk-reg-role{height:12px;padding:0 4px;display:inline-flex;align-items:center;flex:0 0 auto;
  background:var(--rs-grey);color:var(--rs-silver);
  font-family:var(--rs-mono);font-size:8px;letter-spacing:var(--rs-ui-track);text-transform:uppercase}
/* the participant's picture (owner's img2, 06.09): the THUMBNAIL rides the row's right edge
   and IS the affordance — clicking the row folds the full image open below. The machinery
   serves ?thumb=1 derivatives through the same consent gate; here the mock uses site
   imagery until the register feed exists. */
.rs-tk-reg-thumb{height:20px;width:20px;object-fit:cover;display:block;flex:0 0 auto;cursor:pointer}
.rs-tk--reg:has(.rs-tk-reg-thumb){cursor:pointer}
.rs-tk-reg-img{padding:var(--rs-pad) 0 0}
.rs-tk-reg-img img{display:block;max-width:min(420px,100%);height:auto}

/* ---- the terminal MODULE form (V2 frames + owner, 05.09) — one line on its strip: TAG,
   green VALUE, (a wired delta slot), the short INSIGHT riding inline; an insight longer than
   its room ROLLS as a marquee. Promoted from the menu prototype into the family so the sheet
   and the Market page speak it too. ---- */
.tick-row{display:flex;align-items:center;gap:3px;background:rgba(0,0,0,.22)}
.tick-pill{display:inline-flex;align-items:center;height:var(--rs-line);padding:0 var(--rs-pad);
  font-family:var(--rs-mono);font-size:var(--rs-ui-size);letter-spacing:var(--rs-ui-track);text-transform:uppercase;
  text-box:trim-both cap alphabetic;white-space:nowrap}
.tick-tag{background:var(--rs-ink);color:var(--rs-cyan)}
.tick-value{background:var(--rs-ink);color:var(--rs-white)}
.tick-value.tick-value--up{background:var(--rs-green);color:var(--rs-ink)}
.tick-delta{background:transparent;color:var(--rs-cyan);box-shadow:inset 0 0 0 1px var(--rs-cyan)}
.tick-clock{cursor:default}
.tick-ins{flex:1;min-width:0;padding:0 6px;overflow:hidden;color:var(--rs-silver);
  font-family:var(--rs-sans);font-size:18px;line-height:22px;letter-spacing:0;text-transform:none}
  /* 18/22 = the SITE'S BODY SIZE (the Selling Sunset about, the exhibition pages) — the
     insight is body text, not UI (owner, 05.09); one reading size everywhere */
.tick-ins-run{display:inline-block;white-space:nowrap;max-width:100%;overflow:hidden;text-overflow:ellipsis;vertical-align:middle}
.tick-ins.is-rolling .tick-ins-run{display:flex;width:max-content;max-width:none;overflow:visible;
  animation:live-marquee 18s linear infinite}
.tick-ins-copy{display:inline-block;white-space:nowrap}
.tick-ins.is-rolling .tick-ins-copy{padding-right:48px}
@keyframes live-marquee{to{transform:translateX(-50%)}}
@media (prefers-reduced-motion:reduce){.tick-ins.is-rolling .tick-ins-run{animation:none}}

/* ---- the LIVE INFO BAR — the ticker line as an instrument (moved here 05.09: the
   questionnaire wears it too). Visual only: each page positions it itself. ---- */
.live-bar{box-sizing:border-box;background:var(--rs-grey-2);padding:var(--rs-pad);
  display:flex;align-items:center;gap:var(--rs-pad)}
.live-pill{flex:0 0 auto;display:inline-flex;align-items:center;height:var(--rs-line);padding:0 var(--rs-pad);
  background:var(--rs-ink);color:var(--rs-cyan);cursor:default;
  font-family:var(--rs-mono);font-size:var(--rs-ui-size);letter-spacing:var(--rs-ui-track);text-transform:uppercase;
  text-box:trim-both cap alphabetic;
  animation:rs-blink 1s steps(1,end) infinite}
.live-track{flex:1;min-width:0;height:var(--rs-line);overflow:hidden;display:flex;align-items:center;
  font-family:var(--rs-sans);font-size:16px;letter-spacing:0;text-transform:none;color:var(--rs-silver)}
/* the 36s is now only the FALLBACK duration — RS_TICKER.syncLiveBar() overwrites it with the
   copy's own width at ~45 px/s, so the bar reads at one speed whatever the sentence says
   (owner, 06.09; the same fix .tick-ins got on 05.09) */
.live-run{display:flex;align-items:center;width:max-content;will-change:transform;
  animation:live-marquee 36s linear infinite}
.live-track:hover .live-run{animation-play-state:paused}
.live-copy{display:inline-block;white-space:nowrap;padding-right:72px}
.live-run .chip{display:inline-block;padding:3px var(--rs-pad);margin:0 3px;line-height:1;vertical-align:1px;
  background:var(--rs-cyan);color:var(--rs-ink);
  font-family:var(--rs-mono);font-size:var(--rs-ui-size);letter-spacing:var(--rs-ui-track);text-transform:uppercase}
.live-report{flex:0 0 auto;display:inline-flex;align-items:center;height:var(--rs-line);padding:0 var(--rs-pad);
  background:var(--rs-ink);color:var(--rs-cyan);text-decoration:none;
  font-family:var(--rs-mono);font-size:var(--rs-ui-size);letter-spacing:var(--rs-ui-track);text-transform:uppercase;
  text-box:trim-both cap alphabetic}
.live-report:hover{background:var(--rs-cyan);color:var(--rs-ink)}
/* 🔴 [hidden] LOSES TO A CLASS THAT SETS display. The office switch does `el.hidden = true`, and
   the browser default `[hidden]{display:none}` is a UA rule any author rule outranks — so the
   line above kept the door on screen with the attribute set, and the door "hid" without hiding.
   Found on a test page pointed at staging, which is the only way it could be seen: the DOM said
   hidden:true and offsetParent said it was still painted. */
.live-report[hidden]{display:none}
@media (prefers-reduced-motion:reduce){.live-run{animation:none}}

/* phones — not drawn; proposal: the right box gives up its fixed width, the excerpt line
   hides. 🔴 NOT on the register (owner, 06.09 late: the inventory vanished on mobile) —
   a register row's sentences ARE the row; the excerpt rule is for index lines only. */
@container rs-view (max-width:760px){
  .rs-tk-right{flex:0 0 auto;width:auto}
  .rs-tk:not(.rs-tk--reg) .rs-tk-line .rs-tk-sentence{display:none}
}
@media (pointer:coarse){
  /* UNIFIED with the main menu (owner, 05.09): every ticker pill keeps the menu's 10px — the
     12px bump made three type sizes share one phone screen. The insight keeps the site's
     18/22 body size on every device (no touch override). */
  .rs-tk-sentence{font-size:18px;line-height:20px}
  .rs-tk-para{font-size:12px;line-height:16px}
}
@media (prefers-reduced-motion:reduce){.rs-tk{transition:none}}
