/* Encore marketing site, R6 (27 Oct 2026): the visuals show the app as it is today, and they scale to the screen.
   Link after kit-app.css: <link rel="stylesheet" href="assets/kit-r6.css">  (+ assets/kit-r6.js after kit-app.js)
   Josh's rulings 15-27 (kit/JOSH-R5-NOTES.md) are the brief; ground truth is r6/truth/ (Encore 4.123.0, 27 Oct).
   Reference: ../NOTES-R6.md.

   1. Fit      [data-fit]: one scale for the whole mock, proportions kept, never cropping its own UI (ruling 15).
   2. .rv      The page people answer, as 4.123.0 draws it: the Moodboard (click, rate, say why), the Comparison
               pair, the welcome, the choice rows (ruling 16).
   3. .dp      The laptop + phone pair: one composition, shared baseline, phone over the laptop's lower right (23).
   4. .jy      The journey: steps of one process, pinned and scrolled, a clickable thread as the progress (17, 19).
   5. Accent   The studio colour recolours everything it drives, exactly as the app does (22). */

/* ============================== 1 · Fit ==============================
   kit-r6.js wraps every [data-fit] mock in .fit > .fit-in, lays it out at a desktop width and scales the whole
   thing to the room it has (width, and a height budget so it is seen whole). .fit-in is the `ka` container, so the
   app's own responsive rules see the width the mock is laid out at, not the scaled one. Without script nothing is
   wrapped and the mock reflows on its own (the R4c behaviour). On phones (under 601px) the mock is not scaled: it
   shows its phone layout at full width, under its text. */
/* A visual that bleeds off the outer edge is cut there, never scrolls the page sideways (clip keeps sticky pins working). */
main { overflow-x: clip; }
.fit { position: relative; display: block; width: 100%; min-width: 0; justify-self: stretch; align-self: start; }
.fit > .fit-in { position: absolute; top: 0; left: 0; transform-origin: 0 0; container: ka / inline-size; will-change: transform; }
.fit.fit--off > .fit-in { position: relative; width: auto !important; transform: none !important; will-change: auto; }
.fit.fit--off { height: auto !important; }
.fit > .fit-in > .ka-win { width: 100%; }
/* A fitted window keeps its real proportions (it is the app on a screen); the floors from KIT2 still apply. */
.fit .ka-win--bleed-r, .fit .ka-win--bleed-l { aspect-ratio: var(--ka-ar, 16 / 10); }
.fit .ka-win--bleed-r > .ka-body, .fit .ka-win--bleed-l > .ka-body { min-height: var(--ka-h); }

/* ============================== 2 · The page people answer (4.123.0) ==============================
   .rv is the respondent page inside a browser (.ka-browser) or a phone (.dp-phone). Sizes are the app's at 1440
   (r6/truth/*-1440-*). --acc is the studio's colour (default plum); --rv-ground the studio's ground (Gradient). */
