/* 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}

/* ---- 02 PATTERNS AS A BAND (08.09) — the owner's specification for the section: "PATTERNS
   should occupy a substantial horizontal band within REPORT… approximately 3–4 statements across
   the viewport at one time, depending on available width… left aligned, strong editorial
   typography, generous space, thin vertical dividers, span the landscape width and feel like
   headlines in a property / financial report. PATTERNS is one of the three primary REPORT
   sections, not a small widget."

   It was three cards in a 3px-gutter grid, each on its own --rs-grey-2 ground, statements at the
   same 18px as every other line on the page. Cards with gutters read as widgets side by side; one
   surface with hairlines through it reads as a band, which is the difference the brief is naming.

   🔴 THE DIVIDERS ARE THE TERMINAL'S OWN, not a new idea: api/_terminal-views.php:743 says "the .p
   hairlines ARE the vertical dividers", with the same nth-child clearing of the last column in a
   row and the same collapse to horizontal rules on a phone. Two surfaces reading the same findings
   should not invent separate furniture for them.

   🔴 AND DROPPING THE CARD GROUND FIXES THE CONTRAST THIS SECTION COULD NOT OTHERWISE FIX. The
   statements were --rs-silver on --rs-grey-2: 4.21:1, under AA, and unfixable here because that
   pairing is the site's own — rawsenses.world and the questionnaire share it, so forking it in
   one section was the wrong trade. On the page's own --rs-grey ground the same silver measures
   6.13:1 and passes. The band was asked for on its own merits; the contrast comes free with it. */
.rs-tk-grid--band{grid-template-columns:repeat(4,1fr);gap:0;width:100%}
/* height:100% so the rules run the full height of their ROW rather than stopping at whatever
   each statement happens to need — ragged rules read as a broken grid, not as a band */
.rs-tk-grid--band .rs-tk{background:none;height:100%;padding:0 var(--rs-line) var(--rs-line) 0;
  border-right:1px solid var(--rs-grey-2)}
.rs-tk-grid--band .rs-tk:nth-child(4n){border-right:0;padding-right:0}
/* the statement takes the headline size — the reading face, not the mono, at the step between the
   ticker's 18 and the figure's 32; left aligned, and given room to be several lines */
.rs-tk-grid--band .rs-tk-sentence{font-size:26px;line-height:28px;text-align:left}
.rs-tk-grid--band .rs-tk-body{gap:var(--rs-line)}
@container rs-view (max-width:1180px){
  .rs-tk-grid--band{grid-template-columns:repeat(3,1fr)}
  .rs-tk-grid--band .rs-tk:nth-child(4n){border-right:1px solid var(--rs-grey-2);padding-right:var(--rs-line)}
  .rs-tk-grid--band .rs-tk:nth-child(3n){border-right:0;padding-right:0}
  .rs-tk-grid--band .rs-tk-sentence{font-size:24px;line-height:26px}
}
@container rs-view (max-width:860px){
  .rs-tk-grid--band{grid-template-columns:repeat(2,1fr)}
  .rs-tk-grid--band .rs-tk:nth-child(3n),
  .rs-tk-grid--band .rs-tk:nth-child(4n){border-right:1px solid var(--rs-grey-2);padding-right:var(--rs-line)}
  .rs-tk-grid--band .rs-tk:nth-child(2n){border-right:0;padding-right:0}
}
/* on a phone the rules turn: a column of statements separated by horizontal hairlines, which is
   what the terminal does at 560 and for the same reason — a vertical rule beside one column is
   a line to nowhere */
@container rs-view (max-width:560px){
  .rs-tk-grid--band{grid-template-columns:1fr}
  .rs-tk-grid--band .rs-tk{border-right:0;padding:0 0 var(--rs-line);
    border-bottom:1px solid var(--rs-grey-2)}
  .rs-tk-grid--band .rs-tk:last-child{border-bottom:0}
  .rs-tk-grid--band .rs-tk-sentence{font-size:22px;line-height:24px}
}
/* 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}
/* 🔴 THE FADE IS GONE, AND THE HIERARCHY IS SIZE AND FACE INSTEAD. `opacity:.72` blended
   --rs-silver to #ADADAD on the grey ground: 2.99:1, under even the 3:1 that WCAG allows for
   LARGE text — and this is --rs-ui-size, 10px, which is the opposite of large. It was the same
   defect as the picker's Twint line, found the same day and one point worse, on the one block
   whose whole purpose is that a reader can check the arithmetic behind a public claim.
   At full strength it is 4.21:1, which is the site's own --rs-silver on --rs-grey-2 pairing
   everywhere else, and quieter than the statement above it by being 10px mono against 18px
   Arial rather than by being faint. Fading was never carrying the hierarchy; the size was. */
.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);margin:0;max-width:52ch;
  text-transform:none}
/* the record beneath the sentence: the same voice, set apart by the space above it */
.rs-tk-record{display:inline-block;padding-top:4px}
.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}}
