/* Tests (owner, 2026-10-08), the /student/tests tab (tests-view.js): moved from the lab's lab-test.css. */
.test-screen{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--vq-space-3)}
.test-label{margin:var(--vq-space-2) 0 0;color:var(--vq-ink-muted);font:var(--vq-weight-bold) var(--vq-text-sm)/1.2 var(--vq-font)}
.test-chips{display:flex;flex-wrap:wrap;gap:var(--vq-space-2)}
.test-chips button{min-height:40px;padding:0 var(--vq-space-4);border:var(--vq-border);border-radius:var(--vq-radius-sm);background:var(--vq-surface);color:var(--vq-ink);font:var(--vq-weight-bold) var(--vq-text-sm)/1 var(--vq-font)}
.test-chips button.is-on{background:var(--vq-ink);color:var(--vq-on-ink)}
.test-checks{display:grid;gap:var(--vq-space-2);margin:0;padding:0;list-style:none}
.test-checks label{display:flex;align-items:center;gap:var(--vq-space-3);min-height:44px;padding:0 var(--vq-space-3);border:var(--vq-border);border-radius:var(--vq-radius-sm);color:var(--vq-ink);font:var(--vq-weight-medium) var(--vq-text-md)/1.3 var(--vq-font)}
.test-summary,.test-note{margin:0;color:var(--vq-ink-muted);font:var(--vq-weight-medium) var(--vq-text-sm)/1.4 var(--vq-font)}
.test-card{display:grid;gap:var(--vq-space-2);padding:var(--vq-space-4);border:var(--vq-border);border-radius:var(--vq-radius-sm);background:var(--vq-surface)}
.test-card h2{margin:0;color:var(--vq-ink);font:var(--vq-weight-bold) var(--vq-text-xl, 1.35rem)/1.2 var(--vq-font)}
.test-card p{margin:0;color:var(--vq-ink);font:var(--vq-weight-medium) var(--vq-text-md)/1.4 var(--vq-font)}
.test-eyebrow{margin:0;color:var(--vq-accent);font:var(--vq-weight-bold) var(--vq-text-sm)/1.2 var(--vq-font);letter-spacing:.08em;text-transform:uppercase}
.test-paper{padding:var(--vq-space-4);border:1px solid var(--vq-sheet-rule);border-radius:2px;background:var(--vq-sheet);color:var(--vq-sheet-ink)}
.test-paper .test-bar,.test-paper .test-clock,.test-paper .test-on-paper{border-color:var(--vq-sheet-ink)}
.test-paper .primary-action{margin-top:var(--vq-space-3)}
.test-bar{display:flex;justify-content:space-between;align-items:center;padding-bottom:var(--vq-space-3);border-bottom:var(--vq-border);font:var(--vq-weight-bold) var(--vq-text-sm)/1 var(--vq-font)}
.test-clock{padding:var(--vq-space-1) var(--vq-space-3);border:var(--vq-border);border-radius:var(--vq-radius-sm)}
.test-section{display:flex;justify-content:space-between;align-items:baseline;margin:var(--vq-space-3) 0 0;font:var(--vq-weight-bold) var(--vq-text-md)/1.2 var(--vq-font)}
.test-section small{font-weight:var(--vq-weight-medium);opacity:.75}
.test-q{display:grid;grid-template-columns:28px minmax(0,1fr) 24px;gap:var(--vq-space-2);font:var(--vq-weight-medium) var(--vq-text-md)/1.45 var(--vq-font)}
.test-q p{margin:0 0 var(--vq-space-2);white-space:pre-line}
.test-num{font-weight:var(--vq-weight-bold)}
.test-marks{text-align:right;font-weight:var(--vq-weight-bold)}
.test-q p.test-or{font:var(--vq-weight-bold) var(--vq-text-sm)/1.2 var(--vq-font);letter-spacing:.08em;text-align:center}
.test-note{margin:var(--vq-space-3) 0 0;font:var(--vq-weight-medium) var(--vq-text-sm)/1.4 var(--vq-font);opacity:.85}
.test-options{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--vq-space-1);margin:0;padding:0;list-style:none}
.test-options li{justify-self:start;max-width:100%;overflow-x:auto;box-sizing:border-box;padding:var(--vq-space-1) var(--vq-space-2);border:2px solid transparent;border-radius:999px;cursor:pointer}
.test-options li.is-picked{border-color:var(--vq-sheet-pen);color:var(--vq-sheet-pen)}
.test-on-paper{display:inline-block;padding:var(--vq-space-1) var(--vq-space-3);border:var(--vq-border);border-style:dashed;border-radius:var(--vq-radius-sm);font:var(--vq-weight-bold) var(--vq-text-sm)/1.2 var(--vq-font)}
.test-pages{display:grid;gap:var(--vq-space-2);margin:0;padding:0;list-style:none}
.test-pages li{display:flex;justify-content:space-between;align-items:center;min-height:52px;padding:0 var(--vq-space-3);border:var(--vq-border);border-radius:var(--vq-radius-sm);color:var(--vq-ink);font:var(--vq-weight-medium) var(--vq-text-md)/1 var(--vq-font)}
.test-pages li.is-done strong{color:var(--vq-accent)}
.test-snap{min-height:40px;padding:0 var(--vq-space-4);border:var(--vq-border);border-radius:var(--vq-radius-sm);background:var(--vq-ink);color:var(--vq-on-ink);font:var(--vq-weight-bold) var(--vq-text-sm)/1 var(--vq-font)}
.test-score{font-size:3rem}
.result-hero{display:grid;grid-template-columns:1fr 1fr;gap:var(--vq-space-3);align-items:end}
.result-hero>div{display:grid;gap:var(--vq-space-1)}
.result-hero>div[hidden]{display:none}
.result-hero>div+div{justify-items:end;text-align:right}
.result-hero span{color:var(--vq-ink-muted);font:var(--vq-weight-bold) var(--vq-text-sm)/1.2 var(--vq-font)}
.result-hero small{color:var(--vq-ink-muted);font-size:var(--vq-text-xs);line-height:1.3}
.result-hero .test-score{margin:0;font:var(--vq-weight-bold) var(--vq-text-xl)/1 var(--vq-font);white-space:nowrap}
.test-sections{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--vq-space-2);margin:0}
.test-sections div{padding:var(--vq-space-3);border:var(--vq-border);border-radius:var(--vq-radius-sm);text-align:center}
.test-sections dt{color:var(--vq-ink-muted);font:var(--vq-weight-bold) var(--vq-text-sm)/1 var(--vq-font)}
.test-sections dd{margin:var(--vq-space-1) 0 0;color:var(--vq-ink);font:var(--vq-weight-bold) var(--vq-text-lg, 1.15rem)/1 var(--vq-font)}
.test-leaks{display:grid;gap:var(--vq-space-2);margin:0;padding:0;list-style:none}
.test-leaks li{display:grid;gap:var(--vq-space-1);padding:var(--vq-space-3);border:var(--vq-border);border-radius:var(--vq-radius-sm);color:var(--vq-ink);font:var(--vq-weight-medium) var(--vq-text-sm)/1.35 var(--vq-font)}
.test-earned{margin:0;color:var(--vq-accent);font:var(--vq-weight-bold) var(--vq-text-xl, 1.35rem)/1 var(--vq-font)}
.test-all{margin-left:var(--vq-space-2);padding:0;border:0;background:none;color:var(--vq-accent);font:var(--vq-weight-bold) var(--vq-text-sm)/1.3 var(--vq-font);text-decoration:underline;cursor:pointer}
.test-reading{margin:var(--vq-space-2) 0 0;padding:var(--vq-space-2) var(--vq-space-3);border:1px dashed var(--vq-sheet-ink);border-radius:2px;font:var(--vq-weight-bold) var(--vq-text-sm)/1.4 var(--vq-font)}
#order-start:disabled{opacity:.5;cursor:not-allowed}
/* Mobile first (owner, 2026-10-08: 90% of children use a phone). Compact < 480px, wide >= 651px (tokens.css). */
#test-steps{overflow-x:auto;scrollbar-width:none}
#test-steps button{flex:0 0 auto}
.test-q{margin-top:var(--vq-space-3)}
.test-q + .test-section{margin-top:var(--vq-space-5, 24px)}
@media (max-width:479px){
  .test-lab{padding:var(--vq-space-3) var(--vq-space-2)}
  .test-paper{padding:var(--vq-space-3)}
  .test-q{grid-template-columns:22px minmax(0,1fr) 14px;gap:var(--vq-space-1)}
  .test-bar{gap:var(--vq-space-2)}
}
@media (min-width:651px){
  .test-options{grid-template-columns:repeat(2,minmax(0,1fr));column-gap:var(--vq-space-3)}
}
.test-shots{display:grid;gap:var(--vq-space-2);margin:0;padding:0;list-style:none}
/* Page cards a quarter shorter (owner, 2026-10-21): a smaller photo, tighter padding. */
.test-shot{display:flex;flex-wrap:wrap;align-items:center;gap:var(--vq-space-2);padding:var(--vq-space-1) var(--vq-space-2);border:var(--vq-border);border-radius:var(--vq-radius-sm);color:var(--vq-ink);font:var(--vq-weight-bold) var(--vq-text-md)/1 var(--vq-font)}
.test-shot img,.test-shot-blank{flex:none;width:48px;height:62px;object-fit:cover;border-radius:2px;background:var(--vq-sheet)}
.test-shot > span:not(.test-shot-blank){flex:1 1 auto;min-width:0}
.test-shot button:disabled{opacity:.5}
.test-shot button{min-height:40px;padding:0 var(--vq-space-3);border:var(--vq-border);border-radius:var(--vq-radius-sm);background:none;color:var(--vq-ink);font:var(--vq-weight-bold) var(--vq-text-sm)/1 var(--vq-font)}
.test-camera{display:flex;align-items:center;justify-content:center;min-height:var(--vq-button-height);border:2px dashed var(--vq-ink);border-radius:var(--vq-radius-sm);color:var(--vq-ink);font:var(--vq-weight-bold) 1rem/1 var(--vq-font);cursor:pointer}
#handin-submit:disabled{opacity:.5;cursor:not-allowed}
@media (max-width:479px){.test-shot img,.test-shot-blank{width:42px;height:52px}.test-shot button{padding:0 var(--vq-space-2)}}
.test-history{display:grid;gap:var(--vq-space-2);margin:0;padding:0;list-style:none}
.test-row{display:flex;justify-content:space-between;align-items:center;gap:var(--vq-space-3);padding:var(--vq-space-3);border:var(--vq-border);border-radius:var(--vq-radius-sm);color:var(--vq-ink)}
.test-row > span:first-child{display:grid;gap:2px;min-width:0}
.test-row strong{font:var(--vq-weight-bold) var(--vq-text-md)/1.3 var(--vq-font)}
.test-row small{color:var(--vq-ink-muted);font:var(--vq-weight-medium) var(--vq-text-sm)/1.35 var(--vq-font)}
.test-row-end{display:grid;justify-items:end;gap:var(--vq-space-2);flex:0 0 auto}
.test-row-end em{font:var(--vq-weight-bold) var(--vq-text-md)/1 var(--vq-font);font-style:normal}
.test-row.is-marking .test-row-end em{color:var(--vq-accent)}
.test-row-end button{min-height:36px;padding:0 var(--vq-space-3);border:var(--vq-border);border-radius:var(--vq-radius-sm);background:var(--vq-ink);color:var(--vq-on-ink);font:var(--vq-weight-bold) var(--vq-text-sm)/1 var(--vq-font)}
.test-row-end button:disabled{opacity:.4}
.test-latest .test-row{border-width:2px}
.test-result-head{display:flex;justify-content:space-between;align-items:baseline;gap:var(--vq-space-3)}
.test-sections{grid-template-columns:repeat(auto-fit,minmax(88px,1fr))}
.test-marksheet{display:grid;gap:0;margin:0;padding:0;list-style:none;border:var(--vq-border);border-radius:var(--vq-radius-sm)}
.test-marksheet li{display:grid;grid-template-columns:24px 1fr auto;gap:var(--vq-space-2);padding:var(--vq-space-3);border-bottom:var(--vq-border);color:var(--vq-ink);font:var(--vq-weight-medium) var(--vq-text-sm)/1.4 var(--vq-font)}
.test-marksheet li:last-child{border-bottom:0}
.test-marksheet small{display:block;margin-top:var(--vq-space-1);color:var(--vq-accent);font-weight:var(--vq-weight-bold)}
.test-marksheet strong{font:var(--vq-weight-bold) var(--vq-text-md)/1.2 var(--vq-font)}
.test-marksheet li.is-lost strong{color:var(--vq-accent)}
/* Right and wrong at a glance (owner, 2026-10-08): green tick for full marks, red cross where marks were lost. */
.test-marksheet li{grid-template-columns:44px 1fr auto}
.test-tick{display:inline-grid;place-items:center;width:1.75em;height:1.75em;margin-right:4px;border-radius:50%;font-size:var(--vq-text-xs);font-weight:var(--vq-weight-bold)}
.test-marksheet li.is-right .test-tick{background:var(--vq-success-soft);color:var(--vq-success)}
.test-marksheet li.is-lost .test-tick{background:var(--vq-danger-soft);color:var(--vq-danger)}
.test-marksheet li.is-right strong{color:var(--vq-success)}
.test-marksheet li.is-lost strong,.test-marksheet li.is-lost small{color:var(--vq-danger)}
.test-leaks li strong{color:var(--vq-danger)}
/* Steps: a white filled circle with the number (owner, 2026-10-08) */
#test-steps button{display:inline-flex;align-items:center;gap:6px}
.test-dot{display:inline-grid;place-items:center;width:1.75em;height:1.75em;border-radius:50%;background:var(--vq-ink);color:var(--vq-on-ink);font:var(--vq-weight-bold) var(--vq-text-xs)/1 var(--vq-font)}
#test-steps button[aria-selected="true"] .test-dot{background:var(--vq-on-ink);color:var(--vq-ink)}
/* Steps in two rows: the number circle, then the label under it (owner, 2026-10-08) */
#test-steps button{flex-direction:column;justify-content:center;gap:4px;padding-top:var(--vq-space-2);padding-bottom:var(--vq-space-2);line-height:1.1}
/* Full circles (owner, 2026-10-08): solid green / red with a white mark */
.test-tick{width:1.8em;height:1.8em}
.test-marksheet li.is-right .test-tick{background:var(--vq-success);color:var(--vq-paper)}
.test-marksheet li.is-lost .test-tick{background:var(--vq-danger);color:var(--vq-paper)}
/* True red / green solid circles, the same in light and dark (tokens.css --vq-mark-*) */
.test-marksheet li.is-right .test-tick{background:var(--vq-mark-right);color:var(--vq-mark-on)}
.test-marksheet li.is-lost .test-tick{background:var(--vq-mark-wrong);color:var(--vq-mark-on)}
.test-marksheet li.is-right strong{color:var(--vq-mark-right)}
.test-marksheet li.is-lost strong,.test-marksheet li.is-lost small,.test-leaks li strong{color:var(--vq-mark-wrong)}
/* The test's instructions, like the board paper's General Instructions (owner, 2026-10-08) */
#intro-start:disabled{opacity:.5;cursor:not-allowed}
/* The gap to 100% (owner, 2026-10-08): marks lost by kind, then what she wrote against the full-marks answer */
.test-kinds{display:flex;flex-wrap:wrap;gap:var(--vq-space-2);margin:0;padding:0;list-style:none}
.test-kinds li{display:inline-flex;align-items:center;gap:var(--vq-space-2);min-height:36px;padding:0 var(--vq-space-3);border:var(--vq-border);border-radius:999px;color:var(--vq-ink);font:var(--vq-weight-bold) var(--vq-text-sm)/1 var(--vq-font)}
.test-kinds strong{color:var(--vq-mark-wrong)}
.test-gap-head{display:flex;justify-content:space-between;align-items:baseline;gap:var(--vq-space-2)}
.test-gap-kind{color:var(--vq-ink-muted);font:var(--vq-weight-bold) var(--vq-text-sm)/1.2 var(--vq-font)}
.test-gap{display:grid;grid-template-columns:auto 1fr;gap:var(--vq-space-1) var(--vq-space-3);margin:var(--vq-space-2) 0 0}
.test-gap dt{color:var(--vq-ink-muted);font:var(--vq-weight-bold) var(--vq-text-xs)/1.4 var(--vq-font);text-transform:uppercase;letter-spacing:.04em}
.test-gap dd{margin:0;color:var(--vq-ink);font:var(--vq-weight-medium) var(--vq-text-sm)/1.4 var(--vq-font)}
.test-gap dd.is-full{color:var(--vq-mark-right);font-weight:var(--vq-weight-bold)}
.test-gap-note{margin:var(--vq-space-2) 0 0;color:var(--vq-mark-wrong);font:var(--vq-weight-bold) var(--vq-text-sm)/1.35 var(--vq-font)}
/* Bite-size cards before the exam */
.test-intro-card{display:grid;gap:var(--vq-space-3)}
.test-cards-dots{display:flex;gap:6px;margin-top:var(--vq-space-2)}
.test-cards-dots span{width:8px;height:8px;border-radius:50%;background:var(--vq-line, var(--vq-ink-muted));opacity:.4}
.test-cards-dots span.is-on{width:22px;border-radius:4px;background:var(--vq-ink);opacity:1}
/* Pager under the cards: full-circle back and next, the dots in the middle (owner, 2026-10-08) */
.test-pager{display:flex;justify-content:space-between;align-items:center;margin-top:var(--vq-space-3)}
.test-pager .test-cards-dots{margin:0}
.test-round{display:grid;place-items:center;width:1.75em;height:1.75em;border:0;border-radius:50%;background:var(--vq-ink);color:var(--vq-on-ink);font:var(--vq-weight-bold) var(--vq-text-xl)/1 var(--vq-font);cursor:pointer}
.test-cards-dots span{background:var(--vq-ink-muted);opacity:.7}
.test-cards-dots span.is-on{background:var(--vq-ink);opacity:1}
/* Test scheduling (owner, 2026-10-09): the time on Create, "Scheduled for" on the card, Reschedule and Cancel */
.test-when{width:100%;min-height:44px;padding:0 var(--vq-space-3);border:var(--vq-border);border-radius:var(--vq-radius-sm);background:var(--vq-surface);color:var(--vq-ink);font:var(--vq-weight-medium) var(--vq-text-md)/1.3 var(--vq-font)}
.test-row small.test-scheduled{color:var(--vq-ink);font-weight:var(--vq-weight-bold)}
.test-row-end .test-quiet{background:none;color:var(--vq-ink)}
.test-reschedule{display:grid;gap:var(--vq-space-2);width:100%}
.test-reschedule-actions{display:flex;gap:var(--vq-space-2);justify-content:flex-end}
.test-row.is-editing{flex-wrap:wrap}
/* At a large phone font size the card's buttons go under the text, and the time picker never widens the screen */
.test-row{flex-wrap:wrap}
.test-row > span:first-child{flex:1 1 10em}
.test-when{box-sizing:border-box;min-width:0;max-width:100%}
/* Submit (owner, 2026-10-10): the step bar, the one ask (its text blinks), the page chips, the answer sheet as read on
   the app's paper, Check with one tick, and Handed in. */
