Fix remap based on issue JC caught.

Diffs=
4ecbf9321 Fix remap based on issue JC caught. (#4771)
diff --git a/.rive_head b/.rive_head
index bca1be1..f5a6241 100644
--- a/.rive_head
+++ b/.rive_head
@@ -1 +1 @@
-89e38b700dce1e2328712c5258d2cd54b990b30b
+4ecbf93211d349dd5cc0e7f6f71acc63cdfdaef6
diff --git a/src/animation/linear_animation.cpp b/src/animation/linear_animation.cpp
index 9ddfd0a..3bbdc4a 100644
--- a/src/animation/linear_animation.cpp
+++ b/src/animation/linear_animation.cpp
@@ -79,6 +79,18 @@
 }
 float LinearAnimation::durationSeconds() const { return endSeconds() - startSeconds(); }
 
+// Matches Dart modulus: https://api.dart.dev/stable/2.19.0/dart-core/double/operator_modulo.html
+static float positiveMod(float value, float range)
+{
+    assert(range > 0.0f);
+    float v = fmodf(value, range);
+    if (v < 0.0f)
+    {
+        v += range;
+    }
+    return v;
+}
+
 float LinearAnimation::globalToLocalSeconds(float seconds) const
 {
     switch (loop())
@@ -86,9 +98,9 @@
         case Loop::oneShot:
             return seconds + startSeconds();
         case Loop::loop:
-            return std::fmod(seconds, (endSeconds() - startSeconds())) + startSeconds();
+            return positiveMod(seconds, (endSeconds() - startSeconds())) + startSeconds();
         case Loop::pingPong:
-            float localTime = std::fmod(seconds, (endSeconds() - startSeconds()));
+            float localTime = positiveMod(seconds, (endSeconds() - startSeconds()));
             int direction = ((int)(seconds / (endSeconds() - startSeconds()))) % 2;
             return direction == 0 ? localTime + startSeconds() : endSeconds() - localTime;
     }