/* ============================================================================
   THE PAPER FLIGHT — ats surfaces.  OWNED BY THE ATS WORKER.
   ----------------------------------------------------------------------------
   Loads AFTER conservatory.css. Everything the brand shares already exists:
     · the palette + type + shadow tokens ....... assets/tokens.css
     · the papercraft utilities (.pf-tape, .pf-stick, .pf-stamp, .pf-hand,
       .pf-sheet, .pf-clip, .pf-progress, .pf-torn, .pf-edge, the logo lockup)
       ..................................... assets/conservatory.css §4
   Use those. Do not re-declare a colour, a face, or a shadow here.
   NOTE: conservatory.css §1 resets box-shadow with !important, so a plain
   `box-shadow:` in this file will not paint — use .pf-sheet, or !important.
   ========================================================================== */

/* ============================================================================
   §A · THE THRESHOLD — /ats-resume-checker
   ----------------------------------------------------------------------------
   THE SKELETON IS SHARED. conservatory.css §5.1 owns the composition of all
   three thresholds — grid, masthead, taped choice sheets, performing sheet,
   fact strip, breakpoints. Nothing about the layout is restated here.

   What belongs to the ATS check alone, and is all that lives below:
     · the PERFORMANCE inside the shared sheet — the ring DRAWS to 76, the three
       dimension bars WRITE, and the CHECKED stamp SLAMS in.
   The 76 is a labelled SAMPLE ("sample report", aria-hidden in the markup) —
   it is never a claim about the visitor's résumé, and nothing in this file
   writes, rounds or re-bands a real score.
   ========================================================================== */

body.folio-v5 .cons-start .pf-thr-body-ats { align-items: center; }

/* ---- the ring draws ------------------------------------------------------ */
body.folio-v5 .cons-start .pf-thr-ring { width: 92px; height: 92px; flex: none; }
body.folio-v5 .cons-start .pf-thr-ring circle { fill: none; stroke-width: 7; }
body.folio-v5 .cons-start .pf-thr-ring .track { stroke: var(--cx-cons-hair); }
body.folio-v5 .cons-start .pf-thr-ring .val {
  stroke: var(--cx-cons-vermilion); stroke-linecap: round;
  stroke-dasharray: 245; stroke-dashoffset: 245;
  animation: pf-ats-ring 4.6s cubic-bezier(.22, .61, .36, 1) infinite;
}
body.folio-v5 .cons-start .pf-thr-ring text {
  font: 400 30px var(--cx-font-display); fill: var(--cx-ink);
}

/* ---- the three dimensions write ----------------------------------------- */
body.folio-v5 .cons-start .pf-thr-bars { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 11px; }
body.folio-v5 .cons-start .pf-thr-bars > div {
  display: grid; grid-template-columns: 74px minmax(0, 1fr); gap: 10px; align-items: center;
  font: 600 8.5px/1 var(--cx-font-mono); letter-spacing: .08em; text-transform: uppercase;
  color: var(--cx-cons-char);
}
body.folio-v5 .cons-start .pf-thr-bars b {
  position: relative; display: block; height: 4px; border-radius: 2px;
  overflow: hidden; background: var(--cx-cons-hair);
}
body.folio-v5 .cons-start .pf-thr-bars b::after {
  content: ""; position: absolute; inset: 0; width: 0; background: var(--cx-ink);
  animation: pf-ats-write 4.6s ease-out infinite;
}
body.folio-v5 .cons-start .pf-thr-bars > div:nth-child(2) b::after { animation-delay: .16s; }
body.folio-v5 .cons-start .pf-thr-bars > div:nth-child(3) b::after { animation-delay: .32s; }

/* the CHECKED stamp is the SHARED performance (conservatory §5.1 slams every
   threshold's stamp on the same 4.6s beat) — nothing to restate here. */

@keyframes pf-ats-ring {
  0%, 6%    { stroke-dashoffset: 245; }
  42%, 100% { stroke-dashoffset: 58.8; }
}
@keyframes pf-ats-write {
  0%, 26%   { width: 0; }
  52%, 100% { width: var(--w, 80%); }
}
/* on a tall desktop the sheet is larger, so the performance is too — the ring
   grows with the paper instead of leaving the sheet half empty. */
@media (min-width: 1081px) and (min-height: 861px) {
  body.folio-v5 .cons-start .pf-thr-ring { width: 116px; height: 116px; }
  body.folio-v5 .cons-start .pf-thr-bars { gap: 16px; }
  body.folio-v5 .cons-start .pf-thr-bars b { height: 5px; }
}