.handin-action{display:grid;gap:var(--vq-space-2)}
.handin-action[hidden]{display:none}
.handin-action .test-camera{width:100%;gap:var(--vq-space-2);padding:var(--vq-space-2) var(--vq-space-3);background:none;font-family:var(--vq-font);line-height:1.3;text-align:center}
.handin-action .test-camera svg{width:20px;height:20px}
.handin-action .test-camera.is-retake{border-color:var(--vq-warning);color:var(--vq-warning)}
.handin-action .test-camera.is-reading{border-style:solid;border-color:var(--vq-line);color:var(--vq-ink-muted);cursor:progress}
.handin-blink{display:inline-flex;align-items:center;gap:var(--vq-space-2);animation:handin-blink 1.2s ease-in-out infinite alternate}
@keyframes handin-blink{from{opacity:1}to{opacity:.35}}
@media (prefers-reduced-motion:reduce){.handin-blink{animation:none}}
.handin-link{justify-self:center;min-height:var(--vq-tap);padding:0 var(--vq-space-2);border:0;background:none;color:var(--vq-ink-muted);font:var(--vq-weight-medium) var(--vq-text-sm)/1 var(--vq-font);text-decoration:underline;cursor:pointer}
.handin-status{min-height:1.3em;margin:0;color:var(--vq-ink-muted);font:var(--vq-weight-medium) var(--vq-text-sm)/1.4 var(--vq-font)}
.handin-status:empty{display:none}
.handin-status.is-warn{color:var(--vq-warning)}
/* The sticky footer (owner, 2026-10-21): the next step and the countdown to the auto-submit, one solid bar flush with
   the screen's bottom edge (it reaches into the page's bottom padding) while the pages scroll behind it. */
