* { margin:0; padding:0; box-sizing:border-box; }

:root{
  --viz-1:#0d9488; --viz-2:#f59e0b; --viz-3:#6366f1; --viz-4:#ec4899; --viz-5:#0ea5e9; --viz-6:#84cc16;
  --viz-1b:#2dd4bf; --viz-2b:#fbbf24; --viz-3b:#818cf8; --viz-4b:#f472b6; --viz-5b:#38bdf8; --viz-6b:#a3e635;
}

/* ========== 主题变量（默认：青医） ========== */
:root,
:root[data-theme="cyan"]{
  --bg:#eef3f7; --bg-2:#e6edf3; --panel:#ffffff; --panel-2:#f7fafc;
  --line:#dce6ee; --line-2:#c9d6e2;
  --ink:#0c1a24; --mut:#5c7386; --mut-2:#8aa0b0;
  --brand:#0d9488; --brand2:#14b8a6; --brand-ink:#0f766e;
  --brand-grad:linear-gradient(135deg,#0d9488,#0e7490);
  --brand-soft:#ccfbf1; --brand-softer:#f0fdfa; --brand-a12:rgba(13,148,136,.14);
  --ok:#16a34a; --ok-soft:#dcfce7; --warn:#d97706; --warn-soft:#fef3c7;
  --bad:#dc2626; --bad-soft:#fee2e2; --info:#2563eb; --info-soft:#dbeafe;
  --side:#0b1f33; --side-2:#12304d; --side-text:#c7d6e5; --side-mut:#7f96ab; --side-hov:rgba(255,255,255,.07);
  --login-grad:linear-gradient(140deg,#042f2e 0%,#0f766e 45%,#115e59 100%);
  --hero-grad:linear-gradient(135deg,#0d9488,#115e59);
  --mp-demo-grad:linear-gradient(90deg,#0b1f33,#134e4a);
  --bar-grad:linear-gradient(90deg,#0d9488,#2dd4bf);
  --tbl-head:#f3f7fa; --tbl-hover:#f4faf9; --tbl-line:#e8eef3;
  --focus:rgba(13,148,136,.16);
  --shadow-card:0 1px 2px rgba(12,26,36,.04), 0 8px 24px rgba(12,26,36,.05);
  --shadow-pop:0 24px 70px rgba(12,26,36,.28);
  --radius:14px; --radius-sm:9px;
  --font:"Segoe UI","PingFang SC","Microsoft YaHei",system-ui,sans-serif;
  --fab-fade:linear-gradient(to top,var(--bg) 70%,transparent);
  --chip-on-fg:#fff;
  --side-w:220px;
}
:root[data-theme="cyan"] body{font-family:var(--font);}

/* ========== 暗夜 ========== */
:root[data-theme="midnight"]{
  --bg:#0b1220; --bg-2:#0e1728; --panel:#121c2e; --panel-2:#162033;
  --line:#243349; --line-2:#2f4260;
  --ink:#e8eef7; --mut:#93a7be; --mut-2:#6b8099;
  --brand:#22d3ee; --brand2:#67e8f9; --brand-ink:#67e8f9;
  --brand-grad:linear-gradient(135deg,#0891b2,#22d3ee);
  --brand-soft:#164e63; --brand-softer:#0e2a3a; --brand-a12:rgba(34,211,238,.14);
  --ok:#4ade80; --ok-soft:#14532d; --warn:#fbbf24; --warn-soft:#451a03;
  --bad:#f87171; --bad-soft:#450a0a; --info:#60a5fa; --info-soft:#1e3a5f;
  --side:#070d18; --side-2:#0c1526; --side-text:#b7c7db; --side-mut:#6d829b; --side-hov:rgba(255,255,255,.06);
  --login-grad:linear-gradient(140deg,#020617 0%,#0e7490 50%,#164e63 100%);
  --hero-grad:linear-gradient(135deg,#0e7490,#155e75);
  --mp-demo-grad:linear-gradient(90deg,#020617,#0e7490);
  --bar-grad:linear-gradient(90deg,#0891b2,#67e8f9);
  --tbl-head:#162033; --tbl-hover:#17233a; --tbl-line:#1e2d45;
  --focus:rgba(34,211,238,.18);
  --shadow-card:0 1px 0 rgba(255,255,255,.03), 0 10px 30px rgba(0,0,0,.35);
  --shadow-pop:0 24px 70px rgba(0,0,0,.55);
  --radius:14px; --radius-sm:10px;
  --fab-fade:linear-gradient(to top,var(--bg) 70%,transparent);
  --chip-on-fg:#041016;
  --side-w:220px;
}

/* ========== 糖彩（多彩亮色） ========== */
:root[data-theme="candy"]{
  --bg:#fdf2f8; --bg-2:#fce7f3; --panel:#ffffff; --panel-2:#fff7fb;
  --line:#fbcfe8; --line-2:#f9a8d4;
  --ink:#3b0764; --mut:#9d174d; --mut-2:#c08497;
  --brand:#ec4899; --brand2:#f472b6; --brand-ink:#be185d;
  --brand-grad:linear-gradient(135deg,#f43f5e,#d946ef);
  --brand-soft:#fce7f3; --brand-softer:#fff1f9; --brand-a12:rgba(236,72,153,.16);
  --ok:#10b981; --ok-soft:#d1fae5; --warn:#f59e0b; --warn-soft:#fef3c7;
  --bad:#f43f5e; --bad-soft:#ffe4e6; --info:#8b5cf6; --info-soft:#ede9fe;
  --side:#3b0764; --side-2:#5b21b6; --side-text:#f5d0fe; --side-mut:#c4b5fd; --side-hov:rgba(255,255,255,.1);
  --login-grad:linear-gradient(140deg,#4c1d95 0%,#ec4899 48%,#f59e0b 100%);
  --hero-grad:linear-gradient(135deg,#f43f5e,#a855f7,#6366f1);
  --mp-demo-grad:linear-gradient(90deg,#4c1d95,#db2777);
  --bar-grad:linear-gradient(90deg,#f43f5e,#a855f7,#06b6d4);
  --tbl-head:#fce7f3; --tbl-hover:#fff0f7; --tbl-line:#fbcfe8;
  --focus:rgba(236,72,153,.18);
  --shadow-card:0 1px 2px rgba(59,7,100,.05), 0 8px 24px rgba(217,70,239,.08);
  --shadow-pop:0 24px 70px rgba(59,7,100,.3);
  --radius:16px; --radius-sm:10px;
  --fab-fade:linear-gradient(to top,var(--bg) 70%,transparent);
  --chip-on-fg:#fff;
  --side-w:220px;
}
:root[data-theme="candy"] .role-icon{background:#fce7f3;color:#db2777;}
:root[data-theme="candy"] .role-icon.doc{background:#d1fae5;color:#059669;}
:root[data-theme="candy"] .role-icon.adm{background:#ede9fe;color:#7c3aed;}
:root[data-theme="candy"] .stat:before{background:linear-gradient(180deg,#f43f5e,#d946ef,#6366f1);}
:root[data-theme="candy"] .logo-mark{background:linear-gradient(135deg,#f43f5e,#d946ef,#8b5cf6);}

/* ========== 热带（多彩亮色） ========== */
:root[data-theme="tropical"]{
  --bg:#fff7ed; --bg-2:#ffedd5; --panel:#ffffff; --panel-2:#fffaf5;
  --line:#fed7aa; --line-2:#fdba74;
  --ink:#431407; --mut:#9a3412; --mut-2:#c2795b;
  --brand:#f97316; --brand2:#fb923c; --brand-ink:#c2410c;
  --brand-grad:linear-gradient(135deg,#fb923c,#f43f5e);
  --brand-soft:#ffedd5; --brand-softer:#fff7ed; --brand-a12:rgba(249,115,22,.16);
  --ok:#10b981; --ok-soft:#d1fae5; --warn:#eab308; --warn-soft:#fef9c3;
  --bad:#ef4444; --bad-soft:#fee2e2; --info:#06b6d4; --info-soft:#cffafe;
  --side:#134e4a; --side-2:#115e59; --side-text:#ccfbf1; --side-mut:#5eead4; --side-hov:rgba(255,255,255,.1);
  --login-grad:linear-gradient(140deg,#134e4a 0%,#f97316 52%,#facc15 100%);
  --hero-grad:linear-gradient(135deg,#f97316,#ec4899);
  --mp-demo-grad:linear-gradient(90deg,#134e4a,#9a3412);
  --bar-grad:linear-gradient(90deg,#22d3ee,#f97316,#facc15);
  --tbl-head:#ffedd5; --tbl-hover:#fff7ed; --tbl-line:#fed7aa;
  --focus:rgba(249,115,22,.18);
  --shadow-card:0 1px 2px rgba(67,20,7,.05), 0 8px 24px rgba(249,115,22,.1);
  --shadow-pop:0 24px 70px rgba(67,20,7,.3);
  --radius:14px; --radius-sm:10px;
  --fab-fade:linear-gradient(to top,var(--bg) 70%,transparent);
  --chip-on-fg:#fff;
  --side-w:220px;
}
:root[data-theme="tropical"] .role-icon{background:#ffedd5;color:#ea580c;}
:root[data-theme="tropical"] .role-icon.doc{background:#cffafe;color:#0891b2;}
:root[data-theme="tropical"] .role-icon.adm{background:#fef9c3;color:#ca8a04;}
:root[data-theme="tropical"] .stat:before{background:linear-gradient(180deg,#22d3ee,#f97316,#facc15);}
:root[data-theme="tropical"] .logo-mark{background:linear-gradient(135deg,#f97316,#f43f5e);}

/* ========== 朝阳（多彩亮色） ========== */
:root[data-theme="sunrise"]{
  --bg:#fffbeb; --bg-2:#fef3c7; --panel:#ffffff; --panel-2:#fffdf7;
  --line:#fde68a; --line-2:#fcd34d;
  --ink:#451a03; --mut:#a16207; --mut-2:#c4a35a;
  --brand:#f59e0b; --brand2:#fbbf24; --brand-ink:#b45309;
  --brand-grad:linear-gradient(135deg,#f59e0b,#ef4444);
  --brand-soft:#fef3c7; --brand-softer:#fffbeb; --brand-a12:rgba(245,158,11,.16);
  --ok:#22c55e; --ok-soft:#dcfce7; --warn:#f97316; --warn-soft:#ffedd5;
  --bad:#e11d48; --bad-soft:#ffe4e6; --info:#2563eb; --info-soft:#dbeafe;
  --side:#1c1917; --side-2:#292524; --side-text:#fde68a; --side-mut:#a8a29e; --side-hov:rgba(255,255,255,.08);
  --login-grad:linear-gradient(140deg,#1c1917 0%,#dc2626 40%,#f59e0b 75%,#facc15 100%);
  --hero-grad:linear-gradient(135deg,#f59e0b,#ef4444);
  --mp-demo-grad:linear-gradient(90deg,#1c1917,#b45309);
  --bar-grad:linear-gradient(90deg,#ef4444,#f59e0b,#fde047);
  --tbl-head:#fef3c7; --tbl-hover:#fffbeb; --tbl-line:#fde68a;
  --focus:rgba(245,158,11,.18);
  --shadow-card:0 1px 2px rgba(69,26,3,.05), 0 8px 24px rgba(239,68,68,.08);
  --shadow-pop:0 24px 70px rgba(69,26,3,.3);
  --radius:14px; --radius-sm:10px;
  --fab-fade:linear-gradient(to top,var(--bg) 70%,transparent);
  --chip-on-fg:#fff;
  --side-w:220px;
}
:root[data-theme="sunrise"] .role-icon{background:#fef3c7;color:#d97706;}
:root[data-theme="sunrise"] .role-icon.doc{background:#dcfce7;color:#16a34a;}
:root[data-theme="sunrise"] .role-icon.adm{background:#ffe4e6;color:#e11d48;}
:root[data-theme="sunrise"] .stat:before{background:linear-gradient(180deg,#ef4444,#f59e0b,#fde047);}
:root[data-theme="sunrise"] .logo-mark{background:linear-gradient(135deg,#ef4444,#f59e0b,#fde047);}

/* ========== 霓虹（黑夜·多彩） ========== */
:root[data-theme="neon"]{
  --bg:#0a0a12; --bg-2:#10101c; --panel:#14141f; --panel-2:#1a1a28;
  --line:#2a2a40; --line-2:#3d3d5c;
  --ink:#f5f3ff; --mut:#a5b0c8; --mut-2:#6b7694;
  --brand:#ff2d95; --brand2:#ff6ac1; --brand-ink:#ff8ec8;
  --brand-grad:linear-gradient(135deg,#ff2d95,#7c3aed,#22d3ee);
  --brand-soft:#3b0a28; --brand-softer:#240a1a; --brand-a12:rgba(255,45,149,.18);
  --ok:#39ff14; --ok-soft:#0a2e08; --warn:#facc15; --warn-soft:#3b2f04;
  --bad:#ff4d6d; --bad-soft:#3b0a14; --info:#22d3ee; --info-soft:#083344;
  --side:#05050a; --side-2:#0c0c16; --side-text:#e9d5ff; --side-mut:#8b7bb8; --side-hov:rgba(255,255,255,.06);
  --login-grad:linear-gradient(140deg,#05050a 0%,#7c3aed 38%,#ff2d95 72%,#22d3ee 100%);
  --hero-grad:linear-gradient(135deg,#ff2d95,#7c3aed);
  --mp-demo-grad:linear-gradient(90deg,#05050a,#7c3aed);
  --bar-grad:linear-gradient(90deg,#ff2d95,#a855f7,#22d3ee,#facc15);
  --tbl-head:#1a1a28; --tbl-hover:#1e1e30; --tbl-line:#2a2a40;
  --focus:rgba(255,45,149,.22);
  --shadow-card:0 1px 0 rgba(255,255,255,.03), 0 10px 30px rgba(0,0,0,.45);
  --shadow-pop:0 24px 70px rgba(0,0,0,.65);
  --radius:14px; --radius-sm:10px;
  --fab-fade:linear-gradient(to top,var(--bg) 70%,transparent);
  --chip-on-fg:#0a0a12;
  --side-w:220px;
}

/* ========== 极光（黑夜·多彩） ========== */
:root[data-theme="aurora"]{
  --bg:#06141a; --bg-2:#0a1c24; --panel:#0c1f26; --panel-2:#112830;
  --line:#1e3a45; --line-2:#2a4f5e;
  --ink:#e8fff7; --mut:#93b8c4; --mut-2:#6a8f9c;
  --brand:#34d399; --brand2:#6ee7b7; --brand-ink:#6ee7b7;
  --brand-grad:linear-gradient(135deg,#34d399,#818cf8,#c084fc);
  --brand-soft:#0d3b32; --brand-softer:#0a2a24; --brand-a12:rgba(52,211,153,.16);
  --ok:#4ade80; --ok-soft:#14532d; --warn:#fbbf24; --warn-soft:#451a03;
  --bad:#fb7185; --bad-soft:#4c0519; --info:#38bdf8; --info-soft:#0c4a6e;
  --side:#031210; --side-2:#0a221e; --side-text:#c7f9e9; --side-mut:#6f9c90; --side-hov:rgba(255,255,255,.06);
  --login-grad:linear-gradient(140deg,#031210 0%,#059669 40%,#6366f1 70%,#a855f7 100%);
  --hero-grad:linear-gradient(135deg,#059669,#0e7490);
  --mp-demo-grad:linear-gradient(90deg,#031210,#065f46);
  --bar-grad:linear-gradient(90deg,#34d399,#22d3ee,#818cf8,#c084fc);
  --tbl-head:#112830; --tbl-hover:#14303a; --tbl-line:#1e3a45;
  --focus:rgba(52,211,153,.2);
  --shadow-card:0 1px 0 rgba(255,255,255,.03), 0 10px 30px rgba(0,0,0,.4);
  --shadow-pop:0 24px 70px rgba(0,0,0,.6);
  --radius:14px; --radius-sm:10px;
  --fab-fade:linear-gradient(to top,var(--bg) 70%,transparent);
  --chip-on-fg:#031210;
  --side-w:220px;
}

/* ========== 暮色（黑夜·暖色） ========== */
:root[data-theme="dusk"]{
  --bg:#120c14; --bg-2:#1a121c; --panel:#1e1520; --panel-2:#261b28;
  --line:#3a2a3e; --line-2:#523d58;
  --ink:#fdf2f8; --mut:#c4b0c8; --mut-2:#8f7a94;
  --brand:#fb7185; --brand2:#fda4af; --brand-ink:#fda4af;
  --brand-grad:linear-gradient(135deg,#f97316,#fb7185,#c084fc);
  --brand-soft:#4a1528; --brand-softer:#2e0f1c; --brand-a12:rgba(251,113,133,.18);
  --ok:#4ade80; --ok-soft:#14532d; --warn:#fbbf24; --warn-soft:#451a03;
  --bad:#f87171; --bad-soft:#450a0a; --info:#60a5fa; --info-soft:#1e3a5f;
  --side:#0c080e; --side-2:#161018; --side-text:#f5d0fe; --side-mut:#a78b9e; --side-hov:rgba(255,255,255,.06);
  --login-grad:linear-gradient(140deg,#0c080e 0%,#9f1239 42%,#ea580c 78%,#c084fc 100%);
  --hero-grad:linear-gradient(135deg,#f97316,#e11d48);
  --mp-demo-grad:linear-gradient(90deg,#0c080e,#9f1239);
  --bar-grad:linear-gradient(90deg,#fb923c,#f43f5e,#a855f7);
  --tbl-head:#261b28; --tbl-hover:#2a1f2e; --tbl-line:#3a2a3e;
  --focus:rgba(251,113,133,.22);
  --shadow-card:0 1px 0 rgba(255,255,255,.03), 0 10px 30px rgba(0,0,0,.45);
  --shadow-pop:0 24px 70px rgba(0,0,0,.65);
  --radius:16px; --radius-sm:10px;
  --fab-fade:linear-gradient(to top,var(--bg) 70%,transparent);
  --chip-on-fg:#120c14;
  --side-w:220px;
}

/* ========== 共享黑夜组件覆盖 ========== */
html.theme-dark .btn.ghost,
html.theme-dark .chip,
html.theme-dark .seg .opt,
html.theme-dark .role-switch,
html.theme-dark .p-tile,
html.theme-dark .p-card,
html.theme-dark .q-item,
html.theme-dark .modal,
html.theme-dark .login-box,
html.theme-dark .fld input,
html.theme-dark .fld select,
html.theme-dark .fld textarea,
html.theme-dark .q-free,
html.theme-dark .mp-tab,
html.theme-dark .topbar,
html.theme-dark .theme-fab,
html.theme-dark .theme-panel,
html.theme-dark .theme-opt,
html.theme-dark .code-box input{
  background:var(--panel); color:var(--ink);
}
html.theme-dark .btn.ghost{border-color:var(--line-2);}
html.theme-dark .btn.ghost:hover{border-color:var(--brand);color:var(--brand2);}
html.theme-dark .tbl th{background:var(--tbl-head);color:var(--mut);}
html.theme-dark .tbl td{border-bottom-color:var(--tbl-line);}
html.theme-dark .tbl tr:hover td{background:var(--tbl-hover);}
html.theme-dark .tag{background:var(--line);color:var(--ink);}
html.theme-dark .tag.blue{background:var(--info-soft);color:var(--info);}
html.theme-dark .tag.green{background:var(--ok-soft);color:var(--ok);}
html.theme-dark .tag.amber{background:var(--warn-soft);color:var(--warn);}
html.theme-dark .tag.red{background:var(--bad-soft);color:var(--bad);}
html.theme-dark .tag.purple{background:var(--brand-soft);color:var(--brand2);}
html.theme-dark .notice{background:var(--brand-soft);border-color:var(--brand);color:var(--brand2);}
html.theme-dark .notice.warnbg{background:var(--warn-soft);border-color:var(--warn);color:var(--warn);}
html.theme-dark .bar{background:#1e293b;}
html.theme-dark .dict-code{background:var(--panel-2);}
html.theme-dark .fld .u{background:var(--panel-2);}
html.theme-dark .p-list-item{border-bottom-color:var(--tbl-line);}
html.theme-dark .p-list-item .ic{background:var(--brand-soft);color:var(--brand2);}
html.theme-dark .role-icon{background:var(--brand-soft);color:var(--brand2);}
html.theme-dark .role-icon.doc{background:var(--ok-soft);color:var(--ok);}
html.theme-dark .role-icon.adm{background:var(--warn-soft);color:var(--warn);}
html.theme-dark .seg .opt.on{background:var(--brand-soft);color:var(--brand2);border-color:var(--brand);}
html.theme-dark .chip.on{background:var(--brand);color:var(--chip-on-fg);border-color:var(--brand);}
html.theme-dark body.mode-patient .view{background:var(--side);}
html.theme-dark .mp-shell,
html.theme-dark .mp-body{background:var(--bg);}
html.theme-dark .q-prog{background:var(--bg);}
html.theme-dark .p-fab{background:var(--fab-fade);}
html.theme-dark .nav-group{color:var(--side-mut);}
html.theme-dark .tl-item .ds{color:var(--mut);}
html.theme-dark .qr{outline-color:var(--line);}
html.theme-dark .wx-badge.plain{background:var(--line-2);color:var(--ink) !important;}
html.theme-dark .tab.active{color:var(--brand2);border-color:var(--brand);}
html.theme-dark .page-h .btn.ghost{background:var(--panel);}
html.theme-dark .filter-row input,
html.theme-dark .filter-row select,
html.theme-dark select.role-switch,
html.theme-dark .audit-search-inp{background:var(--panel);color:var(--ink);border-color:var(--line-2);}
html.theme-dark .toast{background:#1e1520;color:#f5f3ff;}
html.theme-dark .toast.ok{background:#14532d;}
html.theme-dark .toast.bad{background:#450a0a;}
html.theme-dark .toast.warn{background:#422006;}
html.theme-dark .notice{color:var(--brand2);}
html.theme-dark .theme-opt.on{box-shadow:0 0 0 3px var(--focus);}
html.theme-dark .role-card:hover{border-color:var(--brand);}
html.theme-dark .p-hero .nm .tag{background:rgba(255,255,255,.18);}
html.theme-dark .empty{background:var(--panel);border-color:var(--line);}
html.theme-dark .meter .bar{background:#1e293b;}
html.theme-dark .qr{background:repeating-conic-gradient(#e8eef7 0 25%, #0c1f26 0 50%) 0 0/20px 20px;}
html.theme-dark .wx-badge.plain{border:1px solid var(--line-2);}

/* ========== 暖珊瑚 ========== */
:root[data-theme="coral"]{
  --bg:#faf6f2; --bg-2:#f3ebe3; --panel:#fffdfb; --panel-2:#faf4ee;
  --line:#efe2d6; --line-2:#e2cfc0;
  --ink:#2b1d16; --mut:#8a6e5e; --mut-2:#b09484;
  --brand:#e85d4c; --brand2:#f07a68; --brand-ink:#c94434;
  --brand-grad:linear-gradient(135deg,#f07a68,#e85d4c);
  --brand-soft:#ffe4dc; --brand-softer:#fff5f1; --brand-a12:rgba(232,93,76,.14);
  --ok:#16a34a; --ok-soft:#dcfce7; --warn:#d97706; --warn-soft:#fef3c7;
  --bad:#dc2626; --bad-soft:#fee2e2; --info:#2563eb; --info-soft:#dbeafe;
  --side:#2b1d16; --side-2:#4a3226; --side-text:#f0e2d8; --side-mut:#b89d8d; --side-hov:rgba(255,255,255,.08);
  --login-grad:linear-gradient(140deg,#2b1d16 0%,#e85d4c 55%,#f4a261 100%);
  --hero-grad:linear-gradient(135deg,#e85d4c,#c94434);
  --mp-demo-grad:linear-gradient(90deg,#2b1d16,#7c2d12);
  --bar-grad:linear-gradient(90deg,#f07a68,#fbbf24);
  --tbl-head:#faf3ed; --tbl-hover:#fff6f0; --tbl-line:#f3e8df;
  --focus:rgba(232,93,76,.16);
  --shadow-card:0 1px 2px rgba(43,29,22,.04), 0 8px 24px rgba(43,29,22,.06);
  --shadow-pop:0 24px 70px rgba(43,29,22,.3);
  --radius:16px; --radius-sm:10px;
  --font:"Segoe UI","PingFang SC","Microsoft YaHei",system-ui,sans-serif;
  --fab-fade:linear-gradient(to top,var(--bg) 70%,transparent);
  --side-w:220px;
}
:root[data-theme="coral"] .role-icon{background:var(--brand-soft);color:var(--brand-ink);}
:root[data-theme="coral"] .role-icon.doc{background:var(--ok-soft);color:var(--ok);}
:root[data-theme="coral"] .role-icon.adm{background:var(--warn-soft);color:var(--warn);}

/* ========== 松石绿 ========== */
:root[data-theme="forest"]{
  --bg:#f0f7f2; --bg-2:#e5f0e8; --panel:#ffffff; --panel-2:#f5faf6;
  --line:#d5e6db; --line-2:#bfd8c8;
  --ink:#0d1f16; --mut:#4f6b5c; --mut-2:#7f9a8b;
  --brand:#059669; --brand2:#10b981; --brand-ink:#047857;
  --brand-grad:linear-gradient(135deg,#10b981,#047857);
  --brand-soft:#d1fae5; --brand-softer:#ecfdf5; --brand-a12:rgba(5,150,105,.14);
  --ok:#16a34a; --ok-soft:#dcfce7; --warn:#d97706; --warn-soft:#fef3c7;
  --bad:#dc2626; --bad-soft:#fee2e2; --info:#2563eb; --info-soft:#dbeafe;
  --side:#0b291c; --side-2:#134e36; --side-text:#c5ddd0; --side-mut:#7fa190; --side-hov:rgba(255,255,255,.07);
  --login-grad:linear-gradient(140deg,#052e16 0%,#059669 50%,#065f46 100%);
  --hero-grad:linear-gradient(135deg,#059669,#065f46);
  --mp-demo-grad:linear-gradient(90deg,#0b291c,#065f46);
  --bar-grad:linear-gradient(90deg,#059669,#34d399);
  --tbl-head:#f2f8f4; --tbl-hover:#f2faf5; --tbl-line:#e4efe8;
  --focus:rgba(5,150,105,.16);
  --shadow-card:0 1px 2px rgba(13,31,22,.04), 0 8px 24px rgba(13,31,22,.05);
  --shadow-pop:0 24px 70px rgba(13,31,22,.28);
  --radius:14px; --radius-sm:9px;
  --fab-fade:linear-gradient(to top,var(--bg) 70%,transparent);
  --side-w:220px;
}
:root[data-theme="forest"] .role-icon{background:var(--brand-soft);color:var(--brand-ink);}

/* ========== 紫罗兰 ========== */
:root[data-theme="violet"]{
  --bg:#f4f2fa; --bg-2:#ebe7f6; --panel:#ffffff; --panel-2:#f8f6fc;
  --line:#e2dcf0; --line-2:#cfc6e6;
  --ink:#1a1230; --mut:#6b6285; --mut-2:#9690ad;
  --brand:#7c3aed; --brand2:#a78bfa; --brand-ink:#6d28d9;
  --brand-grad:linear-gradient(135deg,#8b5cf6,#6d28d9);
  --brand-soft:#ede9fe; --brand-softer:#f5f3ff; --brand-a12:rgba(124,58,237,.14);
  --ok:#16a34a; --ok-soft:#dcfce7; --warn:#d97706; --warn-soft:#fef3c7;
  --bad:#dc2626; --bad-soft:#fee2e2; --info:#2563eb; --info-soft:#dbeafe;
  --side:#1a1230; --side-2:#2e1f55; --side-text:#d4cbee; --side-mut:#9086b0; --side-hov:rgba(255,255,255,.08);
  --login-grad:linear-gradient(140deg,#1a1230 0%,#7c3aed 55%,#5b21b6 100%);
  --hero-grad:linear-gradient(135deg,#7c3aed,#5b21b6);
  --mp-demo-grad:linear-gradient(90deg,#1a1230,#4c1d95);
  --bar-grad:linear-gradient(90deg,#7c3aed,#c4b5fd);
  --tbl-head:#f6f4fb; --tbl-hover:#f7f5fd; --tbl-line:#ebe6f5;
  --focus:rgba(124,58,237,.16);
  --shadow-card:0 1px 2px rgba(26,18,48,.04), 0 8px 24px rgba(26,18,48,.06);
  --shadow-pop:0 24px 70px rgba(26,18,48,.3);
  --radius:14px; --radius-sm:10px;
  --fab-fade:linear-gradient(to top,var(--bg) 70%,transparent);
  --side-w:220px;
}
:root[data-theme="violet"] .role-icon{background:var(--brand-soft);color:var(--brand-ink);}

html,body{height:100%;}
body{font-family:var(--font,"Segoe UI","PingFang SC","Microsoft YaHei",system-ui,sans-serif);
  background:var(--bg);color:var(--ink);font-size:14px;line-height:1.55;
  -webkit-font-smoothing:antialiased;}
.hidden{display:none !important;}
button{font-family:inherit;}

/* ---------- login ---------- */
.login-page{min-height:100vh;display:flex;align-items:center;justify-content:center;
  background:var(--login-grad);padding:24px;position:relative;}
.login-page:before{content:"";position:absolute;inset:0;
  background:radial-gradient(ellipse 60% 50% at 20% 20%,rgba(255,255,255,.12),transparent 60%),
             radial-gradient(ellipse 50% 40% at 80% 80%,rgba(0,0,0,.18),transparent 60%);
  pointer-events:none;}
.login-box{width:min(560px,100%);background:var(--panel);color:var(--ink);border:1px solid var(--line);
  border-radius:20px;padding:34px 30px;box-shadow:var(--shadow-pop);position:relative;z-index:1;}
.login-brand{text-align:center;margin-bottom:22px;}
.login-brand h1{font-size:22px;line-height:1.45;margin:12px 0 6px;letter-spacing:.01em;}
.login-brand .sub{color:var(--mut);font-size:13px;}
.logo-mark{width:52px;height:52px;border-radius:16px;background:var(--brand-grad);
  color:#fff;font-weight:800;display:flex;align-items:center;justify-content:center;font-size:20px;margin:0 auto;
  box-shadow:0 8px 24px var(--brand-a12);}
.logo-mark.sm{width:34px;height:34px;font-size:13px;border-radius:10px;margin:0;box-shadow:none;}
.role-cards{display:flex;flex-direction:column;gap:12px;}
.role-card{display:flex;align-items:center;gap:14px;border:1px solid var(--line);border-radius:16px;
  padding:14px 16px;cursor:pointer;transition:.18s;position:relative;background:var(--panel);}
.role-card:hover{border-color:var(--brand);box-shadow:0 8px 24px var(--brand-a12);transform:translateY(-2px);}
.role-card > div:not(.role-icon){flex:1;min-width:0;overflow-wrap:anywhere;}
.role-card b{display:block;font-size:15px;}
.role-card span{color:var(--mut);font-size:12px;}
.role-icon{width:40px;height:40px;border-radius:12px;background:var(--brand-soft);color:var(--brand-ink);font-weight:700;
  display:flex;align-items:center;justify-content:center;flex:none;}
.role-icon.doc{background:var(--ok-soft);color:var(--ok);}
.role-icon.adm{background:var(--warn-soft);color:var(--warn);}
.wx-badge{margin-left:auto;background:#07c160;color:#fff !important;font-size:11px !important;
  padding:4px 8px;border-radius:20px;white-space:nowrap;flex:none;}
.wx-badge.plain{background:var(--line);color:var(--mut) !important;}
.login-tip{text-align:center;color:var(--mut);font-size:12px;margin-top:16px;}

/* ---------- shell ---------- */
.app{min-height:100vh;display:flex;flex-direction:column;}
.topbar{height:56px;background:var(--panel);border-bottom:1px solid var(--line);display:flex;align-items:center;
  justify-content:space-between;padding:0 18px;position:sticky;top:0;z-index:50;}
.topbar-left{display:flex;align-items:center;gap:12px;min-width:0;flex:1;}
.titles b{display:block;font-size:14.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:min(340px,38vw);}
.titles span{font-size:12px;color:var(--mut);display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:min(340px,38vw);}
.titles{min-width:0;flex:1;}
.nav-toggle{display:none;}
.topbar-right{display:flex;align-items:center;gap:10px;flex:none;}
.clock{font-size:12px;color:var(--mut);font-variant-numeric:tabular-nums;}
.role-switch,.theme-switch{border:1px solid var(--line);border-radius:var(--radius-sm);padding:6px 10px;
  background:var(--panel);color:var(--ink);font-size:13px;cursor:pointer;max-width:140px;}
.layout{flex:1;display:flex;min-height:0;}
.sidebar{width:var(--side-w,216px);background:linear-gradient(180deg,var(--side),var(--side-2));color:var(--side-text);
  padding:14px 10px;flex:none;overflow-y:auto;}
.nav-group{font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--side-mut);margin:14px 10px 6px;}
.nav-item{display:flex;align-items:center;gap:9px;padding:9px 12px;border-radius:var(--radius-sm);cursor:pointer;
  font-size:13.5px;margin-bottom:2px;transition:.12s;}
.nav-item:hover{background:var(--side-hov);color:#fff;}
.nav-item.active{background:var(--brand);color:#fff;font-weight:600;box-shadow:0 4px 14px var(--brand-a12);}
.nav-item .ni{opacity:.85;}
.view{flex:1;padding:20px;overflow:auto;min-width:0;}

/* ---------- generic ---------- */
.page-h{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px;gap:12px;flex-wrap:wrap;}
.page-h h2{font-size:19px;min-width:0;overflow-wrap:anywhere;letter-spacing:.01em;}
.page-h .desc{color:var(--mut);font-size:12.5px;margin-top:3px;overflow-wrap:anywhere;max-width:64ch;}
.page-h > div{min-width:0;}
.page-h .btns,.btns{display:flex;gap:8px;flex-wrap:wrap;align-items:center;}
.page-h > div[style*="display:flex"],.page-h > div[style*="display: flex"],
.card h3 > div[style*="display:flex"],.card h3 > div[style*="display: flex"],
.right > div[style*="display:flex"],.right > div[style*="display: flex"]{flex-wrap:wrap;min-width:0;}
.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:16px;
  margin-bottom:14px;box-shadow:var(--shadow-card);}
.card h3{font-size:14.5px;margin-bottom:10px;display:flex;align-items:center;gap:8px;flex-wrap:wrap;min-width:0;}
.card h3 > .tag{flex:none;}
.grid{display:grid;gap:14px;}
.g2{grid-template-columns:repeat(2,minmax(0,1fr));}
.g3{grid-template-columns:repeat(3,minmax(0,1fr));}
.g4{grid-template-columns:repeat(4,minmax(0,1fr));}
@media(max-width:1100px){
  .g3,.g4{grid-template-columns:repeat(2,minmax(0,1fr));}
  .g2{grid-template-columns:1fr;}
  /* 2 列下末项落单 → 通栏（含 5 项等奇数个） */
  .g3 > :last-child:nth-child(odd),
  .g4 > :last-child:nth-child(odd){grid-column:1 / -1;}
}
/* 统计卡：全尺寸左标签+右大数字，铺满宽度；无 delta 时不留空行 */
.stat{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:16px;
  display:grid;grid-template-columns:minmax(0,1fr) auto;
  grid-template-areas:"l v" "d v";
  align-items:center;column-gap:12px;row-gap:2px;min-width:0;
  box-shadow:var(--shadow-card);position:relative;overflow:hidden;}
.stat:before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--brand-grad);opacity:.85;}
.stat:not(:has(> .d)) { grid-template-areas: "l v"; }
.stat:not(:has(> .d)) .l { align-self: center; }
.stat .l{grid-area:l;font-size:12.5px;color:var(--mut);min-width:0;overflow-wrap:anywhere;padding-left:6px;}
.stat .d{grid-area:d;font-size:11.5px;color:var(--ok);margin-top:0;min-width:0;overflow-wrap:anywhere;padding-left:6px;}
.stat .d:empty{display:none;}
.stat .v{grid-area:v;font-size:26px;font-weight:800;color:var(--brand-ink);margin-top:0;
  line-height:1.1;text-align:right;font-variant-numeric:tabular-nums;padding-right:2px;}
.btn{border:1px solid transparent;background:var(--brand);color:#fff;border-radius:var(--radius-sm);padding:8px 14px;
  font-size:13.5px;cursor:pointer;transition:.15s;display:inline-flex;align-items:center;gap:6px;
  box-shadow:0 1px 2px rgba(0,0,0,.06);}
.btn:hover{filter:brightness(1.06);transform:translateY(-1px);}
.btn:active{transform:none;}
.btn.ghost{background:var(--panel);border-color:var(--line-2);color:var(--ink);box-shadow:none;}
.btn.ghost:hover{border-color:var(--brand);color:var(--brand-ink);filter:none;}
.btn.sm{padding:5px 10px;font-size:12.5px;border-radius:calc(var(--radius-sm) - 2px);}
.btn.ok{background:var(--ok);} .btn.warn{background:var(--warn);} .btn.bad{background:var(--bad);}
.btn:disabled{opacity:.5;cursor:not-allowed;transform:none;}
.tag{display:inline-block;padding:2px 8px;border-radius:20px;font-size:11.5px;background:var(--line);color:var(--mut);white-space:nowrap;}
.tag.blue{background:var(--info-soft);color:var(--info);} .tag.green{background:var(--ok-soft);color:var(--ok);}
.tag.amber{background:var(--warn-soft);color:var(--warn);} .tag.red{background:var(--bad-soft);color:var(--bad);}
.tag.purple{background:var(--brand-soft);color:var(--brand-ink);}
.btn{white-space:nowrap;}
.chip{white-space:nowrap;}
.p-badge{white-space:nowrap;}
.tbl-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch;max-width:100%;}
table.tbl{width:100%;border-collapse:collapse;font-size:13px;}
.tbl th{text-align:left;color:var(--mut);font-weight:600;padding:9px 10px;border-bottom:1px solid var(--line);background:var(--tbl-head);}
.tbl td{padding:9px 10px;border-bottom:1px solid var(--tbl-line);vertical-align:middle;}
.tbl tr:hover td{background:var(--tbl-hover);}
.tbl tr.clickable{cursor:pointer;}
.tbl tr.clickable:hover{background:var(--brand-soft, rgba(14,165,233,.06));}
.stat.click{cursor:pointer;transition:transform .12s, box-shadow .12s;}
.stat.click:hover{transform:translateY(-1px);box-shadow:0 6px 18px rgba(15,23,42,.08);}
.card.click:hover{border-color:var(--brand);}
.nowrap{white-space:nowrap;}
.tbl .cell-gb{white-space:nowrap;line-height:1.25;min-width:7.5em;}
.tbl .cell-gb .g{display:block;font-weight:700;font-size:13px;color:var(--ink,#0f172a);}
.tbl .cell-gb .b{display:block;font-size:12px;color:var(--mut);letter-spacing:-.01em;}
.tbl .cell-name{white-space:nowrap;}
.tbl .cell-name .tag{display:inline-block;max-width:7em;overflow:hidden;text-overflow:ellipsis;vertical-align:bottom;}
.tbl .cell-ph{text-align:center;padding-left:6px;padding-right:6px;}
.icon-btn{width:34px;height:34px;border-radius:10px;border:1px solid var(--line);background:var(--panel);
  cursor:pointer;font-size:15px;line-height:1;display:inline-flex;align-items:center;justify-content:center;
  transition:background .12s, border-color .12s, transform .1s;}
.icon-btn:hover{border-color:var(--brand);background:var(--brand-soft, rgba(14,165,233,.1));}
.icon-btn:active{transform:scale(.96);}
.tbl th:nth-child(4), .tbl td.cell-ph{width:44px;}
.mut{color:var(--mut);} .small{font-size:12px;}
.mono{font-family:Consolas,monospace;font-size:12.5px;}
.right{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap;}
.right > div,.right > span{min-width:0;}
.right > div[style*="display:flex"],.right > div[style*="display: flex"]{flex-wrap:wrap;}
.tabs{display:flex;gap:6px;border-bottom:1px solid var(--line);margin-bottom:14px;flex-wrap:wrap;}
.tab{padding:8px 14px;font-size:13.5px;color:var(--mut);cursor:pointer;border-bottom:2px solid transparent;user-select:none;}
.tab.active{color:var(--brand-ink);border-color:var(--brand);font-weight:700;}
.empty{padding:28px;text-align:center;color:var(--mut);font-size:13px;}
.notice{background:var(--brand-softer);border:1px solid var(--brand-soft);color:var(--brand-ink);
  border-radius:10px;padding:10px 12px;font-size:12.5px;margin-bottom:12px;overflow-wrap:anywhere;}
.notice.warnbg{background:var(--warn-soft);border-color:var(--warn);color:var(--warn);}
.chips{display:flex;gap:6px;flex-wrap:wrap;}
.chip{border:1px solid var(--line);background:var(--panel);border-radius:20px;padding:4px 11px;font-size:12.5px;cursor:pointer;color:var(--mut);}
.chip.on{background:var(--brand);border-color:var(--brand);color:var(--chip-on-fg,#fff);}
.kv{display:grid;grid-template-columns:minmax(96px,120px) minmax(0,1fr);gap:6px 10px;font-size:13px;}
.kv dt{color:var(--mut);} .kv dd{font-weight:600;min-width:0;overflow-wrap:anywhere;}
.bar{height:8px;background:var(--line);border-radius:8px;overflow:hidden;}
.bar i{display:block;height:100%;background:var(--bar-grad);}

/* ---------- forms ---------- */
.form{display:grid;gap:12px;}
.form.row2{grid-template-columns:1fr 1fr;}
@media(max-width:820px){.form.row2{grid-template-columns:1fr;}}
.fld{display:flex;flex-direction:column;gap:5px;}
.fld label{font-size:12.5px;color:var(--mut);}
.fld label .req{color:var(--bad);}
.fld input,.fld select,.fld textarea{border:1px solid var(--line-2);border-radius:var(--radius-sm);padding:9px 11px;font-size:13.5px;
  font-family:inherit;background:var(--panel);color:var(--ink);width:100%;transition:.12s;}
.fld input:focus,.fld select:focus,.fld textarea:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px var(--focus);}
.fld .unit-in{display:flex;gap:6px;} .fld .unit-in input{flex:1;}
.fld .u{min-width:64px;display:flex;align-items:center;justify-content:center;background:var(--bg-2);border:1px solid var(--line);
  border-radius:var(--radius-sm);font-size:12.5px;color:var(--mut);padding:0 8px;}
.fld .err{color:var(--bad);font-size:11.5px;min-height:0;line-height:1.3;}
.fld .err:empty{display:none;}
.fld.invalid .err{min-height:14px;display:block;}
.fld.invalid input,.fld.invalid select{border-color:var(--bad);}
.seg{display:flex;gap:6px;flex-wrap:wrap;}
.seg .opt{border:1px solid var(--line-2);background:var(--panel);border-radius:8px;padding:7px 13px;font-size:13px;
  cursor:pointer;color:var(--mut);transition:.12s;}
.seg .opt.on{background:var(--brand-soft);border-color:var(--brand);color:var(--brand-ink);font-weight:700;}
.form-actions{display:flex;gap:10px;justify-content:flex-end;margin-top:4px;flex-wrap:wrap;}
.audit-search-inp{flex:1 1 180px;min-width:0;max-width:260px;}
.fset{border:1px dashed var(--line-2);border-radius:12px;padding:14px;}
.fset legend{font-size:12.5px;color:var(--brand-ink);font-weight:700;padding:0 6px;}

/* ---------- modal / toast ---------- */
.modal-mask{position:fixed;inset:0;background:rgba(8,15,25,.55);backdrop-filter:blur(2px);
  display:flex;align-items:center;justify-content:center;z-index:200;padding:20px;}
.modal{background:var(--panel);color:var(--ink);border:1px solid var(--line);border-radius:18px;width:min(720px,100%);
  max-height:88vh;display:flex;flex-direction:column;box-shadow:var(--shadow-pop);}
.modal-h{padding:16px 20px;border-bottom:1px solid var(--line);display:flex;justify-content:space-between;align-items:center;}
.modal-h b{font-size:15.5px;}
.modal-b{padding:18px 20px;overflow:auto;}
.modal-f{padding:14px 20px;border-top:1px solid var(--line);display:flex;justify-content:flex-end;gap:10px;}
.x{cursor:pointer;color:var(--mut);font-size:20px;line-height:1;padding:4px;}
.toast-root{position:fixed;top:70px;right:20px;z-index:300;display:flex;flex-direction:column;gap:8px;}
.toast{background:#0f172a;color:#fff;padding:11px 16px;border-radius:10px;font-size:13px;box-shadow:0 10px 30px rgba(0,0,0,.3);
  animation:tin .2s ease;max-width:360px;}
.toast.ok{background:#14532d;} .toast.bad{background:#7f1d1d;} .toast.warn{background:#78350f;}
@keyframes tin{from{transform:translateX(30px);opacity:0}to{transform:none;opacity:1}}

/* ---------- 主题切换器 ---------- */
.theme-fab{position:fixed;right:18px;bottom:18px;z-index:180;width:44px;height:44px;border-radius:50%;
  border:1px solid var(--line);background:var(--panel);color:var(--ink);cursor:pointer;font-size:18px;
  box-shadow:var(--shadow-pop);display:flex;align-items:center;justify-content:center;transition:.15s;}
.theme-fab:hover{transform:scale(1.06);border-color:var(--brand);color:var(--brand-ink);}
.theme-panel{position:fixed;right:18px;bottom:72px;z-index:181;width:min(280px,calc(100vw - 36px));
  background:var(--panel);border:1px solid var(--line);border-radius:16px;padding:14px;
  box-shadow:var(--shadow-pop);display:none;max-height:min(70vh,420px);overflow:auto;}
.theme-panel.open{display:block;}
.theme-panel h4{font-size:13px;margin-bottom:10px;color:var(--mut);font-weight:600;}
.theme-list{display:grid;gap:8px;}
.theme-list .th{font-size:11px;color:var(--mut);font-weight:700;letter-spacing:.06em;margin-top:4px;}
.theme-opt{display:flex;align-items:center;gap:10px;border:1px solid var(--line);border-radius:12px;
  padding:10px 12px;cursor:pointer;transition:.12s;background:var(--panel);text-align:left;}
.theme-opt:hover{border-color:var(--brand);}
.theme-opt.on{border-color:var(--brand);box-shadow:0 0 0 3px var(--focus);}
.theme-opt .sw{width:36px;height:24px;border-radius:8px;flex:none;border:1px solid rgba(0,0,0,.08);position:relative;overflow:hidden;}
.theme-opt .sw:after{content:"";position:absolute;left:4px;top:4px;width:10px;height:16px;border-radius:4px;background:rgba(255,255,255,.85);}
.theme-opt .meta{min-width:0;}
.theme-opt .meta b{display:block;font-size:13.5px;}
.theme-opt .meta span{font-size:11.5px;color:var(--mut);}
/* L3：患者端不显示全局 FAB（mp-demo 内已有 🎨），避免盖住底部粘性按钮 */
body.mode-patient .theme-fab{display:none !important;}
body.mode-patient .theme-panel{right:12px;bottom:68px;}

/* ---------- phone / patient shell ---------- */
.phone-wrap{display:flex;flex-direction:column;align-items:center;gap:10px;padding:6px 0 20px;}
.p-screen{padding:14px 14px 20px;}
.p-nav{display:flex;align-items:center;gap:8px;padding:4px 0 12px;}
.p-nav .bk{cursor:pointer;font-size:18px;color:var(--brand);padding:2px 6px;}
.p-nav b{font-size:16px;}
.p-hero{background:var(--hero-grad);color:#fff;border-radius:var(--radius);padding:16px;margin-bottom:12px;
  box-shadow:0 10px 28px var(--brand-a12);}
.p-hero .hi{font-size:12px;opacity:.85;}
.p-hero .nm{font-size:19px;font-weight:800;margin:4px 0 8px;}
.p-hero .nm .tag{font-weight:400;background:rgba(255,255,255,.2);color:#fff;}
.p-hero .meta{display:flex;gap:14px;font-size:12px;opacity:.9;flex-wrap:wrap;}
.p-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:12px;}
.p-tile{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);cursor:pointer;
  transition:.15s;box-shadow:var(--shadow-card);
  display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;
  gap:8px;padding:10px 10px;min-height:56px;text-align:left;}
.p-tile:hover{border-color:var(--brand);transform:translateY(-1px);}
.p-tile .ic{width:34px;height:34px;border-radius:10px;background:var(--brand-soft);color:var(--brand-ink);
  display:flex;align-items:center;justify-content:center;font-size:15px;flex:none;line-height:1;}
.p-tile .tx{min-width:0;overflow:hidden;}
.p-tile .tx b{display:block;font-size:13px;font-weight:700;line-height:1.25;color:var(--ink);}
.p-tile .tx span{display:block;font-size:11px;color:var(--mut);line-height:1.3;margin-top:2px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.p-tile .arw{color:var(--mut);font-size:16px;font-weight:700;line-height:1;padding:0 2px;flex:none;}
.p-tile .bdg{min-width:20px;height:20px;padding:0 6px;border-radius:999px;background:var(--line);
  color:var(--mut);font-size:11px;font-weight:700;display:none;align-items:center;justify-content:center;flex:none;}
.p-tile .bdg.on{display:inline-flex;background:var(--bad);color:#fff;}
.p-tile.cs-entry{border-color:var(--brand);background:linear-gradient(135deg,var(--brand-soft),var(--panel));}
.p-tile.cs-entry .ic{background:var(--brand);color:#fff;}
.home-grid{gap:8px;}
.home-grid .p-tile{min-height:52px;padding:9px 10px;}
.p-card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:13px;margin-bottom:10px;
  box-shadow:var(--shadow-card);}
.p-card.unread{border-left:3px solid var(--brand);}
.p-card h4{font-size:13.5px;margin-bottom:8px;display:flex;justify-content:flex-start;align-items:flex-start;gap:8px;flex-wrap:wrap;line-height:1.45;}
.p-card h4 > .tag,.p-card h4 > .p-badge{flex:none;}
.p-card h4 > .grow{flex:1;min-width:0;overflow-wrap:anywhere;}
.p-card h4 > .end{margin-left:auto;}
.p-list-item{display:flex;gap:10px;padding:10px 0;border-bottom:1px solid var(--tbl-line);cursor:pointer;align-items:center;}
.p-list-item:last-child{border:0;}
.p-list-item>div{min-width:0;flex:1;overflow-wrap:anywhere;}
.p-list-item .ic{width:36px;height:36px;border-radius:10px;background:var(--brand-soft);color:var(--brand-ink);
  display:flex;align-items:center;justify-content:center;flex:none;font-size:15px;}
.p-list-item b{font-size:13.5px;display:block;}
.p-list-item span{font-size:11.5px;color:var(--mut);}
.p-list-item .p-badge,.p-badge{
  font-size:13px !important;font-weight:700 !important;line-height:1.3;padding:6px 12px !important;
  background:var(--bad-soft) !important;color:var(--bad) !important;
  border:1.5px solid var(--bad) !important;
  border-radius:999px;white-space:nowrap;flex:none;letter-spacing:.03em;
}
/* 未读用品牌色区分 */
.p-list-item .p-badge.end,.p-badge.end{
  background:var(--brand-soft) !important;color:var(--brand-ink) !important;
  border-color:var(--brand) !important;
}
.p-fab{position:sticky;bottom:0;display:flex;gap:8px;margin-top:12px;padding:8px 0 4px;background:var(--fab-fade);z-index:3;}
.p-actions{display:flex;gap:8px;margin-top:12px;}
.p-fab .btn,.p-actions .btn{flex:1;justify-content:center;padding:12px;min-width:0;}
/* doctor profile */
.doc-hero .nm{display:flex;flex-wrap:wrap;gap:6px;align-items:center;}
.doc-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px;}
.doc-actions .btn{flex:1 1 calc(50% - 4px);min-width:110px;padding:9px 8px;justify-content:center;}
.doc-quick{margin-top:0;margin-bottom:12px;}
.p-card.acc h4{cursor:pointer;user-select:none;align-items:center;gap:8px;}
.p-card.acc .acc-x{margin-left:auto;flex:none;width:22px;height:22px;border-radius:6px;background:var(--brand-soft);
  color:var(--brand-ink);display:inline-flex;align-items:center;justify-content:center;font-weight:700;font-size:14px;}
.p-card.acc .acc-b{display:none;margin-top:6px;}
.p-card.acc.open .acc-b{display:block;}
.p-toggle{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:10px 0;
  border-bottom:1px dashed var(--tbl-line);cursor:pointer;font-size:13.5px;}
.p-toggle:last-of-type{border-bottom:0;}
.p-toggle input{position:absolute;opacity:0;pointer-events:none;}
.p-toggle i{width:40px;height:22px;border-radius:99px;background:#cbd5e1;position:relative;flex:none;transition:.15s;}
.p-toggle i:after{content:"";position:absolute;left:2px;top:2px;width:18px;height:18px;border-radius:50%;background:#fff;
  box-shadow:0 1px 3px rgba(0,0,0,.2);transition:.15s;}
.p-toggle input:checked + i{background:var(--brand);}
.p-toggle input:checked + i:after{transform:translateX(18px);}
.p-toggle input:disabled + i{opacity:.45;}
html.theme-dark .p-toggle i{background:#334155;}
/* 客服助手 */
.cs-entry{border-color:var(--brand);background:linear-gradient(160deg,var(--brand-soft),var(--panel));}
.cs-screen{display:flex;flex-direction:column;min-height:100%;padding-bottom:12px;}
.cs-bar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:8px;font-size:12.5px;}
.cs-bar .grow{flex:1;}
.cs-top{margin-bottom:10px;}
.cs-hero{display:flex;gap:10px;align-items:flex-start;background:var(--panel);border:1px solid var(--line);
  border-radius:var(--radius);padding:12px;box-shadow:var(--shadow-card);margin-bottom:8px;}
.cs-hero-ic{width:44px;height:44px;border-radius:12px;background:var(--brand-soft);display:flex;align-items:center;
  justify-content:center;font-size:22px;flex:none;}
.cs-hero-tx{flex:1;min-width:0;}
.cs-hero-tx b{display:block;font-size:14.5px;}
.cs-hero-tx > span{display:block;font-size:12px;color:var(--mut);margin-top:2px;}
.cs-hero-tags{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px;}
.cs-caps{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;}
.cs-cap{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:8px 8px 7px;text-align:center;
  box-shadow:var(--shadow-card);}
.cs-cap .ci{font-size:16px;line-height:1;}
.cs-cap b{display:block;font-size:11.5px;margin-top:4px;}
.cs-cap span{display:block;font-size:10.5px;color:var(--mut);margin-top:1px;}
.cs-main{display:flex;flex-direction:column;flex:1 1 auto;min-height:200px;gap:8px;}
.cs-box{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);
  padding:10px;flex:1 1 auto;min-height:180px;max-height:min(42vh,380px);overflow:auto;box-shadow:var(--shadow-card);}
.cs-row{display:flex;gap:8px;margin-bottom:10px;align-items:flex-start;}
.cs-row.user{justify-content:flex-end;}
.cs-av{width:28px;height:28px;border-radius:50%;background:var(--brand-soft);color:var(--brand-ink);
  display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;flex:none;}
.cs-av.ag{background:var(--warn-soft);color:var(--warn);}
.cs-av.me{background:var(--brand);color:#fff;}
.cs-b{max-width:min(78%,520px);padding:9px 11px;border-radius:12px;font-size:13px;line-height:1.6;
  border:1px solid var(--line);background:var(--bg);}
.cs-b.bot{border-top-left-radius:4px;background:var(--brand-softer);border-color:var(--brand-soft);color:var(--ink);}
.cs-b.user{border-top-right-radius:4px;background:var(--brand);border-color:var(--brand);color:#fff;}
.cs-meta{font-size:10.5px;opacity:.7;margin-bottom:4px;}
.cs-tx{overflow-wrap:anywhere;white-space:pre-wrap;}
.cs-hint{margin-top:6px;font-size:11.5px;color:var(--mut);border-top:1px dashed var(--line);padding-top:6px;}
.cs-b.user .cs-hint{color:rgba(255,255,255,.85);border-top-color:rgba(255,255,255,.3);}
.cs-acts{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px;}
.cs-acts .btn{flex:0 1 auto;padding:5px 9px;font-size:12px;}
.cs-sys{text-align:center;font-size:11.5px;color:var(--mut);margin:8px 0;overflow-wrap:anywhere;}
.cs-b.typing{display:flex;gap:5px;align-items:center;min-height:34px;min-width:56px;}
.cs-b.typing i{width:6px;height:6px;border-radius:50%;background:var(--brand);opacity:.4;animation:csDot 1s infinite;}
.cs-b.typing i:nth-child(2){animation-delay:.15s}
.cs-b.typing i:nth-child(3){animation-delay:.3s}
@keyframes csDot{0%,80%,100%{transform:translateY(0);opacity:.35}40%{transform:translateY(-3px);opacity:1}}
.cs-quick{margin-top:10px;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);
  padding:10px 10px 9px;box-shadow:var(--shadow-card);}
.cs-quick-h{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:13px;font-weight:700;
  margin-bottom:8px;}
.cs-quick-h .mut{font-weight:400;}
.cs-chips{display:flex;flex-wrap:wrap;gap:6px;}
.cs-chips .chip{cursor:pointer;font-size:12.5px;}
.cs-chips .chip:hover{border-color:var(--brand);color:var(--brand-ink);}
.cs-faq-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px;}
.cs-faq{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:8px;align-items:center;
  border:1px solid var(--line);border-radius:10px;padding:9px 8px;cursor:pointer;background:var(--bg);transition:.15s;}
.cs-faq:hover{border-color:var(--brand);background:var(--brand-softer);}
.cs-faq .n{width:22px;height:22px;border-radius:7px;background:var(--brand-soft);color:var(--brand-ink);
  font-size:11px;font-weight:800;display:flex;align-items:center;justify-content:center;flex:none;}
.cs-faq b{display:block;font-size:12.5px;line-height:1.3;}
.cs-faq span:not(.n):not(.ar){display:block;font-size:10.5px;color:var(--mut);margin-top:2px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.cs-faq .ar{color:var(--mut);font-size:15px;font-weight:700;flex:none;}
.cs-areas{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px;}
.cs-area{border:1px dashed var(--line);border-radius:9px;padding:7px 4px;text-align:center;font-size:12px;
  font-weight:700;cursor:pointer;background:var(--bg);transition:.15s;}
.cs-area span{display:block;font-size:10px;font-weight:400;color:var(--mut);margin-top:2px;}
.cs-area:hover{border-style:solid;border-color:var(--brand);color:var(--brand-ink);}
.cs-agent-info .p-list-item{padding:8px 0;}
.cs-input{display:flex;gap:8px;align-items:stretch;flex:none;}
.cs-input input{flex:1;min-width:0;border:1px solid var(--line);border-radius:10px;padding:10px 12px;
  font-size:16px;background:var(--panel);color:var(--ink);}
.cs-input input:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px var(--focus);}
.cs-input .btn{padding:10px 16px;}
.timeline{position:relative;padding-left:18px;}
.timeline:before{content:"";position:absolute;left:5px;top:4px;bottom:4px;width:2px;background:var(--line);}
.tl-item{position:relative;margin-bottom:14px;}
.tl-item:before{content:"";position:absolute;left:-18px;top:4px;width:10px;height:10px;border-radius:50%;
  background:var(--brand2);border:2px solid var(--panel);box-shadow:0 0 0 3px var(--brand-a12);}
.tl-item .dt{font-size:11.5px;color:var(--mut);}
.tl-item .tt{font-size:13.5px;font-weight:700;}
.tl-item .ds{font-size:12.5px;color:var(--mut);}
.q-prog{position:sticky;top:0;background:var(--bg);padding:8px 0;z-index:2;}
.q-item{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:13px;margin-bottom:10px;
  box-shadow:var(--shadow-card);}
.q-item .qt{font-size:13.5px;font-weight:600;margin-bottom:9px;}
.q-item .qt .req{color:var(--bad);}
.q-err{color:var(--bad);font-size:11.5px;margin-top:6px;}
.q-err:empty{display:none;margin-top:0;}
.q-free{width:100%;border:1px solid var(--line-2);border-radius:8px;padding:9px;font-size:13.5px;font-family:inherit;
  background:var(--panel);color:var(--ink);}
.q-free:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px var(--focus);}

/* qr mock */
.qr{width:160px;height:160px;background:
  repeating-conic-gradient(var(--ink) 0 25%, #fff 0 50%) 0 0/20px 20px;
  border:8px solid var(--panel);outline:1px solid var(--line);border-radius:8px;margin:8px auto;}
.code-box{display:flex;gap:8px;justify-content:center;margin:10px 0;}
.code-box input{width:44px;height:48px;text-align:center;font-size:20px;border:1px solid var(--line);border-radius:8px;
  background:var(--panel);color:var(--ink);}

/* dict / audit */
.dict-code{background:var(--bg-2);padding:2px 6px;border-radius:6px;font-family:Consolas,monospace;font-size:12px;}
.audit-line{display:flex;gap:10px;padding:8px 0;border-bottom:1px dashed var(--line);font-size:12.5px;}
.audit-line .t{color:var(--mut);width:150px;flex:none;font-variant-numeric:tabular-nums;white-space:nowrap;}
.meter{display:flex;justify-content:space-between;gap:8px;flex-wrap:wrap;font-size:12.5px;margin:6px 0 3px;}
.meter .lbl{color:var(--mut);min-width:0;overflow-wrap:anywhere;}
.meter b{flex:none;}
.badge-dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:6px;}
.dot-g{background:var(--ok);} .dot-a{background:var(--warn);} .dot-r{background:var(--bad);}

/* ---------- 患者端：全屏小程序 ---------- */
body.mode-patient { overflow: hidden; }
body.mode-patient .topbar,
body.mode-patient .sidebar { display: none !important; }
body.mode-patient .layout { height: auto; min-height: 0; flex: 1 1 auto; }
body.mode-patient .view { padding: 0 !important; overflow: hidden !important; background: var(--bg-2);
  display: flex; flex-direction: column; min-height: 0; }
body.mode-patient #app, body.mode-patient .app { height: 100vh; overflow: hidden; }
body.mode-patient .mp-shell { flex: 1 1 auto; min-height: 0; width: 100%; height: auto; }

.mp-shell {
  height: 100%;
  max-width: 480px;
  margin: 0 auto;
  display: flex;
  flex-direction: column;
  background: var(--bg);
  position: relative;
  box-shadow: 0 0 0 1px rgba(0,0,0,.06), 0 12px 48px rgba(0,0,0,.18);
}
.mp-demo {
  flex: none;
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: 8px;
  padding: 8px 10px;
  background: var(--mp-demo-grad);
  color: #e8eef5;
  font-size: 12px;
}
.mp-demo-t { opacity: .9; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.mp-demo-a { display: flex; gap: 6px; flex: none; }
.mp-demo .btn.sm { padding: 4px 8px; font-size: 11.5px; }
.mp-demo .btn.ghost { background: transparent; border-color: rgba(255, 255, 255, .3); color: #fff; box-shadow:none; }
.mp-demo .btn.ghost:hover{border-color:#fff;color:#fff;filter:none;}
.mp-body { flex: 1; min-height: 0; overflow: auto; background: var(--bg); }
.mp-tab {
  flex: none;
  height: 56px;
  background: var(--panel);
  border-top: 1px solid var(--line);
  display: flex;
  align-items: center;
  justify-content: space-around;
  padding-bottom: env(safe-area-inset-bottom, 0px);
  box-sizing: content-box;
}
.mp-tab .ti {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 2px;
  font-size: 11px;
  color: var(--mut);
  cursor: pointer;
  padding: 6px 12px;
  position: relative;
  user-select: none;
}
.mp-tab .ti.on { color: var(--brand); font-weight: 700; }
.mp-tab .ti .ic { font-size: 17px; }
.mp-tab .ti .dot {
  position: absolute;
  top: 2px;
  right: 4px;
  background: var(--bad);
  color: #fff;
  font-size: 9px;
  border-radius: 10px;
  padding: 0 4px;
}

@media (max-width: 520px) {
  .mp-shell { max-width: none; box-shadow: none; }
  .mp-demo-t { display: none; }
  .mp-demo { justify-content: flex-end; }
}

/* ---------- 窄屏：医生/管理端防挤压 ---------- */
@media (max-width: 900px) {
  .sidebar {
    position: fixed;
    left: 0;
    top: 56px;
    bottom: 0;
    z-index: 40;
    transform: translateX(-100%);
    transition: transform .2s ease;
    box-shadow: 8px 0 32px rgba(0, 0, 0, .25);
    width: min(240px, 78vw);
  }
  .sidebar.open { transform: none; }
  .nav-toggle { display: inline-flex; }
  .topbar { z-index: 50; }
}

@media (max-width: 768px) {
  .topbar {
    height: auto;
    min-height: 52px;
    padding: 8px 10px;
    gap: 8px;
    flex-wrap: wrap;
    align-items: center;
  }
  .topbar-left { gap: 8px; flex: 1 1 auto; min-width: 0; }
  .titles { flex: 1; min-width: 0; }
  .titles b { max-width: calc(100vw - 280px); font-size: 13px; }
  .titles span { display: none; }
  .clock { display: none; }
  .topbar-right { gap: 6px; flex: none; }
  .role-switch, .theme-switch { max-width: 96px; padding: 6px 4px; font-size: 12px; }
  .topbar .btn { padding: 6px 10px; font-size: 12.5px; }

  .view { padding: 12px; }
  .g2 { grid-template-columns: minmax(0, 1fr) !important; }
  .g3, .g4 { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; }
  .form.row2 { grid-template-columns: minmax(0, 1fr) !important; }

  .stat { column-gap: 8px; padding: 12px; }
  .stat .v { font-size: 22px; }

  .kv, dl.kv {
    grid-template-columns: minmax(0, 1fr) !important;
    gap: 2px 0 !important;
  }
  .kv dt { font-size: 12px; margin-top: 6px; }
  .kv dt:first-child { margin-top: 0; }
  .kv dd { font-size: 13px; margin: 0 0 2px; overflow-wrap: anywhere; }

  .audit-line { flex-direction: column; gap: 2px; }
  .audit-line .t { width: auto; flex: none; }

  .page-h h2 { font-size: 17px; }
  .card { padding: 12px; }

  .right { align-items: flex-start; }
  .right > div, .right > span { min-width: 0; overflow-wrap: anywhere; }

  table.tbl { min-width: 560px; }
  .tbl th, .tbl td { padding: 7px 8px; }
  .tbl td.small, .tbl td .small { overflow-wrap: anywhere; }
  .tbl-wrap { overflow-x: auto; -webkit-overflow-scrolling: touch; max-width: 100%; }
  table.tbl.tbl-pts { min-width: 680px; }
  .tbl.tbl-pts .cell-gb { min-width: 6.8em; }
  .tbl th:nth-child(4) { text-align: center; }

  .fld input, .fld select, .fld textarea, .q-free, .qfree,
  .filter-row input, .filter-row select,
  .role-switch, .theme-switch, .chip, .seg .opt,
  .page-h > input {
    font-size: 16px;
  }
  .btn { font-size: 13px; }

  .modal-mask { padding: 0; align-items: flex-end; }
  .modal { width: 100%; max-height: 92vh; border-radius: 16px 16px 0 0; }
  .modal-f { flex-wrap: wrap; }
  .modal-f .btn { flex: 1; justify-content: center; }

  .toast-root { top: 56px; left: 10px; right: 10px; }
  .toast { max-width: none; }

  .tabs { gap: 0; }
  .tab { padding: 8px 10px; font-size: 12.5px; }

  .mp-demo-a { flex-wrap: wrap; justify-content: flex-end; }

  .filter-row { flex-wrap: wrap; min-width: 0; max-width: none !important; }
  .filter-row input, .filter-row select { min-width: 0; flex: 1 1 140px; }
}

@media (max-width: 420px) {
  .p-grid { grid-template-columns: 1fr 1fr; gap: 8px; }
  .p-tile { padding: 9px 8px; min-height: 50px; gap: 6px; }
  .p-tile .ic { width: 30px; height: 30px; font-size: 14px; border-radius: 9px; }
  .p-tile .tx b { font-size: 12.5px; }
  .p-tile .tx span { font-size: 10.5px; }
  .p-hero { padding: 14px; }
  .cs-faq-grid { grid-template-columns: 1fr; }
  .cs-areas { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .cs-caps { gap: 6px; }
  .cs-hero { padding: 10px; }
  .cs-box { max-height: min(36vh, 300px); min-height: 160px; }
  .stat { padding: 10px; }
  .stat .v { font-size: 22px; }
  .g3, .g4 { gap: 8px !important; }
  .stat .l { font-size: 12px; }
  .stat .d { font-size: 11px; }
}

/* ========== 多维统计可视化 ========== */
.viz-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin-top:10px;}
.viz-grid.g3{grid-template-columns:repeat(3,minmax(0,1fr));}
.viz-box{background:var(--bg);border:1px solid var(--line);border-radius:12px;padding:12px;min-width:0;}
.viz-box.viz-span{grid-column:1 / -1;}
.viz-t{font-size:12.5px;font-weight:700;color:var(--brand-ink);margin-bottom:8px;}
.viz-hero{display:flex;justify-content:center;padding:6px 0 2px;}
.viz-nums{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px;margin-top:8px;text-align:center;}
.viz-nums b{display:block;font-size:16px;font-weight:800;color:var(--brand-ink);}
.viz-nums span{display:block;font-size:10.5px;color:var(--mut);margin-top:2px;}
.viz-row{display:grid;grid-template-columns:minmax(56px,auto) 1fr auto;gap:8px;align-items:center;margin:6px 0;font-size:12px;}
.viz-l{color:var(--mut);min-width:0;overflow-wrap:anywhere;}
.viz-track{height:9px;background:var(--line);border-radius:99px;overflow:hidden;min-width:0;}
.viz-track i{display:block;height:100%;background:var(--vc,linear-gradient(90deg,var(--viz-1),var(--viz-1b)));border-radius:99px;min-width:2px;}
.viz-v{font-variant-numeric:tabular-nums;color:var(--ink);min-width:2.4em;text-align:right;}
.viz-cols{display:flex;align-items:flex-end;gap:8px;min-height:96px;padding-top:4px;}
.viz-col{flex:1;min-width:0;text-align:center;display:flex;flex-direction:column;align-items:center;gap:4px;}
.viz-col > b{font-size:12px;color:var(--brand-ink);}
.viz-vcol{width:100%;height:56px;display:flex;align-items:flex-end;justify-content:center;background:linear-gradient(180deg,transparent, var(--brand-softer));border-radius:6px;}
.viz-vcol i{display:block;width:70%;min-width:8px;background:var(--vc,linear-gradient(180deg,var(--viz-1b),var(--viz-1)));border-radius:4px 4px 0 0;min-height:3px;}
.viz-col > span{font-size:10.5px;color:var(--mut);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;}
.viz-split{display:flex;height:22px;border-radius:99px;overflow:hidden;border:1px solid var(--line);}
.viz-split i{display:flex;align-items:center;justify-content:center;font-style:normal;font-size:10.5px;font-weight:700;color:#fff;min-width:0;overflow:hidden;white-space:nowrap;}
.viz-split .s1{background:linear-gradient(90deg,var(--viz-1),var(--viz-5));}
.viz-split .s2{background:linear-gradient(90deg,var(--viz-2),var(--viz-4));}
.viz-split-leg{display:flex;justify-content:space-between;font-size:11px;color:var(--mut);margin-top:4px;}
.viz-donut{--p:0;width:92px;height:92px;border-radius:50%;
  background:conic-gradient(from -90deg,
    var(--viz-1) 0%,
    var(--viz-3) calc(var(--p) * 0.4%),
    var(--viz-4) calc(var(--p) * 0.7%),
    var(--viz-2) calc(var(--p) * 1%),
    var(--line) calc(var(--p) * 1%),
    var(--line) 100%);
  display:flex;align-items:center;justify-content:center;}
.viz-donut-in{width:66px;height:66px;border-radius:50%;background:var(--panel);display:flex;flex-direction:column;
  align-items:center;justify-content:center;border:1px solid var(--line);}
.viz-donut-in b{font-size:16px;font-weight:800;color:var(--brand-ink);line-height:1;}
.viz-donut-in span{font-size:9.5px;color:var(--mut);margin-top:2px;text-align:center;max-width:56px;}
.viz-hm{overflow-x:auto;}
.viz-hm-h,.viz-hm-r{display:grid;grid-template-columns:minmax(56px,auto) repeat(5,minmax(42px,1fr));gap:4px;align-items:center;margin-bottom:4px;font-size:11px;}
.viz-hm-h span{color:var(--mut);text-align:center;font-weight:600;}
.viz-hm-h span:first-child,.viz-hm-r span:first-child{text-align:left;color:var(--mut);}
.viz-hm-r span:not(:first-child){text-align:center;padding:7px 2px;border-radius:6px;font-variant-numeric:tabular-nums;font-weight:700;}
.viz-hm-r span.t0,.viz-legend .t0{background:var(--line);color:var(--mut);}
.viz-hm-r span.t1,.viz-legend .t1{background:#e0f2fe;color:#0369a1;}
.viz-hm-r span.t2,.viz-legend .t2{background:#a5f3fc;color:#0e7490;}
.viz-hm-r span.t3,.viz-legend .t3{background:linear-gradient(135deg,var(--viz-1),var(--viz-5));color:#fff;}
.viz-hm-r span.t4,.viz-legend .t4{background:linear-gradient(135deg,var(--viz-3),var(--viz-4));color:#fff;}
html.theme-dark .viz-hm-r span.t1{background:#0c4a6e;color:#7dd3fc;}
html.theme-dark .viz-hm-r span.t2{background:#155e75;color:#67e8f9;}
.viz-legend{display:flex;gap:8px;margin-top:8px;font-size:11px;color:var(--mut);}
.viz-legend span{padding:2px 8px;border-radius:99px;}
.viz-list{margin:0;padding-left:16px;font-size:12.5px;line-height:1.75;color:var(--ink);}
.viz-list li{margin-bottom:2px;}
.viz-cmp{display:flex;gap:8px;align-items:center;padding:8px 6px;border-bottom:1px dashed var(--line);cursor:pointer;font-size:12.5px;}
.viz-cmp:last-child{border:0;}
.viz-cmp:hover{background:var(--brand-softer);}
.viz-cmp b{min-width:4.5em;}
.viz-cmp span{color:var(--mut);flex:1;}
.viz-cmp .tag{flex:none;}
@media (max-width: 1100px){
  .viz-grid.g3{grid-template-columns:repeat(2,minmax(0,1fr));}
  .viz-grid.g3 > .viz-span{grid-column:1 / -1;}
}
@media (max-width: 768px){
  .viz-grid.g3{grid-template-columns:1fr;}
  .viz-grid{grid-template-columns:1fr !important;}
  .viz-nums{grid-template-columns:repeat(3,minmax(0,1fr));}
}

/* ========== 患者端·关怀版本 ========== */
html.care, html.care body{font-size:17px;}
html.care .mp-shell{font-size:17px;}
html.care .p-screen{padding:16px 16px 24px;}
html.care .p-hero .nm{font-size:24px;margin:6px 0 10px;}
html.care .p-hero .hi{font-size:15px;}
html.care .p-hero .meta{font-size:14px;gap:10px 16px;}
html.care .p-card{padding:16px;border-radius:16px;margin-bottom:14px;}
html.care .p-card h4{font-size:17px;margin-bottom:12px;}
html.care .p-list-item{padding:14px 0;gap:14px;}
html.care .p-list-item .ic{width:48px;height:48px;font-size:22px;border-radius:14px;}
html.care .p-list-item b{font-size:17.5px;}
html.care .p-list-item span{font-size:14.5px;color:var(--mut);}
html.care .p-tile{min-height:76px;padding:14px 12px;gap:10px;border-radius:14px;}
html.care .p-tile .ic{width:44px;height:44px;font-size:20px;border-radius:12px;}
html.care .p-tile .tx b{font-size:16.5px;}
html.care .p-tile .tx span{font-size:13.5px;white-space:normal;}
html.care .p-tile .arw{font-size:20px;padding:0 4px;}
html.care .p-tile .bdg{height:26px;min-width:26px;font-size:14px;padding:0 8px;}
html.care .p-grid{gap:12px;margin-bottom:14px;}
html.care .btn{padding:13px 20px;font-size:16.5px;border-radius:12px;min-height:48px;}
html.care .btn.sm{padding:10px 14px;font-size:14.5px;}
html.care .btn.ghost{background:var(--panel);}
html.care .tag{font-size:13.5px;padding:4px 12px;}
html.care .notice{font-size:14.5px;line-height:1.7;padding:12px 14px;border-radius:12px;}
html.care .p-nav b{font-size:19px;}
html.care .p-nav .bk{font-size:22px;}
html.care .mut.small,html.care .small{font-size:13.5px;}
html.care .p-badge{font-size:15px !important;padding:7px 14px !important;}
html.care .mp-tab{height:64px;}
html.care .mp-tab .ti{font-size:14px;font-weight:600;gap:3px;padding:8px 10px;}
html.care .mp-tab .ti .ic{font-size:22px;}
html.care .p-fab{gap:10px;padding:10px;}
html.care .p-fab .btn{flex:1;justify-content:center;}
/* 关怀首页：单列大磁贴 */
html.care .care-grid{grid-template-columns:1fr 1fr;}
html.care .care-tile{min-height:88px;}
html.care .care-card .p-list-item{border-bottom-color:var(--line);}
html.care .care-line{font-size:17px;line-height:1.6;margin-top:4px;}
html.care .cs-b{font-size:15.5px;max-width:88%;padding:12px 14px;}
html.care .cs-box{font-size:15.5px;}
html.care .cs-input input{font-size:17px;padding:14px 14px;}
html.care .cs-hero-tx b{font-size:17px;}
html.care .cs-hero-tx > span{font-size:14px;}
html.care .q-item{padding:16px;border-radius:14px;}
html.care .q-item .qt{font-size:16px;margin-bottom:12px;}
html.care .q-free{font-size:17px;padding:12px;}
html.care .chip{font-size:14.5px;padding:8px 14px;}
@media (max-width: 420px){
  html.care .care-grid{grid-template-columns:1fr;}
}
