:root{
  --paper:#f3f0e8;
  --paper-soft:#faf8f2;
  --paper-deep:#e9e3d6;
  --ink:#171713;
  --ink-soft:#35342d;
  --ink-mute:#6b6257;
  --ink-faint:#7c7568;
  --gold:#a17b45;
  --gold-strong:#7f5f35;
  --gold-soft:#d9c6a6;
  --line:#d8d2c6;
  --line-soft:#e4ded1;
  --success:#4f6f52;
  --success-soft:#dfe8d8;
  --danger:#9e423d;
  --danger-strong:#7c332f;
  --danger-soft:#f3dfdc;
  --white:#fffdf9;
  --black:#101010;

  --ink-rgb:23 23 19;
  --paper-rgb:243 240 232;
  --paper-deep-rgb:233 227 214;
  --gold-rgb:161 123 69;
  --white-rgb:255 253 249;
  --black-rgb:16 16 16;
  --danger-rgb:158 66 61;
  --success-rgb:79 111 82;

  --font-serif:"Songti SC","STSong","Noto Serif CJK SC","Source Han Serif SC",Georgia,serif;
  --font-serif-display:"Baskerville","Libre Baskerville","Songti SC","STSong","Noto Serif CJK SC",Georgia,serif;
  --font-sans:"PingFang SC","Hiragino Sans GB","Source Han Sans SC","Noto Sans SC","Microsoft YaHei",sans-serif;
  --font-mono:"SFMono-Regular","Menlo","Consolas","Liberation Mono",monospace;

  --fs-display:clamp(4.5rem,5.2vw,5.25rem);
  --fs-h1:clamp(2.15rem,4vw,3.5rem);
  --fs-h2:clamp(1.65rem,2.4vw,2.25rem);
  --fs-mark:clamp(2rem,4vw,4rem);
  --fs-h3:1.25rem;
  --fs-body:1rem;
  --fs-small:.875rem;
  --fs-caption:.875rem;
  --fs-micro:.875rem;

  --lh-display:1.15;
  --lh-heading:1.18;
  --lh-body:1.7;
  --lh-small:1.5;

  --ls-display:.03em;
  --ls-heading:-.015em;
  --ls-overline:.28em;
  --ls-nav:.12em;
  --ls-body:.01em;

  --space-1:4px;
  --space-2:8px;
  --space-3:12px;
  --space-4:16px;
  --space-5:24px;
  --space-6:32px;
  --space-7:48px;
  --space-8:64px;

  --radius-sm:2px;
  --radius-md:4px;
  --radius-lg:10px;

  --shadow-sm:0 1px 2px rgb(var(--ink-rgb) / .05),0 8px 24px rgb(var(--ink-rgb) / .05);
  --shadow-md:0 2px 4px rgb(var(--ink-rgb) / .05),0 18px 48px rgb(var(--ink-rgb) / .09);
  --shadow-lg:0 12px 32px rgb(var(--ink-rgb) / .14),0 40px 96px rgb(var(--ink-rgb) / .16);

  --ease-out:cubic-bezier(.22,.61,.21,1);
  --ease-soft:cubic-bezier(.4,0,.2,1);
  --dur-fast:160ms;
  --dur:260ms;
  --dur-slow:560ms;

  --header-h:80px;
  --header-nav-h:52px;
  --footer-h:56px;
  --content-w:1280px;
  --shell-pad:clamp(24px,4vw,64px);
  --grid-min:270px;
  --ratio-card:1.52;
  --ratio-slab:1.55;
  --z-shell:1;
  --z-viewer:10;
  --z-modal:60;
  --z-toast:70;
  --z-lightbox:80;
}

*,*::before,*::after{box-sizing:border-box}
html{scroll-behavior:smooth}
body{
  min-height:100vh;
  margin:0;
  background:var(--paper);
  color:var(--ink);
  font-family:var(--font-sans);
  font-size:var(--fs-body);
  line-height:var(--lh-body);
  letter-spacing:var(--ls-body);
  -webkit-font-smoothing:antialiased;
  text-rendering:optimizeLegibility;
}
body::before{
  content:"";
  position:fixed;
  inset:0;
  z-index:0;
  pointer-events:none;
  opacity:.2;
  mix-blend-mode:multiply;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.05'/%3E%3C/svg%3E");
}
body>*{position:relative;z-index:var(--z-shell)}
main{min-height:calc(100vh - var(--header-h) - var(--header-nav-h) - var(--footer-h))}
img{display:block;max-width:100%}
a{color:inherit}
a:hover{text-decoration:none}
button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}
:focus-visible{outline:2px solid var(--gold);outline-offset:3px;border-radius:var(--radius-sm)}

h1,h2,h3,h4{
  margin:0;
  font-family:var(--font-serif);
  font-weight:500;
  line-height:var(--lh-heading);
  letter-spacing:var(--ls-heading);
}
p{margin:0}
.eyebrow{
  color:var(--gold);
  font-size:var(--fs-caption);
  font-weight:600;
  line-height:1;
  letter-spacing:var(--ls-overline);
  text-transform:uppercase;
  overflow-wrap:anywhere;
}
.hint{
  color:var(--ink-mute);
  font-size:var(--fs-small);
  line-height:var(--lh-body);
  overflow-wrap:anywhere;
}
.count{color:var(--ink-faint);font-size:var(--fs-small);letter-spacing:.04em}

header.site-header{
  width:100%;
  max-width:calc(var(--content-w) + 2*var(--shell-pad));
  margin-inline:auto;
  padding:0 var(--shell-pad);
  display:flex;
  flex-direction:column;
  align-items:stretch;
  border-bottom:1px solid var(--line);
  background:rgb(var(--white-rgb) / .42);
  backdrop-filter:blur(14px);
}
/* 第一行：品牌 + 右侧系统标识 */
.header-lead{
  display:flex;
  align-items:center;
  gap:var(--space-5);
  min-height:var(--header-h);
}
/* 第二行：全局导航独占一行，右端挂当前用户栏 */
.header-bar{
  display:flex;
  align-items:center;
  justify-content:space-between;
  flex-wrap:wrap;
  gap:var(--space-2) var(--space-4);
  min-height:var(--header-nav-h);
  padding:var(--space-2) 0 var(--space-3);
  border-top:1px solid var(--line-soft);
}
.brand{
  display:flex;
  align-items:baseline;
  gap:var(--space-3);
  flex:none;
  text-decoration:none;
}
.brand span{
  font-family:var(--font-serif);
  font-size:var(--fs-h3);
  letter-spacing:var(--ls-nav);
  color:var(--ink);
}
.brand small{
  font-size:var(--fs-micro);
  letter-spacing:var(--ls-overline);
  color:var(--ink-faint);
}
.static-nav{
  display:flex;
  align-items:center;
  gap:var(--space-2);
  margin-left:auto;
  color:var(--ink-faint);
  font-size:var(--fs-caption);
  letter-spacing:var(--ls-nav);
  white-space:nowrap;
}
.static-nav .dot{color:var(--gold)}
/* 全局导航固定 4 行：左端「管理」标签，右侧 .global-nav-rows 内每行一个 .global-nav-row。
   顶栏 4 行与手机端后台菜单 4 行逐行逐项一致（只调顺序与分行，权限过滤不变）。 */
.global-nav{
  display:none;
  flex:1 1 auto;
  min-width:0;
  align-items:flex-start;
  gap:var(--space-3);
  white-space:nowrap;
}
.global-nav-rows{display:flex;flex-direction:column;gap:1px;min-width:0;flex:1 1 auto}
.global-nav-row{display:flex;align-items:center;flex-wrap:wrap;gap:0;min-width:0}
.global-nav-label{
  color:var(--ink-faint);
  font-size:11px;
  font-weight:600;
  letter-spacing:.18em;
  text-transform:uppercase;
  padding:0 var(--space-3);
  border-right:1px solid var(--line);
  line-height:1;
  align-self:stretch;
  display:flex;
  align-items:center;
}
.global-nav a{
  min-height:32px;
  display:inline-flex;
  align-items:center;
  padding:0 var(--space-3);
  color:var(--ink-faint);
  font-size:12px;
  letter-spacing:.04em;
  text-decoration:none;
  border-radius:var(--radius-sm);
  transition:color var(--dur-fast) var(--ease-soft),background var(--dur-fast) var(--ease-soft);
}
.global-nav a:hover{color:var(--ink);background:transparent}
.global-nav a.active{color:var(--gold-strong);background:transparent}
footer.site-footer{
  width:100%;
  max-width:calc(var(--content-w) + 2*var(--shell-pad));
  height:var(--footer-h);
  margin-inline:auto;
  padding:0 var(--shell-pad);
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:var(--space-4);
  border-top:1px solid var(--line);
  color:var(--ink-soft);
  font-size:max(14px,var(--fs-small));
  letter-spacing:var(--ls-nav);
}
.footer-mark{display:inline-flex;align-items:center;gap:var(--space-3);font-family:var(--font-serif);letter-spacing:var(--ls-overline);color:var(--ink-soft)}
.footer-rule{display:inline-block;width:24px;height:1px;background:var(--gold)}

/* 操作条上的动作按钮默认用 hidden 属性控制出现/消失；
   button 的基础样式设了 display:inline-flex，会盖掉 UA 的 [hidden]，这里显式兜底。 */
[hidden]{display:none!important}
button{
  min-height:44px;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  line-height:1;
  padding:0 var(--space-6);
  border:1px solid transparent;
  border-radius:var(--radius-md);
  background:var(--ink);
  color:var(--paper);
  font-size:var(--fs-small);
  letter-spacing:.06em;
  cursor:pointer;
  transition:transform var(--dur-fast) var(--ease-soft),background var(--dur-fast) var(--ease-soft),color var(--dur-fast) var(--ease-soft),box-shadow var(--dur-fast) var(--ease-soft),opacity var(--dur-fast) var(--ease-soft);
}
button:hover:not(:disabled){
  background:var(--ink-soft);
  transform:translateY(-1px);
  box-shadow:var(--shadow-sm);
}
button:active:not(:disabled){transform:translateY(0) scale(.98);box-shadow:none}
button:disabled{opacity:.42;cursor:not-allowed}
button.small{
  min-height:40px;
  padding:0 var(--space-4);
  font-size:var(--fs-caption);
}
button.secondary{background:var(--paper-deep);color:var(--ink);border-color:var(--line)}
button.secondary:hover:not(:disabled){background:var(--line);color:var(--ink)}
button.danger{background:var(--danger)}
button.danger:hover:not(:disabled){background:var(--danger-strong)}
button.view-toggle{background:var(--paper-deep);color:var(--ink)}
button.view-toggle.active{background:var(--ink);color:var(--paper)}

input,select,textarea{
  width:100%;
  min-height:44px;
  border:1px solid var(--line);
  border-radius:var(--radius-md);
  background:var(--paper-soft);
  color:var(--ink);
  font-size:var(--fs-body);
  transition:border-color var(--dur-fast) var(--ease-soft),box-shadow var(--dur-fast) var(--ease-soft),background var(--dur-fast) var(--ease-soft);
}
input:-webkit-autofill,
input:-webkit-autofill:hover,
input:-webkit-autofill:focus{
  -webkit-box-shadow:0 0 0 1000px var(--paper) inset;
  -webkit-text-fill-color:var(--ink);
  transition:background-color 9999s ease-in-out 0s;
}
input{padding:0 var(--space-3)}
select{padding:0 var(--space-3)}
textarea{padding:var(--space-3);min-height:120px;resize:vertical}
input::placeholder,textarea::placeholder{color:var(--ink-faint)}
input:focus,select:focus,textarea:focus{
  outline:none;
  border-color:var(--gold);
  background:var(--white);
  box-shadow:0 0 0 3px rgb(var(--gold-rgb) / .14);
}
input[type=checkbox]{width:18px;min-height:18px;accent-color:var(--gold)}
.customer-input,.inline-select,.transfer-bar select{min-height:42px}
.field-error{border-color:var(--danger)!important;background:var(--danger-soft)!important}

.hero{
  width:100%;
  max-width:calc(var(--content-w) + 2*var(--shell-pad));
  min-height:calc(68vh - var(--header-h) - var(--header-nav-h));
  margin-inline:auto;
  padding:var(--space-8) var(--shell-pad) var(--space-7);
  display:grid;
  grid-template-columns:minmax(0,.86fr) minmax(0,1.24fr);
  align-items:stretch;
  gap:clamp(var(--space-5),3.4vw,var(--space-7));
  border-bottom:1px solid var(--line);
  overflow:visible;
}
.hero-copy{max-width:560px;align-self:stretch;display:flex;flex-direction:column;padding:0 var(--space-7) 0 0;container-type:inline-size}
.hero-kicker{
  display:flex;
  align-items:center;
  flex-wrap:wrap;
  gap:var(--space-4);
  padding-bottom:var(--space-4);
  border-bottom:1px solid var(--line);
}
.hero-no{
  margin-left:auto;
  color:var(--gold-strong);
  font-family:var(--font-serif-display);
  font-size:var(--fs-micro);
  letter-spacing:.22em;
  line-height:1;
}
.hero h1{
  margin:var(--space-5) 0 var(--space-4);
  font-family:var(--font-serif-display);
  font-weight:300;
  font-size:clamp(3.4rem,4.9vw,5.25rem);
  line-height:var(--lh-display);
  letter-spacing:var(--ls-display);
  word-break:keep-all;
  overflow-wrap:normal;
  line-break:strict;
  text-wrap:balance;
}
/* 标题按自身栏宽收放：两栏并排时不会顶进右侧图片，也不会溢出页面 */
.hero h1{font-size:clamp(2.6rem,min(4.9vw,11.6cqi),5.25rem)}
.hero h1 .h1-line2{letter-spacing:.16em;margin-right:-.16em}
.hero-lede{
  max-width:560px;
  color:var(--ink-mute);
  font-size:var(--fs-h3);
  line-height:var(--lh-body);
}
.hero-meta{
  display:flex;
  align-items:center;
  gap:var(--space-3);
  margin-top:auto;
  padding-top:var(--space-4);
  border-top:1px solid var(--line);
  color:var(--ink-mute);
  font-size:var(--fs-caption);
  letter-spacing:var(--ls-nav);
}
.hero-meta i{color:var(--gold);font-style:normal}
.hero-media{
  position:relative;
  min-height:clamp(460px,64vh,700px);
  align-self:stretch;
  overflow:hidden;
  background-color:var(--paper-deep);
  background-position:center;
  background-size:cover;
  background-repeat:no-repeat;
  overflow:clip;
  filter:contrast(1.11) saturate(1.05) brightness(.97);
  box-shadow:var(--shadow-sm),0 0 0 1px var(--line);
  isolation:isolate;
}
.hero-media::before{
  content:"";
  position:absolute;
  inset:0;
  z-index:0;
  background-image:inherit;
  background-position:center;
  background-size:cover;
  background-repeat:no-repeat;
  transform:scale(1.26,1.3) translateY(-6%);
  transform-origin:center;
}
.hero-media::after{
  content:"";
  position:absolute;
  inset:0;
  z-index:2;
  pointer-events:none;
  background:
    linear-gradient(180deg,rgb(var(--paper-rgb) / .95),rgb(var(--paper-rgb) / 0) 18%),
    linear-gradient(0deg,rgb(var(--paper-deep-rgb) / .9),rgb(var(--paper-deep-rgb) / .2) 14%,rgb(var(--paper-deep-rgb) / 0) 30%),
    linear-gradient(90deg,rgb(var(--paper-rgb) / .16),transparent 20%),
    linear-gradient(180deg,rgb(var(--black-rgb) / 0) 46%,rgb(var(--black-rgb) / .12));
  box-shadow:
    inset 0 0 0 1px rgb(var(--white-rgb) / .18),
    inset 0 14px 40px rgb(var(--black-rgb) / .1);
}
.section{width:100%;max-width:calc(var(--content-w) + 2*var(--shell-pad));margin-inline:auto;padding:0 var(--shell-pad) var(--space-8)}
.section-shell{padding-top:var(--space-7)}
.section-head,.detail-head{
  display:flex;
  align-items:flex-end;
  justify-content:space-between;
  gap:var(--space-4);
  margin-bottom:var(--space-5);
  padding-bottom:var(--space-4);
  border-bottom:1px solid var(--line);
}
.section-head h2,.detail-head h1{font-size:var(--fs-h2)}
.section-head .eyebrow,.detail-head .eyebrow{margin-bottom:var(--space-2)}
.section-shell .card-title::before{
  content:"— ";
  color:var(--gold);
  font-weight:400;
}
.grid{
  display:grid;
  grid-template-columns:repeat(auto-fill,minmax(var(--grid-min),1fr));
  gap:var(--space-5);
}
.card{
  position:relative;
  display:block;
  color:inherit;
  text-decoration:none;
  background:var(--white);
  border:1px solid var(--line);
  border-radius:var(--radius-md);
  box-shadow:var(--shadow-sm);
  transition:transform var(--dur) var(--ease-out),border-color var(--dur) var(--ease-out),box-shadow var(--dur) var(--ease-out);
}
.card:hover{
  transform:translateY(-3px) scale(1.012);
  border-color:var(--gold-soft);
  box-shadow:var(--shadow-md);
}
.image{
  position:relative;
  aspect-ratio:var(--ratio-card);
  background-color:var(--paper-deep);
  background-position:center;
  background-size:cover;
  background-repeat:no-repeat;
  border-bottom:1px solid var(--line-soft);
}
.card-media{overflow:hidden;border-radius:var(--radius-md) var(--radius-md) 0 0}
.card-media::after{
  content:"";
  position:absolute;
  inset:0;
  background:linear-gradient(180deg,transparent 62%,rgb(var(--ink-rgb) / .22));
  pointer-events:none;
}
.card-body{padding:var(--space-4) var(--space-5) var(--space-5)}
.card-title{font-size:var(--fs-h3);margin-bottom:var(--space-2)}
.meta{
  display:flex;
  justify-content:space-between;
  align-items:baseline;
  gap:var(--space-3);
  color:var(--ink-faint);
  font-size:var(--fs-caption);
  line-height:var(--lh-small);
}
.meta-arrow{color:var(--gold);white-space:nowrap}
.badge{
  position:absolute;
  top:var(--space-3);
  left:var(--space-3);
  padding:var(--space-1) var(--space-2);
  background:rgb(var(--black-rgb) / .86);
  color:var(--paper);
  font-size:var(--fs-micro);
  letter-spacing:.06em;
  border-radius:var(--radius-sm);
}
.detail{width:100%;max-width:calc(var(--content-w) + 2*var(--shell-pad));margin-inline:auto;padding:var(--space-7) var(--shell-pad) var(--space-8)}
.back{
  display:inline-flex;
  align-items:center;
  min-height:40px;
  margin-bottom:var(--space-6);
  color:var(--ink-mute);
  font-size:var(--fs-small);
  text-decoration:none;
}
.back:hover{color:var(--gold)}
.facts{
  display:flex;
  gap:var(--space-6);
  margin-top:var(--space-3);
  color:var(--ink-mute);
  font-size:var(--fs-small);
}
.empty,.loading,.error{padding:var(--space-8) var(--shell-pad);color:var(--ink-faint)}
.loading{display:flex;align-items:center;gap:var(--space-3);font-size:var(--fs-small);letter-spacing:var(--ls-nav)}
.loading::before{
  content:"";
  width:16px;
  height:16px;
  border:1px solid var(--line);
  border-top-color:var(--gold);
  border-radius:50%;
  animation:spin 900ms linear infinite;
}
.viewer{
  position:fixed;
  inset:0;
  z-index:var(--z-viewer);
  display:flex;
  flex-direction:column;
  background:var(--black);
  color:var(--paper);
}
.viewer-bar{
  min-height:var(--header-h);
  display:flex;
  align-items:center;
  justify-content:space-between;
  flex-wrap:wrap;
  gap:var(--space-2) var(--space-4);
  padding:0 var(--space-5);
  border-bottom:1px solid rgb(var(--white-rgb) / .16);
  font-size:var(--fs-small);
  letter-spacing:var(--ls-nav);
  overflow-wrap:anywhere;
}
.viewer a{color:var(--paper);text-decoration:none}
.viewer a:hover{color:var(--gold-soft)}
.viewer-image{
  flex:1;
  min-height:0;
  display:flex;
  align-items:center;
  justify-content:center;
  padding:var(--space-4) 6vw var(--space-6);
}
.viewer-image img{max-width:100%;max-height:100%;object-fit:contain}
.viewer-nav{
  position:fixed;
  top:50%;
  transform:translateY(-50%);
  width:48px;
  height:48px;
  display:flex;
  align-items:center;
  justify-content:center;
  border:1px solid rgb(var(--white-rgb) / .2);
  border-radius:50%;
  color:var(--paper);
  font-size:var(--fs-h2);
  text-decoration:none;
  background:rgb(var(--black-rgb) / .2);
  backdrop-filter:blur(8px);
}
.viewer-nav.prev{left:var(--space-4)}
.viewer-nav.next{right:var(--space-4)}