@media (max-width: 860px) {
  body.folio-v5 .cons-start .pf-thr-ring { width: 74px; height: 74px; }
  body.folio-v5 .cons-start .pf-thr-bars > div { grid-template-columns: 62px minmax(0, 1fr); }
}

@media (prefers-reduced-motion: reduce) {
  body.folio-v5 .cons-start .pf-thr-ring .val { animation: none !important; stroke-dashoffset: 58.8; }
  body.folio-v5 .cons-start .pf-thr-bars b::after { animation: none !important; width: var(--w, 80%); }
}


/* ============================================================================
   §B · THE REPORT — the brand's showcase surface.
   ----------------------------------------------------------------------------
   STAMPED VERDICTS. The score stays exactly what the checker computed — the
   ring and the stamp are TREATMENT, never arithmetic: nothing in this file
   writes, rounds or re-bands a number. The stamp beside the ring says
   "Checked", which is a fact about what happened, not a claim about the score.
   ========================================================================== */

/* ---- the head: verb-led, with the two controls kept exactly as they are --- */
body.folio-v5 .pf-ats-head h1 { letter-spacing: -.025em; }

/* ---- the score, as a stamped ring --------------------------------------- */
body.folio-v5 .ats-score-block.pf-ats-scoreblock { position: relative; }
body.folio-v5 .ats-score-block.pf-ats-scoreblock > span {
  font-family: var(--cx-font-mono); color: var(--cx-cons-faint);
}
body.folio-v5 .ats-score-block.pf-ats-scoreblock > span.pf-ats-stamp::before { content: none !important; }
body.folio-v5 .ats-score-block.pf-ats-scoreblock > span.pf-ats-stamp {
  font-family: var(--cx-font-ui); letter-spacing: .09em; color: var(--cx-cons-vermilion);
}
/* AUDIT 2026-09-03 — THE STAMP LANDED ON THE LABEL. It was absolutely placed
   at right:18px/top:26px inside a centred grid, so it sat on top of
   "CONXFOLIO ATS SCORE" (measured at 1440: stamp 434–514 x 347–387, label
   316–453 x 375–384 — a real intersection) and the collision moved with the
   score's width. The stamp is now a GRID CELL beside the label on the panel's
   first row: it is dealt its own column, so no score width can ever push the
   two into each other. The slam still slams; it just slams in place. */
body.folio-v5 .ats-score-block.pf-ats-scoreblock {
  grid-template-columns: minmax(0, 1fr) auto;
  column-gap: 12px;
}
body.folio-v5 .ats-score-block.pf-ats-scoreblock > span:first-child {
  grid-column: 1; grid-row: 1; justify-self: start; text-align: left;
}
body.folio-v5 .ats-score-block.pf-ats-scoreblock > span.pf-ats-stamp {
  grid-column: 2; grid-row: 1; justify-self: end; align-self: center;
}
body.folio-v5 .ats-score-block.pf-ats-scoreblock > .ats-score-ring,
body.folio-v5 .ats-score-block.pf-ats-scoreblock > p { grid-column: 1 / -1; }
body.folio-v5 .ats-score-block.pf-ats-scoreblock .pf-ats-stamp {
  position: static;
  padding: 6px 9px; font-size: 10px;
  animation: pf-ats-slam-once .42s cubic-bezier(.34, 1.56, .64, 1) .5s both;
}
@keyframes pf-ats-slam-once {
  from { opacity: 0; transform: rotate(-9deg) scale(2.2); }
  to   { opacity: .95; transform: rotate(-9deg) scale(1); }
}

/* ---- the verdict headline, in the display face -------------------------- */
body.folio-v5 .ats-verdict-block.pf-ats-verdict h2 { letter-spacing: -.03em; }
body.folio-v5 .ats-verdict-block.pf-ats-verdict .ats-best-move > span > b {
  width: fit-content; max-width: 100%;
  box-shadow: inset 0 -.4em 0 color-mix(in srgb, var(--cx-cons-vermilion) 16%, transparent) !important;
}

/* ---- the diagnostics, as hairline ledger rows --------------------------- */
body.folio-v5 .ats-diagnostic-ledger.pf-ats-ledger article {
  position: relative;
  border-bottom: 1px solid var(--cx-cons-hair);
  transition: background .2s var(--cx-ease);
}
body.folio-v5 .ats-diagnostic-ledger.pf-ats-ledger article:hover { background: color-mix(in srgb, var(--cx-cons-bone) 55%, transparent); }
body.folio-v5 .ats-diagnostic-ledger.pf-ats-ledger article.is-flagged::before {
  content: ""; position: absolute; left: 0; top: 10px; bottom: 10px; width: 3px;
  background: var(--cx-cons-vermilion);
}
/* the row reads as one line: the name and its meta on the left, the bar on the
   right of the same line, then the score and the sticker. It was three stacked
   things in an 80px band. */
