:root{--bg: #f4f6f8;--surface: #ffffff;--surface-2: #f8fafc;--border: #dde2e8;--text: #18212d;--muted: #5d6877;--accent: #1d5fbf;--accent-hover: #174f9f;--accent-soft: #e8f0fc;--pass: #17784a;--pass-soft: #e5f4ec;--fail: #b8322a;--fail-soft: #fbe9e7;--na: #5f6b7a;--na-soft: #eceff3;--pending: #8a94a3;--pending-soft: #eef1f4;--warn: #8a5200;--warn-soft: #fff4e0;--radius: 10px;--shadow: 0 1px 2px rgba(16, 24, 40, .06);font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;font-size:15px;line-height:1.45;color:var(--text);background:var(--bg)}*{box-sizing:border-box}body{margin:0;background:var(--bg)}h1,h2,h3{line-height:1.2;margin:0 0 .4em}h1{font-size:1.45rem}h2{font-size:1.15rem}h3{font-size:1rem}p{margin:0 0 .6em}a{color:var(--accent)}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.app-header{position:sticky;top:0;z-index:10;display:flex;align-items:baseline;gap:16px;padding:12px 24px;background:var(--surface);border-bottom:1px solid var(--border)}.brand{font-size:1.05rem;font-weight:700;color:var(--text);text-decoration:none}.brand-sub{font-size:.85rem;color:var(--muted)}.header-user{margin-left:auto;display:flex;align-items:baseline;gap:12px;font-size:.9rem;color:var(--muted)}.offline-banner{position:sticky;top:49px;z-index:9;margin:0;border-radius:0;text-align:center}.page-loading{padding:48px 24px;text-align:center;color:var(--muted)}@media(max-width:640px){.brand-sub{display:none}}.page{max-width:1200px;margin:0 auto;padding:24px}.page.narrow{max-width:900px}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);padding:18px 20px}.section{margin-bottom:32px}.section-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px}.section-head h1,.section-head h2{margin:0}.muted{color:var(--muted)}.small{font-size:.85rem}.strong{font-weight:600}.en{font-style:italic}.pre-line{white-space:pre-line}.eyebrow{margin-bottom:4px;font-size:.78rem;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--muted)}.empty{padding:16px;color:var(--muted);background:var(--surface-2);border:1px dashed var(--border);border-radius:var(--radius)}.hint{margin:0;font-size:.9rem;color:var(--muted)}.back-link{display:inline-block;margin-bottom:12px;text-decoration:none}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:8px 14px;font:inherit;font-weight:500;color:var(--text);white-space:nowrap;text-decoration:none;cursor:pointer;background:var(--surface);border:1px solid var(--border);border-radius:8px}.btn:hover{background:var(--surface-2)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{color:#fff;background:var(--accent);border-color:var(--accent)}.btn-primary:hover{background:var(--accent-hover)}.btn-ghost{color:var(--muted);background:transparent;border-color:transparent}.btn-small{padding:5px 10px;font-size:.85rem}button.link{padding:0;font:inherit;color:var(--accent);text-decoration:underline;cursor:pointer;background:none;border:none}.icon-btn{padding:2px 7px;font-size:1.2rem;line-height:1;color:var(--muted);cursor:pointer;background:transparent;border:none;border-radius:6px}.icon-btn:hover{color:var(--fail);background:var(--fail-soft)}kbd{padding:0 5px;font:600 .72rem ui-monospace,Consolas,monospace;border:1px solid currentColor;border-radius:4px;opacity:.6}.segmented{display:inline-flex;overflow:hidden;border:1px solid var(--border);border-radius:8px}.segmented button{padding:7px 12px;font:inherit;font-size:.85rem;color:var(--muted);cursor:pointer;background:var(--surface);border:none}.segmented button+button{border-left:1px solid var(--border)}.segmented button.active{color:#fff;background:var(--accent)}input,select,textarea{width:100%;padding:8px 10px;font:inherit;color:inherit;background:#fff;border:1px solid var(--border);border-radius:8px}textarea{resize:vertical}input[aria-invalid=true]{border-color:var(--fail)}.field{display:flex;flex-direction:column;gap:4px;font-size:.9rem}.field>span{font-weight:500;color:var(--muted)}.field-error{margin:4px 0 0;font-size:.85rem;color:var(--fail)}.alert{margin-bottom:14px;padding:10px 14px;border:1px solid;border-radius:8px}.alert ul{margin:6px 0 0;padding-left:20px}.alert-error{color:#7d1f19;background:var(--fail-soft);border-color:#efc1bc}.alert-ok{color:#0f5233;background:var(--pass-soft);border-color:#b9e0c9}.alert-warn{color:#6b4000;background:var(--warn-soft);border-color:#f1d29a}.badge{display:inline-block;padding:2px 9px;font-size:.8rem;font-weight:600;white-space:nowrap;border-radius:999px}.badge-pass{color:var(--pass);background:var(--pass-soft)}.badge-fail{color:var(--fail);background:var(--fail-soft)}.badge-na{color:var(--na);background:var(--na-soft)}.badge-pending,.badge-incomplete{color:var(--muted);background:var(--pending-soft)}.progress{display:flex;height:8px;overflow:hidden;background:var(--pending-soft);border-radius:999px}.seg.pass{background:var(--pass)}.seg.fail{background:var(--fail)}.seg.na{background:var(--na);opacity:.6}.table-card{padding:0;overflow-x:auto}.table{width:100%;border-collapse:collapse}.table th,.table td{padding:10px 14px;text-align:left;vertical-align:middle;border-bottom:1px solid var(--border)}.table th{font-size:.8rem;font-weight:600;color:var(--muted);background:var(--surface-2)}.table tr:last-child td{border-bottom:none}.table .actions{text-align:right;white-space:nowrap}.actions .btn+.btn{margin-left:6px}.progress-cell{min-width:140px}.progress-cell .progress{margin-bottom:4px}.protocol-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:16px}.protocol-card{display:flex;flex-direction:column}.protocol-card .btn{align-self:flex-start;margin-top:auto}.form{display:flex;flex-direction:column;gap:22px;margin-top:16px}.form fieldset{margin:0;padding:0;border:none}.form legend{margin-bottom:10px;font-weight:600}.grid-2,.grid-3{display:grid;gap:12px 16px}.grid-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-3{grid-template-columns:repeat(3,minmax(0,1fr))}.instrument-row{display:grid;grid-template-columns:2fr 1.2fr 1fr auto;gap:8px;align-items:end;margin-bottom:8px}.instrument-row .icon-btn{margin-bottom:6px}.form .alert{margin:10px 0 0}.form .hint{margin-top:8px}.form-actions{display:flex;justify-content:flex-end;gap:10px}.summary-list{margin:6px 0 12px;padding-left:20px}.runner{display:flex;flex-direction:column;gap:14px;max-width:1320px;margin:0 auto;padding:20px 24px 40px}.runner-head{display:grid;grid-template-columns:minmax(0,1fr) 240px auto;gap:20px;align-items:center}.runner-head h1{margin:0 0 4px;font-size:1.2rem}.runner-progress .progress{margin-bottom:6px}.runner-actions{display:flex;flex-wrap:wrap;gap:8px;align-items:center;justify-content:flex-end}.runner>.alert{margin:0}.runner-body{display:grid;grid-template-columns:290px minmax(0,1fr);gap:14px;align-items:start}.step-nav{position:sticky;top:64px;max-height:calc(100vh - 90px);overflow:auto;padding:8px}.step-nav ol{margin:0;padding:0;list-style:none}.step-link{display:flex;gap:8px;align-items:flex-start;width:100%;padding:8px 10px;font:inherit;color:var(--text);text-align:left;cursor:pointer;background:none;border:none;border-radius:8px}.step-link:hover{background:var(--surface-2)}.step-link.active{background:var(--accent-soft)}.step-num{min-width:1.4em;font-weight:600;color:var(--muted)}.step-label{display:-webkit-box;overflow:hidden;font-size:.88rem;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical}.dot{flex:none;width:10px;height:10px;margin-top:5px;background:var(--pending-soft);border:2px solid var(--pending);border-radius:50%}.dot-pass{background:var(--pass);border-color:var(--pass)}.dot-fail{background:var(--fail);border-color:var(--fail)}.dot-na{background:var(--na);border-color:var(--na)}.step-panel{display:flex;flex-direction:column;gap:16px;padding:22px 24px}.step-panel .alert{margin:0}.step-panel-head{display:flex;align-items:center;justify-content:space-between}.step-panel-head h2{margin:0;font-size:1.25rem}.text-block-title{margin-bottom:4px;font-size:.78rem;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--muted)}.text-block p{margin:0;font-size:1.05rem}.bilingual{display:grid;grid-template-columns:1fr 1fr;gap:14px}.bilingual>div{padding:10px 12px;background:var(--surface-2);border:1px solid var(--border);border-radius:8px}.lang-tag{display:inline-block;margin-bottom:6px;padding:1px 6px;font-size:.7rem;font-weight:700;color:var(--accent);background:var(--accent-soft);border-radius:4px}.tx-both{display:flex;flex-direction:column;gap:2px}.tx-en{font-style:italic;color:var(--muted)}.measurement{padding:12px 14px;background:var(--surface-2);border:1px solid var(--border);border-radius:8px}.measurement label{display:block;margin-bottom:8px;font-weight:600}.measurement-row{display:flex;flex-wrap:wrap;gap:10px;align-items:center}.measurement-row input{width:180px;font-size:1.1rem}.unit{font-weight:600;color:var(--muted)}.status-buttons{display:flex;flex-wrap:wrap;gap:10px}.btn-status{min-width:120px;padding:10px 18px;font-size:1rem;font-weight:600}.btn-status.pass:hover{color:var(--pass);border-color:var(--pass)}.btn-status.fail:hover{color:var(--fail);border-color:var(--fail)}.btn-status.na:hover{color:var(--na);border-color:var(--na)}.btn-status.active,.btn-status.active:hover{color:#fff}.btn-status.pass.active{background:var(--pass);border-color:var(--pass)}.btn-status.fail.active{background:var(--fail);border-color:var(--fail)}.btn-status.na.active{background:var(--na);border-color:var(--na)}.attachments-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px;font-weight:600}.dropzone{padding:14px;font-size:.9rem;color:var(--muted);text-align:center;background:var(--surface-2);border:1.5px dashed var(--border);border-radius:8px}.dropzone.dragging{color:var(--accent);background:var(--accent-soft);border-color:var(--accent)}.attachment-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px;margin:10px 0 0;padding:0;list-style:none}.attachment{position:relative;overflow:hidden;background:var(--surface);border:1px solid var(--border);border-radius:8px}.attachment img{display:block;width:100%;height:110px;object-fit:cover}.file-tile{display:flex;align-items:center;justify-content:center;height:110px;font-weight:700;color:var(--muted);text-decoration:none;text-transform:uppercase;background:var(--surface-2)}.attachment-meta{display:flex;flex-direction:column;padding:6px 8px}.attachment-name{overflow:hidden;font-size:.82rem;white-space:nowrap;text-overflow:ellipsis}.attachment .icon-btn{position:absolute;top:4px;right:4px;background:#ffffffeb}.step-nav-buttons{display:flex;justify-content:space-between;padding-top:14px;border-top:1px solid var(--border)}.shortcut-hint{margin:0;font-size:.82rem;color:var(--muted);text-align:center}.report-toolbar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;max-width:210mm;margin:20px auto 0}.report-toolbar .spacer{flex:1}.report{max-width:210mm;margin:14px auto 40px;padding:16mm 15mm;font-size:10.5pt;color:#111;background:#fff;border-radius:4px;box-shadow:0 2px 10px #10182814}.report h2{margin:18px 0 8px;padding-bottom:3px;font-size:11pt;letter-spacing:.04em;text-transform:uppercase;border-bottom:1.5px solid #222}.report-header{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding-bottom:10px;border-bottom:3px solid var(--accent)}.report-header h1{margin:2px 0 4px;font-size:16pt}.report-kicker{font-size:9pt;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--accent)}.report-meta{color:#444}.overall{padding:6px 14px;font-size:13pt;font-weight:800;white-space:nowrap;border:2px solid;border-radius:6px}.overall-pass{color:var(--pass)}.overall-fail{color:var(--fail)}.overall-incomplete{color:var(--muted)}.draft-banner{margin-bottom:10px;padding:6px;font-size:9pt;font-weight:700;letter-spacing:.05em;color:var(--warn);text-align:center;text-transform:uppercase;background:var(--warn-soft);border:1px solid #f1d29a}.kv{display:grid;grid-template-columns:max-content 1fr max-content 1fr;gap:4px 14px;margin:0}.kv dt{color:#555}.kv dd{margin:0;font-weight:600}.report table{width:100%;font-size:9.5pt;border-collapse:collapse}.report th,.report td{padding:5px 6px;text-align:left;vertical-align:top;border:1px solid #c9ced6}.report th{font-weight:600;background:#eef1f5}.report td.num{width:28px;text-align:center}.report td.measured{white-space:nowrap}.report td.comment{white-space:pre-line}.report .badge{font-size:8.5pt}.report ul{margin:4px 0;padding-left:18px}.footnote{margin-top:4px;font-size:8.5pt;color:#555}.summary-line{margin-top:8px}.evidence-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}.evidence-grid figure{margin:0;padding:6px;border:1px solid #c9ced6;border-radius:4px;break-inside:avoid}.evidence-grid img{display:block;width:100%;max-height:80mm;object-fit:contain}.evidence-file .file-tile{height:50px}figcaption{margin-top:4px;font-size:8.5pt;color:#444}.signatures{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-top:22px;break-inside:avoid}.signature-box{padding:8px 10px;border:1px solid #c9ced6;border-radius:4px}.signature-title{margin-bottom:8px;font-weight:700}.signature-line{margin-bottom:6px;font-size:9.5pt}.signature-line span{color:#555}.signature-line.sign{height:40px}.report-footer{display:flex;justify-content:space-between;gap:10px;margin-top:18px;padding-top:6px;font-size:8pt;color:#666;border-top:1px solid #c9ced6}@page{size:A4;margin:12mm}@media print{body,:root{background:#fff}.no-print{display:none!important}.report{max-width:none;margin:0;padding:0;border-radius:0;box-shadow:none}.report thead{display:table-header-group}.report tr,.report figure{break-inside:avoid}.report h2{break-after:avoid}*{-webkit-print-color-adjust:exact;print-color-adjust:exact}}@media(max-width:900px){.page,.runner{padding:16px}.runner-head,.runner-body,.bilingual{grid-template-columns:1fr}.step-nav{position:static;max-height:none}.grid-2,.grid-3{grid-template-columns:1fr}.instrument-row{grid-template-columns:1fr 1fr}.kv{grid-template-columns:max-content 1fr}.report{padding:16px}.evidence-grid,.signatures{grid-template-columns:1fr}}.badge-state{background:var(--surface);border:1px solid currentColor}.transitions{display:grid;gap:6px}.transitions-buttons{display:flex;flex-wrap:wrap;gap:6px}.transitions-blocked{margin:0;padding-left:18px}.transitions .alert{margin:0}.draft-box{margin:8px 0;padding:8px 10px;border:1px dashed var(--border);border-radius:var(--radius);background:var(--bg)}.draft-box p{margin:0 0 6px}.login-overlay{position:fixed;inset:0;z-index:50;overflow:auto;background:#10182873}.login-overlay .page{margin-top:8vh}