.admin{
  width:100%;
  max-width:calc(var(--content-w) + 2*var(--shell-pad));
  margin:0 auto;
  padding:var(--space-7) var(--shell-pad) var(--space-8);
}
.admin-title{
  display:flex;
  align-items:flex-end;
  justify-content:space-between;
  gap:var(--space-4);
  row-gap:var(--space-3);
  flex-wrap:wrap;
  margin-bottom:var(--space-6);
  padding-bottom:var(--space-4);
  border-bottom:1px solid var(--line);
}
.admin-title>div{min-width:0}
.admin-title h1{margin:var(--space-2) 0 var(--space-2);font-size:var(--fs-h1);overflow-wrap:anywhere}
.admin-title .count{align-self:center}
.panel{
  margin-bottom:var(--space-5);
  padding:var(--space-5);
  background:rgb(var(--white-rgb) / .76);
  border:1px solid var(--line);
  border-radius:var(--radius-md);
  box-shadow:var(--shadow-sm);
}
.panel h2{margin-bottom:var(--space-2);font-size:var(--fs-h2)}
.panel-head{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);flex-wrap:wrap}
.panel-head h2{margin-bottom:0}
.panel .hint{margin-bottom:var(--space-3)}
.admin-menu{
  display:flex;
  gap:var(--space-2);
  overflow-x:auto;
  margin-bottom:var(--space-6);
  padding-bottom:var(--space-3);
  border-bottom:1px solid var(--line);
}
.admin-menu a{
  min-height:40px;
  display:inline-flex;
  align-items:center;
  padding:0 var(--space-4);
  border-radius:var(--radius-sm);
  color:var(--ink-mute);
  font-size:var(--fs-small);
  white-space:nowrap;
  text-decoration:none;
  transition:background var(--dur-fast) var(--ease-soft),color var(--dur-fast) var(--ease-soft);
}
.admin-menu a:hover{color:var(--ink);background:var(--paper-deep)}
.admin-menu a.active{background:var(--ink);color:var(--paper)}
.filters,.form-grid{
  display:grid;
  grid-template-columns:2fr 1fr auto;
  gap:var(--space-3);
}
.filters>*,.form-grid>*{min-width:0}
.classify-row{
  display:grid;
  grid-template-columns:1fr 1fr auto;
  gap:var(--space-3);
  align-items:end;
  margin-top:var(--space-4);
}
.classify-row label{display:grid;gap:var(--space-2);color:var(--ink-mute);font-size:var(--fs-caption)}
.import-row{
  display:grid;
  grid-template-columns:1fr auto;
  gap:var(--space-3);
  margin-top:var(--space-4);
}
.stats{
  display:grid;
  grid-template-columns:repeat(auto-fit,minmax(160px,1fr));
  gap:var(--space-3);
  margin-bottom:var(--space-5);
}
.stat{
  min-width:0;
  padding:var(--space-4) var(--space-5);
  background:var(--paper-deep);
  border:1px solid var(--line-soft);
  border-radius:var(--radius-md);
}
.stat strong{
  display:block;
  font-family:var(--font-serif);
  font-size:var(--fs-h1);
  font-weight:500;
  line-height:1;
  font-variant-numeric:tabular-nums;
  /* 财务数字等长 token 不在数字/千分位中间断行（.stat 内均为数字型汇总值） */
  overflow-wrap:normal;
  word-break:keep-all;
  white-space:nowrap;
}
.stat span{display:block;margin-top:var(--space-2);color:var(--ink-mute);font-size:var(--fs-caption)}
.source-list{display:grid;gap:var(--space-3)}
.source-row{
  display:grid;
  grid-template-columns:minmax(0,1fr) auto;
  gap:var(--space-4);
  align-items:center;
  padding:var(--space-3) 0;
  border-top:1px solid var(--line);
  color:inherit;
  text-decoration:none;
}
.source-row:first-child{border-top:0}
.source-row:hover h3{color:var(--gold)}
.source-row-link{
  display:grid;
  grid-template-columns:112px minmax(0,1fr);
  gap:var(--space-4);
  align-items:center;
  min-width:0;
  color:inherit;
  text-decoration:none;
}
.source-cover-btn,.source-cover-edit-btn{
  padding:.45rem .8rem;
  border:1px solid var(--line);
  border-radius:var(--radius-sm);
  background:var(--paper-soft);
  color:var(--ink);
  font-size:var(--fs-small);
  cursor:pointer;
}
.source-cover-btn:hover,.source-cover-edit-btn:hover{border-color:var(--gold);background:rgb(var(--gold-rgb) / .08)}
.source-cover-btn:disabled,.source-cover-edit-btn:disabled{opacity:.55;cursor:wait}
/* 【来源封面管理】「编辑封面」入口 + 只读计数徽标，与两个按钮同组、同源刷新 */
.source-cover-actions{display:flex;align-items:center;gap:var(--space-2);flex-wrap:wrap;min-width:0}
.source-cover-count{display:inline-flex;align-items:center;padding:.3rem .6rem;border-radius:999px;background:var(--paper-deep);color:var(--ink-soft);font-size:var(--fs-caption);font-variant-numeric:tabular-nums;white-space:nowrap}
.source-cover-input{display:none}
.source-actions{display:flex;align-items:center;justify-content:flex-end;gap:var(--space-2);flex-wrap:wrap}
.source-intro-btn{
  padding:.45rem .8rem;
  border:1px solid var(--line);
  border-radius:var(--radius-sm);
  background:var(--paper-soft);
  color:var(--ink);
  font-size:var(--fs-small);
  cursor:pointer;
}
.source-intro-btn:hover{border-color:var(--gold);background:rgb(var(--gold-rgb) / .08)}
.source-intro{margin-top:var(--space-2);color:var(--ink-soft);font-size:var(--fs-small);line-height:var(--lh-small);white-space:pre-wrap;overflow-wrap:anywhere}
.source-intro-empty{color:var(--ink-mute);opacity:.75}
.quote-next-no{color:var(--ink-mute);font-size:var(--fs-caption);font-variant-numeric:tabular-nums;white-space:nowrap}
.source-cover-size{margin-top:4px;color:var(--ink-mute);font-size:var(--fs-caption);line-height:1.35;overflow-wrap:anywhere}
.intro-textarea{width:100%;min-height:150px;resize:vertical;padding:var(--space-3);border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--paper-soft);color:var(--ink);font:inherit;font-size:var(--fs-body);line-height:var(--lh-body)}
.source-thumb{
  width:112px;
  aspect-ratio:1.5;
  border-radius:var(--radius-sm);
  background-color:var(--paper-deep);
  background-position:center;
  background-size:cover;
}
.source-row h3{margin-bottom:var(--space-2);font-size:var(--fs-h3)}
/* 「已接入来源」批量删除：owner 勾选态 + 工具栏 + 未删除原因明细 */
.source-toolbar{margin:0 0 var(--space-4)}
.source-row.source-row-checkable{grid-template-columns:auto minmax(0,1fr) auto}
.source-check{width:18px;min-height:18px;margin:0;cursor:pointer;accent-color:var(--gold);justify-self:center}
.source-row.is-selected,
.source-row.is-selected:hover{background:rgb(var(--gold-rgb) / .06);box-shadow:inset 2px 0 0 var(--gold)}
.source-row.is-selected h3{color:var(--gold-strong)}
.source-failed-list{margin-top:var(--space-3);padding-left:1.1rem;display:grid;gap:var(--space-2);font-size:var(--fs-small);line-height:var(--lh-small)}
.source-failed-list li span{display:block;color:var(--ink-mute)}
.source-meta{color:var(--ink-mute);font-size:var(--fs-small);line-height:var(--lh-small);overflow-wrap:anywhere}
.sync-ok{color:var(--success)}
.sync-fail{color:var(--danger)}
.result{
  margin-top:var(--space-3);
  padding:var(--space-3);
  background:var(--paper-soft);
  border-left:2px solid var(--gold);
  font-size:var(--fs-small);
  line-height:var(--lh-body);
  overflow-wrap:anywhere;
}
.mapping-table{
  width:100%;
  border-collapse:collapse;
  font-size:var(--fs-small);
}
.mapping-table th,.mapping-table td{
  padding:var(--space-3) var(--space-2);
  border-bottom:1px solid var(--line);
  text-align:left;
  vertical-align:middle;
}
.mapping-table th{
  color:var(--ink-faint);
  font-size:var(--fs-caption);
  font-weight:600;
  letter-spacing:.04em;
  text-align:left;
  background:var(--paper-soft);
  border-bottom:2px solid var(--line);
}
.mapping-table td{color:var(--ink-soft)}
.mapping-table tbody tr{transition:background var(--dur-fast) var(--ease-soft),box-shadow var(--dur-fast) var(--ease-soft)}
.mapping-table tbody tr:hover{background:rgb(var(--gold-rgb) / .05)}
.mapping-table td:first-child,
.mapping-table th:first-child{padding-left:var(--space-3)}
.mapping-table td:last-child,
.mapping-table th:last-child{padding-right:var(--space-3)}
.mapping-table img{display:block;border:1px solid var(--line-soft)}
.mapping-table td.num,
.mapping-table th.num{text-align:right;font-variant-numeric:tabular-nums}
.mapping-table tbody tr{transition:background var(--dur-fast) var(--ease-soft)}
.mapping-table tbody tr:hover{background:rgb(var(--gold-rgb) / .06)}
.mapping-table tbody tr.row-selected,.mapping-table tbody tr.selected-card{background:rgb(var(--gold-rgb) / .1)}
.mapping-table img{width:76px;height:48px;object-fit:cover;border-radius:var(--radius-sm)}
.mapping-table select{min-height:40px;padding:0 var(--space-2)}
.mapping-table select:disabled{opacity:.5;cursor:not-allowed;background:var(--paper-deep)}
.mapping-table tr.done-green,.mapping-table tr.done-green:hover{background:var(--success-soft)}
.mapping-table tr.done-green td{background:transparent}
.raw{
  max-height:280px;
  overflow:auto;
  padding:var(--space-4);
  background:var(--ink);
  color:var(--paper);
  font-family:var(--font-mono);
  font-size:var(--fs-micro);
  line-height:1.55;
  white-space:pre-wrap;
  word-break:break-all;
  border-radius:var(--radius-md);
}
.actions{display:flex;flex-wrap:wrap;gap:var(--space-4)}
.actions a{color:var(--gold)}
.directory-toolbar{
  display:flex;
  justify-content:space-between;
  align-items:center;
  flex-wrap:wrap;
  gap:var(--space-4);
  margin:var(--space-5) 0;
}
.directory-search{display:flex;flex:1 1 260px;min-width:0;max-width:680px;gap:var(--space-2)}
.directory-search input{flex:1 1 auto;min-width:0}
.directory-search button{flex:0 0 auto;min-width:72px;white-space:nowrap}
.view-toggle{display:flex;flex-wrap:wrap;gap:var(--space-2)}
.view-toggle button{white-space:nowrap}
.directory-pager{
  display:flex;
  flex-wrap:wrap;
  justify-content:center;
  align-items:center;
  gap:var(--space-4);
  margin:var(--space-5) 0;
  color:var(--ink-faint);
  font-size:var(--fs-small);
}
.directory-pager .small.active{background:var(--gold);color:var(--paper)}
.customer-list-wrap{padding:var(--space-2) var(--space-4)}
.customer-list tbody tr{cursor:pointer}
.crm-grid{
  display:grid;
  grid-template-columns:repeat(auto-fill,minmax(min(270px,100%),1fr));
  gap:var(--space-4);
  align-items:stretch;
}
.crm-grid-compact{grid-template-columns:repeat(auto-fill,minmax(min(240px,100%),1fr));align-items:stretch}
.crm-card-wrap{position:relative;height:100%}
.crm-card-wrap.is-selected .crm-card{border-color:var(--gold);box-shadow:var(--shadow-md)}
.crm-pick{
  position:absolute;
  top:var(--space-3);
  right:var(--space-3);
  z-index:2;
  display:flex;
  align-items:center;
  justify-content:center;
  padding:2px 6px;
  background:var(--paper-soft);
  border:1px solid var(--line);
  border-radius:var(--radius-sm);
  cursor:pointer;
}
/* 客户列表首列：勾选框（owner）与客户名同一格 —— 不额外占用空窄列。 */
.cust-name{display:flex;align-items:flex-start;gap:var(--space-2)}
.cust-name .cust-pick{flex:0 0 auto;width:16px;height:16px;margin:3px 0 0;cursor:pointer;accent-color:var(--gold)}
.cust-name-body{min-width:0}
/* 表头「客户」列：全选复选框与列名同格，位置对齐行内勾选框；三态由 updateCustomerSelectionUI 维护。 */
.cust-head-inner{display:flex;align-items:center;gap:var(--space-2)}
.cust-head-inner .cust-pick-all{flex:0 0 auto;width:16px;height:16px;margin:0;cursor:pointer;accent-color:var(--gold)}
.fail-list{margin:var(--space-3) 0 0;padding-left:var(--space-5);color:var(--ink-soft);font-size:var(--fs-small);line-height:var(--lh-small)}
.fail-list li{margin-bottom:var(--space-2)}
.crm-card{height:100%;margin:0;display:flex;flex-direction:column;gap:var(--space-2)}
.crm-card-clickable{cursor:pointer;text-decoration:none;color:inherit;transition:transform var(--dur) var(--ease-out),border-color var(--dur) var(--ease-out),box-shadow var(--dur) var(--ease-out)}
.crm-card-clickable:hover{transform:translateY(-3px);border-color:var(--gold-soft);box-shadow:var(--shadow-md)}
.crm-facts{display:flex;flex-direction:column;gap:var(--space-1);margin:var(--space-1) 0}
.crm-fact{display:grid;grid-template-columns:minmax(84px,auto) minmax(0,1fr);gap:var(--space-2);min-width:0}
.crm-fact-label{color:var(--ink-faint);font-size:var(--fs-caption);white-space:nowrap}
.crm-fact-value{color:var(--ink-soft);font-size:var(--fs-small);overflow-wrap:anywhere}
/* 业务统计网格（客户明细 6 项 / 客户卡 3 项）：
   每格 = 上方数值（大、等宽数字）+ 下方标签（小、次要色），全站统一左对齐。
   auto-fit + minmax(120px,1fr)：宽度不够自动换行，格子不会被压扁。
   数值字号用容器查询单位跟随格子宽度伸缩，宽窄都不会溢出或截断数字。 */
.crm-counts{
  display:grid;
  grid-template-columns:repeat(auto-fit,minmax(120px,1fr));
  gap:var(--space-3);
  margin:var(--space-4) 0;
  min-width:0;
}
.crm-counts>span{
  display:flex;
  flex-direction:column;
  gap:var(--space-1);
  min-width:0;
  padding:var(--space-3);
  background:var(--paper-deep);
  border:1px solid var(--line-soft);
  border-radius:var(--radius-md);
}
.crm-counts span{
  color:var(--ink-mute);
  font-size:var(--fs-caption);
  line-height:1.35;
  overflow-wrap:anywhere;
}
.crm-counts strong{
  display:block;
  min-width:0;
  color:var(--ink);
  font-family:var(--font-serif);
  font-size:clamp(1.05rem,1.5vw,1.5rem);
  font-weight:500;
  line-height:1.15;
  letter-spacing:-.01em;
  font-variant-numeric:tabular-nums;
  overflow-wrap:anywhere;
}
/* 客户列表平铺卡：3 项紧凑并排，不占背景块 */
.crm-card .crm-counts{grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--space-2);padding-top:var(--space-3);border-top:1px solid var(--line)}
.crm-card .crm-counts>span{padding:0;background:none;border:0;border-radius:0}
.crm-card .crm-counts.crm-card-stats{grid-template-columns:repeat(4,minmax(0,1fr))}
.crm-card .crm-counts.crm-card-stats>span{padding:var(--space-2)}
@supports(container-type:inline-size){
  .crm-counts>span{container-type:inline-size}
  .crm-counts strong{font-size:clamp(1rem,14cqi,1.5rem)}
  /* 客户列表平铺卡：每格更窄，数值仍保持醒目的字号 */
  .crm-card .crm-counts strong{font-size:clamp(1.15rem,24cqi,1.6rem)}
  .crm-card .crm-counts.crm-card-stats strong{font-size:clamp(.95rem,18cqi,1.3rem)}
}
.crm-card p{color:var(--ink-mute);font-size:var(--fs-small);line-height:var(--lh-small);overflow-wrap:anywhere}
.crm-card-actions{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:var(--space-4);
  margin-top:var(--space-5);
}
/* 客户明细：资料 + 业务统计 两栏等高（窄屏自动单列） */
.customer-profile-grid{display:grid;grid-template-columns:minmax(0,1.5fr) minmax(380px,1fr);gap:var(--space-4);align-items:stretch}
.customer-profile-grid>.panel{display:flex;flex-direction:column;min-width:0;margin-bottom:0}
.customer-profile-grid>.panel>.crm-counts{margin-bottom:var(--space-2)}
.profile-lines p{
  display:grid;
  grid-template-columns:120px minmax(0,1fr);
  gap:var(--space-3);
  padding:var(--space-3) 0;
  margin:0;
  border-bottom:1px solid var(--line);
  overflow-wrap:anywhere;
}
.profile-lines span{color:var(--ink-mute);font-size:var(--fs-small)}
.detail-empty{padding:var(--space-5) 0}
.account-bar{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:var(--space-4);
  margin-bottom:var(--space-4);
  padding:var(--space-3) var(--space-4);
  background:var(--white);
  border:1px solid var(--line);
  border-radius:var(--radius-md);
  font-size:var(--fs-small);
}
.account-bar.notice{background:rgb(var(--gold-rgb) / .08);border-color:var(--gold-soft)}
.account-bar a{color:var(--gold);font-weight:600;text-decoration:none}
.view-link{color:var(--gold);font-size:var(--fs-small);font-weight:600;white-space:nowrap;text-decoration:none}
.view-link:hover{text-decoration:underline}
.row-actions{display:flex;align-items:center;gap:var(--space-3);flex-wrap:nowrap}
.crm-card-foot{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3)}
.transfer-bar{display:flex;gap:var(--space-3);align-items:center;flex-wrap:wrap}
.transfer-bar strong{font-size:var(--fs-body)}

.audit-badge{
  display:inline-flex;
  align-items:center;
  min-height:24px;
  padding:0 var(--space-2);
  border-radius:999px;
  background:var(--paper-deep);
  color:var(--ink-mute);
  font-size:var(--fs-micro);
  letter-spacing:.02em;
}
.audit-badge.approved{background:var(--success-soft);color:var(--success)}
.badge-unsold{background:var(--paper-deep);color:var(--ink-mute)}
.badge-pending{background:rgb(var(--gold-rgb) / .16);color:var(--gold-strong)}
.badge-sold{background:var(--success-soft);color:var(--success)}
.badge-returned{background:var(--danger-soft);color:var(--danger-strong)}
.badge-draft{background:rgb(var(--ink-rgb) / .1);color:var(--ink);border:1px solid var(--line)}
/* 用户与权限：角色徽章 / 状态 / 上传链接开关 */
.user-card-head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-3)}
.user-role-badge{display:inline-flex;align-items:center;min-height:24px;padding:0 var(--space-2);border-radius:999px;font-size:var(--fs-micro);letter-spacing:.02em;white-space:nowrap}
.role-owner{background:rgb(var(--gold-rgb) / .16);color:var(--gold-strong)}
.role-sales{background:var(--paper-deep);color:var(--ink-mute)}
.user-status{display:inline-flex;align-items:center;min-height:24px;width:fit-content;padding:0 var(--space-2);border-radius:999px;font-size:var(--fs-micro);letter-spacing:.02em}
.status-on{background:var(--success-soft);color:var(--success)}
.status-off{background:var(--danger-soft);color:var(--danger-strong)}
.user-import-row,.switch-field{display:flex;align-items:center;justify-content:space-between;gap:var(--space-4);min-width:0}
.user-import-row{margin-top:var(--space-2);padding-top:var(--space-3);border-top:1px solid var(--line)}
.switch-field{grid-column:1/-1;padding:var(--space-3);border:1px dashed var(--line);border-radius:var(--radius-md)}
.switch-copy{display:flex;flex-direction:column;gap:2px;min-width:0}
.switch-copy strong{color:var(--ink);font-size:var(--fs-small);font-weight:600}
.switch-copy small{color:var(--ink-mute);font-size:var(--fs-caption);line-height:var(--lh-small)}
.switch{position:relative;display:inline-flex;width:52px;height:30px;flex:0 0 auto;cursor:pointer}
.switch-input{position:absolute;inset:0;width:100%;height:100%;margin:0;opacity:0;cursor:pointer;z-index:2}
.switch-track{position:absolute;inset:0;border-radius:999px;background:var(--paper-deep);border:1px solid var(--line);transition:background var(--dur-fast) var(--ease-soft),border-color var(--dur-fast) var(--ease-soft)}
.switch-track::after{content:'';position:absolute;top:3px;left:3px;width:22px;height:22px;border-radius:50%;background:var(--white);box-shadow:0 1px 3px rgb(var(--ink-rgb) / .2);transition:transform var(--dur-fast) var(--ease-soft)}
.switch-input:checked + .switch-track{background:var(--gold);border-color:var(--gold)}
.switch-input:checked + .switch-track::after{transform:translateX(22px)}
.switch-input:disabled{cursor:not-allowed}
.switch-input:disabled + .switch-track{opacity:.62;background:var(--gold);border-color:var(--gold)}
/* 【大板库存管理】权限开关（与「上传链接权限」同一套外观，但用独立类名 .switch-box：
   同卡片里两个开关若都叫 .switch-input，会让既有 UI 断言的选择器出现歧义）。 */
.switch-box{position:absolute;inset:0;width:100%;height:100%;margin:0;opacity:0;cursor:pointer;z-index:2}
.switch-box:checked + .switch-track{background:var(--gold);border-color:var(--gold)}
.switch-box:checked + .switch-track::after{transform:translateX(22px)}
.switch-box:disabled{cursor:not-allowed}
.switch-box:disabled + .switch-track{opacity:.62;background:var(--gold);border-color:var(--gold)}
.perm-saving{opacity:.68}
.admin-userbar{
  display:flex;
  align-items:center;
  justify-content:flex-end;
  gap:var(--space-3);
  flex-wrap:wrap;
  margin-bottom:var(--space-4);
  padding-bottom:var(--space-3);
  border-bottom:1px solid var(--line);
}
.admin-user-name{color:var(--ink-soft);font-size:var(--fs-small);font-weight:600}
.admin-user-act{
  min-height:40px;
  display:inline-flex;
  align-items:center;
  padding:0;
  border:0;
  background:none;
  color:var(--gold);
  font-size:var(--fs-small);
  text-decoration:none;
  cursor:pointer;
}
.admin-user-act:hover{text-decoration:underline}
.admin-title-userbar{
  display:flex;
  align-items:center;
  gap:var(--space-3);
  margin-left:auto;
  font-size:var(--fs-small);
  white-space:nowrap;
}
/* 顶部第二行右端的用户栏：各页面统一由 injectUserbar 填充 */
.header-userbar{
  display:flex;
  align-items:center;
  flex:none;
  margin-left:auto;
}
.header-userbar .admin-title-userbar{margin-left:0}
.header-userbar .admin-user-act{min-height:32px}

.slab-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(200px,100%),1fr));gap:var(--space-4)}
/* 架号 chip 条：普通面板，不 sticky、不遮挡卡片。左＝架号 chips，右＝全选/已选计数。 */
.shelf-chip-bar{display:flex;align-items:center;gap:var(--space-2) var(--space-3);flex-wrap:wrap;padding:var(--space-3) var(--space-4);margin-bottom:var(--space-4)}
.shelf-chip-label{color:var(--ink-mute);font-size:var(--fs-caption);letter-spacing:var(--ls-nav)}
.shelf-chip-row{display:flex;flex-wrap:wrap;gap:var(--space-2);min-width:0}
.shelf-chip-actions{display:flex;align-items:center;gap:var(--space-3);flex-wrap:wrap;margin-left:auto;white-space:nowrap}
.shelf-chip{
  display:inline-flex;align-items:center;gap:var(--space-2);
  min-height:32px;padding:var(--space-1) var(--space-3);
  background:var(--paper-deep);border:1px solid var(--line);border-radius:999px;
  color:var(--ink);font-size:var(--fs-small);font-weight:600;line-height:1.4;
  font-variant-numeric:tabular-nums;cursor:pointer;
  transition:background var(--dur-fast) var(--ease-soft),border-color var(--dur-fast) var(--ease-soft),color var(--dur-fast) var(--ease-soft);
}
.shelf-chip:hover:not(:disabled){background:var(--paper);border-color:var(--gold-soft);transform:none;box-shadow:none}
.shelf-chip.active{background:var(--ink);border-color:var(--ink);color:var(--paper)}
.shelf-chip.active:hover:not(:disabled){background:var(--ink-soft);color:var(--paper)}
.shelf-chip-num{color:var(--ink-mute);font-size:var(--fs-caption);font-weight:400;font-variant-numeric:tabular-nums}
.shelf-chip.active .shelf-chip-num{color:var(--gold-soft)}
/* 架号分组：标题在图片最上方，不覆盖卡片、不参与勾选点击。 */
.slab-groups{display:flex;flex-direction:column;gap:var(--space-5)}
.slab-group{display:flex;flex-direction:column;gap:var(--space-3);min-width:0}
.slab-group-head{
  display:flex;align-items:baseline;gap:var(--space-3);flex-wrap:wrap;
  padding:0 0 var(--space-2);border-bottom:1px solid var(--line-soft);
  pointer-events:none;
}
.slab-group-title{margin:0;font-family:var(--font-serif);font-size:var(--fs-h3);font-weight:700;letter-spacing:var(--ls-heading)}
.slab-group-count{color:var(--ink-mute);font-size:var(--fs-caption);font-variant-numeric:tabular-nums}
.slab-card{
  position:relative;
  padding:var(--space-3);
  background:var(--white);
  border:1px solid var(--line);
  border-radius:var(--radius-md);
  overflow:hidden;
  box-shadow:var(--shadow-sm);
  transition:transform var(--dur) var(--ease-out),border-color var(--dur) var(--ease-out),box-shadow var(--dur) var(--ease-out);
}
.slab-card:hover{transform:translateY(-2px);border-color:var(--gold-soft);box-shadow:var(--shadow-md)}
.slab-card.slab-selected{border-color:var(--gold);box-shadow:0 0 0 2px rgb(var(--gold-rgb) / .28)}
.slab-card.slab-sold{background:var(--success-soft)}
.slab-card.slab-locked{cursor:default}
.slab-card.slab-locked:hover{transform:none;border-color:var(--line);box-shadow:var(--shadow-sm)}
/* 【本次修复 · 订单进行中】被定单草稿占用的片（data-draft-locked="1"）：卡片边框 + 勾选框变红，
   并额外标注「订单进行中」；点勾选框给提示（透明热点 .slab-check-hit 接住点击，复选框本身仍 disabled）。 */