body.folio-v5 .ats-diagnostic-ledger.pf-ats-ledger article > div {
  min-width: 0; display: grid;
  grid-template-columns: minmax(0, 1fr) clamp(90px, 12vw, 150px);
  align-items: center; column-gap: 18px;
}
body.folio-v5 .ats-diagnostic-ledger.pf-ats-ledger article > div em { grid-column: 2; grid-row: 1 / -1; }
body.folio-v5 .ats-diagnostic-ledger.pf-ats-ledger article > div em { border-radius: 2px; background: var(--cx-cons-hair); }
body.folio-v5 .ats-diagnostic-ledger.pf-ats-ledger article > div em span { background: var(--cx-ink); }
body.folio-v5 .ats-diagnostic-ledger.pf-ats-ledger article.is-flagged > div em span { background: var(--cx-cons-vermilion); }
body.folio-v5 .ats-diagnostic-ledger.pf-ats-ledger article > strong { color: var(--cx-ink); }

/* the dimension verdicts, as stickers */
body.folio-v5 .ats-diagnostic-ledger.pf-ats-ledger article > mark.pf-stick {
  justify-self: end;
  padding: 7px 12px; border-radius: 999px;
  border: 1.5px solid var(--cx-ink); background: var(--cx-cons-paper); color: var(--cx-ink);
  box-shadow: 2px 2px 0 var(--cx-ink) !important;
  font: 700 9px/1 var(--cx-font-ui); letter-spacing: .06em; text-transform: uppercase;
  transform: rotate(-1.4deg);
}
body.folio-v5 .ats-diagnostic-ledger.pf-ats-ledger article > mark.pf-stick.red {
  border-color: var(--cx-cons-vermilion); color: var(--cx-cons-vermilion-deep);
  box-shadow: 2px 2px 0 var(--cx-cons-vermilion) !important;
  transform: rotate(1.6deg);
}

/* ---- the summary strip + the honest aside under it ---------------------- */
body.folio-v5 .ats-report-summary.pf-ats-summary { background: var(--cx-cons-bone); }
body.folio-v5 .ats-report-summary.pf-ats-summary > span + span { border-left: 1px solid var(--cx-cons-hair); }
body.folio-v5 .pf-ats-report .pf-ats-reporthand {
  margin: 10px 0 0; padding: 0 24px;
  transform: rotate(-1.1deg); transform-origin: left center;
  font-size: 18px;
}

/* ---- priority fixes: the red edge marks --------------------------------- */
body.folio-v5 .pf-ats-fixlayout .ats-fix-index button.on {
  background: var(--cx-cons-bone);
  box-shadow: inset 3px 0 0 var(--cx-cons-vermilion) !important;
}
body.folio-v5 .pf-ats-fixlayout .ats-fix-index button.on > i,
body.folio-v5 .pf-ats-fixlayout .ats-fix-index button.on > em { color: var(--cx-cons-vermilion); }
body.folio-v5 .pf-ats-fixlayout .ats-fix-focus.pf-sheet {
  position: relative;
  border: 1px solid var(--cx-cons-hair);
  box-shadow: var(--cx-shadow-raise) !important;
  transform: none;
}
body.folio-v5 .pf-ats-fixlayout .ats-fix-focus.pf-sheet:hover { transform: none; box-shadow: var(--cx-shadow-raise) !important; }
body.folio-v5 .pf-ats-fixlayout .ats-fix-focus.pf-sheet::before {
  content: ""; position: absolute; left: 0; top: 22px; bottom: 22px; width: 3px;
  border-radius: 0 2px 2px 0;
  background: var(--cx-cons-vermilion);
}
body.folio-v5 .pf-ats-fixlayout .ats-fix-focus .pf-ats-fixstamp {
  position: absolute; right: clamp(18px, 3vw, 34px); top: clamp(20px, 3vw, 34px);
  padding: 7px 10px; font-size: 10px;
  animation: pf-ats-slam-once .42s cubic-bezier(.34, 1.56, .64, 1) .25s both;
}