.handin-foot{position:sticky;bottom:calc(-1 * var(--vq-space-5));z-index:1;display:grid;gap:var(--vq-space-2);margin-bottom:calc(-1 * var(--vq-space-5));padding:var(--vq-space-3) 0 var(--vq-space-5);border-top:1px solid var(--vq-line);background:var(--vq-bg-start)}
.handin-due{margin:0;color:var(--vq-ink-muted);text-align:center;font:var(--vq-weight-medium) var(--vq-text-sm)/1.2 var(--vq-font)}
.handin-due:empty{display:none}
.handin-due strong{color:var(--vq-ink);font-variant-numeric:tabular-nums}
.handin-due.is-low,.handin-due.is-low strong{color:var(--vq-warning)}
/* The paper's clock in its last 5 minutes. */
.test-clock.is-low{border-color:var(--vq-warning);color:var(--vq-warning)}
.handin-pages{display:flex;flex-wrap:wrap;gap:var(--vq-space-2);margin:0;padding:0;list-style:none}
.handin-pages:empty{display:none}
.handin-pages li{padding:var(--vq-space-1) var(--vq-space-2);border:var(--vq-border);border-radius:var(--vq-radius-pill);color:var(--vq-ink-muted);font:var(--vq-weight-bold) var(--vq-text-xs)/1.2 var(--vq-font)}
.handin-pages li.is-read{border-color:var(--vq-success);color:var(--vq-success)}
.handin-pages li.is-reading{border-color:var(--vq-accent);color:var(--vq-accent)}
.handin-pages li.is-failed{border-color:var(--vq-warning);color:var(--vq-warning)}
.handin-paper{padding:0 var(--vq-space-3)}
.handin-sheet{display:grid;margin:0;padding:0;list-style:none}
.handin-sheet li{display:grid;grid-template-columns:40px minmax(0,1fr) 24px;gap:var(--vq-space-2);padding:var(--vq-space-3) 0;border-bottom:1px solid var(--vq-sheet-rule)}
.handin-sheet li:last-child{border-bottom:0}
.handin-q{color:var(--vq-sheet-ink);font:var(--vq-weight-bold) var(--vq-text-sm)/1.4 var(--vq-font)}
.handin-q small{display:block;color:var(--vq-sheet-ink);opacity:.6;font-size:var(--vq-text-xs)}
.handin-sheet p{margin:0;overflow-wrap:break-word;font:var(--vq-weight-medium) var(--vq-text-sm)/1.45 var(--vq-font)}
.handin-pen{color:var(--vq-sheet-pen)}
.handin-empty{color:var(--vq-sheet-ink);opacity:.45}
.handin-unclear{color:var(--vq-danger);font-weight:var(--vq-weight-bold)}
.handin-mark{color:var(--vq-success);font:var(--vq-weight-bold) var(--vq-text-md)/1.4 var(--vq-font);text-align:right}
.handin-sheet li.is-unclear .handin-mark{color:var(--vq-danger)}
/* Handed in (#226, design live-2): today's handed-in test on top of Tests, lit in the accent, marking then its score. */
.handin-blink{flex-wrap:wrap;justify-content:center}
/* Ready-made tests (owner, 2026-10-11): the subject tabs and kind chips are global.css .vq-tabs / .vq-filter; the
   cards, the own-test link */