.slab-card[data-draft-locked="1"]{border-color:#e60012}
.slab-card[data-draft-locked="1"]:hover{transform:none;border-color:#e60012;box-shadow:0 0 0 2px rgb(230 0 18 / .18)}
.slab-card[data-draft-locked="1"] .slab-check-wrap{border:1.5px solid #e60012}
.slab-card[data-draft-locked="1"] .slab-check{appearance:none;-webkit-appearance:none;border:2px solid #e60012;border-radius:4px;background:#fdecec;accent-color:#e60012;opacity:1}
.slab-check-hit{position:absolute;inset:0;z-index:3;cursor:not-allowed}
.audit-badge.badge-order-active{background:#fdecec;color:#c4000f;border:1px solid #e60012}
.slab-check-wrap{
  position:absolute;
  top:var(--space-2);
  left:var(--space-2);
  z-index:2;
  padding:var(--space-1);
  background:rgb(var(--white-rgb) / .9);
  border-radius:var(--radius-sm);
}
.slab-check{width:18px;height:18px;cursor:pointer}
.slab-check:disabled{cursor:not-allowed;opacity:.5}
/* 操作条（架号 chips 那一行）：一套勾选 + 「加入订单(N)」「删除(N)」两个动作按钮。
   按钮只在选中 >0 片时出现（JS 切 hidden），不遮挡图片链接与行内按钮。 */
.shelf-chip-actions .slab-action-btn{white-space:nowrap;letter-spacing:.04em}
.shelf-chip-actions .slab-recycle-link{white-space:nowrap}
.recycle-table .slab-name-cell{display:flex;align-items:center;gap:var(--space-2)}
.recycle-table .slab-thumb-mini{display:inline-block;width:38px;height:38px;flex:0 0 auto;border-radius:var(--radius-sm);background-color:var(--paper-deep);background-size:cover;background-position:center}
.recycle-table .row-actions{display:flex;gap:var(--space-1);flex-wrap:wrap}
.slab-img{
  display:block;
  width:100%;
  height:150px;
  overflow:hidden;
  border-radius:var(--radius-sm);
  background-color:var(--paper-deep);
}
.slab-img img{width:100%;height:100%;object-fit:cover}
/* 单片被订单占用（PENDING）或已售（APPROVED/SOLD）：图片左上角红色斜切三角角标「已订」。
   文字中心先平移到三角形内部再旋转 -45°，保证旋转后四角都满足 x+y ≤ 边长（不再被斜边裁掉）。 */
.slab-img{position:relative}
.slab-ordered-tag{position:absolute;top:0;left:0;z-index:3;width:min(66px,62%);aspect-ratio:1/1;height:auto;container-type:inline-size;background:#e60012;clip-path:polygon(0 0,100% 0,0 100%);display:flex;align-items:center;justify-content:center;pointer-events:none}
.slab-ordered-tag>span{color:#fff;font-size:13px;font-weight:700;letter-spacing:1px;line-height:1;white-space:nowrap;transform:translate(-13px,-13px) rotate(-45deg);font-size:22cqw;transform:translate(-20cqw,-20cqw) rotate(-45deg)}
/* 小缩略图角标：先按容器比例收缩（min(44px,62%)），字随角标缩放（22cqw），几何与 66px 版本同款 */
.slab-ordered-tag.sm{width:min(44px,62%)}
.slab-ordered-tag.sm>span{font-size:10px;font-size:22cqw;letter-spacing:.5px;transform:translate(-9px,-9px) rotate(-45deg);transform:translate(-20cqw,-20cqw) rotate(-45deg)}
/* 更小的表格微缩图（定单明细 76×48 / 手机端 74px 缩略图）：34px 上限，字随角标缩放 */
.slab-ordered-tag.xs{width:min(34px,62%)}
.slab-ordered-tag.xs>span{font-size:9px;font-size:22cqw;letter-spacing:0;transform:translate(-7px,-7px) rotate(-45deg);transform:translate(-20cqw,-20cqw) rotate(-45deg)}
/* 表格里的单片图外包一层定位容器，供角标绝对定位（76×48 缩略图放不下 66px 角标） */
.slab-thumb-link{position:relative;display:inline-block;line-height:0}
.slab-info{display:flex;flex-direction:column;margin-top:var(--space-2)}
.slab-info strong{font-size:var(--fs-small);font-weight:600}
.slab-dims,.slab-shelf{color:var(--ink-mute);font-size:var(--fs-caption);line-height:var(--lh-small)}
/* 单片卡片：片号 + 架号同一行（架号更小更弱），尺寸单独一行，卡片保持紧凑 */
.slab-info-head{display:flex;align-items:baseline;gap:var(--space-2);min-width:0}
.slab-info-head strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.slab-info-head .slab-shelf{font-size:.8em;white-space:nowrap;font-variant-numeric:tabular-nums}
.slab-status{display:flex;flex-wrap:wrap;gap:var(--space-1);margin-top:var(--space-2)}
/* 草稿占用（draftLocked）：可见原因 + 就地「释放」按钮（不再只有 title 悬浮提示）。 */
.slab-draft-hint{display:flex;align-items:center;gap:var(--space-2);flex-wrap:wrap;margin-top:var(--space-2);padding:var(--space-1) var(--space-2);background:var(--paper-deep);border:1px solid var(--line-soft);border-radius:var(--radius-sm)}
.slab-draft-hint .slab-draft-reason{color:var(--ink-mute);font-size:var(--fs-caption);line-height:var(--lh-small)}
.slab-draft-hint .slab-draft-release{flex:0 0 auto;white-space:nowrap}
/* 订单管理「定单草稿」面板：片号 / 整料编号列表可能很长 → 允许任意位置换行，不撑破表格。 */
#orders-drafts-panel .mapping-table td{overflow-wrap:anywhere}
.slab-act{margin-top:var(--space-2)}
.slab-act .small{width:100%}
/* ===== 报价单：库存报价面板 + 报价单详情（统一表格与汇总）===== */
.quote-tool{margin:var(--space-2) 0 var(--space-4);padding:0;overflow:hidden}
.quote-toolbar{display:flex;align-items:flex-end;gap:var(--space-3);flex-wrap:wrap;padding:var(--space-3) var(--space-4);background:var(--paper-soft);border-bottom:1px solid var(--line-soft)}
.quote-field{display:flex;flex-direction:column;justify-content:flex-end;gap:var(--space-1);color:var(--ink-mute);font-size:var(--fs-caption)}
.quote-field>span{letter-spacing:.04em;line-height:1.2}
.quote-field input,.quote-field select{width:auto;height:44px;min-height:44px;padding:0 var(--space-3);font-size:var(--fs-small)}
.quote-field-customer{flex:1 1 240px;max-width:340px}
.quote-field-customer input{width:100%;min-width:220px}
.quote-field-unit{flex:0 0 auto}
.quote-field-unit select{min-width:132px}
.quote-field-price{flex:0 0 auto}
.quote-field-price input{min-width:160px}
.quote-price-suffix-wrap{display:inline-flex;align-items:center;gap:var(--space-2)}
.quote-price-suffix-wrap em{font-style:normal;color:var(--ink-mute);white-space:nowrap}
.quote-toolbar .quote-toolbar-btn{height:44px;min-height:44px;padding:0 var(--space-5);align-self:flex-end;white-space:nowrap}
input[type=number]{-moz-appearance:textfield;appearance:textfield}
input[type=number]::-webkit-outer-spin-button,input[type=number]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
.quote-table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
.quote-table{margin:0}
.quote-tool .quote-table{min-width:540px}
.quote-table th{background:var(--paper-soft)}
.quote-table th:first-child,.quote-table td:first-child{text-align:left}
.quote-table th.num,.quote-table td.num{text-align:right;font-variant-numeric:tabular-nums}
.quote-tool .quote-table tbody tr:last-child td{border-bottom:0}
.quote-cell-code{font-weight:600;color:var(--ink)}
/* 2) 单价列：内联可改数字（无边框、右对齐、等宽数字，hover/focus 才给提示） */
.quote-price-cell{white-space:nowrap}
.quote-price-inline{display:inline-flex;align-items:center;justify-content:flex-end;gap:var(--space-1)}
.quote-price-flag{width:6px;height:6px;flex:0 0 auto;border-radius:50%;background:var(--gold);opacity:0;transform:scale(.4);transition:opacity var(--dur-fast) var(--ease-soft),transform var(--dur-fast) var(--ease-soft)}
.quote-price-inline.is-custom .quote-price-flag{opacity:1;transform:scale(1)}
.quote-price-input,.quote-detail-price{
  width:112px;
  height:36px;
  min-height:36px;
  padding:0 var(--space-2);
  border:0;
  border-radius:var(--radius-sm);
  background:transparent;
  color:var(--ink);
  text-align:right;
  font-size:var(--fs-small);
  font-variant-numeric:tabular-nums;
  -moz-appearance:textfield;
  appearance:textfield;
  transition:background var(--dur-fast) var(--ease-soft),box-shadow var(--dur-fast) var(--ease-soft),color var(--dur-fast) var(--ease-soft);
}
.quote-price-input::-webkit-outer-spin-button,.quote-price-input::-webkit-inner-spin-button,
.quote-detail-price::-webkit-outer-spin-button,.quote-detail-price::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
.quote-price-inline:hover .quote-price-input,
.quote-price-input:hover,.quote-detail-price:hover{background:rgb(var(--gold-rgb) / .07);box-shadow:inset 0 -1px 0 var(--line)}
.quote-price-input:focus,.quote-detail-price:focus{background:var(--white);box-shadow:inset 0 -1px 0 var(--gold),0 0 0 3px rgb(var(--gold-rgb) / .12)}
.quote-price-inline.is-custom .quote-price-input{font-weight:700;color:var(--ink)}
.quote-amount{color:var(--ink);font-variant-numeric:tabular-nums;white-space:nowrap}
.quote-foot{display:flex;flex-direction:column;gap:var(--space-5);padding:var(--space-4) var(--space-3);background:var(--paper-soft);border-top:1px solid var(--line)}
.quote-total{display:flex;align-items:baseline;justify-content:space-between;gap:var(--space-4);flex-wrap:wrap}
.quote-total-meta{color:var(--ink-mute);font-size:var(--fs-small);font-variant-numeric:tabular-nums}
.quote-total-price{display:inline-flex;align-items:baseline;gap:var(--space-2);margin-left:auto;color:var(--ink-mute);font-size:var(--fs-small);white-space:nowrap}
.quote-total-label{letter-spacing:.04em}
.quote-total-price strong{color:var(--ink);font-family:var(--font-serif);font-size:var(--fs-h3);font-weight:700;line-height:1.1;letter-spacing:.01em;font-variant-numeric:tabular-nums}
.quote-actions{display:flex;align-items:center;justify-content:flex-end;gap:var(--space-3);flex-wrap:wrap}
.quote-actions .quote-primary{min-height:44px;padding:0 var(--space-6);letter-spacing:.08em}
.quote-tool .quote-empty{padding:var(--space-5);margin:0;text-align:center}
.quote-same-price{padding:var(--space-1) var(--space-4) var(--space-2);margin:0;color:var(--gold);font-size:var(--fs-caption)}
.quote-customer-warning{margin:0 var(--space-3);padding:var(--space-2) var(--space-3);border:1px solid var(--danger);border-left-width:4px;border-radius:var(--radius-sm);background:var(--danger-soft);color:var(--danger-strong);font-size:var(--fs-small);font-weight:600}
.quote-groups{display:flex;flex-direction:column;gap:var(--space-2);padding:var(--space-3) var(--space-3) 0}
.quote-group{display:flex;flex-direction:column;gap:var(--space-2);padding:var(--space-3);border:1px solid var(--line-soft);border-radius:var(--radius-md);background:var(--white)}
.quote-group-head{display:flex;align-items:center;gap:var(--space-3);flex-wrap:wrap}
.quote-group-no{font-weight:700;color:var(--ink);letter-spacing:.03em}
.quote-group-price{color:var(--ink);font-variant-numeric:tabular-nums}
.quote-group-count,.quote-group-area{color:var(--ink-mute);font-variant-numeric:tabular-nums}
.quote-group-amount{margin-left:auto;color:var(--ink);font-weight:600;font-variant-numeric:tabular-nums}
.quote-group-chips{display:flex;flex-wrap:wrap;gap:var(--space-1)}
.quote-chip{display:inline-flex;align-items:center;padding:2px 8px;border-radius:999px;background:var(--paper-soft);color:var(--ink-mute);font-size:var(--fs-caption)}
.quote-edit-wrap{display:flex;flex-direction:column;gap:var(--space-3)}
.quote-edit-group{display:flex;flex-direction:column;gap:var(--space-2);padding:var(--space-3);border:1px solid var(--line-soft);border-radius:var(--radius-md)}
.quote-edit-head{display:flex;align-items:center;justify-content:space-between;font-weight:700;color:var(--ink)}
.quote-edit-group label{display:flex;flex-direction:column;gap:var(--space-1);color:var(--ink-mute);font-size:var(--fs-caption)}
.quote-edit-group input{height:40px;padding:0 var(--space-3);font-size:var(--fs-small)}
.quote-detail-meta,.quote-summary-bar{display:flex;align-items:baseline;flex-wrap:wrap;gap:var(--space-4);color:var(--ink-mute);font-size:var(--fs-small)}
.quote-summary-meta{font-variant-numeric:tabular-nums}
.quote-detail-meta strong,.quote-summary-bar strong{color:var(--ink);font-family:var(--font-serif);font-size:var(--fs-h3);font-weight:700;line-height:1.1;font-variant-numeric:tabular-nums}
button.small.ghost{background:transparent;color:var(--ink);border-color:var(--line)}
button.small.ghost:hover:not(:disabled){background:var(--paper-deep);color:var(--ink)}
.batch-bar-actions{display:flex;align-items:center;gap:var(--space-2);flex-wrap:wrap;margin-left:auto}

.cust-batch-bar{
  display:flex;
  align-items:center;
  gap:var(--space-3);
  flex-wrap:wrap;
  margin:var(--space-2) 0 var(--space-4);
}
.batch-all{display:flex;align-items:center;gap:var(--space-2);font-size:var(--fs-small);cursor:pointer}
.batch-count{color:var(--ink-mute);font-size:var(--fs-small)}
.batch-count strong{color:var(--ink);font-size:var(--fs-h3)}
/* AI 分析历史：正方形小卡片，列宽固定 140px（不随容器拉伸，同一行等高） */
.ai-analysis-list{display:grid;grid-template-columns:repeat(auto-fill,140px);gap:10px;margin-top:var(--space-3)}
.ai-history-card{
  position:relative;
  display:flex;
  flex-direction:column;
  justify-content:space-between;
  width:140px;
  height:140px;
  aspect-ratio:1 / 1;
  padding:10px;
  text-align:left;
  border:1px solid var(--line);
  border-radius:var(--radius-md);
  background:var(--paper-soft);
  cursor:pointer;
  transition:background var(--dur-fast) var(--ease-soft),border-color var(--dur-fast) var(--ease-soft),box-shadow var(--dur-fast) var(--ease-soft);
}
.ai-history-card:hover{background:var(--white);border-color:var(--gold-soft);box-shadow:var(--shadow-sm)}
.ai-history-card:focus-visible{outline:2px solid var(--gold);outline-offset:2px}
/* 勾选删除：选中态用金色描边 + 浅金底区分（放在 :hover 之后，同权重下覆盖 hover） */
.ai-history-card.is-selected,
.ai-history-card.is-selected:hover{
  border-color:var(--gold);
  background:rgb(var(--gold-rgb) / .14);
  box-shadow:0 0 0 1px var(--gold) inset;
}
.ai-history-card.is-selected .ai-history-arrow{color:var(--gold-strong)}
.ai-card-check{
  position:absolute;
  top:5px;
  right:5px;
  display:flex;
  align-items:center;
  justify-content:center;
  width:22px;
  height:22px;
  border-radius:var(--radius-sm);
  cursor:pointer;
}
.ai-card-check input{width:15px;height:15px;margin:0;cursor:pointer;accent-color:var(--gold)}
.ai-history-top{display:flex;flex-direction:column;gap:2px;min-width:0;padding-right:20px}
.ai-history-date{color:var(--ink);font-size:var(--fs-small);font-weight:600;line-height:1.2;font-variant-numeric:tabular-nums;overflow-wrap:anywhere}
.ai-history-time{color:var(--ink-faint);font-size:11px;line-height:1.2;font-variant-numeric:tabular-nums}
.ai-history-author{color:var(--ink-mute);font-size:var(--fs-caption);line-height:1.3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ai-history-arrow{color:var(--gold);font-size:var(--fs-caption);white-space:nowrap}
/* 列表上方一行：左「一键分析 / 全选 / 已选 N 条」，右「删除选中」（danger，未选中禁用） */
.ai-toolbar{display:flex;align-items:center;gap:var(--space-3);flex-wrap:wrap;margin-top:var(--space-3)}
.ai-toolbar .ai-delete-btn{margin-left:auto}
@media(max-width:640px){
  .ai-analysis-list{grid-template-columns:repeat(auto-fill,110px)}
  .ai-history-card{width:110px;height:110px}
}

.ai-analysis-box{
  padding:var(--space-4);
  background:var(--paper-soft);
  border:1px solid var(--line);
  border-radius:var(--radius-md);
  font-size:var(--fs-small);
  line-height:1.75;
  color:var(--ink-soft);
  max-width:68ch;
  overflow-wrap:anywhere;
}
/* AI 分析弹窗：正文可滚动、窄屏可用（完整报告复用 .ai-analysis-box 排版） */
.modal-box.modal-analysis{width:min(100%,680px);max-height:82vh;display:flex;flex-direction:column}
.modal-analysis .modal-head,.modal-analysis .modal-foot{flex:0 0 auto}
.modal-analysis .modal-body{flex:1 1 auto;min-height:0;overflow:auto;-webkit-overflow-scrolling:touch}
.modal-analysis .modal-body .ai-analysis-box{max-width:100%}
.ai-analysis-box>*:first-child{margin-top:0}
.ai-analysis-box>*:last-child{margin-bottom:0}
.ai-analysis-box p{margin:0 0 11px}
.ai-analysis-box h4{
  margin:16px 0 8px;
  font-family:var(--font-serif);
  font-size:var(--fs-body);
  font-weight:600;
  line-height:1.5;
  letter-spacing:var(--ls-heading);
  color:var(--ink);
}
.ai-analysis-box ul,
.ai-analysis-box ol{margin:0 0 12px;padding-left:1.3em}
.ai-analysis-box li{
  margin-top:7px;
  padding-left:.25em;
  line-height:1.75;
}
.ai-analysis-box li:first-child{margin-top:0}
.ai-analysis-box li::marker{color:var(--gold)}
.ai-analysis-box strong{color:var(--ink);font-weight:600}
.ai-analysis-box blockquote{
  margin:12px 0;
  padding:8px 14px;
  border-left:2px solid var(--gold);
  background:rgb(var(--gold-rgb) / .07);
  border-radius:0 var(--radius-md) var(--radius-md) 0;
  color:var(--ink-soft);
  font-family:var(--font-serif);
}
.inventory-block-grid{
  display:grid;
  grid-template-columns:repeat(auto-fill,minmax(min(230px,100%),1fr));
  grid-auto-rows:1fr;
  gap:var(--space-4);
  align-items:stretch;
}
.inventory-block{
  position:relative;
  display:flex;
  flex-direction:column;
  height:100%;
  overflow:hidden;
  background:var(--white);
  border:1px solid var(--line);
  border-radius:var(--radius-md);
  color:inherit;
  text-decoration:none;
  box-shadow:var(--shadow-sm);
  transition:transform var(--dur) var(--ease-out),border-color var(--dur) var(--ease-out),box-shadow var(--dur) var(--ease-out);
}
.inventory-block-link{display:flex;flex-direction:column;color:inherit;text-decoration:none;flex:1}
.inventory-block:hover{transform:translateY(-3px);border-color:var(--gold-soft);box-shadow:var(--shadow-md)}
.inventory-block.block-selected{border-color:var(--gold);box-shadow:0 0 0 2px rgb(var(--gold-rgb) / .28)}
.inventory-cover{
  width:100%;
  height:160px;
  background-color:var(--paper-deep);
  background-position:center;
  background-repeat:no-repeat;
  background-size:contain;
  border-bottom:1px solid var(--line-soft);
}
.block-check{
  position:absolute;
  top:var(--space-2);
  left:var(--space-2);
  z-index:2;
  width:18px;
  height:18px;
  margin:0;
  cursor:pointer;
  border-radius:var(--radius-sm);
  box-shadow:0 1px 4px rgb(var(--black-rgb) / .2);
}
.block-toolbar{
  display:flex;
  align-items:center;
  gap:var(--space-3);
  flex-wrap:wrap;
  margin-bottom:var(--space-4);
}
.inventory-block-body{padding:var(--space-3) var(--space-4) var(--space-4);display:flex;flex-direction:column;flex:1;gap:var(--space-2)}
.inventory-block-body h2{font-size:var(--fs-body);font-weight:600;line-height:1.3}
.inventory-block-body>strong{font-size:var(--fs-caption);font-weight:600;color:var(--gold);margin-top:auto}
.inventory-instock{
  color:var(--ink);
  font-size:var(--fs-small);
  font-weight:600;
  line-height:var(--lh-small);
  overflow-wrap:anywhere;
  font-variant-numeric:tabular-nums;
}
.inventory-counts{display:flex;gap:var(--space-2);flex-wrap:wrap;margin:var(--space-1) 0;min-height:calc(var(--fs-caption) * var(--lh-body) + var(--space-1) * 2)}
.inventory-counts span{
  padding:var(--space-1) var(--space-2);
  background:var(--paper-deep);
  color:var(--ink-mute);
  font-size:var(--fs-caption);
  border-radius:var(--radius-sm);
}
.empty-compact{padding:var(--space-6);color:var(--ink-faint)}

.modal-overlay{
  position:fixed;
  inset:0;
  z-index:var(--z-modal);
  display:flex;
  align-items:center;
  justify-content:center;
  padding:var(--space-4);
  background:rgb(var(--black-rgb) / .48);
  backdrop-filter:blur(4px);
}
.modal-box{
  width:min(100%,520px);
  overflow:hidden;
  background:var(--white);
  border:1px solid var(--line);
  border-radius:var(--radius-lg);
  box-shadow:var(--shadow-lg);
  animation:modalIn var(--dur) var(--ease-out) both;
}
.modal-head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-3);padding:var(--space-5) var(--space-5) 0}
.modal-head h3{font-size:var(--fs-h2)}
.modal-x{flex:0 0 auto;width:34px;height:34px;min-height:34px;padding:0;background:transparent;border-color:transparent;color:var(--ink-mute);font-size:1.1rem;letter-spacing:0}
.modal-x:hover:not(:disabled){background:var(--paper-deep);color:var(--ink);transform:none;box-shadow:none}
.modal-body{padding:var(--space-3) var(--space-5);color:var(--ink-soft);font-size:var(--fs-body);line-height:var(--lh-body)}
.modal-body .hint{color:var(--ink-mute)}
.dup-group{margin:var(--space-3) 0;padding:var(--space-3);border:1px solid var(--line-soft);border-radius:var(--radius-lg)}
.dup-group-head{font-weight:600;margin-bottom:var(--space-2)}
.dup-choice{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-1) 0;cursor:pointer}
.modal-wrap{display:grid;gap:var(--space-2);margin-top:var(--space-2)}
.modal-wrap select{min-height:42px}
.modal-label{color:var(--ink-mute);font-size:var(--fs-caption)}
.modal-opt{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-2) 0;cursor:pointer}
/* 用户卡下方的「客户转移」入口：独立成行、右对齐 */
.crm-card-actions-sub{margin-top:var(--space-2);justify-content:flex-end}
/* 用户卡下方的「生成授权码 / 设备 (n)」入口 + 展开的设备列表（一次性授权码 + 设备绑定） */
.user-device-actions{display:flex;align-items:center;justify-content:flex-end;gap:var(--space-3);margin-top:var(--space-2);flex-wrap:wrap}
.user-device-list{margin-top:var(--space-3);display:grid;gap:var(--space-2)}
.user-device-list:empty{margin-top:0}
.user-device-row{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);padding:var(--space-2) var(--space-3);border:1px solid var(--line);border-radius:8px;background:var(--paper-deep)}
.user-device-main{display:flex;align-items:center;gap:var(--space-3);flex-wrap:wrap;min-width:0}
.user-device-id{font-family:var(--font-mono);letter-spacing:.06em;font-weight:600}
.user-device-state{font-size:var(--fs-caption);padding:1px 8px;border-radius:999px}
.user-device-state.on{color:#1f7a3f;background:rgba(31,122,63,.12)}
.user-device-state.off{color:#a33;background:rgba(170,51,51,.12)}
.user-device-meta{color:var(--ink-mute);font-size:var(--fs-caption)}
.user-device-foot{display:flex;justify-content:flex-end;margin-top:var(--space-2)}
/* 一次性授权码弹窗：8 位数字放大 + 复制 */
.auth-code-box{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);margin:var(--space-3) 0;padding:var(--space-3) var(--space-4);border:1px dashed var(--gold);border-radius:10px;background:var(--paper-deep)}
.auth-code-value{font-family:var(--font-mono);font-size:clamp(1.4rem,28cqi,2rem);letter-spacing:.35em;font-weight:700}
/* 客户转移弹窗：目标用户 + 客户多选列表（全部转移 / 全选 / 逐个勾选） */
.transfer-cust-wrap{gap:var(--space-1)}
.transfer-cust-head{display:flex;align-items:center;gap:var(--space-3);flex-wrap:wrap}
.transfer-cust-head .batch-all{cursor:pointer;font-size:var(--fs-small)}
.transfer-cust-head .batch-count{margin-left:auto}
.transfer-cust-list{max-height:240px;overflow:auto;border:1px solid var(--line);border-radius:var(--radius-sm);padding:var(--space-1) var(--space-2);background:var(--white)}
.transfer-cust-row{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-1) 0;cursor:pointer}
.transfer-cust-row+.transfer-cust-row{border-top:1px solid var(--line-soft)}
.transfer-cust-name{font-size:var(--fs-small)}
.transfer-cust-meta{margin-left:auto;color:var(--ink-mute);font-size:var(--fs-caption);font-style:normal;font-variant-numeric:tabular-nums}
.modal-foot{
  display:flex;
  justify-content:flex-end;
  gap:var(--space-2);
  padding:var(--space-4) var(--space-5) var(--space-5);
  background:var(--paper-soft);
  border-top:1px solid var(--line-soft);
}
.toast{
  position:fixed;
  top:var(--space-5);
  left:50%;
  z-index:var(--z-toast);
  transform:translateX(-50%);
  max-width:calc(100vw - 2*var(--space-4));
  padding:var(--space-3) var(--space-5);
  border-radius:var(--radius-md);
  color:var(--paper);
  font-size:var(--fs-small);
  text-align:center;
  overflow-wrap:anywhere;
  box-shadow:var(--shadow-md);
  animation:toastIn var(--dur) var(--ease-out) both;
}
.toast-ok{background:var(--success)}
.toast-err{background:var(--danger)}

.login-page{
  width:100%;
  max-width:calc(var(--content-w) + 2*var(--shell-pad));
  min-height:calc(100vh - var(--header-h) - var(--footer-h));
  margin-inline:auto;
  padding:var(--space-8) var(--shell-pad);
  display:grid;
  grid-template-columns:minmax(0,1fr) minmax(340px,440px);
  align-items:center;
  gap:var(--space-8);
}
.login-intro{max-width:640px}
.login-brand{margin-bottom:var(--space-7);font-family:var(--font-serif)}
.login-brand span{display:block;font-size:var(--fs-h1);letter-spacing:var(--ls-heading)}
.login-brand small{display:block;margin-top:var(--space-2);color:var(--ink-mute);font-size:var(--fs-caption);letter-spacing:var(--ls-overline)}
.login-intro h1{
  margin:var(--space-6) 0 var(--space-6);
  font-family:var(--font-serif-display);
  font-weight:400;
  font-size:var(--fs-display);
  line-height:var(--lh-display);
  letter-spacing:var(--ls-display);
  word-break:keep-all;
  overflow-wrap:normal;
  line-break:strict;
  text-wrap:balance;
}
.login-intro p{max-width:460px;color:var(--ink-soft);font-size:var(--fs-h3);line-height:var(--lh-body)}
.login-card{
  padding:var(--space-7) var(--space-6);
  background:rgb(var(--white-rgb) / .88);
  border:1px solid var(--line);
  border-radius:var(--radius-md);
  box-shadow:0 1px 2px rgb(var(--ink-rgb) / .04),0 16px 40px rgb(var(--ink-rgb) / .06);
}
.login-card h1{margin:var(--space-2) 0 var(--space-3);font-size:var(--fs-h2)}
.login-form{display:grid;gap:var(--space-4);margin-top:var(--space-5)}
.field{display:grid;gap:var(--space-2)}
.field-label{
  color:var(--ink-soft);
  font-size:12px;
  font-weight:600;
  letter-spacing:.08em;
}
.login-form input{
  height:48px;
  background:transparent;
  border:1px solid var(--line);
  border-radius:var(--radius-md);
  box-shadow:none;
}
.login-form input:focus{
  outline:none;
  border-color:var(--gold-strong);
  background:var(--white);
  box-shadow:0 0 0 3px rgb(var(--gold-rgb) / .16);
}
.login-form input:focus-visible,
.password-toggle:focus-visible,
.captcha-refresh:focus-visible,
.login-submit:focus-visible{
  outline:2px solid var(--gold-strong);
  outline-offset:2px;
}
.password-toggle:focus-visible,.captcha-refresh:focus-visible,.login-submit:focus-visible{border-radius:var(--radius-md)}
.login-form input[aria-invalid="true"]{
  border-color:var(--danger);
  background:var(--danger-soft);
  box-shadow:0 0 0 3px rgb(var(--danger-rgb) / .12);
}
.login-form input[aria-invalid="true"]:focus,
.login-form input[aria-invalid="true"]:focus-visible{
  outline:2px solid var(--danger);
  outline-offset:2px;
  border-color:var(--danger-strong);
  box-shadow:0 0 0 3px rgb(var(--danger-rgb) / .16);
}
.password-wrap{position:relative;display:block}
.password-wrap input{padding-right:52px}
.password-toggle{
  position:absolute;
  top:50%;
  right:4px;
  width:40px;
  min-height:40px;
  height:40px;
  padding:0;
  transform:translateY(-50%);
  border:0;
  border-radius:var(--radius-md);
  background:transparent;
  color:var(--ink-faint);
  box-shadow:none;
}
.password-toggle:hover:not(:disabled){background:transparent;color:var(--gold-strong);transform:translateY(-50%);box-shadow:none}
.password-toggle:active:not(:disabled){transform:translateY(-50%) scale(.92);background:rgb(var(--gold-rgb) / .1);color:var(--gold-strong);box-shadow:none}
.password-toggle:disabled{color:var(--ink-faint);opacity:.42;cursor:not-allowed}
.captcha-row{display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:var(--space-2);align-items:center}
.captcha-chip{
  min-width:120px;
  height:48px;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  padding:0 var(--space-3);
  border:1px solid var(--line);
  border-radius:var(--radius-md);
  background:var(--paper-soft);
  color:var(--ink-soft);
  font-size:var(--fs-caption);
  letter-spacing:.02em;
  font-variant-numeric:tabular-nums;
  white-space:nowrap;
  cursor:default;
  user-select:none;
  -webkit-user-select:none;
}
.captcha-refresh{
  width:44px;
  min-height:44px;
  height:44px;
  padding:0;
  border:1px solid var(--line);
  border-radius:var(--radius-md);
  background:transparent;
  color:var(--ink-mute);
  font-size:20px;
  line-height:1;
  box-shadow:none;
}
.captcha-refresh:hover:not(:disabled){background:var(--paper-soft);color:var(--gold-strong);transform:rotate(18deg);box-shadow:none}
.captcha-refresh:active:not(:disabled){background:var(--paper-deep);color:var(--gold-strong);transform:rotate(18deg) scale(.92);box-shadow:none}
.captcha-refresh:disabled{opacity:.42;color:var(--ink-faint);cursor:not-allowed;transform:none}
.login-submit{
  min-height:50px;
  margin-top:var(--space-2);
  font-size:var(--fs-body);
  letter-spacing:var(--ls-overline);
}
.login-submit:hover:not(:disabled){
  background:var(--gold-strong);
  transform:translateY(-2px);
  box-shadow:0 12px 26px rgb(var(--black-rgb) / .22);
}
.login-submit:active:not(:disabled){background:var(--gold-strong);transform:translateY(0) scale(.985);box-shadow:0 4px 12px rgb(var(--black-rgb) / .18)}
.login-submit:disabled{background:var(--ink-mute);opacity:.55;cursor:progress;transform:none;box-shadow:none}
.login-err{min-height:18px;color:var(--danger);font-size:var(--fs-small)}
.login-err:not(:empty){
  display:flex;
  align-items:center;
  gap:var(--space-2);
  padding:6px 10px;
  border:1px solid rgb(var(--danger-rgb) / .3);
  border-left:2px solid var(--danger);
  border-radius:var(--radius-md);
  background:rgb(var(--danger-rgb) / .06);
  line-height:1.45;
}
body.login-body header.site-header,body.login-body footer.site-footer{display:none}
body.login-body main{min-height:100vh}
body.login-body .login-page{min-height:100vh}

@keyframes spin{to{transform:rotate(360deg)}}
@keyframes modalIn{from{opacity:0;transform:translateY(8px) scale(.985)}to{opacity:1;transform:none}}
@keyframes toastIn{from{opacity:0;transform:translate(-50%,-8px)}to{opacity:1;transform:translate(-50%,0)}}
@keyframes riseIn{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}
@keyframes rowFade{from{opacity:.25;transform:translateY(4px)}to{opacity:1;transform:none}}
@keyframes tableFade{from{opacity:.55}to{opacity:1}}
@keyframes btnPulse{0%{transform:scale(.9)}55%{transform:scale(1.06)}100%{transform:scale(1)}}

.hero-stage>.hero-copy>*{animation:riseIn var(--dur-slow) var(--ease-out) both}
.hero-stage>.hero-copy>*:nth-child(1){animation-delay:0ms}
.hero-stage>.hero-copy>*:nth-child(2){animation-delay:80ms}
.hero-stage>.hero-copy>*:nth-child(3){animation-delay:150ms}
.hero-stage>.hero-copy>*:nth-child(4){animation-delay:220ms}
.hero-stage>.hero-media{animation:riseIn var(--dur-slow) var(--ease-out) 260ms both}
.section-shell .section-head{animation:riseIn var(--dur-slow) var(--ease-out) 90ms both}
.section-shell .grid .card{animation:riseIn var(--dur-slow) var(--ease-out) both}
.section-shell .grid .card:nth-child(1){animation-delay:120ms}
.section-shell .grid .card:nth-child(2){animation-delay:180ms}
.section-shell .grid .card:nth-child(3){animation-delay:240ms}
.section-shell .grid .card:nth-child(4){animation-delay:300ms}
.section-shell .grid .card:nth-child(5){animation-delay:360ms}
.section-shell .grid .card:nth-child(6){animation-delay:420ms}
.row-flash{animation:rowFade var(--dur) var(--ease-soft)}
.table-fade{animation:tableFade var(--dur) var(--ease-soft)}
.btn-pulse{animation:btnPulse var(--dur) var(--ease-soft)}

/* ===== admin design-system refinements ===== */
.filters,.form-grid{grid-template-columns:repeat(auto-fit,minmax(min(190px,100%),1fr));align-items:end}
.filters>button,.form-grid>button{width:100%}
.panel{background:var(--white);box-shadow:none;min-width:0}
.panel h2{letter-spacing:.01em;overflow-wrap:anywhere}

/* ===== 表格：外层容器横向滚动，数字列右对齐不换行，表头不换行错位 ===== */
.mapping-wrap,.quote-table-wrap{max-width:100%;overflow-x:auto;border-radius:var(--radius-md);-webkit-overflow-scrolling:touch}
.mapping-table{width:100%;min-width:760px;border-spacing:0}
.mapping-table th,.mapping-table td{padding:11px 12px;line-height:1.45;overflow-wrap:anywhere}
.mapping-table th{position:sticky;top:0;z-index:1;white-space:nowrap}
.mapping-table td.num,.mapping-table th.num{text-align:right;white-space:nowrap;font-variant-numeric:tabular-nums}
.customer-list-wrap{padding:0}
.customer-list{min-width:1080px}
.crm-card{padding:var(--space-5)}
.crm-card h2{font-size:var(--fs-h3);margin-bottom:var(--space-2)}
.crm-counts strong{color:var(--ink)}
.crm-card p{margin-top:var(--space-2)}
.inventory-counts span{font-variant-numeric:tabular-nums}
.cust-batch-bar{align-items:center}
.directory-pager button.small.active{background:var(--gold);color:var(--paper)}
.stat strong{color:var(--ink)}
.source-row{padding:var(--space-3) var(--space-2)}
.source-row:hover{background:rgb(var(--gold-rgb) / .04)}

/* ===== 长文本（客户名 / 公司 / 料号 / 备注 / 单号）：不撑破容器、不被裁切 ===== */
.card-title,.source-row h3,.crm-card h2,.panel h2,.slab-info strong,
.inventory-block-body h2,.quote-cell-code,.view-link,.audit-badge,.batch-count,
.admin-user-name,.login-brand span,.login-card h1{overflow-wrap:anywhere}
/* ===== 统一断点：1080（导航换行 / 首屏与登录收单列）→ 1024（两栏收单列）→ 700（小屏单列）→ 460（窄屏）= */
/* ===== 窄屏（≤1200）宽表卡片化：一行 = 一张卡，字段竖排「标签：值」；任何宽度都不裁内容、不横向滚动 ===== */
/* 断点取 1200：宽表最宽的 .customer-list 需要 1080px，加上页面/面板内边距约 104px 的固定开销，
   视口 <1184px 时 1080px 就放不下；1200 留出余量，保证 ≥1200 仍是原来的表格排版（1440 视觉零变化）。 */
@media(max-width:1200px){
  .mapping-wrap,.quote-table-wrap{overflow-x:visible}
  .customer-list-wrap{padding:var(--space-3)}
  .mapping-table,.customer-list,.quote-table,.quote-tool .quote-table{display:block;width:100%;min-width:0;border-spacing:0}
  .mapping-table thead{display:none}
  .mapping-table th{position:static;white-space:normal}
  .mapping-table tbody{display:flex;flex-direction:column;gap:var(--space-3)}
  .mapping-table tbody tr{display:flex;flex-direction:column;padding:var(--space-3);background:var(--white);border:1px solid var(--line);border-radius:var(--radius-md);box-shadow:var(--shadow-sm)}
  .mapping-table td{display:flex;flex-wrap:wrap;align-items:center;gap:4px var(--space-3);padding:6px 0;border-bottom:1px dashed var(--line-soft);text-align:left;white-space:normal;line-height:1.45;overflow-wrap:anywhere}
  .mapping-table tr>td:last-child{border-bottom:0}
  .mapping-table td:first-child,.mapping-table td:last-child{padding-left:0;padding-right:0}
  .mapping-table td::before{content:attr(data-label);flex:0 0 84px;color:var(--ink-mute);font-size:var(--fs-caption);font-weight:600;letter-spacing:.02em}
  .mapping-table td.num{justify-content:space-between}
  .mapping-table td>*{min-width:0;max-width:100%}
  .mapping-table select{min-height:36px}
  /* 客户列表：一行 = 一张客户卡；表头只保留「全选本页客户」（勾选能力不能丢），列名由卡片内 data-label 承担 */
  .customer-list thead{display:block}
  .customer-list thead tr{display:block}
  .customer-list thead th{display:none}
  .customer-list thead th.cust-head{display:block;padding:0 0 var(--space-2);background:none;border-bottom:0;color:var(--ink-mute);font-size:var(--fs-caption)}
  .customer-list tbody tr{cursor:pointer}
  .customer-list tbody td:first-child{padding-bottom:var(--space-2);border-bottom:1px solid var(--line-soft)}
}
@media(max-width:1080px){
  .static-nav{display:none}
  .header-lead{min-height:calc(var(--header-h) - var(--space-3))}
  .header-bar{padding-top:var(--space-2)}
  .header-userbar{margin-left:0}
  .hero{grid-template-columns:1fr;align-items:start;padding-right:var(--shell-pad)}
  .hero-media{display:none}
  .hero-copy{max-width:640px;align-self:start;padding-right:0}
  .login-page{grid-template-columns:1fr;gap:var(--space-6)}
  .login-intro{max-width:none}
  .login-intro h1{font-size:var(--fs-h1)}
}
@media(max-width:1024px){
  .customer-profile-grid{grid-template-columns:minmax(0,1fr)}
}
@media(max-width:700px){
  :root{--header-h:68px;--shell-pad:20px;--grid-min:160px}
  .brand span{font-size:var(--fs-body)}
  .brand small{display:none}
  .grid{grid-template-columns:1fr 1fr;gap:var(--space-3)}
  .hero{padding-top:var(--space-7)}
  .hero h1{font-size:clamp(2.1rem,7.6vw,3.2rem);letter-spacing:.02em;overflow-wrap:anywhere}
  .hero-kicker{gap:var(--space-2) var(--space-3)}
  .hero-no{letter-spacing:.12em}
  .login-intro h1{font-size:clamp(2.6rem,12vw,3.6rem);letter-spacing:.02em;overflow-wrap:anywhere}
  .eyebrow{font-size:.72rem;letter-spacing:.16em}
  footer.site-footer{height:auto;min-height:var(--footer-h);flex-wrap:wrap;align-content:center;gap:var(--space-2) var(--space-4);padding-top:var(--space-3);padding-bottom:var(--space-3)}
  .footer-mark{letter-spacing:.16em}
  .panel{padding:var(--space-4)}
  .customer-list-wrap,.quote-tool{padding:0}
  .crm-card{padding:var(--space-4)}
  .facts{gap:var(--space-3);flex-wrap:wrap}
  .detail-head{align-items:flex-start;flex-direction:column;gap:var(--space-3)}
  .section-head{align-items:flex-start}
  .card-body{padding:var(--space-3)}
  .card-title{font-size:var(--fs-body)}
  .meta{font-size:var(--fs-micro);gap:var(--space-2)}
  .viewer-bar{padding:0 var(--space-3);row-gap:var(--space-2);height:auto;min-height:var(--header-h)}
  .admin-title{align-items:flex-start}
  .stats{grid-template-columns:repeat(auto-fit,minmax(140px,1fr))}
  .filters,.form-grid,.classify-row,.import-row{grid-template-columns:1fr}
  .source-row{grid-template-columns:minmax(0,1fr) auto}
  /* 窄屏：带复选框的来源行改成两行（复选框+记录 / 上传图片落到第二行），避免文字被挤成一列字 */
  .source-row.source-row-checkable{grid-template-columns:auto minmax(0,1fr)}
  .source-row.source-row-checkable .source-cover-btn{grid-column:2;justify-self:start}
  /* 操作按钮独占一行：否则按钮的最小宽度会撑大 auto 轨道，把左侧文字挤成一列字 */
  .source-row.source-row-checkable .source-actions{grid-column:1/-1;justify-content:flex-start}
  .source-row-link{grid-template-columns:80px minmax(0,1fr)}
  .source-thumb{width:80px}
  .source-cover-btn{padding:.4rem .6rem}
  .customer-profile-grid{grid-template-columns:minmax(0,1fr)}
  .profile-lines p{grid-template-columns:88px minmax(0,1fr);gap:var(--space-2)}
  .crm-card-actions{align-items:flex-start;flex-direction:column}
  .directory-toolbar{align-items:stretch;flex-direction:column}
  .directory-search{max-width:none}
  .view-toggle button{flex:1}
  .slab-grid{grid-template-columns:repeat(auto-fill,minmax(min(160px,100%),1fr))}
  .slab-groups{gap:var(--space-4)}
  .inventory-block-grid{grid-template-columns:repeat(auto-fill,minmax(min(160px,100%),1fr))}
  .inventory-cover{height:150px}
  .admin-title-userbar{margin-left:0;width:100%}
}
@media(max-width:460px){
  .grid{grid-template-columns:1fr}
  .slab-grid,.inventory-block-grid{grid-template-columns:1fr 1fr}
  .login-card{padding:var(--space-5) var(--space-4)}
}
@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{
    animation-duration:.01ms!important;
    animation-iteration-count:1!important;
    scroll-behavior:auto!important;
    transition-duration:.01ms!important;
  }
}

@media(max-width:700px){
  .quote-toolbar{align-items:stretch;flex-direction:column;gap:var(--space-3)}
  .quote-field{flex:1 1 140px}
  .quote-field-customer{flex:1 1 100%;max-width:none}
  .quote-field input,.quote-field select{width:100%;min-width:0}
  .quote-price-suffix-wrap{width:100%}
  .quote-toolbar .quote-toolbar-btn{width:100%}
  .quote-foot{gap:var(--space-4);padding:var(--space-3)}
  .quote-total{align-items:flex-start;flex-direction:column;gap:var(--space-2)}
  .quote-total-price{margin-left:0}
  .quote-actions{width:100%}
  .quote-actions button{flex:1}
  /* 逐片明细：窄屏排成「片号 / 平方 / 单价 / 金额」两行，金额与手改标记不挤出容器 */
  .quote-item-head,.quote-item-row{grid-template-columns:minmax(0,1fr) minmax(0,1fr) auto;grid-template-areas:"code code manual" "area price amount";gap:var(--space-2);margin-top:0;padding-top:var(--space-2);border-top:1px dashed var(--line-soft)}
  .quote-item-head{margin-top:var(--space-1)}
  .quote-item-head>span:nth-child(1),.quote-item-row>.quote-item-code{grid-area:code}
  .quote-item-head>span:nth-child(2),.quote-item-row>.quote-item-area{grid-area:area}
  .quote-item-head>span:nth-child(3),.quote-item-row>.quote-item-price{grid-area:price}
  .quote-item-head>span:nth-child(4),.quote-item-row>.quote-amount{grid-area:amount;justify-self:end;text-align:right}
  .quote-item-head>span:nth-child(5),.quote-item-row>.quote-item-manual{grid-area:manual;justify-self:end}
}

/* ===== 定单草案逐片编辑 ===== */
.quote-group-items{margin-top:var(--space-2);padding-top:var(--space-2);border-top:1px dashed var(--line-soft)}
.quote-group-items summary{cursor:pointer;color:var(--gold-strong);font-size:var(--fs-caption);font-weight:600}
.quote-item-head,.quote-item-row{display:grid;grid-template-columns:minmax(110px,1.2fr) minmax(96px,1fr) minmax(112px,1fr) minmax(96px,.9fr) minmax(64px,auto);gap:var(--space-2);align-items:center;margin-top:var(--space-1)}
.quote-item-head{color:var(--ink-mute);font-size:var(--fs-caption)}
.quote-item-code{font-weight:600;color:var(--ink)}
.quote-item-row input.quote-price-input{width:100%;height:36px;min-height:36px;padding:0 var(--space-2);border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--white);color:var(--ink);text-align:right;font-size:var(--fs-small);font-variant-numeric:tabular-nums}
.quote-item-manual{color:var(--gold-strong);font-size:var(--fs-caption);white-space:nowrap}
.quote-item-row .quote-amount{font-weight:600}
.quote-item-row input.quote-price-input.is-invalid{border-color:var(--danger);background:var(--danger-soft);color:var(--danger-strong)}

/* ===== 客户页定单区块 ===== */
.customer-quote-list{display:flex;flex-direction:column;gap:var(--space-2)}
.customer-quote-card{border:1px solid var(--line-soft);border-radius:var(--radius-md);background:var(--white);overflow:hidden}
.customer-quote-card.quote-void{background:var(--paper-deep)}
.customer-quote-head{display:flex;align-items:center;gap:var(--space-3);flex-wrap:wrap;padding:var(--space-3)}
.customer-quote-toggle{border:0;background:none;color:var(--gold-strong);font-size:var(--fs-body);line-height:1;cursor:pointer}
.customer-quote-no{font-weight:700;color:var(--ink)}
.customer-quote-meta{color:var(--ink-mute);font-size:var(--fs-small);font-variant-numeric:tabular-nums}
.customer-quote-actions{margin-left:auto;display:inline-flex;align-items:center;gap:var(--space-2);flex-wrap:wrap}
.customer-quote-detail{padding:0 var(--space-3) var(--space-3);border-top:1px solid var(--line-soft)}
.customer-quote-detail .mapping-table{min-width:0}
.customer-selection-toolbar{display:flex;align-items:center;gap:var(--space-3);flex-wrap:wrap;margin:var(--space-2) 0 var(--space-4)}
.customer-quote-head>.order-check{width:18px;height:18px;margin-right:2px;accent-color:var(--gold)}
.customer-quote-card.row-selected{border-color:var(--gold);box-shadow:var(--shadow-sm)}
.quote-table td .order-item-input{width:88px;height:36px;min-height:36px;padding:0 var(--space-2);border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--white);color:var(--ink);text-align:right;font-size:var(--fs-small);font-variant-numeric:tabular-nums}
.quote-table td .order-item-input.is-invalid{border-color:var(--danger);background:var(--danger-soft);color:var(--danger-strong)}
.order-slab-swap{min-height:34px;padding:0 var(--space-2);font-size:var(--fs-caption)}
/* ===== 换片弹窗：两级选择（整料 → 单片，带图） ===== */
.modal-box.modal-wide{width:min(100%,960px);max-height:80vh;display:flex;flex-direction:column}
.modal-wide .modal-head,.modal-wide .modal-foot{flex:0 0 auto}
.modal-wide .modal-body{flex:1 1 auto;min-height:0;overflow:auto;padding-top:var(--space-2)}
.replace-modal{display:flex;flex-direction:column;gap:var(--space-3)}
.replace-top{display:flex;align-items:baseline;justify-content:space-between;gap:var(--space-3);flex-wrap:wrap}
.replace-current{margin:0;display:flex;align-items:baseline;gap:var(--space-2);flex-wrap:wrap}
.replace-current strong{color:var(--ink)}
.replace-total{color:var(--gold-strong);font-size:var(--fs-small);font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap}
.replace-blocks-wrap{display:flex;align-items:center;gap:var(--space-3);min-width:0}
.replace-label{flex:0 0 auto;color:var(--ink-mute);font-size:var(--fs-caption);letter-spacing:var(--ls-overline)}
.replace-chips{display:flex;gap:var(--space-2);min-width:0;padding:var(--space-1) 0;overflow-x:auto;overscroll-behavior-x:contain;scrollbar-width:thin}
.replace-chip{flex:0 0 auto;display:flex;flex-direction:column;align-items:flex-start;gap:2px;min-height:44px;padding:var(--space-2) var(--space-3);background:var(--paper-soft);border:1px solid var(--line);border-radius:var(--radius-md);color:var(--ink);text-align:left;letter-spacing:0;white-space:nowrap}
.replace-chip:hover:not(:disabled){background:var(--paper-deep);border-color:var(--gold-soft);transform:none;box-shadow:none}
.replace-chip-main{font-size:var(--fs-small);font-weight:600}
.replace-chip-sub{color:var(--ink-mute);font-size:var(--fs-caption);font-variant-numeric:tabular-nums}
.replace-chip.active{background:var(--ink);border-color:var(--ink);color:var(--paper)}
.replace-chip.active .replace-chip-sub{color:var(--gold-soft)}
.replace-search{width:100%}
.replace-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(180px,100%),1fr));gap:var(--space-3)}
.replace-card{display:flex;flex-direction:column;gap:var(--space-2);padding:var(--space-2);background:var(--white);border:1px solid var(--line);border-radius:var(--radius-md);color:var(--ink);text-align:left;letter-spacing:0;box-shadow:var(--shadow-sm);transition:transform var(--dur-fast) var(--ease-out),border-color var(--dur-fast) var(--ease-out),box-shadow var(--dur-fast) var(--ease-out)}
.replace-card:hover:not(:disabled){background:var(--white);border-color:var(--gold-soft);transform:translateY(-2px);box-shadow:var(--shadow-md)}
.replace-card.picked{border-color:var(--gold);box-shadow:0 0 0 2px rgb(var(--gold-rgb) / .28)}
.replace-thumb{position:relative;display:block;width:100%;aspect-ratio:16 / 10;overflow:hidden;border-radius:var(--radius-sm);background:var(--paper-deep)}
.replace-thumb img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.replace-img-fail{display:none}
.replace-thumb-fallback{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:var(--ink-faint);font-size:var(--fs-caption)}
.replace-tick{position:absolute;top:6px;right:6px;display:none;width:22px;height:22px;align-items:center;justify-content:center;background:var(--gold);color:var(--white);border-radius:999px;font-size:var(--fs-caption);line-height:1}
.replace-card.picked .replace-tick{display:flex}
.replace-card-body{display:flex;flex-direction:column;gap:2px;min-width:0}
.replace-code{color:var(--ink);font-size:var(--fs-small);font-weight:600;overflow-wrap:anywhere}
.replace-area{color:var(--gold-strong);font-size:var(--fs-small);font-weight:600;font-variant-numeric:tabular-nums}
.replace-dims{color:var(--ink-mute);font-size:var(--fs-caption)}
.replace-empty{grid-column:1 / -1;padding:var(--space-6) var(--space-4);background:var(--paper-soft);border:1px dashed var(--line);border-radius:var(--radius-md);text-align:center}
.replace-summary{position:sticky;bottom:0;z-index:2;padding:var(--space-2) var(--space-3);background:var(--paper-soft);border:1px solid var(--gold-soft);border-radius:var(--radius-md);color:var(--ink-soft);font-size:var(--fs-small);box-shadow:0 -6px 16px rgb(var(--ink-rgb) / .06)}
.replace-summary strong{color:var(--gold-strong)}

