/* Test module styles — owned by the test module; the form reuses the .qcf kit in css/qc.css; variables from css/app.css only */
.ts-mode{margin-bottom:12px} .ts-mode button{padding:8px 16px;font-size:13px}
.ts-meta{grid-template-columns:repeat(3,1fr)}
.ts-res{grid-template-columns:repeat(4,1fr)}
.qcf-res .r-retest{--rc:var(--purple)}
.ts-codes button.on{background:var(--red);border-color:var(--red);color:var(--on-accent,#fff)}
.ts-unit[hidden],.ts-lot[hidden]{display:none}
.ts-scan{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:10px} .ts-scan input{flex:1;min-width:280px;font-family:var(--mono);font-size:15px;padding:10px 12px;border-width:1.5px;border-left:5px solid var(--indigo)} .ts-scan .qcf-err{flex-basis:100%}
.ts-count{font-size:12.5px;color:var(--ink2)}
.ts-rows{border:1px solid var(--rule);border-radius:10px;overflow:hidden;max-height:340px;overflow-y:auto}
.ts-rowh,.ts-row{display:grid;grid-template-columns:34px minmax(130px,1.1fr) 128px minmax(140px,1fr) minmax(140px,1.3fr) 30px;gap:8px;align-items:center;padding:6px 10px}
.ts-rowh{background:var(--paper2);font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--ink3);position:sticky;top:0;z-index:1}
.ts-row{border-top:1px solid var(--rule2)} .ts-row.fail{background:var(--red-l)} .ts-row.qcf-bad{box-shadow:inset 4px 0 0 var(--red)}
.ts-row .ts-n{font-family:var(--mono);font-size:12px;color:var(--ink3)} .ts-row .ts-ser{font-family:var(--mono);font-size:13px}
.ts-row select,.ts-row input{width:100%;padding:4px 7px;font-size:12.5px}
.ts-pf button{padding:4px 12px} .ts-pf button[data-r=Pass].on{background:var(--green);color:var(--on-accent,#fff)} .ts-pf button[data-r=Fail].on{background:var(--red);color:var(--on-accent,#fff)}
.ts-row .rj-del{border:0;background:none;color:var(--ink3);font-size:18px;cursor:pointer;line-height:1;border-radius:6px} .ts-row .rj-del:hover{color:var(--red)}
@media (max-width:860px){.ts-meta,.ts-res{grid-template-columns:1fr 1fr} .ts-rowh{display:none} .ts-row{grid-template-columns:30px 1fr 1fr}}
/* round 5: test type + pass on one line; failed units of a lot = one row per serial (the .qcf-row card from css/qc.css); failure-code tags */
.ts-typerow{display:grid;grid-template-columns:1fr auto;gap:10px 22px;align-items:start}
.ts-fails{margin-top:12px;border-top:1px solid var(--rule2);padding-top:10px}
.ts-failh{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:6px} .ts-failh .qcf-l{margin:0!important;flex:1}
.ts-failn{font-size:12px;color:var(--ink2)}
.ts-fcodes{display:inline-flex;flex-wrap:wrap;gap:3px;vertical-align:middle}
.ts-fc{display:inline-block;border-left:3px solid var(--red);background:var(--paper2);border-radius:5px;padding:0 7px 0 5px;font-size:11.5px;font-weight:600;color:var(--ink2);white-space:nowrap;line-height:1.7}
@media (max-width:860px){.ts-typerow{grid-template-columns:1fr}}
/* round 6 (Q21): bulk-failure note, above 25 failed units */
.ts-bulk{display:flex;flex-direction:column;gap:4px;margin:6px 0 4px} .ts-bulk[hidden]{display:none} .ts-bulk input{width:100%}
.ts-bulk input.qcf-bad{border-color:var(--red);box-shadow:0 0 0 2px color-mix(in srgb,var(--red) 20%,transparent)}
/* round 10 (G9): More (program rev, fixture, retest of) under the meta row; result spacing; record row without inline widths */
.ts-more{margin-top:10px} .ts-more>summary{cursor:pointer;font-size:12px;font-weight:600;color:var(--ink2)} .ts-more .qcf-meta{margin-top:8px}
.ts-resf{margin-top:12px}
.ts-recrow{grid-template-columns:minmax(220px,1fr) auto}
.ts-more>summary{text-align:left}
@media (max-width:700px){.ts-recrow{grid-template-columns:1fr}}
