/* /assets/css/machines/energy-storage/how-a-residential-pellet-burner-combustion-chamber-cutaway.css — 本页专属样式（en/zh 共用） */

/* ============ 机器类目基线：零件材质与高亮 ============ */
.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}
.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))}
.leader{fill:none;stroke:#5b6a7d;stroke-width:1.2}
.leader-dot{fill:#5b6a7d}

/* ============ 管道流动（flow） ============ */
.pipe-case{fill:none;stroke:#94a3b8;stroke-width:18;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}
.is-running .pipe-flow{opacity:.95;animation:flow 1.15s linear infinite}
@keyframes flow{to{stroke-dashoffset:-26}}
@keyframes spin{to{transform:rotate(360deg)}}

/* ============ 生物质颗粒燃烧器剖面图 · Pellet burner ============
   源图：svgs/todo/machine-83-how-a-residential-pellet-burner-combustion-chamber-cutaway.html。
   通用类（.part/.body/.body2/.body3/.accent/.tag/.tag-sm）已在 base 中存在。 */
.part .pellet{fill:#b08968;stroke:#8a6b50;stroke-width:1}
.part.is-active .pellet{fill:#2563eb;stroke:#1e3a8a}
.part .chamber{fill:#7c8794;stroke:#5b6472;stroke-width:1.6}
.part.is-active .chamber{fill:#2563eb;stroke:#1e3a8a}
.part .flame{fill:#fb923c;stroke:#ea580c;stroke-width:1}
.part .flame2{fill:#fbbf24;stroke:#f59e0b;stroke-width:1}
.part.is-active .flame,.part.is-active .flame2{fill:#2563eb;stroke:#1e3a8a}
.flame,.flame2{transform-box:fill-box;transform-origin:50% 100%}
.is-running .flame{animation:flutter 1.1s ease-in-out infinite}
.is-running .flame2{animation:flutter 1.5s ease-in-out infinite .2s}
@keyframes flutter{0%,100%{transform:scaleY(1) translateY(0)}50%{transform:scaleY(1.12) translateY(-4px)}}
.part .igniter{fill:#ea580c;stroke:#b45309;stroke-width:1}
.part.is-active .igniter{fill:#2563eb;stroke:#1e3a8a}
.part .blade{fill:#6b7b8c}
.part.is-active .blade{fill:#1d4ed8}
.part .ash{fill:#b4b2a9;stroke:#948f83;stroke-width:.8}
.part.is-active .ash{fill:#93c5fd}
.flight{fill:none;stroke:#6b7b8c;stroke-width:5;stroke-linecap:round;stroke-dasharray:8 8}
.is-running .flight{animation:flow 1s linear infinite}
.part.is-active .flight{stroke:#1d4ed8}
.fan{transform-box:fill-box;transform-origin:center}
.is-running .fan{animation:spin 1.6s linear infinite}
.air{fill:none;stroke:#60a5fa;stroke-width:4;stroke-linecap:round;stroke-dasharray:8 10}
.is-running .air{animation:flow 1s linear infinite}
.gas{fill:none;stroke:#94a3b8;stroke-width:5;stroke-linecap:round;stroke-dasharray:9 10}
.is-running .gas{animation:flow 1.2s linear infinite}