/* ===== 出口货柜销售工作台 ===== */
:root{
  --navy:#1f3a5f; --navy2:#23436b;
  --blue:#2f6cad; --blue-d:#275c95;
  --head-bg:#dce9f5;
  --gold:#f3d166; --gold-bg:#fdf3d2;
  --green-bg:#e6f4ea; --green:#2e7d4f;
  --yellow-bg:#fdf6d8; --yellow:#9a7b16;
  --bg:#eef2f6; --card:#ffffff;
  --border:#dde5ee; --text:#2b3a4a; --muted:#7a8898;
  --danger:#c0392b; --danger-bg:#fbeae7;
  --shadow:0 1px 3px rgba(31,58,95,.08), 0 1px 2px rgba(31,58,95,.06);
  --radius:10px;
}
*{box-sizing:border-box;margin:0;padding:0}
[hidden]{display:none!important}
html,body{height:100%}
body{
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;
  background:var(--bg);color:var(--text);font-size:14px;line-height:1.5;
}
/* 数字字体 */
.num,.money,.bags{font-variant-numeric:tabular-nums;font-feature-settings:"tnum"}
button{font-family:inherit;cursor:pointer;border:none;background:none}
input,select,textarea{font-family:inherit;font-size:14px;color:var(--text)}
a{color:var(--blue);text-decoration:none}

