:root{font-family:Inter,"Segoe UI","Microsoft YaHei",system-ui,sans-serif;color:#1e293b;background:#f6f8fc;font-size:14px;--blue:#2563eb;--muted:#64748b;--line:#e2e8f0}*{box-sizing:border-box}body{margin:0}a{color:#2563eb;text-decoration:none}a:hover{text-decoration:underline}button,input,select,textarea{font:inherit}button,.button{display:inline-flex;align-items:center;justify-content:center;gap:6px;border:1px solid #dbe1ea;border-radius:8px;padding:9px 13px;background:#fff;color:#475569;cursor:pointer;white-space:nowrap;line-height:1.4;text-decoration:none}button:hover,.button:hover{background:#eff6ff;border-color:#93b4f5;text-decoration:none}button:disabled{opacity:.5;cursor:wait}.primary{background:#2563eb;color:white;border-color:#2563eb}.primary:hover{background:#1d4ed8;color:#fff}.sidebar{position:fixed;inset:0 auto 0 0;width:240px;background:#101b30;color:#b6c3d9;padding:28px 16px;display:flex;flex-direction:column}.brand{display:flex;align-items:center;gap:12px;color:#fff;font-weight:650;font-size:17px;padding:0 8px}.brand:hover{text-decoration:none}.brand small{display:block;font-size:9px;letter-spacing:2px;color:#8da1bd;margin-top:7px}.brand-mark{background:#2563eb;color:white;display:grid;place-items:center;border-radius:12px;width:40px;height:40px;font-size:24px;font-weight:750}.nav-label{font-size:11px;color:#8193ae;margin:40px 14px 15px;letter-spacing:2px}.sidebar nav a{display:flex;gap:14px;align-items:center;color:#b6c3d9;padding:13px 16px;margin:5px 0;border-radius:9px}.sidebar nav a span{font-size:21px;width:24px}.sidebar nav a:hover{background:#1b2a43;text-decoration:none}.sidebar nav a.active{color:#fff;background:#2563eb;box-shadow:0 4px 14px #02061730}.sidebar-bottom{margin-top:auto;padding:20px 12px 0;border-top:1px solid #27364d;font-size:12px}.sidebar-bottom p{color:#8292ac;font-size:11px;line-height:1.8}.live-dot{display:inline-block;width:7px;height:7px;border-radius:50%;background:#34d399;margin-right:6px}main{margin-left:240px}.topbar{height:70px;background:#fff;border-bottom:1px solid var(--line);padding:0 34px;display:flex;justify-content:space-between;align-items:center;color:#64748b}.topbar strong{font-weight:500;color:#334155}.topbar span{margin:0 12px}.page{padding:30px 34px 50px;max-width:1900px;margin:auto}.heading,.section-head{display:flex;justify-content:space-between;align-items:center;gap:20px;margin-bottom:24px}.heading h1{font-size:26px;letter-spacing:-.7px;margin:0 0 10px;color:#0f172a}.heading p{color:var(--muted);margin:0;line-height:1.8}.actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap}h2{font-size:18px;margin:0 0 15px}h3{font-size:16px;margin:15px 0}p{line-height:1.8}.muted{color:var(--muted)}.small,small{font-size:12px}.eyebrow{font-size:10px;font-weight:650;letter-spacing:2px}.overview-banner{background:linear-gradient(115deg,#152a51,#244b87);border-radius:14px;padding:27px 30px;display:flex;justify-content:space-between;align-items:center;color:#fff;margin-bottom:24px;gap:20px}.overview-banner .eyebrow{color:#94b6ed}.overview-banner h2{font-size:24px;margin:12px 0 9px;font-weight:600}.overview-banner p{color:#b6c9e6;margin:0;font-size:12px}.banner-alert{display:flex;flex-direction:column;gap:8px;background:#ffffff0d;border:1px solid #ffffff23;color:#d7e5ff;padding:20px 26px;border-radius:12px;min-width:205px}.banner-alert strong{font-size:34px;color:#fff}.banner-alert span{font-size:12px}.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:18px;margin-bottom:32px}.stats article{border:1px solid var(--line);border-radius:12px;background:white;padding:23px}.stats article>span{color:#64748b;font-size:13px}.stats strong{display:block;font-size:31px;margin:15px 0 10px;font-weight:650;color:#0f172a}.stats small{margin-left:8px;color:#64748b;font-weight:400}.stats p{font-size:11px;color:#8290a5;margin:0}.section-head{margin:26px 0 18px}.section-head h2{margin:0}.section-head p{margin:6px 0 0;font-size:12px}.cohort-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px}.cohort-card{padding:22px;border:1px solid var(--line);border-radius:12px;background:#fff;transition:box-shadow .15s}.cohort-card:hover{box-shadow:0 6px 24px #142c5010}.card-top{display:flex;justify-content:space-between;align-items:center}.code{background:#eef4ff;color:#2563eb;display:inline-block;padding:5px 9px;border-radius:6px;font-size:12px;font-weight:650}.cohort-card h3{margin:17px 0 23px;min-height:21px}.recruit{display:flex;align-items:baseline;gap:8px}.recruit strong{font-size:26px}.recruit span{font-size:12px;color:#94a3b8}.recruit b{margin-left:auto;font-size:11px;font-weight:500;color:#64748b}.progress{height:5px;border-radius:5px;background:#edf1f7;margin:12px 0 22px;overflow:hidden}.progress i{display:block;background:#3b82f6;height:100%;border-radius:5px}.card-metrics{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}.card-metrics span{display:block;font-size:11px;color:#94a3b8;margin-bottom:9px}.card-metrics strong{font-size:17px;font-weight:600}.cohort-card footer{display:flex;justify-content:space-between;gap:10px;border-top:1px solid #f0f3f8;padding-top:15px;margin-top:22px;font-size:10px;color:#94a3b8}.panel{background:#fff;border:1px solid var(--line);border-radius:12px;padding:23px;margin-bottom:20px}.panel:has(>.table-wrap){padding:0}.panel:has(>.table-wrap)>h2,.panel:has(>.table-wrap)>p{margin:20px}.definitions{margin-top:25px;color:#64748b;font-size:12px}.table-wrap{width:100%;overflow:auto}table{border-collapse:collapse;text-align:left;width:100%;font-size:13px;white-space:nowrap}th{background:#f8fafc;color:#64748b;font-size:11px;font-weight:550;padding:14px 18px;border-bottom:1px solid var(--line)}td{padding:17px 18px;border-bottom:1px solid #edf1f6}tbody tr:last-child td{border-bottom:0}tbody tr:hover{background:#fafcff}td small{display:block;color:#94a3b8;margin-top:6px;font-size:10px}.toolbar{display:flex;gap:12px;align-items:center;margin-bottom:18px}.toolbar input[type=search]{width:350px;max-width:100%}.badge{display:inline-block;font-size:11px;padding:4px 9px;border-radius:20px;background:#f1f5f9;color:#64748b}.badge.completed,.badge.accepted,.badge.active{color:#047857;background:#ecfdf5}.badge.overdue,.badge.rejected,.badge.withdrawn{color:#be123c;background:#fff1f2}.badge.due,.badge.out_of_window,.badge.lost{color:#b45309;background:#fffbeb}.notice{background:#eff6ff;border:1px solid #dbeafe;padding:15px 18px;border-radius:9px;line-height:1.8;color:#35547a;font-size:13px;margin-bottom:20px}.notice p:last-child{margin-bottom:0}.empty{text-align:center;padding:50px 15px;color:#94a3b8}.empty>span{font-size:34px;color:#cbd5e1}.boot{padding:100px;text-align:center;color:#64748b}.patient-summary{display:grid;grid-template-columns:2fr 1fr 1fr;gap:20px}.patient-summary p{margin:10px 0 0}.enrollment-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}.enrollment-grid .panel{margin:0}.enrollment-grid p{font-size:12px}.protocol-flow{display:flex;flex-wrap:wrap;gap:10px;margin:20px 0}.protocol-flow>div{display:flex;flex-direction:column;gap:8px;border:1px solid var(--line);background:#f8fafc;padding:13px 18px;border-radius:8px;min-width:150px}.protocol-flow span,.protocol-flow small{font-size:11px;color:#64748b}details{margin-top:18px}summary{cursor:pointer;color:#475569;padding:5px 0}details p{font-size:12px;line-height:1.9}label{display:block;font-size:12px;color:#475569;margin-bottom:16px}input,select,textarea{border:1px solid #dbe1ea;border-radius:7px;background:#fff;color:#334155;padding:10px 11px;outline:none}label>input,label>select,label>textarea{display:block;width:100%;margin-top:7px}input:focus,select:focus,textarea:focus{border-color:#60a5fa;box-shadow:0 0 0 3px #3b82f612}textarea{min-height:75px;resize:vertical;line-height:1.7}.check{display:flex;align-items:center;gap:9px;line-height:1.5}.check>input{width:auto;margin:0;accent-color:#2563eb}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 20px}.form-actions{display:flex;justify-content:flex-end;border-top:1px solid var(--line);padding-top:18px;margin-top:20px}.field-row{display:grid;grid-template-columns:1.3fr 1fr;gap:20px;border-bottom:1px solid #f1f5f9;padding-top:10px}.field-row label:last-child{color:#94a3b8}.field-rows{margin:15px 0}.tabs{display:flex;gap:8px;border-bottom:1px solid var(--line);margin-bottom:20px;padding-bottom:10px}.tabs button{border:0;background:transparent}.tabs button.active{background:#eff6ff;color:#2563eb}.attachment-row{display:flex;justify-content:space-between;gap:15px;padding:18px 0;border-bottom:1px solid var(--line)}.attachment-row>div{min-width:0}.attachment-row small{display:block;margin-top:6px;word-break:break-all;color:#94a3b8;font-size:10px}.attachment-row a{overflow-wrap:anywhere}.attachment-row button{margin-left:8px}.timeline-item{border-left:2px solid #bfdbfe;padding:5px 15px;margin:14px 0}.timeline-item p{margin:6px 0;font-size:12px;color:#64748b}.settings-grid{display:grid;grid-template-columns:1fr 1fr;gap:20px}.list-row{display:flex;justify-content:space-between;padding:14px 0;border-bottom:1px solid var(--line);font-size:12px}dialog{border:0;border-radius:14px;padding:0;width:min(980px,94vw);max-height:90vh;color:#334155;box-shadow:0 20px 80px #02061755}dialog::backdrop{background:#0f172a75;backdrop-filter:blur(3px)}.modal-head{padding:20px 26px;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--line);position:sticky;top:0;background:#fff;z-index:2}.modal-head h2{margin:0;font-size:18px}.modal-body{padding:24px 26px}.icon{font-size:22px;border:0;padding:4px 10px}.check-grid{display:grid;grid-template-columns:1fr 1fr;gap:6px 15px;max-height:280px;overflow:auto}.check-grid label{margin:5px 0}fieldset{border:1px solid #dbe1ea;border-radius:8px;margin:15px 0;padding:15px}legend{font-size:12px}.point-row{display:grid;grid-template-columns:2fr 1fr 1fr 1fr auto auto;gap:10px;align-items:center}.point-row button{margin-top:7px}.point-row input{min-width:0;width:100%}#toast{position:fixed;bottom:25px;left:50%;transform:translateX(-50%) translateY(100px);padding:13px 23px;color:#fff;background:#1e293b;border-radius:9px;box-shadow:0 5px 20px #0f172a30;max-width:80vw;opacity:0;transition:.2s;z-index:20;pointer-events:none}#toast.show{opacity:1;transform:translateX(-50%)}#toast.error{background:#be123c}.login-wrap{min-height:100vh;display:grid;place-items:center;background:radial-gradient(ellipse at 20% 20%,#e3edff,transparent 60%),#f6f8fc;padding:25px}.login-card{width:440px;max-width:100%;background:white;padding:42px;border-radius:18px;border:1px solid #e2e8f0;box-shadow:0 20px 70px #2545730c}.login-card .eyebrow{color:#8295b4;margin-top:25px}.login-card h1{font-size:24px;margin:15px 0}.login-card form{margin-top:30px}.login-card button{width:100%;padding:12px}.login-card footer{margin-top:30px;font-size:10px;color:#94a3b8;text-align:center}[hidden]{display:none!important}@media(min-width:1700px){.cohort-grid{grid-template-columns:repeat(4,minmax(0,1fr))}}@media(max-width:1200px){.sidebar{width:205px}.brand{font-size:14px}main{margin-left:205px}.page{padding:25px}.stats{grid-template-columns:repeat(2,1fr)}.cohort-grid,.enrollment-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.heading{align-items:flex-start;flex-direction:column}.patient-summary{grid-template-columns:1fr 1fr}}@media(max-width:760px){.sidebar{position:static;width:100%;padding:15px}.sidebar nav{display:flex;overflow:auto;margin-top:12px}.sidebar nav a{white-space:nowrap;padding:9px}.sidebar nav a span,.nav-label,.sidebar-bottom{display:none}main{margin:0}.topbar{padding:0 18px;height:60px}.topbar .small{display:none}.page{padding:22px 16px}.overview-banner{padding:22px;display:block}.banner-alert{margin-top:20px}.stats{gap:12px}.stats article{padding:17px}.stats strong{font-size:25px}.cohort-grid,.enrollment-grid,.settings-grid,.patient-summary{grid-template-columns:1fr}.toolbar{flex-wrap:wrap}.form-grid,.field-row,.check-grid{grid-template-columns:1fr}.point-row{grid-template-columns:2fr 1fr 1fr}.section-head{align-items:flex-start;flex-direction:column}.modal-body{padding:20px}.attachment-row{flex-direction:column}}
:is(.legacy-json,.legacy-path){white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-word}.legacy-json{background:#f8fafc;padding:15px;font-size:12px;border-radius:8px;max-height:500px;overflow:auto}.legacy-panel .section-head{margin:0}
.material-matrix{max-height:540px;overflow:auto}.material-matrix th:first-child{position:sticky;left:0;z-index:1;max-width:240px;white-space:normal;background:#f8fafc}.material-matrix thead th{position:sticky;top:0;z-index:2}.material-matrix th small{display:block;font-weight:400;margin-top:6px}.material-matrix td{padding:8px}.material-cell{min-width:100px;display:flex;flex-direction:column;gap:4px;font-size:11px}.material-cell.accepted{background:#ecfdf5;color:#047857}.material-cell.pending{background:#eff6ff;color:#2563eb}.material-cell.missing,.material-cell.broken{background:#fff1f2;color:#be123c}.material-cell.unrecorded{background:#fffbeb;color:#92400e}.material-cell.not_required{color:#94a3b8;background:#f8fafc}.material-workspace{display:grid;grid-template-columns:350px minmax(0,1fr);gap:20px;align-items:start}.material-file{border:1px solid #e2e8f0;border-radius:9px;margin-bottom:10px;padding:15px}.material-file small{display:block;color:#64748b;font-size:11px;margin:7px 0;overflow-wrap:anywhere}.file-title{white-space:normal;overflow-wrap:anywhere;text-align:left;border:0;padding:0;color:#2563eb}.preview-image{text-align:center;background:#edf1f7;max-height:75vh;overflow:auto}.preview-image img{max-width:100%;height:auto}#material-preview{position:sticky;top:15px;min-height:300px;max-height:85vh;overflow:auto}#material-preview h3{overflow-wrap:anywhere}#material-preview video,#attachment-preview video{width:100%;max-height:65vh;background:#101b30}#c3d-canvas{width:100%;border:1px solid #e2e8f0}.archive-list{max-height:60vh;overflow:auto}.archive-list .list-row{gap:10px}.archive-list span{overflow-wrap:anywhere;min-width:0}dl{display:grid;grid-template-columns:minmax(130px,1fr) 3fr;font-size:12px;gap:10px}dd{margin:0;overflow-wrap:anywhere}dt{color:#64748b}@media(max-width:1000px){.material-workspace{grid-template-columns:1fr}#material-preview{position:static}.material-matrix th:first-child{min-width:160px}}
.material-matrix th:first-child{min-width:210px}.material-workspace>*{min-width:0}.panel#material-preview{padding:20px}.material-cell.recorded{background:#eff6ff;color:#2563eb}#material-stage,#material-group{max-width:250px}#material-content{min-width:0}.material-workspace+.panel{margin-top:20px}
