/* ================= 管理端（iOS 浅色风） ================= */
html,body{background:#F2F4F8;color:#1F2329}
body{font:14px/1.5 -apple-system,BlinkMacSystemFont,"PingFang SC","Noto Sans SC",sans-serif}
a{color:var(--blue)}
.adm{max-width:1180px;margin:0 auto;padding:0 18px 60px}

/* 顶栏 */
.adm-top{position:sticky;top:0;z-index:30;background:rgba(255,255,255,.86);backdrop-filter:saturate(180%) blur(16px);border-bottom:1px solid var(--line)}
.adm-top-in{max-width:1180px;margin:0 auto;padding:12px 18px;display:flex;align-items:center;gap:14px}
.adm-logo{width:34px;height:34px;border-radius:10px;background:linear-gradient(135deg,#3771BB,#5A9DE0);color:#fff;display:grid;place-items:center;font-weight:700}
.adm-top b{font-size:16px}
.adm-top .sub{font-size:12px;color:var(--sub)}
.adm-seg{display:flex;background:#ECEDF1;border-radius:10px;padding:2px;margin-left:8px}
.adm-seg button{padding:6px 14px;border-radius:8px;font-size:13px;font-weight:600;color:#646566;cursor:pointer;transition:all .18s}
.adm-seg button.on{background:#fff;color:var(--blue);box-shadow:0 1px 3px rgba(0,0,0,.08)}
.adm-me{margin-left:auto;display:flex;align-items:center;gap:8px;font-size:13px;color:#646566}
.adm-me .av{width:30px;height:30px;font-size:12px;background:#E8F1FF;color:var(--blue)}
.adm-me button{color:var(--blue);font-size:13px;cursor:pointer}

/* 登录 */
.login-wrap{min-height:100vh;display:grid;place-items:center;padding:20px;background:linear-gradient(160deg,#EAF1FB,#F7F9FC 46%,#fff)}
.login-card{width:360px;background:#fff;border-radius:18px;padding:30px 26px;box-shadow:0 18px 50px rgba(31,35,41,.10);border:1px solid #EEF0F3}
.login-card .lg{width:56px;height:56px;border-radius:16px;background:linear-gradient(135deg,#3771BB,#5A9DE0);color:#fff;display:grid;place-items:center;font-size:22px;font-weight:700;margin-bottom:14px}
.login-card h1{margin:0 0 4px;font-size:19px}
.login-card .tip{font-size:12px;color:var(--sub);margin:0 0 18px}
.login-card .inp{margin-bottom:12px}
.login-foot{margin-top:14px;padding-top:12px;border-top:1px dashed var(--line);font-size:12px;color:var(--sub);text-align:center}

/* 通用组件 */
.card{background:#fff;border:1px solid #EBEDF0;border-radius:14px;padding:16px 18px;box-shadow:0 1px 2px rgba(31,35,41,.04)}
.card h3{margin:0 0 12px;font-size:15px}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:40px;padding:0 18px;border-radius:10px;font-weight:600;font-size:14px;cursor:pointer;transition:transform .15s,opacity .15s,background .15s; width:auto}
.btn.primary{background:var(--blue);color:#fff}
.btn.primary:active{background:#2C5FA3}
.btn.ghost{background:#fff;color:var(--blue);border:1px solid #C9DBF2}
.btn.ghost:active{background:#F3F7FC}
.btn.danger{background:#fff;color:var(--bad);border:1px solid #F3C2C7}
.btn.sm{height:32px;padding:0 12px;font-size:13px;border-radius:8px}
.btn.block{width:100%}
.btn[disabled]{opacity:.45;cursor:not-allowed}
.inp,.area{border:1px solid #DDE1E7;background:#F8F9FB;border-radius:10px;padding:10px 12px;outline:0;transition:all .15s}
.inp:focus,.area:focus{border-color:var(--blue);background:#fff}
.area{width:100%;min-height:96px;resize:vertical;font-family:ui-monospace,Menlo,monospace;font-size:12px}
select.inp{appearance:none;-webkit-appearance:none;background-image:linear-gradient(45deg,transparent 50%,#8A8F99 50%),linear-gradient(135deg,#8A8F99 50%,transparent 50%);background-position:calc(100% - 16px) 16px,calc(100% - 11px) 16px;background-size:5px 5px,5px 5px;background-repeat:no-repeat;padding-right:30px}

.page-head{display:flex;align-items:flex-end;gap:14px;margin:22px 0 14px;flex-wrap:wrap}
.page-head h2{margin:0;font-size:22px}
.page-head .desc{color:var(--sub);font-size:13px;margin-top:2px}
.page-head .act{margin-left:auto;display:flex;gap:8px}

/* 类型卡片选择 */
.radiocards{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:10px;margin:6px 0 4px}
.radiocard{border:1.5px solid #E4E7EC;background:#fff;border-radius:12px;padding:13px 14px;cursor:pointer;text-align:left;transition:all .16s}
.radiocard b{display:block;font-size:14px;margin-bottom:2px}
.radiocard .m{font-size:12px;color:var(--sub)}
.radiocard.on{border-color:var(--blue);background:#F2F7FF;box-shadow:0 0 0 3px rgba(55,113,187,.08)}
.radiocard .ck{float:right;width:18px;height:18px;border-radius:50%;border:2px solid #C9CDD4;display:grid;place-items:center;font-size:10px;color:#fff}
.radiocard.on .ck{border-color:var(--blue);background:var(--blue)}

/* 上传区 */
.drop{border:1.5px dashed #B9CCE5;border-radius:14px;background:#F7FAFE;padding:26px;text-align:center;cursor:pointer;transition:all .16s}
.drop:hover,.drop.hl{border-color:var(--blue);background:#EEF5FF}
.drop .big{font-size:34px}
.drop b{font-size:15px}
.drop .m{font-size:12px;color:var(--sub);margin-top:4px}
.divider-or{display:flex;align-items:center;gap:10px;color:#B0B5BD;font-size:12px;margin:14px 0}
.divider-or::before,.divider-or::after{content:"";flex:1;height:1px;background:#E4E7EC}

/* 提示条 */
.alert{border-radius:12px;padding:11px 14px;margin:8px 0;font-size:13px;display:flex;gap:9px;align-items:flex-start}
.alert .ic{flex:none;margin-top:1px}
.alert ul{margin:4px 0 0;padding-left:2px;list-style:none}
.alert li{margin:4px 0;line-height:1.5}
.alert li b{font-weight:650}
.alert.warn{background:#FFF6E8;border:1px solid #F7E0B0;color:#8A5A12}
.alert.error{background:#FDEDED;border:1px solid #F5C3C8;color:#9B1B29}
.alert.ok{background:#EAF8F0;border:1px solid #B7E4C7;color:#17663A}
.alert.info{background:#EFF4FB;border:1px solid #C9DBF2;color:#2A4D7A}
.alert .num{display:inline-grid;place-items:center;min-width:19px;height:19px;padding:0 5px;border-radius:99px;background:#fff;font-weight:700;font-size:11px;margin-right:4px}

/* 必填说明（红色，在演示表格上方） */
.req-legend{display:flex;flex-wrap:wrap;gap:7px;align-items:center;margin:4px 0 10px;font-size:12px;color:#B52B39}
.req-legend .rl{font-weight:700}
.req-legend .rf{background:#FDEDED;color:#C02A38;border-radius:6px;padding:2px 8px;font-weight:600}
.req-legend .rn{color:#8A8F99;font-weight:400}

/* 列映射条 */
.mapbar{display:flex;gap:9px;overflow-x:auto;padding:10px 2px 12px}
.mapchip{flex:none;width:218px;border:1.5px solid #E4E7EC;border-radius:12px;padding:10px;background:#fff}
.mapchip.auto{border-color:#BFE3CC;background:#F4FBF6}
.mapchip.suggest{border-color:#F3D39B;background:#FFFBF2}
.mapchip.none{border-color:#E4E7EC;background:#FAFBFC}
.mapchip.manual{border-color:#A9C6EB;background:#F4F8FE}
.mapchip .src{font-size:13px;font-weight:650;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-bottom:2px}
.mapchip .src .dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:6px;vertical-align:1px}
.mapchip.auto .dot{background:#07C160}
.mapchip.suggest .dot{background:#F5A623;animation:pulse 1.4s infinite}
.mapchip.none .dot{background:#C0C4CC}
.mapchip.manual .dot{background:#3771BB}
.mapchip .via{font-size:11px;color:#969799;margin-bottom:7px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mapchip select{width:100%;height:32px;font-size:12px;border-radius:8px;padding:0 8px}
@keyframes pulse{50%{opacity:.35}}

/* 数据表格 */
.grid-wrap{border:1px solid #E4E7EC;border-radius:12px;overflow:auto;max-height:520px;background:#fff}
table.grid{border-collapse:separate;border-spacing:0;width:100%;font-size:13px}
table.grid th,table.grid td{border-bottom:1px solid #EEF0F3;border-right:1px solid #F2F3F5;padding:0;text-align:left;white-space:nowrap;max-width:240px}
table.grid th{position:sticky;top:0;background:#F7F8FA;z-index:2;padding:9px 12px;font-weight:600;color:#4E5969;font-size:12px;white-space:nowrap}
table.grid th.req{color:#C02A38}
table.grid th.req::after{content:" *";color:#C02A38;font-weight:700}
table.grid th .rn{color:#B0B5BD;font-weight:400;margin-left:5px;font-size:11px}
table.grid td .cell{padding:8px 12px;min-width:60px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
table.grid td .cell.empty-cell{color:#B8BDC6}
table.grid tr:last-child td{border-bottom:0}
table.grid tr:hover td{background:#F8FBFF}
table.grid td.bad{background:#FEF0F0}
table.grid td.warn{background:#FFF7EB}
table.grid tr:hover td.bad{background:#FDE6E6}
table.grid tr:hover td.warn{background:#FFF2DE}
.issue-ic{display:inline-grid;place-items:center;width:18px;height:18px;border-radius:50%;font-size:11px;font-weight:700;margin-right:6px;cursor:help;vertical-align:-3px}
.issue-ic.error{background:#FDECEC;color:#EE0A24}
.issue-ic.warn{background:#FFF1D9;color:#C47F10}
.cell-inp{width:100%;border:0;outline:0;background:#fff;padding:8px 10px;font:inherit;min-width:80px}
.cell-inp.bad{background:#FFF5F5;box-shadow:inset 0 0 0 1.5px #EFA0A8}

/* 行内修正弹层 */
.fixpop{position:fixed;z-index:60;background:#fff;border-radius:12px;box-shadow:0 10px 36px rgba(15,40,71,.18);border:1px solid #E4E7EC;padding:12px 14px;width:268px;font-size:13px}
.fixpop .t{font-weight:650;margin-bottom:6px;display:flex;gap:7px;align-items:center}
.fixpop .m{color:#646566;font-size:12px;line-height:1.55;margin-bottom:10px}
.fixpop .row{display:flex;gap:8px}

/* 底部操作条 */
.footbar{position:sticky;bottom:0;z-index:20;margin-top:14px;background:rgba(255,255,255,.9);backdrop-filter:blur(12px);border:1px solid #E4E7EC;border-radius:14px;padding:12px 16px;display:flex;align-items:center;gap:12px;box-shadow:0 4px 18px rgba(31,35,41,.06)}
.footbar .stat{font-size:13px;color:#4E5969}
.footbar .stat b{color:var(--blue)}
.footbar .act{margin-left:auto;display:flex;gap:8px}

/* 表格列表 */
.tbl-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:12px}
.tbl-item{background:#fff;border:1.5px solid #EBEDF0;border-radius:14px;padding:16px;cursor:pointer;transition:all .16s;display:block;width:100%;text-align:left}
.tbl-item:hover{border-color:#A9C6EB;box-shadow:0 6px 20px rgba(55,113,187,.08);transform:translateY(-1px)}
.tbl-item .top{display:flex;align-items:center;gap:9px;margin-bottom:7px}
.tbl-item .ic{width:36px;height:36px;border-radius:10px;background:#E8F1FF;color:var(--blue);display:grid;place-items:center;font-size:17px;flex:none}
.tbl-item b{font-size:15px}
.tbl-item .meta{font-size:12px;color:var(--sub)}
.tbl-item .foot{display:flex;align-items:center;gap:8px;margin-top:10px}
.badge{display:inline-flex;align-items:center;gap:3px;padding:2px 9px;border-radius:99px;font-size:11px;font-weight:600}
.badge.ok{background:#E8F8EF;color:#07914A}
.badge.warn{background:#FFF1D9;color:#B06B0B}
.badge.gray{background:#F2F3F5;color:#86909C}
.badge.blue{background:#E8F1FF;color:#3771BB}

/* 设置（别名字典） */
.alias-schema{margin-bottom:14px}
.alias-field{border:1px solid #EEF0F3;border-radius:12px;padding:13px 15px;margin-bottom:10px;background:#fff}
.alias-field .fh{display:flex;align-items:center;gap:8px;margin-bottom:9px}
.alias-field .fh b{font-size:14px}
.alias-field .fh .ty{font-size:11px;color:#86909C;background:#F2F3F5;border-radius:5px;padding:1px 7px}
.alias-tags{display:flex;flex-wrap:wrap;gap:6px}
.atag{display:inline-flex;align-items:center;gap:5px;background:#F2F6FC;border:1px solid #D7E4F5;color:#3771BB;border-radius:99px;padding:3px 10px;font-size:12px}
.atag.builtin{background:#F7F8FA;border-color:#E4E7EC;color:#86909C}
.atag .x{cursor:pointer;font-weight:700;opacity:.6}
.atag .x:hover{opacity:1;color:var(--bad)}
.alias-add{display:flex;gap:8px;margin-top:9px}
.alias-add .inp{height:34px;flex:1;margin:0}

.tools{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:10px}
.tools .sp{margin-left:auto;display:flex;gap:8px;align-items:center}
.toggle{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:#4E5969;cursor:pointer;user-select:none;padding:7px 11px;border:1px solid #E4E7EC;border-radius:9px;background:#fff}
.toggle.on{border-color:#A9C6EB;background:#F2F7FF;color:var(--blue);font-weight:600}
.sheetpills{display:flex;gap:6px;flex-wrap:wrap;margin:10px 0}
.sheetpill{padding:6px 13px;border-radius:99px;border:1px solid #DDE1E7;background:#fff;font-size:13px;cursor:pointer}
.sheetpill.on{background:var(--blue);border-color:var(--blue);color:#fff;font-weight:600}
.muted2{color:var(--sub);font-size:12px}
.empty-state{text-align:center;padding:56px 20px;color:#8A8F99}
.empty-state .big{font-size:44px;margin-bottom:10px}
.mapchip select:disabled{background:#F2F6F2;color:#6A8F76;opacity:1;appearance:none;-webkit-appearance:none;background-image:none;padding-right:8px}
.toast{position:fixed;left:50%;bottom:34px;top:auto;transform:translateX(-50%);z-index:100}


/* ================= 工作台 ================= */
.stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;margin-bottom:16px}
.stat-card{border-radius:14px;padding:16px 18px;color:#fff;position:relative;overflow:hidden;box-shadow:0 2px 10px rgba(31,35,41,.06)}
.stat-card.blue{background:linear-gradient(135deg,#3771BB,#5A9DE0)}
.stat-card.green{background:linear-gradient(135deg,#0E9F6E,#34D399)}
.stat-card.amber{background:linear-gradient(135deg,#D97706,#FBBF24)}
.stat-card.purple{background:linear-gradient(135deg,#7C3AED,#A78BFA)}
.stat-card.rose{background:linear-gradient(135deg,#E11D48,#FB7185)}
.stat-card .st-ic{font-size:28px;opacity:.9}
.stat-card .st-num{font-size:30px;font-weight:700;margin-top:4px;line-height:1.1}
.stat-card .st-lb{font-size:13px;opacity:.9;margin-top:2px}
.stat-card .st-sub{font-size:11px;margin-top:10px;padding-top:10px;border-top:1px solid rgba(255,255,255,.2);opacity:.9;display:flex;align-items:center;gap:4px;flex-wrap:wrap}
.stat-card .dot{display:inline-block;width:7px;height:7px;border-radius:50%;background:rgba(255,255,255,.7);margin-right:3px}
.stat-card .dot.warn{background:#FFE08A}
.stat-card .dot.ok{background:#C7F9D7}
.stat-card .dot.bad{background:#FFC4C4}
.dash-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:16px}
@media(max-width:760px){.dash-grid{grid-template-columns:1fr}}
.card-h{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}
.card-h h3{margin:0;font-size:15px}
.empty-sm{padding:18px;text-align:center;color:#B0B5BD;font-size:13px}
.biz-row{display:flex;align-items:center;justify-content:space-between;padding:11px 4px;border-bottom:1px solid #F2F3F5;cursor:pointer;transition:background .15s}
.biz-row:hover{background:#F7FAFF}
.biz-row:last-child{border-bottom:0}
.br-left{display:flex;align-items:center;gap:8px;font-size:13px}
.br-left b{font-size:14px}
.br-right{display:flex;align-items:center;gap:10px;font-size:12px}
.prio-dot{display:inline-block;width:8px;height:8px;border-radius:50%;flex:none}
.prio-dot.bad{background:#EE0A24}
.prio-dot.ok{background:#07C160}
.summary-row{padding:14px 0;border-bottom:1px solid #F2F3F5;cursor:pointer;transition:background .15s}
.summary-row:hover{background:#F7FAFF;border-radius:8px;padding:14px 8px;margin:0 -8px}
.summary-row:last-child{border-bottom:0}
.sr-top{display:flex;align-items:center;gap:8px;margin-bottom:5px}
.sr-top b{font-size:14px;flex:1}
.sr-content{font-size:13px;color:#4E5969;line-height:1.5}
.sr-foot{margin-top:6px;font-size:12px}

/* ================= 业务列表 ================= */
.biz-tools{display:flex;gap:10px;margin-bottom:14px;flex-wrap:wrap}
.biz-tools .sp{flex:1;min-width:200px}
.biz-tools .inp{height:38px;margin:0}
.biz-table-wrap{border:1px solid #E4E7EC;border-radius:12px;overflow:auto;background:#fff}
.biz-table{width:100%;border-collapse:collapse;font-size:13px}
.biz-table th{background:#F7F8FA;padding:11px 14px;text-align:left;font-weight:600;color:#4E5969;font-size:12px;white-space:nowrap;position:sticky;top:0}
.biz-table td{padding:11px 14px;border-top:1px solid #EEF0F3;vertical-align:top}
.biz-table tbody tr{cursor:pointer;transition:background .15s}
.biz-table tbody tr:hover{background:#F7FAFF}
.biz-table .clip{max-width:280px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#4E5969}
.biz-table .sm{font-size:11px;margin-top:2px}
.biz-table .ops{white-space:nowrap}
.link-btn{color:var(--blue);font-size:13px;font-weight:600;cursor:pointer;background:none;border:0;padding:4px 8px;border-radius:6px;transition:background .15s}
.link-btn:hover{background:#E8F1FF}

/* 状态/类型标签 */
.st-badge{display:inline-flex;align-items:center;padding:2px 10px;border-radius:99px;font-size:12px;font-weight:600;white-space:nowrap}
.st-badge.ok{background:#E7F8EE;color:#0E7A45}
.st-badge.warn{background:#FFF4E5;color:#B36B00}
.st-badge.blue{background:#E8F1FF;color:#3771BB}
.st-badge.bad{background:#FDECEE;color:#C02A38}
.st-badge.gray{background:#F2F3F5;color:#6B7280}
.type-pill{display:inline-flex;padding:2px 10px;border-radius:99px;font-size:12px;font-weight:600;background:#F0EBFF;color:#6D28D9;white-space:nowrap}

/* ================= 模态框 ================= */
.modal-mask{position:fixed;inset:0;background:rgba(15,23,42,.42);backdrop-filter:blur(3px);z-index:80;display:flex;align-items:center;justify-content:center;padding:20px;animation:fadeIn .2s}
@keyframes fadeIn{from{opacity:0}to{opacity:1}}
.modal{background:#fff;border-radius:18px;width:100%;max-width:560px;max-height:88vh;display:flex;flex-direction:column;box-shadow:0 24px 70px rgba(0,0,0,.22);animation:popIn .22s cubic-bezier(.22,.61,.36,1)}
.modal.wide{max-width:680px}
@keyframes popIn{from{transform:scale(.94) translateY(8px);opacity:0}to{transform:scale(1) translateY(0);opacity:1}}
.modal-h{display:flex;align-items:center;justify-content:space-between;padding:18px 20px 14px;border-bottom:1px solid #EEF0F3;flex:none}
.modal-h h3{margin:0;font-size:17px}
.modal-acts{display:flex;align-items:center;gap:6px}
.modal-x{width:30px;height:30px;border-radius:8px;font-size:16px;color:#8A8F99;cursor:pointer;display:grid;place-items:center;transition:all .15s}
.modal-x:hover{background:#F2F3F5;color:#1F2329}
.modal-body{padding:18px 20px;overflow:auto;flex:1}
.modal-f{display:flex;gap:8px;justify-content:flex-end;padding:14px 20px;border-top:1px solid #EEF0F3;flex:none}

/* 表单 */
.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.form-item{display:flex;flex-direction:column;gap:6px}
.form-item.full{grid-column:1/-1}
.form-item label{font-size:13px;font-weight:600;color:#4E5969}
.form-item .req{color:#C02A38;margin-left:2px}
.form-item .inp{height:38px;margin:0}
.form-item .area{min-height:80px;height:auto;resize:vertical}
.form-group-title{grid-column:1/-1;font-size:12px;font-weight:700;color:#2E5F9E;letter-spacing:.05em;
  padding:6px 10px;margin-top:6px;background:linear-gradient(90deg,rgba(46,95,158,.08),transparent);
  border-left:3px solid #2E5F9E;border-radius:4px}
.inp.sm{height:30px;font-size:12.5px;padding:0 8px}
.btn[disabled]{opacity:.45;cursor:not-allowed}

/* 详情特殊区块 */
.detail-block{background:#F7F9FC;border:1px solid #E4E9F2;border-radius:10px;padding:12px 14px;margin-bottom:12px}
.detail-block .db-title{font-size:13px;font-weight:700;color:#1F2329;margin-bottom:10px;display:flex;align-items:center;flex-wrap:wrap}
.ki-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px}
.ki-cell{background:#fff;border:1px solid #E4E9F2;border-radius:8px;padding:8px 10px}
.ki-cell span{display:block;font-size:11px;color:#8A8F99;margin-bottom:2px}
.ki-cell b{font-size:13px;color:#1F2329}
.transcript{background:#fff;border:1px solid #E4E9F2;border-radius:8px;padding:12px 14px;font-size:13px;line-height:1.9;color:#374151;max-height:220px;overflow:auto}
.stat-mini{display:grid;grid-template-columns:repeat(auto-fit,minmax(90px,1fr));gap:8px}
.stat-mini > div{background:#fff;border:1px solid #E4E9F2;border-radius:8px;padding:10px 8px;text-align:center}
.stat-mini b{display:block;font-size:20px;color:#2E5F9E;font-weight:700}
.stat-mini span{font-size:11px;color:#8A8F99}

/* 详情 */
.detail-row{display:flex;padding:9px 0;border-bottom:1px dashed #EEF0F3;gap:14px}
.detail-row:last-child{border-bottom:0}
.detail-row .dl{flex:none;width:110px;color:#8A8F99;font-size:13px}
.detail-row .dv{flex:1;font-size:13px;color:#1F2329;line-height:1.6;word-break:break-word}

/* ============ 晨会看板（大屏 · 深藏蓝） ============ */
.board{border-radius:14px;overflow:hidden;background:linear-gradient(135deg,#0A1E3D,#0F2847);color:#fff;padding:0 0 20px}
.board-head{display:flex;justify-content:space-between;align-items:center;padding:16px 24px;border-bottom:1px solid rgba(255,255,255,.12);font-size:18px}
.board-head b{letter-spacing:2px}
.board-head span{color:#8FB3E8;font-size:14px}
.board-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px;padding:16px 20px 4px}
.b-cell{background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.1);border-radius:12px;padding:16px 18px;min-height:150px}
.b-label{font-size:13px;color:#8FB3E8;letter-spacing:1px;margin-bottom:10px}
.b-num{font-size:56px;font-weight:700;line-height:1.1;font-family:'DIN Alternate',-apple-system,sans-serif}
.b-row{display:flex;gap:22px;font-size:15px;margin-top:10px}
.b-row.big{font-size:13px;color:#8FB3E8}
.b-row.big span{flex:1;text-align:center}
.b-row.big b{display:block;font-size:34px;color:#fff;margin-top:4px}
.b-row.sub{font-size:12.5px;color:#7A97C4}
.b-alert{background:rgba(238,10,36,.14);border-left:3px solid #EE5A6A;border-radius:6px;padding:9px 12px;font-size:14px;margin-bottom:8px}
.b-alert.dim{background:rgba(255,255,255,.06);border-left-color:#5A7CB4;color:#8FB3E8}
.bar-row{display:flex;align-items:center;gap:10px;margin-bottom:9px;font-size:13.5px}
.bar-name{width:64px;color:#C9DAF5;text-align:right;flex:none}
.bar-track{flex:1;height:14px;background:rgba(255,255,255,.08);border-radius:7px;overflow:hidden}
.bar-fill{height:100%;background:linear-gradient(90deg,#3771BB,#5FA0E8);border-radius:7px}
.bar-num{width:22px;color:#fff;font-weight:600}
.trend{display:flex;gap:8px;align-items:flex-end;height:88px;padding-top:4px}
.t-col{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;height:100%}
.t-col .t-bar{width:16px;background:linear-gradient(180deg,#5FA0E8,#3771BB);border-radius:3px 3px 0 0}
.t-col span{font-size:11px;color:#8FB3E8;margin-top:4px}
.t-col i{font-style:normal;font-size:11px;color:#fff}

/* ============ 一页纸周报（A4 单页） ============ */
.a4-page{background:#fff;border:1px solid #DDE3EC;border-radius:8px;max-width:820px;margin:0 auto;padding:36px 44px;box-shadow:0 2px 12px rgba(0,0,0,.06)}
.a4-title{font-size:22px;font-weight:700;text-align:center;letter-spacing:3px;padding-bottom:14px;border-bottom:2px solid #3771BB;margin-bottom:6px}
.a4-title span{font-size:14px;font-weight:400;color:#666;letter-spacing:0}
.a4-sec{margin-top:16px}
.a4-sec>b{display:block;font-size:15px;color:#3771BB;margin-bottom:6px}
.a4-row{font-size:13.5px;line-height:1.8;color:#323233}
.a4-row .a4-num{font-size:17px;color:#0A1E3D}
.a4-row .a4-ok{color:#07C160;font-size:15px}
.a4-row .a4-warn{color:#FF976A;font-size:15px}
@media print{
  .adm-top,.page-head,.biz-tools{display:none!important}
  .adm{padding:0!important}
  .a4-page{border:none;box-shadow:none;max-width:100%}
}

/* 网格添加模态按钮 */
.modal-ops{display:flex;justify-content:flex-end;gap:10px;margin-top:18px}
.btn-ghost{padding:9px 18px;border-radius:8px;border:1px solid #D5DBE7;background:#fff;color:#5A6B85;cursor:pointer;font-size:14px}
.btn-ghost:hover{background:#F4F6FA}

/* ===== 管理端手机适配（窄屏：顶部导航横滚 + 网格降列） ===== */
@media (max-width: 900px){
  .adm-top-in{flex-wrap:wrap;padding:8px 12px;gap:8px}
  .adm-top .sub{display:none}
  .adm-seg{width:100%;margin-left:0;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none}
  .adm-seg::-webkit-scrollbar{display:none}
  .adm-seg button{white-space:nowrap;padding:7px 12px;font-size:13px;flex:none}
  .adm-me span{display:none}
  .adm{padding:12px!important}
  .biz-table-wrap{overflow-x:auto}
  .stat-grid{grid-template-columns:repeat(2,1fr)!important}
  .dash-grid{grid-template-columns:1fr!important}
  .board-grid{grid-template-columns:1fr!important}
  .form-grid{grid-template-columns:1fr!important}
  .page-head{flex-direction:column;gap:8px;align-items:flex-start}
  .modal.wide{width:96vw!important}
  .a4-page{padding:20px 18px}
}

/* ===== 导航分区（业务区 | 后台配置区） ===== */
.nav-cap{font-size:11px;font-weight:700;color:#8A93A6;padding:0 4px 0 10px;letter-spacing:1px;flex:none;align-self:center}
.nav-div{width:1px;height:18px;background:#D5DBE7;margin:0 6px;flex:none;align-self:center}

/* ===== 网格管理卡片式 ===== */
.grid-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:16px}
.gs-card{background:#fff;border:1px solid var(--line);border-radius:12px;padding:14px 16px;text-align:center}
.gs-num{font-size:26px;font-weight:800;color:var(--blue)}
.gs-label{font-size:12px;color:var(--sub);margin-top:2px}
.village-sec{background:#fff;border:1px solid var(--line);border-radius:14px;padding:16px;margin-bottom:14px}
.village-head{display:flex;align-items:center;gap:8px;margin-bottom:12px;padding-bottom:10px;border-bottom:1px dashed #E7ECF3}
.village-name{font-size:15px;font-weight:700}
.grid-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px}
.gcard{border:1.5px solid #E7ECF3;border-radius:12px;padding:12px 14px;background:#FAFBFD;transition:all .18s}
.gcard:hover{border-color:var(--blue);box-shadow:0 4px 14px rgba(48,112,209,.12);transform:translateY(-2px)}
.gcard-top{display:flex;justify-content:space-between;align-items:center}
.gcard-ops{display:flex;gap:2px}
.gcard-officer{display:flex;gap:10px;align-items:center;background:#fff;border:1px solid #EDF0F6;border-radius:10px;padding:8px 10px}
.gcard-sel{display:flex;align-items:center;gap:8px;margin-top:10px;font-size:12px;color:var(--sub)}
.gcard-sel select{flex:1}
.av.sm{width:36px;height:36px;font-size:14px}
.obind{display:flex;align-items:center;gap:10px;background:#FAFBFD;border:1px solid #EDF0F6;border-radius:10px;padding:10px 12px}
.obind.warn{background:#FFF7F5;border-color:#F5D9D3}

/* 联动筛选 chip 选中态 / 在岗切换开关 */
.type-pill{cursor:pointer;background:#F0F3F8;border:none}
.type-pill.on{background:var(--blue,#3070D1);color:#fff}
.duty-dot{padding:4px 12px;border-radius:20px;border:1px solid #D5DBE7;background:#F4F6FA;color:#8A93A6;font-size:12px;cursor:pointer;transition:all .15s}
.duty-dot.on{background:#E8F7EE;border-color:#9FDDB6;color:#1D9E55}
.duty-dot.on::before{content:'● ';color:#1D9E55}
.duty-dot:hover{border-color:var(--blue,#3070D1)}

/* ===== 账号配置：头像 emoji 快选 ===== */
.avpick{display:flex;flex-wrap:wrap;gap:6px}
.avemj{width:34px;height:34px;border-radius:50%;border:1.5px solid #E2E7EF;background:#fff;font-size:17px;cursor:pointer;display:grid;place-items:center;transition:all .15s}
.avemj:hover{border-color:var(--blue,#3070D1);transform:scale(1.08)}
.avemj.on{border-color:var(--blue,#3070D1);background:#E8F1FF;box-shadow:0 0 0 2.5px rgba(48,112,209,.18)}
/* 列表小圆头像内的图片（复用 app.css img.avatar，保险起见补一份基础样式） */
.av.sm img.avatar{width:100%;height:100%;object-fit:cover;border-radius:50%;display:block}