.ready{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--vq-space-3);margin-top:var(--vq-space-1)}
.ready[hidden]{display:none}
.ready-list-title{margin-top:var(--vq-space-2)}
/* Up next's Schedule is the screen's one main button, at the card's right */
.test-row-end button.primary-action{width:auto;min-height:var(--vq-button-height);padding:var(--vq-space-3) var(--vq-space-4);background:var(--vq-ink);color:var(--vq-on-ink);font:var(--vq-weight-bold) var(--vq-text-md)/1.2 var(--vq-font)}
.test-row-end em.vq-chip{font:var(--vq-weight-bold) var(--vq-text-sm)/1 var(--vq-font);font-style:normal}
.ready-own{justify-self:center;min-height:var(--vq-tap);padding:var(--vq-space-2);border:0;background:none;color:var(--vq-ink-muted);font:var(--vq-weight-medium) var(--vq-text-sm)/1.3 var(--vq-font);text-decoration:underline;cursor:pointer}
/* Fair exam (owner, 2026-10-11): How the exam went, on the result for the child and the parent */
.test-fair{grid-template-columns:auto 1fr;gap:var(--vq-space-2) var(--vq-space-4);margin:0}
.test-fair dt{color:var(--vq-ink-muted);font:var(--vq-weight-bold) var(--vq-text-sm)/1.4 var(--vq-font)}
.test-fair dd{margin:0;color:var(--vq-ink);font:var(--vq-weight-bold) var(--vq-text-sm)/1.4 var(--vq-font);white-space:pre-line}
.test-fair dd.is-flag{color:var(--vq-warning)}
/* Test pay (owner, 2026-10-11): each line of the test's Bhiksha with its reason */
.test-pay{gap:0;margin:0;padding-top:var(--vq-space-2);padding-bottom:var(--vq-space-2);list-style:none}
.test-pay li{display:grid;grid-template-columns:1fr auto;gap:var(--vq-space-1) var(--vq-space-3);padding:var(--vq-space-2) 0;border-bottom:var(--vq-border);color:var(--vq-ink);font:var(--vq-weight-bold) var(--vq-text-sm)/1.4 var(--vq-font)}
.test-pay li:last-child{border-bottom:0}
.test-pay small{grid-column:1 / -1;color:var(--vq-ink-muted);font-weight:var(--vq-weight-medium);white-space:pre-line}
.test-pay strong{color:var(--vq-success)}
.test-pay li.is-missed strong{color:var(--vq-warning)}
.test-pay li.test-pay-total{font-size:var(--vq-text-md)}
.test-pay li.test-pay-total strong{color:var(--vq-accent)}
.test-review{margin:0;color:var(--vq-ink-muted);font:var(--vq-weight-medium) var(--vq-text-sm)/1.4 var(--vq-font)}
/* Watching (owner, 2026-10-11; live.js): who of her family is watching is her hero card's status line (hero-card.js);
   here a quiet line on the paper during a test, "Seen by" under a result, and who watched the whole test after hand-in */
