/* ===== 组件 ===== */
.ds-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:var(--h-md);
  padding:0 14px;border:1px solid transparent;border-radius:var(--r-md);font-family:inherit;
  font-size:var(--fs-sm);font-weight:500;line-height:1;cursor:pointer;white-space:nowrap;
  background:var(--ink-900);color:#fff;transition:background var(--dur-fast) var(--ease),transform var(--dur-fast)}
.ds-btn:hover{background:var(--ink-700)} .ds-btn:active{transform:translateY(1px)}
.ds-btn[disabled]{opacity:.42;cursor:not-allowed;transform:none}
.ds-btn--brand{background:var(--brand-600)} .ds-btn--brand:hover{background:var(--brand-700)}
.ds-btn--success{background:var(--jade-500)} .ds-btn--success:hover{background:var(--jade-700)}
.ds-btn--danger{background:var(--red-600)} .ds-btn--danger:hover{background:var(--red-700)}
.ds-btn--ghost{background:var(--elevated);color:var(--ink-900);border-color:var(--bd-field)}
.ds-btn--ghost:hover{background:var(--brand-50);border-color:var(--brand-500)}
.ds-btn--sm{height:var(--h-sm);padding:0 10px;font-size:var(--fs-caption)}
.ds-btn--lg{height:var(--h-lg);padding:0 18px;font-size:var(--fs-body)}
.ds-btn--icon{width:var(--h-md);padding:0}
.ds-btn--sm.ds-btn--icon{width:var(--h-sm)}

.ds-input{height:var(--h-md);padding:0 var(--s-3);border:1px solid var(--bd-field);
  border-radius:var(--r-md);background:var(--elevated);color:var(--ink-900);font-family:inherit;
  font-size:var(--fs-sm);width:100%;transition:border-color var(--dur-fast),box-shadow var(--dur-fast)}
.ds-input::placeholder{color:var(--ink-400)}
.ds-input:hover{border-color:var(--ink-500)}
.ds-input:focus{outline:none;border-color:var(--brand-500);box-shadow:0 0 0 3px rgba(37,99,235,.18)}
.ds-input[disabled]{background:var(--paper-2);color:var(--ink-400);border-color:var(--line);cursor:not-allowed}
textarea.ds-input{height:auto;min-height:76px;padding:9px var(--s-3);line-height:1.6;resize:vertical}
.ds-field{display:flex;flex-direction:column;gap:6px}
.ds-label{font-size:var(--fs-sm);font-weight:500;color:var(--ink-500)}
.ds-label .req{color:var(--red-600);margin-left:2px}
.ds-hint{font-size:var(--fs-caption);color:var(--ink-400);line-height:1.6}

.ds-tag{display:inline-flex;align-items:center;gap:5px;height:22px;padding:0 9px;
  border-radius:var(--r-full);font-size:var(--fs-micro);font-weight:600;letter-spacing:.02em;
  white-space:nowrap;background:var(--neutral-50);color:var(--neutral-600)}
.ds-tag .dot{width:6px;height:6px;border-radius:50%;background:currentColor;flex:none}
.ds-tag .dot.off{background:transparent;box-shadow:inset 0 0 0 1.5px currentColor}
.ds-tag--ok{background:var(--jade-50);color:var(--jade-700)}
.ds-tag--warn{background:var(--amber-50);color:var(--amber-700)}
.ds-tag--bad{background:var(--red-50);color:var(--red-700)}
.ds-tag--info{background:var(--blue-50);color:var(--blue-700)}
.ds-tag--brand{background:var(--brand-50);color:var(--brand-700)}
.ds-tag--ok-outline{background:transparent;color:var(--jade-700);border:1px dashed var(--jade-500)}
.ds-tag--draft{background:transparent;color:var(--ink-500);border:1px dashed var(--bd-field)}

.ds-switch{display:inline-flex;align-items:center;gap:9px;cursor:pointer;font-size:var(--fs-sm)}
.ds-switch input{position:absolute;opacity:0;width:0;height:0}
.ds-switch .track{width:36px;height:20px;border-radius:var(--r-full);background:var(--neutral-300);
  position:relative;transition:background var(--dur-base) var(--ease);flex:none}
.ds-switch .track::after{content:"";position:absolute;top:2px;left:2px;width:16px;height:16px;
  border-radius:50%;background:#fff;box-shadow:0 1px 2px rgba(0,0,0,.2);
  transition:transform var(--dur-base) var(--ease)}
.ds-switch input:checked + .track{background:var(--jade-500)}
.ds-switch input:checked + .track::after{transform:translateX(16px)}
.ds-check{display:inline-flex;align-items:center;gap:7px;font-size:var(--fs-sm);cursor:pointer}
.ds-check input{width:16px;height:16px;accent-color:var(--brand-600);margin:0;cursor:pointer}

/* ===== 后台外壳 ===== */
.sh{display:grid;grid-template-columns:var(--side-w) minmax(0,1fr);background:var(--paper)}
.sh-side{background:
  radial-gradient(420px 220px at 0% 0%, rgba(56,189,248,.18), transparent 62%),
  linear-gradient(180deg, #0c1e36 0%, #071422 46%);
  color:var(--side-fg);padding:var(--s-5) var(--s-3);
  display:flex;flex-direction:column;gap:2px;font-size:var(--fs-sm)}
.sh-brand{display:flex;align-items:center;gap:9px;padding:0 var(--s-2) var(--s-4);
  margin-bottom:var(--s-2);border-bottom:1px solid var(--side-line)}
.sh-brand b{display:block;font-size:var(--fs-sm);font-weight:650;line-height:1.35}
.sh-brand span{display:block;font-size:var(--fs-micro);color:var(--side-label);margin-top:1px}
.sh-grp{font-size:var(--fs-micro);font-weight:600;letter-spacing:var(--ls-micro);
  color:var(--side-label);text-transform:uppercase;padding:var(--s-4) var(--s-3) 6px}
.sh-nav{display:flex;align-items:center;gap:9px;width:100%;text-align:left;background:none;
  border:0;color:var(--side-fg-2);font-family:inherit;font-size:var(--fs-sm);
  padding:8px var(--s-3);border-radius:var(--r-md);cursor:pointer;position:relative;
  transition:background var(--dur-fast),color var(--dur-fast)}
.sh-nav .badge{margin-left:auto;font-size:10px;font-weight:600;background:var(--brand-600);
  color:#fff;border-radius:var(--r-full);padding:1px 6px;font-variant-numeric:tabular-nums}
.sh-nav:hover{background:var(--side-hover);color:var(--side-fg)}
.sh-nav.on{background:var(--side-active);color:var(--side-fg);font-weight:500}
.sh-nav.on::before{content:"";position:absolute;left:0;top:7px;bottom:7px;width:3px;
  border-radius:0 3px 3px 0;background:var(--brand-500)}
.sh-side-foot{margin-top:auto;padding-top:var(--s-4)}

.sh-main{min-width:0;display:flex;flex-direction:column}
.sh-top{padding:var(--s-4) var(--s-6);border-bottom:1px solid var(--line);background:var(--surface)}
.sh-toprow{display:flex;align-items:flex-start;gap:var(--s-3);flex-wrap:wrap}
.sh-crumb{font-size:var(--fs-micro);color:var(--ink-400);letter-spacing:.04em}
.sh-crumb b{color:var(--ink-900);font-weight:600}
.sh-h1{font-size:var(--fs-h2);margin:2px 0 0;display:flex;align-items:center;gap:var(--s-3);flex-wrap:wrap}
.sh-desc{font-size:var(--fs-caption);color:var(--ink-400);line-height:1.65;margin-top:6px;max-width:78ch}
.sh-actions{margin-left:auto;display:flex;gap:var(--s-2);align-items:center;flex-wrap:wrap}

/* 页面说明抽屉：把原来那行长 hint 收起来 */
.sh-info{position:relative;display:inline-flex}
.sh-info summary{list-style:none;cursor:pointer;width:18px;height:18px;border-radius:50%;
  border:1px solid var(--bd-field);color:var(--ink-400);font-size:11px;display:grid;
  place-items:center;font-family:var(--font-mono);flex:none;font-weight:600}
.sh-info summary::-webkit-details-marker{display:none}
.sh-info[open] summary{background:var(--brand-500);border-color:var(--brand-500);color:#fff}
.sh-info .body{position:absolute;top:calc(100% + 6px);left:0;z-index:30;width:min(460px,72vw);
  background:var(--elevated);border:1px solid var(--line);border-radius:var(--r-md);
  box-shadow:var(--sh-2);padding:var(--s-3) var(--s-4);font-size:var(--fs-caption);
  line-height:1.75;color:var(--ink-500);font-weight:400}

.sh-run{display:flex;align-items:center;gap:10px;padding:8px var(--s-3);border-radius:var(--r-md);
  border:1px solid var(--bd-field);background:var(--elevated);font-size:var(--fs-caption);
  min-width:0;flex:1;max-width:560px}
.sh-run .txt{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ink-500)}
.sh-run .txt b{color:var(--ink-900);font-weight:600;font-variant-numeric:tabular-nums}
.sh-run .pill{margin-left:auto;font-size:10px;letter-spacing:.06em;font-weight:600;
  padding:2px 8px;border-radius:var(--r-full);background:var(--neutral-50);color:var(--neutral-600);flex:none}
.sh-run .led{width:9px;height:9px;border-radius:50%;flex:none;background:var(--neutral-300)}
.sh-run--run{border-color:var(--jade-500);background:var(--jade-50)}
.sh-run--run .led{background:var(--jade-500);animation:led 1.6s ease-out infinite}
.sh-run--run .pill{background:var(--jade-100);color:var(--jade-700)}
.sh-run--wait{border-color:var(--amber-600);background:var(--amber-50)}
.sh-run--wait .led{background:var(--amber-600)}
.sh-run--wait .pill{background:var(--amber-100);color:var(--amber-700)}
@keyframes led{0%{box-shadow:0 0 0 0 rgba(46,107,87,.55)}100%{box-shadow:0 0 0 8px rgba(46,107,87,0)}}
@media (prefers-reduced-motion:reduce){.sh-run--run .led{animation:none}}

.sh-body{padding:var(--s-5) var(--s-6) var(--s-8);display:flex;flex-direction:column;gap:var(--s-4)}

/* 一张卡片 = 一个功能区：工具栏做卡片头 */
.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);
  box-shadow:var(--sh-1);overflow:hidden}
