/* assets/machines/style.css — 机器类目专用样式
   依赖 /assets/style.css（设计令牌 + .part/.tag 骨架 + 外壳三态）。
   此处只放机器类目专属的 SVG 外观：零件材质/配色、管道流动、动画。 */

/* ============ 特殊材质（Solid-fill internals） ============ */
.part .water{fill:#6fa8dc;fill-opacity:.6;stroke:#2563eb;stroke-width:1.2}
.part.is-active .water{fill:#2563eb;fill-opacity:.75}
.part .ceramic{fill:#f1f4f8;stroke:#9aa6b8;stroke-width:2}
.part.is-active .ceramic{fill:#ffffff;stroke:var(--accent-2)}
.part .coffee{fill:#6f4a2f;stroke:#4b3220;stroke-width:1}
.part.is-active .coffee{fill:#8a5a38;stroke:#b0703a}
.part .crema{fill:#d9a86c}
.part.is-active .crema{fill:#e8b877}
.stream{fill:none;stroke:#6f4a2f;stroke-width:6;stroke-linecap:round;stroke-dasharray:9 9;opacity:.85}
.is-running .stream{animation:flow 1.1s linear infinite}

/* ============ 零件本体/区分色（part bodies & per-part distinct fills） ============ */
.part .body{fill:var(--metal);stroke:#8ea0b5;stroke-width:1.6}
.part .body2{fill:var(--metal-2);stroke:#a9b7c9;stroke-width:1.2}
.part .body3{fill:#c6d0dd;stroke:none}
.part .accent{fill:none;stroke:#6b7b8c;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
/* ============ 各部件区分色（per-part distinct fills） ============ */
.part[data-id="part-tank"] .body{fill:#bcd9f2}
.part[data-id="part-tank"] .body2{fill:#d6e9fb}
.part[data-id="part-pump"] .body{fill:#c6cfda}
.part[data-id="part-pump"] .body2{fill:#dde3ea}
.part[data-id="part-heater"] .body{fill:#e8c79a}
.part[data-id="part-heater"] .body2{fill:#f0dcc0}
.part[data-id="part-heater"] .accent{stroke:#ea580c}
.part[data-id="part-grouphead"] .body{fill:#b7c4d4}
.part[data-id="part-grouphead"] .body2{fill:#d2dbe6}
.part[data-id="part-portafilter"] .body{fill:#d3b48c}
.part[data-id="part-portafilter"] .body2{fill:#e4d2b4}
.part[data-id="part-puck"] .body{fill:#9c6b45}
.part[data-id="part-puck"] .body2{fill:#b98a63}
.part[data-id="part-cup"] .body{fill:#f2f5f8}
.part[data-id="part-cup"] .body2{fill:#ffffff}
.part[data-id="part-driptray"] .body{fill:#c2cad4}
.part[data-id="part-driptray"] .body2{fill:#dbe1e8}
.part[data-id="part-steamwand"] .body{fill:#dde3ea}
.part[data-id="part-steamwand"] .body2{fill:#eef2f7}
/* active highlight stays blue */
.part.is-active .body{fill:#cfe3fb;stroke:var(--accent)}
.part.is-active .body2{fill:#e3eefc;stroke:#60a5fa}
.part.is-active .body3{fill:var(--accent)}
.part.is-active .accent{stroke:var(--accent-2)}
.part.is-active{filter:drop-shadow(0 0 10px rgba(37,99,235,.35))}

/* ============ 动画：叶轮 / 光环（motion） ============ */
.impeller{transform-box:view-box;animation:spin 1.4s linear infinite;animation-play-state:paused}
.is-running .impeller{animation-play-state:running}
@keyframes spin{to{transform:rotate(360deg)}}

.halo{opacity:0;transition:opacity .5s}
.is-running .halo{opacity:1;animation:halo 2.2s ease-in-out infinite}
@keyframes halo{0%,100%{opacity:.35}50%{opacity:.85}}

/* ============ 管道流动（flow） ============ */
.pipe-case{fill:none;stroke:#94a3b8;stroke-width:24;stroke-linecap:round;stroke-linejoin:round}
.pipe-flow{
  fill:none;stroke:var(--accent);stroke-width:6;stroke-linecap:round;stroke-linejoin:round;
  stroke-dasharray:10 16;opacity:0;transition:opacity .4s;
}
.pipe-flow.hot{stroke:#ea580c}
.pipe-flow.cold{stroke:#2563eb}
.is-running .pipe-flow{opacity:.95;animation:flow 1.15s linear infinite}
.is-running .pipe-flow.hot{animation-duration:.9s}
@keyframes flow{to{stroke-dashoffset:-26}}

/* ============ 四冲程发动机 · 各部件区分色（four-stroke per-part distinct fills） ============ */
/* 选择器均绑定 data-id；用 :not(.is-active) 保证全局 .part.is-active 高亮仍生效，不影响 espresso 页 */
.part[data-id="part-cylinder"]:not(.is-active) .body{fill:#ccd6e2}
.part[data-id="part-cylinder"]:not(.is-active) .body2{fill:#e7ecf3}
.part[data-id="part-piston"]:not(.is-active) .body{fill:#b7c9dd}
.part[data-id="part-piston"]:not(.is-active) .body2{fill:#d8e3ef}
.part[data-id="part-piston"]:not(.is-active) .accent{stroke:#7f90a5}
.part[data-id="part-connecting-rod"]:not(.is-active) .body{fill:#a9bccf}
.part[data-id="part-connecting-rod"]:not(.is-active) .body2{fill:#d3dce7}
.part[data-id="part-crankshaft"]:not(.is-active) .body{fill:#adbccb}
.part[data-id="part-crankshaft"]:not(.is-active) .body2{fill:#ccd7e3}
.part[data-id="part-flywheel"]:not(.is-active) .body{fill:#b3becb}
.part[data-id="part-flywheel"]:not(.is-active) .body2{fill:#d4dbe5}
.part[data-id="part-intake-port"]:not(.is-active) .body{fill:#bfe0f5;stroke:#7cb6dd}
.part[data-id="part-intake-port"]:not(.is-active) .body2{fill:#e0f1fc}
.part[data-id="part-exhaust-port"]:not(.is-active) .body{fill:#f5c9a6;stroke:#dd9a66}
.part[data-id="part-exhaust-port"]:not(.is-active) .body2{fill:#fbdec5}
.part[data-id="part-intake-valve"]:not(.is-active) .body{fill:#a9d9f2}
.part[data-id="part-intake-valve"]:not(.is-active) .body2{fill:#d5edfb}
.part[data-id="part-exhaust-valve"]:not(.is-active) .body{fill:#f4b98b}
.part[data-id="part-exhaust-valve"]:not(.is-active) .body2{fill:#fbdcc0}
.part[data-id="part-spark-plug"]:not(.is-active) .body{fill:#e2d4f3}
.part[data-id="part-spark-plug"]:not(.is-active) .body2{fill:#f0e8fa}
.part[data-id="part-spark-plug"]:not(.is-active) .accent{stroke:#8b5cf6}
.part[data-id="part-camshaft"]:not(.is-active) .body{fill:#c8c1e5}
.part[data-id="part-camshaft"]:not(.is-active) .body2{fill:#e2ddf3}
.part[data-id="part-combustion-chamber"]:not(.is-active) .body{fill:#f8d8bf}

/* ============ 四冲程发动机 · 飞轮旋转（复用现有 .impeller 动画，绕自身中心） ============ */
.part[data-id="part-flywheel"] .impeller{transform-origin:880px 720px}

/* ============ 航母剖面图 · Aircraft carrier cutaway ============
   源图内联样式（svgs/航母剖面图.html 的 <style>）并入此处：页面禁止内联 <style>。
   .part/.body/.body2/.body3/.tag/.tag-sm/.shell-layer 已在 base/类目表中存在，
   此处补齐源图特有类：.hatch / .tag-num / .ref-line / .ref-label + 悬停态 + 外壳层 .body 填充。 */
.hatch{fill:url(#hatch);opacity:.45}
.tag-num{font-size:11px;fill:#94a3b8;font-weight:700;letter-spacing:.12em;pointer-events:none;transition:fill .25s}
.ref-line{stroke:#c9d2e0;stroke-width:1;stroke-dasharray:6 8;fill:none}
.ref-label{fill:#94a3b8;font-family:var(--mono);font-size:9px;letter-spacing:.14em}
.shell-layer .body{fill:#c8d2de;stroke:#5b6a7d;stroke-width:1.6;stroke-dasharray:4 3}
.part:hover .body{fill:#fef3c7;stroke:#d97706;stroke-width:1.6}
.part:hover .body2{fill:#fef9e7;stroke:#b45309}
.part:hover .tag{fill:#b45309}
.part:hover .tag-sm{fill:#b8862e}
.part:hover .tag-num{fill:#d97706}
.part:hover{filter:drop-shadow(0 0 6px rgba(217,119,6,.25))}

/* ============ 冰箱剖面图 · Refrigerator cutaway ============
   源图：svgs/冰箱工作原理.html（只读定稿源）。其页内 <style> 的材质/动画并入此处（页面禁止内联 <style>）。
   通用类（.part/.body/.body2/.body3/.accent/.tag/.tag-sm/.pipe-case/.pipe-flow/.halo）已在 base + 类目表中存在，
   此处只补冰箱专属材质与动画；新增动画统一用 fridge-* 前缀，避免与其他剖面页冲突。
   选择器统一带 :not(.is-active)，保证全局 .part.is-active 高亮仍生效。 */

/* 各部件区分色（per-part distinct fills） */
.part[data-id="part-compressor"]:not(.is-active) .body{fill:#b7c1cd}
.part[data-id="part-compressor"]:not(.is-active) .body2{fill:#d5dce6}
.part[data-id="part-compressor"]:not(.is-active) .body3{fill:#334155}
.part[data-id="part-evaporator"]:not(.is-active) .body{fill:#dbeafe;stroke:#60a5fa}
.part[data-id="part-capillary"]:not(.is-active) .body{fill:#e2e8f0}
.part[data-id="part-freezer"]:not(.is-active) .body{fill:#dbeafe;stroke:#7dd3fc}
.part[data-id="part-freezer"]:not(.is-active) .body2{fill:#f0f9ff}
.part[data-id="part-fridge"]:not(.is-active) .body{fill:#eef2f7;stroke:#c3ccd9}
.part[data-id="part-fridge"]:not(.is-active) .body2{fill:#f7fafc}

/* 盘管材质（制冷剂：热=橙 / 冷=蓝，仅用于制冷剂通路） */
.fridge-coil-hot{fill:none;stroke:#ea580c;stroke-width:8;stroke-linecap:round;stroke-linejoin:round}
.fridge-coil-cold{fill:none;stroke:#2563eb;stroke-width:7;stroke-linecap:round;stroke-linejoin:round}
/* 盘管内流动虚线（复用 @keyframes flow） */
.fridge-coil-flow{fill:none;stroke:#ffffff;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:8 14;opacity:0;transition:opacity .4s}
.is-running .fridge-coil-flow{opacity:.7;animation:flow 1.15s linear infinite}

/* 四阶段编号圆（统一主题蓝，避免源图彩虹色） */
.fridge-phase{fill:var(--accent);stroke:#ffffff;stroke-width:2}
.fridge-phase-text{fill:#ffffff;font-family:var(--mono);font-size:12px;font-weight:700;pointer-events:none}

/* 冷凝器热浪上升（新动画 · 唯一命名） */
.fridge-heat{fill:none;stroke:#ea580c;stroke-width:2.5;stroke-linecap:round;opacity:.4}
.is-running .fridge-heat{animation:fridge-heat 1.8s ease-in-out infinite}
.is-running .fridge-heat.h2{animation-delay:.5s}
.is-running .fridge-heat.h3{animation-delay:1s}
@keyframes fridge-heat{
  0%{opacity:0;transform:translateY(6px)}
  40%{opacity:1}
  100%{opacity:0;transform:translateY(-14px)}
}

/* 压缩机活塞往复（新动画） */
.fridge-piston{animation:fridge-piston .7s ease-in-out infinite;animation-play-state:paused}
.is-running .fridge-piston{animation-play-state:running}
@keyframes fridge-piston{0%,100%{transform:translateX(0)}50%{transform:translateX(-6px)}}

/* 冷冻室雪花轻摆（新动画） */
.fridge-snow{transform-box:fill-box;transform-origin:center;opacity:.75}
.is-running .fridge-snow{animation:fridge-snow 2.6s ease-in-out infinite}
@keyframes fridge-snow{
  0%,100%{transform:rotate(-12deg);opacity:.6}
  50%{transform:rotate(12deg);opacity:1}
}

/* ============ 无储水式燃气热水器剖面图 · Tankless gas water heater cutaway ============
   源图：svgs/无储水式燃气热水器.html（只读定稿源）。其页内 <style> 的材质/动画并入此处（页面禁止内联 <style>）。
   通用类（.part/.body/.body2/.body3/.accent/.tag/.tag-sm/.pipe-case/.pipe-flow(+hot/cold)）已在 base + 类目表中存在，
   此处只补本图专属材质与动画；新增动画统一用 tl-* 前缀，避免与其他剖面页冲突。
   选择器统一带 :not(.is-active)，保证全局 .part.is-active 高亮仍生效。 */
.part[data-id="part-flow-sensor"]:not(.is-active) .body{fill:#dbeafe;stroke:#7cb6dd}
.part[data-id="part-flow-sensor"]:not(.is-active) .body2{fill:#eaf4fe}
.part[data-id="part-burner"]:not(.is-active) .body{fill:#f3e2cb}
.part[data-id="part-burner"]:not(.is-active) .body2{fill:#faf0e0}
.part[data-id="part-gas-valve"]:not(.is-active) .body{fill:#f3e2cb}
.part[data-id="part-gas-valve"]:not(.is-active) .body2{fill:#faf0e0}
.part[data-id="part-blower"]:not(.is-active) .body{fill:#dbe3ee}
.part[data-id="part-blower"]:not(.is-active) .body2{fill:#eef3f9}
.part[data-id="part-flue"]:not(.is-active) .body{fill:#c8d2de}
.part[data-id="part-outlet"]:not(.is-active) .body{fill:#fbdec0}
.part[data-id="part-outlet"]:not(.is-active) .body2{fill:#fdeada}
.part[data-id="part-control-board"]:not(.is-active) .body{fill:#dbe3ee}
.part[data-id="part-control-board"]:not(.is-active) .body2{fill:#eef3f9}

/* 换热器材质（翅片 + 铜盘管；盘管水色 冷蓝→热橙，仅用于水通路） */
.tl-fins{stroke:#c8d2de;stroke-width:1.2;opacity:.7}
.tl-fins line{fill:none}
.tl-coil-case{fill:none;stroke:#dbe3ee;stroke-width:18;stroke-linecap:round;stroke-linejoin:round}
.tl-coil-water{fill:none;stroke-width:9;stroke-linecap:round;stroke-linejoin:round}
.tl-coil-flow{fill:none;stroke:#ffffff;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:8 14;opacity:0;transition:opacity .4s}
.is-running .tl-coil-flow{opacity:.7;animation:flow 1.15s linear infinite}

/* 风机 / 传感器叶轮（复用共享 .impeller + @keyframes spin，绕各自中心） */
.part[data-id="part-blower"] .impeller{transform-origin:600px 220px}
.part[data-id="part-flow-sensor"] .impeller{transform-origin:170px 620px}
.tl-fan-blade{fill:none;stroke:#5b6a7d;stroke-width:3.5;stroke-linecap:round}
.tl-sensor-blade{stroke:#38bdf8;stroke-width:2.5;stroke-linecap:round}

/* 火焰跳动（新动画 · 唯一命名） */
.tl-flame{transform-box:fill-box;transform-origin:bottom center}
.is-running .tl-flame{animation:tl-flame .9s ease-in-out infinite}
.is-running .tl-flame:nth-child(2){animation-duration:1.1s;animation-delay:.1s}
.is-running .tl-flame:nth-child(3){animation-duration:.8s;animation-delay:.2s}
.is-running .tl-flame:nth-child(4){animation-duration:1s;animation-delay:.05s}
.is-running .tl-flame:nth-child(5){animation-duration:.95s;animation-delay:.15s}
.is-running .tl-flame:nth-child(6){animation-duration:1.05s;animation-delay:.25s}
.is-running .tl-flame:nth-child(7){animation-duration:.85s;animation-delay:.08s}
@keyframes tl-flame{
  0%,100%{transform:scaleY(1) scaleX(1);opacity:.9}
  50%{transform:scaleY(1.15) scaleX(.92);opacity:1}
}

/* 燃烧室辉光（新动画） */
.tl-burn{opacity:.5}
.is-running .tl-burn{animation:tl-burn 1.2s ease-in-out infinite}
@keyframes tl-burn{0%,100%{opacity:.55}50%{opacity:.9}}

/* 出水温度传感器脉冲（新动画） */
.tl-temp{opacity:.6}
.is-running .tl-temp{animation:tl-temp 2s ease-in-out infinite}
@keyframes tl-temp{0%,100%{opacity:.5}50%{opacity:1}}

/* 控制信号（新动画） */
.tl-signal{fill:none;stroke:#d97706;stroke-width:2;stroke-dasharray:5 5;opacity:.85}
.is-running .tl-signal{animation:tl-signal 1.5s linear infinite}
@keyframes tl-signal{to{stroke-dashoffset:-20}}

/* 管道变体：燃气 / 烟气（复用共享 .pipe-flow + @keyframes flow） */
.pipe-flow.gas{stroke:#d97706}
.pipe-flow.smoke{stroke:#94a3b8}

/* ============ 分体式空调剖面图 · Split air conditioner cutaway ============
   源图：svgs/分体式空调的工作原理.html（只读定稿源）。其页内 <style> 的材质/动画并入此处（页面禁止内联 <style>）。
   通用类（.part/.body/.body2/.body3/.accent/.tag/.tag-sm/.pipe-case/.pipe-flow(+hot/cold)/.impeller/.halo）已在 base + 类目表中存在，
   此处只补本图专属材质与动画；新增动画统一用 ac-* 前缀，避免与其他剖面页冲突。
   选择器统一带 :not(.is-active)，保证全局 .part.is-active 高亮仍生效。 */

/* 各部件区分色（per-part distinct fills） */
.part[data-id="part-indoor-unit"]:not(.is-active) .body{fill:#eef3f9;stroke:#9aa6b8}
.part[data-id="part-indoor-unit"]:not(.is-active) .body2{fill:#dbe3ee}
.part[data-id="part-indoor-blower"]:not(.is-active) .body{fill:#dbe3ee}
.part[data-id="part-indoor-blower"]:not(.is-active) .body2{fill:#eef3f9}
.part[data-id="part-outdoor-unit"]:not(.is-active) .body{fill:#e8eef5;stroke:#8ea0b5}
.part[data-id="part-outdoor-unit"]:not(.is-active) .body2{fill:#dde3ea}
.part[data-id="part-outdoor-fan"]:not(.is-active) .body{fill:#dbe3ee}
.part[data-id="part-outdoor-fan"]:not(.is-active) .body2{fill:#eef3f9}
.part[data-id="part-compressor"]:not(.is-active) .body{fill:#b7c1cd}
.part[data-id="part-compressor"]:not(.is-active) .body2{fill:#d5dce6}
.part[data-id="part-compressor"]:not(.is-active) .body3{fill:#334155}
.part[data-id="part-thermostat"]:not(.is-active) .body{fill:#eef3f9;stroke:#9aa6b8}
.part[data-id="part-thermostat"]:not(.is-active) .body2{fill:#ffffff;stroke:#cbd5e1}

/* 进风格栅 / 冷凝水排水（本图专属线条） */
.ac-grille line{stroke:#94a3b8;stroke-width:1}
.ac-drain{fill:none;stroke:#94a3b8;stroke-width:3;stroke-linecap:round;stroke-linejoin:round}

/* 蒸发器盘管（冷 · 蓝，仅用于制冷剂冷侧） */
.ac-coil-cold{fill:none;stroke:#2563eb;stroke-width:7;stroke-linecap:round;stroke-linejoin:round}
.ac-coil-flow{fill:none;stroke:#ffffff;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:8 14;opacity:0;transition:opacity .4s}
.is-running .ac-coil-flow{opacity:.7;animation:flow 1.15s linear infinite}

/* 冷凝器盘管（热 · 橙，仅用于制冷剂热侧） */
.ac-coil-hot{fill:none;stroke:#ea580c;stroke-width:7;stroke-linecap:round;stroke-linejoin:round}

/* 风机叶片（复用共享 .impeller + @keyframes spin，绕各自中心） */
.ac-fan-blade{fill:none;stroke:#5b6a7d;stroke-width:3.5;stroke-linecap:round}
.part[data-id="part-indoor-blower"] .impeller{transform-origin:452px 215px}
.part[data-id="part-outdoor-fan"] .impeller{transform-origin:1055px 250px}

/* 压缩机活塞往复（新动画 · 唯一命名） */
.ac-piston{transform-box:fill-box;transform-origin:center;animation:ac-piston .7s ease-in-out infinite;animation-play-state:paused}
.is-running .ac-piston{animation-play-state:running}
@keyframes ac-piston{0%,100%{transform:translateX(0)}50%{transform:translateX(-6px)}}

/* 室内冷气飘出（新动画 · 唯一命名） */
.ac-cold{fill:none;stroke:#38bdf8;stroke-width:2.5;stroke-linecap:round;opacity:0;transition:opacity .4s}
.is-running .ac-cold{opacity:.7;animation:ac-cold 2.4s ease-in-out infinite}
.is-running .ac-cold.c2{animation-delay:.8s}
.is-running .ac-cold.c3{animation-delay:1.6s}
@keyframes ac-cold{0%{opacity:0;transform:translateY(0)}35%{opacity:.85}100%{opacity:0;transform:translateY(30px)}}

/* 室外排热（新动画 · 唯一命名） */
.ac-heat{fill:none;stroke:#ea580c;stroke-width:2.5;stroke-linecap:round;opacity:.6}
.is-running .ac-heat{animation:ac-heat 2s ease-in-out infinite}
@keyframes ac-heat{0%,100%{opacity:.5}50%{opacity:1}}

/* 四阶段编号圆（主题蓝，统一色） */
.ac-phase{fill:var(--accent);stroke:#ffffff;stroke-width:2}
.ac-phase-text{fill:#ffffff;font-family:var(--mono);font-size:12px;font-weight:700;pointer-events:none}

/* 室外机温度面板（非部件） */
.ac-panel{fill:#eef3f9;stroke:#9aa6b8;stroke-width:1.4}
.ac-panel2{fill:#ffffff;stroke:#cbd5e1;stroke-width:1}

/* 管路变体：细液管 / 粗气管（复用共享 .pipe-case + .pipe-flow） */
.ac-case-liq{stroke-width:14}
.ac-case-suc{stroke-width:22}

/* ============ 单缸发动机剖面图 · Single-cylinder engine cutaway ============
   源图：svgs/单缸发动机原理.html（只读定稿源）。其页内 <style> 的材质并入此处（页面禁止内联 <style>）。
   通用类（.part/.body/.body2/.body3/.accent/.tag/.tag-sm/.pipe-flow(+hot/cold)/.impeller）已在 base + 类目表中存在。
   注意：本图 part-* 的 data-id 与上方「四冲程发动机」页面相同，零件区分色直接复用该段落；
   仅零件旋转中心等会产生冲突的规则用 body[data-topic] 作用域限定，避免影响四冲程页面。
   新增类与动画统一用 eng-* 前缀。 */

/* 飞轮旋转中心（作用域限定，避免覆盖四冲程页飞轮 880,720） */
body[data-topic="single-cylinder-engine"] .part[data-id="part-flywheel"] .impeller{transform-origin:770px 650px}

/* 燃烧闪光辉光（新动画 · 唯一命名） */
.eng-flash{opacity:0}
.is-running .eng-flash{animation:eng-flash 2.8s ease-in-out infinite}
@keyframes eng-flash{0%,40%{opacity:0}48%,58%{opacity:.6}66%,100%{opacity:0}}

/* 四阶段编号圆（主题蓝，统一色） */
.eng-phase{fill:var(--accent);stroke:#ffffff;stroke-width:2}
.eng-phase-text{fill:#ffffff;font-family:var(--mono);font-size:12px;font-weight:700;pointer-events:none}

/* ============ 涡轮增压器剖面图 · Turbocharger cutaway ============
   源图：svgs/涡轮增压原理.html（只读定稿源）。其页内 <style> 的材质/动画并入此处（页面禁止内联 <style>）。
   源图已含 <g class="part" data-id> 分组（filter/compressor/intercooler/throttle/engine/turbine/shaft/wastegate/exhaust）；
   本页沿用这些部件，并把 data-id 统一加 part- 前缀以符合站点命名约定。
   通用类（.part/.body/.body2/.body3/.accent/.tag/.tag-sm/.pipe-case/.pipe-flow(+hot/cold/smoke)/.impeller/.halo）已在 base + 类目表中存在。
   零件区分色与叶轮旋转中心用 body[data-topic="turbocharger"] 作用域限定（part-compressor 与空调页同名，避免相互影响）。
   新增类与动画统一用 tb-* 前缀。 */

/* 各部件区分色（作用域限定 · per-part distinct fills） */
body[data-topic="turbocharger"] .part[data-id="part-filter"]:not(.is-active) .body{fill:#e8eef5}
body[data-topic="turbocharger"] .part[data-id="part-filter"]:not(.is-active) .body2{fill:#ffffff}
body[data-topic="turbocharger"] .part[data-id="part-compressor"]:not(.is-active) .body{fill:#dbe3ee}
body[data-topic="turbocharger"] .part[data-id="part-compressor"]:not(.is-active) .body2{fill:#eef3f9}
body[data-topic="turbocharger"] .part[data-id="part-intercooler"]:not(.is-active) .body{fill:#dbe3ee}
body[data-topic="turbocharger"] .part[data-id="part-intercooler"]:not(.is-active) .body2{fill:#eef3f9}
body[data-topic="turbocharger"] .part[data-id="part-throttle"]:not(.is-active) .body{fill:#dbe3ee}
body[data-topic="turbocharger"] .part[data-id="part-throttle"]:not(.is-active) .body2{fill:#eef3f9}
body[data-topic="turbocharger"] .part[data-id="part-engine"]:not(.is-active) .body{fill:#e2e8f0}
body[data-topic="turbocharger"] .part[data-id="part-engine"]:not(.is-active) .body2{fill:#f1f5f9}
body[data-topic="turbocharger"] .part[data-id="part-turbine"]:not(.is-active) .body{fill:#f3d9c4}
body[data-topic="turbocharger"] .part[data-id="part-turbine"]:not(.is-active) .body2{fill:#f9e8d8}
body[data-topic="turbocharger"] .part[data-id="part-shaft"]:not(.is-active) .body{fill:#dbe3ee}
body[data-topic="turbocharger"] .part[data-id="part-shaft"]:not(.is-active) .body2{fill:#eef3f9}
body[data-topic="turbocharger"] .part[data-id="part-wastegate"]:not(.is-active) .body{fill:#dbe3ee}
body[data-topic="turbocharger"] .part[data-id="part-wastegate"]:not(.is-active) .body2{fill:#eef3f9}
body[data-topic="turbocharger"] .part[data-id="part-exhaust"]:not(.is-active) .body{fill:#e2e8f0}

/* 叶轮旋转中心（作用域限定 · 绕各自中心，复用共享 .impeller + @keyframes spin） */
body[data-topic="turbocharger"] .part[data-id="part-compressor"] .impeller{transform-origin:370px 440px}
body[data-topic="turbocharger"] .part[data-id="part-turbine"] .impeller{transform-origin:690px 440px}

/* 压气机叶轮叶片（冷 · 蓝） / 涡轮叶片（热 · 橙） */
.tb-blade-cold{fill:none;stroke:#38bdf8;stroke-width:5;stroke-linecap:round}
.tb-blade-hot{fill:none;stroke:#ea580c;stroke-width:5;stroke-linecap:round}

/* 滤清器斜纹 / 中冷器散热片 / 排气波动（本图专属线条） */
.tb-filter-line{stroke:#94a3b8;stroke-width:1.6;opacity:.75}
.tb-filter-line path{fill:none}
.tb-fin{stroke:#94a3b8;stroke-width:1.5;opacity:.75}
.tb-fin path{fill:none}
.tb-puff{fill:none;stroke:#94a3b8;stroke-width:2;stroke-linecap:round;opacity:.7}

/* 连接轴 / 连杆 / 活塞环（本图专属线条） */
.tb-shaft-core{stroke:#5b6a7d;stroke-width:10;stroke-linecap:round}
.tb-rod{stroke:#5b6a7d;stroke-width:7;stroke-linecap:round}
.tb-piston-line{stroke:#94a3b8;stroke-width:1.5}

/* 废气旁通管壳（细管，复用共享 .pipe-case + .pipe-flow） */
.tb-case-bypass{stroke-width:14;stroke-dasharray:10 8}
.tb-flow-bypass{stroke-dasharray:6 12}

/* 发动机活塞往复（新动画 · 唯一命名） */
.tb-piston{animation:tb-piston 1.4s ease-in-out infinite;animation-play-state:paused}
.is-running .tb-piston{animation-play-state:running}
@keyframes tb-piston{0%,100%{transform:translateY(0)}50%{transform:translateY(14px)}}

/* 燃烧闪光（新动画 · 唯一命名） */
.tb-combust{opacity:0}
.is-running .tb-combust{animation:tb-combust 1.4s ease-in-out infinite}
@keyframes tb-combust{0%,25%{opacity:0}35%,50%{opacity:.9}65%,100%{opacity:0}}

/* 冷侧光环延时（复用共享 .halo + @keyframes halo） */
.halo.tb-halo-cold{animation-delay:.6s}

/* ============ 离心泵剖面图 · Centrifugal pump cutaway ============
   源图：svgs/how-a-centrifugal-pump-works-cutaway.html。
   通用类（.part/.body/.body2/.body3/.accent/.tag/.tag-sm/.pipe-flow/.impeller）已在 base + 类目表中存在。 */
/* 叶轮旋转中心（绕自身中心，复用共享 .impeller + @keyframes spin） */
body[data-topic="centrifugal-pump"] .part[data-id="part-impeller"] .impeller{transform-origin:500px 400px}

/* 各部件区分色（:not(.is-active) 保证全局高亮仍生效） */
body[data-topic="centrifugal-pump"] .part[data-id="part-suction"]:not(.is-active) .body{fill:#bcd9f2}
body[data-topic="centrifugal-pump"] .part[data-id="part-suction"]:not(.is-active) .body2{fill:#d6e9fb}
body[data-topic="centrifugal-pump"] .part[data-id="part-impeller"]:not(.is-active) .body{fill:#b7c9dd}
body[data-topic="centrifugal-pump"] .part[data-id="part-impeller"]:not(.is-active) .body2{fill:#d8e3ef}
body[data-topic="centrifugal-pump"] .part[data-id="part-discharge"]:not(.is-active) .body{fill:#bfe0f5}
body[data-topic="centrifugal-pump"] .part[data-id="part-discharge"]:not(.is-active) .body2{fill:#e0f1fc}
body[data-topic="centrifugal-pump"] .part[data-id="part-shaft"]:not(.is-active) .body{fill:#a9bccf}
body[data-topic="centrifugal-pump"] .part[data-id="part-seal"]:not(.is-active) .body{fill:#e8c79a}
body[data-topic="centrifugal-pump"] .part[data-id="part-seal"]:not(.is-active) .body2{fill:#f0dcc0}
body[data-topic="centrifugal-pump"] .part[data-id="part-bearing"]:not(.is-active) .body{fill:#c6cfda}
body[data-topic="centrifugal-pump"] .part[data-id="part-motor"]:not(.is-active) .body{fill:#c8c1e5}
body[data-topic="centrifugal-pump"] .part[data-id="part-motor"]:not(.is-active) .body2{fill:#e2ddf3}

/* 离心泵专属线条：涡壳流道 / 叶轮叶片 / 外抛箭头 */
.pump-volute{fill:none;stroke:#9cc3ea;stroke-width:54;opacity:.5}
.part.is-active .pump-volute{stroke:#60a5fa;opacity:.7}
.pump-vane{fill:none;stroke:#5b6a7d;stroke-width:9;stroke-linecap:round;opacity:.85}
.part.is-active .pump-vane{stroke:var(--accent-2)}
.pump-out{fill:none;stroke:#2563eb;stroke-width:4;stroke-linecap:round;opacity:.75}