.test-cheering[hidden],.test-watched[hidden]{display:none}
.test-cheering{margin:0 0 var(--vq-space-2);color:var(--vq-ink-muted);font:var(--vq-weight-medium) var(--vq-text-xs)/1.3 var(--vq-font)}
.test-row small.test-seen{color:var(--vq-ink-muted)}
.test-watched{margin:0;color:var(--vq-success);font:var(--vq-weight-bold) var(--vq-text-sm)/1.4 var(--vq-font)}
/* Re-check (owner, 2026-10-11): the ask under a question that lost marks, and the outcome line. */
.test-marksheet li small.test-recheck{color:var(--vq-ink-muted)}
.test-marksheet .test-recheck-ask{display:block;padding:0;text-align:left}
/* Revise (2026-10-11): before a test, its chapters' key concepts, formulas and common mistakes */
.revise-body{display:grid;gap:var(--vq-space-3)}
#revise-start{width:100%;margin-top:var(--vq-space-4)}
#handin-submit{width:100%;margin-top:var(--vq-space-3)}
.handin-read{min-width:0;margin-top:var(--vq-space-4)}
.handin-read .handin-paper{min-width:0;margin-top:var(--vq-space-3);overflow-x:auto}
.revise-chapter{min-width:0}
.revise-chapter summary{color:var(--vq-ink);font:var(--vq-weight-bold) var(--vq-text-md)/1.3 var(--vq-font);cursor:pointer}
.revise-part{margin:var(--vq-space-2) 0 0;color:var(--vq-ink-muted);font:var(--vq-weight-bold) var(--vq-text-xs)/1.4 var(--vq-font);text-transform:uppercase;letter-spacing:.04em}
.revise-list{display:grid;gap:var(--vq-space-1);margin:0;padding-left:var(--vq-space-4);color:var(--vq-ink);font:var(--vq-weight-medium) var(--vq-text-sm)/1.45 var(--vq-font);overflow-wrap:break-word}
.revise-list.is-formula{font-weight:var(--vq-weight-bold)}
.revise-list.is-mistake li::marker{color:var(--vq-mark-wrong)}
/* The result, one column (owner, 2026-10-18, /lab/result): the card, Win back, where the marks went (each lost question
   open: its head, then the reason, what was written and full marks, each heading over its text), by section, the grid. */
.result-card{display:grid;gap:var(--vq-space-3);padding:var(--vq-space-4);border:var(--vq-border);border-radius:var(--vq-radius-md);background:var(--vq-surface)}
.result-card .test-summary{margin-top:calc(-1 * var(--vq-space-2))}
.result-card-main{display:flex;justify-content:space-between;align-items:baseline}
.result-score{margin:0;color:var(--vq-success);font:var(--vq-weight-bold) var(--vq-text-hero-lg)/1 var(--vq-font)}
.result-score span{color:var(--vq-ink-subtle);font-size:var(--vq-text-xl)}
.result-percent{margin:0;color:var(--vq-success);font:var(--vq-weight-bold) var(--vq-text-2xl)/1 var(--vq-font)}
.result-bar{display:block;height:8px;border-radius:var(--vq-radius-pill);background:color-mix(in srgb,var(--vq-ink-subtle) 45%,transparent);overflow:hidden}
.result-bar span{display:block;height:100%;border-radius:inherit;background:var(--vq-success)}
.result-money{display:grid;gap:var(--vq-space-1);padding-top:var(--vq-space-3);border-top:var(--vq-border)}
.result-money .test-earned{margin:0;color:var(--vq-accent);font:var(--vq-weight-bold) var(--vq-text-md)/1.3 var(--vq-font)}
#result-win,#result-book,#mcq-done{width:100%}
#mcq-result:not([hidden]){display:grid;gap:var(--vq-space-3)}
/* Right, wrong, skipped: always one row of three, at any width or text size. */
#mcq-line{grid-template-columns:repeat(3,minmax(0,1fr))}
.test-leaks li.test-leak{gap:var(--vq-space-3);padding:0 0 var(--vq-space-3);background:var(--vq-surface);overflow-wrap:break-word}
.test-leaks li.test-leak > :not(.result-leak-head){margin:0 var(--vq-space-3)}
.result-leak-head{display:grid;grid-template-columns:44px minmax(0,1fr) auto;align-items:center;gap:var(--vq-space-3);padding:var(--vq-space-3);border-bottom:var(--vq-border)}
.result-q{color:var(--vq-ink-muted);font:var(--vq-weight-bold) var(--vq-text-md)/1 var(--vq-font)}
.result-leak-what{display:grid;gap:2px;min-width:0}
.test-leaks .result-leak-what strong{color:var(--vq-ink);font:var(--vq-weight-bold) var(--vq-text-md)/1.2 var(--vq-font)}
.result-leak-what small{color:var(--vq-ink-muted);font:var(--vq-weight-medium) var(--vq-text-xs)/1.2 var(--vq-font)}
.result-minus{padding:2px var(--vq-space-3);border-radius:var(--vq-radius-pill);background:var(--vq-danger-soft);color:var(--vq-danger);font:var(--vq-weight-bold) var(--vq-text-sm)/1.4 var(--vq-font)}
.test-leaks .test-gap{grid-template-columns:minmax(0,1fr);gap:0}
.test-leaks .test-gap dt{margin-bottom:var(--vq-space-2)}
.test-leaks .test-gap dd + dt{margin-top:var(--vq-space-4)}
/* #245: a lost question in plain words: the headline, Next time add, the scheme as a ✓/✗ checklist, her answer folded. */
.leak-headline{color:var(--vq-ink);font:var(--vq-weight-bold) var(--vq-text-lg)/1.25 var(--vq-font)}
.leak-add,.leak-note{color:var(--vq-ink);font:var(--vq-weight-medium) var(--vq-text-md)/1.45 var(--vq-font)}
.test-leaks .leak-add strong{color:var(--vq-ink)}
.leak-checks{display:grid;gap:0;margin:0;padding:0;list-style:none;border:var(--vq-border);border-radius:var(--vq-radius-sm)}
.test-leaks .leak-checks li{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:start;gap:var(--vq-space-2);padding:var(--vq-space-2) var(--vq-space-3);border:0;border-bottom:var(--vq-border);border-radius:0;font:var(--vq-weight-medium) var(--vq-text-sm)/1.45 var(--vq-font)}
.test-leaks .leak-checks li:last-child{border-bottom:0}
.leak-tick{display:inline-grid;place-items:center;width:1.5rem;height:1.5rem;border-radius:50%;background:var(--vq-surface);color:var(--vq-ink-muted);font:var(--vq-weight-bold) var(--vq-text-xs)/1 var(--vq-font)}
.leak-checks li.is-got .leak-tick{background:var(--vq-success-soft);color:var(--vq-success)}
.leak-checks li.is-part .leak-tick{background:var(--vq-accent-soft);color:var(--vq-warning)}
.leak-checks li.is-missed .leak-tick{background:var(--vq-danger-soft);color:var(--vq-danger)}
.leak-checks small{white-space:nowrap;color:var(--vq-ink-muted);font:var(--vq-weight-bold) var(--vq-text-sm)/1.45 var(--vq-font)}
.leak-checks li.is-got small{color:var(--vq-success)}
.leak-checks li.is-missed small,.leak-checks li.is-part small{color:var(--vq-danger)}
.leak-answer summary{min-height:var(--vq-tap);display:flex;align-items:center;color:var(--vq-accent);font:var(--vq-weight-bold) var(--vq-text-sm)/1.4 var(--vq-font);cursor:pointer}
.leak-answer p{margin:0;color:var(--vq-ink);font:var(--vq-weight-medium) var(--vq-text-sm)/1.45 var(--vq-font);white-space:pre-line}
.test-leaks small.test-recheck{color:var(--vq-ink-muted);font:var(--vq-weight-bold) var(--vq-text-sm)/1.4 var(--vq-font)}
.test-leaks .test-recheck-ask{justify-self:start;padding:0;text-align:left}
.result-sections{display:grid;margin:0;padding:0;list-style:none;border:var(--vq-border);border-radius:var(--vq-radius-sm)}
.result-sections li{display:grid;grid-template-columns:minmax(0,8rem) minmax(0,1fr) 3rem;align-items:center;gap:var(--vq-space-3);padding:var(--vq-space-3);border-bottom:var(--vq-border);color:var(--vq-ink);font:var(--vq-weight-medium) var(--vq-text-sm)/1.2 var(--vq-font)}
.result-sections li:last-child{border-bottom:0}
.result-sections strong{text-align:right}
.result-sections li.is-lost .result-bar span{background:var(--vq-danger)}
.result-sections li.is-lost strong{color:var(--vq-danger)}
.result-grid{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:var(--vq-space-2);margin:0;padding:0;list-style:none}
.result-grid li{display:grid;place-items:center;min-height:var(--vq-tap);border-radius:var(--vq-radius-sm);background:var(--vq-success-soft);color:var(--vq-success);font:var(--vq-weight-bold) var(--vq-text-md)/1 var(--vq-font)}
.result-grid li.is-lost{background:var(--vq-danger-soft);color:var(--vq-danger)}
#result-rechecked{display:grid;gap:var(--vq-space-1)}
#result-rechecked[hidden]{display:none}
.test-review{grid-column:1/-1;display:grid;gap:var(--vq-space-1);min-width:0;padding-top:var(--vq-space-2);border-top:var(--vq-border);overflow-wrap:break-word}
.test-review[hidden]{display:none}
.test-leaks .test-review li{display:list-item;padding:0;border:0;border-radius:0}
.test-leaks .test-review .review-chain li{display:inline}
.test-review .test-row-end{margin-top:var(--vq-space-2)}
.review-chain{display:flex;flex-wrap:wrap;gap:var(--vq-space-1);margin:0;padding:0;list-style:none}
.review-chain li{color:var(--vq-ink-muted);font:var(--vq-weight-medium) var(--vq-text-sm)/1.4 var(--vq-font)}
.review-chain li:not(:last-child)::after{content:"→";margin-left:var(--vq-space-1);color:var(--vq-ink-muted)}
.review-chain li.is-target{color:var(--vq-ink);font-weight:var(--vq-weight-bold)}
.review-steps{display:grid;gap:var(--vq-space-1);margin:0;padding-left:var(--vq-space-4);color:var(--vq-ink);font:var(--vq-weight-medium) var(--vq-text-sm)/1.45 var(--vq-font)}
.review-steps li span{margin-right:var(--vq-space-2)}
.review-steps small{color:var(--vq-mark-right);font:var(--vq-weight-bold) var(--vq-text-xs)/1.4 var(--vq-font)}
/* The answer book (#217, owner 2026-10-11): CBSE-style, the question number in the margin, what was written, the
   examiner's marks boxed on the right, the reason, and the page photo under it on a tap */
