/* ============================================
   SHENPAI Product Finder - Styles
   Matches existing theme: dark blue #2c4170,
   accent gold #DFB163, orange #f95e00, dark #353535
   ============================================ *//* --- Page Header Banner --- */.sp-finder-banner{background:url('../static/image/banner_nei3.jpg') no-repeat center center;background-size:cover;padding:60px 0;text-align:center;color:#fff;position:relative}.sp-finder-banner::before{content:'';position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(27, 99, 181, 0.7)}.sp-finder-banner h1{position:relative;z-index:1;font-size:36px;font-weight:700;margin-bottom:10px}.sp-finder-banner p{position:relative;z-index:1;font-size:16px;max-width:700px;margin:0 auto;opacity:0.9}/* --- Breadcrumb --- */.sp-breadcrumb{padding:12px 0;background:#f8f8f8;border-bottom:1px solid #e8e8e8;font-size:14px}.sp-breadcrumb a{color:#1b63b5;text-decoration:none}.sp-breadcrumb a:hover{color:#f95e00}.sp-breadcrumb span{color:#999;margin:0 6px}/* --- Tab Navigation --- */.sp-tabs{background:#fff;border-bottom:2px solid #e8e8e8;margin-bottom:0}.sp-tabs .sp-tab-list{list-style:none;margin:0;padding:0;display:flex}.sp-tabs .sp-tab-item{flex:1;text-align:center;cursor:pointer;padding:20px 15px;border-bottom:3px solid transparent;transition:all 0.3s ease;position:relative}.sp-tabs .sp-tab-item:hover{background:#f8f9fa}.sp-tabs .sp-tab-item.active{border-bottom-color:#1b63b5;background:#fff}.sp-tabs .sp-tab-title{font-size:16px;font-weight:600;color:#333;display:block;margin-bottom:4px}.sp-tabs .sp-tab-item.active .sp-tab-title{color:#1b63b5}.sp-tabs .sp-tab-desc{font-size:12px;color:#999;display:block}/* --- Tab Content Panels --- */.sp-tab-panels{background:#fff;border-bottom:1px solid #e8e8e8}.sp-tab-panel{display:none;padding:25px 30px}.sp-tab-panel.active{display:block}/* Product Type Panel */.sp-type-group{margin-bottom:20px}.sp-type-group h4{font-size:15px;font-weight:600;color:#333;margin-bottom:10px;padding-bottom:6px;border-bottom:1px solid #eee;display:flex;align-items:center;gap:8px}.sp-type-group h4 i{color:#1b63b5}.sp-type-options{display:flex;flex-wrap:wrap;gap:8px}.sp-type-options label{display:flex;align-items:center;gap:6px;padding:6px 14px;border:1px solid #ddd;border-radius:4px;cursor:pointer;font-size:13px;color:#555;transition:all 0.2s;background:#fff}.sp-type-options label:hover{border-color:#1b63b5;color:#1b63b5}.sp-type-options input[type="radio"]:checked + span,.sp-type-options label.selected{background:#1b63b5;color:#fff;border-color:#1b63b5}.sp-type-options input[type="radio"]{display:none}.sp-type-options label.selected{background:#1b63b5;color:#fff;border-color:#1b63b5}/* Series Panel */.sp-series-select{max-width:500px}.sp-series-select select{width:100%;padding:10px 15px;font-size:14px;border:1px solid #ddd;border-radius:4px;background:#fff;color:#333;cursor:pointer}/* Application Conditions Panel */.sp-conditions-grid{display:grid;grid-template-columns:repeat(auto-fill, minmax(250px, 1fr));gap:10px}.sp-conditions-grid label{display:flex;align-items:center;gap:8px;padding:10px 15px;border:1px solid #eee;border-radius:4px;cursor:pointer;font-size:13px;color:#555;transition:all 0.2s}.sp-conditions-grid label:hover{border-color:#1b63b5;background:#f0f5ff}.sp-conditions-grid input[type="checkbox"]:checked + span{color:#1b63b5;font-weight:600}/* --- Main Content Layout --- */.sp-finder-body{display:flex;gap:0;background:#f5f5f5;min-height:600px}/* --- Filter Sidebar --- */.sp-filter-sidebar{width:320px;min-width:320px;background:#fff;border-right:1px solid #e8e8e8;padding:20px;overflow-y:auto;max-height:calc(100vh - 200px);position:sticky;top:80px}.sp-filter-section{margin-bottom:22px;padding-bottom:18px;border-bottom:1px solid #f0f0f0}.sp-filter-section:last-child{border-bottom:none}.sp-filter-section h5{font-size:13px;font-weight:600;color:#333;margin-bottom:12px;text-transform:uppercase;letter-spacing:0.5px}/* Unit Toggle */.sp-unit-toggle{display:flex;gap:4px;background:#f0f0f0;border-radius:4px;padding:3px;margin-bottom:20px}.sp-unit-toggle button{flex:1;padding:6px 12px;border:none;background:transparent;font-size:12px;font-weight:600;color:#666;cursor:pointer;border-radius:3px;transition:all 0.2s}.sp-unit-toggle button.active{background:#1b63b5;color:#fff}/* Range Slider */.sp-range-filter{margin-bottom:16px}.sp-range-filter label{display:block;font-size:12px;color:#666;margin-bottom:8px;font-weight:500}.sp-range-inputs{display:flex;align-items:center;gap:8px}.sp-range-inputs input{width:80px;padding:5px 8px;border:1px solid #ddd;border-radius:3px;font-size:12px;text-align:center;color:#333}.sp-range-inputs .sp-range-sep{color:#999;font-size:12px}.sp-range-slider{margin-top:8px;position:relative;height:6px;background:#e0e0e0;border-radius:3px}.sp-range-slider .sp-range-track{position:absolute;height:100%;background:#1b63b5;border-radius:3px}.sp-range-slider .sp-range-thumb{position:absolute;top:50%;width:16px;height:16px;background:#fff;border:2px solid #1b63b5;border-radius:50%;transform:translate(-50%, -50%);cursor:pointer;z-index:2;transition:box-shadow 0.2s}.sp-range-slider .sp-range-thumb:hover,.sp-range-slider .sp-range-thumb.dragging{box-shadow:0 0 0 4px rgba(27, 99, 181, 0.2)}/* Dropdown Filter */.sp-dropdown-filter select{width:100%;padding:7px 10px;border:1px solid #ddd;border-radius:3px;font-size:12px;color:#333;background:#fff;cursor:pointer;margin-bottom:6px}/* Checkbox Group */.sp-checkbox-group{display:flex;flex-wrap:wrap;gap:6px}.sp-checkbox-group label{display:flex;align-items:center;gap:5px;font-size:12px;color:#555;cursor:pointer;padding:3px 0}.sp-checkbox-group input[type="checkbox"]{width:14px;height:14px;accent-color:#1b63b5}/* --- Results Area --- */.sp-results-area{flex:1;padding:20px 25px;min-width:0}/* Results Header */.sp-results-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px;padding:12px 16px;background:#fff;border-radius:4px;box-shadow:0 1px 3px rgba(0,0,0,0.08)}.sp-results-count{font-size:14px;color:#555}.sp-results-count strong{color:#1b63b5;font-size:18px}.sp-results-sort{display:flex;align-items:center;gap:8px;font-size:13px;color:#666}.sp-results-sort select{padding:5px 10px;border:1px solid #ddd;border-radius:3px;font-size:12px;background:#fff;cursor:pointer}/* Mobile Filter Toggle */.sp-filter-toggle{display:none;padding:10px 16px;background:#1b63b5;color:#fff;border:none;border-radius:4px;font-size:14px;cursor:pointer;margin-bottom:15px;width:100%}.sp-filter-toggle i{margin-right:6px}/* --- Product Cards Grid --- */.sp-products-grid{display:grid;grid-template-columns:repeat(3, 1fr);gap:16px}/* Product Card */.sp-product-card{background:#fff;border-radius:6px;overflow:hidden;box-shadow:0 1px 4px rgba(0,0,0,0.08);transition:box-shadow 0.3s,transform 0.3s;display:flex;flex-direction:column}.sp-product-card:hover{box-shadow:0 4px 16px rgba(0,0,0,0.12);transform:translateY(-2px)}/* Card Header */.sp-card-header{display:flex;justify-content:space-between;align-items:flex-start;padding:12px 15px 0}.sp-card-name{font-size:14px;font-weight:700;color:#333;margin:0}/* 收藏星标：由 <span onclick> 改成真按钮，样式保持原样 */.sp-card-bookmark{color:#ccc;cursor:pointer;font-size:16px;transition:color 0.2s;background:none;border:0;padding:0 2px;line-height:1}.sp-card-bookmark:hover,.sp-card-bookmark.on{color:#f95e00}/* Card Image */.sp-card-image{padding:15px;text-align:center;/* 纯白，不是 #fafafa：抽样 303 张实拍图的边缘中位数 RGB 全是 (255,255,255)，
     面板比图暗 5 级就会在每张卡片里框出一个更亮的白方块，满幅水印被框在里面，
     读起来像扫描件。改纯白后照片边界消失。 */background:#fff;min-height:160px;display:flex;align-items:center;justify-content:center}.sp-card-image img{max-width:100%;max-height:140px;object-fit:contain}.sp-card-placeholder{width:120px;height:120px;background:#e8e8e8;border-radius:50%;display:flex;align-items:center;justify-content:center;color:#bbb;font-size:40px}.sp-card-badges{display:flex;gap:4px;position:absolute;top:8px;left:8px}.sp-card-badge{font-size:10px;padding:2px 6px;border-radius:3px;background:#e3f2fd;color:#1565c0;font-weight:600}/* Card Info */.sp-card-info{padding:0 15px;font-size:12px;color:#888}.sp-card-info span{margin-right:12px}/* Card Specs - Icon Row */.sp-card-specs{display:flex;justify-content:space-around;padding:12px 10px;border-top:1px solid #f0f0f0;margin-top:auto}.sp-spec-item{text-align:center;font-size:11px;color:#666}.sp-spec-item .sp-spec-icon{display:block;font-size:16px;color:#1b63b5;margin-bottom:2px}.sp-spec-item .sp-spec-value{display:block;font-weight:700;color:#333;font-size:13px}.sp-spec-item .sp-spec-label{display:block;font-size:10px;color:#999}/* Card Actions */.sp-card-actions{display:flex;border-top:1px solid #f0f0f0}/* 询价与对比原来是 href="#" 的伪链接，现在是真按钮 —— 两种都要落到同一套样式上 */.sp-card-actions a,.sp-card-actions button{flex:1;text-align:center;padding:10px;font-size:12px;color:#1b63b5;text-decoration:none;transition:all 0.2s;border-right:1px solid #f0f0f0;background:none;border-top:0;border-left:0;border-bottom:0;font-family:inherit;cursor:pointer}.sp-card-actions a:last-child,.sp-card-actions button:last-child{border-right:none}.sp-card-actions a:hover,.sp-card-actions button:hover{background:#1b63b5;color:#fff}.sp-card-actions a.sp-btn-detail{flex:2;font-weight:600}/* 已加入对比：按钮自己就是状态显示，买家不必去托盘里数 */.sp-card-actions .sp-card-cmp.on{background:#1b63b5;color:#fff}/* --- Pagination --- */.sp-pagination{display:flex;justify-content:center;align-items:center;gap:4px;margin-top:30px;padding:20px 0}.sp-pagination button{min-width:36px;height:36px;border:1px solid #ddd;background:#fff;color:#555;font-size:13px;cursor:pointer;border-radius:3px;transition:all 0.2s;display:flex;align-items:center;justify-content:center}.sp-pagination button:hover{border-color:#1b63b5;color:#1b63b5}.sp-pagination button.active{background:#1b63b5;color:#fff;border-color:#1b63b5}.sp-pagination button:disabled{opacity:0.4;cursor:not-allowed}.sp-pagination .sp-page-info{font-size:13px;color:#888;margin:0 12px}/* --- No Results --- */.sp-no-results{text-align:center;padding:60px 20px;color:#999}.sp-no-results i{font-size:48px;margin-bottom:16px;display:block;color:#ddd}.sp-no-results h3{font-size:18px;color:#666;margin-bottom:8px}.sp-no-results p{font-size:14px}.sp-no-results button{margin-top:16px;padding:8px 24px;background:#1b63b5;color:#fff;border:none;border-radius:4px;cursor:pointer;font-size:14px}/* --- Loading --- */.sp-loading{text-align:center;padding:40px}.sp-loading .sp-spinner{width:40px;height:40px;border:3px solid #e8e8e8;border-top-color:#1b63b5;border-radius:50%;animation:sp-spin 0.8s linear infinite;margin:0 auto 12px}@keyframes sp-spin{to{transform:rotate(360deg)}}/* --- Reset Filters Button --- */.sp-reset-filters{display:block;width:100%;padding:8px;margin-top:15px;background:none;border:1px solid #ddd;border-radius:4px;color:#666;font-size:12px;cursor:pointer;transition:all 0.2s}.sp-reset-filters:hover{border-color:#f95e00;color:#f95e00}/* --- Active Filter Tags --- */.sp-active-filters{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:15px}.sp-filter-tag{display:inline-flex;align-items:center;gap:4px;padding:4px 10px;background:#e3f2fd;color:#1565c0;border-radius:12px;font-size:11px}.sp-filter-tag .sp-tag-remove{cursor:pointer;font-size:14px;line-height:1;opacity:0.7}.sp-filter-tag .sp-tag-remove:hover{opacity:1}/* 「+N more」与「Clear all」跟 tag 同形不同色：前者是展开器，后者是危险动作，
   都不该长得像一个还生效着的筛选条件。 */.sp-filter-tag.sp-tag-more,.sp-filter-tag.sp-tag-clear{cursor:pointer;background:#f2f4f6;color:#5b6670}.sp-filter-tag.sp-tag-more:hover{background:#e6e9ec}.sp-filter-tag.sp-tag-clear{color:#b03a2e}.sp-filter-tag.sp-tag-clear:hover{background:#fdecea}/* --- Filter Contact Section --- */.sp-filter-contact{margin-top:20px;padding:16px;background:#f0f5ff;border-radius:6px;border:1px solid #d0e0f5}.sp-filter-contact h5{font-size:14px;font-weight:700;color:#1b63b5;margin-bottom:6px}.sp-filter-contact p{font-size:12px;color:#666;margin-bottom:10px}.sp-filter-contact a{display:inline-flex;align-items:center;gap:6px;padding:8px 16px;background:#1b63b5;color:#fff;text-decoration:none;border-radius:4px;font-size:13px;font-weight:600;transition:background 0.2s}.sp-filter-contact a:hover{background:#154e91}/* --- Availability Indicator --- */.sp-avail-dot{display:inline-block;width:10px;height:10px;border-radius:50%;margin-left:8px;vertical-align:middle}.sp-avail-instock{background:#4caf50}.sp-avail-limited{background:#ff9800}.sp-avail-outofstock{background:#ccc}/* --- Product Detail Modal --- */.sp-modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0.6);z-index:9999;display:flex;align-items:flex-start;justify-content:center;padding:40px 20px;overflow-y:auto}.sp-modal{background:#fff;border-radius:8px;max-width:900px;width:100%;position:relative;max-height:90vh;overflow-y:auto}.sp-modal-close{position:absolute;top:12px;right:16px;background:none;border:none;font-size:28px;color:#999;cursor:pointer;z-index:10;line-height:1}.sp-modal-close:hover{color:#333}.sp-modal-body{padding:30px}.sp-modal-image{text-align:center;padding:20px;background:#fff;/* 同 .sp-card-image；弹窗是原图满幅显示，接缝比卡片更明显 */border-radius:6px;min-height:200px;display:flex;align-items:center;justify-content:center}.sp-modal-badges{margin:8px 0}/* 安装尺寸图：400x340 的白底 PNG 线稿，限高避免在窄屏把弹窗撑长 *//* 安装尺寸图的高度因款而异，没法写死宽高属性；给个下限，
   免得图一到位就把下面的内容整段推走。 */.sp-modal-mount{text-align:center;background:#fff;padding:8px 0;min-height:200px}.sp-modal-mount img{max-width:100%;max-height:260px;object-fit:contain}.sp-modal-mount-note{margin:4px 0 0;font-size:11.5px;color:#8a939b;text-align:center}.sp-modal-actions{margin-top:16px;display:flex;gap:10px;flex-wrap:wrap}.sp-modal-actions a{display:inline-flex;align-items:center;gap:6px;padding:10px 20px;border-radius:4px;text-decoration:none;font-size:13px;font-weight:600;transition:all 0.2s}.sp-btn-inquiry{background:#1b63b5;color:#fff !important}.sp-btn-inquiry:hover{background:#154e91}.sp-btn-pdf{background:#e74c3c;color:#fff !important}.sp-btn-pdf:hover{background:#c0392b}.sp-modal-section{margin-top:25px;padding-top:20px;border-top:1px solid #eee}.sp-modal-section h4{font-size:16px;font-weight:700;margin-bottom:12px;color:#333}/* Rating Bars */.sp-rating-row{display:flex;align-items:center;gap:12px;margin-bottom:8px}.sp-rating-label{width:160px;font-size:13px;color:#555;flex-shrink:0}.sp-rating-bar{flex:1;height:8px;background:#e8e8e8;border-radius:4px;overflow:hidden}.sp-rating-fill{height:100%;background:#1b63b5;border-radius:4px;transition:width 0.5s}.sp-rating-value{width:70px;font-size:12px;color:#888;text-align:right;flex-shrink:0}/* Specs Table */.sp-specs-table{width:100%;border-collapse:collapse}.sp-specs-table td{padding:8px 12px;font-size:13px;border-bottom:1px solid #f0f0f0}.sp-specs-table td:first-child{color:#666;width:40%;font-weight:500}.sp-specs-table td:last-child{color:#333;font-weight:600}.sp-specs-table tr:hover{background:#f8f9fa}/* Related Products */.sp-modal-related{display:flex;gap:12px;flex-wrap:wrap}/* ============================================================
   按系列浏览：分组 → 系列码 → 轮片区块矩阵 → 型号原地展开
   矩阵方向与产品册一致：行 = 轮径，列 = 结构
   ============================================================ */.sp-viewbar{display:flex;gap:8px;margin-bottom:16px}.sp-vbtn{border:1px solid #d9e0e6;background:#fff;color:#5a6b7a;padding:8px 16px;cursor:pointer;font-size:14px;font-family:inherit;display:flex;align-items:baseline;gap:7px;transition:all .15s}.sp-vbtn span{font-size:11px;opacity:.7}.sp-vbtn:hover{border-color:#1b63b5;color:#1b63b5}.sp-vbtn.on{background:#1b63b5;border-color:#1b63b5;color:#fff}.sp-vbtn.on span{opacity:.8}#sp-browse{display:none}.sp-results-area.sp-browsing #sp-browse{display:block}.sp-results-area.sp-browsing .sp-results-header,.sp-results-area.sp-browsing #sp-products-grid,.sp-results-area.sp-browsing #sp-pagination{display:none}.sp-bhead h3{margin:0 0 4px;font-size:19px}.sp-bhead h3 span{font-size:13px;color:#8a949c;font-weight:400;margin-left:6px}.sp-bhead p{margin:0 0 18px;color:#7b858d;font-size:13.5px}.sp-gcards{display:grid;grid-template-columns:repeat(auto-fill, minmax(190px, 1fr));gap:12px}.sp-gcard{border:1px solid #e2e8ed;background:#fff;padding:15px 16px;cursor:pointer;text-align:left;font-family:inherit;display:flex;flex-direction:column;gap:2px;transition:all .15s}.sp-gcard:hover{border-color:#1b63b5;box-shadow:0 2px 10px rgba(27,99,181,.09)}.sp-gcard b{font-size:15.5px;color:#23303a}.sp-gcard em{font-style:normal;font-size:11.5px;color:#98a2aa}.sp-gcard .sp-gcodes{font-family:Consolas,Menlo,monospace;font-size:11.5px;color:#7b858d;margin-top:6px}.sp-gcard .sp-gnum{font-size:12px;color:#1b63b5;margin-top:2px}.sp-scard b{font-family:Consolas,Menlo,monospace;font-size:20px}.sp-gcard.sp-pending{cursor:default;background:#fafbfc;border-style:dashed;color:#a8b2ba}.sp-gcard.sp-pending b{color:#a8b2ba}.sp-gcard.sp-pending .sp-gnum{color:#b8a06a}.sp-gcard.sp-pending:hover{border-color:#e2e8ed;box-shadow:none}.sp-empty{border:1px dashed #d9e0e6;background:#fafbfc;padding:34px 24px;text-align:center}.sp-empty b{display:block;font-family:Consolas,Menlo,monospace;font-size:26px;color:#8a949c;margin-bottom:8px}.sp-empty p{margin:0 0 4px;color:#7b858d;font-size:14px}.sp-empty .sp-empty-hint{font-size:13px;color:#a8b2ba}.sp-bcrumb{font-size:13.5px;color:#8a949c;margin-bottom:14px}.sp-bcrumb button{border:0;background:none;color:#1b63b5;cursor:pointer;font:inherit;padding:0}.sp-bcrumb button:hover{text-decoration:underline}.sp-bcrumb b{color:#23303a}.sp-shead{display:flex;align-items:flex-end;gap:26px;padding-bottom:14px;border-bottom:2px solid #23303a;margin-bottom:12px}.sp-scode{font-family:Consolas,Menlo,monospace;font-size:40px;font-weight:600;line-height:1}.sp-sstat{text-align:right;margin-left:auto}.sp-sstat + .sp-sstat{margin-left:0}.sp-sstat span{display:block;font-family:Consolas,Menlo,monospace;font-size:19px;font-weight:600}.sp-sstat em{font-style:normal;font-size:11px;color:#8a949c;text-transform:uppercase;letter-spacing:.04em}.sp-bidx{display:flex;gap:7px;overflow-x:auto;padding:10px 0 14px}.sp-bidx a{flex:none;font-family:Consolas,Menlo,monospace;font-size:11.5px;padding:4px 10px;border:1px solid #d9e0e6;color:#7b858d;text-decoration:none;white-space:nowrap;background:#fff}.sp-bidx a:hover{border-color:#1b63b5;color:#1b63b5}.sp-blk{border:1px solid #e2e8ed;background:#fff;margin-bottom:22px;scroll-margin-top:12px}.sp-blk-h{display:flex;gap:14px;align-items:center;padding:12px 16px;border-bottom:1px solid #eef2f5;flex-wrap:wrap}.sp-blk-n{font-family:Consolas,Menlo,monospace;font-size:12.5px;font-weight:600;color:#fff;background:#d9760f;width:24px;height:24px;display:flex;align-items:center;justify-content:center;flex:none}.sp-blk-t b{font-size:15.5px}.sp-blk-code{font-family:Consolas,Menlo,monospace;font-size:12px;color:#98a2aa;margin-left:8px}.sp-blk-meta{font-size:12px;color:#8a949c;margin-top:1px}.sp-blk-load{margin-left:auto;font-family:Consolas,Menlo,monospace;font-size:12.5px;color:#7b858d;white-space:nowrap}.sp-mxw{overflow-x:auto}table.sp-mx{border-collapse:collapse;width:100%;min-width:640px;font-size:13px}table.sp-mx thead th{background:#1b63b5;color:#fff;padding:6px 9px;font-weight:500;font-size:11.5px;line-height:1.35;text-align:center;border-right:1px solid rgba(255,255,255,.18);vertical-align:bottom}table.sp-mx thead th:last-child{border-right:0}table.sp-mx thead th span{display:block;font-size:10px;opacity:.8;font-weight:400}table.sp-mx thead th.sp-rowh{background:#2c76c8;text-align:left;width:92px}table.sp-mx tbody th{background:#eef4fa;font-family:Consolas,Menlo,monospace;font-weight:600;font-size:13.5px;padding:7px 9px;text-align:left;border-bottom:1px solid #eef2f5;white-space:nowrap}table.sp-mx tbody td{border-bottom:1px solid #eef2f5;border-right:1px solid #eef2f5;padding:0;text-align:center}table.sp-mx tbody td:last-child{border-right:0}table.sp-mx tbody tr:last-child th,table.sp-mx tbody tr:last-child td{border-bottom:0}.sp-mx-cell{display:block;width:100%;border:0;background:none;font-family:Consolas,Menlo,monospace;color:inherit;padding:6px 5px;cursor:pointer;font-size:12px;line-height:1.4}.sp-mx-cell b{display:block;font-weight:600}.sp-mx-cell span{color:#8a949c;font-size:10.5px}.sp-mx-cell:hover{background:#eef4fa}.sp-mx-cell.on{background:#fff4e2;box-shadow:inset 0 0 0 2px #d9760f}.sp-mx-none{display:block;padding:6px 5px;color:#ccd4da;font-family:Consolas,Menlo,monospace;font-size:12px}/* 窄屏矩阵：尺寸分段 + 结构卡片。
   74% 的区块表宽超过手机视口（最宽 1886px vs 390px），横向拖表是可用性陷阱。
   尺寸轴最多 6 个所以做分段控件，结构轴最多 23 个所以做卡片列表 —— 每格一卡，不吞 SKU。 */.sp-mxm{display:none;padding:10px 12px 12px}.sp-mxm-sizes{display:flex;gap:6px;overflow-x:auto;padding-bottom:10px}.sp-mxm-sz{flex:none;font-family:Consolas,Menlo,monospace;font-size:13px;font-weight:600;padding:6px 14px;border:1px solid #d9e0e6;background:#fff;color:#5a6b7a;cursor:pointer}.sp-mxm-sz.on{background:#1b63b5;border-color:#1b63b5;color:#fff}.sp-mxm-list{display:flex;flex-direction:column;gap:7px}.sp-mxm-card{display:grid;grid-template-columns:1fr auto;gap:1px 10px;align-items:baseline;border:1px solid #e2e8ed;background:#fff;padding:9px 12px;cursor:pointer;text-align:left;font-family:inherit;width:100%}.sp-mxm-card.off{display:none}.sp-mxm-card.on{background:#fff4e2;border-color:#d9760f}.sp-mxm-col{font-size:13px;color:#23303a;font-weight:500}.sp-mxm-card b{grid-row:2;font-family:Consolas,Menlo,monospace;font-size:13px;font-weight:600}.sp-mxm-spec{grid-column:2;grid-row:1/span 2;font-size:12px;color:#8a949c;font-family:Consolas,Menlo,monospace;white-space:nowrap}@media (max-width: 720px){.sp-mxw{display:none}.sp-mxm{display:block}}/* 原地展开：点矩阵格子后在本区块内打开，不跳转、不弹窗 */.sp-det{max-height:0;overflow:hidden;transition:max-height .22s ease;border-top:0 solid #d9760f}.sp-det.on{max-height:560px;border-top-width:2px}@media (prefers-reduced-motion: reduce){.sp-det{transition:none}}.sp-det-in{padding:16px 18px;background:#fdf6ec;display:grid;grid-template-columns:1fr 1fr;gap:14px 30px}.sp-det-hd{grid-column:1/-1;display:flex;align-items:baseline;gap:12px;flex-wrap:wrap;padding-bottom:10px;border-bottom:1px solid #e6d9c4}.sp-det-sku{font-family:Consolas,Menlo,monospace;font-size:19px;font-weight:600;user-select:all}.sp-det-nm{font-size:13.5px;color:#7b858d}.sp-det-act{margin-left:auto;display:flex;gap:7px}.sp-det-b{border:1px solid #d9760f;background:#fff;color:#d9760f;font:inherit;font-size:12px;padding:4px 11px;cursor:pointer}.sp-det-b:hover{background:#d9760f;color:#fff}.sp-det dl{margin:0;display:grid;grid-template-columns:auto 1fr;gap:4px 12px;font-size:13px;align-content:start}.sp-det dt{color:#8a949c}.sp-det dd{margin:0;font-family:Consolas,Menlo,monospace}.sp-det-files{grid-column:1/-1;display:flex;gap:9px;padding-top:9px;border-top:1px solid #e6d9c4}.sp-det-files a,.sp-det-files span{font-size:12px;padding:4px 11px;border:1px solid #e0d5c2;background:#fff;text-decoration:none}.sp-det-files a{color:#1b63b5;border-color:#1b63b5}.sp-det-files span{color:#b3aa9c}@media (max-width: 720px){.sp-det-in{grid-template-columns:1fr}.sp-shead{gap:16px}}/* --- 卡片上的零件号 --- *//* 买家唯一能复制进询价邮件的唯一标识，等宽以便逐字核对 */.sp-card-sku{padding:0 12px 6px;margin-top:-4px;font-family:"SFMono-Regular",Consolas,"Liberation Mono",Menlo,monospace;font-size:11.5px;letter-spacing:0.02em;color:#7b858d;user-select:all}.sp-card-lead{font-size:11.5px;color:#2e7d5b;background:#e6f2ec;padding:2px 8px;white-space:nowrap}.sp-card-sib{font-size:11.5px;color:#1b63b5;background:#eef4fa;padding:2px 8px;white-space:nowrap}/* --- 无障碍：读屏专用文字 + 键盘焦点可见 --- *//* 视觉上藏起来但读屏要能读到 —— 不能用 display:none 或 visibility:hidden，那样读屏也读不到 */.sp-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}/* 这一批现在都是键盘可达的（四扇门标题改成了 <button>，chip 补了 tabindex），
   焦点必须看得见，否则键盘用户不知道自己走到哪儿了。用 :focus-visible 而不是
   :focus，鼠标点击时不会多出一圈框。 */.sp-door:focus-visible,.sp-struct:focus-visible,.sp-seg:focus-visible,.sp-app:focus-visible,.sp-need:focus-visible,.sp-tag-remove:focus-visible,.sp-tag-more:focus-visible,.sp-tag-clear:focus-visible,.sp-modal-close:focus-visible,.sp-inquiry-modal-close:focus-visible,.sp-pagination button:focus-visible,.sp-unit-toggle button:focus-visible,.sp-calc-toggle:focus-visible{outline:2px solid #1b63b5;outline-offset:2px}.sp-tag-remove,.sp-tag-more,.sp-tag-clear{cursor:pointer}/* --- Facet 计数与置灰 --- *//* 命中 0 的选项保留可见但不可点：用户看得见产品线的形状，也不会点出空列表 */.sp-facet-count{margin-left:6px;font-size:11px;font-variant-numeric:tabular-nums;color:#9aa3ab;font-weight:400}.sp-facet-empty{opacity:0.42;cursor:not-allowed}.sp-facet-empty .sp-facet-count{color:#b9c0c6}.sp-type-options label.sp-facet-empty{pointer-events:none}.sp-checkbox-group label.sp-facet-empty,.sp-conditions-grid label.sp-facet-empty{pointer-events:none}/* 四扇门的按钮以前漏在这条规则外面 —— 上面那句「保留可见但不可点」对侧栏成立，
   对门里从来没成立过：.sp-facet-empty 只给了 opacity .42，pointer-events 仍是 auto，
   连 cursor: not-allowed 都被后面的 .sp-need{cursor:pointer} 按层叠顺序盖了回去。
   实测后果：门 D 先点 Flame retardant（328 条），Quiet running 的计数变成 0 且已置灰，
   但它照样点得下去 —— 点完结果 0 条、两枚 chip 都挂着、整个侧栏全灰，
   用户只能靠 Reset 退出。门 D 276 个两两组合里有 53 个通向这个死胡同，
   门 B 的分段控件与门 C 同理。 */.sp-struct.sp-facet-empty,.sp-seg.sp-facet-empty,.sp-app.sp-facet-empty,.sp-need.sp-facet-empty{pointer-events:none;cursor:not-allowed}select[data-filter] option:disabled{color:#b9c0c6}/* 语义分组：同轮径的其它配置 / 同配置的其它轮径 */.sp-related-group{flex:1 1 100%;display:flex;flex-wrap:wrap;gap:12px}.sp-related-group h5{flex:1 1 100%;margin:0;font-size:11px;font-weight:600;letter-spacing:0.05em;text-transform:uppercase;color:#8a8a8a}.sp-related-item img{border-radius:4px;background:#fff}.sp-related-item{display:flex;flex-direction:column;align-items:center;gap:6px;padding:12px;border:1px solid #eee;border-radius:6px;cursor:pointer;transition:all 0.2s;font-size:12px;color:#555;text-align:center;width:120px}.sp-related-item:hover{border-color:#1b63b5;background:#f0f5ff}/* --- Compare Tray --- */.sp-compare-tray{position:fixed;bottom:0;left:0;right:0;background:#353535;color:#fff;padding:12px 0;z-index:999;box-shadow:0 -2px 10px rgba(0,0,0,0.2)}.sp-compare-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px;font-size:14px}.sp-compare-clear{background:none;border:1px solid rgba(255,255,255,0.3);color:#fff;padding:4px 12px;border-radius:3px;cursor:pointer;font-size:12px}.sp-compare-clear:hover{border-color:#f95e00;color:#f95e00}.sp-compare-items{display:flex;gap:10px;flex-wrap:wrap}.sp-compare-item{display:flex;align-items:center;gap:8px;background:rgba(255,255,255,0.1);padding:6px 12px;border-radius:4px;font-size:13px}.sp-compare-item button{background:none;border:none;color:#f95e00;font-size:16px;cursor:pointer;line-height:1}.sp-compare-now{background:#1b63b5;color:#fff;border:none;padding:8px 20px;border-radius:4px;cursor:pointer;font-size:13px;font-weight:600;margin-left:12px;transition:background 0.2s}.sp-compare-now:hover{background:#f95e00}/* ============================================
   RESPONSIVE
   ============================================ */@media (max-width: 1200px){.sp-filter-sidebar{width:280px;min-width:280px}}@media (max-width: 991px){.sp-finder-body{flex-direction:column}.sp-filter-sidebar{width:100%;min-width:auto;max-height:none;position:static;display:none;border-right:none;border-bottom:1px solid #e8e8e8}.sp-filter-sidebar.show{display:block}.sp-filter-toggle{display:block}.sp-products-grid{grid-template-columns:repeat(2, 1fr)}.sp-filter-sidebar{width:260px;min-width:260px}.sp-tabs .sp-tab-list{flex-direction:column}.sp-tabs .sp-tab-item{border-bottom:none;border-left:3px solid transparent;text-align:left;padding:12px 15px}.sp-tabs .sp-tab-item.active{border-left-color:#1b63b5;border-bottom:none}}@media (max-width: 767px){.sp-products-grid{grid-template-columns:1fr}.sp-finder-banner{padding:30px 0}.sp-finder-banner h1{font-size:24px}.sp-results-header{flex-direction:column;gap:10px;align-items:flex-start}.sp-card-specs{flex-wrap:wrap;gap:8px}.sp-spec-item{width:calc(33% - 8px)}.sp-conditions-grid{grid-template-columns:1fr}.sp-type-options{flex-direction:column}.sp-type-options label{width:100%}}/* ── 对比弹窗 ──
   此前只有底部托盘的样式，弹窗本身的 HTML 和样式都不存在，
   「Compare Now」按钮点了没有任何反应（JS 撞上 if (!modal) return 静默退出）。
   遮罩与卡片直接复用产品弹窗那套，这里只放宽宽度并让表格自己横滚 ——
   最多同时对比 4 款，窄屏下让表格滚动比压缩列宽可读。 */.sp-modal-compare{max-width:1160px}.sp-compare-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch}.sp-compare-table{width:100%;border-collapse:collapse;min-width:640px}.sp-compare-table th,.sp-compare-table td{padding:9px 12px;font-size:13px;text-align:left;border-bottom:1px solid #f0f0f0;vertical-align:top}/* 表头随内容滚动时钉在顶部，否则往下看规格就认不出是哪一列的产品了 */.sp-compare-table thead th{position:sticky;top:0;z-index:1;background:#fff;font-size:12.5px;line-height:1.35;border-bottom:2px solid #e5e5e5}.sp-compare-table tbody tr:hover{background:#f8f9fa}.sp-compare-table td:first-child{white-space:nowrap}/* ═══════════════ 四扇门（替掉原来的三个 tab）═══════════════
   一级不是一棵树，是四个并列入口：按形态 / 按载重尺寸 / 按用途 / 按需求。
   点开原地 accordion 展开，同时只允许一扇打开 —— 桌面不必滚动，
   窄屏首屏也就四行。所有选项共用 .on 作为选中态。 */.sp-doors{background:#fff;border-bottom:1px solid #e8ebee}.sp-door-list{display:flex;list-style:none;margin:0;padding:0}.sp-door{/* 这是个 <button>（键盘可达），所以要把浏览器默认的按钮外观复位掉 */background:none;border:0;font:inherit;color:inherit;text-align:left;width:100%;flex:1;padding:16px 18px;cursor:pointer;border-bottom:3px solid transparent;transition:background .15s,border-color .15s;display:flex;flex-direction:column;gap:2px;position:relative}.sp-door + .sp-door{border-left:1px solid #f0f2f4}.sp-door:hover{background:#f7f9fb}.sp-door.active{border-bottom-color:#1b63b5;background:#f7f9fb}.sp-door > i{font-size:20px;color:#1b63b5;margin-bottom:4px}.sp-door-title{font-size:15px;font-weight:600;color:#24303a}.sp-door.active .sp-door-title{color:#1b63b5}.sp-door-desc{font-size:12px;color:#7b858e;line-height:1.35}.sp-door-panels{background:#f7f9fb}.sp-door-panel{display:none;padding:18px 0 20px}.sp-door-panel.active{display:block}/* ── 门 A：结构卡片，配厂方线稿 ── */.sp-struct-grid{display:grid;grid-template-columns:repeat(auto-fill, minmax(148px, 1fr));gap:10px}.sp-struct{background:#fff;border:1px solid #dfe4e8;border-radius:6px;padding:12px 10px 10px;cursor:pointer;text-align:center;display:flex;flex-direction:column;align-items:center;gap:2px;transition:border-color .15s,box-shadow .15s}.sp-struct:hover{border-color:#1b63b5;box-shadow:0 2px 8px rgba(27,99,181,.10)}.sp-struct.on{border-color:#1b63b5;background:#eef4fb;box-shadow:inset 0 0 0 1px #1b63b5}/* 线稿给到 64px：顶板款与丝杆款的差别只有一条很细的竖线，32px 下分不出来 */.sp-struct .sp-ico{width:64px;height:64px;object-fit:contain}.sp-struct-name{font-size:13px;font-weight:600;color:#24303a;line-height:1.3}.sp-struct-zh{font-size:11.5px;color:#8a939b}/* ── 门 B：三行分段控件。载重与轮径不配图，数字本身就是图形 ── */.sp-seg-row + .sp-seg-row{margin-top:16px}.sp-seg-row h5{font-size:13px;font-weight:600;color:#4a555e;margin:0 0 8px}.sp-seg-row h5 em{font-style:normal;color:#9aa3ab;font-weight:400;margin-left:6px}.sp-segs{display:flex;flex-wrap:wrap;gap:8px}.sp-seg{background:#fff;border:1px solid #dfe4e8;border-radius:4px;padding:8px 14px;font-size:13px;color:#24303a;cursor:pointer;transition:border-color .15s,background .15s}.sp-seg:hover{border-color:#1b63b5}.sp-seg.on{border-color:#1b63b5;background:#1b63b5;color:#fff}.sp-seg.on .sp-facet-count{color:#cfe0f5}.sp-seg em{font-style:normal;color:#9aa3ab;margin-left:5px;font-size:12px}.sp-seg.on em{color:#cfe0f5}.sp-segs-ico .sp-seg{display:flex;flex-direction:column;align-items:center;gap:2px;padding:10px 14px}.sp-segs-ico .sp-ico{width:56px;height:56px;object-fit:contain}.sp-segs-ico .sp-seg.on .sp-ico{filter:brightness(0) invert(1)}/* 计算器落点提示：虚线描边，与 .sp-seg.on（实心蓝底白字）在视觉上必须明确区分 ——
   做成实心的话用户会以为这一档已经被选中了，而计算器从来不点档位（档位的 data-f
   同时带 max，点下去会放进比 T 弱的货、又挡掉比 T 强的货）。 */.sp-seg-hint{outline:2px dashed #1b63b5;outline-offset:2px}/* ── 门 B 内的载重计算器 ── */.sp-calc-toggle{display:inline-block;margin-top:10px;padding:0;border:0;background:none;font-size:12.5px;color:#1b63b5;cursor:pointer;text-align:left}.sp-calc-toggle:hover{text-decoration:underline}/* 箭头做成独立节点而不是 ::after —— 中文 <em> 排在按钮末尾，
   用 ::after 箭头会被挤到中文后面去 */.sp-calc-arrow{display:inline-block;margin-left:5px;transition:transform .15s}.sp-calc-toggle.open .sp-calc-arrow{transform:rotate(90deg)}.sp-calc-toggle em{font-style:normal;color:#9aa3ab;margin-left:6px;font-size:11.5px}.sp-calc{margin-top:12px;padding:14px 16px;background:#fff;border:1px solid #e3e8ee;border-radius:6px}/* 主题里的 div{display:block} 会压过 hidden 属性，必须显式写死 */.sp-calc[hidden],.sp-calc [hidden]{display:none !important}.sp-calc-fields{display:grid;grid-template-columns:repeat(2, 1fr);gap:10px 18px}.sp-calc-f{display:block;margin:0;font-weight:400}.sp-calc-f > span:first-child{display:block;font-size:13px;color:#4a555e;margin-bottom:4px}.sp-calc-f em{font-style:normal;font-size:11.5px;color:#8a939b;margin-left:6px}.sp-calc-input{display:flex;align-items:center;gap:6px}.sp-calc-f input[type="number"],.sp-calc-f select{width:100%;height:34px;padding:0 8px;border:1px solid #dfe4e8;border-radius:4px;font-size:13px;color:#24303a;background:#fff}.sp-calc-f input[type="number"]:focus,.sp-calc-f select:focus{border-color:#1b63b5;outline:none}.sp-calc-unit{font-size:12.5px;color:#8a939b;font-weight:400;flex:0 0 auto}.sp-calc-warn{margin-top:12px;padding:8px 12px;background:#fff8e6;border-left:3px solid #b8860b;border-radius:0 4px 4px 0;font-size:12px;color:#6b5410;line-height:1.55}.sp-calc-warn em{font-style:normal;color:#8a7642;margin-left:6px}.sp-calc-answer{margin-top:14px;padding-top:12px;border-top:1px solid #f0f2f4}.sp-calc-line{margin:0;font-size:13px;color:#4a555e}.sp-calc-line strong{font-size:20px;font-weight:700;color:#1b63b5;margin-left:4px}.sp-calc-math{margin:4px 0 0;font-size:12px;color:#8a939b}.sp-calc-bandline{margin:6px 0 0;font-size:12.5px;color:#4a555e}.sp-calc-bandline em{font-style:normal;font-size:11.5px;color:#8a939b;margin-left:6px}.sp-calc-go,.sp-calc-quote{margin-top:12px;padding:9px 16px;border-radius:4px;font-size:13px;cursor:pointer}.sp-calc-go{border:1px solid #1b63b5;background:#1b63b5;color:#fff}.sp-calc-go:hover{background:#17569e;border-color:#17569e}.sp-calc-quote{border:1px solid #1b63b5;background:#fff;color:#1b63b5}.sp-calc-quote:hover{background:#f2f7fd}.sp-calc-quote em{font-style:normal;color:#8a939b;margin-left:6px;font-size:11.5px}.sp-calc-note{margin:10px 0 0;font-size:11.5px;color:#8a939b;line-height:1.5}.sp-calc-note em{font-style:normal}.sp-calc-fineprint{font-size:11px}/* ── 门 C：行业卡片 ── */.sp-app-grid{display:grid;grid-template-columns:repeat(auto-fill, minmax(210px, 1fr));gap:10px}.sp-app{background:#fff;border:1px solid #dfe4e8;border-radius:6px;padding:12px 14px;cursor:pointer;text-align:left;display:grid;grid-template-columns:26px 1fr;grid-template-rows:auto auto;column-gap:10px;align-items:center;transition:border-color .15s,box-shadow .15s}.sp-app:hover{border-color:#1b63b5;box-shadow:0 2px 8px rgba(27,99,181,.10)}.sp-app.on{border-color:#1b63b5;background:#eef4fb;box-shadow:inset 0 0 0 1px #1b63b5}.sp-app > i{grid-row:1/3;font-size:20px;color:#1b63b5;text-align:center}.sp-app b{font-size:13.5px;font-weight:600;color:#24303a}.sp-app em{font-style:normal;font-size:11.5px;color:#8a939b;line-height:1.35}.sp-app-note{margin:12px 0 0;font-size:12.5px;color:#7b858e}.sp-app-note a{color:#1b63b5}.sp-app-note em{font-style:normal;font-size:11.5px;color:#9aa3ab;margin-left:6px}/* ── 门 D：效果语。说症状不说属性 ── *//* ── 关于本文件里那些 `<em>` 规则 ────────────────────────────────────
   门 A 的 .sp-struct-zh、门 B 的 .sp-seg em / .sp-seg-row h5 em、载重计算器的
   .sp-calc-* em、以及图例页的 .sp-gi-body h5 em / p em 等一批规则，**现在都不会命中**
   —— 那些位置原本挂的是中文副标题，已经全部退到 data-zh 属性里（本站 lang="en"、
   hreflang 只有 en/ru/fr/es/ar，没有中文版；实测 /ru/ /fr/ /ar/ 都在向海外买家显示中文）。

   刻意保留不删：这批规则就是「中文开关」现成的样式。真要做，全部代码是下面这几行，
   放在 sp-product-finder.js 的 init 末尾即可，不需要动 PHP 也不需要动 CSS：

     function toggleZh(on) {
       document.querySelectorAll('[data-zh]').forEach(function(el) {
         var em = el.querySelector(':scope > em.sp-zh');
         if (on && !em) { em = document.createElement('em'); em.className = 'sp-zh';
                          em.innerHTML = el.getAttribute('data-zh'); el.appendChild(em); }
         else if (!on && em) { em.parentNode.removeChild(em); }
       });
     }

   注意：`.sp-need em` / `.sp-app em` / `.sp-need-hint em` 这三条**仍在使用**，
   门 C 与门 D 的 <em> 现在装的是英文解释句，不要跟着一起删。
   ────────────────────────────────────────────────────────────────── */.sp-need-hint{margin:0 0 10px;font-size:13px;color:#4a555e}.sp-need-hint em{font-style:normal;color:#9aa3ab;margin-left:6px}.sp-need-grid{display:grid;/* 268 → 300：<em> 从一行中文换成一句英文解释后，268px 会折到 3-4 行、
     同一行卡片高度参差。300px 下 24 句（均 ≤75 字符）基本都折成 2 行。 */grid-template-columns:repeat(auto-fill, minmax(300px, 1fr));gap:8px}.sp-need{background:#fff;border:1px solid #dfe4e8;border-radius:6px;padding:10px 12px;cursor:pointer;text-align:left;display:grid;grid-template-columns:24px 1fr;grid-template-rows:auto auto;column-gap:9px;align-items:start;/* <em> 变两行后再居中，图标会浮在两行中间 */transition:border-color .15s,background .15s}/* 分组标题：跨满一整行。auto-fill 会生成显式轨道，1 / -1 才跨得满；
   第一个标题不要上边距，否则网格顶部多出一截空白。 */.sp-need-head{grid-column:1/-1;margin:12px 0 1px;font-size:11px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;color:#8a939b}.sp-need-head:first-child{margin-top:0}.sp-need:hover{border-color:#1b63b5}.sp-need.on{border-color:#1b63b5;background:#eef4fb;box-shadow:inset 0 0 0 1px #1b63b5}.sp-need > i{grid-row:1/3;font-size:17px;color:#1b63b5;text-align:center;margin-top:1px}.sp-need b{font-size:13px;font-weight:500;color:#24303a;line-height:1.35}.sp-need em{font-style:normal;font-size:11.5px;color:#8a939b;line-height:1.4;margin-top:3px}/* ── 自绘线稿图标（img/finder/*.svg）──────────────────────────────
   属性用 data-svgi 不用 data-ico：injectDoorIcons() 会对所有 [data-ico] 注入一个 <img>
   （那是结构线稿 s11~s92 的通道），沿用 data-ico 会在这里叠一张黑色的 <img>。
   用 mask 不用 <img>：这批 svg 是 stroke="currentColor"，当 <img> 加载时
   currentColor 没有继承源，会解析成初始值黑色，.sp-need > i 的 #1b63b5 会失效。
   mask 把 svg 只当形状用，颜色由 background-color: currentColor 给，
   所以品牌蓝和 .on 选中态都跟着走。
   尺寸写 17px 是跟 .sp-need > i 的 font-size 对齐 —— 这批图按 17px 验收，
   内容满幅出血（和 fa-light-300 的字形一样上下顶到 em 边），才和同排的 fal 一样重。 */.sp-need > i.sp-svgi,.sp-app  > i.sp-svgi{display:inline-block;width:17px;height:17px;background-color:currentColor;-webkit-mask:var(--sp-ico) no-repeat center/17px 17px;mask:var(--sp-ico) no-repeat center/17px 17px}.sp-app > i.sp-svgi{width:20px;height:20px;-webkit-mask-size:20px 20px;mask-size:20px 20px}.sp-svgi[data-svgi="thread-guard"]{--sp-ico:url(../img/finder/thread-guard.svg)}.sp-svgi[data-svgi="dust-seal"]{--sp-ico:url(../img/finder/dust-seal.svg)}.sp-svgi[data-svgi="tow-capable"]{--sp-ico:url(../img/finder/tow-capable.svg)}.sp-svgi[data-svgi="swarf-resistant"]{--sp-ico:url(../img/finder/swarf-resistant.svg)}.sp-svgi[data-svgi="high-resilience"]{--sp-ico:url(../img/finder/high-resilience.svg)}.sp-svgi[data-svgi="non-slip-tread"]{--sp-ico:url(../img/finder/non-slip-tread.svg)}.sp-svgi[data-svgi="impact-resistant"]{--sp-ico:url(../img/finder/impact-resistant.svg)}.sp-svgi[data-svgi="grease-nipple"]{--sp-ico:url(../img/finder/grease-nipple.svg)}.sp-svgi[data-svgi="flame-retardant"]{--sp-ico:url(../img/finder/flame-retardant.svg)}/* 下面这些在库里但暂不上门 D（数据不够/已归详情页），见 img/finder/icon-map.json */.sp-svgi[data-svgi="food-grade-grease"]{--sp-ico:url(../img/finder/food-grade-grease.svg)}.sp-svgi[data-svgi="low-magnetic"]{--sp-ico:url(../img/finder/low-magnetic.svg)}.sp-svgi[data-svgi="adjustable-height"]{--sp-ico:url(../img/finder/adjustable-height.svg)}.sp-svgi[data-svgi="conductive"]{--sp-ico:url(../img/finder/conductive.svg)}.sp-svgi[data-svgi="spring-loaded"]{--sp-ico:url(../img/finder/spring-loaded.svg)}.sp-svgi[data-svgi="antibacterial"]{--sp-ico:url(../img/finder/antibacterial.svg)}/* 计数徽章在门里的位置 */.sp-struct .sp-facet-count,.sp-app .sp-facet-count,.sp-need .sp-facet-count{grid-column:2;justify-self:start}.sp-struct .sp-facet-count{grid-column:auto}/* ── 窄屏：四扇门全折叠，首屏只剩四行 ── */@media (max-width: 991px){.sp-door-list{flex-direction:column}.sp-door{border-bottom:none;border-left:3px solid transparent;flex-direction:row;align-items:center;gap:10px;padding:12px 15px}.sp-door + .sp-door{border-left:3px solid transparent;border-top:1px solid #f0f2f4}.sp-door.active{border-left-color:#1b63b5;border-bottom:none}.sp-door > i{margin-bottom:0;width:22px;text-align:center}.sp-door-title{flex:none}.sp-door-desc{display:none}}@media (max-width: 767px){.sp-struct-grid{grid-template-columns:repeat(2, 1fr)}.sp-app-grid{grid-template-columns:1fr}/* 门 D 窄屏走两列：24 条单列要滚 2,400px 才到底（2.9 屏）。
     两列后 <em> 会多折一行、单卡变高，但行数减半，净高仍降三成以上。
     实测值记在部署单里；若哪天 <em> 写长了导致两列比单列还高，
     把这条改回 1fr 即可，没有别的依赖。 */.sp-need-grid{grid-template-columns:repeat(2, 1fr);gap:6px}.sp-need{padding:8px 9px;column-gap:7px;grid-template-columns:20px 1fr}.sp-need > i{font-size:15px}.sp-need b{font-size:12.5px}.sp-need em{font-size:11px;line-height:1.35}.sp-need-head{margin:10px 0 0}/* 分段控件横滑，不换行 —— 竖着排会把首屏撑掉一屏 */.sp-segs{flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch;padding-bottom:4px}.sp-seg{flex:0 0 auto}/* 计算器四个字段窄屏改单列；它是 .sp-seg-row 的兄弟节点，不受上面 .sp-segs 横滑影响 */.sp-calc-fields{grid-template-columns:1fr}.sp-calc{padding:12px 12px}}/* ══════════════════════════════════════════════════════════════════════
   图例页 page-icon-guide.php
   两栏封顶（不做三栏）：结构线稿里顶板款与丝杆款的差别只有一条很细的竖线，
   所以 .sp-gi-fig img 给到 64px。三栏会把线稿压到 48px 以下，而 s11/s21
   恰恰是最需要图例解释的那一对。
   ══════════════════════════════════════════════════════════════════════ */.sp-guide-wrap{max-width:1080px;margin:0 auto;padding:24px 16px 40px}.sp-guide-intro{font-size:13.5px;line-height:1.6;color:#4a555e;margin:0 0 8px}.sp-guide-intro em,.sp-guide-more em,.sp-guide-disclaimer em{font-style:normal;display:block;color:#8a939b}.sp-guide-intro em{font-size:12px}.sp-guide-wrap h4{font-size:15px;font-weight:700;border-bottom:1px solid #e3e8ee;padding-bottom:6px;margin:32px 0 18px}.sp-guide-wrap h4 em,.sp-guide-sub em{font-style:normal;font-size:11.5px;font-weight:400;color:#8a939b;margin-left:8px}/* 门 D 的 25 条切了六个二级小标题；小标题不带下边框，与 <h4> 拉开层级 */.sp-guide-sub{font-size:13px;font-weight:700;color:#1b63b5;margin:22px 0 12px}.sp-guide-grid{display:grid;grid-template-columns:repeat(2, 1fr);gap:28px 6%}/* 单元格内部固定 88px | 1fr：左列是图，右列是词条。
   门 A/B 的左列图下再挂一遍词条（Swivel caster / 万向轮）—— 图和词各自站得住，
   用户扫图就能找到词。门 C/D 的标签是整句话，重复到 88px 的左列里会变成五行小字塔，
   所以那两组（.sp-gi--sym）只留图，左列同时收窄到 56px。 */.sp-gi{display:grid;grid-template-columns:88px 1fr;gap:12px;align-items:start;color:inherit;text-decoration:none}.sp-gi--sym{grid-template-columns:56px 1fr}.sp-gi:hover{text-decoration:none}.sp-gi:hover .sp-gi-body h5{color:#1b63b5}.sp-gi-fig{text-align:center}.sp-gi-fig img{display:block;width:64px;height:64px;margin:0 auto 6px;object-fit:contain}.sp-gi-fig i{display:block;font-size:30px;line-height:40px;height:40px;color:#1b63b5}/* 手绘线稿走 CSS mask 而不是 <img>：这批 SVG 是 stroke="currentColor"，
   放进 <img> 里拿不到外部 color，会变成死黑。--sp-ico 的 11 个变量在上面
   门 C/D 那一段已经定义过，这里只改尺寸。 */.sp-gi-fig i.sp-svgi{width:34px;height:40px;margin:0 auto;line-height:0;background-color:currentColor;-webkit-mask:var(--sp-ico) no-repeat center/34px 34px;mask:var(--sp-ico) no-repeat center/34px 34px}.sp-gi-lab{display:block;font-size:12px;font-weight:600;line-height:1.3}.sp-gi-fig em{font-style:normal;display:block;font-size:11.5px;color:#8a939b}.sp-gi-body h5{font-size:13.5px;font-weight:700;margin:0 0 4px}.sp-gi-body h5 em{font-style:normal;font-size:11.5px;font-weight:400;color:#8a939b;margin-left:6px}.sp-gi-body p{font-size:12.5px;line-height:1.45;color:#4a555e;margin:0}.sp-gi-body p em{font-style:normal;display:block;font-size:11.5px;color:#8a939b}.sp-gi-n{display:inline-block;margin-top:5px;font-size:11.5px;color:#1b63b5}.sp-gi-n b{font-weight:700}.sp-gi-n em{font-style:normal;color:#8a939b;margin-left:4px}/* 命中 0 的置灰但保留可见，与门里的 .sp-facet-empty 同一套逻辑 *//* 与门里的 .sp-facet-empty 同样的处理：光变淡是不够的，<a> 照样点得进去，
   买家会落到一个空的选型器上。图例页按全库计数，所以今天 49 条一条都不为 0，
   这是给以后目录缩水时留的闸。 */.sp-gi-empty{opacity:.5;pointer-events:none;cursor:not-allowed}.sp-guide-more{margin-top:36px;padding:18px 20px;background:#f6f8fa;border:1px solid #e3e8ee;border-radius:4px}.sp-guide-more h4{margin-top:0}.sp-guide-more p{font-size:12.5px;line-height:1.5;color:#4a555e;margin:0 0 8px}.sp-guide-more em{font-size:11.5px}.sp-guide-cta a{color:#1b63b5;font-weight:600}/* 「脚轮怎么选」四步。四步与选型器的四扇门一一对应，
   序号用计数器画成方块，不用 ol 默认的小数字 —— 那在 12.5px 正文里几乎看不见。 */.sp-guide-steps{list-style:none;counter-reset:sp-step;margin:14px 0 0;padding:0}.sp-guide-steps > li{counter-increment:sp-step;position:relative;padding:0 0 14px 34px;margin:0 0 14px;border-bottom:1px solid #e3e8ee}.sp-guide-steps > li:last-child{border-bottom:0;margin-bottom:0;padding-bottom:0}.sp-guide-steps > li::before{content:counter(sp-step);position:absolute;left:0;top:1px;width:22px;height:22px;border-radius:3px;background:#1b63b5;color:#fff;font-size:12px;font-weight:700;line-height:22px;text-align:center}.sp-guide-steps h5{font-size:13.5px;font-weight:700;color:#24303a;margin:0 0 6px;line-height:1.35}.sp-guide-steps p{margin:0 0 6px}.sp-guide-steps .sp-guide-cta{margin:0;font-size:12.5px}.sp-guide-more-foot{margin:16px 0 0;padding-top:12px;border-top:1px solid #e3e8ee}.sp-guide-more-foot a{color:#1b63b5;font-weight:600;white-space:nowrap}@media (max-width: 640px){.sp-guide-steps > li{padding-left:30px}}/* 逃生舱：耐温、食品接触、防静电这类条目迟早要挂合规限定语，
   小字类先留好，别让它撑破两栏网格 */.sp-guide-disclaimer{margin-top:24px;font-size:10.5px;line-height:1.5;color:#9aa3ab}.sp-guide-disclaimer em{font-size:10.5px}@media (max-width: 768px){.sp-guide-grid{grid-template-columns:1fr;gap:15px}/* 窄屏词条名本来就要折行，中文再跟在英文后面同一行，就会断在
     「停下就 / 不会自己溜」这种地方。单栏时让它独占一行。 */.sp-gi-body h5 em{display:block;margin-left:0}}/* ---------------------------------------------------------------
   收藏清单与对比托盘（P2）
   两个清单改造前正好各错一半：收藏落了 localStorage 却没有查看入口，
   对比有界面却只在内存里、刷新即丢。
   --------------------------------------------------------------- *//* 工具栏上的收藏入口。一件都没存时元素带 hidden，不占位置。 */.sp-saved-btn{background:none;border:1px solid #d6dbe0;border-radius:4px;color:#1b63b5;font:inherit;font-size:13px;padding:5px 12px;cursor:pointer;white-space:nowrap;transition:all .2s}.sp-saved-btn:hover{border-color:#1b63b5;background:#1b63b5;color:#fff}.sp-saved-btn i{color:#f95e00;margin-right:4px}.sp-saved-btn:hover i{color:#fff}.sp-saved-hint{font-size:12.5px;color:#7b858e;margin:0 0 12px;line-height:1.55}.sp-saved-list{max-height:46vh;overflow-y:auto;border-top:1px solid #eef1f3}.sp-saved-item{display:flex;align-items:center;gap:10px;padding:9px 2px;border-bottom:1px solid #eef1f3;font-size:13.5px}.sp-saved-name{flex:1;color:#24303a;text-decoration:none}.sp-saved-name:hover{color:#1b63b5;text-decoration:underline}.sp-saved-x{background:none;border:0;color:#b0b8bf;font-size:20px;line-height:1;cursor:pointer;padding:0 4px}.sp-saved-x:hover{color:#d0342c}.sp-saved-empty{font-size:13.5px;color:#7b858e;padding:18px 2px;margin:0}.sp-saved-actions{display:flex;align-items:center;gap:12px;margin-top:16px;flex-wrap:wrap}.sp-saved-clear{background:none;border:1px solid #d6dbe0;border-radius:4px;color:#7b858e;font:inherit;font-size:13px;padding:8px 14px;cursor:pointer}.sp-saved-clear:hover{border-color:#d0342c;color:#d0342c}/* 超过 4 个的提示。此前是 alert()，会冻住整页。 */.sp-compare-msg{margin:8px 0 0;font-size:12.5px;color:#ffcf9a}/* 对比表每一列的移除按钮 —— 此前进了表就只能整个关掉重来 */.sp-compare-col-x{background:none;border:0;color:#b0b8bf;font-size:17px;line-height:1;cursor:pointer;margin-left:6px;padding:0 2px;vertical-align:middle}.sp-compare-col-x:hover{color:#d0342c}@media (max-width: 640px){.sp-saved-btn{font-size:12px;padding:4px 9px}}/* ───────────────────────────────────────────────────────────
   手机端：让买家更快看到产品，并把触摸目标做到能点
   ───────────────────────────────────────────────────────────
   实测 390px 手机（可视高 844）上，第一张产品卡在 929px 处 ——
   买家要滚过一整屏才看得到第一个产品。929px 的构成：
     页头 92 · 面包屑 51 · H1 29 + 引导语 78 · 搜索框 50 ·
     四扇门 203 · Show Filters 46 · 结果头 135（三行堆叠）
   下面只动其中三处，都不改结构、不藏功能。 */@media (max-width: 640px){/* 引导语在手机上占 78px，说的又正是四扇门标题已经写着的事
     （"Search by product type, series, or application conditions"）。
     桌面端保留 —— 那里横向有余地，它承担的是首次到访的解释。 */.sp-finder-banner p{display:none}.sp-finder-banner{padding:18px 0 14px}/* 结果头三行堆叠占 135px。收紧内边距与行距，不动内容。 */.sp-results-header{padding:10px 12px;gap:8px}.sp-results-sort{flex-wrap:wrap;gap:6px;font-size:12.5px}/* 触摸目标。实测卡片上的收藏星标只有 17px 高、22px 宽 ——
     Apple 的建议是 44pt、Google 是 48dp，17px 在手机上基本点不中，
     一屏 18 张卡片就是 18 个点不中的按钮。
     不改图标大小，只把可点区域撑开。 */.sp-card-bookmark{min-width:44px;min-height:44px;/* 只在纵向借位。横向不能用负边距 —— 实测会把卡片撑出容器 4px，
       整页多出一条横向滚动条。标题右边本来就有 100px 富余，不必挤。 */margin:-12px 0;display:inline-flex;align-items:center;justify-content:center}.sp-card-actions a,.sp-card-actions button{min-height:44px;display:flex;align-items:center;justify-content:center}.sp-pagination button{min-width:40px;min-height:40px}}