:root{--bg:#03111f;--panel:rgba(5,29,51,.88);--panel2:rgba(8,40,69,.92);--line:rgba(68,200,255,.24);--cyan:#44d7ff;--cyan2:#1ca5ff;--green:#48e2a8;--yellow:#ffc54c;--red:#ff647c;--text:#e9f7ff;--muted:#86a6bd;}
*{box-sizing:border-box} html,body{margin:0;min-height:100%;background:#02101d;color:var(--text);font-family:Inter,"PingFang SC","Microsoft YaHei",sans-serif;overflow-x:hidden}
body{background:radial-gradient(circle at 50% -10%,rgba(13,117,189,.24),transparent 28%),linear-gradient(180deg,#041522 0,#020b13 100%)}
body:before{content:"";position:fixed;inset:0;pointer-events:none;background-image:linear-gradient(rgba(68,215,255,.025) 1px,transparent 1px),linear-gradient(90deg,rgba(68,215,255,.025) 1px,transparent 1px);background-size:32px 32px;mask-image:linear-gradient(to bottom,rgba(0,0,0,.9),rgba(0,0,0,.1))}
.dashboard{max-width:1920px;margin:auto;padding:14px 16px 18px}
.header{height:76px;display:grid;grid-template-columns:1fr auto 1fr;align-items:center;border-bottom:1px solid rgba(68,215,255,.22);position:relative;margin-bottom:12px}
.header:after{content:"";position:absolute;bottom:-1px;left:32%;right:32%;height:2px;background:linear-gradient(90deg,transparent,var(--cyan),transparent);box-shadow:0 0 18px var(--cyan)}
.brand{color:#9ec7dc;font-size:12px;letter-spacing:.18em} .brand b{display:block;color:#dff8ff;font-size:14px;margin-bottom:5px}
.title{text-align:center} .title h1{margin:0;font-size:30px;letter-spacing:.12em;text-shadow:0 0 18px rgba(68,215,255,.45)} .title small{display:block;margin-top:5px;color:#7eb2cd;letter-spacing:.18em}
.head-right{justify-self:end;text-align:right;font-size:12px;color:#82a6bc} .status{display:inline-flex;align-items:center;gap:7px;margin-left:12px;padding:7px 11px;border:1px solid rgba(72,226,168,.32);border-radius:999px;color:#78f2be;background:rgba(72,226,168,.07)} .status i{width:7px;height:7px;background:#48e2a8;border-radius:50%;box-shadow:0 0 10px #48e2a8}
.kpis{display:grid;grid-template-columns:repeat(6,1fr);gap:10px;margin-bottom:10px}
.panel,.kpi{background:linear-gradient(180deg,rgba(7,38,65,.92),rgba(3,23,40,.92));border:1px solid var(--line);box-shadow:inset 0 0 20px rgba(27,150,220,.05),0 8px 24px rgba(0,0,0,.18);position:relative;overflow:hidden}
.panel:before,.kpi:before{content:"";position:absolute;left:0;top:0;width:42px;height:2px;background:var(--cyan);box-shadow:0 0 12px var(--cyan)}
.kpi{padding:13px 15px;min-height:88px;border-radius:4px;display:grid;grid-template-columns:42px 1fr;gap:11px;align-items:center}
.kicon{width:42px;height:42px;border:1px solid rgba(68,215,255,.28);border-radius:50%;display:grid;place-items:center;font-size:21px;background:radial-gradient(circle,rgba(68,215,255,.15),transparent 70%);box-shadow:inset 0 0 18px rgba(68,215,255,.06)}
.kpi .label{font-size:12px;color:#9fb8c9} .kpi .value{font-weight:800;font-size:25px;line-height:1.05;margin:3px 0} .delta{font-size:11px;color:#8ba8ba} .up{color:var(--green)} .down{color:var(--red)}
.main{display:grid;grid-template-columns:1.03fr 1.72fr 1.05fr;gap:10px;align-items:stretch} .left,.right{display:grid;gap:10px;grid-template-rows:1fr 1fr} .center{display:grid;gap:10px;grid-template-rows:minmax(510px,1.8fr) minmax(190px,.65fr)}
.panel{border-radius:5px} .phead{height:40px;padding:0 13px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid rgba(68,215,255,.14)} .phead h3{font-size:14px;margin:0;letter-spacing:.04em} .phead span{font-size:11px;color:#789cb1}
.chart{height:245px;width:100%}
.mapbox{position:relative;min-height:470px;background:#021422;isolation:isolate} .mapbox:after{content:"";position:absolute;inset:0;background:radial-gradient(circle at 50% 50%,transparent 40%,rgba(2,20,34,.18) 66%,rgba(2,17,29,.78) 100%);pointer-events:none;z-index:1}
.map-area{position:absolute;inset:40px 0 0;background:radial-gradient(ellipse at 50% 55%,rgba(27,150,220,.14),transparent 60%),repeating-linear-gradient(0deg,rgba(68,200,255,.035) 0 1px,transparent 1px 42px),repeating-linear-gradient(90deg,rgba(68,200,255,.035) 0 1px,transparent 1px 42px)}
.map-chart{position:absolute;inset:0;z-index:2;cursor:grab} .map-chart:active{cursor:grabbing}
.map-hint{position:absolute;right:12px;bottom:10px;z-index:3;font-size:10px;color:#4f7590;pointer-events:none}
.map-reset{margin-left:10px;height:20px;padding:0 8px;border:1px solid rgba(68,200,255,.45);border-radius:3px;background:rgba(68,215,255,.1);color:#9fe9ff;font-size:10px;cursor:pointer;vertical-align:middle} .map-reset:hover{background:rgba(68,215,255,.22)} .map-reset[hidden]{display:none}
@keyframes flow{from{left:-30px}to{left:calc(100% - 4px)}} @keyframes pulse{0%{transform:scale(.55);opacity:.9}80%,100%{transform:scale(1.65);opacity:0}}
.map-stats{position:absolute;left:13px;bottom:16px;z-index:5;display:grid;gap:7px;pointer-events:none} .map-stat{min-width:118px;padding:8px 10px;background:rgba(0,24,42,.72);border-left:2px solid var(--cyan);font-size:11px;color:#8fb0c3} .map-stat b{display:block;color:#fff;font-size:17px;margin-top:2px}
.doctor-list,.alert-list,.feed{padding:8px 12px 12px} .row{display:grid;grid-template-columns:34px 1fr auto;gap:9px;align-items:center;padding:8px 0;border-bottom:1px solid rgba(255,255,255,.07)} .avatar{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;background:linear-gradient(145deg,#d8f3ff,#5aa4cd);color:#07314b;font-weight:700} .meta b{font-size:12px} .meta small{display:block;color:#7898ac;margin-top:3px;font-size:10px} .tag{font-size:10px;padding:3px 6px;border-radius:4px;background:rgba(72,226,168,.08);color:#64e8ad;border:1px solid rgba(72,226,168,.2)} .tag.busy{color:#ff8a9d;background:rgba(255,100,124,.08);border-color:rgba(255,100,124,.22)}
.alert-row{display:grid;grid-template-columns:45px 1fr auto;gap:8px;align-items:center;padding:8px 0;border-bottom:1px solid rgba(255,255,255,.065);font-size:11px} .alert-row .danger{color:#ff768d} .alert-row small{color:#7695a9} .badge{padding:3px 5px;border-radius:3px;background:rgba(28,165,255,.13);color:#66c9ff}
.bottom-grid{display:grid;grid-template-columns:1.1fr .9fr 1.05fr;gap:10px} .flow{display:flex;align-items:center;justify-content:space-between;padding:18px 10px 14px;gap:2px} .step{flex:1;min-width:0;text-align:center;font-size:10px;color:#9cb4c5;white-space:nowrap} .step i{display:grid;place-items:center;width:36px;height:36px;margin:0 auto 6px;border-radius:50%;border:1px solid rgba(68,215,255,.35);background:radial-gradient(circle,rgba(68,215,255,.13),transparent 70%);font-style:normal;font-size:16px;color:#77e5ff;box-shadow:0 0 15px rgba(68,215,255,.08)} .arrow{color:#46cdf7;font-size:14px;flex:0 0 auto}
.gauge-wrap{padding:12px 15px;display:grid;grid-template-columns:1fr 1fr;gap:12px;align-items:center} .gauge{height:130px} .bars{font-size:10px;color:#91adbd} .barline{margin:9px 0} .barline div{height:5px;background:#12324b;margin-top:4px} .barline i{display:block;height:100%;background:linear-gradient(90deg,#31baff,#50e2bf)}
.spark-wrap{padding:12px 14px} .spark-value{font-size:25px;font-weight:800;margin:4px 0} .spark{height:100px}
.feed-row{display:grid;grid-template-columns:42px 1fr auto;gap:8px;padding:7px 0;border-bottom:1px solid rgba(255,255,255,.055);font-size:10px} .feed-row small{color:#7c9daf}
.footer{padding-top:9px;display:flex;justify-content:space-between;color:#5e8299;font-size:10px;letter-spacing:.04em}
@media(max-width:1280px){.kpis{grid-template-columns:repeat(3,1fr)}.main{grid-template-columns:1fr 1.5fr}.right{grid-column:1/-1;grid-template-columns:1fr 1fr;grid-template-rows:auto}.bottom-grid{grid-template-columns:1fr}}
@media(max-width:850px){.header{grid-template-columns:1fr;text-align:center;height:auto;padding:12px 0;gap:8px}.brand,.head-right{justify-self:center;text-align:center}.kpis{grid-template-columns:repeat(2,1fr)}.main{grid-template-columns:1fr}.left,.right{grid-template-columns:1fr;grid-template-rows:auto}.center{grid-template-rows:520px auto}.mapbox{min-height:520px}}

/* ---- 数据驱动补充样式 ---- */
.status.error{border-color:rgba(255,100,124,.4);color:#ff8a9d;background:rgba(255,100,124,.08)} .status.error i{background:#ff647c;box-shadow:0 0 10px #ff647c}
.status.loading i{background:#ffc54c;box-shadow:0 0 10px #ffc54c}
.kpi .delta .flat{color:#8ba8ba}
.flow .step b{display:block;font-size:14px;color:#e9f7ff;margin-top:3px;font-weight:700}
.empty{padding:28px 12px;text-align:center;color:#5e8299;font-size:12px}
.alert-row .badge.done{background:rgba(72,226,168,.12);color:#64e8ad} .alert-row .badge.wait{background:rgba(255,197,76,.12);color:#ffd15c}
.alert-row .hosp{color:#6f93a8;font-size:10px;margin-top:2px}
.feed-panel{margin-top:10px}
.feed{display:grid;grid-template-columns:repeat(3,1fr);column-gap:24px}
@media(max-width:1280px){.feed{grid-template-columns:repeat(2,1fr)}}
@media(max-width:850px){.feed{grid-template-columns:1fr}}
.dashboard.fit{width:1920px;max-width:none;transform-origin:top left;margin:0}
body.fit{overflow:hidden;height:100vh}

/* ---- 访问控制登录层 ---- */
.gate{position:fixed;inset:0;z-index:50;display:flex;align-items:center;justify-content:center;background:radial-gradient(circle at 50% 30%,rgba(13,117,189,.28),transparent 45%),rgba(2,12,22,.96)}
.gate[hidden]{display:none}
.gate-card{width:360px;padding:34px 34px 28px;background:linear-gradient(180deg,rgba(7,38,65,.96),rgba(3,23,40,.96));border:1px solid var(--line);position:relative;box-shadow:0 20px 60px rgba(0,0,0,.5),inset 0 0 30px rgba(27,150,220,.06)}
.gate-card:before{content:"";position:absolute;left:0;top:0;width:42px;height:2px;background:var(--cyan);box-shadow:0 0 12px var(--cyan)}
.gate-card h2{margin:0;font-size:18px;letter-spacing:.08em;text-shadow:0 0 14px rgba(68,215,255,.4)} .gate-card p{margin:6px 0 20px;color:#86a6bd;font-size:12px}
.gate-input{display:block;width:100%;height:40px;margin-bottom:12px;padding:0 12px;background:rgba(2,17,31,.8);border:1px solid rgba(68,200,255,.3);color:var(--text);font-size:14px;letter-spacing:.05em} .gate-input[hidden]{display:none} .gate-input:focus{outline:none;border-color:var(--cyan);box-shadow:0 0 0 2px rgba(68,215,255,.15)}
.gate-err{min-height:18px;color:#ff8a9d;font-size:12px;margin-bottom:8px}
.gate-btn{width:100%;height:40px;border:1px solid var(--cyan);background:rgba(68,215,255,.12);color:#dff8ff;font-size:14px;letter-spacing:.2em;cursor:pointer} .gate-btn:hover{background:rgba(68,215,255,.22)} .gate-btn:disabled{opacity:.6;cursor:wait}
.head-right .logout{margin-left:10px;color:#6f93a8;font-size:11px;text-decoration:none} .head-right .logout:hover{color:var(--cyan)} .head-right .logout[hidden]{display:none}

/* ---- 时间区间选择 ---- */
.head-right{display:flex;align-items:center;gap:12px;flex-wrap:nowrap}
.range{display:inline-flex;align-items:center;gap:4px;padding:3px;border:1px solid var(--line);border-radius:4px;background:rgba(5,29,51,.7)}
.range button{height:22px;padding:0 9px;border:0;border-radius:3px;background:transparent;color:#86a6bd;font-size:11px;cursor:pointer;font-family:inherit} .range button:hover{color:#e9f7ff} .range button.on{background:rgba(68,215,255,.18);color:#9fe9ff}
.range .custom{display:inline-flex;align-items:center;gap:4px;margin-left:4px} .range .custom[hidden]{display:none} .range .custom i{color:#5e8299;font-style:normal}
.range input[type=date]{height:22px;padding:0 6px;border:1px solid rgba(68,200,255,.3);border-radius:3px;background:rgba(2,17,31,.8);color:#e9f7ff;font-size:11px;font-family:inherit;color-scheme:dark}
.range #range-apply{background:rgba(68,215,255,.18);color:#9fe9ff}
/* ---- 可点击提示 ---- */
.kpi,.flow .step,.doctor-list .row,.alert-row,.feed-row{cursor:pointer;transition:background .15s} .kpi:hover,.doctor-list .row:hover,.alert-row:hover,.feed-row:hover{background:rgba(68,215,255,.08)} .flow .step:hover i{box-shadow:0 0 18px rgba(68,215,255,.35)}
/* ---- 下钻 / 详情弹层 ---- */
.drill{position:fixed;inset:0;z-index:40;display:flex;align-items:center;justify-content:center;background:rgba(2,12,22,.72);backdrop-filter:blur(6px)} .drill[hidden]{display:none}
.drill-card{width:1240px;max-width:94vw;max-height:88vh;display:flex;flex-direction:column;background:linear-gradient(180deg,rgba(7,38,65,.98),rgba(3,23,40,.98));border:1px solid var(--line);box-shadow:0 30px 80px rgba(0,0,0,.6),inset 0 0 40px rgba(27,150,220,.05);position:relative}
.drill-card:before{content:"";position:absolute;left:0;top:0;width:42px;height:2px;background:var(--cyan);box-shadow:0 0 12px var(--cyan)}
.drill-head{display:flex;align-items:center;gap:14px;padding:16px 22px 12px;border-bottom:1px solid rgba(68,200,255,.15)} .drill-head h2{margin:0;font-size:17px;letter-spacing:.04em} .drill-head span{color:#86a6bd;font-size:12px;flex:1}
.drill-close{width:30px;height:30px;border:1px solid var(--line);background:transparent;color:#86a6bd;font-size:18px;line-height:1;cursor:pointer;border-radius:3px} .drill-close:hover{color:#fff;border-color:var(--cyan)}
.drill-back{height:26px;padding:0 10px;border:1px solid var(--line);background:rgba(68,215,255,.08);color:#9fe9ff;font-size:12px;cursor:pointer;border-radius:3px;font-family:inherit} .drill-back[hidden]{display:none}
.drill-body{padding:16px 22px 22px;overflow:auto;min-height:200px}
.drill-stats{display:flex;gap:12px;margin-bottom:14px} .drill-stats div{flex:1;padding:10px 14px;border:1px solid var(--line);background:rgba(68,215,255,.05)} .drill-stats small{display:block;color:#86a6bd;font-size:11px} .drill-stats b{display:block;font-size:22px;font-weight:700;color:#effcff;margin-top:2px}
table.drill-tbl{width:100%;border-collapse:collapse;font-size:12px} .drill-tbl th,.drill-tbl td{padding:8px 10px;border-bottom:1px solid rgba(68,200,255,.1);text-align:left;white-space:nowrap} .drill-tbl th{color:#86a6bd;font-weight:500;font-size:11px;position:sticky;top:0;background:rgba(5,29,51,.98)}
.drill-tbl tbody tr{cursor:pointer} .drill-tbl tbody tr:hover{background:rgba(68,215,255,.08)} .drill-tbl td.ellip{max-width:260px;overflow:hidden;text-overflow:ellipsis} .drill-tbl .st{padding:1px 7px;border-radius:2px;font-size:11px;background:rgba(68,215,255,.12);color:#8fd8ff} .drill-tbl .st.done{background:rgba(72,226,168,.12);color:#64e8ad} .drill-tbl .st.wait{background:rgba(255,197,76,.12);color:#ffd15c}
.drill-more{padding:10px;text-align:center;color:#5e8299;font-size:11px}
.drill-empty{padding:40px;text-align:center;color:#5e8299}
.timeline{display:flex;gap:0;margin-bottom:18px;border:1px solid var(--line);background:rgba(68,215,255,.04)} .timeline div{flex:1;padding:10px 12px;border-right:1px solid rgba(68,200,255,.12);position:relative} .timeline div:last-child{border-right:0} .timeline b{display:block;font-size:12px;color:#86a6bd} .timeline small{display:block;font-size:11px;color:#5e8299;margin-top:3px} .timeline div.done b{color:#effcff} .timeline div.done small{color:#64e8ad} .timeline div.done:before{content:"";position:absolute;left:0;top:0;right:0;height:2px;background:var(--green)}
.detail-groups{display:grid;grid-template-columns:1fr 1fr 1fr;gap:14px} .dgroup{border:1px solid var(--line);padding:12px 14px;background:rgba(5,29,51,.6)} .dgroup.long{grid-column:1/-1} .dgroup h4{margin:0 0 8px;font-size:12px;color:#9fe9ff;letter-spacing:.08em} .dgroup dl{margin:0;display:grid;grid-template-columns:max-content 1fr;gap:6px 12px;font-size:12px} .dgroup dt{color:#86a6bd} .dgroup dd{margin:0;color:#e9f7ff;word-break:break-all;white-space:pre-wrap} .dgroup dd:empty:before{content:"—";color:#3f5c70}
.dgroup.long dl{grid-template-columns:max-content 1fr}
.drill-status{display:inline-block;margin-left:8px;padding:2px 9px;border-radius:2px;font-size:11px;background:rgba(68,215,255,.12);color:#8fd8ff;vertical-align:middle}

/* ---- MDT 排班面板 ---- */
.sched-list{padding:8px 14px 10px;display:flex;flex-direction:column;gap:6px}
.sched{display:grid;grid-template-columns:52px 1fr auto;align-items:center;gap:10px;padding:8px 10px;border-radius:4px;background:rgba(68,215,255,.04);border-left:2px solid rgba(68,200,255,.35);cursor:pointer;transition:background .15s} .sched:hover{background:rgba(68,215,255,.1)}
.sched .t{font-size:14px;font-weight:700;color:#e9f7ff;font-variant-numeric:tabular-nums} .sched .t small{display:block;font-size:10px;color:#6f93a8;font-weight:400}
.sched b{display:block;font-size:13px;color:#e9f7ff;font-weight:600} .sched small{display:block;font-size:10px;color:#6f93a8;margin-top:2px}
.sched .st{padding:1px 7px;border-radius:2px;font-size:10px;background:rgba(68,215,255,.12);color:#8fd8ff;white-space:nowrap}
.sched.ongoing{border-left-color:var(--green);background:rgba(72,226,168,.08)} .sched.ongoing .st{background:rgba(72,226,168,.16);color:#64e8ad}
.sched.ended{opacity:.55} .sched.ended .st{background:rgba(134,166,189,.14);color:#86a6bd}
.sched-more{text-align:center;font-size:11px;color:#5e8299;padding:2px 0 0}
/* ---- 周排班表（弹层） ---- */
.week-nav{display:flex;align-items:center;gap:10px;margin-bottom:12px} .week-nav button{height:26px;padding:0 10px;border:1px solid var(--line);background:rgba(68,215,255,.08);color:#9fe9ff;font-size:12px;cursor:pointer;border-radius:3px;font-family:inherit} .week-nav b{font-size:14px;color:#effcff} .week-nav span{color:#86a6bd;font-size:12px}
table.week{width:100%;border-collapse:collapse;font-size:12px;table-layout:fixed} .week th,.week td{border:1px solid rgba(68,200,255,.18);vertical-align:top;padding:8px 10px} .week th{background:rgba(27,150,220,.18);color:#e9f7ff;font-weight:600;text-align:center} .week th small{display:block;color:#86a6bd;font-weight:400;font-size:11px;margin-top:2px}
.week th.today,.week td.today{background:rgba(68,215,255,.08)} .week th.today{color:#9fe9ff} .week td.period{width:56px;text-align:center;color:#86a6bd;background:rgba(5,29,51,.6);vertical-align:middle;font-weight:600}
.week .sess{display:flex;justify-content:space-between;gap:8px;padding:4px 6px;margin-bottom:4px;border-radius:3px;background:rgba(68,215,255,.06);cursor:pointer} .week .sess:hover{background:rgba(68,215,255,.16)} .week .sess span{color:#e9f7ff} .week .sess em{font-style:normal;color:#8fd8ff;font-variant-numeric:tabular-nums;white-space:nowrap} .week .sess i{display:block;font-style:normal;color:#ffd15c;font-size:10px} .week .sess.ended{opacity:.5}
.week td .none{color:#3f5c70;text-align:center;padding:6px 0}
