/* Reference-style shell: full-width navy application header with KPI cards, navy sidebar below, light workspace. Offline only. */
:root{--navy:#0d2440;--navy2:#163657;--navy3:#1d4470;--navy-ink:#dce7f4;--blue:#1f6fbf;--blue-bg:#e7f0fb;--radius:4px}
body.shell{display:block;min-height:100vh;background:#eef1f5}
header.apphead{display:flex;align-items:center;gap:18px;background:linear-gradient(180deg,#10294a,#0b2039);color:#fff;padding:8px 18px;min-height:76px;position:sticky;top:0;z-index:20;border-bottom:3px solid #0a1a2e}
header.apphead .brand{display:flex;align-items:center;gap:12px;min-width:320px;padding-right:18px;border-right:1px solid #2a4a72}
header.apphead .brand b{display:block;font-size:22px;letter-spacing:.2px} header.apphead .brand small{color:#c9d8ea;font-size:13.5px}
.kpis-top{display:flex;gap:20px;flex:1;justify-content:center;flex-wrap:wrap}
.kt{display:flex;align-items:center;gap:8px;color:#fff;text-decoration:none;padding:4px 6px;border-radius:6px}
.kt:hover{background:#18365c} .kt b{display:block;font-size:21px;line-height:1.05} .kt small{font-size:11.5px;color:#d3e0ef}
.ki{width:34px;height:34px;border-radius:7px;display:flex;align-items:center;justify-content:center;font-size:18px;border:1px solid rgba(255,255,255,.35)}
.ki.k1{background:#1f6fd1}.ki.k2{background:#6a3fc9}.ki.k3{background:#1f9a55}.ki.k4{background:#e07b1f}.ki.k5{background:#d23a2f}
.who{display:flex;flex-direction:column;gap:4px;min-width:250px;font-size:12px}
.who .nm{display:flex;gap:8px;align-items:center} .who .cap{font-size:22px} .who b{display:block;font-size:14px} .who small{color:#c9d8ea}
.who .ds{color:#e6eef8;line-height:1.3} .who .dot{display:inline-block;width:9px;height:9px;border-radius:50%;background:#3ccf6e;margin-right:6px}
.body{display:flex;min-height:calc(100vh - 79px)}
aside.side{width:224px;flex:0 0 224px;background:var(--navy);color:var(--navy-ink);position:sticky;top:79px;height:calc(100vh - 79px);overflow-y:auto;display:flex;flex-direction:column}
aside.side nav{display:flex;flex-direction:column;padding:6px 0;flex:1}
aside.side .nv{display:flex;align-items:center;gap:10px;padding:9px 14px;color:var(--navy-ink);text-decoration:none;font-size:13px;white-space:nowrap}
aside.side .nv i{font-style:normal;width:18px;text-align:center;font-size:15px}
aside.side a.nv:hover{background:var(--navy2)} aside.side a.nv.on{background:var(--blue);color:#fff;font-weight:600}
aside.side .nv.off{opacity:.45;cursor:not-allowed}
aside.side .grp{font-size:10.5px;text-transform:uppercase;letter-spacing:.6px;color:#8ea6c2;padding:12px 16px 2px}
aside.side .sub .nv{padding:3px 16px 3px 30px;font-size:12px}
aside.side .sidefoot{padding:10px 12px;border-top:1px solid var(--navy2);display:flex;flex-direction:column;gap:6px}
aside.side .sidefoot input{width:100%;font-size:12px;padding:5px 7px;background:#12304f;border-color:#2a4a72;color:#fff}
aside.side .sidefoot .ghost{width:100%;color:#cfe0f3;border-color:#3b5d86;font-size:12px;padding:4px}
aside.side .mode{font-size:10.5px;font-weight:700;padding:2px 8px;border-radius:10px;background:var(--blue);color:#fff;text-align:center}
aside.side .mode.viva{background:var(--viva)} aside.side .mode.professor{background:var(--prof)}
aside.side .collapse{background:transparent;border:1px solid var(--navy2);color:var(--navy-ink);font-size:11px;padding:2px}
body.side-min aside.side{width:52px;flex-basis:52px} body.side-min aside.side .nv span,body.side-min aside.side .sub,body.side-min aside.side .grp,
body.side-min aside.side .sidefoot form,body.side-min aside.side .sidefoot .mode{display:none}
.wrap{flex:1;min-width:0;display:flex;flex-direction:column}
body.shell main{max-width:none;width:100%;padding:12px 14px}
.pill{font-size:12px;padding:3px 9px;border-radius:12px;text-decoration:none;border:1px solid var(--line);white-space:nowrap}
.pill.red{color:var(--r);border-color:var(--r);background:var(--r-bg)}
body.shell .panel{border-radius:var(--radius);border-color:#d6dde6;box-shadow:0 1px 1px rgba(16,40,70,.04)}
body.shell .panel h3{color:#14365c;font-size:15px}
@media (max-width:1100px){header.apphead{flex-wrap:wrap} header.apphead .brand{border-right:0}}
/* home */
.kpis{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:10px;margin-bottom:14px}
.kpi{display:flex;gap:10px;align-items:center;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:10px 12px;text-decoration:none;color:inherit}
.kpi .ic{font-size:20px;width:34px;height:34px;border-radius:8px;display:flex;align-items:center;justify-content:center;background:var(--blue-bg)}
.kpi .n{font-size:22px;font-weight:700;line-height:1.1} .kpi .l{font-size:12px;color:var(--muted)} .kpi .h{font-size:11px;color:var(--muted)}
.cols3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px} @media (max-width:1200px){.cols3{grid-template-columns:1fr 1fr}} @media (max-width:800px){.cols3{grid-template-columns:1fr}}
.stack{display:flex;height:16px;border-radius:4px;overflow:hidden;border:1px solid var(--line)} .stack span{display:block}
.stack .VERIFIED,.sw.VERIFIED{background:var(--g)} .stack .AVAILABLE,.sw.AVAILABLE{background:#5b9bd5} .stack .PARTIAL,.sw.PARTIAL{background:#e0b341} .stack .TO_BE_VERIFIED,.sw.TO_BE_VERIFIED{background:#f1d48a}
.stack .CONFLICT,.sw.CONFLICT{background:var(--r)} .stack .MISSING,.sw.MISSING{background:#c9cfd6} .stack .NOT_APPLICABLE,.sw.NOT_APPLICABLE{background:#eceff3}
.legend{display:flex;flex-wrap:wrap;gap:10px;font-size:12px;margin-top:6px} .legend i{display:inline-block;width:10px;height:10px;border-radius:2px;margin-right:4px;vertical-align:-1px}
.panel h3{margin-top:0} .panel.tight{padding:10px 12px} table.compact td,table.compact th{padding:3px 6px;font-size:12.5px}
/* explorer (reference layout) */
.exgrid{display:grid;grid-template-columns:minmax(0,1fr) 330px;gap:12px;align-items:start} @media (max-width:1250px){.exgrid{grid-template-columns:1fr}}
.exmain{padding:10px 12px} .exmain .ph{font-size:16px;margin:0 0 8px;color:#14365c}
.ttabs{display:flex;flex-wrap:wrap;border:1px solid #d6dde6;border-radius:3px;background:#f7f9fc;margin-bottom:10px}
.ttabs a{padding:7px 14px;text-decoration:none;color:#23384f;font-size:13px;border-right:1px solid #e1e6ed}
.ttabs a.on{background:var(--blue);color:#fff;font-weight:600}
.filters{display:grid;grid-template-columns:repeat(4,minmax(0,1fr)) minmax(0,2fr) minmax(0,1.1fr);gap:10px;margin-bottom:10px} .filters label{font-size:12px;color:#334a63;display:flex;flex-direction:column;gap:3px}
.filters label.wide{grid-column:auto} @media (max-width:1100px){.filters{grid-template-columns:repeat(3,minmax(0,1fr))}} .filters select{width:100%;padding:5px 6px;font-size:13px}
.exrow{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(0,1fr);gap:10px} @media (max-width:1000px){.exrow{grid-template-columns:1fr}}
.panel.inner{padding:8px 10px;margin-bottom:10px} .chartbox .note{margin:4px 0 0}
.kr{width:100%;border-collapse:collapse} .kr td{font-size:12.5px;padding:4px 7px;border-bottom:1px solid #e6eaf0} .kr td:first-child{color:#3c5068;width:42%}
.kr.grid td{border:1px solid #e3e8ee} .kr.grid td:first-child{background:#f6f8fb}
.ltabs{display:flex;gap:0;border-bottom:1px solid #d6dde6;margin-top:2px} .ltabs button{background:#f6f8fb;color:#23384f;border:1px solid #d6dde6;border-bottom:none;border-radius:3px 3px 0 0;font-size:12.5px;padding:6px 14px;margin-right:2px}
.ltabs button.on{background:var(--blue);color:#fff;border-color:var(--blue)} .ltpanes{border:1px solid #d6dde6;border-top:none;padding:8px;max-height:360px;overflow:auto}
.ltpanes h4{margin:10px 0 4px;font-size:13px}
.exside .panel{padding:8px 10px;margin-bottom:12px} .exside h3{margin:0 0 6px}
.elink{display:flex;align-items:center;gap:10px;padding:7px 4px;border-bottom:1px solid #e6eaf0;font-size:13px} .elink a{flex:1;text-decoration:none;color:#14365c} .elink.na{color:var(--muted)}
.elink .cnt{font-size:11px;color:var(--muted)} .ei{width:24px;height:24px;border-radius:3px;font-size:10px;font-weight:700;display:flex;align-items:center;justify-content:center;color:#fff;background:#6b7c90}
.ei.pdf{background:#c62828}.ei.xls{background:#1e7a46}.ei.img{background:#1f6fbf}.ei.fld{background:#f0b429}.ei.stg{background:#5b9bd5}
.mk{cursor:help}
.evstrip{background:var(--panel);border:1px solid #d6dde6;border-radius:var(--radius);padding:8px 10px;margin-top:12px}
.evtabs{display:flex;flex-wrap:wrap;gap:2px;margin-bottom:8px;align-items:center} .evtabs button{background:#f6f8fb;color:#23384f;border:1px solid #d6dde6;font-size:12.5px;padding:6px 14px;border-radius:3px 3px 0 0}
.evtabs button.on{background:var(--blue);color:#fff;border-color:var(--blue)} .evtabs .cnt{margin-left:6px;font-size:10.5px;opacity:.8}
.thumbs{display:flex;gap:12px;overflow-x:auto;padding-bottom:6px;min-height:150px}
.th{flex:0 0 200px;border:1px solid #d6dde6;border-radius:3px;background:#fff;cursor:pointer;display:flex;flex-direction:column;overflow:hidden}
.th:hover{border-color:var(--blue);box-shadow:0 0 0 1px var(--blue)}
.th .pv{height:120px;display:flex;align-items:center;justify-content:center;background:#f3f5f8;overflow:hidden}
.th .pv img{width:100%;height:120px;object-fit:cover}
.ft{font-weight:800;font-size:20px;color:#7d8da0} .ft.pdf{color:#c62828} .ft.xls{color:#1e7a46}
.th .cap{font-size:11.5px;padding:5px 7px;line-height:1.3;text-align:center} .th .cap b{display:block;word-break:break-all;font-weight:600} .th .cap span{color:var(--muted);font-size:10.5px}
.th.na{opacity:.65;cursor:default}
.empty{padding:24px;text-align:center;color:var(--muted);border:1px dashed var(--line);border-radius:4px;width:100%}
.viewer{position:fixed;inset:0;background:rgba(10,20,35,.82);display:none;z-index:50;flex-direction:column}
.viewer.open{display:flex} .viewer .vbar{display:flex;gap:8px;align-items:center;padding:8px 12px;background:var(--navy);color:#fff;flex-wrap:wrap}
.viewer .vbar .nm{flex:1;font-size:13px;word-break:break-all} .viewer .vbar button{padding:4px 10px}
.viewer .stage{flex:1;overflow:auto;display:flex;align-items:center;justify-content:center}
.viewer .stage img{transform-origin:center;transition:transform .1s} .viewer .stage iframe{width:96%;height:96%;border:0;background:#fff}
.health td:first-child{color:var(--muted)}

/* finalization pass: compact evidence captions (full text in tooltip) */
.evstrip .th .cap span{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.chartbox svg.chart{max-height:360px}
.keyres table.kr td:last-child{overflow-wrap:anywhere}

/* Review Workflow */
.okbox{background:#e8f5e9;border:1px solid #81c784;border-radius:6px;padding:8px 12px;margin:8px 0}
.rvs{display:inline-block;padding:1px 8px;border-radius:10px;font-size:12px;background:#eceff1;color:#37474f;white-space:nowrap}
.rvs.approved{background:#e8f5e9;color:#1b5e20}.rvs.rejected{background:#ffebee;color:#b71c1c}.rvs.conflict-kept{background:#fff3e0;color:#e65100}
.rvs.evidence-requested{background:#e3f2fd;color:#0d47a1}
.rvform label{display:block;margin:8px 0;font-size:13px}.rvform input,.rvform select,.rvform textarea{width:100%;box-sizing:border-box;margin-top:3px}
.rqf{grid-template-columns:repeat(6,1fr) auto}
.ttabs a .cnt{font-size:11px;opacity:.75;margin-left:4px}
.chooser .nc{color:#b71c1c;font-size:12px;font-weight:600}.chooser select{width:100%;margin-top:4px}

/* Phone / small-tablet layout (researcher request 09-10-2026): compact header, slide-in menu, scrollable tables */
.menu-btn{display:none}
@media (max-width:760px){
 header.apphead{position:static;min-height:0;padding:6px 10px;gap:8px;flex-wrap:nowrap}
 header.apphead .brand{min-width:0;padding-right:0;border-right:0;gap:8px}
 header.apphead .brand svg{width:26px;height:26px}
 header.apphead .brand b{font-size:15px} header.apphead .brand small{display:none}
 .kpis-top,.who{display:none}
 .menu-btn{display:block;background:transparent;border:1px solid #3b5d86;color:#fff;font-size:20px;line-height:1;padding:4px 9px;border-radius:6px;cursor:pointer}
 .body{display:block;min-height:0}
 aside.side{position:fixed;top:0;left:0;bottom:0;height:100vh;width:250px;flex:none;z-index:50;transform:translateX(-105%);transition:transform .2s;box-shadow:2px 0 12px rgba(0,0,0,.35)}
 body.nav-open aside.side{transform:none}
 body.nav-open::after{content:"";position:fixed;inset:0;background:rgba(0,0,0,.35);z-index:40}
 body.side-min aside.side{width:250px} body.side-min aside.side .nv span,body.side-min aside.side .sub,body.side-min aside.side .grp{display:revert}
 aside.side .collapse{display:none}
 body.shell main{padding:8px}
 h1{font-size:20px} h2{font-size:17px}
 table{display:block;overflow-x:auto;max-width:100%}
 img,svg,iframe{max-width:100%;height:auto}
 .panel{padding:10px}
 .tabs,.evtabs{overflow-x:auto;flex-wrap:nowrap;white-space:nowrap}
 .filters,.rqf{grid-template-columns:1fr 1fr !important}
 .kpis{grid-template-columns:1fr 1fr}
 .viewer .vbar{flex-wrap:wrap;gap:4px}
}

/* Reviewer circles (RD-0050): ① ② ③ required, ④ test */
.rcircles{display:inline-flex;gap:3px;vertical-align:middle}
.rc{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:50%;font-size:11px;font-weight:700;color:#fff;cursor:help}
.rcircles.big .rc{width:28px;height:28px;font-size:14px}
.rc.ok{background:#1e9e4a}.rc.no{background:#d23a2f}.rc.pend{background:#c3cad3;color:#33475b}
.rc.test{background:transparent!important;border:2px dashed #8a97a6;color:#5b6b7c}
.rc.test.ok{border-color:#1e9e4a;color:#1e9e4a}.rc.test.no{border-color:#d23a2f;color:#d23a2f}
.decide textarea{width:100%;min-height:54px;margin-bottom:6px}
.okbtn{background:#1e9e4a;border-color:#1e9e4a}.nobtn{background:#d23a2f;border-color:#d23a2f}

/* On-page marks (RD-0051) */
.marktools{display:flex;flex-wrap:wrap;gap:4px;align-items:center;margin-bottom:6px}
.marktools button{padding:4px 9px;font-size:13px;background:#fff;color:#14365c;border:1px solid #9fb3c8}
.marktools button.on{background:#14365c;color:#fff;border-color:#14365c}
.markwrap{position:relative;line-height:0;touch-action:auto}
.markwrap.drawing{touch-action:none}
.markwrap svg.markpen{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}
.marklayer{position:absolute;inset:0;pointer-events:none}
.markcatch{position:absolute;inset:0;display:none;cursor:crosshair}
.markwrap.drawing .markcatch{display:block}
.markwrap.hidemarks .marklayer,.markwrap.hidemarks svg.markpen{display:none}
.mk{position:absolute;pointer-events:auto;cursor:pointer}
.mk.pin{width:24px;height:24px;margin:-24px 0 0 -12px;border-radius:50% 50% 50% 0;transform:rotate(-45deg);display:flex;align-items:center;justify-content:center;border:2px solid #fff;box-shadow:0 1px 3px rgba(0,0,0,.4)}
.mk.pin span{transform:rotate(45deg);color:#fff;font:700 11px/1 system-ui}
.mk.box{border:2px solid;background:transparent}
.mk.highlight{background:rgba(255,235,59,.45);border:0;mix-blend-mode:multiply}
.mk .tag{position:absolute;top:-10px;left:-10px;width:18px;height:18px;border-radius:50%;color:#fff;font:700 10px/18px system-ui;text-align:center}
.mk.closed{opacity:.35}
.mk.draft{border-style:dashed}
.markform{border:1px solid #9fb3c8;background:#f7fafd;padding:8px;margin-top:6px;border-radius:6px}
.markform textarea{width:100%;min-height:56px}
.panel.flash{outline:3px solid #ffb300}
/* RD-0051 fix (09-10-2026): toolbar follows the scroll; the comment box floats in view at the bottom of the screen */
.marktools{position:sticky;top:0;z-index:30;background:#eef1f5;padding:6px 4px;border-bottom:1px solid #d6dde6}
.markform{position:fixed;left:50%;bottom:14px;transform:translateX(-50%);width:min(560px,94vw);z-index:60;box-shadow:0 6px 24px rgba(0,0,0,.25);background:#fff}
.marktools .hint{font-size:12px;color:#14365c;font-weight:600;margin-left:6px}
/* toolbar sits just below the sticky header on PC; at the very top on phones (header not sticky there) */
.marktools{top:var(--headh,82px)}
@media (max-width:760px){.marktools{top:0}}
.marktools .savebtn{background:#1e9e4a;color:#fff;border-color:#1e9e4a;font-weight:600}
.marktools .savebtn:disabled{background:#c9d3dc;border-color:#c9d3dc;color:#fff;cursor:not-allowed}
/* Reviewer name banner (09-10-2026): who is reviewing, in large letters */
.revbanner{display:flex;align-items:baseline;gap:14px;flex-wrap:wrap;background:linear-gradient(90deg,#4a148c,#6a1b9a);color:#fff;padding:10px 22px;border-bottom:3px solid #ffd54f}
.revbanner .rb-l{font-size:15px;opacity:.85}
.revbanner .rb-n{font-size:30px;font-weight:800;letter-spacing:.3px}
.revbanner .rb-r{margin-left:auto;font-size:14px;opacity:.85}
@media (max-width:760px){.revbanner{padding:8px 12px;gap:6px}.revbanner .rb-n{font-size:22px}.revbanner .rb-r{margin-left:0;font-size:12px}}

.revbanner .rb-no{display:inline-flex;align-items:center;justify-content:center;width:38px;height:38px;border-radius:50%;background:#ffd54f;color:#4a148c;font-size:22px;vertical-align:middle;margin-right:6px}
@media (max-width:760px){.revbanner .rb-no{width:28px;height:28px;font-size:16px}}
.markdel{background:#fff;color:#d23a2f;border:1px solid #d23a2f;padding:3px 10px;font-size:12px}