/* ---- verified + history: ledger rows, red marks on the open one --------- */
body.folio-v5 .pf-ats-verified .ats-evidence-list article > i { color: var(--cx-cons-vermilion); }
body.folio-v5 .pf-ats-history .ats-history-list button.on {
  box-shadow: inset 3px 0 0 var(--cx-cons-vermilion) !important;
  background: var(--cx-cons-bone);
}
body.folio-v5 .pf-ats-history .ats-history-list button.on > em { color: var(--cx-cons-vermilion); }

/* ---- the handoff link, when the checked file is not a folio résumé ------
   It carries a second line saying why it cannot open a section, so the offer
   and the truth arrive together instead of one landing on the other. */
body.folio-v5 .pf-ats-fixlayout .pf-ats-fixnote {
  margin: 18px 0 14px; max-width: 46ch;
  font: 400 12.5px/1.55 var(--cx-font-ui); color: var(--cx-cons-char);
}

/* ---- the arithmetic, printed under the ledger ---------------------------
   AUDIT 2026-09-03. The headline and the three rows under it disagreed on
   screen with nothing to join them: 25·85·37 against their own 30/30/40
   weights come to 48, and the published score was 15. The gap is the engine's
   evidence ceiling and the engine names it in `algorithm`. This row prints the
   sum, the published number and — when they differ — why. Nothing here
   computes a score; it restates the sealed one and the weights beside it. */
body.folio-v5 .ats-diagnostic-ledger.pf-ats-ledger .pf-ats-arith {
  display: grid; grid-template-columns: auto minmax(0, 1fr);
  gap: 4px 16px; align-items: baseline;
  margin: 0; padding: 13px 24px;
  background: var(--cx-cons-bone);
  border-top: 1px solid var(--cx-cons-hair);
}
body.folio-v5 .pf-ats-arith > b {
  font: 600 9px/1 var(--cx-font-ui); letter-spacing: .09em; text-transform: uppercase;
  color: var(--cx-cons-quiet); white-space: nowrap;
}
body.folio-v5 .pf-ats-arith > span {
  font: 400 12.5px/1.5 var(--cx-font-ui); color: var(--cx-ink);
}
body.folio-v5 .pf-ats-arith > span strong { font-weight: 650; }
body.folio-v5 .pf-ats-arith > em {
  grid-column: 2; font: 400 10.5px/1.4 var(--cx-font-mono); font-style: normal;
  color: var(--cx-cons-quiet);
}

/* ---- the point cost a fix carries -------------------------------------- */
body.folio-v5 .pf-ats-fixlayout .ats-fix-focus .pf-ats-cost {
  margin: 14px 0 0; max-width: 52ch;
  font: 400 11.5px/1.55 var(--cx-font-ui); color: var(--cx-cons-char);
}
body.folio-v5 .pf-ats-fixlayout .ats-fix-focus .pf-ats-cost b {
  font-weight: 650; color: var(--cx-cons-vermilion-deep);
}
/* the index carries the same figure, so the order is legible as an order */
body.folio-v5 .pf-ats-fixlayout .ats-fix-index button > em {
  font: 600 12px/1 var(--cx-font-ui); font-style: normal; color: var(--cx-cons-char);
  white-space: nowrap;
}
body.folio-v5 .pf-ats-fixlayout .ats-fix-index button > em small {
  margin-left: 3px; font: 500 8px/1 var(--cx-font-ui); color: var(--cx-cons-quiet);
  text-transform: uppercase; letter-spacing: .06em;
}

/* ---- verified checks: ONE LINE each -------------------------------------
   A passed check was a 72px card carrying three stacked lines for one fact.
   Twenty of them was a scroll with nothing in it. The row is now a line —
   dimension, check, the evidence the checker wrote — and everything past the
   sixth waits behind its own honest count rather than being dropped. */