/* 换片弹窗：窄屏自适应（置于文件末尾以确保覆盖基础规则） */
@media(max-width:700px){
  .modal-box.modal-wide{width:100%;max-height:88vh}
  .replace-grid{grid-template-columns:repeat(auto-fill,minmax(min(150px,100%),1fr))}
  .replace-blocks-wrap{flex-direction:column;align-items:stretch;gap:var(--space-1)}
}
@media(max-width:460px){
  .replace-grid{grid-template-columns:1fr 1fr}
}

/* ===== 轻量图片预览层（lightbox）：页内放大，不触发路由跳转 ===== */
body.lightbox-open{overflow:hidden}
.lightbox-overlay{
  position:fixed;
  inset:0;
  z-index:var(--z-lightbox);
  display:flex;
  padding:clamp(16px,4vw,48px);
  background:rgb(var(--ink-rgb) / .86);
  -webkit-backdrop-filter:blur(2px) brightness(.72);
  backdrop-filter:blur(2px) brightness(.72);
  overflow:auto;
  -webkit-overflow-scrolling:touch;
  animation:lightboxIn var(--dur-fast) var(--ease-out) both;
}
.lightbox-figure{
  display:flex;
  margin:auto;
  flex-direction:column;
  align-items:center;
  gap:var(--space-3);
  max-width:92vw;
}
.lightbox-card{
  display:flex;
  max-width:92vw;
  padding:var(--space-2);
  background:var(--paper-soft);
  border:1px solid rgb(var(--white-rgb) / .55);
  border-radius:var(--radius-lg);
  box-shadow:0 6px 18px rgb(var(--black-rgb) / .4),0 28px 72px rgb(var(--black-rgb) / .55);
  overflow:hidden;
}
.lightbox-img{
  display:block;
  width:auto;
  height:auto;
  max-width:100%;
  max-height:86vh;
  border:1px solid rgb(var(--black-rgb) / .1);
  border-radius:var(--radius-sm);
  background:var(--paper-deep);
}
.lightbox-meta{
  display:flex;
  max-width:92vw;
  padding:var(--space-2) var(--space-4);
  flex-wrap:wrap;
  align-items:baseline;
  justify-content:center;
  gap:var(--space-2);
  background:var(--paper-soft);
  border:1px solid rgb(var(--white-rgb) / .55);
  border-radius:var(--radius-md);
  color:var(--ink);
  font-size:var(--fs-small);
  line-height:var(--lh-small);
  text-align:center;
  box-shadow:0 4px 14px rgb(var(--black-rgb) / .38),0 18px 44px rgb(var(--black-rgb) / .42);
}
.lightbox-meta-item{white-space:nowrap}
.lightbox-meta-item i{margin-right:var(--space-1);color:var(--ink-faint);font-style:normal;font-size:var(--fs-caption)}
.lightbox-sep{color:var(--ink-faint)}
.lightbox-x{
  position:fixed;
  top:var(--space-4);
  right:var(--space-4);
  z-index:1;
  width:44px;
  min-height:44px;
  padding:0;
  background:var(--paper-soft);
  border-color:rgb(var(--white-rgb) / .55);
  border-radius:999px;
  color:var(--ink);
  font-size:1.15rem;
  letter-spacing:0;
  line-height:1;
  box-shadow:0 4px 14px rgb(var(--black-rgb) / .4);
}
.lightbox-x:hover:not(:disabled){background:var(--white);color:var(--ink);transform:none}
@keyframes lightboxIn{from{opacity:0}to{opacity:1}}

/* 作废单据明细：缩略图按钮（可点放大，不带 href 跳转） */
.void-thumb{
  display:block;
  position:relative;
  width:76px;
  min-height:0;
  padding:0;
  background:transparent;
  border:0;
  border-radius:var(--radius-sm);
  line-height:0;
  cursor:zoom-in;
}
.void-thumb:hover:not(:disabled){background:transparent;transform:none;box-shadow:none}
.void-thumb img{
  width:76px;
  height:48px;
  border:1px solid var(--line-soft);
  border-radius:var(--radius-sm);
  object-fit:cover;
  transition:border-color var(--dur-fast) var(--ease-soft);
}
.void-thumb:hover img,.void-thumb:focus-visible img{border-color:var(--gold)}

/* 小屏：图片全宽，遮罩可滚动 */
@media(max-width:640px){
  .lightbox-overlay{padding:var(--space-3)}
  .lightbox-figure{max-width:100%;gap:var(--space-2)}
  .lightbox-card{width:100%;max-width:100%;padding:var(--space-1);border-radius:var(--radius-md)}
  .lightbox-img{width:100%;max-width:100%;max-height:none}
  .lightbox-meta{max-width:100%}
  .lightbox-x{top:var(--space-2);right:var(--space-2)}
}