.book-list{display:grid;gap:0;margin:0;padding:0;list-style:none;border:var(--vq-border);border-radius:var(--vq-radius-md);background:var(--vq-surface)}
.book-q{display:grid;grid-template-columns:44px minmax(0,1fr) auto;gap:var(--vq-space-2);padding:var(--vq-space-3);border-bottom:var(--vq-border)}
.book-q:last-child{border-bottom:0}
.book-num{align-self:stretch;border-right:var(--vq-border);color:var(--vq-ink);font:var(--vq-weight-bold) var(--vq-text-sm)/1.45 var(--vq-font)}
.book-body{display:grid;gap:var(--vq-space-1);min-width:0;overflow-wrap:break-word}
.book-question{margin:0;color:var(--vq-ink-muted);font:var(--vq-weight-medium) var(--vq-text-sm)/1.45 var(--vq-font)}
.book-label{margin:var(--vq-space-1) 0 0;color:var(--vq-ink-muted);font:var(--vq-weight-bold) var(--vq-text-xs)/1.4 var(--vq-font);text-transform:uppercase;letter-spacing:.04em}
.book-answer{margin:0;color:var(--vq-ink);font:var(--vq-weight-medium) var(--vq-text-md)/1.5 var(--vq-font);white-space:pre-wrap}
.book-answer.is-empty{color:var(--vq-ink-muted)}
.book-reason{margin:0;color:var(--vq-accent);font:var(--vq-weight-bold) var(--vq-text-sm)/1.4 var(--vq-font)}
.book-marks{align-self:start;padding:var(--vq-space-1) var(--vq-space-2);border:var(--vq-border);border-radius:var(--vq-radius-sm);color:var(--vq-mark-right);font:var(--vq-weight-bold) var(--vq-text-md)/1.2 var(--vq-font);text-align:center;white-space:nowrap}
.book-q.is-lost .book-marks{color:var(--vq-accent)}
.book-photo-asks{display:flex;flex-wrap:wrap;gap:var(--vq-space-2)}
.book-photo-asks .handin-link,.book-page .handin-link{justify-self:start;padding:0}
.book-photo{min-width:0}
.book-photo[hidden]{display:none}
.book-img{display:block;width:100%;height:auto;border:var(--vq-border);border-radius:var(--vq-radius-sm)}
.book-pages{display:grid;gap:var(--vq-space-2)}
.book-page{display:grid;gap:var(--vq-space-2)}
/* Fix a gap step by step (#218, owner 2026-10-12, /lab/gaps): the sheet with the steps so far, then one round. */
.fix-sheet p{margin:0;font:var(--vq-weight-medium) var(--vq-text-md)/1.45 var(--vq-font)}
.fix-steps{display:grid;gap:var(--vq-space-1);margin:var(--vq-space-3) 0 0;padding:0;list-style:none}
.fix-steps li{display:flex;justify-content:space-between;gap:var(--vq-space-3);padding:var(--vq-space-2) 0;border-top:1px dashed var(--vq-sheet-rule);font:var(--vq-weight-medium) var(--vq-text-sm)/1.35 var(--vq-font)}
.fix-steps li b{flex:0 0 auto}
.fix-steps li.is-done > span::before{content:"✓ ";font-weight:var(--vq-weight-bold)}
.fix-steps li.is-now{font-weight:var(--vq-weight-bold)}
.fix-meta{color:var(--vq-ink-muted);font:var(--vq-weight-bold) var(--vq-text-sm)/1.2 var(--vq-font)}
.fix-options{display:grid;gap:var(--vq-space-2);margin:0;padding:0;list-style:none}
.fix-options button{width:100%;min-height:var(--vq-tap);padding:var(--vq-space-3);border:var(--vq-border);border-radius:var(--vq-radius-sm);background:none;color:var(--vq-ink);font:var(--vq-weight-medium) var(--vq-text-md)/1.35 var(--vq-font);text-align:left;cursor:pointer}
.fix-options button.is-right{border-color:var(--vq-success);background:var(--vq-success-soft)}
.fix-options button.is-wrong{border-color:var(--vq-danger);background:var(--vq-danger-soft)}
.fix-options button:disabled{cursor:default}
.fix-why{margin:0;color:var(--vq-ink);font:var(--vq-weight-medium) var(--vq-text-sm)/1.4 var(--vq-font)}
/* Climb (#218, /lab/gaps): the concept chain with done and now ticks, then one 1-marker in the round card. */
.gap-chain{display:grid;gap:var(--vq-space-1);margin:0;padding:0;list-style:none;counter-reset:chain}
.gap-chain li{display:flex;align-items:center;gap:var(--vq-space-2);color:var(--vq-ink-muted);font:var(--vq-weight-medium) var(--vq-text-sm)/1.35 var(--vq-font);counter-increment:chain}
.gap-chain li::before{content:counter(chain);display:inline-grid;place-items:center;flex:0 0 auto;width:22px;height:22px;border:var(--vq-border);border-radius:var(--vq-radius-pill);font-weight:var(--vq-weight-bold)}
.gap-chain li.is-done{color:var(--vq-ink)}
.gap-chain li.is-done::before{content:"✓";border-color:var(--vq-success);background:var(--vq-success);color:var(--vq-on-ink)}
.gap-chain li.is-now{color:var(--vq-ink);font-weight:var(--vq-weight-bold)}
.gap-chain li.is-now::before{border-color:var(--vq-accent);color:var(--vq-accent)}
.climb-question{margin:0;overflow-wrap:break-word;font:var(--vq-weight-medium) var(--vq-text-md)/1.45 var(--vq-font)}
.gap-state{margin:var(--vq-space-2) 0 0;color:var(--vq-ink-muted);font:var(--vq-weight-bold) var(--vq-text-sm)/1.35 var(--vq-font)}
.gap-state.is-closed{color:var(--vq-success)}
.gap-state.is-retesting{color:var(--vq-accent)}
/* Gaps (#218): the lab's gap list on the Pariksha tab; each row opens its result. */
/* The demo server only: the right option's "Demo" badge (tests-view.js demoAnswer). */
:root[data-demo] .fix-options [data-local-answer]::after{content:"Demo";margin-left:var(--vq-space-2);padding:2px var(--vq-space-2);border-radius:var(--vq-radius-pill);background:var(--vq-accent);color:var(--vq-on-ink);font:var(--vq-weight-bold) var(--vq-text-xs)/1.4 var(--vq-font);vertical-align:middle}
/* Review your answers before Submit (#235, owner 2026-10-14): the two hand-in steps, every answer as read, each editable */
.handin-steps{display:grid;grid-template-columns:repeat(2,1fr);gap:var(--vq-space-2);margin:0;padding:0;list-style:none}
.handin-steps li{display:flex;flex-direction:column;align-items:center;gap:var(--vq-space-1);padding-bottom:var(--vq-space-2);border-bottom:3px solid var(--vq-line);color:var(--vq-ink-subtle);font:var(--vq-weight-bold) var(--vq-text-sm)/1.1 var(--vq-font)}
.handin-steps .test-dot{background:var(--vq-surface-muted);color:var(--vq-ink-subtle)}
.handin-steps li.is-current{border-color:var(--vq-ink);color:var(--vq-ink)}
.handin-steps li.is-current .test-dot{background:var(--vq-ink);color:var(--vq-on-ink)}
.handin-steps li.is-done{border-color:var(--vq-success);color:var(--vq-success)}
.handin-steps li.is-done .test-dot{background:var(--vq-success);color:var(--vq-on-ink)}
.review-sheet li{grid-template-columns:40px minmax(0,1fr) auto}
.review-sheet li.is-editing{grid-template-columns:40px minmax(0,1fr)}
.review-edit{align-self:start;min-height:var(--vq-tap);padding:0;border:0;background:none;color:var(--vq-sheet-ink);font:var(--vq-weight-bold) var(--vq-text-sm)/1 var(--vq-font);text-decoration:underline;cursor:pointer}
.review-hard{margin-top:var(--vq-space-1);color:var(--vq-danger);font-weight:var(--vq-weight-bold)}
.review-text{width:100%;padding:var(--vq-space-2);border:1px solid var(--vq-sheet-ink);border-radius:var(--vq-radius-sm);background:var(--vq-sheet);color:var(--vq-sheet-pen);font:var(--vq-weight-medium) var(--vq-text-md)/1.45 var(--vq-font);resize:vertical}
.review-options{display:flex;flex-wrap:wrap;gap:var(--vq-space-2)}
.review-options .vq-chip{min-height:var(--vq-tap);padding-inline:var(--vq-space-4);border-color:var(--vq-sheet-ink);color:var(--vq-sheet-ink);font-size:var(--vq-text-md);cursor:pointer}
.review-options .vq-chip.is-on{background:var(--vq-sheet-ink);color:var(--vq-sheet)}
.review-done{display:block;justify-self:start;color:var(--vq-sheet-ink);font-weight:var(--vq-weight-bold)}
.primary-action:disabled{opacity:.4;cursor:not-allowed}
/* Pariksha (#239, design talk 2026-10-15 on /demo/abhyas): chapter cards, a chapter's head and Practise, Revise, Test */
/* Practise picks skills (owner, 2026-10-15, redesigned): round ticks, a colour-graded bar and % per skill (global.css
   .vq-progress.is-*, .vq-grade-*), quick picks, the ticked rows lit, and Start pinned at the bottom. */
