diff --git a/toolkit/content/widgets/arrowscrollbox.js b/toolkit/content/widgets/arrowscrollbox.js
index b80d1049bb6ae305f2ac9c4c35fe975fd508031c..574149bffa49329e927c8db9db0c080eb6b87f5f 100644
--- a/toolkit/content/widgets/arrowscrollbox.js
+++ b/toolkit/content/widgets/arrowscrollbox.js
@@ -98,6 +98,7 @@
 
       let slot = this.shadowRoot.querySelector("slot");
       let overflowObserver = new ResizeObserver(_ => {
+        if (this.id == 'tabbrowser-arrowscrollbox') return; // zen: do NOT underflow/overflow on tabbrowser-arrowscrollbox
         let contentSize =
           slot.getBoundingClientRect()[this.#verticalMode ? "height" : "width"];
         // NOTE(emilio): This should be contentSize > scrollClientSize, but due
@@ -125,6 +126,11 @@
       overflowObserver.observe(this.scrollbox);
     }
 
+    connectedMoveCallback() {
+      // See gh-13015, define connectedMoveCallback to prevent connectedCallback
+      // from being called when using moveBefore.
+    }
+
     connectedCallback() {
       this.removeAttribute("overflowing");
 
@@ -642,7 +648,7 @@
 
     on_wheel(event) {
       // Don't consume the event if we can't scroll.
-      if (!this.overflowing) {
+      if (!this.overflowing || this.id === 'tabbrowser-arrowscrollbox' || ((event.deltaY == 0 || window.gZenWorkspaces?._swipeManager?.isGestureActive) && this.classList.contains('workspace-arrowscrollbox'))) {
         return;
       }
 