/* ===== 客户龙虎榜 ===== */
#customer-ranking{
  --rank-name:1.05rem;
  --rank-money:1.25rem;
  --rank-money-list:1rem;
  --rank-meta:.78rem;
  --rank-sub:.75rem;
  --rank-badge:.68rem;
  --rank-vip:.72rem;
  --rank-gap:12px;
  --rank-podium-name:.95rem;
  --rank-podium-money:1rem;
  --rank-podium-company:.72rem;
}
.ranking-chips{display:flex;flex-wrap:wrap;gap:var(--space-2);margin-bottom:var(--space-4)}
.ranking-chips button{white-space:nowrap;background:var(--paper-deep);color:var(--ink);border-color:var(--line)}
.ranking-chips button.active{background:var(--ink);color:var(--paper)}
.ranking-chips button:hover:not(:disabled){background:var(--line);color:var(--ink)}
.ranking-chips button.active:hover:not(:disabled){background:var(--ink-soft);color:var(--paper)}
.ranking-summary{display:flex;flex-wrap:wrap;gap:var(--space-3);margin-bottom:var(--rank-gap)}
.ranking-summary .stat{flex:1 1 160px;max-width:260px;min-width:0;background:var(--white);border-color:var(--line);box-shadow:0 1px 3px rgb(var(--ink-rgb) / .04);padding:12px 14px}
.ranking-summary .stat strong{font-size:clamp(1rem,3vw,var(--rank-money));overflow:hidden;text-overflow:ellipsis}
.ranking-summary .stat span{font-size:var(--rank-meta)}
.ranking-summary .stat-muted strong{color:var(--ink-mute)}
.ranking-podium{display:flex;flex-wrap:wrap;justify-content:flex-start;align-items:flex-start;gap:12px;margin-bottom:var(--rank-gap)}
.ranking-podium[data-count="2"],.ranking-podium[data-count="1"]{max-width:none}
.ranking-podium-card{position:relative;display:flex;flex:0 0 auto;min-width:0;text-decoration:none;color:inherit;transition:border-color var(--dur-fast) var(--ease-soft),background var(--dur-fast) var(--ease-soft)}
.ranking-podium-card:hover .ranking-podium-card-inner{border-color:var(--gold-soft);background:var(--paper-soft)}
/* 等宽横向一排：名次从左到右、第 1 名最左；1–2 位收窄容器，不留空列也不把第 1 名居中 */
.ranking-podium-card-inner{position:relative;display:flex;flex:0 0 auto;flex-direction:column;align-items:center;justify-content:center;gap:8px;width:150px;height:150px;padding:10px;text-align:center;background:var(--white);border:1px solid var(--line);border-radius:12px;box-shadow:0 1px 3px rgb(var(--ink-rgb) / .04);transition:border-color var(--dur-fast) var(--ease-soft),background var(--dur-fast) var(--ease-soft)}
.ranking-podium-card.is-gold .ranking-podium-card-inner::before{content:"";position:absolute;top:-1px;left:12px;right:12px;height:1px;background:var(--gold)}
.ranking-podium-card .ranking-avatar{width:30px;height:30px;font-size:.78rem}
.ranking-podium-card .ranking-medal{position:static;right:auto;bottom:auto;min-width:18px;height:18px;padding:0 5px;background:var(--paper);font-size:var(--rank-badge);line-height:1;box-shadow:none}
.ranking-podium-value{display:block;min-width:0;width:100%}
.ranking-podium-value strong{display:block;max-width:100%;font-family:var(--font-sans);font-size:var(--rank-podium-money);font-weight:600;line-height:1.1;font-variant-numeric:tabular-nums;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--ink)}
.ranking-medal{min-width:22px;height:20px;display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;padding:0 6px;border-radius:999px;background:transparent;border:1px solid var(--line);color:var(--ink-mute);font-family:var(--font-mono);font-size:var(--rank-badge);font-weight:600;line-height:1;box-shadow:none}
.ranking-medal-gold{border-color:var(--gold);color:var(--gold-strong)}
.ranking-medal-silver{border-color:#b8bec8;color:#6f7680}
.ranking-medal-bronze{border-color:#c99a6f;color:#8a5a33}
.ranking-podium-copy{min-width:0;width:100%}
.ranking-podium-copy h3{display:flex;align-items:center;justify-content:center;gap:4px;min-width:0;margin:0;font-size:var(--rank-podium-name);font-weight:500;line-height:1.2;letter-spacing:0;overflow-wrap:anywhere}
.ranking-podium-name{min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.ranking-podium-copy p{margin:0;max-width:100%;color:var(--ink-mute);font-size:var(--rank-podium-company);line-height:1.25;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ranking-avatar{width:40px;height:40px;display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;border-radius:50%;background:hsl(var(--avatar-h,34) 34% 90%);color:hsl(var(--avatar-h,34) 40% 24%);font-family:var(--font-serif);font-size:.85rem;line-height:1;border:1px solid rgb(var(--gold-rgb) / .36);box-shadow:none}
.ranking-avatar-sm{width:32px;height:32px;font-size:.72rem}
.ranking-avatar-xs{width:24px;height:24px;font-size:.62rem}
.ranking-list{display:grid;gap:0;background:var(--white);border:1px solid var(--line);border-radius:var(--radius-md);box-shadow:0 1px 3px rgb(var(--ink-rgb) / .04);overflow:hidden}
.ranking-row{display:grid;grid-template-columns:28px 32px minmax(0,1fr) minmax(180px,auto);gap:4px 12px;align-items:center;min-height:46px;padding:4px 12px;background:transparent;border:0;border-bottom:1px solid var(--line-soft);border-radius:0;text-decoration:none;color:inherit;box-shadow:none;transition:background var(--dur-fast) var(--ease-soft)}
.ranking-row:last-child{border-bottom:0}
.ranking-row:hover{background:var(--paper-soft);box-shadow:none}
.ranking-rank{width:28px;height:20px;display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;border:0;border-radius:0;background:transparent;color:var(--ink-mute);font-family:var(--font-mono);font-size:.72rem;line-height:1;font-variant-numeric:tabular-nums}
.ranking-row-id{min-width:0;display:flex;flex-direction:column;gap:1px}
.ranking-row-id strong{font-size:var(--rank-name);font-weight:600;line-height:1.15;overflow-wrap:anywhere}
.ranking-vip{display:inline-flex;align-items:center;justify-content:center;margin-left:6px;padding:0 6px;border:1px solid rgb(var(--gold-rgb) / .5);border-radius:999px;background:rgb(var(--gold-rgb) / .08);color:var(--gold-strong);font-family:var(--font-sans);font-size:var(--rank-vip);font-weight:700;line-height:16px;letter-spacing:.06em;white-space:nowrap;vertical-align:baseline;text-shadow:none;box-shadow:none}
.ranking-podium-copy h3 .ranking-vip{margin-left:0;vertical-align:baseline}
.ranking-row-id em{font-style:normal;color:var(--ink-mute);font-size:var(--rank-sub);line-height:1.2;overflow-wrap:anywhere}
.ranking-row-value{min-width:0;display:flex;flex-direction:column;align-items:flex-end;gap:1px;text-align:right}
.ranking-row-value strong{font-family:var(--font-sans);font-size:var(--rank-money-list);font-weight:600;line-height:1.1;font-variant-numeric:tabular-nums;overflow-wrap:anywhere}
.ranking-row-value em{font-style:normal;color:var(--ink-faint);font-size:var(--rank-sub);line-height:1.1;font-variant-numeric:tabular-nums;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
.ranking-bar{display:block;width:100%;height:3px;background:var(--line-soft);border-radius:999px;overflow:hidden}
.ranking-bar i{display:block;height:100%;width:var(--rank-w);background:rgb(var(--gold-rgb) / .62);border-radius:999px;animation:rankGrow var(--dur-slow) var(--ease-out)}
@keyframes rankGrow{from{width:0}}
.ranking-empty{padding:var(--space-6) var(--space-4);margin-bottom:var(--rank-gap);text-align:center;color:var(--ink-faint);background:rgb(var(--paper-rgb) / .45);border:1px dashed var(--line);border-radius:var(--radius-md);display:flex;flex-direction:column;gap:var(--space-2)}
.ranking-empty strong{font-family:var(--font-serif);font-size:var(--rank-name);font-weight:500;color:var(--ink-mute)}
.ranking-empty span{font-size:var(--rank-meta)}
.ranking-zero{margin-top:var(--rank-gap);padding-top:var(--rank-gap);border-top:1px dashed var(--line-soft)}
.ranking-zero-title{display:flex;align-items:center;gap:var(--space-2);margin-bottom:var(--space-2);color:var(--ink-faint);font-size:var(--rank-meta);letter-spacing:.05em}
.ranking-zero-title span{margin-left:auto;font-variant-numeric:tabular-nums}
.ranking-zero-list{display:grid;gap:var(--space-2)}
.ranking-zero-row{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:var(--space-3);align-items:center;padding:8px 12px;background:rgb(var(--paper-rgb) / .42);border:1px solid var(--line-soft);border-radius:var(--radius-md);box-shadow:0 1px 3px rgb(var(--ink-rgb) / .04);color:var(--ink-faint);text-decoration:none;transition:border-color var(--dur-fast) var(--ease-soft),background var(--dur-fast) var(--ease-soft)}
.ranking-zero-row:hover{border-color:var(--gold-soft);background:var(--paper-soft)}
.ranking-zero-id{min-width:0;display:flex;flex-direction:column;gap:2px}
.ranking-zero-id strong{color:var(--ink-mute);font-size:var(--rank-meta);font-weight:500;overflow-wrap:anywhere}
.ranking-zero-id em{font-style:normal;color:var(--ink-faint);font-size:var(--rank-sub);overflow-wrap:anywhere}
.ranking-zero-sub{font-size:var(--rank-sub);color:var(--ink-faint);font-variant-numeric:tabular-nums;text-align:right}
@media(max-width:760px){
  .ranking-row{grid-template-columns:28px 32px minmax(0,1fr);gap:6px 10px}
  .ranking-row-value{grid-column:1/-1;align-items:flex-start;text-align:left}
  .ranking-row-value em{white-space:normal;overflow:visible;text-overflow:clip}
  .ranking-zero-row{grid-template-columns:auto minmax(0,1fr)}
  .ranking-zero-sub{grid-column:1/-1;text-align:left}
}

@media(max-width:640px){
  /* 领奖台：窄屏同样一行横向等宽排列，靠卡内截断控宽，不横向滚动 */
  .ranking-podium{gap:8px}
  .ranking-podium-card-inner{gap:5px;padding:6px;width:110px;height:110px;border-radius:10px}
  .ranking-podium-card .ranking-medal{min-width:16px;height:16px;padding:0 4px;font-size:.68rem}
  .ranking-podium-card .ranking-avatar{width:28px;height:28px;font-size:.72rem}
  .ranking-podium-copy h3{gap:3px;font-size:.78rem}
  .ranking-podium-copy h3 .ranking-vip{padding:0 5px;font-size:.68rem;line-height:14px;letter-spacing:0}
  .ranking-podium-copy p{font-size:.6rem}
  .ranking-podium-value strong{font-size:.82rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
}

/* 龙虎榜内容随数据多少浮动：不再强制撑满视口，收掉榜单下方的大片留白 */
body.ranking-page main{min-height:auto}
body.ranking-page .admin{padding-bottom:var(--space-5)}
body.ranking-page .admin-title{margin-bottom:var(--space-5)}
body.ranking-page .ranking-chips{margin-bottom:var(--space-3)}

/* ===== 「修改客户信息」弹窗：先选客户 → 再改信息（分区清晰 / 窄屏可用） ===== */
.cust-edit-picker{display:flex;flex-direction:column;gap:var(--space-3)}
.cust-edit-step{display:grid;gap:var(--space-2)}
.cust-edit-step-head{display:flex;align-items:flex-start;gap:var(--space-2)}
.cust-edit-step-no{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:999px;background:var(--gold);color:var(--white);font-size:var(--fs-caption);font-weight:600;line-height:1}
.cust-edit-step-copy{display:grid;gap:2px;min-width:0}
.cust-edit-step-copy strong{color:var(--ink);font-size:var(--fs-body)}
.cust-edit-step-copy small{color:var(--ink-mute);font-size:var(--fs-caption)}
.cust-edit-pick-row{display:grid;gap:var(--space-2)}
.cust-edit-pick-row input,.cust-edit-pick-row select{width:100%}
.cust-edit-divider{display:flex;align-items:center;gap:var(--space-2)}
.cust-edit-divider-label{color:var(--ink-mute);font-size:var(--fs-caption);letter-spacing:var(--ls-overline);white-space:nowrap}
.cust-edit-divider::before,.cust-edit-divider::after{content:'';flex:1 1 auto;height:1px;background:var(--line)}
.cust-edit-current{display:flex;flex-wrap:wrap;align-items:baseline;gap:var(--space-2);margin-bottom:var(--space-3);padding:var(--space-2) var(--space-3);background:var(--paper-soft);border:1px solid var(--gold-soft);border-radius:var(--radius-sm);font-size:var(--fs-small)}
.cust-edit-current strong{color:var(--ink)}
.cust-edit-current span{color:var(--ink-mute)}
#customer-edit-form .form-grid{grid-template-columns:repeat(auto-fit,minmax(min(170px,100%),1fr))}
@media(max-width:520px){
  .modal-body{padding-left:var(--space-4);padding-right:var(--space-4)}
}

/* ===== PC 来源列表：整料封面管理弹窗（增 / 删除 / 左移右移）=====
   「封面 (n)」按钮与弹窗只在 PC 来源列表使用；手机端不显示来源列表，轮播不动。 */
.source-cover-manage-btn{font-variant-numeric:tabular-nums}
.modal-overlay.is-busy .cover-manager{opacity:.55;pointer-events:none}
.cover-manager{display:grid;gap:var(--space-3);min-width:0}
.cover-manager-hint{margin:0;color:var(--ink-mute);font-size:var(--fs-caption);line-height:var(--lh-small)}
.cover-manager-hint strong{color:var(--ink)}
.cover-manager-empty{margin:0;padding:var(--space-5) 0;text-align:center;color:var(--ink-mute);font-size:var(--fs-small)}
.cover-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:var(--space-3)}
.cover-card{margin:0;display:grid;gap:var(--space-2);padding:var(--space-2);border:1px solid var(--line-soft);border-radius:var(--radius-sm);background:var(--paper-soft)}
.cover-card-media-wrap{position:relative}
.cover-card-media{width:100%;aspect-ratio:1.5;border-radius:var(--radius-sm);background-color:var(--paper-deep);background-position:center;background-size:cover}
.cover-card-no{position:absolute;top:var(--space-1);left:var(--space-1);min-width:22px;height:22px;display:inline-flex;align-items:center;justify-content:center;border-radius:999px;background:rgb(var(--black-rgb) / .62);color:var(--white);font-size:var(--fs-caption);font-weight:600;line-height:1}
.cover-card-badge{position:absolute;top:var(--space-1);left:34px;height:22px;display:inline-flex;align-items:center;padding:0 var(--space-2);border-radius:999px;background:var(--gold);color:var(--white);font-size:var(--fs-caption);line-height:1}
.cover-card-del{position:absolute;right:var(--space-1);bottom:var(--space-1);min-height:28px;padding:0 var(--space-2);border:1px solid rgb(var(--danger-rgb) / .5);border-radius:var(--radius-sm);background:rgb(var(--white-rgb) / .92);color:var(--danger-strong);font-size:var(--fs-caption);letter-spacing:0;cursor:pointer}
.cover-card-del:hover:not(:disabled){background:var(--danger);border-color:var(--danger);color:var(--white);transform:none;box-shadow:none}
.cover-card-move{display:flex;gap:var(--space-2)}
.cover-move-btn{flex:1 1 0;min-height:32px;padding:0 var(--space-2);border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--white);color:var(--ink);font-size:var(--fs-caption);letter-spacing:0;cursor:pointer}
.cover-move-btn:hover:not(:disabled){border-color:var(--gold);background:rgb(var(--gold-rgb) / .08);transform:none;box-shadow:none}
.cover-card-confirm{display:flex;align-items:center;gap:var(--space-2);flex-wrap:wrap;padding:var(--space-2);border:1px solid var(--danger);border-left-width:4px;border-radius:var(--radius-sm);background:var(--danger-soft);color:var(--danger-strong);font-size:var(--fs-caption);line-height:var(--lh-small)}
.cover-cancel-btn,.cover-confirm-btn{min-height:30px;padding:0 var(--space-2);border-radius:var(--radius-sm);font-size:var(--fs-caption);letter-spacing:0;cursor:pointer}
.cover-cancel-btn{border:1px solid var(--line);background:var(--white);color:var(--ink)}
.cover-cancel-btn:hover:not(:disabled){background:var(--line);transform:none;box-shadow:none}
.cover-confirm-btn{border:1px solid var(--danger);background:var(--danger);color:var(--white)}
.cover-confirm-btn:hover:not(:disabled){background:var(--danger-strong);transform:none;box-shadow:none}
.cover-manager-foot{display:flex;align-items:center;gap:var(--space-3);flex-wrap:wrap}
.cover-add-btn{min-height:38px;padding:0 var(--space-4);border:1px dashed var(--gold);border-radius:var(--radius-sm);background:rgb(var(--gold-rgb) / .08);color:var(--gold-strong);font-size:var(--fs-small);letter-spacing:0;cursor:pointer}
.cover-add-btn:hover:not(:disabled){background:rgb(var(--gold-rgb) / .16);transform:none;box-shadow:none}
.cover-manager-limit{color:var(--danger);font-size:var(--fs-caption)}
@media(max-width:640px){
  .cover-grid{grid-template-columns:repeat(auto-fill,minmax(140px,1fr))}
}

/* ===== PC 后台：手机端首页横幅面板 =====
   沿用 .panel / .cover-* 视觉体系，只新增选择器，不改动既有 .cover-* 规则。
   .cover-grid 用 min(px,100%) 兜底，1440 / 1024 / 768 三档都不会横向溢出。 */
.banner-panel{min-width:0}
.banner-panel-head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}
.banner-panel-head h2{margin-bottom:0}
.banner-panel-count{color:var(--ink-mute);font-size:var(--fs-small);font-variant-numeric:tabular-nums}
.banner-panel-count strong{color:var(--ink)}
.banner-panel .cover-manager-hint{margin-bottom:var(--space-3)}
.banner-panel .cover-grid{min-width:0;grid-template-columns:repeat(auto-fill,minmax(min(200px,100%),1fr))}
.banner-panel .cover-card{min-width:0}
.banner-panel .cover-card-media-wrap{min-width:0}
.banner-panel .cover-move-btn{min-width:0}
@media(max-width:768px){
  .banner-panel-head{gap:var(--space-2)}
  .banner-panel .cover-grid{grid-template-columns:repeat(auto-fill,minmax(min(180px,100%),1fr))}
}
@media(max-width:640px){
  .banner-panel .cover-grid{grid-template-columns:repeat(auto-fill,minmax(min(140px,100%),1fr))}
}

/* ===== PC 产品定价 / 销售定价（扎级定价）
   层级：整料选择区（无价格）→ 当前整料信息栏 → 扎级定价区（一扎一行）。
   只新增选择器，不改动既有规则；图片统一 4:3，输入框统一宽度，靠 CSS 变量对齐列。
   每行价格列 = 报价 / 整件底价 / 拆片底价 / 成本（owner）+ 操作列（提交 / 编辑）。 */
.pricing-page{--pricing-cols:64px 96px minmax(160px,1fr) 104px 104px 104px 104px 76px;--pricing-price-w:104px;--pricing-save-w:76px;}
.pricing-filters{grid-template-columns:minmax(150px,1fr) minmax(150px,1fr) minmax(220px,2fr) auto}
.pricing-filter{display:grid;gap:var(--space-2);min-width:0;color:var(--ink-mute);font-size:var(--fs-caption)}
.pricing-filter>select,.pricing-filter>input{width:100%;min-height:42px;padding:8px 12px;border:1px solid var(--line);border-radius:var(--radius-md);background:var(--white);color:var(--ink);font:inherit}
.pricing-block-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(220px,100%),1fr));gap:var(--space-4);margin-bottom:var(--space-5)}
.pricing-block{display:flex;flex-direction:column;max-width:340px;overflow:hidden;background:var(--white);border:1px solid var(--line);border-radius:var(--radius-md);box-shadow:var(--shadow-sm);cursor:pointer;transition:transform var(--dur) var(--ease-out),border-color var(--dur) var(--ease-out),box-shadow var(--dur) var(--ease-out)}
.pricing-block:hover{transform:translateY(-3px);border-color:var(--gold-soft);box-shadow:var(--shadow-md)}
.pricing-block.is-active{border-color:var(--gold);box-shadow:0 0 0 2px rgb(var(--gold-rgb) / .3),var(--shadow-md)}
.pricing-block.is-active .pricing-block-media::after{content:'';position:absolute;left:0;right:0;bottom:0;height:3px;background:var(--gold)}
.pricing-block-media{position:relative;width:100%;aspect-ratio:4 / 3;background-color:var(--paper-deep);background-position:center;background-repeat:no-repeat;background-size:cover;border-bottom:1px solid var(--line-soft)}
.pricing-block-count{position:absolute;right:var(--space-2);bottom:var(--space-2);padding:3px 9px;border-radius:999px;background:rgb(var(--black-rgb) / .62);color:var(--white);font-size:var(--fs-caption);letter-spacing:.02em}
.pricing-block-body{display:flex;flex-direction:column;gap:6px;padding:var(--space-3) var(--space-4) var(--space-4)}
.pricing-block-body h2{margin:0;font-size:var(--fs-body);font-weight:600;line-height:1.3;font-variant-numeric:tabular-nums}
.pricing-block-spec{color:var(--ink-mute);font-size:var(--fs-small);font-variant-numeric:tabular-nums}
.pricing-block-meta{display:flex;align-items:center;gap:var(--space-2);color:var(--ink-soft);font-size:var(--fs-small);flex-wrap:wrap}
.pricing-block-meta strong{font-variant-numeric:tabular-nums}
.pricing-block-meta i{width:3px;height:3px;border-radius:50%;background:var(--gold-soft)}
.pricing-current{display:flex;align-items:center;justify-content:space-between;gap:var(--space-4);flex-wrap:wrap;margin-bottom:var(--space-3);padding:var(--space-3) var(--space-4);border-left:2px solid var(--gold);background:rgb(var(--gold-rgb) / .07);border-radius:0 var(--radius-md) var(--radius-md) 0}
.pricing-current-main{display:flex;align-items:baseline;gap:var(--space-3);flex-wrap:wrap;min-width:0}
.pricing-current-code{font-family:var(--font-serif);font-size:var(--fs-h3);font-weight:600;font-variant-numeric:tabular-nums}
.pricing-current-species{color:var(--ink-soft)}
.pricing-current-count{color:var(--ink-mute);font-size:var(--fs-small);font-variant-numeric:tabular-nums}
.pricing-collapse{min-height:38px;padding:0 var(--space-3);border:1px solid var(--line);border-radius:var(--radius-md);background:var(--white);color:var(--ink-soft);font:inherit;font-size:var(--fs-small);cursor:pointer}
.pricing-collapse:hover{border-color:var(--gold-soft);color:var(--ink)}
.pricing-shelves-head{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--space-4);flex-wrap:wrap;margin-bottom:var(--space-4)}
.pricing-shelves-head h2{margin-bottom:2px}
.pricing-shelves-cols{display:grid;grid-template-columns:var(--pricing-cols);gap:var(--space-3);align-items:center;color:var(--ink-mute);font-size:var(--fs-caption);letter-spacing:.04em;text-align:right}
.pricing-shelf-list{display:flex;flex-direction:column}
.pricing-shelf-row{display:grid;grid-template-columns:var(--pricing-cols);gap:var(--space-3);align-items:center;padding:var(--space-3) 0;border-top:1px solid var(--line-soft)}
.pricing-shelf-row:first-child{border-top:0}
.pricing-shelf-row:hover{background:rgb(var(--gold-rgb) / .045)}
.pricing-cell{min-width:0;display:flex;flex-direction:column;gap:2px}
.pricing-cell-shelf{align-items:flex-start}
.pricing-shelf-no{font-family:var(--font-serif);font-size:var(--fs-h3);font-weight:600;font-variant-numeric:tabular-nums}
.pricing-cell-photo{width:96px}
.pricing-shelf-thumb{width:96px;aspect-ratio:4 / 3;overflow:hidden;background-color:var(--paper-deep);background-position:center;background-repeat:no-repeat;background-size:cover;border:1px solid var(--line-soft);border-radius:var(--radius-md)}
.pricing-shelf-thumb img{display:block;width:100%;height:100%;object-fit:cover}
.pricing-shelf-thumb img.is-broken{display:none}
.pricing-shelf-thumb:has(img.is-broken)::after{content:'无图';display:flex;width:100%;height:100%;align-items:center;justify-content:center;color:var(--ink-faint);font-size:var(--fs-caption)}
.pricing-shelf-spec{color:var(--ink);font-size:var(--fs-small);font-variant-numeric:tabular-nums;overflow-wrap:anywhere}
.pricing-shelf-sub{color:var(--ink-mute);font-size:var(--fs-caption)}
.pricing-cell-price{display:grid;grid-template-columns:var(--pricing-price-w) var(--pricing-price-w) var(--pricing-price-w) var(--pricing-price-w) var(--pricing-save-w);gap:var(--space-3);align-items:center;justify-content:start}
.pricing-input{width:100%;min-height:40px;padding:8px 10px;border:1px solid var(--line);border-radius:var(--radius-md);background:var(--white);color:var(--ink);font:inherit;font-size:var(--fs-small);font-variant-numeric:tabular-nums;text-align:right}
.pricing-input:focus{border-color:var(--gold);outline:none;box-shadow:0 0 0 2px rgb(var(--gold-rgb) / .16)}
.pricing-readonly{display:inline-flex;box-sizing:border-box;align-items:center;justify-content:flex-end;width:100%;min-height:40px;padding:8px 10px;border:1px dashed var(--line-soft);border-radius:var(--radius-md);color:var(--ink-soft);font-size:var(--fs-small);font-variant-numeric:tabular-nums}
.pricing-readonly-tag{display:inline-flex;align-items:center;justify-content:center;width:100%;min-height:40px;padding:8px 10px;border:1px dashed var(--line-soft);border-radius:var(--radius-md);color:var(--ink-faint);font-size:var(--fs-caption)}
.pricing-save{width:100%;box-sizing:border-box;min-height:40px;padding:0 var(--space-2);border:1px solid var(--gold);border-radius:var(--radius-md);background:var(--white);color:var(--gold-strong);font:inherit;font-size:var(--fs-small);font-weight:600;cursor:pointer;transition:background var(--dur-fast) var(--ease-soft),color var(--dur-fast) var(--ease-soft)}
.pricing-save:hover:not(:disabled){background:var(--gold);color:var(--white)}
.pricing-save:disabled{opacity:.55;cursor:progress}
.pricing-edit{width:100%;box-sizing:border-box;min-height:40px;padding:0 var(--space-2);border:1px solid var(--line);border-radius:var(--radius-md);background:var(--white);color:var(--ink-soft);font:inherit;font-size:var(--fs-small);font-weight:600;cursor:pointer;transition:background var(--dur-fast) var(--ease-soft),border-color var(--dur-fast) var(--ease-soft),color var(--dur-fast) var(--ease-soft)}
.pricing-edit:hover{background:var(--paper-soft);border-color:var(--gold-soft);color:var(--ink)}
.pricing-readonly-cost{color:var(--ink)}
.pricing-shelves-panel.is-collapsed .pricing-shelves-head{margin-bottom:0}
@media(max-width:1024px){
  .pricing-page{--pricing-cols:56px 84px minmax(140px,1fr) 96px 96px 96px 96px 72px;--pricing-price-w:96px;--pricing-save-w:72px}
  .pricing-cell-photo,.pricing-shelf-thumb{width:84px}
}
@media(max-width:768px){
  .pricing-filters{grid-template-columns:1fr 1fr}
  .pricing-filters>button{grid-column:1 / -1}
  .pricing-block{max-width:none}
  .pricing-page{--pricing-cols:44px 64px minmax(110px,1fr) 76px 76px 76px 76px 64px;--pricing-price-w:76px;--pricing-save-w:64px}
  .pricing-cell-photo,.pricing-shelf-thumb{width:64px}
  .pricing-shelves-head{gap:var(--space-2)}
  .pricing-shelves-cols{display:none}
}

/* ==========================================================================
   荒料管理（第一期）· PC
   暖白底 / 浅灰分割 / 深灰文字 / 棕灰石材色强调；全宽、无左侧导航栏。
   状态色：绿=在库、蓝=加工中、橙=待处理、灰=已售/历史。
   ========================================================================== */
.raw-page{
  max-width:none;
  padding-left:clamp(20px,3vw,56px);
  padding-right:clamp(20px,3vw,56px);
}
.raw-title{align-items:flex-start}
.raw-toolbar{
  display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-2);
  justify-content:flex-end;
}
.raw-toolbar select,.raw-toolbar input{
  min-height:40px;padding:0 var(--space-3);
  background:var(--white);color:var(--ink);
  border:1px solid var(--line);border-radius:var(--radius-sm);
  font-size:var(--fs-small);
}
.raw-search{min-width:min(280px,60vw)}
/* 【作用域限定：荒料库存管理 / 荒料销售管理 两页共用】
   .raw-toolbar 被 4 个页面共用（仓库管理 / 仓库调拨 / 荒料库存管理 / 荒料销售管理），
   所以修复必须挂在页面级钩子上，不能直接改 .raw-toolbar（曾误改全局，把荒料销售等三页带歪）。
   问题成因：全局 input,select,textarea{width:100%} 泄漏进来，在 flex 横排下把每个控件撑成
   整行宽 → 库存页 5 个筛选器竖排、工具栏右边缘比下方统计卡短 201px。
   收紧宽度后：工具栏与统计卡同宽、右边缘对齐，筛选器并为 1 行。
   【4.4 排版对齐】荒料销售管理已改成与库存页同一套排版（同一行 5 个筛选器 + 同一套 KPI / 小卡），
   因此这里把 .raw-sales-page 一起纳入同一组规则（库存页规则本身不变，只多一个选择器）。 */
