html,body{height:100%}body{display:flex;flex-direction:column;min-height:100vh;background:var(--gray-light)}#app{flex:1;display:flex;flex-direction:column;max-width:1280px;width:100%;margin:0 auto;padding:18px 24px 24px;gap:18px}#step-indicator{display:flex;align-items:stretch;gap:6px;background:var(--white);border:1px solid var(--border);border-radius:var(--radius-lg);padding:8px;box-shadow:var(--shadow-sm)}#step-indicator .step{flex:1;display:flex;align-items:center;justify-content:center;gap:8px;padding:10px 12px;background:transparent;border:1px solid transparent;border-radius:var(--radius);font-size:13px;color:var(--gray-dark);cursor:pointer;transition:all .15s}#step-indicator .step:hover:not(:disabled){background:var(--orange-bg);color:var(--orange)}#step-indicator .step.active{background:var(--orange-bg);border-color:var(--orange);color:var(--orange);font-weight:600}#step-indicator .step.completed:not(.active) .step-num{background:#d4edda;color:#155724}#step-indicator .step:disabled{opacity:.55;cursor:not-allowed}#step-indicator .step-num{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:50%;background:var(--gray-light);font-size:11px;font-weight:700;color:var(--gray-dark)}#step-indicator .step.active .step-num{background:var(--orange);color:var(--white)}#step-content{flex:1;display:flex;flex-direction:column}.step-panel{display:none;background:var(--white);border:1px solid var(--border);border-radius:var(--radius-lg);padding:24px;box-shadow:var(--shadow-sm);min-height:320px;flex-direction:column;gap:16px}.step-panel.active{display:flex}.step-panel h3{font-size:14px;font-weight:700;color:var(--navy);margin:0}.step-panel .hint{font-size:12px;color:var(--gray-dark);margin:2px 0 0;line-height:1.4}.step-nav{display:flex;align-items:center;justify-content:space-between;padding-top:12px;margin-top:auto;border-top:1px solid var(--border)}#drop-zone{display:flex;flex-direction:column;gap:16px;align-items:stretch;padding:32px;border:2px dashed var(--border);border-radius:var(--radius-lg);background:var(--panel-bg);transition:border-color .15s,background .15s}#drop-zone.active{border-color:var(--orange);background:var(--orange-bg)}.dz-prompt{display:flex;flex-direction:column;align-items:center;gap:8px;text-align:center}.dz-title{font-size:18px;font-weight:600;color:var(--navy)}.dz-hint{font-size:13px;color:var(--gray-dark);max-width:540px;line-height:1.5}.dz-actions{display:flex;gap:10px;flex-wrap:wrap;justify-content:center;margin-top:8px}.dz-note{font-size:12px;color:var(--gray-dark);text-align:center}.dz-note code{background:var(--gray-light);padding:2px 5px;border-radius:3px}.dz-paste{margin-top:4px}.dz-paste summary{cursor:pointer;font-weight:500;color:var(--navy);padding:4px 0}.dz-paste textarea{width:100%;font-family:ui-monospace,SF Mono,Consolas,monospace;font-size:12px;padding:10px;border:1px solid var(--border);border-radius:var(--radius);margin:8px 0}.dz-error{background:var(--up-lt);color:var(--up);border:1px solid var(--up);padding:10px 12px;border-radius:var(--radius);font-size:13px}.define-section{padding:14px 16px;border:1px solid var(--border);border-radius:var(--radius);background:var(--panel-bg)}.define-section+.define-section{margin-top:14px}.define-section legend{padding:0 6px;font-weight:600;color:var(--navy);font-size:13px}.define-section label{display:inline-flex;align-items:center;gap:6px;font-size:13px;margin-right:16px}.define-section input[type=number],.define-section input[type=text],.define-section select{padding:4px 8px;font-size:13px;border:1px solid var(--border);border-radius:var(--radius);background:var(--white)}.define-section .inline-num{display:inline-flex;align-items:center;gap:6px}.vendor-banner{padding:10px 14px;background:var(--orange-bg);border:1px solid var(--orange);border-radius:var(--radius);font-size:13px;color:var(--navy)}.mapping-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px 16px;margin-top:8px}.mapping-grid label{display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--gray-dark);font-weight:500}.mapping-grid select{padding:5px 8px;font-size:13px;border:1px solid var(--border);border-radius:var(--radius);background:var(--white);color:var(--text)}.raw-preview{background:#2a2f36;color:#d6deeb;font-family:ui-monospace,SF Mono,Consolas,monospace;font-size:11px;padding:10px;border-radius:var(--radius);max-height:200px;overflow:auto;white-space:pre-wrap}.define-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}.define-grid>*{margin:0}.check-list{display:flex;flex-wrap:wrap;gap:8px 14px;margin-top:8px}.check-item{font-size:13px}.group-assignment-list{display:flex;flex-direction:column;gap:4px;max-height:220px;overflow-y:auto;padding:4px 0}.group-row{display:grid;grid-template-columns:1fr 1fr;gap:10px;align-items:center}.group-row .sample-name{font-size:12px;color:var(--gray-dark)}.group-row input{width:100%}.prefix-rules{padding:10px 0}.eff-row{display:grid;grid-template-columns:1fr 80px 30px;gap:8px;align-items:center;margin:4px 0}.table-wrap{overflow-x:auto;max-width:100%}.data-table{border-collapse:collapse;font-size:12px;width:100%;background:var(--white)}.data-table th,.data-table td{border:1px solid var(--border);padding:6px 10px;text-align:left}.data-table th{background:var(--panel-bg);font-weight:600;color:var(--navy);white-space:nowrap}.data-table tbody tr:hover{background:#fafbfd}.data-table em{color:var(--gray-dark);font-style:italic}.qc-summary{display:flex;align-items:center;gap:14px;padding:10px 14px;background:var(--panel-bg);border-radius:var(--radius);font-size:13px}.qc-count{padding:3px 9px;border-radius:12px;font-weight:600;font-size:11px;text-transform:uppercase;letter-spacing:.5px}.qc-count.info{background:#e7f3ff;color:#1a6fa8}.qc-count.warn{background:#fff5e6;color:#b45a00}.qc-count.critical{background:var(--up-lt);color:var(--up)}.qc-summary-text{margin-left:auto;color:var(--gray-dark);font-size:12px}.qc-badge{display:inline-block;padding:1px 8px;border-radius:10px;font-weight:600;font-size:10px;text-transform:uppercase}.qc-badge.info{background:#e7f3ff;color:#1a6fa8}.qc-badge.warn{background:#fff5e6;color:#b45a00}.qc-badge.critical{background:var(--up-lt);color:var(--up)}.qc-row.dismissed td{opacity:.55;text-decoration:line-through}.tool-toolbar{display:flex;align-items:center;gap:6px;padding:8px 12px;background:var(--white);border:1px solid var(--border);border-radius:var(--radius)}#canvas-wrap{position:relative;background:var(--white);border:1px solid var(--border);border-radius:var(--radius);padding:0;min-height:460px}#qpcr-canvas{display:block;width:100%;height:460px}#stats-strip{display:flex;align-items:center;gap:18px;flex-wrap:wrap;padding:10px 14px;background:var(--panel-bg);border-radius:var(--radius);font-size:12px}#stats-strip .stat-label{color:var(--gray-dark);margin-right:4px}#stats-strip .stat-val{font-weight:600;color:var(--navy)}#results-table-wrap{max-height:320px;overflow-y:auto;border:1px solid var(--border);border-radius:var(--radius)}#report-actions{display:flex;gap:10px;align-items:center}#report-preview{border:1px solid var(--border);border-radius:var(--radius);padding:18px;background:var(--white);max-height:60vh;overflow-y:auto}#report-preview .report-section{margin:14px 0}#report-preview h2{font-size:18px;color:var(--navy);border-bottom:2px solid var(--orange);padding-bottom:6px}#report-preview h3{font-size:14px;color:var(--navy-mid);margin-top:14px}#report-preview img{max-width:100%;border:1px solid var(--border);border-radius:var(--radius)}#report-preview .methods{line-height:1.6;background:var(--gray-light);padding:10px;border-radius:var(--radius);font-size:13px}.modal-body .data-table{font-size:12px;margin-top:8px}.modal-body h4{font-size:13px;margin:12px 0 4px;color:var(--navy)}@media (max-width:980px){.define-grid,.mapping-grid{grid-template-columns:1fr}}@media (max-width:820px){#app{padding:12px}#step-indicator{flex-wrap:wrap}#step-indicator .step{flex:1 1 28%;padding:8px 6px;gap:4px}#step-indicator .step-label{display:none}.step-nav{flex-direction:column;gap:8px}.step-nav button{width:100%}}@media print{#navbar,#footer,#step-indicator,.tool-toolbar,.step-nav,#drop-zone{display:none!important}body{background:#fff}#app{padding:0}.step-panel{box-shadow:none;border:none}#report-preview{border:none;padding:0;max-height:none;overflow:visible}}