.card-h{display:flex;align-items:center;gap:var(--s-3);padding:var(--s-4) var(--s-5);
  border-bottom:1px solid var(--line-soft)}
.card-h h3{font-size:var(--fs-lg)} .card-h .sub{font-size:var(--fs-caption);color:var(--ink-400);margin-top:2px}
.card-h .r{margin-left:auto;display:flex;gap:var(--s-2);align-items:center}
.card-b{padding:var(--s-4) var(--s-5) var(--s-5)}

.toolbar{display:flex;gap:var(--s-2);align-items:center;flex-wrap:wrap;
  padding:var(--s-3) var(--s-5);background:var(--paper-2);border-bottom:1px solid var(--line-soft)}
.toolbar .grow{flex:1;min-width:170px}
.toolbar .cnt{font-size:var(--fs-caption);color:var(--ink-400);margin-left:auto;white-space:nowrap}
.seg{display:inline-flex;background:var(--surface);border:1px solid var(--bd-field);
  border-radius:var(--r-md);padding:2px;gap:2px}
.seg button{background:none;border:0;font-family:inherit;font-size:var(--fs-caption);
  padding:4px 10px;border-radius:var(--r-sm);color:var(--ink-500);cursor:pointer;white-space:nowrap}
.seg button.on{background:var(--ink-900);color:var(--side-fg);font-weight:500}
.seg button em{font-style:normal;font-variant-numeric:tabular-nums;opacity:.7;margin-left:3px}

.twrap{overflow:auto;max-height:420px}
table.t{width:100%;border-collapse:separate;border-spacing:0;font-size:var(--fs-sm)}
table.t th{position:sticky;top:0;z-index:2;background:var(--paper-2);
  font-size:var(--fs-micro);letter-spacing:var(--ls-micro);text-transform:uppercase;
  color:var(--ink-400);font-weight:600;text-align:left;padding:9px var(--s-3);
  border-bottom:1px solid var(--line);white-space:nowrap}
table.t td{padding:var(--s-3);border-bottom:1px solid var(--line-soft);vertical-align:middle}
table.t tbody tr{transition:background var(--dur-fast)}
table.t tbody tr:hover td{background:var(--brand-50)}
table.t tbody tr:last-child td{border-bottom:0}
table.t .rt{text-align:right;font-variant-numeric:tabular-nums;font-weight:600}
table.t .strong{font-weight:600;color:var(--ink-900)}
table.t .sub{font-size:var(--fs-caption);color:var(--ink-400);margin-top:2px;line-height:1.5}
table.t .cell{display:flex;flex-direction:column;gap:3px}
table.t .acts{display:flex;gap:6px;align-items:center;justify-content:flex-end}
.mono-code{font-family:var(--font-mono);font-size:12px;color:var(--jade-500);font-weight:600}

.menu{position:relative;display:inline-block}
.menu > .ds-btn{ }
.menu .list{position:absolute;top:calc(100% + 5px);right:0;z-index:40;background:var(--elevated);
  border:1px solid var(--line);border-radius:var(--r-md);box-shadow:var(--sh-2);
  padding:5px;min-width:164px;display:none}
.menu:focus-within .list,.menu.open .list{display:block}
.menu .list a{display:block;padding:7px 10px;border-radius:var(--r-sm);color:var(--ink-500);
  text-decoration:none;font-size:var(--fs-sm)}
.menu .list a:hover{background:var(--paper-2);color:var(--ink-900)}
.menu .list .sep{height:1px;background:var(--line);margin:5px 0}
.menu .list a.bad{color:var(--red-600)} .menu .list a.bad:hover{background:var(--red-50)}

.pager{display:flex;align-items:center;gap:var(--s-3);padding:var(--s-3) var(--s-5);
  border-top:1px solid var(--line-soft);flex-wrap:wrap;background:var(--surface)}
.pager .pages{display:flex;gap:4px;margin-left:auto;align-items:center}
.pager .pages button{min-width:30px;height:30px;padding:0 8px;border-radius:var(--r-md);
  border:1px solid var(--bd-field);background:var(--elevated);color:var(--ink-500);
  font-family:inherit;font-size:var(--fs-caption);cursor:pointer;font-variant-numeric:tabular-nums}
.pager .pages button:hover{border-color:var(--brand-500);color:var(--brand-700)}
.pager .pages button.on{background:var(--ink-900);border-color:var(--ink-900);color:#fff;font-weight:600}
.pager .pages button[disabled]{opacity:.4;cursor:not-allowed}

.empty{text-align:center;padding:var(--s-12) var(--s-5);color:var(--ink-400)}
.empty svg{margin:0 auto var(--s-3);display:block;opacity:.55}
.empty b{display:block;font-size:var(--fs-lg);color:var(--ink-500);font-weight:650;margin-bottom:5px}

.stat-row{display:grid;grid-template-columns:repeat(8,minmax(0,1fr));gap:var(--s-2)}
@media(max-width:1240px){.stat-row{grid-template-columns:repeat(4,minmax(0,1fr))}}
@media(max-width:680px){.stat-row{grid-template-columns:repeat(2,minmax(0,1fr))}}
.stat-btn{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);
  padding:9px var(--s-3);text-align:left;cursor:pointer;font-family:inherit;
  transition:border-color var(--dur-fast),background var(--dur-fast)}