.raw-stock-page .raw-toolbar,.raw-sales-page .raw-toolbar{width:100%}
.raw-stock-page .raw-toolbar select,.raw-stock-page .raw-toolbar input,
.raw-sales-page .raw-toolbar select,.raw-sales-page .raw-toolbar input{width:auto;min-width:0}
.raw-stock-page .raw-search,.raw-sales-page .raw-search{flex:1 1 220px;min-width:180px}
.raw-primary{
  min-height:40px;padding:0 var(--space-4);
  background:var(--gold);color:var(--white);
  border:1px solid var(--gold-strong);border-radius:var(--radius-sm);
  font-size:var(--fs-small);font-weight:600;letter-spacing:.02em;
  transition:background var(--dur-fast) var(--ease-soft);
}
.raw-primary:hover:not(:disabled){background:var(--gold-strong)}
.raw-primary:disabled{opacity:.5;cursor:not-allowed}
.raw-add{background:var(--ink);border-color:var(--black)}
.raw-add:hover:not(:disabled){background:var(--black)}
.raw-ghost{
  min-height:40px;padding:0 var(--space-4);
  background:transparent;color:var(--ink-soft);
  border:1px solid var(--line);border-radius:var(--radius-sm);font-size:var(--fs-small);
}
.raw-ghost:hover{background:var(--paper-deep)}

