*{margin:0;padding:0;box-sizing:border-box}
body{font-family:'Microsoft YaHei','PingFang SC','Segoe UI',sans-serif;background:#f0f2f5;color:#333;font-size:14px}
:root{--primary:#1677ff;--gold:#c9942a;--gold-light:#f0c060;--success:#52c41a;--warning:#faad14;--danger:#ff4d4f;--border:#d9d9d9;--bg:#fff;--sidebar-w:220px}

/* 布局 */
#app{display:flex;height:100vh;overflow:hidden}
.sidebar{width:var(--sidebar-w);background:linear-gradient(180deg,#001529,#002b4d);color:#fff;display:flex;flex-direction:column;flex-shrink:0;overflow-y:auto}
.sidebar-logo{padding:20px 16px;font-size:16px;font-weight:700;border-bottom:1px solid rgba(255,255,255,.1);display:flex;align-items:center;gap:8px}
.sidebar-logo span{font-size:22px}
.sidebar-logo .logo-text{color:#f0c060;letter-spacing:1px}
.nav-group{padding:6px 0}
.nav-title{padding:9px 16px;font-size:12px;color:rgba(255,255,255,.45);text-transform:uppercase;letter-spacing:1px;cursor:pointer;user-select:none;display:flex;align-items:center;justify-content:space-between}
.nav-title::after{content:'▾';font-size:10px;margin-left:auto;padding-left:8px;transition:transform .2s;opacity:.7}
.nav-title:hover{color:rgba(255,255,255,.85)}
.nav-group.collapsed .nav-title::after{transform:rotate(-90deg)}
.nav-group.collapsed .nav-item{display:none}
.nav-item{padding:10px 16px 10px 32px;cursor:pointer;display:flex;align-items:center;gap:8px;transition:.2s;font-size:13px;color:rgba(255,255,255,.75)}
.nav-item:hover{background:rgba(255,255,255,.08);color:#fff}
.nav-item.active{background:var(--primary);color:#fff}
.nav-item .icon{width:16px;text-align:center;flex-shrink:0}
.main{flex:1;display:flex;flex-direction:column;overflow:hidden}
.topbar{background:#fff;padding:0 20px;height:48px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--border);flex-shrink:0}
.topbar-left{display:flex;align-items:center;gap:10px}
.topbar-title{font-size:16px;font-weight:600;color:#333}
.topbar-info{font-size:12px;color:#888}
.topbar-right{display:flex;align-items:center;gap:16px}
.topbar-user{display:flex;align-items:center;gap:10px}
.topbar-user .uname{font-size:13px;font-weight:600;color:#333}
.topbar-user .urole{font-size:12px;background:#e6f7ff;color:#0958d9;padding:2px 8px;border-radius:10px}
.logout-btn{font-size:12px;color:#999;cursor:pointer;border-left:1px solid #eee;padding-left:10px}
.logout-btn:hover{color:var(--danger)}
.menu-toggle{display:none;background:none;border:none;font-size:18px;cursor:pointer;color:#333}
.content{flex:1;overflow-y:auto;padding:20px}

/* 软件到期提醒：顶部常驻横幅 + 登录弹窗 */
.renew-banner{display:flex;align-items:center;gap:8px;padding:9px 20px;font-size:13px;background:#fff7e6;color:#ad6800;border-bottom:1px solid #ffe0a3;flex-shrink:0}
.renew-banner.urgent{background:#fff1f0;color:#cf1322;border-bottom-color:#ffccc7}
.renew-banner .rb-ico{font-size:15px}
.renew-banner .rb-txt{font-weight:600}
.renew-body{text-align:center;padding:4px 0 2px}
.renew-days{display:flex;align-items:flex-end;justify-content:center;gap:6px;color:#d48806;margin-bottom:10px}
.renew-days b{font-size:44px;line-height:1;font-weight:800;letter-spacing:-1px}
.renew-days span{font-size:13px;padding-bottom:5px}
.renew-p{font-size:14px;color:#333;line-height:1.7;margin:0 0 8px}
.renew-sub{font-size:12px;color:#999;margin:0;line-height:1.6}

/* 语言切换 */
.lang-select{position:relative;display:inline-flex;align-items:center}
.lang-select select{padding:5px 8px;border:1px solid #d9d9d9;border-radius:6px;font-size:12px;background:#fff;cursor:pointer;outline:none}
.lang-select select:hover{border-color:var(--primary)}
.lang-select .globe{font-size:14px;margin-right:4px}

/* 卡片 */
.card{background:#fff;border-radius:8px;padding:20px;margin-bottom:16px;box-shadow:0 1px 4px rgba(0,0,0,.08)}
.card-title{font-size:15px;font-weight:600;margin-bottom:16px;color:#333;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.card-title::before{content:'';width:3px;height:16px;background:var(--primary);border-radius:2px;display:inline-block}
.card-title .spacer{flex:1}
.card-tools{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.card-sub{font-size:12px;color:#999;font-weight:400;margin-left:4px}

/* 统计卡片 */
.stat-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:16px}
/* 报表页 6 卡布局：PC 端 6 列一行；移动端由媒体查询降级为 3/2/1 列，避免挤压变形 */
.stat-grid-6{grid-template-columns:repeat(6,1fr)}
/* 工作台 5 卡布局（存料欠料 / 存款欠款拆分后）：PC 端 5 列一行 */
.stat-grid-5{grid-template-columns:repeat(5,1fr)}
.stat-grid-3{grid-template-columns:repeat(3,1fr)}
.stat-card{background:#fff;border-radius:8px;padding:20px;box-shadow:0 1px 4px rgba(0,0,0,.08);position:relative;overflow:hidden;cursor:pointer;transition:.2s}
.stat-card:hover{transform:translateY(-2px);box-shadow:0 4px 12px rgba(0,0,0,.12)}
.stat-card::after{content:'';position:absolute;right:-10px;top:-10px;width:80px;height:80px;border-radius:50%;opacity:.08}
.stat-card.blue::after{background:var(--primary)}.stat-card.gold::after{background:var(--gold)}.stat-card.green::after{background:var(--success)}.stat-card.orange::after{background:var(--warning)}.stat-card.red::after{background:var(--danger)}
.stat-label{font-size:13px;color:#888;margin-bottom:8px}
.stat-value{font-size:26px;font-weight:700;color:#333}
.stat-value.wf{font-size:19px}
.stat-value.gold{color:var(--gold)}
.stat-sub{font-size:12px;color:#aaa;margin-top:4px}
/* 工作台存欠卡：存/欠两行等大字号布局 */
.stat-duo{display:flex;flex-direction:column;gap:5px;margin-top:2px}
.stat-duo .row{display:flex;justify-content:flex-start;align-items:baseline;font-size:17px;font-weight:600;color:#333;line-height:1.3}
.stat-duo .row .lbl{font-size:13px;font-weight:400;color:#888;margin-right:8px;flex-shrink:0}
.stat-duo .row.neg span:last-child{color:#e02020}
.stat-icon{position:absolute;right:16px;top:16px;font-size:28px;opacity:.25}

/* 表格 */
.table-wrap{overflow-x:auto}
table{width:100%;border-collapse:collapse}
th,td{padding:10px 12px;text-align:left;border-bottom:1px solid #f0f0f0;white-space:nowrap}
th{background:#fafafa;font-weight:600;color:#666;font-size:13px}
tr:hover td{background:#fafffe}
td .num{font-variant-numeric:tabular-nums}
.badge{display:inline-block;padding:2px 8px;border-radius:10px;font-size:12px;font-weight:500}
.badge-0{background:#fff7e6;color:#d46b08}.badge-1{background:#e6f7ff;color:#0958d9}.badge-2{background:#f6ffed;color:#389e0d}.badge-3{background:#f0f9ff;color:#1890ff}.badge-4{background:#f5f5f5;color:#666}
.badge-danger{background:#fff1f0;color:#cf1322}.badge-gold{background:#fff7e6;color:#c9942a}
.text-danger{color:#ff4d4f}.text-success{color:#52c41a}.text-warning{color:#faad14}.text-primary{color:#1677ff}.text-muted{color:#999}

/* 按钮 */
.btn{display:inline-flex;align-items:center;gap:4px;padding:6px 14px;border-radius:6px;border:1px solid var(--border);background:#fff;cursor:pointer;font-size:13px;transition:.2s;line-height:1;color:#333}
.btn:hover{border-color:var(--primary);color:var(--primary)}
.btn-primary{background:var(--primary);color:#fff;border-color:var(--primary)}.btn-primary:hover{background:#4096ff;border-color:#4096ff;color:#fff}
.btn-success{background:var(--success);color:#fff;border-color:var(--success)}.btn-success:hover{background:#73d13d;border-color:#73d13d;color:#fff}
.btn-warning{background:var(--warning);color:#fff;border-color:var(--warning)}.btn-warning:hover{background:#ffc53d;border-color:#ffc53d;color:#fff}
.btn-danger{background:var(--danger);color:#fff;border-color:var(--danger)}.btn-danger:hover{background:#ff7875;border-color:#ff7875;color:#fff}
.btn-gold{background:var(--gold);color:#fff;border-color:var(--gold)}.btn-gold:hover{background:#e0a92f;border-color:#e0a92f;color:#fff}
.btn-sm{padding:3px 8px;font-size:12px}
.btn-link{border:none;background:none;color:var(--primary);cursor:pointer;padding:2px 4px;font-size:12px}
.btn-link:hover{text-decoration:underline}
.btn-link.danger{color:var(--danger)}

/* 表单 */
.form-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px 20px}
.form-grid-2{display:grid;grid-template-columns:repeat(2,1fr);gap:12px 20px}
.form-row{display:flex;flex-direction:column;gap:4px}
.form-row label{font-size:13px;color:#555;font-weight:600}
.form-row label .req{color:#ff4d4f;margin-left:2px}
.form-row input,.form-row select,.form-row textarea{width:100%;padding:8px 10px;border:1px solid #d9d9d9;border-radius:6px;font-size:13px;outline:none;transition:.2s;background:#fff}
.form-row input:focus,.form-row select:focus,.form-row textarea:focus{border-color:var(--primary);box-shadow:0 0 0 2px rgba(22,119,255,.12)}
/* 金额框输入负数时的错误提示（红框） */
.form-row input.inp-err{border-color:#e02020;box-shadow:0 0 0 2px rgba(224,32,32,.15)}
.form-row textarea{resize:vertical;min-height:60px}
.form-row .hint{font-size:12px;color:#999;font-weight:400}

/* 搜索栏 */
.filter-bar{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:16px}
.filter-bar input,.filter-bar select{padding:7px 10px;border:1px solid #d9d9d9;border-radius:6px;font-size:13px;outline:none;min-width:140px}
.filter-bar input:focus,.filter-bar select:focus{border-color:var(--primary)}

/* AI 助手栏（仅移动端显示，桌面端隐藏） */
.ai-bar{display:none;align-items:center;gap:10px;background:linear-gradient(135deg,#eef4ff,#f6f9ff);border:1px solid #c8d8f8;border-radius:10px;padding:12px 14px;margin-bottom:14px;flex-wrap:wrap}
.ai-bar .ai-ico{font-size:22px}
.ai-input{flex:1;min-width:220px;padding:10px 14px;border:1px solid #adc6ff;border-radius:8px;font-size:14px;outline:none;background:#fff}
.ai-input:focus{border-color:var(--primary);box-shadow:0 0 0 2px rgba(22,119,255,.12)}
.ai-bar .btn{padding:10px 20px;font-size:14px}
.ai-model{max-width:190px;padding:9px 10px;border:1px solid #adc6ff;border-radius:8px;font-size:13px;background:#fff;color:#334;outline:none;cursor:pointer}
.ai-model:focus{border-color:var(--primary)}
.ai-bar .btn:disabled{opacity:.6;cursor:not-allowed}
.ai-tip{flex-basis:100%;font-size:12px;color:#7b8aa6;line-height:1.6}
.ai-status{flex-basis:100%;display:flex;align-items:center;gap:8px;font-size:13px;color:#1677ff;font-weight:500}
.ai-status[hidden]{display:none}
.ai-spin{width:14px;height:14px;border:2px solid #c8d8f8;border-top-color:#1677ff;border-radius:50%;animation:aiSpin .7s linear infinite;flex-shrink:0}
@keyframes aiSpin{to{transform:rotate(360deg)}}
.ai-draft-hint{margin:0 0 10px;padding:8px 12px;background:#fff7e6;border:1px solid #ffe0a3;border-radius:8px;font-size:13px;color:#ad6800;line-height:1.6}
.ai-pick-opt{background:#fff;border:1px solid #d9d9d9;color:#333;border-radius:8px;padding:10px 14px;font-size:14px;cursor:pointer}
.ai-pick-opt:hover{border-color:var(--primary);color:var(--primary);background:#f0f5ff}
.ai-pick-none{background:none;border:none;color:#999;font-size:13px;cursor:pointer}
.ai-pick-none:hover{color:#333}

/* 扫码 */
.scan-box{display:flex;align-items:center;gap:8px;background:linear-gradient(135deg,#fffbe6,#fff7e6);border:1px solid #ffe58f;border-radius:8px;padding:10px 14px;margin-bottom:12px}
.scan-box input{flex:1;padding:9px 12px;border:1px solid #ffd666;border-radius:6px;font-size:14px;outline:none;letter-spacing:.5px}
.scan-box input:focus{border-color:var(--gold);box-shadow:0 0 0 2px rgba(201,148,42,.15)}
.scan-box .scan-ico{font-size:20px}
.scan-result{font-size:13px;padding:8px 12px;border-radius:6px;margin-bottom:10px}
.scan-result.ok{background:#f6ffed;color:#389e0d;border:1px solid #b7eb8f}
.scan-result.err{background:#fff1f0;color:#cf1322;border:1px solid #ffa39e}
.bc-chip{display:inline-flex;align-items:center;gap:4px;background:#f0f5ff;color:#0958d9;border:1px solid #adc6ff;border-radius:4px;padding:1px 6px;font-size:12px;margin:1px 2px;font-family:monospace}

/* 弹窗 */
.modal-mask{position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:9990;display:flex;align-items:center;justify-content:center;padding:20px}
.modal{background:#fff;border-radius:10px;width:96%;max-width:860px;max-height:92vh;display:flex;flex-direction:column;box-shadow:0 20px 60px rgba(0,0,0,.3);animation:pop .18s ease}
.modal.sm{max-width:520px}.modal.lg{max-width:1080px}
@keyframes pop{from{transform:scale(.96);opacity:0}to{transform:scale(1);opacity:1}}
.modal-head{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid #f0f0f0}
.modal-head h3{font-size:16px;font-weight:600}
.modal-close{border:none;background:none;font-size:20px;color:#999;cursor:pointer;line-height:1}
.modal-close:hover{color:#333}
.modal-body{padding:20px;overflow-y:auto;flex:1}
.modal-foot{padding:14px 20px;border-top:1px solid #f0f0f0;display:flex;justify-content:flex-end;gap:10px}

/* 登录 */
#login-overlay{position:fixed;inset:0;background:linear-gradient(135deg,#001529 0%,#003566 100%);display:flex;align-items:center;justify-content:center;z-index:10000}
#login-overlay.hidden{display:none}
.login-box{background:#fff;border-radius:12px;padding:40px 48px;width:400px;box-shadow:0 20px 60px rgba(0,0,0,.4)}
.login-logo{text-align:center;margin-bottom:28px}
.login-logo .icon{font-size:42px;display:block;margin-bottom:8px}
.login-logo h2{font-size:20px;color:#333;font-weight:700}
.login-logo p{font-size:13px;color:#999;margin-top:4px}
.login-field{margin-bottom:16px}
.login-field label{display:block;font-size:13px;color:#555;margin-bottom:6px;font-weight:600}
.login-field input{width:100%;padding:10px 12px;border:1px solid #d9d9d9;border-radius:6px;font-size:14px;outline:none;transition:.2s}
.login-field input:focus{border-color:var(--primary);box-shadow:0 0 0 2px rgba(22,119,255,.15)}
.login-btn{width:100%;padding:11px;background:var(--primary);color:#fff;border:none;border-radius:6px;font-size:15px;font-weight:600;cursor:pointer;margin-top:8px;transition:.2s}
.login-btn:hover{background:#0958d9}
.login-err{color:#ff4d4f;font-size:13px;margin-top:10px;min-height:18px;text-align:center}
.login-hint{margin-top:14px;font-size:12px;color:#aaa;text-align:center;background:#fafafa;border:1px dashed #e5e5e5;border-radius:6px;padding:8px}
.login-platform-entry{margin-top:12px;text-align:center}
.login-platform-entry a{font-size:12px;color:var(--primary);text-decoration:none}
.login-platform-entry a:hover{text-decoration:underline}
.login-lang{position:absolute;top:18px;right:20px}
.login-field select{width:100%;padding:10px 12px;border:1px solid #d9d9d9;border-radius:6px;font-size:14px;outline:none;background:#fff;transition:.2s}
.login-field select:focus{border-color:var(--primary);box-shadow:0 0 0 2px rgba(22,119,255,.15)}
.login-tabs{display:flex;gap:8px;margin:2px 0 16px;border-bottom:1px solid #eee;padding-bottom:10px}
.login-tab{flex:1;padding:8px 0;border:none;background:none;font-size:14px;color:#888;cursor:pointer;border-bottom:2px solid transparent;transition:.2s;font-weight:600}
.login-tab:hover{color:#333}
.login-tab.active{color:var(--primary);border-bottom-color:var(--primary)}

/* 通用分段页签（期初建账等多分区页面） */
.seg-tabs{display:flex;gap:2px;border-bottom:1px solid var(--border);margin:6px 0 16px;overflow-x:auto}
.seg-tab{padding:9px 18px;border:none;background:none;font-size:14px;color:#888;cursor:pointer;border-bottom:2px solid transparent;transition:.2s;font-weight:600;white-space:nowrap}
.seg-tab:hover{color:#333}
.seg-tab.active{color:var(--primary);border-bottom-color:var(--primary)}
.op-inp{width:140px;padding:5px 8px;border:1px solid var(--border);border-radius:6px;font-size:13px;text-align:right}
.op-inp:disabled{background:#f7f7f7;color:#555}
.op-txt{width:100%;max-width:520px;padding:6px 8px;border:1px solid var(--border);border-radius:6px;font-size:13px}
.op-hint{margin-top:12px;font-size:12px;color:#999;line-height:1.7}
.login-panel{animation:fadeIn .25s ease}
.login-code-row{display:flex;gap:8px}
.login-code-row input{flex:1;width:auto}
.login-code-btn{flex-shrink:0;padding:0 14px;border:1px solid var(--primary);background:#fff;color:var(--primary);border-radius:6px;font-size:13px;cursor:pointer;white-space:nowrap;transition:.2s}
.login-code-btn:hover{background:var(--primary);color:#fff}
.login-code-btn:disabled{opacity:.6;cursor:not-allowed}
.oauth-desc{font-size:13px;color:#888;text-align:center;margin:6px 0 16px;line-height:1.5}
.oauth-btn{width:100%;padding:12px;border:none;border-radius:6px;font-size:15px;font-weight:600;cursor:pointer;color:#fff;transition:.2s;display:flex;align-items:center;justify-content:center;gap:8px}
.oauth-btn .oauth-ico{font-size:18px}
.oauth-wechat{background:#07c160}
.oauth-wechat:hover{background:#06a954}
.oauth-qq{background:#12b7f5}
.oauth-qq:hover{background:#0e9fd8}
.tenant-badge{display:inline-block;background:rgba(22,119,255,.1);color:var(--primary);font-size:12px;padding:2px 8px;border-radius:10px;margin-right:10px;font-weight:600}
@keyframes fadeIn{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}

/* 图表 */
.chart-box{width:100%;overflow:auto}
.chart-legend{display:flex;gap:16px;flex-wrap:wrap;font-size:12px;color:#666;margin-top:8px}
.chart-legend .dot{display:inline-block;width:10px;height:10px;border-radius:2px;margin-right:4px;vertical-align:middle}
.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.dash-duo{display:grid;grid-template-columns:1fr 1fr;gap:16px}

/* 存欠料/款卡片（平板/手机端展示，PC 端隐藏） */
.dash-bal-cards{display:none}
.bal-card{background:#fff;border:1px solid #eee;border-radius:10px;overflow:hidden}
.bal-card-head{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:10px 12px;background:#fafafa;border-bottom:1px solid #f0f0f0}
.bal-name{font-size:14px;font-weight:600;color:#333;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.bal-card-grid{display:grid;grid-template-columns:1fr 1fr;gap:1px;background:#f0f0f0}
.bal-item{background:#fff;padding:10px 12px;display:flex;flex-direction:column;gap:3px;min-width:0}
.bal-l{font-size:11px;color:#999}
.bal-v{font-size:14px;font-weight:600;color:#333;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.bal-v.neg{color:#e02020}

/* 净重饼图 */
.pie-wrap{display:flex;flex-direction:column;align-items:center}
.pie-box{width:220px;max-width:100%}
.pie-wrap .chart-legend{justify-content:center;margin-top:12px}

/* 最近单据卡片（入库单/销售出库单样式） */
.doc-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:12px}
.doc-card{border:1px solid #eee;border-radius:8px;overflow:hidden;cursor:pointer;transition:.15s;background:#fff}
.doc-card:hover{box-shadow:0 4px 14px rgba(0,0,0,.08);transform:translateY(-1px)}
.doc-card .doc-head{display:flex;align-items:center;gap:8px;padding:9px 12px;color:#fff;font-size:13px}
.doc-card .doc-badge{font-weight:700}
.doc-card .doc-code{margin-left:auto;font-size:12px;opacity:.9;letter-spacing:.3px}
.doc-po .doc-head{background:linear-gradient(90deg,#c9942a,#e0b45c)}
.doc-so .doc-head{background:linear-gradient(90deg,#1677ff,#4c9bff)}
.doc-ex .doc-head{background:linear-gradient(90deg,#8b5cf6,#b197fc)}
.doc-card .doc-body{display:grid;grid-template-columns:1fr 1fr;gap:8px 14px;padding:12px}
.doc-cell{display:flex;flex-direction:column;min-width:0}
.doc-l{font-size:11px;color:#999;margin-bottom:2px}
.doc-v{font-size:13px;color:#333;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.doc-v.gold{color:#c9942a}

/* 其它 */
.empty{text-align:center;color:#999;padding:40px 0;font-size:13px}
.toast{position:fixed;top:60px;left:50%;transform:translateX(-50%);background:#333;color:#fff;padding:10px 20px;border-radius:6px;z-index:99999;font-size:13px;opacity:0;transition:.3s;pointer-events:none;max-width:80vw}
.toast.show{opacity:1;top:70px}
.toast.success{background:#52c41a}.toast.error{background:#ff4d4f}
.item-row{display:grid;grid-template-columns:0.9fr 1.3fr 0.6fr 0.65fr 0.55fr 0.65fr 0.8fr 0.65fr 0.9fr 0.9fr 30px;gap:6px;align-items:center;margin-bottom:8px}
.item-row select,.item-row input{padding:6px 8px;border:1px solid #d9d9d9;border-radius:5px;font-size:12px;width:100%}
.ex-item-row{display:grid;grid-template-columns:1.3fr 0.6fr 0.65fr 0.55fr 0.65fr 0.65fr 0.9fr 0.9fr 30px;gap:6px;align-items:center;margin-bottom:8px}
.ex-item-row select,.ex-item-row input{padding:6px 8px;border:1px solid #d9d9d9;border-radius:5px;font-size:12px;width:100%}
.ex-item-row .ex-no-fee{font-size:12px;color:#aaa;text-align:center}
.ex-head{font-weight:600;color:#666;font-size:12px}
.ex-side-head{display:flex;align-items:center;gap:8px;font-weight:700;font-size:13px;padding:8px 10px;border-radius:6px;margin-bottom:8px}
.ex-side-head.gold{background:#fdf6e3;color:#8a6d1a}
.ex-side-head.blue{background:#eef4ff;color:#2456a6}
.ex-side-sub{font-weight:500;font-size:12px;color:#888}
.ex-net-line{margin-top:10px;padding:8px 10px;border-radius:6px;background:#f6f8fa;font-size:13px;font-weight:600;display:flex;gap:16px;flex-wrap:wrap}
.pager-bar{display:flex;align-items:center;gap:10px;margin-top:10px;font-size:12px;color:#666;flex-wrap:wrap}
.pager-bar .pg-info{white-space:nowrap}
.pager-bar .pg-size{padding:4px 6px;border:1px solid #d9d9d9;border-radius:5px;font-size:12px}
.pager-bar .pg-btns{display:flex;gap:4px;align-items:center}
.owe-info{margin:10px 0 4px;padding:8px 12px;background:#fdf8ee;border:1px solid #f0e2c0;border-radius:6px;font-size:13px;color:#8a6d1a;font-weight:600}
.pager-bar .pg-btn{min-width:28px;padding:4px 8px;border:1px solid #d9d9d9;border-radius:5px;background:#fff;cursor:pointer;font-size:12px}
.pager-bar .pg-btn:hover:not(:disabled){border-color:#c8a24a;color:#a87f2f}
.pager-bar .pg-btn.active{background:#c8a24a;border-color:#c8a24a;color:#fff}
.pager-bar .pg-btn:disabled{opacity:.4;cursor:default}
.pager-bar .pg-dots{color:#999;padding:0 2px}
table tfoot tr{border-top:2px solid #eee}
.items-scroll{overflow-x:auto;padding-bottom:4px}
/* 明细字段包裹：桌面端 display:contents 保持原网格布局；移动端在媒体查询中变为带标签表单项 */
.fld{display:contents}
.order-meta{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:14px}
.order-meta .it{background:#fafafa;border:1px solid #f0f0f0;border-radius:6px;padding:10px 12px}
.order-meta .it .l{font-size:12px;color:#999;margin-bottom:4px}
.order-meta .it .v{font-size:16px;font-weight:600}
.order-meta .it .v.gold{color:var(--gold)}
.order-meta .it input,.order-meta .it select{width:100%;padding:5px 8px;border:1px solid #d9d9d9;border-radius:5px;font-size:13px}

@media(max-width:900px){
  .stat-grid{grid-template-columns:repeat(2,1fr)}.stat-grid-5{grid-template-columns:repeat(2,1fr)}.grid-2,.dash-duo{grid-template-columns:1fr}.form-grid{grid-template-columns:1fr 1fr}.order-meta{grid-template-columns:1fr 1fr}
  .stat-grid-6{grid-template-columns:repeat(3,1fr)}
  /* 存欠料/款：平板/手机端切换为卡片式，隐藏表格 */
  .dash-bal-table{display:none}
  .dash-bal-cards{display:grid;grid-template-columns:1fr;gap:10px}
  /* 近14天趋势图：移动端不加载 */
  .dash-trend-card{display:none}
  /* 列表表格卡片化（收料/换料/出料/收付款/费用/提成/发票/期初/期末/用户） */
  .mcard{display:block!important}
  .mcard thead{display:none}
  .mcard tfoot{display:none}
  .mcard tbody{display:block}
  .mcard tbody tr{display:block;border:1px solid #eee;border-radius:10px;padding:10px 12px;margin-bottom:10px;background:#fff;box-shadow:0 1px 3px rgba(0,0,0,.04)}
  /* 费用明细移动端卡片：支出 / 收入用不同左色条与底色区分（PC 表格样式不变） */
  .mcard tbody tr.fin-exp-row{border-left:4px solid #e02020;background:#fff7f7}
  .mcard tbody tr.fin-inc-row{border-left:4px solid #18a058;background:#f3fbf5}
  .mcard tbody td{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:7px 0;border:none;border-bottom:1px dashed #f0f0f0;font-size:14px;text-align:right;word-break:break-word;min-width:0}
  .mcard tbody td::before{content:attr(data-label);font-size:12px;color:#999;flex-shrink:0;text-align:left;font-weight:600}
  .mcard tbody td:last-child{border-bottom:none}
  .mcard tbody td[data-label=""]::before{content:none}
  .mcard tbody td .dept-tag{margin-left:6px}
  .mcard tbody td.empty{display:block;text-align:center;color:#999;border:none;padding:20px 0}
  .mcard tbody td.empty::before{content:none}
  /* 操作列：按钮横排、不显示列名 */
  .mcard tbody td.td-op{display:flex;flex-wrap:wrap;gap:6px;border-bottom:none;justify-content:flex-end}
  .mcard tbody td.td-op::before{content:none}
  .mcard tbody td.td-op .btn-link,.mcard tbody td.td-op .btn{margin:0}
  .mcard tbody td input,.mcard tbody td select{flex:1;min-width:0;font-size:16px;padding:6px 8px}
  /* 页头操作按钮：移动端独占一行、均分铺满，保证「新增/打印/导出Excel/导出PDF」可见易点 */
  .card-title{row-gap:10px}
  .card-tools{flex-basis:100%;width:100%;gap:8px}
  .card-tools .btn{flex:1 1 auto;justify-content:center;min-height:40px;font-size:14px;padding:8px 12px}
  .card-tools select{flex:1 1 auto;min-height:40px;font-size:16px}
  .card-tools .badge{flex:0 0 auto;align-self:center}
  /* 卡片内操作列按钮：加大触控，便于手机点按 */
  .mcard tbody td.td-op .btn-link{font-size:14px;padding:7px 10px;min-height:34px;border:1px solid #e5e5e5;border-radius:6px;background:#fff;text-decoration:none;line-height:1}
  .mcard tbody td.td-op .btn-link.danger{color:var(--danger);border-color:#ffd6d6}
  .menu-toggle{display:block}
  .sidebar{position:fixed;left:-220px;top:0;bottom:0;z-index:9999;transition:.25s}.sidebar.open{left:0}
  .sidebar-mask{position:fixed;inset:0;background:rgba(0,0,0,.4);z-index:9998;display:none}.sidebar-mask.show{display:block}
}
@media(max-width:640px){
  .stat-grid{grid-template-columns:1fr 1fr;gap:10px}
  .stat-grid-6{grid-template-columns:1fr 1fr}
  .stat-grid-3{grid-template-columns:1fr}
  .stat-card{padding:14px}
  .stat-value{font-size:20px;overflow-wrap:anywhere}
  .stat-sub{overflow-wrap:anywhere}
  .form-grid,.form-grid-2{grid-template-columns:1fr}
  .order-meta{grid-template-columns:1fr}
  .content{padding:12px}
  .topbar{padding:0 12px;height:auto;min-height:48px;flex-wrap:wrap;gap:6px}
  .topbar-title{font-size:14px}
  .topbar-info{display:none}
  .topbar-right{gap:10px;flex-wrap:wrap}
  .card{padding:14px}
  .login-box{width:92%;padding:28px 20px}

  /* ---- 移动端弹窗：全屏化 + 底部操作栏 ---- */
  .modal-mask{padding:0;align-items:flex-end}
  .modal{width:100%;max-width:100%;max-height:94dvh;border-radius:14px 14px 0 0;animation:sheetUp .22s ease}
  .modal.sm,.modal.lg{max-width:100%}
  @keyframes sheetUp{from{transform:translateY(24px);opacity:.6}to{transform:none;opacity:1}}
  .modal-head{padding:13px 14px}
  .modal-head h3{font-size:15px}
  .modal-body{padding:14px}
  .modal-foot{position:sticky;bottom:0;background:#fff;padding:10px 14px calc(10px + env(safe-area-inset-bottom));box-shadow:0 -4px 12px rgba(0,0,0,.06)}
  .modal-foot .btn{flex:1;justify-content:center;padding:11px 14px;font-size:15px}
  /* 弹窗内输入框加大字号，避免 iOS 聚焦自动缩放 */
  .modal input,.modal select,.modal textarea{font-size:16px}
  .modal .btn{min-height:36px}

  /* ---- 明细行卡片化：告别横向拖动 ---- */
  .items-scroll{overflow:visible}
  .item-row,.ex-item-row{display:grid;grid-template-columns:1fr 1fr!important;gap:9px 10px;border:1px solid #eee;border-radius:10px;padding:12px;position:relative;background:#fff;min-width:0!important;margin-bottom:10px;box-shadow:0 1px 3px rgba(0,0,0,.05)}
  .item-row.row-head,.ex-item-row.ex-head{display:none}
  .fld{display:flex;align-items:center;gap:8px;min-width:0}
  .fld::before{content:attr(data-lb);font-size:12px;color:#999;flex-shrink:0;min-width:4.4em;font-weight:600}
  .fld.wide{grid-column:1/-1}
  .fld.del{position:absolute;top:8px;right:8px}
  .fld.del::before{content:none}
  .fld.del .btn{padding:4px 10px}
  .item-row input,.item-row select,.ex-item-row input,.ex-item-row select{font-size:16px;padding:8px 10px;flex:1;min-width:0}
  .item-row input[readonly],.ex-item-row input[readonly]{background:#fafafa}
  .ex-no-fee{flex:1;text-align:center;color:#bbb}
  .pager-bar{justify-content:center}

  /* ---- AI 助手栏 + 筛选栏移动端 ---- */
  .ai-bar{display:flex;gap:8px;padding:10px 12px}
  .ai-input{flex-basis:100%;min-width:0}
  .ai-model{max-width:none;flex:1;min-width:0}
  .ai-bar .btn{flex:1}
  .filter-bar input,.filter-bar select{flex:1;min-width:0}
  .filter-bar .btn{flex:1}
  /* ---- 收料/换料/出料列表查询条件：移动端网格化（往来单位/状态整行，日期并排，关键词+重置整行） ---- */
  .doc-filter{display:grid;grid-template-columns:1fr 1fr;gap:8px}
  .doc-filter select{grid-column:1/-1;width:100%}
  .doc-filter input{width:100%;min-width:0}
  .doc-filter input[type=date]{grid-column:auto}
  .doc-filter input:not([type=date]){grid-column:1/-1}
  .doc-filter .btn{grid-column:1/-1;width:100%}

  /* ---- 日志查询：筛选栏两列排布，关键词整行 ---- */
  .al-filter{display:grid;grid-template-columns:1fr 1fr;gap:8px}
  .al-filter #al-q{grid-column:1/-1}
  .al-filter input,.al-filter select{width:100%;min-width:0}
  /* ---- 日志详情：修改前后字段对比表转 KV 卡片 ---- */
  .al-kv thead{display:none}
  .al-kv tbody{display:block}
  .al-kv tr{display:block;border-bottom:1px dashed #eee;padding:8px 0}
  .al-kv tr:last-child{border-bottom:none}
  .al-kv td{display:block;width:100%!important;padding:0;border:none}
  .al-kv td:first-child{font-size:12px;color:#999;font-weight:600;margin-bottom:3px}
  .al-kv td:last-child{font-size:14px;word-break:break-all;white-space:normal}

  /* ---- 单据详情弹窗：明细表转 KV 卡片（PC 端不变）---- */
  .doc-items{overflow:visible}
  .doc-items table,.doc-items tbody,.doc-items tfoot{display:block;min-width:0!important}
  .doc-items thead{display:none}
  .doc-items tr{display:block;border:1px solid #eee;border-radius:10px;padding:6px 12px;margin-bottom:8px;background:#fff;box-shadow:0 1px 3px rgba(0,0,0,.04)}
  .doc-items td{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:5px 0;border:none;text-align:right!important;font-size:13px;word-break:break-all}
  .doc-items td::before{content:attr(data-l);font-size:12px;color:#999;flex-shrink:0;font-weight:600;text-align:left}
  .doc-items td:not([data-l]){display:none}
  .doc-items tfoot tr{background:#fafdf6;border-color:#e2efd8}
  .doc-items tfoot td::before{color:#666}

  /* ---- 对账管理：往来单位卡片两列网格，单位名作卡片标题 ---- */
  .recon-cards tr{display:grid;grid-template-columns:1fr 1fr;gap:2px 12px;padding:10px 12px}
  .recon-cards td:first-child{grid-column:1/-1;justify-content:flex-start;text-align:left!important;border-bottom:1px dashed #eee;padding-bottom:6px;margin-bottom:4px;font-size:14px}
  .recon-cards td:first-child::before{content:none}
  .recon-cards td .badge{flex-shrink:0}
}
@media(max-width:400px){
  .stat-grid,.stat-grid-5,.stat-grid-6{grid-template-columns:1fr}
  .login-lang{top:10px;right:10px}
}

/* ===== 权限分配（用户管理）===== */
.perm-sec-title,.pd-sec-title{font-weight:600;font-size:13px;color:#8a6d1f;margin:16px 0 8px;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.perm-tip{font-weight:400;font-size:12px;color:#aaa}
.perm-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
.perm-cell{display:flex;align-items:center;gap:6px;padding:7px 10px;border:1px solid #e8e8e8;border-radius:8px;font-size:13px;cursor:pointer;background:#fafafa;user-select:none;transition:.15s}
.perm-cell:hover{border-color:#d4af37}
.perm-cell.on{background:#fffaf0;border-color:#e0b84c;color:#8a6d1f;font-weight:600}
.perm-cell input{margin:0;flex:none}
.perm-chk{accent-color:#d4af37}
.perm-tag{display:inline-block;margin:2px 4px 2px 0;padding:1px 7px;border-radius:10px;font-size:11px;background:#fff3f0;color:#c0392b;border:1px solid #f3d3cd}
.perm-tag.ok{background:#f0faf3;color:#1e9e5a;border-color:#cdeed9}
.perm-lock{color:#c9a227;font-size:13px}
.perm-groups{display:flex;flex-direction:column;gap:10px;max-height:420px;overflow:auto;padding:2px}
.perm-group{border:1px solid #eee;border-radius:10px;padding:8px 10px;background:#fff}
.perm-group-name{font-size:13px;font-weight:700;color:#333;margin-bottom:6px}
.perm-subname{font-size:12px;color:#8a6d3b;font-weight:600;margin:8px 0 4px}
.dept-filter{display:flex;align-items:center;gap:5px;margin-right:12px;font-size:13px}
.dept-filter select{height:30px;border:1px solid #e3d9c8;border-radius:6px;background:#fffdf8;padding:0 6px;font-size:13px;color:#5b4a2f;max-width:150px}
.dept-tag{display:inline-block;padding:2px 8px;border-radius:99px;background:#f4ede1;color:#8a6d3b;font-size:12px;font-weight:600}
.perm-cells{display:flex;flex-wrap:wrap;gap:6px}
.perm-cells .perm-cell{padding:5px 9px;font-size:12px}
/* 审批流程开关 */
.switch-row{display:flex;align-items:center;gap:10px;cursor:pointer;user-select:none}
.switch-row input{display:none}
.switch-ui{position:relative;width:44px;height:24px;border-radius:99px;background:#ccc;transition:.18s;flex:none}
.switch-ui:before{content:'';position:absolute;top:3px;left:3px;width:18px;height:18px;border-radius:50%;background:#fff;transition:.18s}
.switch-row input:checked + .switch-ui{background:#1e9e5a}
.switch-row input:checked + .switch-ui:before{left:23px}
/* ===== 期末处理 ===== */
.pd-period{padding:5px 8px;border:1px solid #ddd;border-radius:6px;font-size:13px;background:#fff;margin-left:8px}
.pd-chk{font-weight:700}
.pd-chk.good{color:#1e9e5a}
.pd-chk.bad{color:#c0392b}
@media(max-width:900px){.perm-grid{grid-template-columns:1fr 1fr}}
@media(max-width:560px){.perm-grid{grid-template-columns:1fr}}

/* ===== 数据导入导出中心 ===== */
.io-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}
.io-grid .form-row{margin:0}
.io-actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:14px}
.io-chip{display:inline-block;margin:3px 5px 0 0;padding:1px 8px;border-radius:10px;font-size:12px;background:#f4f6f8;color:#5a6472;border:1px solid #e6eaef}
.io-chip.req{background:#fff7e6;color:#a8760f;border-color:#f0dca6}
.io-prev{margin-top:4px;max-height:320px;overflow:auto}
.io-prev table{font-size:13px}
.io-prev th{vertical-align:top;background:#fafbfc;min-width:120px}
.io-col{color:#8a6d1f;font-weight:600;margin-bottom:4px}
.io-map-sel{width:100%;font-size:12px;padding:3px 4px;border:1px solid #ddd;border-radius:6px;background:#fff}
.io-res{display:flex;gap:8px;flex-wrap:wrap;margin-top:14px}
.io-badge{padding:5px 12px;border-radius:8px;font-size:13px;background:#f4f6f8;color:#4b5563;border:1px solid #e6eaef}
.io-badge.ok{background:#f0faf3;color:#1e9e5a;border-color:#cdeed9}
.io-badge.warn{background:#fff8ec;color:#b5760b;border-color:#f2e0b8}
.io-errs{margin-top:12px;font-size:13px;color:#c0392b}
.io-errs ul{margin:6px 0 0;padding-left:20px;max-height:240px;overflow:auto}
.io-errs li{margin:2px 0}
@media(max-width:820px){.io-grid{grid-template-columns:1fr}}

/* ===== 项目台账 ===== */
.prj-prog{display:inline-block;width:72px;height:8px;border-radius:4px;background:#eee;vertical-align:middle;overflow:hidden}
.prj-prog-bar{height:100%;border-radius:4px;transition:width .3s}
.prj-prog-ok{background:#52c41a}
.prj-prog-warn{background:#faad14}
.prj-prog-bad{background:#c0392b}
.prj-prog-txt{font-size:12px;color:#888;margin-left:6px;vertical-align:middle}
/* ===== 数据报表中心 ===== */
.rp-custom{display:inline-flex;gap:6px;align-items:center;font-size:12px;color:#888}

/* ===== 数据清除（按模块）===== */
.pg-warn{background:#fffbe6;border:1px solid #ffe58f;border-radius:8px;padding:10px 12px;font-size:13px;line-height:1.8;color:#874d00;margin-bottom:14px}
.pg-grp{margin-bottom:14px}
.pg-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:10px}
.pg-cell{display:flex;gap:8px;align-items:flex-start;border:1px solid #eee;border-radius:8px;padding:10px 12px;cursor:pointer;background:#fff;transition:.15s}
.pg-cell:hover{border-color:#d9b26a}
.pg-cell.on{border-color:#c99a2e;background:#fffdf5;box-shadow:0 0 0 1px #f0dcae inset}
.pg-cell.blocked{border-color:#ffccc7;background:#fff8f7}
.pg-cell.locked{cursor:default;background:#fafafa;border-style:dashed;opacity:.9}
.pg-cell input{margin-top:2px}
.pg-main{flex:1;min-width:0}
.pg-name{font-size:13px;font-weight:600;color:#333;display:flex;align-items:center;gap:6px}
.pg-num{background:#f5f5f5;color:#8c8c8c;border-radius:9px;padding:0 7px;font-size:11px;font-weight:600}
.pg-cell.on .pg-num{background:#fdf1d6;color:#a67c12}
.pg-sub{font-size:11px;color:#999;margin-top:3px;word-break:break-all}
.pg-lock{font-size:11px;color:#cf1322;margin-top:4px;line-height:1.6}
.pg-actions{display:flex;align-items:center;gap:8px;margin-top:6px;flex-wrap:wrap}
.pg-actions .spacer{flex:1}
.pg-run{display:flex;align-items:flex-end;gap:12px;margin-top:14px;padding-top:14px;border-top:1px dashed #eee;flex-wrap:wrap}
.pg-run .form-row{flex:1;min-width:260px;margin:0}
.pg-res{border-radius:8px;padding:12px 14px;font-size:13px;line-height:1.8;margin-top:12px}
.pg-res.ok{background:#f6ffed;border:1px solid #b7eb8f}
.pg-res.bad{background:#fff1f0;border:1px solid #ffa39e}
.pg-res-title{font-weight:600;margin-bottom:4px}
.pg-res.ok .pg-res-title{color:#389e0d}
.pg-res.bad .pg-res-title{color:#cf1322}
.pg-list{margin:6px 0 0;padding-left:18px}
.pg-list.bad li{color:#cf1322}
.pg-list.warn li{color:#d46b08}
.pg-plan{margin-top:6px;color:#666;font-size:12px}
.pg-chip{display:inline-block;background:#f5f5f5;color:#666;border-radius:9px;padding:1px 8px;font-size:11px;margin-right:4px}
.pg-chip.latest{background:#f6ffed;color:#389e0d;font-weight:600}
.pg-miss{color:#cf1322;font-size:12px}
/* ===== 操作日志查询 ===== */
.al-meta{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:8px;margin-bottom:14px;font-size:13px;color:#333;line-height:1.7;background:#fafafa;border:1px solid #f0f0f0;border-radius:8px;padding:12px}
.al-meta .lbl{color:#999}
.al-cols{display:grid;grid-template-columns:1fr 1fr;gap:16px}
@media (max-width:640px){.al-cols{grid-template-columns:1fr}}

