/* ==========================================================================
   Neon Plant & Tool Hire — Icon System Stylesheet (dev-icon-styles.css)
   Token inheritance: var(--ink-dk) [#1F2A44], var(--accent) [#D2601C]
   ViewBox: 0 0 64 64 | Stroke-width: 2 | Stroke-linecap: round
   Fix Pass 2: Wheel-orbit bug, split-assembly desync, hinge door swing, wrong-axis rotations.
   ========================================================================== */

/* Core Icon Container */
.neon-icon {
  width: 100%;
  height: 100%;
  max-width: 64px;
  max-height: 64px;
  display: inline-block;
  vertical-align: middle;
  color: var(--ink-dk, #1F2A44);
  overflow: visible;
}

.neon-icon path,
.neon-icon circle,
.neon-icon rect,
.neon-icon line,
.neon-icon polyline,
.neon-icon polygon {
  stroke: currentColor;
  stroke-width: 2;
  stroke-linecap: round;
  stroke-linejoin: round;
  fill: none;
  transition: stroke 200ms ease-out;
}

/* Surface/Material lines (Ground, Concrete, Wood, Hedge, Tile) */
.neon-icon .icon-surface {
  stroke: var(--ink-dk, #1F2A44);
  stroke-width: 1.5;
  opacity: 0.6;
}

/* Dark interior fill background for doors revealing room inside */
.neon-icon .icon-interior {
  fill: var(--ink-dk, #1F2A44);
  opacity: 0.15;
  stroke: none;
}

/* Static resting state: animated elements use base ink color */
.neon-icon .icon-action {
  stroke: currentColor;
  transform-origin: center;
}

/* Active/Animated state: animated element switches to rust accent (#D2601C) */
.neon-icon.is-animated .icon-action {
  stroke: var(--accent, #D2601C);
}

/* ==========================================================================
   TIER A — CONTINUOUS WORKING TOOL ANIMATIONS (Infinite Loops)
   ========================================================================== */

/* 1. Face-on 360° Spin (Saw blades, grinding discs, fans, mixer drums with exact center origin) */
.neon-icon.is-animated .anim-spin {
  animation: iconSpin 800ms linear infinite;
}
@keyframes iconSpin {
  0% { transform: rotate(0deg); }
  100% { transform: rotate(360deg); }
}

/* 2. Profile Drill Bit Axial Corkscrew Spin (Helix hatch dashoffset) */
.neon-icon.is-animated .anim-drill-axial {
  animation: iconDrillAxial 600ms linear infinite;
}
@keyframes iconDrillAxial {
  0% { stroke-dashoffset: 0; }
  100% { stroke-dashoffset: 16; }
}

/* Percussive axial spin + forward/back strike */
.neon-icon.is-animated .anim-hammer-axial {
  animation: iconHammerAxial 650ms ease-in-out infinite;
}
@keyframes iconHammerAxial {
  0% { stroke-dashoffset: 0; transform: translateX(0); }
  25% { transform: translateX(3px); }
  50% { stroke-dashoffset: 8; transform: translateX(-1px); }
  75% { transform: translateX(2px); }
  100% { stroke-dashoffset: 16; transform: translateX(0); }
}

/* 3. Lateral Swaying (Floor Scrubbers & Polishers) */
.neon-icon.is-animated .anim-scrub-sway {
  animation: iconScrubSway 1200ms ease-in-out infinite;
}
@keyframes iconScrubSway {
  0% { transform: translateX(-5px); }
  50% { transform: translateX(5px); }
  100% { transform: translateX(-5px); }
}

/* 4. Reciprocating Horizontal (Recip Saws, Tile Cutters, Planers) */
.neon-icon.is-animated .anim-recip-h {
  animation: iconRecipH 650ms ease-in-out infinite;
}
@keyframes iconRecipH {
  0% { transform: translateX(0); }
  50% { transform: translateX(-6px); }
  100% { transform: translateX(0); }
}

/* 5. Reciprocating Vertical (Jigsaws, Breakers) */
.neon-icon.is-animated .anim-recip-v {
  animation: iconRecipV 600ms ease-in-out infinite;
}
@keyframes iconRecipV {
  0% { transform: translateY(0); }
  50% { transform: translateY(6px); }
  100% { transform: translateY(0); }
}

/* 6. High-Frequency Surface Vibration (Compactors, Pokers, Hand Tamps, Scabblers) */
.neon-icon.is-animated .anim-vibrate {
  animation: iconVibrate 450ms linear infinite;
}
@keyframes iconVibrate {
  0% { transform: translateY(0) translateX(0); }
  25% { transform: translateY(-2px) translateX(1px); }
  50% { transform: translateY(2px) translateX(-1px); }
  75% { transform: translateY(-1px) translateX(1px); }
  100% { transform: translateY(0) translateX(0); }
}

/* 7. Oscillating Head Wiggle (Multi-tools) */
.neon-icon.is-animated .anim-oscillate {
  animation: iconOscillate 500ms ease-in-out infinite;
  transform-origin: 32px 24px;
}
@keyframes iconOscillate {
  0% { transform: rotate(-6deg); }
  50% { transform: rotate(6deg); }
  100% { transform: rotate(-6deg); }
}

/* 8. Pivoting Cut (Mitre Saws, Chop Saws) */
.neon-icon.is-animated .anim-pivot-down {
  animation: iconPivotDown 1400ms ease-in-out infinite;
  transform-origin: 48px 20px;
}
@keyframes iconPivotDown {
  0% { transform: rotate(-22deg); }
  45% { transform: rotate(2deg); }
  55% { transform: rotate(2deg); }
  100% { transform: rotate(-22deg); }
}

/* 9. Scissor Shears (Hedge Trimmers - Horizontal slide past each other) */
.neon-icon.is-animated .anim-scissor-top {
  animation: iconScissorTop 600ms ease-in-out infinite;
}
@keyframes iconScissorTop {
  0% { transform: translateX(0); }
  50% { transform: translateX(-4px); }
  100% { transform: translateX(0); }
}
.neon-icon.is-animated .anim-scissor-bottom {
  animation: iconScissorBottom 600ms ease-in-out infinite;
}
@keyframes iconScissorBottom {
  0% { transform: translateX(0); }
  50% { transform: translateX(4px); }
  100% { transform: translateX(0); }
}

/* 10. Pulse Glow & Rays (Generators, RCD, Lights, Transformers, Junction Box) */
.neon-icon.is-animated .anim-pulse-glow {
  animation: iconPulseGlow 1200ms ease-in-out infinite;
  transform-origin: center;
}
@keyframes iconPulseGlow {
  0% { opacity: 0.3; transform: scale(0.85); }
  50% { opacity: 1; transform: scale(1.1); }
  100% { opacity: 0.3; transform: scale(0.85); }
}

/* 11. Continuous Wave Outward (Pressure Washers, Blowers, Cable Detectors) */
.neon-icon.is-animated .anim-wave-out {
  animation: iconWaveOut 900ms ease-in-out infinite;
}
@keyframes iconWaveOut {
  0% { opacity: 0.2; transform: translateX(-4px) scale(0.9); }
  60% { opacity: 1; transform: translateX(2px) scale(1.05); }
  100% { opacity: 0.2; transform: translateX(-4px) scale(0.9); }
}

/* 12. Continuous Wave Inward (Vacuums) */
.neon-icon.is-animated .anim-wave-in {
  animation: iconWaveIn 900ms ease-in-out infinite;
}
@keyframes iconWaveIn {
  0% { opacity: 0.2; transform: translateX(6px); }
  60% { opacity: 1; transform: translateX(-2px); }
  100% { opacity: 0.2; transform: translateX(6px); }
}

/* 13. Droplet Collection (Dehumidifiers) */
.neon-icon.is-animated .anim-droplet {
  animation: iconDroplet 1200ms ease-in-out infinite;
}
@keyframes iconDroplet {
  0% { transform: translateY(-6px); opacity: 0; }
  50% { transform: translateY(2px); opacity: 1; }
  80% { transform: translateY(6px); opacity: 0; }
  100% { transform: translateY(-6px); opacity: 0; }
}

/* ==========================================================================
   TIER B — POWERED/MOBILE EQUIPMENT (Cycle: Move → Act → Hold → Repeat)
   ========================================================================== */

/* Continuous smooth wheel/drum rotation */
.neon-icon.is-animated .anim-wheel-spin {
  animation: iconWheelSpin 3200ms linear infinite;
}
@keyframes iconWheelSpin {
  0% { transform: rotate(0deg); }
  100% { transform: rotate(360deg); }
}

.neon-icon.is-animated .anim-tread-scroll {
  animation: iconTreadScroll 3500ms linear infinite;
}
@keyframes iconTreadScroll {
  0% { stroke-dashoffset: 0; }
  35% { stroke-dashoffset: 16; }
  100% { stroke-dashoffset: 16; }
}

/* Excavator Cycle: Move -> Stop -> Bucket Dig -> Hold -> Reset -> Repeat */
.neon-icon.is-animated .anim-excavator-body {
  animation: iconExcavatorBody 4000ms ease-in-out infinite;
}
@keyframes iconExcavatorBody {
  0% { transform: translateX(-6px); }
  30% { transform: translateX(0); }
  100% { transform: translateX(0); }
}

.neon-icon.is-animated .anim-excavator-dig {
  animation: iconExcavatorDig 4000ms ease-in-out infinite;
  transform-origin: 24px 34px;
}
@keyframes iconExcavatorDig {
  0% { transform: rotate(0deg); }
  30% { transform: rotate(0deg); }
  50% { transform: rotate(18deg); }
  75% { transform: rotate(-10deg); }
  90% { transform: rotate(0deg); }
  100% { transform: rotate(0deg); }
}

/* Dumper Cycle: Move -> Stop -> Skip Tip -> Return -> Repeat */
.neon-icon.is-animated .anim-dumper-body {
  animation: iconDumperBody 3500ms ease-in-out infinite;
}
@keyframes iconDumperBody {
  0% { transform: translateX(-6px); }
  30% { transform: translateX(0); }
  100% { transform: translateX(0); }
}

.neon-icon.is-animated .anim-dumper-tip {
  animation: iconDumperTip 3500ms ease-in-out infinite;
  transform-origin: 40px 38px;
}
@keyframes iconDumperTip {
  0% { transform: rotate(0deg); }
  35% { transform: rotate(0deg); }
  60% { transform: rotate(24deg); }
  80% { transform: rotate(0deg); }
  100% { transform: rotate(0deg); }
}

/* Telehandler / Forklift / Material Lift Cycle: Move -> Stop -> Lift/Extend -> Lower -> Repeat */
.neon-icon.is-animated .anim-lift-body {
  animation: iconLiftBody 3800ms ease-in-out infinite;
}
@keyframes iconLiftBody {
  0% { transform: translateX(-6px); }
  30% { transform: translateX(0); }
  100% { transform: translateX(0); }
}

.neon-icon.is-animated .anim-lift-forks {
  animation: iconLiftForks 3800ms ease-in-out infinite;
}
@keyframes iconLiftForks {
  0% { transform: translateY(0); }
  30% { transform: translateY(0); }
  55% { transform: translateY(-12px); }
  75% { transform: translateY(-12px); }
  90% { transform: translateY(0); }
  100% { transform: translateY(0); }
}

/* Powered Access & Towers: Move -> Stop -> Platform Rise -> Hold -> Lower -> Repeat */
.neon-icon.is-animated .anim-access-platform {
  animation: iconAccessPlatform 4000ms ease-in-out infinite;
}
@keyframes iconAccessPlatform {
  0% { transform: translateY(0); }
  25% { transform: translateY(0); }
  50% { transform: translateY(-14px); }
  75% { transform: translateY(-14px); }
  90% { transform: translateY(0); }
  100% { transform: translateY(0); }
}

/* Plant Trailer Ramp Drop Cycle */
.neon-icon.is-animated .anim-trailer-ramp {
  animation: iconTrailerRamp 3500ms ease-in-out infinite;
  transform-origin: 46px 36px;
}
@keyframes iconTrailerRamp {
  0% { transform: rotate(0deg); }
  30% { transform: rotate(0deg); }
  55% { transform: rotate(32deg); }
  80% { transform: rotate(0deg); }
  100% { transform: rotate(0deg); }
}

/* Fleet Vehicle Body & Tail-Lift Action Cycles */
.neon-icon.is-animated .anim-vehicle-body {
  animation: iconVehicleBody 3600ms ease-in-out infinite;
}
@keyframes iconVehicleBody {
  0% { transform: translateX(-4px); }
  30% { transform: translateX(0); }
  100% { transform: translateX(0); }
}

.neon-icon.is-animated .anim-tail-lift {
  animation: iconTailLift 3600ms ease-in-out infinite;
  transform-origin: 56px 44px;
}
@keyframes iconTailLift {
  0% { transform: translateY(0); }
  30% { transform: translateY(0); }
  55% { transform: translateY(10px); }
  75% { transform: translateY(10px); }
  90% { transform: translateY(0); }
  100% { transform: translateY(0); }
}

.neon-icon.is-animated .anim-ramp-tilt {
  animation: iconTrailerRamp 3500ms ease-in-out infinite;
  transform-origin: 56px 48px;
}

/* Roller Drum Body Cycle */
.neon-icon.is-animated .anim-roller-body {
  animation: iconRollerBody 3200ms ease-in-out infinite;
}
@keyframes iconRollerBody {
  0% { transform: translateX(-8px); }
  50% { transform: translateX(4px); }
  100% { transform: translateX(-8px); }
}

/* ==========================================================================
   TIER C — STATIC / ONE-SHOT ITEMS (Hinge Door Swing & Intermittent Idle)
   ========================================================================== */

.neon-icon.is-animated .anim-tier-c-idle {
  animation: iconTierCIdle 4000ms ease-in-out infinite;
  transform-origin: center bottom;
}
@keyframes iconTierCIdle {
  0% { transform: translateY(-4px) scale(0.98); opacity: 0.8; }
  12% { transform: translateY(0) scale(1); opacity: 1; }
  70% { transform: translateY(0) rotate(0deg); }
  78% { transform: translateY(-1px) rotate(-2deg); }
  84% { transform: translateY(0) rotate(2deg); }
  90% { transform: translateY(0) rotate(0deg); }
  100% { transform: translateY(0) rotate(0deg); }
}

/* Fake-perspective Hinge Door Swing (scaleX foreshortening revealing interior room behind) */
.neon-icon.is-animated .anim-swing-door {
  animation: iconSwingDoor 3800ms ease-in-out infinite;
}
@keyframes iconSwingDoor {
  0% { transform: scaleX(1); }
  22% { transform: scaleX(0.2); }
  65% { transform: scaleX(0.2); }
  85% { transform: scaleX(1); }
  100% { transform: scaleX(1); }
}

/* ==========================================================================
   ACCESSIBILITY: Respect prefers-reduced-motion
   ========================================================================== */
@media (prefers-reduced-motion: reduce) {
  .neon-icon.is-animated .icon-action,
  .neon-icon.is-animated [class*="anim-"],
  .neon-icon.is-animated [class*="icon-"] {
    animation: none !important;
    transform: none !important;
    stroke: currentColor !important;
    stroke-dashoffset: 0 !important;
  }
}
