:root{
 --bg:#090c0f;--bg2:#0e1216;--panel:#151a1f;--panel2:#1b2127;--panel3:#20272e;--border:#2a323a;--border-soft:#222a31;
 --text:#eef2f5;--muted:#8f9ba5;--muted2:#68747e;--cyan:#21a6d9;--cyan2:#167aa5;--purple:#9a42a6;--green:#78b82a;
 --yellow:#dbad32;--orange:#e8752b;--red:#e44444;--red2:#b72f36;--blue:#348bd4;--shadow:0 16px 38px rgba(0,0,0,.22);
 --radius:3px;--font:Inter,Segoe UI,Roboto,Helvetica,Arial,sans-serif
}
*{box-sizing:border-box}html{background:var(--bg)}body{margin:0;background:linear-gradient(180deg,#080b0e 0,#0b0f12 420px,#0c1014 100%);color:var(--text);font-family:var(--font);font-size:14px;min-height:100vh}a{color:#6ec8ef;text-decoration:none}a:hover{color:#a6e1fa}button,input,select,textarea{font:inherit}.app-header{background:#090b0e;border-bottom:1px solid #232a31;position:sticky;top:0;z-index:50;box-shadow:0 8px 25px rgba(0,0,0,.22)}.brand-row{height:68px;display:flex;align-items:center;justify-content:space-between;padding:0 32px;border-bottom:1px solid #1c2228}.brand{display:flex;align-items:center;gap:12px;color:#fff}.brand:hover{color:#fff}.brand strong{font-size:20px;letter-spacing:.16em;font-weight:600;display:block;line-height:1}.brand small{display:block;color:#6f7c87;font-size:9px;letter-spacing:.12em;text-transform:uppercase;margin-top:6px}.brand-mark{display:grid;grid-template-columns:repeat(3,6px);align-items:end;gap:3px;width:28px;height:28px;padding:5px;border:1px solid #39424a;background:#12171b}.brand-mark span{display:block;background:var(--cyan)}.brand-mark span:nth-child(1){height:7px}.brand-mark span:nth-child(2){height:15px;background:#8d3d98}.brand-mark span:nth-child(3){height:11px;background:#72ae31}.header-context{display:flex;align-items:center;gap:28px;color:#dbe1e5}.header-context>div{display:flex;flex-direction:column;gap:3px}.context-label{font-size:9px;color:#66727c;text-transform:uppercase;letter-spacing:.12em}.header-context strong{font-size:12px;font-weight:500}.status-pill{font-size:10px;text-transform:uppercase;letter-spacing:.08em;color:#9eaab3;border:1px solid #29323a;padding:8px 10px;background:#12171b}.status-pill i{display:inline-block;width:7px;height:7px;border-radius:50%;background:#64b337;margin-right:7px;box-shadow:0 0 0 3px rgba(100,179,55,.1)}
.main-nav{height:45px;display:flex;align-items:stretch;padding:0 25px;gap:1px}.main-nav a{color:#84909a;padding:0 17px;display:flex;align-items:center;font-size:12px;border-bottom:2px solid transparent;transition:.16s;background:transparent}.main-nav a:hover{color:#e8edf0;background:#11161a}.main-nav a.active{color:#fff;border-bottom-color:#348bd4;background:#151b20}.main-nav .nav-import{margin-left:auto;color:#d6eef8;background:#102531;border-left:1px solid #1a3e4e;border-right:1px solid #1a3e4e}.main-nav .nav-import.active,.main-nav .nav-import:hover{background:#153544;border-bottom-color:#23a5d8;color:#fff}
.app-shell{max-width:1540px;margin:0 auto;padding:28px 28px 55px}.app-footer{border-top:1px solid #20272d;display:flex;justify-content:space-between;padding:18px 32px;color:#65717a;font-size:10px;background:#080b0e}.page-head{display:flex;align-items:flex-end;justify-content:space-between;gap:24px;margin-bottom:20px}.page-head h1{font-size:25px;line-height:1.15;margin:4px 0 6px;font-weight:400;letter-spacing:-.02em}.page-head p{margin:0;color:#7c8993;font-size:12px}.eyebrow{color:#38a8d5;text-transform:uppercase;letter-spacing:.14em;font-size:9px;font-weight:700}.head-count{padding:9px 13px;border:1px solid #2f3941;background:#141a1f;color:#b9c3ca;font-size:12px}.danger-count{border-color:#573036;color:#f0a1a1;background:#201316}.head-actions{display:flex;gap:8px;flex-wrap:wrap}
.btn{border:1px solid #35404a;background:#1c2329;color:#dce3e8;padding:9px 13px;min-height:34px;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;border-radius:2px;font-size:11px;letter-spacing:.01em;transition:.15s}.btn:hover{background:#263039;color:#fff;border-color:#46535e}.btn.primary{background:#156b91;border-color:#2387af;color:#fff}.btn.primary:hover{background:#1982ad}.btn.ghost{background:#171d22}.btn.large{padding:12px 20px;font-size:12px}.filter-reset{font-size:10px;color:#73808a;padding:8px}.filter-bar{display:flex;align-items:end;gap:10px;background:#11161a;border:1px solid #20282f;padding:11px 13px;margin-bottom:18px;flex-wrap:wrap}.filter-bar label,.review-form label{display:flex;flex-direction:column;gap:5px;color:#717e88;font-size:9px;text-transform:uppercase;letter-spacing:.08em}.filter-bar input,.filter-bar select,.review-form input,.review-form select,.review-form textarea{background:#0d1114;border:1px solid #303941;color:#dfe5e9;padding:8px 9px;outline:none;border-radius:1px;min-width:128px}.filter-bar input:focus,.filter-bar select:focus,.review-form input:focus,.review-form select:focus,.review-form textarea:focus{border-color:#338eb4;box-shadow:0 0 0 1px rgba(51,142,180,.18)}.filter-bar.multi .search-wide input{min-width:260px}.filter-bar .btn{margin-left:4px}
.kpi-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:12px}.kpi{min-height:112px;background:linear-gradient(180deg,#181e23,#14191e);border:1px solid #2a3238;padding:17px 18px;position:relative;overflow:hidden}.kpi:before{content:"";position:absolute;top:0;left:0;right:0;height:2px;background:#348bd4}.kpi.warning:before{background:#a044a8}.kpi.critical:before{background:#dd4545}.kpi-label{display:block;color:#7f8b95;font-size:10px;text-transform:uppercase;letter-spacing:.08em;margin-bottom:12px}.kpi strong{display:block;font-size:29px;font-weight:300;line-height:1;color:#f3f5f6}.kpi strong em{font-size:11px;color:#82909a;font-style:normal}.kpi small{display:block;color:#697680;font-size:10px;margin-top:9px}.dashboard-grid,.analysis-grid,.exam-grid{display:grid;grid-template-columns:repeat(12,1fr);gap:12px}.span-8{grid-column:span 8}.span-7{grid-column:span 7}.span-5{grid-column:span 5}.span-4{grid-column:span 4}.panel{background:linear-gradient(180deg,#171c21,#14191d);border:1px solid #2b333a;box-shadow:var(--shadow);min-width:0}.panel-head{min-height:49px;display:flex;align-items:center;justify-content:space-between;padding:10px 14px;border-bottom:1px solid #292f35;background:#181d22;gap:12px}.panel-head h2{font-size:12px;font-weight:500;margin:0;color:#dfe4e8}.panel-head p{font-size:9px;color:#68747e;margin:3px 0 0}.panel-head>a{font-size:9px;text-transform:uppercase;letter-spacing:.06em}.panel-unit{font-size:9px;color:#6e7a84;border:1px solid #303840;padding:5px 7px}.chart-wrap{padding:12px 10px 4px;height:250px}.chart-wrap.tall{height:310px}.svg-chart{width:100%;height:100%;overflow:visible}.grid-line{stroke:#2a3239;stroke-width:1}.axis-text{fill:#6f7b84;font-size:9px;font-family:var(--font)}.line-stroke{fill:none;stroke:#28a0d2;stroke-width:2}.area-fill{fill:rgba(38,151,198,.12)}.line-dot{fill:#1e1f24;stroke:#4bc1ed;stroke-width:2}.bar-fill{fill:#98419f}.box-whisker{stroke:#6c7882;stroke-width:1}.box-rect{fill:#77b42e;stroke:#a5d75f;stroke-width:1}.box-median{stroke:#e8f0f3;stroke-width:2}.empty-chart,.empty-state{height:100%;display:flex;align-items:center;justify-content:center;color:#65717a;padding:26px;text-align:center}.empty-state.compact{min-height:80px}.alert-list{padding:0}.alert-row{min-height:62px;display:grid;grid-template-columns:68px 1fr 54px;align-items:center;gap:9px;padding:8px 12px;border-bottom:1px solid #252c32;color:#d9dfe3}.alert-row:hover{background:#1b2227;color:#fff}.alert-main{min-width:0}.alert-main strong{display:block;font-size:10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.alert-main small{display:block;color:#65717b;font-size:8px;margin-top:5px}.alert-dose{text-align:right}.alert-dose strong{font-size:13px;font-weight:500}.alert-dose small{display:block;font-size:8px;color:#66727b}.badge{display:inline-flex;align-items:center;justify-content:center;min-width:58px;padding:4px 7px;font-size:8px;text-transform:uppercase;font-weight:700;letter-spacing:.04em;border:1px solid transparent;border-radius:1px}.badge-critical{background:#a92f36;color:#fff;border-color:#d4454d}.badge-high{background:#be4c2a;color:#fff;border-color:#e06b43}.badge-medium{background:#8c661e;color:#ffd77c;border-color:#b88725}.badge-low{background:#354b61;color:#b9ddff;border-color:#486b89}.badge-normal{background:#243527;color:#9bd28e;border-color:#35533a}.large-badge{padding:8px 14px}.rank-list{padding:4px 12px}.rank-row{display:grid;grid-template-columns:24px 1fr 66px;gap:9px;align-items:center;padding:11px 0;border-bottom:1px solid #252d33}.rank-index{width:20px;height:20px;display:grid;place-items:center;border:1px solid #333c43;color:#65727c;font-size:8px}.rank-main strong{font-size:10px;font-weight:500}.rank-main small{display:block;color:#606d77;font-size:8px;margin-top:4px}.rank-value{text-align:right;font-size:13px}.rank-value small{font-size:8px;color:#6b7780}.mini-progress{height:3px;background:#252c31;margin-top:6px;overflow:hidden}.mini-progress i{display:block;height:100%;background:#9c439f}
.table-panel{overflow:hidden}.table-scroll{overflow:auto}.data-table{width:100%;border-collapse:collapse;min-width:850px}.data-table th{background:#12171b;color:#74818b;text-transform:uppercase;letter-spacing:.06em;font-size:8px;text-align:left;padding:10px 11px;border-bottom:1px solid #30383f;white-space:nowrap;font-weight:600}.data-table td{padding:10px 11px;border-bottom:1px solid #232a30;color:#c7d0d6;font-size:10px;vertical-align:middle}.data-table tbody tr:hover{background:#1a2025}.data-table .row-alert{box-shadow:inset 2px 0 #9e3e47}.data-table small{color:#6c7983;font-size:8px}.block{display:block;margin-top:4px}.mono{font-family:Consolas,Monaco,monospace;color:#a9bac5}.delta-bad{color:#ef777d!important;font-weight:600}.row-link{font-size:9px;white-space:nowrap}.pagination{display:flex;justify-content:space-between;align-items:center;padding:10px 12px;background:#11161a;color:#65717a;font-size:9px}.pagination a{display:inline-block;border:1px solid #303840;padding:6px 9px;margin-left:5px}.review-state{font-size:8px;padding:3px 6px;border:1px solid #384149;text-transform:uppercase}.state-open{color:#e5bf61;border-color:#6c5726}.state-reviewed{color:#89c77b;border-color:#3c5c39}.state-dismissed{color:#8f9aa2}.rate-pill{display:inline-flex;padding:3px 7px;border:1px solid #344148;color:#a6b2ba;background:#192026}.rate-pill.hot{color:#ef9d9d;border-color:#67363a;background:#261619}.run-id{font-family:Consolas,monospace;font-weight:700}.download-links{display:flex;gap:8px;white-space:nowrap}.compact-table{min-width:650px}
.protocol-bars{padding:12px 14px}.protocol-bars>div{display:grid;grid-template-columns:145px 1fr 40px;gap:9px;align-items:center;margin:14px 0}.protocol-bars span{font-size:9px;color:#aeb8bf;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.protocol-bars i{height:8px;background:#252c31;display:block}.protocol-bars i b{height:100%;display:block;background:#98419f}.protocol-bars strong{text-align:right;font-size:10px;font-weight:500}.upload-layout{display:grid;grid-template-columns:minmax(0,1.65fr) minmax(300px,.75fr);gap:12px}.upload-panel{min-height:490px}.dropzone{margin:28px;border:1px dashed #46515a;background:#101519;min-height:275px;display:flex;flex-direction:column;align-items:center;justify-content:center;cursor:pointer;transition:.2s;position:relative}.dropzone:hover,.dropzone.drag{background:#13212a;border-color:#379ac2}.dropzone input{position:absolute;inset:0;opacity:0;cursor:pointer}.upload-icon{width:50px;height:50px;border:1px solid #3d4b55;display:grid;place-items:center;font-size:24px;color:#4eb5dd;margin-bottom:16px;background:#151d22}.dropzone strong{font-weight:500;font-size:14px}.dropzone>span:not(.upload-icon){color:#71808a;font-size:10px;margin-top:6px}.dropzone small{margin-top:18px;background:#191f24;border:1px solid #303941;padding:7px 10px;color:#9aa5ad;font-size:9px}.upload-actions{display:flex;gap:8px;padding:0 28px 25px}.processing{margin:0 28px 25px;border:1px solid #244653;background:#102028;padding:15px;display:flex;gap:12px;align-items:center}.processing p{margin:4px 0 0;color:#82919b;font-size:9px}.spinner{width:24px;height:24px;border-radius:50%;border:2px solid #29414b;border-top-color:#3eb5e1;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.model-card{min-height:490px}.live-dot{padding:5px 8px;border:1px solid #31593b;color:#9aca86;font-size:8px;background:#152219}.model-flow{padding:20px}.model-flow>div{display:flex;align-items:center;gap:11px}.model-flow b{width:28px;height:28px;border:1px solid #38505e;background:#14212a;color:#5ec1e6;display:grid;place-items:center;font-size:10px}.model-flow span strong{display:block;font-size:10px;font-weight:500}.model-flow span small{display:block;color:#65737d;font-size:8px;margin-top:3px}.model-flow>i{display:block;width:1px;height:18px;background:#354049;margin-left:14px}.model-note{margin:5px 20px 20px;padding:14px;border:1px solid #2c353c;background:#11161a}.model-note strong{font-size:9px;text-transform:uppercase;color:#8d99a2}.model-note p,.model-note span{font-size:9px;color:#6e7b84;line-height:1.55}.model-note span{display:block;border-top:1px solid #252c32;padding-top:9px}
.notice{display:flex;gap:12px;align-items:center;padding:12px 14px;margin-bottom:16px;border:1px solid}.notice strong{font-size:10px;text-transform:uppercase}.notice span{font-size:10px}.notice.error{background:#281416;border-color:#67343a;color:#f1aaaa}.notice.success{background:#142419;border-color:#36563c;color:#a8d19e}.exam-head{align-items:center}.dose-comparison{display:grid;grid-template-columns:1fr 34px 1fr 1fr;gap:10px;padding:18px}.dose-comparison>div:not(.vs){background:#11161a;border:1px solid #2c353c;padding:14px}.dose-comparison span{display:block;color:#71808a;font-size:9px;text-transform:uppercase}.dose-comparison strong{display:block;font-size:23px;font-weight:300;margin-top:10px}.dose-comparison strong em{font-size:9px;font-style:normal;color:#6f7b84}.dose-comparison .vs{display:grid;place-items:center;color:#4e5b64}.delta-card.bad{border-color:#70363a!important;background:#211417!important}.delta-card.bad strong{color:#ef7379}.delta-card small{display:block;margin-top:7px;color:#697680;font-size:8px}.detection-grid{display:grid;grid-template-columns:repeat(3,1fr);border-top:1px solid #282f35}.detection-grid>div{padding:14px;border-right:1px solid #282f35}.detection-grid>div:last-child{border-right:0}.detection-grid span{font-size:8px;color:#67747e;text-transform:uppercase}.detection-grid strong{display:block;font-size:10px;margin-top:7px;font-weight:500}.detection-grid small{display:block;color:#65717a;font-size:8px;margin-top:5px}.review-form{padding:16px;display:flex;flex-direction:column;gap:13px}.review-form textarea{resize:vertical;min-height:105px}.parameter-grid{display:grid;grid-template-columns:repeat(4,1fr)}.parameter-grid>div{padding:14px 16px;border-right:1px solid #272e34;border-bottom:1px solid #272e34}.parameter-grid span{display:block;color:#65727c;font-size:8px;text-transform:uppercase}.parameter-grid strong{display:block;margin-top:7px;font-size:12px;font-weight:500}.report-card{position:relative}.report-preview{display:flex;gap:14px;padding:20px}.paper-icon{width:55px;height:72px;background:#e9ecef;color:#263039;display:grid;place-items:center;font-weight:800;font-size:10px;box-shadow:4px 4px 0 #30373d}.report-preview strong{font-size:11px}.report-preview p{font-size:9px;line-height:1.6;color:#707d87}.report-actions{padding:0 20px 14px;display:flex;gap:8px;flex-wrap:wrap}.report-actions form{display:inline}.model-metrics{border-top:1px solid #282f35;padding:12px 20px;display:flex;gap:17px;color:#697680;font-size:8px}.model-metrics b{color:#b9c2c8;font-weight:500}.setup-panel{max-width:980px}.setup-help{padding:18px;border-top:1px solid #2a3238;color:#7e8a94}.setup-help strong{font-size:11px;color:#d3dbe0}.setup-help p{font-size:10px;line-height:1.6}.setup-help code{background:#0c1013;padding:2px 5px;border:1px solid #283139}.setup-status{font-size:9px;padding:4px 7px;border:1px solid #4a4141}.setup-status.good{color:#95d287;border-color:#35543a;background:#152218}.setup-status.check{color:#d9b36d;border-color:#5c4d31;background:#211c12}
@media(max-width:1100px){.header-context>div{display:none}.kpi-grid{grid-template-columns:repeat(2,1fr)}.span-7,.span-5,.span-8,.span-4{grid-column:span 12}.upload-layout{grid-template-columns:1fr}.parameter-grid{grid-template-columns:repeat(2,1fr)}.app-shell{padding:22px 16px 45px}.main-nav{overflow-x:auto;padding:0 10px}.main-nav a{white-space:nowrap}.main-nav .nav-import{margin-left:0}.app-footer{padding:16px;gap:12px;flex-direction:column}}
@media(max-width:680px){.brand-row{padding:0 15px;height:58px}.header-context{gap:8px}.status-pill{padding:6px}.main-nav{height:42px}.main-nav a{padding:0 11px}.page-head{align-items:flex-start;flex-direction:column}.kpi-grid{grid-template-columns:1fr}.filter-bar{align-items:stretch}.filter-bar label,.filter-bar input,.filter-bar select{width:100%;min-width:0}.filter-bar .btn{margin:0}.dose-comparison{grid-template-columns:1fr}.dose-comparison .vs{display:none}.detection-grid{grid-template-columns:1fr}.parameter-grid{grid-template-columns:1fr}.protocol-bars>div{grid-template-columns:110px 1fr 35px}.dropzone{margin:14px}.upload-actions{padding:0 14px 18px;flex-direction:column}.processing{margin:0 14px 18px}.app-footer{font-size:9px}}

/* DACS 2.1 · comparaison directe de deux protocoles */
.compare-filter{display:grid;grid-template-columns:135px 135px minmax(180px,.8fr) minmax(250px,1.25fr) 34px minmax(250px,1.25fr) auto auto;align-items:end}
.compare-filter label{min-width:0}.compare-filter select{width:100%;min-width:0}.compare-protocol-label span{font-weight:700;color:#8ca0ad}.compare-vs{height:34px;display:grid;place-items:center;color:#697782;font-size:9px;font-weight:800;letter-spacing:.08em;border:1px solid #29333b;background:#101519}
.compare-head-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:12px}.compare-protocol-card{background:linear-gradient(180deg,#171c21,#14191d);border:1px solid #2b333a;position:relative}.compare-protocol-card:before{content:"";position:absolute;left:0;right:0;top:0;height:2px}.compare-side-a:before{background:#77b42e}.compare-side-b:before{background:#98419f}.compare-card-title{padding:14px 16px;border-bottom:1px solid #293038}.compare-card-title span{display:block;color:#687680;font-size:8px;text-transform:uppercase;letter-spacing:.1em;margin-bottom:6px}.compare-card-title strong{font-size:12px;font-weight:500;color:#edf1f3}.compare-card-kpis{display:grid;grid-template-columns:repeat(5,1fr)}.compare-card-kpis>div{padding:13px;border-right:1px solid #282f35}.compare-card-kpis>div:last-child{border-right:0}.compare-card-kpis span{display:block;color:#66747e;font-size:8px;text-transform:uppercase}.compare-card-kpis strong{display:block;margin-top:7px;font-size:14px;font-weight:500}.compare-card-kpis small{font-size:8px;color:#75828b;font-weight:400}.ml-compare-bars{padding:8px 15px 14px}.ml-compare-group{padding:12px 0;border-bottom:1px solid #282f35}.ml-compare-group:last-child{border-bottom:0}.ml-compare-group>strong{display:block;font-size:10px;font-weight:500;margin-bottom:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.compare-dot{display:inline-block;width:7px;height:7px;margin-right:7px}.compare-dot.side-a{background:#77b42e}.compare-dot.side-b{background:#98419f}.ml-bar-row{display:grid;grid-template-columns:35px 1fr 66px;align-items:center;gap:8px;margin:7px 0}.ml-bar-row>span{font-size:8px;color:#6c7982;text-transform:uppercase}.ml-bar-row i{height:8px;background:#252d33;display:block;overflow:hidden}.ml-bar-row i b{height:100%;display:block}.ml-bar-row i b.real{background:#77b42e}.ml-bar-row i b.pred{background:#2e8fb9}.ml-bar-row em{text-align:right;font-size:9px;font-style:normal;color:#c4cdd2}.ml-bar-meta{display:flex;justify-content:space-between;gap:10px;margin-top:10px;color:#65727c;font-size:8px}.ml-bar-meta b{color:#aeb9c0;font-weight:500}.compare-row-a{box-shadow:inset 3px 0 #77b42e}.compare-row-b{box-shadow:inset 3px 0 #98419f}.box-rect-a{fill:#77b42e;stroke:#a5d75f}.box-rect-b{fill:#98419f;stroke:#c66bce}
@media(max-width:1350px){.compare-filter{grid-template-columns:135px 135px minmax(180px,1fr) minmax(250px,1fr) 34px minmax(250px,1fr) auto}.compare-filter .filter-reset{grid-column:1/-1;padding-left:0}.compare-card-kpis{grid-template-columns:repeat(3,1fr)}}
@media(max-width:900px){.compare-filter{display:flex}.compare-filter label{flex:1 1 220px}.compare-vs{display:none}.compare-head-grid{grid-template-columns:1fr}.compare-card-kpis{grid-template-columns:repeat(2,1fr)}}
