  <style>
    * { box-sizing: border-box; }
    body { margin: 0; font-family: -apple-system, "PingFang SC", "Microsoft YaHei", sans-serif; background: #f2f3f5; color: #1f2329; }
    a { color: inherit; text-decoration: none; }

    .login-wrap { min-height: 100vh; display: flex; align-items: center; justify-content: center; background: linear-gradient(135deg,#2b6de4,#1b4fb0); }
    .login-card { background:#fff; border-radius:12px; padding:32px; width:340px; box-shadow:0 10px 40px rgba(0,0,0,.2); }
    .login-card h2 { margin:0 0 18px; text-align:center; color:#2b6de4; }
    input, select, button { font-size:14px; padding:10px 12px; border:1px solid #dcdfe6; border-radius:8px; width:100%; margin:6px 0; }
    input[type="checkbox"], input[type="radio"] { width:auto; padding:0; margin:0; border:0; border-radius:0; vertical-align:middle; }
    button { background:#2b6de4; color:#fff; border:none; cursor:pointer; font-weight:600; }
    button.ghost { background:#fff; color:#2b6de4; border:1px solid #2b6de4; }
    button.danger { background:#fff; color:#cf1322; border:1px solid #ffa39e; }
    button.danger:hover { background:#fff1f0; border-color:#cf1322; }
    button.sm { width:auto; padding:6px 12px; font-size:13px; }

    .app { display:none; }
    .app.show { display:block; }
    .topbar { height:54px; background:#fff; border-bottom:1px solid #e5e6eb; display:flex; align-items:center; justify-content:space-between; padding:0 18px; position:fixed; top:0; left:200px; right:0; z-index:10; }
    .sidebar { width:200px; background:#1f2329; color:#c9cdd4; position:fixed; top:0; bottom:0; left:0; padding-top:16px; overflow-y:auto; }
    .sidebar .logo { color:#fff; font-size:18px; font-weight:700; padding:0 18px 16px; border-bottom:1px solid #333; margin-bottom:8px; }
    .nav-item { padding:11px 18px; cursor:pointer; font-size:14px; border-left:3px solid transparent; }
    .nav-item:hover { background:#2b2f36; color:#fff; }
    .nav-item.active { background:#2b2f36; color:#fff; border-left-color:#2b6de4; }
    .nav-group-header { padding:11px 18px; cursor:pointer; font-size:14px; display:flex; justify-content:space-between; align-items:center; border-left:3px solid transparent; }
    .nav-group-header:hover { background:#2b2f36; color:#fff; }
    .nav-group-header.active { color:#fff; border-left-color:#2b6de4; }
    .nav-caret { font-size:11px; transition:transform .15s ease; display:inline-block; }
    .nav-group.expanded .nav-caret { transform:rotate(90deg); }
    .nav-group-body { display:none; }
    .nav-group.expanded .nav-group-body { display:block; }
    .nav-group-body .nav-item { padding-left:36px; font-size:13px; }
    .content { margin-left:200px; margin-top:54px; padding:20px; }
    .panel { background:#fff; border-radius:10px; padding:18px; box-shadow:0 1px 3px rgba(0,0,0,.06); }
    .panel h3 { margin:0 0 14px; font-size:16px; }
    .toolbar { display:flex; gap:10px; margin-bottom:14px; align-items:center; }
    table { width:100%; border-collapse:collapse; font-size:13px; }
    th,td { padding:10px 10px; border-bottom:1px solid #f0f0f0; text-align:left; vertical-align:top; }
    th { background:#fafafa; color:#646a73; font-weight:600; }
    tr:hover td { background:#f7f9ff; }
    .pill { display:inline-block; padding:2px 8px; border-radius:10px; font-size:11px; background:#e8f0ff; color:#2b6de4; }
    .pill-flag { background:#fff7e6; color:#d46b08; border:1px solid #ffd591; }
    .pill-number { background:#e6fffb; color:#08979c; border:1px solid #87e8de; }
    .pill-text { background:#f0f5ff; color:#2f54eb; border:1px solid #adc6ff; }
    .attr-flag-row { padding:4px 0; }
    .attr-number-row { padding:4px 0; display:flex; align-items:center; gap:6px; }
    .attr-number-input { width:90px; padding:3px 6px; border:1px solid #d9d9d9; border-radius:4px; font-size:13px; }
    .attr-number-input.invalid { border-color:#ff4d4f; background:#fff1f0; }
    .pill-current { background:#ff4d4f; color:#fff; font-weight:600; box-shadow:0 1px 3px rgba(255,77,79,.4); }
    .pill-shared { background:#f6ffed; color:#389e0d; border:1px solid #b7eb8f; }
    .share-box { border:1px solid #e3e3e3; border-radius:8px; padding:8px 10px; display:flex; flex-wrap:wrap; gap:8px 18px; max-height:180px; overflow:auto; }
    .chk { display:flex; align-items:center; gap:4px; font-weight:normal; }
    tr.org-current { background:#fff1f0; }
    tr.org-current:hover { background:#ffe7e5; }
    .muted { color:#8a8f99; font-size:12px; }
    .badge { display:inline-block; padding:1px 8px; border-radius:10px; background:#2b6de4; color:#fff; font-size:12px; }
    .badge.gray { background:#3a3f48; color:#cfd3da; }
    .toast { position:fixed; bottom:30px; left:50%; transform:translateX(-50%); background:rgba(0,0,0,.8); color:#fff; padding:8px 16px; border-radius:20px; font-size:13px; z-index:99; }
    .hidden { display:none; }
    .modal { position:fixed; inset:0; background:rgba(0,0,0,.45); display:flex; align-items:center; justify-content:center; z-index:50; padding:16px; }
    .modal.hidden { display:none; }
    .modal-card { background:#fff; border-radius:12px; padding:20px; width:100%; max-width:380px; }
    .row { display:flex; gap:8px; align-items:center; flex-wrap:wrap; }
    .row > * { flex:1; }
    .row > .i_spec { flex:3; min-width:220px; }
    .row > .i_unit { flex:1; min-width:90px; }
    .row > .i_qty { flex:1; min-width:80px; }
    .row > .i_price { flex:1; min-width:80px; }
    .row > .unit-suffix { flex:0 0 auto; color:#6b7280; font-size:13px; padding:0 6px; white-space:nowrap; }
    .row > .rate-suffix { flex:0 0 auto; color:#6b7280; font-size:13px; padding:0 6px; white-space:nowrap; }
    .row > .i_tax { flex:0 0 90px; }
    .row > .row-del { flex:0 0 auto; margin-left:4px; padding:0 10px; background:#fff; border:1px solid #f0b4b4; color:#d4380d; border-radius:6px; cursor:pointer; }
    .row > .row-del:hover { background:#fff1f0; }
    /* 行内 select 文本溢出省略 */
    .row > select { text-overflow:ellipsis; }
    /* 采购收货验收单：逐行核对 */
    .rrow { background:#fafbfc; }
    .rrow input, .rrow select { width:100%; box-sizing:border-box; }
    /* 库位拆分：入库明细行内的"库位×数量"子区 */
    .loc-wrap { flex:1 1 100%; margin-top:4px; }
    .loc-box { display:flex; flex-direction:column; gap:4px; margin-top:4px; }
    .loc-row input, .loc-row select { box-sizing:border-box; }
    .loc-tag { display:inline-block; font-size:11px; line-height:1; padding:2px 6px; border-radius:8px; margin-left:4px; vertical-align:middle; }
    label { font-size:12px; color:#646a73; margin-top:8px; display:block; }
    .ipt-wrap { display:flex; align-items:center; gap:6px; }
    .ipt-wrap input { flex:1; width:100%; }
    .ipt-suffix { color:#86909c; font-size:13px; white-space:nowrap; flex:0 0 auto; }
    .inline-unit { flex:0 0 auto; max-width:150px; font-size:12px; }
    .conv-preview { font-size:12px; color:#86909c; margin:6px 0 2px; min-height:16px; }
    .conv-preview b { color:#1f2329; font-weight:600; }
    .spec-block { border:1px solid #e5e6eb; border-radius:8px; padding:10px; margin-bottom:10px; background:#fafbfc; }
    .spec-bar { display:flex; align-items:center; gap:6px; margin-bottom:4px; }
    .spec-display { flex:1; font-weight:600; color:#1d2129; margin-left:4px; word-break:break-all; }
    .spec-display-label { font-weight:600; color:#86909c; white-space:nowrap; flex:0 0 auto; }
    .spec-code { font-size:12px; color:#86909c; margin-right:4px; white-space:nowrap; flex:0 0 auto; }
    .spec-code b { color:#1d2129; font-weight:600; letter-spacing:.3px; }
    .s_code { width:150px; padding:2px 6px; font-size:12px; border:1px solid #e5e6eb; border-radius:4px; color:#1d2129; font-family:ui-monospace,Menlo,Consolas,monospace; }
    .attr-row { margin:6px 0; }
    .attr-label { display:inline-block; min-width:64px; font-size:12px; color:#646a73; margin-right:6px; vertical-align:middle; }
    .tag { display:inline-block; padding:4px 11px; margin:3px 5px 3px 0; border:1px solid #dcdfe6; border-radius:14px; font-size:12px; color:#4e5969; cursor:pointer; user-select:none; background:#fff; }
    .tag:hover { border-color:#2b6de4; color:#2b6de4; }
    .tag.on { background:#2b6de4; color:#fff; border-color:#2b6de4; }
    .attr-config { border:1px solid #e5e6eb; border-radius:8px; padding:10px 12px; margin:8px 0; background:#fff; }
    .attr-config-title { font-weight:600; font-size:13px; color:#1d2129; }
    .attr-config-item { display:grid; grid-template-columns:22px 110px 1fr; column-gap:8px; row-gap:4px; align-items:center; padding:7px 0; border-top:1px dashed #f0f1f3; }
    .attr-config-item:first-of-type { border-top:none; }
    .attr-config-item .ac_enabled { margin:0; }
    .attr-toggle { display:flex; align-items:center; gap:5px; font-size:13px; color:#1d2129; cursor:pointer; white-space:nowrap; }
    .ac_defaults { min-width:0; }
    /* 规格别称/SKU别称配置模块 */
    .alias-config { border:1px solid #e7e7ea; border-radius:12px; padding:16px; background:#fff; margin:8px 0; }
    .alias-title { font-size:16px; font-weight:600; margin:0 0 4px; }
    .alias-rule-box { display:flex; flex-wrap:wrap; gap:8px; align-items:center; min-height:44px; padding:10px 12px; background:#f9f9fb; border:1px solid #e7e7ea; border-radius:8px; }
    .alias-rule-box.drag-over { border-color:#5046e5; background:#f5f3ff; }
    .alias-token { position:relative; display:inline-flex; align-items:center; padding:6px 10px 6px 10px; background:#eef2ff; border:1px solid #c7d2fe; border-radius:6px; color:#5046e5; font-size:13px; font-weight:600; cursor:grab; }
    .alias-token.text { background:#fff; border-color:#d1d5db; color:#0f1419; font-weight:400; padding:2px 4px; }
    .alias-token .at-input { border:none; outline:none; background:transparent; font-size:13px; width:64px; padding:2px; }
    .alias-token .at-input::placeholder { color:#b9bdc5; }
    .alias-token .del { position:absolute; top:-8px; right:-8px; width:16px; height:16px; border-radius:8px; background:#fff; border:1px solid #e5e7eb; color:#9ca3af; font-size:12px; line-height:14px; text-align:center; cursor:pointer; }
    .alias-token .del:hover { color:#ef4444; border-color:#fecaca; }
    .alias-preview { margin-top:8px; font-size:13px; color:#6b7280; }
    .alias-preview .pv { display:inline-block; background:#f0fdf4; border:1px solid #bbf7d0; border-radius:8px; padding:6px 10px; color:#16a34a; font-weight:600; word-break:break-all; margin-left:4px; }
    .alias-palette { display:flex; flex-wrap:wrap; gap:10px; margin-top:4px; }
    .alias-src { display:inline-flex; align-items:center; gap:4px; padding:8px 12px; background:#fff; border:1px solid #e7e7ea; border-radius:6px; font-size:13px; cursor:grab; user-select:none; color:#1f2329; }
    .alias-src:hover { border-color:#5046e5; }
    .alias-src:active { cursor:grabbing; }
    .alias-sub { color:#6b7280; font-size:13px; font-weight:600; margin:12px 0 2px; }
    .alias-hint { color:#9ca3af; font-size:12px; margin-top:10px; }
    .attr-manage-opt { display:flex; align-items:center; gap:6px; padding:4px 0; }
    .attr-manage-opt input { flex:1; margin:0; }
    /* 属性「指定商品」标签点选 + 分批滚动加载 */
    .attr-prod-search { width:100%; padding:6px 8px; border:1px solid #dcdfe6; border-radius:6px; box-sizing:border-box; font-size:13px; }
    .attr-prod-chips { display:flex; flex-wrap:wrap; gap:6px; margin:6px 0; min-height:4px; }
    .attr-chip { display:inline-flex; align-items:center; gap:4px; padding:3px 9px; border:1px solid #2b6de4; background:#eaf2ff; color:#2b6de4; border-radius:14px; font-size:12px; cursor:pointer; user-select:none; }
    .attr-chip:hover { background:#2b6de4; color:#fff; }
    .attr-prod-list { max-height:200px; overflow:auto; border:1px solid #eee; border-radius:6px; padding:6px; margin-top:4px; }
    .attr-prod-item { display:inline-block; padding:4px 11px; margin:3px 5px 3px 0; border:1px solid #dcdfe6; border-radius:14px; font-size:12px; color:#4e5969; cursor:pointer; user-select:none; background:#fff; }
    .attr-prod-item:hover { border-color:#2b6de4; color:#2b6de4; }
    .attr-prod-item.on { background:#2b6de4; color:#fff; border-color:#2b6de4; }
    /* 规格唯一性配置弹窗 */
    .su-item { display:flex; align-items:center; gap:8px; padding:7px 10px; border:1px solid #e5e6eb; border-radius:8px; margin-bottom:6px; cursor:pointer; background:#fff; }
    .su-item:hover { border-color:#2b6de4; }
    .su-item input { width:auto; margin:0; }
    .su-sub { font-size:12px; color:#86909c; margin:10px 0 6px; }
    .su-hint { font-size:12px; color:#86909c; margin-top:3px; }
    .su-hint b { color:#2b6de4; font-weight:600; }
  </style>