.pariksha-section{display:grid;gap:var(--vq-space-3);margin-top:var(--vq-space-3)}
.pariksha-section[hidden]{display:none}
.pariksha-section .vq-section-title{margin:0}
.pariksha-rows{display:grid;gap:var(--vq-space-2);margin:0;padding:0;list-style:none}
.pariksha-rows > li{scroll-margin-bottom:calc(var(--vq-button-height) + var(--vq-space-6) * 3)}
.pariksha-row{position:relative;display:grid;grid-template-columns:auto minmax(0,1fr);align-items:start;gap:var(--vq-space-3);min-height:var(--vq-tap);padding:var(--vq-space-3) var(--vq-space-4);border:1px solid var(--vq-line);border-radius:var(--vq-radius-md);cursor:pointer;transition:border-color .15s ease,background-color .15s ease}
.pariksha-row:has(.pariksha-row-box:checked){border-color:var(--vq-accent);background:var(--vq-accent-soft)}
.pariksha-row:has(.pariksha-row-box:focus-visible){outline:3px solid var(--vq-focus);outline-offset:2px}
.pariksha-row-box{position:absolute;opacity:0;pointer-events:none}
.pariksha-row-check{display:grid;place-items:center;width:var(--vq-space-5);height:var(--vq-space-5);border:2px solid var(--vq-line);border-radius:var(--vq-radius-pill);color:transparent}
.pariksha-row-check svg{width:var(--vq-space-4);height:var(--vq-space-4)}
.pariksha-row-box:checked + .pariksha-row-check{border-color:var(--vq-accent);background:var(--vq-accent);color:var(--vq-on-ink)}
.pariksha-row-text{display:grid;gap:var(--vq-space-1);min-width:0}
.pariksha-row-text strong{font:var(--vq-weight-bold) var(--vq-text-sm)/1.3 var(--vq-font)}
.pariksha-row-line{color:var(--vq-ink-muted);font:var(--vq-weight-medium) var(--vq-text-xs)/1.35 var(--vq-font)}
.pariksha-row-bar{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:var(--vq-space-3);margin-top:var(--vq-space-1)}
.pariksha-row-bar b{min-width:calc(var(--vq-space-5) + var(--vq-space-3));font:var(--vq-weight-bold) var(--vq-text-sm)/1 var(--vq-font);text-align:right}
.pariksha-row-meta{display:flex;flex-wrap:wrap;align-items:center;gap:var(--vq-space-2);margin-top:var(--vq-space-1)}
.pariksha-row-meta small{color:var(--vq-ink-muted);font:var(--vq-weight-medium) var(--vq-text-xs)/1.3 var(--vq-font)}
/* Rows that open something (Revise's gaps, the Exam cheatsheet): the text, a pill, a chevron; the biggest gap lit. And rows that
   only say (the test's rules): an icon and the line. (owner, 2026-10-15: Revise and Test in Practise's pieces) */
