        body { margin: 0; font-family: "Microsoft YaHei", Arial, sans-serif; background: #f2f2f2; color: #333; }
        .wrap { width: min(1200px, 100%); margin: 0 auto; padding: 12px; box-sizing: border-box; }
        .top-nav { display: flex; gap: 10px; align-items: center; justify-content: flex-end; margin-bottom: 8px; }
        .top-nav a { color: #555; text-decoration: none; font-size: 13px; }
        .top-nav a:hover { color: #1677ff; }
        .parts { background: #fff; border: 1px solid #e5e5e5; }
        .parts-head { padding: 12px 14px; border-bottom: 1px solid #eee; font-size: 14px; display: flex; align-items: center; justify-content: space-between; gap: 10px; }
        .parts-head h3 { display: inline; margin: 0; font-size: 18px; }
        .parts-head i { color: #f5222d; font-style: normal; }
        .parts-log-btn { display: inline-block; border: 1px solid #1677ff; color: #1677ff; border-radius: 4px; padding: 4px 10px; font-size: 12px; text-decoration: none; background: #fff; }
        .parts-log-btn:hover { background: #e6f4ff; }
        .pcb-rec-mask {
            position: fixed;
            inset: 0;
            background: rgba(0,0,0,.45);
            z-index: 10000;
            display: none !important;
            align-items: center;
            justify-content: center;
            padding: 16px;
            box-sizing: border-box;
        }
        .pcb-rec-mask.show { display: flex !important; }
        .pcb-rec-modal {
            background: #fff;
            border-radius: 8px;
            width: min(720px, 100%);
            max-height: min(82vh, 640px);
            display: flex;
            flex-direction: column;
            box-shadow: 0 8px 24px rgba(0,0,0,.15);
        }
        .pcb-rec-head {
            display: flex;
            align-items: center;
            justify-content: space-between;
            padding: 12px 14px;
            border-bottom: 1px solid #eee;
            font-size: 16px;
            font-weight: 600;
        }
        .pcb-rec-close {
            border: 0;
            background: transparent;
            font-size: 22px;
            line-height: 1;
            color: #999;
            cursor: pointer;
            padding: 4px 8px;
        }
        .pcb-rec-close:hover { color: #333; }
        .pcb-rec-body {
            padding: 10px 14px 14px;
            overflow: auto;
            font-size: 13px;
        }
        .pcb-rec-empty { color: #999; text-align: center; padding: 24px 8px; }
        .pcb-rec-table { width: 100%; border-collapse: collapse; }
        .pcb-rec-table th, .pcb-rec-table td {
            border: 1px solid #eee;
            padding: 8px 10px;
            text-align: left;
            vertical-align: top;
        }
        .pcb-rec-table th { background: #fafafa; color: #666; font-weight: 500; white-space: nowrap; }
        .pcb-rec-sum { color: #f5222d; font-weight: 600; }
        .pcb-rec-detail summary { cursor: pointer; color: #1677ff; user-select: none; margin-top: 4px; }
        .pcb-rec-lines { margin: 8px 0 0 16px; padding: 0; color: #555; line-height: 1.5; }
        .pcb-preview-modal {
            background: #fff;
            border-radius: 8px;
            width: min(640px, 100%);
            max-height: min(92vh, 900px);
            display: flex;
            flex-direction: column;
            box-shadow: 0 8px 24px rgba(0,0,0,.15);
        }
        .pcb-preview-head {
            position: relative;
            padding: 14px 42px;
            border-bottom: 1px solid #eee;
            text-align: center;
            box-sizing: border-box;
        }
        .pcb-preview-head-title {
            display: block;
            font-size: 17px;
            font-weight: 600;
            color: #111;
            line-height: 1.4;
            letter-spacing: 0.02em;
        }
        .pcb-preview-head-meta {
            display: flex;
            flex-wrap: nowrap;
            align-items: baseline;
            justify-content: flex-start;
            gap: 10px 14px;
            margin-top: 10px;
            padding: 0 4px;
            font-size: 13px;
            line-height: 1.55;
            color: #333;
            text-align: left;
        }
        .pcb-preview-head-meta .pcb-hm-item {
            display: inline-flex;
            align-items: baseline;
            min-width: 0;
        }
        .pcb-preview-head-meta .pcb-hm-dealer {
            flex: 0 1 auto;
            justify-content: flex-start;
        }
        .pcb-preview-head-meta .pcb-hm-address {
            flex: 1 1 auto;
            justify-content: center;
            text-align: left;
        }
        .pcb-preview-head-meta .pcb-hm-phone {
            flex: 0 0 auto;
            margin-left: auto;
            padding-left: 10px;
            justify-content: flex-end;
        }
        .pcb-preview-head-meta .pcb-hm-lbl {
            color: #666;
            font-weight: 500;
            flex-shrink: 0;
        }
        .pcb-preview-head-meta .pcb-hm-val {
            color: #222;
            text-align: left;
        }
        .pcb-preview-head-meta .pcb-hm-address .pcb-hm-val {
            word-break: break-all;
        }
        .pcb-preview-head-meta .pcb-hm-phone .pcb-hm-val {
            min-width: 11ch;
            text-align: right;
            font-variant-numeric: tabular-nums;
            white-space: nowrap;
        }
        @media (max-width: 520px) {
            .pcb-preview-head-meta {
                flex-wrap: wrap;
            }
            .pcb-preview-head-meta .pcb-hm-phone {
                margin-left: 0;
                width: 100%;
                justify-content: flex-end;
                padding-left: 0;
            }
        }
        .pcb-preview-head .pcb-rec-close {
            position: absolute;
            right: 8px;
            top: 10px;
            transform: none;
            padding: 6px 10px;
        }
        .pcb-preview-body {
            position: relative;
            padding: 12px 16px 16px;
            overflow: auto;
            font-size: 13px;
            flex: 1;
        }
        .pcb-preview-watermark {
            position: absolute;
            inset: 0;
            z-index: 0;
            pointer-events: none;
            overflow: hidden;
            min-height: 120px;
        }
        .pcb-preview-watermark svg {
            display: block;
            width: 100%;
            height: 100%;
        }
        .pcb-preview-body-inner { position: relative; z-index: 1; min-height: 160px; }
        .pcb-preview-title-row { font-size: 18px; font-weight: 700; color: #111; margin-bottom: 8px; word-break: break-word; }
        .pcb-preview-title-row.unnamed { color: #999; font-weight: 500; font-size: 15px; }
        .pcb-preview-warn {
            background: #fff7e6;
            border: 1px solid #ffd591;
            color: #ad6800;
            padding: 8px 10px;
            border-radius: 6px;
            margin-bottom: 12px;
            font-size: 12px;
        }
        /* 打印时与同块内明细、备注保持同页分区（桌面预览无样式） */
        .pcb-print-keep-sheet {
            display: block;
        }
        .pcb-preview-table { width: 100%; border-collapse: collapse; table-layout: fixed; }
        .pcb-preview-table th, .pcb-preview-table td {
            border-bottom: 1px solid #f0f0f0;
            padding: 10px 8px;
            text-align: left;
            vertical-align: middle;
            word-break: break-word;
        }
        .pcb-preview-table th { color: #888; font-weight: 500; font-size: 12px; background: #fafafa; }
        .pcb-preview-table th.pcb-preview-col-qty { text-align: center; }
        .pcb-preview-table th.pcb-preview-col-price { text-align: right; }
        /* 配置名与缩略图同一列横向排列 */
        .pcb-preview-table .pcb-preview-col-cfg-thumb {
            width: 19%;
            min-width: 0;
            vertical-align: middle;
        }
        /* Grid：多行文案时仍能稳定与中列缩略图垂直居中对齐 */
        .pcb-preview-cfg-thumb-inner {
            display: grid;
            grid-template-columns: minmax(0, 1fr) auto;
            column-gap: 8px;
            align-items: center;
            width: 100%;
            box-sizing: border-box;
        }
        .pcb-preview-cfg-thumb-inner > .pcb-preview-thumb {
            grid-column: 2;
            justify-self: end;
            align-self: center;
        }
        .pcb-preview-cfg-thumb-inner > .pcb-preview-cfg-label {
            grid-column: 1;
            align-self: center;
            min-width: 0;
        }
        .pcb-preview-cfg-label {
            margin: 0;
            padding: 0;
            font-weight: 500;
            color: #222;
            word-break: break-word;
            line-height: 1.35;
            white-space: pre-wrap;
        }
        .pcb-preview-thumb {
            display: flex;
            align-items: center;
            justify-content: center;
            width: 42px;
            height: 42px;
            border-radius: 4px;
            overflow: hidden;
            background: #f5f5f5;
            border: 1px solid #ebebeb;
            box-sizing: border-box;
        }
        .pcb-preview-thumb.pcb-preview-thumb-empty {
            background: transparent;
            border-color: transparent;
            opacity: 0;
            pointer-events: none;
        }
        .pcb-preview-thumb img {
            width: 100%;
            height: 100%;
            object-fit: cover;
            display: block;
        }
        .pcb-preview-thumb .pcb-preview-thumb-svg {
            display: flex;
            width: 32px;
            height: 32px;
            color: #bbb;
            align-items: center;
            justify-content: center;
        }
        .pcb-preview-thumb .pcb-preview-thumb-svg svg {
            width: 100%;
            height: 100%;
            stroke: currentColor;
            fill: none;
            stroke-width: 2;
            stroke-linecap: round;
            stroke-linejoin: round;
        }
        .pcb-preview-table .pcb-preview-col-brand { width: 12%; color: #333; }
        .pcb-preview-table .pcb-preview-col-spec { width: auto; color: #444; line-height: 1.45; }
        .pcb-preview-table .pcb-preview-col-qty {
            width: 10%;
            text-align: center;
            white-space: nowrap;
            font-variant-numeric: tabular-nums;
            color: #333;
        }
        .pcb-preview-table .pcb-preview-col-price {
            width: 14%;
            text-align: right;
            white-space: nowrap;
            font-variant-numeric: tabular-nums;
            color: #f5222d;
            font-weight: 500;
        }
        .pcb-preview-total-bar {
            margin-top: 12px;
            padding: 12px 10px;
            display: flex;
            justify-content: space-between;
            align-items: center;
            background: #f6ffed;
            border: 1px solid #b7eb8f;
            border-radius: 6px;
            font-size: 14px;
        }
        .pcb-preview-total-bar em {
            font-style: normal;
            font-size: 22px;
            font-weight: 700;
            color: #f5222d;
        }
        /* 备注区仅出现于打印预览/纸张，屏幕弹窗不展示（置于明细卡片外，减轻打印分页异常） */
        .pcb-preview-remark {
            display: none !important;
            margin-top: 12px;
            padding: 0;
            border: none;
            border-radius: 0;
            background: transparent;
        }
        .pcb-preview-remark-label {
            font-size: 16px;
            font-weight: 600;
            color: #222;
            margin-bottom: 6px;
        }
        .pcb-preview-remark-tip {
            font-size: 13px;
            color: #888;
            line-height: 1.55;
            margin-bottom: 8px;
            white-space: normal;
            word-break: break-word;
        }
        .pcb-preview-remark-input {
            width: 100%;
            box-sizing: border-box;
            min-height: calc(1.55em * 6);
            max-height: calc(1.55em * 6 + 0.35em);
            padding: 4px 0;
            margin: 0;
            font-size: 14px;
            line-height: 1.55;
            font-family: inherit;
            border: none;
            outline: none;
            box-shadow: none;
            border-radius: 0;
            resize: none;
            vertical-align: top;
            background: transparent;
            -webkit-appearance: none;
            appearance: none;
            white-space: pre-wrap;
            word-break: break-word;
            overflow: auto;
        }
        .pcb-preview-foot {
            padding: 10px 14px 14px;
            display: flex;
            justify-content: flex-end;
            gap: 8px;
            flex-wrap: wrap;
            border-top: 1px solid #eee;
        }
        .pcb-preview-foot button {
            border: 1px solid #d9d9d9;
            background: #fff;
            padding: 7px 16px;
            border-radius: 2px;
            font-size: 13px;
            cursor: pointer;
            font-family: inherit;
        }
        .pcb-preview-foot button.primary { background: #1677ff; border-color: #1677ff; color: #fff; }
        .pcb-preview-foot button:hover { opacity: 0.92; }
        @media print {
            /* 不用 visibility 隐藏整页：隐形占位容易导致多出空白页 */
            @page {
                size: A4 portrait;
                margin: 6mm;
            }
            html, body {
                margin: 0 !important;
                padding: 0 !important;
                width: 100% !important;
                height: fit-content !important;
                max-height: none !important;
                min-height: 0 !important;
                overflow: visible !important;
                background: #fff !important;
                -webkit-print-color-adjust: exact;
                print-color-adjust: exact;
            }
            /* Edge / Chrome：仅打印装机预览层；其它 body 直子节点一律不参与版面（避免空白副页） */
            body > *:not(#pcbPreviewMask) {
                display: none !important;
            }
            #pcbPreviewMask:not(.show) {
                display: none !important;
            }
            /* 必须压住 .pcb-rec-mask.show { display:flex!important }，否则 Edge 易算出空白副页 */
            #pcbPreviewMask.pcb-rec-mask.show,
            #pcbPreviewMask.show {
                position: static !important;
                inset: auto !important;
                left: auto !important;
                top: auto !important;
                width: 100% !important;
                max-width: 100% !important;
                height: fit-content !important;
                max-height: none !important;
                margin: 0 !important;
                padding: 0 !important;
                background: transparent !important;
                box-shadow: none !important;
                display: block !important;
                flex-direction: unset !important;
                flex-wrap: unset !important;
                align-items: unset !important;
                justify-content: unset !important;
                overflow: visible !important;
            }
            #pcbPreviewMask.show .pcb-preview-head .pcb-rec-close,
            #pcbPreviewMask.show .pcb-preview-foot { display: none !important; }
            #pcbPreviewMask.show .pcb-preview-modal {
                display: block !important;
                box-shadow: none !important;
                border-radius: 0 !important;
                max-height: none !important;
                height: fit-content !important;
                min-height: 0 !important;
                max-width: none !important;
                width: 100% !important;
                min-width: 0 !important;
                margin: 0 !important;
                padding: 0 !important;
                page-break-after: avoid !important;
                break-after: avoid-page !important;
            }
            #pcbPreviewMask.show .pcb-preview-head {
                padding: 6px 0 10px !important;
                border-bottom: 1px solid #333 !important;
                margin: 0 !important;
            }
            #pcbPreviewMask.show .pcb-preview-head-title {
                font-size: 28px !important;
                font-weight: 700 !important;
                line-height: 1.3 !important;
            }
            /* 打印用 Grid 替代 flex+nowrap，避免长地址与电话挤爆行宽引发分页异常 */
            #pcbPreviewMask.show .pcb-preview-head-meta {
                display: grid !important;
                grid-template-columns: auto minmax(0, 1fr) auto !important;
                align-items: baseline !important;
                column-gap: 12px !important;
                row-gap: 4px !important;
                margin-top: 8px !important;
                padding: 0 !important;
                font-size: 13px !important;
                line-height: 1.45 !important;
                justify-content: unset !important;
                flex-wrap: unset !important;
            }
            #pcbPreviewMask.show .pcb-preview-head-meta .pcb-hm-item {
                display: inline-flex !important;
                align-items: baseline !important;
                min-width: 0 !important;
            }
            #pcbPreviewMask.show .pcb-preview-head-meta .pcb-hm-dealer {
                grid-column: 1 !important;
                justify-self: start !important;
            }
            #pcbPreviewMask.show .pcb-preview-head-meta .pcb-hm-address {
                grid-column: 2 !important;
                justify-self: stretch !important;
                min-width: 0 !important;
            }
            #pcbPreviewMask.show .pcb-preview-head-meta .pcb-hm-phone {
                grid-column: 3 !important;
                margin-left: 0 !important;
                padding-left: 0 !important;
                justify-self: end !important;
                white-space: nowrap !important;
            }
            #pcbPreviewMask.show .pcb-preview-head-meta .pcb-hm-phone .pcb-hm-val {
                min-width: 11ch !important;
                text-align: right !important;
                font-variant-numeric: tabular-nums !important;
                white-space: nowrap !important;
            }
            #pcbPreviewMask.show .pcb-preview-head-meta .pcb-hm-lbl {
                color: #444 !important;
                font-weight: 600 !important;
            }
            #pcbPreviewMask.show .pcb-preview-head-meta .pcb-hm-val {
                color: #111 !important;
            }
            #pcbPreviewMask.show .pcb-preview-body {
                position: relative !important;
                display: block !important;
                flex: none !important;
                flex-grow: 0 !important;
                flex-shrink: 0 !important;
                overflow: visible !important;
                height: auto !important;
                min-height: 0 !important;
                max-height: none !important;
                padding: 8px 0 12px !important;
                font-size: 11px !important;
                line-height: 1.45 !important;
            }
            #pcbPreviewMask.show .pcb-preview-body-inner {
                min-height: 0 !important;
                overflow: visible !important;
            }
            /* 水印 SVG height:100% 在打印时易撑高版面产生空白第二页，打印时不输出水印 */
            #pcbPreviewMask.show .pcb-preview-watermark {
                display: none !important;
                min-height: 0 !important;
                height: 0 !important;
                overflow: hidden !important;
            }
            /* 勿对整块加 break-inside:avoid，否则表格略高时整表会被挤到第 2 页 */
            #pcbPreviewMask.show .pcb-print-keep-sheet {
                margin-top: 2px !important;
                padding: 6px 8px !important;
                border: 1px solid #d1dae6 !important;
                border-radius: 2px !important;
                box-sizing: border-box !important;
                background: #fafbfc !important;
                -webkit-print-color-adjust: exact !important;
                print-color-adjust: exact !important;
            }
            #pcbPreviewMask.show .pcb-preview-title-row {
                font-size: 14px !important;
                margin-bottom: 6px !important;
                font-weight: 700 !important;
            }
            #pcbPreviewMask.show .pcb-preview-title-row.unnamed {
                font-size: 13px !important;
            }
            #pcbPreviewMask.show .pcb-preview-warn {
                padding: 6px 10px !important;
                margin-bottom: 10px !important;
                font-size: 11px !important;
                border-radius: 0 !important;
            }
            /* overflow:hidden 会导致部分浏览器打印时分页异常，整块表格被挪到下一页 */
            #pcbPreviewMask.show .pcb-preview-table {
                font-size: 10.5px !important;
                width: 100% !important;
                table-layout: fixed !important;
                background: #fff !important;
                border-collapse: collapse !important;
                border: 1px solid #c5ced9 !important;
                border-radius: 2px !important;
                overflow: visible !important;
                page-break-inside: auto !important;
                break-inside: auto !important;
            }
            #pcbPreviewMask.show .pcb-preview-table thead {
                display: table-header-group !important;
            }
            #pcbPreviewMask.show .pcb-preview-table tbody {
                display: table-row-group !important;
            }
            #pcbPreviewMask.show .pcb-preview-table tr {
                page-break-inside: auto !important;
                break-inside: auto !important;
            }
            #pcbPreviewMask.show .pcb-preview-table th,
            #pcbPreviewMask.show .pcb-preview-table td {
                padding: 8px 7px !important;
                line-height: 1.5 !important;
                vertical-align: middle !important;
                border-bottom: 1px solid #e8edf3 !important;
                border-left: 1px solid #eef2f6 !important;
                border-right: 0 !important;
            }
            #pcbPreviewMask.show .pcb-preview-table th:last-child,
            #pcbPreviewMask.show .pcb-preview-table td:last-child {
                border-right: 1px solid #eef2f6 !important;
            }
            #pcbPreviewMask.show .pcb-preview-table tbody tr:nth-child(even) td {
                background: #f8fafc !important;
                -webkit-print-color-adjust: exact !important;
                print-color-adjust: exact !important;
            }
            #pcbPreviewMask.show .pcb-preview-table th {
                font-size: 10px !important;
                letter-spacing: 0.03em !important;
                padding: 10px 7px !important;
                line-height: 1.45 !important;
                border-bottom: 2px solid #64748b !important;
                background: linear-gradient(to bottom, #f1f5f9 0%, #e2e8f0 100%) !important;
                color: #334155 !important;
                font-weight: 600 !important;
            }
            #pcbPreviewMask.show .pcb-preview-table th:first-child,
            #pcbPreviewMask.show .pcb-preview-table td:first-child {
                border-left: none !important;
            }
            #pcbPreviewMask.show .pcb-preview-col-qty {
                font-size: 10.5px !important;
            }
            #pcbPreviewMask.show .pcb-preview-col-price {
                font-size: 10.5px !important;
                color: #333 !important;
            }
            /* 打印仅隐藏表格各行小计金额；预报价总价仍然显示 */
            #pcbPreviewMask.show .pcb-preview-col-price .pcb-price-sensitive {
                display: none !important;
            }
            #pcbPreviewMask.show .pcb-preview-col-cfg-thumb .pcb-preview-cfg-thumb-inner {
                column-gap: 6px !important;
                align-items: center !important;
                width: 100% !important;
            }
            #pcbPreviewMask.show .pcb-preview-table .pcb-preview-col-cfg-thumb {
                vertical-align: middle !important;
            }
            #pcbPreviewMask.show .pcb-preview-thumb {
                width: 36px !important;
                height: 36px !important;
                border-radius: 2px !important;
                -webkit-print-color-adjust: exact !important;
                print-color-adjust: exact !important;
            }
            #pcbPreviewMask.show .pcb-preview-thumb .pcb-preview-thumb-svg {
                width: 26px !important;
                height: 26px !important;
                color: #888 !important;
            }
            #pcbPreviewMask.show .pcb-preview-total-bar {
                margin-top: 10px !important;
                padding: 8px 12px !important;
                font-size: 12px !important;
                border-radius: 2px !important;
                width: 100% !important;
                box-sizing: border-box !important;
                background: #ecfdf5 !important;
                border: 1px solid #86efac !important;
                color: #14532d !important;
                font-weight: 500 !important;
                -webkit-print-color-adjust: exact !important;
                print-color-adjust: exact !important;
            }
            #pcbPreviewMask.show .pcb-preview-total-bar em {
                font-size: 19px !important;
                color: #b91c1c !important;
                font-weight: 700 !important;
            }
            /* 勿对备注整块 avoid，字大+多行时易整段被挤到第 2 页 */
            #pcbPreviewMask.show .pcb-preview-remark {
                display: block !important;
                margin-top: 8px !important;
                padding: 0 !important;
                border: none !important;
                border-radius: 0 !important;
                background: transparent !important;
                -webkit-print-color-adjust: exact !important;
                print-color-adjust: exact !important;
            }
            #pcbPreviewMask.show .pcb-preview-remark-label {
                font-size: 14px !important;
                margin-bottom: 5px !important;
                color: #0f172a !important;
            }
            #pcbPreviewMask.show .pcb-preview-remark-tip {
                font-size: 12px !important;
                margin-bottom: 6px !important;
                line-height: 1.5 !important;
                color: #475569 !important;
                white-space: normal !important;
                word-break: break-word !important;
            }
            #pcbPreviewMask.show .pcb-preview-remark-input {
                font-size: 12.5px !important;
                line-height: 1.55 !important;
                padding: 2px 0 !important;
                margin: 0 !important;
                border: none !important;
                outline: none !important;
                box-shadow: none !important;
                border-radius: 0 !important;
                min-height: calc(1.55em * 6) !important;
                max-height: calc(1.55em * 6 + 0.35em) !important;
                overflow: hidden !important;
                resize: none !important;
                background: transparent !important;
                color: #0f172a !important;
                -webkit-appearance: none !important;
                appearance: none !important;
                white-space: pre-wrap !important;
                word-break: break-word !important;
            }
            #pcbPreviewMask.show .pcb-preview-table th.pcb-preview-col-qty { text-align: center !important; }
            #pcbPreviewMask.show .pcb-preview-table th.pcb-preview-col-price { text-align: right !important; }
            #pcbPreviewMask.show .pcb-rec-empty {
                padding: 16px 0 !important;
                font-size: 12px !important;
            }
        }
        .parts-list {
            margin: 0;
            padding: 10px 10px 0;
            list-style: none;
            display: flex;
            flex-wrap: nowrap;
            gap: 8px;
            border-top: 1px solid #f5f5f5;
            overflow-x: auto;
            overflow-y: hidden;
            scrollbar-width: thin;
        }
        .parts-list > li {
            position: relative;
            border: 1px solid #eee;
            border-radius: 6px;
            padding: 0;
            height: 34px;
            width: 92px;
            font-size: 13px;
            background: #fff;
            cursor: pointer;
            display: inline-flex;
            align-items: center;
            justify-content: center;
            box-sizing: border-box;
            user-select: none;
            white-space: nowrap;
        }
        .parts-list > li.cur { background: #f0f7ff; color: #1677ff; }
        .parts-list > li i { color: #f5222d; font-style: normal; }
        .parts-list > li.picked::after {
            content: '';
            position: absolute;
            right: 0;
            bottom: 0;
            width: 0;
            height: 0;
            border-style: solid;
            border-width: 0 0 12px 12px;
            border-color: transparent transparent #1890ff transparent;
        }
        .parts-list > li.picked::before {
            content: '';
            position: absolute;
            right: 2px;
            bottom: 3px;
            width: 5px;
            height: 2px;
            border-left: 1px solid #fff;
            border-bottom: 1px solid #fff;
            transform: rotate(-45deg);
            z-index: 1;
        }
        .main { margin-top: 10px; display: grid; grid-template-columns: 500px minmax(0, 1fr); gap: 10px; }
        .left-box, .right-box { background: #fff; border: 1px solid #e5e5e5; }
        .left-head { background: #3493e5; color: #fff; padding: 10px 12px; font-size: 16px; display: flex; align-items: center; justify-content: space-between; gap: 10px; }
        .left-head .head-actions { display: inline-flex; align-items: center; gap: 8px; }
        .left-head .head-clear-btn { display: inline-flex; align-items: center; border: 1px solid rgba(255,255,255,0.7); color: #fff; padding: 4px 10px; border-radius: 2px; font-size: 13px; cursor: pointer; user-select: none; }
        .left-head .head-clear-btn:hover { background: rgba(255,255,255,0.15); }
        .config-list { list-style: none; margin: 0; padding: 0; }
        .config-list li { display: grid; grid-template-columns: 50px 46px 200px 60px 84px 14px; gap: 4px; align-items: center; height: 62px; padding: 11px 10px; border-bottom: 1px solid #f0f0f0; font-size: 13px; box-sizing: border-box; }
        .config-list li.total { grid-template-columns: 1fr auto; }
        .config-list li h3 { margin: 0; }
        .config-list li h3,
        .config-list li .con { white-space: nowrap !important; overflow: visible; text-overflow: clip; }
        .config-list .need { color: #f5222d; }
        .config-list .pic {
            width: 40px;
            height: 40px;
            display: flex;
            align-items: center;
            justify-content: center;
            color: #c9c9c9;
        }
        .config-list .pic svg { width: 34px; height: 34px; stroke: currentColor; fill: none; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
        .config-list .pic img { width: 34px; height: 34px; object-fit: cover; border-radius: 3px; display: block; }
        .config-list .con { color: #999; }
        .config-list li:not(.filled) .con { text-align: center; }
        .config-list .add { color: #1677ff; cursor: pointer; text-align: right; justify-self: end; }
        .config-list li:not(.filled) .add { grid-column: 5; justify-self: end; }
        .config-list .del { color: #999; text-align: center; font-weight: 800; cursor: pointer; }
        .config-list .del:hover { color: #f5222d; }
        .config-list li:not(.filled) .del { display: none; }
        .config-list li:not(.filled) .cfg-price { display: none; }
        .config-list li.filled .con {
            color: #222;
            font-size: 12px;
            white-space: normal !important;
            overflow: hidden;
            text-overflow: clip;
            display: -webkit-box;
            -webkit-box-orient: vertical;
            -webkit-line-clamp: 2;
            line-height: 1.25;
            max-height: 2.5em;
        }
        .config-list li.filled .add { color: #555; letter-spacing: 0; cursor: default; justify-self: end; margin-left: 0; }
        .config-list .qty-box { display: inline-flex; align-items: center; gap: 8px; user-select: none; white-space: nowrap; }
        .config-list .qty-btn { color: #999; cursor: pointer; padding: 2px 6px; border-radius: 2px; }
        .config-list .qty-btn:hover { background: #f5f5f5; }
        .config-list .qty-num { color: #555; min-width: 10px; text-align: center; font-variant-numeric: tabular-nums; }
        .config-list .cfg-price { color: #f5222d; font-size: 16px; font-weight: 400; text-align: right; white-space: nowrap; }
        .config-total em { color: #f5222d; font-style: normal; font-size: 22px; }
        .other-msg { padding: 10px; }
        .lable { margin: 0 0 6px; font-size: 13px; }
        .lable em { float: right; font-style: normal; color: #666; }
        .lable font { color: #f5222d; }
        .inst { color: #999; font-size: 12px; }
        .other-msg input, .other-msg textarea { width: 100%; box-sizing: border-box; border: 1px solid #d9d9d9; border-radius: 2px; padding: 8px; font-size: 13px; }
        .other-msg textarea { min-height: 70px; resize: vertical; }
        .btn-box { padding: 10px; display: flex; gap: 8px; justify-content: center; flex-wrap: wrap; }
        .btn-box a, .btn-box span, .btn-box button.pcb-btn-ghost {
            display: inline-block;
            border: 1px solid #d9d9d9;
            padding: 7px 18px;
            border-radius: 2px;
            font-size: 13px;
            cursor: pointer;
            background: #fff;
            font-family: inherit;
            color: #333;
            box-sizing: border-box;
            line-height: 1.25;
        }
        .btn-box button.pcb-btn-ghost:hover { border-color: #1677ff; color: #1677ff; }
        .btn-box .publish { background: #1677ff; border-color: #1677ff; color: #fff; text-decoration: none; }
        .right-top { padding: 12px; border-bottom: 1px solid #eee; }
        .right-title { font-size: 28px; font-weight: 700; color: #111; letter-spacing: 1px; display: none; }
        .filters { margin-top: 8px; font-size: 12px; color: #666; border: 1px solid #e5e5e5; background: #fff; }
        .filter-tools { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 10px 12px; border-bottom: 1px solid #efefef; background: #fafafa; }
        .filter-city { display: inline-flex; align-items: center; gap: 8px; font-size: 17px; font-weight: 800; color: #333; }
        #filterPartName { color: #f5222d; font-weight: 800; margin-left: 4px; }
        .filter-city select { height: 28px; border: 1px solid #ddd; color: #666; font-size: 12px; background: #fff; }
        .filter-search { display: inline-flex; align-items: center; border: 1px solid #d9d9d9; background: #fff; }
        .filter-search input { width: 180px; height: 28px; border: 0; padding: 0 8px; font-size: 12px; outline: none; }
        .filter-search button { width: 28px; height: 28px; border: 0; border-left: 1px solid #eee; background: #fff; color: #666; cursor: pointer; }
        .filter-row { display: flex; align-items: flex-start; gap: 6px; padding: 4px 12px; border-bottom: 1px dashed #efefef; }
        .filter-row b { width: 70px; flex: 0 0 70px; color: #888; font-weight: 600; line-height: 1.35; }
        .filter-options { flex: 1; line-height: 1.35; }
        .filter-row.price-row .filter-options { white-space: nowrap; overflow: hidden; }
        .filter-row.price-row .filter-options a { display: inline-block; white-space: nowrap; }
        .cpu-series-row .filter-options { white-space: nowrap; overflow: hidden; max-height: 26px; }
        .cpu-series-row.expanded .filter-options { white-space: normal; overflow: visible; max-height: none; }
        .cpu-slot-row .filter-options { white-space: nowrap; overflow: hidden; max-height: 26px; }
        .cpu-slot-row.expanded .filter-options { white-space: normal; overflow: visible; max-height: none; }
        .mb-socket-row .filter-options { white-space: nowrap; overflow: hidden; max-height: 26px; }
        .mb-socket-row.expanded .filter-options { white-space: normal; overflow: visible; max-height: none; }
        .mb-chipset-row .filter-options { white-space: nowrap; overflow: hidden; max-height: 26px; }
        .mb-chipset-row.expanded .filter-options { white-space: normal !important; overflow: visible !important; max-height: none !important; }
        .mem-capacity-row .filter-options { white-space: nowrap; overflow: hidden; max-height: 26px; }
        .mem-capacity-row.expanded .filter-options { white-space: normal; overflow: visible; max-height: none; }
        .mem-freq-row .filter-options { white-space: nowrap; overflow: hidden; max-height: 26px; }
        .mem-freq-row.expanded .filter-options { white-space: normal; overflow: visible; max-height: none; }
        .ssd-interface-row .filter-options { white-space: nowrap; overflow: hidden; max-height: 26px; }
        .ssd-interface-row.expanded .filter-options { white-space: normal; overflow: visible; max-height: none; }
        .psu-power-row .filter-options { white-space: nowrap; overflow: hidden; max-height: 26px; }
        .psu-power-row.expanded .filter-options { white-space: normal; overflow: visible; max-height: none; }
        .cooler-type-row .filter-options { white-space: nowrap; overflow: hidden; max-height: 26px; }
        .cooler-type-row.expanded .filter-options { white-space: normal; overflow: visible; max-height: none; }
        .monitor-type-row .filter-options { white-space: nowrap; overflow: hidden; max-height: 26px; }
        .monitor-type-row.expanded .filter-options { white-space: normal !important; overflow: visible !important; max-height: none !important; }
        .monitor-type-row .filter-options a { white-space: nowrap; }
        .gpu-chip-row .filter-options { white-space: nowrap; overflow: hidden; max-height: 26px; }
        .gpu-chip-row.expanded .filter-options { white-space: normal; overflow: visible; max-height: none; }
        .cpu-series-row:not(.expanded) .series-group { display: inline; }
        .cpu-series-row .series-group { display: inline; }
        .cpu-series-row.expanded .series-group { display: inline; }
        .cpu-series-row.expanded .series-group + .series-group { display: block; }
        .cpu-series-row.expanded .series-sub { white-space: normal; }
        .cpu-slot-row .slot-group { display: inline; }
        .cpu-slot-row.expanded .slot-group {
            display: inline;
        }
        .cpu-slot-row.expanded .slot-group + .slot-group { display: block; }
        .mb-socket-row .slot-group { display: inline; }
        .mb-socket-row.expanded .slot-group {
            display: inline;
        }
        .mb-socket-row.expanded .slot-group + .slot-group { display: block; }
        .mb-chipset-row .slot-group { display: inline; }
        .mb-chipset-row.expanded .slot-group {
            display: inline;
        }
        .mb-chipset-row.expanded .slot-group + .slot-group { display: block; }
        .gpu-chip-row .slot-group { display: inline; }
        .gpu-chip-row.expanded .slot-group {
            display: inline;
        }
        .gpu-chip-row.expanded .slot-group + .slot-group { display: block; }
        .gpu-chip-row.expanded .slot-sub { white-space: normal; }
        .mb-chipset-row.expanded .slot-sub { white-space: normal; }
        .group-label { color:#fa8c16; cursor: default; }
        .filter-row a { color: #0d4b80; text-decoration: none; margin-right: 10px; display: inline-block; }
        .filter-row a.cur { background: #2d81e0; color: #fff; padding: 0 4px; }
        .filter-act { flex: 0 0 auto; color: #666; white-space: nowrap; min-width: 42px; text-align: right; }
        .filter-act a { margin-right: 0; color: #666; }
        .gpu-chip-row .filter-act a { color:#1677ff; font-weight:600; }
        .series-sub { color:#666; font-size:12px; margin-left:6px; white-space: nowrap; }
        .series-sub a { margin-right: 8px; }
        .series-sub a.cur { background:#2d81e0; color:#fff; padding:0 4px; border-radius:2px; }
        .slot-sub { color:#666; font-size:12px; margin-left:6px; white-space: nowrap; }
        .slot-sub a { margin-right: 8px; }
        .slot-sub a.cur { background:#2d81e0; color:#fff; padding:0 4px; border-radius:2px; }
        .filter-price-input {
            width: 64px;
            height: 24px;
            border: 1px solid #d9d9d9;
            border-radius: 3px;
            padding: 0 6px;
            box-sizing: border-box;
            font-size: 12px;
            outline: none;
        }
        .filter-price-input:focus { border-color: #40a9ff; }
        .filter-price-btn {
            height: 24px;
            border: 1px solid #1677ff;
            background: #1677ff;
            color: #fff;
            border-radius: 3px;
            padding: 0 8px;
            cursor: pointer;
            font-size: 12px;
            line-height: 22px;
        }
        .selected-conds { padding-top: 0; }
        .selected-conds .filter-options { padding-right: 10px; }
        .filter-row.selected-conds { align-items: center; }
        .filter-row.selected-conds b { padding-top: 0; line-height: 1.6; }
        .filter-row.selected-conds .filter-act { line-height: 1.6; }
        .filter-row.selected-conds { border: 0; background: transparent; }
        .filter-row.selected-conds .cond-chip {
            border-color: #91caff;
            background: #f0f7ff;
            color: #0d4b80;
        }
        .cond-row {
            display: flex;
            align-items: center;
            gap: 10px;
            white-space: nowrap;
            overflow-x: auto;
            overflow-y: hidden;
            scrollbar-width: thin;
        }
        .cond-row .cond-mid { display: inline-flex; align-items: center; gap: 8px; }
        .cond-chip {
            display: inline-flex;
            align-items: center;
            gap: 4px;
            border: 1px solid #d9d9d9;
            background: #fff;
            color: #555;
            border-radius: 999px;
            padding: 2px 10px;
            font-size: 12px;
            margin: 0 8px 0 0;
            white-space: nowrap;
        }
        .cond-chip b { font-weight: 600; color:#333; }
        .cond-head { color:#666; font-size:12px; flex: 0 0 auto; }
        .selected-conds b { color:#888; font-weight:600; }
        .cond-clear-btn {
            display:inline-flex;
            align-items:center;
            gap:6px;
            color:#666;
            text-decoration:none;
            border: 0;
            background: transparent;
            padding: 0;
            font-size:12px;
            cursor:pointer;
            white-space: nowrap;
        }
        .cond-clear-btn:hover { color:#333; text-decoration: underline; }
        .filter-more-bar { text-align: center; background: #f8f8f8; border-top: 1px solid #eee; color: #666; font-size: 12px; padding: 4px 0; cursor: default; }
        .filter-more-btn {
            display: inline-block;
            border: 1px solid #ddd;
            background: #fff;
            color: #666;
            font-size: 12px;
            line-height: 1;
            padding: 6px 20px;
            text-decoration: none;
            cursor: pointer;
        }
        .filter-more-btn:hover { color: #333; border-color: #ccc; }
        .product-toolbar { display: flex; justify-content: space-between; align-items: center; padding: 10px 12px; border-bottom: 1px solid #eee; background: #fafafa; font-size: 13px; }
        .product-sort a { color:#666; text-decoration:none; margin:0 4px; cursor:pointer; }
        .product-sort a.active { color:#1677ff; font-weight:600; }
        .products { padding: 0 12px; }
        .product-item { display: grid; grid-template-columns: 88px minmax(0,1fr) 150px; gap: 10px; align-items: center; border-bottom: 1px solid #f0f0f0; padding: 10px 0; }
        .thumb { width: 72px; height: 72px; background: #f3f3f3; border: 1px solid #ececec; border-radius: 4px; overflow: hidden; }
        .thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }
        .p-name { font-size: 13px; color: #0d4b80; font-weight: 700; margin-bottom: 6px; }
        .p-meta { font-size: 12px; color: #666; line-height: 1.65; }
        .p-meta-grid {
            display: grid;
            grid-template-columns: 1fr 1fr;
            column-gap: 18px;
            row-gap: 2px;
            font-size: 12px;
            color: #666;
            line-height: 1.8;
        }
        .p-meta-grid .case-mb-line {
            grid-column: 1 / span 2;
            white-space: normal;
            word-break: break-word;
        }
        .p-meta-grid .gpu-io-line {
            grid-column: 1 / span 2;
            white-space: nowrap;
            overflow: hidden;
            text-overflow: ellipsis;
        }
        .p-meta-grid .cooler-scope-line {
            grid-column: 1 / span 2;
            white-space: nowrap;
            overflow: hidden;
            text-overflow: ellipsis;
        }
        .p-meta-grid .cooler-dim-line {
            min-width: 0;
            white-space: nowrap;
            overflow: hidden;
            text-overflow: ellipsis;
        }
        .p-meta-grid .cooler-dim-val {
            font-size: 10px;
            letter-spacing: -0.2px;
        }
        .p-meta-grid .monitor-iface-line {
            grid-column: 1 / span 2;
            white-space: nowrap;
            overflow: hidden;
            text-overflow: ellipsis;
        }
        .p-meta-grid .monitor-type-line {
            white-space: nowrap;
            overflow: hidden;
            text-overflow: ellipsis;
        }
        .p-meta-grid .monitor-efficiency-line {
            white-space: nowrap;
            overflow: hidden;
            text-overflow: ellipsis;
        }
        .p-meta-grid .monitor-panel-line {
            grid-column: 1 / span 2;
            white-space: nowrap;
            overflow: hidden;
            text-overflow: ellipsis;
        }
        .p-meta-grid .monitor-best-line {
            white-space: nowrap;
            overflow: hidden;
            text-overflow: ellipsis;
        }
        .p-right {
            display: flex;
            flex-direction: column;
            align-items: center;
            justify-content: flex-start;
            gap: 10px;
            justify-self: end;
            width: 132px;
        }
        .p-price {
            color: #f5222d;
            font-size: 16px;
            font-weight: 400;
            text-align: center;
            line-height: 1.1;
            padding-top: 2px;
            letter-spacing: 0;
            width: 100%;
        }
        .p-btn { text-align: right; }
        .p-btn button { background: #1677ff; color: #fff; border: 0; border-radius: 4px; padding: 10px 16px; cursor: pointer; font-size: 13px; }
        .pagebar { padding: 14px 12px; text-align: center; }
        .pagebar span { display: inline-block; border: 1px solid #ddd; padding: 6px 10px; margin: 0 3px; background: #fff; font-size: 12px; }
        .pagebar span.page-link { cursor: pointer; }
        .pagebar span.disabled { color: #bbb; cursor: not-allowed; }
        .pagebar .cur { background: #1677ff; border-color: #1677ff; color: #fff; }
        @media (max-width: 1024px) {
            .main { grid-template-columns: 1fr; }
            .product-item { grid-template-columns: 74px minmax(0,1fr) 120px; }
            .p-name { font-size: 16px; }
            .p-price { font-size: 16px; font-weight: 400; padding-top: 1px; }
            .p-right { width: 112px; }
        }