/* ===== 布局 ===== */
.layout{display:flex;min-height:100vh}
.sidebar{
  width:224px;flex-shrink:0;background:linear-gradient(180deg,var(--navy),var(--navy2));
  color:#dbe6f2;display:flex;flex-direction:column;position:fixed;top:0;bottom:0;left:0;z-index:60;
}
.brand{display:flex;align-items:center;gap:10px;padding:20px 16px;font-weight:700;font-size:16px;color:#fff;flex-shrink:0}
.brand-mark{display:grid;place-items:center;width:40px;height:40px;flex-shrink:0;border:1px solid rgba(255,255,255,.1);border-radius:12px;background:rgba(255,255,255,.07);color:#6ea8d9}
.brand-logo{width:27px;height:27px;flex-shrink:0}
.brand-copy{display:flex;flex-direction:column;gap:3px;min-width:0}
.brand-name{white-space:nowrap}
.brand-copy small{font-size:9px;font-weight:600;letter-spacing:.12em;color:#8fa8c2;white-space:nowrap}
.sidenav{flex:1;min-height:0;overflow-y:auto;padding:4px 10px 12px;scrollbar-width:thin;scrollbar-color:rgba(255,255,255,.12) transparent}
.sidenav-group{margin-top:7px}
.sidenav-group-items{display:grid;gap:1px}
.sidenav-group-title{display:flex;align-items:center;justify-content:space-between;width:100%;padding:6px 14px;font-size:11.5px;color:#8fa8c2;letter-spacing:.08em;cursor:pointer;user-select:none;text-align:left;border-radius:8px}
.sidenav-group-title:hover{color:#c3d3e6}
.sidenav-arrow{width:14px;height:14px;transition:transform .2s}
.sidenav-arrow.rotated{transform:rotate(-90deg)}
.sidenav-title{font-size:11px;color:#8fa8c2;padding:10px 18px 5px;letter-spacing:.08em}
.sidenav a{position:relative;display:flex;align-items:center;gap:12px;min-height:38px;padding:6px 14px;color:#c3d3e6;font-size:13px;border-radius:9px;-webkit-tap-highlight-color:transparent}
.sidenav a.sidenav-single{font-weight:600}
.sidenav a:hover{background:rgba(255,255,255,.07);color:#fff}
.sidenav a:active{transform:translateY(1px);background:rgba(255,255,255,.12)}
.sidenav a.active{background:rgba(255,255,255,.12);color:#fff}
.sidenav a.active::before{content:"";position:absolute;left:0;top:8px;bottom:8px;width:3px;border-radius:3px;background:var(--gold)}
.sidenav a:focus-visible,.sidenav-group-title:focus-visible{outline:2px solid var(--gold);outline-offset:-2px}
.sidenav svg{width:20px;height:20px;opacity:.85;flex-shrink:0;stroke-linecap:round;stroke-linejoin:round}
.sidenav .sidenav-arrow{width:16px;height:16px}
.sidenav a.active svg{opacity:1}
.sidebar-foot{flex-shrink:0;padding:16px 18px;font-size:11px;color:#8fa8c2;border-top:1px solid rgba(255,255,255,.1);padding-bottom:max(16px,env(safe-area-inset-bottom))}

.mainwrap{flex:1;margin-left:224px;display:flex;flex-direction:column;min-width:0}
.topbar{
  height:58px;background:var(--card);border-bottom:1px solid var(--border);
  display:flex;align-items:center;gap:14px;padding:0 20px;position:sticky;top:0;z-index:40;box-shadow:var(--shadow);
}
.city-switch{display:flex;align-items:center;gap:8px}
.city-label{font-size:12.5px;color:var(--muted)}
.city-select{
  border:1px solid var(--border);border-radius:8px;padding:7px 10px;background:#fff;min-width:170px;font-weight:600;
}
.city-select:focus{outline:2px solid rgba(47,108,173,.25);border-color:var(--blue)}
.icon-btn{display:none;color:var(--navy)}

.view{padding:20px;flex:1;max-width:100%;overflow-x:hidden}
.page-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px;flex-wrap:wrap;gap:10px}
.page-title{font-size:19px;font-weight:700;color:var(--navy)}
.page-sub{font-size:12.5px;color:var(--muted);margin-top:2px}

/* ===== 卡片 / 统计 ===== */
.card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);margin-bottom:16px}
.card-head{padding:13px 16px;border-bottom:1px solid var(--border);font-weight:700;color:var(--navy);display:flex;align-items:center;justify-content:space-between;gap:10px}
.card-body{padding:16px}
.stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:14px;margin-bottom:16px}
.stat-grid-6{grid-template-columns:repeat(6,1fr)}
@media (max-width:768px){.stat-grid-6{grid-template-columns:repeat(3,1fr)}}
.stat{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);padding:14px 16px;box-shadow:var(--shadow)}
.stat .label{font-size:12.5px;color:var(--muted);display:flex;align-items:center;gap:6px}
.stat .value{font-size:22px;font-weight:700;margin-top:6px;font-variant-numeric:tabular-nums}
.stat .hint{font-size:11.5px;color:var(--muted);margin-top:3px}
.stat.green .value{color:var(--green)}
.stat.gold .value{color:#b8860b}
.stat.red .value{color:var(--danger)}
.stat.blue .value{color:var(--blue)}

/* ===== 表格 ===== */
.table-wrap{overflow-x:auto;border-radius:8px}
table.data{width:100%;border-collapse:collapse;font-size:13px;white-space:nowrap}
table.data th{background:var(--head-bg);color:var(--navy);font-weight:700;padding:9px 11px;text-align:center;border:1px solid #cdddee}
table.data td{padding:8px 11px;border:1px solid var(--border);background:#fff}
table.data td.num,table.data td.money,table.data td.bags{text-align:right}
table.data td.ctr{text-align:center}
table.data tbody tr:hover td{background:#f5f9fd}
table.data tr.total td{background:var(--gold-bg);font-weight:700;color:#7a5b00}
table.data td.cost{background:var(--green-bg)}
table.data td.profit{background:var(--green-bg);color:var(--green);font-weight:600}
table.data td.price{background:var(--yellow-bg)}
table.data td.neg{color:var(--danger);font-weight:600}
.table-note{font-size:12px;color:var(--muted);margin-top:8px}

/* ===== 按钮 ===== */
.btn{display:inline-flex;align-items:center;gap:6px;border-radius:8px;padding:8px 14px;font-size:13.5px;font-weight:600;
  background:var(--blue);color:#fff;transition:.12s;border:1px solid transparent}
.btn:hover{background:var(--blue-d)}
.btn.secondary{background:#fff;color:var(--navy);border-color:var(--border)}
.btn.secondary:hover{background:#f0f5fa}
.btn.gold{background:#e8b923;color:#4a3a00}
.btn.danger{background:var(--danger)}
.btn.sm{padding:5px 10px;font-size:12.5px}
.btn.ghost{background:transparent;color:var(--blue)}
.btn:disabled{opacity:.5;cursor:not-allowed}

/* ===== 表单 ===== */
.form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:14px}
.field{display:flex;flex-direction:column;gap:5px}
.field label{font-size:12.5px;color:var(--muted);font-weight:600}
.field input,.field select,.field textarea{
  border:1px solid var(--border);border-radius:8px;padding:9px 11px;background:#fff;width:100%;
}
.field input:focus,.field select:focus,.field textarea:focus{outline:2px solid rgba(47,108,173,.22);border-color:var(--blue)}
.field .err{color:var(--danger);font-size:12px}
.form-actions{display:flex;gap:10px;margin-top:18px;flex-wrap:wrap}
.checkbox{display:flex;align-items:center;gap:8px;font-size:13.5px}
.checkbox input{width:16px;height:16px}

/* ===== 模态框 ===== */
.modal-mask{position:fixed;inset:0;background:rgba(20,35,55,.45);z-index:100;display:flex;align-items:center;justify-content:center;padding:16px}
.modal{background:#fff;border-radius:12px;width:100%;max-width:560px;max-height:92vh;display:flex;flex-direction:column;box-shadow:0 12px 40px rgba(0,0,0,.25)}
.modal.lg{max-width:920px}
.modal-head{padding:15px 18px;border-bottom:1px solid var(--border);font-weight:700;font-size:16px;color:var(--navy);display:flex;justify-content:space-between;align-items:center}
.modal-body{padding:18px;overflow-y:auto}
.modal-foot{padding:13px 18px;border-top:1px solid var(--border);display:flex;justify-content:flex-end;gap:10px}
.modal-close{color:var(--muted);font-size:20px;line-height:1}

/* ===== Toast ===== */
#toastRoot{position:fixed;top:18px;right:18px;z-index:200;display:flex;flex-direction:column;gap:10px}
.toast{background:#fff;border-left:4px solid var(--blue);border-radius:8px;padding:11px 16px;box-shadow:0 6px 20px rgba(0,0,0,.15);min-width:220px;max-width:360px;font-size:13.5px;animation:slidein .2s}
.toast.success{border-left-color:var(--green)}
.toast.error{border-left-color:var(--danger)}
.toast.warn{border-left-color:#e8b923}
@keyframes slidein{from{transform:translateX(30px);opacity:0}to{transform:none;opacity:1}}

/* ===== 徽章 ===== */
.badge{display:inline-block;padding:2px 9px;border-radius:20px;font-size:12px;font-weight:600}
.badge.gray{background:#eef1f5;color:#5a6a7a}
.badge.green{background:var(--green-bg);color:var(--green)}
.badge.blue{background:#e3effa;color:var(--blue)}
.badge.gold{background:var(--gold-bg);color:#9a7b16}
.badge.red{background:var(--danger-bg);color:var(--danger)}
.badge.orange{background:#fdeedc;color:#c07a1a}

/* 粘贴区 */
textarea.paste{min-height:180px;font-family:ui-monospace,Menlo,Consolas,monospace;font-size:13px;line-height:1.7}
.match-flag{font-size:12px;padding:2px 7px;border-radius:6px}
.chart{width:100%;height:340px}
.chart.sm{height:280px}
.chart-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(360px,1fr));gap:16px}
.chart-grid>.card,.chart-grid .card-body,.chart-grid .chart{min-width:0}
.trend-date-filter{margin-left:auto;display:flex;align-items:center;gap:4px;font-size:12px;font-weight:400;white-space:nowrap}
.chart-card-head>span{min-width:0}
.chart-card-title,.trend-card-title{flex-shrink:0}
#db_cont_filter{flex-shrink:0}
.ledger-stat-grid{grid-template-columns:repeat(3,minmax(0,1fr));grid-template-areas:
  "investment revenue-cny revenue-local"
  "actual profit-cny profit-local"}
.ledger-investment{grid-area:investment}.ledger-actual{grid-area:actual}
.ledger-revenue-cny{grid-area:revenue-cny}.ledger-profit-cny{grid-area:profit-cny}
.ledger-revenue-local{grid-area:revenue-local}.ledger-profit-local{grid-area:profit-local}
.muted{color:var(--muted)}
.flex{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.spacer{flex:1}
.empty{text-align:center;color:var(--muted);padding:40px 10px;font-size:13.5px}
.pill-tabs{display:flex;gap:6px;flex-wrap:wrap}
.pill-tab{padding:6px 13px;border-radius:20px;background:#eef1f5;font-size:13px;color:var(--muted)}
.pill-tab.active{background:var(--blue);color:#fff}

/* ===== 手机端 ===== */
.tabbar{display:none}
.sidebar-mask{display:none}
@media(max-width:860px){
  .sidebar{transform:translateX(-100%);transition:.25s;width:260px}
  .sidebar.open{transform:none}
  /* 手机抽屉更紧凑；仅调间距，不改配色、图标或选中效果。 */
  .sidebar .brand{padding:12px 16px}
  .sidenav{padding:2px 10px 8px}
  .sidenav-group{margin-top:4px}
  .sidenav-group-items{gap:0}
  .sidenav-group-title{min-height:26px;padding:4px 14px;font-size:12px}
  .sidenav a{min-height:36px;padding:4px 14px;font-size:14px}
  .sidebar-foot{padding:10px 18px;padding-bottom:max(10px,env(safe-area-inset-bottom))}
  .sidebar-mask{position:fixed;inset:0;background:rgba(0,0,0,.4);z-index:55;display:none}
  .sidebar-mask.show{display:block}
  .mainwrap{margin-left:0}
  .icon-btn{display:inline-flex}
  .view{padding:14px 12px 76px}
  .city-label{display:none}
  .city-switch{flex:1;min-width:0}
  .city-select{min-width:0;flex:1;width:100%}
  .topbar-user{flex-shrink:0}
  .topbar{padding:0 12px;gap:8px}
  .stat-grid{grid-template-columns:repeat(2,1fr);gap:10px}
  .stat{padding:11px 12px}
  .stat .value{font-size:18px}
  .chart-grid{grid-template-columns:minmax(0,1fr)}
  .chart{height:290px}
  .trend-card-head{align-items:flex-start;flex-direction:column}
  .chart-card-head{align-items:stretch;flex-direction:column;gap:10px}
  .mobile-stack-head{align-items:stretch;flex-direction:column;gap:8px}
  .mobile-stack-head>.btn{align-self:flex-end}
  .chart-card-head .chart-card-title,.chart-card-head .trend-card-title{width:100%;line-height:1.6}
  .chart-card-head #db_cont_filter{align-self:flex-end}
  .chart-card-head #db_cont_filter .multi-select{margin-bottom:0!important}
  .chart-card-head .trend-date-filter{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);gap:5px;white-space:normal}
  .chart-card-head .trend-date-filter input{width:100%!important;min-width:0;max-width:100%;min-height:36px}
  .chart-card-head .trend-date-filter .btn{grid-column:1/-1;justify-self:end;min-height:36px;white-space:nowrap}
  #dashboard_yesterday_sales .card-head>div{min-width:0}
  #dashboard_yesterday_sales .card-head .report-caption{display:block;white-space:nowrap;margin-top:4px}
  #dashboard_yesterday_sales .card-head>.btn{flex-shrink:0}
  .report-month-head{align-items:flex-start;flex-direction:column}
  .trend-date-filter{margin-left:0;width:100%;justify-content:flex-start;flex-wrap:wrap}
  .compare-actions{width:100%;justify-content:flex-start}
  .ledger-stat-grid{grid-template-columns:repeat(2,minmax(0,1fr));grid-template-areas:
    "investment actual"
    "revenue-cny profit-cny"
    "revenue-local profit-local"}
  .tabbar{display:flex;position:fixed;bottom:0;left:0;right:0;background:#fff;border-top:1px solid var(--border);
    z-index:50;justify-content:space-around;padding:6px 0 calc(6px + env(safe-area-inset-bottom))}
  .tabbar a{display:flex;flex-direction:column;align-items:center;gap:2px;font-size:11px;color:var(--muted);flex:1}
  .tabbar a.active{color:var(--blue)}
  .tabbar svg{width:22px;height:22px}
}

/* ===== 登录页 ===== */
.login-mode .sidebar,
.login-mode .topbar,
.login-mode .tabbar,
.login-mode .sidebar-mask{display:none !important}
.login-mode .mainwrap{margin-left:0}
.login-mode .view{padding:0;display:flex;align-items:center;justify-content:center;min-height:100vh;background:linear-gradient(135deg,#1f3a5f 0%,#2f6cad 100%)}
.login-wrap{width:100%;max-width:380px;padding:20px}
.login-card{background:#fff;border-radius:16px;padding:36px 32px;box-shadow:0 20px 60px rgba(0,0,0,.2)}
.login-logo{text-align:center;margin-bottom:12px}
.login-title{text-align:center;font-size:22px;font-weight:700;color:var(--navy);margin:0 0 4px}
.login-sub{text-align:center;font-size:13px;color:var(--muted);margin:0 0 24px}
.login-card .form-group{margin-bottom:16px}
.login-card label{display:block;font-size:13px;font-weight:600;color:var(--navy);margin-bottom:6px}
.login-card input{width:100%;padding:10px 12px;border:1px solid var(--border);border-radius:8px;font-size:14px;box-sizing:border-box}
.login-card input:focus{outline:2px solid rgba(47,108,173,.25);border-color:var(--blue)}
.login-btn{width:100%;padding:12px;font-size:15px;font-weight:600;margin-top:8px}
.login-error{background:#fef2f2;color:#dc2626;padding:8px 12px;border-radius:6px;font-size:13px;margin-bottom:12px;text-align:center}
.login-tip{text-align:center;font-size:12px;color:var(--muted);margin-top:16px}

/* ===== 顶部用户信息 ===== */
.topbar-user{position:relative;margin-left:auto}
.user-info{display:flex;align-items:center;gap:6px;cursor:pointer;padding:4px 8px;border-radius:8px;transition:background .15s}
.user-info:hover{background:rgba(0,0,0,.05)}
.user-avatar{width:28px;height:28px;border-radius:50%;background:var(--blue);color:#fff;display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:600;flex-shrink:0}
.user-name{font-size:13px;font-weight:600;color:var(--navy);max-width:80px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.user-role{font-size:11px;color:var(--muted);background:#f0f4f8;padding:2px 6px;border-radius:4px}
.portal-current{font-size:11px;color:var(--blue);background:#eaf2fb;padding:2px 7px;border-radius:12px;font-weight:600}
.user-dropdown{position:absolute;top:100%;right:0;margin-top:4px;background:#fff;border:1px solid var(--border);border-radius:8px;box-shadow:0 4px 16px rgba(0,0,0,.12);min-width:140px;z-index:100;overflow:hidden}
.user-dropdown a{display:block;padding:10px 14px;font-size:13px;color:var(--navy);text-decoration:none;cursor:pointer}
.user-dropdown a:hover{background:#f0f4f8}
.user-dropdown a.danger{color:#dc2626}
.user-dropdown a.danger:hover{background:#fef2f2}
.portal-menu-title{padding:8px 14px 5px;color:var(--muted);font-size:11px;border-bottom:1px solid var(--border)}
.portal-option{display:flex !important;justify-content:space-between;align-items:center;gap:12px}
.portal-option.active{background:#edf4fb;color:var(--blue);font-weight:600}
.portal-option b{font-size:10px;font-weight:500;color:var(--blue)}

/* ===== 用户管理页 ===== */
.perm-help{margin:4px 0 10px;color:var(--muted);font-size:12.5px;line-height:1.5}
.perm-toolbar{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:10px;font-size:12.5px;color:var(--muted)}
.perm-toolbar-actions{display:flex;gap:8px}
.perm-groups{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
.perm-group{min-width:0;border:1px solid var(--border);border-radius:9px;overflow:hidden;background:#fff}
.perm-group-heading{display:flex;align-items:center;gap:9px;padding:10px 12px;background:#f2f6fa;border-bottom:1px solid var(--border);font-size:13px;font-weight:700;color:var(--navy);cursor:pointer}
.perm-group-heading small{margin-left:auto;font-size:11px;font-weight:400;color:var(--muted)}
.perm-items{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:2px 8px;padding:8px}
.perm-item{display:flex;align-items:center;gap:8px;min-width:0;padding:6px 5px;border-radius:5px;font-size:12.5px;line-height:1.35;cursor:pointer}
.perm-item:hover{background:#f3f7fb}
.perm-checkbox{appearance:none;-webkit-appearance:none;display:inline-grid;place-content:center;width:18px;height:18px;margin:0;flex:none;border:1.5px solid #a9b8c8;border-radius:5px;background:#fff;cursor:pointer}
.perm-checkbox:checked,.perm-checkbox:indeterminate{background:var(--blue);border-color:var(--blue)}
.perm-checkbox:checked::after{content:"";width:8px;height:5px;border-left:2px solid #fff;border-bottom:2px solid #fff;transform:translateY(-1px) rotate(-45deg)}
.perm-checkbox:indeterminate::after{content:"";width:9px;height:2px;background:#fff;transform:none}
.perm-checkbox:focus-visible{outline:2px solid var(--blue);outline-offset:2px}
.product-select-trigger{width:100%;display:flex;align-items:center;justify-content:space-between;text-align:left;padding:11px 13px;border:1px solid var(--border);border-radius:8px;background:#fff;color:var(--navy)}
.product-select-trigger:hover{border-color:var(--blue);background:#f7fbff}
.product-select-trigger span:first-child{display:flex;flex-direction:column;gap:2px}
.product-select-trigger small{font-size:11px;color:var(--muted);font-weight:400}
.product-select-arrow{font-size:24px;color:var(--blue)}
.product-selector-toolbar{display:flex;align-items:end;justify-content:space-between;gap:12px;margin-bottom:14px}
.product-selector-toolbar .field{margin:0;min-width:220px}
.product-selector-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;max-height:58vh;overflow-y:auto}
.product-choice{display:flex;flex-direction:column;align-items:flex-start;gap:4px;padding:12px;border:1px solid var(--border);border-radius:9px;background:#fff;text-align:left}
.product-choice:hover,.product-choice.selected{border-color:var(--blue);background:#f0f6fc}
.product-choice-name{font-size:14px;font-weight:700;color:var(--navy)}
.product-choice-meta{font-size:11.5px;color:var(--muted);line-height:1.4}
@media (max-width:640px){.perm-groups{grid-template-columns:1fr}}
@media (max-width:640px){.product-selector-list{grid-template-columns:1fr}.product-selector-toolbar{align-items:stretch;flex-direction:column}.product-selector-toolbar .field{width:100%}.product-selector-toolbar .btn{width:100%}}
@media (max-width:420px){.perm-items{grid-template-columns:1fr}}
.action-link{color:var(--blue);text-decoration:none;font-size:12.5px;margin:0 4px;cursor:pointer}
.action-link:hover{text-decoration:underline}
.action-link.danger{color:#dc2626}
.badge{display:inline-block;padding:2px 8px;border-radius:10px;font-size:11px;font-weight:600}
.badge.green{background:#dcfce7;color:#16a34a}
.badge.red{background:#fee2e2;color:#dc2626}
.hidden{display:none !important}

@media (max-width:768px){
  .user-name,.user-role{display:none}
}

/* ===== v20 统一界面优化 ===== */
:root{
  --bg:#f3f6f9;
  --border:#dbe4ee;
  --shadow:0 2px 8px rgba(31,58,95,.07),0 1px 2px rgba(31,58,95,.05);
  --shadow-hover:0 10px 24px rgba(31,58,95,.11),0 2px 6px rgba(31,58,95,.07);
  --radius:12px;
}
body{-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
.sidebar{background:radial-gradient(circle at 20% 0%,rgba(110,168,217,.2),transparent 34%),linear-gradient(180deg,#1d385b,#23476f)}
.brand{min-height:80px}
.sidenav-single,.sidenav a{transition:background-color .18s,color .18s,transform .18s}
.sidebar-foot{background:rgba(0,0,0,.06);letter-spacing:.02em}
.topbar{background:rgba(255,255,255,.94);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px)}
.view-enter{animation:view-enter .2s ease-out both}
@keyframes view-enter{from{opacity:.35}to{opacity:1}}
.page-title{font-size:20px;letter-spacing:.01em}
.card,.stat{border-color:rgba(210,222,234,.9);box-shadow:var(--shadow)}
.card{border-radius:14px;overflow:visible}
.card-head{min-height:48px;padding:13px 17px;background:linear-gradient(180deg,#fff,#fbfcfe);border-radius:14px 14px 0 0}
.card-body{padding:17px}
.stat{position:relative;border-radius:13px;overflow:hidden;transition:transform .18s,box-shadow .18s,border-color .18s}
.stat::before{content:"";position:absolute;left:0;right:0;top:0;height:3px;background:#aec6de}
.stat.green::before{background:#58ad78}.stat.gold::before{background:#e1bb3b}.stat.red::before{background:#d66a5c}.stat.blue::before{background:#5a91c8}
.table-wrap{border:1px solid var(--border);border-radius:10px;background:#fff;scrollbar-color:#bcc9d6 transparent;scrollbar-width:thin}
/* 卡片内部分区保持直角；只有贴合卡片外轮廓的四角使用圆角。
   不裁切整张卡片，避免影响筛选下拉框及表格横向滚动。 */
.card .table-wrap{border-radius:0}
.card > .table-wrap:first-child{border-top-left-radius:13px;border-top-right-radius:13px}
.card > .table-wrap:last-child{border-bottom-left-radius:13px;border-bottom-right-radius:13px}
.card .card-head:not(:first-child){border-radius:0}
.report-week-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}
.report-week-grid .card{min-width:0}
.sales-report-page h2{font-size:16px;margin:0}
.report-caption{font-size:12px;font-weight:400;color:var(--muted);line-height:1.65}
.report-note{font-size:12px;color:var(--muted);line-height:1.8;margin:0 0 16px}
.report-metrics{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;padding:18px 17px;border-bottom:1px solid var(--border)}
.report-metrics>div{min-width:0}
.report-metrics span{display:block;font-size:12px;color:var(--muted);margin-bottom:5px}
.report-metrics strong{display:block;font-size:clamp(18px,1.6vw,25px);color:var(--navy);line-height:1.4;overflow-wrap:anywhere}
.report-metrics small{font-size:12px;font-weight:400;color:var(--muted)}
.report-metrics .report-positive{color:var(--green)}
.report-metrics .report-negative{color:var(--danger)}
.report-week .report-metrics{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
.report-week .report-metrics>div:last-child{grid-column:1/-1;display:flex;align-items:baseline;gap:10px}
.report-week .report-metrics>div:last-child strong{font-size:17px}
.report-products{white-space:normal;min-width:190px;max-width:360px;overflow-wrap:anywhere}
.report-empty{padding:24px!important;color:var(--muted)}
.report-future{color:var(--muted)}
.report-month-head{flex-wrap:wrap}
.report-month-controls,.report-date-controls{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.report-month-picker,.report-date-controls label{display:flex;align-items:center;gap:8px;font-size:13px;font-weight:400;color:var(--muted)}
.report-month-picker input,.report-date-controls input{border:1px solid var(--border);border-radius:8px;padding:8px 10px;background:#fff;min-height:40px;max-width:100%}
@media(max-width:860px){
  .report-week-grid{grid-template-columns:minmax(0,1fr);gap:0}
  .report-metrics{gap:12px;padding:16px 12px}
  .report-month .report-metrics,.daily-sales-page .report-metrics{grid-template-columns:repeat(2,minmax(0,1fr))}
  .report-month .report-metrics>div:last-child,.daily-sales-page .report-metrics>div:last-child{grid-column:1/-1;display:flex;align-items:baseline;gap:10px}
  .report-month-controls{gap:6px;width:100%}
  .report-month-picker{flex-wrap:wrap}
}
table.data{line-height:1.45}
table.data th{position:sticky;top:0;z-index:2;padding:8px 7px;border-color:#cbdbe9;box-shadow:0 1px 0 #cbdbe9}
table.data td{padding:8px 7px}
table.data tbody tr:nth-child(even):not(.total) td:not(.cost):not(.profit):not(.price){background:#f9fbfd}
table.data tbody tr:hover td{background:#edf5fc}
table.data td:first-child:not(.num):not(.money):not(.bags):not(.ctr){text-align:left}
.btn{min-height:36px;justify-content:center;box-shadow:0 1px 2px rgba(31,58,95,.08);transition:background-color .16s,transform .12s,box-shadow .16s,border-color .16s}
.btn:active:not(:disabled){transform:scale(.975)}
.btn:focus-visible,.icon-btn:focus-visible,.user-info:focus-visible,.pill-tab:focus-visible{outline:3px solid rgba(47,108,173,.24);outline-offset:2px}
.btn.is-loading{position:relative;padding-left:34px}
.btn.is-loading::before{content:"";position:absolute;left:13px;width:13px;height:13px;border:2px solid rgba(255,255,255,.45);border-top-color:#fff;border-radius:50%;animation:ui-spin .7s linear infinite}
.btn.secondary.is-loading::before{border-color:rgba(47,108,173,.25);border-top-color:var(--blue)}
.field label{color:#596b7d}
.required-mark{color:var(--danger);font-weight:700}
.field input,.field select,.field textarea,.city-select{min-height:40px;transition:border-color .16s,box-shadow .16s,background-color .16s}
.field input:hover,.field select:hover,.field textarea:hover,.city-select:hover{border-color:#b5c6d7}
.field input:focus,.field select:focus,.field textarea:focus,.city-select:focus{outline:none;box-shadow:0 0 0 3px rgba(47,108,173,.14);border-color:var(--blue)}
.field input:user-invalid,.field select:user-invalid,.field textarea:user-invalid{border-color:#d66a5c;background:#fffafa}
.modal-mask{backdrop-filter:blur(3px);animation:mask-in .16s ease-out}
.modal{border:1px solid rgba(255,255,255,.5);animation:modal-in .2s ease-out}
@keyframes mask-in{from{opacity:0}to{opacity:1}}
@keyframes modal-in{from{opacity:0;transform:translateY(8px) scale(.985)}to{opacity:1;transform:none}}
.toast{display:flex;align-items:flex-start;gap:10px;border:1px solid var(--border);border-left-width:4px;padding:11px 14px}
.toast-icon{width:20px;height:20px;border-radius:50%;display:inline-grid;place-items:center;flex:0 0 auto;background:#e7f0f9;color:var(--blue);font-size:12px;font-weight:800}
.toast.success .toast-icon{background:var(--green-bg);color:var(--green)}
.toast.error .toast-icon{background:var(--danger-bg);color:var(--danger)}
.toast.warn .toast-icon{background:var(--gold-bg);color:#916d00}
.toast-message{padding-top:1px;line-height:1.45}
.empty{background:linear-gradient(180deg,rgba(247,250,253,.75),rgba(255,255,255,.35));border-radius:10px}
.loading-state{min-height:120px;display:flex;align-items:center;justify-content:center;gap:10px;color:var(--muted)}
.loading-spinner{width:22px;height:22px;border:3px solid #dce6ef;border-top-color:var(--blue);border-radius:50%;animation:ui-spin .75s linear infinite}
@keyframes ui-spin{to{transform:rotate(360deg)}}
.user-dropdown{border-radius:10px;box-shadow:0 12px 30px rgba(31,58,95,.16)}
.login-card{border:1px solid rgba(255,255,255,.65);box-shadow:0 24px 70px rgba(16,38,66,.3)}

@media (hover:hover){
  .card:not(.no-hover){transition:box-shadow .18s,border-color .18s}
  .card:not(.no-hover):hover{border-color:#cddbe8;box-shadow:var(--shadow-hover)}
  .stat:hover{transform:translateY(-2px);box-shadow:var(--shadow-hover);border-color:#c8d8e7}
}
@media(max-width:1200px) and (min-width:769px){
  .stat-grid-6{grid-template-columns:repeat(3,minmax(0,1fr))}
}
@media(max-width:860px){
  .view{padding:14px 12px calc(82px + env(safe-area-inset-bottom))}
  .topbar{min-height:58px}
  .icon-btn{min-width:44px;min-height:44px;align-items:center;justify-content:center;border-radius:10px}
  .city-select{min-height:44px}
  .btn{min-height:44px;padding:10px 14px}
  .tabbar{min-height:62px;padding:5px 4px calc(5px + env(safe-area-inset-bottom));box-shadow:0 -5px 18px rgba(31,58,95,.08)}
  .tabbar a{min-height:48px;justify-content:center;border-radius:10px;transition:background-color .16s,color .16s}
  .tabbar a.active{background:#edf5fc;font-weight:600}
  #toastRoot{top:10px;left:12px;right:12px}
  .toast{min-width:0;max-width:none;width:100%}
}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}

/* ===== 登录页：统一的深蓝品牌空间与清晰表单 ===== */
.login-experience{
  --login-ink:#10253c;--login-soft:#91abc5;--login-accent:#94bcff;
  width:100%;min-height:100vh;min-height:100svh;position:relative;isolation:isolate;
  display:flex;flex-direction:column;padding:0 clamp(28px,5.6vw,88px);
  background:radial-gradient(ellipse at 70% 78%,rgba(40,83,123,.24),transparent 54%),#10253c;
  color:#f8fbff;overflow:hidden;
}
.login-experience::before{content:"";position:absolute;inset:0 0 auto;height:3px;background:linear-gradient(90deg,#6698d6,#accbff 54%,#1f4569);z-index:-1}
.login-brandbar,.login-page-footer{width:100%;max-width:1320px;margin:0 auto;display:flex;align-items:center;justify-content:space-between;gap:24px}
.login-brandbar{min-height:128px}
.login-brand{display:inline-flex;align-items:center;gap:15px;color:#f5f8fc;font-size:19px;font-weight:650;letter-spacing:.025em}
.login-brand-mark{display:grid;place-items:center;width:46px;height:46px;flex:none;color:#99c2fb;background:#1b3652;border:1px solid #3a5876;border-radius:12px}
.login-brand-mark svg{width:30px;height:30px}
.login-brand-meta{font-size:10px;font-weight:500;letter-spacing:.17em;color:#8ba4bd;white-space:nowrap}
.login-brand-meta i{font-style:normal;margin:0 8px;color:#4e6e8b}
.login-stage{flex:1;display:grid;grid-template-columns:minmax(0,1fr) minmax(380px,460px);gap:clamp(48px,8vw,128px);align-items:center;width:100%;max-width:1240px;margin:0 auto;padding:28px 0 42px}
.login-story{min-width:0;padding:10px 0 0}
.login-story-kicker{display:flex;align-items:center;gap:9px;margin-bottom:27px;font-size:12px;color:#91adc8;letter-spacing:.11em}
.login-story-kicker>span{width:17px;height:1px;background:#8cb6ec}
.login-story-title{font-size:clamp(46px,4.6vw,69px);font-weight:750;line-height:1.38;letter-spacing:-.045em;color:#fff}
.login-story-title>span:not(.login-title-period){display:block;color:var(--login-accent)}
.login-story-title>.login-title-period{color:#b8d3ff}
.login-story-description{margin-top:26px;color:#a0b6ce;font-size:14px;line-height:1.95;font-weight:400}
.login-cargo-scene{position:relative;display:flex;align-items:flex-end;gap:10px;height:130px;margin-top:40px;padding-bottom:10px;max-width:560px}
.login-cargo{position:relative;display:flex;justify-content:space-between;align-items:flex-end;padding:12px 10px;flex:1;min-width:0;border:1px solid #446587;border-radius:3px;background:repeating-linear-gradient(90deg,transparent 0,transparent 10px,rgba(143,181,222,.18) 10px,rgba(143,181,222,.18) 12px),#21415e;color:#a0bfdf;box-shadow:inset 0 1px rgba(184,212,242,.06)}
.login-cargo>span{font-size:8px;letter-spacing:.13em;background:#21415e;padding:2px 3px;z-index:1}
.login-cargo>b{align-self:flex-start;font-size:9px;font-weight:500;letter-spacing:.05em;background:#21415e;padding:1px 2px}
.login-cargo-one{height:71px}.login-cargo-two{height:112px;background-color:#315f8a;border-color:#527da6}.login-cargo-two>span,.login-cargo-two>b{background-color:#315f8a;color:#c0d8f3}.login-cargo-three{height:58px}
.login-cargo-baseline{position:absolute;left:0;right:-16px;bottom:0;height:1px;background:linear-gradient(90deg,#37536e,rgba(55,83,110,0))}
.login-access{position:relative;width:100%;padding:44px 40px 36px;background:#fff;border:1px solid rgba(255,255,255,.95);border-radius:20px;box-shadow:0 25px 65px rgba(3,15,29,.22);color:var(--login-ink)}
.login-access-rule{width:30px;height:3px;border-radius:3px;background:#2f68ed;margin-bottom:24px}
.login-access-kicker{color:#6480a1;font-size:9px;font-weight:500;letter-spacing:.18em;line-height:1.5;white-space:nowrap}
.login-access h1{font-size:32px;font-weight:750;line-height:1.4;letter-spacing:-.045em;margin-top:10px;color:#10253c}
.login-access-subtitle{margin-top:8px;font-size:12.5px;line-height:1.7;color:#74859a}
.login-access-form{margin-top:30px}
.login-access-field{margin-bottom:22px}
.login-access-field label{display:block;margin-bottom:9px;font-size:13px;font-weight:650;color:#334c69}
.login-access-field label>span{font-weight:550;color:#637a94}
.login-access-field input{display:block;width:100%;height:52px;padding:0 15px;border:1px solid #d7e1ed;border-radius:9px;background:#fcfdff;color:#162e48;font-size:14px;transition:border-color .16s,box-shadow .16s,background-color .16s}
.login-access-field input::placeholder{color:#9aaabd}
.login-access-field input:hover{border-color:#aebfd3}
.login-access-field input:focus{outline:none;background:#fff;border-color:#5b8def;box-shadow:0 0 0 3px rgba(47,104,237,.11)}
.login-access-field input:user-invalid{border-color:#d66a5c;background:#fffafa}
.login-access-submit.btn{position:relative;display:flex;align-items:center;justify-content:center;gap:12px;width:100%;min-height:54px;margin-top:30px;padding:13px 18px;background:#2861e9;border:1px solid #2861e9;border-radius:9px;color:#fff;box-shadow:0 3px 8px rgba(40,97,233,.17);font-size:15px;font-weight:650;letter-spacing:.01em}
.login-access-submit.btn::after{content:"→";position:absolute;right:19px;font-size:21px;font-weight:400;line-height:1}
.login-access-submit.btn.is-loading::after{content:none}
.login-access-submit.btn:hover{background:#1f53ce;border-color:#1f53ce;box-shadow:0 5px 14px rgba(40,97,233,.23)}
.login-access-submit.btn:focus-visible{outline:3px solid #a7c8ff;outline-offset:3px}
.login-access-submit.btn:disabled{opacity:.7}
.login-access .login-error{text-align:left;margin:0;padding:10px 12px;font-size:12px;line-height:1.6;border:1px solid #f4d3d0}
.login-access-note{margin-top:25px;color:#8191a5;font-size:11.5px;line-height:1.8}
.login-access-note>span{display:block;color:#98a4b5;font-size:11px}
.login-page-footer{min-height:68px;border-top:1px solid rgba(139,165,191,.13);color:#6e89a4;font-size:10px;letter-spacing:.07em}
@media(min-width:1500px){.login-access{padding:50px 45px 40px}.login-stage{padding-bottom:60px}.login-story-description{font-size:15px}}
@media(max-width:960px) and (min-width:701px){
  .login-experience{padding:0 30px}.login-brandbar{min-height:100px}.login-brand-meta{display:none}
  .login-stage{grid-template-columns:minmax(0,1fr) 360px;gap:32px}.login-access{padding:34px 28px 30px}
  .login-story-title{font-size:43px}.login-story-description{font-size:12px}.login-story-kicker{font-size:10px;letter-spacing:.03em}
  .login-cargo-scene{gap:7px;margin-top:30px}.login-cargo{padding:8px 5px}.login-cargo>span{font-size:6px;letter-spacing:0}.login-cargo>b{display:none}
}
@media(min-width:701px) and (max-height:800px){
  .login-brandbar{min-height:94px}.login-stage{padding:12px 0 24px}
  .login-access{padding:28px 36px 27px}.login-access-rule{margin-bottom:17px}.login-access h1{font-size:30px}
  .login-access-form{margin-top:24px}.login-access-field{margin-bottom:18px}.login-access-field input{height:48px}
  .login-access-submit.btn{min-height:50px;margin-top:24px}.login-access-note{margin-top:19px}
  .login-story-kicker{margin-bottom:19px}.login-story-title{font-size:clamp(42px,4.2vw,58px)}
  .login-story-description{margin-top:20px}.login-cargo-scene{height:98px;margin-top:25px}.login-cargo-one{height:58px}.login-cargo-two{height:87px}.login-cargo-three{height:46px}
  .login-page-footer{min-height:52px}
}
@media(max-width:700px){
  .login-mode:has(.login-experience),.login-mode .view:has(.login-experience){min-height:100svh}
  .login-experience{padding:0 22px;overflow:visible;background:radial-gradient(ellipse at 100% 20%,rgba(59,104,149,.18),transparent 50%),#10253c}
  .login-brandbar{min-height:64px;gap:0}.login-brand{font-size:15px;gap:11px}.login-brand-mark{width:36px;height:36px;border-radius:10px}.login-brand-mark svg{width:25px;height:25px}.login-brand-meta{display:none}
  .login-stage{display:flex;flex-direction:column;align-items:stretch;gap:18px;padding:8px 0 10px;flex:initial}
  .login-story{position:relative;padding:0}.login-story-kicker{display:none}
  .login-story-title{font-size:28px;line-height:1.35;letter-spacing:-.04em}
  .login-story-title>span:not(.login-title-period){display:inline;margin-left:7px}
  .login-story-title>span:not(.login-title-period)::after{content:"";display:block}
  .login-story-title>.login-title-period{display:inline}
  .login-story-description,.login-cargo-scene{display:none}
  .login-access{padding:20px 25px 20px;border-radius:16px;box-shadow:0 16px 38px rgba(3,15,29,.18)}
  .login-access-rule{margin-bottom:12px;width:24px;height:2px}.login-access-kicker{font-size:8px;letter-spacing:.14em}.login-access h1{font-size:26px;line-height:1.3;margin-top:6px}
  .login-access-subtitle{font-size:11px;margin-top:4px}.login-access-form{margin-top:18px}.login-access-field{margin-bottom:14px}.login-access-field label{font-size:12px;margin-bottom:6px}.login-access-field input{height:46px;font-size:16px}
  .login-access-submit.btn{min-height:48px;margin-top:18px}.login-access-note{margin-top:10px;font-size:10px;line-height:1.7}.login-access-note>span{display:none}
  .login-page-footer{margin-top:auto;min-height:34px;padding:8px 0;justify-content:center;font-size:9px}.login-page-footer>span:last-child{display:none}
}
@media(max-width:360px){.login-experience{padding:0 16px}.login-story-title{font-size:27px}.login-access{padding-left:21px;padding-right:21px}.login-brand{font-size:14px}}
@media(max-width:700px) and (max-height:640px){
  .login-brandbar{min-height:52px}.login-story-title{font-size:22px}.login-stage{gap:14px;padding:4px 0 12px}
  .login-access{padding-top:18px;padding-bottom:16px}.login-access-rule,.login-access-subtitle,.login-access-note>span,.login-page-footer{display:none}
}
@media(max-width:700px) and (max-height:520px){
  .login-story,.login-access-note{display:none}.login-stage{padding-top:0;gap:0}
}
/* 商品匹配面板：窄屏分行，不将规格写进名称。 */
.catalog-source{padding:12px;background:var(--bg);border:1px solid var(--border);border-radius:8px;line-height:1.7;margin-bottom:12px;position:sticky;top:0;z-index:1}
.catalog-duplicate{padding:12px;border:1px solid var(--border);margin:8px 0;overflow-wrap:anywhere}
.catalog-duplicate small{display:block;margin:5px 0}
.attr-cell{min-width:230px;max-width:330px;white-space:normal}
.attr-cell small,.attr-cell .checkbox{display:block;margin:6px 0;line-height:1.5}
/* 仅粘贴识别表着色；覆盖单元格和全局 hover，整行保持相同状态底色。 */
#p_result table.data tbody tr.manifest-row-pending>td{background:#fff}
#p_result table.data tbody tr.manifest-row-pending:hover>td{background:#fff}
#p_result table.data tbody tr.manifest-row-confirmed>td{background:var(--green-bg)}
#p_result table.data tbody tr.manifest-row-confirmed:hover>td{background:#dbeddf}
#p_result table.data tbody tr.manifest-row-draft>td{background:#fff8e5}
#p_result table.data tbody tr.manifest-row-draft:hover>td{background:#fff2ce}
#p_result table.data tbody tr.manifest-row-invalid>td{background:var(--danger-bg)}
#p_result table.data tbody tr.manifest-row-invalid:hover>td{background:#f8ded9}
.product-choice-name,.product-choice-meta{white-space:normal;overflow-wrap:anywhere}

/* 普通表格：短表自然高度，长表仅在外框内滚动。 */
/* 选柜首页占用视口剩余空间，只让混合台账内部滚动。 */
.view:has(>.sales-overview){height:calc(100vh - 58px);height:calc(100dvh - 58px);flex:none;overflow:hidden}
.sales-overview{height:100%;min-height:0;display:flex;flex-direction:column}
.sales-overview>.page-head,.sales-overview>.card{flex-shrink:0}
.sales-overview>.card .card-body{padding:12px 16px}
.sales-overview .field{margin:0}
.sales-overview #l_body{flex:1;min-height:0;display:flex;flex-direction:column}
.mixed-ledger{--mixed-date:60px;--mixed-container:70px;display:flex;flex-direction:column;flex:1;min-height:0;margin-bottom:0;overflow:hidden}
.mixed-ledger .card-head{flex-shrink:0;flex-wrap:wrap;gap:4px;font-size:14px}
.mixed-ledger .card-head .table-note{font-weight:400;font-size:12px}
.mixed-ledger .mixed-ledger-scroll{flex:1;min-height:0;max-height:none;border-radius:0;overflow:auto}
.mixed-ledger table.data{table-layout:fixed;width:calc(var(--mixed-date) + var(--mixed-container) + 42em + 120px);min-width:0;font-size:14px}
.mixed-ledger .mixed-product{width:calc(9.5em + 20px)}
.mixed-ledger .mixed-bags{width:calc(4em + 20px)}
.mixed-ledger .mixed-price{width:calc(7.5em + 20px)}
.mixed-ledger .mixed-revenue{width:calc(6em + 20px)}
.mixed-ledger .mixed-profit{width:calc(8em + 20px)}
.mixed-ledger .mixed-cny{width:calc(7em + 20px)}
.mixed-ledger table.data th,.mixed-ledger table.data td{padding-left:10px;padding-right:10px}
.mixed-ledger table.data th{white-space:nowrap}
.mixed-ledger .mixed-date{width:var(--mixed-date)}
.mixed-ledger .mixed-container{width:var(--mixed-container)}
.entry-recent-ledger{margin-top:16px}
.stock-pending,.stock-resolved{display:block;font-size:12px;white-space:normal;line-height:1.5;margin-top:3px}
.stock-pending{color:#a54323;background:#fff1e8}
.stock-resolved{color:#267042}
.stock-exception,.stock-review-notice{background:#fff7e7;border:1px solid #e7cfa8;border-radius:8px;padding:10px;margin:12px 0}
.stock-exception label{display:block;margin:8px 0}
.stock-exception textarea,.stock-history{width:100%;max-width:100%;box-sizing:border-box}
.stock-history-entry{padding:12px 0;border-bottom:1px solid var(--border);overflow-wrap:anywhere}
.stock-history-entry p{margin:6px 0;line-height:1.6}
.stock-issues{flex-shrink:0;margin-bottom:8px;max-height:35dvh;overflow:auto}
.stock-issues summary{padding:10px;color:#a54323;cursor:pointer}
.stock-issue-row{display:flex;gap:8px;align-items:center;justify-content:space-between;padding:8px 0;border-bottom:1px solid var(--border)}
.stock-issue-row>span{min-width:0;overflow-wrap:anywhere}
.stock-issue-row>.btn{flex-shrink:0}
.stock-target-exception{display:block;margin:10px 0}
.stock-target-exception[hidden]{display:none}
.report-top-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.city-export-range{grid-template-columns:repeat(2,minmax(0,1fr))}
@media(max-width:860px){
  .report-top-actions{width:100%;display:grid;grid-template-columns:1fr 1fr}
  .report-top-actions .btn{white-space:normal;text-align:center;min-height:44px}
  .city-export-range{grid-template-columns:1fr}
}
.entry-recent-ledger .mixed-ledger-scroll{flex:none;height:min(55dvh,520px);max-height:520px}
.mixed-ledger .mixed-ledger-scroll>table>thead>tr>.table-frozen-cell,
.mixed-ledger .mixed-ledger-scroll>table>tbody>tr>.table-frozen-cell{width:var(--mixed-date);min-width:var(--mixed-date);max-width:var(--mixed-date);padding:9px 5px;white-space:nowrap}
.mixed-ledger .mixed-ledger-scroll>table>tbody>tr>:nth-child(2),
.mixed-ledger .mixed-ledger-scroll>table>thead>tr>:nth-child(2){position:sticky;left:var(--mixed-date);z-index:2;width:var(--mixed-container);min-width:var(--mixed-container);max-width:var(--mixed-container);padding:9px 5px;overflow-wrap:anywhere;box-shadow:2px 0 0 rgba(31,58,95,.12)}
.mixed-ledger .mixed-ledger-scroll>table>thead>tr>:nth-child(2){z-index:6}
@media(max-width:860px){
  .mixed-ledger{--mixed-date:58px;--mixed-container:50px}
  .sales-overview>.page-head{margin-bottom:8px}
  .sales-overview>.card{margin-bottom:8px}
  .sales-overview>.card .card-body{padding:8px 12px}
  .mixed-ledger .card-head{padding:9px 12px}
}
.table-viewport{position:relative;isolation:isolate;max-height:min(560px,65vh);max-height:min(560px,65dvh);overflow:auto!important;border-radius:8px;scrollbar-width:thin;scrollbar-color:#bdcad7 transparent}
.table-viewport:focus-visible{outline:2px solid var(--blue);outline-offset:2px}
.table-viewport>table>thead{position:sticky;top:0;z-index:4;background:var(--head-bg)}
.table-viewport>table>thead th{position:static;top:auto;border-radius:0}
.table-viewport>table>tbody>tr>.table-frozen-cell,
.table-viewport>table>tfoot>tr>.table-frozen-cell{position:sticky;left:0;z-index:2;box-shadow:2px 0 0 rgba(31,58,95,.12);width:var(--frozen-col-width,80px);min-width:var(--frozen-col-width,80px);max-width:var(--frozen-col-width,80px);white-space:normal;overflow-wrap:anywhere}
.table-viewport>table>thead>tr>.table-frozen-cell{position:sticky;left:0;z-index:6;width:var(--frozen-col-width,80px);min-width:var(--frozen-col-width,80px);max-width:var(--frozen-col-width,80px);white-space:normal;overflow-wrap:anywhere;box-shadow:2px 0 0 rgba(31,58,95,.12)}
.table-viewport>table:not(.data)>tbody>tr>.table-frozen-cell{background:#fff}
.table-viewport>table:not(.data):not(.sales-table)>thead>tr>.table-frozen-cell{background:#f8f9fa}
.table-viewport>table.sales-table>tbody>tr:active>.table-frozen-cell{background:#f5f6fa}
@media(max-width:860px){
  .table-viewport{max-height:min(420px,55vh);max-height:min(420px,55dvh)}
  .table-viewport>table>tbody>tr>.table-frozen-cell,
  .table-viewport>table>tfoot>tr>.table-frozen-cell,
  .table-viewport>table>thead>tr>.table-frozen-cell{width:var(--frozen-col-width,64px);min-width:var(--frozen-col-width,64px);max-width:var(--frozen-col-width,64px);padding-left:5px;padding-right:5px}
}

/* 管理端手机货柜卡片，电脑继续沿用原表格。 */
@media screen and (max-width:860px){
  /* 两份周报均固定为七天，按表格自然高度展示，不套用长表限高。 */
  .sales-report-page .report-week>.table-wrap{max-height:none;height:auto}
  .report-week .report-date-cell>span{display:block;white-space:nowrap;overflow-wrap:normal;word-break:normal}
}
.admin-container-cards,.admin-container-mobile-delete{display:none}
@media screen and (max-width:860px){
  .admin-containers-table{display:none}
  .admin-container-cards{display:grid;gap:10px}
  .admin-container-card{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:6px 12px;padding:14px;background:#fff;border:1px solid var(--border);border-radius:12px;box-shadow:0 1px 3px rgba(0,0,0,.04);color:var(--text);text-decoration:none;overflow-wrap:anywhere}
  a.admin-container-card:active{background:#f4f8fc}
  a.admin-container-card:focus-visible{outline:2px solid var(--blue);outline-offset:2px}
  .admin-container-name{display:flex;align-items:center;flex-wrap:wrap;gap:8px;font-size:16px;font-weight:700;color:var(--navy)}
  .admin-container-box,.admin-container-meta{font-size:12px;color:var(--muted);line-height:1.5;margin-top:3px}
  .admin-container-percent{font-size:22px;font-weight:700;color:var(--blue);text-align:right;line-height:1.2}
  .admin-container-percent small{display:block;font-size:11px;color:var(--muted);font-weight:400;margin-top:4px}
  .admin-container-stock{grid-column:1/-1;font-size:13px;color:var(--muted);line-height:1.5}
  .admin-container-progress{grid-column:1/-1;height:6px;background:#eaf0f6;border-radius:3px;overflow:hidden}
  .admin-container-progress>span{display:block;height:100%;background:linear-gradient(90deg,var(--blue),#4a90d9);border-radius:3px}
  .container-detail-head{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:start}
  .container-detail-heading{min-width:0;overflow-wrap:anywhere}
  .admin-container-mobile-delete{display:inline-flex;min-height:40px;align-items:center;justify-content:center;grid-column:2;grid-row:1}
  .container-detail-actions{grid-column:1/-1;flex-wrap:wrap}
}
@media print{
  .table-viewport{max-height:none!important;height:auto!important;overflow:visible!important}
  .table-viewport>table>thead,.table-viewport>table>thead th,
  .table-viewport>table>tbody>tr>.table-frozen-cell,
  .table-viewport>table>tfoot>tr>.table-frozen-cell{position:static!important;box-shadow:none!important}
}

.manifest-progress{font-size:12px;font-weight:400;color:var(--muted);margin-top:5px;line-height:1.6}
.manifest-review-tools{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 14px;border-bottom:1px solid var(--border);flex-wrap:wrap}
.manifest-filter-empty{padding:16px;font-size:13px;color:var(--muted)}
.manifest-mobile-index,.manifest-mobile-status,.manifest-unit{display:none}
.manifest-name strong{font-weight:600}
@media screen and (max-width:860px){
  #p_result .manifest-result{border:0;background:transparent;box-shadow:none}
  #p_result .manifest-toolbar{background:#fff;border:1px solid var(--border);border-radius:10px 10px 0 0;align-items:stretch;flex-direction:column;padding:14px}
  #p_result .manifest-toolbar #p_write{min-height:44px;width:100%}
  #p_result .manifest-review-tools{background:#fff;border:1px solid var(--border);border-top:0;border-radius:0 0 10px 10px;margin-bottom:12px;gap:8px;padding:8px 12px}
  #p_result .manifest-review-tools .btn{min-height:40px}
  #p_result .manifest-pending-filter{display:none}
  #p_result .manifest-table-viewport{max-height:none;overflow:visible!important;border:0;border-radius:0;isolation:auto;outline-offset:0}
  #p_result .manifest-table{display:block;width:100%;white-space:normal}
  #p_result .manifest-table>thead{display:none}
  #p_result .manifest-table>tbody{display:block}
  #p_result .manifest-table>tbody>tr{--manifest-card-bg:#fff;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:4px 10px;padding:8px;margin-bottom:8px;border:1px solid var(--border);border-radius:12px;background:var(--manifest-card-bg);scroll-margin-top:76px;overflow-wrap:anywhere}
  #p_result .manifest-table>tbody>tr.manifest-row-confirmed{--manifest-card-bg:var(--green-bg);border-color:#c9dfd0}
  #p_result .manifest-table>tbody>tr.manifest-row-draft{--manifest-card-bg:#fff8e5;border-color:#ebdfb4}
  #p_result .manifest-table>tbody>tr.manifest-row-invalid{--manifest-card-bg:var(--danger-bg);border-color:#edc7c1}
  #p_result .manifest-table>tbody>tr:focus{outline:2px solid var(--blue);outline-offset:1px}
  #p_result .manifest-table>tbody>tr>td{display:block;position:static;left:auto;max-width:none;min-width:0;width:auto;padding:0;border:0;border-radius:0;text-align:left;white-space:normal;background:transparent!important;box-shadow:none;overflow-wrap:anywhere}
  #p_result .manifest-table td[data-label]::before{content:attr(data-label);display:block;font-size:11px;color:#64758a;margin-bottom:3px;font-weight:500}
  #p_result .manifest-table td.manifest-name{grid-column:1/-1;display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:baseline;gap:3px 6px;border-bottom:1px solid rgba(100,120,140,.18);padding-bottom:5px}
  .manifest-mobile-index{display:block;font-size:10px;color:var(--muted);white-space:nowrap}
  .manifest-name strong{font-size:15px;color:var(--navy);line-height:1.5;min-width:0}
  .manifest-mobile-status{display:block;max-width:105px;font-size:11px;font-weight:600;color:#657487;text-align:right;line-height:1.6}
  .manifest-row-confirmed .manifest-mobile-status{color:var(--green)}
  .manifest-row-invalid .manifest-mobile-status{color:var(--danger)}
  .manifest-row-draft .manifest-mobile-status{color:var(--yellow)}
  .manifest-unit{display:inline;font-size:11px;color:var(--muted)}
  #p_result .manifest-metric{font-size:15px;font-variant-numeric:tabular-nums;line-height:1.5}
  #p_result .manifest-table td.manifest-metric::before{display:inline;margin:0 6px 0 0}
  #p_result .manifest-table td.manifest-validation{grid-column:1/-1;font-size:12px;color:var(--danger)}
  #p_result .manifest-table td.manifest-validation-pass{display:none}
  #p_result .manifest-table td.attr-cell{grid-column:1/-1;padding-top:5px;border-top:1px solid rgba(100,120,140,.18);line-height:1.4}
  #p_result .manifest-table td.attr-cell::before{display:inline;margin:0 6px 0 0}
  /* 未选择归属时，直接显示完整提示，省去空字段标题占用的一行。 */
  #p_result .manifest-table td.attr-cell:not(:has(>div))::before{display:none}
  #p_result .attr-cell .manifest-desktop-status{display:none}
  #p_result .attr-cell>div{display:inline;font-size:14px;font-weight:600;color:var(--navy)}
  #p_result .attr-cell small{font-size:12px;margin:2px 0;line-height:1.4}
  #p_result .attr-cell>.table-note{margin:3px 0;line-height:1.4}
  #p_result .attr-cell>.btn{width:100%;min-height:44px;margin:2px 0;padding:6px 12px}
  #p_result .attr-cell .checkbox{display:flex;align-items:center;gap:8px;font-size:12px;margin:2px 0 0;min-height:28px;line-height:1.4}
  #p_result .attr-cell .checkbox input{flex:0 0 auto;margin-top:1px}
  #p_result .manifest-result>.card-body{padding:4px 2px 14px}
  #p_result .manifest-filter-empty{background:#fff;border:1px dashed var(--border);border-radius:10px;margin:0 0 12px}
}
.ledger-export-head{display:flex;align-items:center;justify-content:space-between;gap:8px}
.ledger-product-totals.table-viewport{max-height:none;height:auto}
.ledger-export-actions{display:flex;align-items:center;justify-content:flex-end;gap:10px}
.ledger-export-choices{margin:12px 0}.ledger-export-checks{max-height:190px;overflow-y:auto;border:1px solid var(--border);border-radius:8px;padding:6px;margin-top:8px}.ledger-export-checks label{display:flex;gap:8px;align-items:center;min-height:40px;padding:4px 6px}.ledger-export-checks input{width:18px;height:18px;flex-shrink:0}
@media(max-width:640px){.ledger-export-head{flex-wrap:wrap}.ledger-export-actions{flex-wrap:wrap;gap:6px}.ledger-export-actions .table-note{font-size:11px}.ledger-export-actions .btn{min-height:36px}}
.name-list-full.table-wrap,.name-list-full.table-viewport{max-height:none!important;height:auto!important;overflow-x:auto!important;overflow-y:visible!important}
.name-list-full table.data{transform:none}
.expected-price-stack{position:relative;display:inline-block;height:1.2em;line-height:1.2;width:100%;min-width:0;vertical-align:middle;white-space:nowrap}
.expected-price-stack strong{position:absolute;right:0;top:-.18em;font-size:.9em;line-height:1;font-weight:600}
.expected-price-stack small{position:absolute;right:0;bottom:-.35em;font-size:.65em;line-height:1;font-weight:400;color:var(--muted)}
.ctr .expected-price-stack strong,.ctr .expected-price-stack small{left:0;right:0;text-align:center}
.cf-investment{position:relative}
.cf-investment .value{margin-top:2px;line-height:1.2}
.cf-investment .hint{position:absolute;bottom:3px;left:16px;right:8px;margin:0;font-size:10px;line-height:1.2;white-space:nowrap}
.table-export-bar{display:flex;justify-content:flex-end;padding:5px 8px;background:var(--card);position:sticky;left:0}
.table-export-button.btn{min-height:28px;padding:3px 10px;font-size:12px}
.card-head.table-export-heading{display:flex;flex-direction:row;flex-wrap:nowrap;align-items:center;gap:12px}
.table-export-heading>.table-export-button{margin-left:auto;flex-shrink:0;white-space:nowrap}
.profit-calculator .pc-toolbar{display:flex;align-items:flex-end;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:12px}
.profit-calculator .pc-toolbar-actions{display:flex;gap:8px;flex-wrap:wrap}
.profit-calculator #pc-scope{display:flex;gap:12px;flex-wrap:wrap;min-width:0}
.profit-calculator .pc-scope-group{border:1px solid var(--border);border-radius:9px;padding:8px 12px;min-width:190px;max-width:100%;background:#fff}
.profit-calculator .pc-scope-group legend{font-weight:700;color:var(--navy);padding:0 4px}
.profit-calculator .pc-scope-group label{display:inline-flex;align-items:center;gap:6px;white-space:nowrap;cursor:pointer;padding:3px 5px;font-size:13px}
.profit-calculator .pc-group-all{font-weight:700;border-bottom:1px solid var(--border);margin-bottom:4px}
.profit-calculator .pc-container-list{display:flex;flex-wrap:wrap;max-height:110px;overflow:auto;gap:2px 8px}
.profit-calculator .pc-message{min-height:20px;color:#926800;font-size:12.5px;margin:6px 0 12px}
.profit-calculator .pc-message.error,.profit-calculator .pc-warning{color:var(--danger)}
.profit-calculator .pc-table{min-width:740px}
.profit-calculator .pc-table>thead>tr>th:first-child,.profit-calculator .pc-main-row>td:first-child{width:44px!important;min-width:44px!important;max-width:44px!important;padding-left:6px;padding-right:6px}
.profit-calculator .pc-table>thead>tr>th:nth-child(2),.profit-calculator .pc-main-row>td:nth-child(2){position:sticky;left:44px;width:96px;min-width:96px!important;max-width:96px;box-shadow:2px 0 0 #1f3a5f18}
.profit-calculator .pc-main-row>td:nth-child(2){z-index:2;background:var(--card,#fff)}
.profit-calculator .pc-table>thead>tr>th:nth-child(2){z-index:7;background:var(--head-bg,#dce8f3)}
.profit-calculator .pc-table td:nth-child(2){white-space:normal}
.profit-calculator .pc-table td:nth-child(2) small{display:block;color:var(--muted);margin-top:2px}
.profit-calculator .pc-warning{display:block;font-size:11px;margin-top:4px;max-width:260px}
.profit-calculator .pc-price{width:104px;max-width:100%;box-sizing:border-box;border:1px solid var(--border);border-radius:6px;padding:7px 6px;text-align:right;font:inherit}
.profit-calculator .pc-price:focus{outline:2px solid rgba(47,108,173,.25);border-color:var(--blue)}
.profit-calculator .pc-save-status{display:block;font-size:11px;color:var(--muted);white-space:normal;max-width:130px;margin-top:3px}
.profit-calculator .pc-select-all{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:500;white-space:nowrap}
.profit-calculator .pc-table-heading{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:nowrap}
.profit-calculator .pc-heading-actions{display:flex;align-items:center;gap:10px;margin-left:auto;flex-shrink:0}
.profit-calculator .pc-detail-row[hidden]{display:none}
.profit-calculator .pc-detail-row>td{background:#f7fafc!important}
.profit-calculator .pc-detail-grid{display:grid;grid-template-columns:repeat(5,minmax(80px,1fr));gap:6px 14px;white-space:nowrap;min-width:520px;font-size:12px;padding:6px}
.profit-calculator .pc-detail-grid>span:nth-child(-n+5){font-weight:700;color:var(--navy)}
.profit-calculator .pc-negative{color:var(--danger);font-weight:700}
@media(max-width:640px){.profit-calculator #pc-scope,.profit-calculator .pc-scope-group,.profit-calculator .pc-toolbar-actions{width:100%}.profit-calculator .pc-toolbar-actions>.btn{flex:1;justify-content:center}.profit-calculator .pc-totals{grid-template-columns:1fr}.profit-calculator .pc-detail-grid{gap:6px}}
.inventory-scope-picker{position:relative;width:320px;max-width:100%;margin-top:12px}
.inventory-scope-picker>summary{padding:10px 12px;border:1px solid var(--border);border-radius:8px;cursor:pointer;background:var(--card,#fff)}
.inventory-scope-options{position:absolute;top:100%;left:0;width:100%;max-height:280px;overflow:auto;background:#fff;border:1px solid var(--border);border-radius:8px;box-shadow:0 8px 24px #18334b20;padding:12px;z-index:25;box-sizing:border-box}
.inventory-scope-options section+section{border-top:1px solid var(--border);margin-top:8px;padding-top:8px}
.inventory-scope-options .checkbox{display:flex;align-items:center;gap:8px;padding:7px 4px}
.inventory-scope-options input[type=checkbox]{width:17px;height:17px;flex:0 0 17px}
.table-export-grid{display:grid;grid-template-columns:1fr 2fr;gap:16px}
.table-export-grid h4{margin:8px 0}.table-export-tools{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin:6px 0}
.table-export-grid input[type=search]{width:100%;padding:8px 10px;border:1px solid var(--border);border-radius:6px;font:inherit}
.table-export-cols,.table-export-rows{max-height:300px;overflow:auto;border:1px solid var(--border);border-radius:6px;padding:6px}
.table-export-dialog .checkbox{display:flex;align-items:flex-start;gap:8px;padding:6px;white-space:normal;font-size:13px;line-height:1.5}
.table-export-dialog .checkbox input{width:16px;height:16px;flex:0 0 16px;margin-top:2px}
@media(max-width:640px){.table-export-grid{grid-template-columns:1fr}.table-export-cols{max-height:130px;display:flex;flex-wrap:wrap}.table-export-rows{max-height:220px}}
.inventory-detail-heading{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.inventory-sort{display:flex;align-items:center;gap:6px;font-size:13px;white-space:nowrap;font-weight:400}.inventory-sort select{padding:5px 8px;border:1px solid var(--border);border-radius:6px;background:#fff}.inventory-detail-heading>span{flex:1;font-size:14px}@media(max-width:620px){.inventory-detail-heading{gap:6px}.inventory-detail-heading>span{display:none}}
