Skip to content

Conversation

@feedthejim
Copy link
Contributor

@feedthejim feedthejim commented Jan 2, 2026

  • adds retry logic for network errors that we've caught in the previous PR on this stack
  • we retry once, with some random delay to potentially avoid network issues
  • stores the retrying attempts in the session storage
  • adds chunk cache cleaning logic in webpack and turbopack. webpack via monkey patching, turbopack via exposing a new method
  • we will retry on navigations and next/dynamic loads

Copy link
Contributor Author

feedthejim commented Jan 2, 2026

Warning

This pull request is not mergeable via GitHub because a downstack PR is open. Once all requirements are satisfied, merge this PR as a stack on Graphite.
Learn more

This stack of pull requests is managed by Graphite. Learn more about stacking.

debugInfo: flightResponsePromise._debugInfo ?? null,
}
} catch (err) {
// Check if this is a chunk/network error that we can retry
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The clearFailureState function is exported but never called after successful navigation, causing failure tracking state to persist across multiple navigations to the same route. This results in unexpected retry behavior on subsequent visits.

View Details
📝 Patch Details
diff --git a/packages/next/src/client/components/router-reducer/ppr-navigations.ts b/packages/next/src/client/components/router-reducer/ppr-navigations.ts
index 680fb13766..c2b3a0c6fd 100644
--- a/packages/next/src/client/components/router-reducer/ppr-navigations.ts
+++ b/packages/next/src/client/components/router-reducer/ppr-navigations.ts
@@ -30,6 +30,7 @@ import {
   convertServerPatchToFullTree,
   type NavigationSeed,
 } from '../segment-cache/navigation'
+import { clearFailureState } from '../chunk-load-error'
 
 // This is yet another tree type that is used to track pending promises that
 // need to be fulfilled once the dynamic data is received. The terminal nodes of
@@ -1302,6 +1303,9 @@ async function finishNavigationTask(
     case NavigationTaskExitStatus.Done: {
       // The task has completely finished. There's no missing data. Exit.
       previousNavigationDidMismatch = false
+      // Clear failure state for the successfully navigated route
+      const primaryRequestResult = await primaryRequestPromise
+      clearFailureState(primaryRequestResult.url.pathname)
       return
     }
     case NavigationTaskExitStatus.SoftRetry: {

Analysis

Failure tracking state not cleared after successful navigation

What fails: Failure count for chunk/network errors persists across navigations, preventing silent retries on subsequent visits to the same route.

How to reproduce:

  1. Navigate to /page1
  2. Encounter a chunk load error (e.g., due to network issue)
  3. Silent retry succeeds
  4. Navigate to /page2
  5. Navigate back to /page1
  6. Trigger the same chunk error again

Result: The second chunk error on /page1 fails the silent retry check because failCount has accumulated from the previous session (1 + 1 = 2), reaching the MAX_FAIL_COUNT_FOR_RETRY threshold. Error banner is shown immediately instead of attempting a silent retry.

Expected: When navigation completes successfully, the failure state for that route should be cleared via clearFailureState(). This provides fresh retry opportunities on subsequent visits. The clearFailureState() function exists and is exported from packages/next/src/client/components/chunk-load-error/chunk-load-error-handler.ts (with a docstring indicating it should be "called on successful navigation"), but was never invoked anywhere in the codebase.

Fix: Call clearFailureState(pathname) in finishNavigationTask() when NavigationTaskExitStatus.Done is reached (successful navigation completion). This clears all accumulated failure counts for the successfully navigated route's chunks, stored in sessionStorage under keys matching __next_chunk_fail:{buildId}:{route}:{chunkKey}.

@feedthejim feedthejim force-pushed the chunk-load-error-banner branch from 725f152 to a304c38 Compare January 2, 2026 13:12
@feedthejim feedthejim force-pushed the chunk-load-error-retry branch from e3e91ab to 382a356 Compare January 2, 2026 13:12
@nextjs-bot nextjs-bot added created-by: Next.js team PRs by the Next.js team. tests Turbopack Related to Turbopack with Next.js. type: next labels Jan 2, 2026
@nextjs-bot
Copy link
Collaborator

Allow CI Workflow Run

  • approve CI run for commit: 382a356

Note: this should only be enabled once the PR is ready to go and can only be enabled by a maintainer

1 similar comment
@nextjs-bot
Copy link
Collaborator

Allow CI Workflow Run

  • approve CI run for commit: 382a356

Note: this should only be enabled once the PR is ready to go and can only be enabled by a maintainer

@nextjs-bot
Copy link
Collaborator

nextjs-bot commented Jan 2, 2026

Stats from current PR

Default Build (Increase detected ⚠️)
General Overall increase ⚠️
vercel/next.js canary vercel/next.js chunk-load-error-retry Change
buildDuration 16.6s 14.9s N/A
buildDurationCached 13.8s 11s N/A
nodeModulesSize 457 MB 458 MB ⚠️ +960 kB
nextStartRea..uration (ms) 692ms 693ms N/A
Client Bundles (main, webpack) Overall increase ⚠️
vercel/next.js canary vercel/next.js chunk-load-error-retry Change
2086.HASH.js gzip 169 B 169 B
2161-HASH.js gzip 5.39 kB 5.41 kB N/A
2747-HASH.js gzip 4.48 kB 4.46 kB N/A
4322-HASH.js gzip 51.2 kB 54.7 kB ⚠️ +3.53 kB
ec793fe8-HASH.js gzip 62.3 kB 62.3 kB N/A
framework-HASH.js gzip 59.8 kB 59.8 kB N/A
main-app-HASH.js gzip 251 B 254 B N/A
main-HASH.js gzip 38.4 kB 38.7 kB ⚠️ +369 B
webpack-HASH.js gzip 1.68 kB 1.73 kB N/A
Overall change 89.8 kB 93.7 kB ⚠️ +3.9 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary vercel/next.js chunk-load-error-retry Change
polyfills-HASH.js gzip 39.4 kB 39.4 kB
Overall change 39.4 kB 39.4 kB
Client Pages Overall increase ⚠️
vercel/next.js canary vercel/next.js chunk-load-error-retry Change
_app-HASH.js gzip 194 B 193 B N/A
_error-HASH.js gzip 182 B 182 B
css-HASH.js gzip 336 B 335 B N/A
dynamic-HASH.js gzip 1.8 kB 4.18 kB ⚠️ +2.38 kB
edge-ssr-HASH.js gzip 256 B 256 B
head-HASH.js gzip 352 B 349 B N/A
hooks-HASH.js gzip 385 B 384 B N/A
image-HASH.js gzip 580 B 580 B
index-HASH.js gzip 259 B 258 B N/A
link-HASH.js gzip 2.5 kB 2.51 kB N/A
routerDirect..HASH.js gzip 319 B 317 B N/A
script-HASH.js gzip 385 B 387 B N/A
withRouter-HASH.js gzip 316 B 315 B N/A
1afbb74e6ecf..834.css gzip 106 B 106 B
Overall change 2.92 kB 5.3 kB ⚠️ +2.38 kB
Client Build Manifests
vercel/next.js canary vercel/next.js chunk-load-error-retry Change
_buildManifest.js gzip 738 B 738 B
Overall change 738 B 738 B
Rendered Page Sizes
vercel/next.js canary vercel/next.js chunk-load-error-retry Change
index.html gzip 523 B 524 B N/A
link.html gzip 538 B 538 B
withRouter.html gzip 520 B 520 B
Overall change 1.06 kB 1.06 kB
Edge SSR bundle Size Overall increase ⚠️
vercel/next.js canary vercel/next.js chunk-load-error-retry Change
edge-ssr.js gzip 124 kB 124 kB N/A
page.js gzip 237 kB 241 kB ⚠️ +3.51 kB
Overall change 237 kB 241 kB ⚠️ +3.51 kB
Middleware size Overall increase ⚠️
vercel/next.js canary vercel/next.js chunk-load-error-retry Change
middleware-b..fest.js gzip 652 B 652 B
middleware-r..fest.js gzip 155 B 156 B N/A
middleware.js gzip 32.8 kB 32.9 kB ⚠️ +122 B
edge-runtime..pack.js gzip 846 B 846 B
Overall change 34.3 kB 34.4 kB ⚠️ +122 B
Next Runtimes Overall increase ⚠️
vercel/next.js canary vercel/next.js chunk-load-error-retry Change
app-page-exp...dev.js gzip 301 kB 305 kB ⚠️ +3.45 kB
app-page-exp..prod.js gzip 156 kB 158 kB ⚠️ +2.11 kB
app-page-tur...dev.js gzip 301 kB 305 kB ⚠️ +3.44 kB
app-page-tur..prod.js gzip 156 kB 158 kB ⚠️ +2.11 kB
app-page-tur...dev.js gzip 298 kB 301 kB ⚠️ +3.51 kB
app-page-tur..prod.js gzip 154 kB 156 kB ⚠️ +2.07 kB
app-page.run...dev.js gzip 298 kB 301 kB ⚠️ +3.52 kB
app-page.run..prod.js gzip 154 kB 156 kB ⚠️ +2.07 kB
app-route-ex...dev.js gzip 68.7 kB 68.7 kB
app-route-ex..prod.js gzip 47.5 kB 47.5 kB
app-route-tu...dev.js gzip 68.7 kB 68.7 kB
app-route-tu..prod.js gzip 47.5 kB 47.5 kB
app-route-tu...dev.js gzip 68.3 kB 68.3 kB
app-route-tu..prod.js gzip 47.3 kB 47.3 kB
app-route.ru...dev.js gzip 68.3 kB 68.3 kB
app-route.ru..prod.js gzip 47.3 kB 47.3 kB
dist_client_...dev.js gzip 324 B 324 B
dist_client_...dev.js gzip 326 B 326 B
dist_client_...dev.js gzip 318 B 318 B
dist_client_...dev.js gzip 317 B 317 B
pages-api-tu...dev.js gzip 41.1 kB 41.1 kB
pages-api-tu..prod.js gzip 31.2 kB 31.2 kB
pages-api.ru...dev.js gzip 41 kB 41 kB
pages-api.ru..prod.js gzip 31.2 kB 31.2 kB
pages-turbo....dev.js gzip 50.7 kB 50.7 kB N/A
pages-turbo...prod.js gzip 38.2 kB 38.2 kB N/A
pages.runtim...dev.js gzip 50.6 kB 50.7 kB N/A
pages.runtim..prod.js gzip 38.1 kB 38.1 kB N/A
server.runti..prod.js gzip 59.9 kB 59.9 kB
Overall change 2.49 MB 2.51 MB ⚠️ +22.3 kB
build cache Overall increase ⚠️
vercel/next.js canary vercel/next.js chunk-load-error-retry Change
0.pack gzip 3.61 MB 3.66 MB ⚠️ +48.9 kB
index.pack gzip 99.7 kB 101 kB ⚠️ +950 B
Overall change 3.71 MB 3.76 MB ⚠️ +49.8 kB
Diff details
Diff for page.js

Diff too large to display

Diff for middleware.js

Diff too large to display

Diff for edge-ssr.js

Diff too large to display

Diff for _buildManifest.js
@@ -611,35 +611,35 @@ self.__BUILD_MANIFEST = (function (a, b, c) {
       numHashes: NaN,
       bitArray: [],
     },
-    "/": ["static\u002Fchunks\u002Fpages\u002Findex-dda7d8b64d4ba15c.js"],
+    "/": ["static\u002Fchunks\u002Fpages\u002Findex-d95f7ec6af4d2644.js"],
     "/_error": [
-      "static\u002Fchunks\u002Fpages\u002F_error-6ef44d3954f25711.js",
+      "static\u002Fchunks\u002Fpages\u002F_error-209c0c82205a7c9f.js",
     ],
     "/css": [
       "static\u002Fcss\u002Fded6b86ab9cc0a1f.css",
-      "static\u002Fchunks\u002Fpages\u002Fcss-c8aaa7211416a045.js",
+      "static\u002Fchunks\u002Fpages\u002Fcss-62710339bc830ded.js",
     ],
     "/dynamic": [
-      "static\u002Fchunks\u002Fpages\u002Fdynamic-d53bb7f318f342c2.js",
+      "static\u002Fchunks\u002Fpages\u002Fdynamic-8a03f5fe64080e08.js",
     ],
     "/edge-ssr": [
-      "static\u002Fchunks\u002Fpages\u002Fedge-ssr-1383106d4a3e7d72.js",
+      "static\u002Fchunks\u002Fpages\u002Fedge-ssr-0db9f7bb610d3072.js",
     ],
-    "/head": ["static\u002Fchunks\u002Fpages\u002Fhead-1db1c4be1a45662f.js"],
-    "/hooks": ["static\u002Fchunks\u002Fpages\u002Fhooks-e6deee5b72a5b112.js"],
+    "/head": ["static\u002Fchunks\u002Fpages\u002Fhead-747416c4075e42aa.js"],
+    "/hooks": ["static\u002Fchunks\u002Fpages\u002Fhooks-8b10205be7505244.js"],
     "/image": [
-      "static\u002Fchunks\u002F2747-90c828280005c0c3.js",
-      "static\u002Fchunks\u002Fpages\u002Fimage-868472cd5e84efc9.js",
+      "static\u002Fchunks\u002F6349-ee9aecde860d4832.js",
+      "static\u002Fchunks\u002Fpages\u002Fimage-f90ae17c3ad1d38b.js",
     ],
-    "/link": ["static\u002Fchunks\u002Fpages\u002Flink-0ec374e48b2ce5d9.js"],
+    "/link": ["static\u002Fchunks\u002Fpages\u002Flink-6ab9a67b348df1bf.js"],
     "/routerDirect": [
-      "static\u002Fchunks\u002Fpages\u002FrouterDirect-1a34bfadbc088491.js",
+      "static\u002Fchunks\u002Fpages\u002FrouterDirect-f132fb471e65a8b9.js",
     ],
     "/script": [
-      "static\u002Fchunks\u002Fpages\u002Fscript-52320f59afbd096d.js",
+      "static\u002Fchunks\u002Fpages\u002Fscript-8e2028e44b8da2d9.js",
     ],
     "/withRouter": [
-      "static\u002Fchunks\u002Fpages\u002FwithRouter-3b1a16d3dfa21c16.js",
+      "static\u002Fchunks\u002Fpages\u002FwithRouter-a86d259faa012c1c.js",
     ],
     sortedPages: [
       "\u002F",
Diff for dynamic-HASH.js
@@ -1,17 +1,346 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [2291],
   {
-    /***/ 1231: /***/ (
-      module,
+    /***/ 434: /***/ (module, exports, __webpack_require__) => {
+      "use strict";
+      /* __next_internal_client_entry_do_not_use__  cjs */
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      Object.defineProperty(exports, "ChunkLoadErrorBanner", {
+        enumerable: true,
+        get: function () {
+          return ChunkLoadErrorBanner;
+        },
+      });
+      const _jsxruntime = __webpack_require__(3108);
+      const _react = __webpack_require__(4312);
+      // Copy constants (two lines, always)
+      const HEADLINE = "This page couldn't be fully loaded";
+      const DETAIL_DEFAULT = "A required file couldn't be loaded.";
+      const DETAIL_OFFLINE = "You're offline.";
+      // Fixed height for stable layout
+      const BANNER_HEIGHT = 70;
+      const styles = {
+        container: {
+          position: "fixed",
+          top: 0,
+          left: 0,
+          right: 0,
+          zIndex: 9999,
+          height: BANNER_HEIGHT,
+          padding: "0 20px",
+          backgroundColor: "#f5f5f5",
+          borderBottom: "1px solid #d4d4d4",
+          fontFamily:
+            'system-ui, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"',
+          display: "flex",
+          alignItems: "center",
+          justifyContent: "space-between",
+          gap: "16px",
+          boxSizing: "border-box",
+        },
+        spacer: {
+          height: BANNER_HEIGHT,
+          flexShrink: 0,
+        },
+        left: {
+          display: "flex",
+          alignItems: "center",
+          gap: "12px",
+          flex: 1,
+          minWidth: 0,
+        },
+        icon: {
+          flexShrink: 0,
+          width: "20px",
+          height: "20px",
+        },
+        content: {
+          display: "flex",
+          flexDirection: "column",
+          gap: "2px",
+          flex: 1,
+          minWidth: 0,
+        },
+        headline: {
+          fontSize: "14px",
+          fontWeight: 600,
+          color: "#171717",
+          margin: 0,
+          lineHeight: 1.4,
+        },
+        detail: {
+          fontSize: "13px",
+          fontWeight: 400,
+          color: "#525252",
+          margin: 0,
+          lineHeight: 1.4,
+        },
+        button: {
+          padding: "8px 16px",
+          fontSize: "13px",
+          fontWeight: 600,
+          borderRadius: "6px",
+          cursor: "pointer",
+          color: "#171717",
+          backgroundColor: "#fff",
+          border: "1px solid #a3a3a3",
+          lineHeight: 1,
+          flexShrink: 0,
+        },
+      };
+      // Neutral warning icon (circle with exclamation)
+      function WarningIcon() {
+        return /*#__PURE__*/ (0, _jsxruntime.jsxs)("svg", {
+          style: styles.icon,
+          viewBox: "0 0 20 20",
+          fill: "none",
+          xmlns: "http://www.w3.org/2000/svg",
+          "aria-hidden": "true",
+          children: [
+            /*#__PURE__*/ (0, _jsxruntime.jsx)("circle", {
+              cx: "10",
+              cy: "10",
+              r: "9",
+              stroke: "#737373",
+              strokeWidth: "1.5",
+            }),
+            /*#__PURE__*/ (0, _jsxruntime.jsx)("path", {
+              d: "M10 5.5V11",
+              stroke: "#737373",
+              strokeWidth: "1.5",
+              strokeLinecap: "round",
+            }),
+            /*#__PURE__*/ (0, _jsxruntime.jsx)("circle", {
+              cx: "10",
+              cy: "14",
+              r: "1",
+              fill: "#737373",
+            }),
+          ],
+        });
+      }
+      function ChunkLoadErrorBanner(_props) {
+        const [isOffline, setIsOffline] = (0, _react.useState)(
+          typeof navigator !== "undefined" ? !navigator.onLine : false
+        );
+        (0, _react.useEffect)(() => {
+          const handleOnline = () => setIsOffline(false);
+          const handleOffline = () => setIsOffline(true);
+          window.addEventListener("online", handleOnline);
+          window.addEventListener("offline", handleOffline);
+          return () => {
+            window.removeEventListener("online", handleOnline);
+            window.removeEventListener("offline", handleOffline);
+          };
+        }, []);
+        const handleReload = (0, _react.useCallback)(() => {
+          window.location.reload();
+        }, []);
+        const detail = isOffline ? DETAIL_OFFLINE : DETAIL_DEFAULT;
+        return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {
+          children: [
+            /*#__PURE__*/ (0, _jsxruntime.jsxs)("div", {
+              style: styles.container,
+              role: "alert",
+              "aria-live": "assertive",
+              children: [
+                /*#__PURE__*/ (0, _jsxruntime.jsxs)("div", {
+                  style: styles.left,
+                  children: [
+                    /*#__PURE__*/ (0, _jsxruntime.jsx)(WarningIcon, {}),
+                    /*#__PURE__*/ (0, _jsxruntime.jsxs)("div", {
+                      style: styles.content,
+                      children: [
+                        /*#__PURE__*/ (0, _jsxruntime.jsx)("p", {
+                          style: styles.headline,
+                          children: HEADLINE,
+                        }),
+                        /*#__PURE__*/ (0, _jsxruntime.jsx)("p", {
+                          style: styles.detail,
+                          children: detail,
+                        }),
+                      ],
+                    }),
+                  ],
+                }),
+                /*#__PURE__*/ (0, _jsxruntime.jsx)("button", {
+                  type: "button",
+                  style: styles.button,
+                  onClick: handleReload,
+                  children: "Reload page",
+                }),
+              ],
+            }),
+            /*#__PURE__*/ (0, _jsxruntime.jsx)("div", {
+              style: styles.spacer,
+            }),
+          ],
+        });
+      }
+      if (
+        (typeof exports.default === "function" ||
+          (typeof exports.default === "object" && exports.default !== null)) &&
+        typeof exports.default.__esModule === "undefined"
+      ) {
+        Object.defineProperty(exports.default, "__esModule", {
+          value: true,
+        });
+        Object.assign(exports.default, exports);
+        module.exports = exports.default;
+      } //# sourceMappingURL=chunk-load-error-banner.js.map
+
+      /***/
+    },
+
+    /***/ 1033: /***/ (module, exports) => {
+      "use strict";
+      // This gets assigned as a side-effect during app initialization. Because it
+      // represents the build used to create the JS bundle, it should never change
+      // after being set, so we store it in a global variable.
+      //
+      // When performing RSC requests, if the incoming data has a different build ID,
+      // we perform an MPA navigation/refresh to load the updated build and ensure
+      // that the client and server in sync.
+      // Starts as an empty string. In practice, because setAppBuildId is called
+      // during initialization before hydration starts, this will always get
+      // reassigned to the actual build ID before it's ever needed by a navigation.
+      // If for some reasons it didn't, due to a bug or race condition, then on
+      // navigation the build comparision would fail and trigger an MPA navigation.
+
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      0 && 0;
+      function _export(target, all) {
+        for (var name in all)
+          Object.defineProperty(target, name, {
+            enumerable: true,
+            get: all[name],
+          });
+      }
+      _export(exports, {
+        getAppBuildId: function () {
+          return getAppBuildId;
+        },
+        setAppBuildId: function () {
+          return setAppBuildId;
+        },
+      });
+      let globalBuildId = "";
+      function setAppBuildId(buildId) {
+        globalBuildId = buildId;
+      }
+      function getAppBuildId() {
+        return globalBuildId;
+      }
+      if (
+        (typeof exports.default === "function" ||
+          (typeof exports.default === "object" && exports.default !== null)) &&
+        typeof exports.default.__esModule === "undefined"
+      ) {
+        Object.defineProperty(exports.default, "__esModule", {
+          value: true,
+        });
+        Object.assign(exports.default, exports);
+        module.exports = exports.default;
+      } //# sourceMappingURL=app-build-id.js.map
+
+      /***/
+    },
+
+    /***/ 2604: /***/ (
+      __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
-      module.exports = __webpack_require__(4464);
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/dynamic",
+        function () {
+          return __webpack_require__(3643);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
+
+    /***/ 2758: /***/ (module, exports, __webpack_require__) => {
+      "use strict";
+
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      0 && 0;
+      function _export(target, all) {
+        for (var name in all)
+          Object.defineProperty(target, name, {
+            enumerable: true,
+            get: all[name],
+          });
+      }
+      _export(exports, {
+        ChunkLoadErrorBanner: function () {
+          return _chunkloaderrorbanner.ChunkLoadErrorBanner;
+        },
+        clearChunkCache: function () {
+          return _chunkloaderrorhandler.clearChunkCache;
+        },
+        clearFailureState: function () {
+          return _chunkloaderrorhandler.clearFailureState;
+        },
+        createChunkErrorContext: function () {
+          return _chunkloaderrorhandler.createChunkErrorContext;
+        },
+        getFailCount: function () {
+          return _chunkloaderrorhandler.getFailCount;
+        },
+        getRetryDelayMs: function () {
+          return _chunkloaderrorhandler.getRetryDelayMs;
+        },
+        handleChunkFailure: function () {
+          return _chunkloaderrorhandler.handleChunkFailure;
+        },
+        isChunkLoadError: function () {
+          return _ischunkloaderror.isChunkLoadError;
+        },
+        isChunkOrNetworkError: function () {
+          return _ischunkloaderror.isChunkOrNetworkError;
+        },
+        isNetworkError: function () {
+          return _ischunkloaderror.isNetworkError;
+        },
+        retryChunkImport: function () {
+          return _chunkloaderrorhandler.retryChunkImport;
+        },
+        shouldSilentRetry: function () {
+          return _chunkloaderrorhandler.shouldSilentRetry;
+        },
+        sleep: function () {
+          return _chunkloaderrorhandler.sleep;
+        },
+      });
+      const _ischunkloaderror = __webpack_require__(9462);
+      const _chunkloaderrorhandler = __webpack_require__(7676);
+      const _chunkloaderrorbanner = __webpack_require__(434);
+      if (
+        (typeof exports.default === "function" ||
+          (typeof exports.default === "object" && exports.default !== null)) &&
+        typeof exports.default.__esModule === "undefined"
+      ) {
+        Object.defineProperty(exports.default, "__esModule", {
+          value: true,
+        });
+        Object.assign(exports.default, exports);
+        module.exports = exports.default;
+      } //# sourceMappingURL=index.js.map
 
       /***/
     },
 
-    /***/ 2101: /***/ (
+    /***/ 3401: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -38,24 +367,63 @@
       /***/
     },
 
-    /***/ 3458: /***/ (
+    /***/ 3643: /***/ (
       __unused_webpack_module,
-      __unused_webpack_exports,
+      __webpack_exports__,
       __webpack_require__
     ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/dynamic",
-        function () {
-          return __webpack_require__(9381);
-        },
-      ]);
-      if (false) {
-      }
+      "use strict";
+      __webpack_require__.r(__webpack_exports__);
+      /* harmony export */ __webpack_require__.d(__webpack_exports__, {
+        /* harmony export */ __N_SSP: () => /* binding */ __N_SSP,
+        /* harmony export */ default: () => __WEBPACK_DEFAULT_EXPORT__,
+        /* harmony export */
+      });
+      /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
+        __webpack_require__(3108);
+      /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1__ =
+        __webpack_require__(3973);
+      /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1___default =
+        /*#__PURE__*/ __webpack_require__.n(
+          next_dynamic__WEBPACK_IMPORTED_MODULE_1__
+        );
+
+      const DynamicHello = next_dynamic__WEBPACK_IMPORTED_MODULE_1___default()(
+        () =>
+          __webpack_require__
+            .e(/* import() */ 1596)
+            .then(__webpack_require__.bind(__webpack_require__, 1596))
+            .then((mod) => mod.Hello),
+        {
+          loadableGenerated: {
+            webpack: () => [/*require.resolve*/ 1596],
+          },
+        }
+      );
+      const Page = () =>
+        /*#__PURE__*/ (0, react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(
+          react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment,
+          {
+            children: [
+              /*#__PURE__*/ (0,
+              react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", {
+                children: "testing next/dynamic size",
+              }),
+              /*#__PURE__*/ (0,
+              react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(
+                DynamicHello,
+                {}
+              ),
+            ],
+          }
+        );
+      var __N_SSP = true;
+      /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = Page;
 
       /***/
     },
 
-    /***/ 4464: /***/ (module, exports, __webpack_require__) => {
+    /***/ 3660: /***/ (module, exports, __webpack_require__) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -88,7 +456,7 @@
         __webpack_require__(4312)
       );
       const _loadablesharedruntime = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(9799)
+        __webpack_require__(4539)
       );
       const isServerSide = "object" === "undefined";
       // Normalize loader to return the module as form { default: Component } for `React.lazy`.
@@ -188,63 +556,17 @@
       /***/
     },
 
-    /***/ 9381: /***/ (
-      __unused_webpack_module,
-      __webpack_exports__,
+    /***/ 3973: /***/ (
+      module,
+      __unused_webpack_exports,
       __webpack_require__
     ) => {
-      "use strict";
-      __webpack_require__.r(__webpack_exports__);
-      /* harmony export */ __webpack_require__.d(__webpack_exports__, {
-        /* harmony export */ __N_SSP: () => /* binding */ __N_SSP,
-        /* harmony export */ default: () => __WEBPACK_DEFAULT_EXPORT__,
-        /* harmony export */
-      });
-      /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
-        __webpack_require__(3108);
-      /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(1231);
-      /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1___default =
-        /*#__PURE__*/ __webpack_require__.n(
-          next_dynamic__WEBPACK_IMPORTED_MODULE_1__
-        );
-
-      const DynamicHello = next_dynamic__WEBPACK_IMPORTED_MODULE_1___default()(
-        () =>
-          __webpack_require__
-            .e(/* import() */ 2086)
-            .then(__webpack_require__.bind(__webpack_require__, 2086))
-            .then((mod) => mod.Hello),
-        {
-          loadableGenerated: {
-            webpack: () => [/*require.resolve*/ 2086],
-          },
-        }
-      );
-      const Page = () =>
-        /*#__PURE__*/ (0, react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(
-          react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment,
-          {
-            children: [
-              /*#__PURE__*/ (0,
-              react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", {
-                children: "testing next/dynamic size",
-              }),
-              /*#__PURE__*/ (0,
-              react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(
-                DynamicHello,
-                {}
-              ),
-            ],
-          }
-        );
-      var __N_SSP = true;
-      /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = Page;
+      module.exports = __webpack_require__(3660);
 
       /***/
     },
 
-    /***/ 9799: /***/ (
+    /***/ 4539: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -286,7 +608,8 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
       const _react = /*#__PURE__*/ _interop_require_default._(
         __webpack_require__(4312)
       );
-      const _loadablecontextsharedruntime = __webpack_require__(2101);
+      const _loadablecontextsharedruntime = __webpack_require__(3401);
+      const _chunkloaderror = __webpack_require__(2758);
       function resolve(obj) {
         return obj && obj.default ? obj.default : obj;
       }
@@ -413,6 +736,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
           this._callbacks = new Set();
           this._delay = null;
           this._timeout = null;
+          this._hasAutoRetried = false;
           this.retry();
         }
         promise() {
@@ -451,7 +775,25 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
               this._update({});
               this._clearTimeouts();
             })
-            .catch((_err) => {
+            .catch((err) => {
+              // Auto-retry for chunk load errors (once)
+              // This handles transient network failures during dynamic imports
+              if (
+                true &&
+                (0, _chunkloaderror.isChunkLoadError)(err) &&
+                !this._hasAutoRetried
+              ) {
+                this._hasAutoRetried = true;
+                // Clear bundler's chunk cache so retry will fetch fresh
+                (0, _chunkloaderror.clearChunkCache)(err);
+                // Retry after a short delay with jitter
+                const delay = (0, _chunkloaderror.getRetryDelayMs)();
+                setTimeout(() => {
+                  this.retry();
+                }, delay);
+                return;
+              }
+              // No more retries - propagate error
               this._update({});
               this._clearTimeouts();
             });
@@ -518,13 +860,392 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
 
       /***/
     },
+
+    /***/ 7676: /***/ (module, exports, __webpack_require__) => {
+      "use strict";
+      /**
+       * Chunk load error handling with silent retry logic.
+       *
+       * This module provides retry orchestration for chunk/network loading failures.
+       * It tracks failures in sessionStorage per {route, buildId, chunkKey} and
+       * implements silent retry with jittered backoff.
+       */
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      0 && 0;
+      function _export(target, all) {
+        for (var name in all)
+          Object.defineProperty(target, name, {
+            enumerable: true,
+            get: all[name],
+          });
+      }
+      _export(exports, {
+        clearChunkCache: function () {
+          return clearChunkCache;
+        },
+        clearFailureState: function () {
+          return clearFailureState;
+        },
+        createChunkErrorContext: function () {
+          return createChunkErrorContext;
+        },
+        getFailCount: function () {
+          return getFailCount;
+        },
+        getRetryDelayMs: function () {
+          return getRetryDelayMs;
+        },
+        handleChunkFailure: function () {
+          return handleChunkFailure;
+        },
+        retryChunkImport: function () {
+          return retryChunkImport;
+        },
+        shouldSilentRetry: function () {
+          return shouldSilentRetry;
+        },
+        sleep: function () {
+          return sleep;
+        },
+      });
+      const _appbuildid = __webpack_require__(1033);
+      const _ischunkloaderror = __webpack_require__(9462);
+      const STORAGE_PREFIX = "__next_chunk_fail:";
+      const RETRY_WINDOW_MS = 30000; // Don't retry same chunk within 30s of a retry
+      const MAX_FAIL_COUNT_FOR_RETRY = 2; // After 2 failures, skip silent retry
+      /**
+       * Simple hash function for generating chunk keys when URL isn't available.
+       */ function simpleHash(str) {
+        let hash = 0;
+        for (let i = 0; i < str.length; i++) {
+          const char = str.charCodeAt(i);
+          hash = ((hash << 5) - hash + char) | 0;
+        }
+        return Math.abs(hash).toString(36);
+      }
+      /**
+       * Extract chunk URL from error message if possible.
+       * ChunkLoadError messages typically contain the URL.
+       */ function extractChunkUrl(error) {
+        const message = error.message;
+        // Turbopack format: "Failed to load chunk <url> from <reason>: <cause>"
+        // The URL can be relative (/_next/...) or absolute (http://...)
+        const turbopackMatch = message.match(
+          /Failed to load chunk ([^\s]+\.(?:js|css))/
+        );
+        if (turbopackMatch) {
+          return turbopackMatch[1];
+        }
+        // Webpack format: "Loading chunk <id> failed. (error: <url>)"
+        const webpackMatch = message.match(/https?:\/\/[^\s)]+/);
+        return webpackMatch?.[0];
+      }
+      /**
+       * Extract the chunk ID from a webpack chunk URL.
+       * URLs look like: /_next/static/chunks/123.hash.js
+       */ function extractWebpackChunkId(chunkUrl) {
+        // Match chunk ID from URL path: /chunks/123.abc123.js or /chunks/pages_foo_bar.abc123.js
+        const match = chunkUrl.match(/\/chunks\/([^/.]+)\.[a-f0-9]+\.js/);
+        return match?.[1];
+      }
+      function clearChunkCache(error) {
+        const chunkUrl = extractChunkUrl(error);
+        if (!chunkUrl) return false;
+        // Turbopack: clear by chunk URL
+        if (
+          typeof globalThis.__turbopack_clear_chunk_resolver__ === "function"
+        ) {
+          // Extract the relative URL path that Turbopack uses as key
+          try {
+            const url = new URL(chunkUrl);
+            globalThis.__turbopack_clear_chunk_resolver__(
+              url.pathname + url.search
+            );
+            return true;
+          } catch {
+            // Invalid URL, try using the full URL
+            globalThis.__turbopack_clear_chunk_resolver__(chunkUrl);
+            return true;
+          }
+        }
+        // Webpack: extract chunk ID from URL and clear by ID
+        if (typeof globalThis.__next_clear_chunk_cache__ === "function") {
+          const chunkId = extractWebpackChunkId(chunkUrl);
+          if (chunkId) {
+            globalThis.__next_clear_chunk_cache__(chunkId);
+            return true;
+          }
+        }
+        return false;
+      }
+      /**
+       * Generate a unique key for this chunk error, used for deduplication.
+       */ function getChunkKey(ctx) {
+        return ctx.chunkUrl ?? simpleHash(ctx.message);
+      }
+      /**
+       * Get the sessionStorage key for tracking this chunk failure.
+       */ function getStorageKey(ctx) {
+        const buildId = (0, _appbuildid.getAppBuildId)();
+        const chunkKey = getChunkKey(ctx);
+        return `${STORAGE_PREFIX}${buildId}:${ctx.route}:${chunkKey}`;
+      }
+      /**
+       * Read failure state from sessionStorage.
+       */ function readFailureState(key) {
+        if (typeof sessionStorage === "undefined") return null;
+        try {
+          const stored = sessionStorage.getItem(key);
+          if (!stored) return null;
+          return JSON.parse(stored);
+        } catch {
+          return null;
+        }
+      }
+      /**
+       * Write failure state to sessionStorage.
+       */ function writeFailureState(key, state) {
+        if (typeof sessionStorage === "undefined") return;
+        try {
+          sessionStorage.setItem(key, JSON.stringify(state));
+        } catch {
+          // Storage might be full or disabled - continue without tracking
+        }
+      }
+      function clearFailureState(route) {
+        if (typeof sessionStorage === "undefined") return;
+        try {
+          const buildId = (0, _appbuildid.getAppBuildId)();
+          const prefix = `${STORAGE_PREFIX}${buildId}:${route}:`;
+          const keysToRemove = [];
+          for (let i = 0; i < sessionStorage.length; i++) {
+            const key = sessionStorage.key(i);
+            if (key?.startsWith(prefix)) {
+              keysToRemove.push(key);
+            }
+          }
+          keysToRemove.forEach((key) => sessionStorage.removeItem(key));
+        } catch {
+          // Ignore storage errors
+        }
+      }
+      /**
+       * Increment the failure count for this chunk.
+       */ function bumpFailCount(ctx) {
+        const key = getStorageKey(ctx);
+        const existing = readFailureState(key);
+        const now = Date.now();
+        const state = {
+          failCount: (existing?.failCount ?? 0) + 1,
+          lastTs: now,
+          retriedTs: existing?.retriedTs,
+        };
+        writeFailureState(key, state);
+        return state;
+      }
+      /**
+       * Mark that a retry was attempted for this chunk.
+       */ function markRetried(ctx) {
+        const key = getStorageKey(ctx);
+        const existing = readFailureState(key);
+        const now = Date.now();
+        const state = {
+          failCount: existing?.failCount ?? 1,
+          lastTs: existing?.lastTs ?? now,
+          retriedTs: now,
+        };
+        writeFailureState(key, state);
+      }
+      function shouldSilentRetry(ctx) {
+        // Don't retry if offline
+        if (typeof navigator !== "undefined" && !navigator.onLine) {
+          return false;
+        }
+        const key = getStorageKey(ctx);
+        const state = readFailureState(key);
+        const now = Date.now();
+        // If we already retried within the window, don't retry again
+        if (state?.retriedTs && now - state.retriedTs < RETRY_WINDOW_MS) {
+          return false;
+        }
+        // Too many failures - skip silent retry to avoid annoying the user
+        if ((state?.failCount ?? 0) >= MAX_FAIL_COUNT_FOR_RETRY) {
+          return false;
+        }
+        return true;
+      }
+      function getFailCount(ctx) {
+        const key = getStorageKey(ctx);
+        const state = readFailureState(key);
+        return state?.failCount ?? 0;
+      }
+      function getRetryDelayMs() {
+        const baseDelay = 200;
+        const jitter = Math.floor(Math.random() * 401); // 0-400ms
+        // Get RTT if available via Network Information API
+        let rtt = 0;
+        if (typeof navigator !== "undefined" && "connection" in navigator) {
+          const connection = navigator.connection;
+          if (connection?.rtt) {
+            rtt = Math.min(500, connection.rtt); // Cap at 500ms
+          }
+        }
+        return Math.min(1500, baseDelay + jitter + rtt); // Cap total at 1500ms
+      }
+      function sleep(ms) {
+        return new Promise((resolve) => setTimeout(resolve, ms));
+      }
+      function createChunkErrorContext(error, route, userVisible = true) {
+        if (
+          !(0, _ischunkloaderror.isChunkLoadError)(error) &&
+          !(0, _ischunkloaderror.isNetworkError)(error)
+        ) {
+          return null;
+        }
+        return {
+          route,
+          userVisible,
+          message: error.message,
+          chunkUrl: extractChunkUrl(error),
+        };
+      }
+      function handleChunkFailure(ctx) {
+        // Always increment fail count first
+        bumpFailCount(ctx);
+        // Check if we should try a silent retry
+        if (shouldSilentRetry(ctx)) {
+          markRetried(ctx);
+          return "retry";
+        }
+        // Show banner to the user
+        return "banner";
+      }
+      async function retryChunkImport(ctx, importFn) {
+        const action = handleChunkFailure(ctx);
+        if (action === "retry") {
+          const delay = getRetryDelayMs();
+          await sleep(delay);
+          return importFn();
+        }
+        // If we shouldn't retry, re-throw to trigger error boundary
+        throw Object.defineProperty(
+          new Error("Chunk load failed after retry attempts"),
+          "__NEXT_ERROR_CODE",
+          {
+            value: "E976",
+            enumerable: false,
+            configurable: true,
+          }
+        );
+      }
+      if (
+        (typeof exports.default === "function" ||
+          (typeof exports.default === "object" && exports.default !== null)) &&
+        typeof exports.default.__esModule === "undefined"
+      ) {
+        Object.defineProperty(exports.default, "__esModule", {
+          value: true,
+        });
+        Object.assign(exports.default, exports);
+        module.exports = exports.default;
+      } //# sourceMappingURL=chunk-load-error-handler.js.map
+
+      /***/
+    },
+
+    /***/ 9462: /***/ (module, exports) => {
+      "use strict";
+      /**
+       * Utilities for detecting chunk load errors and network failures.
+       *
+       * ChunkLoadError can come from:
+       * - Turbopack: error.name === 'ChunkLoadError'
+       * - Webpack: error.name === 'ChunkLoadError'
+       *
+       * We intentionally keep detection narrow to avoid false positives:
+       * - Server 4xx/5xx responses don't throw (they return Response objects)
+       * - We should NOT retry CORS errors, AbortErrors, or parsing failures
+       */ /**
+       * Detects if an error is a ChunkLoadError from Turbopack or webpack.
+       * This is the most reliable check - both bundlers explicitly set this error name.
+       */
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      0 && 0;
+      function _export(target, all) {
+        for (var name in all)
+          Object.defineProperty(target, name, {
+            enumerable: true,
+            get: all[name],
+          });
+      }
+      _export(exports, {
+        isChunkLoadError: function () {
+          return isChunkLoadError;
+        },
+        isChunkOrNetworkError: function () {
+          return isChunkOrNetworkError;
+        },
+        isNetworkError: function () {
+          return isNetworkError;
+        },
+      });
+      function isChunkLoadError(error) {
+        if (!error || typeof error !== "object") return false;
+        return error.name === "ChunkLoadError";
+      }
+      function isNetworkError(error) {
+        if (!error || typeof error !== "object") return false;
+        const err = error;
+        // Never retry intentional aborts
+        if (err.name === "AbortError") return false;
+        // TypeError with specific fetch failure messages
+        // These occur when the network request itself fails (not CORS, not server error)
+        if (err.name === "TypeError") {
+          const message = err.message || "";
+          // Browser-specific network failure messages
+          // Chrome/Edge: "Failed to fetch"
+          // Firefox: "NetworkError when attempting to fetch resource"
+          // Safari: "Load failed" or "The Internet connection appears to be offline"
+          if (
+            message === "Failed to fetch" ||
+            message.startsWith("NetworkError when attempting to fetch") ||
+            message === "Load failed" ||
+            message.includes("Internet connection appears to be offline") ||
+            message.includes("network connection was lost")
+          ) {
+            return true;
+          }
+        }
+        return false;
+      }
+      function isChunkOrNetworkError(error) {
+        return isChunkLoadError(error) || isNetworkError(error);
+      }
+      if (
+        (typeof exports.default === "function" ||
+          (typeof exports.default === "object" && exports.default !== null)) &&
+        typeof exports.default.__esModule === "undefined"
+      ) {
+        Object.defineProperty(exports.default, "__esModule", {
+          value: true,
+        });
+        Object.assign(exports.default, exports);
+        module.exports = exports.default;
+      } //# sourceMappingURL=is-chunk-load-error.js.map
+
+      /***/
+    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(3458)
+      __webpack_exec__(2604)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for edge-ssr-HASH.js
@@ -1,7 +1,24 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [676],
   {
-    /***/ 1564: /***/ (
+    /***/ 7046: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/edge-ssr",
+        function () {
+          return __webpack_require__(7142);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
+
+    /***/ 7142: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -20,30 +37,13 @@
 
       /***/
     },
-
-    /***/ 4300: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/edge-ssr",
-        function () {
-          return __webpack_require__(1564);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(4300)
+      __webpack_exec__(7046)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for head-HASH.js
@@ -1,34 +1,17 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [5350],
   {
-    /***/ 1548: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/head",
-        function () {
-          return __webpack_require__(4282);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
-
-    /***/ 3952: /***/ (
+    /***/ 3770: /***/ (
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
-      module.exports = __webpack_require__(1653);
+      module.exports = __webpack_require__(9025);
 
       /***/
     },
 
-    /***/ 4282: /***/ (
+    /***/ 6236: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -43,7 +26,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(3108);
       /* harmony import */ var next_head__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(3952);
+        __webpack_require__(3770);
       /* harmony import */ var next_head__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_head__WEBPACK_IMPORTED_MODULE_1__
@@ -76,13 +59,30 @@
 
       /***/
     },
+
+    /***/ 6510: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/head",
+        function () {
+          return __webpack_require__(6236);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(1548)
+      __webpack_exec__(6510)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for index-HASH.js
@@ -1,24 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [3332],
   {
-    /***/ 6376: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/",
-        function () {
-          return __webpack_require__(8460);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
-
-    /***/ 8460: /***/ (
+    /***/ 830: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -36,13 +19,30 @@
 
       /***/
     },
+
+    /***/ 1938: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/",
+        function () {
+          return __webpack_require__(830);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(6376)
+      __webpack_exec__(1938)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for link-HASH.js
@@ -1,7 +1,220 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [4672],
   {
-    /***/ 857: /***/ (module, exports, __webpack_require__) => {
+    /***/ 2774: /***/ (module, exports, __webpack_require__) => {
+      "use strict";
+
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      Object.defineProperty(exports, "useIntersection", {
+        enumerable: true,
+        get: function () {
+          return useIntersection;
+        },
+      });
+      const _react = __webpack_require__(4312);
+      const _requestidlecallback = __webpack_require__(9413);
+      const hasIntersectionObserver =
+        typeof IntersectionObserver === "function";
+      const observers = new Map();
+      const idList = [];
+      function createObserver(options) {
+        const id = {
+          root: options.root || null,
+          margin: options.rootMargin || "",
+        };
+        const existing = idList.find(
+          (obj) => obj.root === id.root && obj.margin === id.margin
+        );
+        let instance;
+        if (existing) {
+          instance = observers.get(existing);
+          if (instance) {
+            return instance;
+          }
+        }
+        const elements = new Map();
+        const observer = new IntersectionObserver((entries) => {
+          entries.forEach((entry) => {
+            const callback = elements.get(entry.target);
+            const isVisible =
+              entry.isIntersecting || entry.intersectionRatio > 0;
+            if (callback && isVisible) {
+              callback(isVisible);
+            }
+          });
+        }, options);
+        instance = {
+          id,
+          observer,
+          elements,
+        };
+        idList.push(id);
+        observers.set(id, instance);
+        return instance;
+      }
+      function observe(element, callback, options) {
+        const { id, observer, elements } = createObserver(options);
+        elements.set(element, callback);
+        observer.observe(element);
+        return function unobserve() {
+          elements.delete(element);
+          observer.unobserve(element);
+          // Destroy observer when there's nothing left to watch:
+          if (elements.size === 0) {
+            observer.disconnect();
+            observers.delete(id);
+            const index = idList.findIndex(
+              (obj) => obj.root === id.root && obj.margin === id.margin
+            );
+            if (index > -1) {
+              idList.splice(index, 1);
+            }
+          }
+        };
+      }
+      function useIntersection({ rootRef, rootMargin, disabled }) {
+        const isDisabled = disabled || !hasIntersectionObserver;
+        const [visible, setVisible] = (0, _react.useState)(false);
+        const elementRef = (0, _react.useRef)(null);
+        const setElement = (0, _react.useCallback)((element) => {
+          elementRef.current = element;
+        }, []);
+        (0, _react.useEffect)(() => {
+          if (hasIntersectionObserver) {
+            if (isDisabled || visible) return;
+            const element = elementRef.current;
+            if (element && element.tagName) {
+              const unobserve = observe(
+                element,
+                (isVisible) => isVisible && setVisible(isVisible),
+                {
+                  root: rootRef?.current,
+                  rootMargin,
+                }
+              );
+              return unobserve;
+            }
+          } else {
+            if (!visible) {
+              const idleCallback = (0,
+              _requestidlecallback.requestIdleCallback)(() => setVisible(true));
+              return () =>
+                (0, _requestidlecallback.cancelIdleCallback)(idleCallback);
+            }
+          }
+          // eslint-disable-next-line react-hooks/exhaustive-deps
+        }, [isDisabled, rootMargin, rootRef, visible, elementRef.current]);
+        const resetVisible = (0, _react.useCallback)(() => {
+          setVisible(false);
+        }, []);
+        return [setElement, visible, resetVisible];
+      }
+      if (
+        (typeof exports.default === "function" ||
+          (typeof exports.default === "object" && exports.default !== null)) &&
+        typeof exports.default.__esModule === "undefined"
+      ) {
+        Object.defineProperty(exports.default, "__esModule", {
+          value: true,
+        });
+        Object.assign(exports.default, exports);
+        module.exports = exports.default;
+      } //# sourceMappingURL=use-intersection.js.map
+
+      /***/
+    },
+
+    /***/ 3351: /***/ (module, exports, __webpack_require__) => {
+      "use strict";
+
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      Object.defineProperty(exports, "useMergedRef", {
+        enumerable: true,
+        get: function () {
+          return useMergedRef;
+        },
+      });
+      const _react = __webpack_require__(4312);
+      function useMergedRef(refA, refB) {
+        const cleanupA = (0, _react.useRef)(null);
+        const cleanupB = (0, _react.useRef)(null);
+        // NOTE: In theory, we could skip the wrapping if only one of the refs is non-null.
+        // (this happens often if the user doesn't pass a ref to Link/Form/Image)
+        // But this can cause us to leak a cleanup-ref into user code (previously via `<Link legacyBehavior>`),
+        // and the user might pass that ref into ref-merging library that doesn't support cleanup refs
+        // (because it hasn't been updated for React 19)
+        // which can then cause things to blow up, because a cleanup-returning ref gets called with `null`.
+        // So in practice, it's safer to be defensive and always wrap the ref, even on React 19.
+        return (0, _react.useCallback)(
+          (current) => {
+            if (current === null) {
+              const cleanupFnA = cleanupA.current;
+              if (cleanupFnA) {
+                cleanupA.current = null;
+                cleanupFnA();
+              }
+              const cleanupFnB = cleanupB.current;
+              if (cleanupFnB) {
+                cleanupB.current = null;
+                cleanupFnB();
+              }
+            } else {
+              if (refA) {
+                cleanupA.current = applyRef(refA, current);
+              }
+              if (refB) {
+                cleanupB.current = applyRef(refB, current);
+              }
+            }
+          },
+          [refA, refB]
+        );
+      }
+      function applyRef(refA, current) {
+        if (typeof refA === "function") {
+          const cleanup = refA(current);
+          if (typeof cleanup === "function") {
+            return cleanup;
+          } else {
+            return () => refA(null);
+          }
+        } else {
+          refA.current = current;
+          return () => {
+            refA.current = null;
+          };
+        }
+      }
+      if (
+        (typeof exports.default === "function" ||
+          (typeof exports.default === "object" && exports.default !== null)) &&
+        typeof exports.default.__esModule === "undefined"
+      ) {
+        Object.defineProperty(exports.default, "__esModule", {
+          value: true,
+        });
+        Object.assign(exports.default, exports);
+        module.exports = exports.default;
+      } //# sourceMappingURL=use-merged-ref.js.map
+
+      /***/
+    },
+
+    /***/ 3440: /***/ (
+      module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      module.exports = __webpack_require__(4757);
+
+      /***/
+    },
+
+    /***/ 4757: /***/ (module, exports, __webpack_require__) => {
       "use strict";
       /* __next_internal_client_entry_do_not_use__  cjs */
       Object.defineProperty(exports, "__esModule", {
@@ -23,22 +236,22 @@
           return useLinkStatus;
         },
       });
-      const _interop_require_wildcard = __webpack_require__(8781);
+      const _interop_require_wildcard = __webpack_require__(1162);
       const _jsxruntime = __webpack_require__(3108);
       const _react = /*#__PURE__*/ _interop_require_wildcard._(
         __webpack_require__(4312)
       );
-      const _resolvehref = __webpack_require__(4055);
-      const _islocalurl = __webpack_require__(7175);
-      const _formaturl = __webpack_require__(9674);
-      const _utils = __webpack_require__(7424);
-      const _addlocale = __webpack_require__(589);
-      const _routercontextsharedruntime = __webpack_require__(7010);
-      const _useintersection = __webpack_require__(2330);
-      const _getdomainlocale = __webpack_require__(7207);
-      const _addbasepath = __webpack_require__(9942);
-      const _usemergedref = __webpack_require__(8067);
-      const _erroronce = __webpack_require__(1945);
+      const _resolvehref = __webpack_require__(4691);
+      const _islocalurl = __webpack_require__(4763);
+      const _formaturl = __webpack_require__(3246);
+      const _utils = __webpack_require__(7372);
+      const _addlocale = __webpack_require__(1809);
+      const _routercontextsharedruntime = __webpack_require__(2254);
+      const _useintersection = __webpack_require__(2774);
+      const _getdomainlocale = __webpack_require__(8803);
+      const _addbasepath = __webpack_require__(5834);
+      const _usemergedref = __webpack_require__(3351);
+      const _erroronce = __webpack_require__(6021);
       const prefetched = new Set();
       function prefetch(router, href, as, options) {
         if (false) {
@@ -417,168 +630,43 @@
       /***/
     },
 
-    /***/ 1945: /***/ (__unused_webpack_module, exports) => {
-      "use strict";
-
-      Object.defineProperty(exports, "__esModule", {
-        value: true,
-      });
-      Object.defineProperty(exports, "errorOnce", {
-        enumerable: true,
-        get: function () {
-          return errorOnce;
+    /***/ 5326: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/link",
+        function () {
+          return __webpack_require__(9058);
         },
-      });
-      let errorOnce = (_) => {};
+      ]);
       if (false) {
-      } //# sourceMappingURL=error-once.js.map
+      }
 
       /***/
     },
 
-    /***/ 2330: /***/ (module, exports, __webpack_require__) => {
+    /***/ 6021: /***/ (__unused_webpack_module, exports) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
         value: true,
       });
-      Object.defineProperty(exports, "useIntersection", {
+      Object.defineProperty(exports, "errorOnce", {
         enumerable: true,
         get: function () {
-          return useIntersection;
+          return errorOnce;
         },
       });
-      const _react = __webpack_require__(4312);
-      const _requestidlecallback = __webpack_require__(601);
-      const hasIntersectionObserver =
-        typeof IntersectionObserver === "function";
-      const observers = new Map();
-      const idList = [];
-      function createObserver(options) {
-        const id = {
-          root: options.root || null,
-          margin: options.rootMargin || "",
-        };
-        const existing = idList.find(
-          (obj) => obj.root === id.root && obj.margin === id.margin
-        );
-        let instance;
-        if (existing) {
-          instance = observers.get(existing);
-          if (instance) {
-            return instance;
-          }
-        }
-        const elements = new Map();
-        const observer = new IntersectionObserver((entries) => {
-          entries.forEach((entry) => {
-            const callback = elements.get(entry.target);
-            const isVisible =
-              entry.isIntersecting || entry.intersectionRatio > 0;
-            if (callback && isVisible) {
-              callback(isVisible);
-            }
-          });
-        }, options);
-        instance = {
-          id,
-          observer,
-          elements,
-        };
-        idList.push(id);
-        observers.set(id, instance);
-        return instance;
-      }
-      function observe(element, callback, options) {
-        const { id, observer, elements } = createObserver(options);
-        elements.set(element, callback);
-        observer.observe(element);
-        return function unobserve() {
-          elements.delete(element);
-          observer.unobserve(element);
-          // Destroy observer when there's nothing left to watch:
-          if (elements.size === 0) {
-            observer.disconnect();
-            observers.delete(id);
-            const index = idList.findIndex(
-              (obj) => obj.root === id.root && obj.margin === id.margin
-            );
-            if (index > -1) {
-              idList.splice(index, 1);
-            }
-          }
-        };
-      }
-      function useIntersection({ rootRef, rootMargin, disabled }) {
-        const isDisabled = disabled || !hasIntersectionObserver;
-        const [visible, setVisible] = (0, _react.useState)(false);
-        const elementRef = (0, _react.useRef)(null);
-        const setElement = (0, _react.useCallback)((element) => {
-          elementRef.current = element;
-        }, []);
-        (0, _react.useEffect)(() => {
-          if (hasIntersectionObserver) {
-            if (isDisabled || visible) return;
-            const element = elementRef.current;
-            if (element && element.tagName) {
-              const unobserve = observe(
-                element,
-                (isVisible) => isVisible && setVisible(isVisible),
-                {
-                  root: rootRef?.current,
-                  rootMargin,
-                }
-              );
-              return unobserve;
-            }
-          } else {
-            if (!visible) {
-              const idleCallback = (0,
-              _requestidlecallback.requestIdleCallback)(() => setVisible(true));
-              return () =>
-                (0, _requestidlecallback.cancelIdleCallback)(idleCallback);
-            }
-          }
-          // eslint-disable-next-line react-hooks/exhaustive-deps
-        }, [isDisabled, rootMargin, rootRef, visible, elementRef.current]);
-        const resetVisible = (0, _react.useCallback)(() => {
-          setVisible(false);
-        }, []);
-        return [setElement, visible, resetVisible];
-      }
-      if (
-        (typeof exports.default === "function" ||
-          (typeof exports.default === "object" && exports.default !== null)) &&
-        typeof exports.default.__esModule === "undefined"
-      ) {
-        Object.defineProperty(exports.default, "__esModule", {
-          value: true,
-        });
-        Object.assign(exports.default, exports);
-        module.exports = exports.default;
-      } //# sourceMappingURL=use-intersection.js.map
-
-      /***/
-    },
-
-    /***/ 4972: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/link",
-        function () {
-          return __webpack_require__(7600);
-        },
-      ]);
+      let errorOnce = (_) => {};
       if (false) {
-      }
+      } //# sourceMappingURL=error-once.js.map
 
       /***/
     },
 
-    /***/ 7207: /***/ (module, exports, __webpack_require__) => {
+    /***/ 8803: /***/ (module, exports, __webpack_require__) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -590,7 +678,7 @@
           return getDomainLocale;
         },
       });
-      const _normalizetrailingslash = __webpack_require__(151);
+      const _normalizetrailingslash = __webpack_require__(1315);
       const basePath =
         /* unused pure expression or super */ null && (false || "");
       function getDomainLocale(path, locale, locales, domainLocales) {
@@ -614,7 +702,7 @@
       /***/
     },
 
-    /***/ 7600: /***/ (
+    /***/ 9058: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -629,7 +717,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(3108);
       /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(7830);
+        __webpack_require__(3440);
       /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_link__WEBPACK_IMPORTED_MODULE_1__
@@ -659,101 +747,13 @@
 
       /***/
     },
-
-    /***/ 7830: /***/ (
-      module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      module.exports = __webpack_require__(857);
-
-      /***/
-    },
-
-    /***/ 8067: /***/ (module, exports, __webpack_require__) => {
-      "use strict";
-
-      Object.defineProperty(exports, "__esModule", {
-        value: true,
-      });
-      Object.defineProperty(exports, "useMergedRef", {
-        enumerable: true,
-        get: function () {
-          return useMergedRef;
-        },
-      });
-      const _react = __webpack_require__(4312);
-      function useMergedRef(refA, refB) {
-        const cleanupA = (0, _react.useRef)(null);
-        const cleanupB = (0, _react.useRef)(null);
-        // NOTE: In theory, we could skip the wrapping if only one of the refs is non-null.
-        // (this happens often if the user doesn't pass a ref to Link/Form/Image)
-        // But this can cause us to leak a cleanup-ref into user code (previously via `<Link legacyBehavior>`),
-        // and the user might pass that ref into ref-merging library that doesn't support cleanup refs
-        // (because it hasn't been updated for React 19)
-        // which can then cause things to blow up, because a cleanup-returning ref gets called with `null`.
-        // So in practice, it's safer to be defensive and always wrap the ref, even on React 19.
-        return (0, _react.useCallback)(
-          (current) => {
-            if (current === null) {
-              const cleanupFnA = cleanupA.current;
-              if (cleanupFnA) {
-                cleanupA.current = null;
-                cleanupFnA();
-              }
-              const cleanupFnB = cleanupB.current;
-              if (cleanupFnB) {
-                cleanupB.current = null;
-                cleanupFnB();
-              }
-            } else {
-              if (refA) {
-                cleanupA.current = applyRef(refA, current);
-              }
-              if (refB) {
-                cleanupB.current = applyRef(refB, current);
-              }
-            }
-          },
-          [refA, refB]
-        );
-      }
-      function applyRef(refA, current) {
-        if (typeof refA === "function") {
-          const cleanup = refA(current);
-          if (typeof cleanup === "function") {
-            return cleanup;
-          } else {
-            return () => refA(null);
-          }
-        } else {
-          refA.current = current;
-          return () => {
-            refA.current = null;
-          };
-        }
-      }
-      if (
-        (typeof exports.default === "function" ||
-          (typeof exports.default === "object" && exports.default !== null)) &&
-        typeof exports.default.__esModule === "undefined"
-      ) {
-        Object.defineProperty(exports.default, "__esModule", {
-          value: true,
-        });
-        Object.assign(exports.default, exports);
-        module.exports = exports.default;
-      } //# sourceMappingURL=use-merged-ref.js.map
-
-      /***/
-    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(4972)
+      __webpack_exec__(5326)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for routerDirect-HASH.js
@@ -1,17 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [188],
   {
-    /***/ 1179: /***/ (
-      module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      module.exports = __webpack_require__(9864);
-
-      /***/
-    },
-
-    /***/ 1640: /***/ (
+    /***/ 2014: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -26,7 +16,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(3108);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(1179);
+        __webpack_require__(4169);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_router__WEBPACK_IMPORTED_MODULE_1__
@@ -46,7 +36,17 @@
       /***/
     },
 
-    /***/ 2172: /***/ (
+    /***/ 4169: /***/ (
+      module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      module.exports = __webpack_require__(9700);
+
+      /***/
+    },
+
+    /***/ 4414: /***/ (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -54,7 +54,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/routerDirect",
         function () {
-          return __webpack_require__(1640);
+          return __webpack_require__(2014);
         },
       ]);
       if (false) {
@@ -68,7 +68,7 @@
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(2172)
+      __webpack_exec__(4414)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for script-HASH.js
@@ -1,17 +1,34 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [1209],
   {
-    /***/ 4977: /***/ (
+    /***/ 2591: /***/ (
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
-      module.exports = __webpack_require__(326);
+      module.exports = __webpack_require__(4634);
 
       /***/
     },
 
-    /***/ 5887: /***/ (
+    /***/ 5030: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/script",
+        function () {
+          return __webpack_require__(7557);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
+
+    /***/ 7557: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -26,7 +43,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(3108);
       /* harmony import */ var next_script__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(4977);
+        __webpack_require__(2591);
       /* harmony import */ var next_script__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_script__WEBPACK_IMPORTED_MODULE_1__
@@ -58,30 +75,13 @@
 
       /***/
     },
-
-    /***/ 6268: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/script",
-        function () {
-          return __webpack_require__(5887);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(6268)
+      __webpack_exec__(5030)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for withRouter-HASH.js
@@ -1,34 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [3263],
   {
-    /***/ 1179: /***/ (
-      module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      module.exports = __webpack_require__(9864);
-
-      /***/
-    },
-
-    /***/ 2028: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/withRouter",
-        function () {
-          return __webpack_require__(4501);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
-
-    /***/ 4501: /***/ (
+    /***/ 559: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -43,7 +16,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(3108);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(1179);
+        __webpack_require__(4169);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_router__WEBPACK_IMPORTED_MODULE_1__
@@ -61,13 +34,40 @@
 
       /***/
     },
+
+    /***/ 726: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/withRouter",
+        function () {
+          return __webpack_require__(559);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
+
+    /***/ 4169: /***/ (
+      module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      module.exports = __webpack_require__(9700);
+
+      /***/
+    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(2028)
+      __webpack_exec__(726)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for 2161-HASH.js

Diff too large to display

Diff for 2747-HASH.js

Diff too large to display

Diff for 4322-HASH.js
failed to diff
Diff for main-HASH.js

Diff too large to display

Diff for webpack-HASH.js
@@ -205,7 +205,7 @@
     /******/ __webpack_require__.u = (chunkId) => {
       /******/ // return url for filenames based on template
       /******/ return (
-        "static/chunks/" + chunkId + "." + "9c9ddbde79ea2f29" + ".js"
+        "static/chunks/" + chunkId + "." + "871ca3fb4b1caa0e" + ".js"
       );
       /******/
     };
@@ -380,6 +380,23 @@
       /******/
     };
     /******/
+    /******/ // Next.js chunk cache clearing for retry logic
+    /******/ if (typeof globalThis !== "undefined") {
+      /******/ globalThis.__next_clear_chunk_cache__ = function (chunkId) {
+        /******/ // Only clear if not already loaded (0 means loaded)
+        /******/ if (
+          installedChunks[chunkId] !== 0 &&
+          installedChunks[chunkId] !== undefined
+        ) {
+          /******/ delete installedChunks[chunkId];
+          /******/
+        }
+        /******/
+      };
+      /******/
+    }
+    /******/
+    /******/
     /******/ __webpack_require__.f.j = (chunkId, promises) => {
       /******/ // JSONP chunk loading for javascript
       /******/ var installedChunkData = __webpack_require__.o(
Diff for app-page-exp..ntime.dev.js

Diff too large to display

Diff for app-page-exp..time.prod.js
failed to diff
Diff for app-page-tur..ntime.dev.js

Diff too large to display

Diff for app-page-tur..time.prod.js
failed to diff
Diff for app-page-tur..ntime.dev.js

Diff too large to display

Diff for app-page-tur..time.prod.js

Diff too large to display

Diff for app-page.runtime.dev.js

Diff too large to display

Diff for app-page.runtime.prod.js

Diff too large to display

Diff for pages-turbo...ntime.dev.js

Diff too large to display

Diff for pages-turbo...time.prod.js

Diff too large to display

Diff for pages.runtime.dev.js

Diff too large to display

Diff for pages.runtime.prod.js

Diff too large to display

Commit: 382a356

@nextjs-bot
Copy link
Collaborator

nextjs-bot commented Jan 2, 2026

Stats from current PR

Default Build (Increase detected ⚠️)
General Overall increase ⚠️
vercel/next.js canary vercel/next.js chunk-load-error-retry Change
buildDuration 17.4s 15.1s N/A
buildDurationCached 13.9s 11s N/A
nodeModulesSize 457 MB 458 MB ⚠️ +960 kB
nextStartRea..uration (ms) 713ms 717ms N/A
Client Bundles (main, webpack) Overall increase ⚠️
vercel/next.js canary vercel/next.js chunk-load-error-retry Change
2086.HASH.js gzip 169 B 169 B
2161-HASH.js gzip 5.39 kB 5.41 kB N/A
2747-HASH.js gzip 4.48 kB 4.46 kB N/A
4322-HASH.js gzip 51.2 kB 54.7 kB ⚠️ +3.53 kB
ec793fe8-HASH.js gzip 62.3 kB 62.3 kB N/A
framework-HASH.js gzip 59.8 kB 59.8 kB N/A
main-app-HASH.js gzip 252 B 253 B N/A
main-HASH.js gzip 38.4 kB 38.7 kB ⚠️ +369 B
webpack-HASH.js gzip 1.68 kB 1.73 kB N/A
Overall change 89.8 kB 93.7 kB ⚠️ +3.9 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary vercel/next.js chunk-load-error-retry Change
polyfills-HASH.js gzip 39.4 kB 39.4 kB
Overall change 39.4 kB 39.4 kB
Client Pages Overall increase ⚠️
vercel/next.js canary vercel/next.js chunk-load-error-retry Change
_app-HASH.js gzip 194 B 193 B N/A
_error-HASH.js gzip 182 B 182 B
css-HASH.js gzip 336 B 335 B N/A
dynamic-HASH.js gzip 1.8 kB 4.18 kB ⚠️ +2.38 kB
edge-ssr-HASH.js gzip 256 B 256 B
head-HASH.js gzip 352 B 349 B N/A
hooks-HASH.js gzip 385 B 384 B N/A
image-HASH.js gzip 580 B 580 B
index-HASH.js gzip 259 B 258 B N/A
link-HASH.js gzip 2.5 kB 2.51 kB N/A
routerDirect..HASH.js gzip 319 B 317 B N/A
script-HASH.js gzip 385 B 387 B N/A
withRouter-HASH.js gzip 316 B 315 B N/A
1afbb74e6ecf..834.css gzip 106 B 106 B
Overall change 2.92 kB 5.3 kB ⚠️ +2.38 kB
Client Build Manifests
vercel/next.js canary vercel/next.js chunk-load-error-retry Change
_buildManifest.js gzip 738 B 738 B
Overall change 738 B 738 B
Rendered Page Sizes
vercel/next.js canary vercel/next.js chunk-load-error-retry Change
index.html gzip 523 B 524 B N/A
link.html gzip 538 B 538 B
withRouter.html gzip 520 B 520 B
Overall change 1.06 kB 1.06 kB
Edge SSR bundle Size Overall increase ⚠️
vercel/next.js canary vercel/next.js chunk-load-error-retry Change
edge-ssr.js gzip 124 kB 124 kB N/A
page.js gzip 237 kB 241 kB ⚠️ +3.48 kB
Overall change 237 kB 241 kB ⚠️ +3.48 kB
Middleware size
vercel/next.js canary vercel/next.js chunk-load-error-retry Change
middleware-b..fest.js gzip 654 B 655 B N/A
middleware-r..fest.js gzip 155 B 156 B N/A
middleware.js gzip 32.8 kB 32.9 kB N/A
edge-runtime..pack.js gzip 846 B 846 B
Overall change 846 B 846 B
Next Runtimes Overall increase ⚠️
vercel/next.js canary vercel/next.js chunk-load-error-retry Change
app-page-exp...dev.js gzip 301 kB 305 kB ⚠️ +3.44 kB
app-page-exp..prod.js gzip 156 kB 158 kB ⚠️ +2.11 kB
app-page-tur...dev.js gzip 301 kB 305 kB ⚠️ +3.44 kB
app-page-tur..prod.js gzip 156 kB 158 kB ⚠️ +2.11 kB
app-page-tur...dev.js gzip 298 kB 301 kB ⚠️ +3.51 kB
app-page-tur..prod.js gzip 154 kB 156 kB ⚠️ +2.07 kB
app-page.run...dev.js gzip 298 kB 301 kB ⚠️ +3.52 kB
app-page.run..prod.js gzip 154 kB 156 kB ⚠️ +2.07 kB
app-route-ex...dev.js gzip 68.7 kB 68.7 kB
app-route-ex..prod.js gzip 47.5 kB 47.5 kB
app-route-tu...dev.js gzip 68.7 kB 68.7 kB
app-route-tu..prod.js gzip 47.5 kB 47.5 kB
app-route-tu...dev.js gzip 68.3 kB 68.3 kB
app-route-tu..prod.js gzip 47.3 kB 47.3 kB
app-route.ru...dev.js gzip 68.3 kB 68.3 kB
app-route.ru..prod.js gzip 47.3 kB 47.3 kB
dist_client_...dev.js gzip 324 B 324 B
dist_client_...dev.js gzip 326 B 326 B
dist_client_...dev.js gzip 318 B 318 B
dist_client_...dev.js gzip 317 B 317 B
pages-api-tu...dev.js gzip 41.1 kB 41.1 kB
pages-api-tu..prod.js gzip 31.2 kB 31.2 kB
pages-api.ru...dev.js gzip 41 kB 41 kB
pages-api.ru..prod.js gzip 31.2 kB 31.2 kB
pages-turbo....dev.js gzip 50.7 kB 50.7 kB N/A
pages-turbo...prod.js gzip 38.2 kB 38.2 kB N/A
pages.runtim...dev.js gzip 50.6 kB 50.7 kB N/A
pages.runtim..prod.js gzip 38.1 kB 38.1 kB N/A
server.runti..prod.js gzip 59.9 kB 59.9 kB
Overall change 2.49 MB 2.51 MB ⚠️ +22.3 kB
build cache Overall increase ⚠️
vercel/next.js canary vercel/next.js chunk-load-error-retry Change
0.pack gzip 3.61 MB 3.66 MB ⚠️ +51.7 kB
index.pack gzip 97.5 kB 100 kB ⚠️ +2.52 kB
Overall change 3.7 MB 3.76 MB ⚠️ +54.2 kB
Diff details
Diff for page.js

Diff too large to display

Diff for middleware.js

Diff too large to display

Diff for edge-ssr.js

Diff too large to display

Diff for _buildManifest.js
@@ -611,35 +611,35 @@ self.__BUILD_MANIFEST = (function (a, b, c) {
       numHashes: NaN,
       bitArray: [],
     },
-    "/": ["static\u002Fchunks\u002Fpages\u002Findex-dda7d8b64d4ba15c.js"],
+    "/": ["static\u002Fchunks\u002Fpages\u002Findex-d95f7ec6af4d2644.js"],
     "/_error": [
-      "static\u002Fchunks\u002Fpages\u002F_error-6ef44d3954f25711.js",
+      "static\u002Fchunks\u002Fpages\u002F_error-209c0c82205a7c9f.js",
     ],
     "/css": [
       "static\u002Fcss\u002Fded6b86ab9cc0a1f.css",
-      "static\u002Fchunks\u002Fpages\u002Fcss-c8aaa7211416a045.js",
+      "static\u002Fchunks\u002Fpages\u002Fcss-62710339bc830ded.js",
     ],
     "/dynamic": [
-      "static\u002Fchunks\u002Fpages\u002Fdynamic-d53bb7f318f342c2.js",
+      "static\u002Fchunks\u002Fpages\u002Fdynamic-8a03f5fe64080e08.js",
     ],
     "/edge-ssr": [
-      "static\u002Fchunks\u002Fpages\u002Fedge-ssr-1383106d4a3e7d72.js",
+      "static\u002Fchunks\u002Fpages\u002Fedge-ssr-0db9f7bb610d3072.js",
     ],
-    "/head": ["static\u002Fchunks\u002Fpages\u002Fhead-1db1c4be1a45662f.js"],
-    "/hooks": ["static\u002Fchunks\u002Fpages\u002Fhooks-e6deee5b72a5b112.js"],
+    "/head": ["static\u002Fchunks\u002Fpages\u002Fhead-747416c4075e42aa.js"],
+    "/hooks": ["static\u002Fchunks\u002Fpages\u002Fhooks-8b10205be7505244.js"],
     "/image": [
-      "static\u002Fchunks\u002F2747-90c828280005c0c3.js",
-      "static\u002Fchunks\u002Fpages\u002Fimage-868472cd5e84efc9.js",
+      "static\u002Fchunks\u002F6349-ee9aecde860d4832.js",
+      "static\u002Fchunks\u002Fpages\u002Fimage-f90ae17c3ad1d38b.js",
     ],
-    "/link": ["static\u002Fchunks\u002Fpages\u002Flink-0ec374e48b2ce5d9.js"],
+    "/link": ["static\u002Fchunks\u002Fpages\u002Flink-6ab9a67b348df1bf.js"],
     "/routerDirect": [
-      "static\u002Fchunks\u002Fpages\u002FrouterDirect-1a34bfadbc088491.js",
+      "static\u002Fchunks\u002Fpages\u002FrouterDirect-f132fb471e65a8b9.js",
     ],
     "/script": [
-      "static\u002Fchunks\u002Fpages\u002Fscript-52320f59afbd096d.js",
+      "static\u002Fchunks\u002Fpages\u002Fscript-8e2028e44b8da2d9.js",
     ],
     "/withRouter": [
-      "static\u002Fchunks\u002Fpages\u002FwithRouter-3b1a16d3dfa21c16.js",
+      "static\u002Fchunks\u002Fpages\u002FwithRouter-a86d259faa012c1c.js",
     ],
     sortedPages: [
       "\u002F",
Diff for dynamic-HASH.js
@@ -1,17 +1,346 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [2291],
   {
-    /***/ 1231: /***/ (
-      module,
+    /***/ 434: /***/ (module, exports, __webpack_require__) => {
+      "use strict";
+      /* __next_internal_client_entry_do_not_use__  cjs */
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      Object.defineProperty(exports, "ChunkLoadErrorBanner", {
+        enumerable: true,
+        get: function () {
+          return ChunkLoadErrorBanner;
+        },
+      });
+      const _jsxruntime = __webpack_require__(3108);
+      const _react = __webpack_require__(4312);
+      // Copy constants (two lines, always)
+      const HEADLINE = "This page couldn't be fully loaded";
+      const DETAIL_DEFAULT = "A required file couldn't be loaded.";
+      const DETAIL_OFFLINE = "You're offline.";
+      // Fixed height for stable layout
+      const BANNER_HEIGHT = 70;
+      const styles = {
+        container: {
+          position: "fixed",
+          top: 0,
+          left: 0,
+          right: 0,
+          zIndex: 9999,
+          height: BANNER_HEIGHT,
+          padding: "0 20px",
+          backgroundColor: "#f5f5f5",
+          borderBottom: "1px solid #d4d4d4",
+          fontFamily:
+            'system-ui, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"',
+          display: "flex",
+          alignItems: "center",
+          justifyContent: "space-between",
+          gap: "16px",
+          boxSizing: "border-box",
+        },
+        spacer: {
+          height: BANNER_HEIGHT,
+          flexShrink: 0,
+        },
+        left: {
+          display: "flex",
+          alignItems: "center",
+          gap: "12px",
+          flex: 1,
+          minWidth: 0,
+        },
+        icon: {
+          flexShrink: 0,
+          width: "20px",
+          height: "20px",
+        },
+        content: {
+          display: "flex",
+          flexDirection: "column",
+          gap: "2px",
+          flex: 1,
+          minWidth: 0,
+        },
+        headline: {
+          fontSize: "14px",
+          fontWeight: 600,
+          color: "#171717",
+          margin: 0,
+          lineHeight: 1.4,
+        },
+        detail: {
+          fontSize: "13px",
+          fontWeight: 400,
+          color: "#525252",
+          margin: 0,
+          lineHeight: 1.4,
+        },
+        button: {
+          padding: "8px 16px",
+          fontSize: "13px",
+          fontWeight: 600,
+          borderRadius: "6px",
+          cursor: "pointer",
+          color: "#171717",
+          backgroundColor: "#fff",
+          border: "1px solid #a3a3a3",
+          lineHeight: 1,
+          flexShrink: 0,
+        },
+      };
+      // Neutral warning icon (circle with exclamation)
+      function WarningIcon() {
+        return /*#__PURE__*/ (0, _jsxruntime.jsxs)("svg", {
+          style: styles.icon,
+          viewBox: "0 0 20 20",
+          fill: "none",
+          xmlns: "http://www.w3.org/2000/svg",
+          "aria-hidden": "true",
+          children: [
+            /*#__PURE__*/ (0, _jsxruntime.jsx)("circle", {
+              cx: "10",
+              cy: "10",
+              r: "9",
+              stroke: "#737373",
+              strokeWidth: "1.5",
+            }),
+            /*#__PURE__*/ (0, _jsxruntime.jsx)("path", {
+              d: "M10 5.5V11",
+              stroke: "#737373",
+              strokeWidth: "1.5",
+              strokeLinecap: "round",
+            }),
+            /*#__PURE__*/ (0, _jsxruntime.jsx)("circle", {
+              cx: "10",
+              cy: "14",
+              r: "1",
+              fill: "#737373",
+            }),
+          ],
+        });
+      }
+      function ChunkLoadErrorBanner(_props) {
+        const [isOffline, setIsOffline] = (0, _react.useState)(
+          typeof navigator !== "undefined" ? !navigator.onLine : false
+        );
+        (0, _react.useEffect)(() => {
+          const handleOnline = () => setIsOffline(false);
+          const handleOffline = () => setIsOffline(true);
+          window.addEventListener("online", handleOnline);
+          window.addEventListener("offline", handleOffline);
+          return () => {
+            window.removeEventListener("online", handleOnline);
+            window.removeEventListener("offline", handleOffline);
+          };
+        }, []);
+        const handleReload = (0, _react.useCallback)(() => {
+          window.location.reload();
+        }, []);
+        const detail = isOffline ? DETAIL_OFFLINE : DETAIL_DEFAULT;
+        return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {
+          children: [
+            /*#__PURE__*/ (0, _jsxruntime.jsxs)("div", {
+              style: styles.container,
+              role: "alert",
+              "aria-live": "assertive",
+              children: [
+                /*#__PURE__*/ (0, _jsxruntime.jsxs)("div", {
+                  style: styles.left,
+                  children: [
+                    /*#__PURE__*/ (0, _jsxruntime.jsx)(WarningIcon, {}),
+                    /*#__PURE__*/ (0, _jsxruntime.jsxs)("div", {
+                      style: styles.content,
+                      children: [
+                        /*#__PURE__*/ (0, _jsxruntime.jsx)("p", {
+                          style: styles.headline,
+                          children: HEADLINE,
+                        }),
+                        /*#__PURE__*/ (0, _jsxruntime.jsx)("p", {
+                          style: styles.detail,
+                          children: detail,
+                        }),
+                      ],
+                    }),
+                  ],
+                }),
+                /*#__PURE__*/ (0, _jsxruntime.jsx)("button", {
+                  type: "button",
+                  style: styles.button,
+                  onClick: handleReload,
+                  children: "Reload page",
+                }),
+              ],
+            }),
+            /*#__PURE__*/ (0, _jsxruntime.jsx)("div", {
+              style: styles.spacer,
+            }),
+          ],
+        });
+      }
+      if (
+        (typeof exports.default === "function" ||
+          (typeof exports.default === "object" && exports.default !== null)) &&
+        typeof exports.default.__esModule === "undefined"
+      ) {
+        Object.defineProperty(exports.default, "__esModule", {
+          value: true,
+        });
+        Object.assign(exports.default, exports);
+        module.exports = exports.default;
+      } //# sourceMappingURL=chunk-load-error-banner.js.map
+
+      /***/
+    },
+
+    /***/ 1033: /***/ (module, exports) => {
+      "use strict";
+      // This gets assigned as a side-effect during app initialization. Because it
+      // represents the build used to create the JS bundle, it should never change
+      // after being set, so we store it in a global variable.
+      //
+      // When performing RSC requests, if the incoming data has a different build ID,
+      // we perform an MPA navigation/refresh to load the updated build and ensure
+      // that the client and server in sync.
+      // Starts as an empty string. In practice, because setAppBuildId is called
+      // during initialization before hydration starts, this will always get
+      // reassigned to the actual build ID before it's ever needed by a navigation.
+      // If for some reasons it didn't, due to a bug or race condition, then on
+      // navigation the build comparision would fail and trigger an MPA navigation.
+
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      0 && 0;
+      function _export(target, all) {
+        for (var name in all)
+          Object.defineProperty(target, name, {
+            enumerable: true,
+            get: all[name],
+          });
+      }
+      _export(exports, {
+        getAppBuildId: function () {
+          return getAppBuildId;
+        },
+        setAppBuildId: function () {
+          return setAppBuildId;
+        },
+      });
+      let globalBuildId = "";
+      function setAppBuildId(buildId) {
+        globalBuildId = buildId;
+      }
+      function getAppBuildId() {
+        return globalBuildId;
+      }
+      if (
+        (typeof exports.default === "function" ||
+          (typeof exports.default === "object" && exports.default !== null)) &&
+        typeof exports.default.__esModule === "undefined"
+      ) {
+        Object.defineProperty(exports.default, "__esModule", {
+          value: true,
+        });
+        Object.assign(exports.default, exports);
+        module.exports = exports.default;
+      } //# sourceMappingURL=app-build-id.js.map
+
+      /***/
+    },
+
+    /***/ 2604: /***/ (
+      __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
-      module.exports = __webpack_require__(4464);
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/dynamic",
+        function () {
+          return __webpack_require__(3643);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
+
+    /***/ 2758: /***/ (module, exports, __webpack_require__) => {
+      "use strict";
+
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      0 && 0;
+      function _export(target, all) {
+        for (var name in all)
+          Object.defineProperty(target, name, {
+            enumerable: true,
+            get: all[name],
+          });
+      }
+      _export(exports, {
+        ChunkLoadErrorBanner: function () {
+          return _chunkloaderrorbanner.ChunkLoadErrorBanner;
+        },
+        clearChunkCache: function () {
+          return _chunkloaderrorhandler.clearChunkCache;
+        },
+        clearFailureState: function () {
+          return _chunkloaderrorhandler.clearFailureState;
+        },
+        createChunkErrorContext: function () {
+          return _chunkloaderrorhandler.createChunkErrorContext;
+        },
+        getFailCount: function () {
+          return _chunkloaderrorhandler.getFailCount;
+        },
+        getRetryDelayMs: function () {
+          return _chunkloaderrorhandler.getRetryDelayMs;
+        },
+        handleChunkFailure: function () {
+          return _chunkloaderrorhandler.handleChunkFailure;
+        },
+        isChunkLoadError: function () {
+          return _ischunkloaderror.isChunkLoadError;
+        },
+        isChunkOrNetworkError: function () {
+          return _ischunkloaderror.isChunkOrNetworkError;
+        },
+        isNetworkError: function () {
+          return _ischunkloaderror.isNetworkError;
+        },
+        retryChunkImport: function () {
+          return _chunkloaderrorhandler.retryChunkImport;
+        },
+        shouldSilentRetry: function () {
+          return _chunkloaderrorhandler.shouldSilentRetry;
+        },
+        sleep: function () {
+          return _chunkloaderrorhandler.sleep;
+        },
+      });
+      const _ischunkloaderror = __webpack_require__(9462);
+      const _chunkloaderrorhandler = __webpack_require__(7676);
+      const _chunkloaderrorbanner = __webpack_require__(434);
+      if (
+        (typeof exports.default === "function" ||
+          (typeof exports.default === "object" && exports.default !== null)) &&
+        typeof exports.default.__esModule === "undefined"
+      ) {
+        Object.defineProperty(exports.default, "__esModule", {
+          value: true,
+        });
+        Object.assign(exports.default, exports);
+        module.exports = exports.default;
+      } //# sourceMappingURL=index.js.map
 
       /***/
     },
 
-    /***/ 2101: /***/ (
+    /***/ 3401: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -38,24 +367,63 @@
       /***/
     },
 
-    /***/ 3458: /***/ (
+    /***/ 3643: /***/ (
       __unused_webpack_module,
-      __unused_webpack_exports,
+      __webpack_exports__,
       __webpack_require__
     ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/dynamic",
-        function () {
-          return __webpack_require__(9381);
-        },
-      ]);
-      if (false) {
-      }
+      "use strict";
+      __webpack_require__.r(__webpack_exports__);
+      /* harmony export */ __webpack_require__.d(__webpack_exports__, {
+        /* harmony export */ __N_SSP: () => /* binding */ __N_SSP,
+        /* harmony export */ default: () => __WEBPACK_DEFAULT_EXPORT__,
+        /* harmony export */
+      });
+      /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
+        __webpack_require__(3108);
+      /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1__ =
+        __webpack_require__(3973);
+      /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1___default =
+        /*#__PURE__*/ __webpack_require__.n(
+          next_dynamic__WEBPACK_IMPORTED_MODULE_1__
+        );
+
+      const DynamicHello = next_dynamic__WEBPACK_IMPORTED_MODULE_1___default()(
+        () =>
+          __webpack_require__
+            .e(/* import() */ 1596)
+            .then(__webpack_require__.bind(__webpack_require__, 1596))
+            .then((mod) => mod.Hello),
+        {
+          loadableGenerated: {
+            webpack: () => [/*require.resolve*/ 1596],
+          },
+        }
+      );
+      const Page = () =>
+        /*#__PURE__*/ (0, react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(
+          react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment,
+          {
+            children: [
+              /*#__PURE__*/ (0,
+              react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", {
+                children: "testing next/dynamic size",
+              }),
+              /*#__PURE__*/ (0,
+              react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(
+                DynamicHello,
+                {}
+              ),
+            ],
+          }
+        );
+      var __N_SSP = true;
+      /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = Page;
 
       /***/
     },
 
-    /***/ 4464: /***/ (module, exports, __webpack_require__) => {
+    /***/ 3660: /***/ (module, exports, __webpack_require__) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -88,7 +456,7 @@
         __webpack_require__(4312)
       );
       const _loadablesharedruntime = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(9799)
+        __webpack_require__(4539)
       );
       const isServerSide = "object" === "undefined";
       // Normalize loader to return the module as form { default: Component } for `React.lazy`.
@@ -188,63 +556,17 @@
       /***/
     },
 
-    /***/ 9381: /***/ (
-      __unused_webpack_module,
-      __webpack_exports__,
+    /***/ 3973: /***/ (
+      module,
+      __unused_webpack_exports,
       __webpack_require__
     ) => {
-      "use strict";
-      __webpack_require__.r(__webpack_exports__);
-      /* harmony export */ __webpack_require__.d(__webpack_exports__, {
-        /* harmony export */ __N_SSP: () => /* binding */ __N_SSP,
-        /* harmony export */ default: () => __WEBPACK_DEFAULT_EXPORT__,
-        /* harmony export */
-      });
-      /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
-        __webpack_require__(3108);
-      /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(1231);
-      /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1___default =
-        /*#__PURE__*/ __webpack_require__.n(
-          next_dynamic__WEBPACK_IMPORTED_MODULE_1__
-        );
-
-      const DynamicHello = next_dynamic__WEBPACK_IMPORTED_MODULE_1___default()(
-        () =>
-          __webpack_require__
-            .e(/* import() */ 2086)
-            .then(__webpack_require__.bind(__webpack_require__, 2086))
-            .then((mod) => mod.Hello),
-        {
-          loadableGenerated: {
-            webpack: () => [/*require.resolve*/ 2086],
-          },
-        }
-      );
-      const Page = () =>
-        /*#__PURE__*/ (0, react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(
-          react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment,
-          {
-            children: [
-              /*#__PURE__*/ (0,
-              react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", {
-                children: "testing next/dynamic size",
-              }),
-              /*#__PURE__*/ (0,
-              react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(
-                DynamicHello,
-                {}
-              ),
-            ],
-          }
-        );
-      var __N_SSP = true;
-      /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = Page;
+      module.exports = __webpack_require__(3660);
 
       /***/
     },
 
-    /***/ 9799: /***/ (
+    /***/ 4539: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -286,7 +608,8 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
       const _react = /*#__PURE__*/ _interop_require_default._(
         __webpack_require__(4312)
       );
-      const _loadablecontextsharedruntime = __webpack_require__(2101);
+      const _loadablecontextsharedruntime = __webpack_require__(3401);
+      const _chunkloaderror = __webpack_require__(2758);
       function resolve(obj) {
         return obj && obj.default ? obj.default : obj;
       }
@@ -413,6 +736,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
           this._callbacks = new Set();
           this._delay = null;
           this._timeout = null;
+          this._hasAutoRetried = false;
           this.retry();
         }
         promise() {
@@ -451,7 +775,25 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
               this._update({});
               this._clearTimeouts();
             })
-            .catch((_err) => {
+            .catch((err) => {
+              // Auto-retry for chunk load errors (once)
+              // This handles transient network failures during dynamic imports
+              if (
+                true &&
+                (0, _chunkloaderror.isChunkLoadError)(err) &&
+                !this._hasAutoRetried
+              ) {
+                this._hasAutoRetried = true;
+                // Clear bundler's chunk cache so retry will fetch fresh
+                (0, _chunkloaderror.clearChunkCache)(err);
+                // Retry after a short delay with jitter
+                const delay = (0, _chunkloaderror.getRetryDelayMs)();
+                setTimeout(() => {
+                  this.retry();
+                }, delay);
+                return;
+              }
+              // No more retries - propagate error
               this._update({});
               this._clearTimeouts();
             });
@@ -518,13 +860,392 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
 
       /***/
     },
+
+    /***/ 7676: /***/ (module, exports, __webpack_require__) => {
+      "use strict";
+      /**
+       * Chunk load error handling with silent retry logic.
+       *
+       * This module provides retry orchestration for chunk/network loading failures.
+       * It tracks failures in sessionStorage per {route, buildId, chunkKey} and
+       * implements silent retry with jittered backoff.
+       */
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      0 && 0;
+      function _export(target, all) {
+        for (var name in all)
+          Object.defineProperty(target, name, {
+            enumerable: true,
+            get: all[name],
+          });
+      }
+      _export(exports, {
+        clearChunkCache: function () {
+          return clearChunkCache;
+        },
+        clearFailureState: function () {
+          return clearFailureState;
+        },
+        createChunkErrorContext: function () {
+          return createChunkErrorContext;
+        },
+        getFailCount: function () {
+          return getFailCount;
+        },
+        getRetryDelayMs: function () {
+          return getRetryDelayMs;
+        },
+        handleChunkFailure: function () {
+          return handleChunkFailure;
+        },
+        retryChunkImport: function () {
+          return retryChunkImport;
+        },
+        shouldSilentRetry: function () {
+          return shouldSilentRetry;
+        },
+        sleep: function () {
+          return sleep;
+        },
+      });
+      const _appbuildid = __webpack_require__(1033);
+      const _ischunkloaderror = __webpack_require__(9462);
+      const STORAGE_PREFIX = "__next_chunk_fail:";
+      const RETRY_WINDOW_MS = 30000; // Don't retry same chunk within 30s of a retry
+      const MAX_FAIL_COUNT_FOR_RETRY = 2; // After 2 failures, skip silent retry
+      /**
+       * Simple hash function for generating chunk keys when URL isn't available.
+       */ function simpleHash(str) {
+        let hash = 0;
+        for (let i = 0; i < str.length; i++) {
+          const char = str.charCodeAt(i);
+          hash = ((hash << 5) - hash + char) | 0;
+        }
+        return Math.abs(hash).toString(36);
+      }
+      /**
+       * Extract chunk URL from error message if possible.
+       * ChunkLoadError messages typically contain the URL.
+       */ function extractChunkUrl(error) {
+        const message = error.message;
+        // Turbopack format: "Failed to load chunk <url> from <reason>: <cause>"
+        // The URL can be relative (/_next/...) or absolute (http://...)
+        const turbopackMatch = message.match(
+          /Failed to load chunk ([^\s]+\.(?:js|css))/
+        );
+        if (turbopackMatch) {
+          return turbopackMatch[1];
+        }
+        // Webpack format: "Loading chunk <id> failed. (error: <url>)"
+        const webpackMatch = message.match(/https?:\/\/[^\s)]+/);
+        return webpackMatch?.[0];
+      }
+      /**
+       * Extract the chunk ID from a webpack chunk URL.
+       * URLs look like: /_next/static/chunks/123.hash.js
+       */ function extractWebpackChunkId(chunkUrl) {
+        // Match chunk ID from URL path: /chunks/123.abc123.js or /chunks/pages_foo_bar.abc123.js
+        const match = chunkUrl.match(/\/chunks\/([^/.]+)\.[a-f0-9]+\.js/);
+        return match?.[1];
+      }
+      function clearChunkCache(error) {
+        const chunkUrl = extractChunkUrl(error);
+        if (!chunkUrl) return false;
+        // Turbopack: clear by chunk URL
+        if (
+          typeof globalThis.__turbopack_clear_chunk_resolver__ === "function"
+        ) {
+          // Extract the relative URL path that Turbopack uses as key
+          try {
+            const url = new URL(chunkUrl);
+            globalThis.__turbopack_clear_chunk_resolver__(
+              url.pathname + url.search
+            );
+            return true;
+          } catch {
+            // Invalid URL, try using the full URL
+            globalThis.__turbopack_clear_chunk_resolver__(chunkUrl);
+            return true;
+          }
+        }
+        // Webpack: extract chunk ID from URL and clear by ID
+        if (typeof globalThis.__next_clear_chunk_cache__ === "function") {
+          const chunkId = extractWebpackChunkId(chunkUrl);
+          if (chunkId) {
+            globalThis.__next_clear_chunk_cache__(chunkId);
+            return true;
+          }
+        }
+        return false;
+      }
+      /**
+       * Generate a unique key for this chunk error, used for deduplication.
+       */ function getChunkKey(ctx) {
+        return ctx.chunkUrl ?? simpleHash(ctx.message);
+      }
+      /**
+       * Get the sessionStorage key for tracking this chunk failure.
+       */ function getStorageKey(ctx) {
+        const buildId = (0, _appbuildid.getAppBuildId)();
+        const chunkKey = getChunkKey(ctx);
+        return `${STORAGE_PREFIX}${buildId}:${ctx.route}:${chunkKey}`;
+      }
+      /**
+       * Read failure state from sessionStorage.
+       */ function readFailureState(key) {
+        if (typeof sessionStorage === "undefined") return null;
+        try {
+          const stored = sessionStorage.getItem(key);
+          if (!stored) return null;
+          return JSON.parse(stored);
+        } catch {
+          return null;
+        }
+      }
+      /**
+       * Write failure state to sessionStorage.
+       */ function writeFailureState(key, state) {
+        if (typeof sessionStorage === "undefined") return;
+        try {
+          sessionStorage.setItem(key, JSON.stringify(state));
+        } catch {
+          // Storage might be full or disabled - continue without tracking
+        }
+      }
+      function clearFailureState(route) {
+        if (typeof sessionStorage === "undefined") return;
+        try {
+          const buildId = (0, _appbuildid.getAppBuildId)();
+          const prefix = `${STORAGE_PREFIX}${buildId}:${route}:`;
+          const keysToRemove = [];
+          for (let i = 0; i < sessionStorage.length; i++) {
+            const key = sessionStorage.key(i);
+            if (key?.startsWith(prefix)) {
+              keysToRemove.push(key);
+            }
+          }
+          keysToRemove.forEach((key) => sessionStorage.removeItem(key));
+        } catch {
+          // Ignore storage errors
+        }
+      }
+      /**
+       * Increment the failure count for this chunk.
+       */ function bumpFailCount(ctx) {
+        const key = getStorageKey(ctx);
+        const existing = readFailureState(key);
+        const now = Date.now();
+        const state = {
+          failCount: (existing?.failCount ?? 0) + 1,
+          lastTs: now,
+          retriedTs: existing?.retriedTs,
+        };
+        writeFailureState(key, state);
+        return state;
+      }
+      /**
+       * Mark that a retry was attempted for this chunk.
+       */ function markRetried(ctx) {
+        const key = getStorageKey(ctx);
+        const existing = readFailureState(key);
+        const now = Date.now();
+        const state = {
+          failCount: existing?.failCount ?? 1,
+          lastTs: existing?.lastTs ?? now,
+          retriedTs: now,
+        };
+        writeFailureState(key, state);
+      }
+      function shouldSilentRetry(ctx) {
+        // Don't retry if offline
+        if (typeof navigator !== "undefined" && !navigator.onLine) {
+          return false;
+        }
+        const key = getStorageKey(ctx);
+        const state = readFailureState(key);
+        const now = Date.now();
+        // If we already retried within the window, don't retry again
+        if (state?.retriedTs && now - state.retriedTs < RETRY_WINDOW_MS) {
+          return false;
+        }
+        // Too many failures - skip silent retry to avoid annoying the user
+        if ((state?.failCount ?? 0) >= MAX_FAIL_COUNT_FOR_RETRY) {
+          return false;
+        }
+        return true;
+      }
+      function getFailCount(ctx) {
+        const key = getStorageKey(ctx);
+        const state = readFailureState(key);
+        return state?.failCount ?? 0;
+      }
+      function getRetryDelayMs() {
+        const baseDelay = 200;
+        const jitter = Math.floor(Math.random() * 401); // 0-400ms
+        // Get RTT if available via Network Information API
+        let rtt = 0;
+        if (typeof navigator !== "undefined" && "connection" in navigator) {
+          const connection = navigator.connection;
+          if (connection?.rtt) {
+            rtt = Math.min(500, connection.rtt); // Cap at 500ms
+          }
+        }
+        return Math.min(1500, baseDelay + jitter + rtt); // Cap total at 1500ms
+      }
+      function sleep(ms) {
+        return new Promise((resolve) => setTimeout(resolve, ms));
+      }
+      function createChunkErrorContext(error, route, userVisible = true) {
+        if (
+          !(0, _ischunkloaderror.isChunkLoadError)(error) &&
+          !(0, _ischunkloaderror.isNetworkError)(error)
+        ) {
+          return null;
+        }
+        return {
+          route,
+          userVisible,
+          message: error.message,
+          chunkUrl: extractChunkUrl(error),
+        };
+      }
+      function handleChunkFailure(ctx) {
+        // Always increment fail count first
+        bumpFailCount(ctx);
+        // Check if we should try a silent retry
+        if (shouldSilentRetry(ctx)) {
+          markRetried(ctx);
+          return "retry";
+        }
+        // Show banner to the user
+        return "banner";
+      }
+      async function retryChunkImport(ctx, importFn) {
+        const action = handleChunkFailure(ctx);
+        if (action === "retry") {
+          const delay = getRetryDelayMs();
+          await sleep(delay);
+          return importFn();
+        }
+        // If we shouldn't retry, re-throw to trigger error boundary
+        throw Object.defineProperty(
+          new Error("Chunk load failed after retry attempts"),
+          "__NEXT_ERROR_CODE",
+          {
+            value: "E976",
+            enumerable: false,
+            configurable: true,
+          }
+        );
+      }
+      if (
+        (typeof exports.default === "function" ||
+          (typeof exports.default === "object" && exports.default !== null)) &&
+        typeof exports.default.__esModule === "undefined"
+      ) {
+        Object.defineProperty(exports.default, "__esModule", {
+          value: true,
+        });
+        Object.assign(exports.default, exports);
+        module.exports = exports.default;
+      } //# sourceMappingURL=chunk-load-error-handler.js.map
+
+      /***/
+    },
+
+    /***/ 9462: /***/ (module, exports) => {
+      "use strict";
+      /**
+       * Utilities for detecting chunk load errors and network failures.
+       *
+       * ChunkLoadError can come from:
+       * - Turbopack: error.name === 'ChunkLoadError'
+       * - Webpack: error.name === 'ChunkLoadError'
+       *
+       * We intentionally keep detection narrow to avoid false positives:
+       * - Server 4xx/5xx responses don't throw (they return Response objects)
+       * - We should NOT retry CORS errors, AbortErrors, or parsing failures
+       */ /**
+       * Detects if an error is a ChunkLoadError from Turbopack or webpack.
+       * This is the most reliable check - both bundlers explicitly set this error name.
+       */
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      0 && 0;
+      function _export(target, all) {
+        for (var name in all)
+          Object.defineProperty(target, name, {
+            enumerable: true,
+            get: all[name],
+          });
+      }
+      _export(exports, {
+        isChunkLoadError: function () {
+          return isChunkLoadError;
+        },
+        isChunkOrNetworkError: function () {
+          return isChunkOrNetworkError;
+        },
+        isNetworkError: function () {
+          return isNetworkError;
+        },
+      });
+      function isChunkLoadError(error) {
+        if (!error || typeof error !== "object") return false;
+        return error.name === "ChunkLoadError";
+      }
+      function isNetworkError(error) {
+        if (!error || typeof error !== "object") return false;
+        const err = error;
+        // Never retry intentional aborts
+        if (err.name === "AbortError") return false;
+        // TypeError with specific fetch failure messages
+        // These occur when the network request itself fails (not CORS, not server error)
+        if (err.name === "TypeError") {
+          const message = err.message || "";
+          // Browser-specific network failure messages
+          // Chrome/Edge: "Failed to fetch"
+          // Firefox: "NetworkError when attempting to fetch resource"
+          // Safari: "Load failed" or "The Internet connection appears to be offline"
+          if (
+            message === "Failed to fetch" ||
+            message.startsWith("NetworkError when attempting to fetch") ||
+            message === "Load failed" ||
+            message.includes("Internet connection appears to be offline") ||
+            message.includes("network connection was lost")
+          ) {
+            return true;
+          }
+        }
+        return false;
+      }
+      function isChunkOrNetworkError(error) {
+        return isChunkLoadError(error) || isNetworkError(error);
+      }
+      if (
+        (typeof exports.default === "function" ||
+          (typeof exports.default === "object" && exports.default !== null)) &&
+        typeof exports.default.__esModule === "undefined"
+      ) {
+        Object.defineProperty(exports.default, "__esModule", {
+          value: true,
+        });
+        Object.assign(exports.default, exports);
+        module.exports = exports.default;
+      } //# sourceMappingURL=is-chunk-load-error.js.map
+
+      /***/
+    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(3458)
+      __webpack_exec__(2604)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for edge-ssr-HASH.js
@@ -1,7 +1,24 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [676],
   {
-    /***/ 1564: /***/ (
+    /***/ 7046: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/edge-ssr",
+        function () {
+          return __webpack_require__(7142);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
+
+    /***/ 7142: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -20,30 +37,13 @@
 
       /***/
     },
-
-    /***/ 4300: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/edge-ssr",
-        function () {
-          return __webpack_require__(1564);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(4300)
+      __webpack_exec__(7046)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for head-HASH.js
@@ -1,34 +1,17 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [5350],
   {
-    /***/ 1548: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/head",
-        function () {
-          return __webpack_require__(4282);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
-
-    /***/ 3952: /***/ (
+    /***/ 3770: /***/ (
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
-      module.exports = __webpack_require__(1653);
+      module.exports = __webpack_require__(9025);
 
       /***/
     },
 
-    /***/ 4282: /***/ (
+    /***/ 6236: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -43,7 +26,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(3108);
       /* harmony import */ var next_head__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(3952);
+        __webpack_require__(3770);
       /* harmony import */ var next_head__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_head__WEBPACK_IMPORTED_MODULE_1__
@@ -76,13 +59,30 @@
 
       /***/
     },
+
+    /***/ 6510: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/head",
+        function () {
+          return __webpack_require__(6236);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(1548)
+      __webpack_exec__(6510)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for index-HASH.js
@@ -1,24 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [3332],
   {
-    /***/ 6376: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/",
-        function () {
-          return __webpack_require__(8460);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
-
-    /***/ 8460: /***/ (
+    /***/ 830: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -36,13 +19,30 @@
 
       /***/
     },
+
+    /***/ 1938: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/",
+        function () {
+          return __webpack_require__(830);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(6376)
+      __webpack_exec__(1938)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for link-HASH.js
@@ -1,7 +1,220 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [4672],
   {
-    /***/ 857: /***/ (module, exports, __webpack_require__) => {
+    /***/ 2774: /***/ (module, exports, __webpack_require__) => {
+      "use strict";
+
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      Object.defineProperty(exports, "useIntersection", {
+        enumerable: true,
+        get: function () {
+          return useIntersection;
+        },
+      });
+      const _react = __webpack_require__(4312);
+      const _requestidlecallback = __webpack_require__(9413);
+      const hasIntersectionObserver =
+        typeof IntersectionObserver === "function";
+      const observers = new Map();
+      const idList = [];
+      function createObserver(options) {
+        const id = {
+          root: options.root || null,
+          margin: options.rootMargin || "",
+        };
+        const existing = idList.find(
+          (obj) => obj.root === id.root && obj.margin === id.margin
+        );
+        let instance;
+        if (existing) {
+          instance = observers.get(existing);
+          if (instance) {
+            return instance;
+          }
+        }
+        const elements = new Map();
+        const observer = new IntersectionObserver((entries) => {
+          entries.forEach((entry) => {
+            const callback = elements.get(entry.target);
+            const isVisible =
+              entry.isIntersecting || entry.intersectionRatio > 0;
+            if (callback && isVisible) {
+              callback(isVisible);
+            }
+          });
+        }, options);
+        instance = {
+          id,
+          observer,
+          elements,
+        };
+        idList.push(id);
+        observers.set(id, instance);
+        return instance;
+      }
+      function observe(element, callback, options) {
+        const { id, observer, elements } = createObserver(options);
+        elements.set(element, callback);
+        observer.observe(element);
+        return function unobserve() {
+          elements.delete(element);
+          observer.unobserve(element);
+          // Destroy observer when there's nothing left to watch:
+          if (elements.size === 0) {
+            observer.disconnect();
+            observers.delete(id);
+            const index = idList.findIndex(
+              (obj) => obj.root === id.root && obj.margin === id.margin
+            );
+            if (index > -1) {
+              idList.splice(index, 1);
+            }
+          }
+        };
+      }
+      function useIntersection({ rootRef, rootMargin, disabled }) {
+        const isDisabled = disabled || !hasIntersectionObserver;
+        const [visible, setVisible] = (0, _react.useState)(false);
+        const elementRef = (0, _react.useRef)(null);
+        const setElement = (0, _react.useCallback)((element) => {
+          elementRef.current = element;
+        }, []);
+        (0, _react.useEffect)(() => {
+          if (hasIntersectionObserver) {
+            if (isDisabled || visible) return;
+            const element = elementRef.current;
+            if (element && element.tagName) {
+              const unobserve = observe(
+                element,
+                (isVisible) => isVisible && setVisible(isVisible),
+                {
+                  root: rootRef?.current,
+                  rootMargin,
+                }
+              );
+              return unobserve;
+            }
+          } else {
+            if (!visible) {
+              const idleCallback = (0,
+              _requestidlecallback.requestIdleCallback)(() => setVisible(true));
+              return () =>
+                (0, _requestidlecallback.cancelIdleCallback)(idleCallback);
+            }
+          }
+          // eslint-disable-next-line react-hooks/exhaustive-deps
+        }, [isDisabled, rootMargin, rootRef, visible, elementRef.current]);
+        const resetVisible = (0, _react.useCallback)(() => {
+          setVisible(false);
+        }, []);
+        return [setElement, visible, resetVisible];
+      }
+      if (
+        (typeof exports.default === "function" ||
+          (typeof exports.default === "object" && exports.default !== null)) &&
+        typeof exports.default.__esModule === "undefined"
+      ) {
+        Object.defineProperty(exports.default, "__esModule", {
+          value: true,
+        });
+        Object.assign(exports.default, exports);
+        module.exports = exports.default;
+      } //# sourceMappingURL=use-intersection.js.map
+
+      /***/
+    },
+
+    /***/ 3351: /***/ (module, exports, __webpack_require__) => {
+      "use strict";
+
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      Object.defineProperty(exports, "useMergedRef", {
+        enumerable: true,
+        get: function () {
+          return useMergedRef;
+        },
+      });
+      const _react = __webpack_require__(4312);
+      function useMergedRef(refA, refB) {
+        const cleanupA = (0, _react.useRef)(null);
+        const cleanupB = (0, _react.useRef)(null);
+        // NOTE: In theory, we could skip the wrapping if only one of the refs is non-null.
+        // (this happens often if the user doesn't pass a ref to Link/Form/Image)
+        // But this can cause us to leak a cleanup-ref into user code (previously via `<Link legacyBehavior>`),
+        // and the user might pass that ref into ref-merging library that doesn't support cleanup refs
+        // (because it hasn't been updated for React 19)
+        // which can then cause things to blow up, because a cleanup-returning ref gets called with `null`.
+        // So in practice, it's safer to be defensive and always wrap the ref, even on React 19.
+        return (0, _react.useCallback)(
+          (current) => {
+            if (current === null) {
+              const cleanupFnA = cleanupA.current;
+              if (cleanupFnA) {
+                cleanupA.current = null;
+                cleanupFnA();
+              }
+              const cleanupFnB = cleanupB.current;
+              if (cleanupFnB) {
+                cleanupB.current = null;
+                cleanupFnB();
+              }
+            } else {
+              if (refA) {
+                cleanupA.current = applyRef(refA, current);
+              }
+              if (refB) {
+                cleanupB.current = applyRef(refB, current);
+              }
+            }
+          },
+          [refA, refB]
+        );
+      }
+      function applyRef(refA, current) {
+        if (typeof refA === "function") {
+          const cleanup = refA(current);
+          if (typeof cleanup === "function") {
+            return cleanup;
+          } else {
+            return () => refA(null);
+          }
+        } else {
+          refA.current = current;
+          return () => {
+            refA.current = null;
+          };
+        }
+      }
+      if (
+        (typeof exports.default === "function" ||
+          (typeof exports.default === "object" && exports.default !== null)) &&
+        typeof exports.default.__esModule === "undefined"
+      ) {
+        Object.defineProperty(exports.default, "__esModule", {
+          value: true,
+        });
+        Object.assign(exports.default, exports);
+        module.exports = exports.default;
+      } //# sourceMappingURL=use-merged-ref.js.map
+
+      /***/
+    },
+
+    /***/ 3440: /***/ (
+      module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      module.exports = __webpack_require__(4757);
+
+      /***/
+    },
+
+    /***/ 4757: /***/ (module, exports, __webpack_require__) => {
       "use strict";
       /* __next_internal_client_entry_do_not_use__  cjs */
       Object.defineProperty(exports, "__esModule", {
@@ -23,22 +236,22 @@
           return useLinkStatus;
         },
       });
-      const _interop_require_wildcard = __webpack_require__(8781);
+      const _interop_require_wildcard = __webpack_require__(1162);
       const _jsxruntime = __webpack_require__(3108);
       const _react = /*#__PURE__*/ _interop_require_wildcard._(
         __webpack_require__(4312)
       );
-      const _resolvehref = __webpack_require__(4055);
-      const _islocalurl = __webpack_require__(7175);
-      const _formaturl = __webpack_require__(9674);
-      const _utils = __webpack_require__(7424);
-      const _addlocale = __webpack_require__(589);
-      const _routercontextsharedruntime = __webpack_require__(7010);
-      const _useintersection = __webpack_require__(2330);
-      const _getdomainlocale = __webpack_require__(7207);
-      const _addbasepath = __webpack_require__(9942);
-      const _usemergedref = __webpack_require__(8067);
-      const _erroronce = __webpack_require__(1945);
+      const _resolvehref = __webpack_require__(4691);
+      const _islocalurl = __webpack_require__(4763);
+      const _formaturl = __webpack_require__(3246);
+      const _utils = __webpack_require__(7372);
+      const _addlocale = __webpack_require__(1809);
+      const _routercontextsharedruntime = __webpack_require__(2254);
+      const _useintersection = __webpack_require__(2774);
+      const _getdomainlocale = __webpack_require__(8803);
+      const _addbasepath = __webpack_require__(5834);
+      const _usemergedref = __webpack_require__(3351);
+      const _erroronce = __webpack_require__(6021);
       const prefetched = new Set();
       function prefetch(router, href, as, options) {
         if (false) {
@@ -417,168 +630,43 @@
       /***/
     },
 
-    /***/ 1945: /***/ (__unused_webpack_module, exports) => {
-      "use strict";
-
-      Object.defineProperty(exports, "__esModule", {
-        value: true,
-      });
-      Object.defineProperty(exports, "errorOnce", {
-        enumerable: true,
-        get: function () {
-          return errorOnce;
+    /***/ 5326: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/link",
+        function () {
+          return __webpack_require__(9058);
         },
-      });
-      let errorOnce = (_) => {};
+      ]);
       if (false) {
-      } //# sourceMappingURL=error-once.js.map
+      }
 
       /***/
     },
 
-    /***/ 2330: /***/ (module, exports, __webpack_require__) => {
+    /***/ 6021: /***/ (__unused_webpack_module, exports) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
         value: true,
       });
-      Object.defineProperty(exports, "useIntersection", {
+      Object.defineProperty(exports, "errorOnce", {
         enumerable: true,
         get: function () {
-          return useIntersection;
+          return errorOnce;
         },
       });
-      const _react = __webpack_require__(4312);
-      const _requestidlecallback = __webpack_require__(601);
-      const hasIntersectionObserver =
-        typeof IntersectionObserver === "function";
-      const observers = new Map();
-      const idList = [];
-      function createObserver(options) {
-        const id = {
-          root: options.root || null,
-          margin: options.rootMargin || "",
-        };
-        const existing = idList.find(
-          (obj) => obj.root === id.root && obj.margin === id.margin
-        );
-        let instance;
-        if (existing) {
-          instance = observers.get(existing);
-          if (instance) {
-            return instance;
-          }
-        }
-        const elements = new Map();
-        const observer = new IntersectionObserver((entries) => {
-          entries.forEach((entry) => {
-            const callback = elements.get(entry.target);
-            const isVisible =
-              entry.isIntersecting || entry.intersectionRatio > 0;
-            if (callback && isVisible) {
-              callback(isVisible);
-            }
-          });
-        }, options);
-        instance = {
-          id,
-          observer,
-          elements,
-        };
-        idList.push(id);
-        observers.set(id, instance);
-        return instance;
-      }
-      function observe(element, callback, options) {
-        const { id, observer, elements } = createObserver(options);
-        elements.set(element, callback);
-        observer.observe(element);
-        return function unobserve() {
-          elements.delete(element);
-          observer.unobserve(element);
-          // Destroy observer when there's nothing left to watch:
-          if (elements.size === 0) {
-            observer.disconnect();
-            observers.delete(id);
-            const index = idList.findIndex(
-              (obj) => obj.root === id.root && obj.margin === id.margin
-            );
-            if (index > -1) {
-              idList.splice(index, 1);
-            }
-          }
-        };
-      }
-      function useIntersection({ rootRef, rootMargin, disabled }) {
-        const isDisabled = disabled || !hasIntersectionObserver;
-        const [visible, setVisible] = (0, _react.useState)(false);
-        const elementRef = (0, _react.useRef)(null);
-        const setElement = (0, _react.useCallback)((element) => {
-          elementRef.current = element;
-        }, []);
-        (0, _react.useEffect)(() => {
-          if (hasIntersectionObserver) {
-            if (isDisabled || visible) return;
-            const element = elementRef.current;
-            if (element && element.tagName) {
-              const unobserve = observe(
-                element,
-                (isVisible) => isVisible && setVisible(isVisible),
-                {
-                  root: rootRef?.current,
-                  rootMargin,
-                }
-              );
-              return unobserve;
-            }
-          } else {
-            if (!visible) {
-              const idleCallback = (0,
-              _requestidlecallback.requestIdleCallback)(() => setVisible(true));
-              return () =>
-                (0, _requestidlecallback.cancelIdleCallback)(idleCallback);
-            }
-          }
-          // eslint-disable-next-line react-hooks/exhaustive-deps
-        }, [isDisabled, rootMargin, rootRef, visible, elementRef.current]);
-        const resetVisible = (0, _react.useCallback)(() => {
-          setVisible(false);
-        }, []);
-        return [setElement, visible, resetVisible];
-      }
-      if (
-        (typeof exports.default === "function" ||
-          (typeof exports.default === "object" && exports.default !== null)) &&
-        typeof exports.default.__esModule === "undefined"
-      ) {
-        Object.defineProperty(exports.default, "__esModule", {
-          value: true,
-        });
-        Object.assign(exports.default, exports);
-        module.exports = exports.default;
-      } //# sourceMappingURL=use-intersection.js.map
-
-      /***/
-    },
-
-    /***/ 4972: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/link",
-        function () {
-          return __webpack_require__(7600);
-        },
-      ]);
+      let errorOnce = (_) => {};
       if (false) {
-      }
+      } //# sourceMappingURL=error-once.js.map
 
       /***/
     },
 
-    /***/ 7207: /***/ (module, exports, __webpack_require__) => {
+    /***/ 8803: /***/ (module, exports, __webpack_require__) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -590,7 +678,7 @@
           return getDomainLocale;
         },
       });
-      const _normalizetrailingslash = __webpack_require__(151);
+      const _normalizetrailingslash = __webpack_require__(1315);
       const basePath =
         /* unused pure expression or super */ null && (false || "");
       function getDomainLocale(path, locale, locales, domainLocales) {
@@ -614,7 +702,7 @@
       /***/
     },
 
-    /***/ 7600: /***/ (
+    /***/ 9058: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -629,7 +717,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(3108);
       /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(7830);
+        __webpack_require__(3440);
       /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_link__WEBPACK_IMPORTED_MODULE_1__
@@ -659,101 +747,13 @@
 
       /***/
     },
-
-    /***/ 7830: /***/ (
-      module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      module.exports = __webpack_require__(857);
-
-      /***/
-    },
-
-    /***/ 8067: /***/ (module, exports, __webpack_require__) => {
-      "use strict";
-
-      Object.defineProperty(exports, "__esModule", {
-        value: true,
-      });
-      Object.defineProperty(exports, "useMergedRef", {
-        enumerable: true,
-        get: function () {
-          return useMergedRef;
-        },
-      });
-      const _react = __webpack_require__(4312);
-      function useMergedRef(refA, refB) {
-        const cleanupA = (0, _react.useRef)(null);
-        const cleanupB = (0, _react.useRef)(null);
-        // NOTE: In theory, we could skip the wrapping if only one of the refs is non-null.
-        // (this happens often if the user doesn't pass a ref to Link/Form/Image)
-        // But this can cause us to leak a cleanup-ref into user code (previously via `<Link legacyBehavior>`),
-        // and the user might pass that ref into ref-merging library that doesn't support cleanup refs
-        // (because it hasn't been updated for React 19)
-        // which can then cause things to blow up, because a cleanup-returning ref gets called with `null`.
-        // So in practice, it's safer to be defensive and always wrap the ref, even on React 19.
-        return (0, _react.useCallback)(
-          (current) => {
-            if (current === null) {
-              const cleanupFnA = cleanupA.current;
-              if (cleanupFnA) {
-                cleanupA.current = null;
-                cleanupFnA();
-              }
-              const cleanupFnB = cleanupB.current;
-              if (cleanupFnB) {
-                cleanupB.current = null;
-                cleanupFnB();
-              }
-            } else {
-              if (refA) {
-                cleanupA.current = applyRef(refA, current);
-              }
-              if (refB) {
-                cleanupB.current = applyRef(refB, current);
-              }
-            }
-          },
-          [refA, refB]
-        );
-      }
-      function applyRef(refA, current) {
-        if (typeof refA === "function") {
-          const cleanup = refA(current);
-          if (typeof cleanup === "function") {
-            return cleanup;
-          } else {
-            return () => refA(null);
-          }
-        } else {
-          refA.current = current;
-          return () => {
-            refA.current = null;
-          };
-        }
-      }
-      if (
-        (typeof exports.default === "function" ||
-          (typeof exports.default === "object" && exports.default !== null)) &&
-        typeof exports.default.__esModule === "undefined"
-      ) {
-        Object.defineProperty(exports.default, "__esModule", {
-          value: true,
-        });
-        Object.assign(exports.default, exports);
-        module.exports = exports.default;
-      } //# sourceMappingURL=use-merged-ref.js.map
-
-      /***/
-    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(4972)
+      __webpack_exec__(5326)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for routerDirect-HASH.js
@@ -1,17 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [188],
   {
-    /***/ 1179: /***/ (
-      module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      module.exports = __webpack_require__(9864);
-
-      /***/
-    },
-
-    /***/ 1640: /***/ (
+    /***/ 2014: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -26,7 +16,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(3108);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(1179);
+        __webpack_require__(4169);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_router__WEBPACK_IMPORTED_MODULE_1__
@@ -46,7 +36,17 @@
       /***/
     },
 
-    /***/ 2172: /***/ (
+    /***/ 4169: /***/ (
+      module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      module.exports = __webpack_require__(9700);
+
+      /***/
+    },
+
+    /***/ 4414: /***/ (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -54,7 +54,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/routerDirect",
         function () {
-          return __webpack_require__(1640);
+          return __webpack_require__(2014);
         },
       ]);
       if (false) {
@@ -68,7 +68,7 @@
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(2172)
+      __webpack_exec__(4414)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for script-HASH.js
@@ -1,17 +1,34 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [1209],
   {
-    /***/ 4977: /***/ (
+    /***/ 2591: /***/ (
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
-      module.exports = __webpack_require__(326);
+      module.exports = __webpack_require__(4634);
 
       /***/
     },
 
-    /***/ 5887: /***/ (
+    /***/ 5030: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/script",
+        function () {
+          return __webpack_require__(7557);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
+
+    /***/ 7557: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -26,7 +43,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(3108);
       /* harmony import */ var next_script__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(4977);
+        __webpack_require__(2591);
       /* harmony import */ var next_script__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_script__WEBPACK_IMPORTED_MODULE_1__
@@ -58,30 +75,13 @@
 
       /***/
     },
-
-    /***/ 6268: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/script",
-        function () {
-          return __webpack_require__(5887);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(6268)
+      __webpack_exec__(5030)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for withRouter-HASH.js
@@ -1,34 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [3263],
   {
-    /***/ 1179: /***/ (
-      module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      module.exports = __webpack_require__(9864);
-
-      /***/
-    },
-
-    /***/ 2028: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/withRouter",
-        function () {
-          return __webpack_require__(4501);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
-
-    /***/ 4501: /***/ (
+    /***/ 559: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -43,7 +16,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(3108);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(1179);
+        __webpack_require__(4169);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_router__WEBPACK_IMPORTED_MODULE_1__
@@ -61,13 +34,40 @@
 
       /***/
     },
+
+    /***/ 726: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/withRouter",
+        function () {
+          return __webpack_require__(559);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
+
+    /***/ 4169: /***/ (
+      module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      module.exports = __webpack_require__(9700);
+
+      /***/
+    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(2028)
+      __webpack_exec__(726)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for 2161-HASH.js

Diff too large to display

Diff for 2747-HASH.js

Diff too large to display

Diff for 4322-HASH.js
failed to diff
Diff for main-HASH.js

Diff too large to display

Diff for webpack-HASH.js
@@ -205,7 +205,7 @@
     /******/ __webpack_require__.u = (chunkId) => {
       /******/ // return url for filenames based on template
       /******/ return (
-        "static/chunks/" + chunkId + "." + "9c9ddbde79ea2f29" + ".js"
+        "static/chunks/" + chunkId + "." + "871ca3fb4b1caa0e" + ".js"
       );
       /******/
     };
@@ -380,6 +380,23 @@
       /******/
     };
     /******/
+    /******/ // Next.js chunk cache clearing for retry logic
+    /******/ if (typeof globalThis !== "undefined") {
+      /******/ globalThis.__next_clear_chunk_cache__ = function (chunkId) {
+        /******/ // Only clear if not already loaded (0 means loaded)
+        /******/ if (
+          installedChunks[chunkId] !== 0 &&
+          installedChunks[chunkId] !== undefined
+        ) {
+          /******/ delete installedChunks[chunkId];
+          /******/
+        }
+        /******/
+      };
+      /******/
+    }
+    /******/
+    /******/
     /******/ __webpack_require__.f.j = (chunkId, promises) => {
       /******/ // JSONP chunk loading for javascript
       /******/ var installedChunkData = __webpack_require__.o(
Diff for app-page-exp..ntime.dev.js

Diff too large to display

Diff for app-page-exp..time.prod.js
failed to diff
Diff for app-page-tur..ntime.dev.js

Diff too large to display

Diff for app-page-tur..time.prod.js
failed to diff
Diff for app-page-tur..ntime.dev.js

Diff too large to display

Diff for app-page-tur..time.prod.js

Diff too large to display

Diff for app-page.runtime.dev.js

Diff too large to display

Diff for app-page.runtime.prod.js

Diff too large to display

Diff for pages-turbo...ntime.dev.js

Diff too large to display

Diff for pages-turbo...time.prod.js

Diff too large to display

Diff for pages.runtime.dev.js

Diff too large to display

Diff for pages.runtime.prod.js

Diff too large to display

Commit: 0cf6b84

@feedthejim feedthejim force-pushed the chunk-load-error-banner branch from a304c38 to 3049f08 Compare January 2, 2026 13:24
@feedthejim feedthejim force-pushed the chunk-load-error-retry branch 2 times, most recently from 8db7ab6 to f344080 Compare January 2, 2026 13:35
@feedthejim feedthejim force-pushed the chunk-load-error-banner branch 2 times, most recently from 6f91adc to dade081 Compare January 2, 2026 13:42
@feedthejim feedthejim force-pushed the chunk-load-error-retry branch from f344080 to 00c70c0 Compare January 2, 2026 13:42
@codspeed-hq
Copy link

codspeed-hq bot commented Jan 2, 2026

CodSpeed Performance Report

Merging #88004 will improve performance by 6.08%

Comparing chunk-load-error-retry (8eeb1f6) with canary (40a4c11)1

Summary

⚡ 1 improvement
✅ 16 untouched
⏩ 3 skipped2

Benchmarks breakdown

Mode Benchmark BASE HEAD Efficiency
Simulation react-dom-client.development.js[tracing] 398.2 ms 375.4 ms +6.08%

Footnotes

  1. No successful run was found on chunk-load-error-banner (f2573ed) during the generation of this report, so canary (40a4c11) was used instead as the comparison base. There might be some changes unrelated to this pull request in this report.

  2. 3 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports.

@feedthejim feedthejim force-pushed the chunk-load-error-banner branch from dade081 to a12e5f7 Compare January 2, 2026 13:50
@feedthejim feedthejim force-pushed the chunk-load-error-retry branch from 00c70c0 to 0cf6b84 Compare January 2, 2026 13:50
}

// Webpack format: "Loading chunk <id> failed. (error: <url>)"
const webpackMatch = message.match(/https?:\/\/[^\s)]+/)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
const webpackMatch = message.match(/https?:\/\/[^\s)]+/)
// Match absolute URLs (http/https), protocol-relative URLs, and relative URLs
const webpackMatch = message.match(
/(?:https?:)?\/\/[^\s)]+|\/[^\s)]+\.(?:js|css)/
)

The webpack URL extraction regex only matches absolute URLs (http://https://), but webpack error messages contain relative URLs, causing chunk cache clearing to fail silently for webpack.

View Details

Analysis

Webpack chunk cache clearing fails for relative URLs

What fails: The extractChunkUrl() function in packages/next/src/client/components/chunk-load-error/chunk-load-error-handler.ts fails to extract relative URLs from webpack error messages, preventing the webpack chunk cache from being cleared during retry logic.

How to reproduce:

  1. In a Next.js app using webpack (not turbopack) bundler, configure a dynamic import
  2. Force a chunk load failure by blocking the network request to /_next/static/chunks/...
  3. The error message will contain: Loading chunk <id> failed. (error: /_next/static/chunks/main.abc123.js)
  4. The regex /https?:\/\/[^\s)]+/ on line 76 only matches absolute URLs starting with http:// or https://
  5. The relative URL /_next/static/chunks/main.abc123.js is not matched
  6. extractChunkUrl() returns undefined
  7. clearChunkCache() returns false without clearing the webpack installedChunks cache
  8. Retry fails because webpack's cached rejected promise is returned instead of fetching a fresh chunk

Result: Chunk retry mechanism fails silently for webpack when using default Next.js configuration (which uses relative URLs via publicPath: "/_next/").

Expected behavior: The regex should match relative URLs like /_next/static/chunks/main.js, protocol-relative URLs like //cdn.com/chunks/main.js, and absolute URLs like https://cdn.com/chunks/main.js. The webpack chunk cache is cleared via __next_clear_chunk_cache__, allowing the retry to fetch a fresh chunk instead of using the cached rejected promise.

Fix applied: Updated the webpack URL extraction regex from /https?:\/\/[^\s)]+/ to /(?:https?:)?\/\/[^\s)]+|\/[^\s)]+\.(?:js|css)/ to match:

  • Absolute URLs: https://... or http://...
  • Protocol-relative URLs: //...
  • Relative URLs: /...

This matches the pattern used by turbopack format detection on line 66 which already handles relative URLs correctly.

@nextjs-bot
Copy link
Collaborator

nextjs-bot commented Jan 2, 2026

Stats from current PR

Default Build (Increase detected ⚠️)
General Overall increase ⚠️
vercel/next.js canary vercel/next.js chunk-load-error-retry Change
buildDuration 17.1s 15s N/A
buildDurationCached 13.9s 11s N/A
nodeModulesSize 457 MB 458 MB ⚠️ +960 kB
nextStartRea..uration (ms) 712ms 722ms N/A
Client Bundles (main, webpack) Overall increase ⚠️
vercel/next.js canary vercel/next.js chunk-load-error-retry Change
2086.HASH.js gzip 169 B 169 B
2161-HASH.js gzip 5.39 kB 5.41 kB N/A
2747-HASH.js gzip 4.48 kB 4.46 kB N/A
4322-HASH.js gzip 51.2 kB 54.7 kB ⚠️ +3.53 kB
ec793fe8-HASH.js gzip 62.3 kB 62.3 kB N/A
framework-HASH.js gzip 59.8 kB 59.8 kB N/A
main-app-HASH.js gzip 251 B 253 B N/A
main-HASH.js gzip 38.4 kB 38.7 kB ⚠️ +369 B
webpack-HASH.js gzip 1.68 kB 1.73 kB N/A
Overall change 89.8 kB 93.7 kB ⚠️ +3.9 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary vercel/next.js chunk-load-error-retry Change
polyfills-HASH.js gzip 39.4 kB 39.4 kB
Overall change 39.4 kB 39.4 kB
Client Pages Overall increase ⚠️
vercel/next.js canary vercel/next.js chunk-load-error-retry Change
_app-HASH.js gzip 194 B 193 B N/A
_error-HASH.js gzip 182 B 182 B
css-HASH.js gzip 336 B 335 B N/A
dynamic-HASH.js gzip 1.8 kB 4.18 kB ⚠️ +2.38 kB
edge-ssr-HASH.js gzip 256 B 256 B
head-HASH.js gzip 352 B 349 B N/A
hooks-HASH.js gzip 385 B 384 B N/A
image-HASH.js gzip 580 B 580 B
index-HASH.js gzip 259 B 258 B N/A
link-HASH.js gzip 2.5 kB 2.51 kB N/A
routerDirect..HASH.js gzip 319 B 317 B N/A
script-HASH.js gzip 385 B 387 B N/A
withRouter-HASH.js gzip 316 B 315 B N/A
1afbb74e6ecf..834.css gzip 106 B 106 B
Overall change 2.92 kB 5.3 kB ⚠️ +2.38 kB
Client Build Manifests
vercel/next.js canary vercel/next.js chunk-load-error-retry Change
_buildManifest.js gzip 738 B 738 B
Overall change 738 B 738 B
Rendered Page Sizes
vercel/next.js canary vercel/next.js chunk-load-error-retry Change
index.html gzip 523 B 524 B N/A
link.html gzip 538 B 538 B
withRouter.html gzip 520 B 520 B
Overall change 1.06 kB 1.06 kB
Edge SSR bundle Size Overall increase ⚠️
vercel/next.js canary vercel/next.js chunk-load-error-retry Change
edge-ssr.js gzip 124 kB 124 kB N/A
page.js gzip 237 kB 241 kB ⚠️ +3.43 kB
Overall change 237 kB 241 kB ⚠️ +3.43 kB
Middleware size Overall increase ⚠️
vercel/next.js canary vercel/next.js chunk-load-error-retry Change
middleware-b..fest.js gzip 654 B 654 B
middleware-r..fest.js gzip 155 B 156 B N/A
middleware.js gzip 32.7 kB 33 kB ⚠️ +266 B
edge-runtime..pack.js gzip 846 B 846 B
Overall change 34.2 kB 34.5 kB ⚠️ +266 B
Next Runtimes Overall increase ⚠️
vercel/next.js canary vercel/next.js chunk-load-error-retry Change
app-page-exp...dev.js gzip 301 kB 305 kB ⚠️ +3.45 kB
app-page-exp..prod.js gzip 156 kB 158 kB ⚠️ +2.11 kB
app-page-tur...dev.js gzip 301 kB 305 kB ⚠️ +3.44 kB
app-page-tur..prod.js gzip 156 kB 158 kB ⚠️ +2.11 kB
app-page-tur...dev.js gzip 298 kB 301 kB ⚠️ +3.51 kB
app-page-tur..prod.js gzip 154 kB 156 kB ⚠️ +2.07 kB
app-page.run...dev.js gzip 298 kB 301 kB ⚠️ +3.52 kB
app-page.run..prod.js gzip 154 kB 156 kB ⚠️ +2.07 kB
app-route-ex...dev.js gzip 68.7 kB 68.7 kB
app-route-ex..prod.js gzip 47.5 kB 47.5 kB
app-route-tu...dev.js gzip 68.7 kB 68.7 kB
app-route-tu..prod.js gzip 47.5 kB 47.5 kB
app-route-tu...dev.js gzip 68.3 kB 68.3 kB
app-route-tu..prod.js gzip 47.3 kB 47.3 kB
app-route.ru...dev.js gzip 68.3 kB 68.3 kB
app-route.ru..prod.js gzip 47.3 kB 47.3 kB
dist_client_...dev.js gzip 324 B 324 B
dist_client_...dev.js gzip 326 B 326 B
dist_client_...dev.js gzip 318 B 318 B
dist_client_...dev.js gzip 317 B 317 B
pages-api-tu...dev.js gzip 41.1 kB 41.1 kB
pages-api-tu..prod.js gzip 31.2 kB 31.2 kB
pages-api.ru...dev.js gzip 41 kB 41 kB
pages-api.ru..prod.js gzip 31.2 kB 31.2 kB
pages-turbo....dev.js gzip 50.7 kB 50.7 kB N/A
pages-turbo...prod.js gzip 38.2 kB 38.2 kB N/A
pages.runtim...dev.js gzip 50.6 kB 50.7 kB N/A
pages.runtim..prod.js gzip 38.1 kB 38.1 kB N/A
server.runti..prod.js gzip 59.9 kB 59.9 kB
Overall change 2.49 MB 2.51 MB ⚠️ +22.3 kB
build cache Overall increase ⚠️
vercel/next.js canary vercel/next.js chunk-load-error-retry Change
0.pack gzip 3.61 MB 3.66 MB ⚠️ +44.6 kB
index.pack gzip 97.6 kB 99.9 kB ⚠️ +2.23 kB
Overall change 3.71 MB 3.76 MB ⚠️ +46.8 kB
Diff details
Diff for page.js

Diff too large to display

Diff for middleware.js

Diff too large to display

Diff for edge-ssr.js

Diff too large to display

Diff for _buildManifest.js
@@ -611,35 +611,35 @@ self.__BUILD_MANIFEST = (function (a, b, c) {
       numHashes: NaN,
       bitArray: [],
     },
-    "/": ["static\u002Fchunks\u002Fpages\u002Findex-dda7d8b64d4ba15c.js"],
+    "/": ["static\u002Fchunks\u002Fpages\u002Findex-d95f7ec6af4d2644.js"],
     "/_error": [
-      "static\u002Fchunks\u002Fpages\u002F_error-6ef44d3954f25711.js",
+      "static\u002Fchunks\u002Fpages\u002F_error-209c0c82205a7c9f.js",
     ],
     "/css": [
       "static\u002Fcss\u002Fded6b86ab9cc0a1f.css",
-      "static\u002Fchunks\u002Fpages\u002Fcss-c8aaa7211416a045.js",
+      "static\u002Fchunks\u002Fpages\u002Fcss-62710339bc830ded.js",
     ],
     "/dynamic": [
-      "static\u002Fchunks\u002Fpages\u002Fdynamic-d53bb7f318f342c2.js",
+      "static\u002Fchunks\u002Fpages\u002Fdynamic-8a03f5fe64080e08.js",
     ],
     "/edge-ssr": [
-      "static\u002Fchunks\u002Fpages\u002Fedge-ssr-1383106d4a3e7d72.js",
+      "static\u002Fchunks\u002Fpages\u002Fedge-ssr-0db9f7bb610d3072.js",
     ],
-    "/head": ["static\u002Fchunks\u002Fpages\u002Fhead-1db1c4be1a45662f.js"],
-    "/hooks": ["static\u002Fchunks\u002Fpages\u002Fhooks-e6deee5b72a5b112.js"],
+    "/head": ["static\u002Fchunks\u002Fpages\u002Fhead-747416c4075e42aa.js"],
+    "/hooks": ["static\u002Fchunks\u002Fpages\u002Fhooks-8b10205be7505244.js"],
     "/image": [
-      "static\u002Fchunks\u002F2747-90c828280005c0c3.js",
-      "static\u002Fchunks\u002Fpages\u002Fimage-868472cd5e84efc9.js",
+      "static\u002Fchunks\u002F6349-ee9aecde860d4832.js",
+      "static\u002Fchunks\u002Fpages\u002Fimage-f90ae17c3ad1d38b.js",
     ],
-    "/link": ["static\u002Fchunks\u002Fpages\u002Flink-0ec374e48b2ce5d9.js"],
+    "/link": ["static\u002Fchunks\u002Fpages\u002Flink-6ab9a67b348df1bf.js"],
     "/routerDirect": [
-      "static\u002Fchunks\u002Fpages\u002FrouterDirect-1a34bfadbc088491.js",
+      "static\u002Fchunks\u002Fpages\u002FrouterDirect-f132fb471e65a8b9.js",
     ],
     "/script": [
-      "static\u002Fchunks\u002Fpages\u002Fscript-52320f59afbd096d.js",
+      "static\u002Fchunks\u002Fpages\u002Fscript-8e2028e44b8da2d9.js",
     ],
     "/withRouter": [
-      "static\u002Fchunks\u002Fpages\u002FwithRouter-3b1a16d3dfa21c16.js",
+      "static\u002Fchunks\u002Fpages\u002FwithRouter-a86d259faa012c1c.js",
     ],
     sortedPages: [
       "\u002F",
Diff for dynamic-HASH.js
@@ -1,17 +1,346 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [2291],
   {
-    /***/ 1231: /***/ (
-      module,
+    /***/ 434: /***/ (module, exports, __webpack_require__) => {
+      "use strict";
+      /* __next_internal_client_entry_do_not_use__  cjs */
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      Object.defineProperty(exports, "ChunkLoadErrorBanner", {
+        enumerable: true,
+        get: function () {
+          return ChunkLoadErrorBanner;
+        },
+      });
+      const _jsxruntime = __webpack_require__(3108);
+      const _react = __webpack_require__(4312);
+      // Copy constants (two lines, always)
+      const HEADLINE = "This page couldn't be fully loaded";
+      const DETAIL_DEFAULT = "A required file couldn't be loaded.";
+      const DETAIL_OFFLINE = "You're offline.";
+      // Fixed height for stable layout
+      const BANNER_HEIGHT = 70;
+      const styles = {
+        container: {
+          position: "fixed",
+          top: 0,
+          left: 0,
+          right: 0,
+          zIndex: 9999,
+          height: BANNER_HEIGHT,
+          padding: "0 20px",
+          backgroundColor: "#f5f5f5",
+          borderBottom: "1px solid #d4d4d4",
+          fontFamily:
+            'system-ui, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"',
+          display: "flex",
+          alignItems: "center",
+          justifyContent: "space-between",
+          gap: "16px",
+          boxSizing: "border-box",
+        },
+        spacer: {
+          height: BANNER_HEIGHT,
+          flexShrink: 0,
+        },
+        left: {
+          display: "flex",
+          alignItems: "center",
+          gap: "12px",
+          flex: 1,
+          minWidth: 0,
+        },
+        icon: {
+          flexShrink: 0,
+          width: "20px",
+          height: "20px",
+        },
+        content: {
+          display: "flex",
+          flexDirection: "column",
+          gap: "2px",
+          flex: 1,
+          minWidth: 0,
+        },
+        headline: {
+          fontSize: "14px",
+          fontWeight: 600,
+          color: "#171717",
+          margin: 0,
+          lineHeight: 1.4,
+        },
+        detail: {
+          fontSize: "13px",
+          fontWeight: 400,
+          color: "#525252",
+          margin: 0,
+          lineHeight: 1.4,
+        },
+        button: {
+          padding: "8px 16px",
+          fontSize: "13px",
+          fontWeight: 600,
+          borderRadius: "6px",
+          cursor: "pointer",
+          color: "#171717",
+          backgroundColor: "#fff",
+          border: "1px solid #a3a3a3",
+          lineHeight: 1,
+          flexShrink: 0,
+        },
+      };
+      // Neutral warning icon (circle with exclamation)
+      function WarningIcon() {
+        return /*#__PURE__*/ (0, _jsxruntime.jsxs)("svg", {
+          style: styles.icon,
+          viewBox: "0 0 20 20",
+          fill: "none",
+          xmlns: "http://www.w3.org/2000/svg",
+          "aria-hidden": "true",
+          children: [
+            /*#__PURE__*/ (0, _jsxruntime.jsx)("circle", {
+              cx: "10",
+              cy: "10",
+              r: "9",
+              stroke: "#737373",
+              strokeWidth: "1.5",
+            }),
+            /*#__PURE__*/ (0, _jsxruntime.jsx)("path", {
+              d: "M10 5.5V11",
+              stroke: "#737373",
+              strokeWidth: "1.5",
+              strokeLinecap: "round",
+            }),
+            /*#__PURE__*/ (0, _jsxruntime.jsx)("circle", {
+              cx: "10",
+              cy: "14",
+              r: "1",
+              fill: "#737373",
+            }),
+          ],
+        });
+      }
+      function ChunkLoadErrorBanner(_props) {
+        const [isOffline, setIsOffline] = (0, _react.useState)(
+          typeof navigator !== "undefined" ? !navigator.onLine : false
+        );
+        (0, _react.useEffect)(() => {
+          const handleOnline = () => setIsOffline(false);
+          const handleOffline = () => setIsOffline(true);
+          window.addEventListener("online", handleOnline);
+          window.addEventListener("offline", handleOffline);
+          return () => {
+            window.removeEventListener("online", handleOnline);
+            window.removeEventListener("offline", handleOffline);
+          };
+        }, []);
+        const handleReload = (0, _react.useCallback)(() => {
+          window.location.reload();
+        }, []);
+        const detail = isOffline ? DETAIL_OFFLINE : DETAIL_DEFAULT;
+        return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {
+          children: [
+            /*#__PURE__*/ (0, _jsxruntime.jsxs)("div", {
+              style: styles.container,
+              role: "alert",
+              "aria-live": "assertive",
+              children: [
+                /*#__PURE__*/ (0, _jsxruntime.jsxs)("div", {
+                  style: styles.left,
+                  children: [
+                    /*#__PURE__*/ (0, _jsxruntime.jsx)(WarningIcon, {}),
+                    /*#__PURE__*/ (0, _jsxruntime.jsxs)("div", {
+                      style: styles.content,
+                      children: [
+                        /*#__PURE__*/ (0, _jsxruntime.jsx)("p", {
+                          style: styles.headline,
+                          children: HEADLINE,
+                        }),
+                        /*#__PURE__*/ (0, _jsxruntime.jsx)("p", {
+                          style: styles.detail,
+                          children: detail,
+                        }),
+                      ],
+                    }),
+                  ],
+                }),
+                /*#__PURE__*/ (0, _jsxruntime.jsx)("button", {
+                  type: "button",
+                  style: styles.button,
+                  onClick: handleReload,
+                  children: "Reload page",
+                }),
+              ],
+            }),
+            /*#__PURE__*/ (0, _jsxruntime.jsx)("div", {
+              style: styles.spacer,
+            }),
+          ],
+        });
+      }
+      if (
+        (typeof exports.default === "function" ||
+          (typeof exports.default === "object" && exports.default !== null)) &&
+        typeof exports.default.__esModule === "undefined"
+      ) {
+        Object.defineProperty(exports.default, "__esModule", {
+          value: true,
+        });
+        Object.assign(exports.default, exports);
+        module.exports = exports.default;
+      } //# sourceMappingURL=chunk-load-error-banner.js.map
+
+      /***/
+    },
+
+    /***/ 1033: /***/ (module, exports) => {
+      "use strict";
+      // This gets assigned as a side-effect during app initialization. Because it
+      // represents the build used to create the JS bundle, it should never change
+      // after being set, so we store it in a global variable.
+      //
+      // When performing RSC requests, if the incoming data has a different build ID,
+      // we perform an MPA navigation/refresh to load the updated build and ensure
+      // that the client and server in sync.
+      // Starts as an empty string. In practice, because setAppBuildId is called
+      // during initialization before hydration starts, this will always get
+      // reassigned to the actual build ID before it's ever needed by a navigation.
+      // If for some reasons it didn't, due to a bug or race condition, then on
+      // navigation the build comparision would fail and trigger an MPA navigation.
+
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      0 && 0;
+      function _export(target, all) {
+        for (var name in all)
+          Object.defineProperty(target, name, {
+            enumerable: true,
+            get: all[name],
+          });
+      }
+      _export(exports, {
+        getAppBuildId: function () {
+          return getAppBuildId;
+        },
+        setAppBuildId: function () {
+          return setAppBuildId;
+        },
+      });
+      let globalBuildId = "";
+      function setAppBuildId(buildId) {
+        globalBuildId = buildId;
+      }
+      function getAppBuildId() {
+        return globalBuildId;
+      }
+      if (
+        (typeof exports.default === "function" ||
+          (typeof exports.default === "object" && exports.default !== null)) &&
+        typeof exports.default.__esModule === "undefined"
+      ) {
+        Object.defineProperty(exports.default, "__esModule", {
+          value: true,
+        });
+        Object.assign(exports.default, exports);
+        module.exports = exports.default;
+      } //# sourceMappingURL=app-build-id.js.map
+
+      /***/
+    },
+
+    /***/ 2604: /***/ (
+      __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
-      module.exports = __webpack_require__(4464);
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/dynamic",
+        function () {
+          return __webpack_require__(3643);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
+
+    /***/ 2758: /***/ (module, exports, __webpack_require__) => {
+      "use strict";
+
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      0 && 0;
+      function _export(target, all) {
+        for (var name in all)
+          Object.defineProperty(target, name, {
+            enumerable: true,
+            get: all[name],
+          });
+      }
+      _export(exports, {
+        ChunkLoadErrorBanner: function () {
+          return _chunkloaderrorbanner.ChunkLoadErrorBanner;
+        },
+        clearChunkCache: function () {
+          return _chunkloaderrorhandler.clearChunkCache;
+        },
+        clearFailureState: function () {
+          return _chunkloaderrorhandler.clearFailureState;
+        },
+        createChunkErrorContext: function () {
+          return _chunkloaderrorhandler.createChunkErrorContext;
+        },
+        getFailCount: function () {
+          return _chunkloaderrorhandler.getFailCount;
+        },
+        getRetryDelayMs: function () {
+          return _chunkloaderrorhandler.getRetryDelayMs;
+        },
+        handleChunkFailure: function () {
+          return _chunkloaderrorhandler.handleChunkFailure;
+        },
+        isChunkLoadError: function () {
+          return _ischunkloaderror.isChunkLoadError;
+        },
+        isChunkOrNetworkError: function () {
+          return _ischunkloaderror.isChunkOrNetworkError;
+        },
+        isNetworkError: function () {
+          return _ischunkloaderror.isNetworkError;
+        },
+        retryChunkImport: function () {
+          return _chunkloaderrorhandler.retryChunkImport;
+        },
+        shouldSilentRetry: function () {
+          return _chunkloaderrorhandler.shouldSilentRetry;
+        },
+        sleep: function () {
+          return _chunkloaderrorhandler.sleep;
+        },
+      });
+      const _ischunkloaderror = __webpack_require__(9462);
+      const _chunkloaderrorhandler = __webpack_require__(7676);
+      const _chunkloaderrorbanner = __webpack_require__(434);
+      if (
+        (typeof exports.default === "function" ||
+          (typeof exports.default === "object" && exports.default !== null)) &&
+        typeof exports.default.__esModule === "undefined"
+      ) {
+        Object.defineProperty(exports.default, "__esModule", {
+          value: true,
+        });
+        Object.assign(exports.default, exports);
+        module.exports = exports.default;
+      } //# sourceMappingURL=index.js.map
 
       /***/
     },
 
-    /***/ 2101: /***/ (
+    /***/ 3401: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -38,24 +367,63 @@
       /***/
     },
 
-    /***/ 3458: /***/ (
+    /***/ 3643: /***/ (
       __unused_webpack_module,
-      __unused_webpack_exports,
+      __webpack_exports__,
       __webpack_require__
     ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/dynamic",
-        function () {
-          return __webpack_require__(9381);
-        },
-      ]);
-      if (false) {
-      }
+      "use strict";
+      __webpack_require__.r(__webpack_exports__);
+      /* harmony export */ __webpack_require__.d(__webpack_exports__, {
+        /* harmony export */ __N_SSP: () => /* binding */ __N_SSP,
+        /* harmony export */ default: () => __WEBPACK_DEFAULT_EXPORT__,
+        /* harmony export */
+      });
+      /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
+        __webpack_require__(3108);
+      /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1__ =
+        __webpack_require__(3973);
+      /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1___default =
+        /*#__PURE__*/ __webpack_require__.n(
+          next_dynamic__WEBPACK_IMPORTED_MODULE_1__
+        );
+
+      const DynamicHello = next_dynamic__WEBPACK_IMPORTED_MODULE_1___default()(
+        () =>
+          __webpack_require__
+            .e(/* import() */ 1596)
+            .then(__webpack_require__.bind(__webpack_require__, 1596))
+            .then((mod) => mod.Hello),
+        {
+          loadableGenerated: {
+            webpack: () => [/*require.resolve*/ 1596],
+          },
+        }
+      );
+      const Page = () =>
+        /*#__PURE__*/ (0, react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(
+          react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment,
+          {
+            children: [
+              /*#__PURE__*/ (0,
+              react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", {
+                children: "testing next/dynamic size",
+              }),
+              /*#__PURE__*/ (0,
+              react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(
+                DynamicHello,
+                {}
+              ),
+            ],
+          }
+        );
+      var __N_SSP = true;
+      /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = Page;
 
       /***/
     },
 
-    /***/ 4464: /***/ (module, exports, __webpack_require__) => {
+    /***/ 3660: /***/ (module, exports, __webpack_require__) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -88,7 +456,7 @@
         __webpack_require__(4312)
       );
       const _loadablesharedruntime = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(9799)
+        __webpack_require__(4539)
       );
       const isServerSide = "object" === "undefined";
       // Normalize loader to return the module as form { default: Component } for `React.lazy`.
@@ -188,63 +556,17 @@
       /***/
     },
 
-    /***/ 9381: /***/ (
-      __unused_webpack_module,
-      __webpack_exports__,
+    /***/ 3973: /***/ (
+      module,
+      __unused_webpack_exports,
       __webpack_require__
     ) => {
-      "use strict";
-      __webpack_require__.r(__webpack_exports__);
-      /* harmony export */ __webpack_require__.d(__webpack_exports__, {
-        /* harmony export */ __N_SSP: () => /* binding */ __N_SSP,
-        /* harmony export */ default: () => __WEBPACK_DEFAULT_EXPORT__,
-        /* harmony export */
-      });
-      /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
-        __webpack_require__(3108);
-      /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(1231);
-      /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1___default =
-        /*#__PURE__*/ __webpack_require__.n(
-          next_dynamic__WEBPACK_IMPORTED_MODULE_1__
-        );
-
-      const DynamicHello = next_dynamic__WEBPACK_IMPORTED_MODULE_1___default()(
-        () =>
-          __webpack_require__
-            .e(/* import() */ 2086)
-            .then(__webpack_require__.bind(__webpack_require__, 2086))
-            .then((mod) => mod.Hello),
-        {
-          loadableGenerated: {
-            webpack: () => [/*require.resolve*/ 2086],
-          },
-        }
-      );
-      const Page = () =>
-        /*#__PURE__*/ (0, react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(
-          react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment,
-          {
-            children: [
-              /*#__PURE__*/ (0,
-              react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", {
-                children: "testing next/dynamic size",
-              }),
-              /*#__PURE__*/ (0,
-              react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(
-                DynamicHello,
-                {}
-              ),
-            ],
-          }
-        );
-      var __N_SSP = true;
-      /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = Page;
+      module.exports = __webpack_require__(3660);
 
       /***/
     },
 
-    /***/ 9799: /***/ (
+    /***/ 4539: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -286,7 +608,8 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
       const _react = /*#__PURE__*/ _interop_require_default._(
         __webpack_require__(4312)
       );
-      const _loadablecontextsharedruntime = __webpack_require__(2101);
+      const _loadablecontextsharedruntime = __webpack_require__(3401);
+      const _chunkloaderror = __webpack_require__(2758);
       function resolve(obj) {
         return obj && obj.default ? obj.default : obj;
       }
@@ -413,6 +736,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
           this._callbacks = new Set();
           this._delay = null;
           this._timeout = null;
+          this._hasAutoRetried = false;
           this.retry();
         }
         promise() {
@@ -451,7 +775,25 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
               this._update({});
               this._clearTimeouts();
             })
-            .catch((_err) => {
+            .catch((err) => {
+              // Auto-retry for chunk load errors (once)
+              // This handles transient network failures during dynamic imports
+              if (
+                true &&
+                (0, _chunkloaderror.isChunkLoadError)(err) &&
+                !this._hasAutoRetried
+              ) {
+                this._hasAutoRetried = true;
+                // Clear bundler's chunk cache so retry will fetch fresh
+                (0, _chunkloaderror.clearChunkCache)(err);
+                // Retry after a short delay with jitter
+                const delay = (0, _chunkloaderror.getRetryDelayMs)();
+                setTimeout(() => {
+                  this.retry();
+                }, delay);
+                return;
+              }
+              // No more retries - propagate error
               this._update({});
               this._clearTimeouts();
             });
@@ -518,13 +860,392 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
 
       /***/
     },
+
+    /***/ 7676: /***/ (module, exports, __webpack_require__) => {
+      "use strict";
+      /**
+       * Chunk load error handling with silent retry logic.
+       *
+       * This module provides retry orchestration for chunk/network loading failures.
+       * It tracks failures in sessionStorage per {route, buildId, chunkKey} and
+       * implements silent retry with jittered backoff.
+       */
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      0 && 0;
+      function _export(target, all) {
+        for (var name in all)
+          Object.defineProperty(target, name, {
+            enumerable: true,
+            get: all[name],
+          });
+      }
+      _export(exports, {
+        clearChunkCache: function () {
+          return clearChunkCache;
+        },
+        clearFailureState: function () {
+          return clearFailureState;
+        },
+        createChunkErrorContext: function () {
+          return createChunkErrorContext;
+        },
+        getFailCount: function () {
+          return getFailCount;
+        },
+        getRetryDelayMs: function () {
+          return getRetryDelayMs;
+        },
+        handleChunkFailure: function () {
+          return handleChunkFailure;
+        },
+        retryChunkImport: function () {
+          return retryChunkImport;
+        },
+        shouldSilentRetry: function () {
+          return shouldSilentRetry;
+        },
+        sleep: function () {
+          return sleep;
+        },
+      });
+      const _appbuildid = __webpack_require__(1033);
+      const _ischunkloaderror = __webpack_require__(9462);
+      const STORAGE_PREFIX = "__next_chunk_fail:";
+      const RETRY_WINDOW_MS = 30000; // Don't retry same chunk within 30s of a retry
+      const MAX_FAIL_COUNT_FOR_RETRY = 2; // After 2 failures, skip silent retry
+      /**
+       * Simple hash function for generating chunk keys when URL isn't available.
+       */ function simpleHash(str) {
+        let hash = 0;
+        for (let i = 0; i < str.length; i++) {
+          const char = str.charCodeAt(i);
+          hash = ((hash << 5) - hash + char) | 0;
+        }
+        return Math.abs(hash).toString(36);
+      }
+      /**
+       * Extract chunk URL from error message if possible.
+       * ChunkLoadError messages typically contain the URL.
+       */ function extractChunkUrl(error) {
+        const message = error.message;
+        // Turbopack format: "Failed to load chunk <url> from <reason>: <cause>"
+        // The URL can be relative (/_next/...) or absolute (http://...)
+        const turbopackMatch = message.match(
+          /Failed to load chunk ([^\s]+\.(?:js|css))/
+        );
+        if (turbopackMatch) {
+          return turbopackMatch[1];
+        }
+        // Webpack format: "Loading chunk <id> failed. (error: <url>)"
+        const webpackMatch = message.match(/https?:\/\/[^\s)]+/);
+        return webpackMatch?.[0];
+      }
+      /**
+       * Extract the chunk ID from a webpack chunk URL.
+       * URLs look like: /_next/static/chunks/123.hash.js
+       */ function extractWebpackChunkId(chunkUrl) {
+        // Match chunk ID from URL path: /chunks/123.abc123.js or /chunks/pages_foo_bar.abc123.js
+        const match = chunkUrl.match(/\/chunks\/([^/.]+)\.[a-f0-9]+\.js/);
+        return match?.[1];
+      }
+      function clearChunkCache(error) {
+        const chunkUrl = extractChunkUrl(error);
+        if (!chunkUrl) return false;
+        // Turbopack: clear by chunk URL
+        if (
+          typeof globalThis.__turbopack_clear_chunk_resolver__ === "function"
+        ) {
+          // Extract the relative URL path that Turbopack uses as key
+          try {
+            const url = new URL(chunkUrl);
+            globalThis.__turbopack_clear_chunk_resolver__(
+              url.pathname + url.search
+            );
+            return true;
+          } catch {
+            // Invalid URL, try using the full URL
+            globalThis.__turbopack_clear_chunk_resolver__(chunkUrl);
+            return true;
+          }
+        }
+        // Webpack: extract chunk ID from URL and clear by ID
+        if (typeof globalThis.__next_clear_chunk_cache__ === "function") {
+          const chunkId = extractWebpackChunkId(chunkUrl);
+          if (chunkId) {
+            globalThis.__next_clear_chunk_cache__(chunkId);
+            return true;
+          }
+        }
+        return false;
+      }
+      /**
+       * Generate a unique key for this chunk error, used for deduplication.
+       */ function getChunkKey(ctx) {
+        return ctx.chunkUrl ?? simpleHash(ctx.message);
+      }
+      /**
+       * Get the sessionStorage key for tracking this chunk failure.
+       */ function getStorageKey(ctx) {
+        const buildId = (0, _appbuildid.getAppBuildId)();
+        const chunkKey = getChunkKey(ctx);
+        return `${STORAGE_PREFIX}${buildId}:${ctx.route}:${chunkKey}`;
+      }
+      /**
+       * Read failure state from sessionStorage.
+       */ function readFailureState(key) {
+        if (typeof sessionStorage === "undefined") return null;
+        try {
+          const stored = sessionStorage.getItem(key);
+          if (!stored) return null;
+          return JSON.parse(stored);
+        } catch {
+          return null;
+        }
+      }
+      /**
+       * Write failure state to sessionStorage.
+       */ function writeFailureState(key, state) {
+        if (typeof sessionStorage === "undefined") return;
+        try {
+          sessionStorage.setItem(key, JSON.stringify(state));
+        } catch {
+          // Storage might be full or disabled - continue without tracking
+        }
+      }
+      function clearFailureState(route) {
+        if (typeof sessionStorage === "undefined") return;
+        try {
+          const buildId = (0, _appbuildid.getAppBuildId)();
+          const prefix = `${STORAGE_PREFIX}${buildId}:${route}:`;
+          const keysToRemove = [];
+          for (let i = 0; i < sessionStorage.length; i++) {
+            const key = sessionStorage.key(i);
+            if (key?.startsWith(prefix)) {
+              keysToRemove.push(key);
+            }
+          }
+          keysToRemove.forEach((key) => sessionStorage.removeItem(key));
+        } catch {
+          // Ignore storage errors
+        }
+      }
+      /**
+       * Increment the failure count for this chunk.
+       */ function bumpFailCount(ctx) {
+        const key = getStorageKey(ctx);
+        const existing = readFailureState(key);
+        const now = Date.now();
+        const state = {
+          failCount: (existing?.failCount ?? 0) + 1,
+          lastTs: now,
+          retriedTs: existing?.retriedTs,
+        };
+        writeFailureState(key, state);
+        return state;
+      }
+      /**
+       * Mark that a retry was attempted for this chunk.
+       */ function markRetried(ctx) {
+        const key = getStorageKey(ctx);
+        const existing = readFailureState(key);
+        const now = Date.now();
+        const state = {
+          failCount: existing?.failCount ?? 1,
+          lastTs: existing?.lastTs ?? now,
+          retriedTs: now,
+        };
+        writeFailureState(key, state);
+      }
+      function shouldSilentRetry(ctx) {
+        // Don't retry if offline
+        if (typeof navigator !== "undefined" && !navigator.onLine) {
+          return false;
+        }
+        const key = getStorageKey(ctx);
+        const state = readFailureState(key);
+        const now = Date.now();
+        // If we already retried within the window, don't retry again
+        if (state?.retriedTs && now - state.retriedTs < RETRY_WINDOW_MS) {
+          return false;
+        }
+        // Too many failures - skip silent retry to avoid annoying the user
+        if ((state?.failCount ?? 0) >= MAX_FAIL_COUNT_FOR_RETRY) {
+          return false;
+        }
+        return true;
+      }
+      function getFailCount(ctx) {
+        const key = getStorageKey(ctx);
+        const state = readFailureState(key);
+        return state?.failCount ?? 0;
+      }
+      function getRetryDelayMs() {
+        const baseDelay = 200;
+        const jitter = Math.floor(Math.random() * 401); // 0-400ms
+        // Get RTT if available via Network Information API
+        let rtt = 0;
+        if (typeof navigator !== "undefined" && "connection" in navigator) {
+          const connection = navigator.connection;
+          if (connection?.rtt) {
+            rtt = Math.min(500, connection.rtt); // Cap at 500ms
+          }
+        }
+        return Math.min(1500, baseDelay + jitter + rtt); // Cap total at 1500ms
+      }
+      function sleep(ms) {
+        return new Promise((resolve) => setTimeout(resolve, ms));
+      }
+      function createChunkErrorContext(error, route, userVisible = true) {
+        if (
+          !(0, _ischunkloaderror.isChunkLoadError)(error) &&
+          !(0, _ischunkloaderror.isNetworkError)(error)
+        ) {
+          return null;
+        }
+        return {
+          route,
+          userVisible,
+          message: error.message,
+          chunkUrl: extractChunkUrl(error),
+        };
+      }
+      function handleChunkFailure(ctx) {
+        // Always increment fail count first
+        bumpFailCount(ctx);
+        // Check if we should try a silent retry
+        if (shouldSilentRetry(ctx)) {
+          markRetried(ctx);
+          return "retry";
+        }
+        // Show banner to the user
+        return "banner";
+      }
+      async function retryChunkImport(ctx, importFn) {
+        const action = handleChunkFailure(ctx);
+        if (action === "retry") {
+          const delay = getRetryDelayMs();
+          await sleep(delay);
+          return importFn();
+        }
+        // If we shouldn't retry, re-throw to trigger error boundary
+        throw Object.defineProperty(
+          new Error("Chunk load failed after retry attempts"),
+          "__NEXT_ERROR_CODE",
+          {
+            value: "E976",
+            enumerable: false,
+            configurable: true,
+          }
+        );
+      }
+      if (
+        (typeof exports.default === "function" ||
+          (typeof exports.default === "object" && exports.default !== null)) &&
+        typeof exports.default.__esModule === "undefined"
+      ) {
+        Object.defineProperty(exports.default, "__esModule", {
+          value: true,
+        });
+        Object.assign(exports.default, exports);
+        module.exports = exports.default;
+      } //# sourceMappingURL=chunk-load-error-handler.js.map
+
+      /***/
+    },
+
+    /***/ 9462: /***/ (module, exports) => {
+      "use strict";
+      /**
+       * Utilities for detecting chunk load errors and network failures.
+       *
+       * ChunkLoadError can come from:
+       * - Turbopack: error.name === 'ChunkLoadError'
+       * - Webpack: error.name === 'ChunkLoadError'
+       *
+       * We intentionally keep detection narrow to avoid false positives:
+       * - Server 4xx/5xx responses don't throw (they return Response objects)
+       * - We should NOT retry CORS errors, AbortErrors, or parsing failures
+       */ /**
+       * Detects if an error is a ChunkLoadError from Turbopack or webpack.
+       * This is the most reliable check - both bundlers explicitly set this error name.
+       */
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      0 && 0;
+      function _export(target, all) {
+        for (var name in all)
+          Object.defineProperty(target, name, {
+            enumerable: true,
+            get: all[name],
+          });
+      }
+      _export(exports, {
+        isChunkLoadError: function () {
+          return isChunkLoadError;
+        },
+        isChunkOrNetworkError: function () {
+          return isChunkOrNetworkError;
+        },
+        isNetworkError: function () {
+          return isNetworkError;
+        },
+      });
+      function isChunkLoadError(error) {
+        if (!error || typeof error !== "object") return false;
+        return error.name === "ChunkLoadError";
+      }
+      function isNetworkError(error) {
+        if (!error || typeof error !== "object") return false;
+        const err = error;
+        // Never retry intentional aborts
+        if (err.name === "AbortError") return false;
+        // TypeError with specific fetch failure messages
+        // These occur when the network request itself fails (not CORS, not server error)
+        if (err.name === "TypeError") {
+          const message = err.message || "";
+          // Browser-specific network failure messages
+          // Chrome/Edge: "Failed to fetch"
+          // Firefox: "NetworkError when attempting to fetch resource"
+          // Safari: "Load failed" or "The Internet connection appears to be offline"
+          if (
+            message === "Failed to fetch" ||
+            message.startsWith("NetworkError when attempting to fetch") ||
+            message === "Load failed" ||
+            message.includes("Internet connection appears to be offline") ||
+            message.includes("network connection was lost")
+          ) {
+            return true;
+          }
+        }
+        return false;
+      }
+      function isChunkOrNetworkError(error) {
+        return isChunkLoadError(error) || isNetworkError(error);
+      }
+      if (
+        (typeof exports.default === "function" ||
+          (typeof exports.default === "object" && exports.default !== null)) &&
+        typeof exports.default.__esModule === "undefined"
+      ) {
+        Object.defineProperty(exports.default, "__esModule", {
+          value: true,
+        });
+        Object.assign(exports.default, exports);
+        module.exports = exports.default;
+      } //# sourceMappingURL=is-chunk-load-error.js.map
+
+      /***/
+    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(3458)
+      __webpack_exec__(2604)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for edge-ssr-HASH.js
@@ -1,7 +1,24 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [676],
   {
-    /***/ 1564: /***/ (
+    /***/ 7046: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/edge-ssr",
+        function () {
+          return __webpack_require__(7142);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
+
+    /***/ 7142: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -20,30 +37,13 @@
 
       /***/
     },
-
-    /***/ 4300: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/edge-ssr",
-        function () {
-          return __webpack_require__(1564);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(4300)
+      __webpack_exec__(7046)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for head-HASH.js
@@ -1,34 +1,17 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [5350],
   {
-    /***/ 1548: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/head",
-        function () {
-          return __webpack_require__(4282);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
-
-    /***/ 3952: /***/ (
+    /***/ 3770: /***/ (
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
-      module.exports = __webpack_require__(1653);
+      module.exports = __webpack_require__(9025);
 
       /***/
     },
 
-    /***/ 4282: /***/ (
+    /***/ 6236: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -43,7 +26,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(3108);
       /* harmony import */ var next_head__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(3952);
+        __webpack_require__(3770);
       /* harmony import */ var next_head__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_head__WEBPACK_IMPORTED_MODULE_1__
@@ -76,13 +59,30 @@
 
       /***/
     },
+
+    /***/ 6510: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/head",
+        function () {
+          return __webpack_require__(6236);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(1548)
+      __webpack_exec__(6510)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for index-HASH.js
@@ -1,24 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [3332],
   {
-    /***/ 6376: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/",
-        function () {
-          return __webpack_require__(8460);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
-
-    /***/ 8460: /***/ (
+    /***/ 830: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -36,13 +19,30 @@
 
       /***/
     },
+
+    /***/ 1938: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/",
+        function () {
+          return __webpack_require__(830);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(6376)
+      __webpack_exec__(1938)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for link-HASH.js
@@ -1,7 +1,220 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [4672],
   {
-    /***/ 857: /***/ (module, exports, __webpack_require__) => {
+    /***/ 2774: /***/ (module, exports, __webpack_require__) => {
+      "use strict";
+
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      Object.defineProperty(exports, "useIntersection", {
+        enumerable: true,
+        get: function () {
+          return useIntersection;
+        },
+      });
+      const _react = __webpack_require__(4312);
+      const _requestidlecallback = __webpack_require__(9413);
+      const hasIntersectionObserver =
+        typeof IntersectionObserver === "function";
+      const observers = new Map();
+      const idList = [];
+      function createObserver(options) {
+        const id = {
+          root: options.root || null,
+          margin: options.rootMargin || "",
+        };
+        const existing = idList.find(
+          (obj) => obj.root === id.root && obj.margin === id.margin
+        );
+        let instance;
+        if (existing) {
+          instance = observers.get(existing);
+          if (instance) {
+            return instance;
+          }
+        }
+        const elements = new Map();
+        const observer = new IntersectionObserver((entries) => {
+          entries.forEach((entry) => {
+            const callback = elements.get(entry.target);
+            const isVisible =
+              entry.isIntersecting || entry.intersectionRatio > 0;
+            if (callback && isVisible) {
+              callback(isVisible);
+            }
+          });
+        }, options);
+        instance = {
+          id,
+          observer,
+          elements,
+        };
+        idList.push(id);
+        observers.set(id, instance);
+        return instance;
+      }
+      function observe(element, callback, options) {
+        const { id, observer, elements } = createObserver(options);
+        elements.set(element, callback);
+        observer.observe(element);
+        return function unobserve() {
+          elements.delete(element);
+          observer.unobserve(element);
+          // Destroy observer when there's nothing left to watch:
+          if (elements.size === 0) {
+            observer.disconnect();
+            observers.delete(id);
+            const index = idList.findIndex(
+              (obj) => obj.root === id.root && obj.margin === id.margin
+            );
+            if (index > -1) {
+              idList.splice(index, 1);
+            }
+          }
+        };
+      }
+      function useIntersection({ rootRef, rootMargin, disabled }) {
+        const isDisabled = disabled || !hasIntersectionObserver;
+        const [visible, setVisible] = (0, _react.useState)(false);
+        const elementRef = (0, _react.useRef)(null);
+        const setElement = (0, _react.useCallback)((element) => {
+          elementRef.current = element;
+        }, []);
+        (0, _react.useEffect)(() => {
+          if (hasIntersectionObserver) {
+            if (isDisabled || visible) return;
+            const element = elementRef.current;
+            if (element && element.tagName) {
+              const unobserve = observe(
+                element,
+                (isVisible) => isVisible && setVisible(isVisible),
+                {
+                  root: rootRef?.current,
+                  rootMargin,
+                }
+              );
+              return unobserve;
+            }
+          } else {
+            if (!visible) {
+              const idleCallback = (0,
+              _requestidlecallback.requestIdleCallback)(() => setVisible(true));
+              return () =>
+                (0, _requestidlecallback.cancelIdleCallback)(idleCallback);
+            }
+          }
+          // eslint-disable-next-line react-hooks/exhaustive-deps
+        }, [isDisabled, rootMargin, rootRef, visible, elementRef.current]);
+        const resetVisible = (0, _react.useCallback)(() => {
+          setVisible(false);
+        }, []);
+        return [setElement, visible, resetVisible];
+      }
+      if (
+        (typeof exports.default === "function" ||
+          (typeof exports.default === "object" && exports.default !== null)) &&
+        typeof exports.default.__esModule === "undefined"
+      ) {
+        Object.defineProperty(exports.default, "__esModule", {
+          value: true,
+        });
+        Object.assign(exports.default, exports);
+        module.exports = exports.default;
+      } //# sourceMappingURL=use-intersection.js.map
+
+      /***/
+    },
+
+    /***/ 3351: /***/ (module, exports, __webpack_require__) => {
+      "use strict";
+
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      Object.defineProperty(exports, "useMergedRef", {
+        enumerable: true,
+        get: function () {
+          return useMergedRef;
+        },
+      });
+      const _react = __webpack_require__(4312);
+      function useMergedRef(refA, refB) {
+        const cleanupA = (0, _react.useRef)(null);
+        const cleanupB = (0, _react.useRef)(null);
+        // NOTE: In theory, we could skip the wrapping if only one of the refs is non-null.
+        // (this happens often if the user doesn't pass a ref to Link/Form/Image)
+        // But this can cause us to leak a cleanup-ref into user code (previously via `<Link legacyBehavior>`),
+        // and the user might pass that ref into ref-merging library that doesn't support cleanup refs
+        // (because it hasn't been updated for React 19)
+        // which can then cause things to blow up, because a cleanup-returning ref gets called with `null`.
+        // So in practice, it's safer to be defensive and always wrap the ref, even on React 19.
+        return (0, _react.useCallback)(
+          (current) => {
+            if (current === null) {
+              const cleanupFnA = cleanupA.current;
+              if (cleanupFnA) {
+                cleanupA.current = null;
+                cleanupFnA();
+              }
+              const cleanupFnB = cleanupB.current;
+              if (cleanupFnB) {
+                cleanupB.current = null;
+                cleanupFnB();
+              }
+            } else {
+              if (refA) {
+                cleanupA.current = applyRef(refA, current);
+              }
+              if (refB) {
+                cleanupB.current = applyRef(refB, current);
+              }
+            }
+          },
+          [refA, refB]
+        );
+      }
+      function applyRef(refA, current) {
+        if (typeof refA === "function") {
+          const cleanup = refA(current);
+          if (typeof cleanup === "function") {
+            return cleanup;
+          } else {
+            return () => refA(null);
+          }
+        } else {
+          refA.current = current;
+          return () => {
+            refA.current = null;
+          };
+        }
+      }
+      if (
+        (typeof exports.default === "function" ||
+          (typeof exports.default === "object" && exports.default !== null)) &&
+        typeof exports.default.__esModule === "undefined"
+      ) {
+        Object.defineProperty(exports.default, "__esModule", {
+          value: true,
+        });
+        Object.assign(exports.default, exports);
+        module.exports = exports.default;
+      } //# sourceMappingURL=use-merged-ref.js.map
+
+      /***/
+    },
+
+    /***/ 3440: /***/ (
+      module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      module.exports = __webpack_require__(4757);
+
+      /***/
+    },
+
+    /***/ 4757: /***/ (module, exports, __webpack_require__) => {
       "use strict";
       /* __next_internal_client_entry_do_not_use__  cjs */
       Object.defineProperty(exports, "__esModule", {
@@ -23,22 +236,22 @@
           return useLinkStatus;
         },
       });
-      const _interop_require_wildcard = __webpack_require__(8781);
+      const _interop_require_wildcard = __webpack_require__(1162);
       const _jsxruntime = __webpack_require__(3108);
       const _react = /*#__PURE__*/ _interop_require_wildcard._(
         __webpack_require__(4312)
       );
-      const _resolvehref = __webpack_require__(4055);
-      const _islocalurl = __webpack_require__(7175);
-      const _formaturl = __webpack_require__(9674);
-      const _utils = __webpack_require__(7424);
-      const _addlocale = __webpack_require__(589);
-      const _routercontextsharedruntime = __webpack_require__(7010);
-      const _useintersection = __webpack_require__(2330);
-      const _getdomainlocale = __webpack_require__(7207);
-      const _addbasepath = __webpack_require__(9942);
-      const _usemergedref = __webpack_require__(8067);
-      const _erroronce = __webpack_require__(1945);
+      const _resolvehref = __webpack_require__(4691);
+      const _islocalurl = __webpack_require__(4763);
+      const _formaturl = __webpack_require__(3246);
+      const _utils = __webpack_require__(7372);
+      const _addlocale = __webpack_require__(1809);
+      const _routercontextsharedruntime = __webpack_require__(2254);
+      const _useintersection = __webpack_require__(2774);
+      const _getdomainlocale = __webpack_require__(8803);
+      const _addbasepath = __webpack_require__(5834);
+      const _usemergedref = __webpack_require__(3351);
+      const _erroronce = __webpack_require__(6021);
       const prefetched = new Set();
       function prefetch(router, href, as, options) {
         if (false) {
@@ -417,168 +630,43 @@
       /***/
     },
 
-    /***/ 1945: /***/ (__unused_webpack_module, exports) => {
-      "use strict";
-
-      Object.defineProperty(exports, "__esModule", {
-        value: true,
-      });
-      Object.defineProperty(exports, "errorOnce", {
-        enumerable: true,
-        get: function () {
-          return errorOnce;
+    /***/ 5326: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/link",
+        function () {
+          return __webpack_require__(9058);
         },
-      });
-      let errorOnce = (_) => {};
+      ]);
       if (false) {
-      } //# sourceMappingURL=error-once.js.map
+      }
 
       /***/
     },
 
-    /***/ 2330: /***/ (module, exports, __webpack_require__) => {
+    /***/ 6021: /***/ (__unused_webpack_module, exports) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
         value: true,
       });
-      Object.defineProperty(exports, "useIntersection", {
+      Object.defineProperty(exports, "errorOnce", {
         enumerable: true,
         get: function () {
-          return useIntersection;
+          return errorOnce;
         },
       });
-      const _react = __webpack_require__(4312);
-      const _requestidlecallback = __webpack_require__(601);
-      const hasIntersectionObserver =
-        typeof IntersectionObserver === "function";
-      const observers = new Map();
-      const idList = [];
-      function createObserver(options) {
-        const id = {
-          root: options.root || null,
-          margin: options.rootMargin || "",
-        };
-        const existing = idList.find(
-          (obj) => obj.root === id.root && obj.margin === id.margin
-        );
-        let instance;
-        if (existing) {
-          instance = observers.get(existing);
-          if (instance) {
-            return instance;
-          }
-        }
-        const elements = new Map();
-        const observer = new IntersectionObserver((entries) => {
-          entries.forEach((entry) => {
-            const callback = elements.get(entry.target);
-            const isVisible =
-              entry.isIntersecting || entry.intersectionRatio > 0;
-            if (callback && isVisible) {
-              callback(isVisible);
-            }
-          });
-        }, options);
-        instance = {
-          id,
-          observer,
-          elements,
-        };
-        idList.push(id);
-        observers.set(id, instance);
-        return instance;
-      }
-      function observe(element, callback, options) {
-        const { id, observer, elements } = createObserver(options);
-        elements.set(element, callback);
-        observer.observe(element);
-        return function unobserve() {
-          elements.delete(element);
-          observer.unobserve(element);
-          // Destroy observer when there's nothing left to watch:
-          if (elements.size === 0) {
-            observer.disconnect();
-            observers.delete(id);
-            const index = idList.findIndex(
-              (obj) => obj.root === id.root && obj.margin === id.margin
-            );
-            if (index > -1) {
-              idList.splice(index, 1);
-            }
-          }
-        };
-      }
-      function useIntersection({ rootRef, rootMargin, disabled }) {
-        const isDisabled = disabled || !hasIntersectionObserver;
-        const [visible, setVisible] = (0, _react.useState)(false);
-        const elementRef = (0, _react.useRef)(null);
-        const setElement = (0, _react.useCallback)((element) => {
-          elementRef.current = element;
-        }, []);
-        (0, _react.useEffect)(() => {
-          if (hasIntersectionObserver) {
-            if (isDisabled || visible) return;
-            const element = elementRef.current;
-            if (element && element.tagName) {
-              const unobserve = observe(
-                element,
-                (isVisible) => isVisible && setVisible(isVisible),
-                {
-                  root: rootRef?.current,
-                  rootMargin,
-                }
-              );
-              return unobserve;
-            }
-          } else {
-            if (!visible) {
-              const idleCallback = (0,
-              _requestidlecallback.requestIdleCallback)(() => setVisible(true));
-              return () =>
-                (0, _requestidlecallback.cancelIdleCallback)(idleCallback);
-            }
-          }
-          // eslint-disable-next-line react-hooks/exhaustive-deps
-        }, [isDisabled, rootMargin, rootRef, visible, elementRef.current]);
-        const resetVisible = (0, _react.useCallback)(() => {
-          setVisible(false);
-        }, []);
-        return [setElement, visible, resetVisible];
-      }
-      if (
-        (typeof exports.default === "function" ||
-          (typeof exports.default === "object" && exports.default !== null)) &&
-        typeof exports.default.__esModule === "undefined"
-      ) {
-        Object.defineProperty(exports.default, "__esModule", {
-          value: true,
-        });
-        Object.assign(exports.default, exports);
-        module.exports = exports.default;
-      } //# sourceMappingURL=use-intersection.js.map
-
-      /***/
-    },
-
-    /***/ 4972: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/link",
-        function () {
-          return __webpack_require__(7600);
-        },
-      ]);
+      let errorOnce = (_) => {};
       if (false) {
-      }
+      } //# sourceMappingURL=error-once.js.map
 
       /***/
     },
 
-    /***/ 7207: /***/ (module, exports, __webpack_require__) => {
+    /***/ 8803: /***/ (module, exports, __webpack_require__) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -590,7 +678,7 @@
           return getDomainLocale;
         },
       });
-      const _normalizetrailingslash = __webpack_require__(151);
+      const _normalizetrailingslash = __webpack_require__(1315);
       const basePath =
         /* unused pure expression or super */ null && (false || "");
       function getDomainLocale(path, locale, locales, domainLocales) {
@@ -614,7 +702,7 @@
       /***/
     },
 
-    /***/ 7600: /***/ (
+    /***/ 9058: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -629,7 +717,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(3108);
       /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(7830);
+        __webpack_require__(3440);
       /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_link__WEBPACK_IMPORTED_MODULE_1__
@@ -659,101 +747,13 @@
 
       /***/
     },
-
-    /***/ 7830: /***/ (
-      module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      module.exports = __webpack_require__(857);
-
-      /***/
-    },
-
-    /***/ 8067: /***/ (module, exports, __webpack_require__) => {
-      "use strict";
-
-      Object.defineProperty(exports, "__esModule", {
-        value: true,
-      });
-      Object.defineProperty(exports, "useMergedRef", {
-        enumerable: true,
-        get: function () {
-          return useMergedRef;
-        },
-      });
-      const _react = __webpack_require__(4312);
-      function useMergedRef(refA, refB) {
-        const cleanupA = (0, _react.useRef)(null);
-        const cleanupB = (0, _react.useRef)(null);
-        // NOTE: In theory, we could skip the wrapping if only one of the refs is non-null.
-        // (this happens often if the user doesn't pass a ref to Link/Form/Image)
-        // But this can cause us to leak a cleanup-ref into user code (previously via `<Link legacyBehavior>`),
-        // and the user might pass that ref into ref-merging library that doesn't support cleanup refs
-        // (because it hasn't been updated for React 19)
-        // which can then cause things to blow up, because a cleanup-returning ref gets called with `null`.
-        // So in practice, it's safer to be defensive and always wrap the ref, even on React 19.
-        return (0, _react.useCallback)(
-          (current) => {
-            if (current === null) {
-              const cleanupFnA = cleanupA.current;
-              if (cleanupFnA) {
-                cleanupA.current = null;
-                cleanupFnA();
-              }
-              const cleanupFnB = cleanupB.current;
-              if (cleanupFnB) {
-                cleanupB.current = null;
-                cleanupFnB();
-              }
-            } else {
-              if (refA) {
-                cleanupA.current = applyRef(refA, current);
-              }
-              if (refB) {
-                cleanupB.current = applyRef(refB, current);
-              }
-            }
-          },
-          [refA, refB]
-        );
-      }
-      function applyRef(refA, current) {
-        if (typeof refA === "function") {
-          const cleanup = refA(current);
-          if (typeof cleanup === "function") {
-            return cleanup;
-          } else {
-            return () => refA(null);
-          }
-        } else {
-          refA.current = current;
-          return () => {
-            refA.current = null;
-          };
-        }
-      }
-      if (
-        (typeof exports.default === "function" ||
-          (typeof exports.default === "object" && exports.default !== null)) &&
-        typeof exports.default.__esModule === "undefined"
-      ) {
-        Object.defineProperty(exports.default, "__esModule", {
-          value: true,
-        });
-        Object.assign(exports.default, exports);
-        module.exports = exports.default;
-      } //# sourceMappingURL=use-merged-ref.js.map
-
-      /***/
-    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(4972)
+      __webpack_exec__(5326)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for routerDirect-HASH.js
@@ -1,17 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [188],
   {
-    /***/ 1179: /***/ (
-      module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      module.exports = __webpack_require__(9864);
-
-      /***/
-    },
-
-    /***/ 1640: /***/ (
+    /***/ 2014: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -26,7 +16,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(3108);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(1179);
+        __webpack_require__(4169);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_router__WEBPACK_IMPORTED_MODULE_1__
@@ -46,7 +36,17 @@
       /***/
     },
 
-    /***/ 2172: /***/ (
+    /***/ 4169: /***/ (
+      module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      module.exports = __webpack_require__(9700);
+
+      /***/
+    },
+
+    /***/ 4414: /***/ (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -54,7 +54,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/routerDirect",
         function () {
-          return __webpack_require__(1640);
+          return __webpack_require__(2014);
         },
       ]);
       if (false) {
@@ -68,7 +68,7 @@
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(2172)
+      __webpack_exec__(4414)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for script-HASH.js
@@ -1,17 +1,34 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [1209],
   {
-    /***/ 4977: /***/ (
+    /***/ 2591: /***/ (
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
-      module.exports = __webpack_require__(326);
+      module.exports = __webpack_require__(4634);
 
       /***/
     },
 
-    /***/ 5887: /***/ (
+    /***/ 5030: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/script",
+        function () {
+          return __webpack_require__(7557);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
+
+    /***/ 7557: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -26,7 +43,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(3108);
       /* harmony import */ var next_script__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(4977);
+        __webpack_require__(2591);
       /* harmony import */ var next_script__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_script__WEBPACK_IMPORTED_MODULE_1__
@@ -58,30 +75,13 @@
 
       /***/
     },
-
-    /***/ 6268: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/script",
-        function () {
-          return __webpack_require__(5887);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(6268)
+      __webpack_exec__(5030)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for withRouter-HASH.js
@@ -1,34 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [3263],
   {
-    /***/ 1179: /***/ (
-      module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      module.exports = __webpack_require__(9864);
-
-      /***/
-    },
-
-    /***/ 2028: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/withRouter",
-        function () {
-          return __webpack_require__(4501);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
-
-    /***/ 4501: /***/ (
+    /***/ 559: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -43,7 +16,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(3108);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(1179);
+        __webpack_require__(4169);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_router__WEBPACK_IMPORTED_MODULE_1__
@@ -61,13 +34,40 @@
 
       /***/
     },
+
+    /***/ 726: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/withRouter",
+        function () {
+          return __webpack_require__(559);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
+
+    /***/ 4169: /***/ (
+      module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      module.exports = __webpack_require__(9700);
+
+      /***/
+    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(2028)
+      __webpack_exec__(726)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for 2161-HASH.js

Diff too large to display

Diff for 2747-HASH.js

Diff too large to display

Diff for 4322-HASH.js
failed to diff
Diff for main-HASH.js

Diff too large to display

Diff for webpack-HASH.js
@@ -205,7 +205,7 @@
     /******/ __webpack_require__.u = (chunkId) => {
       /******/ // return url for filenames based on template
       /******/ return (
-        "static/chunks/" + chunkId + "." + "9c9ddbde79ea2f29" + ".js"
+        "static/chunks/" + chunkId + "." + "871ca3fb4b1caa0e" + ".js"
       );
       /******/
     };
@@ -380,6 +380,23 @@
       /******/
     };
     /******/
+    /******/ // Next.js chunk cache clearing for retry logic
+    /******/ if (typeof globalThis !== "undefined") {
+      /******/ globalThis.__next_clear_chunk_cache__ = function (chunkId) {
+        /******/ // Only clear if not already loaded (0 means loaded)
+        /******/ if (
+          installedChunks[chunkId] !== 0 &&
+          installedChunks[chunkId] !== undefined
+        ) {
+          /******/ delete installedChunks[chunkId];
+          /******/
+        }
+        /******/
+      };
+      /******/
+    }
+    /******/
+    /******/
     /******/ __webpack_require__.f.j = (chunkId, promises) => {
       /******/ // JSONP chunk loading for javascript
       /******/ var installedChunkData = __webpack_require__.o(
Diff for app-page-exp..ntime.dev.js

Diff too large to display

Diff for app-page-exp..time.prod.js
failed to diff
Diff for app-page-tur..ntime.dev.js

Diff too large to display

Diff for app-page-tur..time.prod.js
failed to diff
Diff for app-page-tur..ntime.dev.js

Diff too large to display

Diff for app-page-tur..time.prod.js

Diff too large to display

Diff for app-page.runtime.dev.js

Diff too large to display

Diff for app-page.runtime.prod.js

Diff too large to display

Diff for pages-turbo...ntime.dev.js

Diff too large to display

Diff for pages-turbo...time.prod.js

Diff too large to display

Diff for pages.runtime.dev.js

Diff too large to display

Diff for pages.runtime.prod.js

Diff too large to display

Commit: 799a0ce

@feedthejim feedthejim force-pushed the chunk-load-error-retry branch from 0cf6b84 to 799a0ce Compare January 2, 2026 14:03
@feedthejim feedthejim force-pushed the chunk-load-error-banner branch from a12e5f7 to 39c5db5 Compare January 2, 2026 14:03
@nextjs-bot
Copy link
Collaborator

nextjs-bot commented Jan 2, 2026

Stats from current PR

Default Build (Increase detected ⚠️)
General Overall increase ⚠️
vercel/next.js canary vercel/next.js chunk-load-error-retry Change
buildDuration 17.5s 14.8s N/A
buildDurationCached 13.9s 10.9s N/A
nodeModulesSize 457 MB 457 MB ⚠️ +913 kB
nextStartRea..uration (ms) 719ms 718ms N/A
Client Bundles (main, webpack) Overall increase ⚠️
vercel/next.js canary vercel/next.js chunk-load-error-retry Change
2086.HASH.js gzip 169 B 169 B
2161-HASH.js gzip 5.39 kB 5.41 kB N/A
2747-HASH.js gzip 4.48 kB 4.46 kB N/A
4322-HASH.js gzip 51.2 kB 54.6 kB ⚠️ +3.36 kB
ec793fe8-HASH.js gzip 62.3 kB 62.3 kB N/A
framework-HASH.js gzip 59.8 kB 59.8 kB N/A
main-app-HASH.js gzip 251 B 254 B N/A
main-HASH.js gzip 38.4 kB 38.7 kB ⚠️ +369 B
webpack-HASH.js gzip 1.68 kB 1.73 kB N/A
Overall change 89.8 kB 93.5 kB ⚠️ +3.73 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary vercel/next.js chunk-load-error-retry Change
polyfills-HASH.js gzip 39.4 kB 39.4 kB
Overall change 39.4 kB 39.4 kB
Client Pages Overall increase ⚠️
vercel/next.js canary vercel/next.js chunk-load-error-retry Change
_app-HASH.js gzip 194 B 193 B N/A
_error-HASH.js gzip 182 B 182 B
css-HASH.js gzip 336 B 335 B N/A
dynamic-HASH.js gzip 1.8 kB 3.18 kB ⚠️ +1.39 kB
edge-ssr-HASH.js gzip 256 B 256 B
head-HASH.js gzip 352 B 349 B N/A
hooks-HASH.js gzip 385 B 384 B N/A
image-HASH.js gzip 580 B 580 B
index-HASH.js gzip 259 B 258 B N/A
link-HASH.js gzip 2.5 kB 2.51 kB N/A
routerDirect..HASH.js gzip 319 B 317 B N/A
script-HASH.js gzip 385 B 387 B N/A
withRouter-HASH.js gzip 316 B 315 B N/A
1afbb74e6ecf..834.css gzip 106 B 106 B
Overall change 2.92 kB 4.31 kB ⚠️ +1.39 kB
Client Build Manifests
vercel/next.js canary vercel/next.js chunk-load-error-retry Change
_buildManifest.js gzip 738 B 738 B
Overall change 738 B 738 B
Rendered Page Sizes
vercel/next.js canary vercel/next.js chunk-load-error-retry Change
index.html gzip 523 B 524 B N/A
link.html gzip 538 B 538 B
withRouter.html gzip 520 B 520 B
Overall change 1.06 kB 1.06 kB
Edge SSR bundle Size Overall increase ⚠️
vercel/next.js canary vercel/next.js chunk-load-error-retry Change
edge-ssr.js gzip 124 kB 124 kB N/A
page.js gzip 237 kB 241 kB ⚠️ +3.56 kB
Overall change 237 kB 241 kB ⚠️ +3.56 kB
Middleware size Overall increase ⚠️
vercel/next.js canary vercel/next.js chunk-load-error-retry Change
middleware-b..fest.js gzip 653 B 655 B N/A
middleware-r..fest.js gzip 155 B 156 B N/A
middleware.js gzip 32.6 kB 32.9 kB ⚠️ +334 B
edge-runtime..pack.js gzip 846 B 846 B
Overall change 33.4 kB 33.7 kB ⚠️ +334 B
Next Runtimes Overall increase ⚠️
vercel/next.js canary vercel/next.js chunk-load-error-retry Change
app-page-exp...dev.js gzip 301 kB 304 kB ⚠️ +2.84 kB
app-page-exp..prod.js gzip 156 kB 158 kB ⚠️ +2.05 kB
app-page-tur...dev.js gzip 301 kB 304 kB ⚠️ +2.85 kB
app-page-tur..prod.js gzip 156 kB 158 kB ⚠️ +2.05 kB
app-page-tur...dev.js gzip 298 kB 301 kB ⚠️ +2.91 kB
app-page-tur..prod.js gzip 154 kB 156 kB ⚠️ +2.01 kB
app-page.run...dev.js gzip 298 kB 301 kB ⚠️ +2.9 kB
app-page.run..prod.js gzip 154 kB 156 kB ⚠️ +2.01 kB
app-route-ex...dev.js gzip 68.7 kB 68.7 kB
app-route-ex..prod.js gzip 47.5 kB 47.5 kB
app-route-tu...dev.js gzip 68.7 kB 68.7 kB
app-route-tu..prod.js gzip 47.5 kB 47.5 kB
app-route-tu...dev.js gzip 68.3 kB 68.3 kB
app-route-tu..prod.js gzip 47.3 kB 47.3 kB
app-route.ru...dev.js gzip 68.3 kB 68.3 kB
app-route.ru..prod.js gzip 47.3 kB 47.3 kB
dist_client_...dev.js gzip 324 B 324 B
dist_client_...dev.js gzip 326 B 326 B
dist_client_...dev.js gzip 318 B 318 B
dist_client_...dev.js gzip 317 B 317 B
pages-api-tu...dev.js gzip 41.1 kB 41.1 kB
pages-api-tu..prod.js gzip 31.2 kB 31.2 kB
pages-api.ru...dev.js gzip 41 kB 41 kB
pages-api.ru..prod.js gzip 31.2 kB 31.2 kB
pages-turbo....dev.js gzip 50.7 kB 50.7 kB N/A
pages-turbo...prod.js gzip 38.2 kB 38.2 kB N/A
pages.runtim...dev.js gzip 50.6 kB 50.7 kB N/A
pages.runtim..prod.js gzip 38.1 kB 38.1 kB N/A
server.runti..prod.js gzip 59.9 kB 59.9 kB
Overall change 2.49 MB 2.51 MB ⚠️ +19.6 kB
build cache Overall increase ⚠️
vercel/next.js canary vercel/next.js chunk-load-error-retry Change
0.pack gzip 3.61 MB 3.65 MB ⚠️ +47.5 kB
index.pack gzip 98.6 kB 102 kB ⚠️ +2.89 kB
Overall change 3.71 MB 3.76 MB ⚠️ +50.4 kB
Diff details
Diff for page.js

Diff too large to display

Diff for middleware.js

Diff too large to display

Diff for edge-ssr.js

Diff too large to display

Diff for _buildManifest.js
@@ -611,35 +611,35 @@ self.__BUILD_MANIFEST = (function (a, b, c) {
       numHashes: NaN,
       bitArray: [],
     },
-    "/": ["static\u002Fchunks\u002Fpages\u002Findex-dda7d8b64d4ba15c.js"],
+    "/": ["static\u002Fchunks\u002Fpages\u002Findex-d95f7ec6af4d2644.js"],
     "/_error": [
-      "static\u002Fchunks\u002Fpages\u002F_error-6ef44d3954f25711.js",
+      "static\u002Fchunks\u002Fpages\u002F_error-209c0c82205a7c9f.js",
     ],
     "/css": [
       "static\u002Fcss\u002Fded6b86ab9cc0a1f.css",
-      "static\u002Fchunks\u002Fpages\u002Fcss-c8aaa7211416a045.js",
+      "static\u002Fchunks\u002Fpages\u002Fcss-62710339bc830ded.js",
     ],
     "/dynamic": [
-      "static\u002Fchunks\u002Fpages\u002Fdynamic-d53bb7f318f342c2.js",
+      "static\u002Fchunks\u002Fpages\u002Fdynamic-0da0672e6c8cfd41.js",
     ],
     "/edge-ssr": [
-      "static\u002Fchunks\u002Fpages\u002Fedge-ssr-1383106d4a3e7d72.js",
+      "static\u002Fchunks\u002Fpages\u002Fedge-ssr-0db9f7bb610d3072.js",
     ],
-    "/head": ["static\u002Fchunks\u002Fpages\u002Fhead-1db1c4be1a45662f.js"],
-    "/hooks": ["static\u002Fchunks\u002Fpages\u002Fhooks-e6deee5b72a5b112.js"],
+    "/head": ["static\u002Fchunks\u002Fpages\u002Fhead-747416c4075e42aa.js"],
+    "/hooks": ["static\u002Fchunks\u002Fpages\u002Fhooks-8b10205be7505244.js"],
     "/image": [
-      "static\u002Fchunks\u002F2747-90c828280005c0c3.js",
-      "static\u002Fchunks\u002Fpages\u002Fimage-868472cd5e84efc9.js",
+      "static\u002Fchunks\u002F6349-ee9aecde860d4832.js",
+      "static\u002Fchunks\u002Fpages\u002Fimage-f90ae17c3ad1d38b.js",
     ],
-    "/link": ["static\u002Fchunks\u002Fpages\u002Flink-0ec374e48b2ce5d9.js"],
+    "/link": ["static\u002Fchunks\u002Fpages\u002Flink-6ab9a67b348df1bf.js"],
     "/routerDirect": [
-      "static\u002Fchunks\u002Fpages\u002FrouterDirect-1a34bfadbc088491.js",
+      "static\u002Fchunks\u002Fpages\u002FrouterDirect-f132fb471e65a8b9.js",
     ],
     "/script": [
-      "static\u002Fchunks\u002Fpages\u002Fscript-52320f59afbd096d.js",
+      "static\u002Fchunks\u002Fpages\u002Fscript-8e2028e44b8da2d9.js",
     ],
     "/withRouter": [
-      "static\u002Fchunks\u002Fpages\u002FwithRouter-3b1a16d3dfa21c16.js",
+      "static\u002Fchunks\u002Fpages\u002FwithRouter-a86d259faa012c1c.js",
     ],
     sortedPages: [
       "\u002F",
Diff for dynamic-HASH.js
@@ -1,17 +1,80 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [2291],
   {
-    /***/ 1231: /***/ (
-      module,
+    /***/ 1033: /***/ (module, exports) => {
+      "use strict";
+      // This gets assigned as a side-effect during app initialization. Because it
+      // represents the build used to create the JS bundle, it should never change
+      // after being set, so we store it in a global variable.
+      //
+      // When performing RSC requests, if the incoming data has a different build ID,
+      // we perform an MPA navigation/refresh to load the updated build and ensure
+      // that the client and server in sync.
+      // Starts as an empty string. In practice, because setAppBuildId is called
+      // during initialization before hydration starts, this will always get
+      // reassigned to the actual build ID before it's ever needed by a navigation.
+      // If for some reasons it didn't, due to a bug or race condition, then on
+      // navigation the build comparision would fail and trigger an MPA navigation.
+
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      0 && 0;
+      function _export(target, all) {
+        for (var name in all)
+          Object.defineProperty(target, name, {
+            enumerable: true,
+            get: all[name],
+          });
+      }
+      _export(exports, {
+        getAppBuildId: function () {
+          return getAppBuildId;
+        },
+        setAppBuildId: function () {
+          return setAppBuildId;
+        },
+      });
+      let globalBuildId = "";
+      function setAppBuildId(buildId) {
+        globalBuildId = buildId;
+      }
+      function getAppBuildId() {
+        return globalBuildId;
+      }
+      if (
+        (typeof exports.default === "function" ||
+          (typeof exports.default === "object" && exports.default !== null)) &&
+        typeof exports.default.__esModule === "undefined"
+      ) {
+        Object.defineProperty(exports.default, "__esModule", {
+          value: true,
+        });
+        Object.assign(exports.default, exports);
+        module.exports = exports.default;
+      } //# sourceMappingURL=app-build-id.js.map
+
+      /***/
+    },
+
+    /***/ 2604: /***/ (
+      __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
-      module.exports = __webpack_require__(4464);
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/dynamic",
+        function () {
+          return __webpack_require__(3643);
+        },
+      ]);
+      if (false) {
+      }
 
       /***/
     },
 
-    /***/ 2101: /***/ (
+    /***/ 3401: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -38,24 +101,63 @@
       /***/
     },
 
-    /***/ 3458: /***/ (
+    /***/ 3643: /***/ (
       __unused_webpack_module,
-      __unused_webpack_exports,
+      __webpack_exports__,
       __webpack_require__
     ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/dynamic",
-        function () {
-          return __webpack_require__(9381);
-        },
-      ]);
-      if (false) {
-      }
+      "use strict";
+      __webpack_require__.r(__webpack_exports__);
+      /* harmony export */ __webpack_require__.d(__webpack_exports__, {
+        /* harmony export */ __N_SSP: () => /* binding */ __N_SSP,
+        /* harmony export */ default: () => __WEBPACK_DEFAULT_EXPORT__,
+        /* harmony export */
+      });
+      /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
+        __webpack_require__(3108);
+      /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1__ =
+        __webpack_require__(3973);
+      /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1___default =
+        /*#__PURE__*/ __webpack_require__.n(
+          next_dynamic__WEBPACK_IMPORTED_MODULE_1__
+        );
+
+      const DynamicHello = next_dynamic__WEBPACK_IMPORTED_MODULE_1___default()(
+        () =>
+          __webpack_require__
+            .e(/* import() */ 1596)
+            .then(__webpack_require__.bind(__webpack_require__, 1596))
+            .then((mod) => mod.Hello),
+        {
+          loadableGenerated: {
+            webpack: () => [/*require.resolve*/ 1596],
+          },
+        }
+      );
+      const Page = () =>
+        /*#__PURE__*/ (0, react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(
+          react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment,
+          {
+            children: [
+              /*#__PURE__*/ (0,
+              react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", {
+                children: "testing next/dynamic size",
+              }),
+              /*#__PURE__*/ (0,
+              react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(
+                DynamicHello,
+                {}
+              ),
+            ],
+          }
+        );
+      var __N_SSP = true;
+      /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = Page;
 
       /***/
     },
 
-    /***/ 4464: /***/ (module, exports, __webpack_require__) => {
+    /***/ 3660: /***/ (module, exports, __webpack_require__) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -88,7 +190,7 @@
         __webpack_require__(4312)
       );
       const _loadablesharedruntime = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(9799)
+        __webpack_require__(4539)
       );
       const isServerSide = "object" === "undefined";
       // Normalize loader to return the module as form { default: Component } for `React.lazy`.
@@ -188,63 +290,17 @@
       /***/
     },
 
-    /***/ 9381: /***/ (
-      __unused_webpack_module,
-      __webpack_exports__,
+    /***/ 3973: /***/ (
+      module,
+      __unused_webpack_exports,
       __webpack_require__
     ) => {
-      "use strict";
-      __webpack_require__.r(__webpack_exports__);
-      /* harmony export */ __webpack_require__.d(__webpack_exports__, {
-        /* harmony export */ __N_SSP: () => /* binding */ __N_SSP,
-        /* harmony export */ default: () => __WEBPACK_DEFAULT_EXPORT__,
-        /* harmony export */
-      });
-      /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
-        __webpack_require__(3108);
-      /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(1231);
-      /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1___default =
-        /*#__PURE__*/ __webpack_require__.n(
-          next_dynamic__WEBPACK_IMPORTED_MODULE_1__
-        );
-
-      const DynamicHello = next_dynamic__WEBPACK_IMPORTED_MODULE_1___default()(
-        () =>
-          __webpack_require__
-            .e(/* import() */ 2086)
-            .then(__webpack_require__.bind(__webpack_require__, 2086))
-            .then((mod) => mod.Hello),
-        {
-          loadableGenerated: {
-            webpack: () => [/*require.resolve*/ 2086],
-          },
-        }
-      );
-      const Page = () =>
-        /*#__PURE__*/ (0, react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(
-          react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment,
-          {
-            children: [
-              /*#__PURE__*/ (0,
-              react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", {
-                children: "testing next/dynamic size",
-              }),
-              /*#__PURE__*/ (0,
-              react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(
-                DynamicHello,
-                {}
-              ),
-            ],
-          }
-        );
-      var __N_SSP = true;
-      /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = Page;
+      module.exports = __webpack_require__(3660);
 
       /***/
     },
 
-    /***/ 9799: /***/ (
+    /***/ 4539: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -286,7 +342,9 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
       const _react = /*#__PURE__*/ _interop_require_default._(
         __webpack_require__(4312)
       );
-      const _loadablecontextsharedruntime = __webpack_require__(2101);
+      const _loadablecontextsharedruntime = __webpack_require__(3401);
+      const _ischunkloaderror = __webpack_require__(9462);
+      const _chunkloaderrorhandler = __webpack_require__(7676);
       function resolve(obj) {
         return obj && obj.default ? obj.default : obj;
       }
@@ -413,6 +471,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
           this._callbacks = new Set();
           this._delay = null;
           this._timeout = null;
+          this._hasAutoRetried = false;
           this.retry();
         }
         promise() {
@@ -451,7 +510,25 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
               this._update({});
               this._clearTimeouts();
             })
-            .catch((_err) => {
+            .catch((err) => {
+              // Auto-retry for chunk load errors (once)
+              // This handles transient network failures during dynamic imports
+              if (
+                true &&
+                (0, _ischunkloaderror.isChunkLoadError)(err) &&
+                !this._hasAutoRetried
+              ) {
+                this._hasAutoRetried = true;
+                // Clear bundler's chunk cache so retry will fetch fresh
+                (0, _chunkloaderrorhandler.clearChunkCache)(err);
+                // Retry after a short delay with jitter
+                const delay = (0, _chunkloaderrorhandler.getRetryDelayMs)();
+                setTimeout(() => {
+                  this.retry();
+                }, delay);
+                return;
+              }
+              // No more retries - propagate error
               this._update({});
               this._clearTimeouts();
             });
@@ -518,13 +595,392 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
 
       /***/
     },
+
+    /***/ 7676: /***/ (module, exports, __webpack_require__) => {
+      "use strict";
+      /**
+       * Chunk load error handling with silent retry logic.
+       *
+       * This module provides retry orchestration for chunk/network loading failures.
+       * It tracks failures in sessionStorage per {route, buildId, chunkKey} and
+       * implements silent retry with jittered backoff.
+       */
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      0 && 0;
+      function _export(target, all) {
+        for (var name in all)
+          Object.defineProperty(target, name, {
+            enumerable: true,
+            get: all[name],
+          });
+      }
+      _export(exports, {
+        clearChunkCache: function () {
+          return clearChunkCache;
+        },
+        clearFailureState: function () {
+          return clearFailureState;
+        },
+        createChunkErrorContext: function () {
+          return createChunkErrorContext;
+        },
+        getFailCount: function () {
+          return getFailCount;
+        },
+        getRetryDelayMs: function () {
+          return getRetryDelayMs;
+        },
+        handleChunkFailure: function () {
+          return handleChunkFailure;
+        },
+        retryChunkImport: function () {
+          return retryChunkImport;
+        },
+        shouldSilentRetry: function () {
+          return shouldSilentRetry;
+        },
+        sleep: function () {
+          return sleep;
+        },
+      });
+      const _appbuildid = __webpack_require__(1033);
+      const _ischunkloaderror = __webpack_require__(9462);
+      const STORAGE_PREFIX = "__next_chunk_fail:";
+      const RETRY_WINDOW_MS = 30000; // Don't retry same chunk within 30s of a retry
+      const MAX_FAIL_COUNT_FOR_RETRY = 2; // After 2 failures, skip silent retry
+      /**
+       * Simple hash function for generating chunk keys when URL isn't available.
+       */ function simpleHash(str) {
+        let hash = 0;
+        for (let i = 0; i < str.length; i++) {
+          const char = str.charCodeAt(i);
+          hash = ((hash << 5) - hash + char) | 0;
+        }
+        return Math.abs(hash).toString(36);
+      }
+      /**
+       * Extract chunk URL from error message if possible.
+       * ChunkLoadError messages typically contain the URL.
+       */ function extractChunkUrl(error) {
+        const message = error.message;
+        // Turbopack format: "Failed to load chunk <url> from <reason>: <cause>"
+        // The URL can be relative (/_next/...) or absolute (http://...)
+        const turbopackMatch = message.match(
+          /Failed to load chunk ([^\s]+\.(?:js|css))/
+        );
+        if (turbopackMatch) {
+          return turbopackMatch[1];
+        }
+        // Webpack format: "Loading chunk <id> failed. (error: <url>)"
+        const webpackMatch = message.match(/https?:\/\/[^\s)]+/);
+        return webpackMatch?.[0];
+      }
+      /**
+       * Extract the chunk ID from a webpack chunk URL.
+       * URLs look like: /_next/static/chunks/123.hash.js
+       */ function extractWebpackChunkId(chunkUrl) {
+        // Match chunk ID from URL path: /chunks/123.abc123.js or /chunks/pages_foo_bar.abc123.js
+        const match = chunkUrl.match(/\/chunks\/([^/.]+)\.[a-f0-9]+\.js/);
+        return match?.[1];
+      }
+      function clearChunkCache(error) {
+        const chunkUrl = extractChunkUrl(error);
+        if (!chunkUrl) return false;
+        // Turbopack: clear by chunk URL
+        if (
+          typeof globalThis.__turbopack_clear_chunk_resolver__ === "function"
+        ) {
+          // Extract the relative URL path that Turbopack uses as key
+          try {
+            const url = new URL(chunkUrl);
+            globalThis.__turbopack_clear_chunk_resolver__(
+              url.pathname + url.search
+            );
+            return true;
+          } catch {
+            // Invalid URL, try using the full URL
+            globalThis.__turbopack_clear_chunk_resolver__(chunkUrl);
+            return true;
+          }
+        }
+        // Webpack: extract chunk ID from URL and clear by ID
+        if (typeof globalThis.__next_clear_chunk_cache__ === "function") {
+          const chunkId = extractWebpackChunkId(chunkUrl);
+          if (chunkId) {
+            globalThis.__next_clear_chunk_cache__(chunkId);
+            return true;
+          }
+        }
+        return false;
+      }
+      /**
+       * Generate a unique key for this chunk error, used for deduplication.
+       */ function getChunkKey(ctx) {
+        return ctx.chunkUrl ?? simpleHash(ctx.message);
+      }
+      /**
+       * Get the sessionStorage key for tracking this chunk failure.
+       */ function getStorageKey(ctx) {
+        const buildId = (0, _appbuildid.getAppBuildId)();
+        const chunkKey = getChunkKey(ctx);
+        return `${STORAGE_PREFIX}${buildId}:${ctx.route}:${chunkKey}`;
+      }
+      /**
+       * Read failure state from sessionStorage.
+       */ function readFailureState(key) {
+        if (typeof sessionStorage === "undefined") return null;
+        try {
+          const stored = sessionStorage.getItem(key);
+          if (!stored) return null;
+          return JSON.parse(stored);
+        } catch {
+          return null;
+        }
+      }
+      /**
+       * Write failure state to sessionStorage.
+       */ function writeFailureState(key, state) {
+        if (typeof sessionStorage === "undefined") return;
+        try {
+          sessionStorage.setItem(key, JSON.stringify(state));
+        } catch {
+          // Storage might be full or disabled - continue without tracking
+        }
+      }
+      function clearFailureState(route) {
+        if (typeof sessionStorage === "undefined") return;
+        try {
+          const buildId = (0, _appbuildid.getAppBuildId)();
+          const prefix = `${STORAGE_PREFIX}${buildId}:${route}:`;
+          const keysToRemove = [];
+          for (let i = 0; i < sessionStorage.length; i++) {
+            const key = sessionStorage.key(i);
+            if (key?.startsWith(prefix)) {
+              keysToRemove.push(key);
+            }
+          }
+          keysToRemove.forEach((key) => sessionStorage.removeItem(key));
+        } catch {
+          // Ignore storage errors
+        }
+      }
+      /**
+       * Increment the failure count for this chunk.
+       */ function bumpFailCount(ctx) {
+        const key = getStorageKey(ctx);
+        const existing = readFailureState(key);
+        const now = Date.now();
+        const state = {
+          failCount: (existing?.failCount ?? 0) + 1,
+          lastTs: now,
+          retriedTs: existing?.retriedTs,
+        };
+        writeFailureState(key, state);
+        return state;
+      }
+      /**
+       * Mark that a retry was attempted for this chunk.
+       */ function markRetried(ctx) {
+        const key = getStorageKey(ctx);
+        const existing = readFailureState(key);
+        const now = Date.now();
+        const state = {
+          failCount: existing?.failCount ?? 1,
+          lastTs: existing?.lastTs ?? now,
+          retriedTs: now,
+        };
+        writeFailureState(key, state);
+      }
+      function shouldSilentRetry(ctx) {
+        // Don't retry if offline
+        if (typeof navigator !== "undefined" && !navigator.onLine) {
+          return false;
+        }
+        const key = getStorageKey(ctx);
+        const state = readFailureState(key);
+        const now = Date.now();
+        // If we already retried within the window, don't retry again
+        if (state?.retriedTs && now - state.retriedTs < RETRY_WINDOW_MS) {
+          return false;
+        }
+        // Too many failures - skip silent retry to avoid annoying the user
+        if ((state?.failCount ?? 0) >= MAX_FAIL_COUNT_FOR_RETRY) {
+          return false;
+        }
+        return true;
+      }
+      function getFailCount(ctx) {
+        const key = getStorageKey(ctx);
+        const state = readFailureState(key);
+        return state?.failCount ?? 0;
+      }
+      function getRetryDelayMs() {
+        const baseDelay = 200;
+        const jitter = Math.floor(Math.random() * 401); // 0-400ms
+        // Get RTT if available via Network Information API
+        let rtt = 0;
+        if (typeof navigator !== "undefined" && "connection" in navigator) {
+          const connection = navigator.connection;
+          if (connection?.rtt) {
+            rtt = Math.min(500, connection.rtt); // Cap at 500ms
+          }
+        }
+        return Math.min(1500, baseDelay + jitter + rtt); // Cap total at 1500ms
+      }
+      function sleep(ms) {
+        return new Promise((resolve) => setTimeout(resolve, ms));
+      }
+      function createChunkErrorContext(error, route, userVisible = true) {
+        if (
+          !(0, _ischunkloaderror.isChunkLoadError)(error) &&
+          !(0, _ischunkloaderror.isNetworkError)(error)
+        ) {
+          return null;
+        }
+        return {
+          route,
+          userVisible,
+          message: error.message,
+          chunkUrl: extractChunkUrl(error),
+        };
+      }
+      function handleChunkFailure(ctx) {
+        // Always increment fail count first
+        bumpFailCount(ctx);
+        // Check if we should try a silent retry
+        if (shouldSilentRetry(ctx)) {
+          markRetried(ctx);
+          return "retry";
+        }
+        // Show banner to the user
+        return "banner";
+      }
+      async function retryChunkImport(ctx, importFn) {
+        const action = handleChunkFailure(ctx);
+        if (action === "retry") {
+          const delay = getRetryDelayMs();
+          await sleep(delay);
+          return importFn();
+        }
+        // If we shouldn't retry, re-throw to trigger error boundary
+        throw Object.defineProperty(
+          new Error("Chunk load failed after retry attempts"),
+          "__NEXT_ERROR_CODE",
+          {
+            value: "E976",
+            enumerable: false,
+            configurable: true,
+          }
+        );
+      }
+      if (
+        (typeof exports.default === "function" ||
+          (typeof exports.default === "object" && exports.default !== null)) &&
+        typeof exports.default.__esModule === "undefined"
+      ) {
+        Object.defineProperty(exports.default, "__esModule", {
+          value: true,
+        });
+        Object.assign(exports.default, exports);
+        module.exports = exports.default;
+      } //# sourceMappingURL=chunk-load-error-handler.js.map
+
+      /***/
+    },
+
+    /***/ 9462: /***/ (module, exports) => {
+      "use strict";
+      /**
+       * Utilities for detecting chunk load errors and network failures.
+       *
+       * ChunkLoadError can come from:
+       * - Turbopack: error.name === 'ChunkLoadError'
+       * - Webpack: error.name === 'ChunkLoadError'
+       *
+       * We intentionally keep detection narrow to avoid false positives:
+       * - Server 4xx/5xx responses don't throw (they return Response objects)
+       * - We should NOT retry CORS errors, AbortErrors, or parsing failures
+       */ /**
+       * Detects if an error is a ChunkLoadError from Turbopack or webpack.
+       * This is the most reliable check - both bundlers explicitly set this error name.
+       */
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      0 && 0;
+      function _export(target, all) {
+        for (var name in all)
+          Object.defineProperty(target, name, {
+            enumerable: true,
+            get: all[name],
+          });
+      }
+      _export(exports, {
+        isChunkLoadError: function () {
+          return isChunkLoadError;
+        },
+        isChunkOrNetworkError: function () {
+          return isChunkOrNetworkError;
+        },
+        isNetworkError: function () {
+          return isNetworkError;
+        },
+      });
+      function isChunkLoadError(error) {
+        if (!error || typeof error !== "object") return false;
+        return error.name === "ChunkLoadError";
+      }
+      function isNetworkError(error) {
+        if (!error || typeof error !== "object") return false;
+        const err = error;
+        // Never retry intentional aborts
+        if (err.name === "AbortError") return false;
+        // TypeError with specific fetch failure messages
+        // These occur when the network request itself fails (not CORS, not server error)
+        if (err.name === "TypeError") {
+          const message = err.message || "";
+          // Browser-specific network failure messages
+          // Chrome/Edge: "Failed to fetch"
+          // Firefox: "NetworkError when attempting to fetch resource"
+          // Safari: "Load failed" or "The Internet connection appears to be offline"
+          if (
+            message === "Failed to fetch" ||
+            message.startsWith("NetworkError when attempting to fetch") ||
+            message === "Load failed" ||
+            message.includes("Internet connection appears to be offline") ||
+            message.includes("network connection was lost")
+          ) {
+            return true;
+          }
+        }
+        return false;
+      }
+      function isChunkOrNetworkError(error) {
+        return isChunkLoadError(error) || isNetworkError(error);
+      }
+      if (
+        (typeof exports.default === "function" ||
+          (typeof exports.default === "object" && exports.default !== null)) &&
+        typeof exports.default.__esModule === "undefined"
+      ) {
+        Object.defineProperty(exports.default, "__esModule", {
+          value: true,
+        });
+        Object.assign(exports.default, exports);
+        module.exports = exports.default;
+      } //# sourceMappingURL=is-chunk-load-error.js.map
+
+      /***/
+    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(3458)
+      __webpack_exec__(2604)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for edge-ssr-HASH.js
@@ -1,7 +1,24 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [676],
   {
-    /***/ 1564: /***/ (
+    /***/ 7046: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/edge-ssr",
+        function () {
+          return __webpack_require__(7142);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
+
+    /***/ 7142: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -20,30 +37,13 @@
 
       /***/
     },
-
-    /***/ 4300: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/edge-ssr",
-        function () {
-          return __webpack_require__(1564);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(4300)
+      __webpack_exec__(7046)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for head-HASH.js
@@ -1,34 +1,17 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [5350],
   {
-    /***/ 1548: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/head",
-        function () {
-          return __webpack_require__(4282);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
-
-    /***/ 3952: /***/ (
+    /***/ 3770: /***/ (
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
-      module.exports = __webpack_require__(1653);
+      module.exports = __webpack_require__(9025);
 
       /***/
     },
 
-    /***/ 4282: /***/ (
+    /***/ 6236: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -43,7 +26,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(3108);
       /* harmony import */ var next_head__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(3952);
+        __webpack_require__(3770);
       /* harmony import */ var next_head__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_head__WEBPACK_IMPORTED_MODULE_1__
@@ -76,13 +59,30 @@
 
       /***/
     },
+
+    /***/ 6510: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/head",
+        function () {
+          return __webpack_require__(6236);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(1548)
+      __webpack_exec__(6510)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for index-HASH.js
@@ -1,24 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [3332],
   {
-    /***/ 6376: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/",
-        function () {
-          return __webpack_require__(8460);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
-
-    /***/ 8460: /***/ (
+    /***/ 830: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -36,13 +19,30 @@
 
       /***/
     },
+
+    /***/ 1938: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/",
+        function () {
+          return __webpack_require__(830);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(6376)
+      __webpack_exec__(1938)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for link-HASH.js
@@ -1,7 +1,220 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [4672],
   {
-    /***/ 857: /***/ (module, exports, __webpack_require__) => {
+    /***/ 2774: /***/ (module, exports, __webpack_require__) => {
+      "use strict";
+
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      Object.defineProperty(exports, "useIntersection", {
+        enumerable: true,
+        get: function () {
+          return useIntersection;
+        },
+      });
+      const _react = __webpack_require__(4312);
+      const _requestidlecallback = __webpack_require__(9413);
+      const hasIntersectionObserver =
+        typeof IntersectionObserver === "function";
+      const observers = new Map();
+      const idList = [];
+      function createObserver(options) {
+        const id = {
+          root: options.root || null,
+          margin: options.rootMargin || "",
+        };
+        const existing = idList.find(
+          (obj) => obj.root === id.root && obj.margin === id.margin
+        );
+        let instance;
+        if (existing) {
+          instance = observers.get(existing);
+          if (instance) {
+            return instance;
+          }
+        }
+        const elements = new Map();
+        const observer = new IntersectionObserver((entries) => {
+          entries.forEach((entry) => {
+            const callback = elements.get(entry.target);
+            const isVisible =
+              entry.isIntersecting || entry.intersectionRatio > 0;
+            if (callback && isVisible) {
+              callback(isVisible);
+            }
+          });
+        }, options);
+        instance = {
+          id,
+          observer,
+          elements,
+        };
+        idList.push(id);
+        observers.set(id, instance);
+        return instance;
+      }
+      function observe(element, callback, options) {
+        const { id, observer, elements } = createObserver(options);
+        elements.set(element, callback);
+        observer.observe(element);
+        return function unobserve() {
+          elements.delete(element);
+          observer.unobserve(element);
+          // Destroy observer when there's nothing left to watch:
+          if (elements.size === 0) {
+            observer.disconnect();
+            observers.delete(id);
+            const index = idList.findIndex(
+              (obj) => obj.root === id.root && obj.margin === id.margin
+            );
+            if (index > -1) {
+              idList.splice(index, 1);
+            }
+          }
+        };
+      }
+      function useIntersection({ rootRef, rootMargin, disabled }) {
+        const isDisabled = disabled || !hasIntersectionObserver;
+        const [visible, setVisible] = (0, _react.useState)(false);
+        const elementRef = (0, _react.useRef)(null);
+        const setElement = (0, _react.useCallback)((element) => {
+          elementRef.current = element;
+        }, []);
+        (0, _react.useEffect)(() => {
+          if (hasIntersectionObserver) {
+            if (isDisabled || visible) return;
+            const element = elementRef.current;
+            if (element && element.tagName) {
+              const unobserve = observe(
+                element,
+                (isVisible) => isVisible && setVisible(isVisible),
+                {
+                  root: rootRef?.current,
+                  rootMargin,
+                }
+              );
+              return unobserve;
+            }
+          } else {
+            if (!visible) {
+              const idleCallback = (0,
+              _requestidlecallback.requestIdleCallback)(() => setVisible(true));
+              return () =>
+                (0, _requestidlecallback.cancelIdleCallback)(idleCallback);
+            }
+          }
+          // eslint-disable-next-line react-hooks/exhaustive-deps
+        }, [isDisabled, rootMargin, rootRef, visible, elementRef.current]);
+        const resetVisible = (0, _react.useCallback)(() => {
+          setVisible(false);
+        }, []);
+        return [setElement, visible, resetVisible];
+      }
+      if (
+        (typeof exports.default === "function" ||
+          (typeof exports.default === "object" && exports.default !== null)) &&
+        typeof exports.default.__esModule === "undefined"
+      ) {
+        Object.defineProperty(exports.default, "__esModule", {
+          value: true,
+        });
+        Object.assign(exports.default, exports);
+        module.exports = exports.default;
+      } //# sourceMappingURL=use-intersection.js.map
+
+      /***/
+    },
+
+    /***/ 3351: /***/ (module, exports, __webpack_require__) => {
+      "use strict";
+
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      Object.defineProperty(exports, "useMergedRef", {
+        enumerable: true,
+        get: function () {
+          return useMergedRef;
+        },
+      });
+      const _react = __webpack_require__(4312);
+      function useMergedRef(refA, refB) {
+        const cleanupA = (0, _react.useRef)(null);
+        const cleanupB = (0, _react.useRef)(null);
+        // NOTE: In theory, we could skip the wrapping if only one of the refs is non-null.
+        // (this happens often if the user doesn't pass a ref to Link/Form/Image)
+        // But this can cause us to leak a cleanup-ref into user code (previously via `<Link legacyBehavior>`),
+        // and the user might pass that ref into ref-merging library that doesn't support cleanup refs
+        // (because it hasn't been updated for React 19)
+        // which can then cause things to blow up, because a cleanup-returning ref gets called with `null`.
+        // So in practice, it's safer to be defensive and always wrap the ref, even on React 19.
+        return (0, _react.useCallback)(
+          (current) => {
+            if (current === null) {
+              const cleanupFnA = cleanupA.current;
+              if (cleanupFnA) {
+                cleanupA.current = null;
+                cleanupFnA();
+              }
+              const cleanupFnB = cleanupB.current;
+              if (cleanupFnB) {
+                cleanupB.current = null;
+                cleanupFnB();
+              }
+            } else {
+              if (refA) {
+                cleanupA.current = applyRef(refA, current);
+              }
+              if (refB) {
+                cleanupB.current = applyRef(refB, current);
+              }
+            }
+          },
+          [refA, refB]
+        );
+      }
+      function applyRef(refA, current) {
+        if (typeof refA === "function") {
+          const cleanup = refA(current);
+          if (typeof cleanup === "function") {
+            return cleanup;
+          } else {
+            return () => refA(null);
+          }
+        } else {
+          refA.current = current;
+          return () => {
+            refA.current = null;
+          };
+        }
+      }
+      if (
+        (typeof exports.default === "function" ||
+          (typeof exports.default === "object" && exports.default !== null)) &&
+        typeof exports.default.__esModule === "undefined"
+      ) {
+        Object.defineProperty(exports.default, "__esModule", {
+          value: true,
+        });
+        Object.assign(exports.default, exports);
+        module.exports = exports.default;
+      } //# sourceMappingURL=use-merged-ref.js.map
+
+      /***/
+    },
+
+    /***/ 3440: /***/ (
+      module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      module.exports = __webpack_require__(4757);
+
+      /***/
+    },
+
+    /***/ 4757: /***/ (module, exports, __webpack_require__) => {
       "use strict";
       /* __next_internal_client_entry_do_not_use__  cjs */
       Object.defineProperty(exports, "__esModule", {
@@ -23,22 +236,22 @@
           return useLinkStatus;
         },
       });
-      const _interop_require_wildcard = __webpack_require__(8781);
+      const _interop_require_wildcard = __webpack_require__(1162);
       const _jsxruntime = __webpack_require__(3108);
       const _react = /*#__PURE__*/ _interop_require_wildcard._(
         __webpack_require__(4312)
       );
-      const _resolvehref = __webpack_require__(4055);
-      const _islocalurl = __webpack_require__(7175);
-      const _formaturl = __webpack_require__(9674);
-      const _utils = __webpack_require__(7424);
-      const _addlocale = __webpack_require__(589);
-      const _routercontextsharedruntime = __webpack_require__(7010);
-      const _useintersection = __webpack_require__(2330);
-      const _getdomainlocale = __webpack_require__(7207);
-      const _addbasepath = __webpack_require__(9942);
-      const _usemergedref = __webpack_require__(8067);
-      const _erroronce = __webpack_require__(1945);
+      const _resolvehref = __webpack_require__(4691);
+      const _islocalurl = __webpack_require__(4763);
+      const _formaturl = __webpack_require__(3246);
+      const _utils = __webpack_require__(7372);
+      const _addlocale = __webpack_require__(1809);
+      const _routercontextsharedruntime = __webpack_require__(2254);
+      const _useintersection = __webpack_require__(2774);
+      const _getdomainlocale = __webpack_require__(8803);
+      const _addbasepath = __webpack_require__(5834);
+      const _usemergedref = __webpack_require__(3351);
+      const _erroronce = __webpack_require__(6021);
       const prefetched = new Set();
       function prefetch(router, href, as, options) {
         if (false) {
@@ -417,168 +630,43 @@
       /***/
     },
 
-    /***/ 1945: /***/ (__unused_webpack_module, exports) => {
-      "use strict";
-
-      Object.defineProperty(exports, "__esModule", {
-        value: true,
-      });
-      Object.defineProperty(exports, "errorOnce", {
-        enumerable: true,
-        get: function () {
-          return errorOnce;
+    /***/ 5326: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/link",
+        function () {
+          return __webpack_require__(9058);
         },
-      });
-      let errorOnce = (_) => {};
+      ]);
       if (false) {
-      } //# sourceMappingURL=error-once.js.map
+      }
 
       /***/
     },
 
-    /***/ 2330: /***/ (module, exports, __webpack_require__) => {
+    /***/ 6021: /***/ (__unused_webpack_module, exports) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
         value: true,
       });
-      Object.defineProperty(exports, "useIntersection", {
+      Object.defineProperty(exports, "errorOnce", {
         enumerable: true,
         get: function () {
-          return useIntersection;
+          return errorOnce;
         },
       });
-      const _react = __webpack_require__(4312);
-      const _requestidlecallback = __webpack_require__(601);
-      const hasIntersectionObserver =
-        typeof IntersectionObserver === "function";
-      const observers = new Map();
-      const idList = [];
-      function createObserver(options) {
-        const id = {
-          root: options.root || null,
-          margin: options.rootMargin || "",
-        };
-        const existing = idList.find(
-          (obj) => obj.root === id.root && obj.margin === id.margin
-        );
-        let instance;
-        if (existing) {
-          instance = observers.get(existing);
-          if (instance) {
-            return instance;
-          }
-        }
-        const elements = new Map();
-        const observer = new IntersectionObserver((entries) => {
-          entries.forEach((entry) => {
-            const callback = elements.get(entry.target);
-            const isVisible =
-              entry.isIntersecting || entry.intersectionRatio > 0;
-            if (callback && isVisible) {
-              callback(isVisible);
-            }
-          });
-        }, options);
-        instance = {
-          id,
-          observer,
-          elements,
-        };
-        idList.push(id);
-        observers.set(id, instance);
-        return instance;
-      }
-      function observe(element, callback, options) {
-        const { id, observer, elements } = createObserver(options);
-        elements.set(element, callback);
-        observer.observe(element);
-        return function unobserve() {
-          elements.delete(element);
-          observer.unobserve(element);
-          // Destroy observer when there's nothing left to watch:
-          if (elements.size === 0) {
-            observer.disconnect();
-            observers.delete(id);
-            const index = idList.findIndex(
-              (obj) => obj.root === id.root && obj.margin === id.margin
-            );
-            if (index > -1) {
-              idList.splice(index, 1);
-            }
-          }
-        };
-      }
-      function useIntersection({ rootRef, rootMargin, disabled }) {
-        const isDisabled = disabled || !hasIntersectionObserver;
-        const [visible, setVisible] = (0, _react.useState)(false);
-        const elementRef = (0, _react.useRef)(null);
-        const setElement = (0, _react.useCallback)((element) => {
-          elementRef.current = element;
-        }, []);
-        (0, _react.useEffect)(() => {
-          if (hasIntersectionObserver) {
-            if (isDisabled || visible) return;
-            const element = elementRef.current;
-            if (element && element.tagName) {
-              const unobserve = observe(
-                element,
-                (isVisible) => isVisible && setVisible(isVisible),
-                {
-                  root: rootRef?.current,
-                  rootMargin,
-                }
-              );
-              return unobserve;
-            }
-          } else {
-            if (!visible) {
-              const idleCallback = (0,
-              _requestidlecallback.requestIdleCallback)(() => setVisible(true));
-              return () =>
-                (0, _requestidlecallback.cancelIdleCallback)(idleCallback);
-            }
-          }
-          // eslint-disable-next-line react-hooks/exhaustive-deps
-        }, [isDisabled, rootMargin, rootRef, visible, elementRef.current]);
-        const resetVisible = (0, _react.useCallback)(() => {
-          setVisible(false);
-        }, []);
-        return [setElement, visible, resetVisible];
-      }
-      if (
-        (typeof exports.default === "function" ||
-          (typeof exports.default === "object" && exports.default !== null)) &&
-        typeof exports.default.__esModule === "undefined"
-      ) {
-        Object.defineProperty(exports.default, "__esModule", {
-          value: true,
-        });
-        Object.assign(exports.default, exports);
-        module.exports = exports.default;
-      } //# sourceMappingURL=use-intersection.js.map
-
-      /***/
-    },
-
-    /***/ 4972: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/link",
-        function () {
-          return __webpack_require__(7600);
-        },
-      ]);
+      let errorOnce = (_) => {};
       if (false) {
-      }
+      } //# sourceMappingURL=error-once.js.map
 
       /***/
     },
 
-    /***/ 7207: /***/ (module, exports, __webpack_require__) => {
+    /***/ 8803: /***/ (module, exports, __webpack_require__) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -590,7 +678,7 @@
           return getDomainLocale;
         },
       });
-      const _normalizetrailingslash = __webpack_require__(151);
+      const _normalizetrailingslash = __webpack_require__(1315);
       const basePath =
         /* unused pure expression or super */ null && (false || "");
       function getDomainLocale(path, locale, locales, domainLocales) {
@@ -614,7 +702,7 @@
       /***/
     },
 
-    /***/ 7600: /***/ (
+    /***/ 9058: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -629,7 +717,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(3108);
       /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(7830);
+        __webpack_require__(3440);
       /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_link__WEBPACK_IMPORTED_MODULE_1__
@@ -659,101 +747,13 @@
 
       /***/
     },
-
-    /***/ 7830: /***/ (
-      module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      module.exports = __webpack_require__(857);
-
-      /***/
-    },
-
-    /***/ 8067: /***/ (module, exports, __webpack_require__) => {
-      "use strict";
-
-      Object.defineProperty(exports, "__esModule", {
-        value: true,
-      });
-      Object.defineProperty(exports, "useMergedRef", {
-        enumerable: true,
-        get: function () {
-          return useMergedRef;
-        },
-      });
-      const _react = __webpack_require__(4312);
-      function useMergedRef(refA, refB) {
-        const cleanupA = (0, _react.useRef)(null);
-        const cleanupB = (0, _react.useRef)(null);
-        // NOTE: In theory, we could skip the wrapping if only one of the refs is non-null.
-        // (this happens often if the user doesn't pass a ref to Link/Form/Image)
-        // But this can cause us to leak a cleanup-ref into user code (previously via `<Link legacyBehavior>`),
-        // and the user might pass that ref into ref-merging library that doesn't support cleanup refs
-        // (because it hasn't been updated for React 19)
-        // which can then cause things to blow up, because a cleanup-returning ref gets called with `null`.
-        // So in practice, it's safer to be defensive and always wrap the ref, even on React 19.
-        return (0, _react.useCallback)(
-          (current) => {
-            if (current === null) {
-              const cleanupFnA = cleanupA.current;
-              if (cleanupFnA) {
-                cleanupA.current = null;
-                cleanupFnA();
-              }
-              const cleanupFnB = cleanupB.current;
-              if (cleanupFnB) {
-                cleanupB.current = null;
-                cleanupFnB();
-              }
-            } else {
-              if (refA) {
-                cleanupA.current = applyRef(refA, current);
-              }
-              if (refB) {
-                cleanupB.current = applyRef(refB, current);
-              }
-            }
-          },
-          [refA, refB]
-        );
-      }
-      function applyRef(refA, current) {
-        if (typeof refA === "function") {
-          const cleanup = refA(current);
-          if (typeof cleanup === "function") {
-            return cleanup;
-          } else {
-            return () => refA(null);
-          }
-        } else {
-          refA.current = current;
-          return () => {
-            refA.current = null;
-          };
-        }
-      }
-      if (
-        (typeof exports.default === "function" ||
-          (typeof exports.default === "object" && exports.default !== null)) &&
-        typeof exports.default.__esModule === "undefined"
-      ) {
-        Object.defineProperty(exports.default, "__esModule", {
-          value: true,
-        });
-        Object.assign(exports.default, exports);
-        module.exports = exports.default;
-      } //# sourceMappingURL=use-merged-ref.js.map
-
-      /***/
-    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(4972)
+      __webpack_exec__(5326)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for routerDirect-HASH.js
@@ -1,17 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [188],
   {
-    /***/ 1179: /***/ (
-      module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      module.exports = __webpack_require__(9864);
-
-      /***/
-    },
-
-    /***/ 1640: /***/ (
+    /***/ 2014: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -26,7 +16,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(3108);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(1179);
+        __webpack_require__(4169);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_router__WEBPACK_IMPORTED_MODULE_1__
@@ -46,7 +36,17 @@
       /***/
     },
 
-    /***/ 2172: /***/ (
+    /***/ 4169: /***/ (
+      module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      module.exports = __webpack_require__(9700);
+
+      /***/
+    },
+
+    /***/ 4414: /***/ (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -54,7 +54,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/routerDirect",
         function () {
-          return __webpack_require__(1640);
+          return __webpack_require__(2014);
         },
       ]);
       if (false) {
@@ -68,7 +68,7 @@
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(2172)
+      __webpack_exec__(4414)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for script-HASH.js
@@ -1,17 +1,34 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [1209],
   {
-    /***/ 4977: /***/ (
+    /***/ 2591: /***/ (
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
-      module.exports = __webpack_require__(326);
+      module.exports = __webpack_require__(4634);
 
       /***/
     },
 
-    /***/ 5887: /***/ (
+    /***/ 5030: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/script",
+        function () {
+          return __webpack_require__(7557);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
+
+    /***/ 7557: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -26,7 +43,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(3108);
       /* harmony import */ var next_script__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(4977);
+        __webpack_require__(2591);
       /* harmony import */ var next_script__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_script__WEBPACK_IMPORTED_MODULE_1__
@@ -58,30 +75,13 @@
 
       /***/
     },
-
-    /***/ 6268: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/script",
-        function () {
-          return __webpack_require__(5887);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(6268)
+      __webpack_exec__(5030)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for withRouter-HASH.js
@@ -1,34 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [3263],
   {
-    /***/ 1179: /***/ (
-      module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      module.exports = __webpack_require__(9864);
-
-      /***/
-    },
-
-    /***/ 2028: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/withRouter",
-        function () {
-          return __webpack_require__(4501);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
-
-    /***/ 4501: /***/ (
+    /***/ 559: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -43,7 +16,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(3108);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(1179);
+        __webpack_require__(4169);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_router__WEBPACK_IMPORTED_MODULE_1__
@@ -61,13 +34,40 @@
 
       /***/
     },
+
+    /***/ 726: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/withRouter",
+        function () {
+          return __webpack_require__(559);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
+
+    /***/ 4169: /***/ (
+      module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      module.exports = __webpack_require__(9700);
+
+      /***/
+    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(2028)
+      __webpack_exec__(726)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for 2161-HASH.js

Diff too large to display

Diff for 2747-HASH.js

Diff too large to display

Diff for 4322-HASH.js
failed to diff
Diff for main-HASH.js

Diff too large to display

Diff for webpack-HASH.js
@@ -205,7 +205,7 @@
     /******/ __webpack_require__.u = (chunkId) => {
       /******/ // return url for filenames based on template
       /******/ return (
-        "static/chunks/" + chunkId + "." + "9c9ddbde79ea2f29" + ".js"
+        "static/chunks/" + chunkId + "." + "871ca3fb4b1caa0e" + ".js"
       );
       /******/
     };
@@ -380,6 +380,23 @@
       /******/
     };
     /******/
+    /******/ // Next.js chunk cache clearing for retry logic
+    /******/ if (typeof globalThis !== "undefined") {
+      /******/ globalThis.__next_clear_chunk_cache__ = function (chunkId) {
+        /******/ // Only clear if not already loaded (0 means loaded)
+        /******/ if (
+          installedChunks[chunkId] !== 0 &&
+          installedChunks[chunkId] !== undefined
+        ) {
+          /******/ delete installedChunks[chunkId];
+          /******/
+        }
+        /******/
+      };
+      /******/
+    }
+    /******/
+    /******/
     /******/ __webpack_require__.f.j = (chunkId, promises) => {
       /******/ // JSONP chunk loading for javascript
       /******/ var installedChunkData = __webpack_require__.o(
Diff for app-page-exp..ntime.dev.js

Diff too large to display

Diff for app-page-exp..time.prod.js
failed to diff
Diff for app-page-tur..ntime.dev.js

Diff too large to display

Diff for app-page-tur..time.prod.js
failed to diff
Diff for app-page-tur..ntime.dev.js

Diff too large to display

Diff for app-page-tur..time.prod.js

Diff too large to display

Diff for app-page.runtime.dev.js

Diff too large to display

Diff for app-page.runtime.prod.js

Diff too large to display

Diff for pages-turbo...ntime.dev.js

Diff too large to display

Diff for pages-turbo...time.prod.js

Diff too large to display

Diff for pages.runtime.dev.js

Diff too large to display

Diff for pages.runtime.prod.js

Diff too large to display

Commit: 9ca9ab2

@feedthejim feedthejim force-pushed the chunk-load-error-retry branch from 799a0ce to 5cbd33b Compare January 2, 2026 14:43
@feedthejim feedthejim marked this pull request as ready for review January 2, 2026 16:13
@feedthejim feedthejim force-pushed the chunk-load-error-retry branch from 5cbd33b to 9ca9ab2 Compare January 2, 2026 16:30
@nextjs-bot
Copy link
Collaborator

nextjs-bot commented Jan 2, 2026

Stats from current PR

Default Build (Increase detected ⚠️)
General Overall increase ⚠️
vercel/next.js canary vercel/next.js chunk-load-error-retry Change
buildDuration 18.6s 15.9s N/A
buildDurationCached 14.9s 12s N/A
nodeModulesSize 457 MB 458 MB ⚠️ +913 kB
nextStartRea..uration (ms) 684ms 706ms N/A
Client Bundles (main, webpack) Overall increase ⚠️
vercel/next.js canary vercel/next.js chunk-load-error-retry Change
2086.HASH.js gzip 169 B 169 B
2161-HASH.js gzip 5.39 kB 5.41 kB N/A
2747-HASH.js gzip 4.48 kB 4.46 kB N/A
4322-HASH.js gzip 51.2 kB 54.6 kB ⚠️ +3.36 kB
ec793fe8-HASH.js gzip 62.3 kB 62.3 kB N/A
framework-HASH.js gzip 59.8 kB 59.8 kB N/A
main-app-HASH.js gzip 251 B 254 B N/A
main-HASH.js gzip 38.4 kB 38.7 kB ⚠️ +368 B
webpack-HASH.js gzip 1.68 kB 1.73 kB N/A
Overall change 89.8 kB 93.5 kB ⚠️ +3.73 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary vercel/next.js chunk-load-error-retry Change
polyfills-HASH.js gzip 39.4 kB 39.4 kB
Overall change 39.4 kB 39.4 kB
Client Pages Overall increase ⚠️
vercel/next.js canary vercel/next.js chunk-load-error-retry Change
_app-HASH.js gzip 194 B 193 B N/A
_error-HASH.js gzip 182 B 182 B
css-HASH.js gzip 336 B 335 B N/A
dynamic-HASH.js gzip 1.8 kB 3.18 kB ⚠️ +1.39 kB
edge-ssr-HASH.js gzip 256 B 256 B
head-HASH.js gzip 352 B 349 B N/A
hooks-HASH.js gzip 385 B 384 B N/A
image-HASH.js gzip 580 B 580 B
index-HASH.js gzip 259 B 258 B N/A
link-HASH.js gzip 2.5 kB 2.51 kB N/A
routerDirect..HASH.js gzip 319 B 317 B N/A
script-HASH.js gzip 385 B 387 B N/A
withRouter-HASH.js gzip 316 B 315 B N/A
1afbb74e6ecf..834.css gzip 106 B 106 B
Overall change 2.92 kB 4.31 kB ⚠️ +1.39 kB
Client Build Manifests
vercel/next.js canary vercel/next.js chunk-load-error-retry Change
_buildManifest.js gzip 738 B 738 B
Overall change 738 B 738 B
Rendered Page Sizes
vercel/next.js canary vercel/next.js chunk-load-error-retry Change
index.html gzip 523 B 524 B N/A
link.html gzip 537 B 538 B N/A
withRouter.html gzip 520 B 520 B
Overall change 520 B 520 B
Edge SSR bundle Size Overall increase ⚠️
vercel/next.js canary vercel/next.js chunk-load-error-retry Change
edge-ssr.js gzip 124 kB 124 kB N/A
page.js gzip 237 kB 241 kB ⚠️ +3.54 kB
Overall change 237 kB 241 kB ⚠️ +3.54 kB
Middleware size
vercel/next.js canary vercel/next.js chunk-load-error-retry Change
middleware-b..fest.js gzip 652 B 656 B N/A
middleware-r..fest.js gzip 155 B 156 B N/A
middleware.js gzip 32.9 kB 33 kB N/A
edge-runtime..pack.js gzip 846 B 846 B
Overall change 846 B 846 B
Next Runtimes Overall increase ⚠️
vercel/next.js canary vercel/next.js chunk-load-error-retry Change
app-page-exp...dev.js gzip 301 kB 304 kB ⚠️ +2.84 kB
app-page-exp..prod.js gzip 156 kB 158 kB ⚠️ +2.05 kB
app-page-tur...dev.js gzip 301 kB 304 kB ⚠️ +2.85 kB
app-page-tur..prod.js gzip 156 kB 158 kB ⚠️ +2.05 kB
app-page-tur...dev.js gzip 298 kB 301 kB ⚠️ +2.91 kB
app-page-tur..prod.js gzip 154 kB 156 kB ⚠️ +2 kB
app-page.run...dev.js gzip 298 kB 301 kB ⚠️ +2.91 kB
app-page.run..prod.js gzip 154 kB 156 kB ⚠️ +2.01 kB
app-route-ex...dev.js gzip 68.7 kB 68.7 kB
app-route-ex..prod.js gzip 47.5 kB 47.5 kB
app-route-tu...dev.js gzip 68.7 kB 68.7 kB
app-route-tu..prod.js gzip 47.5 kB 47.5 kB
app-route-tu...dev.js gzip 68.3 kB 68.3 kB
app-route-tu..prod.js gzip 47.3 kB 47.3 kB
app-route.ru...dev.js gzip 68.3 kB 68.3 kB
app-route.ru..prod.js gzip 47.3 kB 47.3 kB
dist_client_...dev.js gzip 324 B 324 B
dist_client_...dev.js gzip 326 B 326 B
dist_client_...dev.js gzip 318 B 318 B
dist_client_...dev.js gzip 317 B 317 B
pages-api-tu...dev.js gzip 41.1 kB 41.1 kB
pages-api-tu..prod.js gzip 31.2 kB 31.2 kB
pages-api.ru...dev.js gzip 41 kB 41 kB
pages-api.ru..prod.js gzip 31.2 kB 31.2 kB
pages-turbo....dev.js gzip 50.7 kB 50.7 kB N/A
pages-turbo...prod.js gzip 38.2 kB 38.2 kB N/A
pages.runtim...dev.js gzip 50.6 kB 50.7 kB N/A
pages.runtim..prod.js gzip 38.1 kB 38.1 kB N/A
server.runti..prod.js gzip 59.9 kB 59.9 kB
Overall change 2.49 MB 2.51 MB ⚠️ +19.6 kB
build cache Overall increase ⚠️
vercel/next.js canary vercel/next.js chunk-load-error-retry Change
0.pack gzip 3.61 MB 3.65 MB ⚠️ +45.8 kB
index.pack gzip 99.7 kB 99.7 kB N/A
Overall change 3.61 MB 3.65 MB ⚠️ +45.8 kB
Diff details
Diff for page.js

Diff too large to display

Diff for middleware.js

Diff too large to display

Diff for edge-ssr.js

Diff too large to display

Diff for _buildManifest.js
@@ -611,35 +611,35 @@ self.__BUILD_MANIFEST = (function (a, b, c) {
       numHashes: NaN,
       bitArray: [],
     },
-    "/": ["static\u002Fchunks\u002Fpages\u002Findex-dda7d8b64d4ba15c.js"],
+    "/": ["static\u002Fchunks\u002Fpages\u002Findex-d95f7ec6af4d2644.js"],
     "/_error": [
-      "static\u002Fchunks\u002Fpages\u002F_error-6ef44d3954f25711.js",
+      "static\u002Fchunks\u002Fpages\u002F_error-209c0c82205a7c9f.js",
     ],
     "/css": [
       "static\u002Fcss\u002Fded6b86ab9cc0a1f.css",
-      "static\u002Fchunks\u002Fpages\u002Fcss-c8aaa7211416a045.js",
+      "static\u002Fchunks\u002Fpages\u002Fcss-62710339bc830ded.js",
     ],
     "/dynamic": [
-      "static\u002Fchunks\u002Fpages\u002Fdynamic-d53bb7f318f342c2.js",
+      "static\u002Fchunks\u002Fpages\u002Fdynamic-0da0672e6c8cfd41.js",
     ],
     "/edge-ssr": [
-      "static\u002Fchunks\u002Fpages\u002Fedge-ssr-1383106d4a3e7d72.js",
+      "static\u002Fchunks\u002Fpages\u002Fedge-ssr-0db9f7bb610d3072.js",
     ],
-    "/head": ["static\u002Fchunks\u002Fpages\u002Fhead-1db1c4be1a45662f.js"],
-    "/hooks": ["static\u002Fchunks\u002Fpages\u002Fhooks-e6deee5b72a5b112.js"],
+    "/head": ["static\u002Fchunks\u002Fpages\u002Fhead-747416c4075e42aa.js"],
+    "/hooks": ["static\u002Fchunks\u002Fpages\u002Fhooks-8b10205be7505244.js"],
     "/image": [
-      "static\u002Fchunks\u002F2747-90c828280005c0c3.js",
-      "static\u002Fchunks\u002Fpages\u002Fimage-868472cd5e84efc9.js",
+      "static\u002Fchunks\u002F6349-ee9aecde860d4832.js",
+      "static\u002Fchunks\u002Fpages\u002Fimage-f90ae17c3ad1d38b.js",
     ],
-    "/link": ["static\u002Fchunks\u002Fpages\u002Flink-0ec374e48b2ce5d9.js"],
+    "/link": ["static\u002Fchunks\u002Fpages\u002Flink-6ab9a67b348df1bf.js"],
     "/routerDirect": [
-      "static\u002Fchunks\u002Fpages\u002FrouterDirect-1a34bfadbc088491.js",
+      "static\u002Fchunks\u002Fpages\u002FrouterDirect-f132fb471e65a8b9.js",
     ],
     "/script": [
-      "static\u002Fchunks\u002Fpages\u002Fscript-52320f59afbd096d.js",
+      "static\u002Fchunks\u002Fpages\u002Fscript-8e2028e44b8da2d9.js",
     ],
     "/withRouter": [
-      "static\u002Fchunks\u002Fpages\u002FwithRouter-3b1a16d3dfa21c16.js",
+      "static\u002Fchunks\u002Fpages\u002FwithRouter-a86d259faa012c1c.js",
     ],
     sortedPages: [
       "\u002F",
Diff for dynamic-HASH.js
@@ -1,17 +1,80 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [2291],
   {
-    /***/ 1231: /***/ (
-      module,
+    /***/ 1033: /***/ (module, exports) => {
+      "use strict";
+      // This gets assigned as a side-effect during app initialization. Because it
+      // represents the build used to create the JS bundle, it should never change
+      // after being set, so we store it in a global variable.
+      //
+      // When performing RSC requests, if the incoming data has a different build ID,
+      // we perform an MPA navigation/refresh to load the updated build and ensure
+      // that the client and server in sync.
+      // Starts as an empty string. In practice, because setAppBuildId is called
+      // during initialization before hydration starts, this will always get
+      // reassigned to the actual build ID before it's ever needed by a navigation.
+      // If for some reasons it didn't, due to a bug or race condition, then on
+      // navigation the build comparision would fail and trigger an MPA navigation.
+
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      0 && 0;
+      function _export(target, all) {
+        for (var name in all)
+          Object.defineProperty(target, name, {
+            enumerable: true,
+            get: all[name],
+          });
+      }
+      _export(exports, {
+        getAppBuildId: function () {
+          return getAppBuildId;
+        },
+        setAppBuildId: function () {
+          return setAppBuildId;
+        },
+      });
+      let globalBuildId = "";
+      function setAppBuildId(buildId) {
+        globalBuildId = buildId;
+      }
+      function getAppBuildId() {
+        return globalBuildId;
+      }
+      if (
+        (typeof exports.default === "function" ||
+          (typeof exports.default === "object" && exports.default !== null)) &&
+        typeof exports.default.__esModule === "undefined"
+      ) {
+        Object.defineProperty(exports.default, "__esModule", {
+          value: true,
+        });
+        Object.assign(exports.default, exports);
+        module.exports = exports.default;
+      } //# sourceMappingURL=app-build-id.js.map
+
+      /***/
+    },
+
+    /***/ 2604: /***/ (
+      __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
-      module.exports = __webpack_require__(4464);
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/dynamic",
+        function () {
+          return __webpack_require__(3643);
+        },
+      ]);
+      if (false) {
+      }
 
       /***/
     },
 
-    /***/ 2101: /***/ (
+    /***/ 3401: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -38,24 +101,63 @@
       /***/
     },
 
-    /***/ 3458: /***/ (
+    /***/ 3643: /***/ (
       __unused_webpack_module,
-      __unused_webpack_exports,
+      __webpack_exports__,
       __webpack_require__
     ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/dynamic",
-        function () {
-          return __webpack_require__(9381);
-        },
-      ]);
-      if (false) {
-      }
+      "use strict";
+      __webpack_require__.r(__webpack_exports__);
+      /* harmony export */ __webpack_require__.d(__webpack_exports__, {
+        /* harmony export */ __N_SSP: () => /* binding */ __N_SSP,
+        /* harmony export */ default: () => __WEBPACK_DEFAULT_EXPORT__,
+        /* harmony export */
+      });
+      /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
+        __webpack_require__(3108);
+      /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1__ =
+        __webpack_require__(3973);
+      /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1___default =
+        /*#__PURE__*/ __webpack_require__.n(
+          next_dynamic__WEBPACK_IMPORTED_MODULE_1__
+        );
+
+      const DynamicHello = next_dynamic__WEBPACK_IMPORTED_MODULE_1___default()(
+        () =>
+          __webpack_require__
+            .e(/* import() */ 1596)
+            .then(__webpack_require__.bind(__webpack_require__, 1596))
+            .then((mod) => mod.Hello),
+        {
+          loadableGenerated: {
+            webpack: () => [/*require.resolve*/ 1596],
+          },
+        }
+      );
+      const Page = () =>
+        /*#__PURE__*/ (0, react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(
+          react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment,
+          {
+            children: [
+              /*#__PURE__*/ (0,
+              react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", {
+                children: "testing next/dynamic size",
+              }),
+              /*#__PURE__*/ (0,
+              react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(
+                DynamicHello,
+                {}
+              ),
+            ],
+          }
+        );
+      var __N_SSP = true;
+      /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = Page;
 
       /***/
     },
 
-    /***/ 4464: /***/ (module, exports, __webpack_require__) => {
+    /***/ 3660: /***/ (module, exports, __webpack_require__) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -88,7 +190,7 @@
         __webpack_require__(4312)
       );
       const _loadablesharedruntime = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(9799)
+        __webpack_require__(4539)
       );
       const isServerSide = "object" === "undefined";
       // Normalize loader to return the module as form { default: Component } for `React.lazy`.
@@ -188,63 +290,17 @@
       /***/
     },
 
-    /***/ 9381: /***/ (
-      __unused_webpack_module,
-      __webpack_exports__,
+    /***/ 3973: /***/ (
+      module,
+      __unused_webpack_exports,
       __webpack_require__
     ) => {
-      "use strict";
-      __webpack_require__.r(__webpack_exports__);
-      /* harmony export */ __webpack_require__.d(__webpack_exports__, {
-        /* harmony export */ __N_SSP: () => /* binding */ __N_SSP,
-        /* harmony export */ default: () => __WEBPACK_DEFAULT_EXPORT__,
-        /* harmony export */
-      });
-      /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
-        __webpack_require__(3108);
-      /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(1231);
-      /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1___default =
-        /*#__PURE__*/ __webpack_require__.n(
-          next_dynamic__WEBPACK_IMPORTED_MODULE_1__
-        );
-
-      const DynamicHello = next_dynamic__WEBPACK_IMPORTED_MODULE_1___default()(
-        () =>
-          __webpack_require__
-            .e(/* import() */ 2086)
-            .then(__webpack_require__.bind(__webpack_require__, 2086))
-            .then((mod) => mod.Hello),
-        {
-          loadableGenerated: {
-            webpack: () => [/*require.resolve*/ 2086],
-          },
-        }
-      );
-      const Page = () =>
-        /*#__PURE__*/ (0, react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(
-          react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment,
-          {
-            children: [
-              /*#__PURE__*/ (0,
-              react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", {
-                children: "testing next/dynamic size",
-              }),
-              /*#__PURE__*/ (0,
-              react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(
-                DynamicHello,
-                {}
-              ),
-            ],
-          }
-        );
-      var __N_SSP = true;
-      /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = Page;
+      module.exports = __webpack_require__(3660);
 
       /***/
     },
 
-    /***/ 9799: /***/ (
+    /***/ 4539: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -286,7 +342,9 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
       const _react = /*#__PURE__*/ _interop_require_default._(
         __webpack_require__(4312)
       );
-      const _loadablecontextsharedruntime = __webpack_require__(2101);
+      const _loadablecontextsharedruntime = __webpack_require__(3401);
+      const _ischunkloaderror = __webpack_require__(9462);
+      const _chunkloaderrorhandler = __webpack_require__(7676);
       function resolve(obj) {
         return obj && obj.default ? obj.default : obj;
       }
@@ -413,6 +471,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
           this._callbacks = new Set();
           this._delay = null;
           this._timeout = null;
+          this._hasAutoRetried = false;
           this.retry();
         }
         promise() {
@@ -451,7 +510,25 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
               this._update({});
               this._clearTimeouts();
             })
-            .catch((_err) => {
+            .catch((err) => {
+              // Auto-retry for chunk load errors (once)
+              // This handles transient network failures during dynamic imports
+              if (
+                true &&
+                (0, _ischunkloaderror.isChunkLoadError)(err) &&
+                !this._hasAutoRetried
+              ) {
+                this._hasAutoRetried = true;
+                // Clear bundler's chunk cache so retry will fetch fresh
+                (0, _chunkloaderrorhandler.clearChunkCache)(err);
+                // Retry after a short delay with jitter
+                const delay = (0, _chunkloaderrorhandler.getRetryDelayMs)();
+                setTimeout(() => {
+                  this.retry();
+                }, delay);
+                return;
+              }
+              // No more retries - propagate error
               this._update({});
               this._clearTimeouts();
             });
@@ -518,13 +595,392 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
 
       /***/
     },
+
+    /***/ 7676: /***/ (module, exports, __webpack_require__) => {
+      "use strict";
+      /**
+       * Chunk load error handling with silent retry logic.
+       *
+       * This module provides retry orchestration for chunk/network loading failures.
+       * It tracks failures in sessionStorage per {route, buildId, chunkKey} and
+       * implements silent retry with jittered backoff.
+       */
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      0 && 0;
+      function _export(target, all) {
+        for (var name in all)
+          Object.defineProperty(target, name, {
+            enumerable: true,
+            get: all[name],
+          });
+      }
+      _export(exports, {
+        clearChunkCache: function () {
+          return clearChunkCache;
+        },
+        clearFailureState: function () {
+          return clearFailureState;
+        },
+        createChunkErrorContext: function () {
+          return createChunkErrorContext;
+        },
+        getFailCount: function () {
+          return getFailCount;
+        },
+        getRetryDelayMs: function () {
+          return getRetryDelayMs;
+        },
+        handleChunkFailure: function () {
+          return handleChunkFailure;
+        },
+        retryChunkImport: function () {
+          return retryChunkImport;
+        },
+        shouldSilentRetry: function () {
+          return shouldSilentRetry;
+        },
+        sleep: function () {
+          return sleep;
+        },
+      });
+      const _appbuildid = __webpack_require__(1033);
+      const _ischunkloaderror = __webpack_require__(9462);
+      const STORAGE_PREFIX = "__next_chunk_fail:";
+      const RETRY_WINDOW_MS = 30000; // Don't retry same chunk within 30s of a retry
+      const MAX_FAIL_COUNT_FOR_RETRY = 2; // After 2 failures, skip silent retry
+      /**
+       * Simple hash function for generating chunk keys when URL isn't available.
+       */ function simpleHash(str) {
+        let hash = 0;
+        for (let i = 0; i < str.length; i++) {
+          const char = str.charCodeAt(i);
+          hash = ((hash << 5) - hash + char) | 0;
+        }
+        return Math.abs(hash).toString(36);
+      }
+      /**
+       * Extract chunk URL from error message if possible.
+       * ChunkLoadError messages typically contain the URL.
+       */ function extractChunkUrl(error) {
+        const message = error.message;
+        // Turbopack format: "Failed to load chunk <url> from <reason>: <cause>"
+        // The URL can be relative (/_next/...) or absolute (http://...)
+        const turbopackMatch = message.match(
+          /Failed to load chunk ([^\s]+\.(?:js|css))/
+        );
+        if (turbopackMatch) {
+          return turbopackMatch[1];
+        }
+        // Webpack format: "Loading chunk <id> failed. (error: <url>)"
+        const webpackMatch = message.match(/https?:\/\/[^\s)]+/);
+        return webpackMatch?.[0];
+      }
+      /**
+       * Extract the chunk ID from a webpack chunk URL.
+       * URLs look like: /_next/static/chunks/123.hash.js
+       */ function extractWebpackChunkId(chunkUrl) {
+        // Match chunk ID from URL path: /chunks/123.abc123.js or /chunks/pages_foo_bar.abc123.js
+        const match = chunkUrl.match(/\/chunks\/([^/.]+)\.[a-f0-9]+\.js/);
+        return match?.[1];
+      }
+      function clearChunkCache(error) {
+        const chunkUrl = extractChunkUrl(error);
+        if (!chunkUrl) return false;
+        // Turbopack: clear by chunk URL
+        if (
+          typeof globalThis.__turbopack_clear_chunk_resolver__ === "function"
+        ) {
+          // Extract the relative URL path that Turbopack uses as key
+          try {
+            const url = new URL(chunkUrl);
+            globalThis.__turbopack_clear_chunk_resolver__(
+              url.pathname + url.search
+            );
+            return true;
+          } catch {
+            // Invalid URL, try using the full URL
+            globalThis.__turbopack_clear_chunk_resolver__(chunkUrl);
+            return true;
+          }
+        }
+        // Webpack: extract chunk ID from URL and clear by ID
+        if (typeof globalThis.__next_clear_chunk_cache__ === "function") {
+          const chunkId = extractWebpackChunkId(chunkUrl);
+          if (chunkId) {
+            globalThis.__next_clear_chunk_cache__(chunkId);
+            return true;
+          }
+        }
+        return false;
+      }
+      /**
+       * Generate a unique key for this chunk error, used for deduplication.
+       */ function getChunkKey(ctx) {
+        return ctx.chunkUrl ?? simpleHash(ctx.message);
+      }
+      /**
+       * Get the sessionStorage key for tracking this chunk failure.
+       */ function getStorageKey(ctx) {
+        const buildId = (0, _appbuildid.getAppBuildId)();
+        const chunkKey = getChunkKey(ctx);
+        return `${STORAGE_PREFIX}${buildId}:${ctx.route}:${chunkKey}`;
+      }
+      /**
+       * Read failure state from sessionStorage.
+       */ function readFailureState(key) {
+        if (typeof sessionStorage === "undefined") return null;
+        try {
+          const stored = sessionStorage.getItem(key);
+          if (!stored) return null;
+          return JSON.parse(stored);
+        } catch {
+          return null;
+        }
+      }
+      /**
+       * Write failure state to sessionStorage.
+       */ function writeFailureState(key, state) {
+        if (typeof sessionStorage === "undefined") return;
+        try {
+          sessionStorage.setItem(key, JSON.stringify(state));
+        } catch {
+          // Storage might be full or disabled - continue without tracking
+        }
+      }
+      function clearFailureState(route) {
+        if (typeof sessionStorage === "undefined") return;
+        try {
+          const buildId = (0, _appbuildid.getAppBuildId)();
+          const prefix = `${STORAGE_PREFIX}${buildId}:${route}:`;
+          const keysToRemove = [];
+          for (let i = 0; i < sessionStorage.length; i++) {
+            const key = sessionStorage.key(i);
+            if (key?.startsWith(prefix)) {
+              keysToRemove.push(key);
+            }
+          }
+          keysToRemove.forEach((key) => sessionStorage.removeItem(key));
+        } catch {
+          // Ignore storage errors
+        }
+      }
+      /**
+       * Increment the failure count for this chunk.
+       */ function bumpFailCount(ctx) {
+        const key = getStorageKey(ctx);
+        const existing = readFailureState(key);
+        const now = Date.now();
+        const state = {
+          failCount: (existing?.failCount ?? 0) + 1,
+          lastTs: now,
+          retriedTs: existing?.retriedTs,
+        };
+        writeFailureState(key, state);
+        return state;
+      }
+      /**
+       * Mark that a retry was attempted for this chunk.
+       */ function markRetried(ctx) {
+        const key = getStorageKey(ctx);
+        const existing = readFailureState(key);
+        const now = Date.now();
+        const state = {
+          failCount: existing?.failCount ?? 1,
+          lastTs: existing?.lastTs ?? now,
+          retriedTs: now,
+        };
+        writeFailureState(key, state);
+      }
+      function shouldSilentRetry(ctx) {
+        // Don't retry if offline
+        if (typeof navigator !== "undefined" && !navigator.onLine) {
+          return false;
+        }
+        const key = getStorageKey(ctx);
+        const state = readFailureState(key);
+        const now = Date.now();
+        // If we already retried within the window, don't retry again
+        if (state?.retriedTs && now - state.retriedTs < RETRY_WINDOW_MS) {
+          return false;
+        }
+        // Too many failures - skip silent retry to avoid annoying the user
+        if ((state?.failCount ?? 0) >= MAX_FAIL_COUNT_FOR_RETRY) {
+          return false;
+        }
+        return true;
+      }
+      function getFailCount(ctx) {
+        const key = getStorageKey(ctx);
+        const state = readFailureState(key);
+        return state?.failCount ?? 0;
+      }
+      function getRetryDelayMs() {
+        const baseDelay = 200;
+        const jitter = Math.floor(Math.random() * 401); // 0-400ms
+        // Get RTT if available via Network Information API
+        let rtt = 0;
+        if (typeof navigator !== "undefined" && "connection" in navigator) {
+          const connection = navigator.connection;
+          if (connection?.rtt) {
+            rtt = Math.min(500, connection.rtt); // Cap at 500ms
+          }
+        }
+        return Math.min(1500, baseDelay + jitter + rtt); // Cap total at 1500ms
+      }
+      function sleep(ms) {
+        return new Promise((resolve) => setTimeout(resolve, ms));
+      }
+      function createChunkErrorContext(error, route, userVisible = true) {
+        if (
+          !(0, _ischunkloaderror.isChunkLoadError)(error) &&
+          !(0, _ischunkloaderror.isNetworkError)(error)
+        ) {
+          return null;
+        }
+        return {
+          route,
+          userVisible,
+          message: error.message,
+          chunkUrl: extractChunkUrl(error),
+        };
+      }
+      function handleChunkFailure(ctx) {
+        // Always increment fail count first
+        bumpFailCount(ctx);
+        // Check if we should try a silent retry
+        if (shouldSilentRetry(ctx)) {
+          markRetried(ctx);
+          return "retry";
+        }
+        // Show banner to the user
+        return "banner";
+      }
+      async function retryChunkImport(ctx, importFn) {
+        const action = handleChunkFailure(ctx);
+        if (action === "retry") {
+          const delay = getRetryDelayMs();
+          await sleep(delay);
+          return importFn();
+        }
+        // If we shouldn't retry, re-throw to trigger error boundary
+        throw Object.defineProperty(
+          new Error("Chunk load failed after retry attempts"),
+          "__NEXT_ERROR_CODE",
+          {
+            value: "E976",
+            enumerable: false,
+            configurable: true,
+          }
+        );
+      }
+      if (
+        (typeof exports.default === "function" ||
+          (typeof exports.default === "object" && exports.default !== null)) &&
+        typeof exports.default.__esModule === "undefined"
+      ) {
+        Object.defineProperty(exports.default, "__esModule", {
+          value: true,
+        });
+        Object.assign(exports.default, exports);
+        module.exports = exports.default;
+      } //# sourceMappingURL=chunk-load-error-handler.js.map
+
+      /***/
+    },
+
+    /***/ 9462: /***/ (module, exports) => {
+      "use strict";
+      /**
+       * Utilities for detecting chunk load errors and network failures.
+       *
+       * ChunkLoadError can come from:
+       * - Turbopack: error.name === 'ChunkLoadError'
+       * - Webpack: error.name === 'ChunkLoadError'
+       *
+       * We intentionally keep detection narrow to avoid false positives:
+       * - Server 4xx/5xx responses don't throw (they return Response objects)
+       * - We should NOT retry CORS errors, AbortErrors, or parsing failures
+       */ /**
+       * Detects if an error is a ChunkLoadError from Turbopack or webpack.
+       * This is the most reliable check - both bundlers explicitly set this error name.
+       */
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      0 && 0;
+      function _export(target, all) {
+        for (var name in all)
+          Object.defineProperty(target, name, {
+            enumerable: true,
+            get: all[name],
+          });
+      }
+      _export(exports, {
+        isChunkLoadError: function () {
+          return isChunkLoadError;
+        },
+        isChunkOrNetworkError: function () {
+          return isChunkOrNetworkError;
+        },
+        isNetworkError: function () {
+          return isNetworkError;
+        },
+      });
+      function isChunkLoadError(error) {
+        if (!error || typeof error !== "object") return false;
+        return error.name === "ChunkLoadError";
+      }
+      function isNetworkError(error) {
+        if (!error || typeof error !== "object") return false;
+        const err = error;
+        // Never retry intentional aborts
+        if (err.name === "AbortError") return false;
+        // TypeError with specific fetch failure messages
+        // These occur when the network request itself fails (not CORS, not server error)
+        if (err.name === "TypeError") {
+          const message = err.message || "";
+          // Browser-specific network failure messages
+          // Chrome/Edge: "Failed to fetch"
+          // Firefox: "NetworkError when attempting to fetch resource"
+          // Safari: "Load failed" or "The Internet connection appears to be offline"
+          if (
+            message === "Failed to fetch" ||
+            message.startsWith("NetworkError when attempting to fetch") ||
+            message === "Load failed" ||
+            message.includes("Internet connection appears to be offline") ||
+            message.includes("network connection was lost")
+          ) {
+            return true;
+          }
+        }
+        return false;
+      }
+      function isChunkOrNetworkError(error) {
+        return isChunkLoadError(error) || isNetworkError(error);
+      }
+      if (
+        (typeof exports.default === "function" ||
+          (typeof exports.default === "object" && exports.default !== null)) &&
+        typeof exports.default.__esModule === "undefined"
+      ) {
+        Object.defineProperty(exports.default, "__esModule", {
+          value: true,
+        });
+        Object.assign(exports.default, exports);
+        module.exports = exports.default;
+      } //# sourceMappingURL=is-chunk-load-error.js.map
+
+      /***/
+    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(3458)
+      __webpack_exec__(2604)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for edge-ssr-HASH.js
@@ -1,7 +1,24 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [676],
   {
-    /***/ 1564: /***/ (
+    /***/ 7046: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/edge-ssr",
+        function () {
+          return __webpack_require__(7142);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
+
+    /***/ 7142: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -20,30 +37,13 @@
 
       /***/
     },
-
-    /***/ 4300: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/edge-ssr",
-        function () {
-          return __webpack_require__(1564);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(4300)
+      __webpack_exec__(7046)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for head-HASH.js
@@ -1,34 +1,17 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [5350],
   {
-    /***/ 1548: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/head",
-        function () {
-          return __webpack_require__(4282);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
-
-    /***/ 3952: /***/ (
+    /***/ 3770: /***/ (
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
-      module.exports = __webpack_require__(1653);
+      module.exports = __webpack_require__(9025);
 
       /***/
     },
 
-    /***/ 4282: /***/ (
+    /***/ 6236: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -43,7 +26,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(3108);
       /* harmony import */ var next_head__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(3952);
+        __webpack_require__(3770);
       /* harmony import */ var next_head__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_head__WEBPACK_IMPORTED_MODULE_1__
@@ -76,13 +59,30 @@
 
       /***/
     },
+
+    /***/ 6510: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/head",
+        function () {
+          return __webpack_require__(6236);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(1548)
+      __webpack_exec__(6510)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for index-HASH.js
@@ -1,24 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [3332],
   {
-    /***/ 6376: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/",
-        function () {
-          return __webpack_require__(8460);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
-
-    /***/ 8460: /***/ (
+    /***/ 830: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -36,13 +19,30 @@
 
       /***/
     },
+
+    /***/ 1938: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/",
+        function () {
+          return __webpack_require__(830);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(6376)
+      __webpack_exec__(1938)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for link-HASH.js
@@ -1,7 +1,220 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [4672],
   {
-    /***/ 857: /***/ (module, exports, __webpack_require__) => {
+    /***/ 2774: /***/ (module, exports, __webpack_require__) => {
+      "use strict";
+
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      Object.defineProperty(exports, "useIntersection", {
+        enumerable: true,
+        get: function () {
+          return useIntersection;
+        },
+      });
+      const _react = __webpack_require__(4312);
+      const _requestidlecallback = __webpack_require__(9413);
+      const hasIntersectionObserver =
+        typeof IntersectionObserver === "function";
+      const observers = new Map();
+      const idList = [];
+      function createObserver(options) {
+        const id = {
+          root: options.root || null,
+          margin: options.rootMargin || "",
+        };
+        const existing = idList.find(
+          (obj) => obj.root === id.root && obj.margin === id.margin
+        );
+        let instance;
+        if (existing) {
+          instance = observers.get(existing);
+          if (instance) {
+            return instance;
+          }
+        }
+        const elements = new Map();
+        const observer = new IntersectionObserver((entries) => {
+          entries.forEach((entry) => {
+            const callback = elements.get(entry.target);
+            const isVisible =
+              entry.isIntersecting || entry.intersectionRatio > 0;
+            if (callback && isVisible) {
+              callback(isVisible);
+            }
+          });
+        }, options);
+        instance = {
+          id,
+          observer,
+          elements,
+        };
+        idList.push(id);
+        observers.set(id, instance);
+        return instance;
+      }
+      function observe(element, callback, options) {
+        const { id, observer, elements } = createObserver(options);
+        elements.set(element, callback);
+        observer.observe(element);
+        return function unobserve() {
+          elements.delete(element);
+          observer.unobserve(element);
+          // Destroy observer when there's nothing left to watch:
+          if (elements.size === 0) {
+            observer.disconnect();
+            observers.delete(id);
+            const index = idList.findIndex(
+              (obj) => obj.root === id.root && obj.margin === id.margin
+            );
+            if (index > -1) {
+              idList.splice(index, 1);
+            }
+          }
+        };
+      }
+      function useIntersection({ rootRef, rootMargin, disabled }) {
+        const isDisabled = disabled || !hasIntersectionObserver;
+        const [visible, setVisible] = (0, _react.useState)(false);
+        const elementRef = (0, _react.useRef)(null);
+        const setElement = (0, _react.useCallback)((element) => {
+          elementRef.current = element;
+        }, []);
+        (0, _react.useEffect)(() => {
+          if (hasIntersectionObserver) {
+            if (isDisabled || visible) return;
+            const element = elementRef.current;
+            if (element && element.tagName) {
+              const unobserve = observe(
+                element,
+                (isVisible) => isVisible && setVisible(isVisible),
+                {
+                  root: rootRef?.current,
+                  rootMargin,
+                }
+              );
+              return unobserve;
+            }
+          } else {
+            if (!visible) {
+              const idleCallback = (0,
+              _requestidlecallback.requestIdleCallback)(() => setVisible(true));
+              return () =>
+                (0, _requestidlecallback.cancelIdleCallback)(idleCallback);
+            }
+          }
+          // eslint-disable-next-line react-hooks/exhaustive-deps
+        }, [isDisabled, rootMargin, rootRef, visible, elementRef.current]);
+        const resetVisible = (0, _react.useCallback)(() => {
+          setVisible(false);
+        }, []);
+        return [setElement, visible, resetVisible];
+      }
+      if (
+        (typeof exports.default === "function" ||
+          (typeof exports.default === "object" && exports.default !== null)) &&
+        typeof exports.default.__esModule === "undefined"
+      ) {
+        Object.defineProperty(exports.default, "__esModule", {
+          value: true,
+        });
+        Object.assign(exports.default, exports);
+        module.exports = exports.default;
+      } //# sourceMappingURL=use-intersection.js.map
+
+      /***/
+    },
+
+    /***/ 3351: /***/ (module, exports, __webpack_require__) => {
+      "use strict";
+
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      Object.defineProperty(exports, "useMergedRef", {
+        enumerable: true,
+        get: function () {
+          return useMergedRef;
+        },
+      });
+      const _react = __webpack_require__(4312);
+      function useMergedRef(refA, refB) {
+        const cleanupA = (0, _react.useRef)(null);
+        const cleanupB = (0, _react.useRef)(null);
+        // NOTE: In theory, we could skip the wrapping if only one of the refs is non-null.
+        // (this happens often if the user doesn't pass a ref to Link/Form/Image)
+        // But this can cause us to leak a cleanup-ref into user code (previously via `<Link legacyBehavior>`),
+        // and the user might pass that ref into ref-merging library that doesn't support cleanup refs
+        // (because it hasn't been updated for React 19)
+        // which can then cause things to blow up, because a cleanup-returning ref gets called with `null`.
+        // So in practice, it's safer to be defensive and always wrap the ref, even on React 19.
+        return (0, _react.useCallback)(
+          (current) => {
+            if (current === null) {
+              const cleanupFnA = cleanupA.current;
+              if (cleanupFnA) {
+                cleanupA.current = null;
+                cleanupFnA();
+              }
+              const cleanupFnB = cleanupB.current;
+              if (cleanupFnB) {
+                cleanupB.current = null;
+                cleanupFnB();
+              }
+            } else {
+              if (refA) {
+                cleanupA.current = applyRef(refA, current);
+              }
+              if (refB) {
+                cleanupB.current = applyRef(refB, current);
+              }
+            }
+          },
+          [refA, refB]
+        );
+      }
+      function applyRef(refA, current) {
+        if (typeof refA === "function") {
+          const cleanup = refA(current);
+          if (typeof cleanup === "function") {
+            return cleanup;
+          } else {
+            return () => refA(null);
+          }
+        } else {
+          refA.current = current;
+          return () => {
+            refA.current = null;
+          };
+        }
+      }
+      if (
+        (typeof exports.default === "function" ||
+          (typeof exports.default === "object" && exports.default !== null)) &&
+        typeof exports.default.__esModule === "undefined"
+      ) {
+        Object.defineProperty(exports.default, "__esModule", {
+          value: true,
+        });
+        Object.assign(exports.default, exports);
+        module.exports = exports.default;
+      } //# sourceMappingURL=use-merged-ref.js.map
+
+      /***/
+    },
+
+    /***/ 3440: /***/ (
+      module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      module.exports = __webpack_require__(4757);
+
+      /***/
+    },
+
+    /***/ 4757: /***/ (module, exports, __webpack_require__) => {
       "use strict";
       /* __next_internal_client_entry_do_not_use__  cjs */
       Object.defineProperty(exports, "__esModule", {
@@ -23,22 +236,22 @@
           return useLinkStatus;
         },
       });
-      const _interop_require_wildcard = __webpack_require__(8781);
+      const _interop_require_wildcard = __webpack_require__(1162);
       const _jsxruntime = __webpack_require__(3108);
       const _react = /*#__PURE__*/ _interop_require_wildcard._(
         __webpack_require__(4312)
       );
-      const _resolvehref = __webpack_require__(4055);
-      const _islocalurl = __webpack_require__(7175);
-      const _formaturl = __webpack_require__(9674);
-      const _utils = __webpack_require__(7424);
-      const _addlocale = __webpack_require__(589);
-      const _routercontextsharedruntime = __webpack_require__(7010);
-      const _useintersection = __webpack_require__(2330);
-      const _getdomainlocale = __webpack_require__(7207);
-      const _addbasepath = __webpack_require__(9942);
-      const _usemergedref = __webpack_require__(8067);
-      const _erroronce = __webpack_require__(1945);
+      const _resolvehref = __webpack_require__(4691);
+      const _islocalurl = __webpack_require__(4763);
+      const _formaturl = __webpack_require__(3246);
+      const _utils = __webpack_require__(7372);
+      const _addlocale = __webpack_require__(1809);
+      const _routercontextsharedruntime = __webpack_require__(2254);
+      const _useintersection = __webpack_require__(2774);
+      const _getdomainlocale = __webpack_require__(8803);
+      const _addbasepath = __webpack_require__(5834);
+      const _usemergedref = __webpack_require__(3351);
+      const _erroronce = __webpack_require__(6021);
       const prefetched = new Set();
       function prefetch(router, href, as, options) {
         if (false) {
@@ -417,168 +630,43 @@
       /***/
     },
 
-    /***/ 1945: /***/ (__unused_webpack_module, exports) => {
-      "use strict";
-
-      Object.defineProperty(exports, "__esModule", {
-        value: true,
-      });
-      Object.defineProperty(exports, "errorOnce", {
-        enumerable: true,
-        get: function () {
-          return errorOnce;
+    /***/ 5326: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/link",
+        function () {
+          return __webpack_require__(9058);
         },
-      });
-      let errorOnce = (_) => {};
+      ]);
       if (false) {
-      } //# sourceMappingURL=error-once.js.map
+      }
 
       /***/
     },
 
-    /***/ 2330: /***/ (module, exports, __webpack_require__) => {
+    /***/ 6021: /***/ (__unused_webpack_module, exports) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
         value: true,
       });
-      Object.defineProperty(exports, "useIntersection", {
+      Object.defineProperty(exports, "errorOnce", {
         enumerable: true,
         get: function () {
-          return useIntersection;
+          return errorOnce;
         },
       });
-      const _react = __webpack_require__(4312);
-      const _requestidlecallback = __webpack_require__(601);
-      const hasIntersectionObserver =
-        typeof IntersectionObserver === "function";
-      const observers = new Map();
-      const idList = [];
-      function createObserver(options) {
-        const id = {
-          root: options.root || null,
-          margin: options.rootMargin || "",
-        };
-        const existing = idList.find(
-          (obj) => obj.root === id.root && obj.margin === id.margin
-        );
-        let instance;
-        if (existing) {
-          instance = observers.get(existing);
-          if (instance) {
-            return instance;
-          }
-        }
-        const elements = new Map();
-        const observer = new IntersectionObserver((entries) => {
-          entries.forEach((entry) => {
-            const callback = elements.get(entry.target);
-            const isVisible =
-              entry.isIntersecting || entry.intersectionRatio > 0;
-            if (callback && isVisible) {
-              callback(isVisible);
-            }
-          });
-        }, options);
-        instance = {
-          id,
-          observer,
-          elements,
-        };
-        idList.push(id);
-        observers.set(id, instance);
-        return instance;
-      }
-      function observe(element, callback, options) {
-        const { id, observer, elements } = createObserver(options);
-        elements.set(element, callback);
-        observer.observe(element);
-        return function unobserve() {
-          elements.delete(element);
-          observer.unobserve(element);
-          // Destroy observer when there's nothing left to watch:
-          if (elements.size === 0) {
-            observer.disconnect();
-            observers.delete(id);
-            const index = idList.findIndex(
-              (obj) => obj.root === id.root && obj.margin === id.margin
-            );
-            if (index > -1) {
-              idList.splice(index, 1);
-            }
-          }
-        };
-      }
-      function useIntersection({ rootRef, rootMargin, disabled }) {
-        const isDisabled = disabled || !hasIntersectionObserver;
-        const [visible, setVisible] = (0, _react.useState)(false);
-        const elementRef = (0, _react.useRef)(null);
-        const setElement = (0, _react.useCallback)((element) => {
-          elementRef.current = element;
-        }, []);
-        (0, _react.useEffect)(() => {
-          if (hasIntersectionObserver) {
-            if (isDisabled || visible) return;
-            const element = elementRef.current;
-            if (element && element.tagName) {
-              const unobserve = observe(
-                element,
-                (isVisible) => isVisible && setVisible(isVisible),
-                {
-                  root: rootRef?.current,
-                  rootMargin,
-                }
-              );
-              return unobserve;
-            }
-          } else {
-            if (!visible) {
-              const idleCallback = (0,
-              _requestidlecallback.requestIdleCallback)(() => setVisible(true));
-              return () =>
-                (0, _requestidlecallback.cancelIdleCallback)(idleCallback);
-            }
-          }
-          // eslint-disable-next-line react-hooks/exhaustive-deps
-        }, [isDisabled, rootMargin, rootRef, visible, elementRef.current]);
-        const resetVisible = (0, _react.useCallback)(() => {
-          setVisible(false);
-        }, []);
-        return [setElement, visible, resetVisible];
-      }
-      if (
-        (typeof exports.default === "function" ||
-          (typeof exports.default === "object" && exports.default !== null)) &&
-        typeof exports.default.__esModule === "undefined"
-      ) {
-        Object.defineProperty(exports.default, "__esModule", {
-          value: true,
-        });
-        Object.assign(exports.default, exports);
-        module.exports = exports.default;
-      } //# sourceMappingURL=use-intersection.js.map
-
-      /***/
-    },
-
-    /***/ 4972: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/link",
-        function () {
-          return __webpack_require__(7600);
-        },
-      ]);
+      let errorOnce = (_) => {};
       if (false) {
-      }
+      } //# sourceMappingURL=error-once.js.map
 
       /***/
     },
 
-    /***/ 7207: /***/ (module, exports, __webpack_require__) => {
+    /***/ 8803: /***/ (module, exports, __webpack_require__) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -590,7 +678,7 @@
           return getDomainLocale;
         },
       });
-      const _normalizetrailingslash = __webpack_require__(151);
+      const _normalizetrailingslash = __webpack_require__(1315);
       const basePath =
         /* unused pure expression or super */ null && (false || "");
       function getDomainLocale(path, locale, locales, domainLocales) {
@@ -614,7 +702,7 @@
       /***/
     },
 
-    /***/ 7600: /***/ (
+    /***/ 9058: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -629,7 +717,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(3108);
       /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(7830);
+        __webpack_require__(3440);
       /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_link__WEBPACK_IMPORTED_MODULE_1__
@@ -659,101 +747,13 @@
 
       /***/
     },
-
-    /***/ 7830: /***/ (
-      module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      module.exports = __webpack_require__(857);
-
-      /***/
-    },
-
-    /***/ 8067: /***/ (module, exports, __webpack_require__) => {
-      "use strict";
-
-      Object.defineProperty(exports, "__esModule", {
-        value: true,
-      });
-      Object.defineProperty(exports, "useMergedRef", {
-        enumerable: true,
-        get: function () {
-          return useMergedRef;
-        },
-      });
-      const _react = __webpack_require__(4312);
-      function useMergedRef(refA, refB) {
-        const cleanupA = (0, _react.useRef)(null);
-        const cleanupB = (0, _react.useRef)(null);
-        // NOTE: In theory, we could skip the wrapping if only one of the refs is non-null.
-        // (this happens often if the user doesn't pass a ref to Link/Form/Image)
-        // But this can cause us to leak a cleanup-ref into user code (previously via `<Link legacyBehavior>`),
-        // and the user might pass that ref into ref-merging library that doesn't support cleanup refs
-        // (because it hasn't been updated for React 19)
-        // which can then cause things to blow up, because a cleanup-returning ref gets called with `null`.
-        // So in practice, it's safer to be defensive and always wrap the ref, even on React 19.
-        return (0, _react.useCallback)(
-          (current) => {
-            if (current === null) {
-              const cleanupFnA = cleanupA.current;
-              if (cleanupFnA) {
-                cleanupA.current = null;
-                cleanupFnA();
-              }
-              const cleanupFnB = cleanupB.current;
-              if (cleanupFnB) {
-                cleanupB.current = null;
-                cleanupFnB();
-              }
-            } else {
-              if (refA) {
-                cleanupA.current = applyRef(refA, current);
-              }
-              if (refB) {
-                cleanupB.current = applyRef(refB, current);
-              }
-            }
-          },
-          [refA, refB]
-        );
-      }
-      function applyRef(refA, current) {
-        if (typeof refA === "function") {
-          const cleanup = refA(current);
-          if (typeof cleanup === "function") {
-            return cleanup;
-          } else {
-            return () => refA(null);
-          }
-        } else {
-          refA.current = current;
-          return () => {
-            refA.current = null;
-          };
-        }
-      }
-      if (
-        (typeof exports.default === "function" ||
-          (typeof exports.default === "object" && exports.default !== null)) &&
-        typeof exports.default.__esModule === "undefined"
-      ) {
-        Object.defineProperty(exports.default, "__esModule", {
-          value: true,
-        });
-        Object.assign(exports.default, exports);
-        module.exports = exports.default;
-      } //# sourceMappingURL=use-merged-ref.js.map
-
-      /***/
-    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(4972)
+      __webpack_exec__(5326)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for routerDirect-HASH.js
@@ -1,17 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [188],
   {
-    /***/ 1179: /***/ (
-      module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      module.exports = __webpack_require__(9864);
-
-      /***/
-    },
-
-    /***/ 1640: /***/ (
+    /***/ 2014: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -26,7 +16,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(3108);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(1179);
+        __webpack_require__(4169);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_router__WEBPACK_IMPORTED_MODULE_1__
@@ -46,7 +36,17 @@
       /***/
     },
 
-    /***/ 2172: /***/ (
+    /***/ 4169: /***/ (
+      module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      module.exports = __webpack_require__(9700);
+
+      /***/
+    },
+
+    /***/ 4414: /***/ (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -54,7 +54,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/routerDirect",
         function () {
-          return __webpack_require__(1640);
+          return __webpack_require__(2014);
         },
       ]);
       if (false) {
@@ -68,7 +68,7 @@
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(2172)
+      __webpack_exec__(4414)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for script-HASH.js
@@ -1,17 +1,34 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [1209],
   {
-    /***/ 4977: /***/ (
+    /***/ 2591: /***/ (
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
-      module.exports = __webpack_require__(326);
+      module.exports = __webpack_require__(4634);
 
       /***/
     },
 
-    /***/ 5887: /***/ (
+    /***/ 5030: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/script",
+        function () {
+          return __webpack_require__(7557);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
+
+    /***/ 7557: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -26,7 +43,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(3108);
       /* harmony import */ var next_script__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(4977);
+        __webpack_require__(2591);
       /* harmony import */ var next_script__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_script__WEBPACK_IMPORTED_MODULE_1__
@@ -58,30 +75,13 @@
 
       /***/
     },
-
-    /***/ 6268: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/script",
-        function () {
-          return __webpack_require__(5887);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(6268)
+      __webpack_exec__(5030)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for withRouter-HASH.js
@@ -1,34 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [3263],
   {
-    /***/ 1179: /***/ (
-      module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      module.exports = __webpack_require__(9864);
-
-      /***/
-    },
-
-    /***/ 2028: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/withRouter",
-        function () {
-          return __webpack_require__(4501);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
-
-    /***/ 4501: /***/ (
+    /***/ 559: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -43,7 +16,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(3108);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(1179);
+        __webpack_require__(4169);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_router__WEBPACK_IMPORTED_MODULE_1__
@@ -61,13 +34,40 @@
 
       /***/
     },
+
+    /***/ 726: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/withRouter",
+        function () {
+          return __webpack_require__(559);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
+
+    /***/ 4169: /***/ (
+      module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      module.exports = __webpack_require__(9700);
+
+      /***/
+    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(2028)
+      __webpack_exec__(726)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for 2161-HASH.js

Diff too large to display

Diff for 2747-HASH.js

Diff too large to display

Diff for 4322-HASH.js
failed to diff
Diff for main-HASH.js

Diff too large to display

Diff for main-app-HASH.js
@@ -1,64 +1,64 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [4977],
   {
-    /***/ 341: /***/ () => {
-      /* (ignored) */
-      /***/
-    },
-
-    /***/ 7353: /***/ (
+    /***/ 2637: /***/ (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 375, 23)
+        __webpack_require__.t.bind(__webpack_require__, 7413, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 2972, 23)
+        __webpack_require__.t.bind(__webpack_require__, 9898, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 7508, 23)
+        __webpack_require__.t.bind(__webpack_require__, 9854, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 6043, 23)
+        __webpack_require__.t.bind(__webpack_require__, 9261, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 9797, 23)
+        __webpack_require__.t.bind(__webpack_require__, 867, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 2933, 23)
+        __webpack_require__.t.bind(__webpack_require__, 2463, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 4220, 23)
+        __webpack_require__.t.bind(__webpack_require__, 1866, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 97, 23)
+        __webpack_require__.t.bind(__webpack_require__, 9667, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 464, 23)
+        __webpack_require__.t.bind(__webpack_require__, 8822, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 619, 23)
+        __webpack_require__.t.bind(__webpack_require__, 1717, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 1464, 23)
+        __webpack_require__.t.bind(__webpack_require__, 5366, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 5297)
+        __webpack_require__.bind(__webpack_require__, 1155)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 7937, 23)
+        __webpack_require__.t.bind(__webpack_require__, 391, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 7584, 23)
+        __webpack_require__.t.bind(__webpack_require__, 7346, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 6826, 23)
+        __webpack_require__.t.bind(__webpack_require__, 1340, 23)
       );
 
       /***/
     },
+
+    /***/ 2751: /***/ () => {
+      /* (ignored) */
+      /***/
+    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
@@ -66,8 +66,8 @@
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(
       0,
-      [5639, 4322],
-      () => (__webpack_exec__(2193), __webpack_exec__(7353))
+      [8580, 2658],
+      () => (__webpack_exec__(9851), __webpack_exec__(2637))
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for webpack-HASH.js
@@ -205,7 +205,7 @@
     /******/ __webpack_require__.u = (chunkId) => {
       /******/ // return url for filenames based on template
       /******/ return (
-        "static/chunks/" + chunkId + "." + "9c9ddbde79ea2f29" + ".js"
+        "static/chunks/" + chunkId + "." + "871ca3fb4b1caa0e" + ".js"
       );
       /******/
     };
@@ -380,6 +380,23 @@
       /******/
     };
     /******/
+    /******/ // Next.js chunk cache clearing for retry logic
+    /******/ if (typeof globalThis !== "undefined") {
+      /******/ globalThis.__next_clear_chunk_cache__ = function (chunkId) {
+        /******/ // Only clear if not already loaded (0 means loaded)
+        /******/ if (
+          installedChunks[chunkId] !== 0 &&
+          installedChunks[chunkId] !== undefined
+        ) {
+          /******/ delete installedChunks[chunkId];
+          /******/
+        }
+        /******/
+      };
+      /******/
+    }
+    /******/
+    /******/
     /******/ __webpack_require__.f.j = (chunkId, promises) => {
       /******/ // JSONP chunk loading for javascript
       /******/ var installedChunkData = __webpack_require__.o(
Diff for app-page-exp..ntime.dev.js

Diff too large to display

Diff for app-page-exp..time.prod.js
failed to diff
Diff for app-page-tur..ntime.dev.js

Diff too large to display

Diff for app-page-tur..time.prod.js
failed to diff
Diff for app-page-tur..ntime.dev.js

Diff too large to display

Diff for app-page-tur..time.prod.js

Diff too large to display

Diff for app-page.runtime.dev.js

Diff too large to display

Diff for app-page.runtime.prod.js

Diff too large to display

Diff for pages-turbo...ntime.dev.js

Diff too large to display

Diff for pages-turbo...time.prod.js

Diff too large to display

Diff for pages.runtime.dev.js

Diff too large to display

Diff for pages.runtime.prod.js

Diff too large to display

Commit: 8eeb1f6

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@feedthejim feedthejim force-pushed the chunk-load-error-banner branch from acc1912 to f2573ed Compare January 5, 2026 09:32
@feedthejim feedthejim force-pushed the chunk-load-error-retry branch from 9ca9ab2 to 8eeb1f6 Compare January 5, 2026 09:32
@nextjs-bot
Copy link
Collaborator

nextjs-bot commented Jan 5, 2026

✅ Tests Passed

Updated 2026-01-05 10:41:17 UTC · Commit: 8eeb1f6

@feedthejim feedthejim closed this Jan 5, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

created-by: Next.js team PRs by the Next.js team. tests Turbopack Related to Turbopack with Next.js. type: next

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants