/* ------------------------------------------------------------------
 * Tulsi Engineers — illustration animation layer.
 * Owned by the plugin so the drawn graphics animate under any theme.
 * Everything here is GPU-friendly (transform/opacity only) and every
 * animation stops for visitors who ask for reduced motion.
 * --------------------------------------------------------------- */

.te-ill { display: block; width: 100%; height: auto; }

/* Steam --------------------------------------------------------- */
@keyframes te-puff {
  0%   { transform: translate(0,0) scale(.55); opacity: 0; }
  18%  { opacity: .85; }
  100% { transform: translate(10px,-46px) scale(1.5); opacity: 0; }
}
.is-animated .te-puff { animation: te-puff 3.6s ease-out infinite; transform-box: fill-box; transform-origin: center; }
.is-animated .te-puff-2 { animation-delay: .9s; }
.is-animated .te-puff-3 { animation-delay: 1.8s; }
.is-animated .te-puff-4 { animation-delay: 2.7s; }

/* Flame --------------------------------------------------------- */
@keyframes te-flicker {
  0%,100% { transform: scaleY(1) scaleX(1); opacity: 1; }
  25%     { transform: scaleY(1.14) scaleX(.94); opacity: .92; }
  50%     { transform: scaleY(.92) scaleX(1.06); opacity: 1; }
  75%     { transform: scaleY(1.08) scaleX(.97); opacity: .95; }
}
.is-animated .te-flame > path { animation: te-flicker 1.5s ease-in-out infinite; transform-box: fill-box; transform-origin: bottom center; }
.is-animated .te-flame-core { animation-duration: 1.1s !important; animation-delay: .2s; }

/* Rotation ------------------------------------------------------ */
@keyframes te-rotate { to { transform: rotate(360deg); } }
.is-animated .te-spin      { animation: te-rotate 2.4s linear infinite; }
.is-animated .te-spin-slow { animation: te-rotate 9s linear infinite; }
.is-animated .te-swirl     { animation: te-rotate 6s linear infinite; }

/* Flow in pipes -------------------------------------------------- */
@keyframes te-dash { to { stroke-dashoffset: -32; } }
.is-animated .te-flow      { animation: te-dash 1.1s linear infinite; }
.is-animated .te-flow-alt  { animation-duration: 1.5s; }
.is-animated .te-flow-slow { stroke-dasharray: 10 14; animation: te-dash 2.4s linear infinite; }

/* Heat shimmer --------------------------------------------------- */
@keyframes te-rise {
  0%   { transform: translateY(6px); opacity: 0; }
  40%  { opacity: .9; }
  100% { transform: translateY(-12px); opacity: 0; }
}
.is-animated .te-heat > * { animation: te-rise 2.2s ease-out infinite; transform-box: fill-box; }
.is-animated .te-heat > *:nth-child(2) { animation-delay: .55s; }
.is-animated .te-heat > *:nth-child(3) { animation-delay: 1.1s; }

/* Water level ---------------------------------------------------- */
@keyframes te-wave { 0%,100% { transform: translateX(0); } 50% { transform: translateX(-14px); } }
.is-animated .te-wave { animation: te-wave 3.4s ease-in-out infinite; }

/* Droplets ------------------------------------------------------- */
@keyframes te-drop {
  0%   { transform: translateY(-8px); opacity: 0; }
  25%  { opacity: .9; }
  100% { transform: translateY(30px); opacity: 0; }
}
.is-animated .te-drops circle { animation: te-drop 2s ease-in infinite; transform-box: fill-box; }
.is-animated .te-drops circle:nth-child(2) { animation-delay: .45s; }
.is-animated .te-drops circle:nth-child(3) { animation-delay: .9s; }
.is-animated .te-drops circle:nth-child(4) { animation-delay: 1.2s; }
.is-animated .te-drops circle:nth-child(5) { animation-delay: 1.6s; }

/* Bubbles -------------------------------------------------------- */
.is-animated .te-bubbles circle { animation: te-rise 2.6s ease-out infinite; transform-box: fill-box; }
.is-animated .te-bubbles circle:nth-child(2) { animation-delay: .8s; }
.is-animated .te-bubbles circle:nth-child(3) { animation-delay: 1.6s; }

/* Filter bags shaking on a pulse ---------------------------------- */
@keyframes te-shake { 0%,88%,100% { transform: scaleY(1); } 92% { transform: scaleY(.94); } 96% { transform: scaleY(1.03); } }
.is-animated .te-bag { animation: te-shake 3s ease-in-out infinite; transform-box: fill-box; transform-origin: top center; }
.is-animated .te-bag-1 { animation-delay: .2s; }
.is-animated .te-bag-2 { animation-delay: .4s; }
.is-animated .te-bag-3 { animation-delay: .6s; }
.is-animated .te-bag-4 { animation-delay: .8s; }

/* Indicator lamps ------------------------------------------------- */
@keyframes te-blink { 0%,45% { opacity: 1; } 55%,100% { opacity: .18; } }
.is-animated .te-blink { animation: te-blink 1.6s steps(1,end) infinite; }
.is-animated .te-pulse circle { animation: te-blink 1.2s steps(1,end) infinite; }
.is-animated .te-pulse circle:nth-child(2) { animation-delay: .4s; }
.is-animated .te-pulse circle:nth-child(3) { animation-delay: .8s; }

/* Gauge needle ---------------------------------------------------- */
@keyframes te-needle { 0%,100% { transform: rotate(-46deg); } 50% { transform: rotate(52deg); } }
.is-animated .te-needle { animation: te-needle 4.5s cubic-bezier(.45,.05,.35,1) infinite; }

/* Conveyor belt --------------------------------------------------- */
@keyframes te-belt { to { transform: translateX(38px); } }
.is-animated .te-belt { animation: te-belt 1.6s linear infinite; }

/* Crusher jaws ---------------------------------------------------- */
@keyframes te-crush { 0%,100% { transform: scaleX(1); } 50% { transform: scaleX(.86); } }
.is-animated .te-crush { animation: te-crush 1.3s ease-in-out infinite; transform-box: fill-box; transform-origin: center; }

/* Welding spark --------------------------------------------------- */
@keyframes te-weld { 0%,70%,100% { opacity: .25; transform: scale(.9); } 78%,86% { opacity: 1; transform: scale(1.12); } }
.is-animated .te-weld { animation: te-weld 2.2s ease-in-out infinite; transform-box: fill-box; transform-origin: center; }

/* Checklist tick -------------------------------------------------- */
@keyframes te-draw { from { stroke-dashoffset: 70; } to { stroke-dashoffset: 0; } }
.is-animated .te-tick path { stroke-dasharray: 70; animation: te-draw 1.6s ease-out infinite; }

/* Hero part entrance ---------------------------------------------- */
@keyframes te-lift { from { opacity: 0; transform: translateY(26px); } to { opacity: 1; transform: none; } }
.te-hero-art { width: 100%; height: auto; display: block; }
.te-hero-art.is-animated > g[class^="te-h-"] { animation: te-lift .9s cubic-bezier(.2,.7,.3,1) both; }
.te-hero-art.is-animated .te-h-boiler  { animation-delay: .08s; }
.te-hero-art.is-animated .te-h-chimney { animation-delay: .24s; }
.te-hero-art.is-animated .te-h-filter  { animation-delay: .38s; }
.te-hero-art.is-animated .te-h-pump    { animation-delay: .52s; }
.te-hero-art.is-animated .te-h-gauge   { animation-delay: .66s; }

@media (prefers-reduced-motion: reduce) {
  .te-ill *, .te-hero-art * { animation: none !important; transition: none !important; }
}