.pariksha-sections{display:grid;gap:var(--vq-space-5);min-width:0}
.pariksha-row--link{grid-template-columns:minmax(0,1fr) auto auto;align-items:end;row-gap:var(--vq-space-1);width:100%;color:var(--vq-ink);background:transparent;font:inherit;text-align:left}
/* The question takes the whole width; the pill and the chevron sit bottom right, beside the row's line (owner, 2026-10-17). */
.pariksha-row--link .pariksha-row-text{display:contents}
.pariksha-row--link .pariksha-row-text strong{grid-column:1 / -1}
.pariksha-row--link .pariksha-row-line{grid-column:1;align-self:center}
.pariksha-row--link.is-next{border-color:var(--vq-accent);background:var(--vq-accent-soft)}
.pariksha-row--link > svg{width:var(--vq-space-5);height:var(--vq-space-5);color:var(--vq-ink-muted)}
.pariksha-row--link .pariksha-row-text strong{display:-webkit-box;overflow:hidden;-webkit-box-orient:vertical;-webkit-line-clamp:2}
.pariksha-row--note{cursor:default;color:var(--vq-ink);font:var(--vq-weight-medium) var(--vq-text-sm)/1.4 var(--vq-font)}
.pariksha-row--note > svg{width:var(--vq-space-5);height:var(--vq-space-5);color:var(--vq-accent)}
.pariksha-go{position:sticky;bottom:0;display:grid;gap:var(--vq-space-2);padding:var(--vq-space-3) 0;background:var(--vq-paper);text-align:center}
.pariksha-go small{color:var(--vq-ink-muted);font:var(--vq-weight-medium) var(--vq-text-xs)/1.3 var(--vq-font)}
/* At the top of a chapter tab (owner, 2026-10-15): the white button in the flow, not the pinned bar. */
.pariksha-go--top{position:static;padding:0;background:none}.pariksha-go[hidden]{display:none}
.pariksha-go-sum{margin:0;font:var(--vq-weight-bold) var(--vq-text-sm)/1.3 var(--vq-font)}
@media (prefers-reduced-motion:reduce){.pariksha-row{transition:none}}
.ready > .vq-section-title{margin-bottom:0}
.test-bar{flex-wrap:wrap}
/* Above a chapter test's instructions (owner, 2026-10-15): the hero and the chapter card, laid out as the screen's own
 children; min-width 0 so the bleeding hero never widens the paper at large font sizes. */
.paper-top{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--vq-space-3);min-width:0}
/* A chapter's board skills (owner, 2026-10-17, board-skills.js): a block a skill on the chapter card (kept green,
 proven blue, practised outlined, new empty), the three counts, the Next line, and a row a skill under the cards. */
.skills-blocks{display:flex;gap:var(--vq-space-1);margin:var(--vq-space-1) 0}
.skills-blocks i{flex:1 1 0;min-width:0;height:var(--vq-space-3);border-radius:var(--vq-space-1);background:var(--vq-line)}
.skills-blocks i.is-practised{background:var(--vq-accent-soft);box-shadow:inset 0 0 0 1px var(--vq-accent)}
.skills-blocks i.is-proven{background:var(--vq-accent)}
.skills-blocks i.is-kept{background:var(--vq-success)}
.skills-tally{display:grid;grid-template-columns:repeat(auto-fit,minmax(5.5rem,1fr));gap:var(--vq-space-2)}
.skills-tally span{display:grid;justify-items:center;gap:var(--vq-space-1);padding:var(--vq-space-2);border-radius:var(--vq-radius-sm);background:var(--vq-paper);color:var(--vq-ink-muted);font:var(--vq-weight-medium) var(--vq-text-xs)/1.2 var(--vq-font);text-align:center}
.skills-tally strong{color:var(--vq-ink);font:var(--vq-weight-bold) var(--vq-text-lg)/1 var(--vq-font)}
.skills-next{display:flex;flex-wrap:wrap;align-items:baseline;gap:var(--vq-space-1) var(--vq-space-2);margin:var(--vq-space-1) 0 0;padding:var(--vq-space-3);border-radius:var(--vq-radius-sm);background:var(--vq-accent-soft);font:var(--vq-weight-bold) var(--vq-text-md)/1.35 var(--vq-font)}
.skills-next b{color:var(--vq-accent);font-size:var(--vq-text-xs);letter-spacing:.1em;text-transform:uppercase}
.board-skills{margin:0;padding:0;list-style:none}
.board-skill{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:var(--vq-space-3);padding:var(--vq-space-3) 0;border-bottom:1px solid var(--vq-line)}
.board-skill-state{display:grid;place-items:center;width:var(--vq-space-6);height:var(--vq-space-6);border:var(--vq-border-width) solid var(--vq-line);border-radius:var(--vq-radius-pill);color:var(--vq-ink-subtle);font:var(--vq-weight-bold) var(--vq-text-sm)/1 var(--vq-font)}
.board-skill-name{display:grid;gap:var(--vq-space-1);min-width:0}
.board-skill-name strong{font:var(--vq-weight-bold) var(--vq-text-sm)/1.3 var(--vq-font)}
.board-skill-name small{color:var(--vq-ink-muted);font:var(--vq-weight-medium) var(--vq-text-xs)/1.3 var(--vq-font)}
.board-skill > b{color:var(--vq-ink-subtle);font:var(--vq-weight-bold) var(--vq-text-xs)/1.2 var(--vq-font)}
.board-skill.is-practised .board-skill-state{border-color:var(--vq-accent);color:var(--vq-accent)}
.board-skill.is-proven .board-skill-state{border-color:var(--vq-accent);background:var(--vq-accent);color:var(--vq-on-ink)}
.board-skill.is-proven > b{color:var(--vq-accent)}
.board-skill.is-kept .board-skill-state{border-color:var(--vq-success);background:var(--vq-success);color:var(--vq-on-ink)}
.board-skill.is-kept > b{color:var(--vq-success)}
.board-skill.is-refresh .board-skill-state{border-color:var(--vq-warning);color:var(--vq-warning)}
.board-skill.is-refresh > b{color:var(--vq-warning)}
