:root{ --blue:#1b4f8f; --blue2:#2b6db3; --ink:#323562; --muted:#6b7280; --line:#e5e7eb; --bg:#eef2f7; }
*{box-sizing:border-box; margin:0; padding:0}
body{font-family:"Microsoft YaHei","PingFang SC","Segoe UI",sans-serif; background:var(--bg); color:var(--ink);}
header{background:linear-gradient(135deg,#123c73,#2b6db3); color:#fff; padding:22px 32px; display:flex; align-items:center; justify-content:space-between; flex-wrap:wrap; gap:10px}
header h1{font-size:22px; font-weight:700; letter-spacing:.5px}
header p{font-size:13px; opacity:.88; margin-top:6px; line-height:1.6}
header .nav a{color:#fff; text-decoration:none; font-size:13px; border:1px solid rgba(255,255,255,.45); border-radius:999px; padding:7px 16px; margin-left:8px; display:inline-block}
header .nav a:hover{background:rgba(255,255,255,.15)}
.layout{display:grid; grid-template-columns:390px 1fr; gap:20px; padding:20px; max-width:1440px; margin:0 auto; align-items:start}
.panel{background:#fff; border:1px solid var(--line); border-radius:14px; padding:20px; box-shadow:0 2px 10px rgba(20,45,80,.05)}
.panel h2{font-size:15px; margin-bottom:16px; color:var(--blue); display:flex; align-items:center; gap:8px; font-weight:700}
.panel h2::before{content:""; width:4px; height:16px; background:var(--blue); border-radius:2px}
.form-grid{display:grid; grid-template-columns:1fr 1fr; gap:12px}
.form-item{display:flex; flex-direction:column; gap:5px}
.form-item.full{grid-column:1/-1}
label{font-size:12px; color:var(--muted)}
input,select{height:36px; padding:0 10px; border:1px solid #d1d5db; border-radius:8px; font-size:14px; font-family:inherit; background:#fff; color:var(--ink); width:100%}
input:focus,select:focus{outline:2px solid rgba(43,109,179,.35); border-color:var(--blue2)}
input[type=file]{height:auto; padding:7px; font-size:12px}
input[readonly]{background:#f6f8fb; color:#52606d}
.hint{font-size:11px; color:#9aa4b2; margin-top:1px}
.btn{display:inline-flex; align-items:center; justify-content:center; gap:6px; height:38px; padding:0 16px; border:none; border-radius:8px; font-size:14px; font-family:inherit; cursor:pointer; background:var(--blue2); color:#fff; transition:filter .15s;}
.btn:hover{filter:brightness(1.08)}
.btn:active{filter:brightness(.96)}
.btn.secondary{background:#fff; color:var(--ink); border:1px solid #d1d5db}
.btn.small{height:30px; padding:0 10px; font-size:12px}
.btn.danger{background:#fff; color:#d13333; border:1px solid #eccaca}
.btn-row{display:flex; flex-wrap:wrap; gap:10px; margin-top:16px}
.upload-box{display:flex; align-items:center; gap:10px}
.thumb{width:48px; height:60px; border:1px dashed #cbd5e1; border-radius:6px; background:#f8fafc; display:flex; align-items:center; justify-content:center; color:#c0c8d4; font-size:11px; overflow:hidden; flex-shrink:0}
.thumb img{width:100%; height:100%; object-fit:cover}
.preview-side{display:flex; flex-direction:column; gap:16px}
.card-stage{display:flex; flex-direction:column; align-items:center; gap:18px; padding:26px 20px; background:repeating-linear-gradient(45deg,#f2f5fa,#f2f5fa 12px,#e9eff7 12px,#e9eff7 24px); border-radius:14px; border:1px solid var(--line);}
.card-tag{font-size:12px; color:var(--muted); text-align:center}
.card-wrap{max-width:100%; box-shadow:0 10px 26px rgba(15,40,80,.16); border-radius:8px; overflow:hidden; background:#fff}
.card-wrap canvas{display:block; width:100%; height:auto}
#qrHolder{position:absolute; width:0; height:0; overflow:hidden; opacity:0; pointer-events:none}
.toast{position:fixed; left:50%; bottom:34px; transform:translateX(-50%) translateY(20px); background:#111827; color:#fff; font-size:13px; padding:10px 18px; border-radius:8px; opacity:0; pointer-events:none; transition:.25s; z-index:99; box-shadow:0 8px 24px rgba(0,0,0,.25)}
.toast.show{opacity:1; transform:translateX(-50%) translateY(0)}
/* 记录/表格 */
.rec-list{margin-top:12px; display:flex; flex-direction:column; gap:8px; max-height:280px; overflow:auto}
.rec-item{border:1px solid var(--line); border-radius:8px; padding:8px 10px; font-size:12px; display:flex; align-items:center; gap:8px; flex-wrap:wrap}
.rec-item .info{flex:1; min-width:120px; line-height:1.5}
.rec-item .info b{font-size:13px}
.rec-empty{font-size:12px; color:#9aa4b2; text-align:center; padding:14px 0}
.badge{display:inline-block; padding:2px 10px; border-radius:999px; font-size:12px; font-weight:700; color:#fff}
.badge.ok{background:#1d9e5a}.badge.warn{background:#e58a16}.badge.bad{background:#d13333}.badge.na{background:#8a94a6}
/* 核验视图 */
.verify-view{min-height:100vh; background:linear-gradient(160deg,#f0f4fb,#e7edf7); padding:34px 16px}
.v-box{max-width:420px; margin:0 auto; background:#fff; border-radius:16px; box-shadow:0 10px 30px rgba(20,45,80,.12); overflow:hidden}
.v-head{background:linear-gradient(135deg,#123c73,#2b6db3); color:#fff; padding:22px 22px 18px; text-align:center}
.v-head h1{font-size:19px; font-weight:700}
.v-head p{font-size:12px; opacity:.85; margin-top:5px}
.v-body{padding:20px 22px 24px}
.v-status{text-align:center; padding:14px 0 6px}
.v-badge{display:inline-block; padding:7px 22px; border-radius:999px; font-size:16px; font-weight:700; color:#fff}
.v-badge.ok{background:#1d9e5a}
.v-badge.warn{background:#e58a16}
.v-badge.bad{background:#d13333}
.v-badge.na{background:#8a94a6}
.v-rows{margin-top:16px; border-top:1px dashed #d6dee8; padding-top:6px}
.v-row{display:flex; justify-content:space-between; gap:12px; padding:9px 2px; font-size:14px; border-bottom:1px solid #f0f3f7}
.v-row span{color:#7a8698; flex-shrink:0}
.v-row b{font-weight:600; text-align:right; word-break:break-all}
.v-foot{text-align:center; margin-top:18px; display:flex; flex-direction:column; gap:10px}
.v-foot .btn{background:#fff; color:var(--blue); border:1px solid #c9d6e8}
.v-back-btn{display:inline-flex; align-items:center; justify-content:center; gap:8px; width:100%; height:46px;
  border:none; border-radius:12px; font-size:15px; font-weight:600; font-family:inherit; cursor:pointer;
  text-decoration:none; color:#fff; background:linear-gradient(135deg,#123c73,#2b6db3);
  box-shadow:0 6px 16px rgba(27,79,143,.28); transition:transform .15s, box-shadow .15s, filter .15s}
.v-back-btn:hover{filter:brightness(1.07); transform:translateY(-1px); box-shadow:0 9px 20px rgba(27,79,143,.34)}
.v-back-btn:active{transform:translateY(0); filter:brightness(.97)}
.v-back-btn.ghost{background:#fff; color:var(--blue); border:1px solid #c9d6e8; box-shadow:none}
.v-back-btn.ghost:hover{background:#f5f8fd; transform:none; box-shadow:none}
.v-note{font-size:11px; color:#9aa4b2; text-align:center; margin-top:14px; line-height:1.7}
/* 管理表格 */
.table-wrap{background:#fff; border:1px solid var(--line); border-radius:14px; padding:20px; box-shadow:0 2px 10px rgba(20,45,80,.05); overflow-x:auto}
table.admin{width:100%; border-collapse:collapse; font-size:13px; min-width:980px}
table.admin th,table.admin td{border-bottom:1px solid #edf0f5; padding:10px 10px; text-align:left; vertical-align:middle}
table.admin th{background:#f6f8fc; color:var(--blue); font-weight:700; white-space:nowrap}
table.admin tr:hover td{background:#fafcff}
.pager{display:flex; align-items:center; gap:10px; margin-top:14px; font-size:13px; color:var(--muted)}
.pager button{height:30px; padding:0 14px}
/* 页面容器（后台） */
.page-wrap{max-width:1440px; margin:20px auto; padding:0 20px}

/* ================= 移动端适配 ================= */
/* 通用：消除双击缩放延迟，避免横向溢出 */
button,a,label,input[type=checkbox],select,canvas{touch-action:manipulation}
html{-webkit-text-size-adjust:100%}
.layout,.panel,.form-grid,.form-item,.table-wrap,.rec-item{min-width:0}

@media (max-width:960px){
  .layout{grid-template-columns:1fr; padding:12px; gap:14px}
  .panel{padding:16px; border-radius:12px}
  .page-wrap{margin:14px auto; padding:0 12px}
  header{padding:14px 16px; gap:8px}
  header h1{font-size:18px}
  header p{font-size:12px; margin-top:4px}
  header .nav{width:100%; margin-top:2px; display:flex; flex-wrap:wrap; align-items:center; gap:8px}
  header .nav a,header .btn-logout{margin-left:0; padding:6px 13px; font-size:12.5px}
  .user-chip{padding:5px 11px; font-size:12px}
  .expire-chip{padding:4px 10px; font-size:12px; margin-left:0}
  .card-stage{padding:16px 12px; gap:12px}
  .card-wrap{box-shadow:0 6px 16px rgba(15,40,80,.14)}
  .rec-list{max-height:none}
  .auth-page{padding:16px}
}

@media (max-width:640px){
  /* 表单：单列，控件高度加大便于点按 */
  .form-grid{grid-template-columns:1fr; gap:14px}
  label{font-size:13px}
  input,select{height:46px; font-size:16px; border-radius:10px}
  input[type=file]{height:auto; padding:10px}
  .hint{font-size:12px}
  .upload-box{flex-wrap:nowrap}
  .upload-box input[type=file]{flex:1; min-width:0}
  .thumb{width:56px; height:70px}
  /* 按钮：主操作纵向铺满 */
  .btn{min-height:46px; font-size:15px}
  .btn.small{height:36px; min-height:36px; padding:0 13px; font-size:13px}
  .btn-row{display:grid; grid-template-columns:1fr; gap:10px}
  .btn-row .btn{width:100%}
  /* 记录列表：信息占满一行，按钮平铺一行 */
  .rec-item{padding:10px; gap:8px}
  .rec-item .info{flex:1 1 100%; min-width:0; font-size:12.5px}
  .rec-item .btn{flex:1 1 0; justify-content:center}
  /* 预览区留白收紧 */
  .card-stage{padding:12px 8px}
  .card-tag{font-size:11px}
  /* 后台 */
  .tabs{overflow-x:auto; -webkit-overflow-scrolling:touch; flex-wrap:nowrap; padding-bottom:2px}
  .tab{white-space:nowrap; height:42px; padding:0 16px; flex:0 0 auto}
  .table-wrap{padding:14px 12px; border-radius:12px}
  .table-wrap::before{content:"← 左右滑动查看更多列 →"; display:block; text-align:center; font-size:11px; color:#9aa4b2; margin-bottom:10px}
  .pager{flex-wrap:wrap; gap:8px; justify-content:center}
  .pager span{margin-left:0 !important}
  .list-toolbar{padding:10px}
  .list-toolbar > *{flex-wrap:wrap}
  .list-toolbar .tb-select{height:38px}
  .list-toolbar .btn.small{flex:1 1 auto}
  .invite-gen{gap:8px}
  .invite-gen > *{flex:1 1 100%; min-width:0}
  .invite-note{width:100%; height:46px; max-width:none}
  .num-field input{height:46px; width:110px}
  .new-cards .nc-list .code{flex:1 1 auto; text-align:center; font-size:14px}
  /* 提示条贴合底部安全区 */
  .toast{left:12px; right:12px; bottom:calc(16px + env(safe-area-inset-bottom)); transform:translateY(20px); text-align:center; font-size:13.5px}
  .toast.show{transform:translateY(0)}
  /* 核验页长字段换行，避免挤压 */
  .verify-view{padding:20px 12px calc(20px + env(safe-area-inset-bottom))}
  .v-box{max-width:100%; border-radius:14px}
  .v-head{padding:18px 16px 16px}
  .v-body{padding:16px 16px 20px}
  .v-row{font-size:13.5px; padding:9px 2px}
}

@media (max-width:400px){
  .v-row{flex-wrap:wrap}
  .v-row span{width:100%}
  .v-row b{width:100%; text-align:left}
  header h1{font-size:16px}
}

/* ---------- 证件图点击放大（移动端） ---------- */
.zoom-layer{position:fixed; inset:0; z-index:200; background:rgba(8,15,28,.94); display:none; overflow:auto; -webkit-overflow-scrolling:touch}
.zoom-layer.show{display:block}
/* 注意：容器用 justify-content:flex-start + img 的 margin:auto 居中，避免宽图超出时被裁切无法滚动 */
.zoom-scroll{display:flex; align-items:flex-start; justify-content:flex-start; min-height:100%; padding:52px 8px calc(24px + env(safe-area-inset-bottom))}
.zoom-scroll img{display:block; margin:auto; width:200%; max-width:none; border-radius:8px; background:#fff}
.zoom-scroll img.z1{width:100%; max-width:100vw}
.zoom-tip{position:fixed; top:0; left:0; right:0; z-index:2; padding:14px 12px 16px; text-align:center; color:#cbd5e1; font-size:12px;
  background:linear-gradient(rgba(0,0,0,.55),rgba(0,0,0,0)); pointer-events:none}
@media print{
  @page{margin:10mm}
  header,.panel-form,.btn-row,.toast,.table-wrap{display:none !important}
  body{background:#fff}
  .layout{display:block; padding:0}
  .preview-side{gap:6px}
  .card-stage{padding:0; background:none; border:none; align-items:flex-start; gap:6px}
  .card-tag{font-size:11px}
  .card-wrap{box-shadow:none; page-break-inside:avoid}
  .card-wrap canvas{width:150mm}
}

/* ---------- 登录 / 注册 ---------- */
.auth-page{min-height:100vh; display:flex; align-items:center; justify-content:center; padding:24px; background:radial-gradient(1100px 560px at 18% -10%, #1f5fa6 0%, #123c73 45%, #081a33 100%)}
.auth-wrap{width:100%; max-width:920px; display:grid; grid-template-columns:.95fr 1.05fr; background:#fff; border-radius:22px; overflow:hidden; box-shadow:0 30px 80px rgba(6,20,40,.5)}
.auth-brand{background:linear-gradient(160deg,#123c73,#1f5fa6 58%,#2b6db3); color:#fff; padding:42px 38px; display:flex; flex-direction:column; justify-content:space-between; position:relative; overflow:hidden}
.auth-brand::before{content:""; position:absolute; width:240px; height:240px; border-radius:50%; background:rgba(255,255,255,.07); top:-80px; right:-60px}
.auth-brand::after{content:""; position:absolute; width:170px; height:170px; border-radius:50%; background:rgba(255,255,255,.06); bottom:-50px; left:-40px}
.brand-top{position:relative; z-index:1}
.brand-logo{width:60px; height:60px; border-radius:16px; background:rgba(255,255,255,.16); border:1px solid rgba(255,255,255,.3); display:flex; align-items:center; justify-content:center; font-size:30px; font-weight:800; margin-bottom:18px; box-shadow:0 8px 20px rgba(0,0,0,.18)}
.brand-title{font-size:21px; font-weight:800; line-height:1.45}
.brand-sub{font-size:11px; letter-spacing:2px; text-transform:uppercase; opacity:.75; margin-top:8px}
.brand-feats{list-style:none; position:relative; z-index:1; margin:26px 0; display:flex; flex-direction:column; gap:14px}
.brand-feats li{display:flex; align-items:center; gap:10px; font-size:13.5px; color:rgba(255,255,255,.92)}
.brand-feats li svg{flex-shrink:0; width:18px; height:18px}
.brand-foot{position:relative; z-index:1; font-size:11.5px; color:rgba(255,255,255,.7); line-height:1.6}
.brand-foot-sub{margin-top:8px; padding-top:8px; border-top:1px solid rgba(255,255,255,.16); font-size:11px; color:rgba(255,255,255,.65); line-height:1.7}
.auth-panel{padding:44px 40px; display:flex; flex-direction:column; justify-content:center}
.auth-head{margin-bottom:22px}
.auth-head h2{font-size:22px; color:var(--ink); font-weight:800}
.auth-head p{font-size:13px; color:var(--muted); margin-top:6px}
.auth-tabs{display:flex; gap:6px; background:#eef2f7; border-radius:12px; padding:5px; margin-bottom:20px}
.auth-tab{flex:1; height:42px; border:none; border-radius:9px; background:transparent; color:var(--muted); font-size:14px; font-family:inherit; cursor:pointer; transition:.18s}
.auth-tab.active{background:#fff; color:var(--blue); font-weight:700; box-shadow:0 2px 8px rgba(20,45,80,.1)}
.auth-form{animation:fade .2s ease}
.auth-form .fi{position:relative; margin-bottom:14px}
.auth-form .fi .ic{position:absolute; left:13px; top:50%; transform:translateY(-50%); width:18px; height:18px; color:#9aa4b2; pointer-events:none}
.auth-form .fi input{height:46px; padding:0 14px 0 40px; border:1px solid #d8dee8; border-radius:11px; font-size:14px; font-family:inherit; background:#fbfcfe; color:var(--ink); width:100%}
.auth-form .fi input:focus{background:#fff; border-color:var(--blue2); outline:none; box-shadow:0 0 0 3px rgba(43,109,179,.15)}
.auth-btn{width:100%; height:48px; font-size:16px; font-weight:700; margin-top:8px; border-radius:11px; background:linear-gradient(135deg,#1f5fa6,#2b6db3); box-shadow:0 8px 20px rgba(27,79,143,.3)}
.auth-btn:hover{filter:brightness(1.05)}
.auth-msg{min-height:18px; font-size:12.5px; margin:2px 0 8px; line-height:1.5}
.auth-msg.err{color:#d13333}
.auth-msg.ok{color:#1d9e5a}
.auth-tip{font-size:11px; color:#9aa4b2; margin-top:12px; line-height:1.6; text-align:center}
/* 加 QQ 群按钮 + 访问量统计（登录页底部） */
.auth-qq{display:flex; align-items:center; gap:10px; margin-top:16px; padding:11px 14px; border:1px solid #d3e1f4; border-radius:11px; background:#f3f8fe; color:var(--blue); text-decoration:none; transition:.16s}
.auth-qq:hover{background:#e6f0fc; border-color:#93b6e4; transform:translateY(-1px)}
.auth-qq>svg{flex-shrink:0; width:26px; height:26px; color:#12b7f5}
.auth-qq span{display:flex; flex-direction:column; line-height:1.35}
.auth-qq b{font-size:13.5px; font-weight:700}
.auth-qq em{font-style:normal; font-size:11px; color:#8b96a6}
.auth-stats{margin-top:10px; text-align:center; font-size:12px; color:#9aa4b2}
.auth-stats b{color:var(--blue); font-weight:700; font-variant-numeric:tabular-nums}
.auth-note{background:#f0f6ff; border:1px solid #cfe0f5; color:#2b4d7a; font-size:13px; line-height:1.7; padding:13px 15px; border-radius:12px; margin-bottom:18px}
.auth-note b{color:#1b4f8f}
/* 账号到期提示 */
.auth-expire{background:#fff5f5; border:1px solid #f3cfcf; color:#9b2c2c; font-size:13px; line-height:1.7; padding:13px 15px; border-radius:12px; margin-bottom:16px}
.auth-expire b{color:#d13333; font-size:14px}
.auth-expire div{margin-top:4px; color:#a84444}
/* 到期徽章（顶栏） */
.expire-chip{display:inline-flex; align-items:center; gap:6px; font-size:12px; padding:5px 12px; border-radius:999px;
  background:rgba(255,255,255,.16); color:#fff; border:1px solid rgba(255,255,255,.35); margin-left:8px}
.expire-chip.warn{background:rgba(255,193,7,.22); border-color:rgba(255,193,7,.55); color:#ffe9a8}
.expire-chip.bad{background:rgba(255,86,86,.24); border-color:rgba(255,86,86,.6); color:#ffc9c9}
/* 后台会员时长列 */
.days-ok{color:#1d9e5a; font-weight:600}
.days-warn{color:#c98a00; font-weight:600}
.days-bad{color:#d13333; font-weight:600}
.days-forever{color:#2b6db3; font-weight:600}
/* 新生成卡密展示 */
.new-cards{background:#f4f9ff; border:1px solid #cfe0f5; border-radius:12px; padding:14px 16px; margin:0 0 16px}
.new-cards .nc-title{font-size:13px; font-weight:700; color:#1b4f8f; margin-bottom:10px}
.new-cards .nc-list{display:flex; flex-wrap:wrap; gap:8px; margin-bottom:12px}
.new-cards .nc-list .code{background:#fff; border:1px solid #d7e3f2; border-radius:8px; padding:6px 10px; font-family:ui-monospace,Consolas,monospace; font-size:13px; color:#16417b; letter-spacing:.5px}
@media (max-width:760px){ .auth-wrap{grid-template-columns:1fr; max-width:420px} .auth-brand{display:none} .auth-panel{padding:34px 28px} input,select{font-size:16px} }

/* ---------- 角色徽章（用户菜单） ---------- */
.role-badge{display:inline-block; padding:2px 10px; border-radius:999px; font-size:12px; font-weight:700; margin-left:6px}
.role-badge.admin{background:rgba(255,255,255,.22); color:#fff; border:1px solid rgba(255,255,255,.4)}
.role-badge.member{background:#eaf3ff; color:#1b4f8f; border:1px solid #cfe0f5}

/* ---------- 头部用户菜单 ---------- */
.user-chip{display:inline-flex; align-items:center; gap:7px; font-size:13px; color:#fff; background:rgba(255,255,255,.16); border-radius:999px; padding:6px 14px; border:1px solid rgba(255,255,255,.3)}
.user-dot{width:8px; height:8px; border-radius:50%; background:#7fe0a3; box-shadow:0 0 0 3px rgba(127,224,163,.25)}
.btn-logout{color:#fff; text-decoration:none; font-size:13px; border:1px solid rgba(255,255,255,.45); border-radius:999px; padding:6px 14px; margin-left:8px; display:inline-block}
.btn-logout:hover{background:rgba(255,255,255,.15)}

/* ---------- 后台标签 ---------- */
.tabs{display:flex; gap:8px; margin-bottom:16px}
.tab{height:38px; padding:0 18px; border:1px solid var(--line); border-radius:10px; background:#fff; color:var(--muted); font-size:14px; font-family:inherit; cursor:pointer; transition:.15s}
.tab.active{background:linear-gradient(135deg,#123c73,#2b6db3); color:#fff; border-color:transparent; font-weight:700}
.tab-pane{animation:fade .2s ease}
@keyframes fade{from{opacity:0; transform:translateY(4px)} to{opacity:1; transform:none}}

/* ---------- 邀请码管理 ---------- */
.invite-gen{display:flex; align-items:center; gap:10px; flex-wrap:wrap; margin-bottom:16px}
.invite-note{height:36px; padding:0 11px; border:1px solid #d1d5db; border-radius:8px; font-size:14px; font-family:inherit; width:220px}
table.admin td .code, .code{font-family:"SFMono-Regular",Consolas,monospace; letter-spacing:1px; color:var(--blue); font-size:14px}
.muted{color:#9aa4b2}

/* 数量输入框 */
.num-field{display:inline-flex; align-items:center; gap:6px; font-size:13px; color:#5b6675}
.num-field input{width:84px; height:36px; padding:0 10px; border:1px solid #d1d5db; border-radius:8px; font-size:14px; font-family:inherit; text-align:center}

/* 列表工具条：全选 / 筛选 / 导出 */
.list-toolbar{display:flex; align-items:center; gap:10px; flex-wrap:wrap; padding:10px 12px; margin:0 0 12px;
  background:#f4f9ff; border:1px solid #cfe0f5; border-radius:10px}
.list-toolbar .chk-all{display:inline-flex; align-items:center; gap:6px; font-size:13px; color:#16417b; cursor:pointer; user-select:none}
.list-toolbar input[type=checkbox]{width:16px; height:16px; accent-color:#1b4f8f; cursor:pointer}
.list-toolbar .tb-select{height:32px; padding:0 8px; border:1px solid #d1d5db; border-radius:8px; font-size:13px; font-family:inherit; background:#fff; color:#374151}
.list-toolbar .tb-info{font-size:13px; color:#5b6675; margin-left:2px}
table.admin td input[type=checkbox]{width:16px; height:16px; accent-color:#1b4f8f; cursor:pointer}

/* ---------- 免责声明弹窗（登录页 / 工作台通用） ---------- */
.dm-mask{position:fixed; inset:0; z-index:9999; display:flex; align-items:center; justify-content:center;
  padding:20px; background:rgba(15,30,55,.55); backdrop-filter:blur(2px); opacity:0; transition:opacity .2s ease}
.dm-mask.show{opacity:1}
.dm-box{width:100%; max-width:560px; max-height:86vh; display:flex; flex-direction:column;
  background:#fff; border-radius:16px; box-shadow:0 20px 60px rgba(10,25,50,.3); overflow:hidden;
  transform:translateY(12px); transition:transform .22s ease}
.dm-mask.show .dm-box{transform:none}
.dm-title{flex-shrink:0; padding:18px 22px; background:linear-gradient(135deg,#123c73,#2b6db3);
  color:#fff; font-size:17px; font-weight:800; letter-spacing:.5px}
.dm-body{flex:1; padding:16px 22px; overflow-y:auto; -webkit-overflow-scrolling:touch}
.dm-p{position:relative; padding-left:22px; margin-bottom:12px; font-size:13px; line-height:1.85; color:#4b5563}
.dm-p:last-child{margin-bottom:0}
.dm-no{position:absolute; left:0; top:4px; width:16px; height:16px; border-radius:50%;
  background:#1b4f8f; color:#fff; font-size:10px; line-height:16px; text-align:center; font-weight:700}
.dm-p b{color:#1b4f8f}
.dm-check{flex-shrink:0; display:flex; align-items:center; gap:8px; margin:14px 22px 0;
  padding:11px 13px; background:#f4f9ff; border:1px solid #cfe0f5; border-radius:10px;
  font-size:13px; color:#16417b; cursor:pointer; user-select:none}
.dm-check input{width:17px; height:17px; accent-color:#1b4f8f; cursor:pointer; flex-shrink:0}
.dm-actions{flex-shrink:0; padding:14px 22px 4px}
.dm-actions .btn{width:100%; min-height:44px}
.dm-actions .btn:disabled{opacity:.45; cursor:not-allowed}
.dm-foot{flex-shrink:0; padding:10px 22px 16px; text-align:center; font-size:11px; color:#9aa4b2}
@media (max-width:600px){
  .dm-mask{padding:12px}
  .dm-box{max-height:90vh}
  .dm-title{padding:15px 18px; font-size:16px}
  .dm-body{padding:14px 18px}
  .dm-p{font-size:12.5px; line-height:1.8}
  .dm-check{margin:12px 18px 0}
  .dm-actions{padding:12px 18px 4px}
}
@media print{ .dm-mask{display:none !important} }
