/* ==========================================================================
   Meemo Trade 设计系统 v1.3（2026-10-10 晚：高级化 — 光影与质感升级）
   v1.3 变更（业主定案预览后全推）：原紫不变，给系统补上"光影语言"——
   主按钮改三段渐变 + 内高光 + 分层柔影 + 悬停微浮；次按钮改浅底渐变描边；
   输入框加内阴影；卡片阴影改双层柔影（大偏移、低透明）；KPI 加渐变底。
   只动设计系统层与桥接层，各页作用域（.pg-*）与声明一概不动，全站
   已接入页面同时升级。业主反馈来源：Inbound 页 Submit/Reset 扁平纯色。
   Meemo Trade 设计系统 v1.2（2026-10-10：圆滑版 + 页面 CSS 逐批并入）
   v1.2 变更：圆角阶梯整体加大（11/12/16）；新增 Bootstrap 通用件桥接
   （.btn / .card / .alert / .badge / .nav-tabs 边角统一）；登录前首页
   （homeBeforeLogin）页内 CSS 全量并入本文件（.pg-home 作用域，见文末）。
   Meemo Trade 设计系统 v1.1（2026-10-09 业主定案：原紫高级版 + 全站统一 CSS）
   方向：原紫色不变（#A683E3 / #815AC6），高级感来自字体、光影、圆角、细节。
   唯一来源：全站设计令牌 + 标准组件。各页面只许引用本文件，
   禁止再把系统样式复制进页面 <style>（旧逐页副本为过渡，迁移时逐批删除）。
   加载顺序：Bootstrap → styles.css → 本文件（最后加载，覆盖旧样式）。
   页面接入：最外层容器加 class="ds-root"，组件用 ds-* 类名；
   旧类名（addButton 等）在 .ds-root 内由本文件统一映射。
   ========================================================================== */:root {
    /* —— 品牌（原紫色家族，一分不动） —— */
    --ds-brand: #815AC6;          /* 品牌主色：按钮 / 强调 */
    --ds-brand-light: #A683E3;    /* 浅紫：侧栏 / 大面积品牌面 */
    --ds-brand-dark: #815AC6;     /* 深色：悬停 / 顶栏 / 链接 */
    --ds-brand-darker: #6D4BA8;   /* 按下 */
    --ds-brand-soft: #F0EDF6;     /* 浅底：选中、信息徽章 */
    --ds-brand-hover-bg: #FAF9FD; /* 行悬停（淡紫） */
    --ds-focus-ring: 0 0 0 3.5px rgba(166, 131, 227, .22);

    /* —— 中性（暖调紫灰，比冷 slate 更配品牌紫） —— */
    --ds-ink: #221C35;            /* 主文字 */
    --ds-muted: #7A7390;          /* 次要文字 */
    --ds-border: #E9E4F5;         /* 边框（浅） */
    --ds-border-strong: #DDD5F2;  /* 边框（控件定义线） */
    --ds-bg: #F7F6FA;             /* 页面底（极浅紫灰） */
    --ds-card: #FFFFFF;           /* 卡片底 */
    --ds-thead-bg: #F6F3FC;       /* 表头底 */

    /* —— 语义（与 Bootstrap pastel 徽章一致） —— */
    --ds-success: #198754;  --ds-success-bg: #D1E7DD;  --ds-success-ink: #0F5132;
    --ds-warning: #E8590C;  --ds-warning-bg: #FFF3CD;  --ds-warning-ink: #664D03;
    --ds-danger: #DC3545;   --ds-danger-bg: #F8D7DA;   --ds-danger-ink: #842029;  --ds-danger-border: #F1AEB5;

    /* —— 形状与层次（v1.2：圆角阶梯 11/12/16，边角更圆滑；柔和紫调双层阴影） —— */
    --ds-radius: 11px;            /* 控件 */
    --ds-radius-md: 12px;         /* 菜单 / 提示 */
    --ds-radius-lg: 16px;         /* 卡片 / 弹窗 */
    --ds-radius-xl: 20px;         /* 大卡片 / 英雄区 */
    --ds-shadow-card: 0 1px 2px rgba(48, 35, 90, .05), 0 12px 32px -16px rgba(48, 35, 90, .18);
    --ds-shadow-menu: 0 12px 32px rgba(84, 62, 160, .14);
    --ds-shadow-modal: 0 18px 44px rgba(84, 62, 160, .20);
    /* —— v1.3 光影语言：主按钮渐变（原紫三段）、次按钮浅底渐变、分层柔影 —— */
    --ds-brand-grad: linear-gradient(180deg, #8F68D6 0%, #7C53C0 55%, #7150B6 100%);
    --ds-brand-grad-dark: linear-gradient(180deg, #8560CC 0%, #7150B6 55%, #684AA6 100%);
    --ds-soft-grad: linear-gradient(180deg, #FFFFFF 0%, #F4F0FC 100%);
    --ds-shadow-btn: inset 0 1px 0 rgba(255, 255, 255, .28), 0 1px 2px rgba(64, 42, 120, .18), 0 6px 16px -6px rgba(109, 75, 168, .45);
    --ds-shadow-btn-hover: inset 0 1px 0 rgba(255, 255, 255, .30), 0 2px 3px rgba(64, 42, 120, .18), 0 10px 22px -6px rgba(109, 75, 168, .50);
    --ds-font: "Segoe UI", "PingFang SC", "Microsoft YaHei", system-ui, -apple-system, sans-serif;
}/* ================= 全局基线（v1.4） ================= */::selection { background: rgba(166, 131, 227, .28); }/* 全站滚动条：细、淡紫（v1.1 细节） */::-webkit-scrollbar { width: 10px; height: 10px; }::-webkit-scrollbar-thumb { background: #CFC4EC; border-radius: 10px; border: 2px solid #fff; }::-webkit-scrollbar-track { background: transparent; }/* ================= 页面根 ================= */.ds-root {
    font-family: var(--ds-font);
    color: var(--ds-ink);
    background: var(--ds-bg);
    font-size: 14px;
    line-height: 1.55;
    padding: 1rem;
    -webkit-font-smoothing: antialiased;
    text-rendering: optimizeLegibility;
}@media (max-width: 768px) {.ds-root { padding: .5rem; }}.ds-page-title { font-size: 1.25rem; font-weight: 800; color: var(--ds-ink); margin: 0; letter-spacing: -.01em; }.ds-section-title { font-size: .9375rem; font-weight: 700; color: var(--ds-ink); margin: 0 0 .5rem; letter-spacing: -.01em; }.ds-muted { color: var(--ds-muted); }.ds-num { font-variant-numeric: tabular-nums; letter-spacing: -.01em; }.ds-toolbar { display: flex; gap: .5rem; align-items: center; flex-wrap: wrap; }.ds-title-row { display: flex; align-items: center; justify-content: space-between; gap: .75rem; margin-bottom: .75rem; flex-wrap: wrap; }/* ================= 卡片 ================= */.ds-card {
    background: var(--ds-card);
    border: 1px solid var(--ds-border);
    border-radius: var(--ds-radius-lg);
    box-shadow: var(--ds-shadow-card);
}.ds-card-pad { padding: 1rem; }/* ================= KPI（v1.1 新增标准件：数字即设计） ================= */.ds-kpi { position: relative; overflow: hidden; padding: 1.05rem 1.2rem .95rem; background: linear-gradient(180deg, #FFFFFF, #FBFAFE); }.ds-kpi::before {
    content: ""; position: absolute; top: 0; left: 0; right: 0; height: 3px;
    background: linear-gradient(90deg, var(--ds-brand-light), var(--ds-brand));
    opacity: .85;
}.ds-kpi-label { font-size: .72rem; font-weight: 700; letter-spacing: .09em; color: var(--ds-muted); text-transform: uppercase; }.ds-kpi-value { font-size: 1.95rem; font-weight: 800; line-height: 1.15; margin-top: .35rem; color: var(--ds-ink); font-variant-numeric: tabular-nums; letter-spacing: -.01em; }.ds-kpi-sub { font-size: .78rem; color: var(--ds-muted); margin-top: .15rem; }/* ================= 按钮（标准组件） ================= */.ds-btn {
    display: inline-flex; align-items: center; justify-content: center; gap: 6px;
    padding: .45rem 1rem; font-size: .875rem; font-weight: 700; line-height: 1.4;
    border-radius: var(--ds-radius); border: 1px solid transparent;
    background: #fff; color: var(--ds-ink); cursor: pointer; white-space: nowrap;
    transition: all .15s ease;
}.ds-btn-primary { background: var(--ds-brand-grad); border-color: rgba(84, 54, 140, .35); color: #fff; box-shadow: var(--ds-shadow-btn); }.ds-btn-primary:hover { background: var(--ds-brand-grad); border-color: rgba(84, 54, 140, .35); color: #fff; transform: translateY(-1px); box-shadow: var(--ds-shadow-btn-hover); }.ds-btn-primary:active { background: var(--ds-brand-grad-dark); border-color: rgba(84, 54, 140, .4); transform: none; box-shadow: var(--ds-shadow-btn); }.ds-btn-secondary { background: var(--ds-soft-grad); border-color: #D9CBF2; color: var(--ds-brand-darker); box-shadow: inset 0 1px 0 #fff, 0 1px 2px rgba(64, 42, 120, .08); }.ds-btn-secondary:hover { background: var(--ds-soft-grad); border-color: #B79CE8; color: var(--ds-brand-darker); transform: translateY(-1px); }.ds-btn-success { background: var(--ds-success); border-color: var(--ds-success); color: #fff; }.ds-btn-success:hover { background: #157347; border-color: #157347; color: #fff; }.ds-btn-danger { background: #fff; border-color: var(--ds-danger-border); color: var(--ds-danger-ink); }.ds-btn-danger:hover { background: var(--ds-danger-bg); }.ds-btn-danger-solid { background: var(--ds-danger); border-color: var(--ds-danger); color: #fff; }.ds-btn-danger-solid:hover { background: #BB2D3B; border-color: #BB2D3B; color: #fff; }.ds-btn-sm { padding: .3rem .7rem; font-size: .8125rem; }.ds-btn:disabled, .ds-btn.disabled { opacity: .55; cursor: not-allowed; pointer-events: none; }/* —— 旧类名统一映射（迁移期：页面加 .ds-root 即可归正，不用改 markup）——
   注意 button.addButton 的写法：全局 styles.css 里有一条同名规则
   （margin 16px / min-height 40px / font-size 20px），必须同等specificity 才压得住。 */.ds-root button.addButton{
    margin: 0; min-height: 0; font-size: .875rem; line-height: 1.4;
    padding: .45rem 1rem; border-radius: var(--ds-radius);
    background: var(--ds-brand-grad); border: 1px solid rgba(84, 54, 140, .35);
    color: #fff; font-weight: 700; display: inline-flex; align-items: center; justify-content: center; gap: 6px;
    box-shadow: var(--ds-shadow-btn); transition: all .15s ease;
}.ds-root button.addButton:hover{ background: var(--ds-brand-grad); border-color: rgba(84, 54, 140, .35); transform: translateY(-1px); box-shadow: var(--ds-shadow-btn-hover); }/* Disabled 规则必须排在品牌规则之后：页面 JS 靠增删这个类切换按钮状态 */.ds-root button.addButtonDisabled{
    margin: 0; min-height: 0; font-size: .875rem; line-height: 1.4;
    padding: .45rem 1rem; border-radius: var(--ds-radius);
    background: #FBFAFD; border: 1px solid var(--ds-border);
    color: var(--ds-muted); font-weight: 700; display: inline-flex; align-items: center; justify-content: center; gap: 6px;
}.ds-root button.deleteButton{
    margin: 0; min-height: 0; font-size: .875rem; line-height: 1.4;
    padding: .45rem 1rem; border-radius: var(--ds-radius);
    background: #fff; border: 1px solid var(--ds-danger-border);
    color: var(--ds-danger-ink); font-weight: 700; display: inline-flex; align-items: center; justify-content: center; gap: 6px;
    transition: all .15s ease;
}.ds-root button.deleteButton:hover{ background: var(--ds-danger-bg); box-shadow: 0 4px 10px -4px rgba(220, 53, 69, .35); }/* ================= 表单 ================= */.ds-label { display: block; font-size: .8125rem; font-weight: 600; color: var(--ds-ink); margin-bottom: .3rem; }.ds-root .form-label{ font-size: .8125rem; font-weight: 600; color: var(--ds-ink); margin-bottom: .3rem; }.ds-input, .ds-root .form-control, .ds-root .form-select, .ds-root .singleColTexInput{
    border: 1px solid var(--ds-border-strong); border-radius: var(--ds-radius);
    font-size: .875rem; color: var(--ds-ink); background: #fff;
    padding: .42rem .6rem; line-height: 1.45;
    box-shadow: inset 0 1px 2px rgba(34, 28, 53, .05);
    transition: border-color .15s ease, box-shadow .15s ease;
}.ds-input:focus, .ds-root .form-control:focus, .ds-root .form-select:focus, .ds-root .singleColTexInput:focus{
    border-color: var(--ds-brand-light); box-shadow: var(--ds-focus-ring); outline: none;
}.ds-root .form-control::placeholder{ color: #A79FC0; }.ds-root input[type="checkbox"], .ds-root input[type="radio"]{ accent-color: var(--ds-brand); }.ds-check { width: 18px; height: 18px; accent-color: var(--ds-brand); cursor: pointer; }.ds-hint { font-size: .8125rem; color: var(--ds-muted); margin-top: .25rem; }/* ================= 筛选区（标签网格） =================
   列数用 --ds-cols 指定（默认 6）；动作格可用 .ds-filter-actions 占 2 列。 */.ds-filter-grid {
    display: grid; gap: .6rem .8rem; align-items: end;
    grid-template-columns: repeat(var(--ds-cols, 6), minmax(0, 1fr));
}.ds-span-2 { grid-column: span 2; }@media (max-width: 1400px) {.ds-filter-grid { --ds-cols: 4; }}@media (max-width: 768px) {.ds-filter-grid { --ds-cols: 2; }.ds-span-2 { grid-column: span 2; }}.ds-filter-actions { display: flex; gap: .5rem; }.ds-filter-actions .ds-btn { flex: 1; }/* ================= 状态页签 ================= */.ds-tabs { display: flex; gap: 6px; flex-wrap: wrap; margin: 0 0 .75rem; }.ds-tab {
    display: inline-flex; align-items: center; gap: 6px;
    padding: .38rem .95rem; border-radius: 999px; font-size: .875rem;
    background: #fff; border: 1px solid var(--ds-border-strong); color: var(--ds-ink);
    cursor: pointer; font-weight: 600; line-height: 1.4;
    transition: all .15s ease;
}.ds-tab:hover { background: var(--ds-brand-soft); }.ds-tab.active { background: var(--ds-brand-grad); border-color: rgba(84, 54, 140, .35); color: #fff; font-weight: 700; box-shadow: var(--ds-shadow-btn); }.ds-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--ds-muted); display: inline-block; }.ds-dot-warn { background: var(--ds-warning); }.ds-dot-bad { background: var(--ds-danger); }/* ================= 状态徽章（v1.1：带小圆点） ================= */.ds-badge {
    display: inline-flex; align-items: center; gap: 6px;
    padding: .16rem .6rem; border-radius: 999px;
    font-size: .75rem; font-weight: 600; line-height: 1.5; white-space: nowrap;
    background: var(--ds-brand-soft); color: var(--ds-brand-dark);
}.ds-badge::before { content: ""; width: 6px; height: 6px; border-radius: 50%; background: currentColor; flex: 0 0 6px; }.ds-badge-success { background: var(--ds-success-bg); color: var(--ds-success-ink); }.ds-badge-warning { background: var(--ds-warning-bg); color: var(--ds-warning-ink); }.ds-badge-danger { background: var(--ds-danger-bg); color: var(--ds-danger-ink); }.ds-badge-neutral { background: #F0EEF5; color: #5C5670; }/* ================= 表格（v1.1：浅紫灰表头 / 行高拉开 / 边框减淡） ================= */.ds-table-wrap {
    overflow: auto; max-height: var(--ds-table-maxh, calc(100vh - 340px));
    border-radius: var(--ds-radius-lg);
}.ds-table-wrap::-webkit-scrollbar { width: 10px; height: 10px; }.ds-table-wrap::-webkit-scrollbar-thumb { background: #CFC4EC; border-radius: 10px; border: 2px solid #fff; }.ds-table { width: 100%; border-collapse: collapse; font-size: .875rem; margin: 0; }.ds-table thead th {
    background: var(--ds-thead-bg); color: var(--ds-muted); font-weight: 700; text-align: left;
    font-size: .72rem; letter-spacing: .07em; text-transform: uppercase;
    padding: .65rem .75rem; border-bottom: 1px solid var(--ds-border);
    position: sticky; top: 0; z-index: 1; white-space: nowrap;
}.ds-table tbody td { padding: .68rem .75rem; border-top: 1px solid var(--ds-border); color: var(--ds-ink); vertical-align: middle; }.ds-table tbody tr { transition: background .12s ease; }.ds-table tbody tr:hover td { background: var(--ds-brand-hover-bg); }.ds-table .ds-link { color: var(--ds-brand-dark); font-weight: 700; text-decoration: none; }.ds-table .ds-link:hover { text-decoration: underline; }/* Bootstrap 表格在 .ds-root 内的归正（迁移期桥接） */.ds-root .table{ font-size: .875rem; color: var(--ds-ink); }.ds-root .table thead th{ background: var(--ds-thead-bg); color: var(--ds-muted); font-size: .72rem; letter-spacing: .07em; text-transform: uppercase; border-bottom: 1px solid var(--ds-border); }.ds-root .table td, .ds-root .table th{ border-color: var(--ds-border); }/* ================= 分页（Bootstrap 桥接 + 独立组件） ================= */.ds-root .pagination{ gap: 4px; }.ds-root .pagination .page-link{
    color: var(--ds-brand-dark); border: 1px solid var(--ds-border-strong);
    border-radius: var(--ds-radius) !important; font-size: .875rem; padding: .35rem .7rem;
    transition: all .15s ease;
}.ds-root .pagination .page-item.active .page-link{ background: var(--ds-brand-grad); border-color: rgba(84, 54, 140, .35); color: #fff; font-weight: 700; }.ds-root .pagination .page-link:focus{ box-shadow: var(--ds-focus-ring); }.ds-pager { display: flex; gap: 4px; align-items: center; }.ds-pg {
    min-width: 30px; text-align: center; padding: .32rem .4rem; font-size: .875rem;
    border: 1px solid var(--ds-border-strong); border-radius: var(--ds-radius); background: #fff; color: var(--ds-ink); cursor: pointer;
    transition: all .15s ease;
}.ds-pg:hover { background: var(--ds-brand-soft); }.ds-pg.active { background: var(--ds-brand-grad); border-color: rgba(84, 54, 140, .35); color: #fff; font-weight: 700; }/* ================= 下拉菜单 ================= */.ds-menu, .ds-root .dropdown-menu{
    border: 1px solid var(--ds-border); border-radius: var(--ds-radius-md);
    box-shadow: var(--ds-shadow-menu); font-size: .875rem; padding: .35rem;
}.ds-menu .dropdown-item, .ds-root .dropdown-menu .dropdown-item{ border-radius: 8px; padding: .45rem .7rem; color: var(--ds-ink); transition: background .12s ease; }.ds-menu .dropdown-item:hover, .ds-root .dropdown-menu .dropdown-item:hover{ background: var(--ds-brand-soft); }.ds-root .dropdown-item.danger, .ds-menu .dropdown-item.danger{ color: var(--ds-danger-ink); }/* ================= 弹窗（Bootstrap 桥接） ================= */.ds-root .modal-content{
    border: 1px solid var(--ds-border); border-radius: var(--ds-radius-lg);
    box-shadow: var(--ds-shadow-modal);
}.ds-root .modal-header{ border-bottom: 1px solid var(--ds-border); }.ds-root .modal-footer{ border-top: 1px solid var(--ds-border); }.ds-root .modal-title{ font-size: 1rem; font-weight: 700; color: var(--ds-ink); letter-spacing: -.01em; }/* ================= 提示 / 空状态 / 加载 ================= */.ds-alert { border: 1px solid var(--ds-border); border-radius: var(--ds-radius-md); padding: .7rem 1rem; font-size: .875rem; background: #fff; color: var(--ds-ink); }.ds-alert-info { background: var(--ds-brand-soft); border-color: #DDD5F2; }.ds-alert-success { background: var(--ds-success-bg); border-color: #A3CFBB; color: var(--ds-success-ink); }.ds-alert-warning { background: var(--ds-warning-bg); border-color: #FFDA6A; color: var(--ds-warning-ink); }.ds-alert-danger { background: var(--ds-danger-bg); border-color: var(--ds-danger-border); color: var(--ds-danger-ink); }.ds-empty { text-align: center; color: var(--ds-muted); padding: 2.2rem 1rem; font-size: .875rem; }.ds-loading { text-align: center; color: var(--ds-muted); padding: 1.2rem; font-size: .875rem; }/* ================= Bootstrap 通用件桥接（v1.2：边角统一圆滑） =================
   未迁移页面只要挂 .ds-root，常用 Bootstrap 件的边角即与设计系统一致；
   颜色类工具（bg-* 等 !important 工具类）不受影响。 */.ds-root .btn{ border-radius: var(--ds-radius); transition: all .15s ease; }.ds-root .btn-primary{
    background: var(--ds-brand-grad); border-color: rgba(84, 54, 140, .35);
    box-shadow: var(--ds-shadow-btn); font-weight: 600; color: #fff;
}.ds-root .btn-primary:hover, .ds-root .btn-primary:focus{
    background: var(--ds-brand-grad); border-color: rgba(84, 54, 140, .35); color: #fff;
    transform: translateY(-1px); box-shadow: var(--ds-shadow-btn-hover);
}.ds-root .btn-secondary, .ds-root .btn-outline-secondary{
    background: var(--ds-soft-grad); border-color: #D9CBF2; color: var(--ds-brand-darker);
    box-shadow: inset 0 1px 0 #fff, 0 1px 2px rgba(64, 42, 120, .08); font-weight: 600;
}.ds-root .btn-secondary:hover, .ds-root .btn-outline-secondary:hover{
    background: var(--ds-soft-grad); border-color: #B79CE8; color: var(--ds-brand-darker); transform: translateY(-1px);
}.ds-root .card{ border: 1px solid var(--ds-border); border-radius: var(--ds-radius-lg); box-shadow: var(--ds-shadow-card); }.ds-root .card-header{
    background: var(--ds-thead-bg); border-bottom: 1px solid var(--ds-border);
    border-top-left-radius: calc(var(--ds-radius-lg) - 1px);
    border-top-right-radius: calc(var(--ds-radius-lg) - 1px);
}.ds-root .alert{ border-radius: var(--ds-radius-md); }.ds-root .badge{ border-radius: 999px; }.ds-root .nav-tabs .nav-link{ border-top-left-radius: var(--ds-radius-md); border-top-right-radius: var(--ds-radius-md); }.ds-root .input-group > .form-control, .ds-root .input-group > .form-select{ border-radius: var(--ds-radius); }/* ================= 顶栏（外壳接入时启用） ================= */.ds-topbar { background: var(--ds-brand-dark); color: #fff; }.ds-topbar .ds-nav-item { color: rgba(255, 255, 255, .82); border-radius: 999px; padding: .3rem .8rem; font-size: .875rem; font-weight: 600; text-decoration: none; }.ds-topbar .ds-nav-item.active { background: rgba(255, 255, 255, .2); color: #fff; font-weight: 700; }/* ==========================================================================
   页面迁移区（逐批并入：页面 <style> 删除后，规则在此以页面作用域保存）
   --------------------------------------------------------------------------
   [2026-10-10] homeBeforeLogin（登录前首页）—— 作用域 .pg-home
   原页内 <style> 全量迁入（87 条规则 → 86 条：body{background:#fff} 与
   styles.css 白色重复，删除；:root 变量改为 .pg-home 作用域变量；
   #title 为登录前页眉唯一 id，保持全局）。声明多重集校验一致（368 条）。
   ========================================================================== */.pg-home { --accent:#A683E3; --ink:#0b0b10; --muted:rgba(0,0,0,.68); --line:rgba(0,0,0,.12); --soft:rgba(0,0,0,.04); --bg:#fff; }/* Keep header on top */#title { position: relative; z-index: 50; }/* ===== Fullscreen background video (ENTIRE PAGE) ===== */#bgVideo.pg-home { position: fixed; inset: 0; width: 100%; height: 100%; object-fit: cover; z-index: -2; background:#000; filter: brightness(0.98); transform: scale(1.02); }/* Dark overlay for readability */.bgShade.pg-home { position: fixed; inset: 0; z-index: -1; background: linear-gradient(180deg, rgba(0,0,0,.18), rgba(0,0,0,.10)); pointer-events: none; }/* Wider layout */.pageWrap.pg-home { max-width: 1500px; margin: 0 auto; padding: 18px 14px 60px; position: relative; z-index: 1; }/* Glass card wrapper */.pg-home .glassCard { border: 1px solid rgba(255,255,255,.35); border-radius: 18px; box-shadow: 0 18px 50px rgba(0,0,0,.22); overflow: hidden; background: rgba(255,255,255,.92); backdrop-filter: blur(6px); }/* Top hero */.pg-home .heroTop { padding: 18px 22px; background: linear-gradient(180deg, rgba(166,131,227,.12), rgba(255,255,255,0)); border-bottom: 1px solid rgba(0,0,0,.06); }.pg-home .kicker { display:inline-flex; padding: 7px 12px; border-radius: 999px; background: rgba(166,131,227,.12); color: rgba(35,18,80,.95); font-weight: 950; font-size: .92rem; }.pg-home .heroTitle { margin: 10px 0 8px; font-size: 2.1rem; line-height: 1.12; font-weight: 1000; letter-spacing: -0.02em; color: var(--ink); }.pg-home .heroDesc { margin: 0; max-width: 1050px; color: rgba(0,0,0,.74); font-size: 1.05rem; line-height: 1.5; }.pg-home .pillRow { display:flex; flex-wrap: wrap; gap:10px; margin-top: 12px; }.pg-home .pill { border: 1px solid rgba(0,0,0,.10); background: rgba(0,0,0,.03); border-radius: 999px; padding: 8px 12px; font-weight: 900; color: rgba(0,0,0,.78); font-size: .95rem; }/* Tabs */.pg-home .tabBar { padding: 14px 18px 0; background: rgba(255,255,255,.92); border-bottom: 1px solid rgba(0,0,0,.08); }.pg-home .nav-tabs { border-bottom: none; gap: 8px; }.pg-home .nav-tabs .nav-link { border: 1px solid rgba(0,0,0,.10); border-bottom: none; border-radius: 12px 12px 0 0; font-weight: 950; color: rgba(0,0,0,.70); background: rgba(0,0,0,.02); padding: 10px 12px; }.pg-home .nav-tabs .nav-link.active { color: rgba(0,0,0,.90); background: #fff; border-color: rgba(0,0,0,.10); }.pg-home .tabContent { padding: 18px; background: rgba(255,255,255,.92); }.pg-home .cardBox { border: 1px solid rgba(0,0,0,.10); background: #fff; border-radius: 16px; box-shadow: 0 12px 26px rgba(0,0,0,.06); padding: 16px; }.pg-home .boxTitle { margin:0 0 10px; font-weight: 1000; font-size: 1.05rem; letter-spacing: -0.01em; color: var(--ink); }.pg-home .boxText { margin:0; color: rgba(0,0,0,.72); line-height: 1.5; }.pg-home .sectionGrid { display:grid; grid-template-columns: 1.08fr .92fr; gap: 14px; align-items: start; }.pg-home .featureGrid { display:grid; grid-template-columns: repeat(12, 1fr); gap: 12px; }.pg-home .feature { grid-column: span 4; border: 1px solid rgba(0,0,0,.10); background: #fff; border-radius: 16px; box-shadow: 0 12px 26px rgba(0,0,0,.06); padding: 14px; }.pg-home .feature h4 { margin:0 0 6px; font-weight: 1000; font-size: 1.02rem; }.pg-home .feature p { margin:0; color: rgba(0,0,0,.70); line-height: 1.45; }/* Video window inside About */.pg-home .videoFrame { width: 100%; border-radius: 14px; overflow: hidden; border: 1px solid rgba(0,0,0,.10); background: #000; }.pg-home .videoFrame video { width: 100%; height: 320px; object-fit: cover; display:block; }/* Warehouses */.pg-home .whGrid { display:grid; grid-template-columns: repeat(12, 1fr); gap: 12px; }.pg-home .whCard { grid-column: span 6; border: 1px solid rgba(0,0,0,.10); background: #fff; border-radius: 16px; box-shadow: 0 12px 26px rgba(0,0,0,.06); padding: 14px; }.pg-home .tag { display:inline-flex; padding: 6px 10px; border-radius: 999px; background: rgba(166,131,227,.12); color: rgba(35,18,80,.95); font-weight: 1000; margin-bottom: 10px; }.pg-home .whCard h5 { margin:0 0 6px; font-weight:1000; }.pg-home .whCard p { margin:0; color: rgba(0,0,0,.70); }/* Pricing blocks */.pg-home .priceGrid { display:grid; grid-template-columns: repeat(12, 1fr); gap: 12px; }.pg-home .priceCard { grid-column: span 4; border: 1px solid rgba(0,0,0,.10); background: #fff; border-radius: 16px; box-shadow: 0 12px 26px rgba(0,0,0,.06); padding: 14px; }.pg-home .priceCard.pop { border: 2px solid rgba(166,131,227,.55); box-shadow: 0 18px 40px rgba(166,131,227,.16), 0 12px 26px rgba(0,0,0,.06); }.pg-home .priceCard h4 { margin:0 0 6px; font-weight:1000; }.pg-home .priceCard p { margin:0; color: rgba(0,0,0,.70); line-height: 1.45; }/* Contact layout */.pg-home .contactGrid { display:grid; grid-template-columns: 1fr 1.2fr; gap: 12px; align-items: start; }.pg-home .kv { display:grid; grid-template-columns: 110px 1fr; gap: 8px 12px; margin:0; }.pg-home .kv dt { font-weight: 1000; color: rgba(0,0,0,.78); }.pg-home .kv dd { margin:0; color: rgba(0,0,0,.72); }/* Forms */.pg-home .form-control { border-radius: 12px; }/* Buttons: keep your existing .addButton style; just make it rounded */.pg-home .addButton { border-radius: 12px !important; font-weight: 950 !important; letter-spacing: .01em; box-shadow: 0 10px 22px rgba(166,131,227,.18); }/* ===== Mode switching (replace entire content area) ===== */.pg-home .modeView { display:none; }.pg-home .modeView.show { display:block; }/* Centered full-page panels for contact/login on top of video */.pg-home .fullPanel { border: 1px solid rgba(255,255,255,.35); border-radius: 18px; box-shadow: 0 18px 60px rgba(0,0,0,.28); background: rgba(255,255,255,.93); backdrop-filter: blur(6px); overflow: hidden; }.pg-home .fullPanel .panelHeader { padding: 14px 18px; border-bottom: 1px solid rgba(0,0,0,.08); background: linear-gradient(180deg, rgba(166,131,227,.12), rgba(255,255,255,0)); font-weight: 1000; color: rgba(0,0,0,.86); }.pg-home .fullPanel .panelBody { padding: 18px; }.pg-home .scrollY { max-height: 78vh; overflow: auto; }@media (max-width: 992px) {.pg-home .heroTitle { font-size: 1.75rem; }.pg-home .sectionGrid { grid-template-columns: 1fr; }.pg-home .feature { grid-column: span 12; }.pg-home .whCard { grid-column: span 12; }.pg-home .priceCard { grid-column: span 12; }.pg-home .contactGrid { grid-template-columns: 1fr; }.pg-home .videoFrame video { height: 240px; }.pg-home .scrollY { max-height: 84vh; }}/* =========================
       Freight Quote (REDESIGN)
       ========================= */.pg-home #pane-freight .fq-wrap { display: grid; gap: 14px; }/* Hero */.pg-home #pane-freight .fq-hero { border: 1px solid rgba(0,0,0,.10); border-radius: 16px; background: radial-gradient(900px 260px at 20% 0%, rgba(166,131,227,.22), transparent 60%), radial-gradient(700px 220px at 80% 10%, rgba(166,131,227,.14), transparent 58%), rgba(255,255,255,.96); box-shadow: 0 14px 34px rgba(0,0,0,.08); overflow: hidden; }.pg-home #pane-freight .fq-heroInner { display: grid; grid-template-columns: 1.3fr .7fr; align-items: center; gap: 14px; padding: 16px 16px; }.pg-home #pane-freight .fq-badge { display:inline-flex; gap: 8px; align-items: center; padding: 6px 10px; border-radius: 999px; background: rgba(166,131,227,.14); border: 1px solid rgba(166,131,227,.22); color: rgba(35,18,80,.95); font-weight: 1000; font-size: 12px; width: fit-content; }.pg-home #pane-freight .fq-title { margin: 10px 0 6px; font-size: 1.55rem; font-weight: 1100; letter-spacing: -0.02em; color: var(--ink); }.pg-home #pane-freight .fq-sub { margin: 0; color: rgba(0,0,0,.70); line-height: 1.55; max-width: 820px; }/* subtle hero right illustration */.pg-home #pane-freight .fq-art { height: 120px; border-radius: 14px; border: 1px solid rgba(0,0,0,.10); background: linear-gradient(135deg, rgba(166,131,227,.22), rgba(255,255,255,.5)), radial-gradient(circle at 25% 25%, rgba(166,131,227,.25), transparent 55%), radial-gradient(circle at 75% 55%, rgba(166,131,227,.18), transparent 60%); position: relative; overflow: hidden; }.pg-home #pane-freight .fq-art:after { content:""; position:absolute; inset:auto -40px -50px auto; width: 180px; height: 180px; border-radius: 999px; background: radial-gradient(circle at 30% 30%, rgba(166,131,227,.30), transparent 60%); transform: rotate(10deg); }/* Cards */.pg-home #pane-freight .fq-cards { display: grid; grid-template-columns: repeat(12, 1fr); gap: 12px; }.pg-home #pane-freight .fq-card { grid-column: span 6; border: 1px solid rgba(0,0,0,.10); background: rgba(255,255,255,.96); border-radius: 16px; box-shadow: 0 12px 26px rgba(0,0,0,.06); padding: 14px; position: relative; overflow: hidden; transition: transform .18s ease, box-shadow .18s ease, border-color .18s ease; }.pg-home #pane-freight .fq-card:hover { transform: translateY(-2px); box-shadow: 0 18px 40px rgba(0,0,0,.10); border-color: rgba(166,131,227,.35); }.pg-home #pane-freight .fq-top { display:flex; gap: 12px; align-items: center; margin-bottom: 8px; }.pg-home #pane-freight .fq-icon { width: 42px; height: 42px; border-radius: 14px; background: rgba(166,131,227,.14); border: 1px solid rgba(166,131,227,.22); display:flex; align-items:center; justify-content:center; color: rgba(35,18,80,.95); font-weight: 1100; }.pg-home #pane-freight .fq-head h4 { margin:0; font-weight: 1100; letter-spacing: -0.01em; }.pg-home #pane-freight .fq-head .fq-small { margin-top: 2px; font-size: 12px; color: rgba(0,0,0,.62); }.pg-home #pane-freight .fq-desc { margin: 8px 0 10px; color: rgba(0,0,0,.70); line-height: 1.55; }.pg-home #pane-freight .fq-list { margin: 0 0 12px; padding-left: 18px; color: rgba(0,0,0,.74); }.pg-home #pane-freight .fq-list li { margin: 6px 0; }.pg-home #pane-freight .fq-actions { display:flex; gap: 10px; align-items:center; justify-content: space-between; flex-wrap: wrap; border-top: 1px solid rgba(0,0,0,.06); padding-top: 12px; }/* Primary button: reuse your .addButton feel but cleaner for this section */.pg-home #pane-freight .fq-btn { border: 0; border-radius: 12px; padding: 10px 14px; font-weight: 1000; background: var(--accent); color: #fff; box-shadow: 0 10px 22px rgba(166,131,227,.18); cursor:pointer; }.pg-home #pane-freight .fq-btn:hover { filter: brightness(.98); transform: translateY(-1px); }.pg-home #pane-freight .fq-btn:active { transform: translateY(0); }.pg-home #pane-freight .fq-link { background: transparent; border: 1px solid rgba(0,0,0,.12); color: rgba(0,0,0,.78); font-weight: 900; border-radius: 12px; padding: 10px 14px; cursor: pointer; }.pg-home #pane-freight .fq-link:hover { background: rgba(0,0,0,.03); }/* hidden placeholder area (for next step) */.pg-home #pane-freight .fq-placeholder { display:none; margin-top: 12px; border: 1px dashed rgba(0,0,0,.18); background: rgba(0,0,0,.02); border-radius: 14px; padding: 12px; color: rgba(0,0,0,.72); }.pg-home #pane-freight .fq-placeholder.show { display:block; }/* Responsive */@media (max-width: 992px) {.pg-home #pane-freight .fq-heroInner { grid-template-columns: 1fr; }.pg-home #pane-freight .fq-art { height: 110px; }.pg-home #pane-freight .fq-card { grid-column: span 12; }}/* Replace the empty right "art" box with a meaningful side panel */.pg-home #pane-freight .fq-side { display:flex; align-items: stretch; justify-content: flex-end; }.pg-home #pane-freight .fq-sideCard { width: 100%; height: 120px; border-radius: 14px; border: 1px solid rgba(0,0,0,.10); background: linear-gradient(135deg, rgba(166,131,227,.22), rgba(255,255,255,.75)); padding: 12px; display:flex; flex-direction: column; justify-content: space-between; }.pg-home #pane-freight .fq-sideTitle { font-weight: 1000; font-size: 12px; color: rgba(35,18,80,.92); }.pg-home #pane-freight .fq-metrics { display:grid; grid-template-columns: repeat(3, 1fr); gap: 10px; margin-top: 6px; }.pg-home #pane-freight .fq-metric { border-radius: 12px; background: rgba(255,255,255,.75); border: 1px solid rgba(0,0,0,.08); padding: 8px 10px; }.pg-home #pane-freight .fq-metricLabel { font-size: 11px; color: rgba(0,0,0,.62); font-weight: 800; }.pg-home #pane-freight .fq-metricValue { font-size: 12px; color: rgba(0,0,0,.82); font-weight: 1000; margin-top: 2px; }.pg-home #pane-freight .fq-sideHint { font-size: 11px; color: rgba(0,0,0,.60); margin-top: 6px; }.pg-home .forgotPasswordRow { display:flex; justify-content:flex-end; margin:4px 0 16px; }.pg-home .forgotPasswordLink { color:#7551b5; font-size:.92rem; font-weight:950; text-decoration:none; }.pg-home .forgotPasswordLink:hover { color:#5f3d9b; text-decoration:underline; text-underline-offset:3px; }/* --------------------------------------------------------------------------
   [2026-10-10] warehouseTools_LocationCheck（库位盘点）—— 作用域 .pg-loccheck
   页内第一块 <style>（66 条规则）全量迁入：根元素 .ic-page / .custom-modal /
   .inventory-edit-modal 三处加 pg-loccheck 类，根选择器用复合写法、其余用
   后代写法。选择器与声明多重集校验一致。页面里第二块 <style> 是打印标签
   （二维码）新窗口文档的样式，不属于本站页面，保留原地、勿迁。
   -------------------------------------------------------------------------- *//* =========================
       Inventory Check Page
       Desktop + Mobile
       ========================= */.ic-page.pg-loccheck { width: 100%; max-width: 1400px; margin: 0 auto; padding: 10px; box-sizing: border-box; }.pg-loccheck .ic-scan-box { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin: 10px auto; width: 100%; }.pg-loccheck .ic-scan-box .singleColTexInput { width: 100%; box-sizing: border-box; font-size: 18px; padding: 12px; }.pg-loccheck #notificationDisplayInventoryCheck { text-align: center; font-size: 26px; font-weight: 700; min-height: 34px; margin: 10px auto; }/* =========================
       Summary
       ========================= */.pg-loccheck #palletInfoSummaryDisp { display: flex; justify-content: center; align-items: center; margin: 10px; }.pg-loccheck #palletInfoSummaryDisp[hidden] { display: none; }.pg-loccheck .ic-summary-table { border-collapse: collapse; margin: 10px auto; color: white !important; width: 100%; max-width: 900px; }.pg-loccheck .ic-summary-table th, .pg-loccheck .ic-summary-table td, .pg-loccheck .ic-summary-table span { border: 2px solid white; padding: 8px; text-align: center; color: white !important; }.pg-loccheck .ic-summary-table th { font-weight: bold; }/* =========================
       Action Bar
       ========================= */.pg-loccheck .ic-action-bar { display: flex; justify-content: space-between; align-items: center; gap: 10px; margin: 12px 0; }.pg-loccheck .ic-action-bar .addButton { min-width: 150px; }/* =========================
       Desktop Table
       ========================= */.pg-loccheck .ic-table-wrap { width: 100%; overflow-x: auto; margin-top: 10px; border-radius: 16px; }.pg-loccheck .inventoryCheckTable { width: 100%; min-width: 900px; border-collapse: separate; border-spacing: 0; color: white; table-layout: fixed; }.pg-loccheck .inventoryCheckTable col.col-client { width: 40%; }.pg-loccheck .inventoryCheckTable col.col-sku { width: 30%; }.pg-loccheck .inventoryCheckTable col.col-bin { width: 15%; }.pg-loccheck .inventoryCheckTable col.col-qty { width: 15%; }.pg-loccheck .inventoryCheckTable th, .pg-loccheck .inventoryCheckTable td { border: 1px solid rgba(255, 255, 255, 0.35); padding: 12px 10px; text-align: center; vertical-align: middle; box-sizing: border-box; }.pg-loccheck .inventoryCheckTable th { background: rgba(0, 0, 0, 0.35); font-weight: bold; position: sticky; top: 0; z-index: 2; color: white; }.pg-loccheck .inventoryCheckTable th h5 { margin: 0; color: white; font-size: 16px; line-height: 1.2; white-space: normal; word-break: keep-all; }.pg-loccheck .inventoryCheckTable td { font-size: 16px; line-height: 1.35; word-break: break-word; }.pg-loccheck .inventoryCheckTable td[data-label="SKU"] { font-weight: 700; }.pg-loccheck .inventoryCheckTable td.sku-qty-zero { color: #111 !important; }/* Desktop: quantity > 0 才是绿色 */.pg-loccheck .inventory-row-active { background: rgba(131, 227, 168, 0.9) !important; color: #111; }.pg-loccheck .inventory-row-selected { outline: 4px solid #facc15; outline-offset: -4px; }.pg-loccheck .inventory-edit-button { width: 100%; border: none; border-radius: 999px; padding: 10px 14px; background: white; color: #111; font-weight: 800; cursor: pointer; box-shadow: 0 2px 8px rgba(0,0,0,.18); min-height: 42px; display: flex; flex-direction: column; justify-content: center; align-items: center; text-align: center; gap: 2px; }.pg-loccheck .inventory-edit-button:hover { opacity: .92; transform: translateY(-1px); }.pg-loccheck .inventory-edit-button.changed { background: #fff3cd; border: 2px solid #f59e0b; color: #111; }.pg-loccheck .pending-change { display: block; font-size: 12px; line-height: 1.2; color: #b45309; font-weight: 800; }.pg-loccheck .inventory-bin-input { width: 90px; max-width: 100%; padding: 9px 8px; border-radius: 10px; border: 1px solid #ccc; text-align: center; font-size: 16px; box-sizing: border-box; }/* =========================
       General Warning Modal
       ========================= */.custom-modal.pg-loccheck { display: none; position: fixed; z-index: 1900; left: 0; top: 0; width: 100%; height: 100%; background: rgba(0, 0, 0, .45); padding: 16px; box-sizing: border-box; }.pg-loccheck .custom-modal-content { background: #fff; color: #111; margin: 15% auto; padding: 20px; border-radius: 16px; border: 1px solid #888; width: min(480px, 100%); box-shadow: 0 10px 30px rgba(0, 0, 0, .35); position: relative; }.pg-loccheck .custom-modal-close { position: absolute; right: 14px; top: 8px; font-size: 28px; font-weight: bold; cursor: pointer; }/* =========================
       Edit Modal
       ========================= */.inventory-edit-modal.pg-loccheck { position: fixed; inset: 0; z-index: 2000; background: rgba(0, 0, 0, .58); display: flex; justify-content: center; align-items: center; padding: 16px; box-sizing: border-box; }.inventory-edit-modal.pg-loccheck[hidden] { display: none; }.pg-loccheck .inventory-edit-card { width: min(460px, 100%); background: white; color: #111; border-radius: 18px; padding: 22px; position: relative; box-shadow: 0 10px 30px rgba(0, 0, 0, .35); }.pg-loccheck .inventory-edit-close { position: absolute; right: 14px; top: 10px; border: none; background: transparent; font-size: 30px; cursor: pointer; line-height: 1; }.pg-loccheck .inventory-edit-card h3 { margin: 0 34px 12px 0; font-size: 24px; }.pg-loccheck .inventory-edit-info { background: #f3f4f6; border-radius: 12px; padding: 10px; margin: 12px 0; line-height: 1.7; }.pg-loccheck .inventory-edit-field { margin-top: 12px; }.pg-loccheck .inventory-edit-field label { display: block; font-weight: 800; margin-bottom: 6px; }.pg-loccheck .inventory-edit-input { width: 100%; padding: 13px; border-radius: 12px; border: 1px solid #bbb; font-size: 20px; box-sizing: border-box; }.pg-loccheck .inventory-edit-error { margin-top: 12px; color: #b91c1c; font-weight: 800; }.pg-loccheck .inventory-edit-actions { margin-top: 18px; display: flex; gap: 10px; justify-content: flex-end; }.pg-loccheck .inventory-edit-actions button { min-width: 120px; }/* =========================
       Mobile Card Table
       ========================= */@media (max-width: 768px) {.ic-page.pg-loccheck { padding: 6px; }.pg-loccheck .ic-scan-box { grid-template-columns: 1fr; gap: 8px; }.pg-loccheck .ic-scan-box .singleColTexInput { font-size: 20px; padding: 14px; }.pg-loccheck #notificationDisplayInventoryCheck { font-size: 22px; }.pg-loccheck .ic-action-bar { flex-direction: column; align-items: stretch; }.pg-loccheck .ic-action-bar .addButton { width: 100% !important; float: none !important; margin: 4px 0; }.pg-loccheck .inventoryCheckTable { min-width: 100%; border-spacing: 0 12px; }.pg-loccheck .inventoryCheckTable thead, .pg-loccheck .inventoryCheckTable colgroup { display: none; }.pg-loccheck .inventoryCheckTable, .pg-loccheck .inventoryCheckTable tbody, .pg-loccheck .inventoryCheckTable tr, .pg-loccheck .inventoryCheckTable td { display: block; width: 100%; }/*
            手机端默认白色：
            quantity = 0 或没有 inventory-row-active 的 block 都是白色
        */.pg-loccheck .inventoryCheckTable tr { margin-bottom: 12px; border-radius: 18px; overflow: hidden; background: #ffffff !important; border: 1px solid rgba(0,0,0,.12); box-sizing: border-box; color: #111; box-shadow: 0 2px 8px rgba(0,0,0,.08); }/*
            手机端只有 quantity > 0 的 row 才是绿色
        */.pg-loccheck .inventoryCheckTable tr.inventory-row-active { background: rgba(131, 227, 168, 0.9) !important; border-color: rgba(255,255,255,.35); }.pg-loccheck .inventoryCheckTable td { display: grid; grid-template-columns: 120px 1fr; align-items: center; gap: 12px; border: none; border-bottom: 1px solid rgba(0,0,0,.08); padding: 14px; text-align: left; box-sizing: border-box; color: #111; min-height: 58px; background: transparent !important; }.pg-loccheck .inventoryCheckTable td:last-child { border-bottom: none; }.pg-loccheck .inventoryCheckTable td::before { content: attr(data-label); font-weight: 800; font-size: 16px; line-height: 1.2; color: #111; text-align: left; }.pg-loccheck .inventoryCheckTable td > * { justify-self: end; }.pg-loccheck .inventory-edit-button { width: auto !important; min-width: 110px; max-width: 100%; padding: 10px 14px; font-size: 16px; line-height: 1.2; white-space: normal; word-break: break-word; text-align: center; border-radius: 14px; }.pg-loccheck .inventory-bin-input { width: 90px !important; max-width: 100%; font-size: 16px; padding: 10px 8px; }.pg-loccheck .pending-change { font-size: 11px; margin-top: 2px; }.pg-loccheck .inventory-edit-actions { flex-direction: column-reverse; }.pg-loccheck .inventory-edit-actions button { width: 100%; }.pg-loccheck .custom-modal-content { margin: 35% auto; }}/* --------------------------------------------------------------------------
   [2026-10-10] warehouseTools_SeparateWarehouseLabels —— .pg-seplabels
   页内 <style>（83 条规则）全量迁入：根 .scanPageWrap 与页外弹窗
   #palletInboundModal 两处加 pg-seplabels 类。选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- */.scanPageWrap.pg-seplabels { width: 96%; margin: 15px auto 40px; }.pg-seplabels .scanTopGrid, .pg-sepprod .scanTopGrid{ display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; margin-bottom: 16px; }.pg-seplabels .scanInfoBox, .pg-sepprod .scanInfoBox{ background: #fff; border-radius: 12px; padding: 18px; box-shadow: 0 2px 8px rgba(0,0,0,0.08); min-height: 160px; }.pg-seplabels .scanIndexBox { display: flex; flex-direction: column; justify-content: center; align-items: center; background: #f8f9fa; border: 1px solid #dee2e6; text-align: center; }.pg-seplabels .scanIndexTitle, .pg-sepprod .scanIndexTitle{ font-size: 1rem; font-weight: 700; color: #555; margin-bottom: 6px; }.pg-seplabels #recommendedPalletBig { font-size: 4.7rem; line-height: 1; font-weight: 900; margin: 0; color: #0d6efd; word-break: break-word; }.pg-seplabels #recommendedPalletDetail { margin-top: 10px; font-size: 0.95rem; font-weight: 800; color: #495057; line-height: 1.35; word-break: break-word; }.pg-seplabels .scanInputBox, .pg-sepprod .scanInputBox{ display: flex; flex-direction: column; justify-content: center; }.pg-seplabels .scanInputTitle, .pg-sepprod .scanInputTitle{ font-size: 1.25rem; font-weight: 700; margin-bottom: 10px; }.pg-seplabels #warehouseLabelInput { width: 100%; height: 76px; border: 2px solid #ced4da; border-radius: 10px; padding: 10px 16px; font-size: 2.2rem; font-weight: 700; text-transform: uppercase; outline: none; }.pg-seplabels #warehouseLabelInput:focus { border-color: #0d6efd; box-shadow: 0 0 0 4px rgba(13,110,253,0.15); }.pg-seplabels .scanStatBox, .pg-sepprod .scanStatBox{ display: grid; grid-template-columns: 1fr; gap: 10px; }.pg-seplabels .scanStatItem, .pg-sepprod .scanStatItem{ background: #f8f9fa; border: 1px solid #dee2e6; border-radius: 10px; padding: 10px 12px; }.pg-seplabels .scanStatLabel, .pg-sepprod .scanStatLabel{ font-size: 0.85rem; color: #6c757d; font-weight: 700; }.pg-seplabels .scanStatValue { font-size: 1.35rem; font-weight: 800; color: #212529; word-break: break-all; }.pg-seplabels .scanActionBar { display: flex; justify-content: flex-end; align-items: center; gap: 12px; flex-wrap: wrap; margin-bottom: 12px; }.pg-seplabels .scanActionRight { display: flex; gap: 10px; flex-wrap: wrap; align-items: center; }.pg-seplabels .scanTableWrapper, .pg-sepprod .scanTableWrapper{ width: 100%; overflow-x: auto; }.pg-seplabels .scanTable th, .pg-seplabels .scanTable td, .pg-sepprod .scanTable th, .pg-sepprod .scanTable td{ vertical-align: middle; white-space: nowrap; }.pg-seplabels .scanTable th h5, .pg-sepprod .scanTable th h5{ margin: 0; }.pg-seplabels .scanEmptyBox, .pg-sepprod .scanEmptyBox{ text-align: center; color: #6c757d; padding: 35px 10px; font-weight: 700; }.pg-seplabels .sectionCard { background: #fff; border-radius: 12px; padding: 16px; box-shadow: 0 2px 8px rgba(0,0,0,0.08); margin-bottom: 16px; }.pg-seplabels .sectionTitle { display: flex; justify-content: space-between; align-items: center; gap: 10px; flex-wrap: wrap; margin-bottom: 12px; }.pg-seplabels .sectionTitle h5 { margin: 0; font-weight: 800; }.pg-seplabels .summaryGrid { display: grid; grid-template-columns: repeat(5, 1fr); gap: 10px; margin-bottom: 16px; }.pg-seplabels .summaryItem { background: #f8f9fa; border: 1px solid #dee2e6; border-radius: 10px; padding: 10px 12px; }.pg-seplabels .summaryLabel { color: #6c757d; font-size: 0.8rem; font-weight: 800; }.pg-seplabels .summaryValue { font-size: 1rem; font-weight: 900; color: #212529; word-break: break-all; }.pg-seplabels .smallMuted { color: #6c757d; font-size: 0.85rem; font-weight: 700; }.pg-seplabels .errorTextBox { color: #842029; background: #f8d7da; border: 1px solid #f5c2c7; border-radius: 10px; padding: 10px 12px; margin-top: 10px; font-weight: 700; display: none; word-break: break-word; }.pg-seplabels .noPalletBadge { display: inline-block; min-width: 88px; text-align: center; padding: 5px 10px; border-radius: 999px; font-weight: 900; font-size: 0.85rem; background: #e9ecef; color: #495057; }@media (max-width: 1200px) and (min-width: 769px) {.pg-seplabels .scanTopGrid, .pg-sepprod .scanTopGrid{ grid-template-columns: repeat(3, 1fr); }.pg-seplabels #warehouseLabelInput { height: 76px; font-size: 2rem; }.pg-seplabels #recommendedPalletBig { font-size: 3.8rem; }.pg-seplabels .summaryGrid { grid-template-columns: repeat(2, 1fr); }}@media (max-width: 768px) {.scanPageWrap.pg-seplabels { width: 98%; margin-top: 10px; }.pg-seplabels .scanTopGrid, .pg-sepprod .scanTopGrid{ grid-template-columns: 1fr; gap: 10px; }.pg-seplabels .scanInfoBox, .pg-sepprod .scanInfoBox{ min-height: auto; padding: 14px; }.pg-seplabels .scanIndexBox, .pg-sepprod .scanIndexBox{ min-height: 130px; }.pg-seplabels #recommendedPalletBig { font-size: 3.5rem; }.pg-seplabels #warehouseLabelInput { height: 72px; font-size: 1.7rem; }.pg-seplabels .scanStatBox, .pg-sepprod .scanStatBox{ grid-template-columns: 1fr 1fr; }.pg-seplabels .scanStatBox .scanStatItem:first-child { grid-column: 1 / -1; }.pg-seplabels .scanActionBar, .pg-sepprod .scanActionBar{ align-items: stretch; }.pg-seplabels .scanActionRight { width: 100%; }.pg-seplabels .scanActionRight .addButton { flex: 1; min-width: 130px; }.pg-seplabels .summaryGrid { grid-template-columns: 1fr; }.pg-seplabels .scanTableWrapper, .pg-sepprod .scanTableWrapper{ overflow-x: visible; }.pg-seplabels .scanTable thead, .pg-sepprod .scanTable thead{ display: none; }.pg-seplabels .scanTable, .pg-seplabels .scanTable tbody, .pg-seplabels .scanTable tr, .pg-seplabels .scanTable td, .pg-sepprod .scanTable, .pg-sepprod .scanTable tbody, .pg-sepprod .scanTable tr, .pg-sepprod .scanTable td{ display: block; width: 100%; }.pg-seplabels .scanTable tr, .pg-sepprod .scanTable tr{ border: 1px solid #dee2e6; border-radius: 10px; margin-bottom: 12px; padding: 10px; background: #fff; }.pg-seplabels .scanTable td { display: grid; grid-template-columns: 130px 1fr; gap: 10px; border: none; padding: 8px 4px; white-space: normal; }.pg-seplabels .scanTable td::before, .pg-sepprod .scanTable td::before{ content: attr(data-label); font-weight: 800; color: #6c757d; }.pg-seplabels .thresholdControl { width: 100%; justify-content: space-between; }.pg-seplabels .thresholdControl { width: 100%; justify-content: space-between; }.pg-seplabels .scanActionRight { width: 100%; display: grid; grid-template-columns: 1fr 1fr; }.pg-seplabels .scanActionBar .scanActionButton { width: 100%; min-width: 0; height: 52px; font-size: 0.95rem; }}.pg-seplabels .palletBadgeButton { border: none; cursor: pointer; display: inline-block; min-width: 88px; text-align: center; padding: 5px 10px; border-radius: 999px; font-weight: 900; font-size: 0.85rem; background: #cfe2ff; color: #084298; }.pg-seplabels .palletBadgeButton:hover { background: #9ec5fe; }.pg-seplabels .palletModalSummary { background: #f8f9fa; border: 1px solid #dee2e6; border-radius: 10px; padding: 10px 12px; margin-bottom: 12px; font-weight: 800; }.pg-seplabels #actualPalletNumberInput { width: 100%; height: 56px; border: 2px solid #ced4da; border-radius: 10px; padding: 8px 14px; font-size: 1.6rem; font-weight: 800; text-transform: uppercase; outline: none; }.pg-seplabels #actualPalletNumberInput.valid-pallet { border-color: #198754; box-shadow: 0 0 0 4px rgba(25,135,84,0.15); }.pg-seplabels #actualPalletNumberInput.invalid-pallet { border-color: #dc3545; box-shadow: 0 0 0 4px rgba(220,53,69,0.15); }.pg-seplabels .palletValidationText { margin-top: 8px; font-weight: 800; }.pg-seplabels .palletValidationText.valid { color: #198754; }.pg-seplabels .palletValidationText.invalid { color: #dc3545; }.pg-seplabels .palletDeleteButton { border: none; cursor: pointer; display: inline-block; min-width: 70px; text-align: center; padding: 5px 10px; border-radius: 999px; font-weight: 900; font-size: 0.85rem; background: #f8d7da; color: #842029; margin-right: 6px; }.pg-seplabels .palletDeleteButton:hover { background: #f1aeb5; }.pg-seplabels .scanSkuCell, .pg-sepprod .scanSkuCell{ font-weight: 800; font-size: 1.05rem; letter-spacing: 0.3px; }.pg-seplabels .thresholdControl { display: flex; align-items: center; gap: 8px; background: #f8f9fa; border: 1px solid #dee2e6; border-radius: 10px; padding: 8px 10px; font-weight: 800; }.pg-seplabels .thresholdControl label { margin: 0; color: #495057; font-size: 0.9rem; white-space: nowrap; }.pg-seplabels .thresholdControl input { width: 76px; height: 36px; border: 2px solid #ced4da; border-radius: 8px; text-align: center; font-weight: 900; font-size: 1rem; }.pg-seplabels .thresholdControl span { color: #0d6efd; font-size: 0.9rem; white-space: nowrap; }.pg-seplabels .scanActionBar { display: flex; justify-content: space-between; align-items: center; gap: 14px; flex-wrap: wrap; margin-bottom: 14px; }.pg-seplabels .scanActionRight { display: flex; gap: 10px; flex-wrap: nowrap; align-items: center; }.pg-seplabels .thresholdControl { display: flex; align-items: center; gap: 12px; height: 56px; background: #fff; border: 1px solid #dee2e6; border-radius: 14px; padding: 8px 14px; box-shadow: 0 1px 5px rgba(0,0,0,0.06); }.pg-seplabels .thresholdLabel { color: #495057; font-size: 1rem; font-weight: 900; white-space: nowrap; }.pg-seplabels .thresholdControl input { width: 82px; height: 40px; border: 2px solid #ced4da; border-radius: 10px; text-align: center; font-weight: 900; font-size: 1.15rem; outline: none; }.pg-seplabels .thresholdControl input:focus { border-color: #0d6efd; box-shadow: 0 0 0 4px rgba(13,110,253,0.12); }.pg-seplabels .thresholdText { color: #0d6efd; font-size: 1rem; font-weight: 900; white-space: nowrap; }.pg-seplabels .scanActionBar .scanActionButton { height: 56px; min-width: 145px; padding: 0 22px; border-radius: 14px; font-size: 1.05rem; font-weight: 900; display: inline-flex; align-items: center; justify-content: center; white-space: nowrap; line-height: 1; }.pg-seplabels .scanActionBar .dangerActionButton { min-width: 155px; }/* --------------------------------------------------------------------------
   [2026-10-10] setting_PalletRack（货架设置）—— 作用域 .pg-palletrack
   页内 <style>（84 条规则）全量迁入：--rack-* 变量由 :root 改挂作用域；
   根 .palletRackPage 与页外弹窗 #palletEditModal 两处加 pg-palletrack 类。
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- */.pg-palletrack { /* 设计统一（2026-10-08）：本页原为蓝色系自有口径，现整体对齐清关 Portal （品牌紫 #A683E3 / 深紫 #815ac6、边框 #dee2e6、文字 #212529、次要 #6c757d） */ --rack-bg: #f8f9fa; --rack-card: #ffffff; --rack-border: #dee2e6; --rack-text: #212529; --rack-muted: #6c757d; --rack-primary: #A683E3; --rack-primary-dark: #815ac6; --rack-primary-soft: rgba(166, 131, 227, .12); --rack-empty: #f8f9fa; --rack-danger: #dc3545; }/* 本页 Bootstrap 主按钮统一品牌紫 */.palletRackPage.pg-palletrack .btn-primary { background: var(--rack-primary); border-color: var(--rack-primary); }.palletRackPage.pg-palletrack .btn-primary:hover, .palletRackPage.pg-palletrack .btn-primary:focus { background: var(--rack-primary-dark); border-color: var(--rack-primary-dark); }.palletRackPage.pg-palletrack { width: min(1500px, 96%); margin: 0 auto 40px; }.pg-palletrack .palletRackTopGrid { display: grid; grid-template-columns: minmax(0, 1.2fr) minmax(320px, 0.8fr); gap: 16px; margin: 16px 0; }.pg-palletrack .palletRackCard, .pg-palletrack .rackSectionCard { background: var(--rack-card); border: 1px solid var(--rack-border); border-radius: 10px; box-shadow: 0 1px 4px rgba(0, 0, 0, .05); }.pg-palletrack .palletRackCard { padding: 18px; }.pg-palletrack .palletRackCardTitle, .pg-palletrack .rackSectionHeader { display: flex; justify-content: space-between; align-items: center; gap: 12px; }.pg-palletrack .palletRackCardTitle { margin-bottom: 14px; }.pg-palletrack .palletRackCardTitle h3, .pg-palletrack .rackSectionHeader h3 { margin: 0; font-weight: 800; }.pg-palletrack .warehouseBadge, .pg-palletrack /*.sectionWarehouseBadge {*/ /* display: inline-flex;*/ /* align-items: center;*/ /* min-height: 34px;*/ /* padding: 5px 11px;*/ /* border-radius: 999px;*/ /* background: #eef2f7;*/ /* color: #334155;*/ /* font-weight: 700;*/ /* white-space: nowrap;*/ /*}*/ .palletRackFormGrid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; }.pg-palletrack .palletRackFormGrid input, .pg-palletrack .palletRackSearchBox input { width: 100%; min-height: 46px; border: 1px solid var(--rack-border); border-radius: 6px; padding: 9px 12px; font-size: 16px; }.pg-palletrack .palletRackFormActions, .pg-palletrack .palletRackToolbar, .pg-palletrack .rackSectionActions { display: flex; gap: 10px; flex-wrap: wrap; }.pg-palletrack .palletRackFormActions { margin-top: 12px; }.pg-palletrack .rackStatsGrid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; }.pg-palletrack .rackStatBox { background: #f8f9fa; border: 1px solid var(--rack-border); border-radius: 8px; padding: 14px 8px; text-align: center; }.pg-palletrack .rackStatBox .label { font-size: 12px; color: var(--rack-muted); margin-bottom: 7px; }.pg-palletrack .rackStatBox .value { font-size: 27px; font-weight: 850; line-height: 1; }.pg-palletrack .palletRackToolbar { align-items: center; margin: 14px 0; }.pg-palletrack .palletRackSearchBox { flex: 1 1 360px; }.pg-palletrack .rackSectionGrid { display: grid; grid-template-columns: repeat(auto-fill, minmax(390px, 1fr)); gap: 16px; }.pg-palletrack .rackSectionCard { overflow: hidden; }.pg-palletrack .rackSectionHeader { padding: 14px 15px; border-bottom: 1px solid var(--rack-border); background: #fff; }.pg-palletrack .rackSectionTitleWrap { min-width: 0; }.pg-palletrack .rackSectionHeader h3 { font-size: 18px; color: var(--rack-text); word-break: break-word; }.pg-palletrack .rackSectionMeta { margin-top: 4px; font-size: 12px; color: var(--rack-muted); }.pg-palletrack .rackSlotGrid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; padding: 14px; }.pg-palletrack .rackSlotCard { appearance: none; width: 100%; border: 1px solid var(--rack-border); border-radius: 8px; background: #fff; padding: 0; text-align: left; overflow: hidden; cursor: pointer; transition: transform .12s ease, box-shadow .12s ease, border-color .12s ease; -webkit-tap-highlight-color: transparent; }.pg-palletrack .rackSlotCard:hover, .pg-palletrack .rackSlotCard:focus-visible { border-color: var(--rack-primary); box-shadow: 0 5px 14px rgba(166, 131, 227, .18); transform: translateY(-1px); outline: none; }.pg-palletrack .rackSlotCard:active { transform: scale(.985); }.pg-palletrack .rackSlotNumber { padding: 9px 11px; background: rgba(166, 131, 227, .10); color: var(--rack-text); font-size: 13px; font-weight: 800; border-bottom: 1px solid var(--rack-border); word-break: break-word; }.pg-palletrack .rackSlotPallet { min-height: 58px; display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 11px; color: var(--rack-text); font-size: 16px; font-weight: 800; word-break: break-word; }.pg-palletrack .rackSlotPallet.empty { color: var(--rack-muted); background: var(--rack-empty); font-weight: 650; }.pg-palletrack .rackSlotEditHint { flex: 0 0 auto; font-size: 12px; color: var(--rack-primary); font-weight: 800; }.pg-palletrack .rackSectionActions { padding: 0 14px 14px; display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 10px; }.pg-palletrack .rackSectionActions form { margin: 0; width: 100%; }.pg-palletrack .sectionActionButton { width: 100%; min-height: 44px; border-radius: 6px; padding: 9px 14px; font-size: 14px; font-weight: 750; line-height: 1.2; display: inline-flex; align-items: center; justify-content: center; gap: 8px; transition: transform 0.12s ease, background-color 0.12s ease, border-color 0.12s ease, box-shadow 0.12s ease; -webkit-tap-highlight-color: transparent; }.pg-palletrack .sectionActionButton:active { transform: scale(0.985); }.pg-palletrack .sectionPrintButton { color: var(--rack-primary-dark); background: rgba(166, 131, 227, .10); border: 1px solid rgba(166, 131, 227, .35); box-shadow: 0 1px 2px rgba(166, 131, 227, 0.10); }.pg-palletrack .sectionPrintButton:hover { color: var(--rack-primary-dark); background: rgba(166, 131, 227, .18); border-color: var(--rack-primary); }.pg-palletrack .sectionDeleteButton { color: #b02a37; background: #fff; border: 1px solid #e5a3ab; box-shadow: none; }.pg-palletrack .sectionDeleteButton:hover { color: #b02a37; background: rgba(220, 53, 69, .06); border-color: #dc3545; }.pg-palletrack .sectionActionIcon { font-size: 16px; line-height: 1; flex: 0 0 auto; }.pg-palletrack .emptyRackMessage { display: none; margin-top: 14px; padding: 34px 16px; text-align: center; color: var(--rack-muted); background: #fff; border: 1px dashed var(--rack-border); border-radius: 10px; }.pg-palletrack .hiddenByWarehouse, .pg-palletrack .hiddenBySearch { display: none !important; }#palletEditModal.pg-palletrack .modal-content { border-radius: 10px; }#palletEditModal.pg-palletrack .form-control { min-height: 48px; font-size: 17px; }@media (max-width: 900px) {.pg-palletrack .palletRackTopGrid { grid-template-columns: 1fr; }.pg-palletrack .rackSectionGrid { grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); }}@media (max-width: 600px) {.palletRackPage.pg-palletrack { width: 100%; padding: 0 9px; margin-bottom: 24px; }.pg-palletrack .palletRackTopGrid { gap: 10px; margin-top: 10px; }.pg-palletrack .palletRackCard { padding: 13px; border-radius: 10px; }.pg-palletrack .palletRackCardTitle { align-items: flex-start; flex-direction: column; }.pg-palletrack .warehouseBadge { width: 100%; }.pg-palletrack .palletRackFormGrid { grid-template-columns: 1fr; }.pg-palletrack .palletRackFormActions, .pg-palletrack .palletRackToolbar { display: grid; grid-template-columns: 1fr; }.pg-palletrack .palletRackFormActions button, .pg-palletrack .palletRackToolbar button { width: 100%; min-height: 48px; }.pg-palletrack .rackStatsGrid { gap: 6px; }.pg-palletrack .rackStatBox { padding: 11px 4px; }.pg-palletrack .rackStatBox .label { font-size: 10px; }.pg-palletrack .rackStatBox .value { font-size: 22px; }.pg-palletrack .rackSectionGrid { grid-template-columns: 1fr; gap: 11px; }.pg-palletrack .rackSectionHeader { padding: 12px; align-items: flex-start; }.pg-palletrack .rackSlotGrid { grid-template-columns: 1fr; padding: 11px; gap: 9px; }.pg-palletrack .rackSlotNumber { font-size: 14px; padding: 10px 12px; }.pg-palletrack .rackSlotPallet { min-height: 62px; font-size: 17px; padding: 13px 12px; }.pg-palletrack .rackSectionActions { grid-template-columns: 1fr; padding: 0 11px 11px; gap: 9px; }.pg-palletrack .sectionActionButton { min-height: 48px; font-size: 15px; }#palletEditModal.pg-palletrack .modal-dialog { margin: 8px; }#palletEditModal.pg-palletrack .modal-footer { display: grid; grid-template-columns: 1fr; gap: 8px; }#palletEditModal.pg-palletrack .modal-footer button { width: 100%; min-height: 48px; margin: 0 !important; }.pg-palletrack #removePalletButton { order: 3; }}.pg-palletrack .rackSlotEditArea { cursor: pointer; }.pg-palletrack .rackTypeControl { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 10px 11px; border-top: 1px solid var(--rack-border); background: #f8f9fa; }.pg-palletrack .rackTypeStatus { font-size: 12px; font-weight: 800; }.pg-palletrack .rackTypeStatus.pickup { color: #198754; }.pg-palletrack .rackTypeStatus.storage { color: var(--rack-muted); }.pg-palletrack .rackTypeSwitch { position: relative; display: inline-block; width: 48px; height: 26px; margin: 0; flex: 0 0 auto; }.pg-palletrack .rackTypeSwitch input { opacity: 0; width: 0; height: 0; }.pg-palletrack .rackTypeSlider { position: absolute; cursor: pointer; inset: 0; background: #ced4da; border-radius: 999px; transition: .2s; }.pg-palletrack .rackTypeSlider::before { position: absolute; content: ""; width: 20px; height: 20px; left: 3px; top: 3px; background: white; border-radius: 50%; box-shadow: 0 1px 4px rgba(0,0,0,.2); transition: .2s; }.pg-palletrack .rackTypeSwitch input:checked + .rackTypeSlider { background: #198754; }.pg-palletrack .rackTypeSwitch input:checked + .rackTypeSlider::before { transform: translateX(22px); }.pg-palletrack .rackTypeSwitch input:disabled + .rackTypeSlider { opacity: .55; cursor: wait; }/* --------------------------------------------------------------------------
   [2026-10-10] setting_ShippingCarriers（承运商设置）—— 作用域 .pg-carriers
   页内 <style>（68 条规则，过渡期 customs-* 副本）全量迁入：--customs-*
   变量由 :root 改挂作用域；作用域类加在 #shippingCarrierTop 与两个页外
   弹窗 #shippingCarrierModal / #shippingCarrierFeeModal 三处。
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- *//* =========================================================
       Shipping Carriers - follow setting_UserAccounts visual style
       ========================================================= */#shippingCarrierTop.pg-carriers .carrier-filter-row { display: flex; flex-wrap: wrap; gap: 6px; align-items: end; }.pg-carriers .carrierSearchResultContainer { overflow: auto; position: relative; border-radius: 6px; margin-top: 8px; }.pg-carriers .carrierSearchResultContainer table { table-layout: fixed; min-width: 1560px; }.pg-carriers .carrierSearchResultContainer thead th { position: sticky; top: 0; z-index: 10; background: #fff; box-shadow: 0 2px 0 rgba(0,0,0,.08); }/* =========================
       Table header sorting
       ========================= */.pg-carriers .carrier-sortable-th { cursor: pointer; user-select: none; white-space: nowrap; }.pg-carriers .carrier-sortable-th:hover { background: #f6f1ff !important; }.pg-carriers .carrier-sort-icon { display: inline-block; margin-left: 5px; min-width: 12px; font-size: 11px; color: #999; }.pg-carriers .carrier-sortable-th.active-sort .carrier-sort-icon { color: #A683E3; font-weight: 900; }.pg-carriers .carrierSearchResultContainer th, .pg-carriers .carrierSearchResultContainer td { vertical-align: middle; word-break: break-word; overflow-wrap: anywhere; }.pg-carriers .carrierFilterResultMsg { text-align: center; padding: 10px; background: #e8f5e8; margin: 10px 0; border-radius: 4px; }.pg-carriers .carrierDropdownMenu { max-height: 360px; overflow: auto; min-width: 220px; }.pg-carriers .carrierDropdownMenu label { display: flex; align-items: center; gap: 6px; white-space: nowrap; margin: 3px 0; }.pg-carriers .carrier-list-loading { display: none; position: absolute; inset: 0; z-index: 20; background: rgba(255,255,255,.78); align-items: center; justify-content: center; font-weight: 800; }.pg-carriers .carrier-list-loading.show { display: flex; }.pg-carriers .carrier-pagination { gap: 8px; flex-wrap: wrap; }.pg-carriers .carrier-pagination .form-select { width: auto; }.pg-carriers .carrier-status-enabled { display: inline-block; padding: 4px 10px; border-radius: 999px; background: #e8f5e8; color: #287a36; font-weight: 800; font-size: 12px; }.pg-carriers .carrier-status-disabled { display: inline-block; padding: 4px 10px; border-radius: 999px; background: #f5f5f5; color: #777; font-weight: 800; font-size: 12px; }/* =========================
       Shared modal style
       ========================= */#shippingCarrierModal.pg-carriers .modal-dialog, #shippingCarrierFeeModal.pg-carriers .modal-dialog { margin-top: 24px; }#shippingCarrierModal.pg-carriers .modal-content, #shippingCarrierFeeModal.pg-carriers .modal-content { border: 0; border-radius: 20px; overflow: hidden; box-shadow: 0 20px 60px rgba(0,0,0,.16); }#shippingCarrierModal.pg-carriers .modal-header, #shippingCarrierFeeModal.pg-carriers .modal-header { border-bottom: 1px solid rgba(0,0,0,.08); padding: 16px 18px; background: #fff; }#shippingCarrierModal.pg-carriers .modal-title, #shippingCarrierFeeModal.pg-carriers .modal-title { font-weight: 800; font-size: 18px; }#shippingCarrierModal.pg-carriers .modal-body, #shippingCarrierFeeModal.pg-carriers .modal-body { background: #fafafa; padding: 16px; }#shippingCarrierModal.pg-carriers .modal-footer, #shippingCarrierFeeModal.pg-carriers .modal-footer { border-top: 1px solid rgba(0,0,0,.08); padding: 14px 16px; background: #fff; }.pg-carriers .carrier-section-wrap { display: flex; flex-direction: column; gap: 14px; }.pg-carriers .carrier-section-card { border: 1px solid rgba(0,0,0,.12); background: rgba(0,0,0,.02); border-radius: 16px; padding: 14px; }.pg-carriers .carrier-section-title { font-size: 15px; font-weight: 800; margin-bottom: 10px; color: rgba(0,0,0,.75); display: flex; align-items: center; gap: 8px; }.pg-carriers .carrier-section-title:before { content: ""; width: 10px; height: 10px; border-radius: 999px; background: var(--accent, #A683E3); display: inline-block; }#shippingCarrierModal.pg-carriers label.form-label, #shippingCarrierFeeModal.pg-carriers label.form-label { font-weight: 700; margin-bottom: 6px; color: rgba(0,0,0,.72); }#shippingCarrierModal.pg-carriers .form-control, #shippingCarrierModal.pg-carriers .form-select, #shippingCarrierFeeModal.pg-carriers .form-control, #shippingCarrierFeeModal.pg-carriers .form-select { border-radius: 12px; border: 1px solid rgba(0,0,0,.14); padding: 9px 10px; background: #fff; }#shippingCarrierModal.pg-carriers .form-control:focus, #shippingCarrierModal.pg-carriers .form-select:focus, #shippingCarrierFeeModal.pg-carriers .form-control:focus, #shippingCarrierFeeModal.pg-carriers .form-select:focus { border-color: var(--accent, #A683E3); box-shadow: 0 0 0 .2rem rgba(166,131,227,.18); }.pg-carriers .carrier-info-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; }.pg-carriers .carrier-info-field.full { grid-column: 1 / -1; }.pg-carriers .carrier-check-list { background: #fff; border: 1px solid rgba(0,0,0,.12); border-radius: 14px; max-height: 280px; overflow: auto; padding: 10px; }.pg-carriers .carrier-check-list label { display: flex; align-items: center; gap: 8px; padding: 6px 8px; border-radius: 8px; margin: 0; }.pg-carriers .carrier-check-list label:hover { background: rgba(166,131,227,.08); }.pg-carriers .carrier-help-hint { font-size: 12px; color: rgba(0,0,0,.55); margin-top: 6px; }@media (max-width: 768px) {#shippingCarrierTop.pg-carriers .carrier-filter-row { align-items: stretch; }#shippingCarrierTop.pg-carriers .carrier-filter-row > div { width: 100%; }#shippingCarrierTop.pg-carriers .btn, #shippingCarrierTop.pg-carriers .dropdown, #shippingCarrierTop.pg-carriers .dropdown button { width: 100%; }.pg-carriers .carrier-info-grid { grid-template-columns: 1fr; }.pg-carriers .carrier-info-field.full { grid-column: auto; }}/* 只修复顶部控件对齐 */#shippingCarrierTop.pg-carriers .carrier-filter-row { align-items: flex-end !important; }#shippingCarrierTop.pg-carriers .carrier-filter-row > .d-flex { align-items: flex-end !important; }/* 关键：清掉全局 addButton 自带的 margin */#shippingCarrierTop.pg-carriers .carrier-filter-row .addButton { margin-top: 0 !important; margin-bottom: 0 !important; }/* 搜索/重置也确保没有上下 margin 干扰 */.pg-carriers #shippingCarrierSearchButton, .pg-carriers #shippingCarrierResetButton { margin-top: 0 !important; margin-bottom: 0 !important; }/* =========================================================
       设计统一（2026-10-08）：对齐清关 Portal 规格
       圆角 20/16/12 → 10/8/6，边框 rgba 黑 → #dee2e6，
       弹窗阴影压平，状态徽章改 Portal 语义 pastel。
       ========================================================= */.pg-carriers, .pg-brokers, .pg-bonds, .pg-palletnums, .pg-billprob, .pg-histinb, .pg-histrec, .pg-msgboard, .pg-histmsg, .pg-settings, .pg-accessctl, .pg-billtpl, .pg-packerperf, .pg-batchsearch, .pg-useraccounts, .pg-freightmgmt, .pg-orderlist, .pg-billdetail, .pg-portal{ --customs-purple: #A683E3; --customs-purple-dark: #815ac6; --customs-border: #dee2e6; }.pg-carriers .customs-card, .pg-brokers .customs-card, .pg-bonds .customs-card, .pg-palletnums .customs-card, .pg-billprob .customs-card, .pg-histinb .customs-card, .pg-histrec .customs-card, .pg-msgboard .customs-card, .pg-histmsg .customs-card, .pg-settings .customs-card, .pg-accessctl .customs-card, .pg-billtpl .customs-card, .pg-packerperf .customs-card, .pg-batchsearch .customs-card, .pg-useraccounts .customs-card, .pg-freightmgmt .customs-card, .pg-orderlist .customs-card, .pg-billdetail .customs-card, .pg-portal .customs-card{ background: #fff; border: 1px solid var(--customs-border); border-radius: 10px; box-shadow: 0 1px 4px rgba(0, 0, 0, .05); }.pg-carriers .customs-brand-button, .pg-brokers .customs-brand-button, .pg-bonds .customs-brand-button, .pg-billprob .customs-brand-button, .pg-histinb .customs-brand-button, .pg-histrec .customs-brand-button, .pg-msgboard .customs-brand-button, .pg-histmsg .customs-brand-button, .pg-accessctl .customs-brand-button, .pg-billtpl .customs-brand-button, .pg-packerperf .customs-brand-button, .pg-useraccounts .customs-brand-button, .pg-freightmgmt .customs-brand-button, .pg-orderlist .customs-brand-button, .pg-billdetail .customs-brand-button, .pg-portal .customs-brand-button{ color: #fff !important; background: var(--customs-purple) !important; border-color: var(--customs-purple) !important; }.pg-carriers .customs-brand-button:hover, .pg-carriers .customs-brand-button:focus, .pg-brokers .customs-brand-button:hover, .pg-brokers .customs-brand-button:focus, .pg-bonds .customs-brand-button:hover, .pg-bonds .customs-brand-button:focus, .pg-billprob .customs-brand-button:hover, .pg-billprob .customs-brand-button:focus, .pg-histinb .customs-brand-button:hover, .pg-histinb .customs-brand-button:focus, .pg-histrec .customs-brand-button:hover, .pg-histrec .customs-brand-button:focus, .pg-msgboard .customs-brand-button:hover, .pg-msgboard .customs-brand-button:focus, .pg-histmsg .customs-brand-button:hover, .pg-histmsg .customs-brand-button:focus, .pg-accessctl .customs-brand-button:hover, .pg-accessctl .customs-brand-button:focus, .pg-billtpl .customs-brand-button:hover, .pg-billtpl .customs-brand-button:focus, .pg-packerperf .customs-brand-button:hover, .pg-packerperf .customs-brand-button:focus, .pg-useraccounts .customs-brand-button:hover, .pg-useraccounts .customs-brand-button:focus, .pg-freightmgmt .customs-brand-button:hover, .pg-freightmgmt .customs-brand-button:focus, .pg-orderlist .customs-brand-button:hover, .pg-orderlist .customs-brand-button:focus, .pg-billdetail .customs-brand-button:hover, .pg-billdetail .customs-brand-button:focus, .pg-portal .customs-brand-button:hover, .pg-portal .customs-brand-button:focus{ background: var(--customs-purple-dark) !important; border-color: var(--customs-purple-dark) !important; }.pg-carriers .customs-client-menu, .pg-useraccounts .customs-client-menu{ max-height: 330px; overflow: auto; }.pg-carriers .customs-client-menu.show, .pg-brokers .customs-client-menu.show, .pg-bonds .customs-client-menu.show, .pg-histinb .customs-client-menu.show, .pg-histrec .customs-client-menu.show, .pg-billtpl .customs-client-menu.show, .pg-useraccounts .customs-client-menu.show, .pg-freightmgmt .customs-client-menu.show, .pg-orderlist .customs-client-menu.show, .pg-portal .customs-client-menu.show{ display: block; }#shippingCarrierModal.pg-carriers .modal-content, #shippingCarrierFeeModal.pg-carriers .modal-content { border-radius: 10px; box-shadow: 0 8px 24px rgba(0, 0, 0, .12); }#shippingCarrierModal.pg-carriers .modal-header, #shippingCarrierFeeModal.pg-carriers .modal-header { border-bottom-color: var(--customs-border); }#shippingCarrierModal.pg-carriers .modal-footer, #shippingCarrierFeeModal.pg-carriers .modal-footer { border-top-color: var(--customs-border); }#shippingCarrierModal.pg-carriers .modal-body, #shippingCarrierFeeModal.pg-carriers .modal-body { background: #f8f9fa; }.pg-carriers .carrier-section-card { border-color: var(--customs-border); background: #f8f9fa; border-radius: 10px; }.pg-carriers .carrier-section-title { color: #212529; }#shippingCarrierModal.pg-carriers .form-control, #shippingCarrierModal.pg-carriers .form-select, #shippingCarrierFeeModal.pg-carriers .form-control, #shippingCarrierFeeModal.pg-carriers .form-select { border-radius: 6px; border-color: var(--customs-border); }#shippingCarrierModal.pg-carriers label.form-label, #shippingCarrierFeeModal.pg-carriers label.form-label { color: #212529; }.pg-carriers .carrier-help-hint { color: #6c757d; }.pg-carriers .carrier-check-list { border-color: var(--customs-border); border-radius: 10px; }.pg-carriers .carrier-check-list label { border-radius: 6px; }.pg-carriers .carrier-status-enabled { background: #d1e7dd; color: #0f5132; }.pg-carriers .carrier-status-disabled { background: #e9ecef; color: #6c757d; }.pg-carriers .carrierFilterResultMsg { background: #d1e7dd; }.pg-carriers .carrier-sort-icon { color: #6c757d; }/* 顶部「+ 增加渠道」addButton 对齐 Portal 紧凑规格（背景沿用全局 addButton） */#shippingCarrierTop.pg-carriers button.addButton { margin: 0 !important; min-height: 0; font-size: .875rem; padding: .4rem .9rem; border-radius: 6px; }/* --------------------------------------------------------------------------
   [2026-10-10] home_LTL（LTL 首页）—— 作用域 .pg-ltl
   页内 <style>（65 条规则）全量迁入：变量由 :root 改挂作用域；根为
   <main class="ltl-home">。@keyframes 的 from/to 不加作用域（关键帧
   选择器必须裸写，动画名全站唯一）。选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- *//* 2026-10-08 设计统一：设计令牌对齐清关 Portal
       （品牌紫 #A683E3 / 深紫 #815ac6 / 边框 #dee2e6 / 正文 #212529 / 次要文字 #6c757d） */.pg-ltl { --ltl-primary: #A683E3; --ltl-primary-dark: #815ac6; --ltl-primary-deep: #815ac6; --ltl-soft: #f7f2ff; --ltl-soft-strong: #e2d9f3; --ltl-border: #dee2e6; --ltl-text: #212529; --ltl-muted: #6c757d; --ltl-danger: #b02a37; --ltl-danger-soft: #fdeef0; }.ltl-home.pg-ltl { padding: 1rem; color: var(--ltl-text); }.pg-ltl .ltl-hero { display: flex; justify-content: space-between; align-items: center; gap: 24px; padding: 20px 24px; background: #fff; border: 1px solid var(--ltl-border); border-radius: 10px; box-shadow: 0 1px 4px rgba(0, 0, 0, .05); }.pg-ltl .eyebrow { margin-bottom: 7px; font-size: 11px; font-weight: 900; letter-spacing: .14em; color: var(--ltl-primary-dark); }.pg-ltl .eyebrow.purple { color: var(--ltl-primary-deep); opacity: 1; }.pg-ltl .ltl-hero h1 { margin: 0; font-size: clamp(28px, 4vw, 43px); line-height: 1.14; }.pg-ltl .ltl-hero p { margin: 11px 0 0; color: var(--ltl-muted); font-size: 15px; }.pg-ltl .hero-account { min-width: 235px; padding: 16px 18px; background: #f8f9fa; border: 1px solid var(--ltl-border); border-radius: 8px; }.pg-ltl .hero-account span, .pg-ltl .hero-account strong, .pg-ltl .hero-account small, .pg-ccclient .hero-account span, .pg-ccclient .hero-account strong, .pg-ccclient .hero-account small{ display: block; }.pg-ltl .hero-account span { color: var(--ltl-muted); font-size: 11px; }.pg-ltl .hero-account strong, .pg-ccclient .hero-account strong{ margin-top: 5px; font-size: 18px; word-break: break-word; }.pg-ltl .hero-account small { margin-top: 9px; color: var(--ltl-muted); font-size: 11px; }.pg-ltl .ltl-alert { display: flex; align-items: center; gap: 13px; margin-top: 16px; padding: 14px 17px; color: var(--ltl-primary-deep); background: var(--ltl-soft); border: 1px solid var(--ltl-border); border-radius: 10px; }.pg-ltl .ltl-alert[hidden] { display: none; }.pg-ltl .alert-icon { flex: 0 0 36px; width: 36px; height: 36px; display: grid; place-items: center; color: #fff; background: var(--ltl-primary); border-radius: 50%; font-size: 18px; font-weight: 900; }.pg-ltl .ltl-alert p { margin: 3px 0 0; color: var(--ltl-muted); font-size: 12px; }.pg-ltl .summary-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 14px; margin-top: 16px; }.pg-ltl .summary-card { min-height: 145px; padding: 20px; background: #fff; border: 1px solid var(--ltl-border); border-radius: 10px; box-shadow: 0 1px 4px rgba(0, 0, 0, .05); }.pg-ltl .summary-card.has-problem { border-color: #f1aeb5; background: var(--ltl-danger-soft); }.pg-ltl .summary-label { display: block; color: var(--ltl-muted); font-size: 13px; font-weight: 700; }.pg-ltl .summary-value { display: block; margin-top: 13px; color: var(--ltl-text); font-size: 38px; font-weight: 900; line-height: 1; }.pg-ltl .summary-card small { display: block; margin-top: 13px; color: var(--ltl-muted); font-size: 11px; line-height: 1.4; }.pg-ltl .status-panel, .pg-ltl .recent-panel { margin-top: 16px; padding: 23px 24px 26px; background: #fff; border: 1px solid var(--ltl-border); border-radius: 10px; box-shadow: 0 1px 4px rgba(0, 0, 0, .05); }.pg-ltl .section-heading, .pg-ccclient .section-heading{ display: flex; justify-content: space-between; align-items: flex-end; gap: 18px; }.pg-ltl .section-heading h2, .pg-ccclient .section-heading h2{ margin: 0; font-size: 22px; }.pg-ltl .heading-actions, .pg-ccclient .heading-actions{ display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }.pg-ltl .heading-actions > span, .pg-ltl .panel-note { color: var(--ltl-muted); font-size: 11px; }.pg-ltl .heading-actions button, .pg-ltl .heading-actions a { display: inline-flex; align-items: center; justify-content: center; gap: 8px; min-height: 38px; padding: 8px 13px; border-radius: 6px; font-size: 12px; font-weight: 800; cursor: pointer; }.pg-ltl .heading-actions button { color: #6c757d; background: #fff; border: 1px solid #6c757d; }.pg-ltl .heading-actions a { color: #fff !important; background: var(--ltl-primary); border: 1px solid var(--ltl-primary); text-decoration: none; }.pg-ltl .heading-actions button:hover { color: #fff; background: #6c757d; }.pg-ltl .heading-actions a:hover { color: #fff; background: var(--ltl-primary-dark); border-color: var(--ltl-primary-dark); }.pg-ltl .status-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; margin-top: 20px; }.pg-ltl .status-card { min-height: 100px; padding: 16px; background: #fff; border: 1px solid var(--ltl-border); border-radius: 8px; }.pg-ltl .status-card.nonzero { background: var(--ltl-soft); border-color: #cdbcf0; }.pg-ltl .status-card.problem { background: var(--ltl-danger-soft); border-color: #f1aeb5; }.pg-ltl .status-card span { display: block; min-height: 34px; color: var(--ltl-muted); font-size: 12px; font-weight: 700; line-height: 1.35; }.pg-ltl .status-card strong { display: block; margin-top: 8px; color: var(--ltl-primary-deep); font-size: 27px; font-weight: 900; line-height: 1; }.pg-ltl .status-card.problem strong { color: var(--ltl-danger); }.pg-ltl .recent-table-wrap { margin-top: 18px; overflow-x: auto; border: 1px solid var(--ltl-border); border-radius: 8px; }.pg-ltl .recent-table { width: 100%; min-width: 800px; border-collapse: collapse; background: #fff; font-size: 12px; }.pg-ltl .recent-table th, .pg-ltl .recent-table td { padding: 10px 12px; border-bottom: 1px solid var(--ltl-border); text-align: left; vertical-align: middle; }.pg-ltl .recent-table thead th { color: var(--ltl-text); background: #fff; box-shadow: 0 2px 0 rgba(0, 0, 0, .08); font-weight: 800; }.pg-ltl .recent-table tbody tr:hover td { background: #f8f9fa; }.pg-ltl .recent-table tbody tr:last-child td { border-bottom: 0; }.pg-ltl .order-number { color: var(--ltl-primary-deep); font-weight: 900; }.pg-ltl .table-message { color: var(--ltl-muted); text-align: center !important; }.pg-ltl .home-error { margin-top: 14px; padding: 13px 15px; color: var(--ltl-danger); background: var(--ltl-danger-soft); border: 1px solid #f1aeb5; border-radius: 10px; font-size: 12px; }.pg-ltl .home-error[hidden] { display: none; }.pg-ltl .home-error strong, .pg-ltl .home-error span { display: block; }.pg-ltl .home-error span { margin-top: 4px; }.pg-ltl .loading-card, .pg-ltl .loading-value, .pg-ccclient .loading-card, .pg-ccclient .loading-value{ position: relative; overflow: hidden; color: transparent !important; }.pg-ltl .loading-card::after, .pg-ltl .loading-value::after { content: ""; position: absolute; inset: 0; background: linear-gradient( 90deg, rgba(166,131,227,.04), rgba(166,131,227,.15), rgba(166,131,227,.04) ); animation: ltlShimmer 1.2s infinite; }@keyframes ltlShimmer {
from { transform: translateX(-100%); }
to { transform: translateX(100%); }
}@media (max-width: 1000px) {.pg-ltl .summary-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }.pg-ltl .status-grid, .pg-ccclient .status-grid{ grid-template-columns: repeat(3, minmax(0, 1fr)); }}@media (max-width: 680px) {.ltl-home.pg-ltl { padding: .5rem; }.pg-ltl .ltl-hero, .pg-ltl .section-heading { align-items: stretch; flex-direction: column; }.pg-ltl .ltl-hero { padding: 18px; }.pg-ltl .hero-account, .pg-ccclient .hero-account{ min-width: 0; }.pg-ltl .summary-grid { grid-template-columns: 1fr; }.pg-ltl .status-grid, .pg-ccclient .status-grid{ grid-template-columns: repeat(2, minmax(0, 1fr)); }.pg-ltl .heading-actions, .pg-ccclient .heading-actions{ align-items: stretch; }}@media (prefers-reduced-motion: reduce) {.pg-ltl .loading-card::after, .pg-ltl .loading-value::after, .pg-ccclient .loading-card::after, .pg-ccclient .loading-value::after{ animation: none; }}/* --------------------------------------------------------------------------
   [2026-10-10] Inbound_ECommerce（入库电商）—— 作用域 .pg-inbound-ec
   本页原自有样式只有行状态染色 4 条，已迁入此处；页面同时首次接入
   设计系统：内容区包一层 .ds-root（+ 本作用域类），旧 addButton /
   singleColTexInput / 表格 / 分页等由桥接统一为高级版样式。页内另两块
   <style> 在打印标签的 JS 模板字符串里（新窗口文档），保留原地勿迁。
/* —— 样板页打磨（全推计划②）：面板卡片化 + 标题层级 + 客户下拉归正。
      作业区大字号（tbody 30px/20px 为内联样式）是地面可读性设计，不动。 —— */.pg-inbound-ec .team-style1 { background: #fff; border: 1px solid var(--ds-border); border-radius: var(--ds-radius-lg); box-shadow: var(--ds-shadow-card); padding: 1rem; }.pg-inbound-ec .hoverstyle1 { transition: box-shadow .18s ease; }.pg-inbound-ec .hoverstyle1:hover { transform: none; box-shadow: 0 2px 3px rgba(48, 35, 90, .06), 0 16px 38px -16px rgba(48, 35, 90, .22); }.pg-inbound-ec .box { background: #fff; border: 1px solid var(--ds-border); border-radius: var(--ds-radius-lg); box-shadow: var(--ds-shadow-card); padding: 1rem; }.pg-inbound-ec .containerInboundBox h5 { font-weight: 700; color: var(--ds-ink); letter-spacing: -.01em; margin-bottom: .6rem; }.pg-inbound-ec #clientDropdown { width: 100%; border: 1px solid var(--ds-border-strong); border-radius: var(--ds-radius); padding: .5rem .6rem; font-size: .9375rem; color: var(--ds-ink); background: #fff; box-shadow: inset 0 1px 2px rgba(34, 28, 53, .05); }.pg-inbound-ec #clientDropdown:focus { border-color: var(--ds-brand-light); box-shadow: var(--ds-focus-ring); outline: none; }.pg-inbound-ec .table thead th { border-bottom: 1px solid var(--ds-border); }-------------------------------------------------------------------------- *//* Box Content + Other Boxes 都要染色 */.pg-inbound-ec #inboundInformationDisplay tr.state-yellow > *, .pg-inbound-ec #skuOtherBoxesDisplay tr.state-yellow > * { background:#fff3cd !important; }.pg-inbound-ec #inboundInformationDisplay tr.state-green > *, .pg-inbound-ec #skuOtherBoxesDisplay tr.state-green > * { background:#d1e7dd !important; }.pg-inbound-ec #inboundInformationDisplay tr.state-red > *, .pg-inbound-ec #skuOtherBoxesDisplay tr.state-red > * { background:#f8d7da !important; }/* failed 继续保持 */.pg-inbound-ec tr.upload-failed > * { background:#f8d7da !important; }/* --------------------------------------------------------------------------
   [2026-10-10] home（主仪表盘）—— 作用域 .pg-dash
   页内 <style>（66 条规则）全量迁入：根为 <section class="dashboard">；
   @keyframes 百分比步保持裸写。选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- *//* ====== 整体布局 ====== */.dashboard.pg-dash { padding: 12px; }.pg-dash .dash-row { display: grid; grid-template-columns: repeat(12, 1fr); gap: 12px; margin-bottom: 12px; }.pg-dash .card-box { background: #fff; border-radius: 10px; box-shadow: 0 2px 10px rgba(0,0,0,.05); padding: 14px 16px; }.pg-dash .heading h1 { margin: 0; }/* ====== KPI 卡 ====== */.pg-dash .kpi { display: flex; flex-direction: column; align-items: center; justify-content: center; min-height: 84px; }.pg-dash .kpi .label { font-size: 14px; color: #666; }.pg-dash .kpi .value { font-size: 28px; font-weight: 700; line-height: 1.1; margin-top: 4px; }/* ====== 近5日发货（小卡片） ====== */.pg-dash .mini-cards { display: grid; grid-template-columns: repeat(5, 1fr); gap: 10px; }.pg-dash .mini-card .date { font-size: 13px; color:#666; }.pg-dash .mini-card .count { font-size: 22px; font-weight: 700; margin-top: 6px; }/* ====== 大图容器 ====== */.pg-dash .chart-title { font-size: 16px; font-weight: 600; margin-bottom: 8px; }.pg-dash .chart-wrap { width: 100%; height: 400px; }/* ====== 校准区表格 ====== */.pg-dash #tableContainer table { border-collapse: collapse; width: 100%; margin-top: 10px; }.pg-dash #tableContainer th, .pg-dash #tableContainer td { border: 1px solid #ccc; padding: 8px; text-align: left; }.pg-dash #submitOrder { padding: 8px 16px; border: 0; border-radius: 8px; background:#4f46e5; color:#fff; }.pg-dash #submitOrder:hover { filter: brightness(0.95); }/* ===== KPI animated loading dots ===== */.pg-dash .kpi .value .loading-dots { display: inline-flex; gap: 2px; }.pg-dash .kpi .value .loading-dots span { display: inline-block; width: .4em; text-align: center; animation: kpiDot 1.1s infinite; opacity: 0; }.pg-dash .kpi .value .loading-dots span:nth-child(1) { animation-delay: 0s; }.pg-dash .kpi .value .loading-dots span:nth-child(2) { animation-delay: .2s; }.pg-dash .kpi .value .loading-dots span:nth-child(3) { animation-delay: .4s; }@keyframes kpiDot {
0% { opacity: 0; transform: translateY(0); }
25% { opacity: 1; transform: translateY(-1px); }
50% { opacity: 0.8; transform: translateY(0); }
100% { opacity: 0; transform: translateY(0); }
}/* ===== Mini-card lightweight shimmer for counts ===== */.pg-dash .mini-card.loading .date, .pg-dash .mini-card.loading .count { position: relative; color: transparent; overflow: hidden; }.pg-dash .mini-card.loading .count::after, .pg-dash .mini-card.loading .date::after { content: ""; position: absolute; inset: 0; background: linear-gradient(90deg, rgba(0,0,0,.05), rgba(0,0,0,.12), rgba(0,0,0,.05)); animation: shimmer 1.2s infinite; }@keyframes shimmer {
0% { transform: translateX(-100%); }
100% { transform: translateX(100%); }
}/* Respect reduced motion */@media (prefers-reduced-motion: reduce) {.pg-dash .kpi .value .loading-dots span { animation: none; opacity: 1; }.pg-dash .mini-card.loading .count::after, .pg-dash .mini-card.loading .date::after { animation: none; }}.pg-dash .toggle { display:inline-flex; border:1px solid #e5e7eb; border-radius:999px; padding:2px; background:#f8fafc; }.pg-dash .toggle-btn { border:0; background:transparent; padding:6px 12px; border-radius:999px; cursor:pointer; font-size:12px; color:#475569; }.pg-dash .toggle-btn.active { background:#fff; box-shadow:0 1px 3px rgba(0,0,0,.06); color:#111827; }/* ensure axes and labels aren’t clipped by the container */.pg-dash .chart-wrap, .pg-dash #timeliness10m, .pg-dash #pickingGantt { overflow: visible; /* <-- key */ }.pg-dash .mini-card { border: 1px solid #eee; border-radius: 8px; padding: 10px 12px; text-align: center; }/* ====== Recent5 combined: Fulfilled / Received ====== */.pg-dash .mini-card .pair { margin-top: 6px; display: grid; gap: 4px; }.pg-dash .mini-card .pair-line { display: flex; justify-content: space-between; align-items: baseline; font-size: 13px; color: #64748b; }.pg-dash .mini-card .pair-line .num { font-size: 16px; font-weight: 800; color: #111827; }/* shimmer：改成对 pair-line 生效 */.pg-dash .mini-card.loading .date, .pg-dash .mini-card.loading .pair-line { position: relative; color: transparent; overflow: hidden; }.pg-dash .mini-card.loading .date::after, .pg-dash .mini-card.loading .pair-line::after { content: ""; position: absolute; inset: 0; background: linear-gradient(90deg, rgba(0,0,0,.05), rgba(0,0,0,.12), rgba(0,0,0,.05)); animation: shimmer 1.2s infinite; }/* 左侧上下两板：总尺寸固定（不改变外边缘） *//* 让这一行的三列都可拉伸（一般 grid 默认就是 stretch，这里显式写也行） */.pg-dash .dash-row { align-items: stretch; }/* 左列外层：要能拿到“这一行的高度” */.pg-dash .left-col { height: 100%; display: flex; min-height: 0; }/* 左列内部：上下各占一半，且高度=父高度 */.pg-dash .left-split { flex: 1; height: 100%; min-height: 0; display: grid; grid-template-rows: 1fr 1fr; gap: 12px; }/* 两个卡片都要允许撑满+内部滚动 */.pg-dash .left-split > .card-box { height: 100%; min-height: 0; }/* 卡内部布局（你已有的可保留，但确保 min-height:0） */.pg-dash .card-chart, .pg-dash .picking-stack { height: 100%; min-height: 0; }.pg-dash .chart-flex { flex: 1; min-height: 0; width: 100%; /* ✅ 不要再写 height:100% 也可以，避免一些浏览器 flex 计算怪 */ }.pg-dash .picking-table-wrap { flex: 1; min-height: 0; overflow: auto; }/* 每个板内部：title + chart(自动撑满) + meta */.pg-dash .card-chart { display: flex; flex-direction: column; height: 100%; }/* meta 行统一样式 */.pg-dash .meta-line { margin-top: 6px; color: #666; font-size: 12px; }/* 只影响“发货时效统计”这张卡 */.pg-dash .timeliness-card { padding: 10px 12px; /* 原来 card-box 是 14px 16px */ }.pg-dash .timeliness-card .chart-title { margin-bottom: 4px; /* 原来 8px */ }.pg-dash #timelinessMeta { margin-top: 2px; /* 原来 6px */ font-size: 11px; line-height: 1.15; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }/* ===== Picking progress table (bottom half) ===== */.pg-dash .picking-card { padding: 10px 12px; }.pg-dash .picking-card .chart-title { margin-bottom: 6px; }.pg-dash .picking-stack { display:flex; flex-direction: column; height: 100%; min-height: 0; }.pg-dash .picking-meta { font-size: 11px; color:#666; margin-top: 2px; line-height: 1.15; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }.pg-dash .picking-table-wrap { flex: 1; min-height: 0; overflow: auto; border: 1px solid rgba(0,0,0,.08); border-radius: 10px; background:#fff; }.pg-dash .picking-table { width: 100%; border-collapse: collapse; table-layout: fixed; font-size: 12px; }.pg-dash .picking-table th, .pg-dash .picking-table td { padding: 8px 10px; border-bottom: 1px solid rgba(0,0,0,.06); vertical-align: middle; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }.pg-dash .picking-table thead th { position: sticky; top: 0; background: #fff; z-index: 2; font-weight: 700; }.pg-dash .picking-table tbody tr:nth-child(odd) { background: rgba(0,0,0,.02); }.pg-dash .badge { display:inline-block; padding: 2px 8px; border-radius: 999px; font-size: 11px; border: 1px solid rgba(0,0,0,.12); }.pg-dash .badge.done { background: rgba(16,185,129,.10); }.pg-dash .badge.run { background: rgba(59,130,246,.10); }/* Eff 列不要省略 */.pg-dash .picking-table th:last-child, .pg-dash .picking-table td:last-child { overflow: visible; text-overflow: clip; white-space: nowrap; }/* --------------------------------------------------------------------------
   [2026-10-10] inbound_ReturnedGoods（退货入库）—— 作用域 .pg-retgoods
   页内第 1 块 <style>（页面 UI）全量迁入；本页原本没有单一根容器，
   页面内容（扫码区到页脚前，含 #returnedClientModal）包一层普通
   .pg-retgoods 容器承载作用域，不改布局。第 2/3 块是打印文档
   （Return Route / 标签，在 JS 模板字符串里），保留原地勿迁。
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- *//* make column widths from <colgroup> stick */.pg-retgoods .returned-table { table-layout: fixed; }/* left-align everything (including numbers) */.pg-retgoods .returned-table th, .pg-retgoods .returned-table td { text-align: left !important; }/* optional: avoid tall rows & control wrapping where needed */.pg-retgoods .returned-table .nowrap { white-space: nowrap; }.pg-retgoods .returned-table .truncate { display: inline-block; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; vertical-align: bottom; }/* slightly tighter vertical rhythm */.pg-retgoods .table.returned-table > :not(caption) > * > * { padding-top:.5rem; padding-bottom:.5rem; }/* Top row layout: left combo + right bin */.pg-retgoods .returned-top-row { display: grid; grid-template-columns: 40% 40%; gap: 16px; justify-content: center; /* ← centers the two blocks */ align-items: stretch; width: 100%; }/* Make both cards feel equal size */.pg-retgoods .returned-left-combo, .pg-retgoods .returned-bin-card { min-height: 340px; }/* Left combo internal structure */.pg-retgoods .returned-left-combo { display: flex; flex-direction: column; height: 100%; }/* Scan area slightly compact */.pg-retgoods .returned-scan-box { background: #f7f7fb; border: 1px dashed #d7d9e6; border-radius: 12px; padding: 10px; }.pg-retgoods .returned-scan-input { font-size: 20px; border-radius: 10px; }.pg-retgoods .returned-hint { margin-top: 6px; font-size: 11px; color: #6b7280; }/* Compact Current Scan block inside left card */.pg-retgoods .returned-current-mini { margin-top: 12px; padding-top: 10px; border-top: 1px solid #ece6fb; }/* tiny header */.pg-retgoods .current-mini-head { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; }.pg-retgoods .mini-dot { width: 8px; height: 8px; border-radius: 50%; background: #A683E3; opacity: .7; }.pg-retgoods .current-mini-title { font-size: 13px; font-weight: 700; color: #1f2430; letter-spacing: .2px; }/* mini grid (small + clean) */.pg-retgoods .current-mini-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }/* mini items */.pg-retgoods .mini-item { background: linear-gradient(180deg, #ffffff, #fbf9ff); border: 1px solid #efe8ff; border-radius: 10px; padding: 8px 10px; min-height: 54px; }.pg-retgoods .mini-label { font-size: 10px; text-transform: uppercase; letter-spacing: .06em; color: #6b7280; margin-bottom: 2px; }.pg-retgoods .mini-value { font-size: 18px; font-weight: 800; color: #A683E3; line-height: 1.1; min-height: 20px; word-break: break-word; }.pg-retgoods .mini-value:empty::before { content: "—"; color: #c7c9d6; font-weight: 600; }/* Bin block fills height nicely */.pg-retgoods .returned-bin-card { display: flex; flex-direction: column; height: 100%; }.pg-retgoods .returned-bin-display { flex: 1; display: flex; align-items: center; justify-content: center; background: linear-gradient(180deg, #ffffff, #faf7ff); border: 1px solid #efe8ff; border-radius: 14px; padding: 18px 10px; }.pg-retgoods #returnedBinNumberDisplay { color: #A683E3; font-size: clamp(120px, 19vw, 250px); font-weight: 900; line-height: 1; }/* Mobile stack */@media (max-width: 992px) {.pg-retgoods .returned-top-row { grid-template-columns: 1fr; }}/* Medium screens: loosen to 48/48 so it's not cramped */@media (max-width: 1200px) {.pg-retgoods .returned-top-row { grid-template-columns: 48% 48%; justify-content: space-between; }}/* Tablets: 55/45 keeps bin readable */@media (max-width: 992px) {.pg-retgoods .returned-top-row { grid-template-columns: 55% 45%; justify-content: space-between; }}/* Phones: stack */@media (max-width: 768px) {.pg-retgoods .returned-top-row { grid-template-columns: 1fr; }}/* Returned table: give long tracking numbers real room */.pg-retgoods .returnedGoodsTableContainer { width: 100%; overflow-x: auto; -webkit-overflow-scrolling: touch; }.pg-retgoods .returned-table { min-width: 1650px; }.pg-retgoods .returned-table th:nth-child(3), .pg-retgoods .returned-table td:nth-child(3) { white-space: nowrap; }/* Returned goods summary */.pg-retgoods .returned-summary-row { display: grid; grid-template-columns: repeat(2, minmax(220px, 320px)); gap: 16px; justify-content: center; margin: 18px auto 6px; width: min(760px, calc(100% - 32px)); }.pg-retgoods .returned-summary-card { background: linear-gradient(180deg, #ffffff, #faf7ff); border: 1px solid #efe8ff; border-radius: 14px; padding: 16px 18px; text-align: center; box-shadow: 0 2px 8px rgba(31, 36, 48, .04); }.pg-retgoods .returned-summary-label { font-size: 12px; color: #6b7280; font-weight: 700; letter-spacing: .03em; margin-bottom: 4px; }.pg-retgoods .returned-summary-value { color: #A683E3; font-size: 34px; line-height: 1.1; font-weight: 900; }@media (max-width: 600px) {.pg-retgoods .returned-summary-row { grid-template-columns: 1fr 1fr; width: calc(100% - 24px); gap: 10px; }.pg-retgoods .returned-summary-card { padding: 12px 8px; }.pg-retgoods .returned-summary-value { font-size: 28px; }}/* Upload progress */.pg-retgoods .returned-upload-progress { display: none; width: min(760px, calc(100% - 32px)); margin: 14px auto 0; }.pg-retgoods .returned-upload-progress.show { display: block; }.pg-retgoods .returned-upload-progress .progress { height: 24px; border-radius: 12px; overflow: hidden; background: #ececf3; }.pg-retgoods .returned-upload-progress .progress-bar { min-width: 0; font-size: 12px; font-weight: 700; transition: width .2s ease; }.pg-retgoods .returned-progress-text { margin-top: 6px; text-align: center; font-size: 13px; color: #6b7280; min-height: 20px; }/* --------------------------------------------------------------------------
   [2026-10-10] inventory_ECommerceForecastUpload（电商预报上传） —— 作用域 .pg-fupload
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- *//* ===== Forecast page layout ===== */.forecastPage.pg-fupload { max-width: 1200px; margin: 0 auto; padding: 6px 10px 24px; }.pg-fupload .forecastCard { background: #fff; border: 1px solid #e5e7eb; border-radius: 16px; box-shadow: 0 8px 24px rgba(15, 23, 42, 0.06); overflow: hidden; }.pg-fupload .forecastCardHeader { padding: 12px 14px; border-bottom: 1px solid #eef2f7; display:flex; align-items:center; justify-content:space-between; gap: 10px; background: linear-gradient(180deg, #ffffff 0%, #fbfbfd 100%); }.pg-fupload .forecastCardHeader h3 { margin:0; font-size: 16px; font-weight: 800; letter-spacing: .01em; color: #111827; }.pg-fupload .forecastCardBody { padding: 14px; }/* ===== Top summary tiles ===== */.pg-fupload .forecastSummaryRow { display:grid; grid-template-columns: 1fr 1fr; gap: 12px; margin: 10px 0 12px; }@media (max-width: 720px) {.pg-fupload .forecastSummaryRow { grid-template-columns: 1fr; }}.pg-fupload .miniTile { border: 1px solid #e5e7eb; border-radius: 14px; background: #f8fafc; padding: 10px 12px; display:flex; justify-content:space-between; align-items:flex-start; gap: 12px; }.pg-fupload .miniTile .title { font-weight: 800; font-size: 12px; text-transform: uppercase; color: #64748b; letter-spacing: .03em; margin-bottom: 6px; }.pg-fupload .miniTile .value { font-weight: 900; font-size: 18px; color: #111827; line-height: 1.1; }.pg-fupload .miniTile .hint { font-size: 12px; color: #6b7280; }.pg-fupload .miniTile .pill { border-radius: 999px; padding: 6px 10px; border: 1px solid #e5e7eb; background: #fff; font-weight: 800; color: #111827; white-space: nowrap; }/* ===== Inputs / controls grid ===== */.pg-fupload .forecastControls { display:grid; grid-template-columns: 1.2fr 1fr 1fr; gap: 12px; align-items:end; margin-top: 6px; }@media (max-width: 992px) {.pg-fupload .forecastControls { grid-template-columns: 1fr; }}.pg-fupload .ctrlBlock { border: 1px solid #e5e7eb; border-radius: 14px; background: #ffffff; padding: 10px 12px; }.pg-fupload .ctrlLabel { font-size: 12px; font-weight: 800; text-transform: uppercase; color: #64748b; letter-spacing: .03em; margin-bottom: 6px; }.pg-fupload .ctrlRow { display:flex; gap: 10px; align-items:center; flex-wrap:wrap; }.pg-fupload .ctrlRow .form-control, .pg-fupload .ctrlRow .singleColTexInput, .pg-fupload .ctrlRow select { height: 42px; border-radius: 12px; }/* file input line */.pg-fupload .fileRow { display:flex; gap: 10px; align-items:center; flex-wrap:wrap; }.pg-fupload .fileRow input[type="file"] { flex: 1; min-width: 240px; }.pg-fupload .fileRow .addButton { white-space: nowrap; }/* Toggle radio groups */.pg-fupload .unitRow { display:flex; gap: 14px; align-items:center; flex-wrap:wrap; }.pg-fupload .unitGroup { display:flex; gap: 10px; align-items:center; flex-wrap:wrap; }.pg-fupload .unitGroup label { display:flex; align-items:center; gap: 6px; margin: 0; padding: 6px 10px; border: 1px solid #e5e7eb; border-radius: 999px; background: #fff; cursor: pointer; user-select:none; font-weight: 700; color:#111827; }.pg-fupload .unitGroup input[type="radio"] { transform: scale(1.1); }/* ===== Table ===== */.pg-fupload .forecastTableWrap { margin-top: 12px; border: 1px solid #e5e7eb; border-radius: 14px; overflow: hidden; background: #fff; }.pg-fupload .ctrlBlock .form-control { height: 42px; border-radius: 12px; }.pg-fupload table.forecastTable { width: 100%; table-layout: fixed; border-collapse: collapse; margin: 0; }.pg-fupload table.forecastTable th, .pg-fupload table.forecastTable td { border-bottom: 1px solid #eef2f7; padding: 10px 10px; vertical-align: middle; }.pg-fupload table.forecastTable thead th { position: sticky; top: 0; z-index: 2; background: #ffffff; font-weight: 900; color: #111827; text-align: center; border-bottom: 1px solid #e5e7eb; }.pg-fupload table.forecastTable tbody tr:nth-child(odd) { background: #fafafa; }.pg-fupload table.forecastTable td input.form-control { height: 38px; border-radius: 10px; }/* keep delete button not too huge */.pg-fupload .ibtnDel { border-radius: 10px !important; padding: 8px 12px !important; font-weight: 800; }/* Submit area */.pg-fupload .forecastFooter { display:flex; justify-content:flex-end; gap: 10px; margin-top: 12px; }/* Make the first row blocks equal height */.pg-fupload .forecastControls { align-items: stretch; /* key */ }/* Each block uses flex so content can align nicely */.pg-fupload .ctrlBlock { display: flex; flex-direction: column; height: 100%; }/* The input row grows to fill remaining height if needed */.pg-fupload .ctrlBlock .fileRow, .pg-fupload .ctrlBlock select, .pg-fupload .ctrlBlock input[type="date"], .pg-fupload .ctrlBlock input.form-control { width: 100%; }/* Header row inside file block */.pg-fupload .ctrlHead { display:flex; align-items:center; justify-content:space-between; gap:10px; margin-bottom: 8px; }/* Small corner download link */.pg-fupload .downloadLink { font-size: 12px; font-weight: 800; color: #0d6efd; text-decoration: underline; white-space: nowrap; }.pg-fupload .downloadLink:hover { opacity: .85; }.pg-fupload .ctrlBlockFile { position: relative; /* allow absolute positioning inside */ padding-bottom: 34px; /* space so link doesn't overlap input */ }.pg-fupload .downloadLinkBottom { position: absolute; right: 12px; bottom: 10px; font-size: 12px; font-weight: 800; }.pg-fupload .clientCompanyBox { background:#8b5cf6; color:#fff; border-radius:10px; padding:8px 12px; font-weight:700; font-size:13px; text-align:center; letter-spacing:0.3px; }/* ===== Fix client company dropdown on this page only ===== */.forecastPage.pg-fupload .forecastClientSelect { -webkit-appearance: none !important; appearance: none !important; width: 100%; height: 42px !important; min-height: 42px !important; background-color: #fff !important; color: #111827 !important; border: 1px solid #dbe2ea !important; border-radius: 12px !important; box-shadow: none !important; font-size: 14px !important; font-weight: 700 !important; line-height: normal !important; padding: 0 42px 0 14px !important; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 20 20' fill='none'%3E%3Cpath d='M5 7.5L10 12.5L15 7.5' stroke='%2364748b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") !important; background-repeat: no-repeat !important; background-position: right 14px center !important; background-size: 14px 14px !important; }.forecastPage.pg-fupload .forecastClientSelect:focus { border-color: #a78bfa !important; box-shadow: 0 0 0 3px rgba(139, 92, 246, 0.12) !important; outline: none !important; }.forecastPage.pg-fupload .forecastClientSelect:required:invalid { color: #94a3b8 !important; font-weight: 600 !important; }.forecastPage.pg-fupload .forecastClientSelect option { color: #111827; background: #fff; }.pg-fupload .batchEditableInput { width: 100%; border: 0; background: transparent; padding: 0; margin: 0; font-weight: 900; font-size: 18px; color: #111827; line-height: 1.1; cursor: pointer; outline: none; }.pg-fupload .batchEditableInput[readonly] { cursor: pointer; }.pg-fupload .batchEditableInput.editing { background: #fff; border: 1px solid #dbe2ea; border-radius: 10px; padding: 6px 10px; cursor: text; }/* --------------------------------------------------------------------------
   [2026-10-10] eCommerce_OrderUpload（电商订单上传） —— 作用域 .pg-ordupload
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- */.pg-ordupload, .pg-y2upload{ --accent:#A683E3; --ink:#111827; --muted:#6b7280; --line:rgba(17,24,39,.10); --soft:#f8fafc; --card:#ffffff; --danger-soft:#fff5f5; --success-soft:#effaf3; --shadow:0 10px 30px rgba(17,24,39,.08); --radius:18px; }/* body 背景 #f6f7fb 由 .ds-root 背景 #F7F6FA 取代（迁移时删除，色差不可见） */.pageWrap.pg-ordupload { max-width: 1500px; margin: 18px auto 28px; padding: 0 14px; }.pg-ordupload .pageHero { background: linear-gradient(135deg, #ffffff 0%, #faf7ff 100%); border: 1px solid var(--line); border-radius: 24px; box-shadow: var(--shadow); padding: 18px 20px; margin-bottom: 16px; }.pg-ordupload .pageHeroTop { display:flex; justify-content:space-between; align-items:flex-start; gap:14px; flex-wrap:wrap; }.pg-ordupload .pageTitleGroup h1 { margin:0; font-size:28px; line-height:1.15; font-weight:900; color:var(--ink); }.pg-ordupload .pageSubtitle, .pg-y2upload .pageSubtitle{ margin-top:6px; color:var(--muted); font-size:14px; }.pg-ordupload .batchBadge { display:inline-flex; align-items:center; gap:8px; padding:8px 12px; border-radius:999px; background:#f3edff; color:#5f3dc4; font-weight:700; font-size:13px; border:1px solid rgba(166,131,227,.28); white-space:nowrap; }.pg-ordupload .toolbarCard, .pg-ordupload .contentCard, .pg-ordupload .actionCard { background:var(--card); border:1px solid var(--line); border-radius:var(--radius); box-shadow:var(--shadow); }.pg-ordupload .toolbarCard { padding:16px; margin-bottom:16px; }.pg-ordupload .toolbarTitle { font-size:15px; font-weight:800; color:var(--ink); margin-bottom:12px; }.pg-ordupload .actionToolbar { display:flex; flex-wrap:wrap; gap:10px; }.pg-ordupload .actionToolbar .dropDownMenuFromInventory, .pg-ordupload .actionToolbar .toolBtn { border:none; background:#A683E3; color:#fff; padding:10px 14px; border-radius:14px; font-weight:700; font-size:14px; transition:transform .15s ease, box-shadow .15s ease, opacity .15s ease; box-shadow:0 6px 18px rgba(17,24,39,.14); }.pg-ordupload .actionToolbar .dropDownMenuFromInventory:hover, .pg-ordupload .actionToolbar .toolBtn:hover { transform:translateY(-1px); opacity:.96; }/*.actionToolbar .dropDownMenuFromInventory.secondary,*//*.actionToolbar .toolBtn.secondary{*//*    background:#fff;*//*    color:#A683E3;*//*    border:1px solid var(--line);*//*    box-shadow:none;*//*}*/.pg-ordupload .contentCard { padding:14px; margin-bottom:16px; }.pg-ordupload .sectionHead, .pg-y2upload .sectionHead{ display:flex; justify-content:space-between; align-items:center; gap:12px; flex-wrap:wrap; margin-bottom:12px; }.pg-ordupload .sectionTitle, .pg-y2upload .sectionTitle{ margin:0; font-size:18px; font-weight:900; color:var(--ink); }.pg-ordupload .sectionMeta, .pg-y2upload .sectionMeta{ display:flex; gap:10px; flex-wrap:wrap; }.pg-ordupload .metaPill, .pg-y2upload .metaPill{ display:inline-flex; align-items:center; gap:8px; padding:8px 12px; border-radius:999px; background:#f8fafc; border:1px solid var(--line); color:var(--ink); font-size:13px; font-weight:700; }.pg-ordupload .metaPill .label, .pg-y2upload .metaPill .label{ color:var(--muted); font-weight:600; }.pg-ordupload .tableShell, .pg-y2upload .tableShell{ border:1px solid var(--line); border-radius:16px; overflow:hidden; background:#fff; }.pg-ordupload .table-responsive, .pg-y2upload .table-responsive{ margin-bottom:0; }.pg-ordupload .table thead th, .pg-y2upload .table thead th{ background:#f8fafc !important; color:#111827; font-size:13px; font-weight:800; letter-spacing:.01em; border-bottom:1px solid var(--line); vertical-align:middle; }.pg-ordupload thead.sticky-top th { z-index: 2; }.pg-ordupload .table td, .pg-y2upload .table td{ vertical-align:middle; }.pg-ordupload .table tbody tr.table-danger td { background:var(--danger-soft) !important; }.pg-ordupload .nowrap, .pg-batchsearch .nowrap{ white-space:nowrap; }.pg-ordupload .qty-input { width:78px !important; margin-inline:auto; font-weight:700; }.pg-ordupload .trackingCell { font-weight:700; color:#1f2937; }.pg-ordupload .miniBadge { display:inline-flex; align-items:center; justify-content:center; min-width:58px; padding:6px 10px; border-radius:999px; font-size:12px; font-weight:800; }.pg-ordupload .miniBadge.ok { background:var(--success-soft); color:#127a45; }.pg-ordupload .miniBadge.bad { background:#fff0f0; color:#c92a2a; }.pg-ordupload .actionCard { padding:16px; margin-top:16px; }.pg-ordupload .actionGrid { display:grid; grid-template-columns: 1.2fr 1fr auto; gap:14px; align-items:end; }.pg-ordupload .uploadPanel, .pg-ordupload .clientPanel, .pg-ordupload .submitPanel { background:#fafbff; border:1px solid var(--line); border-radius:16px; padding:14px; }.pg-ordupload .panelTitle, .pg-y2upload .panelTitle{ margin:0 0 8px 0; font-size:14px; font-weight:800; color:var(--ink); }.pg-ordupload .panelSub, .pg-y2upload .panelSub{ margin:0 0 10px 0; font-size:12px; color:var(--muted); }.pg-ordupload .submitPanel { display:flex; align-items:center; justify-content:flex-end; gap:10px; background:transparent; border:none; padding:0; }.pg-ordupload .submitPanel .addButton, .pg-ordupload .submitPanel .btn, .pg-y2upload .submitPanel .addButton, .pg-y2upload .submitPanel .btn{ min-width:150px; }.pg-ordupload .modal .box.heading h1 { font-size:22px; margin-bottom:10px; }.pg-ordupload .inventorySearchBox { background:#fff; border:1px solid var(--line); border-radius:16px; padding:14px; }.pg-ordupload #inventorySearchResultsContainer { margin-top:12px; }.pg-ordupload .form-check { margin-left: 0; }.pg-ordupload .form-check-input, .pg-y2upload .form-check-input{ cursor:pointer; }.pg-ordupload .form-check-label, .pg-y2upload .form-check-label{ cursor:pointer; color:#666; font-size:.9em; }.pg-ordupload .form-check-input:checked + .form-check-label, .pg-y2upload .form-check-input:checked + .form-check-label{ color:#333; font-weight:500; }@media (max-width: 1100px) {.pg-ordupload .actionGrid { grid-template-columns: 1fr; }.pg-ordupload .submitPanel { justify-content:stretch; flex-wrap:wrap; }.pg-ordupload .submitPanel .addButton, .pg-ordupload .submitPanel .btn { width:100%; min-width:0; }}.pg-ordupload .addressBlock { line-height:1.35; white-space:normal; word-break:break-word; }.pg-ordupload .addressBlock .small { font-size:12px; }@media (max-width: 768px) {.pg-ordupload .pageTitleGroup h1 { font-size:22px; }.pageWrap.pg-ordupload { padding:0 10px; }.pg-ordupload .toolbarCard, .pg-ordupload .contentCard, .pg-ordupload .actionCard, .pg-ordupload .pageHero { border-radius:16px; }}/* --------------------------------------------------------------------------
   [2026-10-10] freight_RunQuoteZip（按邮编询价） —— 作用域 .pg-rqzip
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- */.pg-rqzip .miniBtn.sm, .pg-runquote .miniBtn.sm{ padding: 6px 10px; border-radius: 6px; font-size: 13px; }.pg-rqzip, .pg-runquote{ /* 设计统一（2026-10-08）：令牌对齐清关 Portal */ --accent:#A683E3; --accent-dark:#815ac6; --ink:#212529; --muted:#6c757d; --line:#dee2e6; --soft:#f8f9fa; --bg:#fff; }/* body 背景原为 var(--bg)=#fff，与全局 body 白底重复，迁移时删除 */.pageWrap.pg-rqzip { max-width: 1100px; margin: 18px auto; padding: 0 12px; }.pg-rqzip .cardX, .pg-payret .cardX, .pg-freightsuccess .cardX, .pg-freightcheckout .cardX, .pg-runquote .cardX{ background:#fff; border:1px solid var(--line); border-radius:10px; box-shadow: 0 1px 4px rgba(0,0,0,.05); padding: 16px; }.pg-rqzip .h1, .pg-runquote .h1{ font-size: 26px; font-weight: 800; margin:0; color: var(--ink); }.pg-rqzip .sub, .pg-payret .sub, .pg-freightsuccess .sub, .pg-freightcheckout .sub, .pg-runquote .sub{ margin:6px 0 0; color: var(--muted); }.pg-rqzip .sectionTitle, .pg-runquote .sectionTitle{ font-size:18px; font-weight:900; margin: 2px 0 14px; }.pg-rqzip .panel, .pg-runquote .panel{ border:1px solid var(--line); border-radius:10px; padding:16px; }.pg-rqzip .locGrid, .pg-runquote .locGrid{ display:grid; grid-template-columns: 1fr 48px 1fr; gap:14px; align-items:start; }@media (max-width: 900px) {.pg-rqzip .locGrid, .pg-runquote .locGrid{ grid-template-columns:1fr; }.pg-rqzip .midArrow, .pg-runquote .midArrow{ display:none; }}.pg-rqzip .field, .pg-runquote .field{ display:flex; flex-direction:column; gap:6px; margin: 10px 0; }.pg-rqzip label, .pg-runquote label{ font-weight: 800; }/* ===== input with icons ===== */.pg-rqzip .inputWrap, .pg-runquote .inputWrap{ position:relative; }.pg-rqzip .fqInput, .pg-runquote .fqInput{ width:100%; border:1px solid var(--line); border-radius:6px; padding:10px 40px 10px 38px; outline:none; }.pg-rqzip .fqInput:focus, .pg-runquote .fqInput:focus{ border-color: var(--accent); box-shadow: 0 0 0 3px rgba(166,131,227,.18); }.pg-rqzip .iconLeft, .pg-rqzip .iconRight, .pg-runquote .iconLeft, .pg-runquote .iconRight{ position:absolute; top:50%; transform:translateY(-50%); width:18px; height:18px; opacity:.75; }.pg-rqzip .iconLeft, .pg-runquote .iconLeft{ left:12px; }.pg-rqzip .iconRight, .pg-runquote .iconRight{ right:12px; cursor:pointer; display:none; }/* ===== dropdown ===== */.pg-rqzip .dd, .pg-runquote .dd{ position:absolute; left:0; right:0; top: calc(100% + 8px); background:#fff; border:1px solid var(--line); border-radius:8px; box-shadow: 0 2px 8px rgba(0,0,0,.08); overflow:hidden; z-index: 30; display:none; }.pg-rqzip .dd.open, .pg-runquote .dd.open{ display:block; }.pg-rqzip .ddItem, .pg-runquote .ddItem{ display:flex; gap:10px; padding:12px 12px; cursor:pointer; align-items:flex-start; }.pg-rqzip .ddItem:hover, .pg-runquote .ddItem:hover{ background: rgba(166,131,227,.10); }.pg-rqzip .ddIcon, .pg-runquote .ddIcon{ width:18px; height:18px; margin-top:2px; opacity:.75; flex: 0 0 auto; }.pg-rqzip .ddMain, .pg-runquote .ddMain{ flex:1; min-width:0; }.pg-rqzip .ddLine1, .pg-runquote .ddLine1{ font-weight: 900; color: var(--ink); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }.pg-rqzip .ddLine2, .pg-runquote .ddLine2{ color: var(--muted); margin-top:2px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; font-size: 13px; }.pg-rqzip .ddChevron, .pg-runquote .ddChevron{ width:18px; height:18px; opacity:.65; margin-top:2px; flex:0 0 auto; }.pg-rqzip .midArrow, .pg-runquote .midArrow{ display:flex; justify-content:center; align-items:center; margin-top: 32px; }.pg-rqzip .midArrow svg, .pg-runquote .midArrow svg{ opacity:.6; }.pg-rqzip .actions, .pg-runquote .actions{ display:flex; gap:10px; flex-wrap:wrap; margin-top: 14px; justify-content:flex-end; }/* ===== ready pickup row ===== */.pg-rqzip .readyGrid, .pg-runquote .readyGrid{ display:grid; grid-template-columns: 220px 60px 160px 40px; gap:10px; align-items:center; }.pg-rqzip .readyAfter, .pg-runquote .readyAfter{ color: var(--muted); font-weight: 800; text-align:center; }.pg-rqzip .readyTz, .pg-runquote .readyTz{ color: var(--muted); font-weight: 900; }@media (max-width: 900px) {.pg-rqzip .readyGrid, .pg-runquote .readyGrid{ grid-template-columns: 1fr; }.pg-rqzip .readyAfter, .pg-runquote .readyAfter{ text-align:left; }}.pg-rqzip .cargoHead, .pg-runquote .cargoHead{ display:flex; justify-content:space-between; align-items:center; gap:10px; margin-bottom:10px; }.pg-rqzip .cargoRow, .pg-runquote .cargoRow{ border:1px solid var(--line); border-radius:10px; padding:12px; margin:10px 0; }.pg-rqzip .cargoGrid, .pg-runquote .cargoGrid{ display:grid; grid-template-columns: minmax(120px, 1.15fr) minmax(90px, 0.8fr) minmax(110px, 1fr) minmax(110px, 1fr) minmax(110px, 1fr) minmax(110px, 1fr) 56px; gap:10px; align-items:end; width:100%; }.pg-rqzip .cargoLabel, .pg-runquote .cargoLabel{ font-size:12px; color: var(--muted); font-weight:900; margin-bottom:6px; }.pg-rqzip .cargoCell .fqInput, .pg-runquote .cargoCell .fqInput{ padding-left:12px; padding-right:12px; }.pg-rqzip .cargoRemove, .pg-runquote .cargoRemove{ width:44px; height:44px; border:1px solid var(--line); border-radius:6px; background:#fff; cursor:pointer; font-weight:900; }.pg-rqzip .cargoRemove:hover, .pg-runquote .cargoRemove:hover{ background:#f8f9fa; }@media (max-width: 900px) {.pg-rqzip .cargoGrid, .pg-runquote .cargoGrid{ grid-template-columns: 1fr 1fr; }}/* ===== Quotes panel ===== */.pg-rqzip .quotePanelHead, .pg-runquote .quotePanelHead{ display:flex; justify-content:space-between; align-items:center; gap:10px; margin:0 0 10px; }.pg-rqzip .quoteStatus, .pg-runquote .quoteStatus{ color: var(--muted); font-weight:800; margin: 6px 0 10px; }.pg-rqzip .quoteTableWrap, .pg-runquote .quoteTableWrap{ border:1px solid var(--line); border-radius:10px; overflow: visible; /* ✅ 让 tooltip 可以溢出显示 */ background:#fff; position: relative; /* ✅ 给 tooltip 的 z-index 一个稳定上下文 */ }.pg-rqzip table.quoteTable, .pg-runquote table.quoteTable{ width:100%; border-collapse:collapse; table-layout:fixed; }.pg-rqzip .quoteTable th, .pg-rqzip .quoteTable td, .pg-runquote .quoteTable th, .pg-runquote .quoteTable td{ padding:10px 10px; border-bottom:1px solid var(--line); font-size:14px; word-break:break-word; vertical-align: top; /* ✅ 原来是 middle */ }/* Action 列：按钮靠右 + 顶部对齐 */.pg-rqzip .quoteTable td:last-child, .pg-runquote .quoteTable td:last-child{ vertical-align: top; }.pg-rqzip .quoteTable th, .pg-runquote .quoteTable th{ background: #fff; box-shadow: 0 2px 0 rgba(0,0,0,.08); text-align:left; font-weight:900; color: var(--ink); }.pg-rqzip .quoteTable tr:last-child td, .pg-runquote .quoteTable tr:last-child td{ border-bottom:none; }.pg-rqzip .quotePill, .pg-runquote .quotePill{ display:inline-block; padding:4px 10px; border-radius:999px; font-weight:900; font-size:12px; background: rgba(166,131,227,.14); color: var(--ink); border:1px solid rgba(166,131,227,.30); }.pg-rqzip .quoteMoney, .pg-runquote .quoteMoney{ font-weight:900; font-size:15px; }.pg-rqzip .quoteMuted, .pg-runquote .quoteMuted{ color: var(--muted); font-weight:800; font-size:13px; }.pg-rqzip table.quoteTable th:last-child, .pg-runquote table.quoteTable th:last-child{ text-align: center !important; padding-left: 10px; padding-right: 10px; }.pg-rqzip table.quoteTable td:last-child, .pg-runquote table.quoteTable td:last-child{ text-align: center !important; padding-left: 10px; padding-right: 10px; }.pg-rqzip .quoteBtnRow, .pg-runquote .quoteBtnRow{ display: inline-flex; /* 关键：不要用 flex + width:100% */ justify-content: center; align-items: center; /* 想顶对齐就改成 flex-start */ gap: 8px; flex-wrap: nowrap; }.pg-rqzip .miniBtn, .pg-quotehist .miniBtn, .pg-runquote .miniBtn{ border:1px solid var(--line); background:#fff; border-radius:6px; padding:8px 10px; cursor:pointer; font-weight:900; }.pg-rqzip .miniBtn:hover, .pg-quotehist .miniBtn:hover, .pg-runquote .miniBtn:hover{ background:#f8f9fa; }.pg-rqzip .miniBtn.primary, .pg-runquote .miniBtn.primary{ border-color: rgba(166,131,227,.55); box-shadow: 0 0 0 3px rgba(166,131,227,.12); }/* ===== Quote pills & tooltips ===== */.pg-rqzip .pill.soft, .pg-runquote .pill.soft{ background: rgba(166,131,227,.12); border-color: rgba(166,131,227,.30); }.pg-rqzip .pill.good, .pg-runquote .pill.good{ background: rgba(46,204,113,.12); border-color: rgba(46,204,113,.28); }.pg-rqzip .pill.warn, .pg-runquote .pill.warn{ background: rgba(241,196,15,.14); border-color: rgba(241,196,15,.30); }.pg-rqzip .tip .tipTitle, .pg-runquote .tip .tipTitle{ font-weight:900; margin-bottom:4px; }.pg-rqzip .tip .tipSub, .pg-runquote .tip .tipSub{ opacity:.9; }/* ===== service tooltip ===== */.pg-rqzip .tipWrap, .pg-runquote .tipWrap{ position:relative; display:inline-flex; align-items:center; }/* ✅ 默认：tooltip 在下面 */.pg-rqzip .tipWrap .tip, .pg-runquote .tipWrap .tip{ position:absolute; left:50%; top: calc(100% + 8px); bottom: auto; transform: translateX(-50%); min-width: 260px; max-width: 380px; background:#212529; color:#fff; padding:10px 12px; border-radius:8px; font-size:12px; line-height:1.35; box-shadow: 0 4px 16px rgba(0,0,0,.18); opacity:0; pointer-events:none; transition: opacity .15s ease; z-index: 9999; }/* ✅ 只要加了 tip-up：tooltip 在上面 */.pg-rqzip .tipWrap.tip-up .tip, .pg-runquote .tipWrap.tip-up .tip{ top: auto; bottom: calc(100% + 8px); }.pg-rqzip .tipWrap:hover .tip, .pg-runquote .tipWrap:hover .tip{ opacity: 1; }/* ===== Multi-select accessorial dropdown ===== */.pg-rqzip .msel, .pg-runquote .msel{ position:relative; }.pg-rqzip .mselBtn, .pg-runquote .mselBtn{ width:100%; border:1px solid var(--line); border-radius:6px; padding:10px 12px; background:#fff; cursor:pointer; font-weight:600; display:flex; justify-content:space-between; align-items:center; }.pg-rqzip .mselBtn:focus, .pg-runquote .mselBtn:focus{ outline:none; border-color: var(--accent); box-shadow: 0 0 0 3px rgba(166,131,227,.18); }.pg-rqzip .mselChevron, .pg-runquote .mselChevron{ opacity:.7; margin-left:10px; }.pg-rqzip .mselMenu, .pg-runquote .mselMenu{ position:absolute; left:0; right:0; top: calc(100% + 8px); background:#fff; border:1px solid var(--line); border-radius:8px; box-shadow: 0 2px 8px rgba(0,0,0,.08); z-index: 50; display:none; max-height: 260px; overflow:auto; padding:6px 0; }.pg-rqzip .msel.open .mselMenu, .pg-runquote .msel.open .mselMenu{ display:block; }.pg-rqzip .mselItem, .pg-runquote .mselItem{ display:flex; align-items:center; gap:10px; padding:10px 12px; cursor:pointer; }.pg-rqzip .mselItem:hover, .pg-runquote .mselItem:hover{ background: rgba(166,131,227,.10); }.pg-rqzip .mselItem input, .pg-runquote .mselItem input{ width:16px; height:16px; }.pg-rqzip .mselItem .mselText, .pg-runquote .mselItem .mselText{ font-weight:600; }.pg-rqzip .addrHint, .pg-runquote .addrHint{ margin-top: 6px; color: var(--muted); font-size: 12px; font-weight: 800; }.pg-rqzip .modeToggle, .pg-runquote .modeToggle{ display:flex; justify-content:flex-end; gap:10px; margin: 0 0 10px; }.pg-rqzip .modeBtn.active, .pg-runquote .modeBtn.active{ border-color: rgba(166,131,227,.55); box-shadow: 0 0 0 3px rgba(166,131,227,.12); }.pg-rqzip .addrModeDetail .addrPaste, .pg-runquote .addrModeDetail .addrPaste{ display:none; }.pg-rqzip .addrModePaste .addrDetail, .pg-runquote .addrModePaste .addrDetail{ display:none; }.pg-rqzip .requiredMark::after, .pg-runquote .requiredMark::after{ content:" *"; color:#d33; font-weight:900; }.pg-rqzip .subFieldLabel, .pg-runquote .subFieldLabel{ font-size:12px; color:var(--muted); font-weight:900; margin-bottom:6px; }.pg-rqzip .fqInput.inputError, .pg-runquote .fqInput.inputError{ border-color:#d33 !important; box-shadow:0 0 0 3px rgba(211,51,51,.12) !important; background:rgba(211,51,51,.03) !important; }.pg-rqzip .fqInput.inputError:focus, .pg-runquote .fqInput.inputError:focus{ border-color:#d33 !important; box-shadow:0 0 0 3px rgba(211,51,51,.18) !important; }.pg-rqzip .cargoUnitBar, .pg-runquote .cargoUnitBar{ display:flex; justify-content:center; gap:12px; margin: 6px 0 14px; flex-wrap:wrap; }.pg-rqzip .cargoUnitChoice, .pg-runquote .cargoUnitChoice{ display:inline-flex; align-items:center; gap:8px; padding:10px 14px; border:1px solid var(--line); border-radius:6px; background:#fff; cursor:pointer; font-weight:800; user-select:none; }.pg-rqzip .cargoUnitChoice:hover, .pg-runquote .cargoUnitChoice:hover{ background:#f8f9fa; }.pg-rqzip .cargoUnitChoice.active, .pg-runquote .cargoUnitChoice.active{ border-color: rgba(166,131,227,.55); box-shadow: 0 0 0 3px rgba(166,131,227,.12); }.pg-rqzip .cargoUnitChoice input, .pg-runquote .cargoUnitChoice input{ display:none; }.pg-rqzip .cargoUnitTick, .pg-runquote .cargoUnitTick{ width:18px; height:18px; border:1px solid var(--line); border-radius:999px; display:inline-flex; align-items:center; justify-content:center; font-size:12px; line-height:1; background:#fff; }.pg-rqzip .cargoUnitChoice.active .cargoUnitTick, .pg-runquote .cargoUnitChoice.active .cargoUnitTick{ border-color: var(--accent); background: rgba(166,131,227,.14); }.pg-rqzip .quoteLoadingLine, .pg-runquote .quoteLoadingLine{ display:flex; align-items:center; gap:8px; flex-wrap:wrap; line-height:1.8; }.pg-rqzip .quoteSpinner, .pg-runquote .quoteSpinner{ width:15px; height:15px; border:2px solid rgba(166,131,227,.22); border-top-color:#A683E3; border-radius:50%; display:inline-block; animation: quoteSpin .75s linear infinite; flex:0 0 auto; }@keyframes quoteSpin {
to { transform: rotate(360deg); }
}.pg-rqzip .quoteDoneIcon, .pg-runquote .quoteDoneIcon{ display:inline-flex; align-items:center; justify-content:center; width:18px; height:18px; border-radius:999px; background:rgba(46,204,113,.14); border:1px solid rgba(46,204,113,.28); font-size:12px; font-weight:900; }/* --------------------------------------------------------------------------
   [2026-10-10] home_CustomsClearanceClient（清关客户端首页） —— 作用域 .pg-ccclient
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- */.pg-ccclient { --customs-primary: #A683E3; --customs-primary-dark: #8461c4; --customs-primary-deep: #6f4eb1; --customs-soft: #f5f0fc; --customs-soft-strong: #ece2f8; --customs-border: #e5d8f4; --customs-text: #272333; --customs-muted: #70697b; --customs-danger: #b42318; --customs-danger-soft: #fff0ee; }/* body 底色单独保留（见下方） */.customs-dashboard.pg-ccclient { max-width: 1240px; margin: 0 auto; padding: 22px 18px 42px; color: var(--customs-text); }.pg-ccclient .customs-hero { display: flex; justify-content: space-between; align-items: center; gap: 24px; padding: 28px 30px; color: #fff; background: radial-gradient( circle at right top, rgba(255, 255, 255, .25), transparent 34% ), linear-gradient( 135deg, var(--customs-primary-dark), var(--customs-primary) ); border-radius: 20px; box-shadow: 0 15px 34px rgba(166, 131, 227, .26); }.pg-ccclient .eyebrow { margin-bottom: 7px; font-size: 11px; font-weight: 900; letter-spacing: .14em; opacity: .80; }.pg-ccclient .eyebrow.purple { color: var(--customs-primary-deep); opacity: 1; }.pg-ccclient .customs-hero h1 { margin: 0; font-size: clamp(28px, 4vw, 43px); line-height: 1.14; }.pg-ccclient .customs-hero p { margin: 11px 0 0; color: rgba(255, 255, 255, .88); font-size: 15px; }.pg-ccclient .hero-account { min-width: 235px; padding: 16px 18px; background: rgba(255, 255, 255, .15); border: 1px solid rgba(255, 255, 255, .25); border-radius: 14px; backdrop-filter: blur(8px); }.pg-ccclient .hero-account span { color: rgba(255, 255, 255, .70); font-size: 11px; }.pg-ccclient .hero-account small { margin-top: 9px; color: rgba(255, 255, 255, .82); font-size: 11px; }.pg-ccclient .unread-banner { display: flex; align-items: center; gap: 13px; margin-top: 16px; padding: 14px 17px; color: #6f4eb1; background: var(--customs-soft); border: 1px solid var(--customs-border); border-radius: 14px; }.pg-ccclient .unread-banner[hidden] { display: none; }.pg-ccclient .message-symbol { flex: 0 0 36px; width: 36px; height: 36px; display: grid; place-items: center; color: #fff; background: var(--customs-primary); border-radius: 50%; font-size: 18px; font-weight: 900; }.pg-ccclient .unread-banner strong, .pg-ccclient .unread-banner p { display: block; }.pg-ccclient .unread-banner p { margin: 3px 0 0; color: var(--customs-muted); font-size: 12px; }.pg-ccclient .overview-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 14px; margin-top: 16px; }.pg-ccclient .overview-card { min-height: 145px; padding: 20px; background: #fff; border: 1px solid var(--customs-border); border-radius: 17px; box-shadow: 0 7px 22px rgba(44, 35, 58, .055); }.pg-ccclient .overview-card.amount-card { background: linear-gradient(145deg, #fff, var(--customs-soft)); }.pg-ccclient .overview-card.has-unread { border-color: var(--customs-primary); box-shadow: 0 9px 24px rgba(166, 131, 227, .18); }.pg-ccclient .card-label { color: var(--customs-muted); font-size: 13px; font-weight: 700; }.pg-ccclient .card-value { margin-top: 13px; color: var(--customs-text); font-size: 38px; font-weight: 900; line-height: 1; }.pg-ccclient .card-value.money { color: var(--customs-primary-deep); font-size: 32px; }.pg-ccclient .card-hint { margin-top: 13px; color: var(--customs-muted); font-size: 11px; line-height: 1.4; }.pg-ccclient .status-panel { margin-top: 16px; padding: 23px 24px 26px; background: #fff; border: 1px solid var(--customs-border); border-radius: 17px; box-shadow: 0 7px 22px rgba(44, 35, 58, .055); }.pg-ccclient .heading-actions > span { color: var(--customs-muted); font-size: 11px; }.pg-ccclient .heading-actions button, .pg-ccclient .heading-actions a { display: inline-flex; align-items: center; gap: 8px; min-height: 38px; padding: 8px 13px; border-radius: 10px; font-size: 12px; font-weight: 800; cursor: pointer; }.pg-ccclient .heading-actions button { color: var(--customs-primary-deep); background: var(--customs-soft); border: 1px solid var(--customs-border); }.pg-ccclient .heading-actions a { color: #fff; background: var(--customs-primary); border: 1px solid var(--customs-primary); text-decoration: none; }.pg-ccclient .heading-actions button:hover { background: var(--customs-soft-strong); }.pg-ccclient .heading-actions a:hover { color: #fff; background: var(--customs-primary-dark); }.pg-ccclient .status-grid { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 12px; margin-top: 20px; }.pg-ccclient .status-card { min-height: 103px; padding: 16px; background: #fff; border: 1px solid var(--customs-border); border-radius: 14px; }.pg-ccclient .status-name { min-height: 34px; color: var(--customs-muted); font-size: 12px; font-weight: 700; line-height: 1.35; }.pg-ccclient .status-count { margin-top: 8px; color: var(--customs-primary-deep); font-size: 27px; font-weight: 900; line-height: 1; }.pg-ccclient .status-card.nonzero { background: linear-gradient(145deg, #fff 35%, var(--customs-soft)); border-color: #d6c3ee; }.pg-ccclient .dashboard-error { margin-top: 14px; padding: 13px 15px; color: var(--customs-danger); background: var(--customs-danger-soft); border: 1px solid #f2c7c2; border-radius: 12px; font-size: 12px; }.pg-ccclient .dashboard-error[hidden] { display: none; }.pg-ccclient .dashboard-error strong, .pg-ccclient .dashboard-error span { display: block; }.pg-ccclient .dashboard-error span { margin-top: 4px; }.pg-ccclient .loading-card::after, .pg-ccclient .loading-value::after { content: ""; position: absolute; inset: 0; background: linear-gradient( 90deg, rgba(166, 131, 227, .04), rgba(166, 131, 227, .15), rgba(166, 131, 227, .04) ); animation: customsShimmer 1.2s infinite; }@keyframes customsShimmer {
from { transform: translateX(-100%); }
to { transform: translateX(100%); }
}@media (max-width: 1000px) {.pg-ccclient .overview-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }}@media (max-width: 680px) {.customs-dashboard.pg-ccclient { padding: 12px 10px 28px; }.pg-ccclient .customs-hero, .pg-ccclient .section-heading { align-items: stretch; flex-direction: column; }.pg-ccclient .customs-hero { padding: 22px 18px; }.pg-ccclient .overview-grid { grid-template-columns: 1fr; }.pg-ccclient .heading-actions a, .pg-ccclient .heading-actions button { justify-content: center; }}@media (prefers-reduced-motion: reduce) {}/* --------------------------------------------------------------------------
   [2026-10-10] warehouseTools_SeparateProduct（分货/拆分商品） —— 作用域 .pg-sepprod
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- */.scanPageWrap.pg-sepprod { width: 96%; margin: 15px auto 40px; }.pg-sepprod .scanIndexBox { display: flex; flex-direction: column; justify-content: center; align-items: center; background: #f8f9fa; border: 1px solid #dee2e6; }.pg-sepprod #skuIndex { font-size: 6.5rem; line-height: 1; font-weight: 800; margin: 0; color: #0d6efd; }.pg-sepprod #skuInput { width: 100%; height: 76px; border: 2px solid #ced4da; border-radius: 10px; padding: 10px 16px; font-size: 2.2rem; font-weight: 700; text-transform: uppercase; outline: none; }.pg-sepprod #skuInput:focus { border-color: #0d6efd; box-shadow: 0 0 0 4px rgba(13,110,253,0.15); }.pg-sepprod .scanStatValue { font-size: 1.45rem; font-weight: 800; color: #212529; word-break: break-all; }.pg-sepprod .scanActionBar { display: flex; justify-content: space-between; align-items: center; gap: 12px; flex-wrap: wrap; margin-bottom: 12px; }.pg-sepprod .scanActionLeft, .pg-sepprod .scanActionRight { display: flex; gap: 10px; flex-wrap: wrap; align-items: center; }.pg-sepprod .scanQtyInput { width: 100px; height: 42px; border: 1px solid #ced4da; border-radius: 8px; text-align: center; font-size: 1.15rem; font-weight: 700; }.pg-sepprod .scanQtyInput:focus { outline: none; border-color: #0d6efd; box-shadow: 0 0 0 3px rgba(13,110,253,0.12); }.pg-sepprod .scanRowFlash { animation: scanRowFlashAnim 0.7s ease; }@keyframes scanRowFlashAnim {
0% { background-color: #d1e7dd; }
100% { background-color: transparent; }
}@media (max-width: 1200px) and (min-width: 769px) {.pg-sepprod .scanStatBox { grid-column: auto; grid-template-columns: 1fr; }.pg-sepprod #skuInput { height: 76px; font-size: 2rem; }.pg-sepprod #skuIndex { font-size: 5.5rem; }}@media (max-width: 768px) {.scanPageWrap.pg-sepprod { width: 98%; margin-top: 10px; }.pg-sepprod #skuIndex { font-size: 5rem; }.pg-sepprod #skuInput { height: 72px; font-size: 1.7rem; }.pg-sepprod .scanStatBox .scanStatItem:last-child { grid-column: 1 / -1; }.pg-sepprod .scanActionLeft, .pg-sepprod .scanActionRight { width: 100%; }.pg-sepprod .scanActionLeft .addButton, .pg-sepprod .scanActionRight .addButton { flex: 1; min-width: 130px; }.pg-sepprod .scanTable td { display: grid; grid-template-columns: 120px 1fr; gap: 10px; border: none; padding: 8px 4px; white-space: normal; }.pg-sepprod .scanQtyInput { width: 130px; height: 46px; }.pg-sepprod .deleteButton { width: 130px; min-height: 42px; }}/* --------------------------------------------------------------------------
   [2026-10-10] warehouseManager_CustomsBrokers（清关行管理，纯 CSS） —— 作用域 .pg-brokers
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- */.customs-portal.pg-brokers { padding: 1rem; }.pg-brokers .customs-filter-grid, .pg-bonds .customs-filter-grid, .pg-freightmgmt .customs-filter-grid, .pg-portal .customs-filter-grid{ display: grid; grid-template-columns: repeat(10, minmax(125px, 1fr)); gap: .65rem; align-items: end; }.pg-brokers .customs-filter-wide, .pg-bonds .customs-filter-wide, .pg-histinb .customs-filter-wide, .pg-histrec .customs-filter-wide, .pg-freightmgmt .customs-filter-wide, .pg-orderlist .customs-filter-wide, .pg-portal .customs-filter-wide{ grid-column: span 2; }.pg-brokers .customs-status-tabs, .pg-bonds .customs-status-tabs, .pg-freightmgmt .customs-status-tabs, .pg-orderlist .customs-status-tabs, .pg-portal .customs-status-tabs{ display: flex; flex-wrap: wrap; gap: .4rem; }.pg-brokers .customs-status-tabs .btn, .pg-bonds .customs-status-tabs .btn, .pg-freightmgmt .customs-status-tabs .btn, .pg-orderlist .customs-status-tabs .btn, .pg-portal .customs-status-tabs .btn{ position: relative; isolation: isolate; transition: color .15s ease, background-color .15s ease, border-color .15s ease, transform .15s ease; }.pg-brokers .customs-status-tabs .btn.active, .pg-bonds .customs-status-tabs .btn.active, .pg-freightmgmt .customs-status-tabs .btn.active, .pg-orderlist .customs-status-tabs .btn.active, .pg-portal .customs-status-tabs .btn.active{ z-index: 2; color: #fff !important; background: var(--customs-purple) !important; border-color: var(--customs-purple-dark) !important; font-weight: 900; transform: translateY(-1px); }.pg-brokers .customs-status-tabs .btn.active::after, .pg-bonds .customs-status-tabs .btn.active::after, .pg-freightmgmt .customs-status-tabs .btn.active::after, .pg-orderlist .customs-status-tabs .btn.active::after, .pg-portal .customs-status-tabs .btn.active::after{ content: ""; position: absolute; inset: -5px; z-index: -1; border: 2px solid rgba(129, 90, 198, .72); border-radius: inherit; opacity: .35; pointer-events: none; transform: scale(1); animation: customsActiveTabBreathing 1.7s ease-in-out infinite; }@keyframes customsActiveTabBreathing {
0%, 100% { opacity: .28; transform: scale(1); }
50% { opacity: .95; transform: scale(1.055); }
}@media (prefers-reduced-motion: reduce) {.pg-brokers .customs-status-tabs .btn.active::after, .pg-bonds .customs-status-tabs .btn.active::after, .pg-freightmgmt .customs-status-tabs .btn.active::after, .pg-orderlist .customs-status-tabs .btn.active::after, .pg-portal .customs-status-tabs .btn.active::after{ animation: none; opacity: .72; }}.pg-brokers .customs-table-wrap, .pg-bonds .customs-table-wrap, .pg-billprob .customs-table-wrap, .pg-billtpl .customs-table-wrap, .pg-freightmgmt .customs-table-wrap, .pg-orderlist .customs-table-wrap, .pg-portal .customs-table-wrap{ min-height: 280px; max-height: calc(100vh - 330px); overflow: auto; border-radius: 8px; }.pg-brokers .customs-table-wrap table { min-width: 1080px; margin-bottom: 0; border-collapse: separate; border-spacing: 0; }.pg-brokers .customs-table-wrap thead th, .pg-bonds .customs-table-wrap thead th, .pg-billprob .customs-table-wrap thead th, .pg-histinb .customs-table-wrap thead th, .pg-histrec .customs-table-wrap thead th, .pg-msgboard .customs-table-wrap thead th, .pg-histmsg .customs-table-wrap thead th, .pg-billtpl .customs-table-wrap thead th, .pg-packerperf .customs-table-wrap thead th, .pg-freightmgmt .customs-table-wrap thead th, .pg-orderlist .customs-table-wrap thead th, .pg-portal .customs-table-wrap thead th{ position: sticky; top: 0; z-index: 5; white-space: nowrap; vertical-align: middle; background: #fff; box-shadow: 0 2px 0 rgba(0, 0, 0, .08); }.pg-brokers .customs-status-badge, .pg-bonds .customs-status-badge, .pg-portal .customs-status-badge{ display: inline-flex; align-items: center; padding: .25rem .55rem; border-radius: 999px; font-size: .78rem; font-weight: 700; white-space: nowrap; }.pg-brokers .status-active, .pg-bonds .status-active{ background: #d1e7dd; color: #0f5132; }.pg-brokers .status-inactive, .pg-bonds .status-inactive{ background: #e9ecef; color: #343a40; }.pg-brokers .customs-client-menu, .pg-bonds .customs-client-menu, .pg-histinb .customs-client-menu, .pg-histrec .customs-client-menu, .pg-billtpl .customs-client-menu, .pg-freightmgmt .customs-client-menu, .pg-orderlist .customs-client-menu, .pg-portal .customs-client-menu{ min-width: 260px; max-height: 330px; overflow: auto; }.customs-portal.pg-brokers input[type="checkbox"] { width: 19px; height: 19px; cursor: pointer; }@media (max-width: 1400px) {.pg-brokers .customs-filter-grid, .pg-bonds .customs-filter-grid, .pg-freightmgmt .customs-filter-grid, .pg-orderlist .customs-filter-grid, .pg-portal .customs-filter-grid{ grid-template-columns: repeat(6, minmax(125px, 1fr)); }}@media (max-width: 768px) {.customs-portal.pg-brokers { padding: .5rem; }.pg-brokers .customs-filter-grid, .pg-bonds .customs-filter-grid, .pg-billprob .customs-filter-grid, .pg-histinb .customs-filter-grid, .pg-histrec .customs-filter-grid, .pg-packerperf .customs-filter-grid, .pg-freightmgmt .customs-filter-grid, .pg-orderlist .customs-filter-grid, .pg-portal .customs-filter-grid{ grid-template-columns: 1fr 1fr; }.pg-brokers .customs-filter-wide, .pg-bonds .customs-filter-wide, .pg-histinb .customs-filter-wide, .pg-histrec .customs-filter-wide, .pg-freightmgmt .customs-filter-wide, .pg-orderlist .customs-filter-wide, .pg-portal .customs-filter-wide{ grid-column: span 2; }}/* Broker form modal is controlled by this page itself, the same
       idiom as the customs portal modals (no bootstrap JS needed). */.pg-brokers body.customs-modal-open, .pg-bonds body.customs-modal-open, .pg-portal body.customs-modal-open{ overflow: hidden !important; }.pg-brokers #brokerModal { z-index: 1055; overflow: hidden; padding: 0 !important; }.pg-brokers #brokerModal.customs-modal-visible { display: block !important; }.pg-brokers #brokerModal .modal-dialog { height: calc(100dvh - 2rem); max-height: calc(100dvh - 2rem); margin: 1rem auto; }.pg-brokers #brokerModal .modal-content { height: 100%; max-height: 100%; overflow: hidden; }.pg-brokers #brokerForm { display: flex; flex-direction: column; width: 100%; height: 100%; min-height: 0; overflow: hidden; }.pg-brokers #brokerModal .modal-header, .pg-brokers #brokerModal .modal-footer { flex: 0 0 auto; background: #fff; }.pg-brokers #brokerModal .modal-body { flex: 1 1 auto; min-height: 0; overflow-y: auto !important; overscroll-behavior: contain; padding-bottom: 2rem; scroll-padding-bottom: 8rem; }.pg-brokers #brokerModal .modal-footer { border-top: 1px solid var(--customs-border); box-shadow: 0 -3px 10px rgba(0, 0, 0, .06); }@media (max-width: 768px) {.pg-brokers #brokerModal .modal-dialog { width: calc(100vw - 1rem); height: calc(100dvh - 1rem); max-height: calc(100dvh - 1rem); margin: .5rem auto; }}/* --------------------------------------------------------------------------
   [2026-10-10] warehouseManager_CustomsBonds（Bond 管理，纯 CSS） —— 作用域 .pg-bonds
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- */.customs-portal.pg-bonds { padding: 1rem; }@keyframes customsActiveTabBreathing {
0%, 100% { opacity: .28; transform: scale(1); }
50% { opacity: .95; transform: scale(1.055); }
}@media (prefers-reduced-motion: reduce) {}.pg-bonds .customs-table-wrap table { min-width: 1560px; margin-bottom: 0; border-collapse: separate; border-spacing: 0; }.customs-portal.pg-bonds input[type="checkbox"] { width: 19px; height: 19px; cursor: pointer; }@media (max-width: 1400px) {}@media (max-width: 768px) {.customs-portal.pg-bonds { padding: .5rem; }}/* Bond form modal is controlled by this page itself, the same
       idiom as the customs portal modals (no bootstrap JS needed). */.pg-bonds #bondModal { z-index: 1055; overflow: hidden; padding: 0 !important; }.pg-bonds #bondModal.customs-modal-visible { display: block !important; }.pg-bonds #bondModal .modal-dialog { height: calc(100dvh - 2rem); max-height: calc(100dvh - 2rem); margin: 1rem auto; }.pg-bonds #bondModal .modal-content { height: 100%; max-height: 100%; overflow: hidden; }.pg-bonds #bondForm { display: flex; flex-direction: column; width: 100%; height: 100%; min-height: 0; overflow: hidden; }.pg-bonds #bondModal .modal-header, .pg-bonds #bondModal .modal-footer { flex: 0 0 auto; background: #fff; }.pg-bonds #bondModal .modal-body { flex: 1 1 auto; min-height: 0; overflow-y: auto !important; overscroll-behavior: contain; padding-bottom: 2rem; scroll-padding-bottom: 8rem; }.pg-bonds #bondModal .modal-footer { border-top: 1px solid var(--customs-border); box-shadow: 0 -3px 10px rgba(0, 0, 0, .06); }@media (max-width: 768px) {.pg-bonds #bondModal .modal-dialog { width: calc(100vw - 1rem); height: calc(100dvh - 1rem); max-height: calc(100dvh - 1rem); margin: .5rem auto; }}/* --------------------------------------------------------------------------
   [2026-10-10] setting_PalletNumbers（托盘号管理） —— 作用域 .pg-palletnums
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- */.pg-palletnums .pallet-table { table-layout: fixed; width: 100%; }.pg-palletnums .pallet-table th, .pg-palletnums .pallet-table td { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; vertical-align: middle; }.pg-palletnums .pallet-table td:nth-child(3), .pg-palletnums .pallet-table td:nth-child(4) { white-space: normal; word-break: break-word; }.pg-palletnums .pallet-toolbar-row { width: 100%; display: flex; justify-content: space-between; align-items: center; gap: 12px; margin-bottom: 10px; }.pg-palletnums .pallet-action-area { position: relative; display: flex; justify-content: flex-end; align-items: center; gap: 10px; }.pg-palletnums .pallet-selected-count { color: #666; font-size: 14px; }.pg-palletnums .pallet-dropdown-menu { position: absolute; top: 42px; right: 0; min-width: 180px; background: #fff; border: 1px solid #ddd; border-radius: 8px; box-shadow: 0 6px 16px rgba(0, 0, 0, 0.12); z-index: 1000; display: none; overflow: hidden; }.pg-palletnums .pallet-dropdown-menu.show { display: block; }.pg-palletnums .pallet-dropdown-item { width: 100%; border: none; background: #fff; text-align: left; padding: 10px 14px; cursor: pointer; font-size: 14px; }.pg-palletnums .pallet-dropdown-item:hover { background: #f5f5f5; }.pg-palletnums .pallet-dropdown-item.danger { color: #c62828; }.pg-palletnums .pallet-checkbox-col { width: 64px; text-align: center; }.pg-palletnums .pallet-table th.pallet-checkbox-col, .pg-palletnums .pallet-table td.pallet-checkbox-col { text-align: center; vertical-align: middle; }.pg-palletnums .pallet-row-checkbox, .pg-palletnums #selectAllPalletsCheckbox { width: 20px; height: 20px; cursor: pointer; }.pg-palletnums #palletLoading { text-align: center; padding: 1em; display: none; }.pg-palletnums .pallet-empty-row td { text-align: center; color: #888; padding: 20px 0; }.pg-palletnums .addButtonDisabled, .pg-palletnums .addButton:disabled { opacity: 0.5; cursor: not-allowed; }/* ===== 清关 Portal 设计系统（2026-10-08 业主裁定：整页套用 Portal 样式） ===== */.customs-portal.pg-palletnums { padding: 1rem; }.pg-palletnums .singleColTexInput, .pg-settings .singleColTexInput, .pg-packerperf .singleColTexInput{ border: 1px solid var(--customs-border); border-radius: 6px; padding: .375rem .5rem; font-size: .875rem; }.pg-palletnums .singleColTexInput:focus, .pg-settings .singleColTexInput:focus, .pg-packerperf .singleColTexInput:focus{ border-color: var(--customs-purple); box-shadow: 0 0 0 3px rgba(166, 131, 227, .18); outline: none; }.pg-palletnums button.addButton, .pg-msgboard button.addButton, .pg-histmsg button.addButton, .pg-settings button.addButton, .pg-accessctl button.addButton, .pg-packerperf button.addButton, .pg-useraccounts button.addButton{ margin: 0; min-height: 0; font-size: .875rem; padding: .4rem .9rem; border-radius: 6px; background: var(--customs-purple); border: 1px solid var(--customs-purple); color: #fff; font-weight: 700; }.pg-palletnums button.addButton:hover, .pg-msgboard button.addButton:hover, .pg-histmsg button.addButton:hover, .pg-settings button.addButton:hover, .pg-accessctl button.addButton:hover, .pg-packerperf button.addButton:hover, .pg-useraccounts button.addButton:hover{ background: var(--customs-purple-dark); border-color: var(--customs-purple-dark); }.pg-palletnums button.addButtonDisabled, .pg-msgboard button.addButtonDisabled, .pg-histmsg button.addButtonDisabled, .pg-settings button.addButtonDisabled, .pg-accessctl button.addButtonDisabled, .pg-packerperf button.addButtonDisabled, .pg-useraccounts button.addButtonDisabled{ margin: 0; min-height: 0; font-size: .875rem; padding: .4rem .9rem; border-radius: 6px; background: #fff; border: 1px solid var(--customs-border); color: #212529; font-weight: 700; }/* 标题带去掉旧横幅底色，按 Portal 用普通深色标题 */.pg-palletnums .box.heading { background: transparent; box-shadow: none; border: none; }.pg-palletnums .box.heading h3 { color: #212529; font-weight: 800; }/* 操作下拉菜单对齐 Portal 菜单规格 */.pg-palletnums .pallet-dropdown-menu { border: 1px solid var(--customs-border); border-radius: 8px; box-shadow: 0 2px 8px rgba(0, 0, 0, .08); }.pg-palletnums .pallet-dropdown-item:hover { background: #f8f9fa; }.pg-palletnums .pallet-dropdown-item.danger { color: #b02a37; }/* 表头（本 PR 已把裸 tr 规整为 thead）用 Portal 白底 + 阴影线 */.pg-palletnums .pallet-table thead th { background: #fff; box-shadow: 0 2px 0 rgba(0, 0, 0, .08); }.pg-palletnums .pallet-selected-count { color: #6c757d; }@media (max-width: 768px) {.customs-portal.pg-palletnums { padding: .5rem; }}/* --------------------------------------------------------------------------
   [2026-10-10] warehouseTools_SKUMatch（SKU 对照工具） —— 作用域 .pg-skumatch
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- */.sku-compare-card.pg-skumatch { max-width: 900px; margin: 20px auto; border: 1px solid #dee2e6; border-radius: 12px; background: #ffffff; box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08); overflow: hidden; }.pg-skumatch .sku-compare-header { padding: 16px 20px; background: #f8f9fa; border-bottom: 1px solid #dee2e6; }.pg-skumatch .sku-compare-header h4 { margin: 0; font-weight: 700; }.pg-skumatch .sku-compare-body { padding: 22px; }.pg-skumatch .sku-input-label { display: block; margin-bottom: 8px; font-weight: 700; font-size: 16px; }.pg-skumatch .sku-compare-input { width: 100%; min-height: 58px; padding: 10px 14px; border: 2px solid #ced4da; border-radius: 8px; background: #ffffff; font-size: 22px; font-weight: 700; outline: none; transition: background-color 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease; }.pg-skumatch .sku-compare-input:focus { border-color: #0d6efd; box-shadow: 0 0 0 4px rgba(13, 110, 253, 0.18); }.pg-skumatch .sku-reference-ready { background: #e7f1ff; border-color: #0d6efd; color: #084298; }.pg-skumatch .sku-compare-correct { background: #198754 !important; border-color: #198754 !important; color: #ffffff !important; box-shadow: 0 0 0 5px rgba(25, 135, 84, 0.25) !important; }.pg-skumatch .sku-compare-wrong { background: #dc3545 !important; border-color: #dc3545 !important; color: #ffffff !important; box-shadow: 0 0 0 5px rgba(220, 53, 69, 0.25) !important; }.pg-skumatch .sku-compare-result { min-height: 54px; margin-top: 18px; padding: 13px 16px; border-radius: 8px; background: #f8f9fa; border: 1px solid #dee2e6; font-size: 18px; font-weight: 700; display: flex; align-items: center; }.pg-skumatch .sku-result-waiting { background: #e7f1ff; border-color: #9ec5fe; color: #084298; }.pg-skumatch .sku-result-correct { background: #d1e7dd; border-color: #a3cfbb; color: #0a3622; }.pg-skumatch .sku-result-wrong { background: #f8d7da; border-color: #f1aeb5; color: #58151c; }.pg-skumatch .sku-compare-actions { margin-top: 18px; display: flex; gap: 10px; flex-wrap: wrap; }.pg-skumatch .sku-reset-button { min-height: 44px; padding: 8px 18px; border: 1px solid #6c757d; border-radius: 7px; background: #ffffff; color: #495057; font-weight: 600; cursor: pointer; }.pg-skumatch .sku-reset-button:hover { background: #6c757d; color: #ffffff; }.pg-skumatch .sku-compare-help { margin-top: 14px; color: #6c757d; font-size: 14px; }@media (max-width: 767px) {.pg-skumatch .sku-compare-body { padding: 15px; }.pg-skumatch .sku-compare-input { font-size: 18px; }.pg-skumatch .sku-input-column + .sku-input-column { margin-top: 16px; }}/* --------------------------------------------------------------------------
   [2026-10-10] warehouseManager_BillingProblem（账单问题） —— 作用域 .pg-billprob
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- *//* one grid for all rows */.pg-billprob .billing-table { table-layout: fixed; width: 100%; }.pg-billprob .billing-table th, .pg-billprob .billing-table td { vertical-align: middle; }/* same zebra background for every CELL in a group
       Use !important to beat Bootstrap's .table > :not(caption) > * > * rule */.pg-billprob .billing-table tr.group-even > * { background-color: #f8f9fa !important; }/* light gray */.pg-billprob .billing-table tr.group-odd > * { background-color: #ffffff !important; }/* white *//* remove the seam between grouped child rows and the rowspanned cells */.pg-billprob .billing-table tr.group-child > * { border-top: 0 !important; }/* keep hover from washing out the fixed bg */.pg-billprob .billing-table.table-hover tbody tr:hover > * { filter: brightness(0.98); }/* stop time strings from wrapping (prevents visual drift) */.pg-billprob .billing-table .nowrap { white-space: nowrap; }/* Bigger modal + scrollable body */.pg-billprob #detailsModal .modal-dialog { max-width: 900px; }/* or use .modal-xl */.pg-billprob #detailsModal .modal-body { max-height: 70vh; overflow:auto; }/* Details table layout */.pg-billprob .details-table { table-layout: fixed; /* respect colgroup widths */ width: 100%; }.pg-billprob .details-table th, .pg-billprob .details-table td { vertical-align: top; text-align: left !important; }/* 2-column: label / value */.pg-billprob .details-table td:first-child { white-space: nowrap; color: #6c757d; font-weight: 600; background: #f8f9fa; border-right: 0; width: 28%; }.pg-billprob .details-table td:last-child { width: auto; }/* Compact controls inside the modal */.pg-billprob #detailsModal .form-control, .pg-billprob #detailsModal .form-select, .pg-billprob #detailsModal .btn { height: 36px; padding: .375rem .5rem; font-size: .95rem; }/* Inputs in same row look cleaner side-by-side */.pg-billprob #detailsModal .inline-2 > * { width: 49%; display: inline-block; }.pg-billprob #detailsModal .inline-3 > * { width: 32%; display: inline-block; }/* Final row (buttons) */.pg-billprob .details-actions td { background: #fff; border-top: 0; }/* ===== 清关 Portal 设计系统（2026-10-08 业主裁定：列表页整页套用
       warehouseManager_CustomsClearancePortal 样式，与 eCommerce_OrderList 同版） ===== */.customs-portal.pg-billprob { padding: 1rem; }/* 本页筛选共 6 项 + Filter 按钮，桌面端一行 7 个轨道，
       控件尺寸与 eCommerce_OrderList（PR #65）同为紧凑规格。 */.pg-billprob .customs-filter-grid { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: .5rem; align-items: end; }.pg-billprob .customs-filter-grid .form-label, .pg-histinb .customs-filter-grid .form-label, .pg-histrec .customs-filter-grid .form-label, .pg-packerperf .customs-filter-grid .form-label, .pg-orderlist .customs-filter-grid .form-label{ font-size: .85rem; margin-bottom: .3rem; }.pg-billprob .customs-filter-grid .form-control, .pg-billprob .customs-filter-grid .form-select, .pg-billprob .customs-filter-grid .btn, .pg-histinb .customs-filter-grid .form-control, .pg-histinb .customs-filter-grid .form-select, .pg-histinb .customs-filter-grid .btn, .pg-histrec .customs-filter-grid .form-control, .pg-histrec .customs-filter-grid .form-select, .pg-histrec .customs-filter-grid .btn, .pg-orderlist .customs-filter-grid .form-control, .pg-orderlist .customs-filter-grid .form-select, .pg-orderlist .customs-filter-grid .btn{ font-size: .875rem; padding: .3rem .5rem; }.pg-billprob .customs-table-wrap table, .pg-histinb .customs-table-wrap table, .pg-histrec .customs-table-wrap table, .pg-billtpl .customs-table-wrap table, .pg-packerperf .customs-table-wrap table{ margin-bottom: 0; }@media (max-width: 1400px) {.pg-billprob .customs-filter-grid { grid-template-columns: repeat(4, minmax(125px, 1fr)); }}@media (max-width: 768px) {.customs-portal.pg-billprob { padding: .5rem; }}/* --------------------------------------------------------------------------
   [2026-10-10] inventory（库存查询）—— 作用域 .pg-inventory（整页包裹） —— 作用域 .pg-inventory
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- *//* wrap table so it can scroll while header stays visible */.pg-inventory .log-table-wrap { max-height: 60vh; overflow: auto; border: 1px solid white; border-radius: .5rem; }/* sticky header for the scrolling area */.pg-inventory .log-table-wrap thead th { position: sticky; top: 0; z-index: 2; background: white; }/* nicer numeric alignment */.pg-inventory .num { text-align: right; font-variant-numeric: tabular-nums; }/* force left alignment for the whole logs table */.pg-inventory .log-table th, .pg-inventory .log-table td { text-align: left !important; }.pg-inventory .nowrap { white-space: nowrap; }.pg-inventory .truncate { display: inline-block; max-width: 280px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; vertical-align: bottom; }.pg-inventory .table.log-table > :not(caption) > * > * { padding-top:.5rem; padding-bottom:.5rem; }/* ===== Inventory sortable table header: same style as Y2 ===== */.pg-inventory #eCommerceInventoryResultsContainer .inventorySortTableWrap { overflow-x: auto; overflow-y: visible; position: relative; border-radius: 6px; min-height: 220px; padding-bottom: 120px; }.pg-inventory #eCommerceInventoryResultsContainer .dropdown-menu { z-index: 9999; }/* sticky header */.pg-inventory #eCommerceInventoryResultsContainer .inventorySortTableWrap thead th { position: sticky; top: 0; z-index: 5; background: #fff; box-shadow: 0 2px 0 rgba(0,0,0,.08); }.pg-inventory #eCommerceInventoryResultsContainer .inventorySortTableWrap table { border-collapse: separate; border-spacing: 0; }.pg-inventory #eCommerceInventoryResultsContainer .inventorySortTableWrap thead th.inventory-sortable-th { padding: 0 !important; }.pg-inventory #eCommerceInventoryResultsContainer .sort-header-btn { width: 100%; min-height: 42px; border: 0; background: transparent; display: flex; align-items: center; justify-content: space-between; gap: 6px; padding: 8px 6px; font-weight: 800; color: inherit; cursor: pointer; text-align: left; }.pg-inventory #eCommerceInventoryResultsContainer .sort-header-btn:hover { background: rgba(166, 131, 227, .10); }.pg-inventory #eCommerceInventoryResultsContainer .sort-header-btn .sort-label { display: inline-flex; align-items: center; line-height: 1.15; }.pg-inventory #eCommerceInventoryResultsContainer .sort-icons { display: inline-flex; flex-direction: column; line-height: 9px; font-size: 10px; color: rgba(0,0,0,.35); user-select: none; }.pg-inventory #eCommerceInventoryResultsContainer .sort-icons .sort-up, .pg-inventory #eCommerceInventoryResultsContainer .sort-icons .sort-down { height: 9px; }.pg-inventory #eCommerceInventoryResultsContainer .sort-header-btn.sort-asc .sort-up { color: #A683E3; font-weight: 900; }.pg-inventory #eCommerceInventoryResultsContainer .sort-header-btn.sort-desc .sort-down { color: #A683E3; font-weight: 900; }.pg-inventory #eCommerceInventoryResultsContainer .sort-header-btn.sort-asc .sort-down, .pg-inventory #eCommerceInventoryResultsContainer .sort-header-btn.sort-desc .sort-up { color: rgba(0,0,0,.20); }/* --------------------------------------------------------------------------
   [2026-10-10] history_inboundECommerce（入库历史）—— 作用域 .pg-histinb（根 #inboundTop.customs-portal） —— 作用域 .pg-histinb
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- */.pg-histinb .editable-client { cursor: pointer; text-decoration: underline dotted; color:#A683E3; }/* ===== Scroll ONLY the inbound table area ===== */.pg-histinb .historyInboundECommerceSearchResultContainer { overflow: auto; position: relative; border-radius: 6px; }/* Freeze header */.pg-histinb .historyInboundECommerceSearchResultContainer thead th { position: sticky; top: 0; z-index: 10; background: #fff; box-shadow: 0 2px 0 rgba(0,0,0,.08); }/* Optional: stable widths */.pg-histinb .historyInboundECommerceSearchResultContainer table { table-layout: fixed; }/* 放大表格前面的 checkbox */.pg-histinb .historyInboundECommerceSearchResultContainer input[type="checkbox"] { width: 16px; height: 16px; cursor: pointer; transform: scale(1.2); }/* checkbox 那一列居中 */.pg-histinb .historyInboundECommerceSearchResultContainer th:first-child, .pg-histinb .historyInboundECommerceSearchResultContainer td:first-child { text-align: center; vertical-align: middle; }/* ===== 清关 Portal 设计系统（2026-10-08 业主裁定：列表页整页套用
       warehouseManager_CustomsClearancePortal 样式，与 eCommerce_OrderList 同版） ===== */.customs-portal.pg-histinb { padding: 1rem; }/* 本页筛选共 8 项 + 按钮组（跨 2 列），桌面端一行 10 个轨道，
       控件尺寸与 eCommerce_OrderList（PR #65）同为紧凑规格。 */.pg-histinb .customs-filter-grid { display: grid; grid-template-columns: repeat(10, minmax(0, 1fr)); gap: .5rem; align-items: end; }.pg-histinb .customs-table-wrap, .pg-histrec .customs-table-wrap{ min-height: 280px; overflow: auto; border-radius: 8px; }/* 本页适配：表格高度由页面既有的 fitInboundTableHeight() 按视口
       动态计算（写入内联 height），且列宽由 colgroup 固定，故不套用
       Portal 的 max-height 与表格 min-width 两条。 */.pg-histinb .historyInboundECommerceSearchResultContainer.customs-table-wrap { max-height: none; }@media (max-width: 1400px) {.pg-histinb .customs-filter-grid, .pg-histrec .customs-filter-grid{ grid-template-columns: repeat(5, minmax(125px, 1fr)); }}@media (max-width: 768px) {.customs-portal.pg-histinb { padding: .5rem; }}/* --------------------------------------------------------------------------
   [2026-10-10] history_ECommerceReceiving（收货历史）—— 作用域 .pg-histrec（根 #receivingTop.customs-portal） —— 作用域 .pg-histrec
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- *//* ===== Scroll ONLY the table area ===== */.pg-histrec .historyECommerceReceivingSearchResultContainer { overflow: auto; /* 关键：滚动条在这里 */ position: relative; /* sticky 需要 */ border-radius: 6px; }/* 你现在多包了一层 .table-responsive，它也会产生滚动
       所以这里强制它不要再滚，避免“双滚动条” */.pg-histrec .historyECommerceReceivingSearchResultContainer .table-responsive { overflow: visible !important; }/* ===== Freeze header row ===== */.pg-histrec .historyECommerceReceivingSearchResultContainer thead th { position: sticky; top: 0; z-index: 10; background: #fff; /* 必须有背景，不然会透 */ box-shadow: 0 2px 0 rgba(0,0,0,.08); }/* 可选：让表格列宽稳定 */.pg-histrec .historyECommerceReceivingSearchResultContainer table { table-layout: fixed; }/* ===== 清关 Portal 设计系统（2026-10-08 业主裁定：列表页整页套用
       warehouseManager_CustomsClearancePortal 样式，与 eCommerce_OrderList 同版） ===== */.customs-portal.pg-histrec { padding: 1rem; }/* 本页筛选共 7 项 + 按钮组（跨 2 列），桌面端一行 9 个轨道，
       控件尺寸与 eCommerce_OrderList（PR #65）同为紧凑规格。 */.pg-histrec .customs-filter-grid { display: grid; grid-template-columns: repeat(9, minmax(0, 1fr)); gap: .5rem; align-items: end; }/* 本页适配：表格高度由页面既有的 fitReceivingTableHeight() 按视口
       动态计算（写入内联 height），且列宽由 colgroup 固定，故不套用
       Portal 的 max-height 与表格 min-width 两条。 */.pg-histrec .historyECommerceReceivingSearchResultContainer.customs-table-wrap { max-height: none; }@media (max-width: 1400px) {}@media (max-width: 768px) {.customs-portal.pg-histrec { padding: .5rem; }}/* --------------------------------------------------------------------------
   [2026-10-10] MessageBoard（留言板）—— 作用域 .pg-msgboard —— 作用域 .pg-msgboard
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- *//* ===== 清关 Portal 设计系统（2026-10-08 业主裁定：留言板按 Portal 风格重做）=====
       旧 Slate 方案已搁置，本页统一到 Portal：legacy 按钮映射（addButton 品牌紫 /
       addButtonDisabled 次按钮 / deleteButton 红色描边，JS 的类切换逻辑不变），
       筛选与表格进 Portal 卡片，表格用 Portal 滚动容器与白表头。 */.customs-portal.pg-msgboard { padding: 1rem; }.pg-msgboard .deleteButton, .pg-histmsg .deleteButton, .pg-settings .deleteButton, .pg-packerperf .deleteButton{ font-size: .875rem; padding: .35rem .8rem; border-radius: 6px; background: #fff; border: 1px solid #dc3545; color: #dc3545; font-weight: 700; }.pg-msgboard .deleteButton:hover, .pg-histmsg .deleteButton:hover, .pg-settings .deleteButton:hover, .pg-packerperf .deleteButton:hover{ background: #dc3545; color: #fff; }.pg-msgboard .customs-table-wrap, .pg-histmsg .customs-table-wrap{ overflow: auto; border-radius: 8px; max-height: calc(100vh - 330px); }.pg-msgboard .customs-table-wrap table { margin-bottom: 0; min-width: 1200px; }.pg-msgboard .messageBoardHome .form-control, .pg-histmsg .messageBoardHome .form-control{ border-radius: 6px; }@media (max-width: 768px) {.customs-portal.pg-msgboard { padding: .5rem; }}/* --------------------------------------------------------------------------
   [2026-10-10] history_MessageBoard（留言历史）—— 作用域 .pg-histmsg —— 作用域 .pg-histmsg
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- *//* ===== 清关 Portal 设计系统（2026-10-08 业主裁定：留言板按 Portal 风格重做）=====
       旧 Slate 方案已搁置，本页统一到 Portal：legacy 按钮映射（addButton 品牌紫 /
       addButtonDisabled 次按钮 / deleteButton 红色描边，JS 的类切换逻辑不变），
       筛选与表格进 Portal 卡片，表格用 Portal 滚动容器与白表头。 */.customs-portal.pg-histmsg { padding: 1rem; }.pg-histmsg .customs-table-wrap table { margin-bottom: 0; min-width: 1000px; }@media (max-width: 768px) {.customs-portal.pg-histmsg { padding: .5rem; }}/* --------------------------------------------------------------------------
   [2026-10-10] freight_PayReturn（运费退回确认）—— 作用域 .pg-payret（根 .pageWrap） —— 作用域 .pg-payret
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- */.pg-payret { /* 设计统一（2026-10-08）：令牌对齐清关 Portal */ --accent:#A683E3; --accent-dark:#815ac6; --ink:#212529; --muted:#6c757d; --line:#dee2e6; --soft:rgba(0,0,0,.04); --bg:#fff; --good:#198754; --warn:#f59e0b; --bad:#ef4444; }.pg-payret body, .pg-freightsuccess body, .pg-freightcheckout body, .pg-runquote body{ background: var(--bg) !important; }.pageWrap.pg-payret { max-width: 900px; margin: 18px auto; padding: 0 12px; }.pg-payret .h1 { font-size: 22px; font-weight: 900; margin:0; color: var(--ink); }.pg-payret .pill, .pg-freightcheckout .pill{ display:inline-flex; align-items:center; gap:8px; background: var(--soft); border:1px solid var(--line); border-radius: 999px; padding: 6px 10px; font-size: 13px; color: var(--muted); }.pg-payret .mono, .pg-freightsuccess .mono, .pg-freightcheckout .mono{ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; }.pg-payret .bar { height: 10px; background: #eef0f3; border-radius:999px; overflow:hidden; margin-top:12px; }.pg-payret .bar > div { height:100%; width: 20%; background: rgba(166,131,227,.9); border-radius:999px; animation: move 1.1s infinite ease-in-out; }@keyframes move {
0% { transform: translateX(-60%); width:30%; }
50% { transform: translateX(120%); width:40%; }
100% { transform: translateX(260%); width:30%; }
}.pg-payret .btnPrimary, .pg-freightsuccess .btnPrimary, .pg-freightcheckout .btnPrimary{ background: var(--accent); color:#fff; border:1px solid var(--accent); border-radius: 6px; padding: 10px 12px; font-weight: 800; cursor:pointer; }.pg-payret .btnPrimary:hover, .pg-freightsuccess .btnPrimary:hover, .pg-freightcheckout .btnPrimary:hover{ background: var(--accent-dark); border-color: var(--accent-dark); }.pg-payret .btnGhost, .pg-freightcheckout .btnGhost{ background: #fff; color: var(--ink); border:1px solid var(--line); border-radius: 6px; padding: 10px 12px; font-weight: 800; cursor:pointer; }.pg-payret .btnGhost:hover, .pg-freightcheckout .btnGhost:hover{ background:#f8f9fa; }.pg-payret .row { display:flex; gap:10px; align-items:center; justify-content:space-between; flex-wrap:wrap; }.pg-payret .tiny { font-size:12px; color:var(--muted); margin-top:10px; line-height:1.35; }.pg-payret .hintBox { margin-top:10px; padding:10px 12px; border:1px dashed var(--line); border-radius:8px; background: #f8f9fa; font-size: 13px; color: var(--muted); line-height: 1.4; }/* --------------------------------------------------------------------------
   [2026-10-10] 设置页共享样式（ManageWarehouse/ClientGroups/TruckingCompany/LinkedWarehouses 四页字节级相同，只存一份）—— 作用域 .pg-settings —— 作用域 .pg-settings
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- *//* ===== 清关 Portal 设计系统（2026-10-08 业主裁定：整页套用 Portal 样式）=====
       本页是旧式表单页（全局 legacy 类），用本页样式把旧组件映射到 Portal 规格：
       输入框 Portal 边框/圆角，addButton 紧凑品牌紫（覆盖全局 button.addButton 的
       16px 边距/40px 高/20px 字号），deleteButton 红色描边，列表进 Portal 卡片。 */.customs-portal.pg-settings { padding: 1rem; }.pg-settings .dropDownMenuFromInventory, .pg-packerperf .dropDownMenuFromInventory{ font-size: .875rem; padding: .45rem .95rem; border-radius: 6px; background: var(--customs-purple); border: 1px solid var(--customs-purple); color: #fff; font-weight: 700; }.pg-settings .dropDownMenuFromInventory:hover, .pg-packerperf .dropDownMenuFromInventory:hover{ background: var(--customs-purple-dark); border-color: var(--customs-purple-dark); }.pg-settings .table th h5, .pg-packerperf .table th h5{ font-size: .9rem; font-weight: 800; margin: 0; }@media (max-width: 768px) {.customs-portal.pg-settings { padding: .5rem; }}/* --------------------------------------------------------------------------
   [2026-10-10] setting_AccessControl（权限设置）—— 作用域 .pg-accessctl —— 作用域 .pg-accessctl
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- *//* ===== 清关 Portal 设计系统（2026-10-08 业主裁定：整页套用 Portal 样式）=====
       本页是旧式页面（全局 legacy 类），用本页样式把旧组件映射到 Portal 规格：
       addButton 紧凑品牌紫（覆盖全局 button.addButton 的 16px 边距/40px 高/
       20px 字号），列表进 Portal 卡片，状态改 Portal 语义 pill 徽章。 */.customs-portal.pg-accessctl { padding: 1rem; }.pg-accessctl .AccessControlList thead th { background: #fff; box-shadow: 0 2px 0 rgba(0, 0, 0, .08); white-space: nowrap; }.pg-accessctl .customs-pill { display: inline-block; padding: 4px 10px; border-radius: 999px; font-weight: 800; font-size: 12px; }.pg-accessctl .customs-pill-on { background: #d1e7dd; color: #0f5132; }.pg-accessctl .customs-pill-off { background: #e9ecef; color: #6c757d; }@media (max-width: 768px) {.customs-portal.pg-accessctl { padding: .5rem; }}/* --------------------------------------------------------------------------
   [2026-10-10] setting_BillingTemplates（收费模板）—— 作用域 .pg-billtpl —— 作用域 .pg-billtpl
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- *//* ===== 清关 Portal 设计系统（2026-10-08 业主裁定：整页套用
       warehouseManager_CustomsClearancePortal 样式） ===== */.customs-portal.pg-billtpl { padding: 1rem; }/* 本页主按钮（弹窗提交等）统一品牌紫，与 Portal 一致 */.pg-billtpl .btn-primary { background: var(--customs-purple); border-color: var(--customs-purple); }.pg-billtpl .btn-primary:hover, .pg-billtpl .btn-primary:focus { background: var(--customs-purple-dark); border-color: var(--customs-purple-dark); }@media (max-width: 768px) {.customs-portal.pg-billtpl { padding: .5rem; }}/* --------------------------------------------------------------------------
   [2026-10-10] setting_PickingOrder（拣货顺序编辑器）—— 作用域 .pg-pickorder（根 .ds-root） —— 作用域 .pg-pickorder
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- *//* ===== 拣货顺序手动编排（2026-10-10）=====
       左：可选库位（托盘主数据 + 货架主数据，减去已在顺序中的）；
       右：拣货顺序（两项之间 + 加空白 → 点左侧库位填入；× 移除）。
       保存走既有 POST /uploadPickingOrder（服务端负责去重/编号/事务替换）。
       样式基于设计系统令牌（design-system.css），页面只保留编排专用部分。 */.pg-pickorder .po-wrap { display: grid; grid-template-columns: minmax(300px, 5fr) minmax(360px, 7fr); gap: 1rem; align-items: start; }@media (max-width: 992px) {.pg-pickorder .po-wrap { grid-template-columns: 1fr; }}.pg-pickorder .po-panel-head { display: flex; align-items: center; justify-content: space-between; gap: .5rem; margin-bottom: .6rem; }.pg-pickorder .po-count { color: var(--ds-muted, #7A7390); font-size: .8125rem; font-weight: 600; }.pg-pickorder .po-list { max-height: 62vh; overflow: auto; padding-right: 2px; }.pg-pickorder .po-avail-row { display: flex; align-items: center; gap: .55rem; width: 100%; padding: .5rem .65rem; margin-bottom: .4rem; text-align: left; background: #fff; border: 1px solid var(--ds-border-strong, #DDD5F2); border-radius: var(--ds-radius, 9px); cursor: pointer; transition: all .13s ease; font-size: .9rem; }.pg-pickorder .po-avail-row:hover { border-color: var(--ds-brand-light, #A683E3); background: var(--ds-brand-hover-bg, #FAF9FD); transform: translateY(-1px); }.pg-pickorder .po-avail-row .po-code { font-weight: 700; color: var(--ds-ink, #221C35); letter-spacing: .01em; }.pg-pickorder .po-avail-row .po-zone { margin-left: auto; color: var(--ds-muted, #7A7390); font-size: .78rem; font-weight: 600; }.pg-pickorder .po-avail-row .po-add { color: var(--ds-brand, #815AC6); font-weight: 800; font-size: 1rem; line-height: 1; }.pg-pickorder .po-badge { display: inline-block; padding: .1rem .5rem; border-radius: 999px; font-size: .7rem; font-weight: 700; line-height: 1.5; white-space: nowrap; }.pg-pickorder .po-badge-pallet { background: var(--ds-brand-soft, #F0EDF6); color: var(--ds-brand-dark, #815AC6); }.pg-pickorder .po-badge-rack { background: #EAF1EA; color: #33691E; }.pg-pickorder .po-item { display: flex; align-items: center; gap: .55rem; padding: .5rem .65rem; background: #fff; border: 1px solid var(--ds-border, #E9E4F5); border-radius: var(--ds-radius, 9px); box-shadow: 0 1px 2px rgba(84, 62, 160, .05); font-size: .9rem; }.pg-pickorder .po-item .po-idx { min-width: 2rem; height: 2rem; padding: 0 .3rem; border-radius: 8px; background: var(--ds-brand-soft, #F0EDF6); color: var(--ds-brand-dark, #815AC6); font-weight: 800; font-size: .82rem; display: flex; align-items: center; justify-content: center; font-variant-numeric: tabular-nums; }.pg-pickorder .po-item .po-code { font-weight: 700; color: var(--ds-ink, #221C35); }.pg-pickorder .po-item .po-zone { color: var(--ds-muted, #7A7390); font-size: .78rem; font-weight: 600; }.pg-pickorder .po-x { margin-left: auto; width: 26px; height: 26px; border-radius: 7px; flex: 0 0 26px; border: 1px solid transparent; background: transparent; color: #B03A3A; font-size: 15px; line-height: 1; cursor: pointer; transition: all .13s ease; }.pg-pickorder .po-x:hover { background: var(--ds-danger-bg, #F8D7DA); }.pg-pickorder .po-insert { display: flex; align-items: center; gap: .5rem; padding: .18rem .2rem; }.pg-pickorder .po-insert::before, .pg-pickorder .po-insert::after { content: ""; flex: 1; height: 1px; background: var(--ds-border, #E9E4F5); }.pg-pickorder .po-insert button { width: 22px; height: 22px; border-radius: 50%; flex: 0 0 22px; border: 1px solid var(--ds-brand-light, #A683E3); background: #fff; color: var(--ds-brand, #815AC6); font-size: 14px; font-weight: 800; line-height: 1; cursor: pointer; transition: all .13s ease; display: flex; align-items: center; justify-content: center; }.pg-pickorder .po-insert button:hover { background: var(--ds-brand, #815AC6); color: #fff; transform: scale(1.12); }.pg-pickorder .po-blank { display: flex; align-items: center; gap: .55rem; padding: .5rem .65rem; min-height: 49px; border: 1.5px dashed var(--ds-border-strong, #DDD5F2); border-radius: var(--ds-radius, 9px); color: var(--ds-muted, #7A7390); font-size: .85rem; font-weight: 600; cursor: pointer; background: rgba(240, 237, 246, .35); transition: all .13s ease; }.pg-pickorder .po-blank .po-idx { min-width: 2rem; text-align: center; color: var(--ds-border-strong, #DDD5F2); font-weight: 800; font-variant-numeric: tabular-nums; }.pg-pickorder .po-blank.active { border-color: var(--ds-brand, #815AC6); background: var(--ds-brand-soft, #F0EDF6); color: var(--ds-brand-dark, #815AC6); box-shadow: 0 0 0 3.5px rgba(166, 131, 227, .20); }.pg-pickorder .po-blank.active .po-idx { color: var(--ds-brand, #815AC6); }.pg-pickorder .po-status { min-height: 1.4em; font-size: .875rem; font-weight: 600; }.pg-pickorder .po-status.ok { color: #1E7A46; }.pg-pickorder .po-status.err { color: #B03A3A; }.pg-pickorder .po-dirty { display: none; padding: .14rem .6rem; border-radius: 999px; background: #FFF3CD; color: #664D03; font-size: .75rem; font-weight: 700; }.pg-pickorder .po-dirty.on { display: inline-block; }.pg-pickorder .po-empty { text-align: center; color: var(--ds-muted, #7A7390); padding: 1.6rem 1rem; font-size: .875rem; }/* --------------------------------------------------------------------------
   [2026-10-10] freight_QuoteHistory（报价历史）—— 作用域 .pg-quotehist —— 作用域 .pg-quotehist
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- */.pg-quotehist { /* 设计统一（2026-10-08）：令牌对齐清关 Portal */ --accent:#A683E3; --accent-dark:#815ac6; --ink:#212529; --muted:#6c757d; --line:#dee2e6; --bg:#fff; }.pg-quotehist body { background:var(--bg) !important; }.pageWrap.pg-quotehist { max-width:1100px; margin:18px auto; padding:0 12px; }.pg-quotehist .cardX { background:#fff; border:1px solid var(--line); border-radius:10px; box-shadow:0 1px 4px rgba(0,0,0,.05); padding:16px; }.pg-quotehist .h1 { font-size:26px; font-weight:900; margin:0; color:var(--ink); }.pg-quotehist .sub { margin:6px 0 0; color:var(--muted); }.pg-quotehist .toolbar { display:flex; justify-content:space-between; align-items:center; gap:10px; flex-wrap:wrap; margin-top:12px; }.pg-quotehist .tableWrap { margin-top:12px; border:1px solid var(--line); border-radius:8px; overflow:hidden; }.pg-quotehist table { width:100%; border-collapse:collapse; table-layout:fixed; }.pg-quotehist th, .pg-quotehist td { padding:10px; border-bottom:1px solid var(--line); font-size:14px; vertical-align:top; }.pg-quotehist th { background:#fff; box-shadow:0 2px 0 rgba(0,0,0,.08); text-align:left; font-weight:900; color:var(--ink); }.pg-quotehist tr:last-child td { border-bottom:none; }.pg-quotehist .rowClickable { cursor:pointer; }.pg-quotehist .rowClickable:hover { background:rgba(166,131,227,.08); }.pg-quotehist .pill { display:inline-block; padding:4px 10px; border-radius:999px; font-weight:900; font-size:12px; border:1px solid rgba(166,131,227,.30); background: rgba(166,131,227,.14); }.pg-quotehist .muted { color:var(--muted); font-weight:800; font-size:13px; }.pg-quotehist .miniBtn.sm { padding: 6px 10px; border-radius: 10px; font-size: 13px; }/* expired: 红色强调，但仍可点击 */.pg-quotehist .expired { opacity: 1; background: rgba(231, 76, 60, .08); /* 淡红底 */ border-color: rgba(231, 76, 60, .45) !important; }.pg-quotehist .expired:hover { box-shadow: 0 8px 22px rgba(231, 76, 60, .18); }.pg-quotehist .pill.expiredPill { border-color: rgba(231, 76, 60, .45); background: rgba(231, 76, 60, .14); }/* --------------------------------------------------------------------------
   [2026-10-10] freight_Success（付款成功）—— 作用域 .pg-freightsuccess —— 作用域 .pg-freightsuccess
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- */.pg-freightsuccess { /* 设计统一（2026-10-08）：令牌对齐清关 Portal */ --accent:#A683E3; --accent-dark:#815ac6; --ink:#212529; --muted:#6c757d; --line:#dee2e6; --soft:rgba(0,0,0,.04); --bg:#fff; --good:#198754; }.pageWrap.pg-freightsuccess { max-width: 900px; margin: 18px auto; padding: 0 12px; }.pg-freightsuccess .h1 { font-size: 24px; font-weight: 900; margin:0; color: var(--ink); }.pg-freightsuccess .pill { display:inline-flex; align-items:center; gap:8px; background: rgba(23,163,74,.08); border:1px solid rgba(23,163,74,.25); border-radius: 999px; padding: 6px 10px; font-size: 13px; color: var(--good); font-weight: 900; }/* --------------------------------------------------------------------------
   [2026-10-10] warehouseTools_ScanForm（扫码单据）—— 作用域 .pg-scanform —— 作用域 .pg-scanform
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- */.pg-scanform { --accent:#A683E3; --bg:#fff; --muted:rgba(0,0,0,.65); }.pg-scanform body { margin:0; font-family:system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif; background:#f6f6fb; }.wrap.pg-scanform { max-width:980px; margin:24px auto; padding:0 16px 40px; }.pg-scanform .card { background:var(--bg); border:1px solid rgba(0,0,0,.08); border-radius:14px; box-shadow:0 10px 28px rgba(0,0,0,.06); overflow:hidden; }.pg-scanform .head { padding:16px 18px; border-bottom:1px solid rgba(0,0,0,.08); display:flex; justify-content:space-between; gap:12px; align-items:center; }.pg-scanform .title { font-weight:900; font-size:18px; display:flex; align-items:center; gap:10px; }.pg-scanform .dot { width:10px; height:10px; border-radius:50%; background:var(--accent); box-shadow:0 0 0 4px rgba(166,131,227,.18); }.pg-scanform .sub { color:var(--muted); font-size:13px; font-weight:600; margin-top:2px; }.pg-scanform .body { padding:16px 18px 18px; display:grid; grid-template-columns:1.2fr .8fr; gap:14px; }@media (max-width:860px) {.pg-scanform .body { grid-template-columns:1fr; }}.pg-scanform textarea { width:100%; min-height:220px; resize:vertical; border-radius:12px; border:1px solid rgba(0,0,0,.14); padding:12px; font-size:14px; line-height:1.35; outline:none; }.pg-scanform textarea:focus { border-color:rgba(166,131,227,.75); box-shadow:0 0 0 4px rgba(166,131,227,.18); }.pg-scanform .right { border:1px solid rgba(0,0,0,.08); border-radius:12px; padding:12px; background:rgba(255,255,255,.6); }.pg-scanform .btn { width:100%; border:0; border-radius:12px; padding:12px 14px; font-weight:900; cursor:pointer; background:var(--accent); color:#fff; font-size:14px; }.pg-scanform .btn:disabled { opacity:.55; cursor:not-allowed; }.pg-scanform .hint { margin-top:10px; font-size:12.5px; color:var(--muted); line-height:1.35; }.pg-scanform .row { margin-top:10px; display:flex; gap:10px; flex-wrap:wrap; align-items:center; }.pg-scanform .pill { font-size:12px; font-weight:700; padding:6px 10px; border-radius:999px; background:rgba(166,131,227,.14); color:#4b2f87; border:1px solid rgba(166,131,227,.25); }.pg-scanform .mono { font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono",monospace; }.pg-scanform input[type="file"] { width:100%; }/* --------------------------------------------------------------------------
   [2026-10-10] warehouseTools_MoveInventorySearch（移库搜索）—— 作用域 .pg-moveinvsearch —— 作用域 .pg-moveinvsearch
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- */.replenish-list-wrapper.pg-moveinvsearch { max-width: 620px; /* ✅ 控制前端显示宽度 */ margin: 12px auto 0 auto; /* ✅ 居中 */ }.replenish-list-wrapper.pg-moveinvsearch .alert { padding: 8px 10px; margin-bottom: 8px; text-align: center; font-size: 13px; }.pg-moveinvsearch .replenish-print-toolbar { display: flex; justify-content: flex-end; margin: 8px 0; }.pg-moveinvsearch .replenish-print-toolbar .btn { padding: 5px 10px; font-size: 12px; }.pg-moveinvsearch .replenish-simple-table { width: 100%; table-layout: fixed; margin: 0 auto; background: white; }.pg-moveinvsearch .replenish-simple-table th, .pg-moveinvsearch .replenish-simple-table td { text-align: center; vertical-align: middle; /* ✅ 每行变高 */ padding: 14px 6px; height: 70px; line-height: 1.25; word-break: break-word; white-space: normal; border: 1px solid #dee2e6; }.pg-moveinvsearch .replenish-simple-table th { font-size: 14px; font-weight: 900; }.pg-moveinvsearch .replenish-simple-table td { font-size: 16px; font-weight: 800; }.pg-moveinvsearch .replenish-simple-table .sku-col { font-size: 17px; font-weight: 900; }.pg-moveinvsearch .replenish-simple-table .location-col { font-size: 16px; font-weight: 900; }.pg-moveinvsearch .replenish-simple-table .rack-col { font-size: 16px; font-weight: 900; }.pg-moveinvsearch .replenish-simple-table .qt-col { font-size: 18px; font-weight: 900; }/* --------------------------------------------------------------------------
   [2026-10-10] warehouseManager_PackerPerformance（打包绩效）—— 作用域 .pg-packerperf —— 作用域 .pg-packerperf
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- *//* ===== 清关 Portal 设计系统（2026-10-08 业主裁定：整页套用 Portal 样式）=====
       本页是旧式表单页（全局 legacy 类），用本页样式把旧组件映射到 Portal 规格：
       输入框 Portal 边框/圆角，addButton 紧凑品牌紫（覆盖全局 button.addButton 的
       16px 边距/40px 高/20px 字号），deleteButton 红色描边，列表进 Portal 卡片。 */.customs-portal.pg-packerperf { padding: 1rem; }@media (max-width: 768px) {.customs-portal.pg-packerperf { padding: .5rem; }}.pg-packerperf .customs-filter-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: .5rem; align-items: end; }.pg-packerperf .customs-filter-grid .form-control, .pg-packerperf .customs-filter-grid .btn { font-size: .875rem; padding: .3rem .5rem; }.pg-packerperf .customs-table-wrap { min-height: 200px; max-height: calc(100vh - 330px); overflow: auto; border-radius: 8px; }@media (max-width: 768px) {}/* --------------------------------------------------------------------------
   [2026-10-10] inventory_ECommerceForecastDashboard（预报看板）块1 —— 作用域 .pg-fcdash（根 #forecastTop） —— 作用域 .pg-fcdash
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- */.pg-fcdash .box-table th, .pg-fcdash .box-table td { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }.pg-fcdash .box-table td.inbound-detail { white-space: normal; }/* Progress pill */.pg-fcdash .fc-progress { height: 22px; border-radius: 999px; background: #eef0f3; position: relative; overflow: hidden; }.pg-fcdash .fc-progress .fc-fill { height: 100%; width: 0%; border-radius: 999px; background: linear-gradient(90deg,#26c6da,#26a69a); transition: width .35s ease; }.pg-fcdash .fc-progress[data-variant="cyan"] .fc-fill { background: linear-gradient(90deg,#18ffff,#00bcd4); }.pg-fcdash .fc-progress[data-variant="rose"] .fc-fill { background: linear-gradient(90deg,#ff6f91,#d81b60); }.pg-fcdash .fc-progress[data-variant="purple"] .fc-fill { background: linear-gradient(90deg,#7b1fa2,#512da8); }.pg-fcdash .fc-progress[data-variant="orange"] .fc-fill { background: linear-gradient(90deg,#ff8a65,#ff7043); }.pg-fcdash .fc-progress .fc-label { display: none; }.pg-fcdash .fc-progress .fc-badge { position:absolute; left:8px; top:50%; transform:translateY(-50%); background:#ffffff; color:#333; font-weight:700; font-size:12px; line-height:16px; padding:2px 8px; border-radius:999px; box-shadow:0 1px 2px rgba(0,0,0,.08); }.pg-fcdash .fc-progress .fc-label { position:absolute; right:10px; top:50%; transform:translateY(-50%); color:#ffffff; font-weight:600; font-size:12px; text-shadow:0 1px 1px rgba(0,0,0,.25); }/* When percent is tiny, ensure label stays readable */.pg-fcdash .fc-progress[data-low="1"] .fc-label { color:#444; text-shadow:none; right:8px; }.pg-fcdash .box-table th, .pg-fcdash .box-table td { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }.pg-fcdash .box-table td.inbound-detail { white-space: normal; }/* Progress pill */.pg-fcdash .fc-progress { height: 22px; border-radius: 999px; background: #eef0f3; position: relative; overflow: hidden; }/* ... your existing styles ... *//* 🔹 Make checkboxes bigger on this page */.pg-fcdash #selectAllCheckbox, .pg-fcdash #selectAllCompanies, .pg-fcdash .row-checkbox, .pg-fcdash .companyCheckbox { width: 20px; /* or 22 / 24 if you want even bigger */ height: 20px; cursor: pointer; }/* ===== Scroll only the table area (not the whole page) ===== */.pg-fcdash.historyInboundECommerceSearchResultContainer { /* 高度用 JS 动态算更稳，这里先保证能滚动 */ overflow: auto; /* 关键：sticky 需要一个可滚动祖先 */ position: relative; /* 视觉：可选 */ border-radius: 6px; }/* ===== Freeze header row ===== */.pg-fcdash.historyInboundECommerceSearchResultContainer table thead th { position: sticky; top: 0; z-index: 10; /* 盖住 tbody */ background: #F5F1FA; /* 必须给背景，否则滚动时会透 */ }/* 可选：表头底部阴影更清晰 */.pg-fcdash.historyInboundECommerceSearchResultContainer table thead th { box-shadow: 0 2px 0 rgba(0,0,0,.08); }/* 如果你用的是 .table-hover/.table-light，可能会覆盖背景，这里再兜底 */.pg-fcdash.historyInboundECommerceSearchResultContainer table thead { background: #F5F1FA; }.pg-fcdash .fc-progress[data-variant="gray"] .fc-fill { background: linear-gradient(90deg,#9e9e9e,#616161); }.pg-fcdash .wrong-sku-alert { display: inline-flex; align-items: center; gap: 6px; background: #fff; color: #dc3545; border: 3px solid #dc3545; border-radius: 999px; padding: 4px 12px; font-size: 20px; font-weight: 900; line-height: 1; box-shadow: 0 0 0 3px rgba(220, 53, 69, 0.25); }.pg-fcdash .wrong-sku-alert .wrong-sku-icon { font-size: 28px; line-height: 1; }/* --------------------------------------------------------------------------
   [2026-10-10] inventory_ECommerceForecastDashboard 块2（排序图标） —— 作用域 .pg-fcdash
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- */.pg-fcdash .sort-icons { margin-left:.4rem; user-select:none; }.pg-fcdash .sort-icons .sort-asc, .pg-fcdash .sort-icons .sort-desc { cursor:pointer; font-size:.9em; padding:0 .2rem; }.pg-fcdash .sort-icons .active { font-weight:700; text-decoration:underline; }/* --------------------------------------------------------------------------
   [2026-10-10] history_ECommerceBatchSearch（批次搜索）—— 作用域 .pg-batchsearch（整页包裹） —— 作用域 .pg-batchsearch
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- *//* keep our styles over bootstrap */.pg-batchsearch table.order-summary.table-hover tbody tr:hover > * { background-color: inherit !important; }/* row colors */.pg-batchsearch table.order-summary tbody tr.row-printed > * { background-color:#d4edda !important; }/* printed */.pg-batchsearch table.order-summary tbody tr.row-processing > * { background-color:#fff3cd !important; }/* processing */.pg-batchsearch table.order-summary tbody tr.row-skipped > * { background-color:#f8d7da !important; }/* skipped */.pg-batchsearch table.order-summary tbody tr.row-default > * { background-color:#ffffff !important; }/* default *//* links */.pg-batchsearch a.track-link { color:#0d6efd !important; text-decoration: underline; font-weight:600; display:inline-block; }/*a.track-link::after { content:" ↗"; }*//* layout */.pg-batchsearch table.order-summary { table-layout: fixed; width:100%; }.pg-batchsearch table.order-summary th, .pg-batchsearch table.order-summary td { text-align:left !important; vertical-align:middle; word-wrap:break-word; overflow-wrap:anywhere; white-space:normal; }/* ===== 清关 Portal 设计系统（2026-10-08 业主裁定：整页套用
       warehouseManager_CustomsClearancePortal 样式） =====
       本页是服务端渲染的批次手风琴（无筛选栏/分页），套版方式：
       每个批次包一张 Portal 卡片，内表表头用 Portal 的白色 + 阴影线；
       行颜色（printed/processing/skipped 的语义淡色）与 Portal 状态色
       本就同系，保留不动。 */.pg-batchsearch .customs-portal, .pg-billdetail .customs-portal{ padding: 1rem; }.pg-batchsearch .customs-card .table thead th { background: #fff; box-shadow: 0 2px 0 rgba(0, 0, 0, .08); }.pg-batchsearch .customs-card .card-header { background: #fff; border-bottom: 1px solid var(--customs-border); }/* --------------------------------------------------------------------------
   [2026-10-10] inbound_ECommerceReceiving（电商收货）—— 作用域 .pg-ecreceiving（整页包裹） —— 作用域 .pg-ecreceiving
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- */.pg-ecreceiving .scan-toast { position: fixed; top: 80px; right: 20px; z-index: 3000; min-width: 220px; max-width: 420px; padding: 12px 16px; border-radius: 10px; color: #fff; font-weight: 600; box-shadow: 0 10px 30px rgba(0,0,0,.18); opacity: 0; transform: translateY(-8px); pointer-events: none; transition: opacity .18s ease, transform .18s ease; }.pg-ecreceiving .scan-toast.show { opacity: 1; transform: translateY(0); }.pg-ecreceiving .scan-toast.success { background: #198754; }.pg-ecreceiving .scan-toast.error { background: #dc3545; }.pg-ecreceiving .scan-toast.warning { background: #fd7e14; }.pg-ecreceiving .scan-toast.info { background: #6f42c1; }.pg-ecreceiving .scan-input-error { border-color: #dc3545 !important; box-shadow: 0 0 0 .2rem rgba(220,53,69,.15) !important; }/* --------------------------------------------------------------------------
   [2026-10-10] warehouseSelectionPage（选仓页）—— 作用域 .pg-whselect（整页包裹） —— 作用域 .pg-whselect
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- */.pg-whselect .warehouse-picker-wrap { max-width: 860px; margin: 0 auto; padding: 10px; }.pg-whselect .wh-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 12px; }.pg-whselect .wh-card { border-radius: 12px; padding: 14px; background: #fff; box-shadow: 0 1px 6px rgba(0,0,0,.08); border: 1px solid rgba(0,0,0,.06); display: flex; flex-direction: column; }.pg-whselect .wh-code { font-weight: 800; font-size: 18px; letter-spacing: .5px; }.pg-whselect .wh-sub { color: #666; font-size: 13px; margin-top: 6px; margin-bottom: 12px; min-height: 18px; }.pg-whselect .wh-btn { margin: auto 0 0; width: 100%; min-height: 0; padding: .5rem .75rem; font-size: .9375rem; font-weight: 700; line-height: 1.3; color: #fff; background: var(--ds-brand-grad); border: 1px solid rgba(84, 54, 140, .35); border-radius: var(--ds-radius); box-shadow: var(--ds-shadow-btn); transition: all .15s ease; }.pg-whselect .wh-btn:hover { color: #fff; transform: translateY(-1px); box-shadow: var(--ds-shadow-btn-hover); }.pg-whselect .wh-active { outline: 2px solid rgba(13,110,253,.45); background: rgba(13,110,253,.04); }/* --------------------------------------------------------------------------
   [2026-10-10] inventory_Search（库存搜索旧页）—— 作用域 .pg-invsearch（整页包裹） —— 作用域 .pg-invsearch
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- *//* Limit to these edit tables only */.pg-invsearch .inv-edit-table { table-layout: fixed; width: 100%; }.pg-invsearch .inv-edit-table th, .pg-invsearch .inv-edit-table td { vertical-align: middle; word-break: break-word; white-space: normal; padding: .5rem .6rem; }/* Center everything */.pg-invsearch .inv-edit-table thead th, .pg-invsearch .inv-edit-table td { text-align: center; }/* Make the Bag checkbox bigger (only this table) */.pg-invsearch .inv-edit-table .big-checkbox { width: 1.4em; height: 1.4em; transform: translateY(1px); }/* --------------------------------------------------------------------------
   [2026-10-10] outboundWarehouse_ECommercePick（电商拣货）—— 作用域 .pg-ecpick（整页包裹） —— 作用域 .pg-ecpick
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- *//* if you previously right-aligned numbers, undo it */.pg-ecpick .picking-table .num-cell { text-align: center !important; }/* keep your existing helpers */.pg-ecpick .picking-table .sticky { position: sticky; top: 0; background-color: #fff; z-index: 10; }.pg-ecpick .picking-table .truncate { white-space: normal !important;overflow: visible !important;text-overflow: unset; word-break: break-word; overflow-wrap: anywhere; }/* same base as your other picking tables */.pg-ecpick .picking-table { table-layout: fixed; width: 100%; }.pg-ecpick .picking-table, .pg-ecpick .picking-table th, .pg-ecpick .picking-table td { text-align: center !important; }.pg-ecpick .picking-table th, .pg-ecpick .picking-table td { vertical-align: middle; }/* numeric cells (still left-aligned per request) */.pg-ecpick .num-cell { white-space: nowrap; }/* input fills its cell nicely */.pg-ecpick .picking-input { width: 100%; min-width: 0; }/* All success rows get a custom green */.pg-ecpick .table-success { --bs-table-bg: #d6f5df; /* custom background */ --bs-table-color: #0a3622; /* optional text color */ }/* Keep colors on hover too */.pg-ecpick .table-hover tbody tr.table-success:hover > *, .pg-ecpick .table-hover tbody tr.table-warning:hover > *, .pg-ecpick .table-hover tbody tr.table-danger:hover > * { background-color: var(--bs-table-bg) !important; }.pg-ecpick .cell-warning { background-color: #fff3cd !important; }.pg-ecpick .cell-danger { background-color: #f8d7da !important; }.pg-ecpick .cell-success { background-color: #d6f5df !important; }/* Mini next-pick table sizing */.pg-ecpick .table.next-pick-mini { font-size: 1rem; }.pg-ecpick .table.next-pick-mini .big-cell { font-size: 1.3rem; }/* override your 2rem */.pg-ecpick .table.next-pick-mini .picking-input { font-size: 1.5rem; padding: .25rem .5rem; height: auto; min-height: 0; }/* Wrap long SKUs and constrain width window (20%–40%) */.pg-ecpick .table.next-pick-mini .sku-cell { white-space: normal; word-break: break-word; }.pg-ecpick .table.next-pick-mini .sku-wrap { display: inline-block; /* allows max/min width to apply */ min-width: 20%; max-width: 40%; white-space: normal; word-break: break-word; }/* Column width floor for Qty & Picked; SKU guided by wrapper above */.pg-ecpick .table.next-pick-mini col.col-qty, .pg-ecpick .table.next-pick-mini col.col-picked { width: 20%; }/* min 20% each */.pg-ecpick .table.next-pick-mini { table-layout: fixed; width: 100%; }/* stable widths */.pg-ecpick .next-pick-wrap { padding: 12px 5px; /* space from the card edge */ }.pg-ecpick .next-pick-wrap .table-responsive { border: 1px solid #e9ecef; /* subtle frame (optional) */ border-radius: 10px; /* rounded corners */ overflow: hidden; /* clip table borders to the radius */ background: #fff; width: 100%; /* keep it clean */ }/* Remove extra bottom gap inside the frame */.pg-ecpick .next-pick-wrap .table { margin-bottom: 0; }.pg-ecpick .picking-process { width: 100% !important; }/* was 90% inline *//* ensure wrapper and table expand fully */.pg-ecpick .next-pick-wrap .table { width: 100%; table-layout: fixed; }/* already fixed in your CSS, keep it *//* Mobile fixes for the BIG table */@media (max-width: 576px) {/* let text wrap instead of overlapping */.pg-ecpick .picking-table .loc-cell, .pg-ecpick .picking-table .bin-cell, .pg-ecpick .picking-table .sku-cell { white-space: normal !important; overflow-wrap: anywhere; /* modern */ word-break: break-word; /* fallback */ }/* if you used .truncate on SKU, disable it on mobile */.pg-ecpick .picking-table .sku-cell.truncate { white-space: normal !important; text-overflow: clip !important; overflow: visible !important; }/* slightly smaller padding so rows can grow vertically instead of squishing */.pg-ecpick .picking-table th, .pg-ecpick .picking-table td { padding: .4rem .5rem; line-height: 1.1; }/* make sure the responsive wrapper can scroll if needed */.pg-ecpick .table-responsive { overflow-x: auto; }}/* --------------------------------------------------------------------------
   [2026-10-10] outboundWarehouse_ECommerceScanToShipSearch（扫码发货）块1 —— 作用域 .pg-s2ssearch（整页包裹） —— 作用域 .pg-s2ssearch
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- *//* Static row colors to match your inline styles */.pg-s2ssearch .row-printed { background-color: #d4edda !important; }/* green  */.pg-s2ssearch .row-skipped { background-color: #f8d7da !important; }/* red    */.pg-s2ssearch .row-processing { background-color: #fff3cd !important; }/* yellow */.pg-s2ssearch .summaryGrid { margin-top: 6px; }.pg-s2ssearch .summaryCard { border:1px solid #dee2e6; border-radius: 14px; background:#f8f9fa; padding: 10px 12px; height: 100%; }.pg-s2ssearch .summaryTop { display:flex; justify-content:space-between; align-items:flex-start; gap: 12px; }.pg-s2ssearch .summaryTitle { font-weight: 800; font-size: 13px; letter-spacing: .02em; text-transform: uppercase; color:#495057; line-height: 1.1; }.pg-s2ssearch .summarySub { margin-top: 4px; font-size: 12px; color:#6c757d; }.pg-s2ssearch .summaryFraction { font-weight: 900; font-size: 28px; line-height: 1; white-space: nowrap; }.pg-s2ssearch .summaryFraction .slash { font-weight: 700; color:#adb5bd; padding: 0 6px; }.pg-s2ssearch .summaryFraction .total { font-weight: 800; color:#343a40; font-size: 22px; }/* simple progress pill */.pg-s2ssearch .sum-progress, .pg-frag-sepsearch .sum-progress{ margin-top: 10px; height: 10px; border-radius: 999px; background: #e9ecef; overflow: hidden; }.pg-s2ssearch .sum-progress .sum-fill, .pg-frag-sepsearch .sum-progress .sum-fill{ height: 100%; width: 0%; border-radius: 999px; background: linear-gradient(90deg,#26c6da,#26a69a); transition: width .25s ease; }/* --------------------------------------------------------------------------
   [2026-10-10] outboundWarehouse_ECommerceScanToShipSearch 块2（表格悬停色） —— 作用域 .pg-s2ssearch
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- *//* Make row color STATIC (disable Bootstrap hover tint) */.pg-s2ssearch .table-ShippingInfo .table.table-hover tbody tr:hover { background-color: inherit !important; }.pg-s2ssearch .table-ShippingInfo .table.table-hover tbody tr:hover > td, .pg-s2ssearch .table-ShippingInfo .table.table-hover tbody tr:hover > th { background-color: inherit !important; }/* Ensure cells take the row's background (so the color is solid) */.pg-s2ssearch .table-ShippingInfo .table tbody tr > td, .pg-s2ssearch .table-ShippingInfo .table tbody tr > th { background-color: inherit !important; }/* Prevent inner elements from painting white blocks over colored rows */.pg-s2ssearch .table-ShippingInfo tbody tr td > * { background: transparent !important; }/* ===== [zero-style batch 3] eCommerce_OrderUploadDH（敦煌订单上传）—— 作用域 .pg-orduploaddh（整页包裹）；原页 style 块被复制成嵌套重复（<style> 里套 <style>），迁移时已去重、删除失效的嵌套标签 ===== */.pg-orduploaddh .form-check, .pg-orduploadhl .form-check, .pg-orduploadtm .form-check{ margin-left: 10px; }.pg-orduploaddh .form-check-input, .pg-orduploadhl .form-check-input, .pg-orduploadtm .form-check-input{ cursor: pointer; }.pg-orduploaddh .form-check-label, .pg-orduploadhl .form-check-label, .pg-orduploadtm .form-check-label{ cursor: pointer; color: #666; font-size: 0.9em; }.pg-orduploaddh .form-check-input:checked + .form-check-label, .pg-orduploadhl .form-check-input:checked + .form-check-label, .pg-orduploadtm .form-check-input:checked + .form-check-label{ color: #333; font-weight: 500; }.pg-orduploaddh .address-cell, .recipient-cell, .phone-cell, .channel-cell { white-space: normal; word-break: break-word; vertical-align: top; }.pg-orduploaddh .address-block, .pg-orduploadtm .address-block{ line-height: 1.35; font-size: 13px; }.pg-orduploaddh .address-block .muted-line, .pg-orduploadtm .address-block .muted-line{ color: #666; font-size: 12px; }/* --------------------------------------------------------------------------
   [2026-10-10] freight_checkout（运费结算）—— 作用域 .pg-freightcheckout —— 作用域 .pg-freightcheckout
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- */.pg-freightcheckout #sumBreakdown .sumLine:first-child { border-top:1px dashed var(--line); margin-top:6px; }.pg-freightcheckout #sumBreakdown .sumLine:last-child { border-bottom:1px dashed var(--line); }.pg-freightcheckout #routeMap { width:100%; height:280px; border-radius:10px; border:1px solid var(--line); overflow:hidden; background: var(--soft); margin-top:10px; }.pg-freightcheckout .summaryBox { border:1px solid var(--line); border-radius:10px; padding:12px; background:#fff; margin-top:10px; }.pg-freightcheckout .sumTitle { font-weight:950; font-size:13px; color:var(--ink); margin-bottom:6px; }.pg-freightcheckout .sumLine { display:flex; justify-content:space-between; gap:10px; padding:6px 0; border-bottom:1px dashed var(--line); font-size:13px; }.pg-freightcheckout .sumLine:last-child { border-bottom:none; }.pg-freightcheckout .sumK { color:var(--muted); }.pg-freightcheckout .sumV { color:var(--ink); font-weight:800; text-align:right; }.pg-freightcheckout .mapHint { margin-top:8px; font-size:12px; color:var(--muted); line-height:1.35; }.pg-freightcheckout .miniBtn.sm { padding: 8px 12px; border-radius: 6px; font-size: 13px; }.pg-freightcheckout { /* 设计统一（2026-10-08）：令牌对齐清关 Portal */ --accent:#A683E3; --accent-dark:#815ac6; --ink:#212529; --muted:#6c757d; --line:#dee2e6; --soft:#f8f9fa; --bg:#fff; --good:#198754; --warn:#f59e0b; }.pageWrap.pg-freightcheckout { max-width: 1100px; margin: 18px auto; padding: 0 12px; }.pg-freightcheckout .h1 { font-size: 26px; font-weight: 900; margin:0; color: var(--ink); }.pg-freightcheckout .grid2 { display:grid; grid-template-columns: 1.2fr .8fr; gap: 14px; margin-top: 12px; }@media (max-width: 900px) {.pg-freightcheckout .grid2 { grid-template-columns: 1fr; }}.pg-freightcheckout .row { display:flex; gap:10px; align-items:center; flex-wrap:wrap; }.pg-freightcheckout .kv { display:grid; grid-template-columns: 120px 1fr; gap: 8px 10px; margin-top: 10px; }.pg-freightcheckout .kv .k { color: var(--muted); }.pg-freightcheckout .kv .v { color: var(--ink); font-weight: 700; }.pg-freightcheckout .payList { display:flex; flex-direction:column; gap:10px; margin-top: 10px; }.pg-freightcheckout .payBtn { width:100%; display:flex; align-items:center; justify-content:space-between; border:1px solid var(--line); background:#fff; border-radius:8px; padding: 12px 12px; cursor:pointer; transition: transform .08s ease, border-color .12s ease, box-shadow .12s ease; }.pg-freightcheckout .payBtn:hover { transform: translateY(-1px); border-color: rgba(166,131,227,.6); box-shadow:0 1px 4px rgba(0,0,0,.08); }.pg-freightcheckout .payLeft { display:flex; align-items:center; gap:10px; }.pg-freightcheckout .logoBox { width:40px; height:40px; border-radius:8px; background: var(--soft); border:1px solid var(--line); display:flex; align-items:center; justify-content:center; font-weight:900; color: var(--accent); }.pg-freightcheckout .payName { font-weight: 900; color: var(--ink); }.pg-freightcheckout .payDesc { color: var(--muted); font-size: 13px; margin-top: 2px; }.pg-freightcheckout .statusLine { margin-top: 12px; border:1px dashed var(--line); background: rgba(166,131,227,.06); border-radius: 10px; padding: 10px 12px; color: var(--muted); font-size: 13px; display:flex; gap:10px; align-items:center; justify-content:space-between; }.pg-freightcheckout .rightActions { display:flex; gap:10px; }.pg-freightcheckout .btnPrimary[disabled], .pg-freightcheckout .btnGhost[disabled] { opacity:.55; cursor:not-allowed; }.pg-freightcheckout .tiny { font-size: 12px; color: var(--muted); margin-top: 8px; line-height: 1.35; }.pg-freightcheckout .payBtn.isDisabled { opacity:.45; cursor:not-allowed; transform:none !important; }.pg-freightcheckout .topPanels { display:grid; grid-template-columns: 1fr 1fr; gap:14px; margin-top:10px; }@media (max-width: 900px) {.pg-freightcheckout .topPanels { grid-template-columns: 1fr; }}.pg-freightcheckout .consentWrap { margin-top:12px; padding:10px 12px; border:1px solid transparent; border-radius:8px; transition: border-color .15s ease, background .15s ease; }.pg-freightcheckout .consentWrap.isError { border-color: rgba(239,68,68,.45); background: rgba(239,68,68,.06); }.pg-freightcheckout #saveCardConsent.isError { outline: 2px solid rgba(239,68,68,.75); outline-offset: 2px; border-radius: 4px; }.pg-freightcheckout .btnPrimary.isBlocked { background: #c9c9c9 !important; color: #fff !important; cursor: pointer; opacity: 1 !important; }.pg-freightcheckout .route-stop-icon-wrap { background: transparent; border: 0; }.pg-freightcheckout .route-arrow-marker { width: 34px; height: 34px; border-radius: 50%; background: #fff; display: flex; align-items: center; justify-content: center; font-size: 22px; font-weight: 900; line-height: 1; box-shadow: 0 3px 10px rgba(0,0,0,.22); border: 2px solid currentColor; }.pg-freightcheckout .route-arrow-marker.pickup { color: #198754; /* green */ }.pg-freightcheckout .route-arrow-marker.delivery { color: #dc3545; /* red */ }/* --------------------------------------------------------------------------
   [2026-10-10] y2_OrderUpload / y2_OrderUpload-OceanHome（两文件字节级相同，样式只存一份）—— 作用域 .pg-y2upload —— 作用域 .pg-y2upload
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- */.pg-y2upload body { background:#f6f7fb !important; }.pageWrap.pg-y2upload { max-width:1500px; margin:18px auto 28px; padding:0 14px; }.pg-y2upload .pageHero, .pg-y2upload .contentCard, .pg-y2upload .actionCard { background:var(--card); border:1px solid var(--line); border-radius:24px; box-shadow:var(--shadow); }.pg-y2upload .pageHero { padding:18px 20px; margin-bottom:16px; background:linear-gradient(135deg,#ffffff 0%,#faf7ff 100%); }.pg-y2upload .pageTitle { margin:0; font-size:28px; line-height:1.15; font-weight:900; color:var(--ink); }.pg-y2upload .contentCard { padding:16px; margin-bottom:16px; }.pg-y2upload .uploadRow { display:grid; grid-template-columns:1.1fr auto; gap:14px; align-items:end; }.pg-y2upload .uploadBox, .pg-y2upload .helperBox, .pg-y2upload .uploadPanel, .pg-y2upload .clientPanel, .pg-y2upload .submitPanel { background:#fafbff; border:1px solid var(--line); border-radius:16px; padding:14px; }.pg-y2upload .actionCard { padding:16px; }.pg-y2upload .actionGrid { display:grid; grid-template-columns:1.2fr 1fr auto; gap:14px; align-items:end; }.pg-y2upload .submitPanel { display:flex; align-items:flex-end; justify-content:flex-end; gap:10px; background:transparent; border:none; padding:0; }.pg-y2upload .table tbody tr.table-warning td { background:#fff9e8 !important; }.pg-y2upload .form-check { margin-left:0; }.pg-y2upload .readonlyCell { background:#f8fafc !important; font-weight:700; }.pg-y2upload .dangerText { color:#c92a2a; font-weight:800; }.pg-y2upload .successText { color:#127a45; font-weight:800; }.pg-y2upload .miniNote { font-size:12px; color:var(--muted); margin-top:8px; }@media (max-width:1100px) {.pg-y2upload .uploadRow, .pg-y2upload .actionGrid { grid-template-columns:1fr; }.pg-y2upload .submitPanel { justify-content:stretch; flex-wrap:wrap; }.pg-y2upload .submitPanel .addButton, .pg-y2upload .submitPanel .btn { width:100%; min-width:0; }}@media (max-width:768px) {.pageWrap.pg-y2upload { padding:0 10px; }.pg-y2upload .pageHero, .pg-y2upload .contentCard, .pg-y2upload .actionCard { border-radius:16px; }.pg-y2upload .pageTitle { font-size:22px; }}/* --------------------------------------------------------------------------
   [2026-10-10] eCommerce_OrderUploadHTY / LX（样式字节级相同，只存一份）—— 作用域 .pg-orduploadhl（整页包裹） —— 作用域 .pg-orduploadhl
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- *//* --------------------------------------------------------------------------
   [2026-10-10] eCommerce_OrderUploadTM —— 作用域 .pg-orduploadtm（整页包裹） —— 作用域 .pg-orduploadtm
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- */.pg-orduploadtm .address-cell, .pg-orduploadtm .recipient-cell, .pg-orduploadtm .phone-cell { white-space: normal; word-break: break-word; vertical-align: top; }/* --------------------------------------------------------------------------
   [2026-10-10] warehouseManager_ECommerceOutbound —— 作用域 .pg-ecoutbound（整页包裹） —— 作用域 .pg-ecoutbound
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- */.pg-ecoutbound .ecommerceTotalShipmentsToday { display: flex; justify-content: center; /* horizontal center */ align-items: center; /* vertical center */ /* if you want the box to shrink/grow to fit its contents, instead of full-width: */ width: auto; padding: 0.5em 1em; /* tweak as you like */ }/* --------------------------------------------------------------------------
   [2026-10-10] warehouseManager_PalletOutbound —— 作用域 .pg-palletoutbound（整页包裹） —— 作用域 .pg-palletoutbound
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- */.pg-palletoutbound #actualInventoryTableModalOri th:first-child, .pg-palletoutbound #actualInventoryTableModalOri td:first-child { width: 10%; /* adjust as needed */ }/* --------------------------------------------------------------------------
   [2026-10-10] warehouseManager_ECommerceOutboundUpload —— 作用域 .pg-ecoutupload（整页包裹） —— 作用域 .pg-ecoutupload
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- *//* whole-row danger bg; !important beats Bootstrap/zebra */.pg-ecoutupload .table tr.state-red > * { background-color:#f8d7da !important; }/* --------------------------------------------------------------------------
   [2026-10-10] warehouseManager_PickerPerformance —— 作用域 .pg-pickerperf（整页包裹） —— 作用域 .pg-pickerperf
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- *//* Optional: nicer, fixed-width numeric columns */.pg-pickerperf .num-col { white-space: nowrap; }/* --------------------------------------------------------------------------
   [2026-10-10] forgotPassword（找回密码，登录页同族：视频背景）—— 作用域 .pg-forgotpw —— 作用域 .pg-forgotpw
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- */.pg-forgotpw, .pg-resetpw{ --brand:#A683E3; --brand-dark:#825dbf; --brand-deep:#6843a2; --soft:#f6f1fc; --border:#e5d8f4; --text:#292331; --muted:#716a7b; --danger:#b42318; }.pg-forgotpw body, .pg-resetpw body{ min-height:100vh; background:#111 !important; }.pg-forgotpw #title, .pg-resetpw #title{ position:relative; z-index:40; }#passwordBgVideo.pg-forgotpw { position:fixed; inset:0; width:100%; height:100%; object-fit:cover; z-index:-2; filter:brightness(.88); background:#000; }.passwordBgShade.pg-forgotpw { position:fixed; inset:0; z-index:-1; background:rgba(10,5,18,.28); }.passwordPage.pg-forgotpw { min-height:calc(100vh - 80px); display:grid; place-items:center; padding:28px 14px 52px; }.pg-forgotpw .passwordCard, .pg-resetpw .passwordCard{ width:min(590px,100%); overflow:hidden; background:rgba(255,255,255,.96); border:1px solid rgba(255,255,255,.45); border-radius:22px; box-shadow:0 25px 75px rgba(0,0,0,.28); backdrop-filter:blur(10px); }.pg-forgotpw .cardTop, .pg-resetpw .cardTop{ height:7px; background:linear-gradient( 90deg, var(--brand-dark), var(--brand), #c6aaee ); }.pg-forgotpw .cardBody, .pg-resetpw .cardBody{ padding:29px 31px 33px; }.pg-forgotpw .backLink, .pg-resetpw .backLink{ color:var(--muted); font-size:12px; font-weight:900; text-decoration:none; }.pg-forgotpw .backLink:hover, .pg-resetpw .backLink:hover{ color:var(--brand-deep); }.pg-forgotpw .eyebrow, .pg-resetpw .eyebrow{ display:inline-flex; margin-top:24px; padding:6px 10px; color:var(--brand-deep); background:var(--soft); border:1px solid var(--border); border-radius:999px; font-size:10px; font-weight:1000; letter-spacing:.13em; }.pg-forgotpw h1, .pg-resetpw h1{ margin:12px 0 8px; color:var(--text); font-size:clamp(30px,5vw,41px); line-height:1.12; font-weight:1000; }.pg-forgotpw .lead, .pg-resetpw .lead{ margin:0; color:var(--muted); font-size:15px; line-height:1.65; }.pg-forgotpw #forgotForm { display:grid; gap:18px; margin-top:24px; }.pg-forgotpw .form-group label { display:block; margin-bottom:7px; color:var(--text); font-size:13px; font-weight:900; }.pg-forgotpw .form-control { border-radius:12px; }.pg-forgotpw .primaryButton, .pg-forgotpw .secondaryButton, .pg-resetpw .primaryButton, .pg-resetpw .secondaryButton{ min-height:50px; display:inline-flex; justify-content:center; align-items:center; gap:9px; padding:11px 16px; border-radius:12px; font-size:14px; font-weight:1000; text-decoration:none; cursor:pointer; }.pg-forgotpw .primaryButton, .pg-resetpw .primaryButton{ color:#fff; background:var(--brand); border:1px solid var(--brand); box-shadow:0 10px 22px rgba(166,131,227,.24); }.pg-forgotpw .primaryButton:hover, .pg-resetpw .primaryButton:hover{ color:#fff; background:var(--brand-dark); }.pg-forgotpw .primaryButton:disabled, .pg-resetpw .primaryButton:disabled{ opacity:.7; cursor:not-allowed; }.pg-forgotpw .secondaryButton, .pg-resetpw .secondaryButton{ color:var(--brand-deep); background:var(--soft); border:1px solid var(--border); }.pg-forgotpw .spinner, .pg-resetpw .spinner{ display:none; width:17px; height:17px; border:2px solid rgba(255,255,255,.45); border-top-color:#fff; border-radius:50%; animation:spin .8s linear infinite; }.pg-forgotpw .primaryButton.loading .spinner, .pg-resetpw .primaryButton.loading .spinner{ display:block; }@keyframes spin {
to { transform:rotate(360deg); }
}.pg-forgotpw .alertBox, .pg-resetpw .alertBox{ margin-top:18px; padding:12px 14px; color:var(--danger); background:#fff0ee; border:1px solid #f2c7c2; border-radius:11px; font-size:12px; }.pg-forgotpw .infoBox { margin-top:21px; padding:13px 14px; background:var(--soft); border:1px solid var(--border); border-radius:12px; }.pg-forgotpw .infoBox strong { color:var(--brand-deep); font-size:12px; }.pg-forgotpw .infoBox p { margin:5px 0 0; color:var(--muted); font-size:11px; line-height:1.5; }.pg-forgotpw .successIcon { width:57px; height:57px; display:grid; place-items:center; margin-top:18px; color:#fff; background:var(--brand); border-radius:50%; font-size:28px; font-weight:1000; }.pg-forgotpw .stepList { display:grid; gap:10px; margin-top:23px; }.pg-forgotpw .stepList > div { display:grid; grid-template-columns:31px 1fr; gap:10px; align-items:start; padding:10px 11px; border:1px solid var(--border); border-radius:11px; }.pg-forgotpw .stepList span { width:31px; height:31px; display:grid; place-items:center; color:var(--brand-deep); background:var(--soft); border-radius:50%; font-size:11px; font-weight:1000; }.pg-forgotpw .stepList p { margin:6px 0 0; color:var(--muted); font-size:12px; }.pg-forgotpw .actionGrid, .pg-resetpw .actionGrid{ display:grid; grid-template-columns:1fr 1fr; gap:10px; margin-top:22px; }.pg-forgotpw code { color:var(--brand-deep); }@media (max-width:600px) {.pg-forgotpw .cardBody, .pg-resetpw .cardBody{ padding:24px 18px 27px; }.pg-forgotpw .actionGrid, .pg-resetpw .actionGrid{ grid-template-columns:1fr; }}/* --------------------------------------------------------------------------
   [2026-10-10] resetPassword（重置密码，登录页同族：视频背景）—— 作用域 .pg-resetpw —— 作用域 .pg-resetpw
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- */#passwordBgVideo.pg-resetpw { position:fixed; inset:0; width:100%; height:100%; object-fit:cover; z-index:-2; filter:brightness(.88); background:#000; }.passwordBgShade.pg-resetpw { position:fixed; inset:0; z-index:-1; background:rgba(10,5,18,.28); }.passwordPage.pg-resetpw { min-height:calc(100vh - 80px); display:grid; place-items:center; padding:28px 14px 52px; }.pg-resetpw #resetForm { display:grid; gap:18px; margin-top:24px; }.pg-resetpw .formGroup label { display:block; margin-bottom:7px; color:var(--text); font-size:13px; font-weight:900; }.pg-resetpw .passwordWrap { position:relative; }.pg-resetpw .passwordWrap input { width:100%; min-height:52px; padding:12px 75px 12px 14px; color:var(--text); background:#fff; border:1px solid #d7cfde; border-radius:12px; outline:none; font-size:15px; }.pg-resetpw .passwordWrap input:focus { border-color:var(--brand); box-shadow:0 0 0 4px rgba(166,131,227,.18); }.pg-resetpw .showButton { position:absolute; right:9px; top:50%; transform:translateY(-50%); min-width:55px; padding:7px 8px; color:var(--brand-deep); background:var(--soft); border:1px solid var(--border); border-radius:8px; font-size:10px; font-weight:900; }.pg-resetpw .formGroup small { display:block; margin-top:7px; color:var(--muted); font-size:10px; }@keyframes spin {
to { transform:rotate(360deg); }
}.pg-resetpw .resultIcon { width:58px; height:58px; display:grid; place-items:center; margin-top:15px; color:#fff; border-radius:50%; font-size:29px; font-weight:1000; }.pg-resetpw .resultIcon.success { background:var(--brand); }.pg-resetpw .resultIcon.invalid { background:#d36257; }.pg-resetpw .fullButton { width:100%; margin-top:22px; }@media (max-width:600px) {}/* --------------------------------------------------------------------------
   [2026-10-10] setting_UserAccounts（用户账户）—— 作用域 .pg-useraccounts（根 .ClientGroupList#clientListTop） —— 作用域 .pg-useraccounts
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- *//* Target all your accounting tables by id prefix */.pg-useraccounts table[id^="accountingTable"] { width: 100%; max-width: 1100px; margin: 0 auto; table-layout: fixed; border-collapse: collapse; }.pg-useraccounts table[id^="accountingTable"] th, .pg-useraccounts table[id^="accountingTable"] td { white-space: normal; word-break: break-word; overflow-wrap: anywhere; vertical-align: middle; padding: .5rem .6rem; text-align: left !important; }.pg-useraccounts table[id^="accountingTable"] thead th { position: sticky; top: 0; background: #fff; z-index: 1; }.pg-useraccounts .modal-body .accounting-table-wrap { max-height: 60vh; overflow: auto; }.pg-useraccounts table[id^="accountingTable"] td.amount, .pg-useraccounts table[id^="accountingTable"] td.balance { text-align: left !important; }/* =========================
       Unified nice modals
       ========================= */.pg-useraccounts .modal[id^="clientsModal"] .modal-dialog, .pg-useraccounts .modal[id^="basicInfoModal"] .modal-dialog, .pg-useraccounts .modal[id^="emailsModal"] .modal-dialog, .pg-useraccounts .modal[id^="accountingModal"] .modal-dialog { margin-top: 24px; }.pg-useraccounts .modal[id^="clientsModal"] .modal-content, .pg-useraccounts .modal[id^="basicInfoModal"] .modal-content, .pg-useraccounts .modal[id^="emailsModal"] .modal-content, .pg-useraccounts .modal[id^="accountingModal"] .modal-content { border: 0; border-radius: 20px; overflow: hidden; box-shadow: 0 20px 60px rgba(0,0,0,.16); }.pg-useraccounts .modal[id^="clientsModal"] .modal-header, .pg-useraccounts .modal[id^="basicInfoModal"] .modal-header, .pg-useraccounts .modal[id^="emailsModal"] .modal-header, .pg-useraccounts .modal[id^="accountingModal"] .modal-header { border-bottom: 1px solid rgba(0,0,0,.08); padding: 16px 18px; background: #fff; }.pg-useraccounts .modal[id^="clientsModal"] .modal-title, .pg-useraccounts .modal[id^="basicInfoModal"] .modal-title, .pg-useraccounts .modal[id^="emailsModal"] .modal-title, .pg-useraccounts .modal[id^="accountingModal"] .modal-title { font-weight: 800; font-size: 18px; }.pg-useraccounts .modal[id^="clientsModal"] .modal-body, .pg-useraccounts .modal[id^="basicInfoModal"] .modal-body, .pg-useraccounts .modal[id^="emailsModal"] .modal-body, .pg-useraccounts .modal[id^="accountingModal"] .modal-body { background: #fafafa; padding: 16px; }.pg-useraccounts .modal[id^="clientsModal"] .modal-footer, .pg-useraccounts .modal[id^="basicInfoModal"] .modal-footer, .pg-useraccounts .modal[id^="emailsModal"] .modal-footer, .pg-useraccounts .modal[id^="accountingModal"] .modal-footer { border-top: 1px solid rgba(0,0,0,.08); padding: 14px 16px; background: #fff; }.pg-useraccounts .modal[id^="clientsModal"] .section-wrap, .pg-useraccounts .modal[id^="basicInfoModal"] .section-wrap, .pg-useraccounts .modal[id^="emailsModal"] .section-wrap, .pg-useraccounts .modal[id^="accountingModal"] .section-wrap, .pg-useraccounts .modal[id^="clientsModal"] .clients-wrap { display: flex; flex-direction: column; gap: 14px; }.pg-useraccounts .modal[id^="clientsModal"] .section-card, .pg-useraccounts .modal[id^="basicInfoModal"] .section-card, .pg-useraccounts .modal[id^="emailsModal"] .section-card, .pg-useraccounts .modal[id^="accountingModal"] .section-card, .pg-useraccounts .modal[id^="clientsModal"] .clients-section { border: 1px solid rgba(0,0,0,.12); background: rgba(0,0,0,.02); border-radius: 16px; padding: 14px; }.pg-useraccounts .modal[id^="clientsModal"] .section-title, .pg-useraccounts .modal[id^="basicInfoModal"] .section-title, .pg-useraccounts .modal[id^="emailsModal"] .section-title, .pg-useraccounts .modal[id^="accountingModal"] .section-title, .pg-useraccounts .modal[id^="clientsModal"] .clients-section-title { font-size: 15px; font-weight: 800; margin-bottom: 10px; color: rgba(0,0,0,.75); display: flex; align-items: center; gap: 8px; }.pg-useraccounts .modal[id^="clientsModal"] .section-title:before, .pg-useraccounts .modal[id^="basicInfoModal"] .section-title:before, .pg-useraccounts .modal[id^="emailsModal"] .section-title:before, .pg-useraccounts .modal[id^="accountingModal"] .section-title:before, .pg-useraccounts .modal[id^="clientsModal"] .clients-section-title:before { content: ""; width: 10px; height: 10px; border-radius: 999px; background: var(--accent, #A683E3); display: inline-block; }.pg-useraccounts .modal[id^="clientsModal"] label.form-label, .pg-useraccounts .modal[id^="basicInfoModal"] label.form-label, .pg-useraccounts .modal[id^="emailsModal"] label.form-label, .pg-useraccounts .modal[id^="accountingModal"] label.form-label { font-weight: 700; margin-bottom: 6px; color: rgba(0,0,0,.72); }.pg-useraccounts .modal[id^="clientsModal"] .form-control, .pg-useraccounts .modal[id^="clientsModal"] .form-select, .pg-useraccounts .modal[id^="basicInfoModal"] .form-control, .pg-useraccounts .modal[id^="basicInfoModal"] .form-select, .pg-useraccounts .modal[id^="emailsModal"] .form-control, .pg-useraccounts .modal[id^="emailsModal"] .form-select, .pg-useraccounts .modal[id^="accountingModal"] .form-control, .pg-useraccounts .modal[id^="accountingModal"] .form-select { border-radius: 12px; border: 1px solid rgba(0,0,0,.14); padding: 9px 10px; background: #fff; }.pg-useraccounts .modal[id^="clientsModal"] .form-control:focus, .pg-useraccounts .modal[id^="clientsModal"] .form-select:focus, .pg-useraccounts .modal[id^="basicInfoModal"] .form-control:focus, .pg-useraccounts .modal[id^="basicInfoModal"] .form-select:focus, .pg-useraccounts .modal[id^="emailsModal"] .form-control:focus, .pg-useraccounts .modal[id^="emailsModal"] .form-select:focus, .pg-useraccounts .modal[id^="accountingModal"] .form-control:focus, .pg-useraccounts .modal[id^="accountingModal"] .form-select:focus { border-color: var(--accent, #A683E3); box-shadow: 0 0 0 .2rem rgba(166,131,227,.18); }.pg-useraccounts .modal[id^="clientsModal"] .help-hint, .pg-useraccounts .modal[id^="basicInfoModal"] .help-hint, .pg-useraccounts .modal[id^="emailsModal"] .help-hint, .pg-useraccounts .modal[id^="accountingModal"] .help-hint { font-size: 12px; color: rgba(0,0,0,.55); margin-top: 6px; }.pg-useraccounts .modal[id^="clientsModal"] .miniBtn, .pg-useraccounts .modal[id^="basicInfoModal"] .miniBtn, .pg-useraccounts .modal[id^="emailsModal"] .miniBtn, .pg-useraccounts .modal[id^="accountingModal"] .miniBtn { padding: 7px 12px; border-radius: 12px; font-size: 13px; }.pg-useraccounts .modal[id^="clientsModal"] .dangerBtn, .pg-useraccounts .modal[id^="basicInfoModal"] .dangerBtn, .pg-useraccounts .modal[id^="emailsModal"] .dangerBtn, .pg-useraccounts .modal[id^="accountingModal"] .dangerBtn { background: #f34b62; color: #fff; border: 0; padding: 7px 12px; border-radius: 12px; font-size: 13px; }.pg-useraccounts .modal[id^="clientsModal"] .dangerBtn:hover, .pg-useraccounts .modal[id^="basicInfoModal"] .dangerBtn:hover, .pg-useraccounts .modal[id^="emailsModal"] .dangerBtn:hover, .pg-useraccounts .modal[id^="accountingModal"] .dangerBtn:hover { filter: brightness(.95); }.pg-useraccounts .modal-actions { display: flex; justify-content: flex-end; gap: 10px; margin-top: 10px; flex-wrap: wrap; }.pg-useraccounts .info-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; }.pg-useraccounts .info-field.full { grid-column: 1 / -1; }.pg-useraccounts .kpi-strip { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; }.pg-useraccounts .kpi-card { background: #fff; border: 1px solid rgba(0,0,0,.10); border-radius: 14px; padding: 12px 14px; }.pg-useraccounts .kpi-card .kpi-label { font-size: 12px; color: rgba(0,0,0,.58); margin-bottom: 4px; }.pg-useraccounts .kpi-card .kpi-value { font-size: 24px; font-weight: 800; line-height: 1.1; }.pg-useraccounts .table-card { background: #fff; border: 1px solid rgba(0,0,0,.12); border-radius: 16px; padding: 12px; }.pg-useraccounts .modal[id^="clientsModal"] .clients-table, .pg-useraccounts .modal[id^="accountingModal"] .table-card table { width: 100%; border-collapse: separate; border-spacing: 0; overflow: hidden; border-radius: 14px; background: #fff; border: 1px solid rgba(0,0,0,.12); }.pg-useraccounts .modal[id^="clientsModal"] .clients-table thead th, .pg-useraccounts .modal[id^="accountingModal"] .table-card table thead th { position: sticky; top: 0; z-index: 1; background: #fff; font-weight: 800; border-bottom: 1px solid rgba(0,0,0,.08); }.pg-useraccounts .modal[id^="clientsModal"] .clients-table th, .pg-useraccounts .modal[id^="clientsModal"] .clients-table td, .pg-useraccounts .modal[id^="accountingModal"] .table-card table th, .pg-useraccounts .modal[id^="accountingModal"] .table-card table td { padding: 10px 10px; vertical-align: middle; border-bottom: 1px solid rgba(0,0,0,.06); }.pg-useraccounts .modal[id^="clientsModal"] .clients-table tbody tr:nth-child(odd), .pg-useraccounts .modal[id^="accountingModal"] .table-card table tbody tr:nth-child(odd) { background: rgba(0,0,0,.02); }.pg-useraccounts .modal[id^="clientsModal"] .client-id { font-weight: 800; letter-spacing: .2px; }@media (max-width: 768px) {.pg-useraccounts .info-grid, .pg-useraccounts .kpi-strip { grid-template-columns: 1fr; }}.pg-useraccounts .pending-deposit-badge { display: none; margin-left: 8px; align-items: center; gap: 5px; padding: 3px 8px; border-radius: 999px; background: #fff7ed; border: 1px solid rgba(249, 115, 22, .35); color: #c2410c; font-size: 12px; font-weight: 900; white-space: nowrap; animation: pendingDepositPulse 1.4s ease-in-out infinite; }.pg-useraccounts .userRow.has-pending-deposit .pending-deposit-badge { display: inline-flex; }@keyframes pendingDepositPulse {
0% { box-shadow: 0 0 0 0 rgba(249, 115, 22, .35); }
70% { box-shadow: 0 0 0 8px rgba(249, 115, 22, 0); }
100% { box-shadow: 0 0 0 0 rgba(249, 115, 22, 0); }
}.pg-useraccounts .deposit-review-table-wrap { max-height: 260px; overflow: auto; }.pg-useraccounts .deposit-proof-btn { border: 0; border-radius: 10px; padding: 6px 10px; font-size: 12px; font-weight: 800; background: #A683E3; color: #fff; }.pg-useraccounts .deposit-proof-btn:hover, .pg-billdetail .deposit-proof-btn:hover{ filter: brightness(.95); }.pg-useraccounts .deposit-status-pending { color: #c2410c; font-weight: 900; }.pg-useraccounts .deposit-empty { color: rgba(0,0,0,.55); text-align: center; padding: 14px; }/* ===== Client List: same style as inbound history ===== */#clientListTop.pg-useraccounts .client-filter-row { display: flex; flex-wrap: wrap; gap: 6px; align-items: end; }.pg-useraccounts .clientListSearchResultContainer { overflow: auto; position: relative; border-radius: 6px; margin-top: 8px; }.pg-useraccounts .clientListSearchResultContainer table { table-layout: fixed; min-width: 1100px; }.pg-useraccounts .clientListSearchResultContainer thead th { position: sticky; top: 0; z-index: 10; background: #fff; box-shadow: 0 2px 0 rgba(0,0,0,.08); }.pg-useraccounts .clientListSearchResultContainer th, .pg-useraccounts .clientListSearchResultContainer td { vertical-align: middle; word-break: break-word; overflow-wrap: anywhere; }.pg-useraccounts .clientListFilterResultMsg { text-align: center; padding: 10px; background: #e8f5e8; margin: 10px 0; border-radius: 4px; }.pg-useraccounts .clientListDropdownMenu { max-height: 360px; overflow: auto; min-width: 190px; }.pg-useraccounts .clientListDropdownMenu label { display: flex; align-items: center; gap: 6px; white-space: nowrap; margin: 3px 0; }@media (max-width: 768px) {#clientListTop.pg-useraccounts .client-filter-row { align-items: stretch; }#clientListTop.pg-useraccounts .client-filter-row > div { width: 100%; }#clientListTop.pg-useraccounts .btn, #clientListTop.pg-useraccounts .dropdown, #clientListTop.pg-useraccounts .dropdown button { width: 100%; }}.pg-useraccounts .sortable-th { padding: 0 !important; }.pg-useraccounts .sort-header-btn { width: 100%; border: 0; background: transparent; display: flex; align-items: center; justify-content: space-between; gap: 6px; padding: 8px 6px; font-weight: 800; color: inherit; cursor: pointer; text-align: left; }.pg-useraccounts .sort-header-btn:hover { background: rgba(166, 131, 227, .10); }.pg-useraccounts .sort-header-btn .sort-label { display: inline-flex; align-items: center; line-height: 1.15; }.pg-useraccounts .sort-icons { display: inline-flex; flex-direction: column; line-height: 9px; font-size: 10px; color: rgba(0,0,0,.35); user-select: none; }.pg-useraccounts .sort-icons .sort-up, .pg-useraccounts .sort-icons .sort-down { height: 9px; }.pg-useraccounts .sort-header-btn.sort-asc .sort-up { color: #A683E3; font-weight: 900; }.pg-useraccounts .sort-header-btn.sort-desc .sort-down { color: #A683E3; font-weight: 900; }.pg-useraccounts .sort-header-btn.sort-asc .sort-down, .pg-useraccounts .sort-header-btn.sort-desc .sort-up { color: rgba(0,0,0,.20); }.pg-useraccounts table[id^="accountingSummaryTable"] { width: 100%; max-width: 1100px; margin: 0 auto; table-layout: fixed; border-collapse: collapse; }.pg-useraccounts table[id^="accountingSummaryTable"] th, .pg-useraccounts table[id^="accountingSummaryTable"] td { white-space: normal; word-break: break-word; overflow-wrap: anywhere; vertical-align: middle; padding: .5rem .6rem; text-align: left !important; }.pg-useraccounts table[id^="accountingSummaryTable"] thead th { position: sticky; top: 0; background: #fff; z-index: 1; }.pg-useraccounts .accountingTypeDropdownMenu { max-height: 320px; overflow: auto; min-width: 220px; }.pg-useraccounts .accountingTypeDropdownMenu label { display: flex; align-items: center; gap: 6px; white-space: nowrap; margin: 4px 0; }.pg-useraccounts .client-list-loading { display:none; position:absolute; inset:0; z-index:20; background:rgba(255,255,255,.78); align-items:center; justify-content:center; font-weight:800; }.pg-useraccounts .client-list-loading.show { display:flex; }.pg-useraccounts .client-list-loading .spinner-border { width:2rem; height:2rem; }.pg-useraccounts .client-pagination { gap:8px; flex-wrap:wrap; }.pg-useraccounts .client-pagination .form-select { width:auto; }.pg-useraccounts .shared-modal-note { font-size:12px; color:rgba(0,0,0,.55); }/* =========================================================
       设计统一（2026-10-08）：对齐清关 Portal 规格（与 PR #81 物流商同法）
       弹窗圆角 20→10、分区卡 16→10、控件 12→6，边框 rgba 黑 → #dee2e6，
       弹窗阴影压平，dangerBtn 与结果条改 Portal 语义色，
       待审核押金徽章由橙改 Bootstrap 警告黄（语义不变）。
       ========================================================= */.pg-useraccounts .modal[id^="clientsModal"] .modal-content, .pg-useraccounts .modal[id^="basicInfoModal"] .modal-content, .pg-useraccounts .modal[id^="emailsModal"] .modal-content, .pg-useraccounts .modal[id^="accountingModal"] .modal-content { border-radius: 10px; box-shadow: 0 8px 24px rgba(0, 0, 0, .12); }.pg-useraccounts .modal[id^="clientsModal"] .modal-header, .pg-useraccounts .modal[id^="basicInfoModal"] .modal-header, .pg-useraccounts .modal[id^="emailsModal"] .modal-header, .pg-useraccounts .modal[id^="accountingModal"] .modal-header { border-bottom-color: var(--customs-border); }.pg-useraccounts .modal[id^="clientsModal"] .modal-footer, .pg-useraccounts .modal[id^="basicInfoModal"] .modal-footer, .pg-useraccounts .modal[id^="emailsModal"] .modal-footer, .pg-useraccounts .modal[id^="accountingModal"] .modal-footer { border-top-color: var(--customs-border); }.pg-useraccounts .modal[id^="clientsModal"] .modal-body, .pg-useraccounts .modal[id^="basicInfoModal"] .modal-body, .pg-useraccounts .modal[id^="emailsModal"] .modal-body, .pg-useraccounts .modal[id^="accountingModal"] .modal-body { background: #f8f9fa; }.pg-useraccounts .modal[id^="clientsModal"] .section-card, .pg-useraccounts .modal[id^="basicInfoModal"] .section-card, .pg-useraccounts .modal[id^="emailsModal"] .section-card, .pg-useraccounts .modal[id^="accountingModal"] .section-card, .pg-useraccounts .modal[id^="clientsModal"] .clients-section { border-color: var(--customs-border); background: #f8f9fa; border-radius: 10px; }.pg-useraccounts .modal[id^="clientsModal"] .section-title, .pg-useraccounts .modal[id^="basicInfoModal"] .section-title, .pg-useraccounts .modal[id^="emailsModal"] .section-title, .pg-useraccounts .modal[id^="accountingModal"] .section-title, .pg-useraccounts .modal[id^="clientsModal"] .clients-section-title { color: #212529; }.pg-useraccounts .modal[id^="clientsModal"] label.form-label, .pg-useraccounts .modal[id^="basicInfoModal"] label.form-label, .pg-useraccounts .modal[id^="emailsModal"] label.form-label, .pg-useraccounts .modal[id^="accountingModal"] label.form-label { color: #212529; }.pg-useraccounts .modal[id^="clientsModal"] .form-control, .pg-useraccounts .modal[id^="basicInfoModal"] .form-control, .pg-useraccounts .modal[id^="emailsModal"] .form-control, .pg-useraccounts .modal[id^="accountingModal"] .form-control, .pg-useraccounts .modal[id^="clientsModal"] .form-select, .pg-useraccounts .modal[id^="basicInfoModal"] .form-select, .pg-useraccounts .modal[id^="emailsModal"] .form-select, .pg-useraccounts .modal[id^="accountingModal"] .form-select { border-radius: 6px; border-color: var(--customs-border); }.pg-useraccounts .modal[id^="clientsModal"] .help-hint, .pg-useraccounts .modal[id^="basicInfoModal"] .help-hint, .pg-useraccounts .modal[id^="emailsModal"] .help-hint, .pg-useraccounts .modal[id^="accountingModal"] .help-hint { color: #6c757d; }.pg-useraccounts .modal[id^="clientsModal"] .miniBtn, .pg-useraccounts .modal[id^="basicInfoModal"] .miniBtn, .pg-useraccounts .modal[id^="emailsModal"] .miniBtn, .pg-useraccounts .modal[id^="accountingModal"] .miniBtn { border-radius: 6px; }.pg-useraccounts .modal[id^="clientsModal"] .dangerBtn, .pg-useraccounts .modal[id^="basicInfoModal"] .dangerBtn, .pg-useraccounts .modal[id^="emailsModal"] .dangerBtn, .pg-useraccounts .modal[id^="accountingModal"] .dangerBtn { background: #dc3545; border-radius: 6px; }.pg-useraccounts .modal[id^="clientsModal"] .clients-table, .pg-useraccounts .modal[id^="accountingModal"] .table-card table { border-radius: 10px; border-color: var(--customs-border); }.pg-useraccounts .modal[id^="clientsModal"] .clients-table thead th, .pg-useraccounts .modal[id^="accountingModal"] .table-card table thead th { border-bottom-color: var(--customs-border); }.pg-useraccounts .modal[id^="clientsModal"] .clients-table th, .pg-useraccounts .modal[id^="clientsModal"] .clients-table td, .pg-useraccounts .modal[id^="accountingModal"] .table-card table th, .pg-useraccounts .modal[id^="accountingModal"] .table-card table td { border-bottom-color: #e9ecef; }.pg-useraccounts .modal[id^="clientsModal"] .clients-table tbody tr:nth-child(odd), .pg-useraccounts .modal[id^="accountingModal"] .table-card table tbody tr:nth-child(odd) { background: #f8f9fa; }.pg-useraccounts .kpi-card { border-color: var(--customs-border); border-radius: 10px; box-shadow: 0 1px 4px rgba(0, 0, 0, .05); }.pg-useraccounts .kpi-card .kpi-label { color: #6c757d; }.pg-useraccounts .table-card { border-color: var(--customs-border); border-radius: 10px; box-shadow: 0 1px 4px rgba(0, 0, 0, .05); }.pg-useraccounts .clientListFilterResultMsg { background: #d1e7dd; }.pg-useraccounts .sort-icons { color: #6c757d; }.pg-useraccounts .sort-header-btn.sort-asc .sort-down, .pg-useraccounts .sort-header-btn.sort-desc .sort-up { color: #adb5bd; }.pg-useraccounts .deposit-proof-btn { border-radius: 6px; }.pg-useraccounts .deposit-empty, .pg-useraccounts .shared-modal-note { color: #6c757d; }.pg-useraccounts .pending-deposit-badge { background: #fff3cd; border-color: #ffda6a; color: #664d03; animation: pendingDepositPulsePortal 1.4s ease-in-out infinite; }.pg-useraccounts .deposit-status-pending { color: #664d03; }@keyframes pendingDepositPulsePortal {
0% { box-shadow: 0 0 0 0 rgba(255, 193, 7, .45); }
70% { box-shadow: 0 0 0 8px rgba(255, 193, 7, 0); }
100% { box-shadow: 0 0 0 0 rgba(255, 193, 7, 0); }
}/* 本页 addButton/addButtonDisabled 紧凑化（与 PR #77 同规格） *//* --------------------------------------------------------------------------
   [2026-10-10] freight_Management（运费管理）块1 —— 作用域 .pg-freightmgmt —— 作用域 .pg-freightmgmt
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- */.pg-freightmgmt input[type="checkbox"], .pg-orderlist input[type="checkbox"], .pg-y2orders input[type="checkbox"]{ width: 20px; /* Adjust the size as needed */ height: 20px; cursor: pointer; }/* Highlight "No Label" rows in Bootstrap 5 tables */.pg-freightmgmt tr.no-label > * { background-color: #f781a0 !important; /* your red */ color: #fff !important; }/* Make tracking links readable and pop */.pg-freightmgmt tr.no-label a, .pg-orderlist tr.no-label a, .pg-y2orders tr.no-label a{ color: #fff !important; text-decoration: underline; font-weight: 600; }/* Linked tracking looks clearly clickable */.pg-freightmgmt .tracking-cell a.tracking-link, .pg-orderlist .tracking-cell a.tracking-link, .pg-y2orders .tracking-cell a.tracking-link{ text-decoration: underline; cursor: pointer; font-weight: 600; }.pg-freightmgmt .tracking-cell a.tracking-link:link, .pg-orderlist .tracking-cell a.tracking-link:link, .pg-y2orders .tracking-cell a.tracking-link:link{ color: #0d6efd; }/* Bootstrap primary */.pg-freightmgmt .tracking-cell a.tracking-link:visited, .pg-orderlist .tracking-cell a.tracking-link:visited, .pg-y2orders .tracking-cell a.tracking-link:visited{ color: #6f42c1; }/* subtle visited */.pg-freightmgmt .tracking-cell a.tracking-link:hover, .pg-orderlist .tracking-cell a.tracking-link:hover, .pg-y2orders .tracking-cell a.tracking-link:hover{ text-underline-offset: 2px; text-decoration-thickness: 2px; }/* External-tab hint *//*.tracking-cell a.tracking-link[target="_blank"]::after { content: " ↗"; font-size: .9em; }*/.pg-freightmgmt .tracking-cell a.tracking-link[target="_blank"]::after, .pg-orderlist .tracking-cell a.tracking-link[target="_blank"]::after, .pg-y2orders .tracking-cell a.tracking-link[target="_blank"]::after{ font-size: .9em; }/* Clickable SKU link: underline + purple */.pg-freightmgmt .sku-edit-link, .pg-orderlist .sku-edit-link{ color: #A683E3; /* your brand purple */ text-decoration: underline; cursor: pointer; font-weight: 600; /* optional: make it pop a bit */ text-underline-offset: 2px; text-decoration-thickness: 1.5px; }.pg-freightmgmt .sku-edit-link:visited, .pg-orderlist .sku-edit-link:visited{ color: #8b5bd6; }/* subtle visited */.pg-freightmgmt .sku-edit-link:hover, .pg-orderlist .sku-edit-link:hover{ text-decoration-thickness: 2px; }.pg-freightmgmt .sku-edit-link:focus-visible, .pg-orderlist .sku-edit-link:focus-visible{ outline: 2px solid #A683E3; outline-offset: 2px; }/* Keep readable when row is highlighted as no-label (your red row) */.pg-freightmgmt tr.no-label .sku-edit-link, .pg-orderlist tr.no-label .sku-edit-link, .pg-y2orders tr.no-label .sku-edit-link{ color: #fff !important; text-decoration: underline; }/* Plain text tracking is muted */.pg-freightmgmt .tracking-cell .tracking-text, .pg-orderlist .tracking-cell .tracking-text, .pg-y2orders .tracking-cell .tracking-text{ color: #6c757d; }/* If you use the .no-label row class, keep links readable on red rows */.pg-freightmgmt tr.no-label > * { background-color: #f781a0 !important; color: #fff !important; }.pg-freightmgmt tr.no-label .tracking-cell a.tracking-link, .pg-orderlist tr.no-label .tracking-cell a.tracking-link, .pg-y2orders tr.no-label .tracking-cell a.tracking-link{ color: #fff !important; text-decoration: underline; }/* ===== Better sortable table header ===== */.pg-freightmgmt .orderListTableWrap thead th.sortable-th, .pg-orderlist .orderListTableWrap thead th.sortable-th, .pg-y2orders .orderListTableWrap thead th.sortable-th{ padding: 0 !important; }.pg-freightmgmt .orderListTableWrap .sort-header-btn, .pg-orderlist .orderListTableWrap .sort-header-btn, .pg-y2orders .orderListTableWrap .sort-header-btn{ width: 100%; min-height: 42px; border: 0; background: transparent; display: flex; align-items: center; justify-content: space-between; gap: 6px; padding: 8px 6px; font-weight: 800; color: inherit; cursor: pointer; text-align: left; }.pg-freightmgmt .orderListTableWrap .sort-header-btn:hover, .pg-orderlist .orderListTableWrap .sort-header-btn:hover, .pg-y2orders .orderListTableWrap .sort-header-btn:hover{ background: rgba(166, 131, 227, .10); }.pg-freightmgmt .orderListTableWrap .sort-header-btn .sort-label, .pg-orderlist .orderListTableWrap .sort-header-btn .sort-label, .pg-y2orders .orderListTableWrap .sort-header-btn .sort-label{ display: inline-flex; align-items: center; line-height: 1.15; }.pg-freightmgmt .orderListTableWrap .sort-icons, .pg-orderlist .orderListTableWrap .sort-icons, .pg-y2orders .orderListTableWrap .sort-icons{ display: inline-flex; flex-direction: column; line-height: 9px; font-size: 10px; color: rgba(0,0,0,.35); user-select: none; }.pg-freightmgmt .orderListTableWrap .sort-icons .sort-up, .pg-freightmgmt .orderListTableWrap .sort-icons .sort-down, .pg-orderlist .orderListTableWrap .sort-icons .sort-up, .pg-orderlist .orderListTableWrap .sort-icons .sort-down, .pg-y2orders .orderListTableWrap .sort-icons .sort-up, .pg-y2orders .orderListTableWrap .sort-icons .sort-down{ height: 9px; }.pg-freightmgmt .orderListTableWrap .sort-header-btn.sort-asc .sort-up, .pg-orderlist .orderListTableWrap .sort-header-btn.sort-asc .sort-up, .pg-y2orders .orderListTableWrap .sort-header-btn.sort-asc .sort-up{ color: #A683E3; font-weight: 900; }.pg-freightmgmt .orderListTableWrap .sort-header-btn.sort-desc .sort-down, .pg-orderlist .orderListTableWrap .sort-header-btn.sort-desc .sort-down, .pg-y2orders .orderListTableWrap .sort-header-btn.sort-desc .sort-down{ color: #A683E3; font-weight: 900; }.pg-freightmgmt .orderListTableWrap .sort-header-btn.sort-asc .sort-down, .pg-freightmgmt .orderListTableWrap .sort-header-btn.sort-desc .sort-up, .pg-orderlist .orderListTableWrap .sort-header-btn.sort-asc .sort-down, .pg-orderlist .orderListTableWrap .sort-header-btn.sort-desc .sort-up, .pg-y2orders .orderListTableWrap .sort-header-btn.sort-asc .sort-down, .pg-y2orders .orderListTableWrap .sort-header-btn.sort-desc .sort-up{ color: rgba(0,0,0,.20); }/* Keep title + qty on one side; close button on the other */.pg-freightmgmt #editSkuModal .modal-header, .pg-orderlist #editSkuModal .modal-header, .pg-y2orders #editSkuModal .modal-header{ align-items: center; }/* Title container grows, so the close button never overlaps */.pg-freightmgmt #editSkuModal .modal-title-wrap, .pg-orderlist #editSkuModal .modal-title-wrap, .pg-y2orders #editSkuModal .modal-title-wrap{ display:flex; align-items:center; gap:.75rem; flex: 1 1 auto; /* take available space */ min-width: 0; /* prevent weird wrapping on small screens */ flex-wrap: wrap; /* wrap nicely when narrow */ }/* Pretty qty badge in your brand color */.pg-freightmgmt #editSkuModal .qty-badge, .pg-orderlist #editSkuModal .qty-badge, .pg-y2orders #editSkuModal .qty-badge{ background:#A683E3; color:#fff; font-weight:600; font-size:.95rem; padding:.35rem .6rem; border-radius:.5rem; }/* Mobile niceties */@media (max-width: 480px) {.pg-freightmgmt #editSkuModal .modal-dialog, .pg-orderlist #editSkuModal .modal-dialog, .pg-y2orders #editSkuModal .modal-dialog{ margin: .5rem; }.pg-freightmgmt #editSkuModal .qty-badge, .pg-orderlist #editSkuModal .qty-badge, .pg-y2orders #editSkuModal .qty-badge{ font-size:.85rem; }}/* invalid highlight */.pg-freightmgmt .field-invalid, .pg-orderlist .field-invalid, .pg-y2orders .field-invalid{ background: #f8d7da !important; /* bootstrap danger-ish */ border-color: #dc3545 !important; }/* optional: make placeholder option look subtle */.pg-freightmgmt select option[value=""], .pg-orderlist select option[value=""], .pg-y2orders select option[value=""]{ color: #6c757d; }/* your existing *//* ✅ when inventory is 0 */.pg-freightmgmt #editSkuModal .qty-badge.qty-zero, .pg-orderlist #editSkuModal .qty-badge.qty-zero, .pg-y2orders #editSkuModal .qty-badge.qty-zero{ background:#dc3545 !important; /* Bootstrap danger */ color:#fff !important; }.pg-freightmgmt .product-table .stats-sku-link, .pg-orderlist .product-table .stats-sku-link, .pg-y2orders .product-table .stats-sku-link{ color: #A683E3; text-decoration: underline; cursor: pointer; font-weight: 600; }.pg-freightmgmt .product-table .stats-sku-link:hover, .pg-orderlist .product-table .stats-sku-link:hover, .pg-y2orders .product-table .stats-sku-link:hover{ text-decoration-thickness: 2px; text-underline-offset: 2px; }.pg-freightmgmt .sort-asc:hover, .pg-freightmgmt .sort-desc:hover, .pg-orderlist .sort-asc:hover, .pg-orderlist .sort-desc:hover, .pg-y2orders .sort-asc:hover, .pg-y2orders .sort-desc:hover{ color: #5264AE; }/* Freeze header row (sticky thead) */.pg-freightmgmt .orderListTableWrap thead th, .pg-orderlist .orderListTableWrap thead th, .pg-y2orders .orderListTableWrap thead th{ position: sticky; top: 0; z-index: 5; /* 盖住 tbody */ background: #fff; /* 不然会透出 striped 的底色 */ }.pg-freightmgmt .orderListTableWrap thead th, .pg-orderlist .orderListTableWrap thead th, .pg-y2orders .orderListTableWrap thead th{ box-shadow: 0 2px 0 rgba(0,0,0,.08); }.pg-freightmgmt .orderListTableWrap table, .pg-orderlist .orderListTableWrap table, .pg-y2orders .orderListTableWrap table{ border-collapse: separate; border-spacing: 0; }.pg-freightmgmt .log-modal .modal-body, .pg-orderlist .log-modal .modal-body{ overflow: auto; }.pg-freightmgmt .log-modal table td, .pg-freightmgmt .log-modal table th, .pg-orderlist .log-modal table td, .pg-orderlist .log-modal table th{ white-space: normal; word-break: break-word; overflow-wrap: anywhere; }.pg-freightmgmt .log-modal table, .pg-orderlist .log-modal table{ margin-bottom: 0; }/* 设计统一：约车按钮改用清关 Portal 品牌按钮度量（品牌紫、圆角 6px、无重阴影） */.pg-freightmgmt .quoteBtn { background:#A683E3; color:#fff; border:1px solid #A683E3; border-radius:6px; padding:.375rem .9rem; font-weight:800; letter-spacing:.5px; transition:background-color .12s ease, border-color .12s ease; }.pg-freightmgmt .quoteBtn:hover { background:#815ac6; border-color:#815ac6; }.pg-freightmgmt .quoteBtn:active { background:#815ac6; border-color:#815ac6; }.pg-freightmgmt .orderNumberLink { color:#A683E3; text-decoration: underline; font-weight: 800; text-underline-offset: 2px; }.pg-freightmgmt .orderNumberLink:hover { text-decoration-thickness: 2px; }.pg-freightmgmt tr.no-label .orderNumberLink { color:#fff !important; }.pg-freightmgmt .tracking-map-loading { position:absolute; inset:0; display:none; align-items:center; justify-content:center; background:rgba(255,255,255,.92); z-index:500; }.pg-freightmgmt .tracking-map-loading.show { display:flex; }.pg-freightmgmt .tracking-map-loading-inner { display:flex; flex-direction:column; align-items:center; justify-content:center; gap:12px; text-align:center; color:#495057; font-weight:700; font-size:14px; }.pg-freightmgmt .tracking-map-spinner { width:42px; height:42px; border:4px solid rgba(166,131,227,.22); border-top-color:#A683E3; border-radius:50%; animation: trackingSpin .9s linear infinite; }@keyframes trackingSpin {
to { transform:rotate(360deg); }
}.pg-freightmgmt .tracking-stop-icon-wrap { background: transparent; border: 0; }.pg-freightmgmt .tracking-arrow-marker { width: 34px; height: 34px; border-radius: 50%; background: #fff; display: flex; align-items: center; justify-content: center; font-size: 22px; font-weight: 900; line-height: 1; box-shadow: 0 3px 10px rgba(0,0,0,.22); border: 2px solid currentColor; }.pg-freightmgmt .tracking-arrow-marker.pickup { color: #198754; /* green */ }.pg-freightmgmt .tracking-arrow-marker.delivery { color: #dc3545; /* red */ }.pg-freightmgmt .user-note-cell { max-width: 180px; white-space: normal; word-break: break-word; overflow-wrap: anywhere; font-size: 13px; color: #495057; }/* ===== Pending order edit modal ===== */.pg-freightmgmt #pendingEditModal .modal-dialog { max-width: 1180px; }.pg-freightmgmt #pendingEditModal .section-title { font-weight: 900; color: #212529; margin-bottom: 8px; }.pg-freightmgmt #pendingEditModal .small-hint { font-size: 12px; color: #6c757d; }.pg-freightmgmt #pendingEditModal .form-label { font-weight: 800; font-size: 13px; margin-bottom: 4px; }.pg-freightmgmt #pendingEditModal .required-label::after { content: " *"; color: #dc3545; font-weight: 900; }.pg-freightmgmt #pendingEditModal .cargo-table th, .pg-freightmgmt #pendingEditModal .cargo-table td { vertical-align: middle; white-space: nowrap; }.pg-freightmgmt #pendingEditModal .cargo-table input, .pg-freightmgmt #pendingEditModal .cargo-table select { min-width: 90px; }.pg-freightmgmt #pendingEditModal .cargo-desc-input { min-width: 180px; }.pg-freightmgmt #pendingEditModal .accessorial-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(170px, 1fr)); gap: 6px 10px; }.pg-freightmgmt #pendingEditModal .accessorial-check { display: flex; align-items: center; gap: 6px; font-size: 13px; font-weight: 600; padding: 4px 0; }.pg-freightmgmt #pendingEditModal .accessorial-check input { width: 16px; height: 16px; }/* ===== 清关 Portal 设计系统（2026-10-08 业主裁定：整页复制
       warehouseManager_CustomsClearancePortal 列表页样式） ===== */.customs-portal.pg-freightmgmt { padding: 1rem; }@keyframes customsActiveTabBreathing {
0%, 100% { opacity: .28; transform: scale(1); }
50% { opacity: .95; transform: scale(1.055); }
}@media (prefers-reduced-motion: reduce) {}/* 本页适配：状态页签容器保留 .btn-group 类（页面 JS 用
       '.btn-group .btn.active' 读当前状态），抵消连体效果。 */.pg-freightmgmt .btn-group.customs-status-tabs > .btn, .pg-orderlist .btn-group.customs-status-tabs > .btn{ flex: 0 1 auto; margin-left: 0 !important; border-radius: .375rem !important; }.pg-freightmgmt .customs-table-wrap table, .pg-orderlist .customs-table-wrap table, .pg-portal .customs-table-wrap table{ min-width: 1540px; margin-bottom: 0; border-collapse: separate; border-spacing: 0; }@media (max-width: 1400px) {}@media (max-width: 768px) {.customs-portal.pg-freightmgmt { padding: .5rem; }}/* --------------------------------------------------------------------------
   [2026-10-10] freight_Management 块2 —— 作用域 .pg-freightmgmt
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- */.pg-freightmgmt .order-actions-dropdown, .pg-orderlist .order-actions-dropdown{ display: inline-block; }.pg-freightmgmt .order-actions-menu, .pg-orderlist .order-actions-menu{ border: 1px solid #dee2e6; border-radius: 10px; box-shadow: 0 8px 24px rgba(0, 0, 0, .12); padding: .35rem; min-width: 180px; }/* 全局 button.addButton（styles.css）带 margin 上下各 16px、
                   min-height 40px、font-size 20px；进了下拉菜单必须全部
                   归零/收紧到 Portal 的紧凑密度。addButtonDisabled 是
                   删除按钮在未勾选时的类名（JS 切换），度量保持一致。 */.pg-freightmgmt .order-actions-menu .addButton, .pg-freightmgmt .order-actions-menu .addButtonDisabled { width: 100% !important; min-height: 0; margin: 0; text-align: left; background: transparent; border: 0; border-radius: 6px; padding: .35rem .8rem; font-size: .95rem; line-height: 1.35; color: #212529; cursor: pointer; }.pg-freightmgmt .order-actions-menu .addButton:hover, .pg-orderlist .order-actions-menu .addButton:hover{ background: #f1ebfd; }.pg-freightmgmt .order-actions-menu .addButtonDisabled { opacity: .45; cursor: not-allowed; }.pg-freightmgmt .order-actions-menu #deleteButton, .pg-freightmgmt .order-actions-menu #deleteButton2, .pg-orderlist .order-actions-menu #deleteButton, .pg-orderlist .order-actions-menu #deleteButton2{ color: #b02a37; }/* --------------------------------------------------------------------------
   [2026-10-10] freight_RunQuote（运费报价）—— 作用域 .pg-runquote —— 作用域 .pg-runquote
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- */.pageWrap.pg-runquote { max-width: 1100px; margin: 18px auto; padding: 0 12px; }@media (max-width: 900px) {}/* ===== input with icons ===== *//* ===== dropdown ===== *//* ===== ready pickup row ===== */@media (max-width: 900px) {}@media (max-width: 900px) {}/* ===== Quotes panel ===== *//* Action 列：按钮靠右 + 顶部对齐 *//* ===== Quote pills & tooltips ===== *//* ===== service tooltip ===== *//* ✅ 默认：tooltip 在下面 *//* ✅ 只要加了 tip-up：tooltip 在上面 *//* ===== Multi-select accessorial dropdown ===== */@keyframes quoteSpin {
to { transform: rotate(360deg); }
}.pg-runquote .hazmatPanel { border:1px solid rgba(211,51,51,.22); background:rgba(211,51,51,.035); border-radius:10px; padding:14px; margin:0 0 14px; display:none; }.pg-runquote .hazmatPanel.show { display:block; }.pg-runquote .hazmatTitle { font-size:17px; font-weight:900; margin:0 0 6px; color:#8a1f1f; }.pg-runquote .hazmatSub { color:var(--muted); font-size:13px; font-weight:700; margin-bottom:12px; }.pg-runquote .hazmatGrid { display:grid; grid-template-columns: repeat(3, 1fr); gap:10px; }@media (max-width: 900px) {.pg-runquote .hazmatGrid { grid-template-columns:1fr; }}/* --------------------------------------------------------------------------
   [2026-10-10] eCommerce_OrderList（电商订单列表）块1 —— 作用域 .pg-orderlist —— 作用域 .pg-orderlist
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- *//* Highlight "No Label" rows in Bootstrap 5 tables */.pg-orderlist tr.no-label > * { background-color: #f781a0 !important; /* your red */ color: #fff !important; }/* Make tracking links readable and pop *//* Optional: make tracking links stand out in any row */.pg-orderlist table.table td:nth-child(12) a { text-decoration: underline; font-weight: 600; }/* Linked tracking looks clearly clickable *//* Bootstrap primary *//* subtle visited *//* External-tab hint *//*.tracking-cell a.tracking-link[target="_blank"]::after { content: " ↗"; font-size: .9em; }*//* Clickable SKU link: underline + purple *//* subtle visited *//* Keep readable when row is highlighted as no-label (your red row) *//* Plain text tracking is muted *//* If you use the .no-label row class, keep links readable on red rows */.pg-orderlist tr.no-label > * { background-color: #f781a0 !important; color: #fff !important; }/* ===== Better sortable table header ===== *//* Keep title + qty on one side; close button on the other *//* Title container grows, so the close button never overlaps *//* Pretty qty badge in your brand color *//* Mobile niceties */@media (max-width: 480px) {}/* invalid highlight *//* optional: make placeholder option look subtle *//* your existing *//* ✅ when inventory is 0 *//* Freeze header row (sticky thead) *//* 可选：让表头更像“浮在上面” *//* 可选：有些浏览器 + bootstrap border-collapse 会影响 sticky *//* 只针对日志弹窗：body滚动 + 防止内容撑爆 *//* 单元格长内容强制换行（链接/长串tracking/很长备注） *//* 可选：表格底部不要把 modal body 撑出额外空白 *//* ===== 清关 Portal 设计系统（2026-10-08 业主裁定：整页复制
       warehouseManager_CustomsClearancePortal 列表页样式） ===== */.customs-portal.pg-orderlist { padding: 1rem; }/* 本页筛选共 13 项（搜索项跨 2 列，合计 14 个轨道），
       业主 2026-10-08 要求桌面端只占一行，故本页轨道数按 14 列定制，
       并把每个筛选控件按紧凑尺寸渲染（见下方 .customs-filter-grid 内规则）。 */.pg-orderlist .customs-filter-grid { display: grid; grid-template-columns: repeat(14, minmax(0, 1fr)); gap: .5rem; align-items: end; }@keyframes customsActiveTabBreathing {
0%, 100% { opacity: .28; transform: scale(1); }
50% { opacity: .95; transform: scale(1.055); }
}@media (prefers-reduced-motion: reduce) {}/* 本页适配：状态页签容器必须保留 .btn-group 类（页面 JS 用
       '.btn-group .btn.active' 读当前状态），这里抵消 Bootstrap
       btn-group 的连体效果，让它和 Portal 一样是独立胶囊页签。 */@media (max-width: 1400px) {}@media (max-width: 768px) {.customs-portal.pg-orderlist { padding: .5rem; }}/* --------------------------------------------------------------------------
   [2026-10-10] eCommerce_OrderList 块2 —— 作用域 .pg-orderlist
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- *//* 全局 button.addButton（styles.css）带 margin 上下各 16px、
                   min-height 40px、font-size 20px，是为整排大按钮设计的；
                   进了下拉菜单必须全部归零/收紧到 Portal 的紧凑密度，
                   否则每一行会被撑得又高又散。 */.pg-orderlist .order-actions-menu .addButton { width: 100% !important; min-height: 0; margin: 0; text-align: left; background: transparent; border: 0; border-radius: 6px; padding: .35rem .8rem; font-size: .95rem; line-height: 1.35; color: #212529; cursor: pointer; }.pg-orderlist .order-actions-menu .addButton:disabled { opacity: .45; cursor: not-allowed; }.pg-orderlist .order-actions-menu .addButton:disabled:hover { background: transparent; }/* --------------------------------------------------------------------------
   [2026-10-10] y2OrderList（Y2 订单列表）—— 作用域 .pg-y2orders（根 .card-body） —— 作用域 .pg-y2orders
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- *//* optional */.pg-y2orders .facet-zero { opacity: .25; }/* Highlight "No Label" rows in Bootstrap 5 tables */.pg-y2orders tr.no-label > * { background-color: #f781a0 !important; /* your red */ color: #fff !important; }/* Make tracking links readable and pop *//* Linked tracking looks clearly clickable *//* Bootstrap primary *//* subtle visited *//* External-tab hint *//*.tracking-cell a.tracking-link[target="_blank"]::after { content: " ↗"; font-size: .9em; }*//* Keep readable when row is highlighted as no-label (your red row) *//* Plain text tracking is muted *//* If you use the .no-label row class, keep links readable on red rows */.pg-y2orders tr.no-label > * { background-color: #f781a0 !important; color: #fff !important; }/* ===== Better sortable table header ===== *//* Keep title + qty on one side; close button on the other *//* Title container grows, so the close button never overlaps *//* Pretty qty badge in your brand color *//* Mobile niceties */@media (max-width: 480px) {}/* invalid highlight *//* optional: make placeholder option look subtle *//* your existing *//* ✅ when inventory is 0 *//*.sort-icons {*//*    display: inline-flex;*//*    align-items: center;*//*    gap: 5px; !* Space between the arrows *!*//*    margin-left: 5px;*//*    font-size: 0.8em;*//*    cursor: pointer;*//*}*//*.sort-asc, .sort-desc {*//*    display: inline-block;*//*}*//* Freeze header row (sticky thead) *//* 可选：让表头更像“浮在上面” *//* 可选：有些浏览器 + bootstrap border-collapse 会影响 sticky *//*发货按钮*/.pg-y2orders #fulfillOrderButton { background:#a965ec; color:#fff; font-weight:900; }/* --------------------------------------------------------------------------
   [2026-10-10] accountBillingDetail（账单明细）块1 —— 作用域 .pg-billdetail（整页包裹） —— 作用域 .pg-billdetail
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- */.pg-billdetail th.sortable { cursor: pointer; color: #A683E3; /* Bootstrap’s primary blue */ transition: color .2s; }.pg-billdetail th.sortable:hover { text-decoration: underline; color: #815ac6; /* Portal 深紫 hover */ }/* use fixed layout + left align everything in this table */.pg-billdetail .table.billing-main { table-layout: fixed; width: 100%; }.pg-billdetail .table.billing-main th, .pg-billdetail .table.billing-main td { text-align: left !important; vertical-align: middle; }/* belt-and-suspenders: if a global rule targets the last column */.pg-billdetail .table.billing-main thead th:last-child, .pg-billdetail .table.billing-main tbody td:last-child { text-align: left !important; }/* Billing template table sizing & alignment */.pg-billdetail .billing-tpl-table { table-layout: fixed; /* respect the colgroup widths */ width: 100%; }.pg-billdetail .billing-tpl-table th, .pg-billdetail .billing-tpl-table td { text-align: left !important; vertical-align: middle; }/* prevent time/price/etc. from wrapping; let Notes wrap */.pg-billdetail .billing-tpl-table th:nth-child(3), .pg-billdetail .billing-tpl-table td:nth-child(3), .pg-billdetail /* 费率 */ .billing-tpl-table th:nth-child(6), .pg-billdetail .billing-tpl-table td:nth-child(6) { /* 创建时间 */ white-space: nowrap; }.pg-billdetail .billing-tpl-table th:nth-child(7), .pg-billdetail .billing-tpl-table td:nth-child(7) { /* 备注 */ white-space: normal; word-break: break-word; /* wrap long text/URLs */ }.pg-billdetail .deposit-btn { background: #198754; border: none; color: white; font-weight: 700; box-shadow: 0 2px 8px rgba(25, 135, 84, .25); }.pg-billdetail .deposit-btn:hover { background: #157347; color: white; }.pg-billdetail .deposit-method-btn.active { background-color: #198754; color: white; border-color: #198754; }.pg-billdetail .deposit-info-box { border: 1px solid #dee2e6; border-radius: 10px; padding: 14px; background: #f8f9fa; }.pg-billdetail .deposit-proof-row { display: none; }.pg-billdetail .deposit-proof-row.active { display: block; }.pg-billdetail .deposit-status-pending { color: #664d03; font-weight: 700; }.pg-billdetail .deposit-status-approved { color: #198754; font-weight: 700; }.pg-billdetail .deposit-status-denied, .pg-billdetail .deposit-status-rejected { color: #b02a37; font-weight: 700; }.pg-billdetail .deposit-qr-wrap { display: flex; gap: 16px; align-items: flex-start; flex-wrap: wrap; }.pg-billdetail .deposit-qr-img-box { width: 220px; border: 1px solid #dee2e6; border-radius: 10px; padding: 10px; background: #fff; }.pg-billdetail .deposit-qr-img-box img { width: 100%; border-radius: 8px; display: block; }.pg-billdetail .deposit-info-table { flex: 1; min-width: 260px; }.pg-billdetail .deposit-proof-btn { border: 0; border-radius: 6px; padding: 6px 10px; font-size: 12px; font-weight: 800; background: #A683E3; color: #fff; }.pg-billdetail .freight-report-dialog { max-width: 96vw; }.pg-billdetail #freightReportModal .modal-content { height: 92vh; }.pg-billdetail #freightReportModal .modal-body { overflow: auto; }.pg-billdetail #freightReportTable { min-width: 1900px; white-space: nowrap; }.pg-billdetail .freight-summary-wrap { position: sticky; bottom: 0; z-index: 5; background: #fff; border-top: 1px solid #dee2e6; padding: 12px 0 4px; margin-top: 10px; display: flex; justify-content: flex-end; }.pg-billdetail .freight-summary-box { display: flex; gap: 10px; flex-wrap: wrap; justify-content: flex-end; }.pg-billdetail .freight-summary-item { min-width: 150px; border: 1px solid #dee2e6; border-radius: 10px; padding: 8px 12px; background: #f8f9fa; text-align: right; }.pg-billdetail .freight-summary-label { font-size: 12px; color: #6c757d; font-weight: 800; }.pg-billdetail .freight-summary-value { font-size: 18px; font-weight: 900; color: #212529; }.pg-billdetail .freight-summary-profit .freight-summary-value { color: #198754; }/* Initial account billing data loader */.pg-billdetail .account-billing-loading-overlay { position: fixed; inset: 0; z-index: 20000; display: flex; align-items: center; justify-content: center; background: rgba(255, 255, 255, .88); backdrop-filter: blur(2px); -webkit-backdrop-filter: blur(2px); transition: opacity .2s ease, visibility .2s ease; }.pg-billdetail .account-billing-loading-overlay.is-hidden { opacity: 0; visibility: hidden; pointer-events: none; }.pg-billdetail .account-billing-loading-card { min-width: 260px; padding: 26px 30px; border: 1px solid #dee2e6; border-radius: 10px; background: #fff; box-shadow: 0 8px 24px rgba(0, 0, 0, .12); text-align: center; }.pg-billdetail .account-billing-loading-spinner { width: 58px; height: 58px; margin: 0 auto 15px; border: 6px solid #eee8f8; border-top-color: #A683E3; border-radius: 50%; animation: accountBillingSpin .8s linear infinite; }.pg-billdetail .account-billing-loading-title { color: #212529; font-size: 17px; font-weight: 900; }.pg-billdetail .account-billing-loading-subtitle { margin-top: 5px; color: #6c757d; font-size: 13px; }@keyframes accountBillingSpin {
to { transform: rotate(360deg); }
}/* SweetAlert report generation circular progress */.pg-billdetail .report-generation-progress-wrap { display: flex; flex-direction: column; align-items: center; padding-top: 4px; }.pg-billdetail .report-generation-progress-ring { position: relative; width: 118px; height: 118px; border-radius: 50%; display: grid; place-items: center; background: conic-gradient(#A683E3 0deg, #eee8f8 0deg); transition: background .25s ease; box-shadow: inset 0 0 0 1px rgba(166, 131, 227, .08); }.pg-billdetail .report-generation-progress-ring::before { content: ""; position: absolute; width: 88px; height: 88px; border-radius: 50%; background: #fff; }.pg-billdetail .report-generation-progress-value { position: relative; z-index: 1; color: #815ac6; font-size: 23px; font-weight: 900; }.pg-billdetail .report-generation-progress-text { min-height: 22px; margin-top: 14px; color: #6c757d; font-size: 14px; font-weight: 700; }/* ===== 清关 Portal 设计系统（2026-10-08 业主裁定） ===== */.pg-billdetail .customs-client-menu { border-radius: 8px; box-shadow: 0 2px 8px rgba(0, 0, 0, .08); }.pg-billdetail .table.billing-main thead th { background: #fff; box-shadow: 0 2px 0 rgba(0, 0, 0, .08); }@media (max-width: 768px) {.pg-billdetail .customs-portal { padding: .5rem; }}/* --------------------------------------------------------------------------
   [2026-10-10] accountBillingDetail 块2 —— 作用域 .pg-billdetail
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- *//* pick your desired height once—for example, 38px */.pg-billdetail .filter-container .form-control-sm, .pg-billdetail .filter-container .form-select-sm, .pg-billdetail .filter-container .btn-sm { height: 38px; }/* vertically center the labels to match */.pg-billdetail .filter-container label { height: 38px; line-height: 38px; margin-bottom: 0; }/* --------------------------------------------------------------------------
   [2026-10-10] account（账户页）—— 作用域 .pg-account（整页包裹） —— 作用域 .pg-account
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- *//* =========================================================
       API Documentation — unified style
       Scoped to #removeInventoryModal so the rest of the account
       page is not affected.
       ========================================================= */.pg-account #removeInventoryModal .modal-body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Arial, sans-serif; font-size: 14px; line-height: 1.55; color: #212529; }.pg-account #removeInventoryModal .modal-custom { max-width: 95vw; }.pg-account #removeInventoryModal .nav-tabs { gap: 2px; }.pg-account #removeInventoryModal .nav-tabs .nav-link { font-family: inherit; font-size: 14px; font-weight: 600; line-height: 1.25; color: #495057; padding: 10px 14px; }.pg-account #removeInventoryModal .nav-tabs .nav-link h6 { font: inherit; color: inherit; margin: 0; }.pg-account #removeInventoryModal .nav-tabs .nav-link.active { color: #212529; }.pg-account #removeInventoryModal .tab-content { padding-top: 20px; }/* Some tabs wrap their content in .container and some do not.
       Remove that visual difference inside API docs. */.pg-account #removeInventoryModal .tab-pane > .container { width: 100%; max-width: none; padding-left: 0; padding-right: 0; margin-left: 0; margin-right: 0; }.pg-account #removeInventoryModal .tab-pane h3, .pg-account #removeInventoryModal .tab-pane .h3 { font-family: inherit; font-size: 22px; font-weight: 600; line-height: 1.3; margin: 0 0 16px; color: #212529; }.pg-account #removeInventoryModal .tab-pane p, .pg-account #removeInventoryModal .tab-pane li { font-family: inherit; font-size: 14px; line-height: 1.55; }.pg-account #removeInventoryModal .tab-pane p { margin-bottom: 8px; }.pg-account #removeInventoryModal .tab-pane ul { margin-top: 8px; margin-bottom: 18px; }/* Unified section labels */.pg-account #removeInventoryModal .green, .pg-account #removeInventoryModal .blue, .pg-account #removeInventoryModal .orange { font-family: inherit; font-size: 14px; font-weight: 700; margin-top: 20px; margin-bottom: 8px; }/* Unified table styling for both Bootstrap .table and legacy .layui-table */.pg-account #removeInventoryModal .tab-pane table, .pg-account #removeInventoryModal .y2-param-table { width: 100% !important; table-layout: fixed; border-collapse: collapse; margin: 8px 0 20px; font-family: inherit; font-size: 14px; color: #212529; }.pg-account #removeInventoryModal .tab-pane table th, .pg-account #removeInventoryModal .tab-pane table td, .pg-account #removeInventoryModal .y2-param-table th, .pg-account #removeInventoryModal .y2-param-table td { padding: 10px 12px; border: 1px solid #dee2e6; vertical-align: top; text-align: left; font-family: inherit; font-size: 14px; line-height: 1.45; word-break: break-word; overflow-wrap: anywhere; }.pg-account #removeInventoryModal .tab-pane table thead th, .pg-account #removeInventoryModal .y2-param-table thead th { background: #f8f9fa; font-weight: 600; vertical-align: middle; }.pg-account #removeInventoryModal .tab-pane table tbody tr:hover { background: rgba(0, 0, 0, 0.025); }/* Remove heading-size differences accidentally introduced inside cells */.pg-account #removeInventoryModal .tab-pane table h5, .pg-account #removeInventoryModal .tab-pane table h6 { font: inherit; color: inherit; margin: 0; }/* Unified code / JSON blocks */.pg-account #removeInventoryModal .tab-pane pre, .pg-account #removeInventoryModal .y2-param-table pre { display: block; margin: 8px 0 20px; padding: 12px 14px; border: 1px solid #dee2e6 !important; border-radius: 6px; background: #f8f9fa; font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; font-size: 12px !important; line-height: 1.5; color: #212529; white-space: pre-wrap; word-break: break-word; overflow-wrap: anywhere; overflow-x: auto; }/* <pre> embedded inside a table cell should not get extra bottom spacing */.pg-account #removeInventoryModal .tab-pane td > pre, .pg-account #removeInventoryModal .y2-param-table td > pre { margin: 0; }.pg-account #removeInventoryModal .tab-pane code { font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; font-size: 0.9em; }.pg-account #removeInventoryModal .tab-pane span[name="spanurl"], .pg-account #removeInventoryModal .tab-pane p > span { overflow-wrap: anywhere; }@media (max-width: 992px) {.pg-account #removeInventoryModal .modal-custom { max-width: 98vw; margin-left: auto; margin-right: auto; }.pg-account #removeInventoryModal .tab-pane table { font-size: 13px; }.pg-account #removeInventoryModal .tab-pane table th, .pg-account #removeInventoryModal .tab-pane table td { padding: 8px; font-size: 13px; }}/* --------------------------------------------------------------------------
   [2026-10-10] 片段 outboundWarehouse_ECommerceSeparateSearch 块1（汇总卡）—— 作用域 .pg-frag-sepsearch（注入容器：ScanToShip/ScanToSearch 的 #outboundRequestResultsContainer） —— 作用域 .pg-frag-sepsearch
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- */.pg-frag-sepsearch .sumGrid { margin-top: 6px; }.pg-frag-sepsearch .sumCard { border:1px solid #dee2e6; border-radius: 14px; background:#f8f9fa; padding: 14px 16px; height: 100%; }.pg-frag-sepsearch .sumTop { display:flex; justify-content:space-between; align-items:flex-start; gap: 12px; }.pg-frag-sepsearch .sumTitle { font-weight: 800; font-size: 13px; letter-spacing: .02em; text-transform: uppercase; color:#495057; line-height: 1.1; }.pg-frag-sepsearch .sumSub { margin-top: 4px; font-size: 12px; color:#6c757d; }.pg-frag-sepsearch .sumFraction { font-weight: 900; font-size: 30px; line-height: 1; white-space: nowrap; }.pg-frag-sepsearch .sumFraction .slash { font-weight: 700; color:#adb5bd; padding: 0 6px; }.pg-frag-sepsearch .sumFraction .total { font-weight: 800; color:#343a40; font-size: 22px; }/* --------------------------------------------------------------------------
   [2026-10-10] 片段 SeparateSearch 块2（开关） —— 作用域 .pg-frag-sepsearch
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- */.pg-frag-sepsearch .form-switch { padding-left: 2.5em; }.pg-frag-sepsearch .form-check-input { cursor: pointer; width: 3em !important; height: 1.5em !important; margin-top: 0.25em; }.pg-frag-sepsearch .form-check-label { cursor: pointer; padding-left: 0.5em; }/* --------------------------------------------------------------------------
   [2026-10-10] 片段 SeparateSearch 块3（表格/链接） —— 作用域 .pg-frag-sepsearch
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- *//* Make real links look obviously clickable */.pg-frag-sepsearch .table-ShippingInfo .tracking-link { display: inline-block; padding: 0.15rem 0.5rem; border-radius: 0.375rem; color: #0d6efd !important; /* bootstrap primary */ text-decoration: underline; cursor: pointer; font-weight: 600; background: rgba(13,110,253,0.08); /* subtle blue chip bg */ border: 1px solid rgba(13,110,253,0.25); }/*!* Add a small “open” hint *!*//*.table-ShippingInfo .tracking-link::after {*//*    content: " ↗";*//*    font-weight: 400;*//*}*//* Non-clickable tracking numbers (no file link) still look like labels but muted */.pg-frag-sepsearch .table-ShippingInfo .tracking-link.disabled { color: #6c757d !important; /* text-muted */ background: rgba(108,117,125,0.08); border-color: rgba(108,117,125,0.25); text-decoration: underline dotted; cursor: not-allowed; }.pg-frag-sepsearch .table-ShippingInfo .tracking-link.disabled::after { content: ""; /* no open indicator */ }/* single grid & consistent borders */.pg-frag-sepsearch .table-ShippingInfo table { table-layout: fixed; border-collapse: collapse; width: 100%; }.pg-frag-sepsearch .table-ShippingInfo th, .pg-frag-sepsearch .table-ShippingInfo td { border: 1px solid #ddd; padding: .5rem .75rem; vertical-align: middle; box-sizing: border-box; }/* sticky header */.pg-frag-sepsearch .table-ShippingInfo .sticky-th { position: sticky; top: 0; background: #fff; z-index: 2; }/* truncate long values but keep cells aligned */.pg-frag-sepsearch .table-ShippingInfo .cell-sku, .pg-frag-sepsearch .table-ShippingInfo .cell-tracking, .pg-frag-sepsearch .table-ShippingInfo .cell-order { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }/* keep inner elements from painting white inside colored rows */.pg-frag-sepsearch .table-ShippingInfo .order-row td > * { background: transparent !important; }/* lock colors: no hover tint */.pg-frag-sepsearch .table-ShippingInfo tbody tr:hover td { background-color: inherit !important; }/* static colors by status */.pg-frag-sepsearch .row-complete td, .pg-frag-sepsearch .row-printed td { background-color: #d4edda !important; }/* green */.pg-frag-sepsearch .row-processing td { background-color: #fff3cd !important; }/* yellow */.pg-frag-sepsearch .row-skipped td { background-color: #f8d7da !important; }/* red */.pg-frag-sepsearch .row-default td { background-color: #ffffff !important; }/* white *//* --------------------------------------------------------------------------
   [2026-10-10] 片段 warehouseManager_ECommerceOutboundList —— 作用域 .pg-frag-ecout（注入容器：ECommerceOutbound 的 .outboundList） —— 作用域 .pg-frag-ecout
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- */.pg-frag-ecout .modal-body, .pg-frag-ecout .modal-title { white-space: normal; /* allow wrapping */ overflow-wrap: anywhere; /* break very long words/IDs */ word-break: break-word; /* legacy support */ }/* --------------------------------------------------------------------------
   [2026-10-10] 片段 warehouseManager_ECommerceOutboundContent（批次明细，注入同页 .outboundList 内）—— 作用域 .pg-frag-ecout —— 作用域 .pg-frag-ecout
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- *//* Make our colors win over Bootstrap */.pg-frag-ecout table.outbound-detail-table tbody tr.row-complete > * { background-color:#d4edda !important; }/* printed/complete = green */.pg-frag-ecout table.outbound-detail-table tbody tr.row-processing > * { background-color:#fff3cd !important; }/* yellow */.pg-frag-ecout table.outbound-detail-table tbody tr.row-skipped > * { background-color:#f8d7da !important; }/* red */.pg-frag-ecout table.outbound-detail-table tbody tr.row-default > * { background-color:#ffffff !important; }/* white *//* Keep hover from washing out our static colors */.pg-frag-ecout table.outbound-detail-table.table-hover tbody tr:hover > * { background-color: inherit !important; }/* Tracking link: blue + underline + slight emphasis */.pg-frag-ecout a.track-link { color: #0d6efd !important; /* Bootstrap primary blue */ text-decoration: underline; font-weight: 600; display: inline-block; }/* Optional: show a small “↗” hint for links */.pg-frag-ecout a.track-link::after { content: " ↗"; }/* Left-align all cells in this specific table */.pg-frag-ecout .outbound-detail-table th, .pg-frag-ecout .outbound-detail-table td { text-align: left !important; vertical-align: middle; /* keep content nicely centered vertically */ }/* Optional: make the tracking look like a standard link */.pg-frag-ecout .outbound-detail-table .track-link { color: #0d6efd; /* bootstrap link blue */ text-decoration: underline; font-weight: 500; }/* --------------------------------------------------------------------------
   [2026-10-10] 片段 warehouseManager_PalletOutboundSearch —— 作用域 .pg-frag-palletsearch（注入容器：PalletOutbound 的 .outboundList） —— 作用域 .pg-frag-palletsearch
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- */.pg-frag-palletsearch .disabled[title]:hover:after { content: attr(title); position: absolute; padding: 4px 8px; border-radius: 5px; top: 100%; left: 50%; transform: translateX(-50%); white-space: nowrap; z-index: 1; background-color: black; color: white; font-size: 12px; pointer-events: none; }/* --------------------------------------------------------------------------
   [2026-10-10] 清关门户 CustomsClearancePortal 块1/7 —— 作用域 .pg-portal —— 作用域 .pg-portal
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- */.customs-portal.pg-portal { padding: 1rem; }/*
     * Status tabs:
     * - overdue tabs are no longer permanently filled yellow/red;
     * - ONLY the currently selected .active tab gets the breathing effect.
     *
     * The breathing animation uses only transform + opacity on a pseudo element.
     * That is much cheaper than continuously animating box-shadow/background.
     */.pg-portal .customs-sort-button { display: flex; align-items: center; justify-content: space-between; width: 100%; gap: .35rem; padding: .45rem .25rem; border: 0; background: transparent; font-weight: 700; cursor: pointer; }.pg-portal .customs-sort-button:hover { background: rgba(166, 131, 227, .1); }.pg-portal .customs-sort-icon { color: #adb5bd; font-size: .75rem; }.pg-portal .customs-sort-button.sort-asc .customs-sort-icon, .pg-portal .customs-sort-button.sort-desc .customs-sort-icon { color: var(--customs-purple-dark); font-weight: 900; }.pg-portal .customs-shipment-link { color: var(--customs-purple-dark); text-decoration: underline; text-underline-offset: 2px; font-weight: 700; cursor: pointer; }.pg-portal .status-forecasted { background: #e9ecef; color: #343a40; }.pg-portal .status-isfDeclared { background: #e7f1ff; color: #084298; }.pg-portal .status-fileUploadComplete { background: #cff4fc; color: #055160; }/* 以下两条状态色原为页内 <style> 的 EJS 条件规则（仅清关经理渲染）——静态 CSS 无服务端条件，改由根元素门控类 pg-portal-mgr 实现（页面以同一 isCustomsManager 变量输出该类），语义等价 */.pg-portal.pg-portal-mgr .status-fileModifyComplete { background: #d1e7dd; color: #0f5132; }.pg-portal .status-sentToBroker { background: #fff3cd; color: #664d03; }.pg-portal .status-7501ReceivedFromBroker { background: #e2d9f3; color: #432874; }.pg-portal.pg-portal-mgr .status-7501Modified { background: #cfe2ff; color: #084298; }.pg-portal .status-7501Confirmed { background: #d1e7dd; color: #0f5132; }.pg-portal .status-inspection { background: #ffe69c; color: #664d03; }.pg-portal .status-doReceived, .pg-portal .status-doSent { background: #f8d7da; color: #842029; }.pg-portal .status-7501Sent { background: #e2d9f3; color: #432874; }.pg-portal .status-billReady { background: #d1e7dd; color: #0f5132; }.pg-portal .status-billingCleared { background: #cff4fc; color: #055160; }/* Status aging alerts. Billing Cleared is complete and never receives
       warning colors. DO Received and Bill Ready use longer thresholds. */.pg-portal .customs-overdue-warning > td, .pg-portal .customs-overdue-warning:hover > td { background-color: #fff3cd !important; }.pg-portal .customs-overdue-danger > td, .pg-portal .customs-overdue-danger:hover > td { background-color: #f8d7da !important; }.pg-portal .customs-current-status-duration { min-width: 165px; white-space: nowrap; font-variant-numeric: tabular-nums; font-weight: 700; }.pg-portal .customs-duration-warning { color: #856404; font-weight: 900; }.pg-portal .customs-duration-danger { color: #842029; font-weight: 900; }/*
     * 超时提示只保留边框 + 右上角小点。
     * 不再让没有选中的 tab 整块一直红/黄。
     */.pg-portal .customs-status-tabs .btn.customs-tab-warning:not(.active) { color: #856404 !important; background: #fff !important; border-color: #ffc107 !important; }.pg-portal .customs-status-tabs .btn.customs-tab-danger:not(.active) { color: #b02a37 !important; background: #fff !important; border-color: #dc3545 !important; }.pg-portal .customs-status-tabs .btn.customs-tab-warning::before, .pg-portal .customs-status-tabs .btn.customs-tab-danger::before { content: ""; position: absolute; top: -4px; right: -4px; z-index: 3; width: 9px; height: 9px; border: 2px solid #fff; border-radius: 50%; pointer-events: none; }.pg-portal .customs-status-tabs .btn.customs-tab-warning::before { background: #ffc107; }.pg-portal .customs-status-tabs .btn.customs-tab-danger::before { background: #dc3545; }/*
     * 当前真正选中的 tab：
     * 无论它本身是否超时，主体都统一显示紫色，
     * 并通过外圈呼吸明确表示“你正在看这个 tab”。
     */@keyframes customsActiveTabBreathing {
0%, 100% { opacity: .28; transform: scale(1); }
50% { opacity: .95; transform: scale(1.055); }
}/*
     * 用户系统如果开启“减少动画”，自动停止呼吸，
     * 但 active 仍保持紫色，仍然可以明显辨认。
     */@media (prefers-reduced-motion: reduce) {}.pg-portal .customs-file-actions { display: flex; flex-wrap: wrap; gap: .38rem; min-width: 250px; }.pg-portal .customs-download-file { display: inline-flex; align-items: center; gap: .3rem; min-height: 30px; padding: .28rem .58rem; border: 1px solid #9a77d5; border-radius: 999px; color: #5c3997; background: #f7f2ff; font-size: .78rem; font-weight: 800; line-height: 1.1; text-decoration: none; white-space: nowrap; cursor: pointer; transition: background-color .15s ease, border-color .15s ease, color .15s ease, transform .15s ease; }.pg-portal .customs-download-file:hover, .pg-portal .customs-download-file:focus { color: #fff; background: var(--customs-purple-dark); border-color: var(--customs-purple-dark); text-decoration: none; transform: translateY(-1px); }.pg-portal .customs-download-file.customs-file-downloaded { color: #146c43; background: #d1e7dd; border-color: #75b798; }.pg-portal .customs-download-file.customs-file-downloaded:hover, .pg-portal .customs-download-file.customs-file-downloaded:focus { color: #fff; background: #198754; border-color: #198754; }.pg-portal .customs-download-file.disabled, .pg-portal .customs-download-file[aria-disabled="true"] { opacity: .55; pointer-events: none; transform: none; }.pg-portal .customs-file-state-icon { display: inline-flex; align-items: center; justify-content: center; width: 17px; height: 17px; border-radius: 50%; color: #fff; background: currentColor; font-size: 0; flex: 0 0 17px; }.pg-portal .customs-file-state-icon::after { color: #fff; content: "↓"; font-size: 11px; font-weight: 900; line-height: 1; }.pg-portal .customs-file-downloaded .customs-file-state-icon::after { content: "✓"; }/* File links inside the table: keep them compact so the file column
       does not dominate the row. */.pg-portal .customs-file-actions { min-width: 0; gap: .28rem; }.pg-portal .customs-file-actions .customs-download-file { min-height: 24px; padding: .16rem .4rem; gap: .22rem; font-size: .68rem; line-height: 1; }/* 文件名限制宽度 */.pg-portal .customs-download-file .customs-file-name-wrap { display: block; min-width: 0; max-width: 135px; overflow: hidden; white-space: nowrap; position: relative; }/* 默认省略 */.pg-portal .customs-download-file .customs-file-name-text { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }/* 只有真的超出宽度，JS 才会加这个 class */.pg-portal .customs-download-file .customs-file-name-wrap.is-overflowing:hover .customs-file-name-text { overflow: visible; text-overflow: clip; animation: customsFileNameScroll var(--scroll-duration, 5s) linear infinite alternate; }@keyframes customsFileNameScroll {
from { transform: translateX(0); }
to { transform: translateX(var(--scroll-distance, -100px)); }
}.pg-portal .customs-file-actions .customs-file-state-icon { width: 13px; height: 13px; flex-basis: 13px; }.pg-portal .customs-file-actions .customs-file-state-icon::after { font-size: 8px; }/* Current file inside an upload card: long original filenames must wrap
       inside the card instead of increasing its width or overflowing. */.pg-portal .customs-upload-card, .pg-portal .customs-current-file, .pg-portal .customs-current-file > div { min-width: 0; max-width: 100%; }.pg-portal .customs-upload-card { overflow: hidden; }.pg-portal .customs-current-file .customs-download-file { max-width: 100%; min-height: 28px; padding: .25rem .48rem; border-radius: 8px; align-items: flex-start; white-space: normal; line-height: 1.25; text-align: left; }.pg-portal .customs-current-file .customs-download-file > span:last-child { min-width: 0; max-width: 100%; overflow-wrap: anywhere; word-break: break-word; }.pg-portal .customs-current-file .customs-file-state-icon { margin-top: 1px; }.pg-portal .customs-content-row td { vertical-align: middle; }.pg-portal .customs-content-row input { min-width: 105px; }.pg-portal .customs-content-row .content-name { min-width: 170px; }.pg-portal .customs-content-row .content-type { min-width: 140px; }.pg-portal .customs-modal-wide { max-width: min(1500px, 96vw); }.pg-portal .customs-history-table td, .pg-portal .customs-history-table th { white-space: normal; word-break: break-word; overflow-wrap: anywhere; }.customs-portal.pg-portal input[type="checkbox"] { width: 19px; height: 19px; cursor: pointer; }/* Customs modal is controlled by this page itself.
       It does not require bootstrap.bundle.min.js. */.customs-manual-backdrop { position: fixed; inset: 0; z-index: 1040; background: rgba(0, 0, 0, .5); }.pg-portal #customsRecordModal, .pg-portal #customsBondModal, .pg-portal #customsHistoryModal, .pg-portal #customsBillingModal, .pg-portal #customsReconcileModal { z-index: 1055; }.pg-portal #customsRecordModal.customs-modal-visible, .pg-portal #customsBondModal.customs-modal-visible, .pg-portal #customsHistoryModal.customs-modal-visible, .pg-portal #customsBillingModal.customs-modal-visible, .pg-portal #customsReconcileModal.customs-modal-visible { display: block !important; }.pg-portal .customs-upload-card { height: 100%; padding: 1rem; border: 1px dashed var(--customs-border); border-radius: 10px; background: #fafafa; }.pg-portal .customs-current-file { min-height: 22px; margin-top: .45rem; font-size: .85rem; word-break: break-word; }.pg-portal .customs-base-file-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 1rem; align-items: stretch; }.pg-portal .customs-base-file-grid .customs-upload-card { display: flex; flex-direction: column; min-width: 0; }.pg-portal .customs-base-file-grid .customs-current-file { margin-top: auto; padding-top: .55rem; }@media (max-width: 900px) {.pg-portal .customs-base-file-grid { grid-template-columns: 1fr; }}.pg-portal .customs-supporting-files-panel { margin-top: 1rem; padding: 1rem; border: 1px dashed var(--customs-border); border-radius: 10px; background: #fafafa; }.pg-portal .customs-supporting-file-row { display: grid; grid-template-columns: minmax(180px, 1fr) minmax(220px, 1.4fr) minmax(220px, 1.6fr) auto; gap: .65rem; align-items: end; padding: .75rem; margin-top: .65rem; border: 1px solid #e4dfeb; border-radius: 8px; background: #fff; }.pg-portal .customs-existing-supporting-file { padding: .7rem; margin-top: .55rem; border: 1px solid #e4dfeb; border-radius: 8px; background: #fff; }.pg-portal .customs-supporting-file-note { margin-top: .35rem; color: #6c757d; white-space: pre-wrap; overflow-wrap: anywhere; }@media (max-width: 900px) {.pg-portal .customs-supporting-file-row { grid-template-columns: 1fr; }}.pg-portal .customs-bond-summary { min-height: 22px; margin-top: .35rem; font-size: .85rem; color: #6c757d; word-break: break-word; }.pg-portal .customs-bond-client-list { max-height: 180px; overflow: auto; border: 1px solid var(--customs-border); border-radius: 8px; padding: .75rem; }.pg-portal .customs-workflow-upload { display: none; }.pg-portal .customs-file-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(230px, 1fr)); gap: .75rem; }.pg-portal .customs-file-card { min-width: 0; padding: .8rem; border: 1px solid var(--customs-border); border-radius: 9px; background: #fff; }.pg-portal .customs-file-card-title { font-weight: 700; margin-bottom: .3rem; }.pg-portal .customs-file-card-name { display: block; overflow-wrap: anywhere; word-break: break-word; }.pg-portal .customs-file-card-meta { margin-top: .35rem; font-size: .78rem; color: #6c757d; overflow-wrap: anywhere; }.pg-portal .customs-history-file-panel { padding: 1rem; margin-bottom: 1rem; border: 1px solid var(--customs-border); border-radius: 10px; background: #f8f9fa; }/* Keep form-based modals inside the viewport.
       The form is an extra wrapper inside .modal-content,
       so the form itself must also be a flex column. */.pg-portal #customsRecordModal, .pg-portal #customsBondModal { overflow: hidden; padding: 0 !important; }.pg-portal #customsRecordModal .modal-dialog, .pg-portal #customsBondModal .modal-dialog { height: calc(100dvh - 2rem); max-height: calc(100dvh - 2rem); margin: 1rem auto; }.pg-portal #customsRecordModal .modal-content, .pg-portal #customsBondModal .modal-content { height: 100%; max-height: 100%; overflow: hidden; }.pg-portal #customsRecordForm, .pg-portal #customsBondForm { display: flex; flex-direction: column; width: 100%; height: 100%; min-height: 0; overflow: hidden; }.pg-portal #customsRecordModal .modal-header, .pg-portal #customsRecordModal .modal-footer, .pg-portal #customsBondModal .modal-header, .pg-portal #customsBondModal .modal-footer { flex: 0 0 auto; background: #fff; }.pg-portal #customsRecordModal .modal-body, .pg-portal #customsBondModal .modal-body { flex: 1 1 auto; min-height: 0; overflow-y: auto !important; overscroll-behavior: contain; padding-bottom: 2rem; scroll-padding-bottom: 8rem; }.pg-portal #customsRecordModal .modal-footer, .pg-portal #customsBondModal .modal-footer { position: static; z-index: 8; border-top: 1px solid var(--customs-border); box-shadow: 0 -3px 10px rgba(0, 0, 0, .06); }@media (max-width: 1400px) {}@media (max-width: 768px) {.pg-portal #customsRecordModal .modal-dialog, .pg-portal #customsBondModal .modal-dialog { width: calc(100vw - 1rem); height: calc(100dvh - 1rem); max-height: calc(100dvh - 1rem); margin: .5rem auto; }.customs-portal.pg-portal { padding: .5rem; }}/* --------------------------------------------------------------------------
   [2026-10-10] 清关门户 CustomsClearancePortal 块2/7 —— 作用域 .pg-portal —— 作用域 .pg-portal
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- */.pg-portal #customs7501EditorModal { z-index: 1080; padding: 0 !important; overflow: hidden; }.pg-portal #customs7501EditorModal.customs-7501-modal-visible { display: block !important; }.customs-7501-backdrop { position: fixed; inset: 0; z-index: 1070; background: rgba(0, 0, 0, .62); }.pg-portal #customs7501EditorModal .modal-dialog { width: calc(100vw - 1rem); max-width: 1800px; height: calc(100dvh - 1rem); max-height: calc(100dvh - 1rem); margin: .5rem auto; }.pg-portal #customs7501EditorModal .modal-content { height: 100%; max-height: 100%; overflow: hidden; }.pg-portal #customs7501EditorModal .modal-header, .pg-portal #customs7501EditorModal .modal-footer { flex: 0 0 auto; background: #fff; }.pg-portal #customs7501EditorModal .modal-body { display: flex; flex: 1 1 auto; min-height: 0; padding: 0; overflow: hidden; background: #f6f3fb; }.pg-portal .customs-7501-wrap { display: flex; flex: 1 1 auto; flex-direction: column; min-width: 0; min-height: 0; padding: .75rem; }.pg-portal .customs-7501-toolbar { flex: 0 0 auto; margin-bottom: .65rem; padding: .7rem; border: 1px solid #e3dcf1; border-radius: 9px; background: #fff; box-shadow: 0 2px 8px rgba(40, 30, 70, .06); }.pg-portal .customs-7501-tool-grid { display: grid; grid-template-columns: minmax(180px, 1fr) minmax(180px, 1fr) auto auto auto auto; gap: .5rem; align-items: center; }.pg-portal .customs-7501-stats { display: flex; flex-wrap: wrap; gap: .4rem; margin-top: .6rem; }.pg-portal .customs-7501-pill { padding: .25rem .55rem; border: 1px solid #ded7ef; border-radius: 999px; color: #5d4a86; background: #f8f5fd; font-size: .75rem; font-weight: 700; }.pg-portal .customs-7501-invoice-suggestion { flex: 0 0 auto; margin-bottom: .65rem; padding: .8rem .9rem; border: 1px solid #d9cfee; border-radius: 9px; background: #fff; box-shadow: 0 2px 8px rgba(40, 30, 70, .05); }.pg-portal .customs-7501-invoice-suggestion.is-loading { color: #5f5968; background: #f8f6fc; }.pg-portal .customs-7501-invoice-suggestion.is-warning { border-color: #ffe69c; background: #fff8df; }.pg-portal .customs-7501-invoice-suggestion.is-success { border-color: #a3cfbb; background: #eaf7f0; }.pg-portal .customs-7501-invoice-suggestion.is-danger { border-color: #f1aeb5; background: #fcebed; }.pg-portal .customs-7501-invoice-suggestion-title { display: flex; align-items: center; justify-content: space-between; gap: .7rem; margin-bottom: .45rem; color: #493875; font-weight: 900; }.pg-portal .customs-7501-invoice-summary-grid { display: grid; grid-template-columns: repeat(4, minmax(145px, 1fr)); gap: .55rem; margin-top: .55rem; }.pg-portal .customs-7501-invoice-summary-card { min-width: 0; padding: .55rem .65rem; border: 1px solid rgba(73, 56, 117, .16); border-radius: 7px; background: rgba(255, 255, 255, .78); }.pg-portal .customs-7501-invoice-summary-label { color: #746d80; font-size: .72rem; font-weight: 800; }.pg-portal .customs-7501-invoice-summary-value { margin-top: .18rem; color: #302441; font-size: .98rem; font-weight: 900; overflow-wrap: anywhere; }.pg-portal .customs-7501-invoice-change-table-wrap { max-height: 210px; margin-top: .65rem; overflow: auto; border: 1px solid rgba(73, 56, 117, .14); border-radius: 7px; background: #fff; }.pg-portal .customs-7501-invoice-change-table { width: 100%; margin: 0; border-collapse: collapse; font-size: .76rem; }.pg-portal .customs-7501-invoice-change-table th, .pg-portal .customs-7501-invoice-change-table td { padding: .38rem .48rem; border-bottom: 1px solid #eee9f7; vertical-align: top; text-align: left; }.pg-portal .customs-7501-invoice-change-table th { position: sticky; top: 0; z-index: 1; color: #493875; background: #f3effa; white-space: nowrap; }.pg-portal .customs-7501-invoice-change-table td:nth-child(n/**/+3) { font-variant-numeric: tabular-nums; white-space: nowrap; }@media (max-width: 900px) {.pg-portal .customs-7501-invoice-summary-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }}.pg-portal .customs-7501-workspace { display: grid; grid-template-columns: minmax(720px, 1fr) 330px; flex: 1 1 auto; gap: .7rem; min-height: 0; }.pg-portal .customs-7501-pdf-stage { min-width: 0; min-height: 0; padding: 1rem; overflow: auto; border: 1px solid #dfd8ee; border-radius: 9px; background: #e9e5f0; }.pg-portal .customs-7501-native-preview { display: block; min-height: 700px; margin: 0 auto; border: 0; border-radius: 6px; background: #fff; box-shadow: 0 2px 16px rgba(0, 0, 0, .18); }.pg-portal .customs-7501-page-wrap { position: relative; width: fit-content; margin: 0 auto 1rem; background: #fff; box-shadow: 0 2px 16px rgba(0, 0, 0, .18); }.pg-portal .customs-7501-page-wrap:last-child { margin-bottom: 0; }.pg-portal .customs-7501-page-canvas { display: block; width: 100%; height: 100%; user-select: none; }.pg-portal .customs-7501-field-layer { position: absolute; inset: 0; }.pg-portal .customs-7501-pdf-field { position: absolute; z-index: 2; box-sizing: border-box; padding: 0; margin: 0; overflow: visible; border: 0; outline: none; color: #000; background: transparent; box-shadow: none; font-family: "EntrySummaryPdfFont", "Courier New", monospace; font-weight: 700; font-kerning: none; font-variant-ligatures: none; line-height: 1; letter-spacing: 0; white-space: pre; caret-color: #000; transform-origin: left top; }.pg-portal .customs-7501-pdf-field:focus { background: rgba(255, 245, 135, .3); }.pg-portal .customs-7501-side-panel { min-width: 0; min-height: 0; overflow: hidden; border: 1px solid #e3dcf1; border-radius: 9px; background: #fff; }.pg-portal .customs-7501-side-title { padding: .7rem; border-bottom: 1px solid #eee9f7; color: #493875; font-weight: 800; }.pg-portal .customs-7501-side-title.customs-7501-side-title-with-toggle { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: .65rem 1rem; }.pg-portal .customs-7501-detail-toggle { display: inline-flex; align-items: center; gap: .5rem; margin: 0; color: #5f5968; font-size: .8rem; font-weight: 800; white-space: nowrap; }.pg-portal .customs-7501-detail-toggle .form-check-input { width: 2.55rem; height: 1.3rem; margin: 0; cursor: pointer; }.pg-portal .customs-7501-number-list { height: calc(100% - 44px); overflow: auto; }.pg-portal .customs-7501-number-row { display: grid; grid-template-columns: minmax(0, 1fr) 45px; gap: .4rem; padding: .5rem; border-bottom: 1px solid #f0edf6; }.pg-portal .customs-7501-number-link { padding: 0; overflow: hidden; border: 0; color: #202020; background: transparent; font-family: Consolas, "Courier New", monospace; font-size: .75rem; font-weight: 700; text-align: left; text-overflow: ellipsis; white-space: nowrap; cursor: pointer; }.pg-portal .customs-7501-number-edit { grid-column: 1 / -1; display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: .4rem; }.pg-portal .customs-7501-loading { padding: 2rem; color: #6f6a7a; font-weight: 700; text-align: center; }@media (max-width: 1150px) {.pg-portal .customs-7501-workspace { grid-template-columns: 1fr; }.pg-portal .customs-7501-side-panel { min-height: 260px; }}@media (max-width: 800px) {.pg-portal .customs-7501-tool-grid { grid-template-columns: 1fr 1fr; }}/* --------------------------------------------------------------------------
   [2026-10-10] 清关门户 CustomsClearancePortal 块3/7 —— 作用域 .pg-portal —— 作用域 .pg-portal
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- *//* 7501 editor: editing form on top, full-width PDF preview below. */.pg-portal .customs-7501-direct-workspace { display: flex; flex: 1 1 auto; flex-direction: column; gap: .9rem; min-width: 0; min-height: 0; padding-right: .15rem; overflow: auto; }.pg-portal .customs-7501-form-panel { order: 1; flex: 0 0 auto; min-width: 0; min-height: 470px; overflow: visible; border: 1px solid #e3dcf1; border-radius: 9px; background: #fff; }.pg-portal .customs-7501-form-panel-body { display: flex; flex-direction: column; align-items: stretch; gap: .9rem; width: 100%; height: auto; padding: 1rem; overflow: visible; }/* Keep the four editor sections in one vertical stack on every screen.
       The grids inside each section may still use multiple columns. */.pg-portal .customs-7501-form-panel-body > .customs-7501-editor-section { display: block; flex: 0 0 auto; width: 100%; min-width: 0; margin: 0; }.pg-portal .customs-7501-direct-workspace > .customs-7501-pdf-stage { order: 2; flex: 0 0 auto; width: 100%; min-height: 900px; padding: 1.1rem; overflow: auto; }.pg-portal .customs-7501-native-preview { display: block; min-height: 900px; margin: 0 auto; border: 0; border-radius: 6px; background: #fff; box-shadow: 0 2px 16px rgba(0, 0, 0, .18); }.pg-portal .customs-7501-editor-section { margin-bottom: .9rem; padding: .9rem; border: 1px solid #ece7f4; border-radius: 8px; background: #fcfbfe; }.pg-portal .customs-7501-editor-section-title { margin-bottom: .7rem; color: #493875; font-size: .95rem; font-weight: 800; }.pg-portal .customs-7501-editor-grid { display: grid; grid-template-columns: repeat(6, minmax(130px, 1fr)); gap: .7rem; }.pg-portal .customs-7501-editor-grid .full-width { grid-column: 1 / -1; }.pg-portal .customs-7501-editor-field label { display: block; min-height: 18px; margin-bottom: .28rem; color: #625b70; font-size: .78rem; font-weight: 700; }.pg-portal .customs-7501-editor-field input, .pg-portal .customs-7501-editor-field textarea { width: 100%; min-height: 40px; border: 1px solid #d8d1e8; border-radius: 6px; padding: .48rem .55rem; font-size: .9rem; }.pg-portal .customs-7501-editor-field textarea { min-height: 84px; resize: vertical; }.pg-portal .customs-7501-line-card { margin-bottom: .85rem; border: 1px solid #ded7ef; border-radius: 8px; overflow: hidden; background: #fff; }.pg-portal .customs-7501-line-card-header { display: flex; justify-content: space-between; align-items: center; gap: .6rem; padding: .6rem .7rem; background: #f3effa; font-size: .9rem; font-weight: 800; }.pg-portal .customs-7501-line-row, .pg-portal .customs-7501-line-column-labels { display: grid; grid-template-columns: minmax(420px, 1fr) 125px 125px 145px 125px 125px; gap: .55rem; }.pg-portal .customs-7501-line-column-labels { padding: .5rem .65rem; color: #746d80; font-size: .75rem; font-weight: 800; }.pg-portal .customs-7501-line-row { padding: .55rem .65rem; border-top: 1px solid #f0edf6; }.pg-portal .customs-7501-line-row textarea, .pg-portal .customs-7501-line-row input { min-width: 0; min-height: 42px; border: 1px solid #d8d1e8; border-radius: 5px; padding: .48rem .55rem; font-size: .88rem; }.pg-portal .customs-7501-line-row textarea { min-height: 70px; resize: vertical; }.pg-portal .customs-7501-line-row input[readonly], .pg-portal .customs-7501-line-row textarea[readonly] { color: #5f5968; background: #f5f3f8; cursor: default; }.pg-portal .customs-7501-line-row .customs-7501-value-input { color: #241a35; background: #fff; border-color: var(--customs-purple); box-shadow: 0 0 0 2px rgba(166, 131, 227, .12); font-weight: 800; text-align: right; }.pg-portal .customs-7501-readonly-grid { display: grid; grid-template-columns: repeat(5, minmax(150px, 1fr)); gap: .65rem; }.pg-portal .customs-7501-summary-card { min-width: 0; padding: .7rem .8rem; border: 1px solid #ded7ef; border-radius: 8px; background: #f8f6fc; }.pg-portal .customs-7501-summary-label { color: #746d80; font-size: .75rem; font-weight: 800; }.pg-portal .customs-7501-summary-value { margin-top: .25rem; color: #34234f; font-size: 1rem; font-weight: 900; overflow-wrap: anywhere; }.pg-portal .customs-7501-readonly-note { margin-top: .7rem; padding: .7rem .8rem; border: 1px solid #ece7f4; border-radius: 8px; background: #fff; color: #5f5968; white-space: pre-wrap; overflow-wrap: anywhere; }/* “隐藏明细”模式：隐藏 Header 和 Ultimate Consignee / Importer；
       Merchandise 只显示可编辑 Value；所有只读汇总与说明隐藏。 */.pg-portal .customs-7501-form-panel.is-editable-only { min-height: 0; }.pg-portal .customs-7501-form-panel.is-editable-only .customs-7501-editor-section.is-header-section, .pg-portal .customs-7501-form-panel.is-editable-only .customs-7501-editor-section.is-consignee-section, .pg-portal .customs-7501-form-panel.is-editable-only .customs-7501-editor-section.is-readonly-section { display: none !important; }.pg-portal .customs-7501-form-panel.is-editable-only .customs-7501-line-card-header .text-muted { display: none; }.pg-portal .customs-7501-form-panel.is-editable-only .customs-7501-line-column-labels { display: none; }.pg-portal .customs-7501-form-panel.is-editable-only .customs-7501-line-row { grid-template-columns: minmax(160px, 320px); justify-content: start; gap: 0; padding: .55rem .65rem; }.pg-portal .customs-7501-form-panel.is-editable-only .customs-7501-line-row:not(.has-editable-value) { display: none; }.pg-portal .customs-7501-form-panel.is-editable-only .customs-7501-line-row > textarea[readonly], .pg-portal .customs-7501-form-panel.is-editable-only .customs-7501-line-row > input[readonly] { display: none !important; }.pg-portal .customs-7501-form-panel.is-editable-only .customs-7501-value-input { width: 100%; min-width: 0; }@media (max-width: 600px) {.pg-portal .customs-7501-side-title.customs-7501-side-title-with-toggle { align-items: flex-start; flex-direction: column; }.pg-portal .customs-7501-detail-toggle { width: 100%; justify-content: space-between; }.pg-portal .customs-7501-form-panel.is-editable-only .customs-7501-line-row { grid-template-columns: minmax(0, 1fr); width: 100%; }}@media (max-width: 1500px) {.pg-portal .customs-7501-editor-grid { grid-template-columns: repeat(4, minmax(135px, 1fr)); }.pg-portal .customs-7501-line-row, .pg-portal .customs-7501-line-column-labels { grid-template-columns: minmax(320px, 1fr) 105px 105px 125px 105px 105px; }.pg-portal .customs-7501-readonly-grid { grid-template-columns: repeat(3, minmax(140px, 1fr)); }}@media (max-width: 950px) {.pg-portal .customs-7501-editor-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }.pg-portal .customs-7501-line-row, .pg-portal .customs-7501-line-column-labels { grid-template-columns: 1fr; }.pg-portal .customs-7501-readonly-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }.pg-portal .customs-7501-direct-workspace > .customs-7501-pdf-stage, .pg-portal .customs-7501-native-preview { min-height: 720px; }}.pg-portal .customs-billing-layout { display: grid; grid-template-columns: minmax(430px, 38%) minmax(0, 1fr); gap: 1rem; align-items: stretch; }.pg-portal .customs-billing-rate-panel, .pg-portal .customs-billing-invoice-panel { border: 1px solid var(--customs-border); border-radius: 10px; background: #fff; overflow: hidden; }.pg-portal .customs-billing-panel-title { padding: .75rem 1rem; font-weight: 800; color: #493875; background: #f8f5fd; border-bottom: 1px solid var(--customs-border); }.pg-portal .customs-billing-rate-list { display: flex !important; flex-direction: column !important; width: 100%; max-height: 62vh; overflow-y: auto; overflow-x: hidden; padding: .5rem .75rem; }.pg-portal .customs-billing-rate-option { display: grid !important; grid-template-columns: 86px minmax(0, 1fr) 88px !important; width: 100% !important; min-width: 0; gap: .65rem; align-items: start; padding: .75rem .35rem; margin: 0; border-bottom: 1px solid #f0edf6; cursor: pointer; }.pg-portal .customs-billing-rate-option > input { margin: .15rem 0 0; flex: 0 0 auto; }.pg-portal .customs-billing-rate-option .customs-billing-stepper { display: inline-flex; align-items: center; gap: 4px; }.pg-portal .customs-billing-rate-option .customs-billing-stepper > button { width: 22px; height: 22px; margin: 0; padding: 0; border-radius: 6px; border: 1px solid #A683E3; background: #f0edf6; color: #815ac6; font-size: 14px; font-weight: 700; line-height: 1; cursor: pointer; flex: 0 0 auto; }.pg-portal .customs-billing-rate-option .customs-billing-stepper > button:disabled { opacity: .4; cursor: not-allowed; }.pg-portal .customs-billing-rate-option .customs-billing-rate-count { min-width: 18px; text-align: center; font-size: 13px; font-weight: 700; }.pg-portal .customs-billing-rate-option .customs-billing-rate-label { display: block; min-width: 0; line-height: 1.35; white-space: normal; word-break: normal; overflow-wrap: anywhere; }.pg-portal .customs-billing-rate-option strong { display: block; text-align: right; white-space: nowrap; line-height: 1.35; }.pg-portal .customs-billing-rate-option:last-child { border-bottom: 0; }.pg-portal .customs-billing-invoice { padding: 1.1rem; }.pg-portal .customs-billing-invoice-header { display: flex; justify-content: space-between; gap: 1rem; padding-bottom: .75rem; margin-bottom: .75rem; border-bottom: 2px solid #493875; }.pg-portal .customs-billing-table input { min-width: 110px; }.pg-portal .customs-billing-total { display: flex; justify-content: flex-end; gap: 1rem; align-items: baseline; font-size: 1.25rem; font-weight: 800; padding-top: .75rem; border-top: 2px solid #493875; }@media (max-width: 1000px) {.pg-portal .customs-billing-layout { grid-template-columns: 1fr; }.pg-portal .customs-billing-rate-list { max-height: 320px; }}@media (max-width: 600px) {.pg-portal .customs-7501-editor-grid { grid-template-columns: 1fr; }.pg-portal .customs-7501-editor-grid .full-width { grid-column: auto; }}/* --------------------------------------------------------------------------
   [2026-10-10] 清关门户 CustomsClearancePortal 块4/7 —— 作用域 .pg-portal —— 作用域 .pg-portal
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- */.pg-portal .customs-note-button { position: relative; display: inline-flex; align-items: center; gap: .25rem; }.pg-portal .customs-note-badge { display: inline-flex; align-items: center; justify-content: center; min-width: 18px; height: 18px; padding: 0 5px; border-radius: 999px; color: #fff; background: #dc3545; font-size: .68rem; font-weight: 800; line-height: 1; }.pg-portal .customs-note-bubble { font-size: .9rem; line-height: 1; }.pg-portal .customs-locked-control, .pg-portal .customs-locked-control:disabled { color: #6c757d; background-color: #eef0f2 !important; cursor: not-allowed; opacity: 1; }.pg-portal .customs-amount-value { color: #493875; font-weight: 800; white-space: nowrap; }.pg-portal .customs-restore-record { white-space: nowrap; }/* --------------------------------------------------------------------------
   [2026-10-10] 清关门户 CustomsClearancePortal 块5/7 —— 作用域 .pg-portal —— 作用域 .pg-portal
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- */.pg-portal #customsInvoiceNodeEditorModal { z-index: 1090; padding: 0 !important; overflow: hidden; }.pg-portal #customsInvoiceNodeEditorModal.customs-invoice-node-visible { display: block !important; }.customs-invoice-node-backdrop { position: fixed; inset: 0; z-index: 1085; background: rgba(0, 0, 0, .66); }.pg-portal #customsInvoiceNodeEditorModal .modal-dialog { width: calc(100vw - 1rem); max-width: 1900px; height: calc(100dvh - 1rem); max-height: calc(100dvh - 1rem); margin: .5rem auto; }.pg-portal #customsInvoiceNodeEditorModal .modal-content { height: 100%; overflow: hidden; }.pg-portal #customsInvoiceNodeEditorModal .modal-body { display: flex; flex-direction: column; min-height: 0; padding: .75rem; overflow: hidden; background: #f4f2f8; }.pg-portal .customs-invoice-node-toolbar { flex: 0 0 auto; padding: .7rem; margin-bottom: .65rem; border: 1px solid #ded7ef; border-radius: 9px; background: #fff; }.pg-portal .customs-invoice-node-pills, .pg-portal .customs-invoice-node-sheet-tabs { display: flex; flex-wrap: wrap; align-items: center; gap: .4rem; }.pg-portal .customs-invoice-node-sheet-tabs { margin-top: .65rem; }.pg-portal .customs-invoice-node-pill { display: inline-flex; align-items: center; min-height: 28px; padding: .25rem .58rem; border: 1px solid #ded7ef; border-radius: 999px; color: #493875; background: #f8f5fd; font-size: .76rem; font-weight: 800; }.pg-portal .customs-invoice-node-status { min-height: 20px; margin-top: .55rem; font-size: .78rem; font-weight: 700; color: #6c757d; overflow-wrap: anywhere; }.pg-portal .customs-invoice-node-status.is-success { color: #146c43; }.pg-portal .customs-invoice-node-status.is-working, .pg-portal .customs-invoice-node-status.is-pending { color: #664d03; }.pg-portal .customs-invoice-node-status.is-warning { color: #9a6700; }.pg-portal .customs-invoice-node-status.is-error { color: #b02a37; }.pg-portal .customs-invoice-node-grid-stage { flex: 1 1 auto; min-height: 0; overflow: auto; border: 1px solid #d8d1e8; border-radius: 9px; background: #fff; }.pg-portal .customs-invoice-node-loading { padding: 2rem; color: #6c6575; font-weight: 700; text-align: center; }.pg-portal .customs-invoice-node-table { width: max-content; min-width: 100%; border-collapse: separate; border-spacing: 0; table-layout: fixed; font-family: Calibri, Arial, sans-serif; font-size: .82rem; }.pg-portal .customs-invoice-node-table th, .pg-portal .customs-invoice-node-table td { border-right: 1px solid #ded9e8; border-bottom: 1px solid #ded9e8; }.pg-portal .customs-invoice-node-table thead th { position: sticky; top: 0; z-index: 6; height: 30px; color: #493875; background: #eee9f7; text-align: center; font-weight: 900; }.pg-portal .customs-invoice-node-row-number { position: sticky; left: 0; z-index: 5; color: #6d6578; background: #f5f3f8; text-align: center; font-weight: 800; }.pg-portal .customs-invoice-node-cell { position: relative; min-width: 0; padding: 0; background: #fff; }.pg-portal .customs-invoice-node-input { width: 100%; height: 100%; min-height: 30px; padding: .28rem .42rem; border: 0; outline: 0; color: #2f2936; background: transparent; font: inherit; }.pg-portal .customs-invoice-node-input:focus { box-shadow: inset 0 0 0 2px var(--customs-purple); background: #fffdf2; }.pg-portal .customs-invoice-node-cell.is-formula { background: #f3f0f7; }.pg-portal .customs-invoice-node-cell.is-formula .customs-invoice-node-input { padding-right: 22px; color: #5e5668; cursor: default; }.pg-portal .customs-invoice-node-cell.is-changed { background: #fff3cd; }.pg-portal .customs-invoice-node-formula-mark { position: absolute; top: 4px; right: 5px; color: #815ac6; font-weight: 900; pointer-events: none; }.pg-portal .customs-invoice-node-row-role-title td { background: #493875; }.pg-portal .customs-invoice-node-row-role-title .customs-invoice-node-input { color: #fff; font-size: .95rem; font-weight: 900; text-align: center; }.pg-portal .customs-invoice-node-row-role-header td { background: #5b4587; }.pg-portal .customs-invoice-node-row-role-header .customs-invoice-node-input { color: #fff; font-weight: 900; text-align: center; }.pg-portal .customs-invoice-node-row-role-total td { background: #f3effa; border-top: 2px double #493875; }.pg-portal .customs-invoice-node-row-role-total .customs-invoice-node-input { color: #493875; font-weight: 900; }.pg-portal .customs-invoice-node-row-role-meta td { background: #faf8fd; }@media (max-width: 768px) {.pg-portal #customsInvoiceNodeEditorModal .modal-dialog { width: calc(100vw - .5rem); height: calc(100dvh - .5rem); max-height: calc(100dvh - .5rem); margin: .25rem auto; }}/* --------------------------------------------------------------------------
   [2026-10-10] 清关门户 CustomsClearancePortal 块6/7 —— 作用域 .pg-portal —— 作用域 .pg-portal
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- */.pg-portal .customs-7501-dual-invoice-panel { order: 0; display: flex; flex: 0 0 auto; flex-direction: column; gap: .9rem; width: 100%; min-width: 0; padding: .9rem; border: 1px solid #dcd5e9; border-radius: 10px; background: #fff; }.pg-portal .customs-7501-dual-invoice-panel-title { display: flex; justify-content: space-between; align-items: center; gap: .8rem; color: #493875; font-weight: 900; }.pg-portal .customs-7501-dual-invoice-card { width: min(1450px, 92%); min-width: 0; margin: 0 auto; overflow: hidden; border: 2px solid #c9c2d6; border-radius: 10px; background: #fff; }.pg-portal .customs-7501-dual-invoice-card.is-original { border-color: #6c757d; }.pg-portal .customs-7501-dual-invoice-card.is-updated { border-color: #198754; }.pg-portal .customs-7501-dual-invoice-header { display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: .65rem; padding: .7rem .8rem; border-bottom: 1px solid #ddd7e7; background: #f7f5fa; }.pg-portal .customs-7501-dual-invoice-card.is-updated .customs-7501-dual-invoice-header { background: #eaf7ef; }.pg-portal .customs-7501-dual-invoice-version { display: inline-flex; align-items: center; min-height: 28px; padding: .25rem .65rem; border-radius: 999px; color: #fff; background: #6c757d; font-size: .78rem; font-weight: 900; }.pg-portal .customs-7501-dual-invoice-card.is-updated .customs-7501-dual-invoice-version { background: #198754; }.pg-portal .customs-7501-dual-invoice-file-name { min-width: 0; color: #51495b; font-size: .8rem; font-weight: 700; overflow-wrap: anywhere; }.pg-portal .customs-7501-dual-invoice-tabs { display: flex; flex-wrap: wrap; gap: .4rem; min-height: 38px; padding: .5rem .65rem; border-bottom: 1px solid #e5e0ec; background: #fbfafc; }.pg-portal .customs-7501-dual-invoice-stage { height: 310px; min-height: 220px; overflow: auto; background: #fff; }.pg-portal .customs-7501-dual-invoice-stage .customs-invoice-node-input { cursor: default; user-select: text; }.pg-portal .customs-7501-dual-invoice-stage .customs-invoice-node-input:focus { box-shadow: none; background: transparent; }@media (max-width: 768px) {.pg-portal .customs-7501-dual-invoice-panel { padding: .55rem; }.pg-portal .customs-7501-dual-invoice-card { width: 100%; }.pg-portal .customs-7501-dual-invoice-stage { height: 240px; }.pg-portal .customs-7501-dual-invoice-panel-title { align-items: flex-start; flex-direction: column; }}/* 账单左侧 Rate Sheet 铺满整个区域 */.pg-portal .customs-billing-rate-panel { display: flex !important; flex-direction: column !important; align-items: stretch !important; width: 100% !important; min-width: 0 !important; }.pg-portal .customs-billing-rate-panel .customs-billing-panel-title { display: block !important; width: 100% !important; max-width: none !important; margin: 0 !important; box-sizing: border-box !important; }.pg-portal .customs-billing-rate-list { display: flex !important; flex: 1 1 auto !important; flex-direction: column !important; align-items: stretch !important; width: 100% !important; max-width: none !important; margin: 0 !important; padding: .5rem .75rem !important; box-sizing: border-box !important; }.pg-portal .customs-billing-rate-option { display: grid !important; grid-template-columns: 86px minmax(0, 1fr) 100px !important; width: 100% !important; max-width: none !important; margin: 0 !important; box-sizing: border-box !important; }/* 强制移除项目全局 aside/div 样式造成的内部空白 */.pg-portal #customsBillingModal .customs-billing-rate-panel { display: flex !important; flex-direction: column !important; align-items: stretch !important; width: 100% !important; min-width: 0 !important; max-width: none !important; padding: 0 !important; margin: 0 !important; box-sizing: border-box !important; overflow: hidden !important; }/* 标题真正铺满 */.pg-portal #customsBillingModal .customs-billing-rate-panel > .customs-billing-panel-title { display: block !important; width: 100% !important; min-width: 0 !important; max-width: none !important; margin: 0 !important; padding: .8rem 1rem !important; box-sizing: border-box !important; }/* 列表真正铺满，滚动条靠最右边 */.pg-portal #customsBillingModal #customsBillingRateList { display: flex !important; flex: 1 1 auto !important; flex-direction: column !important; align-items: stretch !important; width: 100% !important; min-width: 0 !important; max-width: none !important; margin: 0 !important; padding: .35rem 0 !important; box-sizing: border-box !important; overflow-x: hidden !important; overflow-y: auto !important; }/* 每一项铺满列表 */.pg-portal #customsBillingModal #customsBillingRateList > .customs-billing-rate-option { display: grid !important; grid-template-columns: 86px minmax(0, 1fr) 100px !important; align-items: start !important; width: 100% !important; min-width: 0 !important; max-width: none !important; margin: 0 !important; padding: .75rem 1rem !important; box-sizing: border-box !important; }/* --------------------------------------------------------------------------
   [2026-10-10] 清关门户 CustomsClearancePortal 块7/7 —— 作用域 .pg-portal —— 作用域 .pg-portal
   选择器/声明多重集校验一致。
   -------------------------------------------------------------------------- */.pg-portal #customsReconcileModal { z-index: 1060; }.pg-portal #customsReconcileModal.customs-modal-visible { display: block !important; }.pg-portal #customsReconcileModal .modal-dialog { max-width: min(1450px, 96vw); }.pg-portal .customs-reconcile-summary-grid { display: grid; grid-template-columns: repeat(4, minmax(180px, 1fr)); gap: .75rem; margin: 1rem 0; }.pg-portal .customs-reconcile-summary-card { padding: .8rem .9rem; border: 1px solid #ded7ef; border-radius: 9px; background: #f8f6fc; }.pg-portal .customs-reconcile-summary-label { color: #6c6575; font-size: .76rem; font-weight: 800; }.pg-portal .customs-reconcile-summary-value { margin-top: .2rem; color: #34234f; font-size: 1.12rem; font-weight: 900; font-variant-numeric: tabular-nums; }.pg-portal .customs-reconcile-table-wrap { max-height: 52vh; overflow: auto; border: 1px solid var(--customs-border); border-radius: 9px; }.pg-portal .customs-reconcile-table { margin: 0; min-width: 1020px; }.pg-portal .customs-reconcile-table thead th { position: sticky; top: 0; z-index: 2; background: #f8f5fd; white-space: nowrap; }.pg-portal .customs-reconcile-row > td { background: #fff !important; transition: background-color .12s ease; }.pg-portal .customs-reconcile-row.customs-reconcile-selected > td { background: #d1e7dd !important; }.pg-portal .customs-reconcile-money { white-space: nowrap; text-align: right; font-variant-numeric: tabular-nums; }.pg-portal .customs-reconcile-allocation { color: #146c43; font-weight: 900; }.pg-portal .customs-reconcile-partial { color: #9a6700; font-weight: 900; }.pg-portal .customs-reconcile-order-badge { display: inline-flex; align-items: center; justify-content: center; min-width: 24px; height: 24px; padding: 0 6px; border-radius: 999px; color: #fff; background: var(--customs-purple-dark); font-size: .72rem; font-weight: 900; }@media (max-width: 900px) {.pg-portal .customs-reconcile-summary-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }}@media (max-width: 560px) {.pg-portal .customs-reconcile-summary-grid { grid-template-columns: 1fr; }}/* ==========================================================================
   外壳（顶部导航 Scheme A，业主 2026-10-08 定布局 / 原紫）—— headerManager 专用
   原 headerManager 页内 <style> 全量迁入；布局基础三条中 main 的 flex 规则
   收窄到 main.ds-shell-main，避免影响不用外壳的页面（PDA 等）。
   ========================================================================== *//* ============================================================
       MTI shell — top navigation (design system v1, Scheme A)
       Replaces the CodingLab sidebar shell. Tokens: design-system.css
       ============================================================ *//* ---------- dark indigo top bar ---------- *//* ---------- module nav ---------- *//* ---------- right-side utilities ---------- *//* ---------- impersonation strip ---------- *//* ---------- title bar ---------- *//* ---------- content + footer ---------- *//* ---------- responsive ---------- *//* ===== 全局小件：回到顶部/底部切换按钮（原 htmlFunctions 页内样式） ===== *//* Your scroll toggle button */#scroll-toggle {
        position: fixed;
        bottom: 70px;
        right: 20px;

        /* make it small but not circular */
        padding: 0.25em 0.5em;
        font-size: 1.25rem;
        border-radius: 4px;            /* gentle rounding */

        background: rgba(0,0,0,0.5);
        color: white;
        text-decoration: none;
        display: none;
        cursor: pointer;
        transition: background-color 0.2s ease;
        z-index: 1000;
    }/* hover = purple */#scroll-toggle:hover {
        background: #A683E3;
    }
/* ===== 面单水印遮盖 setting_LabelWatermark (.pg-labelwatermark) ===== */
.pg-labelwatermark .lwc-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:.75rem;margin-bottom:.75rem}
@media (max-width:900px){.pg-labelwatermark .lwc-grid{grid-template-columns:repeat(2,1fr)}}
.pg-labelwatermark .lwc-grid label{display:flex;flex-direction:column;gap:.25rem;font-size:.85rem}
.pg-labelwatermark .lwc-checkrow{display:flex;flex-wrap:wrap;gap:.5rem 1.25rem;margin:.5rem 0 .75rem}
.pg-labelwatermark .lwc-checkrow label{display:flex;align-items:center;gap:.35rem;font-size:.9rem}
.pg-labelwatermark .lwc-radio-row{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem 1rem;margin:.5rem 0 .75rem}
.pg-labelwatermark .lwc-radio-row label{display:flex;align-items:center;gap:.35rem}
.pg-labelwatermark .lwc-preview-wrap{display:grid;grid-template-columns:1fr 1fr;gap:1rem}
@media (max-width:900px){.pg-labelwatermark .lwc-preview-wrap{grid-template-columns:1fr}}
.pg-labelwatermark .lwc-pdf{width:100%;height:540px;border:1px solid #E7E1F3;border-radius:12px;background:#fff}
.pg-labelwatermark .lwc-table{width:100%;border-collapse:collapse;font-size:.9rem}
.pg-labelwatermark .lwc-table th,.pg-labelwatermark .lwc-table td{padding:.45rem .6rem;border-bottom:1px solid #eee;text-align:left;vertical-align:top}

/* --------------------------------------------------------------------------
   [2026-10-13] 预报看板 Portal 列表页格式 —— 业主令：显示类前端统一
   warehouseManager_CustomsClearancePortal 样式（筛选卡 + 网格、品牌按钮、
   表格卡 + 分页收进卡内；令牌与 Portal 现行高级层一致）
   -------------------------------------------------------------------------- */
#forecastTop.pg-fcdash { padding: 1rem; }
.pg-fcdash .customs-card { background: #fff; border: 1px solid #E7E1F3; border-radius: 16px; box-shadow: 0 1px 2px rgba(31,24,52,.05), 0 10px 28px -14px rgba(76,52,128,.16); }
.pg-fcdash .customs-filter-grid { display: grid; grid-template-columns: repeat(10, minmax(125px, 1fr)); gap: .65rem; align-items: end; }
.pg-fcdash .customs-filter-wide { grid-column: span 2; }
.pg-fcdash .customs-filter-actions { grid-column: span 3; }
.pg-fcdash .customs-brand-button { color: #fff !important; background: linear-gradient(160deg, #8F68D6 0%, #7C53C0 55%, #7150B6 100%) !important; border: 1px solid rgba(84,54,140,.35) !important; box-shadow: 0 1px 2px rgba(60,35,110,.18), 0 4px 10px -4px rgba(109,75,168,.45); transition: box-shadow .15s ease, transform .15s ease; }
.pg-fcdash .customs-brand-button:hover, .pg-fcdash .customs-brand-button:focus { background: linear-gradient(160deg, #9773DE 0%, #8459C8 55%, #7956BE 100%) !important; transform: translateY(-1px); box-shadow: 0 2px 4px rgba(60,35,110,.16), 0 10px 20px -8px rgba(109,75,168,.5); }
.pg-fcdash .customs-brand-button:disabled { opacity: .55; transform: none; }
.pg-fcdash .form-control, .pg-fcdash .form-select { border-color: #D9D2EA; border-radius: 11px; }
.pg-fcdash .form-control:focus, .pg-fcdash .form-select:focus { border-color: #815AC6; box-shadow: 0 0 0 3px rgba(129,90,198,.16); }
.pg-fcdash .customs-field-toggle { width: 100%; background: #fff; border: 1px solid #D9D2EA; border-radius: 11px; color: #212529; text-align: left; }
.pg-fcdash .customs-field-toggle:hover, .pg-fcdash .customs-field-toggle:focus { background: #fff; border-color: #815AC6; color: #212529; box-shadow: 0 0 0 3px rgba(129,90,198,.16); }
.pg-fcdash .customs-table-wrap { border-radius: 12px; }
.pg-fcdash .pagination-controls { border-top: 1px solid #E7E1F3; margin-top: .5rem; }
@media (max-width: 1400px) { .pg-fcdash .customs-filter-grid { grid-template-columns: repeat(5, minmax(125px, 1fr)); } }
@media (max-width: 768px) { .pg-fcdash .customs-filter-grid { grid-template-columns: repeat(2, minmax(120px, 1fr)); } }
