/* ====== 小清新 + 严谨风格 - 德阳市第六人民医院 健康促进管理系统 ====== */
/* 设计理念：薄荷青主色 + 纯白卡片 + 大间距清晰层级 + 暖色警示突出重要内容 */
*{margin:0;padding:0;box-sizing:border-box}
:root{
  --p:#5b9a8b;--p2:#4a8b7c;--p3:#3d7567;--p-light:#e8f5f0;
  --b:#4a90b8;--b2:#3a7da3;--b-light:#e6f2f9;
  --g:#6aaf6a;--g2:#569456;--g-light:#edf7ed;
  --w:#e8a440;--w2:#d09030;--w-light:#fef8ee;
  --d:#e07070;--d2:#cc5c5c;--d-light:#fef0f0;
  --t1:#2c3e50;--t2:#4a5568;--t3:#718096;--t4:#a0aec0;
  --bg:#f4f7fa;--bg2:#eef1f6;
  --white:#fff;--border:#e2e8f0;--border2:#d0d7e2;
  --shadow:0 1px 3px rgba(0,0,0,.06),0 1px 2px rgba(0,0,0,.04);
  --shadow-md:0 4px 12px rgba(0,0,0,.07),0 2px 4px rgba(0,0,0,.04);
  --radius:10px;--radius-sm:6px;
}
body{font-family:"Microsoft YaHei","PingFang SC","Helvetica Neue",sans-serif;background:var(--bg);color:var(--t1);min-height:100vh;line-height:1.6;font-size:14px}
.header{background:var(--white);color:var(--t1);padding:0 28px;height:56px;display:flex;align-items:center;justify-content:space-between;position:fixed;top:0;left:0;right:0;z-index:100;border-bottom:1px solid var(--border);box-shadow:0 1px 4px rgba(0,0,0,.04)}
.header h1{font-size:17px;font-weight:700;color:var(--p2);letter-spacing:.5px;display:flex;align-items:center;gap:8px}
.header h1::before{content:'🏥';font-size:20px}
.header-right{display:flex;align-items:center;gap:16px}
.header-right span{font-size:13px;color:var(--t2);font-weight:500}
.header-right button{background:var(--white);border:1px solid var(--border2);color:var(--t2);padding:6px 14px;border-radius:var(--radius-sm);cursor:pointer;font-size:13px;transition:all .2s;font-family:inherit}
.header-right button:hover{background:var(--p-light);border-color:var(--p);color:var(--p2)}
.sidebar{position:fixed;top:56px;left:0;bottom:0;width:212px;background:var(--white);border-right:1px solid var(--border);overflow-y:auto;z-index:99;box-shadow:1px 0 6px rgba(0,0,0,.03)}
.sidebar-resize{position:absolute;top:0;right:0;bottom:0;width:5px;cursor:col-resize;z-index:10;background:transparent;transition:background .2s}
.sidebar-resize:hover,.sidebar-resize:active{background:var(--p);opacity:.5}
body.sidebar-resizing{user-select:none;cursor:col-resize}
body.sidebar-resizing .sidebar{transition:none}
body.sidebar-resizing .main{transition:none}
.sidebar ul{list-style:none;padding:10px 0}
.sidebar li{display:flex;align-items:center;gap:9px;padding:10px 18px;cursor:pointer;font-size:13.5px;color:var(--t2);transition:all .18s;position:relative;border-left:3px solid transparent;margin:0 0 2px 0}
.sidebar li:hover{background:var(--p-light);color:var(--p2);border-left-color:var(--p)}
.sidebar li.active{background:var(--p-light);color:var(--p3);font-weight:600;border-left:3px solid var(--p)}
.main{margin-left:212px;margin-top:56px;padding:28px;min-height:calc(100vh - 56px)}
.card{background:var(--white);border-radius:var(--radius);border:1px solid var(--border);padding:24px;margin-bottom:20px;box-shadow:var(--shadow)}
.card h3{font-size:16px;margin-bottom:18px;color:var(--t1);border-bottom:2px solid var(--p-light);padding-bottom:11px;display:flex;align-items:center;gap:8px;font-weight:700}
.card h3::before{content:'';display:inline-block;width:4px;height:18px;background:var(--p);border-radius:2px}
.btn{display:inline-flex;align-items:center;gap:5px;padding:8px 17px;border:none;border-radius:var(--radius-sm);cursor:pointer;font-size:13px;font-weight:600;transition:all .2s;font-family:inherit;line-height:1.4}
.btn-primary{background:var(--p);color:#fff}.btn-primary:hover{background:var(--p2);box-shadow:var(--shadow-md)}
.btn-success{background:var(--g);color:#fff}.btn-success:hover{background:var(--g2);box-shadow:var(--shadow-md)}
.btn-warning{background:var(--w);color:#fff}.btn-warning:hover{background:var(--w2);box-shadow:var(--shadow-md)}
.btn-danger{background:var(--d);color:#fff}.btn-danger:hover{background:var(--d2);box-shadow:var(--shadow-md)}
.btn-outline{background:var(--white);color:var(--p);border:1px solid var(--p)}.btn-outline:hover{background:var(--p-light);border-color:var(--p2)}
input,select,textarea{width:100%;padding:9px 12px;border:1px solid var(--border2);border-radius:var(--radius-sm);font-size:14px;font-family:inherit;background:var(--white);color:var(--t1);transition:all .2s}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--p);box-shadow:0 0 0 3px rgba(91,154,139,.12)}
select option{background:var(--white);color:var(--t1)}
table{width:100%;border-collapse:collapse;font-size:13px}
th,td{padding:10px 14px;text-align:left;border-bottom:1px solid var(--border)}
th{background:var(--bg2);font-weight:700;color:var(--t2);font-size:12.5px;text-transform:uppercase;letter-spacing:.4px;position:sticky;top:0}
tr:hover{background:var(--p-light)}
tr:nth-child(even){background:rgba(244,247,250,.5)}
tr:nth-child(even):hover{background:var(--p-light)}
.badge{display:inline-block;padding:2px 10px;border-radius:12px;font-size:11px;font-weight:600}
.badge-blue{background:var(--b-light);color:var(--b2)}.badge-green{background:var(--g-light);color:var(--g2)}
.badge-red{background:var(--d-light);color:var(--d2)}.badge-yellow{background:var(--w-light);color:var(--w2)}
.badge-purple{background:#f3edfc;color:#7c5cbf}.badge-gray{background:var(--bg2);color:var(--t3)}
.modal-overlay{display:none;position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.35);z-index:200;justify-content:center;align-items:center}
.modal-overlay.active{display:flex}
.modal{background:var(--white);border-radius:var(--radius);width:92%;max-width:720px;max-height:90vh;overflow-y:auto;box-shadow:0 16px 48px rgba(0,0,0,.15);border:1px solid var(--border)}
.modal-header{display:flex;justify-content:space-between;align-items:center;padding:16px 22px;border-bottom:1px solid var(--border);position:sticky;top:0;background:var(--white);z-index:1}
.modal-header h3{font-size:17px;color:var(--t1);border:none;padding:0;margin:0;font-weight:700}
.modal-header h3::before{display:none}
.modal-body{padding:22px}.modal-footer{padding:14px 22px;border-top:1px solid var(--border);display:flex;justify-content:flex-end;gap:10px}
.form-row{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-bottom:14px}
.form-row.three{grid-template-columns:1fr 1fr 1fr}
.form-group{margin-bottom:15px}.form-group label{display:block;font-size:13px;color:var(--t2);margin-bottom:5px;font-weight:600}
.form-group small{display:block;font-size:11px;color:var(--t3);margin-top:3px}
.stats-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:14px;margin-bottom:20px}
.stat-card{background:var(--white);border:1px solid var(--border);border-radius:var(--radius);padding:20px;text-align:center;transition:all .25s;position:relative;overflow:hidden;box-shadow:var(--shadow)}
.stat-card::before{content:'';position:absolute;top:0;left:0;right:0;height:3px;background:var(--p)}
.stat-card:nth-child(2)::before{background:var(--b)}
.stat-card:nth-child(3)::before{background:var(--g)}
.stat-card:nth-child(4)::before{background:var(--w)}
.stat-card:nth-child(5)::before{background:var(--d)}
.stat-card:hover{box-shadow:var(--shadow-md);transform:translateY(-2px);border-color:var(--p)}
.stat-clickable{cursor:pointer}.stat-clickable:hover{box-shadow:var(--shadow-md);transform:translateY(-3px);border-color:var(--p);background:var(--p-light)}
.stat-clickable:active{transform:translateY(-1px)}
.stat-card .num{font-size:30px;font-weight:800;color:var(--t1);line-height:1.2}
.stat-card .label{font-size:12px;color:var(--t3);margin-top:4px;font-weight:500}
.filter-bar{display:flex;gap:10px;margin-bottom:16px;flex-wrap:wrap;align-items:center}
.filter-bar select,.filter-bar input{padding:8px 11px;font-size:13px;width:auto}
.filter-bar .search-input{width:220px}
.tabs{display:flex;border-bottom:2px solid var(--border);margin-bottom:18px}
.tabs .tab{padding:10px 22px;cursor:pointer;font-size:14px;color:var(--t3);border-bottom:2px solid transparent;margin-bottom:-2px;transition:all .2s;font-weight:500}
.tabs .tab:hover{color:var(--p)}
.tabs .tab.active{color:var(--p2);border-bottom-color:var(--p);font-weight:700}
.hidden{display:none!important}
.task-badge{position:absolute;top:-7px;right:-11px;background:var(--d);color:#fff;font-size:10px;min-width:18px;height:18px;display:flex;align-items:center;justify-content:center;border-radius:9px;padding:0 5px;font-weight:700;box-shadow:0 2px 6px rgba(224,112,112,.3)}
.empty-tip{text-align:center;padding:48px;color:var(--t3);font-size:14px}
.empty-tip .icon{font-size:48px;margin-bottom:14px;opacity:.5}
.alert-item{padding:12px 16px;background:var(--w-light);border-left:4px solid var(--w);margin-bottom:8px;border-radius:0 var(--radius-sm) var(--radius-sm) 0;font-size:13px;color:var(--w2);font-weight:500}
.alert-item.overdue{background:var(--d-light);border-left-color:var(--d);color:var(--d2)}
.perm-select{display:flex;flex-direction:column;gap:7px}
.perm-select label{display:flex;align-items:center;gap:7px;font-size:13px;cursor:pointer;color:var(--t2)}
.login-box{display:flex;justify-content:center;align-items:center;height:100vh;background:linear-gradient(160deg,#e8f5f0 0%,#f4f7fa 30%,#e6f2f9 70%,#f8fafc 100%);position:relative}
.login-box::before{content:'';position:absolute;inset:0;background:radial-gradient(circle at 25% 35%,rgba(91,154,139,.06) 0%,transparent 50%),radial-gradient(circle at 75% 60%,rgba(74,144,184,.05) 0%,transparent 50%);pointer-events:none}
.login-form{background:var(--white);border-radius:14px;padding:44px;width:400px;box-shadow:0 8px 32px rgba(0,0,0,.08);border:1px solid var(--border);position:relative;z-index:1}
.login-form h2{text-align:center;color:var(--p2);margin-bottom:28px;font-size:22px;font-weight:700;letter-spacing:.5px}
.login-form .form-group{margin-bottom:16px}.login-form .btn{width:100%;justify-content:center;padding:11px;font-size:14px}
.team-card{background:var(--p-light);border-radius:var(--radius-sm);padding:14px;margin-bottom:10px;border:1px solid rgba(91,154,139,.15)}
.team-card h4{font-size:14px;color:var(--p2);margin-bottom:7px;font-weight:700}
.team-card .member{font-size:13px;padding:3px 0;color:var(--t2)}
/* 内部人员通讯录树状视图 */
.st-node{position:relative}.st-node-bar{display:flex;align-items:center;padding:7px 0;border-left:2px solid var(--border);margin-left:14px;padding-left:16px}
.st-node:first-child>.st-node-bar{border-left-color:transparent;margin-left:0;padding-left:0}
.st-children{margin-left:28px}.st-icon{font-size:14px;margin-right:7px;min-width:20px;text-align:center}
.st-crown{font-size:18px}.st-medal{font-size:16px}.st-dot{font-size:8px;color:var(--t4)}
.st-name{font-weight:700;font-size:14px;color:var(--t1);margin-right:8px}
.st-role{font-size:11px;padding:2px 9px;border-radius:12px;margin-right:8px;font-weight:600}
.st-badge-captain{background:#fff3e0;color:#e67e00;border:1px solid #ffe0b2}
.st-badge-vice{background:#edf7ed;color:#4a8b3a;border:1px solid #c8e6c9}
.st-info{font-size:12px;color:var(--t3)}
/* 回访病种表格 */
.fup-section{margin:10px 0;padding:14px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg);max-height:50vh;overflow-y:auto}
.fup-section-title{font-size:13px;font-weight:700;color:var(--p2);margin-bottom:12px;padding-bottom:9px;border-bottom:2px solid var(--p-light);position:sticky;top:0;background:var(--bg);z-index:1}
.fup-section .form-group{margin-bottom:11px}
.fup-section .form-group label{font-size:12px;color:var(--t2)}
.fup-table{width:100%;border-collapse:collapse;font-size:12px}
.fup-table th{background:var(--bg2);font-weight:700;color:var(--t2);padding:9px 7px;border-bottom:2px solid var(--border);font-size:12px}
.fup-table td{padding:8px 7px;border-bottom:1px solid var(--border);vertical-align:middle}
.fup-main-row:hover{background:var(--p-light)}
.fup-row-expanded{background:var(--b-light)!important}
.fup-expand-icon{display:inline-block;width:16px;text-align:center;font-size:10px;color:var(--t3);transition:transform .25s}
.fup-detail-row td{padding:0!important;border-bottom:2px solid var(--p)}
.fup-detail-card{background:var(--bg);padding:15px 20px;margin:4px 0;border-radius:var(--radius-sm);border:1px solid var(--border)}
.fup-detail-title{font-size:13px;font-weight:700;color:var(--t1);margin-bottom:12px;padding-bottom:7px;border-bottom:1px solid var(--border)}
.fup-detail-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:8px 18px}
.fup-detail-item{font-size:12px;padding:5px 0}
.fup-detail-label{color:var(--t3);margin-right:4px}
.fup-detail-value{color:var(--t1);font-weight:600}
.fup-detail-empty{color:var(--t4);font-style:italic}
.fup-detail-remark{font-size:12px;color:var(--t2);margin-top:11px;padding-top:9px;border-top:1px dashed var(--border2)}
.btn-sm{padding:4px 9px!important;font-size:11px!important;border-radius:4px!important}
.overdue-row{background:var(--d-light)!important}
.msg-preview{max-height:200px;overflow-y:auto;border:1px solid var(--border);padding:12px;border-radius:var(--radius-sm);background:var(--bg);font-size:13px;white-space:pre-wrap;color:var(--t2)}
/* 通讯录树形视图 */
.ct-view-toggle{display:flex;gap:5px;margin-bottom:14px}
.ct-view-toggle button{padding:7px 16px;border:1px solid var(--border2);background:var(--white);border-radius:var(--radius-sm);cursor:pointer;font-size:13px;color:var(--t2);transition:all .2s}
.ct-view-toggle button:hover{border-color:var(--p);color:var(--p2)}
.ct-view-toggle button.active{background:var(--p);color:#fff;border-color:var(--p)}
.ct-tree{font-size:13px}
.ct-tree-node{margin-bottom:2px}
.ct-tree-header{display:flex;align-items:center;padding:8px 12px;border-radius:var(--radius-sm);cursor:pointer;gap:8px;transition:all .18s}
.ct-tree-header:hover{background:var(--p-light)}
.ct-tree-header.root-node{background:var(--p-light);font-weight:700;color:var(--p2)}
.ct-tree-header.root-node:hover{background:#daece5}
.ct-tree-arrow{width:20px;height:20px;display:inline-flex;align-items:center;justify-content:center;border-radius:4px;font-size:11px;color:var(--t3);transition:transform .25s;flex-shrink:0}
.ct-tree-arrow.expanded{transform:rotate(90deg)}
.ct-tree-arrow.no-children{visibility:hidden}
.ct-tree-dot{display:inline-block;width:8px;height:8px;border-radius:50%;flex-shrink:0}
.ct-tree-dot.lv1{background:var(--p)}.ct-tree-dot.lv2{background:var(--b)}
.ct-tree-dot.lv3{background:var(--w)}.ct-tree-dot.lv4{background:var(--d)}
.ct-tree-info{flex:1;display:flex;align-items:center;gap:10px;min-width:0}
.ct-tree-name{font-weight:600;white-space:nowrap;color:var(--t1)}
.ct-tree-org{color:var(--t3);font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ct-tree-title{color:var(--p2);font-size:11px;white-space:nowrap;font-weight:500}
.ct-tree-count{background:var(--p-light);color:var(--p2);font-size:11px;padding:2px 8px;border-radius:12px;white-space:nowrap;font-weight:600}
.ct-tree-actions{display:flex;gap:4px;flex-shrink:0}
.ct-tree-actions button{padding:3px 8px;font-size:11px;border-radius:4px;border:1px solid var(--border2);background:var(--white);cursor:pointer;color:var(--t3)}
.ct-tree-actions button:hover{background:var(--p-light);border-color:var(--p);color:var(--p2)}
.ct-tree-children{margin-left:28px;border-left:2px solid var(--border);padding-left:14px}
.revisit-tag{display:inline-block;background:var(--g-light);color:var(--g2);padding:2px 7px;border-radius:4px;font-size:11px;margin-left:4px;font-weight:600}
.diag-dropdown-wrap{position:relative}
.diag-search{width:100%;padding:7px 9px;border:1px solid var(--border2);border-radius:5px;font-size:12px;box-sizing:border-box;background:var(--white)}
.diag-search:focus{outline:none;border-color:var(--p);box-shadow:0 0 0 2px rgba(91,154,139,.1)}
.diag-dropdown{position:absolute;top:100%;left:0;right:0;max-height:200px;overflow-y:auto;background:var(--white);border:1px solid var(--border2);border-top:none;border-radius:0 0 6px 6px;z-index:100;box-shadow:0 6px 18px rgba(0,0,0,.08);display:none}
.diag-dropdown-item{padding:6px 12px;font-size:12px;cursor:pointer;border-bottom:1px solid var(--border);color:var(--t1)}
.diag-dropdown-item:hover{background:var(--p-light);color:var(--p2)}
.diag-dropdown-item .py-hint{color:var(--t4);font-size:10px;margin-left:6px}
.diag-no-match{padding:12px;text-align:center;color:var(--t3);font-size:12px}
.diag-tags{margin-bottom:5px;min-height:4px}
.diag-tag{display:inline-block;background:var(--b-light);color:var(--b2);padding:3px 7px;border-radius:4px;font-size:11px;margin:1px 4px 1px 0;cursor:default;font-weight:500}
.diag-tag.x{background:var(--w-light);color:var(--w2)}
.diag-tag.z{background:#f3edfc;color:#7c5cbf}
.diag-tag .rm{display:inline-block;margin-left:3px;width:15px;height:15px;line-height:14px;text-align:center;border-radius:3px;font-size:10px;cursor:pointer;color:var(--t3);vertical-align:middle}
.diag-tag .rm:hover{background:var(--d);color:#fff}
.disease-add-row{display:flex;gap:5px;align-items:center;margin-top:5px}
.diag-badge{display:inline-block;background:var(--b-light);color:var(--b2);padding:2px 7px;border-radius:4px;font-size:11px;margin:1px 2px;white-space:nowrap;font-weight:500}
.diag-badge.s{background:var(--w-light);color:var(--w2)}
.diag-badge.o{background:#f3edfc;color:#7c5cbf}
.diag-section{margin-bottom:7px}
.diag-section h5{margin:0 0 3px 0;font-size:12px;color:var(--t2);font-weight:700}
.diag-section h5 span{font-weight:400;color:var(--t3);font-size:11px}
/* 角色徽章 */
.role-badge{display:inline-block;padding:3px 9px;border-radius:6px;font-size:11px;font-weight:700;vertical-align:middle}
.role-super{background:#fff8e1;color:#b8860b;border:1px solid #ffe082}
.role-leader{background:var(--d-light);color:var(--d2);border:1px solid #f5c6cb}
.role-admin{background:var(--b-light);color:var(--b2);border:1px solid #c8ddf0}
.role-staff{background:var(--g-light);color:var(--g2);border:1px solid #c8e6c9}
.role-external{background:var(--p-light);color:var(--p2);border:1px solid #b2d8cb}
.role-patient{background:#f3edfc;color:#7c5cbf;border:1px solid #d5c8f0}
/* 权限管理表格 */
.perm-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:12px}
.perm-card{background:var(--white);border:1px solid var(--border);border-radius:var(--radius-sm);padding:16px;box-shadow:var(--shadow)}
.perm-card h4{font-size:13px;margin-bottom:10px;color:var(--p2);font-weight:700}
.perm-card .perm-row{display:flex;align-items:center;gap:7px;margin-bottom:5px;font-size:12px;color:var(--t2)}
.perm-card .perm-row label{display:flex;align-items:center;gap:5px;cursor:pointer}
/* 登录日志 */
.log-table{width:100%;border-collapse:collapse;font-size:12px}
.log-table th,.log-table td{padding:8px 12px;text-align:left;border-bottom:1px solid var(--border)}
.log-table th{background:var(--bg2);font-weight:700;color:var(--t2)}
.log-ok{color:var(--g2);font-weight:600}.log-fail{color:var(--d2);font-weight:600}
/* 患者门户 */
.patient-portal{max-width:700px;margin:0 auto}
.patient-card{background:var(--white);border-radius:var(--radius);border:1px solid var(--border);padding:26px;margin-bottom:18px;box-shadow:var(--shadow)}
.patient-card h3{font-size:16px;color:var(--t1);margin-bottom:16px;padding-bottom:12px;border-bottom:2px solid var(--p-light);display:flex;align-items:center;gap:8px}
.patient-card h3::before{content:'';display:inline-block;width:4px;height:18px;background:var(--p);border-radius:2px}
.patient-info-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.patient-info-item{font-size:13px}.patient-info-item .info-label{color:var(--t3);font-size:11px;margin-bottom:3px;font-weight:600}
.patient-info-item .info-value{color:var(--t1);font-weight:600}
.patient-record-table{width:100%;border-collapse:collapse;font-size:12px}
.patient-record-table th,.patient-record-table td{padding:9px;text-align:left;border-bottom:1px solid var(--border)}
.patient-record-table th{background:var(--bg2);color:var(--t2);font-weight:700}
.patient-empty{text-align:center;padding:34px;color:var(--t3)}
/* ====== 移动端适配 v2.0 — 底部导航 + 抽屉 + 触摸友好 + 安全区 ====== */

/* 视口高度变量 */
:root{--vh:1vh}

/* 平板适配 (481px~768px) */
@media (max-width:768px){
  body.mobile-mode .header{padding:0 12px;height:50px}
  body.mobile-mode .header h1{font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:calc(100vw - 120px)}
  body.mobile-mode .header-right{gap:8px}
  body.mobile-mode .header-right span{font-size:11px}
  body.mobile-mode .header-right button{padding:5px 10px;font-size:11px}
  body.mobile-mode .header-right #headerAuthBtn{display:none}
  body.mobile-mode .header-right #headerRole{display:none}
  /* 汉堡菜单按钮 */
  body.mobile-mode .mobile-hamburger{display:flex}
  /* 隐藏左侧侧边栏 */
  body.mobile-mode .sidebar{display:none!important}
  /* 主内容区 */
  body.mobile-mode .main{margin-left:0!important;margin-top:50px!important;padding:14px 12px 80px!important;min-height:calc(calc(var(--vh,1vh) * 100) - 50px)}
  body.mobile-mode .sidebar-resize{display:none}
  /* 底部导航栏 */
  body.mobile-mode #mobileBottomNav{display:flex}
  /* 卡片 */
  body.mobile-mode .card{padding:14px;margin-bottom:14px;border-radius:8px}
  body.mobile-mode .card h3{font-size:15px;margin-bottom:14px;padding-bottom:10px}
  /* 表单 */
  body.mobile-mode .form-row{grid-template-columns:1fr!important}
  body.mobile-mode .form-row.three{grid-template-columns:1fr 1fr!important}
  body.mobile-mode .form-group label{font-size:14px;margin-bottom:6px}
  body.mobile-mode input,body.mobile-mode select,body.mobile-mode textarea{padding:11px 14px;font-size:15px;min-height:44px}
  /* 统计网格 */
  body.mobile-mode .stats-grid{grid-template-columns:repeat(2,1fr);gap:10px}
  body.mobile-mode .stat-card{padding:14px 10px}
  body.mobile-mode .stat-card .num{font-size:24px}
  body.mobile-mode .stat-card .label{font-size:11px}
  /* 筛选栏 */
  body.mobile-mode .filter-bar{flex-direction:column;align-items:stretch;gap:8px}
  body.mobile-mode .filter-bar select,body.mobile-mode .filter-bar input{width:100%!important;min-height:40px;font-size:14px}
  body.mobile-mode .filter-bar .search-input{width:100%!important}
  /* 弹窗 — 全屏化 */
  body.mobile-mode .modal{width:100%!important;max-width:100%!important;max-height:100vh!important;border-radius:0;position:fixed;top:0;left:0;right:0;bottom:0}
  body.mobile-mode .modal-overlay{align-items:flex-start}
  body.mobile-mode .modal-header{padding:14px 16px;position:sticky;top:0;z-index:10}
  body.mobile-mode .modal-header h3{font-size:16px}
  body.mobile-mode .modal-body{padding:16px}
  body.mobile-mode .modal-footer{padding:12px 16px;position:sticky;bottom:0;background:var(--white);z-index:10}
  body.mobile-mode .modal-footer .btn{flex:1;padding:12px;font-size:15px;min-height:44px}
  /* 按钮触摸友好 */
  body.mobile-mode .btn{min-height:40px;padding:10px 16px;font-size:14px}
  body.mobile-mode .btn-sm{min-height:32px;padding:6px 10px;font-size:12px}
  /* 标签页 */
  body.mobile-mode .tabs{overflow-x:auto;-webkit-overflow-scrolling:touch}
  body.mobile-mode .tabs .tab{padding:10px 14px;font-size:13px;white-space:nowrap}
  /* 表格 — 水平滚动 */
  body.mobile-mode table{font-size:12px}
  body.mobile-mode th,body.mobile-mode td{padding:8px 8px}
  body.mobile-mode .log-table th,body.mobile-mode .log-table td{padding:6px 8px}
  body.mobile-mode .fup-table th,body.mobile-mode .fup-table td{padding:6px 5px}
  /* 患者门户 */
  body.mobile-mode .patient-info-grid{grid-template-columns:1fr 1fr}
  body.mobile-mode .patient-card{padding:16px}
  body.mobile-mode .patient-portal{max-width:100%}
  /* 回访详情 */
  body.mobile-mode .fup-detail-grid{grid-template-columns:1fr}
  body.mobile-mode .fup-section{max-height:40vh;padding:10px}
  /* 登录页 */
  body.mobile-mode .login-form{width:92%;padding:28px 22px}
  body.mobile-mode .login-form h2{font-size:19px;margin-bottom:20px}
  /* 权限管理 */
  body.mobile-mode .perm-grid{grid-template-columns:1fr}
  body.mobile-mode .perm-card{padding:14px}
  /* 树形视图 */
  body.mobile-mode .st-children{margin-left:16px}
  body.mobile-mode .ct-tree-children{margin-left:18px;padding-left:10px}
  /* 消息预览 */
  body.mobile-mode .msg-preview{max-height:150px;padding:10px;font-size:12px}
  /* 通讯录操作按钮 */
  body.mobile-mode .ct-tree-actions button{padding:5px 10px;font-size:12px}
  /* 浮动提示条位置调整 */
  body.mobile-mode .fup-tip-bar{top:56px;width:90%;font-size:13px;padding:8px 16px}
  /* 筛选栏中的按钮 */
  body.mobile-mode .filter-bar .btn{width:100%;justify-content:center}
}

/* 手机适配 (≤480px) */
@media (max-width:480px){
  body.mobile-mode .header h1{font-size:13px;max-width:calc(100vw - 80px)}
  body.mobile-mode .header-right span{display:none}
  body.mobile-mode .header-right button{padding:5px 8px;font-size:11px}
  body.mobile-mode .stats-grid{grid-template-columns:1fr 1fr;gap:8px}
  body.mobile-mode .stat-card{padding:12px 8px}
  body.mobile-mode .stat-card .num{font-size:22px}
  body.mobile-mode .form-row.three{grid-template-columns:1fr!important}
  body.mobile-mode .patient-info-grid{grid-template-columns:1fr}
  body.mobile-mode .card{padding:12px}
  body.mobile-mode .card h3{font-size:14px}
  body.mobile-mode .tabs .tab{padding:8px 10px;font-size:12px}
  body.mobile-mode .login-form{padding:24px 18px}
  body.mobile-mode .login-form h2{font-size:17px}
  body.mobile-mode .login-form .form-group{margin-bottom:14px}
  body.mobile-mode input,body.mobile-mode select,body.mobile-mode textarea{font-size:16px}
  body.mobile-mode .filter-bar select,body.mobile-mode .filter-bar input{font-size:14px}
  body.mobile-mode .modal-footer{flex-direction:column-reverse;gap:8px}
  body.mobile-mode .modal-footer .btn{width:100%;flex:none}
  body.mobile-mode .btn{width:100%;justify-content:center}
  body.mobile-mode .filter-bar .btn{width:100%}
  body.mobile-mode .card-list .btn,body.mobile-mode .modal-footer .btn,body.mobile-mode .mn-item .btn{width:auto}
}

/* ====== 底部导航栏 ====== */
.mobile-hamburger{
  display:none;align-items:center;justify-content:center;
  width:36px;height:36px;border:none;background:transparent;
  cursor:pointer;font-size:20px;color:var(--t2);
  -webkit-tap-highlight-color:transparent;flex-shrink:0
}
.mobile-hamburger:active{color:var(--p2)}

#mobileBottomNav{
  display:none;position:fixed;bottom:0;left:0;right:0;
  height:calc(56px + env(safe-area-inset-bottom,0px));
  background:var(--white);border-top:1px solid var(--border);
  box-shadow:0 -2px 12px rgba(0,0,0,.06);
  z-index:100;padding-bottom:env(safe-area-inset-bottom,0px);
  -webkit-tap-highlight-color:transparent;user-select:none
}
.mn-item{
  flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:2px;position:relative;cursor:pointer;
  color:var(--t3);transition:color .2s;padding-top:6px
}
.mn-item:active{color:var(--p)}
.mn-item.mn-active{color:var(--p2)}
.mn-icon{font-size:20px;line-height:1}
.mn-label{font-size:10px;font-weight:500}
.mn-badge{
  position:absolute;top:2px;right:50%;margin-right:-22px;
  background:var(--d);color:#fff;font-size:9px;min-width:16px;height:16px;
  display:flex;align-items:center;justify-content:center;
  border-radius:8px;padding:0 4px;font-weight:700;
  box-shadow:0 2px 6px rgba(224,112,112,.3)
}

/* ====== 抽屉菜单 ====== */
#mobileDrawerOverlay{
  display:none;position:fixed;top:0;left:0;right:0;bottom:0;
  background:rgba(0,0,0,.4);z-index:150;opacity:0;transition:opacity .25s
}
#mobileDrawerOverlay.overlay-active{opacity:1}

#mobileDrawer{
  display:none;position:fixed;top:0;left:0;bottom:0;
  width:280px;max-width:80vw;background:var(--white);
  z-index:151;transform:translateX(-100%);transition:transform .25s ease;
  box-shadow:2px 0 16px rgba(0,0,0,.12);overflow-y:auto;
  -webkit-overflow-scrolling:touch
}
#mobileDrawer.drawer-open{transform:translateX(0)}

body.drawer-lock{overflow:hidden;position:fixed;width:100%}

.drawer-header{
  padding:20px 16px;background:linear-gradient(135deg,var(--p),var(--p2));
  color:#fff;position:relative;display:flex;align-items:center;justify-content:space-between
}
.drawer-user{display:flex;align-items:center;gap:12px}
.drawer-avatar{
  width:44px;height:44px;border-radius:50%;background:rgba(255,255,255,.25);
  display:flex;align-items:center;justify-content:center;font-size:20px;font-weight:700
}
.drawer-userinfo{flex:1;min-width:0}
.drawer-name{font-size:16px;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.drawer-role{font-size:12px;opacity:.85;margin-top:2px}
.drawer-close{
  width:32px;height:32px;border:none;background:rgba(255,255,255,.2);
  color:#fff;border-radius:50%;cursor:pointer;font-size:16px;
  display:flex;align-items:center;justify-content:center;flex-shrink:0
}
.drawer-close:active{background:rgba(255,255,255,.35)}

.drawer-nav{padding:8px 0}
.drawer-item{
  display:flex;align-items:center;gap:14px;padding:14px 18px;
  cursor:pointer;font-size:14px;color:var(--t2);transition:all .18s;
  border-left:3px solid transparent;-webkit-tap-highlight-color:transparent
}
.drawer-item:active{background:var(--p-light)}
.drawer-item-active{background:var(--p-light);color:var(--p3);font-weight:600;border-left-color:var(--p)}
.drawer-icon{font-size:18px;width:24px;text-align:center;flex-shrink:0}
.drawer-label{flex:1;white-space:nowrap}
.drawer-logout{color:var(--d2);margin-top:4px}
.drawer-logout:active{background:var(--d-light)}
.drawer-divider{height:1px;background:var(--border);margin:8px 16px}

/* ====== 卡片化表格 ====== */
.card-list{display:flex;flex-direction:column;gap:10px}
.card-list-item{
  background:var(--white);border:1px solid var(--border);border-radius:8px;
  padding:12px 14px;box-shadow:var(--shadow)
}
.cli-row{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;padding:4px 0;border-bottom:1px solid var(--bg2)}
.cli-row:last-child{border-bottom:none}
.cli-label{font-size:11px;color:var(--t3);font-weight:600;white-space:nowrap;flex-shrink:0}
.cli-value{font-size:13px;color:var(--t1);text-align:right;flex:1;word-break:break-word}
.cli-action{padding-top:8px;border-top:1px solid var(--border);margin-top:4px}
.cli-action .cli-value{display:flex;gap:6px;justify-content:flex-end;flex-wrap:wrap}

/* ====== Toast 提示 ====== */
.mobile-toast{
  position:fixed;bottom:calc(70px + env(safe-area-inset-bottom,0px));left:50%;
  transform:translateX(-50%) translateY(20px);background:rgba(44,62,80,.92);
  color:#fff;padding:10px 22px;border-radius:24px;font-size:14px;font-weight:500;
  z-index:300;opacity:0;transition:all .3s ease;max-width:80%;text-align:center;
  box-shadow:0 6px 20px rgba(0,0,0,.2)
}
.mobile-toast.toast-show{opacity:1;transform:translateX(-50%) translateY(0)}

/* ====== body 滚动锁定 ====== */
body.modal-open{overflow:hidden;position:fixed;width:100%}

/* ====== 安全区 ====== */
body.mobile-mode .main{
  padding-bottom:calc(80px + env(safe-area-inset-bottom,0px))!important
}
body.mobile-mode .header{
  padding-top:env(safe-area-inset-top,0px);
  height:calc(50px + env(safe-area-inset-top,0px))
}

/* ====== 横屏适配 ====== */
@media (max-width:768px) and (orientation:landscape){
  body.mobile-mode #mobileBottomNav{height:calc(48px + env(safe-area-inset-bottom,0px))}
  body.mobile-mode .mn-icon{font-size:18px}
  body.mobile-mode .mn-label{font-size:9px}
  body.mobile-mode .main{padding-bottom:calc(60px + env(safe-area-inset-bottom,0px))!important}
}

/* ====== 微信内置浏览器特殊处理 ====== */
@media (max-width:768px){
  body.mobile-mode .login-box{height:calc(calc(var(--vh,1vh) * 100))}
  body.mobile-mode .login-form{margin:20px 0}
}

/* 完成按钮脉冲高亮 */
@keyframes btnPulse{
  0%{box-shadow:0 0 0 0 rgba(106,175,106,.6)}
  70%{box-shadow:0 0 0 14px rgba(106,175,106,0)}
  100%{box-shadow:0 0 0 0 rgba(106,175,106,0)}
}
.btn-done-pulse{animation:btnPulse 1s ease-out infinite}
/* 浮动提示条 */
.fup-tip-bar{position:fixed;top:64px;left:50%;transform:translateX(-50%);background:var(--g);color:#fff;padding:10px 24px;border-radius:24px;font-size:14px;font-weight:600;box-shadow:0 6px 20px rgba(0,0,0,.15);z-index:300;display:flex;align-items:center;gap:8px;animation:tipFadeIn .3s ease}
@keyframes tipFadeIn{from{opacity:0;transform:translate(-50%,-10px)}to{opacity:1;transform:translate(-50%,0)}}