body.folio-v5 .pf-ats-verified .ats-evidence-list article > span {
  min-width: 0; display: grid;
  grid-template-columns: 104px minmax(120px, 168px) minmax(0, 1fr);
  align-items: baseline; gap: 4px 14px;
}
body.folio-v5 .pf-ats-verified .ats-evidence-list article > span > p {
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
body.folio-v5 .pf-ats-verified .pf-ats-more { margin-top: 10px; }
body.folio-v5 .pf-ats-verified .pf-ats-more > summary {
  min-height: 38px; display: flex; align-items: center; gap: 8px;
  padding: 0 16px; cursor: pointer; list-style: none;
  border: 1px dashed var(--cx-cons-hair); border-radius: 8px;
  font: 600 10.5px/1 var(--cx-font-ui); letter-spacing: .04em; color: var(--cx-cons-char);
}
body.folio-v5 .pf-ats-verified .pf-ats-more > summary::-webkit-details-marker { display: none; }
body.folio-v5 .pf-ats-verified .pf-ats-more > summary::after { content: "+"; margin-left: auto; color: var(--cx-cons-vermilion); }
body.folio-v5 .pf-ats-verified .pf-ats-more[open] > summary::after { content: "–"; }
body.folio-v5 .pf-ats-verified .pf-ats-more > summary:hover { background: var(--cx-cons-bone); }
body.folio-v5 .pf-ats-verified .pf-ats-more .ats-evidence-list { margin-top: 10px; }

/* ---- the completion toast leaves the navigation alone -------------------
   AUDIT 2026-09-03: premium.css pins the toast bottom-LEFT, which is exactly
   where the studio rail is (0–216px). "ATS scan complete · 15/100" was landing
   across the rail's status foot for its 3.6s life. On this route it sits on the
   other side, over the report's own paper, where it covers no control. */
body.folio-v5:has(.ats-product) .toast {
  left: auto;
  right: var(--cx-s6);
  bottom: var(--cx-s6);
}

/* ---- §B.9 · THE REPORT'S RHYTHM ----------------------------------------
   FOUNDER 2026-09-03: "it looks lengthy and needs scroll." The measurement,
   at 1440 on a THIN résumé: 1394px of report — and the panels were carrying
   40–42px of padding each, a 22px band per ledger row and a 72px card per
   passed check. conservatory.css §5.5 owns those values for every ATS panel,
   so the tightening answers there, at the same specificity, and changes
   NOTHING but spacing and type size: no content is removed by this block.  */
body.folio-v5 .ats-score-block { padding: 24px 26px; }
body.folio-v5 .ats-verdict-block { padding: 26px 30px; }
body.folio-v5 .ats-best-move { padding: 16px 0 0; margin-top: 16px; }
body.folio-v5 .ats-best-move b { font-size: 17px; }
body.folio-v5 .ats-diagnostic-ledger { padding: 22px 28px 6px; margin-top: 12px; }
body.folio-v5 .ats-diagnostic-ledger > header { padding: 0 0 6px; }
body.folio-v5 .ats-diagnostic-ledger > header h2 { margin: 7px 0 0; font-size: 26px; }
body.folio-v5 .ats-diagnostic-ledger article { padding: 12px 4px; }
body.folio-v5 .ats-diagnostic-ledger article b { font-size: 16px; }
body.folio-v5 .ats-diagnostic-ledger article small { font-size: 11.5px; }
body.folio-v5 .ats-diagnostic-ledger article strong { font-size: 25px; }
body.folio-v5 .ats-diagnostic-ledger article mark { padding: 6px 11px; font-size: 9px; }
body.folio-v5 .ats-report-summary { padding: 14px 26px; margin-top: 12px; }
body.folio-v5 .ats-report-summary strong { font-size: 22px; }
body.folio-v5 .ats-focused-workspace,
body.folio-v5 .ats-evidence-workspace,
body.folio-v5 .ats-history-workspace { padding: 24px 28px; }
body.folio-v5 .ats-focused-workspace h2,
body.folio-v5 .ats-evidence-workspace h2,
body.folio-v5 .ats-history-workspace h2 { margin: 8px 0 0; font-size: clamp(24px, 2.4vw, 32px); }
body.folio-v5 .ats-fix-index button { padding: 12px 18px; border-radius: 12px; }
body.folio-v5 .ats-history-list button { padding: 12px 18px; }
/* a passed check is a LINE. It was a paper card inside a paper card, three
   stacked strings tall, for one sentence of evidence. */
body.folio-v5 .pf-ats-verified .ats-evidence-list { border-radius: 12px; }
body.folio-v5 .pf-ats-verified .ats-evidence-list article {
  padding: 9px 18px; border-radius: 0; background: transparent;
  border-bottom: 1px solid var(--cx-cons-hair);
}
body.folio-v5 .pf-ats-verified .ats-evidence-list article:last-child { border-bottom: 0; }
body.folio-v5 .pf-ats-verified .ats-evidence-list article b { font-size: 12.5px; }

/* ---- the rail: a red active edge, on the ATS route only ----------------- */
body.folio-v5:has(.ats-product) .studio-product-nav .tool-workflow-step.on {
  box-shadow: inset 3px 0 0 var(--cx-cons-vermilion) !important;
}
body.folio-v5:has(.ats-product) .studio-product-nav .tool-workflow-status[data-status="ready"] > span > i {
  background: var(--cx-cons-vermilion);
}

@media (prefers-reduced-motion: reduce) {
  /* the threshold's own reduced-motion finals live with the threshold, in §A. */
  body.folio-v5 .ats-score-block.pf-ats-scoreblock .pf-ats-stamp,
  body.folio-v5 .pf-ats-fixlayout .ats-fix-focus .pf-ats-fixstamp {
    animation: none; opacity: .95; transform: rotate(-9deg) scale(1);
  }
}

/* ---- the score panel earns its height -----------------------------------
   AUDIT 2026-09-01 @1440: the verdict column set the row height (427px) and
   the score column stretched to match it, centring a 206px stack inside — a
   292x427 bone panel that was 52% empty paper. The panel is not made smaller
   (the pair must stay a pair); the SCORE is made the size the brand says it
   is — the ring is the showcase object, so it grows with the paper it is on.
   Nothing here computes, rounds or re-bands the number.                    */
@media (min-width: 1101px) {
  body.folio-v5 .ats-score-block.pf-ats-scoreblock .ats-score-ring {
    width: 176px; height: 176px; --ring-hole: 14px; margin: 12px auto 12px;
  }
  body.folio-v5 .ats-score-block.pf-ats-scoreblock .ats-score-ring strong { font-size: 60px; }
  body.folio-v5 .ats-score-block.pf-ats-scoreblock .ats-score-ring small { font-size: 13px; }
}
@media (min-width: 1301px) {
  body.folio-v5 .ats-score-block.pf-ats-scoreblock .ats-score-ring { width: 192px; height: 192px; }
}

/* ---- the read receipt ---------------------------------------------------
   "we show what was read" is a promise the ATS surfaces make. This is where
   it is kept: counts of the exact text the score was computed from, printed
   under the summary. It is a receipt, not a panel — hairline, no box.     */
body.folio-v5 .pf-ats-report .pf-ats-read {
  display: grid; grid-template-columns: auto minmax(0, 1fr);
  gap: 4px 16px; align-items: baseline;
  margin: 12px 0 0; padding: 14px 24px;
  border-radius: 12px; background: var(--cx-cons-bone);
}
body.folio-v5 .pf-ats-report .pf-ats-read > b {
  font: 600 10px/1 var(--cx-font-ui); letter-spacing: .08em; text-transform: uppercase;
  color: var(--cx-cons-quiet); white-space: nowrap;
}
body.folio-v5 .pf-ats-report .pf-ats-read > span {
  font: 400 14px/1.45 var(--cx-font-ui); color: var(--cx-ink);
}
body.folio-v5 .pf-ats-report .pf-ats-read > em {
  grid-column: 1 / -1; font: 400 12px/1.5 var(--cx-font-ui); font-style: normal;
  color: var(--cx-cons-char);
}

/* ---- the phone ---------------------------------------------------------- */
@media (max-width: 900px) {
  body.folio-v5 .pf-ats-report .pf-ats-read { padding: 18px 20px; grid-template-columns: minmax(0, 1fr); }
  body.folio-v5 .ats-diagnostic-ledger.pf-ats-ledger .pf-ats-arith { grid-template-columns: minmax(0, 1fr); padding: 12px 16px; }
  body.folio-v5 .pf-ats-arith > em { grid-column: 1; }
  body.folio-v5 .ats-diagnostic-ledger.pf-ats-ledger article > div { grid-template-columns: minmax(0, 1fr); row-gap: 7px; }
  body.folio-v5 .ats-diagnostic-ledger.pf-ats-ledger article > div em { grid-column: 1; grid-row: auto; }
  body.folio-v5 .pf-ats-verified .ats-evidence-list article > span { grid-template-columns: minmax(0, 1fr); }
  body.folio-v5 .pf-ats-verified .ats-evidence-list article > span > p { white-space: normal; }
  body.folio-v5 .ats-score-block.pf-ats-scoreblock > span.pf-ats-stamp::before { content: none !important; }
body.folio-v5 .ats-score-block.pf-ats-scoreblock > span.pf-ats-stamp {
  font-family: var(--cx-font-ui); letter-spacing: .09em; color: var(--cx-cons-vermilion);
}
/* the slam starts at scale 2.2. On a 390 phone the score panel's right edge is
   only 10px from the window, so for ~0.4s the stamp grew 30px past it and was
   clipped by the body. Anchoring the growth to its own right edge keeps the
   whole performance on the paper — the stamp still slams, it just slams
   inwards. (Measured at 390: rest right edge 370, peak right edge 370.) */
body.folio-v5 .ats-score-block.pf-ats-scoreblock .pf-ats-stamp { transform-origin: right center; }
  body.folio-v5 .pf-ats-report .pf-ats-reporthand { padding: 0 18px; font-size: 17px; }
}


/* ============================================================================
   §C · THE WORKSPACE — /workspace and /workspace/<tool>
   ----------------------------------------------------------------------------
   Founder, 2026-09-01: "broken and also not understandable to a normal user,
   fix it." The audit found the page saying almost nothing: three of the four
   cards printed their own name twice ("Résumé / Résumé / Not started"), the
   one sentence that explained each tool was display:none on this surface
   (s1.css:1476), a "Not started" card drew a FULL document above the words
   that said it did not exist, the portfolio tile was a solid black field
   (banned), the rail's first entry pointed at an anchor the page never
   rendered, and the page told the visitor to add a job while offering nothing
   to press. app.js carries the structure fixes; these are their clothes.

   Owned by the ATS worker. Scoped to the workspace surfaces only — no rule
   here may touch a résumé, cover or portfolio editor.
   ========================================================================== */

/* ---- the plain-words line every card now carries ------------------------ */
body.folio-v5 .cxm-card .pf-ws-what {
  margin: 10px 0 0;
  font: 400 13px/1.55 var(--cx-font-ui);
  color: var(--cx-cons-char);
}
body.folio-v5 .cxm-dashcards .cxm-card .pf-ws-what { margin-top: 8px; }

/* ---- blank paper, for a thing that does not exist yet -------------------
   The honest picture: an empty sheet with the tool's name on it and a hand
   note saying so. No ruled lines, no salutation, no invented web address. */
body.folio-v5 .cxm-tile.pf-ws-blank {
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: 8px; text-align: center;
  background: var(--cx-cons-paper);
  border: 1px dashed var(--cx-cons-hair);
}
/* --cx-cons-faint is documented DECORATIVE-only (3.4:1). This is a readable
   word at 20px/400, which is not "large text", so it takes the quiet ink
   (#635e51 = 6.19:1 on sheet) instead. Measured, not assumed. */
body.folio-v5 .cxm-tile.pf-ws-blank > span {
  font: 400 20px/1.1 var(--cx-font-display); color: var(--cx-cons-quiet);
}
body.folio-v5 .cxm-tile.pf-ws-blank > em {
  font: 400 15px/1 var(--cx-font-hand, var(--cx-font-ui)); font-style: normal;
  color: var(--cx-cons-vermilion); transform: rotate(-1.4deg);
}

/* ---- the portfolio tile is paper, not a dark field ----------------------
   s1.css:1326 painted it --cx-ink-abs with paper-white type on top. Dark
   fields are banned by the brand (§3, founder rulings 08-28 → 09-01). It
   becomes what the other three are: a sheet, with the address in mono. */
body.folio-v5 .cxm-tile-portfolio {
  background: var(--cx-cons-paper) !important;
  border: 1px solid var(--cx-cons-hair);
}
body.folio-v5 .cxm-tile-portfolio .cxm-tile-url { color: var(--cx-cons-quiet) !important; }
body.folio-v5 .cxm-tile-portfolio .cxm-tile-claim { color: var(--cx-ink) !important; }

/* ---- the one door on each card ------------------------------------------
   On the dashboard the card has no other control (s1.css hides the facts and
   the template picker there), so the whole card is the door: the anchor is
   stretched over it and the paper lifts under the cursor. On the by-tool view
   the card DOES carry other controls, so the stretch is not applied there and
   the button stays a button. */
body.folio-v5 .cxm-dashcards .cxm-card { position: relative; transition: transform .22s var(--cx-ease); }
body.folio-v5 .cxm-dashcards .cxm-card:hover { transform: translateY(-3px); }
body.folio-v5 .cxm-dashcards .cxm-card .pf-ws-go::after {
  content: ""; position: absolute; inset: 0; border-radius: inherit; z-index: 0;
}
/* every OTHER control on the card stays reachable above the stretched sheet —
   a card-wide door that swallows Duplicate is a new broken thing, not a fix. */
body.folio-v5 .cxm-dashcards .cxm-card .cxm-actions > *:not(.pf-ws-go),
body.folio-v5 .cxm-dashcards .cxm-card a:not(.pf-ws-go),
body.folio-v5 .cxm-dashcards .cxm-card button,
body.folio-v5 .cxm-dashcards .cxm-card select,
body.folio-v5 .cxm-dashcards .cxm-card .pf-ws-go { position: relative; z-index: 1; }
body.folio-v5 .cxm-dashcards .cxm-card:focus-within { outline: 2px solid var(--cx-cons-vermilion); outline-offset: 4px; }

/* ---- the applications band, when there is no job yet -------------------- */
body.folio-v5 .cxm-apps .pf-ws-appsempty {
  margin: 0; max-width: 62ch;
  font: 400 14px/1.65 var(--cx-font-ui); color: var(--cx-cons-char);
}

/* ---- the empty folio: four doors that say what the four tools are ------- */
body.folio-v5 .pf-ws-locked .pf-ws-lockedhand {
  margin: 10px 0 0; font-size: 19px;
  transform: rotate(-1.1deg); transform-origin: left center;
}
body.folio-v5 .pf-ws-doors {
  display: grid; grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 14px; margin: 30px 0 26px; width: 100%; max-width: 1000px;
}
body.folio-v5 .pf-ws-door {
  display: flex; flex-direction: column; gap: 12px;
  padding: 22px 20px 20px; border-radius: 14px;
  background: var(--cx-cons-paper); border: 1px solid var(--cx-cons-hair);
  text-align: left;
}
body.folio-v5 .pf-ws-door-kicker {
  display: flex; align-items: baseline; gap: 8px;
  font: 600 10px/1 var(--cx-font-ui); letter-spacing: .09em; text-transform: uppercase;
  color: var(--cx-ink);
}
body.folio-v5 .pf-ws-door-kicker > i {
  font: 600 9px/1 var(--cx-font-mono); font-style: normal; letter-spacing: .1em;
  color: var(--cx-cons-vermilion);
}
body.folio-v5 .pf-ws-door > p {
  margin: 0; flex: 1 1 auto;
  font: 400 13px/1.55 var(--cx-font-ui); color: var(--cx-cons-char);
}
body.folio-v5 .pf-ws-door-cta {
  align-self: flex-start;
  font: 400 13.5px/1 var(--cx-font-ui); color: var(--cx-ink);
  text-decoration: none;
  border-bottom: 1.5px solid var(--cx-cons-vermilion); padding-bottom: 3px;
}
body.folio-v5 .pf-ws-door-cta:hover { color: var(--cx-cons-vermilion-deep); }
/* the recommended start is the page's ONE ink action. It replaces the second
   "Build my résumé — free" button that used to stand under the doors and send
   people to the same address as door 01 — one CTA per verb, not five. */
body.folio-v5 .pf-ws-door-cta.is-ink {
  background: var(--cx-ink); color: var(--cx-cons-paper);
  border: 0; border-radius: 12px; padding: 12px 18px;
  min-height: 44px; display: inline-flex; align-items: center;
}
body.folio-v5 .pf-ws-door-cta.is-ink:hover { background: var(--cx-cons-ink-deep, #0d0c09); color: var(--cx-cons-paper); }

/* the "no job yet" block on the populated dashboard keeps its own door */
body.folio-v5 .career-workspace .cx-empty .button { margin-top: 18px; }

@media (max-width: 1080px) {
  body.folio-v5 .pf-ws-doors { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 620px) {
  body.folio-v5 .pf-ws-doors { grid-template-columns: minmax(0, 1fr); gap: 10px; margin: 22px 0 20px; }
  body.folio-v5 .pf-ws-door { padding: 18px 16px 16px; }
  body.folio-v5 .cxm-card .pf-ws-what { font-size: 13.5px; }
}

/* ---- the phone: the folio leads with the folio -------------------------
   AUDIT 2026-09-01 @390. `.career-next-rail` carries order:-1, which on the
   phone's single column put a SUGGESTION and a three-row statistics receipt
   above everything, and pushed the first artefact card 685px down the page.
   The page is called "Everything you've made" — on a phone it opened on
   neither. The four papers come first, exactly as they do at 1440; the
   suggestion keeps its place, one screen later. The 64px runway margin is
   also trimmed, because it was measured for a column layout that no longer
   starts with a headline. */
@media (max-width: 900px) {
  body.folio-v5 .career-workspace .career-runway { margin-top: 26px; }
  body.folio-v5 .career-workspace .career-runway > .career-next-rail { order: 0; }
  body.folio-v5 .career-workspace .career-runway > .cxm-dashcards { order: -1; }
}