.stat-btn:hover{border-color:var(--brand-500)}
.stat-btn .k{display:flex;align-items:center;gap:5px;font-size:var(--fs-micro);color:var(--ink-400);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.stat-btn .v{font-size:20px;font-weight:650;font-variant-numeric:tabular-nums;margin-top:3px;line-height:1.2}
.stat-btn.on{border-color:var(--ink-900);background:var(--paper-2);box-shadow:inset 0 0 0 1px var(--ink-900)}
.stat-btn.on .v{color:var(--ink-900)}

.board{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:var(--s-3)}
@media(max-width:1180px){.board{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media(max-width:760px){.board{grid-template-columns:repeat(2,minmax(0,1fr))}}
.stat{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);
  padding:var(--s-4);box-shadow:var(--sh-1)}
.stat .k{font-size:var(--fs-micro);color:var(--ink-400);letter-spacing:.04em}
.stat .v{font-size:26px;font-weight:650;font-variant-numeric:tabular-nums;
  letter-spacing:var(--ls-tight);margin-top:5px;line-height:1.15}
.stat .v small{font-size:14px;color:var(--ink-400);font-weight:400}
.stat .d{font-size:var(--fs-micro);color:var(--ink-400);margin-top:4px;display:flex;gap:5px;align-items:center}
.delta{font-weight:600;font-variant-numeric:tabular-nums}
.delta.up{color:var(--red-600)} .delta.down{color:var(--jade-500)}
.spark{margin-top:9px;height:24px;display:block;width:100%}

.cols{display:grid;grid-template-columns:minmax(0,1.55fr) minmax(0,1fr);gap:var(--s-4)}
@media(max-width:1080px){.cols{grid-template-columns:1fr}}

.logbox{background:#071422;color:#dbeafe;border-radius:var(--r-md);
  padding:var(--s-3) var(--s-4);font-family:var(--font-mono);font-size:12px;line-height:1.8;
  height:360px;overflow:auto;border:1px solid rgba(56,189,248,.16)}
.logbox .row{display:flex;gap:10px;padding:1px 4px;border-radius:3px}
.logbox .row:hover{background:rgba(56,189,248,.08)}
.logbox .t{color:#7dd3fc;flex:none}
.logbox .lv{flex:none;font-weight:600}
.logbox .lv.i{color:#67e8f9} .logbox .lv.w{color:#fbbf24} .logbox .lv.e{color:#fb7185}
.logbox .k{color:#93c5fd}
.logbox mark{background:rgba(56,189,248,.35);color:#e0f2fe;border-radius:2px;padding:0 2px}
.logbox::-webkit-scrollbar{width:10px}
.logbox::-webkit-scrollbar-thumb{background:rgba(243,237,226,.18);border-radius:99px}

.nurture-tasks{display:flex;flex-wrap:wrap;gap:8px 16px}
.nurture-tasks label{display:inline-flex;align-items:center;gap:6px;font-size:var(--fs-sm);white-space:nowrap}
.form-grid{display:grid;grid-template-columns:190px minmax(0,1fr);gap:var(--s-4) var(--s-5);align-items:start}
@media(max-width:760px){.form-grid{grid-template-columns:1fr}}
.form-grid > .lab{padding-top:8px;font-size:var(--fs-sm);font-weight:500;color:var(--ink-500)}
.pair{display:flex;gap:var(--s-2);align-items:center;flex-wrap:wrap}
.pair .to{font-size:var(--fs-caption);color:var(--ink-400)}
.pair .ds-input{width:130px}

.modal-mask{background:rgba(27,24,20,.62);padding:var(--s-8) var(--s-5);display:grid;place-items:center}
.modal{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-xl);
  box-shadow:var(--sh-print);overflow:hidden;width:100%}
.modal-h{display:flex;align-items:center;gap:var(--s-3);padding:var(--s-4) var(--s-5);
  border-bottom:1px solid var(--line-soft)}
.modal-h h3{font-size:var(--fs-lg);flex:1}
.modal-b{padding:var(--s-5);display:flex;flex-direction:column;gap:var(--s-4);max-height:70vh;overflow:auto}
.modal-f{display:flex;gap:var(--s-2);justify-content:flex-end;padding:var(--s-4) var(--s-5);
  border-top:1px solid var(--line-soft);background:var(--paper-2)}
.sect{border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden}
.sect-h{display:flex;align-items:center;gap:var(--s-2);padding:10px var(--s-4);background:var(--paper-2);
  border-bottom:1px solid var(--line-soft);font-size:var(--fs-sm);font-weight:600}
.sect-b{padding:var(--s-4)}
.chg{font-size:var(--fs-caption);color:var(--ink-400);line-height:1.8}
.chg b{color:var(--ink-500)}
.sk{background:linear-gradient(90deg,var(--paper-2) 25%,#F7F3EA 37%,var(--paper-2) 63%);
  background-size:400% 100%;border-radius:var(--r-sm);animation:sk 1.4s ease infinite;height:12px}
@keyframes sk{0%{background-position:100% 50%}100%{background-position:0 50%}}

/* 接到现有页面上：盖过 style.css 的按钮/输入/表格，并修掉下拉被卡片裁切 */
.sh{min-height:100vh}
.sh-side{position:sticky;top:0;height:100vh;overflow:auto}
.sh-body > section{display:flex;flex-direction:column;gap:var(--s-4)}
.sh button{filter:none}
.sh button:hover{filter:none}
.sh .sh-nav{background:none;color:var(--side-fg-2);border:0;border-radius:var(--r-md);padding:8px var(--s-3);font-size:var(--fs-sm)}
.sh input,.sh select,.sh textarea,
.sh input[type="text"],.sh input[type="password"],.sh input[type="number"],
.sh input[type="url"],.sh input[type="search"],.sh input[type="month"]{min-width:0}
.sh input.ds-input,.sh select.ds-input,.sh textarea.ds-input{
  box-sizing:border-box;appearance:none;-webkit-appearance:none;
  height:var(--h-md);padding:0 var(--s-3);margin:0;
  border:1px solid var(--bd-field);border-radius:var(--r-md);
  background:var(--elevated);color:var(--ink-900);
  font-size:var(--fs-sm);line-height:1;width:auto;min-width:0;max-width:none}
.sh input.ds-input::placeholder{color:var(--ink-400)}
.sh input.ds-input:focus,.sh select.ds-input:focus,.sh textarea.ds-input:focus{
  outline:none;border-color:var(--brand-500);box-shadow:0 0 0 3px rgba(37,99,235,.18)}
.sh textarea.ds-input{height:auto;min-height:76px;padding:9px var(--s-3);line-height:1.6}
.sh .toolbar .grow{width:auto;flex:1 1 220px;min-width:220px;max-width:none}
.sh .toolbar input.ds-input.grow{height:var(--h-sm);flex:1 1 220px;min-width:220px;width:auto}
.sh .toolbar select.ds-input{flex:none;height:var(--h-sm)}
.sh .sh-actions input.ds-input{flex:none;height:var(--h-sm)}
.sh .sh-actions input.ds-input[type="search"]{width:220px;min-width:220px}
.sh .sh-actions input.ds-input.search-goods{width:200px;min-width:200px}
.sh .sh-actions input.ds-input[type="month"],
.sh .sh-actions input.ds-input[type="date"]{width:150px;min-width:150px}
.sh .range-picks{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.sh .range-picks button{height:32px;padding:0 16px;border-radius:999px;border:1px solid #E6E6E6;
  background:#fff;color:#666;font-size:14px;font-family:inherit;cursor:pointer;line-height:1}
.sh .range-picks button:hover{border-color:#F0B48A;color:#B8541F}
.sh .range-picks button.on{background:#FF7A18;border-color:#FF7A18;color:#fff;font-weight:600}
.sh .range-picks .to{color:var(--ink-400);font-size:var(--fs-caption)}
.sh .range-picks input.ds-input{width:148px;height:32px;flex:none}
.sh .order-stats{display:flex;gap:12px;flex-wrap:wrap;align-items:stretch}
.sh .order-stats button.stat-btn{flex:none;width:148px;min-width:0;background:#fff;color:var(--ink-900);
  border:1px solid #E7E1D6;border-radius:14px;padding:14px 16px 12px;text-align:left;height:auto;display:block;
  box-shadow:none}
.sh .order-stats button.stat-btn .k{font-size:13px;font-weight:500;color:#8C8378}
.sh .order-stats button.stat-btn .v{display:block;font-size:28px;font-weight:700;margin-top:8px;line-height:1;color:#1C1917}
.sh .order-stats button.stat-btn .sub{display:block;margin-top:6px;font-size:12px;line-height:1.3;font-weight:500;color:#8C8378}
.sh .order-stats button.stat-unpaid{width:auto;min-width:168px}
.sh .order-stats button.stat-unpaid .v{font-size:22px;white-space:nowrap}
.sh .order-stats button.stat-unpaid.hot{background:#FAEEDA;border-color:#BA7517}
.sh .order-note{display:flex;align-items:center;gap:8px;padding:8px 12px;min-width:0;max-width:100%;
  box-sizing:border-box;border-top:1px dashed var(--line-soft);background:var(--paper-2)}
.sh .order-note .on-lb{flex:none;font-size:12px;color:var(--ink-400)}
.sh .order-note input.ds-input.on-in{flex:0 1 240px;width:240px;min-width:0;max-width:240px;height:32px}
.sh .order-note .order-wb{flex:1;min-width:0;font-size:13px;word-break:break-all;line-height:1.45}
.sh .order-note .order-wb-link{color:#185FA5;text-decoration:underline;text-underline-offset:2px}
.sh .order-note .order-wb-link:hover{color:#0C447C}
.pick-btn{position:relative;overflow:visible}
.pick-btn .pick-badge{position:absolute;top:-6px;right:-6px;min-width:16px;height:16px;padding:0 4px;border-radius:9px;background:var(--brand,#c0392b);color:#fff;font-size:11px;line-height:16px;text-align:center;font-weight:700;box-shadow:0 0 0 1px var(--paper,#fff)}
.sh .modal.modal-pay{width:min(560px,calc(100vw - 32px));display:flex;flex-direction:column}
.sh .modal-pay .pay-sum{display:grid;grid-template-columns:repeat(auto-fit,minmax(110px,1fr));gap:8px}
.sh .modal-pay .pay-sum > div{display:flex;flex-direction:column;gap:2px;padding:8px 10px;border-radius:10px;background:var(--paper-2)}
.sh .modal-pay .pay-sum span{font-size:12px;color:var(--ink-400)}
.sh .modal-pay .pay-sum b{font-size:16px;font-weight:650}
.sh .modal-pay .pay-sum .owe b{color:#A32D2D}
.sh .modal-pay .pay-sum .ok b{color:#1D9E75}
.sh .modal-pay .pay-form{display:grid;grid-template-columns:128px 96px 1fr;gap:8px}
.sh .modal-pay .pay-form input.ds-input,.sh .modal-pay .pay-form select.ds-input{width:100%;min-width:0;height:36px}
@media(max-width:560px){
  .sh .modal-pay .pay-form{grid-template-columns:1fr 96px}
  .sh .modal-pay .pay-form input.ds-input:last-child{grid-column:1 / -1}
}
.sh .order-stats button.stat-btn:hover{border-color:#C8BBA8}
.sh .order-stats button.stat-btn.on{background:#fff;color:var(--ink-900);border-color:#1C1917;
  box-shadow:inset 0 0 0 1px #1C1917}
.sh .order-list{display:flex;flex-direction:column;gap:var(--s-3);padding:var(--s-4) var(--s-5) var(--s-5)}
.sh .order-block{margin:0;border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden;background:var(--surface)}
.sh .order-head{display:flex;align-items:center;gap:var(--s-4);flex-wrap:wrap;padding:11px var(--s-4);
  background:var(--paper-2);border-bottom:1px solid var(--line-soft);font-size:var(--fs-sm);color:var(--ink-500)}
.sh .order-head strong{font-size:var(--fs-sm);font-weight:600;color:var(--ink-900)}
.sh .order-date{font-size:var(--fs-caption);color:var(--ink-400);font-variant-numeric:tabular-nums}
.sh .order-logi{color:var(--ink-400);font-weight:500}
.sh .order-money{margin-left:auto;color:var(--ink-900)}
.sh .order-money b{font-weight:650}
.sh .order-block table.t{margin:0}
.sh .order-block table.t th{position:static}
.sh .modal.modal-cust{width:min(760px,calc(100vw - 40px));max-width:none}
.sh .modal.modal-cust.is-price,.sh .modal.modal-cust.is-orders{width:min(1080px,calc(100vw - 32px))}
.sh .cust-acts{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-start;align-items:center}
.sh .price-scroll{overflow:auto;max-height:none}
.sh .price-scroll table.t{min-width:640px}
.sh .modal-b .sect{overflow:visible}
.sh .modal.modal-good{max-width:680px}
/* ⭕ 亮哥 2026-10-03：编码表被 .form-grid input 的 max-width:460px 撑到 760px+，
   620px 弹窗装不下 -> modal-b 横向滚动，左侧「商品名称/默认价格」标签整个被推出屏。
   改成表格锁死 100% 宽 + 固定列宽，输入框跟着单元格缩，不再横向滚。 */
.sh .modal-good table.t{width:100%;table-layout:fixed}
.sh .modal-good table.t input.ds-input{width:100%;max-width:100%}
.sh .modal-good table.t td:nth-child(1){width:32%}
.sh .modal-good table.t td:nth-child(3){width:88px}
.sh .modal-good table.t td:nth-child(4){width:46px}
.sh .cust-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--s-4)}
@media(max-width:760px){.sh .cust-grid{grid-template-columns:1fr}}
.sh .cust-save{display:flex;gap:var(--s-2);margin-top:var(--s-4);align-items:center;flex-wrap:wrap}
.sh .cust-add{display:flex;gap:var(--s-2);align-items:flex-end;flex-wrap:wrap;border-top:1px solid var(--line-soft)}
.sh .sect-h .ds-hint{margin-left:auto;font-weight:400}
.sh .brand-amt{font-weight:600;color:var(--brand-700)}
.sh .price-low{margin-top:4px;font-size:var(--fs-caption);color:var(--amber-700)}
.sh .profit-ok{color:var(--jade-500);font-weight:600}
.sh .wait-profit{color:var(--ink-400);font-weight:500}
.sh .pager .pages button{background:var(--elevated);color:var(--ink-900);border:1px solid var(--line);font-family:inherit;cursor:pointer}
.sh .order-block td[rowspan]{background:transparent}
.sh .card{padding:0;margin:0}
.sh .card > .form-grid,.sh .card > .btn-row{padding:var(--s-4) var(--s-5);margin:0}
.sh .form-grid input,.sh .form-grid select,.sh .form-grid textarea{width:100%;max-width:460px}
.sh .form-grid .pair input{width:118px;max-width:118px}
.sh .btn-row input{min-width:120px;width:150px}
.sh .stat-row button.stat-btn{background:var(--surface);color:var(--ink-900);border:1px solid var(--line);
  border-radius:var(--r-md);padding:9px var(--s-3);text-align:left;height:auto;display:block}
.sh .stat-row button.stat-btn strong{display:none}
.sh .stat-row button.stat-btn.on{background:var(--paper-2);color:var(--ink-900);border-color:var(--ink-900);box-shadow:inset 0 0 0 1px var(--ink-900)}
.sh .table-wrap,.sh .twrap{overflow:auto;max-height:420px}
.sh .table-flat{overflow:visible;max-height:none}
.sh .code-row{display:flex;gap:5px;flex-wrap:wrap;margin-top:2px}
.sh .code-tag{height:20px;padding:0 8px}
.sh table.t th{position:sticky;top:0}
.sh .menu .list{display:none}
.sh .menu.open .list{display:block;position:fixed;top:var(--menu-top);right:var(--menu-right);z-index:80}
.sh .menu .list button{display:block;width:100%;text-align:left;padding:7px 10px;border:0;border-radius:var(--r-sm);
  background:transparent;color:var(--ink-500);font-size:var(--fs-sm);height:auto}
.sh .menu .list button:hover{background:var(--paper-2);color:var(--ink-900)}
.sh .menu .list button.bad{color:var(--red-600);background:transparent}
.sh .menu .list button.bad:hover{background:var(--red-50)}
.sh .menu .list button[disabled]{opacity:.42}
.sh .tag{display:inline-flex;align-items:center;gap:5px;height:22px;padding:0 9px;border-radius:var(--r-full);
  background:var(--neutral-50);color:var(--neutral-600);font-size:var(--fs-caption);font-weight:500;border:1px solid transparent;line-height:1}
.sh .tag::before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor;flex:none}
.sh .tag.ok{background:var(--jade-50);color:var(--jade-700)}
.sh .tag.warn{background:var(--amber-50);color:var(--amber-700)}
.sh .tag.bad{background:var(--red-50);color:var(--red-700)}
.sh .tag.info{background:var(--blue-50);color:var(--blue-700)}
.sh .tag.brand{background:var(--brand-50);color:var(--brand-700)}
.sh .tag.ok.open{background:transparent;color:var(--jade-700);border:1px dashed var(--jade-500)}
.sh .tag.ok.open::before{background:transparent;box-shadow:inset 0 0 0 1.5px currentColor}
.sh .tag.dash{background:transparent;color:var(--ink-500);border:1px dashed var(--bd-field)}
/* ===== 运费模板：淘宝式折叠卡片 ===== */
.sh .ft-acc{border:1px solid var(--bd-card);border-radius:var(--r-lg);background:var(--elevated);
  margin-bottom:var(--s-3);overflow:hidden}
.sh .ft-acc-h{width:100%;display:flex;align-items:center;gap:10px;padding:14px 18px;
  background:transparent;border:0;cursor:pointer;font-family:inherit;text-align:left}
.sh .ft-acc-h:hover{background:var(--brand-50)}
.sh .ft-acc-name{font-size:var(--fs-md);font-weight:600;color:var(--ink-900)}
.sh .ft-acc-sub{font-size:var(--fs-caption);color:var(--ink-400);flex:1;min-width:0;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-left:2px}
.sh .ft-acc-chev{color:var(--ink-400);transition:transform var(--dur-fast) var(--ease);
  font-size:13px;flex:none;margin-left:auto}
.sh .ft-acc-chev.on{transform:rotate(180deg);color:var(--brand-600)}
.sh .ft-acc-body{padding:0 18px 18px;border-top:1px solid var(--bd-card)}
.sh .pc-cell{display:flex;flex-direction:column;align-items:flex-start;gap:4px;white-space:normal}
.sh .phone-name{display:flex;flex-direction:row;align-items:center;gap:8px;flex-wrap:wrap}
.sh .phone-name .name-edit{
  box-sizing:border-box;flex:1 1 140px;width:160px;min-width:120px;max-width:240px;
  height:28px;margin:0;padding:0 6px;
  border:1px solid transparent;border-radius:6px;background:transparent;
  color:var(--ink-900);font:inherit;font-size:14px;font-weight:650;line-height:28px;
  box-shadow:none}
.sh .phone-name .name-edit:hover{border-color:var(--bd-field);background:var(--elevated)}
.sh .phone-name .name-edit:focus{border-color:var(--brand-500);background:var(--elevated);outline:none;box-shadow:0 0 0 3px rgba(37,99,235,.18)}
.sh .phone-name .name-edit.unnamed{color:var(--brand-600)}
.sh .staff-page .card-b{padding:16px 20px 20px}
.sh .staff-add{display:flex;flex-wrap:wrap;gap:12px 16px;align-items:flex-end}
.sh .staff-add .staff-field{width:220px;flex:none}
.sh .staff-add .ds-btn{height:36px;flex:none}
.sh .staff-field{display:flex;flex-direction:column;gap:6px;min-width:0}
.sh .staff-field > span{font-size:12px;line-height:1.2;color:var(--ink-400)}
.sh .staff-page .staff-field input{width:100%;max-width:none;height:36px}
.sh .modal.modal-staff{width:min(680px,calc(100vw - 32px));max-height:calc(100vh - 64px);overflow:hidden;display:flex;flex-direction:column}
.sh .modal.modal-staff .modal-b{max-height:none;flex:1;min-height:0;overflow:auto}
.sh .staff-seg{display:inline-flex;align-items:center;gap:2px;height:36px;padding:3px;box-sizing:border-box;border:1px solid var(--line);border-radius:10px;background:var(--paper-2)}
.sh .staff-seg button{display:inline-flex;align-items:center;justify-content:center;height:28px;min-width:72px;margin:0;padding:0 12px;border:0;border-radius:7px;background:transparent;color:var(--ink-500);font:inherit;font-size:13px;font-weight:500;line-height:1;cursor:pointer;white-space:nowrap;box-shadow:none;filter:none}
.sh .staff-seg button:hover{background:var(--elevated);color:var(--ink-900);filter:none}
.sh .staff-seg button.on,.sh .staff-seg button.on:hover{background:var(--ink-900);color:#fff;font-weight:600}
.sh .staff-note{margin:14px 0 0;color:var(--ink-400);font-size:13px}
.sh .perm-block{margin-top:16px}
.sh .perm-block-h{display:flex;align-items:center;justify-content:flex-start;gap:12px;margin-bottom:8px}
.sh .perm-block-h b{font-size:13px;font-weight:650;color:var(--ink-700)}
.sh .perm-all{border:0;background:transparent;color:var(--brand-700);font:inherit;font-size:12px;cursor:pointer;padding:0}
.sh .perm-chips{display:flex;flex-wrap:wrap;gap:8px}
.sh .perm-chip{display:inline-flex;align-items:center;gap:6px;height:34px;padding:0 14px;border-radius:999px;border:1px solid var(--bd-field);background:var(--elevated);color:var(--ink-700);font:inherit;font-size:13px;line-height:1;white-space:nowrap;cursor:pointer}
.sh .perm-chip:hover:not(:disabled){border-color:var(--brand-500);background:var(--brand-50)}
.sh .perm-chip::before{content:"";width:16px;height:16px;border-radius:50%;border:1.5px solid var(--ink-300);box-sizing:border-box;background:#fff;flex:none}
.sh .perm-chip.on{background:var(--brand-50);border-color:var(--brand-600);color:var(--brand-700);font-weight:600}
.sh .perm-chip.on::before{border-color:var(--brand-600);background:var(--brand-600) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='white' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' d='M3.5 8.2 6.4 11l6.1-6.2'/%3E%3C/svg%3E") center/14px 14px no-repeat}
.sh .perm-chip:disabled{cursor:default;opacity:1}
.sh .perm-chip.static{cursor:default}
.sh .staff-list{display:flex;flex-direction:column}
.sh .staff-person{scroll-margin-top:16px}
.sh .staff-person + .staff-person{border-top:1px solid var(--line-soft)}
.sh .staff-person.open{box-shadow:inset 3px 0 0 var(--brand-600)}
.sh .staff-person.open .staff-person-h{background:var(--brand-50)}
.sh .staff-person-h{display:grid;grid-template-columns:minmax(180px,240px) minmax(0,1fr) auto;gap:12px 16px;align-items:center;padding:14px 20px}
.sh .staff-who{display:flex;align-items:center;flex-wrap:wrap;gap:8px;min-width:0}
.sh .staff-who b,.sh .staff-who .tag{font-size:14px;white-space:nowrap}
.sh .staff-who .tag{font-size:var(--fs-caption)}
.sh .staff-mini{min-width:0}
.sh .staff-empty{color:var(--ink-400);font-size:13px}
.sh .staff-edit{padding:4px 20px 18px;background:var(--paper-2,#F7F3EC)}
.sh .staff-edit-row{display:flex;flex-wrap:wrap;gap:16px 20px;align-items:end}
.sh .staff-edit-row .staff-field input{width:220px}
.sh .staff-actions{display:flex;gap:8px;margin-top:16px}
@media (max-width:900px){
  .sh .staff-add .staff-field{width:min(220px,100%)}
  .sh .staff-person-h{grid-template-columns:1fr auto}
  .sh .staff-mini{grid-column:1 / -1}
}
.sh .quota{align-items:baseline}
.sh .pause-note{max-width:210px;line-height:1.5}
.sh .file-btn{position:relative;overflow:hidden;display:inline-flex;align-items:center;height:var(--h-sm);
  padding:0 10px;border-radius:var(--r-md);background:var(--elevated);color:var(--ink-900);
  border:1px solid var(--bd-field);font-size:var(--fs-caption);cursor:pointer}
.sh .file-btn input{position:absolute;inset:0;opacity:0;cursor:pointer;width:100%;height:100%}
.sh .modal-mask{position:fixed;inset:0;z-index:50}
/* ⭕ 2026-10-03 适配：弹窗内容可能超过一屏（尤其修改订单明细多、对账结果长），
   必须能内部滚动，否则底部「加一行 / 保存 / 修改记录」被裁掉，手机/小屏点不到 */
.sh .modal-shot{padding:0;border-radius:var(--r-xl);box-shadow:var(--sh-print);background:var(--surface);
  max-height:calc(100vh - var(--s-8)*2);overflow-x:hidden;overflow-y:auto}
.sh .modal-head{margin:0;padding:var(--s-4) var(--s-5);border-bottom:1px solid var(--line-soft);
  position:sticky;top:0;z-index:2;background:var(--surface)}
.sh .modal-shot > :not(.modal-head){margin-left:var(--s-5);margin-right:var(--s-5)}
.sh .modal-shot > :last-child{margin-bottom:var(--s-5)}
/* ⭕ 同款适配：通用 .modal（对账比对 / 客户管理 / 商品管理）也会超屏，必须能滚动，否则长结果表 / 底部按钮被裁 */
/* ⭕ 2026-10-05 亮哥：推报单/推账单弹窗内容不完整、不适配。
   根因：`pre.draft-text` 压根没样式 —— pre 默认 white-space:pre **不换行**，
   报单文本一长就横向溢出，看着像被切掉；账单图也可能撑破弹窗。 */
.sh .draft-text{white-space:pre-wrap;word-break:break-word;overflow-wrap:anywhere;
  max-width:100%;box-sizing:border-box;margin:12px 0;padding:12px 14px;
  background:var(--bg-soft,var(--bg));border:1px solid var(--line-soft);
  border-radius:var(--r-md);font-size:13px;line-height:1.75;
  max-height:42vh;overflow-y:auto}
.sh .draft-img{max-width:100%;overflow:auto}
.sh .draft-img img{display:block;max-width:100%;height:auto;border-radius:var(--r-sm)}
.sh .modal-shot .btn-row{display:flex;gap:8px;flex-wrap:wrap}
.sh .modal-shot .hint{word-break:break-word}

.sh .modal{max-height:calc(100vh - var(--s-8)*2);overflow-x:hidden;overflow-y:auto}
.sh .modal-h{position:sticky;top:0;z-index:2;background:var(--surface)}
.sh .empty-state{text-align:center;padding:var(--s-12) var(--s-5);color:var(--ink-400)}
.sh .empty-state b{display:block;font-size:var(--fs-lg);color:var(--ink-500);font-weight:650;margin-bottom:5px}
.sh .amt{display:flex;flex-direction:column;gap:2px}
.sh .amt b{font-variant-numeric:tabular-nums}
.sh .amt .money{font-weight:600;color:var(--brand-700);font-variant-numeric:tabular-nums}
.sh .dirty{display:flex;align-items:center;gap:10px;padding:11px var(--s-4);background:var(--amber-50);
  border:1px solid var(--amber-100);border-radius:var(--r-md);color:var(--amber-700);font-size:var(--fs-sm)}
.sh .logbox .row{display:flex;gap:10px}
.sh .logbox .t{color:#8A8172;flex:none;font-variant-numeric:tabular-nums}
.sh .logbox .lv{flex:none;font-weight:600;width:52px}
.sh .logbox .lv.i{color:#9FD3C0}
.sh .logbox .lv.w{color:#E0BE7C}
.sh .logbox .lv.e{color:#E8A0B0}
.sh .miss{color:var(--amber-600)}
.sh select.risk-pick{height:var(--h-sm);width:112px;padding:0 8px}
.sh .risk-cell{display:flex;flex-direction:column;align-items:flex-start;gap:4px;width:148px;max-width:148px}
.sh .risk-cell input.risk-note{box-sizing:border-box;display:block;width:148px;min-width:0;max-width:148px;height:28px;margin:0;padding:0 8px;border:1px solid var(--bd-field);border-radius:var(--r-md);background:#fff;color:var(--ink-900);font-size:12px;line-height:26px;appearance:auto;-webkit-appearance:auto}
.sh .risk-cell input.risk-note:focus{outline:none;border-color:var(--brand-500);box-shadow:0 0 0 3px rgba(37,99,235,.18)}
@media (max-width:900px){
  .sh{grid-template-columns:1fr}
  .sh-side{position:relative;height:auto}
}
.sh .dash-stack{display:flex;flex-direction:column;gap:var(--s-4)}
.sh .dash-chart-card{overflow:visible}
.sh .dash-chart-wrap{position:relative}
.sh .dash-chart{width:100%;height:auto;display:block}
.sh .dash-chart .hit{cursor:pointer}
.sh .dash-tip{position:absolute;z-index:3;transform:translate(-50%, calc(-100% - 8px));pointer-events:none;
  min-width:132px;padding:8px 10px;border-radius:10px;background:#1C1917;color:#fff;
  box-shadow:0 8px 20px rgba(28,25,23,.18);font-size:12px;line-height:1.55}
.sh .dash-tip.below{transform:translate(-50%, 8px)}
.sh .dash-tip b{display:block;margin-bottom:2px;font-weight:650}
.sh .dash-tip span{display:flex;align-items:center;gap:6px}
.sh .dash-tip em{margin-left:auto;font-style:normal;font-variant-numeric:tabular-nums;font-weight:600}
.sh .dash-tip i{width:7px;height:7px;border-radius:50%;flex:none}
.sh .dash-tip i.ord{background:var(--brand-500)}
.sh .dash-tip i.pro{background:var(--blue-600)}
.sh .dash-tip i.est{background:#C4A15A}
.sh .dash-age{display:flex;flex-direction:column;gap:var(--s-4)}
.sh .dash-age .row{display:flex;justify-content:space-between;gap:12px;font-size:var(--fs-caption);margin-bottom:6px}
.sh .dash-age .row b{font-weight:600;font-variant-numeric:tabular-nums}
.sh .dash-bar{height:8px;border-radius:99px;background:var(--paper-2);overflow:hidden}
.sh .dash-bar i{display:block;height:100%;border-radius:99px;min-width:0}
.sh .cols > .card{display:flex;flex-direction:column;height:100%}
.sh .cols > .card > .card-b{flex:1;display:flex;flex-direction:column;min-height:0}
.sh .cols > .card > .card-b > .empty-state{flex:1;display:flex;flex-direction:column;justify-content:center;padding:var(--s-6) var(--s-4)}
.sh .dash-pair:not(:has(.card + .card)){grid-template-columns:1fr}
.sh .dash-stack .card-b > .foot{margin-top:auto;border-top:1px dashed var(--line);padding-top:var(--s-3);display:flex;align-items:center;gap:var(--s-2);flex-wrap:wrap}
.sh .dash-stack .card-b > .foot button{margin-left:auto;border:0;background:none;padding:0;min-height:0;border-radius:0;box-shadow:none;cursor:pointer;font-family:inherit;font-size:var(--fs-caption);font-weight:500;color:var(--brand-700);filter:none}
.sh .dash-stack .card-b > .foot button:hover{background:none;filter:none;color:var(--brand-600)}
.sh .dash-funnel{display:flex;flex-direction:column;gap:10px}
.sh .dash-funnel .lane{display:flex;align-items:center;gap:var(--s-3)}
.sh .dash-funnel .name{width:104px;flex:none;font-size:var(--fs-caption);color:var(--ink-500)}
.sh .dash-funnel .track{flex:1;height:22px;background:var(--paper-2);border-radius:var(--r-sm);overflow:hidden}
.sh .dash-funnel .track i{display:block;height:100%;border-radius:var(--r-sm)}
.sh .dash-funnel .n{width:72px;text-align:right;font-weight:600;font-size:var(--fs-sm);font-variant-numeric:tabular-nums}
.sh .dash-funnel .p{width:52px;text-align:right;font-size:var(--fs-caption);color:var(--ink-400);font-variant-numeric:tabular-nums}

/* 同一部手机的多个账号：左侧色条 + 淡底色并成一组，配槽位徽章区分第几个 */
.sh table.t tbody tr.grp-a td:first-child{box-shadow:inset 3px 0 0 var(--brand-500)}
.sh table.t tbody tr.grp-b td:first-child{box-shadow:inset 3px 0 0 var(--jade-500)}
.sh table.t tbody tr.grp-a td{background:rgba(37,99,235,.05)}
.sh table.t tbody tr.grp-b td{background:rgba(46,107,87,.035)}
.sh table.t tbody tr.grp-mid td{border-bottom-color:transparent}
.sh table.t tbody tr.grp-a:hover td{background:var(--brand-50)}
.sh table.t tbody tr.grp-b:hover td{background:var(--jade-50)}
.sh .grp-slot{display:inline-flex;align-items:center;justify-content:center;min-width:20px;height:20px;
  padding:0 5px;border-radius:var(--r-sm);font-size:var(--fs-caption);font-weight:600;line-height:1;
  font-variant-numeric:tabular-nums;flex:none}
.sh .grp-slot.a{background:var(--brand-50);color:var(--brand-700);border:1px solid var(--brand-300)}
.sh .grp-slot.b{background:var(--jade-50);color:var(--jade-700);border:1px solid var(--jade-100)}

/* ⭕ 2026-09-30 录单：客户历史订过的商品（点一下加一行，跟手机端一样） */
.sh .fav-box{margin:10px 0 4px;padding:10px 12px;border:1px dashed var(--jade-300,var(--ds-line));
  border-radius:var(--r-sm);background:var(--jade-50,transparent)}
.sh .fav-chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}
.sh .fav-chip{display:inline-flex;align-items:center;gap:5px;padding:5px 10px;cursor:pointer;
  border:1px solid var(--jade-300,#9fe1cb);border-radius:16px;background:#fff;
  font-size:var(--fs-caption);line-height:1.4;text-align:left}
.sh .fav-chip:hover{background:var(--jade-50,#e1f5ee)}
.sh .fav-chip b{font-weight:600}
.sh .fav-chip span{color:var(--ds-text-3,var(--ds-hint));font-weight:400}

/* ⭕ 2026-10-03 运费模板：非「按重量算」的模板就只是一个物流名字，没有价目表 */
.sh .ft-plain{padding:14px 16px;border-radius:var(--r-md);background:var(--brand-50);
  border:1px dashed var(--brand-300);margin:14px 0 10px}
.sh .ft-plain-t{font-size:var(--fs-md);font-weight:600;color:var(--brand-700);margin-bottom:4px}
.sh .ft-plain p{margin:0;font-size:var(--fs-caption);color:var(--ink-500);line-height:1.7}
.sh .ft-plain p b{color:var(--ink-900)}
.sh .ft-acc-sw{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin:10px 0 4px}
.sh .ft-acc-sw .ds-btn.on{background:var(--brand-600);color:#fff;border-color:var(--brand-600)}
.sh .ft-new{padding:0 20px 16px}
.sh .ft-kind-pick{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:8px;margin:10px 0}
.sh .ft-kind-pick button{display:flex;flex-direction:column;align-items:flex-start;gap:3px;
  padding:10px 12px;border:1px solid var(--bd-field);border-radius:var(--r-md);background:var(--elevated);
  cursor:pointer;font-family:inherit;text-align:left}
.sh .ft-kind-pick button:hover{background:var(--brand-50)}
.sh .ft-kind-pick button.on{border-color:var(--brand-600);background:var(--brand-50);
  box-shadow:inset 0 0 0 1px var(--brand-600)}
.sh .ft-kind-pick b{font-size:var(--fs-sm);font-weight:600;color:var(--ink-900)}
.sh .ft-kind-pick span{font-size:var(--fs-caption);color:var(--ink-400);line-height:1.5}

/* ══ 2026-10-03 手录报单：跟手机端(H5)一个样子，且手机/桌面都能用 ══ */
.sh .rp-card{padding:0 0 16px}
.sh .rp-sec{margin:0 20px 14px}
.sh .rp-sec-t{display:flex;align-items:center;gap:6px;flex-wrap:wrap;
  font-size:var(--fs-sm);font-weight:600;color:var(--ink-900);margin-bottom:6px}
.sh .rp-sec-t .ds-hint{font-weight:400}
.sh .rp-sec-t button{margin-left:auto}
.sh .rp-chips{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.sh .rp-chip{display:inline-flex;align-items:center;gap:5px;max-width:100%;
  padding:6px 12px;border:1px solid var(--jade-300,#9fe1cb);border-radius:16px;background:#fff;
  color:var(--jade-700,#0f6e56);font-size:var(--fs-caption);line-height:1.4;cursor:pointer;
  text-align:left}
.sh .rp-chip:hover{background:var(--jade-50,#e1f5ee)}
.sh .rp-chip b{font-weight:600}
.sh .rp-chip-g{color:var(--ink-400);font-weight:400}
.sh .rp-chip-q{color:var(--ink-400);font-weight:400;font-size:11px}
.sh .rp-srch{margin-top:8px;position:relative}
.sh .rp-srch input{border-style:dashed;border-color:var(--jade-300,#9fe1cb)}
.sh .rp-grid2{display:grid;grid-template-columns:1fr;gap:0 12px}
.sh .rp-sel,.sh .rp-unit{height:var(--h-sm);width:100%}
.sh .rp-warn{margin-top:6px;padding:8px 10px;border-radius:var(--r-sm);
  background:var(--amber-bg,#faeeda);color:var(--amber,#854f0b);font-size:var(--fs-caption);line-height:1.6}
.sh .rp-fm{display:flex;gap:8px;flex-wrap:wrap}
.sh .rp-fm button{flex:1 1 30%;min-width:84px;height:38px;border-radius:10px;
  border:1px solid var(--bd-field);background:var(--elevated);color:var(--ink-500);
  font-size:var(--fs-caption);cursor:pointer;font-family:inherit}
.sh .rp-fm button.on{background:var(--brand-600);color:#fff;border-color:var(--brand-600);font-weight:600}
.sh .rp-hint{margin-top:6px;line-height:1.6}
.sh .rp-row{position:relative;border-radius:10px;background:var(--paper-2,#f6f5f2);padding:10px 12px;margin-bottom:10px}
.sh .rp-row-h{display:flex;align-items:center;gap:8px;margin-bottom:8px}
.sh .rp-row-h b{font-size:var(--fs-md);font-weight:600}
.sh .rp-row-h .ds-hint{font-weight:400}
.sh .rp-x{margin-left:auto;width:32px;height:32px;border:0;background:none;cursor:pointer;
  color:var(--ink-400);font-size:15px;border-radius:8px;flex:none}
.sh .rp-x:hover{color:var(--red,#a32d2d);background:var(--red-bg,#fcebeb)}
.sh .rp-row-b{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.sh .rp-name{flex:1 1 150px;min-width:120px;height:var(--h-sm)}
.sh .rp-step{display:flex;align-items:center;flex:none}
.sh .rp-step button{width:34px;height:34px;border-radius:8px;border:1px solid var(--bd-field);
  background:var(--elevated);color:var(--ink-900);font-size:17px;line-height:1;cursor:pointer;flex:none}
.sh .rp-step button:active{background:var(--brand-50)}
.sh .rp-qty{width:66px;height:34px;text-align:center;margin:0 -1px;flex:none}
.sh .rp-unit{width:74px;flex:none}
.sh .rp-price{width:82px;height:34px;flex:none}
.sh .rp-note{margin-top:8px;width:100%;height:var(--h-sm)}
.sh .rp-tags{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}
.sh .rp-tag{border:1px solid var(--bd-field);background:var(--elevated);color:var(--ink-500);
  border-radius:14px;padding:4px 12px;font-size:var(--fs-caption);cursor:pointer;font-family:inherit}
.sh .rp-tag:hover{background:var(--brand-50);border-color:var(--brand-600);color:var(--brand-700)}
.sh .rp-freight{flex-wrap:wrap}
.sh .rp-foot{display:flex;gap:8px;flex-wrap:wrap;margin:6px 20px 0}
.sh .rp-foot .ok,.sh .rp-foot .ghost{flex:1 1 120px;height:40px}
.sh .rp-delbtn:hover{color:var(--red,#a32d2d);border-color:var(--red,#a32d2d)}

/* 手机上一行挤不下就整行铺开（⭕ 亮哥：网页端在手机上也要能用） */
@media (max-width:640px){
  .sh .rp-sec{margin:0 12px 12px}
  .sh .rp-foot{margin:6px 12px 0}
  .sh .rp-name{flex:1 1 100%}
  .sh .rp-price{width:72px}
  .sh .rp-fm button{flex:1 1 100%}
  .sh .rp-foot .ok,.sh .rp-foot .ghost{flex:1 1 100%}
}
/* 桌面/平板：双列排，别把表单拉成一条长带 */
@media (min-width:900px){
  .sh .rp-grid2{grid-template-columns:1fr 1fr}
}

/* ⭕ 2026-10-03 亮哥：客户管理抬头可点排序 */
.srt-th {
  display: inline-flex;
  align-items: center;
  gap: 3px;
  cursor: pointer;
  user-select: none;
  transition: color .12s;
}
th.srt-th { display: inline-flex; }
.srt-th:hover { color: var(--accent, #c8a35a); }
.srt-th.on { color: var(--accent, #c8a35a); font-weight: 700; }
.srt-th .srt {
  font-style: normal;
  font-size: 10px;
  line-height: 1;
  opacity: .85;
  min-width: 8px;
}
.srt-sep { color: var(--line, #e6e1d8); margin: 0 2px; font-weight: 400; }

/* ⭕ 2026-10-03 亮哥：首页「待收款」卡片 */
.owe-bars{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:10px}
.owe-b{display:inline-flex;align-items:center;gap:6px;background:#F7F5F0;
  border:.5px solid var(--line,#e6e1d8);border-radius:8px;padding:5px 10px;font-size:12px}
.owe-b i{font-style:normal;color:var(--muted,#6b6a66)}
.owe-b b{font-weight:650}
.owe-b.hi{background:#FCEBEB;border-color:#F0C4C4;color:#A32D2D}
.owe-b.hi b{color:#A32D2D}
.owe-list{display:flex;flex-wrap:wrap;gap:8px}
.owe-c{border:.5px solid var(--line,#e6e1d8);background:#fff;border-radius:14px;
  padding:4px 12px;font-size:13px;cursor:pointer;user-select:none}
.owe-c:hover{border-color:#c8a35a;background:#FDF9F0}
.owe-c b{font-weight:650;color:#A32D2D;margin-left:4px}

/* ⭕ 2026-10-03 亮哥：客户管理「欠款」列 */
.owe-cell{color:#A32D2D;font-weight:650;white-space:nowrap}

.recon-drop{border:1.5px dashed var(--line,#e6e1d8);border-radius:12px;padding:28px;text-align:center;
  background:#fff;color:var(--muted,#6b6a66)}
.recon-drop.on{border-color:#2563eb;background:#eff6ff}
.recon-photos{display:flex;flex-wrap:wrap;gap:10px;margin-top:12px}
.recon-photo{position:relative;width:96px;height:96px}
button.recon-photo-open{display:block;width:96px;height:96px;padding:0;border:0;border-radius:8px;
  background:transparent;overflow:hidden;cursor:zoom-in;filter:none}
button.recon-photo-open:hover{filter:none}
button.recon-photo-open img{width:96px;height:96px;object-fit:cover;display:block}
button.recon-photo-x{position:absolute;top:4px;right:4px;width:22px;height:22px;padding:0;border:0;border-radius:999px;
  background:rgba(28,25,20,.72);color:#fff;font-size:14px;line-height:20px;cursor:pointer;filter:none}
button.recon-photo-x:hover{filter:none;background:#1c1914}
.recon-zoom{position:fixed;inset:0;z-index:80;background:rgba(27,24,20,.72);
  display:flex;align-items:center;justify-content:center;padding:28px}
.recon-zoom img{max-width:min(960px,92vw);max-height:88vh;object-fit:contain;background:#fff;border-radius:8px}
button.recon-zoom-x{position:absolute;top:16px;right:16px;background:#fff;color:var(--ink,#2b2b2b);
  border:1px solid var(--line,#e6e1d8);filter:none}
button.recon-zoom-x:hover{filter:none;background:#f7f1e7}
.recon-loss{background:#FCEBEB}
.recon-cost-diff{background:#FFF6E8}
.recon-note{margin:0 0 10px;padding:10px 12px;border-radius:8px;background:#F7F1E4;border:1px solid #E4D3B0;color:#3F3424;line-height:1.55}
.recon-note--change{background:#FFF3C4;border:1px solid #E0B000;color:#6A4B00}
.recon-note--change b{display:block;margin-bottom:4px;font-size:15px}
.recon-note--change p{margin:2px 0;font-weight:650}
.recon-note--change span{display:block;margin-top:6px;font-size:13px}
.recon-note--warn{background:#FDECEC;border-color:#E7B4B4;color:#8C2F2F}
.recon-flag{display:inline-block;margin-right:6px;padding:1px 6px;border-radius:999px;background:#FFF3C4;border:1px solid #E0B000;color:#6A4B00;font-size:12px;font-weight:650}
.recon-log-filter{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.recon-log-filter input[type="date"]{width:150px}
.card.recon-sheet{overflow:visible}
td.recon-code-cell{position:relative;overflow:visible;vertical-align:top}
tr:has(.recon-code.open){position:relative;z-index:6}
.recon-code{position:relative;width:210px}
.recon-code.open{z-index:40}
input.recon-code-in{width:100%;min-width:0;height:34px;padding:0 28px 0 10px;border:1px solid var(--line,#e6e1d8);
  border-radius:8px;background:#fff;color:var(--ink,#2b2b2b);font-size:13px}
.recon-code.open input.recon-code-in{border-color:#2563eb;box-shadow:0 0 0 3px rgba(37,99,235,.18)}
button.recon-code-clear{position:absolute;top:5px;right:4px;width:24px;height:24px;padding:0;border:0;border-radius:6px;
  background:transparent;color:#6b6a66;font-size:16px;line-height:22px;cursor:pointer;filter:none}
button.recon-code-clear:hover{filter:none;background:#f3efe8;color:#2b2b2b}
.recon-code-pop{position:absolute;z-index:80;left:0;top:calc(100% + 4px);width:340px;max-height:280px;overflow:auto;
  background:#fff;border:1px solid var(--line,#e6e1d8);border-radius:10px;
  box-shadow:0 12px 32px rgba(40,30,20,.16);padding:4px}
button.recon-code-opt{display:flex;align-items:baseline;justify-content:space-between;gap:12px;
  width:100%;margin:0;padding:8px 10px;border:0;border-radius:8px;background:#fff;color:#2b2b2b;
  font-size:13px;font-weight:500;text-align:left;cursor:pointer;filter:none;transform:none}
button.recon-code-opt .k{font-weight:650;white-space:nowrap}
button.recon-code-opt .n{color:#6b6a66;font-weight:400;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
button.recon-code-opt:hover,button.recon-code-opt.on{background:#eff6ff;color:#0b1220;filter:none}
.recon-code-empty,.recon-code-more{margin:0;padding:8px 10px;color:#6b6a66;font-size:12px}
tr.recon-log-row{cursor:pointer}
tr.recon-log-row.on td{background:#eff6ff}
.recon-photo > img{width:96px;height:96px;object-fit:cover;display:block;border-radius:8px}
.mm-bar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:0 0 14px;flex-wrap:wrap}
.mm-tabs{display:flex;gap:8px;margin:0}
.mm-tabs button{height:34px;padding:0 16px;border-radius:8px;border:1px solid var(--line,#e6e1d8);
  background:#fff;color:#2b2b2b;cursor:pointer;filter:none}
.mm-tabs button.on{background:#1d4ed8;border-color:#1d4ed8;color:#fff}
.mm-tabs button:hover{filter:none}
.modal.modal-moment{width:min(720px,calc(100vw - 40px))}
.mm-photos{display:flex;flex-wrap:wrap;gap:8px}
.mm-photo{position:relative;width:64px;height:64px;background:#e7eef7;border-radius:6px}
.mm-photo img{width:64px;height:64px;object-fit:cover;display:block;border-radius:6px}
.mm-photo .wait{display:flex;align-items:center;justify-content:center;width:64px;height:64px;font-size:12px;color:#6b6458}
.mm-task-form{display:flex;flex-direction:column;gap:14px}
.mm-field{display:flex;flex-direction:column;gap:6px;min-width:0}
.mm-field > span,.mm-pick-h > span{font-size:13px;font-weight:650;color:#3f3424}
.mm-field .ds-input{width:100%;max-width:none;height:var(--h-sm)}
.mm-pick-h{display:flex;align-items:center;gap:8px}
.mm-pick-h em{margin-left:auto;font-style:normal;font-size:12px;color:#6b6458}
.mm-picks{display:grid;grid-template-columns:repeat(auto-fill,minmax(148px,1fr));gap:8px;max-height:240px;overflow:auto;padding:2px}
.mm-picks label{display:flex;align-items:center;gap:8px;margin:0;padding:7px 10px;border:1px solid var(--line,#e6e1d8);border-radius:8px;background:#fff;color:#2b2b2b;font-size:13px;cursor:pointer;min-width:0}
.mm-picks label.on{border-color:#2563eb;background:#eff6ff}
.mm-picks input{width:16px;height:16px;min-width:16px;max-width:16px;margin:0;padding:0;flex:none;accent-color:#2563eb}
.mm-picks label span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mm-card-b{padding:14px 16px 6px}
.mm-day{margin:4px 0 8px;font-size:13px;font-weight:650;color:#6b6458}
.mm-task{border:1px solid var(--line,#e6e1d8);border-radius:12px;padding:12px 14px;margin:0 0 10px;background:#fff}
.mm-task-h{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.mm-task-h b{font-size:15px}
.mm-task-h .n{color:#6b6458;font-size:13px}
.mm-task-h .ds-tag{margin-left:auto}
.mm-task > p{margin:8px 0 10px;white-space:pre-wrap;line-height:1.55}
.mm-task-acc{list-style:none;margin:10px 0 0;padding:8px 0 0;border-top:1px solid var(--line,#e6e1d8)}
.mm-task-acc li{display:flex;gap:12px;align-items:baseline;padding:4px 0;font-size:13px}
.mm-task-acc b{min-width:108px;font-weight:650}
.mm-photo button.recon-photo-x{top:2px;right:2px;width:18px;height:18px;line-height:16px;font-size:12px}