/* ---- 统计卡 ---- */
.raw-stats{
  display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));
  gap:var(--space-3);margin-bottom:var(--space-6);
}
.raw-kpi{
  display:flex;flex-direction:column;gap:var(--space-2);
  padding:var(--space-4);background:var(--white);
  border:1px solid var(--line-soft);border-left:3px solid var(--line);
  border-radius:var(--radius-md);box-shadow:var(--shadow-sm);
}
.raw-kpi-label{font-size:var(--fs-micro);color:var(--ink-faint);letter-spacing:var(--ls-overline)}
.raw-kpi-value{font-family:var(--font-serif-display);font-size:1.5rem;color:var(--ink);line-height:1.1}
.raw-kpi-value i{font-style:normal;font-size:var(--fs-small);color:var(--ink-mute);margin-left:4px}
.raw-kpi-stock{border-left-color:var(--success)}
.raw-kpi-weight{border-left-color:var(--gold)}
.raw-kpi-pending{border-left-color:#b07a2e}
.raw-kpi-cut{border-left-color:var(--ink-faint)}
.raw-kpi-processing{border-left-color:#3f6b8a}
.raw-kpi-sold{border-left-color:var(--ink-faint)}

/* ---- 卡片网格：小卡平铺（随窗口宽度自动换列，铺满可用宽度） ----
   实测（临时库 + 真实 Chromium 1280×900）：4 列 282.8×477.19 → 8 列 139.89×276.8，
   宽 ×0.49 / 高 ×0.58 / 面积 ×0.29（≈1/4）。再往 1/4 硬压需要拿掉卡片上已验收的
   「总成本（元）/吨成本（元/吨）」单位标签、或把字号压到 9px 以下，按「不要硬压到难看」
   取当前尺寸。主图 / 永久编号（醒目）/ 名称 / 尺寸 / 吨位 / 加工厂 / 总成本 / 状态
   全部保留；数值用原子行内块整块换行（见 .raw-fact-v），任何字段都不截断。 */
.raw-grid{
  display:grid;grid-template-columns:repeat(auto-fill,minmax(138px,1fr));
  gap:12px;
}
.raw-card{
  display:flex;flex-direction:column;text-decoration:none;color:inherit;
  background:var(--white);border:1px solid var(--line-soft);border-radius:var(--radius-md);
  overflow:hidden;box-shadow:var(--shadow-sm);
  transition:transform var(--dur) var(--ease-out),box-shadow var(--dur) var(--ease-out);
}
.raw-card:hover{transform:translateY(-2px);box-shadow:var(--shadow-md)}
.raw-card-media{aspect-ratio:4 / 3;background:var(--paper-deep);overflow:hidden}
.raw-card-media img{width:100%;height:100%;object-fit:cover;display:block}
.raw-card-media-empty{display:grid;place-items:center;color:var(--ink-faint);font-size:.6875rem;padding:4px;text-align:center}
.raw-card-body{padding:7px 7px 8px;display:flex;flex-direction:column;gap:3px}
.raw-card-top{display:flex;align-items:flex-start;justify-content:space-between;gap:5px;flex-wrap:wrap}
.raw-card-code{
  font-family:var(--font-mono);font-size:.875rem;font-weight:700;line-height:1.2;
  letter-spacing:.05em;color:var(--gold-strong);min-width:0;overflow-wrap:anywhere;
}
/* 状态标签同步缩小，但只作用于卡片（详情页沿用原尺寸） */
.raw-card-top .raw-tag{height:17px;padding:0 5px;font-size:.625rem;letter-spacing:.03em}
.raw-card-name{margin:0;font-size:.8125rem;font-weight:600;line-height:1.25;color:var(--ink);overflow-wrap:anywhere}
.raw-card-facts{display:flex;flex-direction:column;gap:0;margin-top:2px}
/* 标签与数值按**行内文本**排版：数值是原子行内块（inline-block），放不下时整块落到下一行，
   绝不把 ¥20,200.00 / ¥821.14/吨 这类金额从中间劈开；数值本身超长时才会在内部断词。 */
.raw-fact{display:block;font-size:.75rem;line-height:1.2;color:var(--ink-soft)}
.raw-fact i{font-style:normal;color:var(--ink-faint);font-size:.625rem;margin-right:2px}
.raw-fact-v{display:inline-block;max-width:100%;overflow-wrap:anywhere;vertical-align:top}
.raw-empty{
  grid-column:1 / -1;padding:var(--space-7);text-align:center;
  color:var(--ink-faint);background:var(--white);
  border:1px dashed var(--line);border-radius:var(--radius-md);
}
.raw-grid-count{margin-top:var(--space-4);color:var(--ink-faint);font-size:var(--fs-small)}

/* ---- 状态标签 ---- */
.raw-tag{
  display:inline-flex;align-items:center;height:24px;padding:0 10px;
  border-radius:999px;font-size:var(--fs-micro);letter-spacing:.06em;
  border:1px solid transparent;white-space:nowrap;
}
.raw-tag-stock{background:var(--success-soft);color:var(--success);border-color:#c3d3bd}
.raw-tag-processing{background:#dfe8ef;color:#2f5a76;border-color:#c2d5e2}
.raw-tag-pending{background:#f4e7d2;color:#8a5c17;border-color:#e6d2b0}
.raw-tag-cut,.raw-tag-sold{background:var(--paper-deep);color:var(--ink-mute);border-color:var(--line)}

/* ---- 详情页 ---- */
.raw-detail-head{
  display:flex;align-items:flex-end;justify-content:space-between;gap:var(--space-4);
  flex-wrap:wrap;margin-bottom:var(--space-5);
}
.raw-detail-code-row{display:flex;align-items:center;gap:var(--space-3);margin:var(--space-3) 0 var(--space-2)}
.raw-code-badge{
  font-family:var(--font-mono);font-size:2rem;font-weight:700;letter-spacing:.08em;
  color:var(--gold-strong);padding:2px 14px;
  background:rgb(var(--gold-rgb) / .10);border:1px solid var(--gold-soft);border-radius:var(--radius-sm);
}
.raw-detail-name{margin:0;font-size:var(--fs-h2)}
.raw-hero{display:grid;grid-template-columns:minmax(0,3fr) minmax(0,2fr);gap:var(--space-6);margin-bottom:var(--space-6)}
/* .raw-hero 是 grid，两栏默认等高拉伸：右栏堆了 5 个面板（约 1440px），左栏只有大图 + 缩略图（约 640px），
   图片下方因此留下约 800px 空白死区。让左栏贴合自身内容，并随滚动跟随右栏阅读。 */
.raw-hero-media{align-self:start;position:sticky;top:var(--space-4)}
.raw-stage{
  position:relative;background:var(--paper-deep);border-radius:var(--radius-lg);
  overflow:hidden;aspect-ratio:4 / 3;
  /* 第四轮修订：大图支持左右滑动切换 —— 横向手势交给 JS，纵向滚动照旧。 */
  touch-action:pan-y;
}
.raw-stage-img{width:100%;height:100%;object-fit:cover;display:block;touch-action:pan-y;-webkit-user-drag:none;user-select:none}
.raw-stage-empty{position:absolute;inset:0;display:grid;place-items:center;color:var(--ink-faint);font-size:var(--fs-small)}
.raw-stage-nav{
  position:absolute;top:50%;transform:translateY(-50%);
  width:44px;height:44px;border-radius:50%;
  border:1px solid rgb(var(--white-rgb) / .5);background:rgb(var(--black-rgb) / .32);
  color:var(--white);font-size:22px;line-height:1;display:grid;place-items:center;
}
.raw-stage-nav.prev{left:var(--space-3)}
.raw-stage-nav.next{right:var(--space-3)}
.raw-stage-count{
  position:absolute;right:var(--space-3);bottom:var(--space-3);
  padding:2px 10px;border-radius:999px;
  background:rgb(var(--black-rgb) / .42);color:var(--white);
  font-size:var(--fs-micro);font-family:var(--font-mono);
}
.raw-thumbs{display:flex;gap:var(--space-2);margin-top:var(--space-3);overflow-x:auto;padding-bottom:4px}
.raw-thumb{
  position:relative;flex:0 0 auto;width:76px;height:58px;padding:0;
  border:2px solid transparent;border-radius:var(--radius-sm);
  background:var(--paper-deep);overflow:hidden;
}
.raw-thumb img{width:100%;height:100%;object-fit:cover;display:block}
.raw-thumb.is-active{border-color:var(--gold)}
.raw-hero-info{display:flex;flex-direction:column;gap:var(--space-4);min-width:0}
.raw-block-panel{
  padding:var(--space-4);background:var(--white);
  border:1px solid var(--line-soft);border-radius:var(--radius-md);box-shadow:var(--shadow-sm);
}
.raw-block-panel h3{margin:0 0 var(--space-3);font-size:var(--fs-small);letter-spacing:var(--ls-overline);color:var(--ink-faint);font-weight:600}
.raw-info-list{margin:0;display:flex;flex-direction:column;gap:var(--space-2)}
.raw-info-list>div{display:flex;gap:var(--space-3);align-items:baseline;justify-content:space-between}
.raw-info-list dt{color:var(--ink-faint);font-size:var(--fs-small);white-space:nowrap}
.raw-info-list dd{margin:0;text-align:right;color:var(--ink-soft);font-size:var(--fs-small);overflow-wrap:anywhere}
.raw-info-list.compact{gap:6px}
.raw-info-list .highlight dt,.raw-info-list .highlight dd{color:var(--gold-strong);font-weight:700}
.raw-info-code{font-family:var(--font-mono);letter-spacing:.06em}

/* ---- TAB 已全部下线 ---- */
.raw-basic{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:var(--space-4)}

/* ---- 荒料照片区（第五轮修订：封面大图 + 缩略图 + 批量操作 + 全屏预览） ---- */
.raw-photo-manager-section{
  margin:var(--space-5) 0;padding:var(--space-5);
  background:var(--white);border:1px solid var(--line-soft);border-radius:var(--radius-md);
}
.raw-photo-manager-title{font-size:var(--fs-h3);color:var(--ink);margin-bottom:var(--space-2)}
.raw-photo-hint{color:var(--ink-mute);font-size:var(--fs-small);margin-bottom:var(--space-4)}
.raw-photo-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:var(--space-4)}
.raw-photo{
  margin:0;background:var(--white);border:1px solid var(--line-soft);
  border-radius:var(--radius-md);overflow:hidden;cursor:grab;
}
.raw-photo.is-dragging{opacity:.45;border-style:dashed}
.raw-photo.is-cover{border-color:var(--gold)}
.raw-photo-media{position:relative;aspect-ratio:4 / 3;background:var(--paper-deep)}
.raw-photo-media img{width:100%;height:100%;object-fit:cover;display:block}
.raw-photo-no{
  position:absolute;left:var(--space-2);top:var(--space-2);
  min-width:22px;height:22px;padding:0 6px;border-radius:999px;
  background:rgb(var(--black-rgb) / .5);color:var(--white);
  font-size:var(--fs-micro);display:grid;place-items:center;font-family:var(--font-mono);
}
.raw-photo-cover-tag{
  position:absolute;right:var(--space-2);top:var(--space-2);
  padding:1px 8px;border-radius:999px;background:var(--gold);color:var(--white);font-size:var(--fs-micro);
}
.raw-photo-bar{display:flex;flex-wrap:wrap;gap:4px;padding:var(--space-2)}
.raw-photo-btn{
  flex:1 1 auto;min-height:32px;padding:0 8px;font-size:var(--fs-micro);
  background:var(--paper-soft);border:1px solid var(--line);border-radius:var(--radius-sm);color:var(--ink-soft);
}
.raw-photo-btn:hover:not(:disabled){background:var(--paper-deep)}
.raw-photo-btn:disabled{opacity:.45;cursor:not-allowed}
.raw-photo-btn.danger{color:var(--danger);border-color:#e3c9c6}
.raw-photo-foot{display:flex;align-items:center;gap:var(--space-3);margin-top:var(--space-4)}
/* 操作行：上=【删除】【移动位置】，下=【上传照片】【选择照片】；顺序即 DOM 顺序。 */
.raw-photo-foot-actions{margin-top:var(--space-4);flex-wrap:wrap}
.raw-photo-foot-upload{margin-top:var(--space-3);flex-wrap:wrap}
.raw-photo-act{
  min-height:40px;padding:0 var(--space-5);font-size:var(--fs-small);
  background:var(--paper-soft);border:1px solid var(--line);border-radius:var(--radius-sm);color:var(--ink-soft);
}
.raw-photo-act:hover:not(:disabled){background:var(--paper-deep)}
.raw-photo-act:disabled{opacity:.45;cursor:not-allowed}
.raw-photo-act.danger{color:var(--danger);border-color:#e3c9c6}
.raw-photo-act.is-active{background:var(--gold);border-color:var(--gold);color:var(--white)}
.raw-photo-limit{color:var(--ink-faint);font-size:var(--fs-small)}
.raw-photo-input{display:none}
/* 勾选模式：照片卡 / 缩略图左上角出现复选框（复选框占据左上角，序号角标让位到复选框右侧） */
.raw-photo-check,.raw-thumb-check{position:absolute;left:var(--space-2);top:var(--space-2);z-index:2;display:grid;place-items:center}
.raw-thumb-check{left:4px;top:4px}
.raw-photo.is-selecting{cursor:pointer}
.raw-photo.is-selecting .raw-photo-no{left:32px}
.raw-photo-checkbox{width:18px;height:18px;margin:0;accent-color:var(--gold-strong);cursor:pointer}
.raw-photo.is-picked,.raw-thumb.is-picked{outline:2px solid var(--gold-strong);outline-offset:-2px}

/* ---- 全屏大图预览（第五轮修订）：N / 10 + ← → / 横滑 + ✕ 或点图外关闭 ---- */
body.raw-preview-open{overflow:hidden}
.raw-preview-overlay{
  position:fixed;inset:0;z-index:400;display:grid;place-items:center;
  background:rgb(var(--black-rgb) / .86);backdrop-filter:blur(3px);
  animation:rawPreviewIn 160ms var(--ease-out);
}
@keyframes rawPreviewIn{from{opacity:0}to{opacity:1}}
.raw-preview-box{position:relative;display:flex;flex-direction:column;align-items:center;gap:var(--space-3);max-width:96vw;max-height:96vh}
.raw-preview-stage{position:relative;display:flex;align-items:center;justify-content:center;touch-action:pan-y}
.raw-preview-img{
  display:block;max-width:min(1200px,92vw);max-height:84vh;object-fit:contain;
  border-radius:var(--radius-sm);background:rgb(var(--black-rgb) / .35);user-select:none;
  -webkit-user-drag:none;touch-action:pan-y;
}
.raw-preview-count{
  padding:2px 14px;border-radius:999px;background:rgb(var(--black-rgb) / .5);
  color:var(--white);font-family:var(--font-mono);font-size:var(--fs-small);
}
.raw-preview-x{
  position:absolute;right:-6px;top:-48px;width:40px;height:40px;border-radius:50%;
  background:rgb(var(--black-rgb) / .5);border:1px solid rgb(var(--white-rgb,255 255 255) / .3);
  color:var(--white);font-size:16px;line-height:1;
}
.raw-preview-x:hover{background:rgb(var(--black-rgb) / .75)}
.raw-preview-nav{
  position:absolute;top:50%;transform:translateY(-50%);width:44px;height:64px;
  background:rgb(var(--black-rgb) / .35);border:0;border-radius:var(--radius-sm);
  color:var(--white);font-size:26px;line-height:1;
}
.raw-preview-nav.prev{left:-56px}
.raw-preview-nav.next{right:-56px}
.raw-preview-nav:hover{background:rgb(var(--black-rgb) / .55)}
@media(max-width:700px){
  .raw-preview-nav.prev{left:2px}
  .raw-preview-nav.next{right:2px}
  .raw-preview-x{right:0;top:-44px}
  .raw-preview-img{max-width:94vw;max-height:78vh}
}

/* ---- 操作日志 ---- */
.raw-log-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--space-3)}
.raw-log-item{
  padding:var(--space-4);background:var(--white);
  border:1px solid var(--line-soft);border-left:3px solid var(--gold-soft);border-radius:var(--radius-md);
}
.raw-log-head{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-3)}
.raw-log-action{font-weight:700;color:var(--gold-strong)}
.raw-log-time{color:var(--ink-faint);font-size:var(--fs-small);font-family:var(--font-mono)}
.raw-log-operator{color:var(--ink-mute);font-size:var(--fs-small)}
.raw-log-summary{margin-top:var(--space-2);color:var(--ink-soft);font-size:var(--fs-small)}
.raw-log-diff{width:100%;margin-top:var(--space-3);border-collapse:collapse;font-size:var(--fs-small)}
.raw-log-diff th,.raw-log-diff td{padding:6px 10px;border-top:1px solid var(--line-soft);text-align:left}
.raw-log-diff thead th{color:var(--ink-faint);font-weight:600;border-top:0}
.raw-log-before{color:var(--ink-mute);text-decoration:line-through}
.raw-log-after{color:var(--success);font-weight:600}

/* ---- 新增/编辑抽屉 ---- */
body.raw-drawer-open{overflow:hidden}
.raw-drawer-overlay{
  position:fixed;inset:0;z-index:200;display:flex;justify-content:flex-end;
  background:rgb(var(--black-rgb) / .38);backdrop-filter:blur(2px);
}
.raw-drawer{
  width:min(760px,100vw);height:100%;display:flex;flex-direction:column;
  background:var(--paper-soft);border-left:1px solid var(--line);
  box-shadow:var(--shadow-lg);animation:rawDrawerIn var(--dur) var(--ease-out);
}
@keyframes rawDrawerIn{from{transform:translateX(24px);opacity:.6}to{transform:none;opacity:1}}
.raw-drawer-head{
  display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-4);
  padding:var(--space-5) var(--space-6);border-bottom:1px solid var(--line);background:var(--white);
}
.raw-drawer-head h2{margin:var(--space-2) 0 0;font-size:var(--fs-h2)}
.raw-drawer-x{
  width:40px;height:40px;border:1px solid var(--line);border-radius:var(--radius-sm);
  background:transparent;color:var(--ink-mute);font-size:20px;line-height:1;
}
.raw-drawer-x:hover{background:var(--paper-deep)}
.raw-drawer-body{flex:1;overflow-y:auto;padding:var(--space-5) var(--space-6)}
.raw-drawer-section{margin-bottom:var(--space-6)}
.raw-drawer-section h3{
  margin:0 0 var(--space-3);font-size:var(--fs-small);
  letter-spacing:var(--ls-overline);color:var(--ink-faint);font-weight:600;
}
.raw-drawer-note{
  margin:0 0 var(--space-3);padding:var(--space-3);
  background:rgb(var(--gold-rgb) / .08);border-left:3px solid var(--gold-soft);
  color:var(--ink-soft);font-size:var(--fs-small);border-radius:var(--radius-sm);
}
.raw-form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:var(--space-3)}
.raw-form-grid.three{grid-template-columns:repeat(3,minmax(0,1fr))}
.raw-field{display:flex;flex-direction:column;gap:6px;min-width:0}
.raw-field-label{font-size:var(--fs-small);color:var(--ink-mute)}
.raw-field-label i{font-style:normal;color:var(--ink-faint);margin-left:6px;font-size:var(--fs-micro)}
.raw-field input,.raw-field select,.raw-field textarea{
  width:100%;min-height:40px;padding:8px var(--space-3);
  background:var(--white);border:1px solid var(--line);border-radius:var(--radius-sm);
  color:var(--ink);font-size:var(--fs-small);font-family:inherit;
}
.raw-field textarea{min-height:76px;resize:vertical}
.raw-drawer-foot{
  display:flex;align-items:center;gap:var(--space-3);
  padding:var(--space-4) var(--space-6);border-top:1px solid var(--line);background:var(--white);
}
.raw-drawer-err{flex:1;color:var(--danger);font-size:var(--fs-small)}

/* ---- 第一期修订：成本实时算式 / 必填校验 / 新增表单照片区 ---- */
/* 成本算式：单价（元/吨）× 吨位 = 总额 → 基础总成本 → 吨成本，全部带单位。 */
.raw-calc{
  margin-top:var(--space-3);padding:var(--space-3);
  background:rgb(var(--gold-rgb) / .08);border-left:3px solid var(--gold-soft);
  border-radius:var(--radius-sm);display:flex;flex-direction:column;gap:4px;
}
.raw-calc-row{font-size:var(--fs-small);color:var(--ink-soft);line-height:1.7;overflow-wrap:anywhere}
.raw-calc-row strong{color:var(--gold-strong)}
/* 必填未填：字段级红框，配合页脚的中文提示文案。 */
.raw-field input.is-invalid,.raw-field select.is-invalid,.raw-field textarea.is-invalid{
  border-color:var(--danger);box-shadow:0 0 0 2px rgb(158 66 61 / .14);
}
.raw-fact-cost{color:var(--gold-strong);font-weight:600}
.raw-drawer-photo-input{display:none}
.raw-photo-size{padding:0 var(--space-2) var(--space-2);color:var(--ink-faint);font-size:var(--fs-micro);overflow-wrap:anywhere}
/* 日志差异表：长文本一律换行，避免任何宽度下把页面顶出横向滚动。 */
.raw-log-diff{table-layout:fixed;overflow-wrap:anywhere}
.raw-log-diff th:first-child,.raw-log-diff td:first-child{width:24%}

/* ---- 第二期 · 切分荒料 ---- */
/* 子料标识：卡片 / 详情页都靠它区分「子料 · 母 M023」与普通荒料。 */
.raw-tag-child{background:#e7e2f3;color:#4c3f78;border-color:#cfc6e8}
/* 母料详情里的子料卡片网格：窄屏自动换行（auto-fill），**不产生横向滚动**。 */
.raw-children-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:var(--space-3)}
.raw-child-card{
  display:flex;flex-direction:column;gap:6px;padding:var(--space-3);
  background:var(--white);border:1px solid var(--line-soft);border-radius:var(--radius-md);
  text-decoration:none;color:inherit;min-width:0;
}
.raw-child-card:hover{border-color:var(--gold)}
.raw-child-card-top{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.raw-child-card-facts{display:flex;flex-direction:column;gap:2px;font-size:.75rem;color:var(--ink-soft);overflow-wrap:anywhere}
.raw-child-card-facts i{font-style:normal;color:var(--ink-faint);font-size:.625rem;margin-right:4px}
/* 切分面板：比新增抽屉宽一些，容纳逐行添加的分料。 */
.raw-split-drawer{width:min(980px,100vw)}
.raw-split-rows{display:flex;flex-direction:column;gap:var(--space-4)}
.raw-split-row{
  background:var(--white);border:1px solid var(--line-soft);border-radius:var(--radius-md);
  padding:var(--space-4);display:flex;flex-direction:column;gap:var(--space-3);min-width:0;
}
.raw-split-row-head{display:flex;align-items:center;gap:var(--space-3);flex-wrap:wrap}
.raw-split-row-no{font-size:var(--fs-small);font-weight:700;color:var(--ink)}
.raw-split-code{display:inline-flex;align-items:baseline;gap:6px;min-width:0}
.raw-split-code i{font-style:normal;font-size:var(--fs-micro);color:var(--ink-faint)}
.raw-split-code-value{
  font-family:var(--font-mono);font-size:var(--fs-body);color:var(--gold-strong);
  background:var(--paper-deep);border:1px dashed var(--line);border-radius:var(--radius-sm);
  padding:2px 8px;overflow-wrap:anywhere;
}
.raw-split-remove{margin-left:auto}
.raw-split-cost-row{
  display:flex;align-items:flex-end;gap:var(--space-3);flex-wrap:wrap;
  padding:var(--space-3);background:var(--paper-deep);border-radius:var(--radius-sm);
  font-size:var(--fs-small);color:var(--ink-soft);overflow-wrap:anywhere;
}
.raw-split-cost-row strong{color:var(--gold-strong)}
.raw-split-cost-hint{color:var(--ink-faint);font-size:var(--fs-micro)}
.raw-split-manual{flex:0 0 190px}
.raw-split-photo-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:var(--space-2)}
.raw-split-photos{margin-top:var(--space-2)}
.raw-split-check{
  display:flex;flex-wrap:wrap;gap:var(--space-4);padding:var(--space-3);
  background:var(--paper-deep);border:1px solid var(--line-soft);border-radius:var(--radius-sm);
  font-size:var(--fs-small);color:var(--ink-soft);
}
.raw-split-check strong{color:var(--ink);font-family:var(--font-mono)}
/* 合计 > 原始重量：醒目红色警告（**仍允许提交**，用户明确要求）。 */
.raw-split-warn{
  margin-bottom:var(--space-3);padding:var(--space-3) var(--space-4);
  background:#fdecea;border:1px solid #e0b4ae;border-left:5px solid var(--danger);
  border-radius:var(--radius-sm);color:#8f2f28;font-size:var(--fs-small);overflow-wrap:anywhere;
}
.raw-split-warn[hidden]{display:none}
.raw-split-cost-form{display:flex;align-items:flex-end;gap:var(--space-3);flex-wrap:wrap;margin-top:var(--space-3)}
.raw-split-cost-form .raw-field{flex:1 1 200px}

/* ===== 第二期 · 补丁 A：当前去向（已整块下线，.raw-destination-edit 规则随之删除） ===== */
.raw-status-hint{display:block;margin-top:2px;color:var(--ink-faint);font-size:var(--fs-micro);text-align:right}


@media(max-width:1024px){
  .raw-hero{grid-template-columns:1fr}
}
@media(max-width:700px){
  .raw-toolbar{width:100%;justify-content:flex-start}
  .raw-search{min-width:100%}
  .raw-form-grid.three{grid-template-columns:1fr}
  .raw-drawer{width:100vw}
  .raw-code-badge{font-size:1.5rem}
}

/* ============================================================================
   分仓（第三期 · 南泰 / 澳盛）
   荒料 / 整料卡片与详情页的仓库标识、改归属 / 调仓面板、调仓历史列表。
   布局一律用 flex + wrap + min-width:0，窄屏（900/390/360/320）不产生横向滚动。
   ============================================================================ */
.raw-fact-warehouse .raw-fact-v{color:var(--ink)}
.raw-warehouse-edit{display:inline-flex;align-items:center;gap:var(--space-2);flex-wrap:wrap;min-width:0}
.raw-warehouse-current{font-weight:700;color:var(--ink)}
.raw-warehouse-readonly{
  padding:6px 10px;border:1px solid var(--line-soft);border-radius:var(--radius-sm);
  background:var(--paper-deep);color:var(--ink-soft);font-size:var(--fs-small);
}
.raw-warehouse-panel .raw-warehouse-history{display:flex;flex-direction:column;gap:var(--space-2);min-width:0}
.raw-warehouse-history-row{
  display:flex;flex-wrap:wrap;align-items:center;gap:4px var(--space-3);
  padding:6px 10px;border:1px solid var(--line-soft);border-radius:var(--radius-sm);
  background:var(--paper-deep);font-size:var(--fs-small);color:var(--ink-soft);
  min-width:0;max-width:100%;overflow-wrap:anywhere;
}
.raw-warehouse-history-row .rwh-route{font-weight:700;color:var(--ink)}
.raw-warehouse-history-row .rwh-note{color:var(--ink-faint)}
.raw-warehouse-history-row .rwh-action{
  margin-left:auto;padding:1px 8px;border-radius:999px;border:1px solid var(--line-soft);
  background:#fff;font-size:var(--fs-micro);color:var(--ink-soft);white-space:nowrap;
}
.raw-warehouse-form{display:flex;flex-direction:column;gap:var(--space-3);min-width:0}
.raw-kpi-warehouse-scope .raw-kpi-value-text{font-size:var(--fs-small)}
.inventory-warehouse-line{margin-top:2px}
.inventory-warehouse-line strong{color:var(--ink)}
.inventory-block-actions{
  display:flex;gap:var(--space-2);justify-content:flex-end;flex-wrap:wrap;
  padding:0 var(--space-3) var(--space-3);
}
.inventory-warehouse-summary{padding:var(--space-2) var(--space-3)}
.inventory-warehouse-stats{
  display:flex;flex-wrap:wrap;gap:4px var(--space-4);font-size:var(--fs-small);color:var(--ink-soft);min-width:0;
}
.inventory-warehouse-stats strong{color:var(--ink)}
.block-warehouse-form{display:flex;flex-direction:column;gap:var(--space-3);min-width:0}
.block-warehouse-history{display:flex;flex-direction:column;gap:var(--space-2);min-width:0}
.block-warehouse-history-row{
  display:flex;flex-wrap:wrap;align-items:center;gap:4px var(--space-3);
  padding:6px 10px;border:1px solid var(--line-soft);border-radius:var(--radius-sm);
  background:var(--paper-deep);font-size:var(--fs-small);color:var(--ink-soft);min-width:0;overflow-wrap:anywhere;
}
.block-warehouse-history-row .bwh-route{font-weight:700;color:var(--ink)}

/* ===== 第四期 · 荒料销售（列表卡片入口 / 重量摘要 / 销售记录列表 / 销售单抽屉） ===== */
/* 销售记录四要素 = 客户 / 重量（吨）/ 成交金额 / 成本 → 毛利 = 成交金额 − 成本（成本与毛利仅 owner 渲染）。 */
/* 销售管理列表：每颗荒料的照片（有图显示、无图占位）。
   【4.4 排版对齐】卡片媒体区直接用库存页的 .raw-card-media / .raw-card-media-empty
   （4 / 3 比例、占位文案一致），这里只保留图片元素本身的规则；
   销售页自己那套 .raw-sale-card-media / -img-empty 已随卡片改写删除。 */
.raw-sale-card-img{width:100%;height:100%;object-fit:cover;display:block}
.raw-card-sale-row{margin-top:6px;display:flex}
.raw-card-sale{width:100%;min-height:30px;padding:0 8px;font-size:.75rem;letter-spacing:.02em}
/* 【4.4】同一行的小卡等高：把这颗【销售】按钮压到卡片底部，行内按钮对齐（与库存页卡片同高同距）。 */
.raw-sales-page .raw-card-body{flex:1}
.raw-sales-page .raw-card-sale-row{margin-top:auto;padding-top:6px}

/* ===== 第九轮修订 · 状态口径收敛 + 批量已切板 + 加入订单（草稿） =====
   卡片结构：.raw-card-item（网格项 / position:relative）> .raw-card（原样，仍是链接）
   + .raw-card-check（图片上的复选框，绝对定位，不参与卡片跳转）。 */
.raw-card-item{position:relative;display:flex;flex-direction:column}
.raw-card-item>.raw-card{height:100%}
.raw-card-check{
  position:absolute;top:6px;left:6px;z-index:3;display:inline-flex;align-items:center;
  padding:3px;margin:0;cursor:pointer;border-radius:6px;
  background:rgb(255 255 255 / .92);border:1px solid var(--line-soft);
  box-shadow:0 1px 3px rgb(0 0 0 / .18);
}
.raw-card-check.is-disabled{cursor:not-allowed;opacity:.75;background:rgb(240 240 240 / .92)}
.raw-card-check-input{width:18px;height:18px;margin:0;cursor:pointer;accent-color:var(--gold-strong)}
.raw-card-check-input:disabled{cursor:not-allowed}
.raw-card-check-box{display:none}
.raw-card-item.is-picked>.raw-card{border-color:var(--gold-strong);box-shadow:0 0 0 2px rgb(var(--gold-rgb) / .28)}
.raw-card-media{position:relative}
/* 图上红字「已切板」：状态 = 已切板 时覆盖在卡片图片上。 */
.raw-card-cut-tag{
  position:absolute;right:6px;top:6px;z-index:2;
  font-size:.75rem;font-weight:800;letter-spacing:.06em;
  color:#c62828;background:rgb(255 255 255 / .92);
  padding:1px 6px;border-radius:4px;border:1px solid #ef9a9a;
}
.raw-card-lock-note{
  margin-top:4px;font-size:.6875rem;font-weight:700;color:#c62828;line-height:1.25;overflow-wrap:anywhere;
}
.raw-tag-cut-done{background:#fdecea;color:#c62828;border-color:#ef9a9a;font-weight:700}
/* 【第十三轮 ·「已订」】荒料挂在**待审核**的荒料销售单上（与「已切板」同一层级的展示口径）。 */
.raw-tag-ordered{background:#e9e3f5;color:#5b3fa8;border-color:#cfc2e8;font-weight:700}
/* 【本次统一 · 荒料「订单进行中」】被占用（已进订单草稿 / 已在荒料销售单）的荒料：
   卡片边框 + 勾选框变红，并标注「订单进行中」，点勾选框给提示（透明热点接住禁用的复选框）。
   「荒料库存管理」与「荒料销售管理」两页共用这一套（与大板同一套标记）。 */
.raw-card-item[data-raw-lock-state="occupied"]>.raw-card{border-color:#e60012}
.raw-card-item[data-raw-lock-state="occupied"]>.raw-card:hover{border-color:#e60012;box-shadow:0 0 0 2px rgb(230 0 18 / .18)}
.raw-card-item[data-raw-lock-state="occupied"]>.raw-card-check{border:1.5px solid #e60012;background:#fdecec;opacity:1}
.raw-card-item[data-raw-lock-state="occupied"] .raw-card-check-input{accent-color:#e60012}
.raw-card-check-hit{position:absolute;inset:-2px;z-index:4;cursor:not-allowed;border-radius:8px}
.raw-tag-order-active{background:#fdecec;color:#c4000f;border-color:#e60012;font-weight:700}
/* 【第十三轮】「订单草稿」列表页：类型标签（大板 / 荒料），两类草稿混排时一眼区分。 */
.draft-kind-tag{display:inline-flex;align-items:center;height:22px;padding:0 9px;border-radius:999px;
  font-size:var(--fs-micro);letter-spacing:.06em;border:1px solid transparent;white-space:nowrap;font-weight:700}
.draft-kind-tag[data-draft-kind-tag="大板"]{background:#e2ecf6;color:#2f5a76;border-color:#c4d7e4}
.draft-kind-tag[data-draft-kind-tag="荒料"]{background:#f4e7d2;color:#8a5c17;border-color:#e6d2b0}
/* 【第十二轮】动作按钮（库存页【提交已切板】/ 销售页【加入订单】）统一放在
   「筛选 / 操作区之后、卡片网格正上方」的独立动作行里（与手机端同一相对位置）。 */
.raw-action-row{display:flex;justify-content:flex-end;align-items:center;margin:0 0 var(--space-3)}
.raw-action-row .raw-cut-submit,.raw-action-row .raw-add-order{width:auto;min-width:160px;max-width:260px}
.raw-cut-submit,.raw-add-order{min-height:34px;padding:0 14px;font-size:.8125rem;letter-spacing:.02em}
.raw-cut-submit:disabled,.raw-add-order:disabled{opacity:.5;cursor:not-allowed}
/* 订单草稿独立列表页：整行可点（点行 = 继续编辑）。 */
.raw-draft-row-clickable:hover{background:rgb(0 0 0 / .03)}
/* 荒料订单草稿页（二级页面）：客户只读 + 逐颗填价 + 移除 + 底部【继续添加】【提交订单】。 */
.raw-draft-page .raw-block-panel{margin-bottom:var(--space-4)}
.raw-draft-customer-name{margin:0 0 6px;font-size:var(--fs-h3);font-weight:700;overflow-wrap:anywhere}
.raw-draft-items{display:flex;flex-direction:column;gap:10px}
.raw-de-item{
  display:grid;grid-template-columns:88px minmax(0,1fr) 190px 130px 118px auto;
  gap:10px;align-items:center;padding:10px;
  background:var(--white);border:1px solid var(--line-soft);border-radius:var(--radius-sm);
}
.raw-de-thumb{width:88px;aspect-ratio:4 / 3;background:var(--paper-deep);border-radius:var(--radius-sm);overflow:hidden}
.raw-de-thumb img{width:100%;height:100%;object-fit:cover;display:block}
.raw-de-main{min-width:0}
.raw-de-code-row{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.raw-de-code{font-family:var(--font-mono);font-weight:700;color:var(--gold-strong);letter-spacing:.05em}
.raw-de-meta{font-size:var(--fs-small);color:var(--ink-faint);margin-top:2px;overflow-wrap:anywhere}
.raw-de-field{display:flex;flex-direction:column;gap:4px;min-width:0}
.raw-de-field>span{font-size:var(--fs-micro);color:var(--ink-faint)}
.raw-de-field em{font-style:normal;color:var(--ink-faint)}
.raw-de-field input{
  width:100%;padding:6px 8px;border:1px solid var(--line);border-radius:var(--radius-sm);
  font-size:var(--fs-small);font-variant-numeric:tabular-nums;
}
.raw-de-weight[readonly]{background:var(--paper-deep);color:var(--ink-faint)}
/* 【第九轮修订 · 吨位可改】输入框前先显示荒料档案原始吨位作参考，其后才是可改输入框。 */
.raw-de-weight-line{display:flex;align-items:center;gap:6px;min-width:0}
.raw-de-weight-line .raw-de-weight{flex:1 1 auto;min-width:0;width:auto}
.raw-de-orig{flex:none;font-size:var(--fs-micro);color:var(--ink-faint);background:var(--paper-deep);
  border:1px solid var(--line);border-radius:999px;padding:2px 7px;white-space:nowrap}
/* 超原始吨位 = 黄字提示；吨位非法 = 红字提示。（`.raw-de-field>span` 是 (0,1,1)，
   这里的 (0,2,0) 才能盖过它，避免两处提示被统一成 --ink-faint。） */
.raw-de-field>.raw-de-warn{font-size:var(--fs-micro);color:#b26a00;font-weight:600}
.raw-de-field>.raw-de-error{font-size:var(--fs-micro);color:#c62828;font-weight:600}
.raw-de-warn[hidden],.raw-de-error[hidden]{display:none}
.raw-de-amount{display:flex;flex-direction:column;gap:2px}
.raw-de-amount>span{font-size:var(--fs-micro);color:var(--ink-faint)}
.raw-de-amount strong{font-variant-numeric:tabular-nums}
.raw-de-remove{align-self:center}
.raw-draft-form{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:10px}
.raw-draft-form .raw-field{display:flex;flex-direction:column;gap:6px}
.raw-draft-form .raw-field-wide{grid-column:1 / -1}
/* 【本轮 · 订单信息区】未收金额 = 总金额 − 已收金额（自动生成 → 输入框只读、不可改）；
   已收金额超过总金额 → 按总金额封顶并给黄字提示（PC 与手机端同一句文案）。
   【本轮 · 荒料订单页】逐颗勾选 →【移除选中】/【返回修改】：工具栏直接复用大板销售的
   .customer-selection-toolbar，只补一处上下间距。 */
.raw-draft-form #raw-draft-unpaid[readonly]{background:var(--paper-deep);color:var(--ink-faint);cursor:default}
.raw-draft-form .raw-field>.raw-draft-paid-warn{font-size:var(--fs-micro);color:#b26a00;font-weight:600}
.raw-draft-paid-warn[hidden]{display:none}
#raw-order-selection{margin:var(--space-2) 0 var(--space-4)}
.raw-draft-form input,.raw-draft-form textarea{
  width:100%;padding:7px 9px;border:1px solid var(--line);border-radius:var(--radius-sm);font-size:var(--fs-small);
}
.raw-draft-foot{
  display:flex;align-items:center;justify-content:space-between;gap:var(--space-4);flex-wrap:wrap;
  padding:var(--space-4);background:var(--white);border:1px solid var(--line-soft);
  border-radius:var(--radius-md);box-shadow:var(--shadow-sm);
}
.raw-draft-summary{display:flex;flex-direction:column;gap:2px;min-width:180px}
.raw-draft-total-line{display:flex;justify-content:space-between;gap:16px;font-size:var(--fs-small);color:var(--ink-soft)}
.raw-draft-total-line.big{font-size:var(--fs-h3);color:var(--ink);font-weight:700}
.raw-draft-actions{display:flex;gap:10px}
/* 订单管理 · 草稿行两个按钮**并排一行**（需求 D1）。 */
.draft-row-actions{display:flex;gap:8px;flex-wrap:nowrap;align-items:center}
/* 【4.4】销售记录区：小卡网格下方按荒料分块（复用 rawSalesPanelHtml 的那一份面板样式），
   间距 / 标题沿用荒料页既有令牌，不新造一套。 */
.raw-sales-records{display:flex;flex-direction:column;gap:var(--space-4)}
.raw-sales-records:not(:empty){margin-top:var(--space-5)}
.raw-sales-records-title{
  margin:0 0 var(--space-2);font-size:var(--fs-caption);color:var(--ink-faint);
  letter-spacing:var(--ls-overline);font-weight:600;
}
.raw-weight-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(72px,1fr));gap:6px}
.raw-weight-cell{
  display:flex;flex-direction:column;gap:2px;padding:6px 8px;min-width:0;
  background:var(--paper-deep);border:1px solid var(--line-soft);border-radius:var(--radius-sm);
}
.raw-weight-label{font-size:var(--fs-micro);color:var(--ink-faint);letter-spacing:var(--ls-overline)}
.raw-weight-value{font-size:var(--fs-small);color:var(--ink);font-variant-numeric:tabular-nums;overflow-wrap:anywhere}
.raw-weight-cell.is-highlight{border-color:var(--gold);background:rgb(var(--gold-rgb) / .06)}
.raw-weight-cell.is-highlight .raw-weight-value{color:var(--gold-strong);font-weight:700}
.raw-sale-readonly{display:flex;gap:var(--space-3);align-items:flex-start;min-width:0}
.raw-sale-cover{width:96px;flex:0 0 96px;aspect-ratio:4 / 3;overflow:hidden;border-radius:var(--radius-sm);background:var(--paper-deep)}
.raw-sale-cover img{width:100%;height:100%;object-fit:cover;display:block}
.raw-sale-cover-empty{display:grid;place-items:center;height:100%;padding:4px;color:var(--ink-faint);font-size:.625rem;text-align:center}
.raw-sale-readonly .raw-info-list{flex:1;min-width:0}
.raw-sale-new-customer{margin-top:6px}
.raw-sale-new-customer-form{margin-top:8px;padding:var(--space-3);border:1px dashed var(--line);border-radius:var(--radius-sm);background:var(--paper-deep)}
.raw-sale-nc-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(150px,100%),1fr));gap:6px}
.raw-sale-nc-grid input,.raw-sale-nc-grid select{min-height:36px;width:100%}
.raw-sale-nc-foot{display:flex;align-items:center;gap:var(--space-2);margin-top:8px;flex-wrap:wrap}
.raw-sale-nc-foot .raw-drawer-err{flex:1;min-width:120px}
.raw-sale-block-code{display:block;font-size:var(--fs-caption);color:var(--ink-faint)}
/* 荒料销售计价统一（A）：吨位 / 成交金额只读展示（自动 = 单价 × 吨位），算式单行展示。 */
.raw-sale-readonly-input{background:var(--paper-deep);color:var(--ink);font-variant-numeric:tabular-nums;cursor:default}
.raw-sale-formula{margin:2px 0 10px;padding:8px 10px;border:1px dashed var(--line);border-radius:var(--radius-sm);background:var(--paper-soft);color:var(--ink-mute);font-size:var(--fs-small);font-variant-numeric:tabular-nums;overflow-wrap:anywhere}
.raw-sale-formula-inline{font-variant-numeric:tabular-nums;color:var(--ink-mute)}
/* 订单管理（C）：整料单 / 荒料单同表 → 类型标签「整料 / 荒料」。 */
.order-type-badge{display:inline-block;padding:2px 8px;border-radius:999px;font-size:var(--fs-caption);line-height:1.5;font-weight:600;white-space:nowrap}
.order-type-badge.is-raw{background:rgb(var(--gold-rgb) / .14);color:var(--gold-strong);border:1px solid rgb(var(--gold-rgb) / .35)}
.order-type-badge.is-slab{background:var(--paper-deep);color:var(--ink-mute);border:1px solid var(--line-soft)}
.raw-order-detail .mapping-table{min-width:0}
.customer-quote-card.quote-raw-block{border-left:3px solid rgb(var(--gold-rgb) / .55)}
.raw-sale-order-link{color:var(--gold-strong);font-weight:600;white-space:nowrap}
/* 销售记录表：宽屏真表格（外层容器兜底横向滚动），≤1400 卡片化（沿用既有 mapping-table 的响应式口径） */
.raw-sales-wrap{max-width:100%;overflow-x:auto;border-radius:var(--radius-md);-webkit-overflow-scrolling:touch}
.raw-sales-table{width:100%;min-width:760px;border-spacing:0}
.raw-sales-table th,.raw-sales-table td{padding:10px 12px;line-height:1.45;overflow-wrap:anywhere}
.raw-sales-table th{white-space:nowrap;text-align:left;font-size:var(--fs-caption);color:var(--ink-faint);letter-spacing:var(--ls-overline);font-weight:600}
.raw-sales-table td.num,.raw-sales-table th.num{text-align:right;white-space:nowrap;font-variant-numeric:tabular-nums}
.raw-sales-table tbody tr{border-top:1px solid var(--line-soft)}
@media(max-width:1400px){
  .raw-sales-wrap{overflow-x:visible}
  .raw-sales-table{display:block;width:100%;min-width:0;border-spacing:0}
  .raw-sales-table thead{display:none}
  .raw-sales-table tbody{display:flex;flex-direction:column;gap:var(--space-3)}
  .raw-sales-table tbody tr{
    display:flex;flex-direction:column;padding:var(--space-3);
    background:var(--white);border:1px solid var(--line);border-radius:var(--radius-md);box-shadow:var(--shadow-sm);
  }
  .raw-sales-table td{
    display:flex;flex-wrap:wrap;align-items:center;gap:4px var(--space-3);padding:6px 0;
    border-bottom:1px dashed var(--line-soft);text-align:left;white-space:normal;line-height:1.45;overflow-wrap:anywhere;
  }
  .raw-sales-table tbody tr>td:last-child{border-bottom:0}
  .raw-sales-table td::before{
    content:attr(data-label);flex:0 0 84px;color:var(--ink-mute);font-size:var(--fs-caption);font-weight:600;letter-spacing:.02em;
  }
  .raw-sales-table td.num{justify-content:space-between}
  .raw-sales-table td>*{min-width:0;max-width:100%}
}

/* ============================================================================
   第五期 · 仓库管理（仅 owner）：新增 / 改名 / 停用·启用 / 上移·下移。
   列表用 flex 行（不用 table），窄屏自动改纵向堆叠，保证无横向滚动。
   ============================================================================ */
.warehouse-manage-list{padding:var(--space-4);display:flex;flex-direction:column;gap:var(--space-2)}
.warehouse-manage-empty{padding:var(--space-5);text-align:center;color:var(--ink-mute)}
.warehouse-row{
  display:flex;align-items:center;gap:var(--space-3);flex-wrap:wrap;
  padding:var(--space-3);border:1px solid var(--line);border-radius:var(--radius-md);
  background:var(--white);box-shadow:var(--shadow-sm);
}
.warehouse-cell{min-width:0}
.warehouse-order{display:flex;align-items:center;gap:6px;flex:0 0 auto}
.warehouse-order-no{font-weight:700;color:var(--ink-mute);min-width:18px;text-align:center}
.warehouse-order-btns{display:inline-flex;gap:4px}
.warehouse-move{padding:2px 8px;line-height:1.4}
.warehouse-name{flex:1 1 160px;font-weight:700;font-size:var(--fs-body);overflow-wrap:anywhere}
.warehouse-status{
  flex:0 0 auto;padding:2px 10px;border-radius:999px;font-size:var(--fs-caption);font-weight:600;
  border:1px solid var(--line);
}
.warehouse-status.is-active{color:#1a7f4b;border-color:#bfe3cd;background:#effaf3}
.warehouse-status.is-inactive{color:var(--ink-mute);border-color:var(--line);background:var(--paper-deep)}
.warehouse-usage{flex:0 0 auto;color:var(--ink-mute);font-size:var(--fs-caption)}
.warehouse-actions{display:flex;gap:6px;flex-wrap:wrap;flex:0 0 auto}
.warehouse-manage-note{padding:var(--space-4);color:var(--ink-mute);font-size:var(--fs-caption);line-height:1.7}
.warehouse-manage-note p{margin:0 0 6px}
.warehouse-manage-note p:last-child{margin-bottom:0}
.warehouse-form-field{display:flex;flex-direction:column;gap:6px;font-weight:600}
.warehouse-form-field input{
  width:100%;padding:8px 10px;border:1px solid var(--line);border-radius:var(--radius-sm);
  font-size:var(--fs-body);box-sizing:border-box;
}
@media(max-width:900px){
  .warehouse-row{align-items:flex-start}
  .warehouse-name{flex:1 1 100%}
  .warehouse-actions{flex:1 1 100%}
}

/* ============================================================================
   第八轮修订 · 自绘客户下拉（PC 与手机端同一个控件 / 同一套口径）
   弃用原生 datalist：微信内置浏览器不弹候选列表。面板挂在 body 上（position:fixed），
   不被抽屉 / 表格的 overflow 裁掉；最后一项固定【＋ 新增客户】。
   ============================================================================ */
.cust-combo-panel{
  position:fixed;z-index:3000;min-width:200px;max-width:min(92vw,420px);
  overflow:auto;overscroll-behavior:contain;
  background:var(--white,#fff);border:1px solid var(--line,#e5e0d8);border-radius:var(--radius-md,10px);
  box-shadow:0 16px 40px rgba(42,37,30,.18);padding:4px;
}
.cust-combo-list{display:flex;flex-direction:column;min-width:0}
.cust-combo-item{
  display:flex;flex-direction:column;gap:2px;align-items:flex-start;width:100%;min-width:0;
  min-height:42px;padding:8px 10px;border:0;border-radius:8px;background:transparent;
  text-align:left;color:var(--ink,inherit);cursor:pointer;
}
.cust-combo-item.is-active,.cust-combo-item:hover{background:var(--gold-soft,rgba(176,122,46,.12))}
.cust-combo-name{font-weight:700;font-size:14px;overflow-wrap:anywhere}
.cust-combo-meta{font-size:12px;color:var(--ink-faint,#8a8378);overflow-wrap:anywhere}
.cust-combo-new{margin-top:4px;border-top:1px solid var(--line,#e5e0d8);border-radius:0 0 8px 8px}
.cust-combo-new .cust-combo-name{color:var(--gold-dark,#805b2d)}
.cust-combo-empty{padding:10px;color:var(--ink-faint,#8a8378);font-size:12px}
.result.sync-warn{margin-top:8px;padding:8px 10px;border-radius:8px;background:rgba(176,122,46,.12);color:#805b2d;font-size:13px;display:flex;flex-wrap:wrap;gap:8px;align-items:center}

/* ============================================================================
   第六期 · 仓库调拨（仅 owner）：选货（荒料整颗 / 大板按片）→ 从 A 仓 → B 仓 → 记录 + 撤回。
   全部用 flex / 可换行布局，窄屏自动纵向堆叠，保证无横向滚动。
   ============================================================================ */
.warehouse-transfer-page .wt-form{display:flex;gap:var(--space-4);padding:var(--space-4);align-items:flex-start;flex-wrap:wrap}
.warehouse-transfer-page .wt-col{flex:1 1 420px;min-width:0;display:flex;flex-direction:column;gap:var(--space-3)}
.warehouse-transfer-page .wt-col-route{flex:0 1 320px}
.wt-goods-head{display:flex;align-items:center;gap:var(--space-3);flex-wrap:wrap}
.wt-goods-head h2{margin:0;font-size:var(--fs-body)}
.wt-kind-switch{display:inline-flex;border:1px solid var(--line);border-radius:var(--radius-sm);overflow:hidden}
.wt-kind{padding:6px 12px;border:0;background:var(--white);cursor:pointer;font-size:var(--fs-caption);white-space:nowrap}
.wt-kind.active{background:var(--gold-soft,rgba(176,122,46,.14));font-weight:700;color:var(--gold-dark,#805b2d)}
.wt-field{display:flex;flex-direction:column;gap:6px;font-weight:600;min-width:0}
.wt-field span{font-size:var(--fs-caption);color:var(--ink-mute)}
.wt-field select,.wt-field input{
  width:100%;padding:8px 10px;border:1px solid var(--line);border-radius:var(--radius-sm);
  font-size:var(--fs-body);box-sizing:border-box;min-width:0;
}
.wt-note{margin:0;color:var(--ink-mute);font-size:var(--fs-caption);line-height:1.7}
.wt-route-line{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:0}
.wt-route-line select{flex:1 1 140px;min-width:0;padding:8px 10px;border:1px solid var(--line);border-radius:var(--radius-sm)}
.wt-arrow{color:var(--gold-dark,#805b2d);font-weight:700}
.wt-submit{align-self:flex-start}
.wt-submit[disabled]{opacity:.5;cursor:not-allowed}
.wt-slab-groups{display:flex;flex-direction:column;gap:var(--space-3);max-height:420px;overflow:auto}
.wt-shelf-group{border:1px solid var(--line);border-radius:var(--radius-md);padding:var(--space-3)}
.wt-shelf-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:8px}
.wt-shelf-head h3{margin:0;font-size:var(--fs-caption)}
.wt-shelf-count{color:var(--ink-mute);font-size:var(--fs-caption)}
.wt-slab-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:8px}
.wt-slab{display:flex;align-items:center;gap:8px;padding:6px 8px;border:1px solid var(--line);border-radius:var(--radius-sm);cursor:pointer;min-width:0}
.wt-slab.is-selected{border-color:var(--gold-dark,#805b2d);background:var(--gold-soft,rgba(176,122,46,.12))}
.wt-slab-code{font-weight:700;overflow-wrap:anywhere}
.wt-slab-wh{color:var(--ink-mute);font-size:var(--fs-caption)}
.wt-slab-area{color:var(--ink-mute);font-size:var(--fs-caption);margin-left:auto;white-space:nowrap}
.wt-selbar{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.wt-selected{font-weight:700}
.wt-empty{color:var(--ink-mute);margin:0}
.wt-records{padding:var(--space-4)}
.wt-records-head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}
.wt-records-head h2{margin:0;font-size:var(--fs-body)}
.wt-filters{display:flex;gap:10px;flex-wrap:wrap;align-items:flex-end;margin:var(--space-3) 0}
.wt-filter{display:flex;flex-direction:column;gap:4px;font-size:var(--fs-caption);color:var(--ink-mute);min-width:0}
.wt-filter input,.wt-filter select{padding:7px 9px;border:1px solid var(--line);border-radius:var(--radius-sm);min-width:0}
.wt-filter-q{flex:1 1 200px}
.wt-filter-q input{width:100%;box-sizing:border-box}
.wt-table-wrap{width:100%;overflow-x:auto}
.wt-table{width:100%;border-collapse:collapse;font-size:var(--fs-caption)}
.wt-table th,.wt-table td{padding:8px 10px;border-bottom:1px solid var(--line);text-align:left;vertical-align:top}
.wt-table th{color:var(--ink-mute);font-weight:600;white-space:nowrap}
.wt-table td{overflow-wrap:anywhere}
.wt-sub{color:var(--ink-mute);font-size:var(--fs-caption)}
.block-detail-actions{display:flex;flex-direction:column;align-items:flex-end;gap:8px}
.block-warehouse-summary-line{margin-top:6px;overflow-wrap:anywhere;color:var(--ink-mute);font-size:var(--fs-caption);line-height:1.7}
@media(max-width:900px){
  .warehouse-transfer-page .wt-col,.warehouse-transfer-page .wt-col-route{flex:1 1 100%}
  .wt-table thead{display:none}
  .wt-table,.wt-table tbody,.wt-table tr,.wt-table td{display:block;width:100%}
  .wt-table tr{border:1px solid var(--line);border-radius:var(--radius-md);margin-bottom:10px;padding:8px}
  .wt-table td{display:flex;gap:10px;border:0;padding:4px 2px}
  .wt-table td::before{content:attr(data-label);flex:0 0 84px;color:var(--ink-mute);font-weight:600}
}

/* ============================================================================
   访问记录 /【全球访客行为与客户意向系统】· 全宽 Dashboard 视觉系统
   高级、克制、现代、数据感强、留白充分；不使用大块蓝色、密集边框与廉价渐变。
   所有栅格在窄屏自动落成单列，**任何宽度下都不产生横向滚动**。
   ========================================================================== */
body.visitor-dashboard-page .admin{max-width:none;padding-left:clamp(12px,2.6vw,44px);padding-right:clamp(12px,2.6vw,44px)}
.vt-dash{display:block}
.vt-dash *{min-width:0}
.vt-range{display:flex;gap:var(--space-2);align-items:center;flex-wrap:wrap;justify-content:flex-end}
.vt-range input[type=date]{padding:6px 8px;border:1px solid var(--line);border-radius:8px;background:var(--white);color:var(--ink);font:inherit;font-size:var(--fs-small)}
.vt-range-btn{border:1px solid var(--line);background:transparent;color:var(--ink-mute);border-radius:999px;padding:6px 14px;font:inherit;font-size:var(--fs-small);cursor:pointer;letter-spacing:.02em}
.vt-range-btn:hover{border-color:var(--gold-soft);color:var(--ink)}
.vt-range-btn.active{background:var(--ink);border-color:var(--ink);color:var(--paper)}
.vt-sub{color:var(--ink-faint);font-size:var(--fs-small);letter-spacing:.02em}

.vt-kpis{display:grid;grid-template-columns:repeat(8,minmax(0,1fr));gap:var(--space-3);margin-bottom:var(--space-5)}
.vt-kpi{display:flex;flex-direction:column;gap:2px;align-items:flex-start;text-align:left;padding:var(--space-4);background:rgb(var(--white-rgb) / .8);border:1px solid var(--line-soft);border-radius:var(--radius-md);cursor:pointer;font:inherit;transition:border-color .18s ease,transform .18s ease}
.vt-kpi:hover{border-color:var(--gold-soft);transform:translateY(-1px)}
.vt-kpi.is-static{cursor:default}
.vt-kpi-label{color:var(--ink-faint);font-size:var(--fs-small);letter-spacing:.04em}
.vt-kpi-value{font-family:var(--font-serif-display);font-size:clamp(1.5rem,2.4vw,2.1rem);line-height:1.1;color:var(--ink)}
.vt-kpi-delta{font-size:var(--fs-small);color:var(--ink-faint)}
.vt-kpi-delta.is-up{color:var(--success)}
.vt-kpi-delta.is-down{color:var(--danger)}
.vt-kpi-prev{font-size:.76rem;color:var(--ink-faint)}
.vt-kpi-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:var(--space-3)}
.vt-kpi-cell{display:flex;flex-direction:column;gap:2px;padding:var(--space-3);border:1px solid var(--line-soft);border-radius:10px;background:rgb(var(--paper-rgb) / .5)}
.vt-kpi-cell span{font-size:var(--fs-small);color:var(--ink-faint)}
.vt-kpi-cell strong{font-family:var(--font-serif-display);font-size:1.35rem;color:var(--ink)}

.vt-grid-2{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(0,1fr);gap:var(--space-4);align-items:start}
.vt-panel{padding:var(--space-5)}
.vt-empty-inline{color:var(--ink-faint);font-size:var(--fs-small);padding:var(--space-3) 0}
.vt-empty-cell{color:var(--ink-faint);text-align:center;padding:var(--space-5)}

/* 地图 */
.vt-map-wrap{display:grid;grid-template-columns:minmax(0,1fr) 190px;gap:var(--space-4);align-items:start}
.vt-map{width:100%;height:auto;display:block;border:1px solid var(--line-soft);border-radius:12px;background:rgb(var(--paper-rgb) / .55)}
.vt-map-bg{fill:transparent}
.vt-map-grid line{stroke:var(--line);stroke-width:.6;opacity:.55}
.vt-map-label{fill:var(--ink-faint);font-size:13px;letter-spacing:.08em;opacity:.5}
.vt-dot circle{fill:rgb(var(--gold-rgb) / .28);stroke:var(--gold-strong);stroke-width:1.2;cursor:pointer;transition:fill .18s ease}
.vt-dot:hover circle{fill:rgb(var(--gold-rgb) / .5)}
.vt-dot.is-active circle{fill:rgb(var(--ink-rgb) / .5);stroke:var(--ink)}
.vt-dot text{fill:var(--ink-soft);font-size:11px;text-anchor:middle;pointer-events:none;letter-spacing:.02em}
.vt-map-side{display:flex;flex-direction:column;gap:var(--space-2)}
.vt-map-hint{font-size:.78rem;color:var(--ink-faint);line-height:1.5}
.vt-map-legend-wrap{display:flex;flex-direction:column;gap:4px;max-height:210px;overflow:auto}
.vt-map-legend{display:flex;justify-content:space-between;gap:6px;border:1px solid var(--line-soft);background:transparent;border-radius:8px;padding:5px 8px;font:inherit;font-size:var(--fs-small);color:var(--ink-soft);cursor:pointer;text-align:left}
.vt-map-legend:hover{border-color:var(--gold-soft)}
.vt-map-legend.is-active{background:var(--ink);color:var(--paper);border-color:var(--ink)}
.vt-city-list{display:flex;flex-wrap:wrap;gap:6px;margin-top:var(--space-3)}
.vt-city{border:1px solid var(--line-soft);background:transparent;border-radius:999px;padding:4px 10px;font:inherit;font-size:.78rem;color:var(--ink-mute);cursor:pointer}
.vt-city strong{margin-left:6px;color:var(--ink)}
.vt-city:hover{border-color:var(--gold-soft)}

/* 趋势 */
.vt-trend svg{width:100%;height:190px;display:block}
.vt-trend-area{fill:rgb(var(--gold-rgb) / .12);stroke:none}
.vt-trend-line{fill:none;stroke:var(--gold-strong);stroke-width:2;stroke-linejoin:round}
.vt-trend-bar{fill:rgb(var(--ink-rgb) / .12)}
.vt-trend-dot{fill:var(--white);stroke:var(--gold-strong);stroke-width:2;cursor:pointer}
.vt-trend-legend{display:flex;gap:var(--space-4);align-items:center;color:var(--ink-faint);font-size:var(--fs-small);margin-top:var(--space-2);flex-wrap:wrap}
.vt-trend-legend i{display:inline-block;width:14px;height:3px;margin-right:6px;vertical-align:middle}
.vt-trend-legend i.is-line{background:var(--gold-strong)}
.vt-trend-legend i.is-bar{background:rgb(var(--ink-rgb) / .25)}
.vt-trend-summary{display:flex;gap:6px;flex-wrap:wrap;margin-top:var(--space-3)}
.vt-trend-chip{display:flex;flex-direction:column;gap:1px;border:1px solid var(--line-soft);background:transparent;border-radius:10px;padding:6px 10px;font:inherit;font-size:.78rem;color:var(--ink-mute);cursor:pointer;text-align:left}
.vt-trend-chip:hover{border-color:var(--gold-soft)}
.vt-trend-chip strong{font-size:1rem;color:var(--ink)}
.vt-trend-chip em{font-style:normal;color:var(--ink-faint);font-size:.72rem}
.vt-hint{color:var(--ink-faint)}

/* 来源 / 热门石材 */
.vt-source-list{display:flex;flex-direction:column;gap:6px}
.vt-source-item{display:flex;align-items:baseline;gap:var(--space-3);border:1px solid var(--line-soft);background:transparent;border-radius:10px;padding:8px 12px;font:inherit;cursor:pointer;text-align:left;flex-wrap:wrap}
.vt-source-item:hover{border-color:var(--gold-soft)}
.vt-source-item.is-active{border-color:var(--ink);background:rgb(var(--ink-rgb) / .04)}
.vt-source-item span{min-width:74px;color:var(--ink-soft)}
.vt-source-item strong{font-size:1.2rem;color:var(--ink)}
.vt-source-item em{font-style:normal;color:var(--ink-faint);font-size:var(--fs-small)}
.vt-tabs{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:var(--space-3)}
.vt-tab{border:1px solid var(--line-soft);background:transparent;border-radius:999px;padding:5px 12px;font:inherit;font-size:var(--fs-small);color:var(--ink-mute);cursor:pointer}
.vt-tab.active{background:var(--ink);border-color:var(--ink);color:var(--paper)}
.vt-hot-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:var(--space-3)}
/* 每一项两段式：左侧大按钮 = 打开石材详情；右侧小按钮 = 查看关注该石材的访客。 */
.vt-hot-item{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;align-items:center;border:1px solid var(--line-soft);border-radius:10px;padding:8px 10px;font:inherit}
.vt-hot-item:hover{border-color:var(--gold-soft)}
.vt-hot-open{display:grid;gap:2px;border:0;background:transparent;padding:2px 4px;font:inherit;cursor:pointer;text-align:left;color:inherit;border-radius:8px}
.vt-hot-open:focus-visible{outline:2px solid var(--gold-soft);outline-offset:2px}
.vt-hot-visitors{flex:0 0 auto;border:1px solid var(--line-soft);background:transparent;border-radius:999px;padding:6px 12px;font:inherit;font-size:var(--fs-small);color:var(--ink-mute);cursor:pointer;white-space:nowrap}
.vt-hot-visitors:hover{border-color:var(--gold-soft);color:var(--ink)}
.vt-hot-name{font-weight:600;color:var(--ink)}
.vt-hot-meta{color:var(--ink-faint);font-size:.8rem}
.vt-hot-time{color:var(--gold-strong);font-size:.76rem}
.vt-entity-list{display:flex;flex-direction:column;gap:6px;max-height:60vh;overflow:auto}
.vt-entity-visitor{display:grid;gap:2px;border:1px solid var(--line-soft);border-radius:10px;padding:8px 10px;background:transparent;font:inherit;text-align:left;cursor:pointer;color:var(--ink-soft)}
.vt-entity-visitor:hover{border-color:var(--gold-soft)}
.vt-entity-behaviors{color:var(--ink-faint);font-size:.76rem}

/* 实时访客流 / 表格 */
.vt-filters{display:flex;gap:var(--space-2);flex-wrap:wrap;align-items:center;margin-bottom:var(--space-3)}
.vt-search{flex:1 1 240px;min-width:180px;padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:var(--white);font:inherit;font-size:var(--fs-small);color:var(--ink)}
.vt-filters select{padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:var(--white);font:inherit;font-size:var(--fs-small);color:var(--ink)}
.vt-checks{display:flex;gap:var(--space-3);flex-wrap:wrap}
.vt-check{display:flex;align-items:center;gap:4px;font-size:var(--fs-small);color:var(--ink-mute)}
.vt-filter-tag{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--gold-soft);border-radius:999px;padding:3px 10px;font-size:.78rem;color:var(--ink-soft)}
.vt-filter-tag button{border:none;background:transparent;cursor:pointer;color:var(--ink-faint)}
.vt-table-wrap{width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}
.vt-table{width:100%;border-collapse:collapse;font-size:var(--fs-small)}
.vt-table th{text-align:left;color:var(--ink-faint);font-weight:500;letter-spacing:.04em;padding:8px 10px;border-bottom:1px solid var(--line)}
.vt-table td{padding:10px;border-bottom:1px solid var(--line-soft);color:var(--ink-soft);white-space:nowrap}
.vt-row{cursor:pointer}
.vt-row:hover td{background:rgb(var(--gold-rgb) / .06)}
.vt-code{font-family:var(--font-mono);color:var(--ink);letter-spacing:.02em}
.vt-tag{margin-left:6px;padding:1px 6px;border-radius:999px;border:1px solid var(--line);font-size:.7rem;color:var(--ink-faint)}
.vt-tag.is-cust{border-color:var(--success);color:var(--success)}
.vt-chip{padding:2px 8px;border-radius:999px;font-size:.72rem;border:1px solid var(--line);color:var(--ink-mute)}
.vt-st-worth{border-color:var(--gold-strong);color:var(--gold-strong)}
.vt-st-contact{border-color:var(--success);color:var(--success)}
.vt-st-inquire{border-color:var(--gold-strong);color:var(--gold-strong);background:rgb(var(--gold-rgb) / .1)}
.vt-st-quote,.vt-st-deal{border-color:var(--success);color:var(--success);background:rgb(var(--success-rgb) / .1)}
.vt-st-invalid{border-color:var(--line);color:var(--ink-faint);opacity:.7}
.vt-score{display:inline-block;min-width:30px;text-align:center;padding:2px 7px;border-radius:8px;font-family:var(--font-mono);font-size:.78rem;border:1px solid var(--line)}
.vt-score.is-hot{border-color:var(--danger);color:var(--danger)}
.vt-score.is-warm{border-color:var(--gold-strong);color:var(--gold-strong)}
.vt-score.is-cool{color:var(--ink-faint)}
.vt-score.is-zero{color:var(--ink-faint);border-style:dashed}
.vt-pager{display:flex;align-items:center;gap:var(--space-3);justify-content:flex-end;margin-top:var(--space-3);color:var(--ink-faint);font-size:var(--fs-small);flex-wrap:wrap}

/* 访客详情 */
.vt-head-actions{display:flex;gap:var(--space-2);align-items:center;flex-wrap:wrap}
.vt-facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:var(--space-3);margin-bottom:var(--space-5)}
.vt-facts span{display:flex;flex-direction:column;gap:2px;padding:var(--space-3);border:1px solid var(--line-soft);border-radius:10px;background:rgb(var(--white-rgb) / .7);font-size:var(--fs-small);color:var(--ink-soft)}
.vt-facts label{color:var(--ink-faint);font-size:.76rem;letter-spacing:.04em}
.vt-dist-row{display:grid;grid-template-columns:minmax(0,120px) minmax(0,1fr) 48px;gap:var(--space-3);align-items:center;margin-bottom:8px;font-size:var(--fs-small)}
.vt-dist-name{color:var(--ink-soft);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.vt-dist-bar{display:block;height:8px;border-radius:999px;background:rgb(var(--ink-rgb) / .07);overflow:hidden}
.vt-dist-bar i{display:block;height:100%;background:var(--gold-strong);border-radius:999px}
.vt-dist-row strong{font-family:var(--font-mono);color:var(--ink)}
.vt-reasons{margin:0;padding-left:1.1em;color:var(--ink-soft);font-size:var(--fs-small);line-height:1.9}
.vt-opp-actions{display:flex;gap:var(--space-2);flex-wrap:wrap;margin-top:var(--space-3)}
.vt-opp-actions select{padding:6px 10px;border:1px solid var(--line);border-radius:8px;background:var(--white);font:inherit;font-size:var(--fs-small)}
.vt-timeline{list-style:none;margin:0;padding:0}
.vt-tl-item{display:grid;grid-template-columns:96px 52px minmax(0,1fr);gap:var(--space-3);align-items:center;padding:8px 0;border-bottom:1px solid var(--line-soft)}
.vt-tl-time{color:var(--ink-faint);font-size:.78rem;font-family:var(--font-mono)}
.vt-tl-thumb{display:block;width:52px;height:38px;border-radius:6px;overflow:hidden;background:rgb(var(--ink-rgb) / .05)}
.vt-tl-thumb img{width:100%;height:100%;object-fit:cover;display:block}
.vt-tl-body{color:var(--ink-soft);font-size:var(--fs-small)}
.vt-tl-link{margin-left:8px;color:var(--gold-strong);text-decoration:none;font-size:.78rem}
.vt-tl-link:hover{text-decoration:underline}
.vt-timeline-compact .vt-tl-item{grid-template-columns:92px 44px minmax(0,1fr)}
.vt-fav-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(112px,1fr));gap:var(--space-3)}
.vt-fav{display:flex;flex-direction:column;gap:4px;text-decoration:none;color:var(--ink-soft);font-size:var(--fs-small)}
.vt-fav img{width:100%;aspect-ratio:4/3;object-fit:cover;border-radius:8px;background:rgb(var(--ink-rgb) / .05)}
.vt-fav em{font-style:normal;color:var(--ink-faint);font-size:.72rem}
.vt-share-info p{display:flex;justify-content:space-between;gap:var(--space-3);margin:0 0 6px;font-size:var(--fs-small);color:var(--ink-soft)}
.vt-share-info span{color:var(--ink-faint)}
.vt-chain{display:flex;flex-direction:column;gap:4px;margin-top:var(--space-3)}
.vt-chain-node{display:flex;gap:var(--space-3);align-items:flex-start;border:1px solid var(--line-soft);border-radius:10px;padding:8px 10px;background:rgb(var(--white-rgb) / .7)}
.vt-chain-no{width:20px;height:20px;border-radius:50%;background:var(--ink);color:var(--paper);display:inline-flex;align-items:center;justify-content:center;font-size:.72rem;flex:0 0 auto}
.vt-chain-arrow{color:var(--ink-faint);text-align:center;line-height:1}
.vt-share-meta{color:var(--ink-faint);font-size:.76rem}
.vt-modal-h3{margin:var(--space-4) 0 var(--space-2);font-size:1rem;color:var(--ink-soft)}
.vt-customer-box{display:flex;flex-direction:column;gap:var(--space-3)}
.vt-customer-card{display:flex;flex-direction:column;gap:6px;padding:var(--space-3);border:1px solid var(--line-soft);border-radius:10px;font-size:var(--fs-small);color:var(--ink-soft)}
.vt-btn-row{display:flex;gap:var(--space-2);flex-wrap:wrap;align-items:center}
.vt-btn-row a.small,.vt-btn-row button.small{text-decoration:none}
.vt-sessions{margin-top:var(--space-4)}
.vt-pick,.vt-form{display:flex;flex-direction:column;gap:var(--space-3)}
.vt-pick label,.vt-form label{display:flex;flex-direction:column;gap:4px;font-size:var(--fs-small);color:var(--ink-mute)}
.vt-pick select,.vt-form input{padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:var(--white);font:inherit;font-size:var(--fs-small)}
.vt-share-url input{width:100%;padding:10px;border:1px solid var(--line);border-radius:8px;background:var(--paper-soft);font-family:var(--font-mono);font-size:.8rem}
.vt-share-list,.vt-sales-list,.vt-opp-list{display:flex;flex-direction:column;gap:var(--space-3)}
.vt-sales-row{display:grid;gap:2px;border:1px solid var(--line-soft);border-radius:10px;padding:10px 12px;background:transparent;font:inherit;text-align:left;cursor:pointer;color:var(--ink-soft)}
.vt-sales-row:hover{border-color:var(--gold-soft)}
.vt-sales-name{font-weight:600;color:var(--ink)}
.vt-sales-meta{color:var(--ink-faint);font-size:.8rem}
.vt-share-row{display:flex;flex-direction:column;gap:4px;border:1px solid var(--line-soft);border-radius:10px;padding:10px 12px}
.vt-share-top{display:flex;justify-content:space-between;gap:var(--space-2);flex-wrap:wrap;color:var(--ink)}
.vt-searches{margin:var(--space-3) 0;color:var(--ink-faint);font-size:var(--fs-small)}
.vt-search-chip{display:inline-block;margin:2px 4px;padding:2px 8px;border:1px solid var(--line-soft);border-radius:999px}

/* 客户机会 */
.vt-opp{display:flex;flex-direction:column;gap:var(--space-2);padding:var(--space-5);background:rgb(var(--white-rgb) / .8);border:1px solid var(--line-soft);border-radius:var(--radius-md)}
.vt-opp-head{display:flex;gap:var(--space-3);align-items:center;flex-wrap:wrap}
.vt-opp-head .vt-code{border:none;background:transparent;font:inherit;font-family:var(--font-mono);cursor:pointer;font-size:1.05rem;color:var(--ink)}
.vt-opp-meta{color:var(--ink-faint);font-size:var(--fs-small)}
.vt-opp-focus{display:flex;gap:6px;flex-wrap:wrap}
.vt-focus{border:1px solid var(--line-soft);border-radius:999px;padding:2px 10px;font-size:.78rem;color:var(--ink-soft)}
.vt-focus em{font-style:normal;color:var(--gold-strong);font-family:var(--font-mono)}
.vt-focus.is-empty{color:var(--ink-faint)}
.vt-opp-why{font-size:var(--fs-small);color:var(--ink-soft)}
.vt-opp-why strong{display:block;color:var(--ink-faint);font-weight:500;letter-spacing:.04em;margin-bottom:2px}
.vt-opp-why ul{margin:0;padding-left:1.1em;line-height:1.85}

@media(max-width:1180px){
  .vt-kpis{grid-template-columns:repeat(4,minmax(0,1fr))}
  .vt-grid-2{grid-template-columns:minmax(0,1fr)}
  .vt-map-wrap{grid-template-columns:minmax(0,1fr)}
  .vt-map-legend-wrap{flex-direction:row;flex-wrap:wrap;max-height:none}
}
@media(max-width:720px){
  .vt-kpis{grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-2)}
  .vt-kpi{padding:10px}
  .vt-tl-item{grid-template-columns:72px 40px minmax(0,1fr);gap:8px}
  .vt-table td{white-space:normal}
  .vt-range{justify-content:flex-start}
}

.quote-unpaid-readonly{width:120px;max-width:40vw;text-align:right}
.quote-receipt-note{margin-top:6px}
/* ===== 【产品展示 · 搜索框（本轮新增）】位置：hero 大图带（手机端 = 首页横幅轮播）正下方 =====
   只新增选择器，不改动任何既有规则；包含匹配、不分大小写，清空恢复全部。 */
.home-search-shell{margin-top:var(--space-2)}
.home-search{display:flex;align-items:center;gap:var(--space-3);flex-wrap:wrap}
.home-search-field{display:flex;align-items:center;gap:10px;flex:1 1 340px;min-width:0;
  background:var(--white);border:1px solid var(--line);border-radius:999px;padding:0 6px 0 16px;
  min-height:52px;box-shadow:var(--shadow-sm);transition:border-color var(--dur-fast) var(--ease-soft),box-shadow var(--dur-fast) var(--ease-soft)}
.home-search-field:focus-within{border-color:var(--gold);box-shadow:0 0 0 3px rgb(var(--gold-rgb) / .14)}
.home-search-icon{color:var(--gold);font-size:18px;line-height:1}
.home-search-field input{flex:1;min-width:0;border:0;background:transparent;outline:none;
  color:var(--ink);font-size:var(--fs-body);letter-spacing:var(--ls-body);padding:14px 0}
.home-search-field input::placeholder{color:var(--ink-faint)}
.home-search-field input::-webkit-search-cancel-button{display:none}
.home-search-clear{border:0;background:transparent;color:var(--ink-mute);font-size:20px;line-height:1;
  min-width:40px;min-height:40px;border-radius:999px}
.home-search-clear:hover{background:var(--paper-deep);color:var(--ink)}
.home-search-tip{color:var(--ink-mute);font-size:var(--fs-small)}
/* 【产品展示顺序】大板库存管理工具条上的 ↑ / ↓ 说明（只新增，不改既有按钮样式）。 */
.block-order-hint{color:var(--ink-faint);font-size:var(--fs-caption)}

/* ===== 【荒料 · 搜索框 / ↑↓ 排序 / 分享（本轮新增）】只追加，不改动任何既有规则 =====
   与大板侧同一套做法与手感：
   - 搜索框：包含匹配（后端既有 ilike 口径）、输入即过滤、`×` 清空恢复全部；
   - ↑ / ↓：勾选恰好 1 颗荒料才可用，写 raw_blocks.sort_order 持久化，库存 / 销售两页同步；
   - 分享：每颗荒料 / 子料一个链接，优先 navigator.share，不支持才回落复制链接。 */
.raw-search-wrap{display:flex;align-items:center;gap:6px;flex:1 1 220px;min-width:0}
.raw-search-wrap .raw-search{flex:1 1 auto;min-width:0;width:100%}
.raw-search-clear{border:1px solid var(--line);background:var(--white);color:var(--ink-mute);
  min-width:40px;min-height:40px;border-radius:var(--radius-sm);font-size:18px;line-height:1;cursor:pointer}
.raw-search-clear:hover{background:var(--paper-deep);color:var(--ink)}
.raw-order-btns{display:inline-flex;align-items:center;gap:var(--space-2);margin-left:var(--space-3)}
.raw-order-btn{min-height:40px;padding:0 var(--space-3);background:var(--white);color:var(--ink);
  border:1px solid var(--line);border-radius:var(--radius-sm);font-size:var(--fs-small);font-weight:600;cursor:pointer}
.raw-order-btn:disabled{opacity:.5;cursor:not-allowed}
.raw-order-hint{color:var(--ink-faint);font-size:var(--fs-caption)}
/* 卡片右上角【分享】：绝对定位在图片上（与左上角复选框对称），不参与卡片跳转、不改变卡片尺寸。 */
.raw-share-open{position:absolute;top:6px;right:6px;z-index:5;display:inline-flex;align-items:center;
  min-height:26px;padding:0 10px;background:rgb(255 255 255 / .94);color:var(--ink);
  border:1px solid var(--line-soft);border-radius:6px;font-size:var(--fs-caption);
  box-shadow:0 1px 3px rgb(0 0 0 / .18);cursor:pointer;font-weight:600}
.raw-share-open:hover{background:var(--white);color:var(--gold-strong);border-color:var(--gold)}
@media(max-width:700px){
  .raw-search-wrap{min-width:100%}
}
