:root{font-family:Inter,"Microsoft YaHei",system-ui,sans-serif;color:#17202a;background:#f5f7f8;letter-spacing:0;--line:#d8dee3;--muted:#66737f;--ink:#17202a;--primary:#146c5c;--primary-dark:#0d574a;--danger:#b42318;--ok:#237a57;--warn:#a15c00}
*{box-sizing:border-box}body{margin:0;min-height:100vh}button,input,select{font:inherit;letter-spacing:0}button,a{transition:background-color .15s,color .15s,border-color .15s}.hidden{display:none!important}.muted{color:var(--muted)}.brand{font-weight:800;font-size:20px;color:#102d29;text-decoration:none}.topbar{position:fixed;z-index:20;inset:0 0 auto 0;height:58px;display:flex;align-items:center;gap:18px;padding:0 22px;background:#fff;border-bottom:1px solid var(--line)}.topbar .brand{margin-right:auto}.topbar-title{font-weight:700}.org-switcher{display:flex;align-items:center;gap:7px;color:var(--muted);font-size:13px}.org-switcher select{max-width:220px}.icon-button{width:36px;height:36px;border:1px solid var(--line);background:#fff;font-size:20px;cursor:pointer}.icon-button:hover{background:#edf2f1}.text-link{color:var(--primary);font-weight:700;text-decoration:none}.primary,.secondary{display:inline-flex;align-items:center;justify-content:center;min-height:38px;padding:0 15px;border:1px solid transparent;text-decoration:none;font-weight:700;cursor:pointer;border-radius:4px}.primary{color:#fff;background:var(--primary)}.primary:hover{background:var(--primary-dark)}.secondary{color:var(--ink);background:#fff;border-color:var(--line)}.compact{min-height:32px;padding:0 11px;font-size:13px}.app-shell{min-height:100vh;padding-top:58px}.sidebar{position:fixed;left:0;top:58px;bottom:0;width:286px;background:#fff;border-right:1px solid var(--line);overflow:auto}.sidebar-heading{position:sticky;top:0;display:flex;align-items:center;justify-content:space-between;padding:18px 16px 12px;background:#fff}.sidebar-heading h2{font-size:15px;margin:0}.job-list{padding:0 8px 24px}.job-row{width:100%;display:block;text-align:left;padding:11px 10px;border:0;border-left:3px solid transparent;background:#fff;cursor:pointer}.job-row:hover{background:#f1f5f4}.job-row.active{border-left-color:var(--primary);background:#eaf3f1}.job-row strong,.job-row span{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.job-row span{margin-top:4px;color:var(--muted);font-size:12px}.content{margin-left:286px;padding:30px clamp(24px,4vw,60px) 70px}.empty-state{min-height:60vh;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;color:var(--muted)}.empty-state h1{color:var(--ink);font-size:24px}.page-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:24px;margin-bottom:24px}.page-heading h1{font-size:26px;margin:2px 0 6px}.eyebrow{margin:0;color:var(--primary);font-size:12px;font-weight:800;text-transform:uppercase}.actions{display:flex;gap:9px}.stage-strip{display:grid;grid-template-columns:repeat(5,minmax(90px,1fr));border-top:1px solid var(--line);border-bottom:1px solid var(--line);margin-bottom:22px}.stage{padding:13px 10px;border-right:1px solid var(--line)}.stage:last-child{border-right:0}.stage span{display:block;color:var(--muted);font-size:11px;margin-top:3px}.stage.done{border-top:3px solid var(--ok)}.stage.running,.stage.queued{border-top:3px solid #3478b9}.stage.failed{border-top:3px solid var(--danger)}.metrics{display:grid;grid-template-columns:repeat(4,minmax(120px,1fr));gap:1px;background:var(--line);border:1px solid var(--line);margin:18px 0 26px}.metric{background:#fff;padding:16px}.metric span{display:block;color:var(--muted);font-size:12px}.metric strong{display:block;margin-top:7px;font-size:22px}.section-band{padding:22px 0;border-top:1px solid var(--line)}.section-title{display:flex;align-items:center;justify-content:space-between;gap:20px;margin-bottom:12px}.section-title h2{font-size:17px;margin:0}.data-table{width:100%;border-collapse:collapse;background:#fff}.data-table th,.data-table td{text-align:left;padding:10px 12px;border-bottom:1px solid #e7ebee;font-size:13px;vertical-align:top}.data-table th{color:var(--muted);font-weight:700;background:#fafbfb}.status{font-weight:700}.status.completed,.status.done,.status.correct{color:var(--ok)}.status.failed,.status.incorrect{color:var(--danger)}.status.queued,.status.processing,.status.leased{color:#286da8}.notice{padding:12px 14px;border-left:3px solid #3478b9;background:#eef5fb}.notice.error,.error{color:var(--danger)}.notice.error{border-color:var(--danger);background:#fff1f0}.login-shell{min-height:100vh;display:grid;place-items:center;background:#edf1f2}.login-panel{width:min(400px,calc(100vw - 32px));padding:32px;background:#fff;border:1px solid var(--line)}.login-panel h1{font-size:24px;margin:8px 0 24px}.login-panel label,.form-grid label{display:grid;gap:6px;margin-bottom:15px;color:var(--muted);font-size:13px}.login-panel input,.form-grid input,.inline-form input,select{min-height:39px;padding:7px 10px;border:1px solid #bfc8cf;background:#fff;border-radius:3px}.login-panel .primary{width:100%}dialog{width:min(700px,calc(100vw - 30px));border:1px solid var(--line);padding:0;box-shadow:0 20px 60px #17202a33}dialog::backdrop{background:#17202a66}.dialog-heading{display:flex;justify-content:space-between;padding:22px 24px 12px}.dialog-heading h2{margin:2px 0}.form-grid{padding:8px 24px}.dialog-actions{display:flex;justify-content:flex-end;gap:9px;padding:16px 24px;border-top:1px solid var(--line)}.progress-text{min-height:24px;padding:0 24px 12px;color:var(--primary);font-size:13px}.admin-content{padding:92px clamp(24px,5vw,80px) 70px}.inline-form{display:grid;grid-template-columns:1fr 1.4fr 1.4fr 1fr auto auto;gap:8px;margin:12px 0 18px}.review-editor{display:grid;grid-template-columns:120px 90px 90px 1fr auto;gap:7px;align-items:center}.review-editor input,.review-editor select{width:100%;min-width:0}.small{font-size:12px}.nowrap{white-space:nowrap}
@media(max-width:800px){.topbar{padding:0 12px;gap:10px}.topbar .muted,.org-switcher{display:none}.sidebar{position:static;width:auto;height:auto;border-right:0;border-bottom:1px solid var(--line);max-height:220px}.app-shell{padding-top:58px}.content{margin-left:0;padding:22px 14px 60px}.page-heading{display:block}.actions{margin-top:14px}.stage-strip{grid-template-columns:repeat(5,1fr);overflow:auto}.stage{min-width:80px;padding:10px 6px;font-size:12px}.metrics{grid-template-columns:repeat(2,1fr)}.data-table{display:block;overflow:auto}.inline-form{grid-template-columns:1fr}.review-editor{grid-template-columns:1fr 1fr}.review-editor .reason{grid-column:1/-1}.admin-content{padding:80px 14px 50px}.page-heading h1{font-size:22px}}

/* Staged uploads keep files durable before a grading job is submitted. */
.draft-list{padding:8px 8px 24px;border-top:1px solid #edf0f1}.draft-heading{padding:11px 10px 6px;color:var(--muted);font-size:12px;font-weight:700}.draft-row{width:100%;display:block;text-align:left;padding:11px 10px;border:0;border-left:3px solid #b3c9c3;background:#f8fbfa;cursor:pointer}.draft-row:hover{background:#f1f5f4}.draft-row strong,.draft-row span{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.draft-row span{margin-top:4px;color:var(--muted);font-size:12px}.sidebar-empty{padding:0 10px}.visually-hidden{position:fixed;inline-size:1px;block-size:1px;opacity:0;pointer-events:none}.upload-dialog{width:min(900px,calc(100vw - 24px));max-height:min(90vh,900px)}.upload-workspace{padding:4px 24px 0;overflow:auto;max-height:calc(90vh - 92px)}.upload-intro{max-width:520px;padding:12px 0 28px}.upload-intro p{line-height:1.7;color:var(--muted)}.upload-intro label{display:grid;gap:6px;max-width:240px;margin:18px 0}.upload-intro input{min-height:39px;padding:7px 10px;border:1px solid #bfc8cf;background:#fff;border-radius:3px}.upload-summary{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;padding:12px 0 18px}.upload-summary strong,.upload-summary span{display:block}.upload-summary span{margin-top:4px;color:var(--muted);font-size:13px}.draft-badge{margin:0!important;padding:5px 8px;background:#eaf3f1;color:var(--primary)!important;font-size:12px!important;font-weight:700;white-space:nowrap}.upload-section{padding:20px 0;border-top:1px solid var(--line)}.upload-section-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px}.upload-section-head h3{font-size:16px;margin:0 0 4px}.upload-section-head p{margin:0;color:var(--muted);font-size:13px;line-height:1.5}.upload-section-head>span{color:var(--primary);font-weight:700;white-space:nowrap}.standard-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:14px}.upload-card{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;border:1px solid var(--line);padding:15px;background:#fbfcfc}.upload-card h3{font-size:14px;margin:0 0 5px}.upload-card p{margin:0 0 14px;color:var(--muted);font-size:12px;line-height:1.5}.asset-status{display:grid;gap:3px;font-size:12px;color:var(--muted)}.asset-status strong{color:#7a858d}.asset-status.success strong{color:var(--ok)}.paper-actions{display:flex;gap:9px;margin:15px 0 12px}.paper-summary{display:flex;flex-wrap:wrap;gap:7px}.paper-summary span{padding:5px 7px;border:1px solid #d9e4e1;background:#f7fbfa;color:#3e5a54;font-size:12px}.upload-feedback{padding-bottom:12px}.upload-item-list{border:1px solid var(--line)}.upload-item{display:grid;grid-template-columns:1fr 170px;gap:16px;align-items:center;padding:11px 12px;border-bottom:1px solid #e7ebee}.upload-item:last-child{border-bottom:0}.upload-item strong,.upload-item span{display:block}.upload-item strong{font-size:13px}.upload-item>div:first-child>span{margin-top:3px;color:var(--muted);font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.upload-item.error strong{color:var(--danger)}.upload-item.success strong{color:var(--ok)}.upload-state{text-align:right;font-size:12px;color:var(--muted)}.upload-state i{display:block;height:4px;margin-top:5px;background:var(--primary);transition:width .15s}.upload-message{min-height:20px;margin-top:12px;font-size:13px;color:var(--muted)}.upload-message.success{color:var(--ok)}.upload-message.error{color:var(--danger)}.upload-actions{margin:0 -24px}.upload-ready{margin-right:auto;color:var(--muted);font-size:13px}.upload-ready.ready{color:var(--ok);font-weight:700}.camera-dialog{width:min(620px,calc(100vw - 20px));background:#121a1b;color:#f5f8f7;border-color:#243333}.camera-heading{display:flex;align-items:center;justify-content:space-between;padding:12px 14px}.camera-heading .icon-button{background:transparent;color:#fff;border-color:#506260}.camera-stage{position:relative;display:grid;place-items:center;min-height:260px;background:#060a0a}.camera-stage video,.camera-stage img{display:block;max-width:100%;max-height:min(66vh,660px);object-fit:contain}.camera-fallback{padding:24px;text-align:center;color:#cbd5d2}.camera-hint{min-height:20px;margin:0;padding:12px 14px;color:#c9d7d3;font-size:13px}.camera-actions{display:flex;justify-content:flex-end;gap:9px;padding:0 14px 16px}.camera-actions .secondary{background:#263431;color:#fff;border-color:#506260}
@media(max-width:800px){.upload-dialog{width:100vw;max-width:none;height:100vh;max-height:none;border:0}.upload-workspace{max-height:calc(100vh - 86px);padding:4px 16px 0}.upload-actions{position:sticky;bottom:0;margin:0 -16px;padding:13px 16px;background:#fff;align-items:center}.standard-grid{grid-template-columns:1fr}.upload-card{align-items:center}.upload-item{grid-template-columns:1fr}.upload-state{text-align:left}.paper-actions{display:grid;grid-template-columns:1fr}.paper-actions button{width:100%}.camera-dialog{width:100vw;max-width:none;height:100vh;max-height:none;border:0}.camera-stage{min-height:0;height:calc(100vh - 170px)}.camera-stage video,.camera-stage img{max-height:100%;width:100%;object-fit:contain}.camera-actions{position:fixed;left:0;right:0;bottom:0;background:#121a1b}.upload-summary{display:block}.draft-badge{display:inline-block!important;margin-top:10px!important}.upload-ready{display:none}}
.cross-device{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:14px 16px;border:1px solid #c9ded8;background:#f5faf8}.cross-device strong,.cross-device span,.cross-device small{display:block}.cross-device strong{font-size:14px}.cross-device span{margin-top:4px;color:var(--muted);font-size:12px;line-height:1.55}.cross-device small{margin-top:5px;color:var(--primary);font-size:12px}.cross-device-actions{display:flex;flex:none;gap:8px}.cross-device-actions button{white-space:nowrap}@media(max-width:800px){.cross-device{display:block}.cross-device-actions{display:grid;grid-template-columns:1fr 1fr;margin-top:12px}.cross-device-actions button{width:100%}}
.upload-card-actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px;flex:none}.upload-card-actions .secondary{padding:0 10px;font-size:12px;white-space:nowrap}
.archive-list{border-top:1px solid var(--line)}.archive-row{display:flex;align-items:center;justify-content:space-between;gap:20px;padding:14px 4px;border-bottom:1px solid var(--line)}.archive-main strong,.archive-main span,.archive-main small{display:block}.archive-main span{margin-top:4px;color:var(--muted);font-size:13px}.archive-main small{margin-top:4px;color:var(--muted);font-size:12px}.archive-actions{display:flex;gap:8px;flex:none}.danger-action{color:var(--danger);border-color:#e0aaa5}.danger-action:hover{background:#fff1f0;border-color:var(--danger)}
.ops-content{max-width:1480px;margin:0 auto}.metric small{display:block;margin-top:6px;color:var(--muted);font-size:11px;font-weight:400}.progress-evaluation-controls{display:flex;gap:8px;max-width:720px}.progress-evaluation-controls select{min-width:0;flex:1}.ops-evaluation{margin-top:14px;padding:14px;background:#fff;border:1px solid var(--line);overflow:auto}.ops-evaluation p{margin:0 0 12px}.ops-subtable{height:14px}.ops-id{font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:11px!important;overflow-wrap:anywhere}.ops-body .section-title>div p{margin:5px 0 0}.ops-body .section-title{align-items:flex-start}
@media(max-width:800px){.archive-row{display:block;padding:14px 0}.archive-actions{margin-top:12px}.archive-actions button{min-height:40px;flex:1}}
@media(max-width:800px){.progress-evaluation-controls{display:grid;grid-template-columns:1fr}.ops-content{padding-left:14px;padding-right:14px}.ops-evaluation{margin-left:-1px;margin-right:-1px}}

/* Report assets remain private behind the API; this shell only provides navigation and a stable reading surface. */
.review-body{background:#eef2f2}.review-shell{min-height:100vh;padding-top:58px}.review-topbar .brand{margin-right:8px}.review-topbar .topbar-title{margin-right:auto;font-weight:700}.review-queue-panel{position:fixed;top:58px;bottom:0;left:0;width:304px;overflow:auto;background:#fff;border-right:1px solid var(--line)}.review-queue-heading{position:sticky;top:0;z-index:2;padding:18px 16px 12px;background:#fff;border-bottom:1px solid #edf0f1}.review-queue-heading h1{font-size:16px;margin:0 0 4px}.review-queue-heading p{margin:0}.review-filters{display:flex;gap:6px;margin-top:12px}.filter-button{min-height:30px;padding:0 9px;border:1px solid var(--line);background:#fff;border-radius:3px;color:var(--muted);font-size:12px;font-weight:700;cursor:pointer}.filter-button.active{border-color:var(--primary);background:#eaf3f1;color:var(--primary)}.review-queue{padding:8px}.review-queue-row{display:block;width:100%;padding:12px 10px;text-align:left;border:0;border-left:3px solid transparent;background:#fff;cursor:pointer}.review-queue-row:hover{background:#f1f5f4}.review-queue-row.active{border-left-color:var(--primary);background:#eaf3f1}.review-queue-row strong,.review-queue-row span,.review-queue-row small{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.review-queue-row strong{font-size:14px}.review-queue-row strong span{display:inline}.review-queue-row span{margin-top:5px;font-size:12px;color:#9a5d00;font-weight:700}.review-queue-row small{margin-top:4px;font-size:11px;color:var(--muted)}.review-workspace{min-height:calc(100vh - 58px);margin-left:304px;padding:28px clamp(22px,4vw,58px) 56px}.review-empty{min-height:58vh;display:flex;flex-direction:column;align-items:center;justify-content:center;color:var(--muted);text-align:center}.review-empty h1{font-size:22px;color:var(--ink)}.review-detail{max-width:1500px;margin:0 auto}.review-detail-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:20px;margin-bottom:18px}.review-detail-heading h1{font-size:26px;margin:2px 0 6px}.review-detail-heading p{margin:0;max-width:720px}.review-nav{display:flex;gap:8px}.review-grid{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(350px,.75fr);gap:20px;align-items:start}.review-image-panel,.review-evidence-panel{margin:0;background:#fff;border:1px solid var(--line)}.review-image-panel{min-height:430px;padding:16px;display:flex;flex-direction:column;justify-content:center}.review-image-panel figcaption{padding:12px 0 0;color:var(--muted);font-size:12px}.review-question-image{display:block;width:100%;max-height:72vh;object-fit:contain;background:#f5f6f6}.review-image-state{display:grid;place-items:center;min-height:320px;color:var(--muted);background:#f5f6f6}.review-evidence-panel{padding:22px}.evidence-block+.evidence-block,.review-decision{border-top:1px solid #e7ebee;margin-top:20px;padding-top:20px}.evidence-block h2,.review-decision h2{font-size:16px;margin:0 0 12px}.evidence-list{display:grid;grid-template-columns:128px minmax(0,1fr);gap:0;margin:0}.evidence-list dt,.evidence-list dd{margin:0;padding:9px 0;border-bottom:1px solid #edf0f1;font-size:13px;overflow-wrap:anywhere}.evidence-list dt{color:var(--muted)}.evidence-list dd{font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-weight:700}.detection-list{margin-top:14px}.detection-list h3{font-size:13px;margin:0 0 7px}.detection-row{display:grid;grid-template-columns:28px 58px 1fr 52px;gap:7px;align-items:center;padding:8px 9px;margin-top:4px;border-left:3px solid #a55555;background:#fff4f3;font-size:12px}.detection-row.accepted{border-left-color:var(--ok);background:#eef8f3}.detection-row span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.decision-heading{display:flex;align-items:baseline;justify-content:space-between;gap:12px}.quick-actions{display:flex;flex-wrap:wrap;gap:7px;margin-bottom:15px}.review-decision label{display:grid;gap:6px;margin-top:13px;color:var(--muted);font-size:13px}.review-decision select,.review-decision input,.review-decision textarea{width:100%;min-height:39px;padding:8px 10px;border:1px solid #bfc8cf;background:#fff;border-radius:3px;color:var(--ink)}.review-decision textarea{resize:vertical}.score-fields{display:grid;grid-template-columns:1fr 1fr;gap:10px}.decision-actions{display:flex;justify-content:flex-end;gap:9px;margin-top:18px}.review-entry .section-title{align-items:flex-start}.review-entry .section-title>div p{margin:5px 0 0}.review-entry .notice{margin-top:0}
.choice-review-queue-panel .review-queue-heading p:last-child{line-height:1.55;margin-top:8px}.choice-review-workspace{max-width:1420px}.choice-review-detail{max-width:1180px;margin:0 auto}.choice-review-grid{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(290px,.65fr);gap:20px;align-items:start}.choice-crop-panel{min-height:440px}.choice-review-form{padding:22px;background:#fff;border:1px solid var(--line)}.choice-review-form h2{margin:0 0 18px;font-size:18px}.choice-review-form label{display:block;margin-bottom:7px;color:var(--muted);font-size:13px}.choice-review-form input{box-sizing:border-box;width:100%;min-height:48px;padding:8px 12px;border:1px solid #aab7be;border-radius:3px;color:var(--ink);font:700 22px ui-monospace,SFMono-Regular,Consolas,monospace;letter-spacing:0}.choice-review-actions{margin-top:24px}.choice-review-actions .primary{width:100%;min-height:44px}.review-queue-row.edited{border-left-color:#b87900;background:#fff9e8}.review-queue-row.edited small{color:#8b5b00;font-weight:700}@media(max-width:800px){.choice-review-grid{grid-template-columns:1fr;gap:12px}.choice-crop-panel{min-height:260px}.choice-review-form{padding:16px}.choice-review-actions{position:sticky;bottom:0;margin:18px -16px -16px;padding:10px 16px;background:#fff;border-top:1px solid var(--line)}}
 .review-image-layer{position:relative;display:inline-block;align-self:center;max-width:100%;line-height:0}.review-question-image{position:relative;z-index:1;width:auto;max-width:100%;height:auto;max-height:72vh;object-fit:contain}.spatial-overlay{position:absolute;z-index:2;inset:0;width:100%;height:100%;pointer-events:none;overflow:visible}.spatial-overlay rect{fill:none;stroke-width:3}.spatial-overlay text{font:700 18px Arial,sans-serif;paint-order:stroke;stroke:#fff;stroke-width:4;stroke-linejoin:round}.overlay-question rect{stroke:#1677b8}.overlay-question text{fill:#1677b8}.overlay-slot rect{stroke:#bd7a00;stroke-dasharray:8 5}.overlay-slot text{fill:#9a6200}.overlay-accepted rect{stroke:#13834a}.overlay-accepted text{fill:#08733e}.overlay-rejected rect{stroke:#b42318}.overlay-rejected text{fill:#a51d14}.overlay-legend{display:flex;flex-wrap:wrap;gap:9px;margin-top:10px;font-size:12px;color:var(--muted)}.overlay-legend span{display:inline-flex;align-items:center;gap:5px}.overlay-legend span::before{content:"";width:12px;height:12px;border:2px solid currentColor}.legend-question{color:#1677b8}.legend-slot{color:#9a6200}.legend-accepted{color:#08733e}.legend-rejected{color:#b42318}
.report-viewer-body{background:#edf1f2}.report-viewer-shell{min-height:100vh;padding-top:58px}.report-viewer-topbar .brand{margin-right:8px}.report-viewer-topbar .topbar-title{margin-right:auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.report-list-panel{position:fixed;top:58px;bottom:0;left:0;width:286px;overflow:auto;background:#fff;border-right:1px solid var(--line)}.report-list-heading{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:18px 16px 12px;border-bottom:1px solid #edf0f1}.report-list-heading h1{margin:0;font-size:15px}.report-list{padding:8px}.report-row{display:block;width:100%;padding:12px 10px;text-align:left;border:0;border-left:3px solid transparent;background:#fff;cursor:pointer}.report-row:hover{background:#f1f5f4}.report-row.active{border-left-color:var(--primary);background:#eaf3f1}.report-row strong,.report-row span{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.report-row strong{font-size:14px}.report-row span{margin-top:4px;color:var(--muted);font-size:12px}.report-canvas{min-height:calc(100vh - 58px);margin-left:286px;padding:22px}.report-frame-shell{height:calc(100vh - 102px);min-height:620px;background:#fff;border:1px solid var(--line);box-shadow:0 2px 12px #17202a0d}.report-frame-shell iframe{display:block;width:100%;height:100%;border:0;background:#fff}.report-canvas .notice{max-width:760px;margin:42px auto}
@media(max-width:800px){.report-viewer-topbar{gap:7px}.report-viewer-topbar .topbar-title{display:none}.report-viewer-topbar .muted{display:none}.report-viewer-topbar .secondary,.report-viewer-topbar .primary{padding:0 9px;font-size:12px}.report-list-panel{position:static;width:auto;max-height:170px;border-right:0;border-bottom:1px solid var(--line)}.report-list{display:flex;overflow:auto;padding:7px}.report-row{min-width:142px;border-left:0;border-bottom:3px solid transparent}.report-row.active{border-left-color:transparent;border-bottom-color:var(--primary)}.report-canvas{min-height:calc(100vh - 228px);margin-left:0;padding:10px}.report-frame-shell{height:calc(100vh - 248px);min-height:500px}}
@media(max-width:800px){.review-topbar{gap:7px}.review-topbar .topbar-title,.review-topbar .muted{display:none}.review-topbar .secondary{padding:0 9px;font-size:12px}.review-queue-panel{position:static;width:auto;max-height:184px;border-right:0;border-bottom:1px solid var(--line)}.review-queue-heading{padding:13px 14px 9px}.review-queue{display:flex;overflow:auto;padding:7px}.review-queue-row{min-width:180px;border-left:0;border-bottom:3px solid transparent}.review-queue-row.active{border-left-color:transparent;border-bottom-color:var(--primary)}.review-workspace{min-height:calc(100vh - 242px);margin-left:0;padding:18px 14px 44px}.review-detail-heading{display:block}.review-nav{margin-top:12px}.review-grid{grid-template-columns:1fr;gap:12px}.review-image-panel{min-height:260px;padding:10px}.review-question-image{max-height:none}.review-image-state{min-height:230px}.review-evidence-panel{padding:16px}.evidence-list{grid-template-columns:104px minmax(0,1fr)}.detection-row{grid-template-columns:28px 52px 1fr}.detection-row span:last-child{display:none}.decision-actions{position:sticky;bottom:0;margin:18px -16px -16px;padding:10px 16px;background:#fff;border-top:1px solid var(--line)}.review-entry .section-title{display:block}.review-entry .section-title .primary{margin-top:12px}}
/* Operations cockpit: one live first viewport, with verbose diagnostics kept below it. */
.ops-body{background:#f2f5f4;color:#17202a}.ops-topbar{position:sticky;top:0;z-index:20}.ops-topbar .topbar-title{margin-right:4px;font-weight:700}.ops-nav{display:flex;align-items:center;gap:14px;margin-left:auto}.ops-refresh{min-height:32px;padding:0 10px;font-size:12px}.ops-connection{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:700;color:#5d6d73}.ops-connection::before{content:"";width:7px;height:7px;border-radius:50%;background:#a7b1b5}.ops-connection.live{color:#16724a}.ops-connection.live::before{background:#1a9a61}.ops-connection.fallback,.ops-connection.paused{color:#8c5e00}.ops-connection.fallback::before,.ops-connection.paused::before{background:#d59000}.ops-freshness{font-size:12px;color:var(--muted)}.ops-dashboard{max-width:1540px;margin:0 auto;padding:34px clamp(18px,4vw,64px) 70px}.ops-summary{display:flex;align-items:flex-end;justify-content:space-between;gap:36px;padding:4px 0 26px;border-bottom:1px solid #dbe3e1}.ops-summary h1{margin:3px 0 7px;font-size:28px}.ops-summary .eyebrow{margin:0;color:#55716b;font-size:11px;font-weight:800;letter-spacing:.08em}.ops-health-message{max-width:710px;margin:0;color:#59686e;font-size:14px;line-height:1.6}.ops-summary-metrics{display:grid;grid-template-columns:repeat(4,minmax(90px,1fr));min-width:440px;border-left:1px solid #dbe3e1}.ops-summary-metric{padding:2px 14px;border-right:1px solid #dbe3e1}.ops-summary-metric span,.ops-summary-metric strong{display:block}.ops-summary-metric span{color:#66767b;font-size:11px}.ops-summary-metric strong{margin-top:5px;font-size:22px;line-height:1.1}.ops-summary-metric.warning strong{color:#a35f00}.ops-primary-grid{display:grid;grid-template-columns:minmax(0,1.52fr) minmax(320px,.78fr);gap:18px;margin-top:20px}.ops-side-stack{display:grid;gap:18px;align-content:start}.ops-panel{border:1px solid #dbe3e1;background:#fff}.ops-panel-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding:18px 20px;border-bottom:1px solid #e7edeb}.ops-panel-heading.compact{padding:15px 17px}.ops-panel-heading h2,.ops-panel-heading h3{margin:0;font-size:16px}.ops-panel-heading p{margin:5px 0 0;color:#6c7a7e;font-size:12px;line-height:1.5}.ops-count{display:grid;place-items:center;min-width:27px;height:27px;padding:0 8px;border:1px solid #bdd3cd;background:#eff8f5;color:#226b56;font-size:13px;font-weight:800}.ops-count.warning{border-color:#efd49a;background:#fff9e9;color:#9a6200}.ops-active-jobs{min-height:168px}.ops-job-row{padding:16px 20px;border-bottom:1px solid #edf1f0}.ops-job-row:last-child{border-bottom:0}.ops-job-meta,.ops-progress-line,.ops-job-foot{display:flex;align-items:center;gap:12px}.ops-job-meta{justify-content:space-between}.ops-job-meta strong,.ops-job-meta span{display:block}.ops-job-meta strong{font-size:14px}.ops-job-meta span,.ops-job-meta time,.ops-job-foot{color:#718084;font-size:12px}.ops-progress-line{margin-top:11px}.ops-progress-track{height:7px;flex:1;background:#e8eeec;overflow:hidden}.ops-progress-track i{display:block;height:100%;background:#19765d;transition:width .35s ease}.ops-progress-line strong{width:47px;text-align:right;font-size:12px}.ops-progress-line span{min-width:106px;color:#647276;font-size:12px}.ops-job-foot{justify-content:space-between;margin-top:8px}.ops-empty{display:grid;place-content:center;min-height:168px;padding:20px;text-align:center;color:#647276}.ops-empty strong,.ops-empty span{display:block}.ops-empty strong{color:#344348;font-size:14px}.ops-empty span{margin-top:6px;font-size:12px;line-height:1.55}.ops-empty.compact{min-height:74px}.ops-pipeline-wrap{padding:15px 20px 20px;background:#fbfcfc;border-top:1px solid #e7edeb}.ops-pipeline-heading{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:11px}.ops-pipeline-heading h3{margin:0;font-size:13px}.ops-pipeline-heading span{color:#738085;font-size:11px}.ops-pipeline{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:7px}.ops-stage{min-width:0;padding:10px;border:1px solid #e0e8e5;background:#fff}.ops-stage strong,.ops-stage span{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ops-stage strong{font-size:12px}.ops-stage span{margin-top:3px;color:#718084;font-size:11px}.ops-stage-counts{display:grid;grid-template-columns:repeat(3,1fr);gap:3px;margin-top:10px}.ops-stage-counts b{padding:4px 2px;background:#edf4f1;color:#36675a;text-align:center;font:700 11px ui-monospace,SFMono-Regular,Consolas,monospace}.ops-health-rows{padding:3px 17px}.ops-health-row{display:flex;align-items:flex-start;gap:10px;padding:12px 0;border-bottom:1px solid #edf1f0}.ops-health-row:last-child{border-bottom:0}.ops-dot{width:8px;height:8px;margin-top:5px;border-radius:50%;background:#aeb9b6}.ops-dot.ok{background:#1a9a61}.ops-dot.warning{background:#d59000}.ops-health-row strong,.ops-health-row small{display:block}.ops-health-row strong{font-size:13px}.ops-health-row small{margin-top:3px;color:#718084;font-size:11px;line-height:1.45}.ops-alerts{min-height:94px}.ops-alert{display:flex;justify-content:space-between;gap:12px;padding:12px 17px;border-bottom:1px solid #edf1f0;border-left:3px solid #e0ae52}.ops-alert:last-child{border-bottom:0}.ops-alert.critical{border-left-color:#bd463e;background:#fff8f7}.ops-alert strong,.ops-alert span{display:block}.ops-alert strong{font-size:12px}.ops-alert span{max-width:250px;margin-top:3px;color:#6b787c;font-size:11px;line-height:1.4;overflow-wrap:anywhere}.ops-alert time{flex:none;color:#829095;font-size:10px;white-space:nowrap}.ops-observability-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin-top:18px}.ops-bars{padding:13px 18px 16px}.ops-bar-row{display:grid;grid-template-columns:minmax(125px,.8fr) minmax(90px,1.7fr) 64px;gap:12px;align-items:center;padding:8px 0}.ops-bar-row>div:first-child strong,.ops-bar-row>div:first-child span{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ops-bar-row>div:first-child strong{font-size:12px}.ops-bar-row>div:first-child span{margin-top:3px;color:#758287;font-size:10px}.ops-bar-track{height:7px;background:#e7eeeb;overflow:hidden}.ops-bar-track i{display:block;height:100%;background:#39836d}.ops-bar-row b{text-align:right;color:#4a595e;font:700 11px ui-monospace,SFMono-Regular,Consolas,monospace}.ops-detail-panel{margin-top:18px}.ops-details-grid{display:grid;grid-template-columns:1fr 1fr}.ops-details-grid details{min-width:0;border-right:1px solid #e7edeb;border-bottom:1px solid #e7edeb}.ops-details-grid details:nth-child(2n){border-right:0}.ops-details-grid summary{padding:15px 18px;cursor:pointer;font-size:13px;font-weight:700;list-style:none}.ops-details-grid summary::-webkit-details-marker{display:none}.ops-details-grid summary::after{content:"展开";float:right;color:#718084;font-size:11px;font-weight:400}.ops-details-grid details[open] summary::after{content:"收起"}.ops-details-grid details>div{padding:0 18px 18px}.ops-table-wrap{overflow:auto}.ops-table-wrap+.ops-table-wrap{margin-top:14px}.ops-evaluation-list{display:flex;flex-wrap:wrap;gap:8px}.ops-evaluation-button{font-size:12px}.ops-evaluation-result{margin-top:12px;color:#58686d;font-size:12px;line-height:1.55}.ops-evaluation-result p{margin:0 0 10px}.ops-body .data-table{min-width:500px}.ops-body .data-table th,.ops-body .data-table td{font-size:11px}.ops-body .status{padding:2px 5px;font-size:10px}
@media(max-width:900px){.ops-summary{display:block}.ops-summary-metrics{min-width:0;margin-top:20px}.ops-primary-grid,.ops-observability-grid{grid-template-columns:1fr}.ops-topbar{gap:8px}.ops-nav{gap:8px}.ops-freshness{display:none}.ops-dashboard{padding:22px 14px 48px}.ops-details-grid{grid-template-columns:1fr}.ops-details-grid details{border-right:0}.ops-pipeline{overflow:auto}.ops-stage{min-width:112px}.ops-pipeline{grid-template-columns:repeat(5,112px)}.ops-job-foot{display:block}.ops-job-foot span+span{display:block;margin-top:4px}.ops-progress-line{display:grid;grid-template-columns:1fr auto}.ops-progress-line span{grid-column:1/-1;min-width:0}.ops-summary-metrics{grid-template-columns:repeat(2,1fr)}.ops-summary-metric{padding:10px 12px;border-bottom:1px solid #dbe3e1}.ops-nav .text-link{display:none}}

/* System administration and tenant management are separate scopes. */
.admin-role-badge{padding:7px 10px;border:1px solid #aacbc2;background:#edf7f4;color:#176851;font-size:12px;font-weight:800}.admin-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin-bottom:30px}.admin-panel{min-width:0;padding:18px;border:1px solid var(--line);background:#fff}.compact-form{grid-template-columns:1fr 1.2fr 1.2fr auto auto}.organization-toolbar{display:flex;align-items:flex-end;justify-content:space-between;gap:20px;margin-top:30px;padding:18px 0 12px;border-top:2px solid #b9c8c3}.organization-toolbar h2{margin:3px 0 0;font-size:20px}.organization-picker{display:flex;align-items:center;gap:9px;color:var(--muted);font-size:12px}.organization-picker select{min-width:220px}.role-label{display:inline-block;padding:3px 6px;border:1px solid var(--line);font-size:11px;font-weight:800}.role-label.system{border-color:#abc9c0;background:#edf7f4;color:#176851}.role-label.organization{background:#f4f6f5;color:#53625c}.selected-row td{background:#f0f7f4}
@media(max-width:800px){.admin-grid{grid-template-columns:1fr}.organization-toolbar{display:block}.organization-picker{margin-top:12px}.organization-picker select{min-width:0;max-width:100%}.admin-role-badge{display:inline-block;margin-top:10px}}
