:root{
  --bg:#f4f5f7;
  --card:#ffffff;
  --text:#16181d;
  --sub:#8b9099;
  --line:#e9ebef;
  --line-2:#f2f3f6;
  --brand:#16181d;
  --gold:#b9965c;
  --up:#d92b2b;
  --down:#129a5b;
  --blue:#2f6bff;
  --warn:#e8890c;
  --radius:14px;
  --shadow:0 1px 2px rgba(16,18,22,.05),0 6px 18px rgba(16,18,22,.05);
  --topbar-h:54px;
  --topnav-h:46px;
  --tabbar-h:60px;
  --sidebar-w:290px;
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
[hidden]{display:none !important}
html,body{margin:0;padding:0}
body{
  background:var(--bg);color:var(--text);
  font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",system-ui,sans-serif;
  font-size:14px;line-height:1.5;-webkit-font-smoothing:antialiased;
  overscroll-behavior-y:none;
}
button,input,textarea,select{font-family:inherit;font-size:inherit;color:inherit}
input,textarea,select{outline:none}
button{cursor:pointer;border:none;background:none;touch-action:manipulation}
h1,h2,h3,h4{margin:0;font-weight:600}
.hide{display:none !important}

/* ---------- 登录 ---------- */
.auth-wrap{
  min-height:100vh;min-height:100dvh;display:flex;align-items:flex-start;justify-content:center;
  padding:24px;padding-top:max(24px,env(safe-area-inset-top));padding-bottom:max(24px,env(safe-area-inset-bottom));
  background:linear-gradient(160deg,#16181d 0%,#22252c 45%,#2c3038 100%);
  overflow-y:auto;-webkit-overflow-scrolling:touch;
}
.auth-card{
  /* margin:auto 0 —— 空间够时垂直居中，空间不够（手机键盘弹起）时也不会被裁掉 */
  margin:auto 0;
  width:100%;max-width:380px;background:#fff;border-radius:18px;padding:28px 24px 24px;
  box-shadow:0 20px 60px rgba(0,0,0,.35);
}
.auth-brand{font-size:22px;letter-spacing:.18em;font-weight:700;text-align:center;color:var(--brand)}
.auth-sub{text-align:center;color:var(--sub);font-size:12px;letter-spacing:.28em;margin:6px 0 20px}
.auth-tabs{display:flex;gap:6px;background:var(--line-2);padding:4px;border-radius:10px;margin-bottom:14px}
.auth-tabs .tab{flex:1;padding:8px 0;border-radius:8px;color:var(--sub);font-size:13px}
.auth-tabs .tab.active{background:#fff;color:var(--text);font-weight:600;box-shadow:0 1px 3px rgba(0,0,0,.08)}
.auth-tip{font-size:12px;color:var(--gold);background:#fdf7ec;border:1px solid #f3e4c8;border-radius:10px;padding:8px 10px;margin-bottom:12px;display:none}
.auth-tip.show{display:block}
.field{display:block;margin-bottom:12px}
.field span{display:block;font-size:12px;color:var(--sub);margin-bottom:6px}
.field input{
  width:100%;height:44px;border:1px solid var(--line);border-radius:10px;padding:0 12px;background:#fbfbfc;
}
.field input:focus{border-color:var(--brand);background:#fff}
.btn-primary{
  width:100%;height:46px;border-radius:10px;background:var(--brand);color:#fff;font-size:15px;font-weight:600;
  letter-spacing:.05em;margin-top:6px;
}
.btn-primary:active{opacity:.85}
.btn-primary:disabled{opacity:.5}
.auth-err{color:var(--up);font-size:12px;text-align:center;min-height:18px;margin-top:10px;word-break:break-all}
.auth-boot{font-size:11px;color:var(--sub);text-align:center;margin-top:8px;line-height:1.5}
.auth-boot.bad{color:var(--up)}

/* ---------- 主框架 ---------- */
.app{min-height:100vh;min-height:100dvh;display:flex;flex-direction:column}
.topbar{
  position:fixed;top:0;left:0;right:0;height:var(--topbar-h);background:rgba(255,255,255,.94);
  backdrop-filter:saturate(180%) blur(12px);border-bottom:1px solid var(--line);
  display:flex;align-items:center;justify-content:space-between;padding:0 10px;z-index:40;
}
.topbar .brand{font-size:15px;font-weight:700;letter-spacing:.22em}
.icon-btn{width:38px;height:38px;display:flex;align-items:center;justify-content:center;border-radius:10px;color:var(--text)}
.icon-btn:active{background:var(--line-2)}
.avatar-btn{
  /* 右上角头像：外圈不再用深色底（之前会被衬出一圈黑色），没上传头像时是浅灰底 + 深色首字 */
  position:relative;width:34px;height:34px;border-radius:50%;background:#f2f3f6;color:#16181d;
  font-weight:700;font-size:13px;display:flex;align-items:center;justify-content:center;letter-spacing:0;
  overflow:hidden;border:none;padding:0;box-shadow:inset 0 0 0 1px rgba(0,0,0,.05)
}
.avatar-btn img{width:100%;height:100%;object-fit:cover;display:block;border-radius:50%}
.avatar-btn .dot{position:absolute;top:-1px;right:-1px;width:10px;height:10px;border-radius:50%;background:var(--up);border:2px solid #fff}
.top-actions{display:flex;align-items:center;gap:2px}
.bell-btn{position:relative}
.bell-btn .badge{
  position:absolute;top:1px;right:1px;min-width:16px;height:16px;padding:0 4px;
  border-radius:9px;background:var(--up);color:#fff;border:2px solid #fff;
  font-size:10px;font-weight:700;line-height:16px;font-style:normal;
  display:flex;align-items:center;justify-content:center;font-variant-numeric:tabular-nums;
}
.bell-btn.ring svg{animation:bellRing .9s ease}
@keyframes bellRing{
  0%,100%{transform:rotate(0)}
  15%{transform:rotate(14deg)} 30%{transform:rotate(-12deg)}
  45%{transform:rotate(9deg)} 60%{transform:rotate(-7deg)}
  75%{transform:rotate(4deg)} 90%{transform:rotate(-2deg)}
}
/* ---------- 顶部菜单栏（每人最多 4 个入口，可自定义） ---------- */
.topnav{
  position:fixed;top:var(--topbar-h);left:0;right:0;height:var(--topnav-h);z-index:39;
  background:rgba(255,255,255,.97);backdrop-filter:blur(12px);border-bottom:1px solid var(--line);
}
.topnav-inner{display:flex;width:100%;max-width:1120px;margin:0 auto;height:100%;align-items:stretch}
.topnav .tn-item{
  flex:1;min-width:0;display:flex;flex-direction:row;align-items:center;justify-content:center;gap:5px;
  color:var(--sub);font-size:12.5px;padding:0 2px;
}
.topnav .tn-item svg{width:15px;height:15px;flex:none}
.topnav .tn-item span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.topnav .tn-item.active{color:var(--brand);font-weight:700}
.topnav .tn-item.active svg{color:var(--gold)}
.topnav .tn-item:last-of-type{margin-right:0}
.topnav .tn-set{
  width:44px;flex:none;display:flex;align-items:center;justify-content:center;color:var(--sub);
  border-left:1px solid var(--line-2);
}
.topnav .tn-set:active{background:var(--line-2)}
@media(max-width:360px){
  .topnav .tn-item{font-size:11.5px;gap:3px}
  .topnav .tn-item svg{width:14px;height:14px}
}

.view{
  flex:1;padding:calc(var(--topbar-h) + var(--topnav-h) + 12px) 12px calc(var(--tabbar-h) + 24px);
  max-width:1120px;width:100%;margin:0 auto;
}

/* 搜索框 / 工具条固定：下拉页面时始终吸在顶部菜单栏下方 */
.sticky-box{
  position:sticky;top:calc(var(--topbar-h) + var(--topnav-h));z-index:30;
  background:var(--bg);margin:0 -12px;padding:2px 12px 8px;
}

.tabbar{
  position:fixed;left:0;right:0;bottom:0;height:calc(var(--tabbar-h) + env(safe-area-inset-bottom));
  background:rgba(255,255,255,.96);backdrop-filter:blur(12px);border-top:1px solid var(--line);
  display:flex;z-index:40;padding-bottom:env(safe-area-inset-bottom);
}
.tabbar-inner{display:flex;width:100%;max-width:1120px;margin:0 auto}
.tabbar .tab{
  flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;
  color:var(--sub);font-size:11px;padding:6px 0;
}
.tabbar .tab.active{color:var(--brand);font-weight:600}
.tabbar .tab svg{width:22px;height:22px}
.tabbar .tab.active svg{color:var(--gold)}

/* ---------- 抽屉 ---------- */
.drawer-mask{position:fixed;inset:0;background:rgba(12,14,18,.42);z-index:50;animation:fade .18s}
@keyframes fade{from{opacity:0}to{opacity:1}}
.drawer{
  position:fixed;top:0;left:0;bottom:0;width:var(--sidebar-w);background:#fff;z-index:51;
  transform:translateX(-100%);transition:transform .25s cubic-bezier(.4,0,.2,1);
  display:flex;flex-direction:column;box-shadow:6px 0 30px rgba(0,0,0,.12);
}
.drawer.open{transform:translateX(0)}
.drawer-head{
  display:flex;align-items:center;gap:12px;
  padding:22px 18px 14px;border-bottom:1px solid var(--line-2)
}
/* 头像：有自定义头像时显示图片，否则显示名字首字 */
.drawer-ava,#avatarText,.me-av{
  border-radius:50%;overflow:hidden;background-size:cover;background-position:center;
  display:flex;align-items:center;justify-content:center
}
.drawer-ava{
  flex:0 0 42px;width:42px;height:42px;background-color:var(--brand);color:var(--gold);
  font-weight:700;font-size:16px
}
#avatarText{
  width:100%;height:100%;background-color:#f2f3f6;color:#16181d;font-size:13px;
  background-image:none
}
#avatarText.has-img,.drawer-ava.has-img,.me-av.has-img{
  /* 有图片时把首字藏起来，只留图片 */
  color:transparent;background-color:#f2f3f5
}
.me-av{width:56px;height:56px;flex:0 0 56px;background-color:var(--brand);color:var(--gold);font-size:22px;font-weight:700}
.me-av img{width:100%;height:100%;object-fit:cover;display:block}
.me-av-box{display:flex;gap:12px;align-items:center}
.me-av-tip{font-size:11px;color:var(--sub);line-height:1.7;flex:1;min-width:0}
.drawer-brand{font-size:16px;font-weight:700;letter-spacing:.2em}
.drawer-user{font-size:12px;color:var(--sub);margin-top:6px}
.drawer-body{flex:1;overflow-y:auto;padding:8px}
.drawer-foot{padding:12px 18px calc(18px + env(safe-area-inset-bottom));border-top:1px solid var(--line-2)}
.drawer-link{color:var(--up);font-size:13px}
.drawer-item{
  display:flex;align-items:center;gap:12px;padding:12px 12px;border-radius:10px;color:var(--text);width:100%;text-align:left;
}
.drawer-item:active{background:var(--line-2)}
.drawer-item svg{width:20px;height:20px;color:var(--sub)}
.drawer-item.active{background:#f7f5f0;color:var(--brand);font-weight:600}
.drawer-item.active svg{color:var(--gold)}
.drawer-sep{height:1px;background:var(--line-2);margin:8px 12px}
.drawer-label{font-size:11px;color:var(--sub);padding:10px 12px 4px;letter-spacing:.1em}

/* ---------- 通用卡片 ---------- */
.card{background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow);padding:16px;margin-bottom:12px}
.card-title{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}
.card-title h3{font-size:14px}
.card-title .more{font-size:12px;color:var(--sub)}
.section-title{font-size:13px;color:var(--sub);margin:16px 4px 8px;letter-spacing:.06em}
.muted{color:var(--sub)}
.empty{text-align:center;color:var(--sub);padding:34px 12px;font-size:13px}
.row-gap{display:flex;gap:8px;align-items:center}
.grid{display:grid;gap:12px}
.grid-2{grid-template-columns:repeat(2,1fr)}
.grid-3{grid-template-columns:repeat(3,1fr)}
.grid-4{grid-template-columns:repeat(4,1fr)}
@media(max-width:640px){.grid-4{grid-template-columns:repeat(2,1fr)}.grid-3{grid-template-columns:repeat(2,1fr)}}

/* ---------- 按钮 ---------- */
.btn{
  height:38px;padding:0 14px;border-radius:10px;background:var(--line-2);color:var(--text);font-size:13px;
  display:inline-flex;align-items:center;justify-content:center;gap:6px;
}
.btn:active{opacity:.8}
.btn-dark{background:var(--brand);color:#fff}
.btn-gold{background:var(--gold);color:#fff}
.btn-danger{background:#fdecec;color:var(--up)}
.btn-outline{background:#fff;border:1px solid var(--line)}
.btn-block{width:100%}
.btn-sm{height:32px;padding:0 10px;font-size:12px;border-radius:8px}
.btn:disabled{opacity:.45}
.mini-btn{font-size:12px;color:var(--sub);padding:4px 8px;border-radius:8px;background:var(--line-2)}
.mini-btn.on{background:var(--brand);color:#fff}
/* 危险操作：删除聊天 / 清空记录 */
.mini-btn.danger{background:#fdecec;color:var(--up);font-weight:600}

.chips{display:flex;gap:8px;flex-wrap:wrap}
.chip{
  padding:6px 12px;border-radius:999px;background:var(--line-2);font-size:12px;color:var(--text);
}
.chip.on{background:var(--brand);color:#fff}
.chip.on.gold{background:var(--gold)}

/* ---------- 表单 ---------- */
.form-row{margin-bottom:12px}
.form-row label{display:block;font-size:12px;color:var(--sub);margin-bottom:6px}
.form-row input,.form-row textarea,.form-row select{
  width:100%;border:1px solid var(--line);border-radius:10px;padding:10px 12px;background:#fbfbfc;
}
.form-row textarea{min-height:76px;resize:vertical}
.form-row input:focus,.form-row textarea:focus{border-color:var(--brand);background:#fff}
.inline-2{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.searchbar{position:relative;margin-bottom:12px}
.searchbar input{
  width:100%;height:42px;border-radius:12px;border:1px solid var(--line);background:#fff;padding:0 12px 0 38px;
}
.searchbar svg{position:absolute;left:12px;top:12px;width:18px;height:18px;color:var(--sub)}
/* 搜索框右侧的「搜索」按钮 */
.searchbar.has-btn input{padding-right:88px}
.search-btn{
  position:absolute;right:6px;top:6px;height:30px;padding:0 15px;border:none;border-radius:8px;
  background:var(--brand);color:#fff;font-size:13px;font-weight:600;cursor:pointer;
  touch-action:manipulation;
}
.search-btn:active{opacity:.85}
.switch{width:44px;height:26px;border-radius:999px;background:#d8dbe0;position:relative;transition:.2s;flex:none}
.switch::after{content:'';position:absolute;top:3px;left:3px;width:20px;height:20px;border-radius:50%;background:#fff;transition:.2s;box-shadow:0 1px 3px rgba(0,0,0,.2)}
.switch.on{background:var(--gold)}
.switch.on::after{left:21px}

/* ---------- 看板 ---------- */
.hero{
  background:linear-gradient(140deg,#1b1e24 0%,#2a2e37 60%,#343942 100%);color:#fff;border-radius:18px;
  padding:18px;margin-bottom:12px;box-shadow:var(--shadow);position:relative;overflow:hidden;
}
.hero::after{content:'';position:absolute;right:-40px;top:-40px;width:170px;height:170px;border-radius:50%;background:rgba(185,150,92,.16)}
.hero-label{font-size:12px;opacity:.72;letter-spacing:.1em;display:flex;align-items:center;gap:6px}
.hero-live{width:7px;height:7px;border-radius:50%;background:#38d17a;display:inline-block;animation:pulse 1.6s infinite}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.35}}
.hero-amount{font-size:40px;font-weight:700;letter-spacing:-.01em;margin:8px 0 2px;font-variant-numeric:tabular-nums;line-height:1.1}
.hero-amount .unit{font-size:18px;font-weight:500;opacity:.75;margin-right:4px}
.hero-cmp{display:flex;align-items:center;gap:8px;font-size:12px;flex-wrap:wrap}
.cmp-badge{display:inline-flex;align-items:center;gap:4px;padding:3px 8px;border-radius:8px;font-weight:600;font-variant-numeric:tabular-nums}
.cmp-badge.up{background:rgba(217,43,43,.14);color:#ff7a7a}
.cmp-badge.down{background:rgba(18,154,91,.16);color:#4bd39a}
.hero-sub{display:flex;gap:16px;margin-top:12px;font-size:12px;opacity:.8;flex-wrap:wrap}
.hero-sub b{font-size:14px;font-weight:600;opacity:1}
.range-switch{display:flex;gap:6px;margin-top:14px;position:relative;z-index:2;flex-wrap:wrap}
.range-switch .chip{background:rgba(255,255,255,.12);color:rgba(255,255,255,.8)}
.range-switch .chip.on{background:#fff;color:var(--brand);font-weight:600}
.mock-bar{
  background:#fff7e8;border:1px solid #f6e3bd;color:#8a6414;font-size:12px;border-radius:10px;
  padding:8px 12px;margin-bottom:12px;display:flex;gap:8px;align-items:flex-start;
}

.metric{background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow);padding:14px}
.metric .k{font-size:12px;color:var(--sub)}
.metric .v{font-size:20px;font-weight:700;margin-top:4px;font-variant-numeric:tabular-nums}
.metric .d{font-size:11px;margin-top:4px;font-variant-numeric:tabular-nums}

.shop-item{display:flex;align-items:center;justify-content:space-between;padding:11px 0;border-bottom:1px solid var(--line-2)}
.shop-item:last-child{border-bottom:none}
.shop-left{min-width:0;flex:1}
.shop-name{font-size:13px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.shop-meta{font-size:11px;color:var(--sub);margin-top:3px;font-variant-numeric:tabular-nums}
.shop-right{text-align:right;margin-left:10px}
.shop-sales{font-size:15px;font-weight:700;font-variant-numeric:tabular-nums}
.platform-tag{display:inline-block;font-size:10px;padding:1px 6px;border-radius:5px;background:var(--line-2);color:var(--sub);margin-right:6px}

.chart-box{width:100%;height:210px}
.legend{display:flex;gap:14px;font-size:11px;color:var(--sub);margin-top:8px}
.legend i{display:inline-block;width:14px;height:3px;border-radius:2px;margin-right:5px;vertical-align:middle}

.rank-item{display:flex;align-items:center;gap:10px;padding:9px 0;border-bottom:1px solid var(--line-2)}
.rank-item:last-child{border-bottom:none}
.rank-no{
  width:22px;height:22px;border-radius:7px;background:var(--line-2);font-size:11px;font-weight:700;
  display:flex;align-items:center;justify-content:center;color:var(--sub);flex:none;
}
.rank-no.top{background:var(--gold);color:#fff}
.rank-info{flex:1;min-width:0}
.rank-name{font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rank-no2{font-size:11px;color:var(--sub);font-variant-numeric:tabular-nums}
.rank-qty{font-weight:700;font-variant-numeric:tabular-nums;font-size:13px}
/* 缺货排行：可用库存是负数，统一用红色警示；整行可点进明细 */
.shortage-qty{color:var(--up);font-size:15px}
.rank-item[data-style]{cursor:pointer}
.rank-item[data-style]:active{background:var(--line-2)}
.rank-go{color:var(--sub);font-size:16px;flex:none;padding-left:2px}
/* 排行左边的款式缩略图 */
.rank-thumb{
  width:40px;height:40px;flex:none;border-radius:8px;object-fit:cover;
  background:var(--line-2);border:1px solid var(--line);display:block;cursor:zoom-in
}
.rank-thumb.ph{
  display:flex;align-items:center;justify-content:center;cursor:default;
  font-size:13px;font-weight:700;color:#9a8b6f;background:#f2efe9
}
/* 今日发货的口径说明 */
.ship-note{
  margin-top:10px;padding:8px 10px;border-radius:8px;background:var(--line-2);
  font-size:11px;line-height:1.6;color:var(--sub)
}
.ship-note b{color:var(--text)}

/* ---------- 库存 ---------- */
.inv-summary{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;margin-bottom:12px}
.inv-summary .box{background:linear-gradient(150deg,#1b1e24,#333844);color:#fff;border-radius:14px;padding:14px}
.inv-summary .box .k{font-size:11px;opacity:.75}
.inv-summary .box .v{font-size:22px;font-weight:700;margin-top:4px;font-variant-numeric:tabular-nums}
.inv-item{background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow);padding:14px;margin-bottom:10px}
.inv-head{display:flex;gap:12px;align-items:flex-start;margin-bottom:10px}
.inv-thumb{
  width:60px;height:60px;flex:none;border-radius:10px;object-fit:cover;
  background:var(--line-2);border:1px solid var(--line);display:block;
}
.inv-thumb.ph{
  display:flex;align-items:center;justify-content:center;
  font-size:16px;font-weight:700;color:#9a8b6f;background:#f2efe9;border:1px solid var(--line);
}
.inv-name{font-size:14px;font-weight:600;line-height:1.35}
.inv-code{font-size:11px;color:var(--sub);margin-top:3px;font-variant-numeric:tabular-nums}
/* 商品编码：说明文字与款式编码同款灰色，只有编码本身标红加粗 */
.inv-sku{
  font-style:normal;color:var(--up);font-weight:800;font-size:12px;
  letter-spacing:.02em
}
.inv-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;text-align:center;background:var(--line-2);border-radius:10px;padding:10px 4px}
.inv-grid .k{font-size:11px;color:var(--sub)}
.inv-grid .v{font-size:15px;font-weight:700;margin-top:2px;font-variant-numeric:tabular-nums}
/* 第二行：订单占有 / 近3日销量 / 近7日销量 / 近7日退货 */
.inv-grid-2{margin-top:6px;background:#fff;border:1px solid var(--line);position:relative}
.inv-grid-2 .v{font-size:14px}
/* 附加指标的口径说明（灰色小字，不抢主内容） */
.inv-note{font-size:11px;color:var(--sub);line-height:1.6;padding:6px 4px 0}
.inv-note b{color:var(--text);font-weight:700}

/* ---------- 生产资料 ---------- */
.mat-card{background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow);margin-bottom:10px;overflow:hidden}
/* 列表：款式图放大到 128×128（面积 4 倍），右侧文字顶部与图片顶部对齐 */
.mat-head{display:flex;gap:12px;padding:12px;align-items:flex-start}
.mat-thumb{
  width:128px;height:128px;border-radius:12px;background:var(--line-2);flex:none;overflow:hidden;
  display:flex;align-items:center;justify-content:center;color:var(--sub);font-size:13px;
}
.mat-thumb img{width:100%;height:100%;object-fit:cover;border-radius:12px}
.mat-info{flex:1;min-width:0;padding-top:2px}
.mat-style{font-size:14px;font-weight:700}
.mat-sku{font-size:11px;color:var(--sub);margin-top:3px;font-variant-numeric:tabular-nums}
.mat-tags{margin-top:6px;display:flex;gap:6px;flex-wrap:wrap}
.tag{font-size:10px;padding:2px 7px;border-radius:6px;background:#f3f1ec;color:#8a6d3b}
.mat-go{flex:none;color:var(--sub);font-size:20px;line-height:1;padding-top:2px}
.mat-fold{padding:0 12px 12px}
.kv{display:grid;grid-template-columns:96px 1fr;gap:8px 10px;font-size:13px;align-items:center}
.kv .k{color:var(--sub);font-size:12px}
.kv .v{word-break:break-all}
/* 生产款号：红色 + 放大 200%（13px → 26px） */
.kv-style{font-size:26px;font-weight:800;color:var(--up);line-height:1.15;letter-spacing:.02em}
.fabric{border:1px solid var(--line);border-radius:12px;padding:12px;margin-top:10px;background:#fcfcfd}
.fabric-title{display:flex;justify-content:space-between;align-items:flex-start;gap:8px;margin-bottom:8px}
.fabric-title b{font-size:13px}
/* 面料 A / B / C 名称：左上角红色 + 18px + 不加粗（覆盖 .fabric-title b 的 13px / 700） */
.fabric-title b.fab-name,.fab-name{font-size:18px;font-weight:400;color:var(--up);line-height:1.35;letter-spacing:.02em}

/* ---------- 生产资料：单款详情页 ---------- */
.mat-top{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:10px}
.mat-top-actions{display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end}
/* 款式图（左） + 款式明细（右），两侧顶部对齐 */
.mat-body{display:flex;gap:14px;padding:12px;align-items:flex-start}
.mat-imgs{flex:none;width:216px}
.mat-main-img{
  width:216px;height:216px;border-radius:12px;overflow:hidden;background:var(--line-2);
  display:flex;align-items:center;justify-content:center;color:var(--sub);font-size:13px;
}
.mat-main-img img{width:100%;height:100%;object-fit:cover}
.mat-img-more{display:flex;gap:8px;flex-wrap:wrap;margin-top:8px}
.att.att-sm{width:64px;height:64px;border-radius:10px}
.att.att-sm.file{font-size:9px;padding:2px}
.mat-meta{flex:1;min-width:0}
.mat-meta .section-title{margin:0 0 8px}
.mat-block{padding:12px}
.mat-block .section-title{margin:0 0 8px}
.mat-foot{font-size:11px;color:var(--sub);padding:2px 4px 4px}
@media(max-width:560px){
  .mat-body{flex-direction:column}
  .mat-imgs{width:100%}
  .mat-main-img{width:100%;height:auto;aspect-ratio:1/1}
  .mat-top{flex-wrap:wrap}
  .mat-top-actions{flex:1}
}
.att-list{display:flex;gap:10px;flex-wrap:wrap;margin-top:8px}
/* 面料附件保持中等尺寸（款式图放大，附件不跟着放大） */
.att-list.fab-atts .att,.att-list.fab-atts .uploader{width:96px;height:96px;border-radius:10px}
/* 款式图：由 64×64 放大到 128×128（面积 4 倍），手机上按屏宽自适应 */
.att{
  width:128px;height:128px;border-radius:12px;overflow:hidden;background:var(--line-2);position:relative;flex:none;
  display:flex;align-items:center;justify-content:center;
}
@media(max-width:400px){ .att{width:112px;height:112px} }
.att img{width:100%;height:100%;object-fit:cover}
.att img,.mat-thumb,.inv-thumb,.mat-fold img{cursor:zoom-in;-webkit-user-drag:none;user-select:none}

/* ---------- 图片全屏预览 ---------- */
.img-viewer{
  position:fixed;inset:0;background:rgba(0,0,0,.94);z-index:200;
  display:flex;align-items:center;justify-content:center;overflow:hidden;
  touch-action:none;user-select:none;-webkit-user-select:none;
}
.img-viewer .iv-img{
  max-width:100%;max-height:100%;transform-origin:center center;
  transition:transform .08s linear;will-change:transform;
}
.img-viewer .iv-close{
  position:absolute;top:calc(10px + env(safe-area-inset-top));right:12px;
  width:38px;height:38px;border-radius:50%;background:rgba(255,255,255,.18);
  color:#fff;font-size:18px;display:flex;align-items:center;justify-content:center;z-index:3;
}
.img-viewer .iv-tip{
  position:absolute;left:0;right:0;bottom:calc(16px + env(safe-area-inset-bottom));
  text-align:center;color:rgba(255,255,255,.55);font-size:12px;pointer-events:none;
}
@media (min-width:768px){ .img-viewer .iv-tip{content:none;display:none} }
.att .del{position:absolute;top:2px;right:2px;width:24px;height:24px;border-radius:50%;background:rgba(0,0,0,.55);color:#fff;font-size:14px;display:flex;align-items:center;justify-content:center}
.att.file{font-size:10px;color:var(--sub);text-align:center;padding:4px;line-height:1.2;word-break:break-all}
.uploader{
  width:128px;height:128px;border-radius:12px;border:1px dashed #cfd3da;display:flex;flex-direction:column;
  align-items:center;justify-content:center;color:var(--sub);font-size:11px;gap:2px;flex:none;
}
/* 生产资料备注：整块用红色突出，正文字号 20px */
.mat-remark{color:#d92b2b !important}
/* 备注正文（不含小标题）：字号 20px */
.mat-remark-body{font-size:20px;line-height:1.6;white-space:pre-wrap}
.mat-remark-input{color:#d92b2b;font-size:20px;line-height:1.6}
.mat-remark-input::placeholder{color:#e39c9c}
.uploader:active{background:var(--line-2)}

/* ---------- 工单 ---------- */
.ticket{background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow);padding:14px;margin-bottom:10px;border-left:3px solid transparent}
.ticket.open{border-left-color:var(--up)}
.ticket.done{opacity:.72;border-left-color:var(--down)}
.ticket-head{display:flex;justify-content:space-between;gap:10px;align-items:flex-start}
.ticket-content{font-size:14px;line-height:1.45;word-break:break-word}
.ticket-meta{font-size:11px;color:var(--sub);margin-top:8px;display:grid;grid-template-columns:repeat(2,1fr);gap:4px 10px}
.ticket-meta span b{color:var(--text);font-weight:600}
.status-badge{font-size:11px;padding:3px 8px;border-radius:7px;flex:none;font-weight:600}
.status-badge.open{background:#fdecec;color:var(--up)}
.status-badge.done{background:#e9f7f0;color:var(--down)}
.countdown{font-size:12px;font-variant-numeric:tabular-nums;margin-top:8px;display:flex;align-items:center;gap:6px}
.countdown.over{color:var(--up);font-weight:700}
.countdown.warn{color:var(--warn);font-weight:600}
.countdown.ok{color:var(--sub)}
.ticket-actions{display:flex;gap:8px;margin-top:12px;flex-wrap:wrap}
.logs{margin-top:10px;border-top:1px dashed var(--line);padding-top:8px;font-size:11px;color:var(--sub)}
.logs div{padding:2px 0}

/* ---------- 通知 ---------- */
.sheet-mask{position:fixed;inset:0;background:rgba(12,14,18,.4);z-index:60}
.sheet{
  position:fixed;left:0;right:0;bottom:0;max-height:70vh;background:#fff;z-index:61;
  border-radius:16px 16px 0 0;display:flex;flex-direction:column;transform:translateY(100%);transition:transform .25s;
}
.sheet.open{transform:translateY(0)}
.sheet-head{display:flex;justify-content:space-between;align-items:center;padding:14px 16px;border-bottom:1px solid var(--line-2)}
.sheet-body{overflow-y:auto;padding:8px 8px calc(20px + env(safe-area-inset-bottom))}
.notice{display:flex;gap:10px;padding:12px;border-radius:12px;background:#fff;margin-bottom:4px}
.notice.unread{background:#fdf8ef}
.notice-body{flex:1;min-width:0}
.notice-title{font-size:13px;font-weight:600}
.notice-text{font-size:12px;color:var(--sub);margin-top:3px;word-break:break-word}
.notice-time{font-size:11px;color:var(--sub);margin-top:4px}

.toast{
  position:fixed;left:50%;bottom:calc(var(--tabbar-h) + 30px);transform:translateX(-50%) translateY(10px);
  background:rgba(22,24,29,.94);color:#fff;padding:10px 16px;border-radius:12px;font-size:13px;z-index:99;
  opacity:0;pointer-events:none;transition:.2s;max-width:80vw;text-align:center;
}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}

.perm-group{margin-bottom:14px}
.perm-group .g-name{font-size:13px;font-weight:600;margin-bottom:8px;display:flex;justify-content:space-between;align-items:center}
.perm-items{display:grid;grid-template-columns:repeat(2,1fr);gap:8px}
@media(max-width:520px){.perm-items{grid-template-columns:1fr}}
.perm-item{display:flex;justify-content:space-between;align-items:center;background:var(--line-2);border-radius:10px;padding:9px 12px;font-size:12px;gap:8px}

.user-row{display:flex;align-items:center;gap:10px;padding:11px 0;border-bottom:1px solid var(--line-2)}
.user-row:last-child{border-bottom:none}
.user-ava{width:36px;height:36px;border-radius:50%;background:var(--brand);color:var(--gold);display:flex;align-items:center;justify-content:center;font-weight:700;font-size:13px;flex:none}
.user-main{flex:1;min-width:0}
.user-name{font-size:13px;font-weight:600}
.user-phone{font-size:11px;color:var(--sub);font-variant-numeric:tabular-nums}
.role-tag{font-size:10px;padding:2px 7px;border-radius:6px;background:#eee9df;color:#8a6d3b;margin-left:6px}
.role-tag.admin{background:#1b1e24;color:#c9a86a}

.modal-mask{position:fixed;inset:0;background:rgba(12,14,18,.45);z-index:70;display:flex;align-items:flex-end;justify-content:center}
.modal{
  background:#fff;width:100%;max-width:640px;border-radius:16px 16px 0 0;max-height:88vh;display:flex;flex-direction:column;
  animation:up .22s;
}
@keyframes up{from{transform:translateY(30px);opacity:.6}to{transform:translateY(0);opacity:1}}
@media(min-width:720px){
  .modal-mask{align-items:center}
  .modal{border-radius:16px;max-height:84vh}
}
.modal-head{display:flex;justify-content:space-between;align-items:center;padding:14px 16px;border-bottom:1px solid var(--line-2)}
.modal-body{overflow-y:auto;padding:16px}
.modal-foot{padding:12px 16px calc(16px + env(safe-area-inset-bottom));border-top:1px solid var(--line-2);display:flex;gap:10px}
.modal-foot .btn{flex:1;height:42px}

.refresh-hint{font-size:11px;color:var(--sub);text-align:center;padding:8px 0}
/* 退款明细卡片与上方「销售明细指标」之间的间距 */
#metricBox{margin-bottom:16px}
.refund-note{font-size:11px;color:var(--sub);line-height:1.75;padding:10px 2px 2px}
.refund-note b{color:var(--text)}
.dedup-note{
  font-size:11px;color:var(--sub);line-height:1.7;padding:8px 10px;margin-top:10px;
  background:var(--line-2);border-radius:10px;
}
.dedup-note b{color:var(--text)}
.fab{
  position:fixed;right:16px;bottom:calc(var(--tabbar-h) + 20px + env(safe-area-inset-bottom));
  width:52px;height:52px;border-radius:50%;background:var(--brand);color:var(--gold);z-index:35;
  display:flex;align-items:center;justify-content:center;box-shadow:0 8px 24px rgba(0,0,0,.22);font-size:26px;font-weight:300;
}
/* ---------- 主播工资 ---------- */
input.ro,textarea.ro{background:#f3f4f6;color:var(--text);font-weight:700;cursor:default}
input.ro.big,textarea.ro.big{color:var(--gold);font-size:17px}
.anc-hero{padding:18px}
.anc-hero-row{display:flex;gap:14px;align-items:center}
.anc-hero-row .hero-label{margin-bottom:2px}
.anc-ava{
  width:40px;height:40px;flex:none;border-radius:50%;object-fit:cover;background:rgba(255,255,255,.16);
  color:#fff;font-weight:700;font-size:14px;display:flex;align-items:center;justify-content:center;
  border:1px solid rgba(255,255,255,.25);
}
.anc-ava.ph{background:linear-gradient(140deg,#d3c19b,#b9965c)}
.anc-ava.big{width:64px;height:64px;font-size:22px}
.anc-monthbar{display:flex;align-items:center;gap:8px;margin-bottom:12px;flex-wrap:wrap}
.anc-monthbar input[type=month]{
  height:34px;border:1px solid var(--line);border-radius:9px;padding:0 10px;background:#fff;min-width:140px;flex:1;max-width:200px;
}
.anc-toolbar{margin-bottom:6px;flex-wrap:wrap;gap:8px}
.anc-card{
  display:flex;align-items:center;gap:12px;background:var(--card);border-radius:var(--radius);
  box-shadow:var(--shadow);padding:14px;margin-bottom:10px;cursor:pointer;
}
.anc-card:active{background:#fafbfc}
.anc-card .anc-ava{background:var(--brand);color:var(--gold);border:none}
.anc-card .anc-ava.ph{background:#efe6d6;color:#8a6d3b}
.anc-info{flex:1;min-width:0}
.anc-name{font-size:15px;font-weight:700;display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.anc-sub{font-size:11px;color:var(--sub);margin-top:3px;font-variant-numeric:tabular-nums}
.anc-pay{text-align:right;margin-left:8px;flex:none}
.anc-pay .v{font-size:17px;font-weight:700;color:var(--gold);font-variant-numeric:tabular-nums}
.anc-pay .k{font-size:10px;color:var(--sub);margin-top:2px}
.anc-rec{background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow);padding:14px;margin-bottom:10px}
.anc-rec-top{display:flex;align-items:center;gap:12px}
.anc-rec .anc-ava{background:var(--brand);color:var(--gold);border:none}
.anc-rec .anc-ava.ph{background:#efe6d6;color:#8a6d3b}
.anc-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:6px 12px;margin-top:10px}
.anc-grid>div{display:flex;justify-content:space-between;font-size:12px;background:var(--line-2);border-radius:8px;padding:6px 10px}
.anc-grid .k{color:var(--sub)}
.anc-grid .v2{font-weight:600;font-variant-numeric:tabular-nums}
.anc-shops{margin-top:8px;display:flex;gap:6px;flex-wrap:wrap}
.anc-remark{margin-top:8px;font-size:12px;color:var(--sub);word-break:break-word}
.anc-formula{font-size:11px;color:var(--sub);background:var(--line-2);border-radius:8px;padding:8px 10px;margin:8px 0;line-height:1.6}
.anc-avatar-row{display:flex;gap:14px;align-items:flex-start}
.anc-avatar-box{position:relative;flex:none;display:flex;flex-direction:column;align-items:center;gap:4px}
.anc-avatar-box .anc-ava.ph{background:#efe6d6;color:#8a6d3b}
.anc-avatar-tip{font-size:10px;color:var(--sub)}
.anc-total-row{display:flex;gap:10px;margin-bottom:10px}
.anc-total-row>div{flex:1;background:var(--line-2);border-radius:10px;padding:10px;text-align:center}
.anc-total-row .k{display:block;font-size:11px;color:var(--sub)}
.anc-total-row .v{display:block;font-size:16px;font-weight:700;margin-top:3px;font-variant-numeric:tabular-nums}
.anc-total-row .v.gold{color:var(--gold)}
.anc-stat-row{display:flex;align-items:center;gap:10px;padding:9px 0;border-bottom:1px solid var(--line-2)}
.anc-stat-row:last-child{border-bottom:none}
.anc-stat-row .l{font-size:13px;font-weight:600;flex:1;min-width:0}
.anc-stat-row .m{font-size:11px;color:var(--sub);font-variant-numeric:tabular-nums;flex:none}
.anc-stat-row .s{font-size:14px;font-weight:700;color:var(--gold);min-width:88px;text-align:right;font-variant-numeric:tabular-nums}
@media(max-width:420px){
  .anc-stat-row .m{display:none}
  .anc-stat-row .s{min-width:78px}
}

.fab:active{transform:scale(.94)}

/* ================= 共用：成员多选（抄送 / 日历 / 授权） ================= */
.cc-order{
  font-size:12px;color:var(--sub);background:var(--line-2);border-radius:9px;padding:8px 10px;
  line-height:1.6;word-break:break-all;
}
.cc-order b{color:var(--text)}
.cc-list{display:flex;gap:8px;flex-wrap:wrap}
.cc-pick{
  display:flex;align-items:center;gap:7px;padding:7px 12px;border-radius:999px;
  background:var(--line-2);font-size:13px;color:var(--text);
}
.cc-pick .cc-box{
  width:18px;height:18px;border-radius:6px;border:1.5px solid #cfd3da;background:#fff;
  font-size:10px;line-height:15px;font-weight:700;color:transparent;flex:none;text-align:center;
}
.cc-pick.on{background:#16181d;color:#fff}
.cc-pick.on .cc-box{background:var(--gold);border-color:var(--gold);color:#fff}
.cc-pick em{font-size:10px;font-style:normal;opacity:.65;margin-left:2px}
.cc-pick em.cc-mode{opacity:.85}
.cc-mode:empty{display:none}

/* ================= 店铺订单 ================= */
.ord-toolbar{display:flex;align-items:center;gap:8px;margin-bottom:10px;flex-wrap:wrap}
.ord-toolbar .chips{flex:1}
.ord-toolbar .chips .chip{padding:5px 10px;font-size:12px}
/* 订单页已取消时间筛选：左边是订单总数，右边只有「立即刷新」 */
.ord-count{flex:1;min-width:0;font-size:12px;color:var(--sub);line-height:1.4}
.ord-refresh{display:inline-flex;align-items:center;gap:5px;padding:5px 10px;color:var(--brand);background:var(--line-2)}
.ord-refresh .rf-ico{flex:none}
.ord-refresh.busy{color:var(--sub)}
.ord-refresh.busy .rf-ico{animation:dspin .8s linear infinite;transform-origin:50% 50%}
.ord-refresh:disabled{opacity:.7}
.ord-item{background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow);padding:12px;margin-bottom:10px}
/* 下滑加载更多的哨兵：加载中时显示忙态，避免看起来像卡住了 */
.ord-sentinel{
  text-align:center;font-size:12px;color:var(--sub);padding:12px 0 4px;
  background:var(--line-2);border-radius:10px;margin-top:2px;cursor:pointer;
}
.ord-sentinel.busy{color:var(--brand);font-weight:600}
.ord-top{display:flex;align-items:center;gap:8px}
.ord-no{
  display:flex;align-items:center;gap:5px;font-size:13px;font-variant-numeric:tabular-nums;
  padding:4px 8px;border-radius:8px;background:var(--line-2);color:var(--brand);flex:1;min-width:0;
}
.ord-no b{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ord-no:active{background:#e6e8ec}
.st-badge{font-size:11px;padding:3px 9px;border-radius:7px;font-weight:600;flex:none;background:var(--line-2);color:var(--sub)}
.st-badge.ok{background:#e9f7f0;color:var(--down)}
.st-badge.wait{background:#fff5e6;color:var(--warn)}
.st-badge.bad{background:#fdecec;color:var(--up)}
.st-badge.dup{background:#eef0f4;color:#8b91a0;font-weight:500}
.ord-meta{display:flex;flex-wrap:wrap;gap:4px 12px;font-size:11px;color:var(--sub);margin-top:7px}
.ord-meta b{color:var(--text);font-variant-numeric:tabular-nums}
.ord-goods-list{margin-top:10px;border-top:1px solid var(--line-2);padding-top:8px}
.ord-goods{display:flex;gap:10px;align-items:flex-start;padding:6px 0;border-bottom:1px dashed var(--line-2)}
.ord-goods:last-child{border-bottom:none}
.ord-thumb{
  width:64px;height:64px;flex:none;border-radius:10px;object-fit:cover;display:block;
  background:var(--line-2);border:1px solid var(--line);
}
.ord-thumb.ph{
  display:flex;align-items:center;justify-content:center;font-size:16px;font-weight:700;
  color:#9a8b6f;background:#f2efe9;
}
.ord-g-info{flex:1;min-width:0}
.ord-g-code{font-size:12px;font-weight:700;font-variant-numeric:tabular-nums;word-break:break-all}
.ord-g-name{font-size:12px;color:var(--text);margin-top:2px;line-height:1.35}
.ord-g-sub{font-size:11px;color:var(--sub);margin-top:2px;font-variant-numeric:tabular-nums}
.ord-g-stock{flex:none;text-align:right;max-width:96px}
.stk{display:inline-block;font-size:10px;padding:2px 7px;border-radius:6px;font-weight:600;white-space:nowrap}
.stk.ok{background:#e9f7f0;color:var(--down)}
.stk.bad{background:#fdecec;color:var(--up)}
.stk.na{background:var(--line-2);color:var(--sub)}
.ord-g-total{font-size:10px;color:var(--sub);margin-top:3px;font-variant-numeric:tabular-nums}
.ord-more{display:block;margin:6px auto 0}
.ord-alloc{font-size:11px;font-weight:600;margin-top:8px;padding:6px 10px;border-radius:8px}
.ord-alloc.ok{background:#e9f7f0;color:var(--down)}
.ord-alloc.bad{background:#fff5e6;color:var(--warn)}
.ord-remark{
  display:flex;gap:8px;align-items:flex-start;margin-top:10px;background:var(--line-2);
  border-radius:9px;padding:8px 10px;font-size:12px;line-height:1.5;
}
.ord-remark .rk-label{color:var(--sub);flex:none;font-size:11px}
.ord-remark .rk-text{flex:1;min-width:0;word-break:break-word}
.ord-remark .rk-text.none{color:var(--sub)}
.ord-bottom{display:flex;align-items:flex-end;gap:12px;margin-top:10px}
.ord-paid .k,.ord-qty .k{font-size:11px;color:var(--sub)}
.ord-paid .v{font-size:19px;font-weight:700;color:var(--up);font-variant-numeric:tabular-nums}
.ord-paid .rd{font-size:10px;color:var(--down);font-variant-numeric:tabular-nums}
.ord-qty .v{font-size:16px;font-weight:700;font-variant-numeric:tabular-nums}
/* 订单卡片右下角只留「转发」一个按钮，靠右对齐 */
.ord-acts{margin-left:auto;flex:none;display:flex;gap:8px;align-items:center}

/* 订单详情弹窗 */
.dlg-kv{display:grid;grid-template-columns:repeat(2,1fr);gap:8px 12px;font-size:12px}
.dlg-kv>div{display:flex;flex-direction:column;gap:2px;min-width:0}
.dlg-kv>div.full{grid-column:1/-1}
.dlg-kv span{color:var(--sub);font-size:11px}
.dlg-kv b{font-variant-numeric:tabular-nums;word-break:break-all;font-weight:600}
.dlg-sub{font-size:12px;color:var(--sub);margin:14px 0 6px}
.dlg-remark{font-size:13px;line-height:1.6;background:var(--line-2);border-radius:10px;padding:10px;word-break:break-word}
.dlg-remark.none{color:var(--sub)}
.dlg-goods{border-top:1px solid var(--line-2);padding-top:4px}

/* ================= 休息日历 ================= */
.rest-members{display:flex;gap:8px;overflow-x:auto;padding-bottom:2px;margin-bottom:8px;-webkit-overflow-scrolling:touch}
.rest-members .chip{flex:none}
.rest-members .chip.add{background:#fff;border:1px dashed #cfd3da;color:var(--gold)}
.rest-toolbar{display:flex;align-items:center;gap:8px;margin-bottom:10px;flex-wrap:wrap}
.rest-ym{display:flex;align-items:center;gap:6px}
.rest-ym b{font-size:15px;font-weight:700;min-width:88px;text-align:center;font-variant-numeric:tabular-nums}
.ym-btn{font-size:12px;color:var(--sub);padding:5px 8px;border-radius:8px;background:var(--line-2)}
.ym-btn:active{background:#e6e8ec}
.rest-cal{background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow);padding:10px 8px 12px}
.rest-week{display:grid;grid-template-columns:repeat(7,1fr);margin-bottom:4px}
.rest-week div{text-align:center;font-size:11px;color:var(--sub);padding:4px 0}
.rest-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:2px}
.rday{
  min-height:52px;border-radius:9px;padding:3px 2px 4px;display:flex;flex-direction:column;
  align-items:center;gap:2px;background:#fafbfc;border:1px solid transparent;
}
.rday.empty-cell{background:transparent}
.rday.today{border-color:var(--brand);background:#fff}
.rday.has{background:#fff}
.rday.editable{cursor:pointer}
.rday.editable:active{background:var(--line-2)}
.rdn{font-size:11px;color:var(--sub);font-variant-numeric:tabular-nums}
.rday.today .rdn{color:var(--brand);font-weight:700}
.rwhos{display:flex;gap:2px;flex-wrap:wrap;justify-content:center;padding:0 1px}
.rwho{
  width:19px;height:19px;border-radius:50%;background:var(--brand);color:#fff;
  font-size:10px;font-weight:700;display:flex;align-items:center;justify-content:center;flex:none;
}
.rwho.solo{width:24px;height:24px;font-size:12px}
.rwho.more{background:var(--line-2);color:var(--sub);font-size:9px}
/* 自定义标记（下午茶/团建…）：圆圈里放图标 */
.rwho.kind{box-shadow:inset 0 0 0 1.5px rgba(255,255,255,.55)}
.rwho svg{width:62%;height:62%;display:block}
.rwho.solo svg{width:66%;height:66%}

/* 颜色图例：谁是什么颜色 / 哪种标记是什么颜色 */
.rest-legend{display:flex;gap:9px;flex-wrap:wrap;padding:2px 2px 8px;font-size:11px;color:var(--sub)}
.rest-legend .lg-d{display:inline-flex;align-items:center;gap:4px}
.dot{width:9px;height:9px;border-radius:50%;display:inline-block;flex:none;margin-right:2px}
.lg-d .dot{width:14px;height:14px;margin:0;display:inline-flex;align-items:center;justify-content:center;color:#fff}
.lg-d .dot svg{width:9px;height:9px}

/* 安排日期：标记类型选择 */
.kind-row{display:flex;gap:6px;flex-wrap:wrap;margin:2px 0 12px}
.kind-chip{
  display:inline-flex;align-items:center;gap:5px;padding:6px 10px;border-radius:999px;
  border:1px solid var(--line);background:#fff;font-size:12px;color:var(--sub);
}
.kind-chip .kc-ico{width:14px;height:14px;display:inline-flex;color:var(--kc,#8E5BD0)}
.kind-chip .kc-ico svg{width:14px;height:14px}
.kind-chip.on{background:var(--kc,var(--brand));border-color:transparent;color:#fff;font-weight:600}
.kind-chip.on .kc-ico{color:#fff}
.kind-chip .kc-edit{margin-left:2px;font-style:normal;opacity:.55;font-size:11px}
.kind-chip.add{border-style:dashed;color:var(--brand)}
.icon-pick{display:flex;gap:6px;flex-wrap:wrap}
.ip-btn{width:36px;height:36px;border-radius:10px;background:var(--line-2);display:flex;align-items:center;justify-content:center;color:var(--sub)}
.ip-btn svg{width:20px;height:20px}
.ip-btn.on{background:var(--brand);color:#fff}
.color-pick{display:flex;gap:8px;flex-wrap:wrap}
.cp-btn{width:28px;height:28px;border-radius:50%;border:2px solid transparent}
.cp-btn.on{border-color:var(--text)}

/* ================= 记账本 ================= */
.lg-books{display:flex;gap:8px;overflow-x:auto;padding-bottom:2px;-webkit-overflow-scrolling:touch}
.lg-book{
  flex:none;display:flex;flex-direction:column;align-items:flex-start;gap:2px;
  padding:6px 12px;border-radius:10px;background:#fff;border:1px solid var(--line);
}
.lg-book b{font-size:13px;font-weight:700}
.lg-book em{font-size:10px;font-style:normal;color:var(--sub)}
.lg-book.on{background:var(--brand);border-color:var(--brand)}
.lg-book.on b{color:#fff}
.lg-book.on em{color:var(--gold)}
.lg-book.add{justify-content:center;align-items:center;color:var(--gold);font-size:16px;border-style:dashed;min-width:44px}
.lg-nobook{display:flex;align-items:center;gap:10px;font-size:13px;color:var(--sub);flex:none}
.lg-bar{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.lg-bar b{font-size:15px;font-variant-numeric:tabular-nums}
.mini-sel{
  height:30px;border:1px solid var(--line);border-radius:8px;background:#fff;font-size:12px;padding:0 6px;
}
.lg-sum{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:12px}
.lg-sum-box{background:var(--line-2);border-radius:10px;padding:10px;text-align:center}
.lg-sum-box .k{font-size:11px;color:var(--sub)}
.lg-sum-box .v{font-size:17px;font-weight:700;margin-top:3px;font-variant-numeric:tabular-nums}
.lg-sum-box .v.in{color:var(--up)}
.lg-sum-box .v.out{color:var(--down)}
.lg-range{display:flex;align-items:center;gap:6px;margin-top:10px;flex-wrap:wrap}
.lg-range input{
  height:32px;border:1px solid var(--line);border-radius:8px;padding:0 8px;background:#fff;font-size:12px;flex:1;min-width:120px;
}
.lg-range span{font-size:12px;color:var(--sub)}
.lg-list{margin-top:12px}
.lg-item{
  display:flex;gap:10px;align-items:flex-start;background:var(--card);border-radius:var(--radius);
  box-shadow:var(--shadow);padding:12px;margin-bottom:8px;
}
.lg-ico{
  width:30px;height:30px;border-radius:9px;flex:none;display:flex;align-items:center;justify-content:center;
  font-size:13px;font-weight:700;color:#fff;
}
.lg-item.in .lg-ico{background:var(--up)}
.lg-item.out .lg-ico{background:var(--down)}
.lg-info{flex:1;min-width:0}
.lg-t{font-size:14px;font-weight:600;word-break:break-word}
.lg-s{font-size:11px;color:var(--sub);margin-top:3px;word-break:break-word}
.lg-imgs{display:flex;gap:5px;margin-top:6px;flex-wrap:wrap}
.lg-imgs img{width:44px;height:44px;border-radius:8px;object-fit:cover;border:1px solid var(--line)}
.lg-img-more{font-size:10px;color:var(--sub);align-self:center}
.lg-amt{flex:none;text-align:right;min-width:96px}
.lg-amt .a{font-size:16px;font-weight:700;font-variant-numeric:tabular-nums}
.lg-amt .a.in{color:var(--up)}
.lg-amt .a.out{color:var(--down)}
.lg-amt .b{font-size:10px;color:var(--sub);margin-top:2px;font-variant-numeric:tabular-nums}
.lg-ops{display:flex;gap:4px;justify-content:flex-end;margin-top:6px}
.lg-ops .mini-btn{padding:3px 7px;font-size:11px}

/* 竖状图 */
/* 记账列表里的单据缩略图（点击查看大图） */
.lg-imgs{display:flex;gap:4px;flex-wrap:wrap;align-items:center;margin-top:5px}
.lg-imgs img{width:34px;height:34px;border-radius:6px;object-fit:cover;border:1px solid var(--line);cursor:zoom-in}
.lg-img-more{font-size:10px;color:var(--sub)}
.lg-legend{display:flex;gap:14px;font-size:11px;color:var(--sub);margin-bottom:6px}
.lg-legend .in{color:var(--up)}
.lg-legend .out{color:var(--down)}
.bars{display:flex;gap:4px;align-items:flex-end;overflow-x:auto;padding:4px 0 2px}
.bar-col{flex:1;min-width:26px;display:flex;flex-direction:column;align-items:center;gap:3px}
.bar-pair{display:flex;align-items:flex-end;gap:2px;height:92px}
.bar{width:9px;border-radius:3px 3px 0 0;min-height:2px;transition:height .25s}
.bar.in{background:var(--up)}
.bar.out{background:var(--down)}
.bar-label{font-size:10px;color:var(--sub);white-space:nowrap}
.bar-val{font-size:9px;color:var(--sub);font-variant-numeric:tabular-nums;white-space:nowrap}

/* 收支切换 */
.seg{display:flex;gap:6px}
.seg-btn{
  flex:1;height:38px;border-radius:10px;background:var(--line-2);font-size:13px;font-weight:600;color:var(--sub);
}
.seg-btn.on{background:var(--brand);color:#fff}
.seg-btn[data-t="income"].on{background:var(--up)}
.lg-save{height:46px;font-size:15px;font-weight:700;margin-top:6px}
.att-list.small .att,.att-list.small .uploader{width:64px;height:64px;border-radius:10px}
.att-x{
  position:absolute;top:2px;right:2px;width:20px;height:20px;border-radius:50%;
  background:rgba(0,0,0,.55);color:#fff;font-size:11px;line-height:20px;
}

/* ===== 看板：切换加载态 / 数据同步状态 =====
   点了周期按钮立刻给反馈（按钮转圈 + 数字轻微变淡），不等网络返回 */
.range-switch .chip.busy{opacity:.75;position:relative;padding-right:24px}
.range-switch .chip.busy::after{
  content:'';position:absolute;right:8px;top:50%;width:11px;height:11px;margin-top:-5.5px;
  border:2px solid rgba(255,255,255,.35);border-top-color:#fff;border-radius:50%;
  animation:dspin .7s linear infinite;
}
.range-switch .chip:not(.on).busy::after{border-color:rgba(0,0,0,.18);border-top-color:#666}
@keyframes dspin{to{transform:rotate(360deg)}}
.hero.is-loading .hero-amount{opacity:.55;transition:opacity .15s}
.dot{display:inline-block;width:6px;height:6px;border-radius:50%;margin-right:5px;vertical-align:middle}
.dot-ok{background:#19bf62}
.dot-run{background:#f5a623;animation:dbreathe 1.1s ease-in-out infinite}
.dot-err{background:#e34d4d}
@keyframes dbreathe{0%,100%{opacity:1}50%{opacity:.25}}

/* ===== 底部 Tab / 抽屉的未读条数 ===== */
.tab-badge{
  position:absolute;top:2px;left:50%;margin-left:4px;min-width:16px;height:16px;padding:0 4px;
  border-radius:8px;background:var(--up,#e34d4d);color:#fff;font-size:10px;font-style:normal;
  line-height:16px;text-align:center;font-weight:700;box-shadow:0 0 0 2px #fff;
}
.drawer-item .tab-badge{position:static;margin-left:auto;box-shadow:none}
.tab{position:relative}

/* ===== 内部消息 ===== */
.im-head{display:flex;align-items:center;justify-content:space-between;padding:2px 0 8px}
.im-head b{font-size:16px}
.im-head-act{display:flex;gap:6px}
.im-tipbar{
  background:#fff5f5;border:1px solid #ffd9d9;color:#c0392b;border-radius:10px;
  padding:8px 12px;font-size:12px;margin-bottom:10px
}
.im-group-label{
  display:flex;align-items:center;gap:6px;font-size:11px;color:#9aa0a8;
  padding:12px 2px 4px;font-weight:600
}
.im-group-label .im-fold{margin-left:auto;font-style:normal;color:var(--brand);font-weight:600;cursor:pointer}
.im-dot-inline{
  display:inline-block;min-width:15px;height:15px;padding:0 4px;border-radius:8px;background:var(--up,#e34d4d);
  color:#fff;font-size:10px;font-style:normal;line-height:15px;text-align:center;font-weight:700
}
.im-item{
  display:flex;align-items:center;gap:10px;padding:10px;border-radius:12px;background:#fff;
  margin-bottom:8px;cursor:pointer;position:relative;transition:background .15s
}
.im-item:active{background:#f4f5f7}
.im-item.unread{background:#f7fbff}
.im-av{border-radius:10px;object-fit:cover;flex:0 0 auto;background:#e9ebef}
.im-av-txt{
  display:flex;align-items:center;justify-content:center;color:#fff;font-weight:700;
  border-radius:10px;letter-spacing:.5px
}
.im-dot{
  position:absolute;left:44px;top:6px;min-width:17px;height:17px;padding:0 4px;border-radius:9px;
  background:var(--up,#e34d4d);color:#fff;font-size:10px;line-height:17px;text-align:center;
  font-weight:700;box-shadow:0 0 0 2px #fff
}
.im-item.unread .im-dot{box-shadow:0 0 0 2px #f7fbff}
.im-item-main{flex:1;min-width:0}
.im-item-top{display:flex;align-items:baseline;gap:6px}
.im-name{
  font-size:14px;font-weight:600;flex:1;min-width:0;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap
}
.im-name i.pin,.im-pin,.im-mute{
  display:inline-block;font-style:normal;font-size:9px;padding:1px 4px;border-radius:4px;
  margin-right:4px;vertical-align:1px;font-weight:600
}
.im-pin{background:#fff0d9;color:#a8730a}
.im-mute{background:#eef0f3;color:#8b9099}
.im-time{font-size:11px;color:#a8adb5;flex:0 0 auto}
.im-last{font-size:12px;color:#8b9099;margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.im-notice-empty{font-size:12px;color:#a8adb5;padding:6px 2px 10px}
.im-notice-box{display:flex;flex-direction:column;gap:6px}
.im-notice{background:#fff;border-radius:10px;padding:10px 12px;cursor:pointer}
.im-notice.unread{background:#fbfaff;border-left:3px solid var(--brand)}
.im-notice-t{font-size:13px;font-weight:600}
.im-notice-b{font-size:12px;color:#6b7077;margin-top:2px}
.im-notice-f{font-size:11px;color:#a8adb5;margin-top:4px}

/* 聊天窗口：消息区自己滚动，输入框吸附在底部 Tab 之上 */
/* 聊天页整块是一个纵向 flex 容器：标题栏 / 消息区 / 功能面板 / 输入栏。
   容器上边贴着顶部菜单栏、下边贴着底部 Tab（JS 按 Tab 实测高度 + 键盘高度设置 bottom），
   消息区吃掉剩余高度并自己滚动 —— 输入栏因此永远紧贴 Tab，不会被顶偏也不会挡住最新消息。 */
.im-chat{
  position:fixed;left:0;right:0;z-index:41;
  top:calc(var(--topbar-h) + var(--topnav-h));
  bottom:calc(var(--tabbar-h) + env(safe-area-inset-bottom));
  display:flex;flex-direction:column;background:var(--bg);overflow:hidden;
}
.im-chat-head{
  flex:none;display:flex;align-items:center;gap:8px;height:46px;padding:0 12px;
  background:var(--bg);border-bottom:1px solid var(--line-2)
}
.im-chat-head b{flex:1;font-size:15px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.im-msgs{
  flex:1;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch;
  padding:8px 0 6px;display:flex;flex-direction:column;gap:12px
}
.im-sys{
  align-self:center;background:#eceef1;color:#8b9099;font-size:11px;
  padding:3px 10px;border-radius:10px;max-width:80%;text-align:center
}
.im-msg{display:flex;gap:8px;align-items:flex-start}
.im-msg.mine{flex-direction:row-reverse}
.im-msg-main{max-width:74%;min-width:0}
.im-msg.mine .im-msg-main{text-align:right}
.im-msg-name{font-size:11px;color:#a8adb5;margin-bottom:3px}
.im-bubble{
  display:inline-block;background:#fff;padding:9px 12px;border-radius:12px;font-size:14px;
  line-height:1.55;text-align:left;word-break:break-word;box-shadow:0 1px 2px rgba(20,22,28,.05)
}
.im-msg.mine .im-bubble{background:#16181d;color:#fff}
.im-img{max-width:180px;max-height:240px;border-radius:10px;display:block;cursor:zoom-in}
.im-video{max-width:220px;border-radius:10px;display:block;background:#000}
.im-file{
  display:inline-block;background:#fff;border-radius:10px;padding:9px 12px;font-size:13px;
  text-decoration:none;color:var(--brand);word-break:break-all
}
.im-msg-time{font-size:10px;color:#b9bdc4;margin-top:3px}
.im-card{
  display:flex;gap:8px;background:#fff;border-radius:12px;padding:10px;cursor:pointer;
  border:1px solid var(--line-2);text-align:left
}
.im-card-thumb{width:44px;height:44px;border-radius:8px;object-fit:cover;flex:0 0 auto}
.im-card-body{min-width:0;flex:1}
.im-card-type{font-size:10px;color:var(--brand);font-weight:700}
.im-card-title{font-size:13px;font-weight:600;margin-top:1px;word-break:break-word}
.im-card-desc{font-size:11px;color:#8b9099;margin-top:2px}
.im-card-row{display:flex;justify-content:space-between;font-size:11px;color:#6b7077;margin-top:2px}
.im-card-row b{color:#16181d}
/* 带快照的卡片：点开内容在聊天里原地展开，这里给个明显的可点提示 */
.im-card.has-snap{width:100%;flex-direction:column}
.im-card-open{
  margin-top:8px;padding-top:8px;border-top:1px dashed var(--line-2);
  font-size:11px;font-weight:700;color:var(--brand);text-align:center
}
/* 输入栏：固定在底部 Tab 之上，页面滚动时不动 */
/* 输入栏：flex 容器的最后一项，紧贴在底部 Tab 上方（不再用 fixed + 猜高度） */
.im-input{
  flex:none;position:static;
  display:flex;gap:8px;align-items:center;
  padding:8px 12px;
  background:var(--bg,#f5f6f8);border-top:1px solid var(--line-2)
}
.im-input input{
  flex:1;height:40px;border:1px solid var(--line);border-radius:20px;padding:0 14px;
  font-size:14px;background:#fff;min-width:0
}
.im-plus,.im-send{
  flex:0 0 auto;width:40px;height:40px;border-radius:20px;border:1px solid var(--line);
  background:#fff;font-size:18px;color:#16181d
}
.im-send{width:auto;padding:0 16px;background:#16181d;color:#fff;font-size:14px;border-color:#16181d}
/* 点「＋」后面板展开：排在输入栏上方，把消息区往上顶，绝不盖住输入框 */
.im-panel{
  flex:none;position:static;
  display:grid;grid-template-columns:repeat(4,1fr);gap:8px;padding:10px 12px 12px;
  background:var(--bg,#f5f6f8);border-top:1px solid var(--line-2);
  box-shadow:0 -6px 18px rgba(20,22,28,.06)
}
.im-pnl{
  background:#fff;border:1px solid var(--line-2);border-radius:12px;padding:10px 4px;
  font-size:12px;color:#16181d;line-height:1.4;
  display:flex;flex-direction:column;align-items:center;gap:4px
}
.im-pnl i{font-style:normal;font-size:20px;line-height:1}
.im-pnl:active{background:#f4f5f7}
.im-pick-list{display:flex;flex-direction:column;gap:6px;max-height:46vh;overflow:auto}
.im-pick{
  text-align:left;background:#fff;border:1px solid var(--line-2);border-radius:10px;padding:10px;
  font-size:13px;display:flex;flex-direction:column;gap:3px
}
.im-pick.on{border-color:var(--brand);background:#f7fbff}
.im-pick span{font-size:11px;color:#8b9099}
.im-set-row{
  display:flex;align-items:center;justify-content:space-between;padding:11px 0;
  border-bottom:1px solid var(--line-2);font-size:14px
}
.im-set-val{color:#8b9099;font-size:13px}

/* 转发面板 */
.fwd-card{background:#fafbfc;border:1px solid var(--line-2);border-radius:12px;padding:12px}
.fwd-type{font-size:11px;color:var(--brand);font-weight:700}
.fwd-title{font-size:14px;font-weight:600;margin-top:2px;word-break:break-all}
.fwd-desc{font-size:12px;color:#8b9099;margin-top:3px}
.fwd-search,#grpName,.fwd-url{
  width:100%;margin-top:10px;height:38px;border:1px solid var(--line);border-radius:10px;
  padding:0 12px;font-size:14px;background:#fff
}
.fwd-url{height:auto;padding:10px 12px;font-size:12px;font-family:ui-monospace,Menlo,monospace;word-break:break-all}

/* 「转发到微信」卡片预览（第24版）：仿真微信聊天里看到的链接卡片 */
.wx-card-prev{display:flex;gap:10px;align-items:stretch;background:#fff;
  border:1px solid var(--line-2);border-radius:10px;padding:10px;box-shadow:0 1px 6px rgba(20,22,28,.05)}
.wx-card-img{flex:0 0 72px;width:72px;height:72px;border-radius:8px;object-fit:cover;background:#f2f3f5;display:block}
.wx-card-ph{display:flex;align-items:center;justify-content:center;
  font-size:26px;font-weight:700;color:#c9a86a;background:#17181c}
.wx-card-txt{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px}
.wx-card-txt b{font-size:13px;font-weight:600;line-height:1.45;word-break:break-all;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.wx-card-txt span{font-size:12px;color:#8b9099;line-height:1.45;word-break:break-all;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.wx-card-txt i{font-style:normal;font-size:11px;color:#b0b4bb;margin-top:auto}
/* 电脑端扫码转发 */
.wx-qr{display:flex;flex-direction:column;align-items:center;gap:6px;padding:6px 0 2px}
.wx-qr img{width:168px;height:168px;border:1px solid var(--line);border-radius:10px;background:#fff}
.wx-qr span{font-size:12px;color:#8b9099}

/* ===== 生产安排 ===== */
/* 搜索栏下方的快捷分类：全部 / 未出货 / 已出货 */
.pd-tabs{display:flex;gap:8px;margin-top:10px}
.pd-tabs .chip{
  flex:1;display:flex;align-items:center;justify-content:center;gap:4px;
  padding:7px 6px;font-size:13px;font-weight:600;border-radius:10px
}
.pd-tabs .chip em{font-style:normal;font-size:11px;font-weight:700;opacity:.75}
.pd-tabs .chip[data-ship="all"].on{background:var(--brand);color:#fff}
.pd-tabs .chip[data-ship="un"].on{background:#c0392b;color:#fff}
.pd-tabs .chip[data-ship="shipped"].on{background:#148a48;color:#fff}

.pd-card{
  position:relative;display:flex;gap:14px;background:#fff;border-radius:14px;padding:12px;
  margin-bottom:10px;cursor:pointer;transition:background .15s
}
.pd-card:active{background:#f7f8fa}
/* 缩略图放大铺满：上沿对齐品名、下沿对齐最后一行「合计」 */
.pd-thumb{
  width:104px;flex:0 0 104px;align-self:stretch;min-height:104px;border-radius:10px;
  overflow:hidden;background:#f2f3f5;display:flex;align-items:center;justify-content:center
}
.pd-thumb img{width:100%;height:100%;object-fit:cover;display:block}
.pd-thumb span{font-size:11px;color:#b0b4bb}
.pd-main{flex:1;min-width:0}
/* 品名给右上角的出货标签让出位置，避免文字压在标签下面 */
.pd-title{
  font-size:15px;font-weight:700;display:flex;align-items:center;gap:8px;flex-wrap:wrap;
  margin-bottom:6px;padding-right:62px
}
.pd-meta{display:flex;align-items:baseline;font-size:12px;line-height:1.8}
.pd-meta em{font-style:normal;color:#a0a5ad;flex:0 0 60px}
.pd-meta b{font-weight:600;color:#3a3f47;word-break:break-all}
/* 出货状态：固定钉在卡片右上角，大小保持不动 */
.pd-ship{
  position:absolute;top:12px;right:12px;z-index:1;
  font-size:12px;font-weight:800;letter-spacing:.5px;padding:3px 9px;border-radius:7px;
  background:#fdecec;color:#c0392b;box-shadow:inset 0 0 0 1px #f7c9c9
}
.pd-ship.on{background:#e7f7ee;color:#148a48;box-shadow:inset 0 0 0 1px #b8e5c8}
.search-clear{
  flex:0 0 auto;width:22px;height:22px;border-radius:11px;background:#e9ebef;color:#6b7077;
  font-size:15px;line-height:1
}
/* 详情页 */
.pd-detail-head{display:flex;align-items:center;gap:8px;padding:4px 0 8px}
.pd-detail-head b{flex:1;font-size:15px}
.pd-detail{padding-bottom:96px}
.pd-base{display:flex;gap:12px;background:#fff;border-radius:14px;padding:12px}
.pd-img{
  width:128px;height:128px;flex:0 0 128px;border-radius:10px;overflow:hidden;background:#f2f3f5;
  position:relative;display:flex;align-items:center;justify-content:center
}
.pd-img img{width:100%;height:100%;object-fit:cover;display:block}
.pd-img-ph{font-size:12px;color:#b0b4bb}
.pd-img-btn{
  position:absolute;left:0;right:0;bottom:0;background:rgba(0,0,0,.55);color:#fff;
  font-size:12px;padding:4px 0;text-align:center
}
.pd-fields{flex:1;min-width:0;display:flex;flex-direction:column;gap:8px}
.pd-field{display:flex;align-items:center;gap:8px;font-size:12px}
.pd-field>span{flex:0 0 74px;color:#8b9099}
.pd-field>b{flex:1;font-weight:600;color:#16181d;word-break:break-all;text-align:right}
.pd-input{
  flex:1;min-width:0;height:32px;border:1px solid var(--line);border-radius:8px;padding:0 10px;
  font-size:13px;background:#fff;text-align:right
}
.pd-sec{background:#fff;border-radius:14px;padding:12px;margin-top:10px}
.pd-sec-title{
  display:flex;align-items:center;justify-content:space-between;font-size:13px;font-weight:700;
  margin-bottom:10px
}
.pd-fabrics{display:flex;flex-direction:column;gap:8px}
.pd-fabric{display:flex;align-items:center;gap:8px}
.pd-fab-name{
  width:88px;flex:0 0 88px;height:32px;border:1px solid var(--line);border-radius:8px;
  padding:0 8px;font-size:13px;background:#fafbfc;font-weight:600
}
.pd-fab-val{
  flex:1;min-width:0;height:32px;border:1px solid var(--line);border-radius:8px;padding:0 10px;
  font-size:13px;background:#fff
}
/* 下单数量：码数横向排开、整块左右贴边；多个版本在下方依次往下排 */
.pd-tip{font-size:11px;color:#a0a5ad;margin:-4px 0 8px}
.pd-versions{display:flex;flex-direction:column;gap:12px}
.pd-ver{
  width:100%;border:1px solid var(--line-2);border-radius:10px;padding:10px;background:#fcfcfd
}
.pd-ver-head{display:flex;align-items:center;gap:8px;margin-bottom:8px}
.pd-ver-idx{
  flex:0 0 auto;width:20px;height:20px;border-radius:10px;background:#16181d;color:#fff;
  font-size:11px;font-weight:700;display:flex;align-items:center;justify-content:center
}
.pd-ver-title{
  flex:1;min-width:0;height:30px;border:1px solid var(--line);border-radius:8px;padding:0 10px;
  font-size:13px;background:#fff;font-weight:600
}
.pd-ver-del{
  flex:0 0 auto;width:24px;height:24px;border-radius:12px;background:#fdecec;color:#e34d4d;font-size:14px
}
/* 5 列网格：十档码数排两行，小屏自动变 4 列 */
.pd-size-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:6px}
.pd-size-cell{
  border:1px solid #eceef1;border-radius:9px;padding:5px 2px 6px;text-align:center;background:#fff;
  overflow:hidden
}
.pd-size-cell i{
  display:block;font-style:normal;font-size:11px;color:#8b9099;line-height:1.5;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis
}
.pd-qty{
  width:100%;height:26px;border:1px solid var(--line);border-radius:6px;padding:0 4px;
  font-size:13px;font-weight:700;text-align:center;background:#fff
}
.pd-qty-v{display:block;font-size:14px;font-weight:700;color:#16181d;line-height:1.5}
.pd-qty-v::before{content:''}
.pd-ver-sum{margin-top:8px;font-size:12px;color:#6b7077;text-align:right}
.pd-ver-total{font-size:15px;color:#16181d;margin-left:4px}
.pd-grand{margin-top:10px;font-size:13px;color:#6b7077}
.pd-grand b{font-size:16px;color:#16181d}
/* 长按码数弹出的设置面板 */
.pd-set-row{
  display:flex;align-items:center;justify-content:space-between;gap:10px;
  padding:8px 0;border-bottom:1px solid var(--line-2)
}
.pd-set-row:last-of-type{border-bottom:none}
.pd-set-act{display:flex;gap:8px}
.pd-set-val{font-size:12px;color:#8b9099;font-weight:600}
.pd-colors{display:grid;grid-template-columns:repeat(8,1fr);gap:6px;margin-top:10px}
.pd-color{
  height:26px;border-radius:8px;border:1px solid var(--line);background:#fff;
  font-size:12px;color:#8b9099
}
.pd-color.on{box-shadow:0 0 0 2px #16181d;border-color:#16181d}
/* 窄屏十档码数排 4 列，保证每格都点得到 */
@media(max-width:360px){
  .pd-size-grid{grid-template-columns:repeat(4,1fr)}
  .pd-thumb{width:88px;flex:0 0 88px;min-height:88px}
}
/* 备注：加大加粗、红色醒目（编辑框和预览都走这一套，避免漏看） */
.pd-remark{
  width:100%;border:1px solid #f3c9c9;border-radius:10px;padding:12px;
  font-size:17px;font-weight:800;color:#c0392b;background:#fff8f8;resize:vertical;
  line-height:1.7;letter-spacing:.2px
}
.pd-remark::placeholder{font-size:14px;font-weight:500;color:#c8a8a8}
.pd-select{
  width:100%;height:38px;border:1px solid var(--line);border-radius:10px;padding:0 10px;
  font-size:14px;background:#fff
}
.pd-select:disabled{background:#f5f6f8;color:#8b9099}
/* 音量滑杆 */
input[type=range]{
  -webkit-appearance:none;appearance:none;width:100%;height:4px;border-radius:2px;
  background:var(--line-2);outline:none;margin:6px 0
}
input[type=range]::-webkit-slider-thumb{
  -webkit-appearance:none;appearance:none;width:20px;height:20px;border-radius:50%;
  background:#16181d;border:2px solid #fff;box-shadow:0 1px 4px rgba(0,0,0,.25);cursor:pointer
}
input[type=range]::-moz-range-thumb{
  width:18px;height:18px;border-radius:50%;background:#16181d;border:2px solid #fff;cursor:pointer
}
.pd-actions{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;margin-top:12px}
.pd-actions .btn{height:40px;font-size:13px}
.pd-actions .danger{color:#e34d4d;border-color:#f5c6c6}
.pd-savebar{
  position:sticky;bottom:0;display:flex;gap:10px;padding:10px 0 calc(10px + env(safe-area-inset-bottom));
  background:var(--bg,#f5f6f8)
}
.pd-savebar .btn{flex:1;height:44px}

.menu-badge{
  position:absolute;top:3px;right:3px;min-width:16px;height:16px;padding:0 4px;border-radius:8px;
  background:var(--up,#e34d4d);color:#fff;font-size:10px;font-style:normal;line-height:16px;
  text-align:center;font-weight:700;box-shadow:0 0 0 2px #17181c
}
#btnMenu{position:relative}
.inv-foot-row{display:flex;justify-content:flex-end;margin-top:8px;padding-top:8px;border-top:1px solid var(--line-2)}
.inv-foot-row .btn{padding:4px 12px;font-size:12px}
.mini-btn.on{background:#16181d;color:#fff;border-color:#16181d}

/* ================= 工资薪酬（工资条） ================= */
.pr-head{display:flex;align-items:baseline;gap:8px;padding:2px 0 6px}
.pr-head b{font-size:16px}
.pr-head-sub{font-size:11px;color:var(--sub)}
.pr-years{display:flex;gap:8px;flex-wrap:wrap;padding-bottom:8px}
.pr-months{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-top:4px}
.pr-mcard{
  background:var(--card);border-radius:12px;box-shadow:var(--shadow);padding:12px 8px;
  display:flex;flex-direction:column;align-items:center;gap:3px;
}
.pr-mcard:active{background:#fafbfc}
.pr-mcard.zero{opacity:.55}
.pr-mc-m{font-size:13px;color:var(--sub)}
.pr-mc-v{font-size:15px;font-weight:700;color:var(--gold);font-variant-numeric:tabular-nums}
.pr-mc-c{font-size:10px;color:var(--sub)}
.pr-year-total{
  margin-top:14px;background:var(--card);border-radius:14px;box-shadow:var(--shadow);
  padding:16px;text-align:center;
}
.pr-year-total .k{font-size:12px;color:var(--sub)}
.pr-year-total .v{font-size:26px;font-weight:800;color:var(--gold);margin-top:6px;font-variant-numeric:tabular-nums;letter-spacing:.5px}
.pr-year-total .s{font-size:11px;color:var(--sub);margin-top:4px}
@media(max-width:360px){.pr-months{grid-template-columns:repeat(2,1fr)}}

/* ---- 月份成员列表 ---- */
.pr-nav{display:flex;align-items:center;gap:10px;padding:2px 0 8px}
.pr-nav b{flex:1;font-size:15px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pr-nav-sub{font-size:11px;color:var(--sub);flex:none}
/* 月份页右上角【导出文档】 */
.pr-export{flex:none;margin-left:auto;font-weight:600}
.pr-exp-count{font-size:12px;color:var(--sub);margin-left:auto}
.pr-exp-list{max-height:46vh;overflow-y:auto}
.pr-stat{display:flex;gap:10px;margin-bottom:8px}
.pr-stat>div{
  flex:1;background:var(--card);border-radius:12px;box-shadow:var(--shadow);
  padding:10px 8px;text-align:center;
}
.pr-stat .k{display:block;font-size:11px;color:var(--sub);white-space:nowrap}
.pr-stat .v{display:block;font-size:15px;font-weight:700;margin-top:4px;font-variant-numeric:tabular-nums}
.pr-stat .v.gold{color:var(--gold)}
.pr-search{
  width:100%;height:38px;border:1px solid var(--line);border-radius:10px;padding:0 12px;
  background:#fff;font-size:14px;
}
.pr-row{
  display:flex;align-items:center;gap:12px;background:var(--card);border-radius:var(--radius);
  box-shadow:var(--shadow);padding:12px;margin-bottom:10px;cursor:pointer;
}
.pr-row:active{background:#fafbfc}
.pr-ava{
  border-radius:50%;object-fit:cover;background:var(--brand);color:var(--gold);
  font-weight:700;display:flex;align-items:center;justify-content:center;flex:none;
}
.pr-ava.ph{background:#efe6d6;color:#8a6d3b}
.pr-info{flex:1;min-width:0}
.pr-name{font-size:15px;font-weight:700}
.pr-sub{font-size:11px;color:var(--sub);margin-top:3px;font-variant-numeric:tabular-nums}
.pr-pay{text-align:right;flex:none;margin-left:6px}
.pr-pay .v{font-size:17px;font-weight:700;color:var(--gold);font-variant-numeric:tabular-nums}
.pr-pay .k{font-size:10px;color:var(--sub);margin-top:2px}

/* ---- 工资条 ---- */
.pr-slip{
  background:var(--card);border-radius:16px;box-shadow:var(--shadow);padding:16px;
}
.pr-slip-head{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:14px}
.pr-big{font-size:26px;font-weight:800;letter-spacing:2px}
.pr-ym{display:flex;gap:6px;margin-left:auto}
.pr-ym select{
  height:36px;border:1px solid var(--line);border-radius:10px;padding:0 8px;background:#fff;font-size:14px;
}
.pr-ym-txt{margin-left:auto;font-size:13px;color:var(--sub)}
.pr-basic{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:6px}
.pr-basic-cell{display:flex;flex-direction:column;gap:5px;min-width:0}
.pr-basic-cell label{font-size:11px;color:var(--sub)}
.pr-basic-cell input,.pr-basic-cell select{
  height:40px;border:1px solid var(--line);border-radius:10px;padding:0 10px;
  background:#fbfbfc;font-size:14px;width:100%;min-width:0;
}
.pr-basic-cell input:focus,.pr-basic-cell select:focus{background:#fff;border-color:var(--brand)}
.pr-ro-val{
  height:40px;line-height:40px;border:1px solid var(--line-2);border-radius:10px;padding:0 10px;
  background:#f5f6f8;font-size:14px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  font-variant-numeric:tabular-nums;
}
@media(max-width:420px){.pr-basic{grid-template-columns:1fr}}
.pr-sec{border-top:1px solid var(--line-2);margin-top:14px;padding-top:12px}
.pr-sec-t{font-size:13px;font-weight:700;margin-bottom:10px;display:flex;align-items:center;gap:6px}
.pr-sec-t:before{content:"";width:3px;height:13px;border-radius:2px;background:var(--brand);display:inline-block}
.pr-field{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:8px}
.pr-field label{font-size:13px;color:var(--text);flex:none}
.pr-field input{
  width:130px;height:38px;border:1px solid var(--line);border-radius:10px;padding:0 10px;
  background:#fbfbfc;font-size:14px;text-align:right;font-variant-numeric:tabular-nums;
}
.pr-field input:focus{background:#fff;border-color:var(--brand)}
.pr-field.ro .pr-ro-val{width:130px;height:38px;line-height:38px;text-align:right;flex:none}
.pr-sum{
  display:flex;justify-content:space-between;align-items:center;margin-top:10px;
  background:var(--line-2);border-radius:10px;padding:9px 12px;font-size:13px;
}
.pr-sum b{font-size:16px;font-weight:800;font-variant-numeric:tabular-nums}
.pr-sec.net .pr-sec-t:before{background:var(--gold)}
.pr-formula{font-size:12px;color:var(--sub);line-height:1.7;font-variant-numeric:tabular-nums}
.pr-formula b{color:var(--text);font-weight:700}
.pr-net{
  margin-top:8px;text-align:center;font-size:30px;font-weight:800;color:var(--gold);
  font-variant-numeric:tabular-nums;letter-spacing:.5px;
}
.pr-remark-box{
  margin-top:14px;background:#fff8f8;border:1px solid #f3c9c9;border-radius:12px;padding:12px 14px;
}
.pr-remark-box .nt{font-size:13px;font-weight:800;color:#c0392b;margin-bottom:6px;display:flex;align-items:center;gap:6px}
.pr-remark-box .nt:before{content:"";width:3px;height:13px;border-radius:2px;background:#c0392b;display:inline-block}
.pr-remark-box .nc{font-size:15px;font-weight:700;color:#c0392b;line-height:1.7;white-space:pre-wrap;word-break:break-word}
.pr-who{margin-top:12px;font-size:11px;color:var(--sub);text-align:right}
/* 工资条：只读模式（从私信卡片点进来）——只显示这一页，不给返回上一级 */
.pr-lock-tip{
  font-size:11px;color:#8b9099;border:1px solid var(--line);border-radius:999px;
  padding:2px 8px;background:#fafbfc
}
.pr-lock-note{
  margin:8px 0 0;padding:8px 10px;border-radius:10px;background:#f7f8fa;
  border:1px solid var(--line-2);font-size:12px;color:var(--sub);text-align:center
}
.pr-custom-name{
  margin-top:6px;width:100%;height:36px;border:1px solid var(--line);border-radius:8px;
  padding:0 8px;font-size:13px;background:#fff
}

/* ===== 记账本：账户 ===== */
.lg-accounts{
  margin-top:10px;border-top:1px dashed var(--line);padding-top:10px
}
.lg-acc-head{display:flex;align-items:baseline;justify-content:space-between;gap:8px;margin-bottom:6px}
.lg-acc-head b{font-size:13px}
.lg-acc-head span{font-size:11px;color:var(--sub)}
.lg-acc-head em{font-style:normal;font-weight:700}
.lg-acc-row{
  display:flex;align-items:center;gap:8px;padding:6px 0;border-bottom:1px solid #f5f6f8
}
.lg-acc-row:last-child{border-bottom:0}
.lg-acc-row .n{font-size:13px;color:var(--text);font-weight:600}
.lg-acc-row .c{margin-left:auto;font-size:11px;color:var(--sub)}
.lg-acc-row .v{font-size:14px;font-weight:700;font-variant-numeric:tabular-nums;min-width:74px;text-align:right}
.lg-acc-edit{display:flex;flex-direction:column;gap:8px}
.lg-acc-edit-row{display:flex;align-items:center;gap:8px}
.lg-acc-edit-row input{
  flex:1;min-width:0;height:34px;border:1px solid var(--line);border-radius:8px;padding:0 10px;font-size:13px
}

/* ===== 生产安排：布封备注（没写是灰色占位，写了变红） ===== */
.pd-fab-note{
  flex:1;min-width:0;height:32px;border:1px dashed #dfe2e7;border-radius:8px;
  padding:0 10px;font-size:13px;background:#fff;color:#b6bac1
}
.pd-fab-note::placeholder{color:#b6bac1}
.pd-fab-note.has{
  color:#c0392b;font-weight:700;border-style:solid;border-color:#f3c9c9;background:#fff8f8
}
.pd-fab-note.ro{
  display:flex;align-items:center;height:32px;border-style:solid;border-color:#f3c9c9;
  background:#fff8f8;color:#c0392b;font-weight:700;font-size:13px
}

/* ===== 数据看板：首屏右上角【刷新】 ===== */
.hero{position:relative}
.hero-refresh{
  position:absolute;top:10px;right:10px;z-index:2;
  border:1px solid rgba(255,255,255,.35);background:rgba(255,255,255,.14);
  color:rgba(255,255,255,.92);font-size:11px;line-height:1;
  padding:5px 9px;border-radius:999px;backdrop-filter:blur(2px)
}
.hero-refresh:active{background:rgba(255,255,255,.28)}
.hero-refresh.busy{opacity:.6}

/* ===== 桌面端（宽屏）适配：放在最后，确保能覆盖前面的规则 =====
   电脑上有顶部菜单栏就够了，底部 Tab 让位给内容 */
@media(min-width:900px){
  .tabbar{display:none}
  .view{padding-bottom:40px}
  .fab{bottom:28px}
  .toast{bottom:30px}
  /* 电脑上没有底部 Tab，整块聊天区直接贴屏幕底部（输入栏是它的最后一项，跟着贴底） */
  .im-chat{bottom:0}
}

/* ===== 电脑端左侧栏：默认固定在侧边，可随时收起 =====
   宽屏下把抽屉从「覆盖层」变成「常驻侧栏」；正文保持居中不被侧栏往右推：
   · 屏幕够宽（≥1400px）：正文按整个浏览器窗口居中，侧栏只是左边多出的一条，
     开与关正文都停在屏幕中央，位置不跳。
   · 中窄桌面（900~1399px）：窗口减去两侧栏宽度后放不下正文时，
     退回「在侧栏右侧的剩余区域里居中」，保证正文永远不会钻到侧栏底下。
   顶栏和顶部菜单栏仍横跨整屏，手机上不受影响。 */
@media(min-width:900px) and (max-width:1399px){
  body.sb-pinned .app{padding-left:var(--sidebar-w)}
}
@media(min-width:1400px){
  /* 正文按整屏居中：不推 .app，靠收窄 .view 的最大宽度保证两侧都留出侧栏的位置 */
  body.sb-pinned .view{
    max-width:min(1120px, calc(100vw - (var(--sidebar-w) + 16px)*2))
  }
}
@media(min-width:900px){
  body.sb-pinned .drawer{
    transform:translateX(0);
    top:calc(var(--topbar-h) + var(--topnav-h));
    box-shadow:none;border-right:1px solid var(--line);
    z-index:38;                       /* 低于顶栏(40)，不与吸顶元素抢层 */
  }
  /* 固定时不需要遮罩：否则整个正文都被压暗，点哪儿都像在关闭弹层 */
  body.sb-pinned .drawer-mask{display:none}
  /* 只有固定状态下才显示「收起」按钮 */
  body.sb-pinned .sb-collapse{display:flex}
  /* 聊天区是整块 fixed 的，固定侧栏时也要跟着让位 */
  body.sb-pinned .im-chat{left:var(--sidebar-w)}
}
/* 收起按钮：默认（手机 / 未固定）不出现 */
.sb-collapse{
  display:none;margin-left:auto;flex:none;width:30px;height:30px;border-radius:8px;
  background:var(--line-2);color:var(--sub);font-size:14px;line-height:1;
  align-items:center;justify-content:center
}
.sb-collapse:active{background:var(--line)}