@property --acc { syntax: "<color>"; inherits: true; initial-value: #3A1E3C; }
.rv {
  --acc: #3A1E3C; --rv-ink: #3A1E3C; --rv-mute: #6E5A70; --rv-hair: rgba(58, 30, 60, .12); --rv-edge: rgba(58, 30, 60, .2);
  --rv-quiet: #F4F3F4;
  position: relative; overflow: clip; background: #FFFFFF; color: var(--rv-ink); font-family: var(--sans); font-size: 15px; line-height: 1.45;
  text-align: left; transition: --acc .6s var(--ease-out);
}
.rv * { box-sizing: border-box; }
.rv img { display: block; width: 100%; height: 100%; object-fit: cover; }
.rv i { font-style: normal; }
/* The ground: the app's Gradient (clientGroundImage). Plum, Encore's own colour, fades from lavender; any other
   colour gets a 9% glow at the top and a 5% tint that reaches white at 340px. One layer per colour, crossfaded. */
.rv-ground { position: absolute; inset: 0 0 auto 0; height: 460px; pointer-events: none; }
.rv-ground > i { position: absolute; inset: 0; opacity: 0; transition: opacity .6s var(--ease-out); background-repeat: no-repeat; }
.rv-ground > i.is-on, .rv-ground > i:only-child { opacity: 1; }
.rv-ground > i[data-acc="#3A1E3C"], .rv-ground > i:not([data-acc]) { background-image: linear-gradient(180deg, #EEEBFB 0px, #F3F1FD 180px, #FFFFFF 380px); }
.rv-ground > i[data-acc="#5B478B"] { background-image: radial-gradient(120% 290px at 50% 0%, color-mix(in oklch, #5B478B 9%, transparent) 0%, transparent 100%), linear-gradient(180deg, color-mix(in oklch, #5B478B 5%, white) 0%, #FFFFFF 340px); }
.rv-ground > i[data-acc="#2E5E4E"] { background-image: radial-gradient(120% 290px at 50% 0%, color-mix(in oklch, #2E5E4E 9%, transparent) 0%, transparent 100%), linear-gradient(180deg, color-mix(in oklch, #2E5E4E 5%, white) 0%, #FFFFFF 340px); }
.rv--white .rv-ground { display: none; }
.rv-prog { position: absolute; left: 0; top: 0; z-index: 4; height: 3px; width: var(--prog, 40%); background: var(--acc); }
.rv-prog::after { content: ""; position: absolute; left: 100%; top: 0; width: 100vw; height: 3px; background: rgba(58, 30, 60, .08); }
.rv-in { position: relative; z-index: 1; }
/* In a window the page takes the screen's height (16:10) and runs on below it, like the page scrolled. */
.ka-win > .rv { flex: 1 1 0; min-height: 0; }
/* The Comparison page is taller than a 16:10 screen: its window shows the whole pair (the page as it scrolls to it). */
.ka-win:has(> .rv-cmp), .ka-win:has(> .rv-welp) { aspect-ratio: auto; }
.ka-win > .rv-cmp, .ka-win > .rv-welp { flex: none; }

/* The top: the studio's name (branding on) left, the step pill in the middle, "Saved to secure session" right. */
.rv-top { position: relative; z-index: 2; display: grid; grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr); align-items: center; gap: 16px; padding: 16px 32px 0; min-height: 76px; }
.rv-studio { display: inline-flex; align-items: center; gap: 12px; font-family: var(--serif); font-size: 22px; letter-spacing: -.01em; white-space: nowrap; }
.rv-studio > i { width: 34px; height: 34px; border-radius: 50%; background: var(--acc); color: #F6F3EE; display: grid; place-items: center; font-size: 18px; }
.rv-pill { justify-self: center; display: inline-flex; align-items: center; gap: 12px; height: 44px; padding: 0 20px; border-radius: 999px; background: #FFFFFF; box-shadow: inset 0 0 0 1px rgba(58, 30, 60, .14); font-size: 15px; white-space: nowrap; }
.rv-pill > i { width: 4px; height: 4px; border-radius: 50%; background: var(--rv-mute); }
.rv-pill small { font-size: 15px; color: var(--rv-mute); }
.rv-saved { justify-self: end; display: inline-flex; align-items: center; gap: 10px; font-size: 14px; color: var(--rv-ink); white-space: nowrap; }
.rv-saved::before { content: ""; width: 7px; height: 7px; border-radius: 50%; background: #2BA89E; }
.rv-rule { display: block; width: 48px; height: 2px; border-radius: 1px; background: var(--acc); }

/* ---------- A Slides question (Form in a Flow) ---------- */
.rv-q { display: flex; flex-direction: column; align-items: center; text-align: center; padding: 40px 48px 32px; }
.rv-kick { font-size: 14px; color: var(--rv-mute); }
.rv-q > .rv-rule { margin: 20px auto 22px; }
.rv-qt { font-family: var(--serif); font-size: 38px; line-height: 1.12; letter-spacing: -.02em; max-width: 760px; text-wrap: balance; }
.rv-q .ka-pair { max-width: 820px; }
/* Choice rows (Pick One / Pick Many / Yes-No), 4.123.0: full-width grey rows, hairlines between, a small number,
   a serif label and a radio at the right that fills when picked (truth/form-slides-1440-q14-pick-one-answered). */
.rv-rows { width: 100%; max-width: 576px; margin-top: 30px; text-align: left; border-top: 1px solid rgba(58, 30, 60, .16); }
.rv-rows > span { display: grid; grid-template-columns: 30px minmax(0, 1fr) 16px; align-items: center; gap: 14px; min-height: 76px; padding: 0 22px 0 24px; background: var(--rv-quiet); border-bottom: 1px solid rgba(58, 30, 60, .16); font-family: var(--serif); font-size: 26px; letter-spacing: -.01em; transition: background-color .35s var(--ease-out); }
.rv-rows > span > small { font-family: var(--sans); font-size: 14px; color: var(--rv-mute); }
.rv-rows > span::after { content: ""; width: 14px; height: 14px; border-radius: 50%; box-shadow: inset 0 0 0 1px rgba(58, 30, 60, .35); background: #FFFFFF; transition: box-shadow .3s var(--ease-out); }
.rv-rows > span.is-on::after { box-shadow: inset 0 0 0 1px rgba(58, 30, 60, .35), inset 0 0 0 4px #FFFFFF, inset 0 0 0 10px var(--acc); }
.rv-rows--many > span::after { border-radius: 4px; }
.rv-rows--sm > span { min-height: 60px; font-size: 22px; }
.rv-foot { width: 100%; max-width: 920px; margin-top: 40px; padding-top: 16px; border-top: 1px solid rgba(58, 30, 60, .12); display: flex; justify-content: space-between; }
.rv-back { height: 46px; padding: 0 20px; border-radius: 999px; box-shadow: inset 0 0 0 1px rgba(58, 30, 60, .14); display: inline-flex; align-items: center; color: var(--rv-mute); }
.rv-cont { height: 46px; padding: 0 24px; border-radius: 999px; background: color-mix(in oklch, var(--acc) 58%, white); color: #FFFFFF; display: inline-flex; align-items: center; font-weight: 500; transition: background-color .35s var(--ease-out); }
.rv-cont.is-on { background: var(--acc); }
.rv-skip { margin-top: 22px; font-size: 14px; color: var(--rv-mute); text-decoration: underline; text-underline-offset: 4px; }
.rv-dots { margin-top: 24px; display: flex; gap: 8px; justify-content: center; }
.rv-dots span { width: 44px; height: 44px; border-radius: 50%; background: #F1EFF2; color: var(--rv-mute); display: grid; place-items: center; font-size: 14px; }
.rv-dots span.is-on { background: #E9E5EC; color: var(--rv-ink); box-shadow: inset 0 0 0 1px var(--rv-edge); }
.rv-dots span.is-done { color: var(--rv-ink); }

/* ---------- The Moodboard, as people answer it ----------
   Click an image: a window opens (the image large on the left, three steps on the right), you rate it 1-10, say
   what draws you in or puts you off, optionally how it feels, and Save. The image then wears a thumbs badge.
   data-st on .rv-mb: board | hover | rate | why | feel | saved (kit-r6.js plays them as a calm loop). */
.rv-mb { min-height: 100%; }
.rv-mb-head { position: relative; z-index: 1; text-align: center; padding: 14px 40px 0; }
.rv-title { font-family: var(--serif); font-size: 56px; line-height: 1.02; letter-spacing: -.025em; }
.rv-sub { margin-top: 16px; font-size: 15px; color: var(--rv-mute); }
.rv-mason { position: relative; z-index: 1; margin: 40px 40px 0; padding-top: 10px; columns: var(--cols, 5); column-gap: 20px; }
.rv-mason figure { position: relative; margin: 0 0 20px; break-inside: avoid; border-radius: 12px; overflow: clip; background: #EEEBF0; transition: transform .45s var(--ease-out), box-shadow .45s var(--ease-out); }
.rv-mason figure img { height: auto; aspect-ratio: var(--ar, 3 / 4); }
/* The badge (app 4.123.4): top-right, 40px, a 2px white edge, so it reads on a dark or a light photo. */
.rv-badge { position: absolute; right: 10px; top: 10px; z-index: 1; box-sizing: border-box; width: 40px; height: 40px; border: 2px solid #FFFFFF; border-radius: 50%; display: grid; place-items: center; box-shadow: 0 2px 8px rgba(0, 0, 0, .22); background-size: 18px !important; transition: opacity .35s var(--ease-out), transform .45s cubic-bezier(.3, 1.5, .5, 1); }
.rv-badge.up { background: var(--mark, var(--acc)) no-repeat center / 15px url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M5.2 7.1 7.6 2.2c.9 0 1.6.7 1.6 1.6v2.3h3.4c.9 0 1.5.8 1.3 1.6l-1 4.6c-.1.6-.7 1.1-1.3 1.1H5.2Z' fill='%23fff'/%3E%3Crect x='1.6' y='7.1' width='2.6' height='6.3' rx='.8' fill='%23fff'/%3E%3C/svg%3E"); }
.rv-badge.down { background: #E5776A no-repeat center / 15px url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cg transform='rotate(180 8 8)'%3E%3Cpath d='M5.2 7.1 7.6 2.2c.9 0 1.6.7 1.6 1.6v2.3h3.4c.9 0 1.5.8 1.3 1.6l-1 4.6c-.1.6-.7 1.1-1.3 1.1H5.2Z' fill='%23fff'/%3E%3Crect x='1.6' y='7.1' width='2.6' height='6.3' rx='.8' fill='%23fff'/%3E%3C/g%3E%3C/svg%3E"); }
/* Hover: the image lifts a little and a round "+" sits in its middle (truth/flow-1440-06-moodboard-hover). */
.rv-plus { position: absolute; left: 50%; top: 50%; z-index: 1; width: 40px; height: 40px; margin: -20px 0 0 -20px; border-radius: 50%; background: rgba(40, 24, 42, .5); opacity: 0; transition: opacity .3s var(--ease-out); }
.rv-plus::before, .rv-plus::after { content: ""; position: absolute; left: 50%; top: 50%; width: 16px; height: 1.6px; margin: -.8px 0 0 -8px; background: #FFFFFF; border-radius: 1px; }
.rv-plus::after { transform: rotate(90deg); }
.rv-plus { box-shadow: inset 0 0 0 1.5px rgba(255, 255, 255, .9); }
figure.is-hover { transform: scale(1.02); box-shadow: 0 14px 30px rgba(30, 20, 40, .18); }
figure.is-hover .rv-plus { opacity: 1; }
.rv-mb .rv-mason figure:not(.is-rated) .rv-badge { opacity: 0; transform: scale(.4); }
/* A liked picture (app 4.123.4): a 3px ring 4px off the photo in the like mark (--mark: the accent, plum when the
   accent is too pale to see on white; kit-r6.js setAccent), lifted 6px. Not for me: the coral badge only. */
.rv-mason figure.is-liked { outline: 3px solid var(--mark, var(--acc)); outline-offset: 4px; transform: translateY(-6px); transition: transform .45s var(--ease-out), outline-color .35s var(--ease-out); }
@media (prefers-reduced-motion: reduce) { .rv-mason figure.is-liked { transform: none; } }
/* The liked tray: a white bar at the foot of the board with the liked pictures, the running count, the hint, and the
   one count of rated and needed (it replaces the dark count pill). */
.rv-tray { position: absolute; z-index: 3; left: 50%; bottom: 24px; translate: -50% 0; box-sizing: border-box; width: min(calc(100% - 48px), 660px); display: flex; align-items: center; gap: 14px; padding: 10px 20px 10px 10px; border-radius: 20px; background: #FFFFFF; box-shadow: 0 0 0 1px rgba(58, 30, 60, .10), 0 10px 30px rgba(0, 0, 0, .12), 0 1px 3px rgba(0, 0, 0, .06); color: var(--rv-ink); }
.rv-tray-th { flex: none; display: flex; gap: 8px; padding: 4px; }
.rv-tray-th img { display: block; width: 40px; height: 40px; border-radius: 9px; object-fit: cover; outline: 2px solid var(--mark, var(--acc)); outline-offset: 2px; }
.rv-tray-th:empty::before { content: ""; width: 40px; height: 40px; box-sizing: border-box; border-radius: 9px; border: 2px dashed color-mix(in oklch, var(--acc) 50%, white); }
.rv-tray-t { display: grid; gap: 2px; min-width: 0; text-align: left; }
.rv-tray-t b { font-weight: 400; font-size: 16px; line-height: 1.3; }
.rv-tray-t small { font-size: 14px; line-height: 1.35; color: var(--rv-mute); }
/* The count and the confirm: dark pills floating at the bottom of the page. */
.rv-float { position: absolute; z-index: 3; bottom: 24px; display: inline-flex; align-items: center; gap: 10px; height: 42px; padding: 0 18px; border-radius: 999px; background: rgba(58, 30, 60, .84); color: #FFFFFF; font-size: 15px; white-space: nowrap; -webkit-backdrop-filter: blur(10px); backdrop-filter: blur(10px); }
.rv-count { right: 24px; }
.rv-count b { font-weight: 400; }
.rv-confirm { left: 50%; translate: -50% 0; }
.rv-confirm::before { content: ""; width: 14px; height: 14px; border-radius: 3px; background: #FFFFFF; }
.rv-confirm.is-on::before { background: #FFFFFF no-repeat center / 11px url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath d='M2.5 6.2 5 8.6l4.5-5' fill='none' stroke='%233A1E3C' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); }
.rv-go { position: absolute; z-index: 3; right: 24px; bottom: 76px; height: 46px; padding: 0 26px; border-radius: 999px; background: var(--acc); color: #FFFFFF; display: inline-flex; align-items: center; font-weight: 500; }
/* The board runs on below the window, as the page scrolls: it fades out at the bottom. */
.rv-mb::after { content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 120px; z-index: 2; pointer-events: none; background: linear-gradient(180deg, rgba(255, 255, 255, 0), #FFFFFF 92%); }
.rv-mb { --ka-fades: 1; }

/* The rating window (V5MoodboardReactionDrawer at 1440: 1024 wide, the image left, the steps right). */
.rv-scrim { position: absolute; inset: 0; z-index: 5; background: rgba(36, 22, 38, .46); opacity: 0; visibility: hidden; transition: opacity .45s var(--ease-out), visibility 0s .45s; }
.rv-rate { position: absolute; z-index: 6; left: 50%; top: 50%; width: 1024px; max-width: calc(100% - 64px); height: 548px; max-height: calc(100% - 56px); translate: -50% -46%; border-radius: 28px; background: #FFFFFF; overflow: clip; display: grid; grid-template-columns: 49% minmax(0, 1fr); opacity: 0; visibility: hidden; transition: opacity .45s var(--ease-out), translate .55s var(--ease-out), visibility 0s .45s; }
.rv-rate-pic { position: relative; background: #111014; min-width: 0; }
.rv-rate-pic img { position: absolute; inset: 0; object-fit: cover; }
.rv-rate-side { position: relative; display: flex; flex-direction: column; min-width: 0; }
.rv-rate-h { flex: none; height: 76px; display: flex; align-items: center; gap: 14px; padding: 0 24px; border-bottom: 1px solid var(--rv-hair); font-size: 15px; color: var(--rv-mute); }
.rv-sdots { display: inline-flex; align-items: center; gap: 6px; }
.rv-sdots i { width: 6px; height: 6px; border-radius: 3px; background: #CFC9D2; transition: width .35s var(--ease-out), background-color .35s var(--ease-out); }
.rv-sdots i.is-on { width: 20px; background: var(--acc); }
.rv-x { margin-left: auto; width: 44px; height: 44px; border-radius: 50%; box-shadow: inset 0 0 0 1px var(--rv-hair); display: grid; place-items: center; color: var(--rv-ink); font-size: 18px; line-height: 1; }
.rv-rate-b { position: relative; flex: 1; min-height: 0; }
.rv-step { position: absolute; inset: 0; display: flex; flex-direction: column; justify-content: center; padding: 0 40px; opacity: 0; visibility: hidden; transition: opacity .4s var(--ease-out), visibility 0s .4s; }
.rv-step.is-on { opacity: 1; visibility: visible; transition: opacity .45s var(--ease-out) .1s, visibility 0s; }
.rv-step > p { font-size: 16px; color: var(--rv-ink); }
.rv-scale { margin-top: 18px; display: flex; gap: 8px; }
.rv-scale span { flex: 1 1 0; max-width: 42px; height: 44px; border-radius: 999px; box-shadow: inset 0 0 0 1px var(--rv-edge); display: grid; place-items: center; font-size: 14px; color: var(--rv-ink); transition: background-color .3s var(--ease-out), color .3s var(--ease-out); }
.rv-scale span.is-on { background: var(--acc); color: #FFFFFF; box-shadow: none; }
.rv-word { margin-top: 14px; height: 20px; font-size: 15px; color: var(--rv-mute); }
.rv-chips { margin-top: 16px; display: flex; flex-wrap: wrap; gap: 8px; }
.rv-chips span { height: 44px; padding: 0 15px; border-radius: 999px; box-shadow: inset 0 0 0 1px var(--rv-edge); display: inline-flex; align-items: center; font-size: 15px; color: var(--rv-mute); white-space: nowrap; transition: background-color .3s var(--ease-out), color .3s var(--ease-out); }
.rv-chips span.is-on { background: var(--acc); color: #FFFFFF; box-shadow: none; }
.rv-note { margin-top: 22px; font-size: 15px; color: var(--rv-ink); }
.rv-note span { display: block; margin-top: 8px; min-height: 84px; padding: 14px 16px; border-radius: 12px; box-shadow: inset 0 0 0 1px rgba(58, 30, 60, .3); font-size: 16px; color: var(--rv-ink); }
.rv-rate-f { flex: none; height: 76px; display: flex; align-items: center; gap: 12px; padding: 0 24px; border-top: 1px solid var(--rv-hair); }
.rv-btn { height: 46px; padding: 0 22px; border-radius: 999px; box-shadow: inset 0 0 0 1px var(--rv-edge); display: inline-flex; align-items: center; justify-content: center; font-size: 15px; color: var(--rv-ink); white-space: nowrap; }
.rv-btn--wide { flex: 1; }
.rv-btn--fill { flex: 1; background: var(--acc); color: #FFFFFF; box-shadow: none; font-weight: 500; }
/* Footer states: step 1 shows Cancel alone; steps 2 and 3 show Back + Next / Save. */
.rv-rate-f [data-f] { display: none; }
.rv-mb[data-st="rate"] .rv-rate-f [data-f="1"], .rv-mb[data-st="why"] .rv-rate-f [data-f="2"], .rv-mb[data-st="feel"] .rv-rate-f [data-f="3"] { display: inline-flex; }
.rv-mb:is([data-st="rate"], [data-st="why"], [data-st="feel"]) .rv-scrim { opacity: 1; visibility: visible; transition: opacity .45s var(--ease-out), visibility 0s; }
.rv-mb:is([data-st="rate"], [data-st="why"], [data-st="feel"]) .rv-rate { opacity: 1; visibility: visible; translate: -50% -50%; transition: opacity .45s var(--ease-out), translate .55s var(--ease-out), visibility 0s; }
.rv-mb:is([data-st="rate"], [data-st="why"], [data-st="feel"]) .rv-float { opacity: .45; }
/* The rating window covers the tray, as the app's window covers its dock. */
.rv-tray { transition: opacity .35s var(--ease-out), visibility 0s; }
.rv-mb:is([data-st="rate"], [data-st="why"], [data-st="feel"]) .rv-tray { opacity: 0; visibility: hidden; transition: opacity .35s var(--ease-out), visibility 0s .35s; }

/* ---------- The Comparison pair, as people answer it (V5ComparisonFlow) ---------- */
.rv-cmp-head { position: relative; z-index: 1; text-align: center; padding: 10px 40px 0; }
.rv-cmp-head .rv-rule { margin: 0 auto 18px; }
.rv-eyebrow { font-size: 15px; color: var(--rv-mute); }
.rv-cmp-head .rv-title { margin-top: 8px; font-size: 56px; }
.rv-cmp-head .rv-sub { margin-top: 14px; font-size: 16px; }
.rv-cmp-body { position: relative; z-index: 1; padding: 26px 56px 30px; }
.rv-meta { display: flex; justify-content: space-between; gap: 16px; font-size: 14px; color: var(--rv-mute); }
.rv-meta b { font-weight: 500; }
.rv-help { margin-top: 12px; font-size: 15px; color: var(--rv-ink); opacity: .85; }
.rv-pair { position: relative; margin-top: 22px; display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 56px; }
.rv-dir { position: relative; height: var(--pair-h, 340px); display: grid; place-items: center; transition: opacity .5s var(--ease-out), transform .5s var(--ease-out); }
.rv-dir figure { position: relative; margin: 0; width: 100%; height: 100%; }
.rv-dir figure img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: contain; filter: drop-shadow(0 24px 40px rgba(20, 40, 60, .18)); }
.rv-dl, .rv-choose { position: absolute; display: inline-flex; align-items: center; min-height: 38px; padding: 0 16px; border-radius: 999px; background: rgba(255, 255, 255, .78); box-shadow: inset 0 0 0 1px rgba(58, 30, 60, .1), 0 10px 24px rgba(20, 40, 60, .08); font-size: 14px; font-weight: 500; color: var(--rv-mute); -webkit-backdrop-filter: blur(8px); backdrop-filter: blur(8px); }
.rv-dl { left: 14px; top: -6px; }
.rv-choose { right: 14px; bottom: -8px; min-height: 40px; font-weight: 400; }
.rv-vs { position: absolute; left: 50%; top: 50%; translate: -50% -50%; z-index: 1; width: 48px; height: 48px; border-radius: 50%; background: rgba(255, 255, 255, .8); box-shadow: inset 0 0 0 1px rgba(58, 30, 60, .1), 0 12px 24px rgba(20, 40, 60, .08); display: grid; place-items: center; font-size: 14px; font-weight: 500; color: var(--rv-mute); }
/* Chosen (truth/cmp-1440-p01-chosen): the other side fades back; the pick holds. */
.rv-pair[data-pick="a"] .rv-dir:nth-of-type(2), .rv-pair[data-pick="b"] .rv-dir:nth-of-type(1) { opacity: .28; }
.rv-pair[data-pick="a"] .rv-dir:nth-of-type(1), .rv-pair[data-pick="b"] .rv-dir:nth-of-type(2) { transform: translateY(-4px); }

/* ---------- The welcome (V5 Flow welcome, truth/flow-1440-01-welcome) ---------- */
.rv-wel-wrap { position: relative; z-index: 1; display: grid; place-items: center; padding: 56px 40px 60px; }
.rv-wel { width: 560px; max-width: 100%; padding: 40px 40px 40px; border-radius: 24px; background: #FFFFFF; box-shadow: inset 0 0 0 1px var(--rv-hair), 0 18px 40px rgba(58, 30, 60, .06); text-align: left; }
.rv-wel .rv-rule { margin: 0 0 30px; width: 52px; }
.rv-wel small { display: block; font-size: 14px; color: var(--rv-mute); }
.rv-wel h4, .rv-wel .rv-wt { margin: 10px 0 0; font-family: var(--serif); font-weight: 400; font-size: 48px; line-height: 1.03; letter-spacing: -.02em; }
.rv-wel .rv-from { margin-top: 10px; font-size: 15px; color: var(--rv-mute); }
.rv-wel p.rv-msg { margin-top: 22px; font-size: 17px; line-height: 1.6; color: var(--rv-ink); }
.rv-wel .rv-do { margin-top: 26px; font-size: 14px; color: var(--rv-mute); }
.rv-wel ul { margin: 12px 0 0; padding: 0; list-style: none; display: grid; gap: 8px; }
.rv-wel li { display: flex; align-items: center; gap: 12px; font-size: 16px; }
.rv-wel li::before { content: ""; width: 6px; height: 6px; border-radius: 50%; background: var(--acc); flex: none; }
.rv-wel .rv-time { margin-top: 24px; font-size: 15px; color: var(--rv-mute); }
.rv-wel .rv-begin { margin-top: 30px; width: 220px; height: 48px; border-radius: 999px; background: var(--acc); color: #FFFFFF; display: grid; place-items: center; font-weight: 500; font-size: 16px; }

/* ---------- Phone and narrow windows: the same pages as the app draws them under 520px ---------- */
@container ka (max-width: 520px) {
  .ka-win:has(> .rv) { aspect-ratio: 9 / 15; }
  .rv-top { grid-template-columns: minmax(0, 1fr); justify-items: center; padding: 14px 16px 0; min-height: 0; }
  .rv-top .rv-studio, .rv-top .rv-saved { display: none; }
  .rv-pill { height: 38px; padding: 0 16px; gap: 10px; }
  .rv-mb-head { padding: 18px 20px 0; }
  .rv-mb-head::before { content: ""; display: block; width: 48px; height: 2px; margin: 0 auto 22px; background: var(--acc); }
  .rv-title { font-size: 36px; }
  .rv-sub { margin-top: 12px; }
  .rv-mason { margin: 26px 14px 0; columns: 1; }
  .rv-mason figure { margin-bottom: 14px; }
  .rv-float { bottom: 16px; height: 38px; font-size: 14px; padding: 0 16px; }
  .rv-count { right: 50%; translate: 50% 0; }
  .rv-tray { bottom: 12px; width: calc(100% - 24px); gap: 10px; padding: 8px 14px 8px 8px; }
  .rv-tray-th { max-width: 100px; overflow: hidden; }
  .rv-tray-sep { display: none; }
  .rv-tray-count { display: block; }
  .rv-confirm { display: none; }
  .rv-go { display: none; }
  /* The rating window becomes a sheet: the image on top, the steps under it. */
  .rv-rate { left: 12px; right: 12px; top: auto; bottom: 12px; width: auto; max-width: none; height: auto; max-height: calc(100% - 64px); translate: 0 24px; grid-template-columns: minmax(0, 1fr); grid-template-rows: 220px auto; border-radius: 24px; }
  .rv-mb:is([data-st="rate"], [data-st="why"], [data-st="feel"]) .rv-rate { translate: 0 0; }
  .rv-rate-b { min-height: 230px; }
  .rv-step { padding: 0 20px; }
  .rv-scale { flex-wrap: wrap; gap: 8px; }
  .rv-scale span { flex: 0 0 calc((100% - 32px) / 5); max-width: none; }
  .rv-rate-h { height: 64px; padding: 0 16px; }
  .rv-rate-f { height: 72px; padding: 0 16px; }
  .rv-chips span { height: 40px; padding: 0 13px; font-size: 14px; }
  .rv-cmp-head { padding: 22px 18px 0; }
  .rv-cmp-head .rv-title { font-size: 34px; }
  .rv-cmp-body { padding: 24px 16px 28px; }
  .rv-meta { flex-direction: column; gap: 10px; }
  .rv-pair { grid-template-columns: minmax(0, 1fr); gap: 34px; }
  .rv-dir { height: var(--pair-h-sm, 240px); }
  .rv-vs { position: relative; left: auto; top: auto; translate: none; justify-self: center; width: 44px; height: 44px; margin: -22px 0; }
  .rv-wel-wrap { padding: 28px 14px 28px; }
  .rv-wel { padding: 30px 24px 30px; }
  .rv-wel h4, .rv-wel .rv-wt { font-size: 36px; }
  .rv-wel .rv-begin { width: 100%; }
  .rv-q { padding: 28px 18px 24px; }
  .rv-qt { font-size: 28px; }
  .rv-rows { margin-top: 22px; }
  .rv-rows > span { min-height: 62px; font-size: 22px; padding: 0 16px; }
  .rv-dots span:nth-child(n+6) { display: none; }
}
@container ka (min-width: 521px) and (max-width: 900px) {
  .rv-mason { --cols: 3; margin: 30px 24px 0; }
  .rv-title { font-size: 44px; }
  .rv-cmp-head .rv-title { font-size: 46px; }
  .rv-cmp-body { padding: 28px 28px 32px; }
  .rv-pair { gap: 32px; }
  .rv-top .rv-saved { display: none; }
}

/* ============================== 3 · The laptop + phone pair (ruling 23) ==============================
   One composition used everywhere: the laptop is a 1024px desktop browser, the phone a 375px phone, both on one
   baseline; the phone overlaps the laptop's lower right by a third of its own width. The pair is fitted as one
   mock ([data-fit="1260"]), so it is centred and fills its card. Each screen holds the real page at its own width:
   the phone's screen is its own `ka` container, so the app's phone rules apply there. */
.dp { position: relative; width: 1260px; height: 760px; }
.dp-laptop { position: absolute; left: 0; bottom: 0; width: 1024px; height: 712px; display: flex; flex-direction: column; border-radius: 18px; background: #FFFFFF; box-shadow: inset 0 0 0 1px rgba(58, 30, 60, .14); overflow: clip; container: ka / inline-size; }
.dp-laptop > .ka-chrome { flex: none; }
.dp-laptop > .rv { flex: 1; min-height: 0; }
.dp-phone { position: absolute; right: 0; bottom: 0; width: 375px; height: 760px; padding: 12px; border-radius: 54px; background: #1E1A24; box-shadow: 0 30px 60px rgba(30, 20, 40, .22); }
.dp-screen { position: relative; width: 351px; height: 100%; border-radius: 42px; overflow: clip; background: #FFFFFF; container: ka / inline-size; display: flex; flex-direction: column; }
.dp-status { flex: none; height: 44px; display: flex; align-items: center; justify-content: space-between; padding: 0 26px 0 30px; font-size: 14px; font-weight: 500; color: #1E1A24; }
.dp-status i { width: 96px; height: 28px; border-radius: 14px; background: #1E1A24; }
.dp-status b { font-weight: 500; letter-spacing: .02em; }
.dp-addr { flex: none; margin: 0 12px; height: 32px; border-radius: 10px; background: #F2F0F3; display: flex; align-items: center; justify-content: center; gap: 6px; font-size: 13.5px; color: #6E5A70; }
.dp-screen > .rv { flex: 1; min-height: 0; }
.dp-screen > .rv::before { content: ""; }
/* Phone pages run on below the screen: the bottom fades like the page scrolls on. */
.dp-screen::after { content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 64px; z-index: 6; pointer-events: none; background: linear-gradient(180deg, rgba(255, 255, 255, 0), #FFFFFF 90%); }
.dp-screen { --ka-fades: 1; }

/* ============================== 4 · The journey (rulings 17 and 19) ==============================
   Steps of one process, in order, on one thread. Markup is the stacked form (each step: label, line, visual), so
   phones and pages without script read it top to bottom. On a desktop tall enough to hold it, kit-r6.js adds
   .jy--pin: the section pins, scrolling moves from step to step, the thread on the left is the progress (click a
   step to go to it), and the visuals move into the stage on the right, each landing whole and holding before the
   next one comes.
   <section class="jy" data-jy aria-label="…">
     <div class="wrap jy-head">h2, body</div>
     <div class="jy-track"><div class="jy-pin"><div class="wrap jy-grid">
       <ol class="jy-steps">
         <li class="jy-step"><button class="jy-lbl" type="button"><span class="jy-n">1</span><span class="jy-t">You ask</span></button>
           <div class="jy-txt"><h3 class="jy-h">…</h3><p class="jy-p">…</p></div>
           <div class="jy-vis">…a [data-fit] mock…</div></li> …
       </ol>
       <div class="jy-stage" aria-hidden="true"></div>
     </div></div></div>
   </section> */
.jy { position: relative; padding-top: var(--sec); }
.jy-head { margin-bottom: max(40px, calc(var(--vw) * 3.6)); }
.jy-head .h2 { max-width: 860px; }
.jy-head .body { margin-top: 18px; max-width: 640px; }
.jy-head.center { text-align: center; }
.jy-head.center .h2, .jy-head.center .body { margin-inline: auto; }
.jy-steps { list-style: none; margin: 0; padding: 0; position: relative; display: grid; gap: 64px; }
/* The thread: one hairline through the step numbers. */
.jy-steps::before { content: ""; position: absolute; left: 16.25px; top: 20px; bottom: 20px; width: 1.5px; background: var(--hair-strong); }
.jy-step { position: relative; min-width: 0; }
.jy-lbl { all: unset; box-sizing: border-box; display: inline-flex; align-items: center; gap: 14px; font: 500 17px/1.3 var(--sans); color: var(--plum); }
.jy-n { position: relative; z-index: 1; flex: none; width: 34px; height: 34px; border-radius: 50%; display: grid; place-items: center; background: var(--plum); color: #FFFFFF; font-size: 15px; transition: background-color .4s var(--ease-out), color .4s var(--ease-out), box-shadow .4s var(--ease-out); }
.jy-txt { padding-left: 48px; }
.jy-h { margin-top: 10px; font-family: var(--serif); font-weight: 400; font-size: max(26px, calc(var(--vw) * 2.25)); line-height: 1.12; letter-spacing: -.015em; color: var(--plum); text-wrap: balance; }
.jy-p { margin-top: 10px; font-size: var(--fs-body); line-height: 1.55; color: var(--mute); text-wrap: pretty; max-width: 480px; }
.jy-txt .qlink { margin-top: 12px; }
.jy-vis { min-width: 0; margin-top: 26px; padding-left: 48px; }
.jy-stage { display: none; }

/* Pinned (desktop). */
.jy--pin .jy-track { position: relative; height: calc(var(--n, 3) * var(--jy-step, 92svh) + 8svh); }
.jy--pin .jy-pin { position: sticky; top: var(--nav-h); height: calc(100svh - var(--nav-h)); }
.jy--pin .jy-grid { height: 100%; display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); gap: max(40px, calc(var(--vw) * 4.5)); }
.jy--pin.jy--flip .jy-grid { grid-template-columns: minmax(0, 7fr) minmax(0, 5fr); }
.jy--pin.jy--flip .jy-steps { order: 2; }
.jy--pin .jy-steps { align-self: center; gap: 0; }
.jy--pin .jy-steps::before { top: 30px; bottom: 30px; }
.jy--pin .jy-steps::after { content: ""; position: absolute; left: 16.25px; top: 30px; width: 1.5px; height: calc(var(--jy-f, 0) * (100% - 60px)); background: var(--plum); }
.jy--pin .jy-step { padding: 13px 0; }
.jy--pin .jy-lbl { cursor: pointer; color: var(--mute); }
.jy--pin .jy-lbl:hover { color: var(--plum); }
.jy--pin .jy-lbl:focus-visible { outline: 2px solid #8F83D6; outline-offset: 6px; border-radius: 6px; }
.jy--pin .jy-n { background: #FFFFFF; color: var(--mute); box-shadow: inset 0 0 0 1.5px var(--hair-strong); }
.jy--pin .jy-step.is-done .jy-n { color: var(--plum); box-shadow: inset 0 0 0 1.5px var(--plum); }
.jy--pin .jy-step.is-on .jy-lbl, .jy--pin .jy-step.is-done .jy-lbl { color: var(--plum); }
.jy--pin .jy-step.is-on .jy-n { background: var(--plum); color: #FFFFFF; box-shadow: none; }
.jy--pin .jy-txt { overflow: clip; max-height: 0; opacity: 0; transition: max-height .55s var(--ease-out), opacity .3s var(--ease-out); }
.jy--pin .jy-step.is-on .jy-txt { max-height: 440px; opacity: 1; transition: max-height .6s var(--ease-out), opacity .5s var(--ease-out) .15s; }
.jy--pin .jy-stage { display: block; position: relative; min-width: 0; margin: max(24px, 4svh) 0; }
.jy--pin.jy--bleed .jy-stage { margin-right: calc((100vw - min(calc(100vw - var(--gut) * 2), var(--col))) / -2); }
.jy--pin.jy--bleed.jy--flip .jy-stage { margin-right: 0; margin-left: calc((100vw - min(calc(100vw - var(--gut) * 2), var(--col))) / -2); }
.jy--pin .jy-stage > .jy-vis { position: absolute; inset: 0; margin: 0; padding: 0; display: flex; align-items: center; opacity: 0; visibility: hidden; transform: translateY(20px); transition: opacity .45s var(--ease-out), transform .6s var(--ease-out), visibility 0s .6s; }
.jy--pin .jy-stage > .jy-vis.is-on { opacity: 1; visibility: visible; transform: none; transition: opacity .55s var(--ease-out) .1s, transform .7s var(--ease-out) .1s, visibility 0s; }
.jy--pin .jy-stage > .jy-vis > * { width: 100%; }
@media (prefers-reduced-motion: reduce) {
  .jy--pin .jy-stage > .jy-vis, .jy--pin .jy-stage > .jy-vis.is-on, .jy--pin .jy-txt, .jy--pin .jy-step.is-on .jy-txt { transition: none; transform: none; }
}
@media (max-width: 600px) {
  .jy-steps { gap: 52px; }
  .jy-txt, .jy-vis { padding-left: 0; }
  .jy-txt { margin-top: 0; }
  .jy-step > .jy-txt { padding-left: 48px; }
  .jy-vis { margin-top: 22px; }
  .jy-steps::before { display: none; }
  .jy-step + .jy-step::before { content: ""; position: absolute; left: 16.25px; top: -52px; height: 52px; width: 1.5px; background: var(--hair-strong); }
}

/* ============================== 5 · Mosaic backdrops that move (ruling 21) ==============================
   page-mosaic.js rebuilds the static brand mosaic (assets/img/kit-mosaic.svg) as rows of tiles and lets the rows
   drift, slowly, in the coming-soon strip's language (MosaicRun). The mock on top never moves. Still under reduced
   motion; paused off screen. */
.mzm { position: absolute; inset: 0; overflow: clip; background: #3A1E3C; display: flex; flex-direction: column; }
.mzm-row { flex: 1 1 0; position: relative; display: flex; will-change: transform; }
.mzm-row > i { flex: none; height: 100%; display: block; }
.mz-side.has-mzm { background-image: none; }
.rv-pairset[hidden] { display: none !important; }

/* ============================== 6 · Studio pieces the R4 kit didn't have (4.123.0) ==============================
   .sd   V5StudioDrawer: the floating panel on the right of a studio (Moodboard settings, Image details).
   .sm   The Send modal ("Send a link", truth/studio-forms-1440-c-send).
   .rd   An opened Results row (V5ResultsRowDetail): Reasons, How it felt, In their words. */
.ka-dim { position: absolute; inset: 0; z-index: 3; background: rgba(58, 30, 60, .2); }
.sd { position: absolute; z-index: 4; top: 14px; right: 14px; bottom: 14px; width: 520px; display: flex; flex-direction: column; border-radius: 18px; background: #FFFFFF; box-shadow: 0 24px 60px rgba(58, 30, 60, .14), inset 0 0 0 1px rgba(58, 30, 60, .08); overflow: clip; text-align: left; }
.sd--wide { width: 820px; }
.sd-scroll { flex: 1; min-height: 0; overflow: clip; display: flex; }
.sd-col { flex: 1; min-width: 0; padding: 30px 30px 0; }
.sd-col--tint { flex: 0 0 360px; padding: 20px 20px 0; background: linear-gradient(180deg, #F3F1FB, #F7F5FC); }
.sd-eyebrow { font-size: 14px; color: var(--ka-mute); }
.sd-title { margin-top: 6px; font-family: var(--serif); font-size: 30px; line-height: 1.08; letter-spacing: -.01em; }
.sd-desc { margin-top: 8px; font-size: 15px; color: var(--ka-mute); }
.sd-x { position: absolute; top: 20px; right: 20px; width: 34px; height: 34px; border-radius: 50%; background: #F2F0F3; display: grid; place-items: center; font-size: 16px; color: var(--ka-plum); }
.sd-sec { margin-top: 22px; padding-top: 20px; border-top: 1px solid var(--ka-hair); }
.sd-sec > b { display: block; font-size: 16px; font-weight: 500; }
.sd-sec > small { display: block; margin-top: 2px; font-size: 14px; color: var(--ka-mute); }
.sd-lbl { margin-top: 14px; font-size: 14px; color: var(--ka-mute); }
.sd-field { margin-top: 6px; padding: 12px 16px; border-radius: 12px; background: #F2F0F3; font-size: 16px; line-height: 1.45; color: var(--ka-plum); }
.sd-row { margin-top: 14px; display: flex; align-items: center; justify-content: space-between; gap: 16px; }
.sd-row b { display: block; font-weight: 500; font-size: 15px; } .sd-row small { display: block; font-size: 14px; color: var(--ka-mute); }
.sd-num { width: 72px; height: 44px; border-radius: 12px; background: #F2F0F3; display: grid; place-items: center; font-size: 16px; }
.sd-foot { flex: none; height: 66px; display: flex; align-items: center; gap: 18px; padding: 0 22px; border-top: 1px solid var(--ka-hair); font-size: 15px; }
.sd-foot .st { margin-right: auto; color: var(--ka-mute); display: inline-flex; align-items: center; gap: 8px; }
.sd-foot .st::before { content: ""; width: 7px; height: 7px; border-radius: 50%; background: #2BA89E; }
.sd-foot .pri { height: 42px; padding: 0 20px; border-radius: 999px; background: var(--ka-plum); color: #FFFFFF; display: inline-flex; align-items: center; font-weight: 500; }
.sd-foot .pri.is-off { background: #ECE8F6; color: var(--acc); }
/* Image details (truth/studio-05-image-details-1440) */
.sd-prev { position: relative; border-radius: 14px; overflow: clip; aspect-ratio: 4 / 3; background: #EEEBF0; }
.sd-prev img { position: absolute; inset: 0; }
.sd-prev .pb { position: absolute; bottom: 10px; display: inline-flex; align-items: center; gap: 6px; height: 34px; padding: 0 14px; border-radius: 999px; background: rgba(255, 255, 255, .92); font-size: 14px; }
.sd-prev .pb.l { left: 10px; } .sd-prev .pb.r { right: 10px; }
.sd-ok { margin-top: 14px; display: flex; align-items: center; gap: 8px; font-size: 14px; color: var(--ka-mute); }
.sd-ok::before { content: ""; width: 7px; height: 7px; border-radius: 50%; background: #2BA89E; }
.sd-sees { margin-top: 18px; padding-top: 16px; border-top: 1px solid var(--ka-hair); }
.sd-sees-h { display: flex; align-items: center; justify-content: space-between; }
.sd-sees-h b { font-family: var(--serif); font-weight: 400; font-size: 20px; }
.sd-sees-h span { height: 32px; padding: 0 12px; border-radius: 999px; background: #FFFFFF; display: inline-flex; align-items: center; font-size: 13.5px; }
.sd-sw { margin-top: 12px; display: flex; gap: 6px; }
.sd-sw i { width: 24px; height: 24px; border-radius: 50%; box-shadow: inset 0 0 0 1px rgba(58, 30, 60, .1); }
.sd-kv { margin-top: 12px; font-size: 14px; color: var(--ka-mute); }
.sd-kv b { display: block; font-weight: 400; font-size: 15px; color: var(--ka-plum); margin-top: 2px; }
.sd-tags { margin-top: 8px; display: flex; flex-wrap: wrap; gap: 6px; }
.sd-tags span { height: 32px; padding: 0 12px; border-radius: 999px; background: #F2F0F3; display: inline-flex; align-items: center; gap: 8px; font-size: 14px; }
.sd-tags.x span::after { content: "×"; color: var(--ka-mute); }
.sd-tags span.is-on { background: #E9E4F6; }
.sd-tags.dot span::after { content: ""; width: 5px; height: 5px; border-radius: 50%; background: #8F83D6; }
/* The Send modal */
.sm { position: absolute; z-index: 4; left: 50%; top: 50%; translate: -50% -50%; width: 540px; padding: 30px 32px 26px; border-radius: 18px; background: #FFFFFF; box-shadow: 0 30px 70px rgba(58, 30, 60, .18); text-align: left; }
.sm-x { position: absolute; top: 22px; right: 24px; font-size: 18px; color: var(--ka-mute); }
.sm small { display: block; font-size: 14px; color: var(--ka-mute); }
.sm .t { margin-top: 4px; font-family: var(--serif); font-size: 32px; line-height: 1.1; letter-spacing: -.01em; }
.sm .d { margin-top: 10px; font-size: 16px; color: var(--ka-mute); }
.sm-link { margin-top: 22px; display: flex; align-items: center; gap: 12px; padding: 8px 8px 8px 18px; border-radius: 14px; background: #F2F0F3; }
.sm-link span { flex: 1; min-width: 0; font-size: 15px; white-space: nowrap; overflow: hidden; -webkit-mask-image: linear-gradient(90deg, #000 85%, transparent); mask-image: linear-gradient(90deg, #000 85%, transparent); }
.sm-link b { height: 40px; padding: 0 18px; border-radius: 999px; background: var(--ka-plum); color: #FFFFFF; display: inline-flex; align-items: center; font-weight: 500; font-size: 15px; }
.sm-acts { margin-top: 16px; display: flex; justify-content: flex-end; align-items: center; gap: 22px; font-size: 15px; }
.sm-acts b { height: 42px; padding: 0 20px; border-radius: 999px; background: var(--ka-plum); color: #FFFFFF; display: inline-flex; align-items: center; font-weight: 400; }
.sm-note { margin-top: 20px; padding-top: 16px; border-top: 1px solid var(--ka-hair); font-size: 14px; line-height: 1.55; color: var(--ka-mute); }
/* An opened Results row */
.rd { margin-top: 16px; padding: 16px 20px; border-radius: 14px; background: #F7F5FA; }
.rd p { font-size: 15px; line-height: 1.5; color: rgba(58, 30, 60, .86); }
.rd h5 { margin: 14px 0 0; font-size: 14px; font-weight: 400; color: var(--ka-mute); }
.rd ul { margin: 8px 0 0; padding: 0; list-style: none; display: flex; flex-wrap: wrap; gap: 6px; }
.rd li { height: 32px; padding: 0 12px; border-radius: 999px; background: #FFFFFF; box-shadow: inset 0 0 0 1px var(--ka-hair); display: inline-flex; align-items: center; gap: 8px; font-size: 14px; }
.rd li small { font-size: 14px; color: var(--ka-mute); }
.rd q { display: block; margin-top: 8px; font-family: var(--serif); font-size: 19px; line-height: 1.35; quotes: "\201C" "\201D"; }
.rd .who { margin-top: 6px; display: flex; gap: 12px; font-size: 14px; color: var(--ka-mute); }
.rd .who u { text-decoration: none; color: var(--ka-plum); }

/* ---------- Results: a Moodboard chapter's image rows (from page-moodboard.css, now shared) ---------- */
.mbk-img { display: grid; grid-template-columns: 128px minmax(0, 1fr); gap: 0 24px; align-items: center; padding: 22px 0 6px; }
.mbk-img > .rd { grid-column: 1 / -1; }
.mbk-img figure { margin: 0; height: 96px; border-radius: 10px; overflow: clip; }
.mbk-img b { display: block; font-size: 17px; font-weight: 500; }
.mbk-img .line { margin-top: 12px; display: flex; align-items: center; gap: 16px; flex-wrap: wrap; }
.mbk-img .line > span:last-child { font-size: 15px; }
/* A respondent page inside the Flow studio's preview card */
.ka-flow-card > .rv { flex: 1 1 0; min-height: 0; }
.rv--card .rv-top { padding: 12px 20px 0; min-height: 60px; }
.rv--card .rv-title { font-size: 40px; }
.rv--card .rv-mb-head { padding-top: 6px; }
.rv--card .rv-mason { margin: 24px 22px 0; column-gap: 14px; }
.rv--card .rv-mason figure { margin-bottom: 14px; }
.rd-2 { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 16px; }
.rd-2 h5 { margin-top: 0; }
.rd > h5 { margin-top: 14px; }

/* ---------- The agent's reply (rulings 16): Encore's MCP answers in text, so the chat shows words and a link,
   never an Encore card. "Used Encore" is the chat app's own tool row. ---------- */
.kc-list { margin: 0; padding-left: 22px; list-style: disc; display: grid; gap: 6px; font-size: 16px; line-height: 1.55; }
.ka-chat--claude .kc-list { font-family: var(--serif); font-size: 17px; color: #141413; }
.kc-say b, .kc-list b { font-weight: 500; }
.ka-chat--claude .kc-say b, .ka-chat--claude .kc-list b { font-weight: 400; }
.kc-link { text-decoration: underline; text-underline-offset: 3px; text-decoration-thickness: 1px; white-space: nowrap; }
.ka-chat--claude .kc-link { color: #141413; }
.ka-chat--gpt .kc-link { color: #0D0D0D; }
.kc-tool span:empty { display: none; }

/* ---------- The thank-you (V5RuntimeCompletion, truth/flow-1440-17-thankyou-full): the card, the tile strip, then
   "Here's what we heard": the images they rated highest, the words they chose, their own words. ---------- */
.rv-end { position: relative; z-index: 1; width: 560px; max-width: calc(100% - 48px); margin: 0 auto; padding: 56px 0 40px; }
.rv-end .rv-wel { width: 100%; }
.rv-end .rv-wel small { margin-top: 0; }
.rv-end .rv-cta { margin-top: 26px; display: inline-grid; place-items: center; height: 48px; padding: 0 26px; border-radius: 999px; background: var(--acc); color: #FFFFFF; font-weight: 500; font-size: 16px; }
.rv-strip { margin-top: 28px; font-size: 14px; color: var(--rv-mute); }
.rv-strip i { display: inline-block; vertical-align: top; width: 20px; height: 10px; margin: 10px 1px 0 0; background: #CCD8F2; }
.rv-strip i.q { background: #D5E6D6; } .rv-strip i.c { background: #F58A5B; }
.rv-strip i:first-of-type { border-radius: 5px 0 0 5px; } .rv-strip i:last-of-type { border-radius: 0 5px 5px 0; }
.rv-heard { margin-top: 34px; }
.rv-heard .rv-rule { width: 42px; }
.rv-heard > b { display: block; margin-top: 18px; font-family: var(--serif); font-weight: 400; font-size: 40px; line-height: 1.05; letter-spacing: -.02em; }
.rv-heard > p { margin-top: 10px; font-size: 15px; color: var(--rv-mute); }
.rv-heard h6 { margin: 26px 0 0; font-size: 14px; font-weight: 400; color: var(--rv-mute); }
.rv-top4 { margin-top: 12px; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px; }
.rv-top4 figure { margin: 0; aspect-ratio: 4 / 5; border-radius: 10px; overflow: clip; }
.rv-words { margin-top: 12px; display: flex; flex-wrap: wrap; gap: 8px; }
.rv-words span { height: 40px; padding: 0 16px; border-radius: 999px; background: #EEEAF6; display: inline-flex; align-items: center; font-size: 16px; }
.rv-heard q { display: block; margin-top: 10px; font-family: var(--serif); font-size: 30px; line-height: 1.15; letter-spacing: -.01em; quotes: "\201C" "\201D"; }
@container ka (max-width: 520px) {
  .rv-end { max-width: calc(100% - 24px); padding: 30px 0 30px; }
  .rv-top4 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .rv-heard > b { font-size: 32px; }
  .rv-heard q { font-size: 24px; }
}

/* In the laptop + phone pair the phone sits over the laptop's right edge, so the laptop's right-hand meta line (which it would cover) is left out. */
.dp-laptop .rv-meta > span { visibility: hidden; }

/* ---------- 4b · The stepped path (.jy.jy--path): the same steps and thread, never pinned. For a page that already
   has its one pinned section (R4 ruling 9: at most one per page). On a desktop each step is its words on the
   thread, beside its own big visual, which may run off the right edge (.jy--bleed). ---------- */
@media (min-width: 901px) {
  .jy--path .jy-steps { gap: max(96px, calc(var(--vw) * 8.4)); }
  .jy--path .jy-steps::before { top: 0; bottom: 0; }
  .jy--path .jy-step { display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); grid-template-rows: auto 1fr; column-gap: max(40px, calc(var(--vw) * 4.5)); align-items: start; }
  .jy--path .jy-step > .jy-lbl { grid-column: 1; grid-row: 1; padding-top: max(24px, calc(var(--vw) * 2.4)); }
  .jy--path .jy-step > .jy-txt { grid-column: 1; grid-row: 2; }
  .jy--path .jy-step > .jy-vis { grid-column: 2; grid-row: 1 / span 2; margin-top: 0; padding-left: 0; }
  .jy--path.jy--bleed .jy-step > .jy-vis { margin-right: calc((100vw - min(calc(100vw - var(--gut) * 2), var(--col))) / -2); }
  .jy--path .jy-h { font-size: max(28px, calc(var(--vw) * 2.5)); }
}
/* The Comparison page as the Flow studio previews it, in its card. */
.rv--card.rv-cmp .rv-cmp-head { padding: 4px 22px 0; }
.rv--card.rv-cmp .rv-cmp-head .rv-rule { margin-bottom: 12px; }
.rv--card.rv-cmp .rv-cmp-head .rv-title { font-size: 34px; }
.rv--card.rv-cmp .rv-cmp-head .rv-sub { font-size: 14px; margin-top: 8px; }
.rv--card.rv-cmp .rv-cmp-body { padding: 16px 24px 24px; }
.rv--card.rv-cmp .rv-help { display: none; }
.rv--card.rv-cmp .rv-pair { gap: 34px; margin-top: 16px; }
.rv--card.rv-cmp .rv-vs { width: 40px; height: 40px; }
.rv--card .rv-dl, .rv--card .rv-choose { min-height: 32px; padding: 0 12px; font-size: 13.5px; }
.ka-flow-card > .rv--card.rv-cmp .rv-top { min-height: 56px; padding-top: 10px; }
.ka-flow-card > .rv--card.rv-cmp .rv-cmp-head .rv-title { font-size: 28px; }
.ka-flow-card > .rv--card.rv-cmp .rv-cmp-head .rv-eyebrow { font-size: 13.5px; }
.ka-flow-card > .rv--card.rv-cmp .rv-meta { font-size: 13.5px; }
.ka-flow-card > .rv--card.rv-cmp .rv-meta > span { display: none; }
.ka-flow-card > .rv--card.rv-cmp .rv-dir { height: 150px; }
.ka-flow-card > .rv--card.rv-cmp .rv-top .rv-studio { display: none; }

/* ---------- Choice rows everywhere (Pick One, Pick Many, Yes / No), as 4.123.0 draws them (truth/form-slides-1440-
   q14, q15; form-classic-1440-02-fullpage): full-width grey rows with hairlines between, a small number, a serif
   label, and a radio at the right that fills when picked. No bordered white cards, no check circles. ---------- */
.ka-ballot { gap: 0 !important; border-top: 1px solid rgba(58, 30, 60, .16); }
.ka-ballot span { grid-template-columns: 24px minmax(0, 1fr) 14px !important; min-height: 64px; padding: 0 20px 0 22px !important; border: 0 !important; border-radius: 0 !important; border-bottom: 1px solid rgba(58, 30, 60, .16) !important; background: #F4F3F4 !important; box-shadow: none !important; color: var(--ka-plum) !important; }
.ka-ballot span::after { width: 14px !important; height: 14px !important; border-radius: 50% !important; background: #FFFFFF !important; box-shadow: inset 0 0 0 1px rgba(58, 30, 60, .35) !important; background-image: none !important; }
.ka-ballot span.is-on::after, .ka-ballot span[aria-checked="true"]::after { box-shadow: inset 0 0 0 1px rgba(58, 30, 60, .35), inset 0 0 0 4px #FFFFFF, inset 0 0 0 10px var(--ka-plum) !important; }
/* The Comparison studio's "Add images" drawer (Board source, Project library). */
.sd--src { width: 470px; }
.sd-select { display: flex; justify-content: space-between; align-items: center; }
.sd-select::after { content: ""; width: 10px; height: 10px; background: no-repeat center / contain url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath d='M2.5 4.5 6 8l3.5-3.5' fill='none' stroke='%236E5A70' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); }
.sd-thumbs { margin-top: 12px; display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 6px; }
.sd-thumbs i { aspect-ratio: 1; border-radius: 6px; overflow: clip; display: block; }
.sd-lib { margin-top: 8px; display: flex; justify-content: space-between; padding: 10px 12px; border-radius: 12px; background: #F2F0F3; font-size: 14px; color: var(--ka-mute); }
.sd-lib.is-on { background: #ECE8F6; color: var(--ka-plum); }

/* ---------- Moodboard to Comparison: what one person liked, then the pair they get (moodboard and comparison pages) ---------- */
.mbk-fav { display: grid; grid-template-columns: minmax(0, 3fr) 56px minmax(0, 9fr); align-items: center; gap: 20px; margin-top: var(--sec-head); }
.mbk-fav-liked { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; align-items: end; }
.mbk-fav-liked figure { position: relative; margin: 0; border-radius: 12px; overflow: clip; aspect-ratio: var(--ar); }
.mbk-fav-liked img { width: 100%; height: 100%; object-fit: cover; display: block; }
.mbk-fav-liked .rv-badge { opacity: 1; width: 34px; height: 34px; right: 8px; top: 8px; bottom: auto; background-size: 15px !important; }
.mbk-fav-liked p { grid-column: 1 / -1; margin-top: 6px; font-size: 15px; color: var(--mute); }
.mbk-fav-arrow { width: 48px; justify-self: center; }
.mbk-fav-pair { min-width: 0; }
@media (max-width: 900px) {
  .mbk-fav { grid-template-columns: minmax(0, 1fr); }
  .mbk-fav-arrow { transform: rotate(90deg); }
  .mbk-fav-liked { max-width: 420px; }
}

/* Results rows for a pair: the two thumbs with "or" (V5FlowResults). */
.cmp-two { display: inline-flex; align-items: center; gap: 8px; margin-top: 8px; }
.cmp-two figure { margin: 0; width: 56px; height: 42px; border-radius: 6px; overflow: clip; }
.cmp-two span { font-size: 14px; color: var(--ka-mute); }

/* ===================== R6 use cases ===================== */
/* Founders: Dot Voting rows as the app draws them (truth q18): numbered, hairline-separated, the -/+ stepper. Continue moves to the next question. */
.uc2-col .dv-row { border-radius: 0; box-shadow: none; background: transparent; border-bottom: 1px solid rgba(58, 30, 60, .16); padding: 14px 8px; }
.uc2-col .dv-rows { border-top: 1px solid rgba(58, 30, 60, .16); }
.uc2-col .dv-row + .dv-row { margin-top: 0; }
.uc2-col .dv-row.has { background: rgba(125, 112, 203, .05); }
.dv-name .dv-k { display: inline-block; width: 26px; font-family: var(--sans); font-size: 14px; color: var(--ka-mute); }
.uc2-col .dv-next { flex-direction: column; align-items: center; text-align: center; }
.dv-next .ka-q { outline: none; }
.dv-next .ka-ballot { width: 100%; max-width: 760px; margin-top: 28px; text-align: left; }
.dv-next .ka-sfoot { max-width: 760px; }
.dv-next .ka-back { cursor: pointer; background: #FFFFFF; border: 0; font: inherit; }
.dv-next .ka-back:focus-visible { outline: 2px solid var(--ka-plum); outline-offset: 2px; }

/* Team leads: the Classic page (truth form-classic-1440): white fields with a hairline, the spectrum card with its endpoints and no number, Dot Voting steppers, This / Not That lines. */
.cl-form .fq { border-top: 0; padding-top: 0; margin-top: 36px; }
.cl-field { margin-top: 14px; min-height: 52px; border-radius: 14px; background: #FFFFFF; box-shadow: inset 0 0 0 1px rgba(58, 30, 60, .14); display: flex; align-items: center; justify-content: space-between; padding: 0 18px; font-size: 17px; color: var(--ka-ink); }
.cl-field svg { width: 14px; height: 14px; }
.cl-text { align-items: flex-start; min-height: 96px; padding: 16px 18px; line-height: 1.5; }
.cl-spec { margin-top: 14px; border-radius: 18px; background: #FFFFFF; box-shadow: 0 1px 2px rgba(58, 30, 60, .06), inset 0 0 0 1px rgba(58, 30, 60, .1); padding: 18px 18px 16px; }
.cl-spec input[type="range"]::-webkit-slider-runnable-track { background: linear-gradient(90deg, rgba(58, 30, 60, .14), #3A1E3C var(--p, 50%), rgba(58, 30, 60, .14)) !important; }
.cl-ends { margin-top: 12px; display: flex; justify-content: space-between; gap: 16px; }
.cl-ends span { display: grid; gap: 2px; font-family: var(--serif); font-size: 24px; line-height: 1.1; color: var(--ka-ink3, #6E6170); }
.cl-ends span:last-child { text-align: right; }
.cl-ends small { font-family: var(--sans); font-size: 14px; color: var(--ka-mute); }
.cl-sr { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
.cl-bank { margin-top: 14px; display: flex; align-items: center; justify-content: center; gap: 10px; font-size: 14px; color: var(--ka-mute); }
.cl-marks { display: inline-flex; gap: 4px; }
.cl-marks i { width: 10px; height: 10px; border-radius: 2px; box-shadow: inset 0 0 0 1px rgba(58, 30, 60, .3); }
.cl-dv { margin-top: 14px; border-top: 1px solid rgba(58, 30, 60, .16); }
.cl-dv li { display: grid; grid-template-columns: 26px minmax(0, 1fr) auto; align-items: center; gap: 4px; min-height: 60px; padding: 0 8px 0 12px; border-bottom: 1px solid rgba(58, 30, 60, .16); }
.cl-dv small, .cl-tnt small { font-size: 14px; color: var(--ka-mute); }
.cl-dv-n { font-family: var(--serif); font-size: 22px; color: var(--ka-plum); }
.cl-step { display: inline-flex; align-items: center; gap: 10px; }
.cl-step i { width: 36px; height: 36px; display: grid; place-items: center; border-radius: 6px; box-shadow: inset 0 0 0 1px rgba(58, 30, 60, .16); font-style: normal; font-size: 16px; color: var(--ka-plum); }
.cl-step i.off { color: rgba(58, 30, 60, .6); }
.cl-step b { min-width: 16px; text-align: center; font-weight: 400; font-size: 15px; }
.cl-tnt { margin-top: 14px; display: grid; gap: 14px; }
.cl-tnt li { display: grid; grid-template-columns: 22px minmax(0, 1fr); align-items: baseline; row-gap: 10px; }
.cl-tnt p { font-family: var(--serif); font-size: 26px; line-height: 1.15; color: var(--ka-plum); }
.cl-tnt u { display: inline-block; min-width: 92px; text-decoration: none; border-bottom: 1px solid rgba(58, 30, 60, .45); text-align: center; }
.cl-chips { grid-column: 2; display: flex; gap: 10px; }
.cl-chips span { height: 40px; padding: 0 16px; border-radius: 12px; box-shadow: inset 0 0 0 1px rgba(58, 30, 60, .16); display: inline-grid; place-items: center; font-family: var(--serif); font-size: 19px; color: var(--ka-plum); background: #FFFFFF; }
.cl-chips span.on { background: var(--ka-plum); color: #FFFFFF; box-shadow: none; }
.cl-form .form1-send { border-radius: 999px; }

/* Team leads: By group, as the lanes view draws it (FlowGroups.tsx, lib/brand/lanes.ts): one row per group, one column per step, a plum row for the picked group, "Skips" with a hairline. */
.ln { display: flex; flex-direction: column; background: #FFFFFF; }
.ln-body { padding: 26px 36px 40px; }
.ln-head { display: flex; align-items: center; justify-content: space-between; gap: 16px; }
.ln-flow { display: inline-flex; align-items: center; gap: 10px; font-size: 16px; color: var(--ka-ink); }
.ln-flow b { font-weight: 500; font-size: 17px; }
.ln-flow .ka-ico { width: 20px; height: 20px; }
.ln-tabs { display: inline-flex; padding: 3px; border-radius: 999px; background: #F1EFF3; font-size: 15px; }
.ln-tabs span { padding: 7px 16px; border-radius: 999px; color: var(--ka-ink3, #6E6170); }
.ln-tabs span.on { background: #FFFFFF; color: var(--ka-ink); box-shadow: 0 1px 2px rgba(58, 30, 60, .12); }
.ln-h { margin-top: 22px; font-family: var(--serif); font-size: 52px; line-height: 1.04; letter-spacing: -.02em; color: var(--ka-plum); }
.ln-p { margin-top: 14px; max-width: 600px; font-size: 18px; line-height: 1.5; color: var(--ka-ink); }
.ln-grid { margin-top: 40px; --ln-cols: minmax(150px, 210px) 68px minmax(0, 2fr) minmax(0, 2fr) 68px 72px; }
.ln-cols, .ln-row { display: grid; grid-template-columns: var(--ln-cols); column-gap: 6px; align-items: center; }
.ln-cols { align-items: start; padding-bottom: 16px; border-bottom: 1px solid rgba(58, 30, 60, .14); font-size: 16px; line-height: 1.5; }
.ln-mute { color: var(--ka-ink3, #6E6170); }
.ln-r { text-align: right; }
.ln-step { display: flex; gap: 8px; padding: 0 14px; color: var(--ka-ink); }
.ln-step .ka-ico { width: 18px; height: 18px; margin-top: 3px; flex: none; }
.ln-row { margin-top: 36px; }
.ln-name { display: grid; gap: 2px; }
.ln-name b { font-weight: 400; font-size: 17px; color: var(--ka-ink); }
.ln-row.on .ln-name b { font-weight: 500; }
.ln-name small { font-size: 14px; color: var(--ka-ink3, #6E6170); }
.ln-bk { display: block; height: 44px; border-radius: 999px; background: #F1EFF3; }
.ln-cell { display: flex; align-items: center; height: 44px; padding: 0 14px; border-radius: 12px; background: #F1EFF3; font-size: 14px; color: var(--ka-ink); min-width: 0; white-space: nowrap; overflow: hidden; }
.ln-bk.on, .ln-cell.on { background: var(--ka-plum); color: #F6EFE6; }
.ln-skip { background: transparent; color: var(--ka-ink3, #6E6170); }
.ln-skip i { margin-left: 12px; height: 1px; flex: 1; background: rgba(58, 30, 60, .16); }
.ln-time { text-align: right; font-size: 16px; color: var(--ka-ink3, #6E6170); }
.ln-row.on .ln-time { color: var(--ka-ink); font-weight: 500; }

/* Product teams: the real pair screen with two drawn screens in place of photographs. */
.rv-cmp--ui .rv-dir figure { background: transparent; }
.rv-cmp--ui .rv-dir figure > .ucs { position: absolute; inset: 0; border-radius: 12px; overflow: clip; box-shadow: 0 10px 28px rgba(58, 30, 60, .14), inset 0 0 0 1px var(--ka-hair); }

/* Marketing teams: the try-it pair, choosable. */
.rv-pair[data-try] .rv-dir { cursor: pointer; }
.rv-pair[data-try] .rv-choose { font-family: inherit; border: 0; cursor: pointer; }
.rv-pair[data-try] .rv-choose:focus-visible { outline: 2px solid var(--ka-plum); outline-offset: 2px; }

/* Agents hero: both chats, side by side (no tabs, ruling 17). */
.ag1-both { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: max(24px, calc(var(--vw, 1vw) * 2.4)); align-items: start; }
.ag1-both .ag-panel { display: block !important; min-width: 0; }
@media (max-width: 900px) { .ag1-both { grid-template-columns: minmax(0, 1fr); gap: 40px; } }
/* Team leads: the Classic page is a long page; the window shows its top, cut by the browser's bottom edge, as a real tab would. */
.uc2-form .ka-win > .ka-resp { flex: none; height: 660px; min-height: 0; overflow: clip; }
/* Founders: the rows (beats page-sweep's boxed rows). */
.ka-their .uc2-col .dv-row { border-radius: 0; box-shadow: none; background: transparent; border-bottom: 1px solid rgba(58, 30, 60, .16); padding: 14px 8px; }
.ka-their .uc2-col .dv-row + .dv-row { margin-top: 0; }
.ka-their .uc2-col .dv-row.has { background: rgba(125, 112, 203, .05); }
.rv-cmp--ui .ucs-top b { margin-left: auto; }
.ka-ballot.ucl-b { width: 100%; max-width: 520px; margin: 22px auto 0; }
/* The welcome inside a Flow studio's preview card: the whole card fits (title, what you'll do, time, Begin). */
.rv--card.rv-welp .rv-wel-wrap { padding: 4px 22px 22px; }
.rv--card.rv-welp .rv-wel { width: 500px; padding: 26px 30px 28px; }
.rv--card.rv-welp .rv-wel .rv-rule { margin-bottom: 16px; }
.rv--card.rv-welp .rv-wel .rv-wt { font-size: 34px; }
.rv--card.rv-welp .rv-wel .rv-msg { margin-top: 10px; font-size: 15px; line-height: 1.45; }
.rv--card.rv-welp .rv-wel .rv-do { margin-top: 14px; }
.rv--card.rv-welp .rv-wel ul { margin-top: 6px; }
.rv--card.rv-welp .rv-wel .rv-time { margin-top: 12px; font-size: 14px; }
.rv--card.rv-welp .rv-wel .rv-begin { margin-top: 16px; height: 42px; width: 180px; font-size: 15px; }

/* Ruling 27: text columns wide enough that a headline runs two or three lines at 1280-1920; the visual keeps the larger share. */
@media (min-width: 901px) {
  .pat-feature--split .pat-feature-in { grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); gap: max(40px, calc(var(--vw) * 4)); }
  .pat-feature--split.flip .pat-feature-in { grid-template-columns: minmax(0, 7fr) minmax(0, 5fr); }
  .pat-feature--split .pat-feature-head { max-width: 580px; }
}
/* By group on a phone: each group is a card of its steps, each cell carrying its step's name. */
@container ka (max-width: 640px) {
  .ln-body { padding: 18px 16px 24px; }
  .ln-head { flex-direction: column; align-items: flex-start; }
  .ln-flow { flex-wrap: wrap; row-gap: 2px; }
  .ln-h { font-size: 38px; }
  .ln-p { font-size: 16px; }
  .ln-grid { margin-top: 24px; }
  .ln-cols { display: none; }
  .ln-row { grid-template-columns: minmax(0, 1fr) auto; row-gap: 8px; margin-top: 22px; }
  .ln-row .ln-bk { display: none; }
  .ln-name { grid-column: 1; grid-row: 1; }
  .ln-time { grid-column: 2; grid-row: 1; }
  .ln-cell { grid-column: 1 / -1; height: auto; min-height: 52px; flex-direction: column; align-items: flex-start; justify-content: center; padding: 8px 14px; white-space: normal; }
  .ln-cell::before { content: attr(data-h); font-size: 14px; opacity: .8; }
  .ln-skip { flex-direction: row; align-items: center; justify-content: flex-start; flex-wrap: wrap; }
  .ln-skip::before { flex-basis: 100%; }
}

/* ===================== R6 gate fixes (clipcheck at the R6 sizes) ===================== */
/* Phones: a page people answer that isn't a board grows to hold all of itself (the board keeps its 9:15 window). */
@container ka (max-width: 520px) {
  .ka-win:has(> .rv-cmp), .ka-win:has(> .rv-qp), .ka-win:has(> .rv-welp), .ka-win:has(> .rv-endp) { aspect-ratio: auto; }
  .ka-win:has(> .rv-cmp) > .rv, .ka-win:has(> .rv-qp) > .rv, .ka-win:has(> .rv-welp) > .rv, .ka-win:has(> .rv-endp) > .rv { flex: none; }
}
/* Phones: a studio drawer is a full sheet, as the app shows it on a phone; the board behind it steps aside. */
@container ka (max-width: 640px) {
  .ka-body:has(> .sd) > :not(.sd):not(.ka-dim) { display: none; }
  .ka-body:has(> .sd) { height: auto; }
  .sd, .sd--wide { position: relative; inset: auto; width: auto; margin: 10px; }
  .sd-scroll { overflow: visible; flex-direction: column; }
  .sd-col--tint { flex: none; }
  .sd-foot { flex-wrap: wrap; height: auto; padding: 14px 18px; }
}
/* Fitted windows run near 0.67 at 1280x720 and 1440x900: the chrome's smallest words are drawn a size up so they stay readable. */
.fit-in .ka-url { font-size: 15px; }
.fit-in .rv-wel small, .fit-in .rv-eyebrow, .fit-in .sd-eyebrow, .fit-in .sd-sec > small, .fit-in .sd-row small { font-size: 15px; }
@media (max-width: 600px) { .rv--card .rv-float { white-space: normal; height: auto; min-height: 38px; padding: 8px 14px; max-width: calc(100% - 24px); text-align: center; } }
.ln-cell, .ln-name small { font-size: 15px; }
.fit-in .ka-rhead small, .fit-in .ka-row .n, .fit-in .rv-do, .fit-in .sd-lbl { font-size: 15px; }
.fit-in .ka-url { font-size: 16px; }
.uc2-form .ka-win { aspect-ratio: auto !important; height: auto; }
/* A studio drawer's list runs on under a fade, as it scrolls in the app. */
.sd-scroll { -webkit-mask-image: linear-gradient(180deg, #000 calc(100% - 28px), transparent); mask-image: linear-gradient(180deg, #000 calc(100% - 28px), transparent); }
/* Favourites into pairs (moodboard, comparison): the liked images, then the pair below them at full width (ruling 26: no small boxed windows). */
.mbk-fav { grid-template-columns: minmax(0, 1fr); justify-items: center; gap: 18px; width: min(100vw - 2 * var(--gut, 24px), 1240px); margin-left: 50%; translate: -50% 0; }
.mbk-fav-liked { width: min(100%, 520px); }
.mbk-fav-liked p { text-align: center; }
.mbk-fav-arrow { transform: rotate(90deg); }
.mbk-fav-pair { width: 100%; }
.fit-in .ka-tag, .fit-in .sd-lib, .fit-in .rv-from { font-size: 15px; }
@container ka (max-width: 640px) {
  .ka-win:has(> .ka-body > .sd) { aspect-ratio: auto !important; height: auto !important; }
  .ka-win > .ka-body:has(> .sd) { flex: none; min-height: 0; height: auto; }
}
/* A pinned stage centres its visual, so any room the visual's proportions leave is shared above and below (ruling 15: no tall empty band). */
.jy--pin .jy-stage > .jy-vis > .fit { align-self: center; }
.fit-in .fd-more, .fit-in .fd-rcpt-h p { font-size: 15px; }
.fit-in .fd-rcpt span, .fit-in .fd-rcpt b { font-size: 15px; }
.fit-in .fm-draft .ka-row .n, .fit-in .ka-row .ka-tag, .fm-draft .fit-in .ka-tag { font-size: 15px; }
.fit-in .fd-rcpt li .n, .fit-in .fd-rcpt li small { font-size: 15px; }

/* ============================== R6b (27 Oct): ruling 29, the real marks ==============================
   The agents wear their official marks in one ink (r6/logos, via r6/build/r6b_logos.py). Encore is the serif E,
   never four squares (the four squares mean Moodboard only). */
.mcpw-m svg { width: 42%; height: 42%; }
.mcpw-e { font-family: var(--serif); font-weight: 400; font-size: max(42px, calc(var(--m) * .46)); line-height: 1; letter-spacing: -.02em; color: var(--cream); transform: translateY(-2%); }
.mcpw--plum .mcpw-t.is-hub .mcpw-e { color: var(--plum); }
@media (max-width: 600px) { .mcpw-t.is-hub .mcpw-e { font-size: 48px; } .mcpw-e { font-size: 42px; } }
.kc-e { flex: none; width: 18px; height: 18px; border-radius: 5px; display: grid; place-items: center; background: #3A1E3C; color: #F6F3EE; font: 400 13px/1 var(--serif); font-style: normal; }

/* R6b: on a phone a device pair shows its phone, whole (the laptop beside it would be a few pixels wide), scaled to
   the room by the fit (data-fit-phone="375"); a lone phone (.ph1) does the same. */
@media (max-width: 600px) {
  .dp { width: 375px; height: 760px; }
  .dp-laptop { display: none; }
}
/* R6b: while the fit measures a mock (kit-r6.js), nothing in it transitions, so a font size is read at its value. */
.fit-in[data-fit-measuring], .fit-in[data-fit-measuring] * { transition: none !important; }

/* ============================== R6b (27 Oct): choice rows as 4.123.1 draws them ==============================
   The app no longer draws grey rows (runtimeSurface.ts RESPONDENT_PLANES, globals.css .client-option-choice--ballot,
   item 25): each row is its own WHITE row with a very faint neutral edge (rgba(28,28,32,.10)), 16px corners, apart
   from the next by air (10px), a small number, the serif label and a radio ring at the right. Chosen: the studio's
   strong tint (Encore's plum tints in lavender, #ECE8F6), the colour's own edge, the label in the colour and the ring
   filled. The grey rows in the truth shots predate this; every mock that copied them (.rv-rows, .ka-ballot,
   .fg-ballot in page-forms.css) now reads these. */
.rv-rows, .ka-ballot { display: grid; gap: 10px !important; border-top: 0 !important; }
.rv-rows > span, .ka-ballot span {
  background: #FFFFFF !important; border: 1px solid rgba(28, 28, 32, .10) !important; border-radius: 16px !important;
  box-shadow: none !important; transition: background-color .3s var(--ease-out), border-color .3s var(--ease-out);
}
.rv-rows > span::after, .ka-ballot span::after {
  width: 12px !important; height: 12px !important; border-radius: 50% !important; background: transparent !important; background-image: none !important;
  box-shadow: inset 0 0 0 1.5px color-mix(in oklch, var(--acc, #3A1E3C) 35%, rgba(28, 28, 32, .12)) !important;
}
.rv-rows > span.is-on, .ka-ballot span.is-on, .ka-ballot span[aria-checked="true"] {
  background: var(--acc-tint, #ECE8F6) !important; border-color: color-mix(in oklch, var(--acc, #3A1E3C) 42%, var(--acc-tint, #ECE8F6)) !important;
  color: color-mix(in oklch, var(--acc, #3A1E3C) 78%, #1E1A24) !important;
}
.rv-rows > span.is-on::after, .ka-ballot span.is-on::after, .ka-ballot span[aria-checked="true"]::after {
  background: var(--acc, #3A1E3C) !important;
  box-shadow: inset 0 0 0 1.5px var(--acc, #3A1E3C), 0 0 0 4px color-mix(in oklch, var(--acc, #3A1E3C) 18%, transparent) !important;
}
.rv-rows--many > span::after { border-radius: 4px !important; }
/* R6b: on the device pair's phone, the first image of a Comparison is short enough that its Choose this sits whole
   above the phone's bottom edge (it was cut mid-chip; the second image runs on under the fade). */
.dp-screen .rv-cmp .rv-dir { height: 196px; }

/* ============================== v11 · Ruling 44: every Comparison pair is laid out as the app lays it out ==============================
   truth/cmp-1440-p01-pair + -chosen: "Direction A/B" sits ABOVE its option (left), "Choose this" UNDER it (right),
   the "vs" chip centred between the two and fully visible, both options whole, side by side (stacked on a phone).
   Before: both pills were absolutely placed on the option's corners, so on any picture that filled its box (a screen,
   a wide photo) the label sat on top of the picture and "Choose this" over its bottom edge. Now each option is three
   rows (label, picture, choose) and nothing is drawn over the picture. The pair keeps its height; the picture takes
   what the two pill rows leave. */
.rv-dir { display: grid; grid-template-rows: auto minmax(0, 1fr) auto; grid-template-columns: minmax(0, 1fr); row-gap: 10px; place-items: stretch; }
.rv-dir > figure { grid-row: 2; grid-column: 1; min-height: 0; }
.rv-dir > .rv-dl, .rv-dir > .rv-choose { position: static; grid-column: 1; }
.rv-dir > .rv-dl { grid-row: 1; justify-self: start; margin-left: 12px; }
.rv-dir > .rv-choose { grid-row: 3; justify-self: end; margin-right: 12px; }
.rv-dir figure img { object-position: 50% 50%; }
.rv-pair .rv-vs { top: 50%; }
.rv--card .rv-dir { row-gap: 6px; }
.rv--card .rv-dl, .rv--card .rv-choose { min-height: 28px; }
.ka-flow-card > .rv--card.rv-cmp .rv-dir { height: 200px; }
.dp-screen .rv-cmp .rv-dir { height: 208px; }
/* 601-900px the pair is fitted small and boost() raises its text to the floor, which pushes the phone's first
   Choose this across the screen's bottom edge; the help line steps aside there so the button sits whole (clipcheck 768x1024). */
@media (min-width: 601px) and (max-width: 900px) { .dp-screen .rv-cmp .rv-help, .dp-screen .rv-cmp .rv-pair > .rv-vs { display: none; } }
@container ka (max-width: 520px) {
  /* Stacked: A, then the "vs" chip, then B (the chip was a grid item after both options, so it fell to the bottom). */
  .rv-pair { row-gap: 8px; }
  .rv-dir { height: var(--pair-h-sm, 290px); row-gap: 8px; }
  .rv-pair > .rv-pairset > .rv-dir:first-child, .rv-pair > .rv-dir:first-of-type { grid-row: 1; }
  .rv-pair .rv-vs { top: auto; grid-row: 2; margin: 0; }
  .rv-pair > .rv-pairset > .rv-dir:nth-child(2), .rv-pair > .rv-dir:nth-of-type(2) { grid-row: 3; }
}
/* The phone in the laptop + phone pair shows its first screen: Direction A whole, the fold falling in the gap before
   the "vs" chip (B and the chip are below the fold, as on a real phone; truth/cmp-375-p01-pair). */
.dp-screen .rv-cmp .rv-pair { row-gap: 26px; }

/* ============================== 28 Oct · Cut only where it is safe (Josh) ==============================
   1. A visual on the LEFT of a split feature reaches the page gutter, never the screen edge, and keeps all four
      corners: the left of an app screen is where it starts, so cutting it cut the key parts. A visual on the right
      may still run off the right edge, by its allowance only (kit-r6.js caps the scale there).
   2. The laptop + phone pair: each device paints as one sealed layer and the phone is always on top. The laptop's
      Moodboard grid is raised (z-index 1) inside it; without its own stacking context that grid painted over the
      phone. */
.pat-feature--split.flip .bleed { margin-right: 0; margin-left: calc((100vw - min(calc(100vw - var(--gut) * 2), var(--col))) / -2 + var(--gut)); }
.ka-win--bleed-l { border: 1px solid var(--ka-hair); border-radius: 20px; }
.dp-laptop { z-index: 1; isolation: isolate; }
.dp-phone { z-index: 2; isolation: isolate; }
@media (max-width: 900px) { .pat-feature--split .bleed, .pat-feature--split.flip .bleed { margin-inline: 0; } }

/* still tier: the reduced-motion rules above */
html.mo-still .rv-mason figure.is-liked{transform: none;} html.mo-still .jy--pin .jy-stage > .jy-vis,html.mo-still .jy--pin .jy-stage > .jy-vis.is-on,html.mo-still .jy--pin .jy-txt,html.mo-still .jy--pin .jy-step.is-on .jy-txt{transition: none; transform: none;}

