From d9b861f5d6cefac6962fa09990703d5f996ceb77 Mon Sep 17 00:00:00 2001 From: rustyrory Date: Wed, 29 Apr 2026 14:40:01 +0200 Subject: [PATCH] fix(deploy): fixes #151 - reverse proxy basePath et API URL --- CHANGELOG.md | 11 + .../dev/cache/turbopack/0c06f068/CURRENT | Bin 4 -> 4 bytes .../.next/dev/cache/turbopack/0c06f068/LOG | 84 +++++ .../.next/dev/prerender-manifest.json | 6 +- .../frontend/.next/dev/routes-manifest.json | 2 +- .../.next/dev/server/app-paths-manifest.json | 21 +- .../.next/dev/server/middleware-manifest.json | 6 +- .../.next/dev/server/next-font-manifest.js | 2 +- .../.next/dev/server/next-font-manifest.json | 76 ---- .../[root-of-the-server]__0f0ba101._.css | 357 ------------------ .../[root-of-the-server]__0f0ba101._.css.map | 2 +- ...ode_modules_next_dist_client_17643121._.js | 12 +- ...modules_next_dist_client_17643121._.js.map | 102 ++--- .../src_app_globals_css_bad6b30c._.single.css | 357 ------------------ ..._app_globals_css_bad6b30c._.single.css.map | 2 +- saintBarthVolleyApp/frontend/.next/dev/trace | 2 + saintBarthVolleyApp/frontend/next.config.ts | 1 + 17 files changed, 170 insertions(+), 873 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d739eca..fcb2c4d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,6 +27,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 --- +## [0.4.1] - 2026-04-29 + +### Corrigé + +- Déploiement : `NEXT_BASE_PATH` corrigé de `/saintbarth` vers `/saintbarthvolley` dans le Dockerfile +- Déploiement : `NEXT_PUBLIC_API_URL` corrigé en URL absolue (`http://78.138.58.95/saintbarthvolley`) pour le bon fonctionnement du SSR Next.js +- CI : regex commit et titre PR mis à jour pour accepter `fixes` en minuscule (`[Ff]ixes`) +- Pages visiteur : ajout de `export const dynamic = "force-dynamic"` sur le layout visiteur pour éviter le timeout de génération statique au build + +--- + ## [0.4.0] - 2026-04-29 ### Ajouté diff --git a/saintBarthVolleyApp/frontend/.next/dev/cache/turbopack/0c06f068/CURRENT b/saintBarthVolleyApp/frontend/.next/dev/cache/turbopack/0c06f068/CURRENT index 0335b1b940e384cf8b7246abcb3be79b85e5b1e3..9e33bee0a908a227febdfe0a915ae6ddf5bcfe29 100644 GIT binary patch literal 4 LcmZQz;K~F50D%B> literal 4 LcmZQz;EDzS0CNCl diff --git a/saintBarthVolleyApp/frontend/.next/dev/cache/turbopack/0c06f068/LOG b/saintBarthVolleyApp/frontend/.next/dev/cache/turbopack/0c06f068/LOG index a026dbb..d39980f 100644 --- a/saintBarthVolleyApp/frontend/.next/dev/cache/turbopack/0c06f068/LOG +++ b/saintBarthVolleyApp/frontend/.next/dev/cache/turbopack/0c06f068/LOG @@ -3413,3 +3413,87 @@ FAM | META SEQ | SST SEQ | RANGE 0 | 00002649 | 00002648 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) 1 | 00002650 | 00002647 SST | [==================================================================================================] | 0135f6a573dd2886-ff382f713f6ec8d6 (0 MiB, fresh) 2 | 00002651 | 00002646 SST | [==================================================================================================] | 0135f6a573dd2886-ff382f713f6ec8d6 (0 MiB, fresh) +Time 2026-04-29T12:39:50.931878061Z +Commit 00002660 5571 keys in 26ms 101µs 382ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00002658 | 00002657 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 2 | 00002659 | 00002655 SST | [=======================] | 41ca42cf9324c265-7fdf7d442c97bc1d (2 MiB, fresh) + 2 | 00002659 | 00002652 SST | [=======================] | 007932c3b0420c97-3fcabb3d14d6b1c1 (5 MiB, fresh) + 2 | 00002659 | 00002653 SST | [=======================] | 80ce6e197b32a64d-bfb2ce76acfb95fb (6 MiB, fresh) + 2 | 00002659 | 00002654 SST | [=======================] | c0142b5a09463b6f-ff3668a58f5c8b57 (7 MiB, fresh) + 1 | 00002660 | 00002656 SST | [==================================================================================================] | 00010940d5ed71c9-ffdecb7e311ef8b5 (3 MiB, fresh) + 2 | 00002664 | Compaction: + 2 | 00002664 | MERGE (230580 keys): + 2 | 00002664 | 00002354 INPUT | [=================================================] | 00005b386d02964f-8009098a840165fc + 2 | 00002664 | 00002355 INPUT | [================================================] | 800909f66173ee7e-ffffec37b1df3f15 + 2 | 00002664 | 00002353 INPUT | [==================================================================================================] | 01138cc1b508f0c6-ffaaa05169de5144 + 2 | 00002664 | 00002359 INPUT | [==================================================================================================] | 0135f6a573dd2886-ffed87104b29f9bc + 2 | 00002664 | 00002365 INPUT | [==================================================================================================] | 0135f6a573dd2886-ffed87104b29f9bc + 2 | 00002664 | 00002371 INPUT | [==================================================================================================] | 0135f6a573dd2886-ffed87104b29f9bc + 2 | 00002664 | 00002377 INPUT | [==================================================================================================] | 0135f6a573dd2886-ffed87104b29f9bc + 2 | 00002664 | 00002383 INPUT | [==================================================================================================] | 0135f6a573dd2886-ffed87104b29f9bc + 2 | 00002664 | 00002389 INPUT | [==================================================================================================] | 0135f6a573dd2886-ffed87104b29f9bc + 2 | 00002664 | 00002395 INPUT | [================================================================================================] | 02948971f51b0205-faf83758fc31f305 + 2 | 00002664 | 00002401 INPUT | [========================================================================================] | 0012d40b5b688a6a-e60e4bbec4d62990 + 2 | 00002664 | 00002407 INPUT | O | a03e0b72a8f5c7d3-a03e0b72a8f5c7d3 + 2 | 00002664 | 00002413 INPUT | [=================================================================================================] | 050ece94f4ef2163-fe875689beca65fa + 2 | 00002664 | 00002419 INPUT | O | 57236c9aaa7faf25-57236c9aaa7faf25 + 2 | 00002664 | 00002425 INPUT | O | 70e3bf4ebc12101c-70e3bf4ebc12101c + 2 | 00002664 | 00002431 INPUT | O | 6caf55fa20ddb3c1-6caf55fa20ddb3c1 + 2 | 00002664 | 00002436 INPUT | [==================================================================================================] | 00333ae1b2c4949a-fe875689beca65fa + 2 | 00002664 | 00002446 INPUT | [================================================================================================] | 02948971f51b0205-faf83758fc31f305 + 2 | 00002664 | 00002453 INPUT | [==================================================================================================] | 0079297cb331b81a-fe6ce3fe1b18c638 + 2 | 00002664 | 00002459 INPUT | O | a03e0b72a8f5c7d3-a03e0b72a8f5c7d3 + 2 | 00002664 | 00002464 INPUT | [==================================================================================================] | 0079297cb331b81a-fe6ce3fe1b18c638 + 2 | 00002664 | 00002470 INPUT | [==================================================================================================] | 0079297cb331b81a-fe6ce3fe1b18c638 + 2 | 00002664 | 00002476 INPUT | [==================================================================================================] | 00097bec3d0dba0a-fffb5bf35f53d031 + 2 | 00002664 | 00002487 INPUT | O | 57236c9aaa7faf25-57236c9aaa7faf25 + 2 | 00002664 | 00002492 INPUT | [==================================================================================================] | 00333ae1b2c4949a-ff382f713f6ec8d6 + 2 | 00002664 | 00002503 INPUT | [==================================================================================================] | 0079297cb331b81a-ffd60dec7bdb4c7c + 2 | 00002664 | 00002508 INPUT | [==================================================================================================] | 0079297cb331b81a-ffd60dec7bdb4c7c + 2 | 00002664 | 00002515 INPUT | [==================================================================================================] | 0079297cb331b81a-ffd60dec7bdb4c7c + 2 | 00002664 | 00002520 INPUT | [==================================================================================================] | 0005d0b9fdd09e6f-fffb5bf35f53d031 + 2 | 00002664 | 00002530 INPUT | [==================================================================================================] | 0079297cb331b81a-ff382f713f6ec8d6 + 2 | 00002664 | 00002536 INPUT | [========================================================================================] | 0012d40b5b688a6a-e60e4bbec4d62990 + 2 | 00002664 | 00002543 INPUT | [==================================================================================================] | 0135f6a573dd2886-ff382f713f6ec8d6 + 2 | 00002664 | 00002549 INPUT | [==================================================================================================] | 0012d40b5b688a6a-ff382f713f6ec8d6 + 2 | 00002664 | 00002555 INPUT | [==========================================================================================] | 0bca614d578f7ce9-f378f14f55710d1b + 2 | 00002664 | 00002560 INPUT | [=================================================================================================] | 0039b452e80c9d56-fc805173c6397e4a + 2 | 00002664 | 00002567 INPUT | [=================================================================================================] | 050ece94f4ef2163-fe875689beca65fa + 2 | 00002664 | 00002572 INPUT | [=================================================================================================] | 005ef0aa478b04d6-faf83758fc31f305 + 2 | 00002664 | 00002578 INPUT | [==================================================================================================] | 0026df52ef56deaa-ffed87104b29f9bc + 2 | 00002664 | 00002588 INPUT | [==================================================================================================] | 00354912adf86444-ff97140de14e8f41 + 2 | 00002664 | 00002595 INPUT | [==================================================================================================] | 0135f6a573dd2886-ff382f713f6ec8d6 + 2 | 00002664 | 00002601 INPUT | [==================================================================================================] | 0135f6a573dd2886-ff382f713f6ec8d6 + 2 | 00002664 | 00002607 INPUT | [==================================================================================================] | 0135f6a573dd2886-ff382f713f6ec8d6 + 2 | 00002664 | 00002613 INPUT | [==================================================================================================] | 0135f6a573dd2886-ffed87104b29f9bc + 2 | 00002664 | 00002619 INPUT | [==================================================================================================] | 0135f6a573dd2886-ffed87104b29f9bc + 2 | 00002664 | 00002625 INPUT | [==================================================================================================] | 0135f6a573dd2886-ffed87104b29f9bc + 2 | 00002664 | 00002630 INPUT | [==================================================================================================] | 0135f6a573dd2886-ff382f713f6ec8d6 + 2 | 00002664 | 00002637 INPUT | [==================================================================================================] | 003365e30442be65-ff382f713f6ec8d6 + 2 | 00002664 | 00002646 INPUT | [==================================================================================================] | 0135f6a573dd2886-ff382f713f6ec8d6 + 2 | 00002664 | 00002655 INPUT | [=======================] | 41ca42cf9324c265-7fdf7d442c97bc1d + 2 | 00002664 | 00002652 INPUT | [=======================] | 007932c3b0420c97-3fcabb3d14d6b1c1 + 2 | 00002664 | 00002653 INPUT | [=======================] | 80ce6e197b32a64d-bfb2ce76acfb95fb + 2 | 00002664 | 00002654 INPUT | [=======================] | c0142b5a09463b6f-ff3668a58f5c8b57 + 2 | 00002664 | 00002662 OUTPUT | [=================================================] | 00005b386d02964f-80282347016e3924 (cold) + 2 | 00002664 | 00002663 OUTPUT | [================================================] | 802857efc193f50d-ffffec37b1df3f15 (cold) + 2 | 00002664 | 00002661 OUTPUT | [==================================================================================================] | 00078b2aad45711c-fffb5bf35f53d031 (warm) +Time 2026-04-29T12:39:52.020851478Z +Commit 00002665 230580 keys in 155ms 833µs 556ns +FAM | META SEQ | SST SEQ | RANGE + 2 | 00002664 | 00002662 SST | [=================================================] | 00005b386d02964f-80282347016e3924 (66 MiB, cold) + 2 | 00002664 | 00002663 SST | [================================================] | 802857efc193f50d-ffffec37b1df3f15 (63 MiB, cold) + 2 | 00002664 | 00002661 SST | [==================================================================================================] | 00078b2aad45711c-fffb5bf35f53d031 (39 MiB, warm) + 2 | 00002664 | 00002353 00002354 00002355 00002359 00002365 00002371 00002377 00002383 00002389 00002395 00002401 00002407 00002413 00002419 00002425 OBSOLETE SST + 2 | 00002664 | 00002431 00002436 00002446 00002453 00002459 00002464 00002470 00002476 00002487 00002492 00002503 00002508 00002515 00002520 00002530 OBSOLETE SST + 2 | 00002664 | 00002536 00002543 00002549 00002555 00002560 00002567 00002572 00002578 00002588 00002595 00002601 00002607 00002613 00002619 00002625 OBSOLETE SST + 2 | 00002664 | 00002630 00002637 00002646 00002652 00002653 00002654 00002655 OBSOLETE SST + | | 00002353 00002354 00002355 00002359 00002365 00002371 00002377 00002383 00002389 00002395 00002401 00002407 00002413 00002419 00002425 SST DELETED + | | 00002431 00002436 00002446 00002453 00002459 00002464 00002470 00002476 00002487 00002492 00002503 00002508 00002515 00002520 00002530 SST DELETED + | | 00002536 00002543 00002549 00002555 00002560 00002567 00002572 00002578 00002588 00002595 00002601 00002607 00002613 00002619 00002625 SST DELETED + | | 00002630 00002637 00002646 00002652 00002653 00002654 00002655 SST DELETED + | | 00002356 00002363 00002369 00002375 00002381 00002387 00002393 00002399 00002405 00002411 00002417 00002423 00002429 00002435 00002443 META DELETED + | | 00002451 00002457 00002463 00002469 00002475 00002484 00002491 00002500 00002507 00002513 00002519 00002527 00002534 00002541 00002547 META DELETED + | | 00002553 00002559 00002565 00002571 00002577 00002586 00002593 00002599 00002604 00002611 00002617 00002623 00002629 00002635 00002641 META DELETED + | | 00002651 00002659 META DELETED diff --git a/saintBarthVolleyApp/frontend/.next/dev/prerender-manifest.json b/saintBarthVolleyApp/frontend/.next/dev/prerender-manifest.json index 0eda446..aa39768 100644 --- a/saintBarthVolleyApp/frontend/.next/dev/prerender-manifest.json +++ b/saintBarthVolleyApp/frontend/.next/dev/prerender-manifest.json @@ -4,8 +4,8 @@ "dynamicRoutes": {}, "notFoundRoutes": [], "preview": { - "previewModeId": "95768cfb1eb09a16f89869a290b20d29", - "previewModeSigningKey": "531edab99c18d89be4dae166a985dd892959a6a96ed54784532c4df7051a9fb3", - "previewModeEncryptionKey": "41dbf1376ef21bad9f3730764a6ee8a1211dafd767b92e46f79585275b823f86" + "previewModeId": "950356d95c7c70e3329a9a3240c67cb2", + "previewModeSigningKey": "5ded2fd11c4e6cbd37f98db32095fdbad6b6806081d5d510bbe020024ae8e55e", + "previewModeEncryptionKey": "a9a08ddbbad95a1ac1771fdac403e4833c7b2d3b0c01614f56186f32d0d22380" } } \ No newline at end of file diff --git a/saintBarthVolleyApp/frontend/.next/dev/routes-manifest.json b/saintBarthVolleyApp/frontend/.next/dev/routes-manifest.json index 9e484be..f305ae0 100644 --- a/saintBarthVolleyApp/frontend/.next/dev/routes-manifest.json +++ b/saintBarthVolleyApp/frontend/.next/dev/routes-manifest.json @@ -1 +1 @@ -{"version":3,"caseSensitive":false,"basePath":"","rewrites":{"beforeFiles":[],"afterFiles":[],"fallback":[]},"redirects":[{"source":"/:path+/","destination":"/:path+","permanent":true,"internal":true,"priority":true,"regex":"^(?:\\/((?:[^\\/]+?)(?:\\/(?:[^\\/]+?))*))\\/$"}],"headers":[]} \ No newline at end of file +{"version":3,"caseSensitive":false,"basePath":"","rewrites":{"beforeFiles":[],"afterFiles":[],"fallback":[]},"redirects":[{"source":"/:file((?!\\.well-known(?:/.*)?)(?:[^/]+/)*[^/]+\\.\\w+)/","destination":"/:file","permanent":true,"internal":true,"priority":true,"missing":[{"type":"header","key":"x-nextjs-data"}],"regex":"^(?:\\/((?!\\.well-known(?:\\/.*)?)(?:[^/]+\\/)*[^/]+\\.\\w+))\\/$"},{"source":"/:notfile((?!\\.well-known(?:/.*)?)(?:[^/]+/)*[^/\\.]+)","destination":"/:notfile/","permanent":true,"internal":true,"priority":true,"regex":"^(?:\\/((?!\\.well-known(?:\\/.*)?)(?:[^/]+\\/)*[^/\\.]+))$"}],"headers":[]} \ No newline at end of file diff --git a/saintBarthVolleyApp/frontend/.next/dev/server/app-paths-manifest.json b/saintBarthVolleyApp/frontend/.next/dev/server/app-paths-manifest.json index 081abc7..711d51c 100644 --- a/saintBarthVolleyApp/frontend/.next/dev/server/app-paths-manifest.json +++ b/saintBarthVolleyApp/frontend/.next/dev/server/app-paths-manifest.json @@ -1,23 +1,4 @@ { - "/(visitor)/actualites/page": "app/(visitor)/actualites/page.js", - "/(visitor)/club/page": "app/(visitor)/club/page.js", - "/(visitor)/contact/page": "app/(visitor)/contact/page.js", - "/(visitor)/equipes/[id]/page": "app/(visitor)/equipes/[id]/page.js", - "/(visitor)/equipes/page": "app/(visitor)/equipes/page.js", - "/(visitor)/page": "app/(visitor)/page.js", "/(visitor)/partenaires/page": "app/(visitor)/partenaires/page.js", - "/admin/albums/page": "app/admin/albums/page.js", - "/admin/championships/page": "app/admin/championships/page.js", - "/admin/club/page": "app/admin/club/page.js", - "/admin/events/page": "app/admin/events/page.js", - "/admin/matches/page": "app/admin/matches/page.js", - "/admin/members/page": "app/admin/members/page.js", - "/admin/news/page": "app/admin/news/page.js", - "/admin/page": "app/admin/page.js", - "/admin/partners/page": "app/admin/partners/page.js", - "/admin/seasons/[seasonId]/teams/[teamId]/page": "app/admin/seasons/[seasonId]/teams/[teamId]/page.js", - "/admin/seasons/[seasonId]/teams/page": "app/admin/seasons/[seasonId]/teams/page.js", - "/admin/seasons/page": "app/admin/seasons/page.js", - "/admin/users/page": "app/admin/users/page.js", - "/login/page": "app/login/page.js" + "/admin/news/page": "app/admin/news/page.js" } \ No newline at end of file diff --git a/saintBarthVolleyApp/frontend/.next/dev/server/middleware-manifest.json b/saintBarthVolleyApp/frontend/.next/dev/server/middleware-manifest.json index e45384a..b97dc32 100644 --- a/saintBarthVolleyApp/frontend/.next/dev/server/middleware-manifest.json +++ b/saintBarthVolleyApp/frontend/.next/dev/server/middleware-manifest.json @@ -20,9 +20,9 @@ "env": { "__NEXT_BUILD_ID": "development", "NEXT_SERVER_ACTIONS_ENCRYPTION_KEY": "sOYgGHuaOWqc56NZ6mM6zFxHxtEpZ3nhbiB7e21Q3cs=", - "__NEXT_PREVIEW_MODE_ID": "95768cfb1eb09a16f89869a290b20d29", - "__NEXT_PREVIEW_MODE_ENCRYPTION_KEY": "41dbf1376ef21bad9f3730764a6ee8a1211dafd767b92e46f79585275b823f86", - "__NEXT_PREVIEW_MODE_SIGNING_KEY": "531edab99c18d89be4dae166a985dd892959a6a96ed54784532c4df7051a9fb3" + "__NEXT_PREVIEW_MODE_ID": "950356d95c7c70e3329a9a3240c67cb2", + "__NEXT_PREVIEW_MODE_ENCRYPTION_KEY": "a9a08ddbbad95a1ac1771fdac403e4833c7b2d3b0c01614f56186f32d0d22380", + "__NEXT_PREVIEW_MODE_SIGNING_KEY": "5ded2fd11c4e6cbd37f98db32095fdbad6b6806081d5d510bbe020024ae8e55e" } } }, diff --git a/saintBarthVolleyApp/frontend/.next/dev/server/next-font-manifest.js b/saintBarthVolleyApp/frontend/.next/dev/server/next-font-manifest.js index b6f01c8..30b0800 100644 --- a/saintBarthVolleyApp/frontend/.next/dev/server/next-font-manifest.js +++ b/saintBarthVolleyApp/frontend/.next/dev/server/next-font-manifest.js @@ -1 +1 @@ -self.__NEXT_FONT_MANIFEST="{\n \"app\": {\n \"[project]/src/app/(visitor)/actualites/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.853070df.woff2\",\n \"static/media/797e433ab948586e-s.p.dbea232f.woff2\"\n ],\n \"[project]/src/app/(visitor)/club/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.853070df.woff2\",\n \"static/media/797e433ab948586e-s.p.dbea232f.woff2\"\n ],\n \"[project]/src/app/(visitor)/contact/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.853070df.woff2\",\n \"static/media/797e433ab948586e-s.p.dbea232f.woff2\"\n ],\n \"[project]/src/app/(visitor)/equipes/[id]/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.853070df.woff2\",\n \"static/media/797e433ab948586e-s.p.dbea232f.woff2\"\n ],\n \"[project]/src/app/(visitor)/equipes/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.853070df.woff2\",\n \"static/media/797e433ab948586e-s.p.dbea232f.woff2\"\n ],\n \"[project]/src/app/(visitor)/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.853070df.woff2\",\n \"static/media/797e433ab948586e-s.p.dbea232f.woff2\"\n ],\n \"[project]/src/app/(visitor)/partenaires/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.853070df.woff2\",\n \"static/media/797e433ab948586e-s.p.dbea232f.woff2\"\n ],\n \"[project]/src/app/admin/albums/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.853070df.woff2\",\n \"static/media/797e433ab948586e-s.p.dbea232f.woff2\"\n ],\n \"[project]/src/app/admin/championships/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.853070df.woff2\",\n \"static/media/797e433ab948586e-s.p.dbea232f.woff2\"\n ],\n \"[project]/src/app/admin/club/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.853070df.woff2\",\n \"static/media/797e433ab948586e-s.p.dbea232f.woff2\"\n ],\n \"[project]/src/app/admin/events/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.853070df.woff2\",\n \"static/media/797e433ab948586e-s.p.dbea232f.woff2\"\n ],\n \"[project]/src/app/admin/matches/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.853070df.woff2\",\n \"static/media/797e433ab948586e-s.p.dbea232f.woff2\"\n ],\n \"[project]/src/app/admin/members/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.853070df.woff2\",\n \"static/media/797e433ab948586e-s.p.dbea232f.woff2\"\n ],\n \"[project]/src/app/admin/news/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.853070df.woff2\",\n \"static/media/797e433ab948586e-s.p.dbea232f.woff2\"\n ],\n \"[project]/src/app/admin/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.853070df.woff2\",\n \"static/media/797e433ab948586e-s.p.dbea232f.woff2\"\n ],\n \"[project]/src/app/admin/partners/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.853070df.woff2\",\n \"static/media/797e433ab948586e-s.p.dbea232f.woff2\"\n ],\n \"[project]/src/app/admin/seasons/[seasonId]/teams/[teamId]/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.853070df.woff2\",\n \"static/media/797e433ab948586e-s.p.dbea232f.woff2\"\n ],\n \"[project]/src/app/admin/seasons/[seasonId]/teams/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.853070df.woff2\",\n \"static/media/797e433ab948586e-s.p.dbea232f.woff2\"\n ],\n \"[project]/src/app/admin/seasons/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.853070df.woff2\",\n \"static/media/797e433ab948586e-s.p.dbea232f.woff2\"\n ],\n \"[project]/src/app/admin/users/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.853070df.woff2\",\n \"static/media/797e433ab948586e-s.p.dbea232f.woff2\"\n ],\n \"[project]/src/app/login/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.853070df.woff2\",\n \"static/media/797e433ab948586e-s.p.dbea232f.woff2\"\n ]\n },\n \"appUsingSizeAdjust\": true,\n \"pages\": {},\n \"pagesUsingSizeAdjust\": false\n}" \ No newline at end of file +self.__NEXT_FONT_MANIFEST="{\n \"app\": {\n \"[project]/src/app/(visitor)/partenaires/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.853070df.woff2\",\n \"static/media/797e433ab948586e-s.p.dbea232f.woff2\"\n ],\n \"[project]/src/app/admin/news/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.853070df.woff2\",\n \"static/media/797e433ab948586e-s.p.dbea232f.woff2\"\n ]\n },\n \"appUsingSizeAdjust\": true,\n \"pages\": {},\n \"pagesUsingSizeAdjust\": false\n}" \ No newline at end of file diff --git a/saintBarthVolleyApp/frontend/.next/dev/server/next-font-manifest.json b/saintBarthVolleyApp/frontend/.next/dev/server/next-font-manifest.json index 44e7333..f30fcad 100644 --- a/saintBarthVolleyApp/frontend/.next/dev/server/next-font-manifest.json +++ b/saintBarthVolleyApp/frontend/.next/dev/server/next-font-manifest.json @@ -1,88 +1,12 @@ { "app": { - "[project]/src/app/(visitor)/actualites/page": [ - "static/media/caa3a2e1cccd8315-s.p.853070df.woff2", - "static/media/797e433ab948586e-s.p.dbea232f.woff2" - ], - "[project]/src/app/(visitor)/club/page": [ - "static/media/caa3a2e1cccd8315-s.p.853070df.woff2", - "static/media/797e433ab948586e-s.p.dbea232f.woff2" - ], - "[project]/src/app/(visitor)/contact/page": [ - "static/media/caa3a2e1cccd8315-s.p.853070df.woff2", - "static/media/797e433ab948586e-s.p.dbea232f.woff2" - ], - "[project]/src/app/(visitor)/equipes/[id]/page": [ - "static/media/caa3a2e1cccd8315-s.p.853070df.woff2", - "static/media/797e433ab948586e-s.p.dbea232f.woff2" - ], - "[project]/src/app/(visitor)/equipes/page": [ - "static/media/caa3a2e1cccd8315-s.p.853070df.woff2", - "static/media/797e433ab948586e-s.p.dbea232f.woff2" - ], - "[project]/src/app/(visitor)/page": [ - "static/media/caa3a2e1cccd8315-s.p.853070df.woff2", - "static/media/797e433ab948586e-s.p.dbea232f.woff2" - ], "[project]/src/app/(visitor)/partenaires/page": [ "static/media/caa3a2e1cccd8315-s.p.853070df.woff2", "static/media/797e433ab948586e-s.p.dbea232f.woff2" ], - "[project]/src/app/admin/albums/page": [ - "static/media/caa3a2e1cccd8315-s.p.853070df.woff2", - "static/media/797e433ab948586e-s.p.dbea232f.woff2" - ], - "[project]/src/app/admin/championships/page": [ - "static/media/caa3a2e1cccd8315-s.p.853070df.woff2", - "static/media/797e433ab948586e-s.p.dbea232f.woff2" - ], - "[project]/src/app/admin/club/page": [ - "static/media/caa3a2e1cccd8315-s.p.853070df.woff2", - "static/media/797e433ab948586e-s.p.dbea232f.woff2" - ], - "[project]/src/app/admin/events/page": [ - "static/media/caa3a2e1cccd8315-s.p.853070df.woff2", - "static/media/797e433ab948586e-s.p.dbea232f.woff2" - ], - "[project]/src/app/admin/matches/page": [ - "static/media/caa3a2e1cccd8315-s.p.853070df.woff2", - "static/media/797e433ab948586e-s.p.dbea232f.woff2" - ], - "[project]/src/app/admin/members/page": [ - "static/media/caa3a2e1cccd8315-s.p.853070df.woff2", - "static/media/797e433ab948586e-s.p.dbea232f.woff2" - ], "[project]/src/app/admin/news/page": [ "static/media/caa3a2e1cccd8315-s.p.853070df.woff2", "static/media/797e433ab948586e-s.p.dbea232f.woff2" - ], - "[project]/src/app/admin/page": [ - "static/media/caa3a2e1cccd8315-s.p.853070df.woff2", - "static/media/797e433ab948586e-s.p.dbea232f.woff2" - ], - "[project]/src/app/admin/partners/page": [ - "static/media/caa3a2e1cccd8315-s.p.853070df.woff2", - "static/media/797e433ab948586e-s.p.dbea232f.woff2" - ], - "[project]/src/app/admin/seasons/[seasonId]/teams/[teamId]/page": [ - "static/media/caa3a2e1cccd8315-s.p.853070df.woff2", - "static/media/797e433ab948586e-s.p.dbea232f.woff2" - ], - "[project]/src/app/admin/seasons/[seasonId]/teams/page": [ - "static/media/caa3a2e1cccd8315-s.p.853070df.woff2", - "static/media/797e433ab948586e-s.p.dbea232f.woff2" - ], - "[project]/src/app/admin/seasons/page": [ - "static/media/caa3a2e1cccd8315-s.p.853070df.woff2", - "static/media/797e433ab948586e-s.p.dbea232f.woff2" - ], - "[project]/src/app/admin/users/page": [ - "static/media/caa3a2e1cccd8315-s.p.853070df.woff2", - "static/media/797e433ab948586e-s.p.dbea232f.woff2" - ], - "[project]/src/app/login/page": [ - "static/media/caa3a2e1cccd8315-s.p.853070df.woff2", - "static/media/797e433ab948586e-s.p.dbea232f.woff2" ] }, "appUsingSizeAdjust": true, diff --git a/saintBarthVolleyApp/frontend/.next/dev/static/chunks/[root-of-the-server]__0f0ba101._.css b/saintBarthVolleyApp/frontend/.next/dev/static/chunks/[root-of-the-server]__0f0ba101._.css index d58693a..246a0e5 100644 --- a/saintBarthVolleyApp/frontend/.next/dev/static/chunks/[root-of-the-server]__0f0ba101._.css +++ b/saintBarthVolleyApp/frontend/.next/dev/static/chunks/[root-of-the-server]__0f0ba101._.css @@ -180,7 +180,6 @@ --color-orange-600: #f05100; --color-orange-700: #c53c00; --color-amber-50: #fffbeb; - --color-amber-100: #fef3c6; --color-amber-200: #fee685; --color-amber-400: #fcbb00; --color-amber-700: #b75000; @@ -201,8 +200,6 @@ --color-green-900: #0d542b; --color-green-950: #032e15; --color-teal-500: #00baa7; - --color-sky-100: #dff2fe; - --color-sky-700: #0069a4; --color-blue-50: #eff6ff; --color-blue-100: #dbeafe; --color-blue-200: #bedbff; @@ -212,10 +209,8 @@ --color-purple-100: #f3e8ff; --color-purple-500: #ac4bff; --color-purple-700: #8200da; - --color-pink-100: #fce7f3; --color-pink-500: #f6339a; --color-pink-600: #e30076; - --color-pink-700: #c4005c; --color-gray-50: #f9fafb; --color-gray-100: #f3f4f6; --color-gray-200: #e5e7eb; @@ -306,7 +301,6 @@ --color-orange-600: lab(57.1026% 64.2584 89.8886); --color-orange-700: lab(46.4615% 57.7275 70.8507); --color-amber-50: lab(98.6252% -.635922 8.42309); - --color-amber-100: lab(95.916% -1.21653 23.111); --color-amber-200: lab(91.7203% -.505269 49.9084); --color-amber-400: lab(80.1641% 16.6016 99.2089); --color-amber-700: lab(47.2709% 42.9082 69.2966); @@ -327,8 +321,6 @@ --color-green-900: lab(30.797% -29.6927 17.382); --color-green-950: lab(15.6845% -20.4225 11.7249); --color-teal-500: lab(67.3859% -49.0983 -2.63511); - --color-sky-100: lab(94.3709% -4.56053 -8.23453); - --color-sky-700: lab(41.6013% -9.10804 -42.5647); --color-blue-50: lab(96.492% -1.14644 -5.11479); --color-blue-100: lab(92.0301% -2.24757 -11.6453); --color-blue-200: lab(86.15% -4.04379 -21.0797); @@ -338,10 +330,8 @@ --color-purple-100: lab(93.3333% 6.97437 -9.83434); --color-purple-500: lab(52.0183% 66.11 -78.2316); --color-purple-700: lab(36.1758% 69.8525 -80.0381); - --color-pink-100: lab(93.5864% 9.01193 -3.15079); --color-pink-500: lab(56.9303% 76.8162 -8.07021); --color-pink-600: lab(49.5493% 79.8381 2.31768); - --color-pink-700: lab(42.1737% 71.8009 7.42233); --color-gray-50: lab(98.2596% -.247031 -.706708); --color-gray-100: lab(96.1596% -.0823438 -1.13575); --color-gray-200: lab(91.6229% -.159115 -2.26791); @@ -864,10 +854,6 @@ margin-top: calc(var(--spacing) * 1); } - .mt-1\.5 { - margin-top: calc(var(--spacing) * 1.5); - } - .mt-2 { margin-top: calc(var(--spacing) * 2); } @@ -896,10 +882,6 @@ margin-top: calc(var(--spacing) * 12); } - .mt-20 { - margin-top: calc(var(--spacing) * 20); - } - .mt-auto { margin-top: auto; } @@ -936,26 +918,10 @@ margin-bottom: calc(var(--spacing) * 8); } - .mb-10 { - margin-bottom: calc(var(--spacing) * 10); - } - - .mb-12 { - margin-bottom: calc(var(--spacing) * 12); - } - - .mb-16 { - margin-bottom: calc(var(--spacing) * 16); - } - .-ml-1 { margin-left: calc(var(--spacing) * -1); } - .ml-1 { - margin-left: calc(var(--spacing) * 1); - } - .ml-2 { margin-left: calc(var(--spacing) * 2); } @@ -1212,10 +1178,6 @@ height: calc(var(--spacing) * 72); } - .h-80 { - height: calc(var(--spacing) * 80); - } - .h-\[calc\(100\%-1px\)\] { height: calc(100% - 1px); } @@ -1412,14 +1374,6 @@ width: calc(var(--spacing) * 28); } - .w-36 { - width: calc(var(--spacing) * 36); - } - - .w-48 { - width: calc(var(--spacing) * 48); - } - .w-\[100px\] { width: 100px; } @@ -1769,10 +1723,6 @@ gap: calc(var(--spacing) * 10); } - .gap-12 { - gap: calc(var(--spacing) * 12); - } - :where(.space-y-1\.5 > :not(:last-child)) { --tw-space-y-reverse: 0; margin-block-start: calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse)); @@ -1815,20 +1765,12 @@ margin-block-end: calc(calc(var(--spacing) * 10) * calc(1 - var(--tw-space-y-reverse))); } - .gap-x-6 { - column-gap: calc(var(--spacing) * 6); - } - :where(.-space-x-2 > :not(:last-child)) { --tw-space-x-reverse: 0; margin-inline-start: calc(calc(var(--spacing) * -2) * var(--tw-space-x-reverse)); margin-inline-end: calc(calc(var(--spacing) * -2) * calc(1 - var(--tw-space-x-reverse))); } - .gap-y-1 { - row-gap: calc(var(--spacing) * 1); - } - :where(.divide-y > :not(:last-child)) { --tw-divide-y-reverse: 0; border-bottom-style: var(--tw-border-style); @@ -2011,18 +1953,6 @@ border-color: var(--color-gray-200); } - .border-gray-600 { - border-color: var(--color-gray-600); - } - - .border-gray-800 { - border-color: var(--color-gray-800); - } - - .border-green-100 { - border-color: var(--color-green-100); - } - .border-green-200 { border-color: var(--color-green-200); } @@ -2045,10 +1975,6 @@ border-color: var(--color-green-700); } - .border-green-800 { - border-color: var(--color-green-800); - } - .border-green-800\/60 { border-color: #01663099; } @@ -2093,16 +2019,6 @@ border-color: var(--color-white); } - .border-white\/5 { - border-color: #ffffff0d; - } - - @supports (color: color-mix(in lab, red, red)) { - .border-white\/5 { - border-color: color-mix(in oklab, var(--color-white) 5%, transparent); - } - } - .border-white\/10 { border-color: #ffffff1a; } @@ -2149,10 +2065,6 @@ background-color: var(--color-amber-50); } - .bg-amber-100 { - background-color: var(--color-amber-100); - } - .bg-amber-400 { background-color: var(--color-amber-400); } @@ -2257,16 +2169,6 @@ } } - .bg-gray-50\/50 { - background-color: #f9fafb80; - } - - @supports (color: color-mix(in lab, red, red)) { - .bg-gray-50\/50 { - background-color: color-mix(in oklab, var(--color-gray-50) 50%, transparent); - } - } - .bg-gray-100 { background-color: var(--color-gray-100); } @@ -2283,18 +2185,10 @@ background-color: var(--color-gray-500); } - .bg-gray-800 { - background-color: var(--color-gray-800); - } - .bg-gray-900 { background-color: var(--color-gray-900); } - .bg-gray-950 { - background-color: var(--color-gray-950); - } - .bg-green-50 { background-color: var(--color-green-50); } @@ -2313,10 +2207,6 @@ background-color: var(--color-green-100); } - .bg-green-300 { - background-color: var(--color-green-300); - } - .bg-green-400 { background-color: var(--color-green-400); } @@ -2333,16 +2223,6 @@ background-color: var(--color-green-700); } - .bg-green-700\/20 { - background-color: #00813833; - } - - @supports (color: color-mix(in lab, red, red)) { - .bg-green-700\/20 { - background-color: color-mix(in oklab, var(--color-green-700) 20%, transparent); - } - } - .bg-green-700\/30 { background-color: #0081384d; } @@ -2353,16 +2233,6 @@ } } - .bg-green-700\/80 { - background-color: #008138cc; - } - - @supports (color: color-mix(in lab, red, red)) { - .bg-green-700\/80 { - background-color: color-mix(in oklab, var(--color-green-700) 80%, transparent); - } - } - .bg-green-700\/90 { background-color: #008138e6; } @@ -2373,10 +2243,6 @@ } } - .bg-green-800 { - background-color: var(--color-green-800); - } - .bg-green-800\/60 { background-color: #01663099; } @@ -2471,10 +2337,6 @@ background-color: var(--color-orange-600); } - .bg-pink-100 { - background-color: var(--color-pink-100); - } - .bg-pink-500 { background-color: var(--color-pink-500); } @@ -2519,10 +2381,6 @@ background-color: var(--sidebar-border); } - .bg-sky-100 { - background-color: var(--color-sky-100); - } - .bg-teal-500 { background-color: var(--color-teal-500); } @@ -2535,16 +2393,6 @@ background-color: var(--color-white); } - .bg-white\/5 { - background-color: #ffffff0d; - } - - @supports (color: color-mix(in lab, red, red)) { - .bg-white\/5 { - background-color: color-mix(in oklab, var(--color-white) 5%, transparent); - } - } - .bg-white\/10 { background-color: #ffffff1a; } @@ -2565,16 +2413,6 @@ } } - .bg-white\/20 { - background-color: #fff3; - } - - @supports (color: color-mix(in lab, red, red)) { - .bg-white\/20 { - background-color: color-mix(in oklab, var(--color-white) 20%, transparent); - } - } - .bg-white\/30 { background-color: #ffffff4d; } @@ -2633,20 +2471,6 @@ background-image: linear-gradient(var(--tw-gradient-stops)); } - .from-black\/10 { - --tw-gradient-from: #0000001a; - } - - @supports (color: color-mix(in lab, red, red)) { - .from-black\/10 { - --tw-gradient-from: color-mix(in oklab, var(--color-black) 10%, transparent); - } - } - - .from-black\/10 { - --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); - } - .from-black\/30 { --tw-gradient-from: #0000004d; } @@ -2680,11 +2504,6 @@ --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); } - .from-gray-200 { - --tw-gradient-from: var(--color-gray-200); - --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); - } - .from-gray-900 { --tw-gradient-from: var(--color-gray-900); --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); @@ -2704,20 +2523,6 @@ --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); } - .from-gray-900\/70 { - --tw-gradient-from: #101828b3; - } - - @supports (color: color-mix(in lab, red, red)) { - .from-gray-900\/70 { - --tw-gradient-from: color-mix(in oklab, var(--color-gray-900) 70%, transparent); - } - } - - .from-gray-900\/70 { - --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); - } - .from-gray-950 { --tw-gradient-from: var(--color-gray-950); --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); @@ -2769,21 +2574,6 @@ --tw-gradient-stops: var(--tw-gradient-via-stops); } - .via-gray-950\/30 { - --tw-gradient-via: #0307124d; - } - - @supports (color: color-mix(in lab, red, red)) { - .via-gray-950\/30 { - --tw-gradient-via: color-mix(in oklab, var(--color-gray-950) 30%, transparent); - } - } - - .via-gray-950\/30 { - --tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position); - --tw-gradient-stops: var(--tw-gradient-via-stops); - } - .via-green-900 { --tw-gradient-via: var(--color-green-900); --tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position); @@ -2805,26 +2595,6 @@ --tw-gradient-stops: var(--tw-gradient-via-stops); } - .via-transparent { - --tw-gradient-via: transparent; - --tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position); - --tw-gradient-stops: var(--tw-gradient-via-stops); - } - - .to-black\/20 { - --tw-gradient-to: #0003; - } - - @supports (color: color-mix(in lab, red, red)) { - .to-black\/20 { - --tw-gradient-to: color-mix(in oklab, var(--color-black) 20%, transparent); - } - } - - .to-black\/20 { - --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); - } - .to-black\/50 { --tw-gradient-to: #00000080; } @@ -2853,11 +2623,6 @@ --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); } - .to-gray-300 { - --tw-gradient-to: var(--color-gray-300); - --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); - } - .to-gray-900 { --tw-gradient-to: var(--color-gray-900); --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); @@ -2951,10 +2716,6 @@ padding: calc(var(--spacing) * 6); } - .p-8 { - padding: calc(var(--spacing) * 8); - } - .p-\[3px\] { padding: 3px; } @@ -3412,10 +3173,6 @@ color: var(--color-green-400); } - .text-green-500 { - color: var(--color-green-500); - } - .text-green-600 { color: var(--color-green-600); } @@ -3444,10 +3201,6 @@ color: var(--color-orange-700); } - .text-pink-700 { - color: var(--color-pink-700); - } - .text-popover-foreground { color: var(--popover-foreground); } @@ -3498,10 +3251,6 @@ } } - .text-sky-700 { - color: var(--color-sky-700); - } - .text-white { color: var(--color-white); } @@ -3526,16 +3275,6 @@ } } - .text-white\/60 { - color: #fff9; - } - - @supports (color: color-mix(in lab, red, red)) { - .text-white\/60 { - color: color-mix(in oklab, var(--color-white) 60%, transparent); - } - } - .text-white\/70 { color: #ffffffb3; } @@ -3851,18 +3590,6 @@ } } - @media (hover: hover) { - .group-hover\:w-6:is(:where(.group):hover *) { - width: calc(var(--spacing) * 6); - } - } - - @media (hover: hover) { - .group-hover\:border-green-300:is(:where(.group):hover *) { - border-color: var(--color-green-300); - } - } - @media (hover: hover) { .group-hover\:border-green-400:is(:where(.group):hover *) { border-color: var(--color-green-400); @@ -3881,12 +3608,6 @@ } } - @media (hover: hover) { - .group-hover\:bg-green-700:is(:where(.group):hover *) { - background-color: var(--color-green-700); - } - } - @media (hover: hover) { .group-hover\:bg-green-800:is(:where(.group):hover *) { background-color: var(--color-green-800); @@ -3905,12 +3626,6 @@ } } - @media (hover: hover) { - .group-hover\:text-white:is(:where(.group):hover *) { - color: var(--color-white); - } - } - @media (hover: hover) { .group-hover\:opacity-100:is(:where(.group):hover *) { opacity: 1; @@ -4320,24 +4035,6 @@ } } - @media (hover: hover) { - .hover\:border-green-500\/40:hover { - border-color: #00c75866; - } - - @supports (color: color-mix(in lab, red, red)) { - .hover\:border-green-500\/40:hover { - border-color: color-mix(in oklab, var(--color-green-500) 40%, transparent); - } - } - } - - @media (hover: hover) { - .hover\:border-green-600:hover { - border-color: var(--color-green-600); - } - } - @media (hover: hover) { .hover\:border-pink-500:hover { border-color: var(--color-pink-500); @@ -4434,18 +4131,6 @@ } } - @media (hover: hover) { - .hover\:bg-gray-700:hover { - background-color: var(--color-gray-700); - } - } - - @media (hover: hover) { - .hover\:bg-gray-800:hover { - background-color: var(--color-gray-800); - } - } - @media (hover: hover) { .hover\:bg-green-50:hover { background-color: var(--color-green-50); @@ -4662,12 +4347,6 @@ } } - @media (hover: hover) { - .hover\:text-green-300:hover { - color: var(--color-green-300); - } - } - @media (hover: hover) { .hover\:text-green-400:hover { color: var(--color-green-400); @@ -5530,12 +5209,6 @@ } } - @media (min-width: 40rem) { - .sm\:grid-cols-1 { - grid-template-columns: repeat(1, minmax(0, 1fr)); - } - } - @media (min-width: 40rem) { .sm\:grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); @@ -5566,12 +5239,6 @@ } } - @media (min-width: 40rem) { - .sm\:items-end { - align-items: flex-end; - } - } - @media (min-width: 40rem) { .sm\:justify-end { justify-content: flex-end; @@ -5608,12 +5275,6 @@ } } - @media (min-width: 40rem) { - .sm\:p-10 { - padding: calc(var(--spacing) * 10); - } - } - @media (min-width: 40rem) { .sm\:px-6 { padding-inline: calc(var(--spacing) * 6); @@ -5741,12 +5402,6 @@ } } - @media (min-width: 48rem) { - .md\:grid-cols-3 { - grid-template-columns: repeat(3, minmax(0, 1fr)); - } - } - @media (min-width: 48rem) { .md\:grid-cols-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); @@ -5847,12 +5502,6 @@ } } - @media (min-width: 64rem) { - .lg\:table-cell { - display: table-cell; - } - } - @media (min-width: 64rem) { .lg\:h-80 { height: calc(var(--spacing) * 80); @@ -5877,12 +5526,6 @@ } } - @media (min-width: 64rem) { - .lg\:grid-cols-4 { - grid-template-columns: repeat(4, minmax(0, 1fr)); - } - } - @media (min-width: 64rem) { .lg\:grid-cols-5 { grid-template-columns: repeat(5, minmax(0, 1fr)); diff --git a/saintBarthVolleyApp/frontend/.next/dev/static/chunks/[root-of-the-server]__0f0ba101._.css.map b/saintBarthVolleyApp/frontend/.next/dev/static/chunks/[root-of-the-server]__0f0ba101._.css.map index 3324088..a5c7287 100644 --- a/saintBarthVolleyApp/frontend/.next/dev/static/chunks/[root-of-the-server]__0f0ba101._.css.map +++ b/saintBarthVolleyApp/frontend/.next/dev/static/chunks/[root-of-the-server]__0f0ba101._.css.map @@ -4,5 +4,5 @@ "sections": [ {"offset": {"line": 1, "column": 0}, "map": {"version":3,"sources":["turbopack:///[next]/internal/font/google/geist_a71539c9.module.css"],"sourcesContent":["/* cyrillic */\n@font-face {\n font-family: 'Geist';\n font-style: normal;\n font-weight: 100 900;\n font-display: swap;\n src: url(@vercel/turbopack-next/internal/font/google/font?{%22url%22:%22https://fonts.gstatic.com/s/geist/v4/gyByhwUxId8gMEwYGFWNOITddY4.woff2%22,%22preload%22:false,%22has_size_adjust%22:true}) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Geist';\n font-style: normal;\n font-weight: 100 900;\n font-display: swap;\n src: url(@vercel/turbopack-next/internal/font/google/font?{%22url%22:%22https://fonts.gstatic.com/s/geist/v4/gyByhwUxId8gMEwSGFWNOITddY4.woff2%22,%22preload%22:false,%22has_size_adjust%22:true}) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Geist';\n font-style: normal;\n font-weight: 100 900;\n font-display: swap;\n src: url(@vercel/turbopack-next/internal/font/google/font?{%22url%22:%22https://fonts.gstatic.com/s/geist/v4/gyByhwUxId8gMEwcGFWNOITd.woff2%22,%22preload%22:true,%22has_size_adjust%22:true}) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n@font-face {\n font-family: 'Geist Fallback';\n src: local(\"Arial\");\n ascent-override: 95.94%;\ndescent-override: 28.16%;\nline-gap-override: 0.00%;\nsize-adjust: 104.76%;\n\n}\n.className {\n font-family: 'Geist', 'Geist Fallback';\n font-style: normal;\n\n}\n.variable {\n --font-geist-sans: 'Geist', 'Geist Fallback';\n}\n"],"names":[],"mappings":"AACA;;;;;;;;;AASA;;;;;;;;;AASA;;;;;;;;;AAQA;;;;;;;;;AASA;;;;;AAKA","ignoreList":[0]}}, {"offset": {"line": 47, "column": 0}, "map": {"version":3,"sources":["turbopack:///[next]/internal/font/google/geist_mono_8d43a2aa.module.css"],"sourcesContent":["/* cyrillic */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 100 900;\n font-display: swap;\n src: url(@vercel/turbopack-next/internal/font/google/font?{%22url%22:%22https://fonts.gstatic.com/s/geistmono/v4/or3nQ6H-1_WfwkMZI_qYFrMdmhHkjkotbA.woff2%22,%22preload%22:false,%22has_size_adjust%22:true}) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 100 900;\n font-display: swap;\n src: url(@vercel/turbopack-next/internal/font/google/font?{%22url%22:%22https://fonts.gstatic.com/s/geistmono/v4/or3nQ6H-1_WfwkMZI_qYFrkdmhHkjkotbA.woff2%22,%22preload%22:false,%22has_size_adjust%22:true}) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 100 900;\n font-display: swap;\n src: url(@vercel/turbopack-next/internal/font/google/font?{%22url%22:%22https://fonts.gstatic.com/s/geistmono/v4/or3nQ6H-1_WfwkMZI_qYFrcdmhHkjko.woff2%22,%22preload%22:true,%22has_size_adjust%22:true}) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n@font-face {\n font-family: 'Geist Mono Fallback';\n src: local(\"Arial\");\n ascent-override: 74.67%;\ndescent-override: 21.92%;\nline-gap-override: 0.00%;\nsize-adjust: 134.59%;\n\n}\n.className {\n font-family: 'Geist Mono', 'Geist Mono Fallback';\n font-style: normal;\n\n}\n.variable {\n --font-geist-mono: 'Geist Mono', 'Geist Mono Fallback';\n}\n"],"names":[],"mappings":"AACA;;;;;;;;;AASA;;;;;;;;;AASA;;;;;;;;;AAQA;;;;;;;;;AASA;;;;;AAKA","ignoreList":[0]}}, - {"offset": {"line": 93, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/src/app/globals.css"],"sourcesContent":["/*! tailwindcss v4.2.1 | MIT License | https://tailwindcss.com */\n@layer properties;\n@layer theme, base, components, utilities;\n@layer theme {\n :root, :host {\n --color-red-50: oklch(97.1% 0.013 17.38);\n --color-red-100: oklch(93.6% 0.032 17.717);\n --color-red-200: oklch(88.5% 0.062 18.334);\n --color-red-400: oklch(70.4% 0.191 22.216);\n --color-red-500: oklch(63.7% 0.237 25.331);\n --color-red-600: oklch(57.7% 0.245 27.325);\n --color-red-700: oklch(50.5% 0.213 27.518);\n --color-orange-100: oklch(95.4% 0.038 75.164);\n --color-orange-500: oklch(70.5% 0.213 47.604);\n --color-orange-600: oklch(64.6% 0.222 41.116);\n --color-orange-700: oklch(55.3% 0.195 38.402);\n --color-amber-50: oklch(98.7% 0.022 95.277);\n --color-amber-100: oklch(96.2% 0.059 95.617);\n --color-amber-200: oklch(92.4% 0.12 95.746);\n --color-amber-400: oklch(82.8% 0.189 84.429);\n --color-amber-700: oklch(55.5% 0.163 48.998);\n --color-yellow-50: oklch(98.7% 0.026 102.212);\n --color-yellow-100: oklch(97.3% 0.071 103.193);\n --color-yellow-500: oklch(79.5% 0.184 86.047);\n --color-yellow-600: oklch(68.1% 0.162 75.834);\n --color-yellow-700: oklch(55.4% 0.135 66.442);\n --color-green-50: oklch(98.2% 0.018 155.826);\n --color-green-100: oklch(96.2% 0.044 156.743);\n --color-green-200: oklch(92.5% 0.084 155.995);\n --color-green-300: oklch(87.1% 0.15 154.449);\n --color-green-400: oklch(79.2% 0.209 151.711);\n --color-green-500: oklch(72.3% 0.219 149.579);\n --color-green-600: oklch(62.7% 0.194 149.214);\n --color-green-700: oklch(52.7% 0.154 150.069);\n --color-green-800: oklch(44.8% 0.119 151.328);\n --color-green-900: oklch(39.3% 0.095 152.535);\n --color-green-950: oklch(26.6% 0.065 152.934);\n --color-teal-500: oklch(70.4% 0.14 182.503);\n --color-sky-100: oklch(95.1% 0.026 236.824);\n --color-sky-700: oklch(50% 0.134 242.749);\n --color-blue-50: oklch(97% 0.014 254.604);\n --color-blue-100: oklch(93.2% 0.032 255.585);\n --color-blue-200: oklch(88.2% 0.059 254.128);\n --color-blue-500: oklch(62.3% 0.214 259.815);\n --color-blue-600: oklch(54.6% 0.245 262.881);\n --color-blue-700: oklch(48.8% 0.243 264.376);\n --color-purple-100: oklch(94.6% 0.033 307.174);\n --color-purple-500: oklch(62.7% 0.265 303.9);\n --color-purple-700: oklch(49.6% 0.265 301.924);\n --color-pink-100: oklch(94.8% 0.028 342.258);\n --color-pink-500: oklch(65.6% 0.241 354.308);\n --color-pink-600: oklch(59.2% 0.249 0.584);\n --color-pink-700: oklch(52.5% 0.223 3.958);\n --color-gray-50: oklch(98.5% 0.002 247.839);\n --color-gray-100: oklch(96.7% 0.003 264.542);\n --color-gray-200: oklch(92.8% 0.006 264.531);\n --color-gray-300: oklch(87.2% 0.01 258.338);\n --color-gray-400: oklch(70.7% 0.022 261.325);\n --color-gray-500: oklch(55.1% 0.027 264.364);\n --color-gray-600: oklch(44.6% 0.03 256.802);\n --color-gray-700: oklch(37.3% 0.034 259.733);\n --color-gray-800: oklch(27.8% 0.033 256.848);\n --color-gray-900: oklch(21% 0.034 264.665);\n --color-gray-950: oklch(13% 0.028 261.692);\n --color-zinc-100: oklch(96.7% 0.001 286.375);\n --color-zinc-200: oklch(92% 0.004 286.32);\n --color-zinc-300: oklch(87.1% 0.006 286.286);\n --color-zinc-500: oklch(55.2% 0.016 285.938);\n --color-zinc-600: oklch(44.2% 0.017 285.786);\n --color-zinc-900: oklch(21% 0.006 285.885);\n --color-black: #000;\n --color-white: #fff;\n --spacing: 0.25rem;\n --container-xs: 20rem;\n --container-sm: 24rem;\n --container-md: 28rem;\n --container-lg: 32rem;\n --container-xl: 36rem;\n --container-2xl: 42rem;\n --container-3xl: 48rem;\n --container-4xl: 56rem;\n --container-5xl: 64rem;\n --container-6xl: 72rem;\n --container-7xl: 80rem;\n --text-xs: 0.75rem;\n --text-xs--line-height: calc(1 / 0.75);\n --text-sm: 0.875rem;\n --text-sm--line-height: calc(1.25 / 0.875);\n --text-base: 1rem;\n --text-base--line-height: calc(1.5 / 1);\n --text-lg: 1.125rem;\n --text-lg--line-height: calc(1.75 / 1.125);\n --text-xl: 1.25rem;\n --text-xl--line-height: calc(1.75 / 1.25);\n --text-2xl: 1.5rem;\n --text-2xl--line-height: calc(2 / 1.5);\n --text-3xl: 1.875rem;\n --text-3xl--line-height: calc(2.25 / 1.875);\n --text-4xl: 2.25rem;\n --text-4xl--line-height: calc(2.5 / 2.25);\n --text-5xl: 3rem;\n --text-5xl--line-height: 1;\n --text-6xl: 3.75rem;\n --text-6xl--line-height: 1;\n --font-weight-normal: 400;\n --font-weight-medium: 500;\n --font-weight-semibold: 600;\n --font-weight-bold: 700;\n --tracking-tight: -0.025em;\n --tracking-wide: 0.025em;\n --tracking-wider: 0.05em;\n --tracking-widest: 0.1em;\n --leading-tight: 1.25;\n --leading-snug: 1.375;\n --leading-normal: 1.5;\n --leading-relaxed: 1.625;\n --radius-xs: 0.125rem;\n --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);\n --animate-spin: spin 1s linear infinite;\n --animate-pulse: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n --blur-sm: 8px;\n --aspect-video: 16 / 9;\n --default-transition-duration: 150ms;\n --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n --default-font-family: var(--font-geist-sans);\n --default-mono-font-family: var(--font-geist-mono);\n --color-border: var(--border);\n }\n}\n@layer base {\n *, ::after, ::before, ::backdrop, ::file-selector-button {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n border: 0 solid;\n }\n html, :host {\n line-height: 1.5;\n -webkit-text-size-adjust: 100%;\n tab-size: 4;\n font-family: var(--default-font-family, ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\");\n font-feature-settings: var(--default-font-feature-settings, normal);\n font-variation-settings: var(--default-font-variation-settings, normal);\n -webkit-tap-highlight-color: transparent;\n }\n hr {\n height: 0;\n color: inherit;\n border-top-width: 1px;\n }\n abbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n }\n h1, h2, h3, h4, h5, h6 {\n font-size: inherit;\n font-weight: inherit;\n }\n a {\n color: inherit;\n -webkit-text-decoration: inherit;\n text-decoration: inherit;\n }\n b, strong {\n font-weight: bolder;\n }\n code, kbd, samp, pre {\n font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace);\n font-feature-settings: var(--default-mono-font-feature-settings, normal);\n font-variation-settings: var(--default-mono-font-variation-settings, normal);\n font-size: 1em;\n }\n small {\n font-size: 80%;\n }\n sub, sup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n }\n sub {\n bottom: -0.25em;\n }\n sup {\n top: -0.5em;\n }\n table {\n text-indent: 0;\n border-color: inherit;\n border-collapse: collapse;\n }\n :-moz-focusring {\n outline: auto;\n }\n progress {\n vertical-align: baseline;\n }\n summary {\n display: list-item;\n }\n ol, ul, menu {\n list-style: none;\n }\n img, svg, video, canvas, audio, iframe, embed, object {\n display: block;\n vertical-align: middle;\n }\n img, video {\n max-width: 100%;\n height: auto;\n }\n button, input, select, optgroup, textarea, ::file-selector-button {\n font: inherit;\n font-feature-settings: inherit;\n font-variation-settings: inherit;\n letter-spacing: inherit;\n color: inherit;\n border-radius: 0;\n background-color: transparent;\n opacity: 1;\n }\n :where(select:is([multiple], [size])) optgroup {\n font-weight: bolder;\n }\n :where(select:is([multiple], [size])) optgroup option {\n padding-inline-start: 20px;\n }\n ::file-selector-button {\n margin-inline-end: 4px;\n }\n ::placeholder {\n opacity: 1;\n }\n @supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) {\n ::placeholder {\n color: currentcolor;\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, currentcolor 50%, transparent);\n }\n }\n }\n textarea {\n resize: vertical;\n }\n ::-webkit-search-decoration {\n -webkit-appearance: none;\n }\n ::-webkit-date-and-time-value {\n min-height: 1lh;\n text-align: inherit;\n }\n ::-webkit-datetime-edit {\n display: inline-flex;\n }\n ::-webkit-datetime-edit-fields-wrapper {\n padding: 0;\n }\n ::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field {\n padding-block: 0;\n }\n ::-webkit-calendar-picker-indicator {\n line-height: 1;\n }\n :-moz-ui-invalid {\n box-shadow: none;\n }\n button, input:where([type=\"button\"], [type=\"reset\"], [type=\"submit\"]), ::file-selector-button {\n appearance: button;\n }\n ::-webkit-inner-spin-button, ::-webkit-outer-spin-button {\n height: auto;\n }\n [hidden]:where(:not([hidden=\"until-found\"])) {\n display: none !important;\n }\n}\n@layer utilities {\n .\\@container\\/card-header {\n container-type: inline-size;\n container-name: card-header;\n }\n .\\@container\\/field-group {\n container-type: inline-size;\n container-name: field-group;\n }\n .pointer-events-none {\n pointer-events: none;\n }\n .visible {\n visibility: visible;\n }\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n border-width: 0;\n }\n .absolute {\n position: absolute;\n }\n .fixed {\n position: fixed;\n }\n .relative {\n position: relative;\n }\n .sticky {\n position: sticky;\n }\n .inset-0 {\n inset: calc(var(--spacing) * 0);\n }\n .inset-x-0 {\n inset-inline: calc(var(--spacing) * 0);\n }\n .inset-y-0 {\n inset-block: calc(var(--spacing) * 0);\n }\n .start {\n inset-inline-start: var(--spacing);\n }\n .end {\n inset-inline-end: var(--spacing);\n }\n .-top-1 {\n top: calc(var(--spacing) * -1);\n }\n .top-0 {\n top: calc(var(--spacing) * 0);\n }\n .top-1\\.5 {\n top: calc(var(--spacing) * 1.5);\n }\n .top-1\\/2 {\n top: calc(1 / 2 * 100%);\n }\n .top-2 {\n top: calc(var(--spacing) * 2);\n }\n .top-3 {\n top: calc(var(--spacing) * 3);\n }\n .top-3\\.5 {\n top: calc(var(--spacing) * 3.5);\n }\n .top-4 {\n top: calc(var(--spacing) * 4);\n }\n .top-6 {\n top: calc(var(--spacing) * 6);\n }\n .top-16 {\n top: calc(var(--spacing) * 16);\n }\n .top-\\[50\\%\\] {\n top: 50%;\n }\n .-right-1 {\n right: calc(var(--spacing) * -1);\n }\n .right-0 {\n right: calc(var(--spacing) * 0);\n }\n .right-1 {\n right: calc(var(--spacing) * 1);\n }\n .right-2 {\n right: calc(var(--spacing) * 2);\n }\n .right-2\\.5 {\n right: calc(var(--spacing) * 2.5);\n }\n .right-3 {\n right: calc(var(--spacing) * 3);\n }\n .right-4 {\n right: calc(var(--spacing) * 4);\n }\n .-bottom-1 {\n bottom: calc(var(--spacing) * -1);\n }\n .bottom-0 {\n bottom: calc(var(--spacing) * 0);\n }\n .bottom-2 {\n bottom: calc(var(--spacing) * 2);\n }\n .bottom-3 {\n bottom: calc(var(--spacing) * 3);\n }\n .left-0 {\n left: calc(var(--spacing) * 0);\n }\n .left-2 {\n left: calc(var(--spacing) * 2);\n }\n .left-3 {\n left: calc(var(--spacing) * 3);\n }\n .left-\\[50\\%\\] {\n left: 50%;\n }\n .z-10 {\n z-index: 10;\n }\n .z-20 {\n z-index: 20;\n }\n .z-40 {\n z-index: 40;\n }\n .z-50 {\n z-index: 50;\n }\n .col-start-2 {\n grid-column-start: 2;\n }\n .row-span-2 {\n grid-row: span 2 / span 2;\n }\n .row-start-1 {\n grid-row-start: 1;\n }\n .-mx-1 {\n margin-inline: calc(var(--spacing) * -1);\n }\n .mx-2 {\n margin-inline: calc(var(--spacing) * 2);\n }\n .mx-3\\.5 {\n margin-inline: calc(var(--spacing) * 3.5);\n }\n .mx-auto {\n margin-inline: auto;\n }\n .-my-2 {\n margin-block: calc(var(--spacing) * -2);\n }\n .my-0\\.5 {\n margin-block: calc(var(--spacing) * 0.5);\n }\n .my-1 {\n margin-block: calc(var(--spacing) * 1);\n }\n .-mt-1 {\n margin-top: calc(var(--spacing) * -1);\n }\n .mt-0\\.5 {\n margin-top: calc(var(--spacing) * 0.5);\n }\n .mt-1 {\n margin-top: calc(var(--spacing) * 1);\n }\n .mt-1\\.5 {\n margin-top: calc(var(--spacing) * 1.5);\n }\n .mt-2 {\n margin-top: calc(var(--spacing) * 2);\n }\n .mt-3 {\n margin-top: calc(var(--spacing) * 3);\n }\n .mt-4 {\n margin-top: calc(var(--spacing) * 4);\n }\n .mt-5 {\n margin-top: calc(var(--spacing) * 5);\n }\n .mt-6 {\n margin-top: calc(var(--spacing) * 6);\n }\n .mt-8 {\n margin-top: calc(var(--spacing) * 8);\n }\n .mt-12 {\n margin-top: calc(var(--spacing) * 12);\n }\n .mt-20 {\n margin-top: calc(var(--spacing) * 20);\n }\n .mt-auto {\n margin-top: auto;\n }\n .mr-0\\.5 {\n margin-right: calc(var(--spacing) * 0.5);\n }\n .mb-1 {\n margin-bottom: calc(var(--spacing) * 1);\n }\n .mb-2 {\n margin-bottom: calc(var(--spacing) * 2);\n }\n .mb-3 {\n margin-bottom: calc(var(--spacing) * 3);\n }\n .mb-4 {\n margin-bottom: calc(var(--spacing) * 4);\n }\n .mb-5 {\n margin-bottom: calc(var(--spacing) * 5);\n }\n .mb-6 {\n margin-bottom: calc(var(--spacing) * 6);\n }\n .mb-8 {\n margin-bottom: calc(var(--spacing) * 8);\n }\n .mb-10 {\n margin-bottom: calc(var(--spacing) * 10);\n }\n .mb-12 {\n margin-bottom: calc(var(--spacing) * 12);\n }\n .mb-16 {\n margin-bottom: calc(var(--spacing) * 16);\n }\n .-ml-1 {\n margin-left: calc(var(--spacing) * -1);\n }\n .ml-1 {\n margin-left: calc(var(--spacing) * 1);\n }\n .ml-2 {\n margin-left: calc(var(--spacing) * 2);\n }\n .ml-4 {\n margin-left: calc(var(--spacing) * 4);\n }\n .ml-auto {\n margin-left: auto;\n }\n .line-clamp-2 {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n }\n .line-clamp-3 {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 3;\n }\n .line-clamp-4 {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 4;\n }\n .block {\n display: block;\n }\n .flex {\n display: flex;\n }\n .grid {\n display: grid;\n }\n .hidden {\n display: none;\n }\n .inline {\n display: inline;\n }\n .inline-block {\n display: inline-block;\n }\n .inline-flex {\n display: inline-flex;\n }\n .table {\n display: table;\n }\n .table-caption {\n display: table-caption;\n }\n .table-cell {\n display: table-cell;\n }\n .table-row {\n display: table-row;\n }\n .field-sizing-content {\n field-sizing: content;\n }\n .aspect-square {\n aspect-ratio: 1 / 1;\n }\n .aspect-video {\n aspect-ratio: var(--aspect-video);\n }\n .size-2 {\n width: calc(var(--spacing) * 2);\n height: calc(var(--spacing) * 2);\n }\n .size-2\\.5 {\n width: calc(var(--spacing) * 2.5);\n height: calc(var(--spacing) * 2.5);\n }\n .size-3\\.5 {\n width: calc(var(--spacing) * 3.5);\n height: calc(var(--spacing) * 3.5);\n }\n .size-4 {\n width: calc(var(--spacing) * 4);\n height: calc(var(--spacing) * 4);\n }\n .size-5\\! {\n width: calc(var(--spacing) * 5) !important;\n height: calc(var(--spacing) * 5) !important;\n }\n .size-6 {\n width: calc(var(--spacing) * 6);\n height: calc(var(--spacing) * 6);\n }\n .size-7 {\n width: calc(var(--spacing) * 7);\n height: calc(var(--spacing) * 7);\n }\n .size-8 {\n width: calc(var(--spacing) * 8);\n height: calc(var(--spacing) * 8);\n }\n .size-9 {\n width: calc(var(--spacing) * 9);\n height: calc(var(--spacing) * 9);\n }\n .size-10 {\n width: calc(var(--spacing) * 10);\n height: calc(var(--spacing) * 10);\n }\n .size-full {\n width: 100%;\n height: 100%;\n }\n .h-\\(--header-height\\) {\n height: var(--header-height);\n }\n .h-1 {\n height: calc(var(--spacing) * 1);\n }\n .h-1\\.5 {\n height: calc(var(--spacing) * 1.5);\n }\n .h-2 {\n height: calc(var(--spacing) * 2);\n }\n .h-2\\.5 {\n height: calc(var(--spacing) * 2.5);\n }\n .h-3 {\n height: calc(var(--spacing) * 3);\n }\n .h-3\\.5 {\n height: calc(var(--spacing) * 3.5);\n }\n .h-4 {\n height: calc(var(--spacing) * 4);\n }\n .h-5 {\n height: calc(var(--spacing) * 5);\n }\n .h-6 {\n height: calc(var(--spacing) * 6);\n }\n .h-7 {\n height: calc(var(--spacing) * 7);\n }\n .h-8 {\n height: calc(var(--spacing) * 8);\n }\n .h-9 {\n height: calc(var(--spacing) * 9);\n }\n .h-10 {\n height: calc(var(--spacing) * 10);\n }\n .h-12 {\n height: calc(var(--spacing) * 12);\n }\n .h-14 {\n height: calc(var(--spacing) * 14);\n }\n .h-16 {\n height: calc(var(--spacing) * 16);\n }\n .h-20 {\n height: calc(var(--spacing) * 20);\n }\n .h-24 {\n height: calc(var(--spacing) * 24);\n }\n .h-32 {\n height: calc(var(--spacing) * 32);\n }\n .h-36 {\n height: calc(var(--spacing) * 36);\n }\n .h-40 {\n height: calc(var(--spacing) * 40);\n }\n .h-44 {\n height: calc(var(--spacing) * 44);\n }\n .h-48 {\n height: calc(var(--spacing) * 48);\n }\n .h-56 {\n height: calc(var(--spacing) * 56);\n }\n .h-60 {\n height: calc(var(--spacing) * 60);\n }\n .h-64 {\n height: calc(var(--spacing) * 64);\n }\n .h-72 {\n height: calc(var(--spacing) * 72);\n }\n .h-80 {\n height: calc(var(--spacing) * 80);\n }\n .h-\\[calc\\(100\\%-1px\\)\\] {\n height: calc(100% - 1px);\n }\n .h-\\[var\\(--radix-select-trigger-height\\)\\] {\n height: var(--radix-select-trigger-height);\n }\n .h-auto {\n height: auto;\n }\n .h-fit {\n height: fit-content;\n }\n .h-full {\n height: 100%;\n }\n .h-px {\n height: 1px;\n }\n .h-svh {\n height: 100svh;\n }\n .max-h-\\(--radix-dropdown-menu-content-available-height\\) {\n max-height: var(--radix-dropdown-menu-content-available-height);\n }\n .max-h-\\(--radix-select-content-available-height\\) {\n max-height: var(--radix-select-content-available-height);\n }\n .max-h-14 {\n max-height: calc(var(--spacing) * 14);\n }\n .max-h-32 {\n max-height: calc(var(--spacing) * 32);\n }\n .max-h-48 {\n max-height: calc(var(--spacing) * 48);\n }\n .max-h-\\[85vh\\] {\n max-height: 85vh;\n }\n .max-h-\\[90vh\\] {\n max-height: 90vh;\n }\n .max-h-full {\n max-height: 100%;\n }\n .min-h-0 {\n min-height: calc(var(--spacing) * 0);\n }\n .min-h-16 {\n min-height: calc(var(--spacing) * 16);\n }\n .min-h-20 {\n min-height: calc(var(--spacing) * 20);\n }\n .min-h-24 {\n min-height: calc(var(--spacing) * 24);\n }\n .min-h-48 {\n min-height: calc(var(--spacing) * 48);\n }\n .min-h-\\[40vh\\] {\n min-height: 40vh;\n }\n .min-h-\\[220px\\] {\n min-height: 220px;\n }\n .min-h-\\[calc\\(100vh-60px\\)\\] {\n min-height: calc(100vh - 60px);\n }\n .min-h-screen {\n min-height: 100vh;\n }\n .min-h-svh {\n min-height: 100svh;\n }\n .w-\\(--radix-dropdown-menu-trigger-width\\) {\n width: var(--radix-dropdown-menu-trigger-width);\n }\n .w-\\(--sidebar-width\\) {\n width: var(--sidebar-width);\n }\n .w-0 {\n width: calc(var(--spacing) * 0);\n }\n .w-1 {\n width: calc(var(--spacing) * 1);\n }\n .w-1\\.5 {\n width: calc(var(--spacing) * 1.5);\n }\n .w-2 {\n width: calc(var(--spacing) * 2);\n }\n .w-2\\.5 {\n width: calc(var(--spacing) * 2.5);\n }\n .w-3 {\n width: calc(var(--spacing) * 3);\n }\n .w-3\\.5 {\n width: calc(var(--spacing) * 3.5);\n }\n .w-3\\/4 {\n width: calc(3 / 4 * 100%);\n }\n .w-4 {\n width: calc(var(--spacing) * 4);\n }\n .w-5 {\n width: calc(var(--spacing) * 5);\n }\n .w-6 {\n width: calc(var(--spacing) * 6);\n }\n .w-7 {\n width: calc(var(--spacing) * 7);\n }\n .w-8 {\n width: calc(var(--spacing) * 8);\n }\n .w-9 {\n width: calc(var(--spacing) * 9);\n }\n .w-10 {\n width: calc(var(--spacing) * 10);\n }\n .w-11 {\n width: calc(var(--spacing) * 11);\n }\n .w-12 {\n width: calc(var(--spacing) * 12);\n }\n .w-14 {\n width: calc(var(--spacing) * 14);\n }\n .w-16 {\n width: calc(var(--spacing) * 16);\n }\n .w-20 {\n width: calc(var(--spacing) * 20);\n }\n .w-24 {\n width: calc(var(--spacing) * 24);\n }\n .w-28 {\n width: calc(var(--spacing) * 28);\n }\n .w-36 {\n width: calc(var(--spacing) * 36);\n }\n .w-48 {\n width: calc(var(--spacing) * 48);\n }\n .w-\\[100px\\] {\n width: 100px;\n }\n .w-auto {\n width: auto;\n }\n .w-fit {\n width: fit-content;\n }\n .w-full {\n width: 100%;\n }\n .w-px {\n width: 1px;\n }\n .max-w-\\(--skeleton-width\\) {\n max-width: var(--skeleton-width);\n }\n .max-w-2xl {\n max-width: var(--container-2xl);\n }\n .max-w-3xl {\n max-width: var(--container-3xl);\n }\n .max-w-4xl {\n max-width: var(--container-4xl);\n }\n .max-w-5xl {\n max-width: var(--container-5xl);\n }\n .max-w-6xl {\n max-width: var(--container-6xl);\n }\n .max-w-7xl {\n max-width: var(--container-7xl);\n }\n .max-w-\\[120px\\] {\n max-width: 120px;\n }\n .max-w-\\[140px\\] {\n max-width: 140px;\n }\n .max-w-\\[calc\\(100\\%-2rem\\)\\] {\n max-width: calc(100% - 2rem);\n }\n .max-w-full {\n max-width: 100%;\n }\n .max-w-lg {\n max-width: var(--container-lg);\n }\n .max-w-md {\n max-width: var(--container-md);\n }\n .max-w-sm {\n max-width: var(--container-sm);\n }\n .max-w-xl {\n max-width: var(--container-xl);\n }\n .max-w-xs {\n max-width: var(--container-xs);\n }\n .min-w-0 {\n min-width: calc(var(--spacing) * 0);\n }\n .min-w-5 {\n min-width: calc(var(--spacing) * 5);\n }\n .min-w-56 {\n min-width: calc(var(--spacing) * 56);\n }\n .min-w-\\[8rem\\] {\n min-width: 8rem;\n }\n .min-w-\\[var\\(--radix-select-trigger-width\\)\\] {\n min-width: var(--radix-select-trigger-width);\n }\n .min-w-fit {\n min-width: fit-content;\n }\n .flex-1 {\n flex: 1;\n }\n .shrink-0 {\n flex-shrink: 0;\n }\n .caption-bottom {\n caption-side: bottom;\n }\n .origin-\\(--radix-dropdown-menu-content-transform-origin\\) {\n transform-origin: var(--radix-dropdown-menu-content-transform-origin);\n }\n .origin-\\(--radix-select-content-transform-origin\\) {\n transform-origin: var(--radix-select-content-transform-origin);\n }\n .origin-\\(--radix-tooltip-content-transform-origin\\) {\n transform-origin: var(--radix-tooltip-content-transform-origin);\n }\n .-translate-x-1\\/2 {\n --tw-translate-x: calc(calc(1 / 2 * 100%) * -1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .-translate-x-px {\n --tw-translate-x: -1px;\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .translate-x-1 {\n --tw-translate-x: calc(var(--spacing) * 1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .translate-x-6 {\n --tw-translate-x: calc(var(--spacing) * 6);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .translate-x-\\[-50\\%\\] {\n --tw-translate-x: -50%;\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .translate-x-px {\n --tw-translate-x: 1px;\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .-translate-y-1\\/2 {\n --tw-translate-y: calc(calc(1 / 2 * 100%) * -1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .translate-y-\\[-50\\%\\] {\n --tw-translate-y: -50%;\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .translate-y-\\[calc\\(-50\\%_-_2px\\)\\] {\n --tw-translate-y: calc(-50% - 2px);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .rotate-45 {\n rotate: 45deg;\n }\n .rotate-180 {\n rotate: 180deg;\n }\n .animate-in {\n animation: enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none);\n }\n .animate-pulse {\n animation: var(--animate-pulse);\n }\n .animate-spin {\n animation: var(--animate-spin);\n }\n .cursor-default {\n cursor: default;\n }\n .cursor-pointer {\n cursor: pointer;\n }\n .resize-none {\n resize: none;\n }\n .resize-y {\n resize: vertical;\n }\n .scroll-my-1 {\n scroll-margin-block: calc(var(--spacing) * 1);\n }\n .list-disc {\n list-style-type: disc;\n }\n .appearance-none {\n appearance: none;\n }\n .auto-rows-min {\n grid-auto-rows: min-content;\n }\n .grid-cols-1 {\n grid-template-columns: repeat(1, minmax(0, 1fr));\n }\n .grid-cols-2 {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n .grid-cols-3 {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n .grid-cols-\\[3rem_1fr_1fr_auto\\] {\n grid-template-columns: 3rem 1fr 1fr auto;\n }\n .grid-rows-\\[auto_auto\\] {\n grid-template-rows: auto auto;\n }\n .flex-col {\n flex-direction: column;\n }\n .flex-col-reverse {\n flex-direction: column-reverse;\n }\n .flex-row {\n flex-direction: row;\n }\n .flex-wrap {\n flex-wrap: wrap;\n }\n .place-content-center {\n place-content: center;\n }\n .items-center {\n align-items: center;\n }\n .items-end {\n align-items: flex-end;\n }\n .items-start {\n align-items: flex-start;\n }\n .items-stretch {\n align-items: stretch;\n }\n .justify-between {\n justify-content: space-between;\n }\n .justify-center {\n justify-content: center;\n }\n .justify-end {\n justify-content: flex-end;\n }\n .justify-start {\n justify-content: flex-start;\n }\n .gap-0\\.5 {\n gap: calc(var(--spacing) * 0.5);\n }\n .gap-1 {\n gap: calc(var(--spacing) * 1);\n }\n .gap-1\\.5 {\n gap: calc(var(--spacing) * 1.5);\n }\n .gap-2 {\n gap: calc(var(--spacing) * 2);\n }\n .gap-2\\.5 {\n gap: calc(var(--spacing) * 2.5);\n }\n .gap-3 {\n gap: calc(var(--spacing) * 3);\n }\n .gap-4 {\n gap: calc(var(--spacing) * 4);\n }\n .gap-5 {\n gap: calc(var(--spacing) * 5);\n }\n .gap-6 {\n gap: calc(var(--spacing) * 6);\n }\n .gap-7 {\n gap: calc(var(--spacing) * 7);\n }\n .gap-8 {\n gap: calc(var(--spacing) * 8);\n }\n .gap-10 {\n gap: calc(var(--spacing) * 10);\n }\n .gap-12 {\n gap: calc(var(--spacing) * 12);\n }\n .space-y-1\\.5 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .space-y-2 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .space-y-2\\.5 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 2.5) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 2.5) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .space-y-3 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .space-y-4 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .space-y-8 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 8) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 8) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .space-y-10 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 10) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 10) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .gap-x-6 {\n column-gap: calc(var(--spacing) * 6);\n }\n .-space-x-2 {\n :where(& > :not(:last-child)) {\n --tw-space-x-reverse: 0;\n margin-inline-start: calc(calc(var(--spacing) * -2) * var(--tw-space-x-reverse));\n margin-inline-end: calc(calc(var(--spacing) * -2) * calc(1 - var(--tw-space-x-reverse)));\n }\n }\n .gap-y-1 {\n row-gap: calc(var(--spacing) * 1);\n }\n .divide-y {\n :where(& > :not(:last-child)) {\n --tw-divide-y-reverse: 0;\n border-bottom-style: var(--tw-border-style);\n border-top-style: var(--tw-border-style);\n border-top-width: calc(1px * var(--tw-divide-y-reverse));\n border-bottom-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));\n }\n }\n .divide-gray-50 {\n :where(& > :not(:last-child)) {\n border-color: var(--color-gray-50);\n }\n }\n .self-center {\n align-self: center;\n }\n .self-end {\n align-self: flex-end;\n }\n .self-start {\n align-self: flex-start;\n }\n .justify-self-end {\n justify-self: flex-end;\n }\n .truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .overflow-auto {\n overflow: auto;\n }\n .overflow-hidden {\n overflow: hidden;\n }\n .overflow-x-auto {\n overflow-x: auto;\n }\n .overflow-x-hidden {\n overflow-x: hidden;\n }\n .overflow-y-auto {\n overflow-y: auto;\n }\n .rounded {\n border-radius: 0.25rem;\n }\n .rounded-2xl {\n border-radius: calc(var(--radius) + 8px);\n }\n .rounded-\\[2px\\] {\n border-radius: 2px;\n }\n .rounded-\\[4px\\] {\n border-radius: 4px;\n }\n .rounded-full {\n border-radius: calc(infinity * 1px);\n }\n .rounded-lg {\n border-radius: var(--radius);\n }\n .rounded-md {\n border-radius: calc(var(--radius) - 2px);\n }\n .rounded-sm {\n border-radius: calc(var(--radius) - 4px);\n }\n .rounded-xl {\n border-radius: calc(var(--radius) + 4px);\n }\n .rounded-xs {\n border-radius: var(--radius-xs);\n }\n .border {\n border-style: var(--tw-border-style);\n border-width: 1px;\n }\n .border-0 {\n border-style: var(--tw-border-style);\n border-width: 0px;\n }\n .border-2 {\n border-style: var(--tw-border-style);\n border-width: 2px;\n }\n .border-\\[1\\.5px\\] {\n border-style: var(--tw-border-style);\n border-width: 1.5px;\n }\n .border-t {\n border-top-style: var(--tw-border-style);\n border-top-width: 1px;\n }\n .border-r {\n border-right-style: var(--tw-border-style);\n border-right-width: 1px;\n }\n .border-b {\n border-bottom-style: var(--tw-border-style);\n border-bottom-width: 1px;\n }\n .border-b-2 {\n border-bottom-style: var(--tw-border-style);\n border-bottom-width: 2px;\n }\n .border-l {\n border-left-style: var(--tw-border-style);\n border-left-width: 1px;\n }\n .border-dashed {\n --tw-border-style: dashed;\n border-style: dashed;\n }\n .border-\\(--color-border\\) {\n border-color: var(--color-border);\n }\n .border-amber-200 {\n border-color: var(--color-amber-200);\n }\n .border-blue-100 {\n border-color: var(--color-blue-100);\n }\n .border-border {\n border-color: var(--border);\n }\n .border-border\\/50 {\n border-color: var(--border);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--border) 50%, transparent);\n }\n }\n .border-gray-50 {\n border-color: var(--color-gray-50);\n }\n .border-gray-100 {\n border-color: var(--color-gray-100);\n }\n .border-gray-200 {\n border-color: var(--color-gray-200);\n }\n .border-gray-600 {\n border-color: var(--color-gray-600);\n }\n .border-gray-800 {\n border-color: var(--color-gray-800);\n }\n .border-green-100 {\n border-color: var(--color-green-100);\n }\n .border-green-200 {\n border-color: var(--color-green-200);\n }\n .border-green-600 {\n border-color: var(--color-green-600);\n }\n .border-green-600\\/40 {\n border-color: color-mix(in srgb, oklch(62.7% 0.194 149.214) 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-green-600) 40%, transparent);\n }\n }\n .border-green-700 {\n border-color: var(--color-green-700);\n }\n .border-green-800 {\n border-color: var(--color-green-800);\n }\n .border-green-800\\/60 {\n border-color: color-mix(in srgb, oklch(44.8% 0.119 151.328) 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-green-800) 60%, transparent);\n }\n }\n .border-input {\n border-color: var(--input);\n }\n .border-muted-foreground\\/30 {\n border-color: var(--muted-foreground);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--muted-foreground) 30%, transparent);\n }\n }\n .border-red-100 {\n border-color: var(--color-red-100);\n }\n .border-red-200 {\n border-color: var(--color-red-200);\n }\n .border-sidebar-border {\n border-color: var(--sidebar-border);\n }\n .border-transparent {\n border-color: transparent;\n }\n .border-white {\n border-color: var(--color-white);\n }\n .border-white\\/5 {\n border-color: color-mix(in srgb, #fff 5%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-white) 5%, transparent);\n }\n }\n .border-white\\/10 {\n border-color: color-mix(in srgb, #fff 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-white) 10%, transparent);\n }\n }\n .border-white\\/20 {\n border-color: color-mix(in srgb, #fff 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-white) 20%, transparent);\n }\n }\n .border-white\\/30 {\n border-color: color-mix(in srgb, #fff 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-white) 30%, transparent);\n }\n }\n .border-t-transparent {\n border-top-color: transparent;\n }\n .bg-\\(--color-bg\\) {\n background-color: var(--color-bg);\n }\n .bg-accent {\n background-color: var(--accent);\n }\n .bg-amber-50 {\n background-color: var(--color-amber-50);\n }\n .bg-amber-100 {\n background-color: var(--color-amber-100);\n }\n .bg-amber-400 {\n background-color: var(--color-amber-400);\n }\n .bg-background {\n background-color: var(--background);\n }\n .bg-black {\n background-color: var(--color-black);\n }\n .bg-black\\/0 {\n background-color: color-mix(in srgb, #000 0%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 0%, transparent);\n }\n }\n .bg-black\\/30 {\n background-color: color-mix(in srgb, #000 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 30%, transparent);\n }\n }\n .bg-black\\/40 {\n background-color: color-mix(in srgb, #000 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 40%, transparent);\n }\n }\n .bg-black\\/50 {\n background-color: color-mix(in srgb, #000 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 50%, transparent);\n }\n }\n .bg-blue-50 {\n background-color: var(--color-blue-50);\n }\n .bg-blue-100 {\n background-color: var(--color-blue-100);\n }\n .bg-blue-500 {\n background-color: var(--color-blue-500);\n }\n .bg-border {\n background-color: var(--border);\n }\n .bg-card {\n background-color: var(--card);\n }\n .bg-destructive {\n background-color: var(--destructive);\n }\n .bg-destructive\\/10 {\n background-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--destructive) 10%, transparent);\n }\n }\n .bg-foreground {\n background-color: var(--foreground);\n }\n .bg-gray-50 {\n background-color: var(--color-gray-50);\n }\n .bg-gray-50\\/40 {\n background-color: color-mix(in srgb, oklch(98.5% 0.002 247.839) 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-gray-50) 40%, transparent);\n }\n }\n .bg-gray-50\\/50 {\n background-color: color-mix(in srgb, oklch(98.5% 0.002 247.839) 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-gray-50) 50%, transparent);\n }\n }\n .bg-gray-100 {\n background-color: var(--color-gray-100);\n }\n .bg-gray-200 {\n background-color: var(--color-gray-200);\n }\n .bg-gray-300 {\n background-color: var(--color-gray-300);\n }\n .bg-gray-500 {\n background-color: var(--color-gray-500);\n }\n .bg-gray-800 {\n background-color: var(--color-gray-800);\n }\n .bg-gray-900 {\n background-color: var(--color-gray-900);\n }\n .bg-gray-950 {\n background-color: var(--color-gray-950);\n }\n .bg-green-50 {\n background-color: var(--color-green-50);\n }\n .bg-green-50\\/50 {\n background-color: color-mix(in srgb, oklch(98.2% 0.018 155.826) 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-green-50) 50%, transparent);\n }\n }\n .bg-green-100 {\n background-color: var(--color-green-100);\n }\n .bg-green-300 {\n background-color: var(--color-green-300);\n }\n .bg-green-400 {\n background-color: var(--color-green-400);\n }\n .bg-green-500 {\n background-color: var(--color-green-500);\n }\n .bg-green-600 {\n background-color: var(--color-green-600);\n }\n .bg-green-700 {\n background-color: var(--color-green-700);\n }\n .bg-green-700\\/20 {\n background-color: color-mix(in srgb, oklch(52.7% 0.154 150.069) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-green-700) 20%, transparent);\n }\n }\n .bg-green-700\\/30 {\n background-color: color-mix(in srgb, oklch(52.7% 0.154 150.069) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-green-700) 30%, transparent);\n }\n }\n .bg-green-700\\/80 {\n background-color: color-mix(in srgb, oklch(52.7% 0.154 150.069) 80%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-green-700) 80%, transparent);\n }\n }\n .bg-green-700\\/90 {\n background-color: color-mix(in srgb, oklch(52.7% 0.154 150.069) 90%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-green-700) 90%, transparent);\n }\n }\n .bg-green-800 {\n background-color: var(--color-green-800);\n }\n .bg-green-800\\/60 {\n background-color: color-mix(in srgb, oklch(44.8% 0.119 151.328) 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-green-800) 60%, transparent);\n }\n }\n .bg-green-900 {\n background-color: var(--color-green-900);\n }\n .bg-green-900\\/60 {\n background-color: color-mix(in srgb, oklch(39.3% 0.095 152.535) 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-green-900) 60%, transparent);\n }\n }\n .bg-green-950 {\n background-color: var(--color-green-950);\n }\n .bg-muted {\n background-color: var(--muted);\n }\n .bg-muted\\/10 {\n background-color: var(--muted);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--muted) 10%, transparent);\n }\n }\n .bg-muted\\/20 {\n background-color: var(--muted);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--muted) 20%, transparent);\n }\n }\n .bg-muted\\/30 {\n background-color: var(--muted);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--muted) 30%, transparent);\n }\n }\n .bg-muted\\/40 {\n background-color: var(--muted);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--muted) 40%, transparent);\n }\n }\n .bg-muted\\/50 {\n background-color: var(--muted);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--muted) 50%, transparent);\n }\n }\n .bg-orange-100 {\n background-color: var(--color-orange-100);\n }\n .bg-orange-500 {\n background-color: var(--color-orange-500);\n }\n .bg-orange-600 {\n background-color: var(--color-orange-600);\n }\n .bg-pink-100 {\n background-color: var(--color-pink-100);\n }\n .bg-pink-500 {\n background-color: var(--color-pink-500);\n }\n .bg-popover {\n background-color: var(--popover);\n }\n .bg-primary {\n background-color: var(--primary);\n }\n .bg-purple-100 {\n background-color: var(--color-purple-100);\n }\n .bg-purple-500 {\n background-color: var(--color-purple-500);\n }\n .bg-red-50 {\n background-color: var(--color-red-50);\n }\n .bg-red-100 {\n background-color: var(--color-red-100);\n }\n .bg-red-600 {\n background-color: var(--color-red-600);\n }\n .bg-secondary {\n background-color: var(--secondary);\n }\n .bg-sidebar {\n background-color: var(--sidebar);\n }\n .bg-sidebar-border {\n background-color: var(--sidebar-border);\n }\n .bg-sky-100 {\n background-color: var(--color-sky-100);\n }\n .bg-teal-500 {\n background-color: var(--color-teal-500);\n }\n .bg-transparent {\n background-color: transparent;\n }\n .bg-white {\n background-color: var(--color-white);\n }\n .bg-white\\/5 {\n background-color: color-mix(in srgb, #fff 5%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 5%, transparent);\n }\n }\n .bg-white\\/10 {\n background-color: color-mix(in srgb, #fff 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 10%, transparent);\n }\n }\n .bg-white\\/15 {\n background-color: color-mix(in srgb, #fff 15%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 15%, transparent);\n }\n }\n .bg-white\\/20 {\n background-color: color-mix(in srgb, #fff 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 20%, transparent);\n }\n }\n .bg-white\\/30 {\n background-color: color-mix(in srgb, #fff 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 30%, transparent);\n }\n }\n .bg-yellow-50 {\n background-color: var(--color-yellow-50);\n }\n .bg-yellow-100 {\n background-color: var(--color-yellow-100);\n }\n .bg-yellow-500 {\n background-color: var(--color-yellow-500);\n }\n .bg-zinc-100 {\n background-color: var(--color-zinc-100);\n }\n .bg-zinc-200 {\n background-color: var(--color-zinc-200);\n }\n .bg-zinc-300 {\n background-color: var(--color-zinc-300);\n }\n .bg-zinc-500 {\n background-color: var(--color-zinc-500);\n }\n .bg-gradient-to-b {\n --tw-gradient-position: to bottom in oklab;\n background-image: linear-gradient(var(--tw-gradient-stops));\n }\n .bg-gradient-to-br {\n --tw-gradient-position: to bottom right in oklab;\n background-image: linear-gradient(var(--tw-gradient-stops));\n }\n .bg-gradient-to-r {\n --tw-gradient-position: to right in oklab;\n background-image: linear-gradient(var(--tw-gradient-stops));\n }\n .bg-gradient-to-t {\n --tw-gradient-position: to top in oklab;\n background-image: linear-gradient(var(--tw-gradient-stops));\n }\n .from-black\\/10 {\n --tw-gradient-from: color-mix(in srgb, #000 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-from: color-mix(in oklab, var(--color-black) 10%, transparent);\n }\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .from-black\\/30 {\n --tw-gradient-from: color-mix(in srgb, #000 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-from: color-mix(in oklab, var(--color-black) 30%, transparent);\n }\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .from-black\\/60 {\n --tw-gradient-from: color-mix(in srgb, #000 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-from: color-mix(in oklab, var(--color-black) 60%, transparent);\n }\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .from-gray-100 {\n --tw-gradient-from: var(--color-gray-100);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .from-gray-200 {\n --tw-gradient-from: var(--color-gray-200);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .from-gray-900 {\n --tw-gradient-from: var(--color-gray-900);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .from-gray-900\\/40 {\n --tw-gradient-from: color-mix(in srgb, oklch(21% 0.034 264.665) 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-from: color-mix(in oklab, var(--color-gray-900) 40%, transparent);\n }\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .from-gray-900\\/70 {\n --tw-gradient-from: color-mix(in srgb, oklch(21% 0.034 264.665) 70%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-from: color-mix(in oklab, var(--color-gray-900) 70%, transparent);\n }\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .from-gray-950 {\n --tw-gradient-from: var(--color-gray-950);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .from-green-100 {\n --tw-gradient-from: var(--color-green-100);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .from-green-500 {\n --tw-gradient-from: var(--color-green-500);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .from-green-800 {\n --tw-gradient-from: var(--color-green-800);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .from-green-900 {\n --tw-gradient-from: var(--color-green-900);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .from-green-950 {\n --tw-gradient-from: var(--color-green-950);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .via-black\\/20 {\n --tw-gradient-via: color-mix(in srgb, #000 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-via: color-mix(in oklab, var(--color-black) 20%, transparent);\n }\n --tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-via-stops);\n }\n .via-gray-900 {\n --tw-gradient-via: var(--color-gray-900);\n --tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-via-stops);\n }\n .via-gray-950\\/30 {\n --tw-gradient-via: color-mix(in srgb, oklch(13% 0.028 261.692) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-via: color-mix(in oklab, var(--color-gray-950) 30%, transparent);\n }\n --tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-via-stops);\n }\n .via-green-900 {\n --tw-gradient-via: var(--color-green-900);\n --tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-via-stops);\n }\n .via-green-950\\/30 {\n --tw-gradient-via: color-mix(in srgb, oklch(26.6% 0.065 152.934) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-via: color-mix(in oklab, var(--color-green-950) 30%, transparent);\n }\n --tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-via-stops);\n }\n .via-transparent {\n --tw-gradient-via: transparent;\n --tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-via-stops);\n }\n .to-black\\/20 {\n --tw-gradient-to: color-mix(in srgb, #000 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-to: color-mix(in oklab, var(--color-black) 20%, transparent);\n }\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-black\\/50 {\n --tw-gradient-to: color-mix(in srgb, #000 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-to: color-mix(in oklab, var(--color-black) 50%, transparent);\n }\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-black\\/60 {\n --tw-gradient-to: color-mix(in srgb, #000 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-to: color-mix(in oklab, var(--color-black) 60%, transparent);\n }\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-gray-300 {\n --tw-gradient-to: var(--color-gray-300);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-gray-900 {\n --tw-gradient-to: var(--color-gray-900);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-gray-950 {\n --tw-gradient-to: var(--color-gray-950);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-green-100 {\n --tw-gradient-to: var(--color-green-100);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-green-200 {\n --tw-gradient-to: var(--color-green-200);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-green-700 {\n --tw-gradient-to: var(--color-green-700);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-green-800 {\n --tw-gradient-to: var(--color-green-800);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-green-900 {\n --tw-gradient-to: var(--color-green-900);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-green-950 {\n --tw-gradient-to: var(--color-green-950);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-transparent {\n --tw-gradient-to: transparent;\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .fill-current {\n fill: currentcolor;\n }\n .fill-foreground {\n fill: var(--foreground);\n }\n .object-contain {\n object-fit: contain;\n }\n .object-cover {\n object-fit: cover;\n }\n .p-0 {\n padding: calc(var(--spacing) * 0);\n }\n .p-1 {\n padding: calc(var(--spacing) * 1);\n }\n .p-1\\.5 {\n padding: calc(var(--spacing) * 1.5);\n }\n .p-2 {\n padding: calc(var(--spacing) * 2);\n }\n .p-3 {\n padding: calc(var(--spacing) * 3);\n }\n .p-4 {\n padding: calc(var(--spacing) * 4);\n }\n .p-5 {\n padding: calc(var(--spacing) * 5);\n }\n .p-6 {\n padding: calc(var(--spacing) * 6);\n }\n .p-8 {\n padding: calc(var(--spacing) * 8);\n }\n .p-\\[3px\\] {\n padding: 3px;\n }\n .px-1 {\n padding-inline: calc(var(--spacing) * 1);\n }\n .px-1\\.5 {\n padding-inline: calc(var(--spacing) * 1.5);\n }\n .px-2 {\n padding-inline: calc(var(--spacing) * 2);\n }\n .px-2\\.5 {\n padding-inline: calc(var(--spacing) * 2.5);\n }\n .px-3 {\n padding-inline: calc(var(--spacing) * 3);\n }\n .px-4 {\n padding-inline: calc(var(--spacing) * 4);\n }\n .px-5 {\n padding-inline: calc(var(--spacing) * 5);\n }\n .px-6 {\n padding-inline: calc(var(--spacing) * 6);\n }\n .py-0\\.5 {\n padding-block: calc(var(--spacing) * 0.5);\n }\n .py-1 {\n padding-block: calc(var(--spacing) * 1);\n }\n .py-1\\.5 {\n padding-block: calc(var(--spacing) * 1.5);\n }\n .py-2 {\n padding-block: calc(var(--spacing) * 2);\n }\n .py-2\\.5 {\n padding-block: calc(var(--spacing) * 2.5);\n }\n .py-3 {\n padding-block: calc(var(--spacing) * 3);\n }\n .py-3\\.5 {\n padding-block: calc(var(--spacing) * 3.5);\n }\n .py-4 {\n padding-block: calc(var(--spacing) * 4);\n }\n .py-5 {\n padding-block: calc(var(--spacing) * 5);\n }\n .py-6 {\n padding-block: calc(var(--spacing) * 6);\n }\n .py-8 {\n padding-block: calc(var(--spacing) * 8);\n }\n .py-10 {\n padding-block: calc(var(--spacing) * 10);\n }\n .py-12 {\n padding-block: calc(var(--spacing) * 12);\n }\n .py-16 {\n padding-block: calc(var(--spacing) * 16);\n }\n .py-20 {\n padding-block: calc(var(--spacing) * 20);\n }\n .py-24 {\n padding-block: calc(var(--spacing) * 24);\n }\n .py-32 {\n padding-block: calc(var(--spacing) * 32);\n }\n .pt-1 {\n padding-top: calc(var(--spacing) * 1);\n }\n .pt-2 {\n padding-top: calc(var(--spacing) * 2);\n }\n .pt-3 {\n padding-top: calc(var(--spacing) * 3);\n }\n .pt-4 {\n padding-top: calc(var(--spacing) * 4);\n }\n .pt-5 {\n padding-top: calc(var(--spacing) * 5);\n }\n .pt-8 {\n padding-top: calc(var(--spacing) * 8);\n }\n .pt-16 {\n padding-top: calc(var(--spacing) * 16);\n }\n .pr-2 {\n padding-right: calc(var(--spacing) * 2);\n }\n .pr-3 {\n padding-right: calc(var(--spacing) * 3);\n }\n .pr-8 {\n padding-right: calc(var(--spacing) * 8);\n }\n .pb-0 {\n padding-bottom: calc(var(--spacing) * 0);\n }\n .pb-2 {\n padding-bottom: calc(var(--spacing) * 2);\n }\n .pb-3 {\n padding-bottom: calc(var(--spacing) * 3);\n }\n .pb-4 {\n padding-bottom: calc(var(--spacing) * 4);\n }\n .pb-6 {\n padding-bottom: calc(var(--spacing) * 6);\n }\n .pb-8 {\n padding-bottom: calc(var(--spacing) * 8);\n }\n .pb-10 {\n padding-bottom: calc(var(--spacing) * 10);\n }\n .pl-2 {\n padding-left: calc(var(--spacing) * 2);\n }\n .pl-3 {\n padding-left: calc(var(--spacing) * 3);\n }\n .pl-8 {\n padding-left: calc(var(--spacing) * 8);\n }\n .pl-9 {\n padding-left: calc(var(--spacing) * 9);\n }\n .text-center {\n text-align: center;\n }\n .text-left {\n text-align: left;\n }\n .text-right {\n text-align: right;\n }\n .align-middle {\n vertical-align: middle;\n }\n .font-mono {\n font-family: var(--font-geist-mono);\n }\n .font-sans {\n font-family: var(--font-geist-sans);\n }\n .text-2xl {\n font-size: var(--text-2xl);\n line-height: var(--tw-leading, var(--text-2xl--line-height));\n }\n .text-3xl {\n font-size: var(--text-3xl);\n line-height: var(--tw-leading, var(--text-3xl--line-height));\n }\n .text-4xl {\n font-size: var(--text-4xl);\n line-height: var(--tw-leading, var(--text-4xl--line-height));\n }\n .text-5xl {\n font-size: var(--text-5xl);\n line-height: var(--tw-leading, var(--text-5xl--line-height));\n }\n .text-6xl {\n font-size: var(--text-6xl);\n line-height: var(--tw-leading, var(--text-6xl--line-height));\n }\n .text-base {\n font-size: var(--text-base);\n line-height: var(--tw-leading, var(--text-base--line-height));\n }\n .text-lg {\n font-size: var(--text-lg);\n line-height: var(--tw-leading, var(--text-lg--line-height));\n }\n .text-sm {\n font-size: var(--text-sm);\n line-height: var(--tw-leading, var(--text-sm--line-height));\n }\n .text-xl {\n font-size: var(--text-xl);\n line-height: var(--tw-leading, var(--text-xl--line-height));\n }\n .text-xs {\n font-size: var(--text-xs);\n line-height: var(--tw-leading, var(--text-xs--line-height));\n }\n .text-\\[10px\\] {\n font-size: 10px;\n }\n .leading-none {\n --tw-leading: 1;\n line-height: 1;\n }\n .leading-normal {\n --tw-leading: var(--leading-normal);\n line-height: var(--leading-normal);\n }\n .leading-relaxed {\n --tw-leading: var(--leading-relaxed);\n line-height: var(--leading-relaxed);\n }\n .leading-snug {\n --tw-leading: var(--leading-snug);\n line-height: var(--leading-snug);\n }\n .leading-tight {\n --tw-leading: var(--leading-tight);\n line-height: var(--leading-tight);\n }\n .font-bold {\n --tw-font-weight: var(--font-weight-bold);\n font-weight: var(--font-weight-bold);\n }\n .font-medium {\n --tw-font-weight: var(--font-weight-medium);\n font-weight: var(--font-weight-medium);\n }\n .font-normal {\n --tw-font-weight: var(--font-weight-normal);\n font-weight: var(--font-weight-normal);\n }\n .font-semibold {\n --tw-font-weight: var(--font-weight-semibold);\n font-weight: var(--font-weight-semibold);\n }\n .tracking-tight {\n --tw-tracking: var(--tracking-tight);\n letter-spacing: var(--tracking-tight);\n }\n .tracking-wide {\n --tw-tracking: var(--tracking-wide);\n letter-spacing: var(--tracking-wide);\n }\n .tracking-wider {\n --tw-tracking: var(--tracking-wider);\n letter-spacing: var(--tracking-wider);\n }\n .tracking-widest {\n --tw-tracking: var(--tracking-widest);\n letter-spacing: var(--tracking-widest);\n }\n .text-balance {\n text-wrap: balance;\n }\n .whitespace-nowrap {\n white-space: nowrap;\n }\n .whitespace-pre-line {\n white-space: pre-line;\n }\n .whitespace-pre-wrap {\n white-space: pre-wrap;\n }\n .text-amber-700 {\n color: var(--color-amber-700);\n }\n .text-background {\n color: var(--background);\n }\n .text-blue-600 {\n color: var(--color-blue-600);\n }\n .text-blue-700 {\n color: var(--color-blue-700);\n }\n .text-card-foreground {\n color: var(--card-foreground);\n }\n .text-current {\n color: currentcolor;\n }\n .text-destructive {\n color: var(--destructive);\n }\n .text-foreground {\n color: var(--foreground);\n }\n .text-foreground\\/60 {\n color: var(--foreground);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--foreground) 60%, transparent);\n }\n }\n .text-gray-200 {\n color: var(--color-gray-200);\n }\n .text-gray-300 {\n color: var(--color-gray-300);\n }\n .text-gray-400 {\n color: var(--color-gray-400);\n }\n .text-gray-500 {\n color: var(--color-gray-500);\n }\n .text-gray-600 {\n color: var(--color-gray-600);\n }\n .text-gray-700 {\n color: var(--color-gray-700);\n }\n .text-gray-800 {\n color: var(--color-gray-800);\n }\n .text-gray-900 {\n color: var(--color-gray-900);\n }\n .text-green-100 {\n color: var(--color-green-100);\n }\n .text-green-200 {\n color: var(--color-green-200);\n }\n .text-green-300 {\n color: var(--color-green-300);\n }\n .text-green-300\\/60 {\n color: color-mix(in srgb, oklch(87.1% 0.15 154.449) 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-green-300) 60%, transparent);\n }\n }\n .text-green-300\\/70 {\n color: color-mix(in srgb, oklch(87.1% 0.15 154.449) 70%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-green-300) 70%, transparent);\n }\n }\n .text-green-400 {\n color: var(--color-green-400);\n }\n .text-green-500 {\n color: var(--color-green-500);\n }\n .text-green-600 {\n color: var(--color-green-600);\n }\n .text-green-700 {\n color: var(--color-green-700);\n }\n .text-green-800 {\n color: var(--color-green-800);\n }\n .text-green-900 {\n color: var(--color-green-900);\n }\n .text-muted-foreground {\n color: var(--muted-foreground);\n }\n .text-orange-600 {\n color: var(--color-orange-600);\n }\n .text-orange-700 {\n color: var(--color-orange-700);\n }\n .text-pink-700 {\n color: var(--color-pink-700);\n }\n .text-popover-foreground {\n color: var(--popover-foreground);\n }\n .text-primary {\n color: var(--primary);\n }\n .text-primary-foreground {\n color: var(--primary-foreground);\n }\n .text-purple-700 {\n color: var(--color-purple-700);\n }\n .text-red-400 {\n color: var(--color-red-400);\n }\n .text-red-500 {\n color: var(--color-red-500);\n }\n .text-red-600 {\n color: var(--color-red-600);\n }\n .text-red-700 {\n color: var(--color-red-700);\n }\n .text-secondary-foreground {\n color: var(--secondary-foreground);\n }\n .text-sidebar-foreground {\n color: var(--sidebar-foreground);\n }\n .text-sidebar-foreground\\/70 {\n color: var(--sidebar-foreground);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--sidebar-foreground) 70%, transparent);\n }\n }\n .text-sky-700 {\n color: var(--color-sky-700);\n }\n .text-white {\n color: var(--color-white);\n }\n .text-white\\/20 {\n color: color-mix(in srgb, #fff 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 20%, transparent);\n }\n }\n .text-white\\/50 {\n color: color-mix(in srgb, #fff 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 50%, transparent);\n }\n }\n .text-white\\/60 {\n color: color-mix(in srgb, #fff 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 60%, transparent);\n }\n }\n .text-white\\/70 {\n color: color-mix(in srgb, #fff 70%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 70%, transparent);\n }\n }\n .text-white\\/80 {\n color: color-mix(in srgb, #fff 80%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 80%, transparent);\n }\n }\n .text-white\\/85 {\n color: color-mix(in srgb, #fff 85%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 85%, transparent);\n }\n }\n .text-yellow-600 {\n color: var(--color-yellow-600);\n }\n .text-yellow-700 {\n color: var(--color-yellow-700);\n }\n .text-zinc-500 {\n color: var(--color-zinc-500);\n }\n .text-zinc-600 {\n color: var(--color-zinc-600);\n }\n .capitalize {\n text-transform: capitalize;\n }\n .uppercase {\n text-transform: uppercase;\n }\n .italic {\n font-style: italic;\n }\n .tabular-nums {\n --tw-numeric-spacing: tabular-nums;\n font-variant-numeric: var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,);\n }\n .underline {\n text-decoration-line: underline;\n }\n .underline-offset-4 {\n text-underline-offset: 4px;\n }\n .antialiased {\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n }\n .opacity-0 {\n opacity: 0%;\n }\n .opacity-20 {\n opacity: 20%;\n }\n .opacity-30 {\n opacity: 30%;\n }\n .opacity-40 {\n opacity: 40%;\n }\n .opacity-50 {\n opacity: 50%;\n }\n .opacity-60 {\n opacity: 60%;\n }\n .opacity-70 {\n opacity: 70%;\n }\n .opacity-80 {\n opacity: 80%;\n }\n .shadow {\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-\\[0_0_0_1px_hsl\\(var\\(--sidebar-border\\)\\)\\] {\n --tw-shadow: 0 0 0 1px var(--tw-shadow-color, hsl(var(--sidebar-border)));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-lg {\n --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-md {\n --tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 2px 4px -2px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-none {\n --tw-shadow: 0 0 #0000;\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-sm {\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-xl {\n --tw-shadow: 0 20px 25px -5px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 8px 10px -6px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-xs {\n --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .ring-1 {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .ring-2 {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .ring-background {\n --tw-ring-color: var(--background);\n }\n .ring-current {\n --tw-ring-color: currentcolor;\n }\n .ring-sidebar-ring {\n --tw-ring-color: var(--sidebar-ring);\n }\n .ring-offset-background {\n --tw-ring-offset-color: var(--background);\n }\n .outline-hidden {\n --tw-outline-style: none;\n outline-style: none;\n @media (forced-colors: active) {\n outline: 2px solid transparent;\n outline-offset: 2px;\n }\n }\n .outline {\n outline-style: var(--tw-outline-style);\n outline-width: 1px;\n }\n .backdrop-blur-sm {\n --tw-backdrop-blur: blur(var(--blur-sm));\n -webkit-backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);\n backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);\n }\n .transition {\n transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter, display, content-visibility, overlay, pointer-events;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-\\[color\\,box-shadow\\] {\n transition-property: color,box-shadow;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-\\[left\\,right\\,width\\] {\n transition-property: left,right,width;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-\\[margin\\,opacity\\] {\n transition-property: margin,opacity;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-\\[width\\,height\\,padding\\] {\n transition-property: width,height,padding;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-\\[width\\] {\n transition-property: width;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-all {\n transition-property: all;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-colors {\n transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-opacity {\n transition-property: opacity;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-shadow {\n transition-property: box-shadow;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-transform {\n transition-property: transform, translate, scale, rotate;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-none {\n transition-property: none;\n }\n .duration-200 {\n --tw-duration: 200ms;\n transition-duration: 200ms;\n }\n .duration-300 {\n --tw-duration: 300ms;\n transition-duration: 300ms;\n }\n .ease-in-out {\n --tw-ease: var(--ease-in-out);\n transition-timing-function: var(--ease-in-out);\n }\n .ease-linear {\n --tw-ease: linear;\n transition-timing-function: linear;\n }\n .fade-in-0 {\n --tw-enter-opacity: calc(0/100);\n --tw-enter-opacity: 0;\n }\n .outline-none {\n --tw-outline-style: none;\n outline-style: none;\n }\n .select-none {\n -webkit-user-select: none;\n user-select: none;\n }\n .zoom-in-95 {\n --tw-enter-scale: calc(95*1%);\n --tw-enter-scale: .95;\n }\n .group-focus-within\\/menu-item\\:opacity-100 {\n &:is(:where(.group\\/menu-item):focus-within *) {\n opacity: 100%;\n }\n }\n .group-hover\\:w-5 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n width: calc(var(--spacing) * 5);\n }\n }\n }\n .group-hover\\:w-6 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n width: calc(var(--spacing) * 6);\n }\n }\n }\n .group-hover\\:border-green-300 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n border-color: var(--color-green-300);\n }\n }\n }\n .group-hover\\:border-green-400 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n border-color: var(--color-green-400);\n }\n }\n }\n .group-hover\\:bg-black\\/40 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n background-color: color-mix(in srgb, #000 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 40%, transparent);\n }\n }\n }\n }\n .group-hover\\:bg-green-700 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n background-color: var(--color-green-700);\n }\n }\n }\n .group-hover\\:bg-green-800 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n background-color: var(--color-green-800);\n }\n }\n }\n .group-hover\\:text-green-600 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n color: var(--color-green-600);\n }\n }\n }\n .group-hover\\:text-green-800 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n color: var(--color-green-800);\n }\n }\n }\n .group-hover\\:text-white {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n color: var(--color-white);\n }\n }\n }\n .group-hover\\:opacity-100 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n opacity: 100%;\n }\n }\n }\n .group-hover\\/menu-item\\:opacity-100 {\n &:is(:where(.group\\/menu-item):hover *) {\n @media (hover: hover) {\n opacity: 100%;\n }\n }\n }\n .group-has-data-\\[orientation\\=horizontal\\]\\/field\\:text-balance {\n &:is(:where(.group\\/field):has(*[data-orientation=\"horizontal\"]) *) {\n text-wrap: balance;\n }\n }\n .group-has-data-\\[sidebar\\=menu-action\\]\\/menu-item\\:pr-8 {\n &:is(:where(.group\\/menu-item):has(*[data-sidebar=\"menu-action\"]) *) {\n padding-right: calc(var(--spacing) * 8);\n }\n }\n .group-has-data-\\[size\\=lg\\]\\/avatar-group\\:size-10 {\n &:is(:where(.group\\/avatar-group):has(*[data-size=\"lg\"]) *) {\n width: calc(var(--spacing) * 10);\n height: calc(var(--spacing) * 10);\n }\n }\n .group-has-data-\\[size\\=sm\\]\\/avatar-group\\:size-6 {\n &:is(:where(.group\\/avatar-group):has(*[data-size=\"sm\"]) *) {\n width: calc(var(--spacing) * 6);\n height: calc(var(--spacing) * 6);\n }\n }\n .group-data-\\[collapsible\\=icon\\]\\:-mt-8 {\n &:is(:where(.group)[data-collapsible=\"icon\"] *) {\n margin-top: calc(var(--spacing) * -8);\n }\n }\n .group-data-\\[collapsible\\=icon\\]\\:hidden {\n &:is(:where(.group)[data-collapsible=\"icon\"] *) {\n display: none;\n }\n }\n .group-data-\\[collapsible\\=icon\\]\\:size-8\\! {\n &:is(:where(.group)[data-collapsible=\"icon\"] *) {\n width: calc(var(--spacing) * 8) !important;\n height: calc(var(--spacing) * 8) !important;\n }\n }\n .group-data-\\[collapsible\\=icon\\]\\:w-\\(--sidebar-width-icon\\) {\n &:is(:where(.group)[data-collapsible=\"icon\"] *) {\n width: var(--sidebar-width-icon);\n }\n }\n .group-data-\\[collapsible\\=icon\\]\\:w-\\[calc\\(var\\(--sidebar-width-icon\\)\\+\\(--spacing\\(4\\)\\)\\)\\] {\n &:is(:where(.group)[data-collapsible=\"icon\"] *) {\n width: calc(var(--sidebar-width-icon) + (calc(var(--spacing) * 4)));\n }\n }\n .group-data-\\[collapsible\\=icon\\]\\:w-\\[calc\\(var\\(--sidebar-width-icon\\)\\+\\(--spacing\\(4\\)\\)\\+2px\\)\\] {\n &:is(:where(.group)[data-collapsible=\"icon\"] *) {\n width: calc(var(--sidebar-width-icon) + (calc(var(--spacing) * 4)) + 2px);\n }\n }\n .group-data-\\[collapsible\\=icon\\]\\:overflow-hidden {\n &:is(:where(.group)[data-collapsible=\"icon\"] *) {\n overflow: hidden;\n }\n }\n .group-data-\\[collapsible\\=icon\\]\\:p-0\\! {\n &:is(:where(.group)[data-collapsible=\"icon\"] *) {\n padding: calc(var(--spacing) * 0) !important;\n }\n }\n .group-data-\\[collapsible\\=icon\\]\\:p-2\\! {\n &:is(:where(.group)[data-collapsible=\"icon\"] *) {\n padding: calc(var(--spacing) * 2) !important;\n }\n }\n .group-data-\\[collapsible\\=icon\\]\\:opacity-0 {\n &:is(:where(.group)[data-collapsible=\"icon\"] *) {\n opacity: 0%;\n }\n }\n .group-data-\\[collapsible\\=offcanvas\\]\\:right-\\[calc\\(var\\(--sidebar-width\\)\\*-1\\)\\] {\n &:is(:where(.group)[data-collapsible=\"offcanvas\"] *) {\n right: calc(var(--sidebar-width) * -1);\n }\n }\n .group-data-\\[collapsible\\=offcanvas\\]\\:left-\\[calc\\(var\\(--sidebar-width\\)\\*-1\\)\\] {\n &:is(:where(.group)[data-collapsible=\"offcanvas\"] *) {\n left: calc(var(--sidebar-width) * -1);\n }\n }\n .group-data-\\[collapsible\\=offcanvas\\]\\:w-0 {\n &:is(:where(.group)[data-collapsible=\"offcanvas\"] *) {\n width: calc(var(--spacing) * 0);\n }\n }\n .group-data-\\[collapsible\\=offcanvas\\]\\:translate-x-0 {\n &:is(:where(.group)[data-collapsible=\"offcanvas\"] *) {\n --tw-translate-x: calc(var(--spacing) * 0);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n }\n .group-data-\\[disabled\\=true\\]\\:pointer-events-none {\n &:is(:where(.group)[data-disabled=\"true\"] *) {\n pointer-events: none;\n }\n }\n .group-data-\\[disabled\\=true\\]\\:opacity-50 {\n &:is(:where(.group)[data-disabled=\"true\"] *) {\n opacity: 50%;\n }\n }\n .group-data-\\[disabled\\=true\\]\\/field\\:opacity-50 {\n &:is(:where(.group\\/field)[data-disabled=\"true\"] *) {\n opacity: 50%;\n }\n }\n .group-data-\\[orientation\\=horizontal\\]\\/tabs\\:h-9 {\n &:is(:where(.group\\/tabs)[data-orientation=\"horizontal\"] *) {\n height: calc(var(--spacing) * 9);\n }\n }\n .group-data-\\[orientation\\=vertical\\]\\/tabs\\:h-fit {\n &:is(:where(.group\\/tabs)[data-orientation=\"vertical\"] *) {\n height: fit-content;\n }\n }\n .group-data-\\[orientation\\=vertical\\]\\/tabs\\:w-full {\n &:is(:where(.group\\/tabs)[data-orientation=\"vertical\"] *) {\n width: 100%;\n }\n }\n .group-data-\\[orientation\\=vertical\\]\\/tabs\\:flex-col {\n &:is(:where(.group\\/tabs)[data-orientation=\"vertical\"] *) {\n flex-direction: column;\n }\n }\n .group-data-\\[orientation\\=vertical\\]\\/tabs\\:justify-start {\n &:is(:where(.group\\/tabs)[data-orientation=\"vertical\"] *) {\n justify-content: flex-start;\n }\n }\n .group-data-\\[side\\=left\\]\\:-right-4 {\n &:is(:where(.group)[data-side=\"left\"] *) {\n right: calc(var(--spacing) * -4);\n }\n }\n .group-data-\\[side\\=left\\]\\:border-r {\n &:is(:where(.group)[data-side=\"left\"] *) {\n border-right-style: var(--tw-border-style);\n border-right-width: 1px;\n }\n }\n .group-data-\\[side\\=right\\]\\:left-0 {\n &:is(:where(.group)[data-side=\"right\"] *) {\n left: calc(var(--spacing) * 0);\n }\n }\n .group-data-\\[side\\=right\\]\\:rotate-180 {\n &:is(:where(.group)[data-side=\"right\"] *) {\n rotate: 180deg;\n }\n }\n .group-data-\\[side\\=right\\]\\:border-l {\n &:is(:where(.group)[data-side=\"right\"] *) {\n border-left-style: var(--tw-border-style);\n border-left-width: 1px;\n }\n }\n .group-data-\\[size\\=default\\]\\/avatar\\:size-2\\.5 {\n &:is(:where(.group\\/avatar)[data-size=\"default\"] *) {\n width: calc(var(--spacing) * 2.5);\n height: calc(var(--spacing) * 2.5);\n }\n }\n .group-data-\\[size\\=lg\\]\\/avatar\\:size-3 {\n &:is(:where(.group\\/avatar)[data-size=\"lg\"] *) {\n width: calc(var(--spacing) * 3);\n height: calc(var(--spacing) * 3);\n }\n }\n .group-data-\\[size\\=sm\\]\\/avatar\\:size-2 {\n &:is(:where(.group\\/avatar)[data-size=\"sm\"] *) {\n width: calc(var(--spacing) * 2);\n height: calc(var(--spacing) * 2);\n }\n }\n .group-data-\\[size\\=sm\\]\\/avatar\\:text-xs {\n &:is(:where(.group\\/avatar)[data-size=\"sm\"] *) {\n font-size: var(--text-xs);\n line-height: var(--tw-leading, var(--text-xs--line-height));\n }\n }\n .group-data-\\[variant\\=floating\\]\\:rounded-lg {\n &:is(:where(.group)[data-variant=\"floating\"] *) {\n border-radius: var(--radius);\n }\n }\n .group-data-\\[variant\\=floating\\]\\:border {\n &:is(:where(.group)[data-variant=\"floating\"] *) {\n border-style: var(--tw-border-style);\n border-width: 1px;\n }\n }\n .group-data-\\[variant\\=floating\\]\\:border-sidebar-border {\n &:is(:where(.group)[data-variant=\"floating\"] *) {\n border-color: var(--sidebar-border);\n }\n }\n .group-data-\\[variant\\=floating\\]\\:shadow-sm {\n &:is(:where(.group)[data-variant=\"floating\"] *) {\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n .group-data-\\[variant\\=line\\]\\/tabs-list\\:bg-transparent {\n &:is(:where(.group\\/tabs-list)[data-variant=\"line\"] *) {\n background-color: transparent;\n }\n }\n .group-data-\\[variant\\=outline\\]\\/field-group\\:-mb-2 {\n &:is(:where(.group\\/field-group)[data-variant=\"outline\"] *) {\n margin-bottom: calc(var(--spacing) * -2);\n }\n }\n .group-data-\\[vaul-drawer-direction\\=bottom\\]\\/drawer-content\\:block {\n &:is(:where(.group\\/drawer-content)[data-vaul-drawer-direction=\"bottom\"] *) {\n display: block;\n }\n }\n .group-data-\\[vaul-drawer-direction\\=bottom\\]\\/drawer-content\\:text-center {\n &:is(:where(.group\\/drawer-content)[data-vaul-drawer-direction=\"bottom\"] *) {\n text-align: center;\n }\n }\n .group-data-\\[vaul-drawer-direction\\=top\\]\\/drawer-content\\:text-center {\n &:is(:where(.group\\/drawer-content)[data-vaul-drawer-direction=\"top\"] *) {\n text-align: center;\n }\n }\n .peer-hover\\/menu-button\\:text-sidebar-accent-foreground {\n &:is(:where(.peer\\/menu-button):hover ~ *) {\n @media (hover: hover) {\n color: var(--sidebar-accent-foreground);\n }\n }\n }\n .peer-disabled\\:cursor-not-allowed {\n &:is(:where(.peer):disabled ~ *) {\n cursor: not-allowed;\n }\n }\n .peer-disabled\\:opacity-50 {\n &:is(:where(.peer):disabled ~ *) {\n opacity: 50%;\n }\n }\n .peer-data-\\[active\\=true\\]\\/menu-button\\:text-sidebar-accent-foreground {\n &:is(:where(.peer\\/menu-button)[data-active=\"true\"] ~ *) {\n color: var(--sidebar-accent-foreground);\n }\n }\n .peer-data-\\[size\\=default\\]\\/menu-button\\:top-1\\.5 {\n &:is(:where(.peer\\/menu-button)[data-size=\"default\"] ~ *) {\n top: calc(var(--spacing) * 1.5);\n }\n }\n .peer-data-\\[size\\=lg\\]\\/menu-button\\:top-2\\.5 {\n &:is(:where(.peer\\/menu-button)[data-size=\"lg\"] ~ *) {\n top: calc(var(--spacing) * 2.5);\n }\n }\n .peer-data-\\[size\\=sm\\]\\/menu-button\\:top-1 {\n &:is(:where(.peer\\/menu-button)[data-size=\"sm\"] ~ *) {\n top: calc(var(--spacing) * 1);\n }\n }\n .selection\\:bg-primary {\n & *::selection {\n background-color: var(--primary);\n }\n &::selection {\n background-color: var(--primary);\n }\n }\n .selection\\:text-primary-foreground {\n & *::selection {\n color: var(--primary-foreground);\n }\n &::selection {\n color: var(--primary-foreground);\n }\n }\n .file\\:inline-flex {\n &::file-selector-button {\n display: inline-flex;\n }\n }\n .file\\:h-7 {\n &::file-selector-button {\n height: calc(var(--spacing) * 7);\n }\n }\n .file\\:border-0 {\n &::file-selector-button {\n border-style: var(--tw-border-style);\n border-width: 0px;\n }\n }\n .file\\:bg-transparent {\n &::file-selector-button {\n background-color: transparent;\n }\n }\n .file\\:text-sm {\n &::file-selector-button {\n font-size: var(--text-sm);\n line-height: var(--tw-leading, var(--text-sm--line-height));\n }\n }\n .file\\:font-medium {\n &::file-selector-button {\n --tw-font-weight: var(--font-weight-medium);\n font-weight: var(--font-weight-medium);\n }\n }\n .file\\:text-foreground {\n &::file-selector-button {\n color: var(--foreground);\n }\n }\n .placeholder\\:text-muted-foreground {\n &::placeholder {\n color: var(--muted-foreground);\n }\n }\n .after\\:absolute {\n &::after {\n content: var(--tw-content);\n position: absolute;\n }\n }\n .after\\:-inset-2 {\n &::after {\n content: var(--tw-content);\n inset: calc(var(--spacing) * -2);\n }\n }\n .after\\:inset-y-0 {\n &::after {\n content: var(--tw-content);\n inset-block: calc(var(--spacing) * 0);\n }\n }\n .after\\:left-1\\/2 {\n &::after {\n content: var(--tw-content);\n left: calc(1 / 2 * 100%);\n }\n }\n .after\\:w-0\\.5 {\n &::after {\n content: var(--tw-content);\n width: calc(var(--spacing) * 0.5);\n }\n }\n .after\\:bg-foreground {\n &::after {\n content: var(--tw-content);\n background-color: var(--foreground);\n }\n }\n .after\\:opacity-0 {\n &::after {\n content: var(--tw-content);\n opacity: 0%;\n }\n }\n .after\\:transition-opacity {\n &::after {\n content: var(--tw-content);\n transition-property: opacity;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n }\n .group-data-\\[collapsible\\=offcanvas\\]\\:after\\:left-full {\n &:is(:where(.group)[data-collapsible=\"offcanvas\"] *) {\n &::after {\n content: var(--tw-content);\n left: 100%;\n }\n }\n }\n .group-data-\\[orientation\\=horizontal\\]\\/tabs\\:after\\:inset-x-0 {\n &:is(:where(.group\\/tabs)[data-orientation=\"horizontal\"] *) {\n &::after {\n content: var(--tw-content);\n inset-inline: calc(var(--spacing) * 0);\n }\n }\n }\n .group-data-\\[orientation\\=horizontal\\]\\/tabs\\:after\\:bottom-\\[-5px\\] {\n &:is(:where(.group\\/tabs)[data-orientation=\"horizontal\"] *) {\n &::after {\n content: var(--tw-content);\n bottom: -5px;\n }\n }\n }\n .group-data-\\[orientation\\=horizontal\\]\\/tabs\\:after\\:h-0\\.5 {\n &:is(:where(.group\\/tabs)[data-orientation=\"horizontal\"] *) {\n &::after {\n content: var(--tw-content);\n height: calc(var(--spacing) * 0.5);\n }\n }\n }\n .group-data-\\[orientation\\=vertical\\]\\/tabs\\:after\\:inset-y-0 {\n &:is(:where(.group\\/tabs)[data-orientation=\"vertical\"] *) {\n &::after {\n content: var(--tw-content);\n inset-block: calc(var(--spacing) * 0);\n }\n }\n }\n .group-data-\\[orientation\\=vertical\\]\\/tabs\\:after\\:-right-1 {\n &:is(:where(.group\\/tabs)[data-orientation=\"vertical\"] *) {\n &::after {\n content: var(--tw-content);\n right: calc(var(--spacing) * -1);\n }\n }\n }\n .group-data-\\[orientation\\=vertical\\]\\/tabs\\:after\\:w-0\\.5 {\n &:is(:where(.group\\/tabs)[data-orientation=\"vertical\"] *) {\n &::after {\n content: var(--tw-content);\n width: calc(var(--spacing) * 0.5);\n }\n }\n }\n .last\\:mt-0 {\n &:last-child {\n margin-top: calc(var(--spacing) * 0);\n }\n }\n .hover\\:-translate-y-0\\.5 {\n &:hover {\n @media (hover: hover) {\n --tw-translate-y: calc(var(--spacing) * -0.5);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n }\n }\n .hover\\:border-blue-200 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-blue-200);\n }\n }\n }\n .hover\\:border-blue-500 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-blue-500);\n }\n }\n }\n .hover\\:border-gray-200 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-gray-200);\n }\n }\n }\n .hover\\:border-gray-300 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-gray-300);\n }\n }\n }\n .hover\\:border-green-200 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-green-200);\n }\n }\n }\n .hover\\:border-green-300 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-green-300);\n }\n }\n }\n .hover\\:border-green-400 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-green-400);\n }\n }\n }\n .hover\\:border-green-500 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-green-500);\n }\n }\n }\n .hover\\:border-green-500\\/40 {\n &:hover {\n @media (hover: hover) {\n border-color: color-mix(in srgb, oklch(72.3% 0.219 149.579) 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-green-500) 40%, transparent);\n }\n }\n }\n }\n .hover\\:border-green-600 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-green-600);\n }\n }\n }\n .hover\\:border-pink-500 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-pink-500);\n }\n }\n }\n .hover\\:border-primary\\/50 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--primary);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--primary) 50%, transparent);\n }\n }\n }\n }\n .hover\\:border-red-200 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-red-200);\n }\n }\n }\n .hover\\:bg-accent {\n &:hover {\n @media (hover: hover) {\n background-color: var(--accent);\n }\n }\n }\n .hover\\:bg-black\\/70 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, #000 70%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 70%, transparent);\n }\n }\n }\n }\n .hover\\:bg-blue-600\\/80 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, oklch(54.6% 0.245 262.881) 80%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-blue-600) 80%, transparent);\n }\n }\n }\n }\n .hover\\:bg-destructive\\/90 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--destructive) 90%, transparent);\n }\n }\n }\n }\n .hover\\:bg-gray-50 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-gray-50);\n }\n }\n }\n .hover\\:bg-gray-100 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-gray-100);\n }\n }\n }\n .hover\\:bg-gray-200 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-gray-200);\n }\n }\n }\n .hover\\:bg-gray-300 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-gray-300);\n }\n }\n }\n .hover\\:bg-gray-400 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-gray-400);\n }\n }\n }\n .hover\\:bg-gray-700 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-gray-700);\n }\n }\n }\n .hover\\:bg-gray-800 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-gray-800);\n }\n }\n }\n .hover\\:bg-green-50 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-green-50);\n }\n }\n }\n .hover\\:bg-green-50\\/40 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, oklch(98.2% 0.018 155.826) 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-green-50) 40%, transparent);\n }\n }\n }\n }\n .hover\\:bg-green-50\\/50 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, oklch(98.2% 0.018 155.826) 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-green-50) 50%, transparent);\n }\n }\n }\n }\n .hover\\:bg-green-600 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-green-600);\n }\n }\n }\n .hover\\:bg-green-600\\/80 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, oklch(62.7% 0.194 149.214) 80%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-green-600) 80%, transparent);\n }\n }\n }\n }\n .hover\\:bg-green-700 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-green-700);\n }\n }\n }\n .hover\\:bg-green-700\\/60 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, oklch(52.7% 0.154 150.069) 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-green-700) 60%, transparent);\n }\n }\n }\n }\n .hover\\:bg-green-800 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-green-800);\n }\n }\n }\n .hover\\:bg-muted {\n &:hover {\n @media (hover: hover) {\n background-color: var(--muted);\n }\n }\n }\n .hover\\:bg-muted\\/30 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--muted);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--muted) 30%, transparent);\n }\n }\n }\n }\n .hover\\:bg-muted\\/50 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--muted);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--muted) 50%, transparent);\n }\n }\n }\n }\n .hover\\:bg-orange-700 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-orange-700);\n }\n }\n }\n .hover\\:bg-pink-600\\/80 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, oklch(59.2% 0.249 0.584) 80%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-pink-600) 80%, transparent);\n }\n }\n }\n }\n .hover\\:bg-primary\\/90 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--primary);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--primary) 90%, transparent);\n }\n }\n }\n }\n .hover\\:bg-red-700 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-red-700);\n }\n }\n }\n .hover\\:bg-secondary\\/80 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--secondary);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--secondary) 80%, transparent);\n }\n }\n }\n }\n .hover\\:bg-sidebar-accent {\n &:hover {\n @media (hover: hover) {\n background-color: var(--sidebar-accent);\n }\n }\n }\n .hover\\:bg-white\\/10 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, #fff 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 10%, transparent);\n }\n }\n }\n }\n .hover\\:bg-white\\/20 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, #fff 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 20%, transparent);\n }\n }\n }\n }\n .hover\\:bg-white\\/25 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, #fff 25%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 25%, transparent);\n }\n }\n }\n }\n .hover\\:text-accent-foreground {\n &:hover {\n @media (hover: hover) {\n color: var(--accent-foreground);\n }\n }\n }\n .hover\\:text-foreground {\n &:hover {\n @media (hover: hover) {\n color: var(--foreground);\n }\n }\n }\n .hover\\:text-gray-700 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-gray-700);\n }\n }\n }\n .hover\\:text-green-200 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-green-200);\n }\n }\n }\n .hover\\:text-green-300 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-green-300);\n }\n }\n }\n .hover\\:text-green-400 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-green-400);\n }\n }\n }\n .hover\\:text-green-700 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-green-700);\n }\n }\n }\n .hover\\:text-green-800 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-green-800);\n }\n }\n }\n .hover\\:text-green-900 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-green-900);\n }\n }\n }\n .hover\\:text-red-500 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-red-500);\n }\n }\n }\n .hover\\:text-red-700 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-red-700);\n }\n }\n }\n .hover\\:text-sidebar-accent-foreground {\n &:hover {\n @media (hover: hover) {\n color: var(--sidebar-accent-foreground);\n }\n }\n }\n .hover\\:text-white {\n &:hover {\n @media (hover: hover) {\n color: var(--color-white);\n }\n }\n }\n .hover\\:underline {\n &:hover {\n @media (hover: hover) {\n text-decoration-line: underline;\n }\n }\n }\n .hover\\:opacity-100 {\n &:hover {\n @media (hover: hover) {\n opacity: 100%;\n }\n }\n }\n .hover\\:shadow-\\[0_0_0_1px_hsl\\(var\\(--sidebar-accent\\)\\)\\] {\n &:hover {\n @media (hover: hover) {\n --tw-shadow: 0 0 0 1px var(--tw-shadow-color, hsl(var(--sidebar-accent)));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n }\n .hover\\:shadow-md {\n &:hover {\n @media (hover: hover) {\n --tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 2px 4px -2px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n }\n .hover\\:shadow-sm {\n &:hover {\n @media (hover: hover) {\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n }\n .hover\\:shadow-xl {\n &:hover {\n @media (hover: hover) {\n --tw-shadow: 0 20px 25px -5px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 8px 10px -6px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n }\n .hover\\:group-data-\\[collapsible\\=offcanvas\\]\\:bg-sidebar {\n &:hover {\n @media (hover: hover) {\n &:is(:where(.group)[data-collapsible=\"offcanvas\"] *) {\n background-color: var(--sidebar);\n }\n }\n }\n }\n .hover\\:after\\:bg-sidebar-border {\n &:hover {\n @media (hover: hover) {\n &::after {\n content: var(--tw-content);\n background-color: var(--sidebar-border);\n }\n }\n }\n }\n .focus\\:border-transparent {\n &:focus {\n border-color: transparent;\n }\n }\n .focus\\:bg-accent {\n &:focus {\n background-color: var(--accent);\n }\n }\n .focus\\:text-accent-foreground {\n &:focus {\n color: var(--accent-foreground);\n }\n }\n .focus\\:ring-2 {\n &:focus {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n .focus\\:ring-green-500 {\n &:focus {\n --tw-ring-color: var(--color-green-500);\n }\n }\n .focus\\:ring-green-600 {\n &:focus {\n --tw-ring-color: var(--color-green-600);\n }\n }\n .focus\\:ring-ring {\n &:focus {\n --tw-ring-color: var(--ring);\n }\n }\n .focus\\:ring-offset-2 {\n &:focus {\n --tw-ring-offset-width: 2px;\n --tw-ring-offset-shadow: var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n }\n }\n .focus\\:outline-hidden {\n &:focus {\n --tw-outline-style: none;\n outline-style: none;\n @media (forced-colors: active) {\n outline: 2px solid transparent;\n outline-offset: 2px;\n }\n }\n }\n .focus\\:outline-none {\n &:focus {\n --tw-outline-style: none;\n outline-style: none;\n }\n }\n .focus-visible\\:border-ring {\n &:focus-visible {\n border-color: var(--ring);\n }\n }\n .focus-visible\\:ring-2 {\n &:focus-visible {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n .focus-visible\\:ring-\\[3px\\] {\n &:focus-visible {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n .focus-visible\\:ring-destructive\\/20 {\n &:focus-visible {\n --tw-ring-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--destructive) 20%, transparent);\n }\n }\n }\n .focus-visible\\:ring-ring\\/50 {\n &:focus-visible {\n --tw-ring-color: var(--ring);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--ring) 50%, transparent);\n }\n }\n }\n .focus-visible\\:outline-1 {\n &:focus-visible {\n outline-style: var(--tw-outline-style);\n outline-width: 1px;\n }\n }\n .focus-visible\\:outline-ring {\n &:focus-visible {\n outline-color: var(--ring);\n }\n }\n .active\\:bg-sidebar-accent {\n &:active {\n background-color: var(--sidebar-accent);\n }\n }\n .active\\:text-sidebar-accent-foreground {\n &:active {\n color: var(--sidebar-accent-foreground);\n }\n }\n .disabled\\:pointer-events-none {\n &:disabled {\n pointer-events: none;\n }\n }\n .disabled\\:cursor-not-allowed {\n &:disabled {\n cursor: not-allowed;\n }\n }\n .disabled\\:opacity-30 {\n &:disabled {\n opacity: 30%;\n }\n }\n .disabled\\:opacity-50 {\n &:disabled {\n opacity: 50%;\n }\n }\n .in-data-\\[side\\=left\\]\\:cursor-w-resize {\n :where(*[data-side=\"left\"]) & {\n cursor: w-resize;\n }\n }\n .in-data-\\[side\\=right\\]\\:cursor-e-resize {\n :where(*[data-side=\"right\"]) & {\n cursor: e-resize;\n }\n }\n .has-data-\\[slot\\=card-action\\]\\:grid-cols-\\[1fr_auto\\] {\n &:has(*[data-slot=\"card-action\"]) {\n grid-template-columns: 1fr auto;\n }\n }\n .has-data-\\[state\\=checked\\]\\:border-primary {\n &:has(*[data-state=\"checked\"]) {\n border-color: var(--primary);\n }\n }\n .has-data-\\[state\\=checked\\]\\:bg-primary\\/5 {\n &:has(*[data-state=\"checked\"]) {\n background-color: var(--primary);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--primary) 5%, transparent);\n }\n }\n }\n .has-data-\\[variant\\=inset\\]\\:bg-sidebar {\n &:has(*[data-variant=\"inset\"]) {\n background-color: var(--sidebar);\n }\n }\n .has-\\[\\>\\[data-slot\\=checkbox-group\\]\\]\\:gap-3 {\n &:has(>[data-slot=checkbox-group]) {\n gap: calc(var(--spacing) * 3);\n }\n }\n .has-\\[\\>\\[data-slot\\=field-content\\]\\]\\:items-start {\n &:has(>[data-slot=field-content]) {\n align-items: flex-start;\n }\n }\n .has-\\[\\>\\[data-slot\\=field\\]\\]\\:w-full {\n &:has(>[data-slot=field]) {\n width: 100%;\n }\n }\n .has-\\[\\>\\[data-slot\\=field\\]\\]\\:flex-col {\n &:has(>[data-slot=field]) {\n flex-direction: column;\n }\n }\n .has-\\[\\>\\[data-slot\\=field\\]\\]\\:rounded-md {\n &:has(>[data-slot=field]) {\n border-radius: calc(var(--radius) - 2px);\n }\n }\n .has-\\[\\>\\[data-slot\\=field\\]\\]\\:border {\n &:has(>[data-slot=field]) {\n border-style: var(--tw-border-style);\n border-width: 1px;\n }\n }\n .has-\\[\\>\\[data-slot\\=radio-group\\]\\]\\:gap-3 {\n &:has(>[data-slot=radio-group]) {\n gap: calc(var(--spacing) * 3);\n }\n }\n .has-\\[\\>svg\\]\\:px-1\\.5 {\n &:has(>svg) {\n padding-inline: calc(var(--spacing) * 1.5);\n }\n }\n .has-\\[\\>svg\\]\\:px-2\\.5 {\n &:has(>svg) {\n padding-inline: calc(var(--spacing) * 2.5);\n }\n }\n .has-\\[\\>svg\\]\\:px-3 {\n &:has(>svg) {\n padding-inline: calc(var(--spacing) * 3);\n }\n }\n .has-\\[\\>svg\\]\\:px-4 {\n &:has(>svg) {\n padding-inline: calc(var(--spacing) * 4);\n }\n }\n .aria-disabled\\:pointer-events-none {\n &[aria-disabled=\"true\"] {\n pointer-events: none;\n }\n }\n .aria-disabled\\:opacity-50 {\n &[aria-disabled=\"true\"] {\n opacity: 50%;\n }\n }\n .aria-invalid\\:border-destructive {\n &[aria-invalid=\"true\"] {\n border-color: var(--destructive);\n }\n }\n .aria-invalid\\:ring-destructive\\/20 {\n &[aria-invalid=\"true\"] {\n --tw-ring-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--destructive) 20%, transparent);\n }\n }\n }\n .data-\\[active\\=true\\]\\:bg-sidebar-accent {\n &[data-active=\"true\"] {\n background-color: var(--sidebar-accent);\n }\n }\n .data-\\[active\\=true\\]\\:font-medium {\n &[data-active=\"true\"] {\n --tw-font-weight: var(--font-weight-medium);\n font-weight: var(--font-weight-medium);\n }\n }\n .data-\\[active\\=true\\]\\:text-sidebar-accent-foreground {\n &[data-active=\"true\"] {\n color: var(--sidebar-accent-foreground);\n }\n }\n .data-\\[disabled\\]\\:pointer-events-none {\n &[data-disabled] {\n pointer-events: none;\n }\n }\n .data-\\[disabled\\]\\:opacity-50 {\n &[data-disabled] {\n opacity: 50%;\n }\n }\n .data-\\[inset\\]\\:pl-8 {\n &[data-inset] {\n padding-left: calc(var(--spacing) * 8);\n }\n }\n .data-\\[invalid\\=true\\]\\:text-destructive {\n &[data-invalid=\"true\"] {\n color: var(--destructive);\n }\n }\n .data-\\[orientation\\=horizontal\\]\\:h-px {\n &[data-orientation=\"horizontal\"] {\n height: 1px;\n }\n }\n .data-\\[orientation\\=horizontal\\]\\:w-full {\n &[data-orientation=\"horizontal\"] {\n width: 100%;\n }\n }\n .data-\\[orientation\\=horizontal\\]\\:flex-col {\n &[data-orientation=\"horizontal\"] {\n flex-direction: column;\n }\n }\n .data-\\[orientation\\=vertical\\]\\:h-4 {\n &[data-orientation=\"vertical\"] {\n height: calc(var(--spacing) * 4);\n }\n }\n .data-\\[orientation\\=vertical\\]\\:h-full {\n &[data-orientation=\"vertical\"] {\n height: 100%;\n }\n }\n .data-\\[orientation\\=vertical\\]\\:w-px {\n &[data-orientation=\"vertical\"] {\n width: 1px;\n }\n }\n .data-\\[placeholder\\]\\:text-muted-foreground {\n &[data-placeholder] {\n color: var(--muted-foreground);\n }\n }\n .data-\\[side\\=bottom\\]\\:translate-y-1 {\n &[data-side=\"bottom\"] {\n --tw-translate-y: calc(var(--spacing) * 1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n }\n .data-\\[side\\=bottom\\]\\:slide-in-from-top-2 {\n &[data-side=\"bottom\"] {\n --tw-enter-translate-y: calc(2*var(--spacing)*-1);\n }\n }\n .data-\\[side\\=left\\]\\:-translate-x-1 {\n &[data-side=\"left\"] {\n --tw-translate-x: calc(var(--spacing) * -1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n }\n .data-\\[side\\=left\\]\\:slide-in-from-right-2 {\n &[data-side=\"left\"] {\n --tw-enter-translate-x: calc(2*var(--spacing));\n }\n }\n .data-\\[side\\=right\\]\\:translate-x-1 {\n &[data-side=\"right\"] {\n --tw-translate-x: calc(var(--spacing) * 1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n }\n .data-\\[side\\=right\\]\\:slide-in-from-left-2 {\n &[data-side=\"right\"] {\n --tw-enter-translate-x: calc(2*var(--spacing)*-1);\n }\n }\n .data-\\[side\\=top\\]\\:-translate-y-1 {\n &[data-side=\"top\"] {\n --tw-translate-y: calc(var(--spacing) * -1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n }\n .data-\\[side\\=top\\]\\:slide-in-from-bottom-2 {\n &[data-side=\"top\"] {\n --tw-enter-translate-y: calc(2*var(--spacing));\n }\n }\n .data-\\[size\\=default\\]\\:h-9 {\n &[data-size=\"default\"] {\n height: calc(var(--spacing) * 9);\n }\n }\n .data-\\[size\\=lg\\]\\:size-10 {\n &[data-size=\"lg\"] {\n width: calc(var(--spacing) * 10);\n height: calc(var(--spacing) * 10);\n }\n }\n .data-\\[size\\=sm\\]\\:size-6 {\n &[data-size=\"sm\"] {\n width: calc(var(--spacing) * 6);\n height: calc(var(--spacing) * 6);\n }\n }\n .data-\\[size\\=sm\\]\\:h-8 {\n &[data-size=\"sm\"] {\n height: calc(var(--spacing) * 8);\n }\n }\n .\\*\\:data-\\[slot\\=avatar\\]\\:ring-2 {\n :is(& > *) {\n &[data-slot=\"avatar\"] {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n }\n .\\*\\:data-\\[slot\\=avatar\\]\\:ring-background {\n :is(& > *) {\n &[data-slot=\"avatar\"] {\n --tw-ring-color: var(--background);\n }\n }\n }\n .data-\\[slot\\=checkbox-group\\]\\:gap-3 {\n &[data-slot=\"checkbox-group\"] {\n gap: calc(var(--spacing) * 3);\n }\n }\n .\\*\\:data-\\[slot\\=field\\]\\:p-4 {\n :is(& > *) {\n &[data-slot=\"field\"] {\n padding: calc(var(--spacing) * 4);\n }\n }\n }\n .\\*\\:data-\\[slot\\=field-group\\]\\:gap-4 {\n :is(& > *) {\n &[data-slot=\"field-group\"] {\n gap: calc(var(--spacing) * 4);\n }\n }\n }\n .\\*\\:data-\\[slot\\=select-value\\]\\:line-clamp-1 {\n :is(& > *) {\n &[data-slot=\"select-value\"] {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 1;\n }\n }\n }\n .\\*\\:data-\\[slot\\=select-value\\]\\:flex {\n :is(& > *) {\n &[data-slot=\"select-value\"] {\n display: flex;\n }\n }\n }\n .\\*\\:data-\\[slot\\=select-value\\]\\:items-center {\n :is(& > *) {\n &[data-slot=\"select-value\"] {\n align-items: center;\n }\n }\n }\n .\\*\\:data-\\[slot\\=select-value\\]\\:gap-2 {\n :is(& > *) {\n &[data-slot=\"select-value\"] {\n gap: calc(var(--spacing) * 2);\n }\n }\n }\n .data-\\[slot\\=sidebar-menu-button\\]\\:p-1\\.5\\! {\n &[data-slot=\"sidebar-menu-button\"] {\n padding: calc(var(--spacing) * 1.5) !important;\n }\n }\n .data-\\[state\\=active\\]\\:bg-background {\n &[data-state=\"active\"] {\n background-color: var(--background);\n }\n }\n .data-\\[state\\=active\\]\\:text-foreground {\n &[data-state=\"active\"] {\n color: var(--foreground);\n }\n }\n .group-data-\\[variant\\=default\\]\\/tabs-list\\:data-\\[state\\=active\\]\\:shadow-sm {\n &:is(:where(.group\\/tabs-list)[data-variant=\"default\"] *) {\n &[data-state=\"active\"] {\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n }\n .group-data-\\[variant\\=line\\]\\/tabs-list\\:data-\\[state\\=active\\]\\:bg-transparent {\n &:is(:where(.group\\/tabs-list)[data-variant=\"line\"] *) {\n &[data-state=\"active\"] {\n background-color: transparent;\n }\n }\n }\n .group-data-\\[variant\\=line\\]\\/tabs-list\\:data-\\[state\\=active\\]\\:shadow-none {\n &:is(:where(.group\\/tabs-list)[data-variant=\"line\"] *) {\n &[data-state=\"active\"] {\n --tw-shadow: 0 0 #0000;\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n }\n .group-data-\\[variant\\=line\\]\\/tabs-list\\:data-\\[state\\=active\\]\\:after\\:opacity-100 {\n &:is(:where(.group\\/tabs-list)[data-variant=\"line\"] *) {\n &[data-state=\"active\"] {\n &::after {\n content: var(--tw-content);\n opacity: 100%;\n }\n }\n }\n }\n .data-\\[state\\=checked\\]\\:border-primary {\n &[data-state=\"checked\"] {\n border-color: var(--primary);\n }\n }\n .data-\\[state\\=checked\\]\\:bg-primary {\n &[data-state=\"checked\"] {\n background-color: var(--primary);\n }\n }\n .data-\\[state\\=checked\\]\\:text-primary-foreground {\n &[data-state=\"checked\"] {\n color: var(--primary-foreground);\n }\n }\n .data-\\[state\\=closed\\]\\:animate-out {\n &[data-state=\"closed\"] {\n animation: exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none);\n }\n }\n .data-\\[state\\=closed\\]\\:duration-300 {\n &[data-state=\"closed\"] {\n --tw-duration: 300ms;\n transition-duration: 300ms;\n }\n }\n .data-\\[state\\=closed\\]\\:fade-out-0 {\n &[data-state=\"closed\"] {\n --tw-exit-opacity: calc(0/100);\n --tw-exit-opacity: 0;\n }\n }\n .data-\\[state\\=closed\\]\\:zoom-out-95 {\n &[data-state=\"closed\"] {\n --tw-exit-scale: calc(95*1%);\n --tw-exit-scale: .95;\n }\n }\n .data-\\[state\\=closed\\]\\:slide-out-to-bottom {\n &[data-state=\"closed\"] {\n --tw-exit-translate-y: 100%;\n }\n }\n .data-\\[state\\=closed\\]\\:slide-out-to-left {\n &[data-state=\"closed\"] {\n --tw-exit-translate-x: -100%;\n }\n }\n .data-\\[state\\=closed\\]\\:slide-out-to-right {\n &[data-state=\"closed\"] {\n --tw-exit-translate-x: 100%;\n }\n }\n .data-\\[state\\=closed\\]\\:slide-out-to-top {\n &[data-state=\"closed\"] {\n --tw-exit-translate-y: -100%;\n }\n }\n .data-\\[state\\=open\\]\\:animate-in {\n &[data-state=\"open\"] {\n animation: enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none);\n }\n }\n .data-\\[state\\=open\\]\\:bg-accent {\n &[data-state=\"open\"] {\n background-color: var(--accent);\n }\n }\n .data-\\[state\\=open\\]\\:bg-secondary {\n &[data-state=\"open\"] {\n background-color: var(--secondary);\n }\n }\n .data-\\[state\\=open\\]\\:bg-sidebar-accent {\n &[data-state=\"open\"] {\n background-color: var(--sidebar-accent);\n }\n }\n .data-\\[state\\=open\\]\\:text-accent-foreground {\n &[data-state=\"open\"] {\n color: var(--accent-foreground);\n }\n }\n .data-\\[state\\=open\\]\\:text-muted-foreground {\n &[data-state=\"open\"] {\n color: var(--muted-foreground);\n }\n }\n .data-\\[state\\=open\\]\\:text-sidebar-accent-foreground {\n &[data-state=\"open\"] {\n color: var(--sidebar-accent-foreground);\n }\n }\n .data-\\[state\\=open\\]\\:opacity-100 {\n &[data-state=\"open\"] {\n opacity: 100%;\n }\n }\n .data-\\[state\\=open\\]\\:duration-500 {\n &[data-state=\"open\"] {\n --tw-duration: 500ms;\n transition-duration: 500ms;\n }\n }\n .data-\\[state\\=open\\]\\:fade-in-0 {\n &[data-state=\"open\"] {\n --tw-enter-opacity: calc(0/100);\n --tw-enter-opacity: 0;\n }\n }\n .data-\\[state\\=open\\]\\:zoom-in-95 {\n &[data-state=\"open\"] {\n --tw-enter-scale: calc(95*1%);\n --tw-enter-scale: .95;\n }\n }\n .data-\\[state\\=open\\]\\:slide-in-from-bottom {\n &[data-state=\"open\"] {\n --tw-enter-translate-y: 100%;\n }\n }\n .data-\\[state\\=open\\]\\:slide-in-from-left {\n &[data-state=\"open\"] {\n --tw-enter-translate-x: -100%;\n }\n }\n .data-\\[state\\=open\\]\\:slide-in-from-right {\n &[data-state=\"open\"] {\n --tw-enter-translate-x: 100%;\n }\n }\n .data-\\[state\\=open\\]\\:slide-in-from-top {\n &[data-state=\"open\"] {\n --tw-enter-translate-y: -100%;\n }\n }\n .data-\\[state\\=open\\]\\:hover\\:bg-sidebar-accent {\n &[data-state=\"open\"] {\n &:hover {\n @media (hover: hover) {\n background-color: var(--sidebar-accent);\n }\n }\n }\n }\n .data-\\[state\\=open\\]\\:hover\\:text-sidebar-accent-foreground {\n &[data-state=\"open\"] {\n &:hover {\n @media (hover: hover) {\n color: var(--sidebar-accent-foreground);\n }\n }\n }\n }\n .data-\\[state\\=selected\\]\\:bg-muted {\n &[data-state=\"selected\"] {\n background-color: var(--muted);\n }\n }\n .data-\\[variant\\=destructive\\]\\:text-destructive {\n &[data-variant=\"destructive\"] {\n color: var(--destructive);\n }\n }\n .data-\\[variant\\=destructive\\]\\:focus\\:bg-destructive\\/10 {\n &[data-variant=\"destructive\"] {\n &:focus {\n background-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--destructive) 10%, transparent);\n }\n }\n }\n }\n .data-\\[variant\\=destructive\\]\\:focus\\:text-destructive {\n &[data-variant=\"destructive\"] {\n &:focus {\n color: var(--destructive);\n }\n }\n }\n .data-\\[variant\\=label\\]\\:text-sm {\n &[data-variant=\"label\"] {\n font-size: var(--text-sm);\n line-height: var(--tw-leading, var(--text-sm--line-height));\n }\n }\n .data-\\[variant\\=legend\\]\\:text-base {\n &[data-variant=\"legend\"] {\n font-size: var(--text-base);\n line-height: var(--tw-leading, var(--text-base--line-height));\n }\n }\n .data-\\[variant\\=line\\]\\:rounded-none {\n &[data-variant=\"line\"] {\n border-radius: 0;\n }\n }\n .data-\\[vaul-drawer-direction\\=bottom\\]\\:inset-x-0 {\n &[data-vaul-drawer-direction=\"bottom\"] {\n inset-inline: calc(var(--spacing) * 0);\n }\n }\n .data-\\[vaul-drawer-direction\\=bottom\\]\\:bottom-0 {\n &[data-vaul-drawer-direction=\"bottom\"] {\n bottom: calc(var(--spacing) * 0);\n }\n }\n .data-\\[vaul-drawer-direction\\=bottom\\]\\:mt-24 {\n &[data-vaul-drawer-direction=\"bottom\"] {\n margin-top: calc(var(--spacing) * 24);\n }\n }\n .data-\\[vaul-drawer-direction\\=bottom\\]\\:max-h-\\[80vh\\] {\n &[data-vaul-drawer-direction=\"bottom\"] {\n max-height: 80vh;\n }\n }\n .data-\\[vaul-drawer-direction\\=bottom\\]\\:rounded-t-lg {\n &[data-vaul-drawer-direction=\"bottom\"] {\n border-top-left-radius: var(--radius);\n border-top-right-radius: var(--radius);\n }\n }\n .data-\\[vaul-drawer-direction\\=bottom\\]\\:border-t {\n &[data-vaul-drawer-direction=\"bottom\"] {\n border-top-style: var(--tw-border-style);\n border-top-width: 1px;\n }\n }\n .data-\\[vaul-drawer-direction\\=left\\]\\:inset-y-0 {\n &[data-vaul-drawer-direction=\"left\"] {\n inset-block: calc(var(--spacing) * 0);\n }\n }\n .data-\\[vaul-drawer-direction\\=left\\]\\:left-0 {\n &[data-vaul-drawer-direction=\"left\"] {\n left: calc(var(--spacing) * 0);\n }\n }\n .data-\\[vaul-drawer-direction\\=left\\]\\:w-3\\/4 {\n &[data-vaul-drawer-direction=\"left\"] {\n width: calc(3 / 4 * 100%);\n }\n }\n .data-\\[vaul-drawer-direction\\=left\\]\\:border-r {\n &[data-vaul-drawer-direction=\"left\"] {\n border-right-style: var(--tw-border-style);\n border-right-width: 1px;\n }\n }\n .data-\\[vaul-drawer-direction\\=right\\]\\:inset-y-0 {\n &[data-vaul-drawer-direction=\"right\"] {\n inset-block: calc(var(--spacing) * 0);\n }\n }\n .data-\\[vaul-drawer-direction\\=right\\]\\:right-0 {\n &[data-vaul-drawer-direction=\"right\"] {\n right: calc(var(--spacing) * 0);\n }\n }\n .data-\\[vaul-drawer-direction\\=right\\]\\:w-3\\/4 {\n &[data-vaul-drawer-direction=\"right\"] {\n width: calc(3 / 4 * 100%);\n }\n }\n .data-\\[vaul-drawer-direction\\=right\\]\\:border-l {\n &[data-vaul-drawer-direction=\"right\"] {\n border-left-style: var(--tw-border-style);\n border-left-width: 1px;\n }\n }\n .data-\\[vaul-drawer-direction\\=top\\]\\:inset-x-0 {\n &[data-vaul-drawer-direction=\"top\"] {\n inset-inline: calc(var(--spacing) * 0);\n }\n }\n .data-\\[vaul-drawer-direction\\=top\\]\\:top-0 {\n &[data-vaul-drawer-direction=\"top\"] {\n top: calc(var(--spacing) * 0);\n }\n }\n .data-\\[vaul-drawer-direction\\=top\\]\\:mb-24 {\n &[data-vaul-drawer-direction=\"top\"] {\n margin-bottom: calc(var(--spacing) * 24);\n }\n }\n .data-\\[vaul-drawer-direction\\=top\\]\\:max-h-\\[80vh\\] {\n &[data-vaul-drawer-direction=\"top\"] {\n max-height: 80vh;\n }\n }\n .data-\\[vaul-drawer-direction\\=top\\]\\:rounded-b-lg {\n &[data-vaul-drawer-direction=\"top\"] {\n border-bottom-right-radius: var(--radius);\n border-bottom-left-radius: var(--radius);\n }\n }\n .data-\\[vaul-drawer-direction\\=top\\]\\:border-b {\n &[data-vaul-drawer-direction=\"top\"] {\n border-bottom-style: var(--tw-border-style);\n border-bottom-width: 1px;\n }\n }\n .nth-last-2\\:-mt-1 {\n &:nth-last-child(2) {\n margin-top: calc(var(--spacing) * -1);\n }\n }\n .sm\\:mt-16 {\n @media (width >= 40rem) {\n margin-top: calc(var(--spacing) * 16);\n }\n }\n .sm\\:mb-8 {\n @media (width >= 40rem) {\n margin-bottom: calc(var(--spacing) * 8);\n }\n }\n .sm\\:mb-12 {\n @media (width >= 40rem) {\n margin-bottom: calc(var(--spacing) * 12);\n }\n }\n .sm\\:ml-auto {\n @media (width >= 40rem) {\n margin-left: auto;\n }\n }\n .sm\\:block {\n @media (width >= 40rem) {\n display: block;\n }\n }\n .sm\\:flex {\n @media (width >= 40rem) {\n display: flex;\n }\n }\n .sm\\:inline {\n @media (width >= 40rem) {\n display: inline;\n }\n }\n .sm\\:table-cell {\n @media (width >= 40rem) {\n display: table-cell;\n }\n }\n .sm\\:h-20 {\n @media (width >= 40rem) {\n height: calc(var(--spacing) * 20);\n }\n }\n .sm\\:h-28 {\n @media (width >= 40rem) {\n height: calc(var(--spacing) * 28);\n }\n }\n .sm\\:h-72 {\n @media (width >= 40rem) {\n height: calc(var(--spacing) * 72);\n }\n }\n .sm\\:h-80 {\n @media (width >= 40rem) {\n height: calc(var(--spacing) * 80);\n }\n }\n .sm\\:w-40 {\n @media (width >= 40rem) {\n width: calc(var(--spacing) * 40);\n }\n }\n .sm\\:w-48 {\n @media (width >= 40rem) {\n width: calc(var(--spacing) * 48);\n }\n }\n .sm\\:w-52 {\n @media (width >= 40rem) {\n width: calc(var(--spacing) * 52);\n }\n }\n .sm\\:w-64 {\n @media (width >= 40rem) {\n width: calc(var(--spacing) * 64);\n }\n }\n .sm\\:w-auto {\n @media (width >= 40rem) {\n width: auto;\n }\n }\n .sm\\:max-w-lg {\n @media (width >= 40rem) {\n max-width: var(--container-lg);\n }\n }\n .sm\\:max-w-sm {\n @media (width >= 40rem) {\n max-width: var(--container-sm);\n }\n }\n .sm\\:flex-none {\n @media (width >= 40rem) {\n flex: none;\n }\n }\n .sm\\:grid-cols-1 {\n @media (width >= 40rem) {\n grid-template-columns: repeat(1, minmax(0, 1fr));\n }\n }\n .sm\\:grid-cols-2 {\n @media (width >= 40rem) {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n }\n .sm\\:grid-cols-3 {\n @media (width >= 40rem) {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n }\n .sm\\:grid-cols-4 {\n @media (width >= 40rem) {\n grid-template-columns: repeat(4, minmax(0, 1fr));\n }\n }\n .sm\\:flex-row {\n @media (width >= 40rem) {\n flex-direction: row;\n }\n }\n .sm\\:items-center {\n @media (width >= 40rem) {\n align-items: center;\n }\n }\n .sm\\:items-end {\n @media (width >= 40rem) {\n align-items: flex-end;\n }\n }\n .sm\\:justify-end {\n @media (width >= 40rem) {\n justify-content: flex-end;\n }\n }\n .sm\\:gap-3 {\n @media (width >= 40rem) {\n gap: calc(var(--spacing) * 3);\n }\n }\n .sm\\:gap-6 {\n @media (width >= 40rem) {\n gap: calc(var(--spacing) * 6);\n }\n }\n .sm\\:p-4 {\n @media (width >= 40rem) {\n padding: calc(var(--spacing) * 4);\n }\n }\n .sm\\:p-6 {\n @media (width >= 40rem) {\n padding: calc(var(--spacing) * 6);\n }\n }\n .sm\\:p-8 {\n @media (width >= 40rem) {\n padding: calc(var(--spacing) * 8);\n }\n }\n .sm\\:p-10 {\n @media (width >= 40rem) {\n padding: calc(var(--spacing) * 10);\n }\n }\n .sm\\:px-6 {\n @media (width >= 40rem) {\n padding-inline: calc(var(--spacing) * 6);\n }\n }\n .sm\\:px-8 {\n @media (width >= 40rem) {\n padding-inline: calc(var(--spacing) * 8);\n }\n }\n .sm\\:py-10 {\n @media (width >= 40rem) {\n padding-block: calc(var(--spacing) * 10);\n }\n }\n .sm\\:py-16 {\n @media (width >= 40rem) {\n padding-block: calc(var(--spacing) * 16);\n }\n }\n .sm\\:py-20 {\n @media (width >= 40rem) {\n padding-block: calc(var(--spacing) * 20);\n }\n }\n .sm\\:text-left {\n @media (width >= 40rem) {\n text-align: left;\n }\n }\n .sm\\:text-2xl {\n @media (width >= 40rem) {\n font-size: var(--text-2xl);\n line-height: var(--tw-leading, var(--text-2xl--line-height));\n }\n }\n .sm\\:text-3xl {\n @media (width >= 40rem) {\n font-size: var(--text-3xl);\n line-height: var(--tw-leading, var(--text-3xl--line-height));\n }\n }\n .sm\\:text-4xl {\n @media (width >= 40rem) {\n font-size: var(--text-4xl);\n line-height: var(--tw-leading, var(--text-4xl--line-height));\n }\n }\n .sm\\:text-5xl {\n @media (width >= 40rem) {\n font-size: var(--text-5xl);\n line-height: var(--tw-leading, var(--text-5xl--line-height));\n }\n }\n .sm\\:text-base {\n @media (width >= 40rem) {\n font-size: var(--text-base);\n line-height: var(--tw-leading, var(--text-base--line-height));\n }\n }\n .sm\\:text-lg {\n @media (width >= 40rem) {\n font-size: var(--text-lg);\n line-height: var(--tw-leading, var(--text-lg--line-height));\n }\n }\n .sm\\:text-sm {\n @media (width >= 40rem) {\n font-size: var(--text-sm);\n line-height: var(--tw-leading, var(--text-sm--line-height));\n }\n }\n .data-\\[vaul-drawer-direction\\=left\\]\\:sm\\:max-w-sm {\n &[data-vaul-drawer-direction=\"left\"] {\n @media (width >= 40rem) {\n max-width: var(--container-sm);\n }\n }\n }\n .data-\\[vaul-drawer-direction\\=right\\]\\:sm\\:max-w-sm {\n &[data-vaul-drawer-direction=\"right\"] {\n @media (width >= 40rem) {\n max-width: var(--container-sm);\n }\n }\n }\n .md\\:block {\n @media (width >= 48rem) {\n display: block;\n }\n }\n .md\\:flex {\n @media (width >= 48rem) {\n display: flex;\n }\n }\n .md\\:hidden {\n @media (width >= 48rem) {\n display: none;\n }\n }\n .md\\:table-cell {\n @media (width >= 48rem) {\n display: table-cell;\n }\n }\n .md\\:grid-cols-2 {\n @media (width >= 48rem) {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n }\n .md\\:grid-cols-3 {\n @media (width >= 48rem) {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n }\n .md\\:grid-cols-4 {\n @media (width >= 48rem) {\n grid-template-columns: repeat(4, minmax(0, 1fr));\n }\n }\n .md\\:grid-cols-5 {\n @media (width >= 48rem) {\n grid-template-columns: repeat(5, minmax(0, 1fr));\n }\n }\n .md\\:gap-1\\.5 {\n @media (width >= 48rem) {\n gap: calc(var(--spacing) * 1.5);\n }\n }\n .md\\:p-6 {\n @media (width >= 48rem) {\n padding: calc(var(--spacing) * 6);\n }\n }\n .md\\:text-left {\n @media (width >= 48rem) {\n text-align: left;\n }\n }\n .md\\:text-6xl {\n @media (width >= 48rem) {\n font-size: var(--text-6xl);\n line-height: var(--tw-leading, var(--text-6xl--line-height));\n }\n }\n .md\\:text-sm {\n @media (width >= 48rem) {\n font-size: var(--text-sm);\n line-height: var(--tw-leading, var(--text-sm--line-height));\n }\n }\n .md\\:opacity-0 {\n @media (width >= 48rem) {\n opacity: 0%;\n }\n }\n .md\\:peer-data-\\[variant\\=inset\\]\\:m-2 {\n @media (width >= 48rem) {\n &:is(:where(.peer)[data-variant=\"inset\"] ~ *) {\n margin: calc(var(--spacing) * 2);\n }\n }\n }\n .md\\:peer-data-\\[variant\\=inset\\]\\:ml-0 {\n @media (width >= 48rem) {\n &:is(:where(.peer)[data-variant=\"inset\"] ~ *) {\n margin-left: calc(var(--spacing) * 0);\n }\n }\n }\n .md\\:peer-data-\\[variant\\=inset\\]\\:rounded-xl {\n @media (width >= 48rem) {\n &:is(:where(.peer)[data-variant=\"inset\"] ~ *) {\n border-radius: calc(var(--radius) + 4px);\n }\n }\n }\n .md\\:peer-data-\\[variant\\=inset\\]\\:shadow-sm {\n @media (width >= 48rem) {\n &:is(:where(.peer)[data-variant=\"inset\"] ~ *) {\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n }\n .md\\:peer-data-\\[variant\\=inset\\]\\:peer-data-\\[state\\=collapsed\\]\\:ml-2 {\n @media (width >= 48rem) {\n &:is(:where(.peer)[data-variant=\"inset\"] ~ *) {\n &:is(:where(.peer)[data-state=\"collapsed\"] ~ *) {\n margin-left: calc(var(--spacing) * 2);\n }\n }\n }\n }\n .md\\:after\\:hidden {\n @media (width >= 48rem) {\n &::after {\n content: var(--tw-content);\n display: none;\n }\n }\n }\n .lg\\:flex {\n @media (width >= 64rem) {\n display: flex;\n }\n }\n .lg\\:hidden {\n @media (width >= 64rem) {\n display: none;\n }\n }\n .lg\\:table-cell {\n @media (width >= 64rem) {\n display: table-cell;\n }\n }\n .lg\\:h-80 {\n @media (width >= 64rem) {\n height: calc(var(--spacing) * 80);\n }\n }\n .lg\\:h-96 {\n @media (width >= 64rem) {\n height: calc(var(--spacing) * 96);\n }\n }\n .lg\\:grid-cols-2 {\n @media (width >= 64rem) {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n }\n .lg\\:grid-cols-3 {\n @media (width >= 64rem) {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n }\n .lg\\:grid-cols-4 {\n @media (width >= 64rem) {\n grid-template-columns: repeat(4, minmax(0, 1fr));\n }\n }\n .lg\\:grid-cols-5 {\n @media (width >= 64rem) {\n grid-template-columns: repeat(5, minmax(0, 1fr));\n }\n }\n .lg\\:gap-12 {\n @media (width >= 64rem) {\n gap: calc(var(--spacing) * 12);\n }\n }\n .lg\\:px-8 {\n @media (width >= 64rem) {\n padding-inline: calc(var(--spacing) * 8);\n }\n }\n .xl\\:grid-cols-4 {\n @media (width >= 80rem) {\n grid-template-columns: repeat(4, minmax(0, 1fr));\n }\n }\n .\\@md\\/field-group\\:flex-row {\n @container field-group (width >= 28rem) {\n flex-direction: row;\n }\n }\n .\\@md\\/field-group\\:items-center {\n @container field-group (width >= 28rem) {\n align-items: center;\n }\n }\n .\\@md\\/field-group\\:has-\\[\\>\\[data-slot\\=field-content\\]\\]\\:items-start {\n @container field-group (width >= 28rem) {\n &:has(>[data-slot=field-content]) {\n align-items: flex-start;\n }\n }\n }\n .dark\\:border-input {\n &:is(.dark *) {\n border-color: var(--input);\n }\n }\n .dark\\:bg-destructive\\/60 {\n &:is(.dark *) {\n background-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--destructive) 60%, transparent);\n }\n }\n }\n .dark\\:bg-input\\/30 {\n &:is(.dark *) {\n background-color: var(--input);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--input) 30%, transparent);\n }\n }\n }\n .dark\\:bg-zinc-900 {\n &:is(.dark *) {\n background-color: var(--color-zinc-900);\n }\n }\n .dark\\:text-muted-foreground {\n &:is(.dark *) {\n color: var(--muted-foreground);\n }\n }\n .dark\\:hover\\:bg-accent\\/50 {\n &:is(.dark *) {\n &:hover {\n @media (hover: hover) {\n background-color: var(--accent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--accent) 50%, transparent);\n }\n }\n }\n }\n }\n .dark\\:hover\\:bg-input\\/50 {\n &:is(.dark *) {\n &:hover {\n @media (hover: hover) {\n background-color: var(--input);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--input) 50%, transparent);\n }\n }\n }\n }\n }\n .dark\\:hover\\:text-foreground {\n &:is(.dark *) {\n &:hover {\n @media (hover: hover) {\n color: var(--foreground);\n }\n }\n }\n }\n .dark\\:focus-visible\\:ring-destructive\\/40 {\n &:is(.dark *) {\n &:focus-visible {\n --tw-ring-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--destructive) 40%, transparent);\n }\n }\n }\n }\n .dark\\:has-data-\\[state\\=checked\\]\\:bg-primary\\/10 {\n &:is(.dark *) {\n &:has(*[data-state=\"checked\"]) {\n background-color: var(--primary);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--primary) 10%, transparent);\n }\n }\n }\n }\n .dark\\:aria-invalid\\:ring-destructive\\/40 {\n &:is(.dark *) {\n &[aria-invalid=\"true\"] {\n --tw-ring-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--destructive) 40%, transparent);\n }\n }\n }\n }\n .dark\\:data-\\[state\\=active\\]\\:border-input {\n &:is(.dark *) {\n &[data-state=\"active\"] {\n border-color: var(--input);\n }\n }\n }\n .dark\\:data-\\[state\\=active\\]\\:bg-input\\/30 {\n &:is(.dark *) {\n &[data-state=\"active\"] {\n background-color: var(--input);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--input) 30%, transparent);\n }\n }\n }\n }\n .dark\\:data-\\[state\\=active\\]\\:text-foreground {\n &:is(.dark *) {\n &[data-state=\"active\"] {\n color: var(--foreground);\n }\n }\n }\n .dark\\:group-data-\\[variant\\=line\\]\\/tabs-list\\:data-\\[state\\=active\\]\\:border-transparent {\n &:is(.dark *) {\n &:is(:where(.group\\/tabs-list)[data-variant=\"line\"] *) {\n &[data-state=\"active\"] {\n border-color: transparent;\n }\n }\n }\n }\n .dark\\:group-data-\\[variant\\=line\\]\\/tabs-list\\:data-\\[state\\=active\\]\\:bg-transparent {\n &:is(.dark *) {\n &:is(:where(.group\\/tabs-list)[data-variant=\"line\"] *) {\n &[data-state=\"active\"] {\n background-color: transparent;\n }\n }\n }\n }\n .dark\\:data-\\[state\\=checked\\]\\:bg-primary {\n &:is(.dark *) {\n &[data-state=\"checked\"] {\n background-color: var(--primary);\n }\n }\n }\n .dark\\:data-\\[variant\\=destructive\\]\\:focus\\:bg-destructive\\/20 {\n &:is(.dark *) {\n &[data-variant=\"destructive\"] {\n &:focus {\n background-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--destructive) 20%, transparent);\n }\n }\n }\n }\n }\n .\\[\\&_\\.recharts-cartesian-axis-tick_text\\]\\:fill-muted-foreground {\n & .recharts-cartesian-axis-tick text {\n fill: var(--muted-foreground);\n }\n }\n .\\[\\&_\\.recharts-cartesian-grid_line\\[stroke\\=\\'\\#ccc\\'\\]\\]\\:stroke-border\\/50 {\n & .recharts-cartesian-grid line[stroke='#ccc'] {\n stroke: var(--border);\n @supports (color: color-mix(in lab, red, red)) {\n stroke: color-mix(in oklab, var(--border) 50%, transparent);\n }\n }\n }\n .\\[\\&_\\.recharts-curve\\.recharts-tooltip-cursor\\]\\:stroke-border {\n & .recharts-curve.recharts-tooltip-cursor {\n stroke: var(--border);\n }\n }\n .\\[\\&_\\.recharts-dot\\[stroke\\=\\'\\#fff\\'\\]\\]\\:stroke-transparent {\n & .recharts-dot[stroke='#fff'] {\n stroke: transparent;\n }\n }\n .\\[\\&_\\.recharts-layer\\]\\:outline-hidden {\n & .recharts-layer {\n --tw-outline-style: none;\n outline-style: none;\n @media (forced-colors: active) {\n outline: 2px solid transparent;\n outline-offset: 2px;\n }\n }\n }\n .\\[\\&_\\.recharts-polar-grid_\\[stroke\\=\\'\\#ccc\\'\\]\\]\\:stroke-border {\n & .recharts-polar-grid [stroke='#ccc'] {\n stroke: var(--border);\n }\n }\n .\\[\\&_\\.recharts-radial-bar-background-sector\\]\\:fill-muted {\n & .recharts-radial-bar-background-sector {\n fill: var(--muted);\n }\n }\n .\\[\\&_\\.recharts-rectangle\\.recharts-tooltip-cursor\\]\\:fill-muted {\n & .recharts-rectangle.recharts-tooltip-cursor {\n fill: var(--muted);\n }\n }\n .\\[\\&_\\.recharts-reference-line_\\[stroke\\=\\'\\#ccc\\'\\]\\]\\:stroke-border {\n & .recharts-reference-line [stroke='#ccc'] {\n stroke: var(--border);\n }\n }\n .\\[\\&_\\.recharts-sector\\]\\:outline-hidden {\n & .recharts-sector {\n --tw-outline-style: none;\n outline-style: none;\n @media (forced-colors: active) {\n outline: 2px solid transparent;\n outline-offset: 2px;\n }\n }\n }\n .\\[\\&_\\.recharts-sector\\[stroke\\=\\'\\#fff\\'\\]\\]\\:stroke-transparent {\n & .recharts-sector[stroke='#fff'] {\n stroke: transparent;\n }\n }\n .\\[\\&_\\.recharts-surface\\]\\:outline-hidden {\n & .recharts-surface {\n --tw-outline-style: none;\n outline-style: none;\n @media (forced-colors: active) {\n outline: 2px solid transparent;\n outline-offset: 2px;\n }\n }\n }\n .\\[\\&_svg\\]\\:pointer-events-none {\n & svg {\n pointer-events: none;\n }\n }\n .\\[\\&_svg\\]\\:shrink-0 {\n & svg {\n flex-shrink: 0;\n }\n }\n .\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-3 {\n & svg:not([class*='size-']) {\n width: calc(var(--spacing) * 3);\n height: calc(var(--spacing) * 3);\n }\n }\n .\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-4 {\n & svg:not([class*='size-']) {\n width: calc(var(--spacing) * 4);\n height: calc(var(--spacing) * 4);\n }\n }\n .\\[\\&_svg\\:not\\(\\[class\\*\\=\\'text-\\'\\]\\)\\]\\:text-muted-foreground {\n & svg:not([class*='text-']) {\n color: var(--muted-foreground);\n }\n }\n .\\[\\&_tr\\]\\:border-b {\n & tr {\n border-bottom-style: var(--tw-border-style);\n border-bottom-width: 1px;\n }\n }\n .\\[\\&_tr\\:last-child\\]\\:border-0 {\n & tr:last-child {\n border-style: var(--tw-border-style);\n border-width: 0px;\n }\n }\n .\\[\\&\\:has\\(\\[role\\=checkbox\\]\\)\\]\\:pr-0 {\n &:has([role=checkbox]) {\n padding-right: calc(var(--spacing) * 0);\n }\n }\n .\\[\\.border-b\\]\\:pb-6 {\n &:is(.border-b) {\n padding-bottom: calc(var(--spacing) * 6);\n }\n }\n .\\[\\.border-t\\]\\:pt-6 {\n &:is(.border-t) {\n padding-top: calc(var(--spacing) * 6);\n }\n }\n .\\*\\:\\[span\\]\\:last\\:flex {\n :is(& > *) {\n &:is(span) {\n &:last-child {\n display: flex;\n }\n }\n }\n }\n .\\*\\:\\[span\\]\\:last\\:items-center {\n :is(& > *) {\n &:is(span) {\n &:last-child {\n align-items: center;\n }\n }\n }\n }\n .\\*\\:\\[span\\]\\:last\\:gap-2 {\n :is(& > *) {\n &:is(span) {\n &:last-child {\n gap: calc(var(--spacing) * 2);\n }\n }\n }\n }\n .data-\\[variant\\=destructive\\]\\:\\*\\:\\[svg\\]\\:\\!text-destructive {\n &[data-variant=\"destructive\"] {\n :is(& > *) {\n &:is(svg) {\n color: var(--destructive) !important;\n }\n }\n }\n }\n .\\[\\&\\>\\*\\]\\:w-full {\n &>* {\n width: 100%;\n }\n }\n .\\@md\\/field-group\\:\\[\\&\\>\\*\\]\\:w-auto {\n @container field-group (width >= 28rem) {\n &>* {\n width: auto;\n }\n }\n }\n .\\[\\&\\>\\.sr-only\\]\\:w-auto {\n &>.sr-only {\n width: auto;\n }\n }\n .\\[\\&\\>\\[data-slot\\=field-label\\]\\]\\:flex-auto {\n &>[data-slot=field-label] {\n flex: auto;\n }\n }\n .\\@md\\/field-group\\:\\[\\&\\>\\[data-slot\\=field-label\\]\\]\\:flex-auto {\n @container field-group (width >= 28rem) {\n &>[data-slot=field-label] {\n flex: auto;\n }\n }\n }\n .\\[\\&\\>\\[role\\=checkbox\\]\\]\\:translate-y-\\[2px\\] {\n &>[role=checkbox] {\n --tw-translate-y: 2px;\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n }\n .has-\\[\\>\\[data-slot\\=field-content\\]\\]\\:\\[\\&\\>\\[role\\=checkbox\\]\\,\\[role\\=radio\\]\\]\\:mt-px {\n &:has(>[data-slot=field-content]) {\n &>[role=checkbox],[role=radio] {\n margin-top: 1px;\n }\n }\n }\n .\\@md\\/field-group\\:has-\\[\\>\\[data-slot\\=field-content\\]\\]\\:\\[\\&\\>\\[role\\=checkbox\\]\\,\\[role\\=radio\\]\\]\\:mt-px {\n @container field-group (width >= 28rem) {\n &:has(>[data-slot=field-content]) {\n &>[role=checkbox],[role=radio] {\n margin-top: 1px;\n }\n }\n }\n }\n .\\[\\&\\>a\\]\\:underline {\n &>a {\n text-decoration-line: underline;\n }\n }\n .\\[\\&\\>a\\]\\:underline-offset-4 {\n &>a {\n text-underline-offset: 4px;\n }\n }\n .\\[\\&\\>a\\:hover\\]\\:text-primary {\n &>a:hover {\n color: var(--primary);\n }\n }\n .\\[\\&\\>button\\]\\:hidden {\n &>button {\n display: none;\n }\n }\n .\\[\\&\\>span\\:last-child\\]\\:truncate {\n &>span:last-child {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n }\n .\\[\\&\\>svg\\]\\:pointer-events-none {\n &>svg {\n pointer-events: none;\n }\n }\n .\\[\\&\\>svg\\]\\:size-3 {\n &>svg {\n width: calc(var(--spacing) * 3);\n height: calc(var(--spacing) * 3);\n }\n }\n .\\[\\&\\>svg\\]\\:size-4 {\n &>svg {\n width: calc(var(--spacing) * 4);\n height: calc(var(--spacing) * 4);\n }\n }\n .\\[\\&\\>svg\\]\\:h-2\\.5 {\n &>svg {\n height: calc(var(--spacing) * 2.5);\n }\n }\n .\\[\\&\\>svg\\]\\:h-3 {\n &>svg {\n height: calc(var(--spacing) * 3);\n }\n }\n .\\[\\&\\>svg\\]\\:w-2\\.5 {\n &>svg {\n width: calc(var(--spacing) * 2.5);\n }\n }\n .\\[\\&\\>svg\\]\\:w-3 {\n &>svg {\n width: calc(var(--spacing) * 3);\n }\n }\n .\\[\\&\\>svg\\]\\:shrink-0 {\n &>svg {\n flex-shrink: 0;\n }\n }\n .\\[\\&\\>svg\\]\\:text-muted-foreground {\n &>svg {\n color: var(--muted-foreground);\n }\n }\n .\\[\\&\\>svg\\]\\:text-sidebar-accent-foreground {\n &>svg {\n color: var(--sidebar-accent-foreground);\n }\n }\n .group-has-data-\\[size\\=lg\\]\\/avatar-group\\:\\[\\&\\>svg\\]\\:size-5 {\n &:is(:where(.group\\/avatar-group):has(*[data-size=\"lg\"]) *) {\n &>svg {\n width: calc(var(--spacing) * 5);\n height: calc(var(--spacing) * 5);\n }\n }\n }\n .group-has-data-\\[size\\=sm\\]\\/avatar-group\\:\\[\\&\\>svg\\]\\:size-3 {\n &:is(:where(.group\\/avatar-group):has(*[data-size=\"sm\"]) *) {\n &>svg {\n width: calc(var(--spacing) * 3);\n height: calc(var(--spacing) * 3);\n }\n }\n }\n .group-data-\\[size\\=default\\]\\/avatar\\:\\[\\&\\>svg\\]\\:size-2 {\n &:is(:where(.group\\/avatar)[data-size=\"default\"] *) {\n &>svg {\n width: calc(var(--spacing) * 2);\n height: calc(var(--spacing) * 2);\n }\n }\n }\n .group-data-\\[size\\=lg\\]\\/avatar\\:\\[\\&\\>svg\\]\\:size-2 {\n &:is(:where(.group\\/avatar)[data-size=\"lg\"] *) {\n &>svg {\n width: calc(var(--spacing) * 2);\n height: calc(var(--spacing) * 2);\n }\n }\n }\n .group-data-\\[size\\=sm\\]\\/avatar\\:\\[\\&\\>svg\\]\\:hidden {\n &:is(:where(.group\\/avatar)[data-size=\"sm\"] *) {\n &>svg {\n display: none;\n }\n }\n }\n .\\[\\&\\>tr\\]\\:last\\:border-b-0 {\n &>tr {\n &:last-child {\n border-bottom-style: var(--tw-border-style);\n border-bottom-width: 0px;\n }\n }\n }\n .\\[\\[data-side\\=left\\]\\[data-collapsible\\=offcanvas\\]_\\&\\]\\:-right-2 {\n [data-side=left][data-collapsible=offcanvas] & {\n right: calc(var(--spacing) * -2);\n }\n }\n .\\[\\[data-side\\=left\\]\\[data-state\\=collapsed\\]_\\&\\]\\:cursor-e-resize {\n [data-side=left][data-state=collapsed] & {\n cursor: e-resize;\n }\n }\n .\\[\\[data-side\\=right\\]\\[data-collapsible\\=offcanvas\\]_\\&\\]\\:-left-2 {\n [data-side=right][data-collapsible=offcanvas] & {\n left: calc(var(--spacing) * -2);\n }\n }\n .\\[\\[data-side\\=right\\]\\[data-state\\=collapsed\\]_\\&\\]\\:cursor-w-resize {\n [data-side=right][data-state=collapsed] & {\n cursor: w-resize;\n }\n }\n .\\[\\[data-variant\\=legend\\]\\+\\&\\]\\:-mt-1\\.5 {\n [data-variant=legend]+& {\n margin-top: calc(var(--spacing) * -1.5);\n }\n }\n .\\[a\\&\\]\\:hover\\:bg-accent {\n a& {\n &:hover {\n @media (hover: hover) {\n background-color: var(--accent);\n }\n }\n }\n }\n .\\[a\\&\\]\\:hover\\:bg-destructive\\/90 {\n a& {\n &:hover {\n @media (hover: hover) {\n background-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--destructive) 90%, transparent);\n }\n }\n }\n }\n }\n .\\[a\\&\\]\\:hover\\:bg-primary\\/90 {\n a& {\n &:hover {\n @media (hover: hover) {\n background-color: var(--primary);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--primary) 90%, transparent);\n }\n }\n }\n }\n }\n .\\[a\\&\\]\\:hover\\:bg-secondary\\/90 {\n a& {\n &:hover {\n @media (hover: hover) {\n background-color: var(--secondary);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--secondary) 90%, transparent);\n }\n }\n }\n }\n }\n .\\[a\\&\\]\\:hover\\:text-accent-foreground {\n a& {\n &:hover {\n @media (hover: hover) {\n color: var(--accent-foreground);\n }\n }\n }\n }\n .\\[a\\&\\]\\:hover\\:underline {\n a& {\n &:hover {\n @media (hover: hover) {\n text-decoration-line: underline;\n }\n }\n }\n }\n}\n@property --tw-animation-delay {\n syntax: \"*\";\n inherits: false;\n initial-value: 0s;\n}\n@property --tw-animation-direction {\n syntax: \"*\";\n inherits: false;\n initial-value: normal;\n}\n@property --tw-animation-duration {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-animation-fill-mode {\n syntax: \"*\";\n inherits: false;\n initial-value: none;\n}\n@property --tw-animation-iteration-count {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-enter-blur {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-enter-opacity {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-enter-rotate {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-enter-scale {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-enter-translate-x {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-enter-translate-y {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-exit-blur {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-exit-opacity {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-exit-rotate {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-exit-scale {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-exit-translate-x {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-exit-translate-y {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n:root {\n --radius: 0.625rem;\n --background: oklch(1 0 0);\n --foreground: oklch(0.145 0 0);\n --card: oklch(1 0 0);\n --card-foreground: oklch(0.145 0 0);\n --popover: oklch(1 0 0);\n --popover-foreground: oklch(0.145 0 0);\n --primary: oklch(0.205 0 0);\n --primary-foreground: oklch(0.985 0 0);\n --secondary: oklch(0.97 0 0);\n --secondary-foreground: oklch(0.205 0 0);\n --muted: oklch(0.97 0 0);\n --muted-foreground: oklch(0.556 0 0);\n --accent: oklch(0.97 0 0);\n --accent-foreground: oklch(0.205 0 0);\n --destructive: oklch(0.577 0.245 27.325);\n --border: oklch(0.922 0 0);\n --input: oklch(0.922 0 0);\n --ring: oklch(0.708 0 0);\n --chart-1: oklch(0.646 0.222 41.116);\n --chart-2: oklch(0.6 0.118 184.704);\n --chart-3: oklch(0.398 0.07 227.392);\n --chart-4: oklch(0.828 0.189 84.429);\n --chart-5: oklch(0.769 0.188 70.08);\n --sidebar: oklch(0.985 0 0);\n --sidebar-foreground: oklch(0.145 0 0);\n --sidebar-primary: oklch(0.205 0 0);\n --sidebar-primary-foreground: oklch(0.985 0 0);\n --sidebar-accent: oklch(0.97 0 0);\n --sidebar-accent-foreground: oklch(0.205 0 0);\n --sidebar-border: oklch(0.922 0 0);\n --sidebar-ring: oklch(0.708 0 0);\n}\n.dark {\n --background: oklch(0.145 0 0);\n --foreground: oklch(0.985 0 0);\n --card: oklch(0.205 0 0);\n --card-foreground: oklch(0.985 0 0);\n --popover: oklch(0.205 0 0);\n --popover-foreground: oklch(0.985 0 0);\n --primary: oklch(0.922 0 0);\n --primary-foreground: oklch(0.205 0 0);\n --secondary: oklch(0.269 0 0);\n --secondary-foreground: oklch(0.985 0 0);\n --muted: oklch(0.269 0 0);\n --muted-foreground: oklch(0.708 0 0);\n --accent: oklch(0.269 0 0);\n --accent-foreground: oklch(0.985 0 0);\n --destructive: oklch(0.704 0.191 22.216);\n --border: oklch(1 0 0 / 10%);\n --input: oklch(1 0 0 / 15%);\n --ring: oklch(0.556 0 0);\n --chart-1: oklch(0.488 0.243 264.376);\n --chart-2: oklch(0.696 0.17 162.48);\n --chart-3: oklch(0.769 0.188 70.08);\n --chart-4: oklch(0.627 0.265 303.9);\n --chart-5: oklch(0.645 0.246 16.439);\n --sidebar: oklch(0.205 0 0);\n --sidebar-foreground: oklch(0.985 0 0);\n --sidebar-primary: oklch(0.488 0.243 264.376);\n --sidebar-primary-foreground: oklch(0.985 0 0);\n --sidebar-accent: oklch(0.269 0 0);\n --sidebar-accent-foreground: oklch(0.985 0 0);\n --sidebar-border: oklch(1 0 0 / 10%);\n --sidebar-ring: oklch(0.556 0 0);\n}\n@layer base {\n * {\n border-color: var(--border);\n outline-color: var(--ring);\n @supports (color: color-mix(in lab, red, red)) {\n outline-color: color-mix(in oklab, var(--ring) 50%, transparent);\n }\n }\n body {\n background-color: var(--background);\n color: var(--foreground);\n }\n}\n@property --tw-translate-x {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-translate-y {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-translate-z {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-space-y-reverse {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-space-x-reverse {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-divide-y-reverse {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-border-style {\n syntax: \"*\";\n inherits: false;\n initial-value: solid;\n}\n@property --tw-gradient-position {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-gradient-from {\n syntax: \"\";\n inherits: false;\n initial-value: #0000;\n}\n@property --tw-gradient-via {\n syntax: \"\";\n inherits: false;\n initial-value: #0000;\n}\n@property --tw-gradient-to {\n syntax: \"\";\n inherits: false;\n initial-value: #0000;\n}\n@property --tw-gradient-stops {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-gradient-via-stops {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-gradient-from-position {\n syntax: \"\";\n inherits: false;\n initial-value: 0%;\n}\n@property --tw-gradient-via-position {\n syntax: \"\";\n inherits: false;\n initial-value: 50%;\n}\n@property --tw-gradient-to-position {\n syntax: \"\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-leading {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-font-weight {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-tracking {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ordinal {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-slashed-zero {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-numeric-figure {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-numeric-spacing {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-numeric-fraction {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-shadow-alpha {\n syntax: \"\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-inset-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-inset-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-inset-shadow-alpha {\n syntax: \"\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-ring-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ring-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-inset-ring-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-inset-ring-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-ring-inset {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ring-offset-width {\n syntax: \"\";\n inherits: false;\n initial-value: 0px;\n}\n@property --tw-ring-offset-color {\n syntax: \"*\";\n inherits: false;\n initial-value: #fff;\n}\n@property --tw-ring-offset-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-outline-style {\n syntax: \"*\";\n inherits: false;\n initial-value: solid;\n}\n@property --tw-backdrop-blur {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-brightness {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-contrast {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-grayscale {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-hue-rotate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-invert {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-opacity {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-saturate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-sepia {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-duration {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ease {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-content {\n syntax: \"*\";\n initial-value: \"\";\n inherits: false;\n}\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n@keyframes pulse {\n 50% {\n opacity: 0.5;\n }\n}\n@keyframes enter {\n from {\n opacity: var(--tw-enter-opacity,1);\n transform: translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0));\n filter: blur(var(--tw-enter-blur,0));\n }\n}\n@keyframes exit {\n to {\n opacity: var(--tw-exit-opacity,1);\n transform: translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0));\n filter: blur(var(--tw-exit-blur,0));\n }\n}\n@layer properties {\n @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {\n *, ::before, ::after, ::backdrop {\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-translate-z: 0;\n --tw-space-y-reverse: 0;\n --tw-space-x-reverse: 0;\n --tw-divide-y-reverse: 0;\n --tw-border-style: solid;\n --tw-gradient-position: initial;\n --tw-gradient-from: #0000;\n --tw-gradient-via: #0000;\n --tw-gradient-to: #0000;\n --tw-gradient-stops: initial;\n --tw-gradient-via-stops: initial;\n --tw-gradient-from-position: 0%;\n --tw-gradient-via-position: 50%;\n --tw-gradient-to-position: 100%;\n --tw-leading: initial;\n --tw-font-weight: initial;\n --tw-tracking: initial;\n --tw-ordinal: initial;\n --tw-slashed-zero: initial;\n --tw-numeric-figure: initial;\n --tw-numeric-spacing: initial;\n --tw-numeric-fraction: initial;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-color: initial;\n --tw-shadow-alpha: 100%;\n --tw-inset-shadow: 0 0 #0000;\n --tw-inset-shadow-color: initial;\n --tw-inset-shadow-alpha: 100%;\n --tw-ring-color: initial;\n --tw-ring-shadow: 0 0 #0000;\n --tw-inset-ring-color: initial;\n --tw-inset-ring-shadow: 0 0 #0000;\n --tw-ring-inset: initial;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-outline-style: solid;\n --tw-backdrop-blur: initial;\n --tw-backdrop-brightness: initial;\n --tw-backdrop-contrast: initial;\n --tw-backdrop-grayscale: initial;\n --tw-backdrop-hue-rotate: initial;\n --tw-backdrop-invert: initial;\n --tw-backdrop-opacity: initial;\n --tw-backdrop-saturate: initial;\n --tw-backdrop-sepia: initial;\n --tw-duration: initial;\n --tw-ease: initial;\n --tw-content: \"\";\n --tw-animation-delay: 0s;\n --tw-animation-direction: normal;\n --tw-animation-duration: initial;\n --tw-animation-fill-mode: none;\n --tw-animation-iteration-count: 1;\n --tw-enter-blur: 0;\n --tw-enter-opacity: 1;\n --tw-enter-rotate: 0;\n --tw-enter-scale: 1;\n --tw-enter-translate-x: 0;\n --tw-enter-translate-y: 0;\n --tw-exit-blur: 0;\n --tw-exit-opacity: 1;\n --tw-exit-rotate: 0;\n --tw-exit-scale: 1;\n --tw-exit-translate-x: 0;\n --tw-exit-translate-y: 0;\n }\n }\n}\n"],"names":[],"mappings":"AACA;EA40LE;IACE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA50LJ;EAEE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAA;IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAFF;EAgIE;;;;;;;EAAA;;;;;;;EAMA;;;;;;;;;;EASA;;;;;;EAKA;;;;;EAIA;;;;;EAIA;;;;;;;EAKA;;;;EAGA;;;;;;;EAMA;;;;EAGA;;;;;;;EAMA;;;;EAGA;;;;EAGA;;;;;;EAKA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;;EAIA;;;;;EAIA;;;;;;;;;;;EAAA;;;;;;;;;;;EAUA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;IACE;;;;IAEE;MAAgD;;;;;;EAKpD;;;;EAGA;;;;EAGA;;;;;EAIA;;;;EAGA;;;;EAGA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAAA;;;;EAGA;;;;EAAA;;;;EAGA;;;;EAmzKA;;;;;EAGE;IAAgD;;;;;EAIlD;;;;;;AAzkLF;;AAAA;EAoRE;;;;EAIA;;;;EAIA;;;;EAGA;;;;EAGA;;;;;;;;;;;;EAWA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;;;;EAMA;;;;;;;EAMA;;;;;;;EAMA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAIE;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;;EAMF;;;;EAIE;;;;;;EAMF;;;;EAIE;;;;;;;;EASA;;;;EAIF;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;;;EAKA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;EAEE;IAAgD;;;;;EAG5B;;;;EAEtB;;;;EAEE;IAAgD;;;;;EAG5B;;;;EAEtB;;;;EAEE;IAAgD;;;;;EAG5B;;;;EAEtB;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;EAEE;IAAgD;;;;;EAG5B;;;;EAEtB;;;;EAEE;IAAgD;;;;;EAG5B;;;;EAEtB;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;EAEE;IAAgD;;;;;EAGxB;;;;;EAG1B;;;;;;EAKA;;;;EAEE;IAAgD;;;;;EAGxB;;;;;EAG1B;;;;;;EAKA;;;;EAEE;IAAgD;;;;;EAGxB;;;;;EAG1B;;;;;;EAKA;;;;EAEE;IAAgD;;;;;EAG5B;;;;EAEtB;;;;EAEE;IAAgD;;;;;EAG5B;;;;EAEtB;;;;EAEE;IAAgD;;;;;EAG5B;;;;EAEtB;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;EAGA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;;EAIA;;;;EAGA;;;;EAGA;;;;;EAIA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;;EAGE;IAAgC;;;;;;EAKlC;;;;;EAIA;;;;;;EAKA;;;;;;EAKA;;;;;;EAKA;;;;;;EAKA;;;;;;EAKA;;;;;;EAKA;;;;;;EAKA;;;;;;EAKA;;;;;;EAKA;;;;;;EAK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A;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;AAIA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;AAIA;;;;;AAIA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;;AAKA;;;;;AAIA;;;;;;AAKA;;;;;;AAKA;;;;;AAIA;;;;;;AAKA;;;;;AAIA;;;;;;AAKA;;;;;AAIA;;;;;;AAKA;;;;;AAIA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;;;AAOA"}}] + {"offset": {"line": 93, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/src/app/globals.css"],"sourcesContent":["/*! tailwindcss v4.2.1 | MIT License | https://tailwindcss.com */\n@layer properties;\n@layer theme, base, components, utilities;\n@layer theme {\n :root, :host {\n --color-red-50: oklch(97.1% 0.013 17.38);\n --color-red-100: oklch(93.6% 0.032 17.717);\n --color-red-200: oklch(88.5% 0.062 18.334);\n --color-red-400: oklch(70.4% 0.191 22.216);\n --color-red-500: oklch(63.7% 0.237 25.331);\n --color-red-600: oklch(57.7% 0.245 27.325);\n --color-red-700: oklch(50.5% 0.213 27.518);\n --color-orange-100: oklch(95.4% 0.038 75.164);\n --color-orange-500: oklch(70.5% 0.213 47.604);\n --color-orange-600: oklch(64.6% 0.222 41.116);\n --color-orange-700: oklch(55.3% 0.195 38.402);\n --color-amber-50: oklch(98.7% 0.022 95.277);\n --color-amber-200: oklch(92.4% 0.12 95.746);\n --color-amber-400: oklch(82.8% 0.189 84.429);\n --color-amber-700: oklch(55.5% 0.163 48.998);\n --color-yellow-50: oklch(98.7% 0.026 102.212);\n --color-yellow-100: oklch(97.3% 0.071 103.193);\n --color-yellow-500: oklch(79.5% 0.184 86.047);\n --color-yellow-600: oklch(68.1% 0.162 75.834);\n --color-yellow-700: oklch(55.4% 0.135 66.442);\n --color-green-50: oklch(98.2% 0.018 155.826);\n --color-green-100: oklch(96.2% 0.044 156.743);\n --color-green-200: oklch(92.5% 0.084 155.995);\n --color-green-300: oklch(87.1% 0.15 154.449);\n --color-green-400: oklch(79.2% 0.209 151.711);\n --color-green-500: oklch(72.3% 0.219 149.579);\n --color-green-600: oklch(62.7% 0.194 149.214);\n --color-green-700: oklch(52.7% 0.154 150.069);\n --color-green-800: oklch(44.8% 0.119 151.328);\n --color-green-900: oklch(39.3% 0.095 152.535);\n --color-green-950: oklch(26.6% 0.065 152.934);\n --color-teal-500: oklch(70.4% 0.14 182.503);\n --color-blue-50: oklch(97% 0.014 254.604);\n --color-blue-100: oklch(93.2% 0.032 255.585);\n --color-blue-200: oklch(88.2% 0.059 254.128);\n --color-blue-500: oklch(62.3% 0.214 259.815);\n --color-blue-600: oklch(54.6% 0.245 262.881);\n --color-blue-700: oklch(48.8% 0.243 264.376);\n --color-purple-100: oklch(94.6% 0.033 307.174);\n --color-purple-500: oklch(62.7% 0.265 303.9);\n --color-purple-700: oklch(49.6% 0.265 301.924);\n --color-pink-500: oklch(65.6% 0.241 354.308);\n --color-pink-600: oklch(59.2% 0.249 0.584);\n --color-gray-50: oklch(98.5% 0.002 247.839);\n --color-gray-100: oklch(96.7% 0.003 264.542);\n --color-gray-200: oklch(92.8% 0.006 264.531);\n --color-gray-300: oklch(87.2% 0.01 258.338);\n --color-gray-400: oklch(70.7% 0.022 261.325);\n --color-gray-500: oklch(55.1% 0.027 264.364);\n --color-gray-600: oklch(44.6% 0.03 256.802);\n --color-gray-700: oklch(37.3% 0.034 259.733);\n --color-gray-800: oklch(27.8% 0.033 256.848);\n --color-gray-900: oklch(21% 0.034 264.665);\n --color-gray-950: oklch(13% 0.028 261.692);\n --color-zinc-100: oklch(96.7% 0.001 286.375);\n --color-zinc-200: oklch(92% 0.004 286.32);\n --color-zinc-300: oklch(87.1% 0.006 286.286);\n --color-zinc-500: oklch(55.2% 0.016 285.938);\n --color-zinc-600: oklch(44.2% 0.017 285.786);\n --color-zinc-900: oklch(21% 0.006 285.885);\n --color-black: #000;\n --color-white: #fff;\n --spacing: 0.25rem;\n --container-xs: 20rem;\n --container-sm: 24rem;\n --container-md: 28rem;\n --container-lg: 32rem;\n --container-xl: 36rem;\n --container-2xl: 42rem;\n --container-3xl: 48rem;\n --container-4xl: 56rem;\n --container-5xl: 64rem;\n --container-6xl: 72rem;\n --container-7xl: 80rem;\n --text-xs: 0.75rem;\n --text-xs--line-height: calc(1 / 0.75);\n --text-sm: 0.875rem;\n --text-sm--line-height: calc(1.25 / 0.875);\n --text-base: 1rem;\n --text-base--line-height: calc(1.5 / 1);\n --text-lg: 1.125rem;\n --text-lg--line-height: calc(1.75 / 1.125);\n --text-xl: 1.25rem;\n --text-xl--line-height: calc(1.75 / 1.25);\n --text-2xl: 1.5rem;\n --text-2xl--line-height: calc(2 / 1.5);\n --text-3xl: 1.875rem;\n --text-3xl--line-height: calc(2.25 / 1.875);\n --text-4xl: 2.25rem;\n --text-4xl--line-height: calc(2.5 / 2.25);\n --text-5xl: 3rem;\n --text-5xl--line-height: 1;\n --text-6xl: 3.75rem;\n --text-6xl--line-height: 1;\n --font-weight-normal: 400;\n --font-weight-medium: 500;\n --font-weight-semibold: 600;\n --font-weight-bold: 700;\n --tracking-tight: -0.025em;\n --tracking-wide: 0.025em;\n --tracking-wider: 0.05em;\n --tracking-widest: 0.1em;\n --leading-tight: 1.25;\n --leading-snug: 1.375;\n --leading-normal: 1.5;\n --leading-relaxed: 1.625;\n --radius-xs: 0.125rem;\n --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);\n --animate-spin: spin 1s linear infinite;\n --animate-pulse: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n --blur-sm: 8px;\n --aspect-video: 16 / 9;\n --default-transition-duration: 150ms;\n --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n --default-font-family: var(--font-geist-sans);\n --default-mono-font-family: var(--font-geist-mono);\n --color-border: var(--border);\n }\n}\n@layer base {\n *, ::after, ::before, ::backdrop, ::file-selector-button {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n border: 0 solid;\n }\n html, :host {\n line-height: 1.5;\n -webkit-text-size-adjust: 100%;\n tab-size: 4;\n font-family: var(--default-font-family, ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\");\n font-feature-settings: var(--default-font-feature-settings, normal);\n font-variation-settings: var(--default-font-variation-settings, normal);\n -webkit-tap-highlight-color: transparent;\n }\n hr {\n height: 0;\n color: inherit;\n border-top-width: 1px;\n }\n abbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n }\n h1, h2, h3, h4, h5, h6 {\n font-size: inherit;\n font-weight: inherit;\n }\n a {\n color: inherit;\n -webkit-text-decoration: inherit;\n text-decoration: inherit;\n }\n b, strong {\n font-weight: bolder;\n }\n code, kbd, samp, pre {\n font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace);\n font-feature-settings: var(--default-mono-font-feature-settings, normal);\n font-variation-settings: var(--default-mono-font-variation-settings, normal);\n font-size: 1em;\n }\n small {\n font-size: 80%;\n }\n sub, sup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n }\n sub {\n bottom: -0.25em;\n }\n sup {\n top: -0.5em;\n }\n table {\n text-indent: 0;\n border-color: inherit;\n border-collapse: collapse;\n }\n :-moz-focusring {\n outline: auto;\n }\n progress {\n vertical-align: baseline;\n }\n summary {\n display: list-item;\n }\n ol, ul, menu {\n list-style: none;\n }\n img, svg, video, canvas, audio, iframe, embed, object {\n display: block;\n vertical-align: middle;\n }\n img, video {\n max-width: 100%;\n height: auto;\n }\n button, input, select, optgroup, textarea, ::file-selector-button {\n font: inherit;\n font-feature-settings: inherit;\n font-variation-settings: inherit;\n letter-spacing: inherit;\n color: inherit;\n border-radius: 0;\n background-color: transparent;\n opacity: 1;\n }\n :where(select:is([multiple], [size])) optgroup {\n font-weight: bolder;\n }\n :where(select:is([multiple], [size])) optgroup option {\n padding-inline-start: 20px;\n }\n ::file-selector-button {\n margin-inline-end: 4px;\n }\n ::placeholder {\n opacity: 1;\n }\n @supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) {\n ::placeholder {\n color: currentcolor;\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, currentcolor 50%, transparent);\n }\n }\n }\n textarea {\n resize: vertical;\n }\n ::-webkit-search-decoration {\n -webkit-appearance: none;\n }\n ::-webkit-date-and-time-value {\n min-height: 1lh;\n text-align: inherit;\n }\n ::-webkit-datetime-edit {\n display: inline-flex;\n }\n ::-webkit-datetime-edit-fields-wrapper {\n padding: 0;\n }\n ::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field {\n padding-block: 0;\n }\n ::-webkit-calendar-picker-indicator {\n line-height: 1;\n }\n :-moz-ui-invalid {\n box-shadow: none;\n }\n button, input:where([type=\"button\"], [type=\"reset\"], [type=\"submit\"]), ::file-selector-button {\n appearance: button;\n }\n ::-webkit-inner-spin-button, ::-webkit-outer-spin-button {\n height: auto;\n }\n [hidden]:where(:not([hidden=\"until-found\"])) {\n display: none !important;\n }\n}\n@layer utilities {\n .\\@container\\/card-header {\n container-type: inline-size;\n container-name: card-header;\n }\n .\\@container\\/field-group {\n container-type: inline-size;\n container-name: field-group;\n }\n .pointer-events-none {\n pointer-events: none;\n }\n .visible {\n visibility: visible;\n }\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n border-width: 0;\n }\n .absolute {\n position: absolute;\n }\n .fixed {\n position: fixed;\n }\n .relative {\n position: relative;\n }\n .sticky {\n position: sticky;\n }\n .inset-0 {\n inset: calc(var(--spacing) * 0);\n }\n .inset-x-0 {\n inset-inline: calc(var(--spacing) * 0);\n }\n .inset-y-0 {\n inset-block: calc(var(--spacing) * 0);\n }\n .start {\n inset-inline-start: var(--spacing);\n }\n .end {\n inset-inline-end: var(--spacing);\n }\n .-top-1 {\n top: calc(var(--spacing) * -1);\n }\n .top-0 {\n top: calc(var(--spacing) * 0);\n }\n .top-1\\.5 {\n top: calc(var(--spacing) * 1.5);\n }\n .top-1\\/2 {\n top: calc(1 / 2 * 100%);\n }\n .top-2 {\n top: calc(var(--spacing) * 2);\n }\n .top-3 {\n top: calc(var(--spacing) * 3);\n }\n .top-3\\.5 {\n top: calc(var(--spacing) * 3.5);\n }\n .top-4 {\n top: calc(var(--spacing) * 4);\n }\n .top-6 {\n top: calc(var(--spacing) * 6);\n }\n .top-16 {\n top: calc(var(--spacing) * 16);\n }\n .top-\\[50\\%\\] {\n top: 50%;\n }\n .-right-1 {\n right: calc(var(--spacing) * -1);\n }\n .right-0 {\n right: calc(var(--spacing) * 0);\n }\n .right-1 {\n right: calc(var(--spacing) * 1);\n }\n .right-2 {\n right: calc(var(--spacing) * 2);\n }\n .right-2\\.5 {\n right: calc(var(--spacing) * 2.5);\n }\n .right-3 {\n right: calc(var(--spacing) * 3);\n }\n .right-4 {\n right: calc(var(--spacing) * 4);\n }\n .-bottom-1 {\n bottom: calc(var(--spacing) * -1);\n }\n .bottom-0 {\n bottom: calc(var(--spacing) * 0);\n }\n .bottom-2 {\n bottom: calc(var(--spacing) * 2);\n }\n .bottom-3 {\n bottom: calc(var(--spacing) * 3);\n }\n .left-0 {\n left: calc(var(--spacing) * 0);\n }\n .left-2 {\n left: calc(var(--spacing) * 2);\n }\n .left-3 {\n left: calc(var(--spacing) * 3);\n }\n .left-\\[50\\%\\] {\n left: 50%;\n }\n .z-10 {\n z-index: 10;\n }\n .z-20 {\n z-index: 20;\n }\n .z-40 {\n z-index: 40;\n }\n .z-50 {\n z-index: 50;\n }\n .col-start-2 {\n grid-column-start: 2;\n }\n .row-span-2 {\n grid-row: span 2 / span 2;\n }\n .row-start-1 {\n grid-row-start: 1;\n }\n .-mx-1 {\n margin-inline: calc(var(--spacing) * -1);\n }\n .mx-2 {\n margin-inline: calc(var(--spacing) * 2);\n }\n .mx-3\\.5 {\n margin-inline: calc(var(--spacing) * 3.5);\n }\n .mx-auto {\n margin-inline: auto;\n }\n .-my-2 {\n margin-block: calc(var(--spacing) * -2);\n }\n .my-0\\.5 {\n margin-block: calc(var(--spacing) * 0.5);\n }\n .my-1 {\n margin-block: calc(var(--spacing) * 1);\n }\n .-mt-1 {\n margin-top: calc(var(--spacing) * -1);\n }\n .mt-0\\.5 {\n margin-top: calc(var(--spacing) * 0.5);\n }\n .mt-1 {\n margin-top: calc(var(--spacing) * 1);\n }\n .mt-2 {\n margin-top: calc(var(--spacing) * 2);\n }\n .mt-3 {\n margin-top: calc(var(--spacing) * 3);\n }\n .mt-4 {\n margin-top: calc(var(--spacing) * 4);\n }\n .mt-5 {\n margin-top: calc(var(--spacing) * 5);\n }\n .mt-6 {\n margin-top: calc(var(--spacing) * 6);\n }\n .mt-8 {\n margin-top: calc(var(--spacing) * 8);\n }\n .mt-12 {\n margin-top: calc(var(--spacing) * 12);\n }\n .mt-auto {\n margin-top: auto;\n }\n .mr-0\\.5 {\n margin-right: calc(var(--spacing) * 0.5);\n }\n .mb-1 {\n margin-bottom: calc(var(--spacing) * 1);\n }\n .mb-2 {\n margin-bottom: calc(var(--spacing) * 2);\n }\n .mb-3 {\n margin-bottom: calc(var(--spacing) * 3);\n }\n .mb-4 {\n margin-bottom: calc(var(--spacing) * 4);\n }\n .mb-5 {\n margin-bottom: calc(var(--spacing) * 5);\n }\n .mb-6 {\n margin-bottom: calc(var(--spacing) * 6);\n }\n .mb-8 {\n margin-bottom: calc(var(--spacing) * 8);\n }\n .-ml-1 {\n margin-left: calc(var(--spacing) * -1);\n }\n .ml-2 {\n margin-left: calc(var(--spacing) * 2);\n }\n .ml-4 {\n margin-left: calc(var(--spacing) * 4);\n }\n .ml-auto {\n margin-left: auto;\n }\n .line-clamp-2 {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n }\n .line-clamp-3 {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 3;\n }\n .line-clamp-4 {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 4;\n }\n .block {\n display: block;\n }\n .flex {\n display: flex;\n }\n .grid {\n display: grid;\n }\n .hidden {\n display: none;\n }\n .inline {\n display: inline;\n }\n .inline-block {\n display: inline-block;\n }\n .inline-flex {\n display: inline-flex;\n }\n .table {\n display: table;\n }\n .table-caption {\n display: table-caption;\n }\n .table-cell {\n display: table-cell;\n }\n .table-row {\n display: table-row;\n }\n .field-sizing-content {\n field-sizing: content;\n }\n .aspect-square {\n aspect-ratio: 1 / 1;\n }\n .aspect-video {\n aspect-ratio: var(--aspect-video);\n }\n .size-2 {\n width: calc(var(--spacing) * 2);\n height: calc(var(--spacing) * 2);\n }\n .size-2\\.5 {\n width: calc(var(--spacing) * 2.5);\n height: calc(var(--spacing) * 2.5);\n }\n .size-3\\.5 {\n width: calc(var(--spacing) * 3.5);\n height: calc(var(--spacing) * 3.5);\n }\n .size-4 {\n width: calc(var(--spacing) * 4);\n height: calc(var(--spacing) * 4);\n }\n .size-5\\! {\n width: calc(var(--spacing) * 5) !important;\n height: calc(var(--spacing) * 5) !important;\n }\n .size-6 {\n width: calc(var(--spacing) * 6);\n height: calc(var(--spacing) * 6);\n }\n .size-7 {\n width: calc(var(--spacing) * 7);\n height: calc(var(--spacing) * 7);\n }\n .size-8 {\n width: calc(var(--spacing) * 8);\n height: calc(var(--spacing) * 8);\n }\n .size-9 {\n width: calc(var(--spacing) * 9);\n height: calc(var(--spacing) * 9);\n }\n .size-10 {\n width: calc(var(--spacing) * 10);\n height: calc(var(--spacing) * 10);\n }\n .size-full {\n width: 100%;\n height: 100%;\n }\n .h-\\(--header-height\\) {\n height: var(--header-height);\n }\n .h-1 {\n height: calc(var(--spacing) * 1);\n }\n .h-1\\.5 {\n height: calc(var(--spacing) * 1.5);\n }\n .h-2 {\n height: calc(var(--spacing) * 2);\n }\n .h-2\\.5 {\n height: calc(var(--spacing) * 2.5);\n }\n .h-3 {\n height: calc(var(--spacing) * 3);\n }\n .h-3\\.5 {\n height: calc(var(--spacing) * 3.5);\n }\n .h-4 {\n height: calc(var(--spacing) * 4);\n }\n .h-5 {\n height: calc(var(--spacing) * 5);\n }\n .h-6 {\n height: calc(var(--spacing) * 6);\n }\n .h-7 {\n height: calc(var(--spacing) * 7);\n }\n .h-8 {\n height: calc(var(--spacing) * 8);\n }\n .h-9 {\n height: calc(var(--spacing) * 9);\n }\n .h-10 {\n height: calc(var(--spacing) * 10);\n }\n .h-12 {\n height: calc(var(--spacing) * 12);\n }\n .h-14 {\n height: calc(var(--spacing) * 14);\n }\n .h-16 {\n height: calc(var(--spacing) * 16);\n }\n .h-20 {\n height: calc(var(--spacing) * 20);\n }\n .h-24 {\n height: calc(var(--spacing) * 24);\n }\n .h-32 {\n height: calc(var(--spacing) * 32);\n }\n .h-36 {\n height: calc(var(--spacing) * 36);\n }\n .h-40 {\n height: calc(var(--spacing) * 40);\n }\n .h-44 {\n height: calc(var(--spacing) * 44);\n }\n .h-48 {\n height: calc(var(--spacing) * 48);\n }\n .h-56 {\n height: calc(var(--spacing) * 56);\n }\n .h-60 {\n height: calc(var(--spacing) * 60);\n }\n .h-64 {\n height: calc(var(--spacing) * 64);\n }\n .h-72 {\n height: calc(var(--spacing) * 72);\n }\n .h-\\[calc\\(100\\%-1px\\)\\] {\n height: calc(100% - 1px);\n }\n .h-\\[var\\(--radix-select-trigger-height\\)\\] {\n height: var(--radix-select-trigger-height);\n }\n .h-auto {\n height: auto;\n }\n .h-fit {\n height: fit-content;\n }\n .h-full {\n height: 100%;\n }\n .h-px {\n height: 1px;\n }\n .h-svh {\n height: 100svh;\n }\n .max-h-\\(--radix-dropdown-menu-content-available-height\\) {\n max-height: var(--radix-dropdown-menu-content-available-height);\n }\n .max-h-\\(--radix-select-content-available-height\\) {\n max-height: var(--radix-select-content-available-height);\n }\n .max-h-14 {\n max-height: calc(var(--spacing) * 14);\n }\n .max-h-32 {\n max-height: calc(var(--spacing) * 32);\n }\n .max-h-48 {\n max-height: calc(var(--spacing) * 48);\n }\n .max-h-\\[85vh\\] {\n max-height: 85vh;\n }\n .max-h-\\[90vh\\] {\n max-height: 90vh;\n }\n .max-h-full {\n max-height: 100%;\n }\n .min-h-0 {\n min-height: calc(var(--spacing) * 0);\n }\n .min-h-16 {\n min-height: calc(var(--spacing) * 16);\n }\n .min-h-20 {\n min-height: calc(var(--spacing) * 20);\n }\n .min-h-24 {\n min-height: calc(var(--spacing) * 24);\n }\n .min-h-48 {\n min-height: calc(var(--spacing) * 48);\n }\n .min-h-\\[40vh\\] {\n min-height: 40vh;\n }\n .min-h-\\[220px\\] {\n min-height: 220px;\n }\n .min-h-\\[calc\\(100vh-60px\\)\\] {\n min-height: calc(100vh - 60px);\n }\n .min-h-screen {\n min-height: 100vh;\n }\n .min-h-svh {\n min-height: 100svh;\n }\n .w-\\(--radix-dropdown-menu-trigger-width\\) {\n width: var(--radix-dropdown-menu-trigger-width);\n }\n .w-\\(--sidebar-width\\) {\n width: var(--sidebar-width);\n }\n .w-0 {\n width: calc(var(--spacing) * 0);\n }\n .w-1 {\n width: calc(var(--spacing) * 1);\n }\n .w-1\\.5 {\n width: calc(var(--spacing) * 1.5);\n }\n .w-2 {\n width: calc(var(--spacing) * 2);\n }\n .w-2\\.5 {\n width: calc(var(--spacing) * 2.5);\n }\n .w-3 {\n width: calc(var(--spacing) * 3);\n }\n .w-3\\.5 {\n width: calc(var(--spacing) * 3.5);\n }\n .w-3\\/4 {\n width: calc(3 / 4 * 100%);\n }\n .w-4 {\n width: calc(var(--spacing) * 4);\n }\n .w-5 {\n width: calc(var(--spacing) * 5);\n }\n .w-6 {\n width: calc(var(--spacing) * 6);\n }\n .w-7 {\n width: calc(var(--spacing) * 7);\n }\n .w-8 {\n width: calc(var(--spacing) * 8);\n }\n .w-9 {\n width: calc(var(--spacing) * 9);\n }\n .w-10 {\n width: calc(var(--spacing) * 10);\n }\n .w-11 {\n width: calc(var(--spacing) * 11);\n }\n .w-12 {\n width: calc(var(--spacing) * 12);\n }\n .w-14 {\n width: calc(var(--spacing) * 14);\n }\n .w-16 {\n width: calc(var(--spacing) * 16);\n }\n .w-20 {\n width: calc(var(--spacing) * 20);\n }\n .w-24 {\n width: calc(var(--spacing) * 24);\n }\n .w-28 {\n width: calc(var(--spacing) * 28);\n }\n .w-\\[100px\\] {\n width: 100px;\n }\n .w-auto {\n width: auto;\n }\n .w-fit {\n width: fit-content;\n }\n .w-full {\n width: 100%;\n }\n .w-px {\n width: 1px;\n }\n .max-w-\\(--skeleton-width\\) {\n max-width: var(--skeleton-width);\n }\n .max-w-2xl {\n max-width: var(--container-2xl);\n }\n .max-w-3xl {\n max-width: var(--container-3xl);\n }\n .max-w-4xl {\n max-width: var(--container-4xl);\n }\n .max-w-5xl {\n max-width: var(--container-5xl);\n }\n .max-w-6xl {\n max-width: var(--container-6xl);\n }\n .max-w-7xl {\n max-width: var(--container-7xl);\n }\n .max-w-\\[120px\\] {\n max-width: 120px;\n }\n .max-w-\\[140px\\] {\n max-width: 140px;\n }\n .max-w-\\[calc\\(100\\%-2rem\\)\\] {\n max-width: calc(100% - 2rem);\n }\n .max-w-full {\n max-width: 100%;\n }\n .max-w-lg {\n max-width: var(--container-lg);\n }\n .max-w-md {\n max-width: var(--container-md);\n }\n .max-w-sm {\n max-width: var(--container-sm);\n }\n .max-w-xl {\n max-width: var(--container-xl);\n }\n .max-w-xs {\n max-width: var(--container-xs);\n }\n .min-w-0 {\n min-width: calc(var(--spacing) * 0);\n }\n .min-w-5 {\n min-width: calc(var(--spacing) * 5);\n }\n .min-w-56 {\n min-width: calc(var(--spacing) * 56);\n }\n .min-w-\\[8rem\\] {\n min-width: 8rem;\n }\n .min-w-\\[var\\(--radix-select-trigger-width\\)\\] {\n min-width: var(--radix-select-trigger-width);\n }\n .min-w-fit {\n min-width: fit-content;\n }\n .flex-1 {\n flex: 1;\n }\n .shrink-0 {\n flex-shrink: 0;\n }\n .caption-bottom {\n caption-side: bottom;\n }\n .origin-\\(--radix-dropdown-menu-content-transform-origin\\) {\n transform-origin: var(--radix-dropdown-menu-content-transform-origin);\n }\n .origin-\\(--radix-select-content-transform-origin\\) {\n transform-origin: var(--radix-select-content-transform-origin);\n }\n .origin-\\(--radix-tooltip-content-transform-origin\\) {\n transform-origin: var(--radix-tooltip-content-transform-origin);\n }\n .-translate-x-1\\/2 {\n --tw-translate-x: calc(calc(1 / 2 * 100%) * -1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .-translate-x-px {\n --tw-translate-x: -1px;\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .translate-x-1 {\n --tw-translate-x: calc(var(--spacing) * 1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .translate-x-6 {\n --tw-translate-x: calc(var(--spacing) * 6);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .translate-x-\\[-50\\%\\] {\n --tw-translate-x: -50%;\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .translate-x-px {\n --tw-translate-x: 1px;\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .-translate-y-1\\/2 {\n --tw-translate-y: calc(calc(1 / 2 * 100%) * -1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .translate-y-\\[-50\\%\\] {\n --tw-translate-y: -50%;\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .translate-y-\\[calc\\(-50\\%_-_2px\\)\\] {\n --tw-translate-y: calc(-50% - 2px);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .rotate-45 {\n rotate: 45deg;\n }\n .rotate-180 {\n rotate: 180deg;\n }\n .animate-in {\n animation: enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none);\n }\n .animate-pulse {\n animation: var(--animate-pulse);\n }\n .animate-spin {\n animation: var(--animate-spin);\n }\n .cursor-default {\n cursor: default;\n }\n .cursor-pointer {\n cursor: pointer;\n }\n .resize-none {\n resize: none;\n }\n .resize-y {\n resize: vertical;\n }\n .scroll-my-1 {\n scroll-margin-block: calc(var(--spacing) * 1);\n }\n .list-disc {\n list-style-type: disc;\n }\n .appearance-none {\n appearance: none;\n }\n .auto-rows-min {\n grid-auto-rows: min-content;\n }\n .grid-cols-1 {\n grid-template-columns: repeat(1, minmax(0, 1fr));\n }\n .grid-cols-2 {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n .grid-cols-3 {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n .grid-cols-\\[3rem_1fr_1fr_auto\\] {\n grid-template-columns: 3rem 1fr 1fr auto;\n }\n .grid-rows-\\[auto_auto\\] {\n grid-template-rows: auto auto;\n }\n .flex-col {\n flex-direction: column;\n }\n .flex-col-reverse {\n flex-direction: column-reverse;\n }\n .flex-row {\n flex-direction: row;\n }\n .flex-wrap {\n flex-wrap: wrap;\n }\n .place-content-center {\n place-content: center;\n }\n .items-center {\n align-items: center;\n }\n .items-end {\n align-items: flex-end;\n }\n .items-start {\n align-items: flex-start;\n }\n .items-stretch {\n align-items: stretch;\n }\n .justify-between {\n justify-content: space-between;\n }\n .justify-center {\n justify-content: center;\n }\n .justify-end {\n justify-content: flex-end;\n }\n .justify-start {\n justify-content: flex-start;\n }\n .gap-0\\.5 {\n gap: calc(var(--spacing) * 0.5);\n }\n .gap-1 {\n gap: calc(var(--spacing) * 1);\n }\n .gap-1\\.5 {\n gap: calc(var(--spacing) * 1.5);\n }\n .gap-2 {\n gap: calc(var(--spacing) * 2);\n }\n .gap-2\\.5 {\n gap: calc(var(--spacing) * 2.5);\n }\n .gap-3 {\n gap: calc(var(--spacing) * 3);\n }\n .gap-4 {\n gap: calc(var(--spacing) * 4);\n }\n .gap-5 {\n gap: calc(var(--spacing) * 5);\n }\n .gap-6 {\n gap: calc(var(--spacing) * 6);\n }\n .gap-7 {\n gap: calc(var(--spacing) * 7);\n }\n .gap-8 {\n gap: calc(var(--spacing) * 8);\n }\n .gap-10 {\n gap: calc(var(--spacing) * 10);\n }\n .space-y-1\\.5 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .space-y-2 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .space-y-2\\.5 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 2.5) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 2.5) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .space-y-3 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .space-y-4 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .space-y-8 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 8) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 8) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .space-y-10 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 10) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 10) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .-space-x-2 {\n :where(& > :not(:last-child)) {\n --tw-space-x-reverse: 0;\n margin-inline-start: calc(calc(var(--spacing) * -2) * var(--tw-space-x-reverse));\n margin-inline-end: calc(calc(var(--spacing) * -2) * calc(1 - var(--tw-space-x-reverse)));\n }\n }\n .divide-y {\n :where(& > :not(:last-child)) {\n --tw-divide-y-reverse: 0;\n border-bottom-style: var(--tw-border-style);\n border-top-style: var(--tw-border-style);\n border-top-width: calc(1px * var(--tw-divide-y-reverse));\n border-bottom-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));\n }\n }\n .divide-gray-50 {\n :where(& > :not(:last-child)) {\n border-color: var(--color-gray-50);\n }\n }\n .self-center {\n align-self: center;\n }\n .self-end {\n align-self: flex-end;\n }\n .self-start {\n align-self: flex-start;\n }\n .justify-self-end {\n justify-self: flex-end;\n }\n .truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .overflow-auto {\n overflow: auto;\n }\n .overflow-hidden {\n overflow: hidden;\n }\n .overflow-x-auto {\n overflow-x: auto;\n }\n .overflow-x-hidden {\n overflow-x: hidden;\n }\n .overflow-y-auto {\n overflow-y: auto;\n }\n .rounded {\n border-radius: 0.25rem;\n }\n .rounded-2xl {\n border-radius: calc(var(--radius) + 8px);\n }\n .rounded-\\[2px\\] {\n border-radius: 2px;\n }\n .rounded-\\[4px\\] {\n border-radius: 4px;\n }\n .rounded-full {\n border-radius: calc(infinity * 1px);\n }\n .rounded-lg {\n border-radius: var(--radius);\n }\n .rounded-md {\n border-radius: calc(var(--radius) - 2px);\n }\n .rounded-sm {\n border-radius: calc(var(--radius) - 4px);\n }\n .rounded-xl {\n border-radius: calc(var(--radius) + 4px);\n }\n .rounded-xs {\n border-radius: var(--radius-xs);\n }\n .border {\n border-style: var(--tw-border-style);\n border-width: 1px;\n }\n .border-0 {\n border-style: var(--tw-border-style);\n border-width: 0px;\n }\n .border-2 {\n border-style: var(--tw-border-style);\n border-width: 2px;\n }\n .border-\\[1\\.5px\\] {\n border-style: var(--tw-border-style);\n border-width: 1.5px;\n }\n .border-t {\n border-top-style: var(--tw-border-style);\n border-top-width: 1px;\n }\n .border-r {\n border-right-style: var(--tw-border-style);\n border-right-width: 1px;\n }\n .border-b {\n border-bottom-style: var(--tw-border-style);\n border-bottom-width: 1px;\n }\n .border-b-2 {\n border-bottom-style: var(--tw-border-style);\n border-bottom-width: 2px;\n }\n .border-l {\n border-left-style: var(--tw-border-style);\n border-left-width: 1px;\n }\n .border-dashed {\n --tw-border-style: dashed;\n border-style: dashed;\n }\n .border-\\(--color-border\\) {\n border-color: var(--color-border);\n }\n .border-amber-200 {\n border-color: var(--color-amber-200);\n }\n .border-blue-100 {\n border-color: var(--color-blue-100);\n }\n .border-border {\n border-color: var(--border);\n }\n .border-border\\/50 {\n border-color: var(--border);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--border) 50%, transparent);\n }\n }\n .border-gray-50 {\n border-color: var(--color-gray-50);\n }\n .border-gray-100 {\n border-color: var(--color-gray-100);\n }\n .border-gray-200 {\n border-color: var(--color-gray-200);\n }\n .border-green-200 {\n border-color: var(--color-green-200);\n }\n .border-green-600 {\n border-color: var(--color-green-600);\n }\n .border-green-600\\/40 {\n border-color: color-mix(in srgb, oklch(62.7% 0.194 149.214) 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-green-600) 40%, transparent);\n }\n }\n .border-green-700 {\n border-color: var(--color-green-700);\n }\n .border-green-800\\/60 {\n border-color: color-mix(in srgb, oklch(44.8% 0.119 151.328) 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-green-800) 60%, transparent);\n }\n }\n .border-input {\n border-color: var(--input);\n }\n .border-muted-foreground\\/30 {\n border-color: var(--muted-foreground);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--muted-foreground) 30%, transparent);\n }\n }\n .border-red-100 {\n border-color: var(--color-red-100);\n }\n .border-red-200 {\n border-color: var(--color-red-200);\n }\n .border-sidebar-border {\n border-color: var(--sidebar-border);\n }\n .border-transparent {\n border-color: transparent;\n }\n .border-white {\n border-color: var(--color-white);\n }\n .border-white\\/10 {\n border-color: color-mix(in srgb, #fff 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-white) 10%, transparent);\n }\n }\n .border-white\\/20 {\n border-color: color-mix(in srgb, #fff 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-white) 20%, transparent);\n }\n }\n .border-white\\/30 {\n border-color: color-mix(in srgb, #fff 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-white) 30%, transparent);\n }\n }\n .border-t-transparent {\n border-top-color: transparent;\n }\n .bg-\\(--color-bg\\) {\n background-color: var(--color-bg);\n }\n .bg-accent {\n background-color: var(--accent);\n }\n .bg-amber-50 {\n background-color: var(--color-amber-50);\n }\n .bg-amber-400 {\n background-color: var(--color-amber-400);\n }\n .bg-background {\n background-color: var(--background);\n }\n .bg-black {\n background-color: var(--color-black);\n }\n .bg-black\\/0 {\n background-color: color-mix(in srgb, #000 0%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 0%, transparent);\n }\n }\n .bg-black\\/30 {\n background-color: color-mix(in srgb, #000 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 30%, transparent);\n }\n }\n .bg-black\\/40 {\n background-color: color-mix(in srgb, #000 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 40%, transparent);\n }\n }\n .bg-black\\/50 {\n background-color: color-mix(in srgb, #000 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 50%, transparent);\n }\n }\n .bg-blue-50 {\n background-color: var(--color-blue-50);\n }\n .bg-blue-100 {\n background-color: var(--color-blue-100);\n }\n .bg-blue-500 {\n background-color: var(--color-blue-500);\n }\n .bg-border {\n background-color: var(--border);\n }\n .bg-card {\n background-color: var(--card);\n }\n .bg-destructive {\n background-color: var(--destructive);\n }\n .bg-destructive\\/10 {\n background-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--destructive) 10%, transparent);\n }\n }\n .bg-foreground {\n background-color: var(--foreground);\n }\n .bg-gray-50 {\n background-color: var(--color-gray-50);\n }\n .bg-gray-50\\/40 {\n background-color: color-mix(in srgb, oklch(98.5% 0.002 247.839) 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-gray-50) 40%, transparent);\n }\n }\n .bg-gray-100 {\n background-color: var(--color-gray-100);\n }\n .bg-gray-200 {\n background-color: var(--color-gray-200);\n }\n .bg-gray-300 {\n background-color: var(--color-gray-300);\n }\n .bg-gray-500 {\n background-color: var(--color-gray-500);\n }\n .bg-gray-900 {\n background-color: var(--color-gray-900);\n }\n .bg-green-50 {\n background-color: var(--color-green-50);\n }\n .bg-green-50\\/50 {\n background-color: color-mix(in srgb, oklch(98.2% 0.018 155.826) 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-green-50) 50%, transparent);\n }\n }\n .bg-green-100 {\n background-color: var(--color-green-100);\n }\n .bg-green-400 {\n background-color: var(--color-green-400);\n }\n .bg-green-500 {\n background-color: var(--color-green-500);\n }\n .bg-green-600 {\n background-color: var(--color-green-600);\n }\n .bg-green-700 {\n background-color: var(--color-green-700);\n }\n .bg-green-700\\/30 {\n background-color: color-mix(in srgb, oklch(52.7% 0.154 150.069) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-green-700) 30%, transparent);\n }\n }\n .bg-green-700\\/90 {\n background-color: color-mix(in srgb, oklch(52.7% 0.154 150.069) 90%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-green-700) 90%, transparent);\n }\n }\n .bg-green-800\\/60 {\n background-color: color-mix(in srgb, oklch(44.8% 0.119 151.328) 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-green-800) 60%, transparent);\n }\n }\n .bg-green-900 {\n background-color: var(--color-green-900);\n }\n .bg-green-900\\/60 {\n background-color: color-mix(in srgb, oklch(39.3% 0.095 152.535) 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-green-900) 60%, transparent);\n }\n }\n .bg-green-950 {\n background-color: var(--color-green-950);\n }\n .bg-muted {\n background-color: var(--muted);\n }\n .bg-muted\\/10 {\n background-color: var(--muted);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--muted) 10%, transparent);\n }\n }\n .bg-muted\\/20 {\n background-color: var(--muted);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--muted) 20%, transparent);\n }\n }\n .bg-muted\\/30 {\n background-color: var(--muted);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--muted) 30%, transparent);\n }\n }\n .bg-muted\\/40 {\n background-color: var(--muted);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--muted) 40%, transparent);\n }\n }\n .bg-muted\\/50 {\n background-color: var(--muted);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--muted) 50%, transparent);\n }\n }\n .bg-orange-100 {\n background-color: var(--color-orange-100);\n }\n .bg-orange-500 {\n background-color: var(--color-orange-500);\n }\n .bg-orange-600 {\n background-color: var(--color-orange-600);\n }\n .bg-pink-500 {\n background-color: var(--color-pink-500);\n }\n .bg-popover {\n background-color: var(--popover);\n }\n .bg-primary {\n background-color: var(--primary);\n }\n .bg-purple-100 {\n background-color: var(--color-purple-100);\n }\n .bg-purple-500 {\n background-color: var(--color-purple-500);\n }\n .bg-red-50 {\n background-color: var(--color-red-50);\n }\n .bg-red-100 {\n background-color: var(--color-red-100);\n }\n .bg-red-600 {\n background-color: var(--color-red-600);\n }\n .bg-secondary {\n background-color: var(--secondary);\n }\n .bg-sidebar {\n background-color: var(--sidebar);\n }\n .bg-sidebar-border {\n background-color: var(--sidebar-border);\n }\n .bg-teal-500 {\n background-color: var(--color-teal-500);\n }\n .bg-transparent {\n background-color: transparent;\n }\n .bg-white {\n background-color: var(--color-white);\n }\n .bg-white\\/10 {\n background-color: color-mix(in srgb, #fff 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 10%, transparent);\n }\n }\n .bg-white\\/15 {\n background-color: color-mix(in srgb, #fff 15%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 15%, transparent);\n }\n }\n .bg-white\\/30 {\n background-color: color-mix(in srgb, #fff 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 30%, transparent);\n }\n }\n .bg-yellow-50 {\n background-color: var(--color-yellow-50);\n }\n .bg-yellow-100 {\n background-color: var(--color-yellow-100);\n }\n .bg-yellow-500 {\n background-color: var(--color-yellow-500);\n }\n .bg-zinc-100 {\n background-color: var(--color-zinc-100);\n }\n .bg-zinc-200 {\n background-color: var(--color-zinc-200);\n }\n .bg-zinc-300 {\n background-color: var(--color-zinc-300);\n }\n .bg-zinc-500 {\n background-color: var(--color-zinc-500);\n }\n .bg-gradient-to-b {\n --tw-gradient-position: to bottom in oklab;\n background-image: linear-gradient(var(--tw-gradient-stops));\n }\n .bg-gradient-to-br {\n --tw-gradient-position: to bottom right in oklab;\n background-image: linear-gradient(var(--tw-gradient-stops));\n }\n .bg-gradient-to-r {\n --tw-gradient-position: to right in oklab;\n background-image: linear-gradient(var(--tw-gradient-stops));\n }\n .bg-gradient-to-t {\n --tw-gradient-position: to top in oklab;\n background-image: linear-gradient(var(--tw-gradient-stops));\n }\n .from-black\\/30 {\n --tw-gradient-from: color-mix(in srgb, #000 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-from: color-mix(in oklab, var(--color-black) 30%, transparent);\n }\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .from-black\\/60 {\n --tw-gradient-from: color-mix(in srgb, #000 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-from: color-mix(in oklab, var(--color-black) 60%, transparent);\n }\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .from-gray-100 {\n --tw-gradient-from: var(--color-gray-100);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .from-gray-900 {\n --tw-gradient-from: var(--color-gray-900);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .from-gray-900\\/40 {\n --tw-gradient-from: color-mix(in srgb, oklch(21% 0.034 264.665) 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-from: color-mix(in oklab, var(--color-gray-900) 40%, transparent);\n }\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .from-gray-950 {\n --tw-gradient-from: var(--color-gray-950);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .from-green-100 {\n --tw-gradient-from: var(--color-green-100);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .from-green-500 {\n --tw-gradient-from: var(--color-green-500);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .from-green-800 {\n --tw-gradient-from: var(--color-green-800);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .from-green-900 {\n --tw-gradient-from: var(--color-green-900);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .from-green-950 {\n --tw-gradient-from: var(--color-green-950);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .via-black\\/20 {\n --tw-gradient-via: color-mix(in srgb, #000 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-via: color-mix(in oklab, var(--color-black) 20%, transparent);\n }\n --tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-via-stops);\n }\n .via-gray-900 {\n --tw-gradient-via: var(--color-gray-900);\n --tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-via-stops);\n }\n .via-green-900 {\n --tw-gradient-via: var(--color-green-900);\n --tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-via-stops);\n }\n .via-green-950\\/30 {\n --tw-gradient-via: color-mix(in srgb, oklch(26.6% 0.065 152.934) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-via: color-mix(in oklab, var(--color-green-950) 30%, transparent);\n }\n --tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-via-stops);\n }\n .to-black\\/50 {\n --tw-gradient-to: color-mix(in srgb, #000 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-to: color-mix(in oklab, var(--color-black) 50%, transparent);\n }\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-black\\/60 {\n --tw-gradient-to: color-mix(in srgb, #000 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-to: color-mix(in oklab, var(--color-black) 60%, transparent);\n }\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-gray-900 {\n --tw-gradient-to: var(--color-gray-900);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-gray-950 {\n --tw-gradient-to: var(--color-gray-950);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-green-100 {\n --tw-gradient-to: var(--color-green-100);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-green-200 {\n --tw-gradient-to: var(--color-green-200);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-green-700 {\n --tw-gradient-to: var(--color-green-700);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-green-800 {\n --tw-gradient-to: var(--color-green-800);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-green-900 {\n --tw-gradient-to: var(--color-green-900);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-green-950 {\n --tw-gradient-to: var(--color-green-950);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-transparent {\n --tw-gradient-to: transparent;\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .fill-current {\n fill: currentcolor;\n }\n .fill-foreground {\n fill: var(--foreground);\n }\n .object-contain {\n object-fit: contain;\n }\n .object-cover {\n object-fit: cover;\n }\n .p-0 {\n padding: calc(var(--spacing) * 0);\n }\n .p-1 {\n padding: calc(var(--spacing) * 1);\n }\n .p-1\\.5 {\n padding: calc(var(--spacing) * 1.5);\n }\n .p-2 {\n padding: calc(var(--spacing) * 2);\n }\n .p-3 {\n padding: calc(var(--spacing) * 3);\n }\n .p-4 {\n padding: calc(var(--spacing) * 4);\n }\n .p-5 {\n padding: calc(var(--spacing) * 5);\n }\n .p-6 {\n padding: calc(var(--spacing) * 6);\n }\n .p-\\[3px\\] {\n padding: 3px;\n }\n .px-1 {\n padding-inline: calc(var(--spacing) * 1);\n }\n .px-1\\.5 {\n padding-inline: calc(var(--spacing) * 1.5);\n }\n .px-2 {\n padding-inline: calc(var(--spacing) * 2);\n }\n .px-2\\.5 {\n padding-inline: calc(var(--spacing) * 2.5);\n }\n .px-3 {\n padding-inline: calc(var(--spacing) * 3);\n }\n .px-4 {\n padding-inline: calc(var(--spacing) * 4);\n }\n .px-5 {\n padding-inline: calc(var(--spacing) * 5);\n }\n .px-6 {\n padding-inline: calc(var(--spacing) * 6);\n }\n .py-0\\.5 {\n padding-block: calc(var(--spacing) * 0.5);\n }\n .py-1 {\n padding-block: calc(var(--spacing) * 1);\n }\n .py-1\\.5 {\n padding-block: calc(var(--spacing) * 1.5);\n }\n .py-2 {\n padding-block: calc(var(--spacing) * 2);\n }\n .py-2\\.5 {\n padding-block: calc(var(--spacing) * 2.5);\n }\n .py-3 {\n padding-block: calc(var(--spacing) * 3);\n }\n .py-3\\.5 {\n padding-block: calc(var(--spacing) * 3.5);\n }\n .py-4 {\n padding-block: calc(var(--spacing) * 4);\n }\n .py-5 {\n padding-block: calc(var(--spacing) * 5);\n }\n .py-6 {\n padding-block: calc(var(--spacing) * 6);\n }\n .py-8 {\n padding-block: calc(var(--spacing) * 8);\n }\n .py-10 {\n padding-block: calc(var(--spacing) * 10);\n }\n .py-12 {\n padding-block: calc(var(--spacing) * 12);\n }\n .py-16 {\n padding-block: calc(var(--spacing) * 16);\n }\n .py-20 {\n padding-block: calc(var(--spacing) * 20);\n }\n .py-24 {\n padding-block: calc(var(--spacing) * 24);\n }\n .py-32 {\n padding-block: calc(var(--spacing) * 32);\n }\n .pt-1 {\n padding-top: calc(var(--spacing) * 1);\n }\n .pt-2 {\n padding-top: calc(var(--spacing) * 2);\n }\n .pt-3 {\n padding-top: calc(var(--spacing) * 3);\n }\n .pt-4 {\n padding-top: calc(var(--spacing) * 4);\n }\n .pt-5 {\n padding-top: calc(var(--spacing) * 5);\n }\n .pt-8 {\n padding-top: calc(var(--spacing) * 8);\n }\n .pt-16 {\n padding-top: calc(var(--spacing) * 16);\n }\n .pr-2 {\n padding-right: calc(var(--spacing) * 2);\n }\n .pr-3 {\n padding-right: calc(var(--spacing) * 3);\n }\n .pr-8 {\n padding-right: calc(var(--spacing) * 8);\n }\n .pb-0 {\n padding-bottom: calc(var(--spacing) * 0);\n }\n .pb-2 {\n padding-bottom: calc(var(--spacing) * 2);\n }\n .pb-3 {\n padding-bottom: calc(var(--spacing) * 3);\n }\n .pb-4 {\n padding-bottom: calc(var(--spacing) * 4);\n }\n .pb-6 {\n padding-bottom: calc(var(--spacing) * 6);\n }\n .pb-8 {\n padding-bottom: calc(var(--spacing) * 8);\n }\n .pb-10 {\n padding-bottom: calc(var(--spacing) * 10);\n }\n .pl-2 {\n padding-left: calc(var(--spacing) * 2);\n }\n .pl-3 {\n padding-left: calc(var(--spacing) * 3);\n }\n .pl-8 {\n padding-left: calc(var(--spacing) * 8);\n }\n .pl-9 {\n padding-left: calc(var(--spacing) * 9);\n }\n .text-center {\n text-align: center;\n }\n .text-left {\n text-align: left;\n }\n .text-right {\n text-align: right;\n }\n .align-middle {\n vertical-align: middle;\n }\n .font-mono {\n font-family: var(--font-geist-mono);\n }\n .font-sans {\n font-family: var(--font-geist-sans);\n }\n .text-2xl {\n font-size: var(--text-2xl);\n line-height: var(--tw-leading, var(--text-2xl--line-height));\n }\n .text-3xl {\n font-size: var(--text-3xl);\n line-height: var(--tw-leading, var(--text-3xl--line-height));\n }\n .text-4xl {\n font-size: var(--text-4xl);\n line-height: var(--tw-leading, var(--text-4xl--line-height));\n }\n .text-5xl {\n font-size: var(--text-5xl);\n line-height: var(--tw-leading, var(--text-5xl--line-height));\n }\n .text-6xl {\n font-size: var(--text-6xl);\n line-height: var(--tw-leading, var(--text-6xl--line-height));\n }\n .text-base {\n font-size: var(--text-base);\n line-height: var(--tw-leading, var(--text-base--line-height));\n }\n .text-lg {\n font-size: var(--text-lg);\n line-height: var(--tw-leading, var(--text-lg--line-height));\n }\n .text-sm {\n font-size: var(--text-sm);\n line-height: var(--tw-leading, var(--text-sm--line-height));\n }\n .text-xl {\n font-size: var(--text-xl);\n line-height: var(--tw-leading, var(--text-xl--line-height));\n }\n .text-xs {\n font-size: var(--text-xs);\n line-height: var(--tw-leading, var(--text-xs--line-height));\n }\n .text-\\[10px\\] {\n font-size: 10px;\n }\n .leading-none {\n --tw-leading: 1;\n line-height: 1;\n }\n .leading-normal {\n --tw-leading: var(--leading-normal);\n line-height: var(--leading-normal);\n }\n .leading-relaxed {\n --tw-leading: var(--leading-relaxed);\n line-height: var(--leading-relaxed);\n }\n .leading-snug {\n --tw-leading: var(--leading-snug);\n line-height: var(--leading-snug);\n }\n .leading-tight {\n --tw-leading: var(--leading-tight);\n line-height: var(--leading-tight);\n }\n .font-bold {\n --tw-font-weight: var(--font-weight-bold);\n font-weight: var(--font-weight-bold);\n }\n .font-medium {\n --tw-font-weight: var(--font-weight-medium);\n font-weight: var(--font-weight-medium);\n }\n .font-normal {\n --tw-font-weight: var(--font-weight-normal);\n font-weight: var(--font-weight-normal);\n }\n .font-semibold {\n --tw-font-weight: var(--font-weight-semibold);\n font-weight: var(--font-weight-semibold);\n }\n .tracking-tight {\n --tw-tracking: var(--tracking-tight);\n letter-spacing: var(--tracking-tight);\n }\n .tracking-wide {\n --tw-tracking: var(--tracking-wide);\n letter-spacing: var(--tracking-wide);\n }\n .tracking-wider {\n --tw-tracking: var(--tracking-wider);\n letter-spacing: var(--tracking-wider);\n }\n .tracking-widest {\n --tw-tracking: var(--tracking-widest);\n letter-spacing: var(--tracking-widest);\n }\n .text-balance {\n text-wrap: balance;\n }\n .whitespace-nowrap {\n white-space: nowrap;\n }\n .whitespace-pre-line {\n white-space: pre-line;\n }\n .whitespace-pre-wrap {\n white-space: pre-wrap;\n }\n .text-amber-700 {\n color: var(--color-amber-700);\n }\n .text-background {\n color: var(--background);\n }\n .text-blue-600 {\n color: var(--color-blue-600);\n }\n .text-blue-700 {\n color: var(--color-blue-700);\n }\n .text-card-foreground {\n color: var(--card-foreground);\n }\n .text-current {\n color: currentcolor;\n }\n .text-destructive {\n color: var(--destructive);\n }\n .text-foreground {\n color: var(--foreground);\n }\n .text-foreground\\/60 {\n color: var(--foreground);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--foreground) 60%, transparent);\n }\n }\n .text-gray-200 {\n color: var(--color-gray-200);\n }\n .text-gray-300 {\n color: var(--color-gray-300);\n }\n .text-gray-400 {\n color: var(--color-gray-400);\n }\n .text-gray-500 {\n color: var(--color-gray-500);\n }\n .text-gray-600 {\n color: var(--color-gray-600);\n }\n .text-gray-700 {\n color: var(--color-gray-700);\n }\n .text-gray-800 {\n color: var(--color-gray-800);\n }\n .text-gray-900 {\n color: var(--color-gray-900);\n }\n .text-green-100 {\n color: var(--color-green-100);\n }\n .text-green-200 {\n color: var(--color-green-200);\n }\n .text-green-300 {\n color: var(--color-green-300);\n }\n .text-green-300\\/60 {\n color: color-mix(in srgb, oklch(87.1% 0.15 154.449) 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-green-300) 60%, transparent);\n }\n }\n .text-green-300\\/70 {\n color: color-mix(in srgb, oklch(87.1% 0.15 154.449) 70%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-green-300) 70%, transparent);\n }\n }\n .text-green-400 {\n color: var(--color-green-400);\n }\n .text-green-600 {\n color: var(--color-green-600);\n }\n .text-green-700 {\n color: var(--color-green-700);\n }\n .text-green-800 {\n color: var(--color-green-800);\n }\n .text-green-900 {\n color: var(--color-green-900);\n }\n .text-muted-foreground {\n color: var(--muted-foreground);\n }\n .text-orange-600 {\n color: var(--color-orange-600);\n }\n .text-orange-700 {\n color: var(--color-orange-700);\n }\n .text-popover-foreground {\n color: var(--popover-foreground);\n }\n .text-primary {\n color: var(--primary);\n }\n .text-primary-foreground {\n color: var(--primary-foreground);\n }\n .text-purple-700 {\n color: var(--color-purple-700);\n }\n .text-red-400 {\n color: var(--color-red-400);\n }\n .text-red-500 {\n color: var(--color-red-500);\n }\n .text-red-600 {\n color: var(--color-red-600);\n }\n .text-red-700 {\n color: var(--color-red-700);\n }\n .text-secondary-foreground {\n color: var(--secondary-foreground);\n }\n .text-sidebar-foreground {\n color: var(--sidebar-foreground);\n }\n .text-sidebar-foreground\\/70 {\n color: var(--sidebar-foreground);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--sidebar-foreground) 70%, transparent);\n }\n }\n .text-white {\n color: var(--color-white);\n }\n .text-white\\/20 {\n color: color-mix(in srgb, #fff 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 20%, transparent);\n }\n }\n .text-white\\/50 {\n color: color-mix(in srgb, #fff 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 50%, transparent);\n }\n }\n .text-white\\/70 {\n color: color-mix(in srgb, #fff 70%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 70%, transparent);\n }\n }\n .text-white\\/80 {\n color: color-mix(in srgb, #fff 80%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 80%, transparent);\n }\n }\n .text-white\\/85 {\n color: color-mix(in srgb, #fff 85%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 85%, transparent);\n }\n }\n .text-yellow-600 {\n color: var(--color-yellow-600);\n }\n .text-yellow-700 {\n color: var(--color-yellow-700);\n }\n .text-zinc-500 {\n color: var(--color-zinc-500);\n }\n .text-zinc-600 {\n color: var(--color-zinc-600);\n }\n .capitalize {\n text-transform: capitalize;\n }\n .uppercase {\n text-transform: uppercase;\n }\n .italic {\n font-style: italic;\n }\n .tabular-nums {\n --tw-numeric-spacing: tabular-nums;\n font-variant-numeric: var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,);\n }\n .underline {\n text-decoration-line: underline;\n }\n .underline-offset-4 {\n text-underline-offset: 4px;\n }\n .antialiased {\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n }\n .opacity-0 {\n opacity: 0%;\n }\n .opacity-20 {\n opacity: 20%;\n }\n .opacity-30 {\n opacity: 30%;\n }\n .opacity-40 {\n opacity: 40%;\n }\n .opacity-50 {\n opacity: 50%;\n }\n .opacity-60 {\n opacity: 60%;\n }\n .opacity-70 {\n opacity: 70%;\n }\n .opacity-80 {\n opacity: 80%;\n }\n .shadow {\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-\\[0_0_0_1px_hsl\\(var\\(--sidebar-border\\)\\)\\] {\n --tw-shadow: 0 0 0 1px var(--tw-shadow-color, hsl(var(--sidebar-border)));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-lg {\n --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-md {\n --tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 2px 4px -2px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-none {\n --tw-shadow: 0 0 #0000;\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-sm {\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-xl {\n --tw-shadow: 0 20px 25px -5px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 8px 10px -6px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-xs {\n --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .ring-1 {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .ring-2 {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .ring-background {\n --tw-ring-color: var(--background);\n }\n .ring-current {\n --tw-ring-color: currentcolor;\n }\n .ring-sidebar-ring {\n --tw-ring-color: var(--sidebar-ring);\n }\n .ring-offset-background {\n --tw-ring-offset-color: var(--background);\n }\n .outline-hidden {\n --tw-outline-style: none;\n outline-style: none;\n @media (forced-colors: active) {\n outline: 2px solid transparent;\n outline-offset: 2px;\n }\n }\n .outline {\n outline-style: var(--tw-outline-style);\n outline-width: 1px;\n }\n .backdrop-blur-sm {\n --tw-backdrop-blur: blur(var(--blur-sm));\n -webkit-backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);\n backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);\n }\n .transition {\n transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter, display, content-visibility, overlay, pointer-events;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-\\[color\\,box-shadow\\] {\n transition-property: color,box-shadow;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-\\[left\\,right\\,width\\] {\n transition-property: left,right,width;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-\\[margin\\,opacity\\] {\n transition-property: margin,opacity;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-\\[width\\,height\\,padding\\] {\n transition-property: width,height,padding;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-\\[width\\] {\n transition-property: width;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-all {\n transition-property: all;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-colors {\n transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-opacity {\n transition-property: opacity;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-shadow {\n transition-property: box-shadow;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-transform {\n transition-property: transform, translate, scale, rotate;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-none {\n transition-property: none;\n }\n .duration-200 {\n --tw-duration: 200ms;\n transition-duration: 200ms;\n }\n .duration-300 {\n --tw-duration: 300ms;\n transition-duration: 300ms;\n }\n .ease-in-out {\n --tw-ease: var(--ease-in-out);\n transition-timing-function: var(--ease-in-out);\n }\n .ease-linear {\n --tw-ease: linear;\n transition-timing-function: linear;\n }\n .fade-in-0 {\n --tw-enter-opacity: calc(0/100);\n --tw-enter-opacity: 0;\n }\n .outline-none {\n --tw-outline-style: none;\n outline-style: none;\n }\n .select-none {\n -webkit-user-select: none;\n user-select: none;\n }\n .zoom-in-95 {\n --tw-enter-scale: calc(95*1%);\n --tw-enter-scale: .95;\n }\n .group-focus-within\\/menu-item\\:opacity-100 {\n &:is(:where(.group\\/menu-item):focus-within *) {\n opacity: 100%;\n }\n }\n .group-hover\\:w-5 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n width: calc(var(--spacing) * 5);\n }\n }\n }\n .group-hover\\:border-green-400 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n border-color: var(--color-green-400);\n }\n }\n }\n .group-hover\\:bg-black\\/40 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n background-color: color-mix(in srgb, #000 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 40%, transparent);\n }\n }\n }\n }\n .group-hover\\:bg-green-800 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n background-color: var(--color-green-800);\n }\n }\n }\n .group-hover\\:text-green-600 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n color: var(--color-green-600);\n }\n }\n }\n .group-hover\\:text-green-800 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n color: var(--color-green-800);\n }\n }\n }\n .group-hover\\:opacity-100 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n opacity: 100%;\n }\n }\n }\n .group-hover\\/menu-item\\:opacity-100 {\n &:is(:where(.group\\/menu-item):hover *) {\n @media (hover: hover) {\n opacity: 100%;\n }\n }\n }\n .group-has-data-\\[orientation\\=horizontal\\]\\/field\\:text-balance {\n &:is(:where(.group\\/field):has(*[data-orientation=\"horizontal\"]) *) {\n text-wrap: balance;\n }\n }\n .group-has-data-\\[sidebar\\=menu-action\\]\\/menu-item\\:pr-8 {\n &:is(:where(.group\\/menu-item):has(*[data-sidebar=\"menu-action\"]) *) {\n padding-right: calc(var(--spacing) * 8);\n }\n }\n .group-has-data-\\[size\\=lg\\]\\/avatar-group\\:size-10 {\n &:is(:where(.group\\/avatar-group):has(*[data-size=\"lg\"]) *) {\n width: calc(var(--spacing) * 10);\n height: calc(var(--spacing) * 10);\n }\n }\n .group-has-data-\\[size\\=sm\\]\\/avatar-group\\:size-6 {\n &:is(:where(.group\\/avatar-group):has(*[data-size=\"sm\"]) *) {\n width: calc(var(--spacing) * 6);\n height: calc(var(--spacing) * 6);\n }\n }\n .group-data-\\[collapsible\\=icon\\]\\:-mt-8 {\n &:is(:where(.group)[data-collapsible=\"icon\"] *) {\n margin-top: calc(var(--spacing) * -8);\n }\n }\n .group-data-\\[collapsible\\=icon\\]\\:hidden {\n &:is(:where(.group)[data-collapsible=\"icon\"] *) {\n display: none;\n }\n }\n .group-data-\\[collapsible\\=icon\\]\\:size-8\\! {\n &:is(:where(.group)[data-collapsible=\"icon\"] *) {\n width: calc(var(--spacing) * 8) !important;\n height: calc(var(--spacing) * 8) !important;\n }\n }\n .group-data-\\[collapsible\\=icon\\]\\:w-\\(--sidebar-width-icon\\) {\n &:is(:where(.group)[data-collapsible=\"icon\"] *) {\n width: var(--sidebar-width-icon);\n }\n }\n .group-data-\\[collapsible\\=icon\\]\\:w-\\[calc\\(var\\(--sidebar-width-icon\\)\\+\\(--spacing\\(4\\)\\)\\)\\] {\n &:is(:where(.group)[data-collapsible=\"icon\"] *) {\n width: calc(var(--sidebar-width-icon) + (calc(var(--spacing) * 4)));\n }\n }\n .group-data-\\[collapsible\\=icon\\]\\:w-\\[calc\\(var\\(--sidebar-width-icon\\)\\+\\(--spacing\\(4\\)\\)\\+2px\\)\\] {\n &:is(:where(.group)[data-collapsible=\"icon\"] *) {\n width: calc(var(--sidebar-width-icon) + (calc(var(--spacing) * 4)) + 2px);\n }\n }\n .group-data-\\[collapsible\\=icon\\]\\:overflow-hidden {\n &:is(:where(.group)[data-collapsible=\"icon\"] *) {\n overflow: hidden;\n }\n }\n .group-data-\\[collapsible\\=icon\\]\\:p-0\\! {\n &:is(:where(.group)[data-collapsible=\"icon\"] *) {\n padding: calc(var(--spacing) * 0) !important;\n }\n }\n .group-data-\\[collapsible\\=icon\\]\\:p-2\\! {\n &:is(:where(.group)[data-collapsible=\"icon\"] *) {\n padding: calc(var(--spacing) * 2) !important;\n }\n }\n .group-data-\\[collapsible\\=icon\\]\\:opacity-0 {\n &:is(:where(.group)[data-collapsible=\"icon\"] *) {\n opacity: 0%;\n }\n }\n .group-data-\\[collapsible\\=offcanvas\\]\\:right-\\[calc\\(var\\(--sidebar-width\\)\\*-1\\)\\] {\n &:is(:where(.group)[data-collapsible=\"offcanvas\"] *) {\n right: calc(var(--sidebar-width) * -1);\n }\n }\n .group-data-\\[collapsible\\=offcanvas\\]\\:left-\\[calc\\(var\\(--sidebar-width\\)\\*-1\\)\\] {\n &:is(:where(.group)[data-collapsible=\"offcanvas\"] *) {\n left: calc(var(--sidebar-width) * -1);\n }\n }\n .group-data-\\[collapsible\\=offcanvas\\]\\:w-0 {\n &:is(:where(.group)[data-collapsible=\"offcanvas\"] *) {\n width: calc(var(--spacing) * 0);\n }\n }\n .group-data-\\[collapsible\\=offcanvas\\]\\:translate-x-0 {\n &:is(:where(.group)[data-collapsible=\"offcanvas\"] *) {\n --tw-translate-x: calc(var(--spacing) * 0);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n }\n .group-data-\\[disabled\\=true\\]\\:pointer-events-none {\n &:is(:where(.group)[data-disabled=\"true\"] *) {\n pointer-events: none;\n }\n }\n .group-data-\\[disabled\\=true\\]\\:opacity-50 {\n &:is(:where(.group)[data-disabled=\"true\"] *) {\n opacity: 50%;\n }\n }\n .group-data-\\[disabled\\=true\\]\\/field\\:opacity-50 {\n &:is(:where(.group\\/field)[data-disabled=\"true\"] *) {\n opacity: 50%;\n }\n }\n .group-data-\\[orientation\\=horizontal\\]\\/tabs\\:h-9 {\n &:is(:where(.group\\/tabs)[data-orientation=\"horizontal\"] *) {\n height: calc(var(--spacing) * 9);\n }\n }\n .group-data-\\[orientation\\=vertical\\]\\/tabs\\:h-fit {\n &:is(:where(.group\\/tabs)[data-orientation=\"vertical\"] *) {\n height: fit-content;\n }\n }\n .group-data-\\[orientation\\=vertical\\]\\/tabs\\:w-full {\n &:is(:where(.group\\/tabs)[data-orientation=\"vertical\"] *) {\n width: 100%;\n }\n }\n .group-data-\\[orientation\\=vertical\\]\\/tabs\\:flex-col {\n &:is(:where(.group\\/tabs)[data-orientation=\"vertical\"] *) {\n flex-direction: column;\n }\n }\n .group-data-\\[orientation\\=vertical\\]\\/tabs\\:justify-start {\n &:is(:where(.group\\/tabs)[data-orientation=\"vertical\"] *) {\n justify-content: flex-start;\n }\n }\n .group-data-\\[side\\=left\\]\\:-right-4 {\n &:is(:where(.group)[data-side=\"left\"] *) {\n right: calc(var(--spacing) * -4);\n }\n }\n .group-data-\\[side\\=left\\]\\:border-r {\n &:is(:where(.group)[data-side=\"left\"] *) {\n border-right-style: var(--tw-border-style);\n border-right-width: 1px;\n }\n }\n .group-data-\\[side\\=right\\]\\:left-0 {\n &:is(:where(.group)[data-side=\"right\"] *) {\n left: calc(var(--spacing) * 0);\n }\n }\n .group-data-\\[side\\=right\\]\\:rotate-180 {\n &:is(:where(.group)[data-side=\"right\"] *) {\n rotate: 180deg;\n }\n }\n .group-data-\\[side\\=right\\]\\:border-l {\n &:is(:where(.group)[data-side=\"right\"] *) {\n border-left-style: var(--tw-border-style);\n border-left-width: 1px;\n }\n }\n .group-data-\\[size\\=default\\]\\/avatar\\:size-2\\.5 {\n &:is(:where(.group\\/avatar)[data-size=\"default\"] *) {\n width: calc(var(--spacing) * 2.5);\n height: calc(var(--spacing) * 2.5);\n }\n }\n .group-data-\\[size\\=lg\\]\\/avatar\\:size-3 {\n &:is(:where(.group\\/avatar)[data-size=\"lg\"] *) {\n width: calc(var(--spacing) * 3);\n height: calc(var(--spacing) * 3);\n }\n }\n .group-data-\\[size\\=sm\\]\\/avatar\\:size-2 {\n &:is(:where(.group\\/avatar)[data-size=\"sm\"] *) {\n width: calc(var(--spacing) * 2);\n height: calc(var(--spacing) * 2);\n }\n }\n .group-data-\\[size\\=sm\\]\\/avatar\\:text-xs {\n &:is(:where(.group\\/avatar)[data-size=\"sm\"] *) {\n font-size: var(--text-xs);\n line-height: var(--tw-leading, var(--text-xs--line-height));\n }\n }\n .group-data-\\[variant\\=floating\\]\\:rounded-lg {\n &:is(:where(.group)[data-variant=\"floating\"] *) {\n border-radius: var(--radius);\n }\n }\n .group-data-\\[variant\\=floating\\]\\:border {\n &:is(:where(.group)[data-variant=\"floating\"] *) {\n border-style: var(--tw-border-style);\n border-width: 1px;\n }\n }\n .group-data-\\[variant\\=floating\\]\\:border-sidebar-border {\n &:is(:where(.group)[data-variant=\"floating\"] *) {\n border-color: var(--sidebar-border);\n }\n }\n .group-data-\\[variant\\=floating\\]\\:shadow-sm {\n &:is(:where(.group)[data-variant=\"floating\"] *) {\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n .group-data-\\[variant\\=line\\]\\/tabs-list\\:bg-transparent {\n &:is(:where(.group\\/tabs-list)[data-variant=\"line\"] *) {\n background-color: transparent;\n }\n }\n .group-data-\\[variant\\=outline\\]\\/field-group\\:-mb-2 {\n &:is(:where(.group\\/field-group)[data-variant=\"outline\"] *) {\n margin-bottom: calc(var(--spacing) * -2);\n }\n }\n .group-data-\\[vaul-drawer-direction\\=bottom\\]\\/drawer-content\\:block {\n &:is(:where(.group\\/drawer-content)[data-vaul-drawer-direction=\"bottom\"] *) {\n display: block;\n }\n }\n .group-data-\\[vaul-drawer-direction\\=bottom\\]\\/drawer-content\\:text-center {\n &:is(:where(.group\\/drawer-content)[data-vaul-drawer-direction=\"bottom\"] *) {\n text-align: center;\n }\n }\n .group-data-\\[vaul-drawer-direction\\=top\\]\\/drawer-content\\:text-center {\n &:is(:where(.group\\/drawer-content)[data-vaul-drawer-direction=\"top\"] *) {\n text-align: center;\n }\n }\n .peer-hover\\/menu-button\\:text-sidebar-accent-foreground {\n &:is(:where(.peer\\/menu-button):hover ~ *) {\n @media (hover: hover) {\n color: var(--sidebar-accent-foreground);\n }\n }\n }\n .peer-disabled\\:cursor-not-allowed {\n &:is(:where(.peer):disabled ~ *) {\n cursor: not-allowed;\n }\n }\n .peer-disabled\\:opacity-50 {\n &:is(:where(.peer):disabled ~ *) {\n opacity: 50%;\n }\n }\n .peer-data-\\[active\\=true\\]\\/menu-button\\:text-sidebar-accent-foreground {\n &:is(:where(.peer\\/menu-button)[data-active=\"true\"] ~ *) {\n color: var(--sidebar-accent-foreground);\n }\n }\n .peer-data-\\[size\\=default\\]\\/menu-button\\:top-1\\.5 {\n &:is(:where(.peer\\/menu-button)[data-size=\"default\"] ~ *) {\n top: calc(var(--spacing) * 1.5);\n }\n }\n .peer-data-\\[size\\=lg\\]\\/menu-button\\:top-2\\.5 {\n &:is(:where(.peer\\/menu-button)[data-size=\"lg\"] ~ *) {\n top: calc(var(--spacing) * 2.5);\n }\n }\n .peer-data-\\[size\\=sm\\]\\/menu-button\\:top-1 {\n &:is(:where(.peer\\/menu-button)[data-size=\"sm\"] ~ *) {\n top: calc(var(--spacing) * 1);\n }\n }\n .selection\\:bg-primary {\n & *::selection {\n background-color: var(--primary);\n }\n &::selection {\n background-color: var(--primary);\n }\n }\n .selection\\:text-primary-foreground {\n & *::selection {\n color: var(--primary-foreground);\n }\n &::selection {\n color: var(--primary-foreground);\n }\n }\n .file\\:inline-flex {\n &::file-selector-button {\n display: inline-flex;\n }\n }\n .file\\:h-7 {\n &::file-selector-button {\n height: calc(var(--spacing) * 7);\n }\n }\n .file\\:border-0 {\n &::file-selector-button {\n border-style: var(--tw-border-style);\n border-width: 0px;\n }\n }\n .file\\:bg-transparent {\n &::file-selector-button {\n background-color: transparent;\n }\n }\n .file\\:text-sm {\n &::file-selector-button {\n font-size: var(--text-sm);\n line-height: var(--tw-leading, var(--text-sm--line-height));\n }\n }\n .file\\:font-medium {\n &::file-selector-button {\n --tw-font-weight: var(--font-weight-medium);\n font-weight: var(--font-weight-medium);\n }\n }\n .file\\:text-foreground {\n &::file-selector-button {\n color: var(--foreground);\n }\n }\n .placeholder\\:text-muted-foreground {\n &::placeholder {\n color: var(--muted-foreground);\n }\n }\n .after\\:absolute {\n &::after {\n content: var(--tw-content);\n position: absolute;\n }\n }\n .after\\:-inset-2 {\n &::after {\n content: var(--tw-content);\n inset: calc(var(--spacing) * -2);\n }\n }\n .after\\:inset-y-0 {\n &::after {\n content: var(--tw-content);\n inset-block: calc(var(--spacing) * 0);\n }\n }\n .after\\:left-1\\/2 {\n &::after {\n content: var(--tw-content);\n left: calc(1 / 2 * 100%);\n }\n }\n .after\\:w-0\\.5 {\n &::after {\n content: var(--tw-content);\n width: calc(var(--spacing) * 0.5);\n }\n }\n .after\\:bg-foreground {\n &::after {\n content: var(--tw-content);\n background-color: var(--foreground);\n }\n }\n .after\\:opacity-0 {\n &::after {\n content: var(--tw-content);\n opacity: 0%;\n }\n }\n .after\\:transition-opacity {\n &::after {\n content: var(--tw-content);\n transition-property: opacity;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n }\n .group-data-\\[collapsible\\=offcanvas\\]\\:after\\:left-full {\n &:is(:where(.group)[data-collapsible=\"offcanvas\"] *) {\n &::after {\n content: var(--tw-content);\n left: 100%;\n }\n }\n }\n .group-data-\\[orientation\\=horizontal\\]\\/tabs\\:after\\:inset-x-0 {\n &:is(:where(.group\\/tabs)[data-orientation=\"horizontal\"] *) {\n &::after {\n content: var(--tw-content);\n inset-inline: calc(var(--spacing) * 0);\n }\n }\n }\n .group-data-\\[orientation\\=horizontal\\]\\/tabs\\:after\\:bottom-\\[-5px\\] {\n &:is(:where(.group\\/tabs)[data-orientation=\"horizontal\"] *) {\n &::after {\n content: var(--tw-content);\n bottom: -5px;\n }\n }\n }\n .group-data-\\[orientation\\=horizontal\\]\\/tabs\\:after\\:h-0\\.5 {\n &:is(:where(.group\\/tabs)[data-orientation=\"horizontal\"] *) {\n &::after {\n content: var(--tw-content);\n height: calc(var(--spacing) * 0.5);\n }\n }\n }\n .group-data-\\[orientation\\=vertical\\]\\/tabs\\:after\\:inset-y-0 {\n &:is(:where(.group\\/tabs)[data-orientation=\"vertical\"] *) {\n &::after {\n content: var(--tw-content);\n inset-block: calc(var(--spacing) * 0);\n }\n }\n }\n .group-data-\\[orientation\\=vertical\\]\\/tabs\\:after\\:-right-1 {\n &:is(:where(.group\\/tabs)[data-orientation=\"vertical\"] *) {\n &::after {\n content: var(--tw-content);\n right: calc(var(--spacing) * -1);\n }\n }\n }\n .group-data-\\[orientation\\=vertical\\]\\/tabs\\:after\\:w-0\\.5 {\n &:is(:where(.group\\/tabs)[data-orientation=\"vertical\"] *) {\n &::after {\n content: var(--tw-content);\n width: calc(var(--spacing) * 0.5);\n }\n }\n }\n .last\\:mt-0 {\n &:last-child {\n margin-top: calc(var(--spacing) * 0);\n }\n }\n .hover\\:-translate-y-0\\.5 {\n &:hover {\n @media (hover: hover) {\n --tw-translate-y: calc(var(--spacing) * -0.5);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n }\n }\n .hover\\:border-blue-200 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-blue-200);\n }\n }\n }\n .hover\\:border-blue-500 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-blue-500);\n }\n }\n }\n .hover\\:border-gray-200 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-gray-200);\n }\n }\n }\n .hover\\:border-gray-300 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-gray-300);\n }\n }\n }\n .hover\\:border-green-200 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-green-200);\n }\n }\n }\n .hover\\:border-green-300 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-green-300);\n }\n }\n }\n .hover\\:border-green-400 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-green-400);\n }\n }\n }\n .hover\\:border-green-500 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-green-500);\n }\n }\n }\n .hover\\:border-pink-500 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-pink-500);\n }\n }\n }\n .hover\\:border-primary\\/50 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--primary);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--primary) 50%, transparent);\n }\n }\n }\n }\n .hover\\:border-red-200 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-red-200);\n }\n }\n }\n .hover\\:bg-accent {\n &:hover {\n @media (hover: hover) {\n background-color: var(--accent);\n }\n }\n }\n .hover\\:bg-black\\/70 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, #000 70%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 70%, transparent);\n }\n }\n }\n }\n .hover\\:bg-blue-600\\/80 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, oklch(54.6% 0.245 262.881) 80%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-blue-600) 80%, transparent);\n }\n }\n }\n }\n .hover\\:bg-destructive\\/90 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--destructive) 90%, transparent);\n }\n }\n }\n }\n .hover\\:bg-gray-50 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-gray-50);\n }\n }\n }\n .hover\\:bg-gray-100 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-gray-100);\n }\n }\n }\n .hover\\:bg-gray-200 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-gray-200);\n }\n }\n }\n .hover\\:bg-gray-300 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-gray-300);\n }\n }\n }\n .hover\\:bg-gray-400 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-gray-400);\n }\n }\n }\n .hover\\:bg-green-50 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-green-50);\n }\n }\n }\n .hover\\:bg-green-50\\/40 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, oklch(98.2% 0.018 155.826) 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-green-50) 40%, transparent);\n }\n }\n }\n }\n .hover\\:bg-green-50\\/50 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, oklch(98.2% 0.018 155.826) 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-green-50) 50%, transparent);\n }\n }\n }\n }\n .hover\\:bg-green-600 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-green-600);\n }\n }\n }\n .hover\\:bg-green-600\\/80 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, oklch(62.7% 0.194 149.214) 80%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-green-600) 80%, transparent);\n }\n }\n }\n }\n .hover\\:bg-green-700 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-green-700);\n }\n }\n }\n .hover\\:bg-green-700\\/60 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, oklch(52.7% 0.154 150.069) 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-green-700) 60%, transparent);\n }\n }\n }\n }\n .hover\\:bg-green-800 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-green-800);\n }\n }\n }\n .hover\\:bg-muted {\n &:hover {\n @media (hover: hover) {\n background-color: var(--muted);\n }\n }\n }\n .hover\\:bg-muted\\/30 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--muted);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--muted) 30%, transparent);\n }\n }\n }\n }\n .hover\\:bg-muted\\/50 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--muted);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--muted) 50%, transparent);\n }\n }\n }\n }\n .hover\\:bg-orange-700 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-orange-700);\n }\n }\n }\n .hover\\:bg-pink-600\\/80 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, oklch(59.2% 0.249 0.584) 80%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-pink-600) 80%, transparent);\n }\n }\n }\n }\n .hover\\:bg-primary\\/90 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--primary);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--primary) 90%, transparent);\n }\n }\n }\n }\n .hover\\:bg-red-700 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-red-700);\n }\n }\n }\n .hover\\:bg-secondary\\/80 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--secondary);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--secondary) 80%, transparent);\n }\n }\n }\n }\n .hover\\:bg-sidebar-accent {\n &:hover {\n @media (hover: hover) {\n background-color: var(--sidebar-accent);\n }\n }\n }\n .hover\\:bg-white\\/10 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, #fff 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 10%, transparent);\n }\n }\n }\n }\n .hover\\:bg-white\\/20 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, #fff 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 20%, transparent);\n }\n }\n }\n }\n .hover\\:bg-white\\/25 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, #fff 25%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 25%, transparent);\n }\n }\n }\n }\n .hover\\:text-accent-foreground {\n &:hover {\n @media (hover: hover) {\n color: var(--accent-foreground);\n }\n }\n }\n .hover\\:text-foreground {\n &:hover {\n @media (hover: hover) {\n color: var(--foreground);\n }\n }\n }\n .hover\\:text-gray-700 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-gray-700);\n }\n }\n }\n .hover\\:text-green-200 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-green-200);\n }\n }\n }\n .hover\\:text-green-400 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-green-400);\n }\n }\n }\n .hover\\:text-green-700 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-green-700);\n }\n }\n }\n .hover\\:text-green-800 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-green-800);\n }\n }\n }\n .hover\\:text-green-900 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-green-900);\n }\n }\n }\n .hover\\:text-red-500 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-red-500);\n }\n }\n }\n .hover\\:text-red-700 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-red-700);\n }\n }\n }\n .hover\\:text-sidebar-accent-foreground {\n &:hover {\n @media (hover: hover) {\n color: var(--sidebar-accent-foreground);\n }\n }\n }\n .hover\\:text-white {\n &:hover {\n @media (hover: hover) {\n color: var(--color-white);\n }\n }\n }\n .hover\\:underline {\n &:hover {\n @media (hover: hover) {\n text-decoration-line: underline;\n }\n }\n }\n .hover\\:opacity-100 {\n &:hover {\n @media (hover: hover) {\n opacity: 100%;\n }\n }\n }\n .hover\\:shadow-\\[0_0_0_1px_hsl\\(var\\(--sidebar-accent\\)\\)\\] {\n &:hover {\n @media (hover: hover) {\n --tw-shadow: 0 0 0 1px var(--tw-shadow-color, hsl(var(--sidebar-accent)));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n }\n .hover\\:shadow-md {\n &:hover {\n @media (hover: hover) {\n --tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 2px 4px -2px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n }\n .hover\\:shadow-sm {\n &:hover {\n @media (hover: hover) {\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n }\n .hover\\:shadow-xl {\n &:hover {\n @media (hover: hover) {\n --tw-shadow: 0 20px 25px -5px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 8px 10px -6px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n }\n .hover\\:group-data-\\[collapsible\\=offcanvas\\]\\:bg-sidebar {\n &:hover {\n @media (hover: hover) {\n &:is(:where(.group)[data-collapsible=\"offcanvas\"] *) {\n background-color: var(--sidebar);\n }\n }\n }\n }\n .hover\\:after\\:bg-sidebar-border {\n &:hover {\n @media (hover: hover) {\n &::after {\n content: var(--tw-content);\n background-color: var(--sidebar-border);\n }\n }\n }\n }\n .focus\\:border-transparent {\n &:focus {\n border-color: transparent;\n }\n }\n .focus\\:bg-accent {\n &:focus {\n background-color: var(--accent);\n }\n }\n .focus\\:text-accent-foreground {\n &:focus {\n color: var(--accent-foreground);\n }\n }\n .focus\\:ring-2 {\n &:focus {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n .focus\\:ring-green-500 {\n &:focus {\n --tw-ring-color: var(--color-green-500);\n }\n }\n .focus\\:ring-green-600 {\n &:focus {\n --tw-ring-color: var(--color-green-600);\n }\n }\n .focus\\:ring-ring {\n &:focus {\n --tw-ring-color: var(--ring);\n }\n }\n .focus\\:ring-offset-2 {\n &:focus {\n --tw-ring-offset-width: 2px;\n --tw-ring-offset-shadow: var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n }\n }\n .focus\\:outline-hidden {\n &:focus {\n --tw-outline-style: none;\n outline-style: none;\n @media (forced-colors: active) {\n outline: 2px solid transparent;\n outline-offset: 2px;\n }\n }\n }\n .focus\\:outline-none {\n &:focus {\n --tw-outline-style: none;\n outline-style: none;\n }\n }\n .focus-visible\\:border-ring {\n &:focus-visible {\n border-color: var(--ring);\n }\n }\n .focus-visible\\:ring-2 {\n &:focus-visible {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n .focus-visible\\:ring-\\[3px\\] {\n &:focus-visible {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n .focus-visible\\:ring-destructive\\/20 {\n &:focus-visible {\n --tw-ring-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--destructive) 20%, transparent);\n }\n }\n }\n .focus-visible\\:ring-ring\\/50 {\n &:focus-visible {\n --tw-ring-color: var(--ring);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--ring) 50%, transparent);\n }\n }\n }\n .focus-visible\\:outline-1 {\n &:focus-visible {\n outline-style: var(--tw-outline-style);\n outline-width: 1px;\n }\n }\n .focus-visible\\:outline-ring {\n &:focus-visible {\n outline-color: var(--ring);\n }\n }\n .active\\:bg-sidebar-accent {\n &:active {\n background-color: var(--sidebar-accent);\n }\n }\n .active\\:text-sidebar-accent-foreground {\n &:active {\n color: var(--sidebar-accent-foreground);\n }\n }\n .disabled\\:pointer-events-none {\n &:disabled {\n pointer-events: none;\n }\n }\n .disabled\\:cursor-not-allowed {\n &:disabled {\n cursor: not-allowed;\n }\n }\n .disabled\\:opacity-30 {\n &:disabled {\n opacity: 30%;\n }\n }\n .disabled\\:opacity-50 {\n &:disabled {\n opacity: 50%;\n }\n }\n .in-data-\\[side\\=left\\]\\:cursor-w-resize {\n :where(*[data-side=\"left\"]) & {\n cursor: w-resize;\n }\n }\n .in-data-\\[side\\=right\\]\\:cursor-e-resize {\n :where(*[data-side=\"right\"]) & {\n cursor: e-resize;\n }\n }\n .has-data-\\[slot\\=card-action\\]\\:grid-cols-\\[1fr_auto\\] {\n &:has(*[data-slot=\"card-action\"]) {\n grid-template-columns: 1fr auto;\n }\n }\n .has-data-\\[state\\=checked\\]\\:border-primary {\n &:has(*[data-state=\"checked\"]) {\n border-color: var(--primary);\n }\n }\n .has-data-\\[state\\=checked\\]\\:bg-primary\\/5 {\n &:has(*[data-state=\"checked\"]) {\n background-color: var(--primary);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--primary) 5%, transparent);\n }\n }\n }\n .has-data-\\[variant\\=inset\\]\\:bg-sidebar {\n &:has(*[data-variant=\"inset\"]) {\n background-color: var(--sidebar);\n }\n }\n .has-\\[\\>\\[data-slot\\=checkbox-group\\]\\]\\:gap-3 {\n &:has(>[data-slot=checkbox-group]) {\n gap: calc(var(--spacing) * 3);\n }\n }\n .has-\\[\\>\\[data-slot\\=field-content\\]\\]\\:items-start {\n &:has(>[data-slot=field-content]) {\n align-items: flex-start;\n }\n }\n .has-\\[\\>\\[data-slot\\=field\\]\\]\\:w-full {\n &:has(>[data-slot=field]) {\n width: 100%;\n }\n }\n .has-\\[\\>\\[data-slot\\=field\\]\\]\\:flex-col {\n &:has(>[data-slot=field]) {\n flex-direction: column;\n }\n }\n .has-\\[\\>\\[data-slot\\=field\\]\\]\\:rounded-md {\n &:has(>[data-slot=field]) {\n border-radius: calc(var(--radius) - 2px);\n }\n }\n .has-\\[\\>\\[data-slot\\=field\\]\\]\\:border {\n &:has(>[data-slot=field]) {\n border-style: var(--tw-border-style);\n border-width: 1px;\n }\n }\n .has-\\[\\>\\[data-slot\\=radio-group\\]\\]\\:gap-3 {\n &:has(>[data-slot=radio-group]) {\n gap: calc(var(--spacing) * 3);\n }\n }\n .has-\\[\\>svg\\]\\:px-1\\.5 {\n &:has(>svg) {\n padding-inline: calc(var(--spacing) * 1.5);\n }\n }\n .has-\\[\\>svg\\]\\:px-2\\.5 {\n &:has(>svg) {\n padding-inline: calc(var(--spacing) * 2.5);\n }\n }\n .has-\\[\\>svg\\]\\:px-3 {\n &:has(>svg) {\n padding-inline: calc(var(--spacing) * 3);\n }\n }\n .has-\\[\\>svg\\]\\:px-4 {\n &:has(>svg) {\n padding-inline: calc(var(--spacing) * 4);\n }\n }\n .aria-disabled\\:pointer-events-none {\n &[aria-disabled=\"true\"] {\n pointer-events: none;\n }\n }\n .aria-disabled\\:opacity-50 {\n &[aria-disabled=\"true\"] {\n opacity: 50%;\n }\n }\n .aria-invalid\\:border-destructive {\n &[aria-invalid=\"true\"] {\n border-color: var(--destructive);\n }\n }\n .aria-invalid\\:ring-destructive\\/20 {\n &[aria-invalid=\"true\"] {\n --tw-ring-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--destructive) 20%, transparent);\n }\n }\n }\n .data-\\[active\\=true\\]\\:bg-sidebar-accent {\n &[data-active=\"true\"] {\n background-color: var(--sidebar-accent);\n }\n }\n .data-\\[active\\=true\\]\\:font-medium {\n &[data-active=\"true\"] {\n --tw-font-weight: var(--font-weight-medium);\n font-weight: var(--font-weight-medium);\n }\n }\n .data-\\[active\\=true\\]\\:text-sidebar-accent-foreground {\n &[data-active=\"true\"] {\n color: var(--sidebar-accent-foreground);\n }\n }\n .data-\\[disabled\\]\\:pointer-events-none {\n &[data-disabled] {\n pointer-events: none;\n }\n }\n .data-\\[disabled\\]\\:opacity-50 {\n &[data-disabled] {\n opacity: 50%;\n }\n }\n .data-\\[inset\\]\\:pl-8 {\n &[data-inset] {\n padding-left: calc(var(--spacing) * 8);\n }\n }\n .data-\\[invalid\\=true\\]\\:text-destructive {\n &[data-invalid=\"true\"] {\n color: var(--destructive);\n }\n }\n .data-\\[orientation\\=horizontal\\]\\:h-px {\n &[data-orientation=\"horizontal\"] {\n height: 1px;\n }\n }\n .data-\\[orientation\\=horizontal\\]\\:w-full {\n &[data-orientation=\"horizontal\"] {\n width: 100%;\n }\n }\n .data-\\[orientation\\=horizontal\\]\\:flex-col {\n &[data-orientation=\"horizontal\"] {\n flex-direction: column;\n }\n }\n .data-\\[orientation\\=vertical\\]\\:h-4 {\n &[data-orientation=\"vertical\"] {\n height: calc(var(--spacing) * 4);\n }\n }\n .data-\\[orientation\\=vertical\\]\\:h-full {\n &[data-orientation=\"vertical\"] {\n height: 100%;\n }\n }\n .data-\\[orientation\\=vertical\\]\\:w-px {\n &[data-orientation=\"vertical\"] {\n width: 1px;\n }\n }\n .data-\\[placeholder\\]\\:text-muted-foreground {\n &[data-placeholder] {\n color: var(--muted-foreground);\n }\n }\n .data-\\[side\\=bottom\\]\\:translate-y-1 {\n &[data-side=\"bottom\"] {\n --tw-translate-y: calc(var(--spacing) * 1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n }\n .data-\\[side\\=bottom\\]\\:slide-in-from-top-2 {\n &[data-side=\"bottom\"] {\n --tw-enter-translate-y: calc(2*var(--spacing)*-1);\n }\n }\n .data-\\[side\\=left\\]\\:-translate-x-1 {\n &[data-side=\"left\"] {\n --tw-translate-x: calc(var(--spacing) * -1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n }\n .data-\\[side\\=left\\]\\:slide-in-from-right-2 {\n &[data-side=\"left\"] {\n --tw-enter-translate-x: calc(2*var(--spacing));\n }\n }\n .data-\\[side\\=right\\]\\:translate-x-1 {\n &[data-side=\"right\"] {\n --tw-translate-x: calc(var(--spacing) * 1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n }\n .data-\\[side\\=right\\]\\:slide-in-from-left-2 {\n &[data-side=\"right\"] {\n --tw-enter-translate-x: calc(2*var(--spacing)*-1);\n }\n }\n .data-\\[side\\=top\\]\\:-translate-y-1 {\n &[data-side=\"top\"] {\n --tw-translate-y: calc(var(--spacing) * -1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n }\n .data-\\[side\\=top\\]\\:slide-in-from-bottom-2 {\n &[data-side=\"top\"] {\n --tw-enter-translate-y: calc(2*var(--spacing));\n }\n }\n .data-\\[size\\=default\\]\\:h-9 {\n &[data-size=\"default\"] {\n height: calc(var(--spacing) * 9);\n }\n }\n .data-\\[size\\=lg\\]\\:size-10 {\n &[data-size=\"lg\"] {\n width: calc(var(--spacing) * 10);\n height: calc(var(--spacing) * 10);\n }\n }\n .data-\\[size\\=sm\\]\\:size-6 {\n &[data-size=\"sm\"] {\n width: calc(var(--spacing) * 6);\n height: calc(var(--spacing) * 6);\n }\n }\n .data-\\[size\\=sm\\]\\:h-8 {\n &[data-size=\"sm\"] {\n height: calc(var(--spacing) * 8);\n }\n }\n .\\*\\:data-\\[slot\\=avatar\\]\\:ring-2 {\n :is(& > *) {\n &[data-slot=\"avatar\"] {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n }\n .\\*\\:data-\\[slot\\=avatar\\]\\:ring-background {\n :is(& > *) {\n &[data-slot=\"avatar\"] {\n --tw-ring-color: var(--background);\n }\n }\n }\n .data-\\[slot\\=checkbox-group\\]\\:gap-3 {\n &[data-slot=\"checkbox-group\"] {\n gap: calc(var(--spacing) * 3);\n }\n }\n .\\*\\:data-\\[slot\\=field\\]\\:p-4 {\n :is(& > *) {\n &[data-slot=\"field\"] {\n padding: calc(var(--spacing) * 4);\n }\n }\n }\n .\\*\\:data-\\[slot\\=field-group\\]\\:gap-4 {\n :is(& > *) {\n &[data-slot=\"field-group\"] {\n gap: calc(var(--spacing) * 4);\n }\n }\n }\n .\\*\\:data-\\[slot\\=select-value\\]\\:line-clamp-1 {\n :is(& > *) {\n &[data-slot=\"select-value\"] {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 1;\n }\n }\n }\n .\\*\\:data-\\[slot\\=select-value\\]\\:flex {\n :is(& > *) {\n &[data-slot=\"select-value\"] {\n display: flex;\n }\n }\n }\n .\\*\\:data-\\[slot\\=select-value\\]\\:items-center {\n :is(& > *) {\n &[data-slot=\"select-value\"] {\n align-items: center;\n }\n }\n }\n .\\*\\:data-\\[slot\\=select-value\\]\\:gap-2 {\n :is(& > *) {\n &[data-slot=\"select-value\"] {\n gap: calc(var(--spacing) * 2);\n }\n }\n }\n .data-\\[slot\\=sidebar-menu-button\\]\\:p-1\\.5\\! {\n &[data-slot=\"sidebar-menu-button\"] {\n padding: calc(var(--spacing) * 1.5) !important;\n }\n }\n .data-\\[state\\=active\\]\\:bg-background {\n &[data-state=\"active\"] {\n background-color: var(--background);\n }\n }\n .data-\\[state\\=active\\]\\:text-foreground {\n &[data-state=\"active\"] {\n color: var(--foreground);\n }\n }\n .group-data-\\[variant\\=default\\]\\/tabs-list\\:data-\\[state\\=active\\]\\:shadow-sm {\n &:is(:where(.group\\/tabs-list)[data-variant=\"default\"] *) {\n &[data-state=\"active\"] {\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n }\n .group-data-\\[variant\\=line\\]\\/tabs-list\\:data-\\[state\\=active\\]\\:bg-transparent {\n &:is(:where(.group\\/tabs-list)[data-variant=\"line\"] *) {\n &[data-state=\"active\"] {\n background-color: transparent;\n }\n }\n }\n .group-data-\\[variant\\=line\\]\\/tabs-list\\:data-\\[state\\=active\\]\\:shadow-none {\n &:is(:where(.group\\/tabs-list)[data-variant=\"line\"] *) {\n &[data-state=\"active\"] {\n --tw-shadow: 0 0 #0000;\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n }\n .group-data-\\[variant\\=line\\]\\/tabs-list\\:data-\\[state\\=active\\]\\:after\\:opacity-100 {\n &:is(:where(.group\\/tabs-list)[data-variant=\"line\"] *) {\n &[data-state=\"active\"] {\n &::after {\n content: var(--tw-content);\n opacity: 100%;\n }\n }\n }\n }\n .data-\\[state\\=checked\\]\\:border-primary {\n &[data-state=\"checked\"] {\n border-color: var(--primary);\n }\n }\n .data-\\[state\\=checked\\]\\:bg-primary {\n &[data-state=\"checked\"] {\n background-color: var(--primary);\n }\n }\n .data-\\[state\\=checked\\]\\:text-primary-foreground {\n &[data-state=\"checked\"] {\n color: var(--primary-foreground);\n }\n }\n .data-\\[state\\=closed\\]\\:animate-out {\n &[data-state=\"closed\"] {\n animation: exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none);\n }\n }\n .data-\\[state\\=closed\\]\\:duration-300 {\n &[data-state=\"closed\"] {\n --tw-duration: 300ms;\n transition-duration: 300ms;\n }\n }\n .data-\\[state\\=closed\\]\\:fade-out-0 {\n &[data-state=\"closed\"] {\n --tw-exit-opacity: calc(0/100);\n --tw-exit-opacity: 0;\n }\n }\n .data-\\[state\\=closed\\]\\:zoom-out-95 {\n &[data-state=\"closed\"] {\n --tw-exit-scale: calc(95*1%);\n --tw-exit-scale: .95;\n }\n }\n .data-\\[state\\=closed\\]\\:slide-out-to-bottom {\n &[data-state=\"closed\"] {\n --tw-exit-translate-y: 100%;\n }\n }\n .data-\\[state\\=closed\\]\\:slide-out-to-left {\n &[data-state=\"closed\"] {\n --tw-exit-translate-x: -100%;\n }\n }\n .data-\\[state\\=closed\\]\\:slide-out-to-right {\n &[data-state=\"closed\"] {\n --tw-exit-translate-x: 100%;\n }\n }\n .data-\\[state\\=closed\\]\\:slide-out-to-top {\n &[data-state=\"closed\"] {\n --tw-exit-translate-y: -100%;\n }\n }\n .data-\\[state\\=open\\]\\:animate-in {\n &[data-state=\"open\"] {\n animation: enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none);\n }\n }\n .data-\\[state\\=open\\]\\:bg-accent {\n &[data-state=\"open\"] {\n background-color: var(--accent);\n }\n }\n .data-\\[state\\=open\\]\\:bg-secondary {\n &[data-state=\"open\"] {\n background-color: var(--secondary);\n }\n }\n .data-\\[state\\=open\\]\\:bg-sidebar-accent {\n &[data-state=\"open\"] {\n background-color: var(--sidebar-accent);\n }\n }\n .data-\\[state\\=open\\]\\:text-accent-foreground {\n &[data-state=\"open\"] {\n color: var(--accent-foreground);\n }\n }\n .data-\\[state\\=open\\]\\:text-muted-foreground {\n &[data-state=\"open\"] {\n color: var(--muted-foreground);\n }\n }\n .data-\\[state\\=open\\]\\:text-sidebar-accent-foreground {\n &[data-state=\"open\"] {\n color: var(--sidebar-accent-foreground);\n }\n }\n .data-\\[state\\=open\\]\\:opacity-100 {\n &[data-state=\"open\"] {\n opacity: 100%;\n }\n }\n .data-\\[state\\=open\\]\\:duration-500 {\n &[data-state=\"open\"] {\n --tw-duration: 500ms;\n transition-duration: 500ms;\n }\n }\n .data-\\[state\\=open\\]\\:fade-in-0 {\n &[data-state=\"open\"] {\n --tw-enter-opacity: calc(0/100);\n --tw-enter-opacity: 0;\n }\n }\n .data-\\[state\\=open\\]\\:zoom-in-95 {\n &[data-state=\"open\"] {\n --tw-enter-scale: calc(95*1%);\n --tw-enter-scale: .95;\n }\n }\n .data-\\[state\\=open\\]\\:slide-in-from-bottom {\n &[data-state=\"open\"] {\n --tw-enter-translate-y: 100%;\n }\n }\n .data-\\[state\\=open\\]\\:slide-in-from-left {\n &[data-state=\"open\"] {\n --tw-enter-translate-x: -100%;\n }\n }\n .data-\\[state\\=open\\]\\:slide-in-from-right {\n &[data-state=\"open\"] {\n --tw-enter-translate-x: 100%;\n }\n }\n .data-\\[state\\=open\\]\\:slide-in-from-top {\n &[data-state=\"open\"] {\n --tw-enter-translate-y: -100%;\n }\n }\n .data-\\[state\\=open\\]\\:hover\\:bg-sidebar-accent {\n &[data-state=\"open\"] {\n &:hover {\n @media (hover: hover) {\n background-color: var(--sidebar-accent);\n }\n }\n }\n }\n .data-\\[state\\=open\\]\\:hover\\:text-sidebar-accent-foreground {\n &[data-state=\"open\"] {\n &:hover {\n @media (hover: hover) {\n color: var(--sidebar-accent-foreground);\n }\n }\n }\n }\n .data-\\[state\\=selected\\]\\:bg-muted {\n &[data-state=\"selected\"] {\n background-color: var(--muted);\n }\n }\n .data-\\[variant\\=destructive\\]\\:text-destructive {\n &[data-variant=\"destructive\"] {\n color: var(--destructive);\n }\n }\n .data-\\[variant\\=destructive\\]\\:focus\\:bg-destructive\\/10 {\n &[data-variant=\"destructive\"] {\n &:focus {\n background-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--destructive) 10%, transparent);\n }\n }\n }\n }\n .data-\\[variant\\=destructive\\]\\:focus\\:text-destructive {\n &[data-variant=\"destructive\"] {\n &:focus {\n color: var(--destructive);\n }\n }\n }\n .data-\\[variant\\=label\\]\\:text-sm {\n &[data-variant=\"label\"] {\n font-size: var(--text-sm);\n line-height: var(--tw-leading, var(--text-sm--line-height));\n }\n }\n .data-\\[variant\\=legend\\]\\:text-base {\n &[data-variant=\"legend\"] {\n font-size: var(--text-base);\n line-height: var(--tw-leading, var(--text-base--line-height));\n }\n }\n .data-\\[variant\\=line\\]\\:rounded-none {\n &[data-variant=\"line\"] {\n border-radius: 0;\n }\n }\n .data-\\[vaul-drawer-direction\\=bottom\\]\\:inset-x-0 {\n &[data-vaul-drawer-direction=\"bottom\"] {\n inset-inline: calc(var(--spacing) * 0);\n }\n }\n .data-\\[vaul-drawer-direction\\=bottom\\]\\:bottom-0 {\n &[data-vaul-drawer-direction=\"bottom\"] {\n bottom: calc(var(--spacing) * 0);\n }\n }\n .data-\\[vaul-drawer-direction\\=bottom\\]\\:mt-24 {\n &[data-vaul-drawer-direction=\"bottom\"] {\n margin-top: calc(var(--spacing) * 24);\n }\n }\n .data-\\[vaul-drawer-direction\\=bottom\\]\\:max-h-\\[80vh\\] {\n &[data-vaul-drawer-direction=\"bottom\"] {\n max-height: 80vh;\n }\n }\n .data-\\[vaul-drawer-direction\\=bottom\\]\\:rounded-t-lg {\n &[data-vaul-drawer-direction=\"bottom\"] {\n border-top-left-radius: var(--radius);\n border-top-right-radius: var(--radius);\n }\n }\n .data-\\[vaul-drawer-direction\\=bottom\\]\\:border-t {\n &[data-vaul-drawer-direction=\"bottom\"] {\n border-top-style: var(--tw-border-style);\n border-top-width: 1px;\n }\n }\n .data-\\[vaul-drawer-direction\\=left\\]\\:inset-y-0 {\n &[data-vaul-drawer-direction=\"left\"] {\n inset-block: calc(var(--spacing) * 0);\n }\n }\n .data-\\[vaul-drawer-direction\\=left\\]\\:left-0 {\n &[data-vaul-drawer-direction=\"left\"] {\n left: calc(var(--spacing) * 0);\n }\n }\n .data-\\[vaul-drawer-direction\\=left\\]\\:w-3\\/4 {\n &[data-vaul-drawer-direction=\"left\"] {\n width: calc(3 / 4 * 100%);\n }\n }\n .data-\\[vaul-drawer-direction\\=left\\]\\:border-r {\n &[data-vaul-drawer-direction=\"left\"] {\n border-right-style: var(--tw-border-style);\n border-right-width: 1px;\n }\n }\n .data-\\[vaul-drawer-direction\\=right\\]\\:inset-y-0 {\n &[data-vaul-drawer-direction=\"right\"] {\n inset-block: calc(var(--spacing) * 0);\n }\n }\n .data-\\[vaul-drawer-direction\\=right\\]\\:right-0 {\n &[data-vaul-drawer-direction=\"right\"] {\n right: calc(var(--spacing) * 0);\n }\n }\n .data-\\[vaul-drawer-direction\\=right\\]\\:w-3\\/4 {\n &[data-vaul-drawer-direction=\"right\"] {\n width: calc(3 / 4 * 100%);\n }\n }\n .data-\\[vaul-drawer-direction\\=right\\]\\:border-l {\n &[data-vaul-drawer-direction=\"right\"] {\n border-left-style: var(--tw-border-style);\n border-left-width: 1px;\n }\n }\n .data-\\[vaul-drawer-direction\\=top\\]\\:inset-x-0 {\n &[data-vaul-drawer-direction=\"top\"] {\n inset-inline: calc(var(--spacing) * 0);\n }\n }\n .data-\\[vaul-drawer-direction\\=top\\]\\:top-0 {\n &[data-vaul-drawer-direction=\"top\"] {\n top: calc(var(--spacing) * 0);\n }\n }\n .data-\\[vaul-drawer-direction\\=top\\]\\:mb-24 {\n &[data-vaul-drawer-direction=\"top\"] {\n margin-bottom: calc(var(--spacing) * 24);\n }\n }\n .data-\\[vaul-drawer-direction\\=top\\]\\:max-h-\\[80vh\\] {\n &[data-vaul-drawer-direction=\"top\"] {\n max-height: 80vh;\n }\n }\n .data-\\[vaul-drawer-direction\\=top\\]\\:rounded-b-lg {\n &[data-vaul-drawer-direction=\"top\"] {\n border-bottom-right-radius: var(--radius);\n border-bottom-left-radius: var(--radius);\n }\n }\n .data-\\[vaul-drawer-direction\\=top\\]\\:border-b {\n &[data-vaul-drawer-direction=\"top\"] {\n border-bottom-style: var(--tw-border-style);\n border-bottom-width: 1px;\n }\n }\n .nth-last-2\\:-mt-1 {\n &:nth-last-child(2) {\n margin-top: calc(var(--spacing) * -1);\n }\n }\n .sm\\:mt-16 {\n @media (width >= 40rem) {\n margin-top: calc(var(--spacing) * 16);\n }\n }\n .sm\\:mb-8 {\n @media (width >= 40rem) {\n margin-bottom: calc(var(--spacing) * 8);\n }\n }\n .sm\\:mb-12 {\n @media (width >= 40rem) {\n margin-bottom: calc(var(--spacing) * 12);\n }\n }\n .sm\\:ml-auto {\n @media (width >= 40rem) {\n margin-left: auto;\n }\n }\n .sm\\:block {\n @media (width >= 40rem) {\n display: block;\n }\n }\n .sm\\:flex {\n @media (width >= 40rem) {\n display: flex;\n }\n }\n .sm\\:inline {\n @media (width >= 40rem) {\n display: inline;\n }\n }\n .sm\\:table-cell {\n @media (width >= 40rem) {\n display: table-cell;\n }\n }\n .sm\\:h-20 {\n @media (width >= 40rem) {\n height: calc(var(--spacing) * 20);\n }\n }\n .sm\\:h-28 {\n @media (width >= 40rem) {\n height: calc(var(--spacing) * 28);\n }\n }\n .sm\\:h-72 {\n @media (width >= 40rem) {\n height: calc(var(--spacing) * 72);\n }\n }\n .sm\\:h-80 {\n @media (width >= 40rem) {\n height: calc(var(--spacing) * 80);\n }\n }\n .sm\\:w-40 {\n @media (width >= 40rem) {\n width: calc(var(--spacing) * 40);\n }\n }\n .sm\\:w-48 {\n @media (width >= 40rem) {\n width: calc(var(--spacing) * 48);\n }\n }\n .sm\\:w-52 {\n @media (width >= 40rem) {\n width: calc(var(--spacing) * 52);\n }\n }\n .sm\\:w-64 {\n @media (width >= 40rem) {\n width: calc(var(--spacing) * 64);\n }\n }\n .sm\\:w-auto {\n @media (width >= 40rem) {\n width: auto;\n }\n }\n .sm\\:max-w-lg {\n @media (width >= 40rem) {\n max-width: var(--container-lg);\n }\n }\n .sm\\:max-w-sm {\n @media (width >= 40rem) {\n max-width: var(--container-sm);\n }\n }\n .sm\\:flex-none {\n @media (width >= 40rem) {\n flex: none;\n }\n }\n .sm\\:grid-cols-2 {\n @media (width >= 40rem) {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n }\n .sm\\:grid-cols-3 {\n @media (width >= 40rem) {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n }\n .sm\\:grid-cols-4 {\n @media (width >= 40rem) {\n grid-template-columns: repeat(4, minmax(0, 1fr));\n }\n }\n .sm\\:flex-row {\n @media (width >= 40rem) {\n flex-direction: row;\n }\n }\n .sm\\:items-center {\n @media (width >= 40rem) {\n align-items: center;\n }\n }\n .sm\\:justify-end {\n @media (width >= 40rem) {\n justify-content: flex-end;\n }\n }\n .sm\\:gap-3 {\n @media (width >= 40rem) {\n gap: calc(var(--spacing) * 3);\n }\n }\n .sm\\:gap-6 {\n @media (width >= 40rem) {\n gap: calc(var(--spacing) * 6);\n }\n }\n .sm\\:p-4 {\n @media (width >= 40rem) {\n padding: calc(var(--spacing) * 4);\n }\n }\n .sm\\:p-6 {\n @media (width >= 40rem) {\n padding: calc(var(--spacing) * 6);\n }\n }\n .sm\\:p-8 {\n @media (width >= 40rem) {\n padding: calc(var(--spacing) * 8);\n }\n }\n .sm\\:px-6 {\n @media (width >= 40rem) {\n padding-inline: calc(var(--spacing) * 6);\n }\n }\n .sm\\:px-8 {\n @media (width >= 40rem) {\n padding-inline: calc(var(--spacing) * 8);\n }\n }\n .sm\\:py-10 {\n @media (width >= 40rem) {\n padding-block: calc(var(--spacing) * 10);\n }\n }\n .sm\\:py-16 {\n @media (width >= 40rem) {\n padding-block: calc(var(--spacing) * 16);\n }\n }\n .sm\\:py-20 {\n @media (width >= 40rem) {\n padding-block: calc(var(--spacing) * 20);\n }\n }\n .sm\\:text-left {\n @media (width >= 40rem) {\n text-align: left;\n }\n }\n .sm\\:text-2xl {\n @media (width >= 40rem) {\n font-size: var(--text-2xl);\n line-height: var(--tw-leading, var(--text-2xl--line-height));\n }\n }\n .sm\\:text-3xl {\n @media (width >= 40rem) {\n font-size: var(--text-3xl);\n line-height: var(--tw-leading, var(--text-3xl--line-height));\n }\n }\n .sm\\:text-4xl {\n @media (width >= 40rem) {\n font-size: var(--text-4xl);\n line-height: var(--tw-leading, var(--text-4xl--line-height));\n }\n }\n .sm\\:text-5xl {\n @media (width >= 40rem) {\n font-size: var(--text-5xl);\n line-height: var(--tw-leading, var(--text-5xl--line-height));\n }\n }\n .sm\\:text-base {\n @media (width >= 40rem) {\n font-size: var(--text-base);\n line-height: var(--tw-leading, var(--text-base--line-height));\n }\n }\n .sm\\:text-lg {\n @media (width >= 40rem) {\n font-size: var(--text-lg);\n line-height: var(--tw-leading, var(--text-lg--line-height));\n }\n }\n .sm\\:text-sm {\n @media (width >= 40rem) {\n font-size: var(--text-sm);\n line-height: var(--tw-leading, var(--text-sm--line-height));\n }\n }\n .data-\\[vaul-drawer-direction\\=left\\]\\:sm\\:max-w-sm {\n &[data-vaul-drawer-direction=\"left\"] {\n @media (width >= 40rem) {\n max-width: var(--container-sm);\n }\n }\n }\n .data-\\[vaul-drawer-direction\\=right\\]\\:sm\\:max-w-sm {\n &[data-vaul-drawer-direction=\"right\"] {\n @media (width >= 40rem) {\n max-width: var(--container-sm);\n }\n }\n }\n .md\\:block {\n @media (width >= 48rem) {\n display: block;\n }\n }\n .md\\:flex {\n @media (width >= 48rem) {\n display: flex;\n }\n }\n .md\\:hidden {\n @media (width >= 48rem) {\n display: none;\n }\n }\n .md\\:table-cell {\n @media (width >= 48rem) {\n display: table-cell;\n }\n }\n .md\\:grid-cols-2 {\n @media (width >= 48rem) {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n }\n .md\\:grid-cols-4 {\n @media (width >= 48rem) {\n grid-template-columns: repeat(4, minmax(0, 1fr));\n }\n }\n .md\\:grid-cols-5 {\n @media (width >= 48rem) {\n grid-template-columns: repeat(5, minmax(0, 1fr));\n }\n }\n .md\\:gap-1\\.5 {\n @media (width >= 48rem) {\n gap: calc(var(--spacing) * 1.5);\n }\n }\n .md\\:p-6 {\n @media (width >= 48rem) {\n padding: calc(var(--spacing) * 6);\n }\n }\n .md\\:text-left {\n @media (width >= 48rem) {\n text-align: left;\n }\n }\n .md\\:text-6xl {\n @media (width >= 48rem) {\n font-size: var(--text-6xl);\n line-height: var(--tw-leading, var(--text-6xl--line-height));\n }\n }\n .md\\:text-sm {\n @media (width >= 48rem) {\n font-size: var(--text-sm);\n line-height: var(--tw-leading, var(--text-sm--line-height));\n }\n }\n .md\\:opacity-0 {\n @media (width >= 48rem) {\n opacity: 0%;\n }\n }\n .md\\:peer-data-\\[variant\\=inset\\]\\:m-2 {\n @media (width >= 48rem) {\n &:is(:where(.peer)[data-variant=\"inset\"] ~ *) {\n margin: calc(var(--spacing) * 2);\n }\n }\n }\n .md\\:peer-data-\\[variant\\=inset\\]\\:ml-0 {\n @media (width >= 48rem) {\n &:is(:where(.peer)[data-variant=\"inset\"] ~ *) {\n margin-left: calc(var(--spacing) * 0);\n }\n }\n }\n .md\\:peer-data-\\[variant\\=inset\\]\\:rounded-xl {\n @media (width >= 48rem) {\n &:is(:where(.peer)[data-variant=\"inset\"] ~ *) {\n border-radius: calc(var(--radius) + 4px);\n }\n }\n }\n .md\\:peer-data-\\[variant\\=inset\\]\\:shadow-sm {\n @media (width >= 48rem) {\n &:is(:where(.peer)[data-variant=\"inset\"] ~ *) {\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n }\n .md\\:peer-data-\\[variant\\=inset\\]\\:peer-data-\\[state\\=collapsed\\]\\:ml-2 {\n @media (width >= 48rem) {\n &:is(:where(.peer)[data-variant=\"inset\"] ~ *) {\n &:is(:where(.peer)[data-state=\"collapsed\"] ~ *) {\n margin-left: calc(var(--spacing) * 2);\n }\n }\n }\n }\n .md\\:after\\:hidden {\n @media (width >= 48rem) {\n &::after {\n content: var(--tw-content);\n display: none;\n }\n }\n }\n .lg\\:flex {\n @media (width >= 64rem) {\n display: flex;\n }\n }\n .lg\\:hidden {\n @media (width >= 64rem) {\n display: none;\n }\n }\n .lg\\:h-80 {\n @media (width >= 64rem) {\n height: calc(var(--spacing) * 80);\n }\n }\n .lg\\:h-96 {\n @media (width >= 64rem) {\n height: calc(var(--spacing) * 96);\n }\n }\n .lg\\:grid-cols-2 {\n @media (width >= 64rem) {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n }\n .lg\\:grid-cols-3 {\n @media (width >= 64rem) {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n }\n .lg\\:grid-cols-5 {\n @media (width >= 64rem) {\n grid-template-columns: repeat(5, minmax(0, 1fr));\n }\n }\n .lg\\:gap-12 {\n @media (width >= 64rem) {\n gap: calc(var(--spacing) * 12);\n }\n }\n .lg\\:px-8 {\n @media (width >= 64rem) {\n padding-inline: calc(var(--spacing) * 8);\n }\n }\n .xl\\:grid-cols-4 {\n @media (width >= 80rem) {\n grid-template-columns: repeat(4, minmax(0, 1fr));\n }\n }\n .\\@md\\/field-group\\:flex-row {\n @container field-group (width >= 28rem) {\n flex-direction: row;\n }\n }\n .\\@md\\/field-group\\:items-center {\n @container field-group (width >= 28rem) {\n align-items: center;\n }\n }\n .\\@md\\/field-group\\:has-\\[\\>\\[data-slot\\=field-content\\]\\]\\:items-start {\n @container field-group (width >= 28rem) {\n &:has(>[data-slot=field-content]) {\n align-items: flex-start;\n }\n }\n }\n .dark\\:border-input {\n &:is(.dark *) {\n border-color: var(--input);\n }\n }\n .dark\\:bg-destructive\\/60 {\n &:is(.dark *) {\n background-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--destructive) 60%, transparent);\n }\n }\n }\n .dark\\:bg-input\\/30 {\n &:is(.dark *) {\n background-color: var(--input);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--input) 30%, transparent);\n }\n }\n }\n .dark\\:bg-zinc-900 {\n &:is(.dark *) {\n background-color: var(--color-zinc-900);\n }\n }\n .dark\\:text-muted-foreground {\n &:is(.dark *) {\n color: var(--muted-foreground);\n }\n }\n .dark\\:hover\\:bg-accent\\/50 {\n &:is(.dark *) {\n &:hover {\n @media (hover: hover) {\n background-color: var(--accent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--accent) 50%, transparent);\n }\n }\n }\n }\n }\n .dark\\:hover\\:bg-input\\/50 {\n &:is(.dark *) {\n &:hover {\n @media (hover: hover) {\n background-color: var(--input);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--input) 50%, transparent);\n }\n }\n }\n }\n }\n .dark\\:hover\\:text-foreground {\n &:is(.dark *) {\n &:hover {\n @media (hover: hover) {\n color: var(--foreground);\n }\n }\n }\n }\n .dark\\:focus-visible\\:ring-destructive\\/40 {\n &:is(.dark *) {\n &:focus-visible {\n --tw-ring-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--destructive) 40%, transparent);\n }\n }\n }\n }\n .dark\\:has-data-\\[state\\=checked\\]\\:bg-primary\\/10 {\n &:is(.dark *) {\n &:has(*[data-state=\"checked\"]) {\n background-color: var(--primary);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--primary) 10%, transparent);\n }\n }\n }\n }\n .dark\\:aria-invalid\\:ring-destructive\\/40 {\n &:is(.dark *) {\n &[aria-invalid=\"true\"] {\n --tw-ring-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--destructive) 40%, transparent);\n }\n }\n }\n }\n .dark\\:data-\\[state\\=active\\]\\:border-input {\n &:is(.dark *) {\n &[data-state=\"active\"] {\n border-color: var(--input);\n }\n }\n }\n .dark\\:data-\\[state\\=active\\]\\:bg-input\\/30 {\n &:is(.dark *) {\n &[data-state=\"active\"] {\n background-color: var(--input);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--input) 30%, transparent);\n }\n }\n }\n }\n .dark\\:data-\\[state\\=active\\]\\:text-foreground {\n &:is(.dark *) {\n &[data-state=\"active\"] {\n color: var(--foreground);\n }\n }\n }\n .dark\\:group-data-\\[variant\\=line\\]\\/tabs-list\\:data-\\[state\\=active\\]\\:border-transparent {\n &:is(.dark *) {\n &:is(:where(.group\\/tabs-list)[data-variant=\"line\"] *) {\n &[data-state=\"active\"] {\n border-color: transparent;\n }\n }\n }\n }\n .dark\\:group-data-\\[variant\\=line\\]\\/tabs-list\\:data-\\[state\\=active\\]\\:bg-transparent {\n &:is(.dark *) {\n &:is(:where(.group\\/tabs-list)[data-variant=\"line\"] *) {\n &[data-state=\"active\"] {\n background-color: transparent;\n }\n }\n }\n }\n .dark\\:data-\\[state\\=checked\\]\\:bg-primary {\n &:is(.dark *) {\n &[data-state=\"checked\"] {\n background-color: var(--primary);\n }\n }\n }\n .dark\\:data-\\[variant\\=destructive\\]\\:focus\\:bg-destructive\\/20 {\n &:is(.dark *) {\n &[data-variant=\"destructive\"] {\n &:focus {\n background-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--destructive) 20%, transparent);\n }\n }\n }\n }\n }\n .\\[\\&_\\.recharts-cartesian-axis-tick_text\\]\\:fill-muted-foreground {\n & .recharts-cartesian-axis-tick text {\n fill: var(--muted-foreground);\n }\n }\n .\\[\\&_\\.recharts-cartesian-grid_line\\[stroke\\=\\'\\#ccc\\'\\]\\]\\:stroke-border\\/50 {\n & .recharts-cartesian-grid line[stroke='#ccc'] {\n stroke: var(--border);\n @supports (color: color-mix(in lab, red, red)) {\n stroke: color-mix(in oklab, var(--border) 50%, transparent);\n }\n }\n }\n .\\[\\&_\\.recharts-curve\\.recharts-tooltip-cursor\\]\\:stroke-border {\n & .recharts-curve.recharts-tooltip-cursor {\n stroke: var(--border);\n }\n }\n .\\[\\&_\\.recharts-dot\\[stroke\\=\\'\\#fff\\'\\]\\]\\:stroke-transparent {\n & .recharts-dot[stroke='#fff'] {\n stroke: transparent;\n }\n }\n .\\[\\&_\\.recharts-layer\\]\\:outline-hidden {\n & .recharts-layer {\n --tw-outline-style: none;\n outline-style: none;\n @media (forced-colors: active) {\n outline: 2px solid transparent;\n outline-offset: 2px;\n }\n }\n }\n .\\[\\&_\\.recharts-polar-grid_\\[stroke\\=\\'\\#ccc\\'\\]\\]\\:stroke-border {\n & .recharts-polar-grid [stroke='#ccc'] {\n stroke: var(--border);\n }\n }\n .\\[\\&_\\.recharts-radial-bar-background-sector\\]\\:fill-muted {\n & .recharts-radial-bar-background-sector {\n fill: var(--muted);\n }\n }\n .\\[\\&_\\.recharts-rectangle\\.recharts-tooltip-cursor\\]\\:fill-muted {\n & .recharts-rectangle.recharts-tooltip-cursor {\n fill: var(--muted);\n }\n }\n .\\[\\&_\\.recharts-reference-line_\\[stroke\\=\\'\\#ccc\\'\\]\\]\\:stroke-border {\n & .recharts-reference-line [stroke='#ccc'] {\n stroke: var(--border);\n }\n }\n .\\[\\&_\\.recharts-sector\\]\\:outline-hidden {\n & .recharts-sector {\n --tw-outline-style: none;\n outline-style: none;\n @media (forced-colors: active) {\n outline: 2px solid transparent;\n outline-offset: 2px;\n }\n }\n }\n .\\[\\&_\\.recharts-sector\\[stroke\\=\\'\\#fff\\'\\]\\]\\:stroke-transparent {\n & .recharts-sector[stroke='#fff'] {\n stroke: transparent;\n }\n }\n .\\[\\&_\\.recharts-surface\\]\\:outline-hidden {\n & .recharts-surface {\n --tw-outline-style: none;\n outline-style: none;\n @media (forced-colors: active) {\n outline: 2px solid transparent;\n outline-offset: 2px;\n }\n }\n }\n .\\[\\&_svg\\]\\:pointer-events-none {\n & svg {\n pointer-events: none;\n }\n }\n .\\[\\&_svg\\]\\:shrink-0 {\n & svg {\n flex-shrink: 0;\n }\n }\n .\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-3 {\n & svg:not([class*='size-']) {\n width: calc(var(--spacing) * 3);\n height: calc(var(--spacing) * 3);\n }\n }\n .\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-4 {\n & svg:not([class*='size-']) {\n width: calc(var(--spacing) * 4);\n height: calc(var(--spacing) * 4);\n }\n }\n .\\[\\&_svg\\:not\\(\\[class\\*\\=\\'text-\\'\\]\\)\\]\\:text-muted-foreground {\n & svg:not([class*='text-']) {\n color: var(--muted-foreground);\n }\n }\n .\\[\\&_tr\\]\\:border-b {\n & tr {\n border-bottom-style: var(--tw-border-style);\n border-bottom-width: 1px;\n }\n }\n .\\[\\&_tr\\:last-child\\]\\:border-0 {\n & tr:last-child {\n border-style: var(--tw-border-style);\n border-width: 0px;\n }\n }\n .\\[\\&\\:has\\(\\[role\\=checkbox\\]\\)\\]\\:pr-0 {\n &:has([role=checkbox]) {\n padding-right: calc(var(--spacing) * 0);\n }\n }\n .\\[\\.border-b\\]\\:pb-6 {\n &:is(.border-b) {\n padding-bottom: calc(var(--spacing) * 6);\n }\n }\n .\\[\\.border-t\\]\\:pt-6 {\n &:is(.border-t) {\n padding-top: calc(var(--spacing) * 6);\n }\n }\n .\\*\\:\\[span\\]\\:last\\:flex {\n :is(& > *) {\n &:is(span) {\n &:last-child {\n display: flex;\n }\n }\n }\n }\n .\\*\\:\\[span\\]\\:last\\:items-center {\n :is(& > *) {\n &:is(span) {\n &:last-child {\n align-items: center;\n }\n }\n }\n }\n .\\*\\:\\[span\\]\\:last\\:gap-2 {\n :is(& > *) {\n &:is(span) {\n &:last-child {\n gap: calc(var(--spacing) * 2);\n }\n }\n }\n }\n .data-\\[variant\\=destructive\\]\\:\\*\\:\\[svg\\]\\:\\!text-destructive {\n &[data-variant=\"destructive\"] {\n :is(& > *) {\n &:is(svg) {\n color: var(--destructive) !important;\n }\n }\n }\n }\n .\\[\\&\\>\\*\\]\\:w-full {\n &>* {\n width: 100%;\n }\n }\n .\\@md\\/field-group\\:\\[\\&\\>\\*\\]\\:w-auto {\n @container field-group (width >= 28rem) {\n &>* {\n width: auto;\n }\n }\n }\n .\\[\\&\\>\\.sr-only\\]\\:w-auto {\n &>.sr-only {\n width: auto;\n }\n }\n .\\[\\&\\>\\[data-slot\\=field-label\\]\\]\\:flex-auto {\n &>[data-slot=field-label] {\n flex: auto;\n }\n }\n .\\@md\\/field-group\\:\\[\\&\\>\\[data-slot\\=field-label\\]\\]\\:flex-auto {\n @container field-group (width >= 28rem) {\n &>[data-slot=field-label] {\n flex: auto;\n }\n }\n }\n .\\[\\&\\>\\[role\\=checkbox\\]\\]\\:translate-y-\\[2px\\] {\n &>[role=checkbox] {\n --tw-translate-y: 2px;\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n }\n .has-\\[\\>\\[data-slot\\=field-content\\]\\]\\:\\[\\&\\>\\[role\\=checkbox\\]\\,\\[role\\=radio\\]\\]\\:mt-px {\n &:has(>[data-slot=field-content]) {\n &>[role=checkbox],[role=radio] {\n margin-top: 1px;\n }\n }\n }\n .\\@md\\/field-group\\:has-\\[\\>\\[data-slot\\=field-content\\]\\]\\:\\[\\&\\>\\[role\\=checkbox\\]\\,\\[role\\=radio\\]\\]\\:mt-px {\n @container field-group (width >= 28rem) {\n &:has(>[data-slot=field-content]) {\n &>[role=checkbox],[role=radio] {\n margin-top: 1px;\n }\n }\n }\n }\n .\\[\\&\\>a\\]\\:underline {\n &>a {\n text-decoration-line: underline;\n }\n }\n .\\[\\&\\>a\\]\\:underline-offset-4 {\n &>a {\n text-underline-offset: 4px;\n }\n }\n .\\[\\&\\>a\\:hover\\]\\:text-primary {\n &>a:hover {\n color: var(--primary);\n }\n }\n .\\[\\&\\>button\\]\\:hidden {\n &>button {\n display: none;\n }\n }\n .\\[\\&\\>span\\:last-child\\]\\:truncate {\n &>span:last-child {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n }\n .\\[\\&\\>svg\\]\\:pointer-events-none {\n &>svg {\n pointer-events: none;\n }\n }\n .\\[\\&\\>svg\\]\\:size-3 {\n &>svg {\n width: calc(var(--spacing) * 3);\n height: calc(var(--spacing) * 3);\n }\n }\n .\\[\\&\\>svg\\]\\:size-4 {\n &>svg {\n width: calc(var(--spacing) * 4);\n height: calc(var(--spacing) * 4);\n }\n }\n .\\[\\&\\>svg\\]\\:h-2\\.5 {\n &>svg {\n height: calc(var(--spacing) * 2.5);\n }\n }\n .\\[\\&\\>svg\\]\\:h-3 {\n &>svg {\n height: calc(var(--spacing) * 3);\n }\n }\n .\\[\\&\\>svg\\]\\:w-2\\.5 {\n &>svg {\n width: calc(var(--spacing) * 2.5);\n }\n }\n .\\[\\&\\>svg\\]\\:w-3 {\n &>svg {\n width: calc(var(--spacing) * 3);\n }\n }\n .\\[\\&\\>svg\\]\\:shrink-0 {\n &>svg {\n flex-shrink: 0;\n }\n }\n .\\[\\&\\>svg\\]\\:text-muted-foreground {\n &>svg {\n color: var(--muted-foreground);\n }\n }\n .\\[\\&\\>svg\\]\\:text-sidebar-accent-foreground {\n &>svg {\n color: var(--sidebar-accent-foreground);\n }\n }\n .group-has-data-\\[size\\=lg\\]\\/avatar-group\\:\\[\\&\\>svg\\]\\:size-5 {\n &:is(:where(.group\\/avatar-group):has(*[data-size=\"lg\"]) *) {\n &>svg {\n width: calc(var(--spacing) * 5);\n height: calc(var(--spacing) * 5);\n }\n }\n }\n .group-has-data-\\[size\\=sm\\]\\/avatar-group\\:\\[\\&\\>svg\\]\\:size-3 {\n &:is(:where(.group\\/avatar-group):has(*[data-size=\"sm\"]) *) {\n &>svg {\n width: calc(var(--spacing) * 3);\n height: calc(var(--spacing) * 3);\n }\n }\n }\n .group-data-\\[size\\=default\\]\\/avatar\\:\\[\\&\\>svg\\]\\:size-2 {\n &:is(:where(.group\\/avatar)[data-size=\"default\"] *) {\n &>svg {\n width: calc(var(--spacing) * 2);\n height: calc(var(--spacing) * 2);\n }\n }\n }\n .group-data-\\[size\\=lg\\]\\/avatar\\:\\[\\&\\>svg\\]\\:size-2 {\n &:is(:where(.group\\/avatar)[data-size=\"lg\"] *) {\n &>svg {\n width: calc(var(--spacing) * 2);\n height: calc(var(--spacing) * 2);\n }\n }\n }\n .group-data-\\[size\\=sm\\]\\/avatar\\:\\[\\&\\>svg\\]\\:hidden {\n &:is(:where(.group\\/avatar)[data-size=\"sm\"] *) {\n &>svg {\n display: none;\n }\n }\n }\n .\\[\\&\\>tr\\]\\:last\\:border-b-0 {\n &>tr {\n &:last-child {\n border-bottom-style: var(--tw-border-style);\n border-bottom-width: 0px;\n }\n }\n }\n .\\[\\[data-side\\=left\\]\\[data-collapsible\\=offcanvas\\]_\\&\\]\\:-right-2 {\n [data-side=left][data-collapsible=offcanvas] & {\n right: calc(var(--spacing) * -2);\n }\n }\n .\\[\\[data-side\\=left\\]\\[data-state\\=collapsed\\]_\\&\\]\\:cursor-e-resize {\n [data-side=left][data-state=collapsed] & {\n cursor: e-resize;\n }\n }\n .\\[\\[data-side\\=right\\]\\[data-collapsible\\=offcanvas\\]_\\&\\]\\:-left-2 {\n [data-side=right][data-collapsible=offcanvas] & {\n left: calc(var(--spacing) * -2);\n }\n }\n .\\[\\[data-side\\=right\\]\\[data-state\\=collapsed\\]_\\&\\]\\:cursor-w-resize {\n [data-side=right][data-state=collapsed] & {\n cursor: w-resize;\n }\n }\n .\\[\\[data-variant\\=legend\\]\\+\\&\\]\\:-mt-1\\.5 {\n [data-variant=legend]+& {\n margin-top: calc(var(--spacing) * -1.5);\n }\n }\n .\\[a\\&\\]\\:hover\\:bg-accent {\n a& {\n &:hover {\n @media (hover: hover) {\n background-color: var(--accent);\n }\n }\n }\n }\n .\\[a\\&\\]\\:hover\\:bg-destructive\\/90 {\n a& {\n &:hover {\n @media (hover: hover) {\n background-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--destructive) 90%, transparent);\n }\n }\n }\n }\n }\n .\\[a\\&\\]\\:hover\\:bg-primary\\/90 {\n a& {\n &:hover {\n @media (hover: hover) {\n background-color: var(--primary);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--primary) 90%, transparent);\n }\n }\n }\n }\n }\n .\\[a\\&\\]\\:hover\\:bg-secondary\\/90 {\n a& {\n &:hover {\n @media (hover: hover) {\n background-color: var(--secondary);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--secondary) 90%, transparent);\n }\n }\n }\n }\n }\n .\\[a\\&\\]\\:hover\\:text-accent-foreground {\n a& {\n &:hover {\n @media (hover: hover) {\n color: var(--accent-foreground);\n }\n }\n }\n }\n .\\[a\\&\\]\\:hover\\:underline {\n a& {\n &:hover {\n @media (hover: hover) {\n text-decoration-line: underline;\n }\n }\n }\n }\n}\n@property --tw-animation-delay {\n syntax: \"*\";\n inherits: false;\n initial-value: 0s;\n}\n@property --tw-animation-direction {\n syntax: \"*\";\n inherits: false;\n initial-value: normal;\n}\n@property --tw-animation-duration {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-animation-fill-mode {\n syntax: \"*\";\n inherits: false;\n initial-value: none;\n}\n@property --tw-animation-iteration-count {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-enter-blur {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-enter-opacity {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-enter-rotate {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-enter-scale {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-enter-translate-x {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-enter-translate-y {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-exit-blur {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-exit-opacity {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-exit-rotate {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-exit-scale {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-exit-translate-x {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-exit-translate-y {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n:root {\n --radius: 0.625rem;\n --background: oklch(1 0 0);\n --foreground: oklch(0.145 0 0);\n --card: oklch(1 0 0);\n --card-foreground: oklch(0.145 0 0);\n --popover: oklch(1 0 0);\n --popover-foreground: oklch(0.145 0 0);\n --primary: oklch(0.205 0 0);\n --primary-foreground: oklch(0.985 0 0);\n --secondary: oklch(0.97 0 0);\n --secondary-foreground: oklch(0.205 0 0);\n --muted: oklch(0.97 0 0);\n --muted-foreground: oklch(0.556 0 0);\n --accent: oklch(0.97 0 0);\n --accent-foreground: oklch(0.205 0 0);\n --destructive: oklch(0.577 0.245 27.325);\n --border: oklch(0.922 0 0);\n --input: oklch(0.922 0 0);\n --ring: oklch(0.708 0 0);\n --chart-1: oklch(0.646 0.222 41.116);\n --chart-2: oklch(0.6 0.118 184.704);\n --chart-3: oklch(0.398 0.07 227.392);\n --chart-4: oklch(0.828 0.189 84.429);\n --chart-5: oklch(0.769 0.188 70.08);\n --sidebar: oklch(0.985 0 0);\n --sidebar-foreground: oklch(0.145 0 0);\n --sidebar-primary: oklch(0.205 0 0);\n --sidebar-primary-foreground: oklch(0.985 0 0);\n --sidebar-accent: oklch(0.97 0 0);\n --sidebar-accent-foreground: oklch(0.205 0 0);\n --sidebar-border: oklch(0.922 0 0);\n --sidebar-ring: oklch(0.708 0 0);\n}\n.dark {\n --background: oklch(0.145 0 0);\n --foreground: oklch(0.985 0 0);\n --card: oklch(0.205 0 0);\n --card-foreground: oklch(0.985 0 0);\n --popover: oklch(0.205 0 0);\n --popover-foreground: oklch(0.985 0 0);\n --primary: oklch(0.922 0 0);\n --primary-foreground: oklch(0.205 0 0);\n --secondary: oklch(0.269 0 0);\n --secondary-foreground: oklch(0.985 0 0);\n --muted: oklch(0.269 0 0);\n --muted-foreground: oklch(0.708 0 0);\n --accent: oklch(0.269 0 0);\n --accent-foreground: oklch(0.985 0 0);\n --destructive: oklch(0.704 0.191 22.216);\n --border: oklch(1 0 0 / 10%);\n --input: oklch(1 0 0 / 15%);\n --ring: oklch(0.556 0 0);\n --chart-1: oklch(0.488 0.243 264.376);\n --chart-2: oklch(0.696 0.17 162.48);\n --chart-3: oklch(0.769 0.188 70.08);\n --chart-4: oklch(0.627 0.265 303.9);\n --chart-5: oklch(0.645 0.246 16.439);\n --sidebar: oklch(0.205 0 0);\n --sidebar-foreground: oklch(0.985 0 0);\n --sidebar-primary: oklch(0.488 0.243 264.376);\n --sidebar-primary-foreground: oklch(0.985 0 0);\n --sidebar-accent: oklch(0.269 0 0);\n --sidebar-accent-foreground: oklch(0.985 0 0);\n --sidebar-border: oklch(1 0 0 / 10%);\n --sidebar-ring: oklch(0.556 0 0);\n}\n@layer base {\n * {\n border-color: var(--border);\n outline-color: var(--ring);\n @supports (color: color-mix(in lab, red, red)) {\n outline-color: color-mix(in oklab, var(--ring) 50%, transparent);\n }\n }\n body {\n background-color: var(--background);\n color: var(--foreground);\n }\n}\n@property --tw-translate-x {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-translate-y {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-translate-z {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-space-y-reverse {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-space-x-reverse {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-divide-y-reverse {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-border-style {\n syntax: \"*\";\n inherits: false;\n initial-value: solid;\n}\n@property --tw-gradient-position {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-gradient-from {\n syntax: \"\";\n inherits: false;\n initial-value: #0000;\n}\n@property --tw-gradient-via {\n syntax: \"\";\n inherits: false;\n initial-value: #0000;\n}\n@property --tw-gradient-to {\n syntax: \"\";\n inherits: false;\n initial-value: #0000;\n}\n@property --tw-gradient-stops {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-gradient-via-stops {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-gradient-from-position {\n syntax: \"\";\n inherits: false;\n initial-value: 0%;\n}\n@property --tw-gradient-via-position {\n syntax: \"\";\n inherits: false;\n initial-value: 50%;\n}\n@property --tw-gradient-to-position {\n syntax: \"\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-leading {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-font-weight {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-tracking {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ordinal {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-slashed-zero {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-numeric-figure {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-numeric-spacing {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-numeric-fraction {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-shadow-alpha {\n syntax: \"\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-inset-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-inset-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-inset-shadow-alpha {\n syntax: \"\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-ring-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ring-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-inset-ring-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-inset-ring-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-ring-inset {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ring-offset-width {\n syntax: \"\";\n inherits: false;\n initial-value: 0px;\n}\n@property --tw-ring-offset-color {\n syntax: \"*\";\n inherits: false;\n initial-value: #fff;\n}\n@property --tw-ring-offset-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-outline-style {\n syntax: \"*\";\n inherits: false;\n initial-value: solid;\n}\n@property --tw-backdrop-blur {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-brightness {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-contrast {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-grayscale {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-hue-rotate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-invert {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-opacity {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-saturate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-sepia {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-duration {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ease {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-content {\n syntax: \"*\";\n initial-value: \"\";\n inherits: false;\n}\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n@keyframes pulse {\n 50% {\n opacity: 0.5;\n }\n}\n@keyframes enter {\n from {\n opacity: var(--tw-enter-opacity,1);\n transform: translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0));\n filter: blur(var(--tw-enter-blur,0));\n }\n}\n@keyframes exit {\n to {\n opacity: var(--tw-exit-opacity,1);\n transform: translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0));\n filter: blur(var(--tw-exit-blur,0));\n }\n}\n@layer properties {\n @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {\n *, ::before, ::after, ::backdrop {\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-translate-z: 0;\n --tw-space-y-reverse: 0;\n --tw-space-x-reverse: 0;\n --tw-divide-y-reverse: 0;\n --tw-border-style: solid;\n --tw-gradient-position: initial;\n --tw-gradient-from: #0000;\n --tw-gradient-via: #0000;\n --tw-gradient-to: #0000;\n --tw-gradient-stops: initial;\n --tw-gradient-via-stops: initial;\n --tw-gradient-from-position: 0%;\n --tw-gradient-via-position: 50%;\n --tw-gradient-to-position: 100%;\n --tw-leading: initial;\n --tw-font-weight: initial;\n --tw-tracking: initial;\n --tw-ordinal: initial;\n --tw-slashed-zero: initial;\n --tw-numeric-figure: initial;\n --tw-numeric-spacing: initial;\n --tw-numeric-fraction: initial;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-color: initial;\n --tw-shadow-alpha: 100%;\n --tw-inset-shadow: 0 0 #0000;\n --tw-inset-shadow-color: initial;\n --tw-inset-shadow-alpha: 100%;\n --tw-ring-color: initial;\n --tw-ring-shadow: 0 0 #0000;\n --tw-inset-ring-color: initial;\n --tw-inset-ring-shadow: 0 0 #0000;\n --tw-ring-inset: initial;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-outline-style: solid;\n --tw-backdrop-blur: initial;\n --tw-backdrop-brightness: initial;\n --tw-backdrop-contrast: initial;\n --tw-backdrop-grayscale: initial;\n --tw-backdrop-hue-rotate: initial;\n --tw-backdrop-invert: initial;\n --tw-backdrop-opacity: initial;\n --tw-backdrop-saturate: initial;\n --tw-backdrop-sepia: initial;\n --tw-duration: initial;\n --tw-ease: initial;\n --tw-content: \"\";\n --tw-animation-delay: 0s;\n --tw-animation-direction: normal;\n --tw-animation-duration: initial;\n --tw-animation-fill-mode: none;\n --tw-animation-iteration-count: 1;\n --tw-enter-blur: 0;\n --tw-enter-opacity: 1;\n --tw-enter-rotate: 0;\n --tw-enter-scale: 1;\n --tw-enter-translate-x: 0;\n --tw-enter-translate-y: 0;\n --tw-exit-blur: 0;\n --tw-exit-opacity: 1;\n --tw-exit-rotate: 0;\n --tw-exit-scale: 1;\n --tw-exit-translate-x: 0;\n --tw-exit-translate-y: 0;\n }\n }\n}\n"],"names":[],"mappings":"AACA;EAkkLE;IACE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAlkLJ;EAEE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAA;IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAFF;EA2HE;;;;;;;EAAA;;;;;;;EAMA;;;;;;;;;;EASA;;;;;;EAKA;;;;;EAIA;;;;;EAIA;;;;;;;EAKA;;;;EAGA;;;;;;;EAMA;;;;EAGA;;;;;;;EAMA;;;;EAGA;;;;EAGA;;;;;;EAKA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;;EAIA;;;;;EAIA;;;;;;;;;;;EAAA;;;;;;;;;;;EAUA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;IACE;;;;IAEE;MAAgD;;;;;;EAKpD;;;;EAGA;;;;EAGA;;;;;EAIA;;;;EAGA;;;;EAGA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAAA;;;;EAGA;;;;EAAA;;;;EAGA;;;;EA8iKA;;;;;EAGE;IAAgD;;;;;EAIlD;;;;;;AA/zKF;;AAAA;EA+QE;;;;EAIA;;;;EAIA;;;;EAGA;;;;EAGA;;;;;;;;;;;;EAWA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;;;;EAMA;;;;;;;EAMA;;;;;;;EAMA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAG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B;;;;EAEE;IAAgD;;;;;EAG5B;;;;EAEtB;;;;EAEE;IAAgD;;;;;EAG5B;;;;EAEtB;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;EAGA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;E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"}}] } \ No newline at end of file diff --git a/saintBarthVolleyApp/frontend/.next/dev/static/chunks/node_modules_next_dist_client_17643121._.js b/saintBarthVolleyApp/frontend/.next/dev/static/chunks/node_modules_next_dist_client_17643121._.js index ebd6751..e8e4d3b 100644 --- a/saintBarthVolleyApp/frontend/.next/dev/static/chunks/node_modules_next_dist_client_17643121._.js +++ b/saintBarthVolleyApp/frontend/.next/dev/static/chunks/node_modules_next_dist_client_17643121._.js @@ -5854,9 +5854,17 @@ const normalizePathTrailingSlash = (path)=>{ return path; } const { pathname, query, hash } = (0, _parsepath.parsePath)(path); - if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + if ("TURBOPACK compile-time truthy", 1) { + if (/\.[^/]+\/?$/.test(pathname)) { + return `${(0, _removetrailingslash.removeTrailingSlash)(pathname)}${query}${hash}`; + } else if (pathname.endsWith('/')) { + return `${pathname}${query}${hash}`; + } else { + return `${pathname}/${query}${hash}`; + } + } + //TURBOPACK unreachable ; - return `${(0, _removetrailingslash.removeTrailingSlash)(pathname)}${query}${hash}`; }; if ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') { Object.defineProperty(exports.default, '__esModule', { diff --git a/saintBarthVolleyApp/frontend/.next/dev/static/chunks/node_modules_next_dist_client_17643121._.js.map b/saintBarthVolleyApp/frontend/.next/dev/static/chunks/node_modules_next_dist_client_17643121._.js.map index cc7e391..2f54d72 100644 --- a/saintBarthVolleyApp/frontend/.next/dev/static/chunks/node_modules_next_dist_client_17643121._.js.map +++ b/saintBarthVolleyApp/frontend/.next/dev/static/chunks/node_modules_next_dist_client_17643121._.js.map @@ -45,55 +45,55 @@ {"offset": {"line": 4443, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/segment-cache/vary-path.ts"],"sourcesContent":["import { FetchStrategy } from './types'\nimport type {\n NormalizedPathname,\n NormalizedSearch,\n NormalizedNextUrl,\n} from './cache-key'\nimport type { RouteTree } from './cache'\nimport { Fallback, type FallbackType } from './cache-map'\nimport { HEAD_REQUEST_KEY } from '../../../shared/lib/segment-cache/segment-value-encoding'\n\ntype Opaque = T & { __brand: K }\n\n/**\n * A linked-list of all the params (or other param-like) inputs that a cache\n * entry may vary by. This is used by the CacheMap module to reuse cache entries\n * across different param values. If a param has a value of Fallback, it means\n * the cache entry is reusable for all possible values of that param. See\n * cache-map.ts for details.\n *\n * A segment's vary path is a pure function of a segment's position in a\n * particular route tree and the (post-rewrite) URL that is being queried. More\n * concretely, successive queries of the cache for the same segment always use\n * the same vary path.\n *\n * A route's vary path is simpler: it's comprised of the pathname, search\n * string, and Next-URL header.\n */\nexport type VaryPath = {\n value: string | null | FallbackType\n parent: VaryPath | null\n}\n\n// Because it's so important for vary paths to line up across cache accesses,\n// we use opaque type aliases to ensure these are only created within\n// this module.\n\n// requestKey -> searchParams -> nextUrl\nexport type RouteVaryPath = Opaque<\n {\n value: NormalizedPathname\n parent: {\n value: NormalizedSearch\n parent: {\n value: NormalizedNextUrl | null | FallbackType\n parent: null\n }\n }\n },\n 'RouteVaryPath'\n>\n\n// requestKey -> pathParams\nexport type LayoutVaryPath = Opaque<\n {\n value: string\n parent: PartialSegmentVaryPath | null\n },\n 'LayoutVaryPath'\n>\n\n// requestKey -> searchParams -> pathParams\nexport type PageVaryPath = Opaque<\n {\n value: string\n parent: {\n value: NormalizedSearch | FallbackType\n parent: PartialSegmentVaryPath | null\n }\n },\n 'PageVaryPath'\n>\n\nexport type SegmentVaryPath = LayoutVaryPath | PageVaryPath\n\n// Intermediate type used when building a vary path during a recursive traversal\n// of the route tree.\nexport type PartialSegmentVaryPath = Opaque\n\nexport function getRouteVaryPath(\n pathname: NormalizedPathname,\n search: NormalizedSearch,\n nextUrl: NormalizedNextUrl | null\n): RouteVaryPath {\n // requestKey -> searchParams -> nextUrl\n const varyPath: VaryPath = {\n value: pathname,\n parent: {\n value: search,\n parent: {\n value: nextUrl,\n parent: null,\n },\n },\n }\n return varyPath as RouteVaryPath\n}\n\nexport function getFulfilledRouteVaryPath(\n pathname: NormalizedPathname,\n search: NormalizedSearch,\n nextUrl: NormalizedNextUrl | null,\n couldBeIntercepted: boolean\n): RouteVaryPath {\n // This is called when a route's data is fulfilled. The cache entry will be\n // re-keyed based on which inputs the response varies by.\n // requestKey -> searchParams -> nextUrl\n const varyPath: VaryPath = {\n value: pathname,\n parent: {\n value: search,\n parent: {\n value: couldBeIntercepted ? nextUrl : Fallback,\n parent: null,\n },\n },\n }\n return varyPath as RouteVaryPath\n}\n\nexport function appendLayoutVaryPath(\n parentPath: PartialSegmentVaryPath | null,\n cacheKey: string\n): PartialSegmentVaryPath {\n const varyPathPart: VaryPath = {\n value: cacheKey,\n parent: parentPath,\n }\n return varyPathPart as PartialSegmentVaryPath\n}\n\nexport function finalizeLayoutVaryPath(\n requestKey: string,\n varyPath: PartialSegmentVaryPath | null\n): LayoutVaryPath {\n const layoutVaryPath: VaryPath = {\n value: requestKey,\n parent: varyPath,\n }\n return layoutVaryPath as LayoutVaryPath\n}\n\nexport function finalizePageVaryPath(\n requestKey: string,\n renderedSearch: NormalizedSearch,\n varyPath: PartialSegmentVaryPath | null\n): PageVaryPath {\n // Unlike layouts, a page segment's vary path also includes the search string.\n // requestKey -> searchParams -> pathParams\n const pageVaryPath: VaryPath = {\n value: requestKey,\n parent: {\n value: renderedSearch,\n parent: varyPath,\n },\n }\n return pageVaryPath as PageVaryPath\n}\n\nexport function finalizeMetadataVaryPath(\n pageRequestKey: string,\n renderedSearch: NormalizedSearch,\n varyPath: PartialSegmentVaryPath | null\n): PageVaryPath {\n // The metadata \"segment\" is not a real segment because it doesn't exist in\n // the normal structure of the route tree, but in terms of caching, it\n // behaves like a page segment because it varies by all the same params as\n // a page.\n //\n // To keep the protocol for querying the server simple, the request key for\n // the metadata does not include any path information. It's unnecessary from\n // the server's perspective, because unlike page segments, there's only one\n // metadata response per URL, i.e. there's no need to distinguish multiple\n // parallel pages.\n //\n // However, this means the metadata request key is insufficient for\n // caching the the metadata in the client cache, because on the client we\n // use the request key to distinguish the metadata entry from all other\n // page's metadata entries.\n //\n // So instead we create a simulated request key based on the page segment.\n // Conceptually this is equivalent to the request key the server would have\n // assigned the metadata segment if it treated it as part of the actual\n // route structure.\n\n // If there are multiple parallel pages, we use whichever is the first one.\n // This is fine because the only difference between request keys for\n // different parallel pages are things like route groups and parallel\n // route slots. As long as it's always the same one, it doesn't matter.\n const pageVaryPath: VaryPath = {\n // Append the actual metadata request key to the page request key. Note\n // that we're not using a separate vary path part; it's unnecessary because\n // these are not conceptually separate inputs.\n value: pageRequestKey + HEAD_REQUEST_KEY,\n parent: {\n value: renderedSearch,\n parent: varyPath,\n },\n }\n return pageVaryPath as PageVaryPath\n}\n\nexport function getSegmentVaryPathForRequest(\n fetchStrategy: FetchStrategy,\n tree: RouteTree\n): SegmentVaryPath {\n // This is used for storing pending requests in the cache. We want to choose\n // the most generic vary path based on the strategy used to fetch it, i.e.\n // static/PPR versus runtime prefetching, so that it can be reused as much\n // as possible.\n //\n // We may be able to re-key the response to something even more generic once\n // we receive it — for example, if the server tells us that the response\n // doesn't vary on a particular param — but even before we send the request,\n // we know some params are reusable based on the fetch strategy alone. For\n // example, a static prefetch will never vary on search params.\n //\n // The original vary path with all the params filled in is stored on the\n // route tree object. We will clone this one to create a new vary path\n // where certain params are replaced with Fallback.\n //\n // This result of this function is not stored anywhere. It's only used to\n // access the cache a single time.\n //\n // TODO: Rather than create a new list object just to access the cache, the\n // plan is to add the concept of a \"vary mask\". This will represent all the\n // params that can be treated as Fallback. (Or perhaps the inverse.)\n const originalVaryPath = tree.varyPath\n\n // Only page segments (and the special \"metadata\" segment, which is treated\n // like a page segment for the purposes of caching) may contain search\n // params. There's no reason to include them in the vary path otherwise.\n if (tree.isPage) {\n // Only a runtime prefetch will include search params in the vary path.\n // Static prefetches never include search params, so they can be reused\n // across all possible search param values.\n const doesVaryOnSearchParams =\n fetchStrategy === FetchStrategy.Full ||\n fetchStrategy === FetchStrategy.PPRRuntime\n\n if (!doesVaryOnSearchParams) {\n // The response from the the server will not vary on search params. Clone\n // the end of the original vary path to replace the search params\n // with Fallback.\n //\n // requestKey -> searchParams -> pathParams\n // ^ This part gets replaced with Fallback\n const searchParamsVaryPath = (originalVaryPath as PageVaryPath).parent\n const pathParamsVaryPath = searchParamsVaryPath.parent\n const patchedVaryPath: VaryPath = {\n value: originalVaryPath.value,\n parent: {\n value: Fallback,\n parent: pathParamsVaryPath,\n },\n }\n return patchedVaryPath as SegmentVaryPath\n }\n }\n\n // The request does vary on search params. We don't need to modify anything.\n return originalVaryPath as SegmentVaryPath\n}\n\nexport function clonePageVaryPathWithNewSearchParams(\n originalVaryPath: PageVaryPath,\n newSearch: NormalizedSearch\n): PageVaryPath {\n // requestKey -> searchParams -> pathParams\n // ^ This part gets replaced with newSearch\n const searchParamsVaryPath = originalVaryPath.parent\n const clonedVaryPath: VaryPath = {\n value: originalVaryPath.value,\n parent: {\n value: newSearch,\n parent: searchParamsVaryPath.parent,\n },\n }\n return clonedVaryPath as PageVaryPath\n}\n"],"names":["appendLayoutVaryPath","clonePageVaryPathWithNewSearchParams","finalizeLayoutVaryPath","finalizeMetadataVaryPath","finalizePageVaryPath","getFulfilledRouteVaryPath","getRouteVaryPath","getSegmentVaryPathForRequest","pathname","search","nextUrl","varyPath","value","parent","couldBeIntercepted","Fallback","parentPath","cacheKey","varyPathPart","requestKey","layoutVaryPath","renderedSearch","pageVaryPath","pageRequestKey","HEAD_REQUEST_KEY","fetchStrategy","tree","originalVaryPath","isPage","doesVaryOnSearchParams","FetchStrategy","Full","PPRRuntime","searchParamsVaryPath","pathParamsVaryPath","patchedVaryPath","newSearch","clonedVaryPath"],"mappings":"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","ignoreList":[0]}}, {"offset": {"line": 4661, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/segment-cache/cache-key.ts"],"sourcesContent":["// TypeScript trick to simulate opaque types, like in Flow.\ntype Opaque = T & { __brand: K }\n\n// Only functions in this module should be allowed to create CacheKeys.\nexport type NormalizedPathname = Opaque<'NormalizedPathname', string>\nexport type NormalizedSearch = Opaque<'NormalizedSearch', string>\nexport type NormalizedNextUrl = Opaque<'NormalizedNextUrl', string>\n\nexport type RouteCacheKey = Opaque<\n 'RouteCacheKey',\n {\n pathname: NormalizedPathname\n search: NormalizedSearch\n nextUrl: NormalizedNextUrl | null\n\n // TODO: Eventually the dynamic params will be added here, too.\n }\n>\n\nexport function createCacheKey(\n originalHref: string,\n nextUrl: string | null\n): RouteCacheKey {\n const originalUrl = new URL(originalHref)\n const cacheKey = {\n pathname: originalUrl.pathname as NormalizedPathname,\n search: originalUrl.search as NormalizedSearch,\n nextUrl: nextUrl as NormalizedNextUrl | null,\n } as RouteCacheKey\n return cacheKey\n}\n"],"names":["createCacheKey","originalHref","nextUrl","originalUrl","URL","cacheKey","pathname","search"],"mappings":"AAAA,2DAA2D;;;;+BAmB3CA,kBAAAA;;;eAAAA;;;AAAT,SAASA,eACdC,YAAoB,EACpBC,OAAsB;IAEtB,MAAMC,cAAc,IAAIC,IAAIH;IAC5B,MAAMI,WAAW;QACfC,UAAUH,YAAYG,QAAQ;QAC9BC,QAAQJ,YAAYI,MAAM;QAC1BL,SAASA;IACX;IACA,OAAOG;AACT","ignoreList":[0]}}, {"offset": {"line": 4691, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/segment-cache/scheduler.ts"],"sourcesContent":["import type {\n FlightRouterState,\n Segment as FlightRouterStateSegment,\n Segment,\n} from '../../../shared/lib/app-router-types'\nimport { HasLoadingBoundary } from '../../../shared/lib/app-router-types'\nimport { matchSegment } from '../match-segments'\nimport {\n readOrCreateRouteCacheEntry,\n readOrCreateSegmentCacheEntry,\n fetchRouteOnCacheMiss,\n fetchSegmentOnCacheMiss,\n EntryStatus,\n type FulfilledRouteCacheEntry,\n type RouteCacheEntry,\n type SegmentCacheEntry,\n type RouteTree,\n fetchSegmentPrefetchesUsingDynamicRequest,\n type PendingSegmentCacheEntry,\n convertRouteTreeToFlightRouterState,\n readOrCreateRevalidatingSegmentEntry,\n upsertSegmentEntry,\n type FulfilledSegmentCacheEntry,\n upgradeToPendingSegment,\n waitForSegmentCacheEntry,\n overwriteRevalidatingSegmentCacheEntry,\n canNewFetchStrategyProvideMoreContent,\n} from './cache'\nimport { getSegmentVaryPathForRequest, type SegmentVaryPath } from './vary-path'\nimport type { RouteCacheKey } from './cache-key'\nimport { createCacheKey } from './cache-key'\nimport {\n FetchStrategy,\n type PrefetchTaskFetchStrategy,\n PrefetchPriority,\n} from './types'\nimport { getCurrentCacheVersion } from './cache'\nimport {\n addSearchParamsIfPageSegment,\n PAGE_SEGMENT_KEY,\n} from '../../../shared/lib/segment'\nimport type { SegmentRequestKey } from '../../../shared/lib/segment-cache/segment-value-encoding'\n\nconst scheduleMicrotask =\n typeof queueMicrotask === 'function'\n ? queueMicrotask\n : (fn: () => unknown) =>\n Promise.resolve()\n .then(fn)\n .catch((error) =>\n setTimeout(() => {\n throw error\n })\n )\n\nexport type PrefetchTask = {\n key: RouteCacheKey\n\n /**\n * The FlightRouterState at the time the task was initiated. This is needed\n * when falling back to the non-PPR behavior, which only prefetches up to\n * the first loading boundary.\n */\n treeAtTimeOfPrefetch: FlightRouterState\n\n /**\n * The cache version at the time the task was initiated. This is used to\n * determine if the cache was invalidated since the task was initiated.\n */\n cacheVersion: number\n\n /**\n * Whether to prefetch dynamic data, in addition to static data. This is\n * used by ``.\n *\n * Note that a task with `FetchStrategy.PPR` might need to use\n * `FetchStrategy.LoadingBoundary` instead if we find out that a route\n * does not support PPR after doing the initial route prefetch.\n */\n fetchStrategy: PrefetchTaskFetchStrategy\n\n /**\n * sortId is an incrementing counter\n *\n * Newer prefetches are prioritized over older ones, so that as new links\n * enter the viewport, they are not starved by older links that are no\n * longer relevant. In the future, we can add additional prioritization\n * heuristics, like removing prefetches once a link leaves the viewport.\n *\n * The sortId is assigned when the prefetch is initiated, and reassigned if\n * the same task is prefetched again (effectively bumping it to the top of\n * the queue).\n *\n * TODO: We can add additional fields here to indicate what kind of prefetch\n * it is. For example, was it initiated by a link? Or was it an imperative\n * call? If it was initiated by a link, we can remove it from the queue when\n * the link leaves the viewport, but if it was an imperative call, then we\n * should keep it in the queue until it's fulfilled.\n *\n * We can also add priority levels. For example, hovering over a link could\n * increase the priority of its prefetch.\n */\n sortId: number\n\n /**\n * The priority of the task. Like sortId, this affects the task's position in\n * the queue, so it must never be updated without resifting the heap.\n */\n priority: PrefetchPriority\n\n /**\n * The phase of the task. Tasks are split into multiple phases so that their\n * priority can be adjusted based on what kind of work they're doing.\n * Concretely, prefetching the route tree is higher priority than prefetching\n * segment data.\n */\n phase: PrefetchPhase\n\n /**\n * These fields are temporary state for tracking the currently running task.\n * They are reset after each iteration of the task queue.\n */\n hasBackgroundWork: boolean\n spawnedRuntimePrefetches: Set | null\n\n /**\n * True if the prefetch was cancelled.\n */\n isCanceled: boolean\n\n /**\n * The callback passed to `router.prefetch`, if given.\n */\n onInvalidate: null | (() => void)\n\n /**\n * The index of the task in the heap's backing array. Used to efficiently\n * change the priority of a task by re-sifting it, which requires knowing\n * where it is in the array. This is only used internally by the heap\n * algorithm. The naive alternative is indexOf every time a task is queued,\n * which has O(n) complexity.\n *\n * We also use this field to check whether a task is currently in the queue.\n */\n _heapIndex: number\n}\n\nconst enum PrefetchTaskExitStatus {\n /**\n * The task yielded because there are too many requests in progress.\n */\n InProgress,\n\n /**\n * The task is blocked. It needs more data before it can proceed.\n *\n * Currently the only reason this happens is we're still waiting to receive a\n * route tree from the server, because we can't start prefetching the segments\n * until we know what to prefetch.\n */\n Blocked,\n\n /**\n * There's nothing left to prefetch.\n */\n Done,\n}\n\n/**\n * Prefetch tasks are processed in two phases: first the route tree is fetched,\n * then the segments. We use this to priortize tasks that have not yet fetched\n * the route tree.\n */\nconst enum PrefetchPhase {\n RouteTree = 1,\n Segments = 0,\n}\n\nexport type PrefetchSubtaskResult = {\n /**\n * A promise that resolves when the network connection is closed.\n */\n closed: Promise\n value: T\n}\n\nconst taskHeap: Array = []\n\nlet inProgressRequests = 0\n\nlet sortIdCounter = 0\nlet didScheduleMicrotask = false\n\n// The most recently hovered (or touched, etc) link, i.e. the most recent task\n// scheduled at Intent priority. There's only ever a single task at Intent\n// priority at a time. We reserve special network bandwidth for this task only.\nlet mostRecentlyHoveredLink: PrefetchTask | null = null\n\n// CDN cache propagation delay after revalidation (in milliseconds)\nconst REVALIDATION_COOLDOWN_MS = 300\n\n// Timeout handle for the revalidation cooldown. When non-null, prefetch\n// requests are blocked to allow CDN cache propagation.\nlet revalidationCooldownTimeoutHandle: ReturnType | null =\n null\n\n/**\n * Called by the cache when revalidation occurs. Starts a cooldown period\n * during which prefetch requests are blocked to allow CDN cache propagation.\n */\nexport function startRevalidationCooldown(): void {\n // Clear any existing timeout in case multiple revalidations happen\n // in quick succession.\n if (revalidationCooldownTimeoutHandle !== null) {\n clearTimeout(revalidationCooldownTimeoutHandle)\n }\n\n // Schedule the cooldown to expire after the delay.\n revalidationCooldownTimeoutHandle = setTimeout(() => {\n revalidationCooldownTimeoutHandle = null\n // Retry the prefetch queue now that the cooldown has expired.\n ensureWorkIsScheduled()\n }, REVALIDATION_COOLDOWN_MS)\n}\n\nexport type IncludeDynamicData = null | 'full' | 'dynamic'\n\n/**\n * Initiates a prefetch task for the given URL. If a prefetch for the same URL\n * is already in progress, this will bump it to the top of the queue.\n *\n * This is not a user-facing function. By the time this is called, the href is\n * expected to be validated and normalized.\n *\n * @param key The RouteCacheKey to prefetch.\n * @param treeAtTimeOfPrefetch The app's current FlightRouterState\n * @param fetchStrategy Whether to prefetch dynamic data, in addition to\n * static data. This is used by ``.\n */\nexport function schedulePrefetchTask(\n key: RouteCacheKey,\n treeAtTimeOfPrefetch: FlightRouterState,\n fetchStrategy: PrefetchTaskFetchStrategy,\n priority: PrefetchPriority,\n onInvalidate: null | (() => void)\n): PrefetchTask {\n // Spawn a new prefetch task\n const task: PrefetchTask = {\n key,\n treeAtTimeOfPrefetch,\n cacheVersion: getCurrentCacheVersion(),\n priority,\n phase: PrefetchPhase.RouteTree,\n hasBackgroundWork: false,\n spawnedRuntimePrefetches: null,\n fetchStrategy,\n sortId: sortIdCounter++,\n isCanceled: false,\n onInvalidate,\n _heapIndex: -1,\n }\n\n trackMostRecentlyHoveredLink(task)\n\n heapPush(taskHeap, task)\n\n // Schedule an async task to process the queue.\n //\n // The main reason we process the queue in an async task is for batching.\n // It's common for a single JS task/event to trigger multiple prefetches.\n // By deferring to a microtask, we only process the queue once per JS task.\n // If they have different priorities, it also ensures they are processed in\n // the optimal order.\n ensureWorkIsScheduled()\n\n return task\n}\n\nexport function cancelPrefetchTask(task: PrefetchTask): void {\n // Remove the prefetch task from the queue. If the task already completed,\n // then this is a no-op.\n //\n // We must also explicitly mark the task as canceled so that a blocked task\n // does not get added back to the queue when it's pinged by the network.\n task.isCanceled = true\n heapDelete(taskHeap, task)\n}\n\nexport function reschedulePrefetchTask(\n task: PrefetchTask,\n treeAtTimeOfPrefetch: FlightRouterState,\n fetchStrategy: PrefetchTaskFetchStrategy,\n priority: PrefetchPriority\n): void {\n // Bump the prefetch task to the top of the queue, as if it were a fresh\n // task. This is essentially the same as canceling the task and scheduling\n // a new one, except it reuses the original object.\n //\n // The primary use case is to increase the priority of a Link-initated\n // prefetch on hover.\n\n // Un-cancel the task, in case it was previously canceled.\n task.isCanceled = false\n task.phase = PrefetchPhase.RouteTree\n\n // Assign a new sort ID to move it ahead of all other tasks at the same\n // priority level. (Higher sort IDs are processed first.)\n task.sortId = sortIdCounter++\n task.priority =\n // If this task is the most recently hovered link, maintain its\n // Intent priority, even if the rescheduled priority is lower.\n task === mostRecentlyHoveredLink ? PrefetchPriority.Intent : priority\n\n task.treeAtTimeOfPrefetch = treeAtTimeOfPrefetch\n task.fetchStrategy = fetchStrategy\n\n trackMostRecentlyHoveredLink(task)\n\n if (task._heapIndex !== -1) {\n // The task is already in the queue.\n heapResift(taskHeap, task)\n } else {\n heapPush(taskHeap, task)\n }\n ensureWorkIsScheduled()\n}\n\nexport function isPrefetchTaskDirty(\n task: PrefetchTask,\n nextUrl: string | null,\n tree: FlightRouterState\n): boolean {\n // This is used to quickly bail out of a prefetch task if the result is\n // guaranteed to not have changed since the task was initiated. This is\n // strictly an optimization — theoretically, if it always returned true, no\n // behavior should change because a full prefetch task will effectively\n // perform the same checks.\n const currentCacheVersion = getCurrentCacheVersion()\n return (\n task.cacheVersion !== currentCacheVersion ||\n task.treeAtTimeOfPrefetch !== tree ||\n task.key.nextUrl !== nextUrl\n )\n}\n\nfunction trackMostRecentlyHoveredLink(task: PrefetchTask) {\n // Track the mostly recently hovered link, i.e. the most recently scheduled\n // task at Intent priority. There must only be one such task at a time.\n if (\n task.priority === PrefetchPriority.Intent &&\n task !== mostRecentlyHoveredLink\n ) {\n if (mostRecentlyHoveredLink !== null) {\n // Bump the previously hovered link's priority down to Default.\n if (mostRecentlyHoveredLink.priority !== PrefetchPriority.Background) {\n mostRecentlyHoveredLink.priority = PrefetchPriority.Default\n heapResift(taskHeap, mostRecentlyHoveredLink)\n }\n }\n mostRecentlyHoveredLink = task\n }\n}\n\nfunction ensureWorkIsScheduled() {\n if (didScheduleMicrotask) {\n // Already scheduled a task to process the queue\n return\n }\n didScheduleMicrotask = true\n scheduleMicrotask(processQueueInMicrotask)\n}\n\n/**\n * Checks if we've exceeded the maximum number of concurrent prefetch requests,\n * to avoid saturating the browser's internal network queue. This is a\n * cooperative limit — prefetch tasks should check this before issuing\n * new requests.\n *\n * Also checks if we're within the revalidation cooldown window, during which\n * prefetch requests are delayed to allow CDN cache propagation.\n */\nfunction hasNetworkBandwidth(task: PrefetchTask): boolean {\n // Check if we're within the revalidation cooldown window\n if (revalidationCooldownTimeoutHandle !== null) {\n // We're within the cooldown window. Return false to prevent prefetching.\n // When the cooldown expires, the timeout will call ensureWorkIsScheduled()\n // to retry the queue.\n return false\n }\n\n // TODO: Also check if there's an in-progress navigation. We should never\n // add prefetch requests to the network queue if an actual navigation is\n // taking place, to ensure there's sufficient bandwidth for render-blocking\n // data and resources.\n\n // TODO: Consider reserving some amount of bandwidth for static prefetches.\n\n if (task.priority === PrefetchPriority.Intent) {\n // The most recently hovered link is allowed to exceed the default limit.\n //\n // The goal is to always have enough bandwidth to start a new prefetch\n // request when hovering over a link.\n //\n // However, because we don't abort in-progress requests, it's still possible\n // we'll run out of bandwidth. When links are hovered in quick succession,\n // there could be multiple hover requests running simultaneously.\n return inProgressRequests < 12\n }\n\n // The default limit is lower than the limit for a hovered link.\n return inProgressRequests < 4\n}\n\nfunction spawnPrefetchSubtask(\n prefetchSubtask: Promise | null>\n): Promise {\n // When the scheduler spawns an async task, we don't await its result.\n // Instead, the async task writes its result directly into the cache, then\n // pings the scheduler to continue.\n //\n // We process server responses streamingly, so the prefetch subtask will\n // likely resolve before we're finished receiving all the data. The subtask\n // result includes a promise that resolves once the network connection is\n // closed. The scheduler uses this to control network bandwidth by tracking\n // and limiting the number of concurrent requests.\n inProgressRequests++\n return prefetchSubtask.then((result) => {\n if (result === null) {\n // The prefetch task errored before it could start processing the\n // network stream. Assume the connection is closed.\n onPrefetchConnectionClosed()\n return null\n }\n // Wait for the connection to close before freeing up more bandwidth.\n result.closed.then(onPrefetchConnectionClosed)\n return result.value\n })\n}\n\nfunction onPrefetchConnectionClosed(): void {\n inProgressRequests--\n\n // Notify the scheduler that we have more bandwidth, and can continue\n // processing tasks.\n ensureWorkIsScheduled()\n}\n\n/**\n * Notify the scheduler that we've received new data for an in-progress\n * prefetch. The corresponding task will be added back to the queue (unless the\n * task has been canceled in the meantime).\n */\nexport function pingPrefetchTask(task: PrefetchTask) {\n // \"Ping\" a prefetch that's already in progress to notify it of new data.\n if (\n // Check if prefetch was canceled.\n task.isCanceled ||\n // Check if prefetch is already queued.\n task._heapIndex !== -1\n ) {\n return\n }\n // Add the task back to the queue.\n heapPush(taskHeap, task)\n ensureWorkIsScheduled()\n}\n\nfunction processQueueInMicrotask() {\n didScheduleMicrotask = false\n\n // We aim to minimize how often we read the current time. Since nearly all\n // functions in the prefetch scheduler are synchronous, we can read the time\n // once and pass it as an argument wherever it's needed.\n const now = Date.now()\n\n // Process the task queue until we run out of network bandwidth.\n let task = heapPeek(taskHeap)\n while (task !== null && hasNetworkBandwidth(task)) {\n task.cacheVersion = getCurrentCacheVersion()\n\n const exitStatus = pingRoute(now, task)\n\n // These fields are only valid for a single attempt. Reset them after each\n // iteration of the task queue.\n const hasBackgroundWork = task.hasBackgroundWork\n task.hasBackgroundWork = false\n task.spawnedRuntimePrefetches = null\n\n switch (exitStatus) {\n case PrefetchTaskExitStatus.InProgress:\n // The task yielded because there are too many requests in progress.\n // Stop processing tasks until we have more bandwidth.\n return\n case PrefetchTaskExitStatus.Blocked:\n // The task is blocked. It needs more data before it can proceed.\n // Keep the task out of the queue until the server responds.\n heapPop(taskHeap)\n // Continue to the next task\n task = heapPeek(taskHeap)\n continue\n case PrefetchTaskExitStatus.Done:\n if (task.phase === PrefetchPhase.RouteTree) {\n // Finished prefetching the route tree. Proceed to prefetching\n // the segments.\n task.phase = PrefetchPhase.Segments\n heapResift(taskHeap, task)\n } else if (hasBackgroundWork) {\n // The task spawned additional background work. Reschedule the task\n // at background priority.\n task.priority = PrefetchPriority.Background\n heapResift(taskHeap, task)\n } else {\n // The prefetch is complete. Continue to the next task.\n heapPop(taskHeap)\n }\n task = heapPeek(taskHeap)\n continue\n default:\n exitStatus satisfies never\n }\n }\n}\n\n/**\n * Check this during a prefetch task to determine if background work can be\n * performed. If so, it evaluates to `true`. Otherwise, it returns `false`,\n * while also scheduling a background task to run later. Usage:\n *\n * @example\n * if (background(task)) {\n * // Perform background-pri work\n * }\n */\nfunction background(task: PrefetchTask): boolean {\n if (task.priority === PrefetchPriority.Background) {\n return true\n }\n task.hasBackgroundWork = true\n return false\n}\n\nfunction pingRoute(now: number, task: PrefetchTask): PrefetchTaskExitStatus {\n const key = task.key\n const route = readOrCreateRouteCacheEntry(now, task, key)\n const exitStatus = pingRootRouteTree(now, task, route)\n\n if (exitStatus !== PrefetchTaskExitStatus.InProgress && key.search !== '') {\n // If the URL has a non-empty search string, also prefetch the pathname\n // without the search string. We use the searchless route tree as a base for\n // optimistic routing; see requestOptimisticRouteCacheEntry for details.\n //\n // Note that we don't need to prefetch any of the segment data. Just the\n // route tree.\n //\n // TODO: This is a temporary solution; the plan is to replace this by adding\n // a wildcard lookup method to the TupleMap implementation. This is\n // non-trivial to implement because it needs to account for things like\n // fallback route entries, hence this temporary workaround.\n const url = new URL(key.pathname, location.origin)\n const keyWithoutSearch = createCacheKey(url.href, key.nextUrl)\n const routeWithoutSearch = readOrCreateRouteCacheEntry(\n now,\n task,\n keyWithoutSearch\n )\n switch (routeWithoutSearch.status) {\n case EntryStatus.Empty: {\n if (background(task)) {\n routeWithoutSearch.status = EntryStatus.Pending\n spawnPrefetchSubtask(\n fetchRouteOnCacheMiss(routeWithoutSearch, task, keyWithoutSearch)\n )\n }\n break\n }\n case EntryStatus.Pending:\n case EntryStatus.Fulfilled:\n case EntryStatus.Rejected: {\n // Either the route tree is already cached, or there's already a\n // request in progress. Since we don't need to fetch any segment data\n // for this route, there's nothing left to do.\n break\n }\n default:\n routeWithoutSearch satisfies never\n }\n }\n\n return exitStatus\n}\n\nfunction pingRootRouteTree(\n now: number,\n task: PrefetchTask,\n route: RouteCacheEntry\n): PrefetchTaskExitStatus {\n switch (route.status) {\n case EntryStatus.Empty: {\n // Route is not yet cached, and there's no request already in progress.\n // Spawn a task to request the route, load it into the cache, and ping\n // the task to continue.\n\n // TODO: There are multiple strategies in the API for prefetching\n // a route. Currently we've only implemented the main one: per-segment,\n // static-data only.\n //\n // There's also ``\n // which prefetch both static *and* dynamic data.\n // Similarly, we need to fallback to the old, per-page\n // behavior if PPR is disabled for a route (via the incremental opt-in).\n //\n // Those cases will be handled here.\n spawnPrefetchSubtask(fetchRouteOnCacheMiss(route, task, task.key))\n\n // If the request takes longer than a minute, a subsequent request should\n // retry instead of waiting for this one. When the response is received,\n // this value will be replaced by a new value based on the stale time sent\n // from the server.\n // TODO: We should probably also manually abort the fetch task, to reclaim\n // server bandwidth.\n route.staleAt = now + 60 * 1000\n\n // Upgrade to Pending so we know there's already a request in progress\n route.status = EntryStatus.Pending\n\n // Intentional fallthrough to the Pending branch\n }\n case EntryStatus.Pending: {\n // Still pending. We can't start prefetching the segments until the route\n // tree has loaded. Add the task to the set of blocked tasks so that it\n // is notified when the route tree is ready.\n const blockedTasks = route.blockedTasks\n if (blockedTasks === null) {\n route.blockedTasks = new Set([task])\n } else {\n blockedTasks.add(task)\n }\n return PrefetchTaskExitStatus.Blocked\n }\n case EntryStatus.Rejected: {\n // Route tree failed to load. Treat as a 404.\n return PrefetchTaskExitStatus.Done\n }\n case EntryStatus.Fulfilled: {\n if (task.phase !== PrefetchPhase.Segments) {\n // Do not prefetch segment data until we've entered the segment phase.\n return PrefetchTaskExitStatus.Done\n }\n // Recursively fill in the segment tree.\n if (!hasNetworkBandwidth(task)) {\n // Stop prefetching segments until there's more bandwidth.\n return PrefetchTaskExitStatus.InProgress\n }\n const tree = route.tree\n\n // A task's fetch strategy gets set to `PPR` for any \"auto\" prefetch.\n // If it turned out that the route isn't PPR-enabled, we need to use `LoadingBoundary` instead.\n // We don't need to do this for runtime prefetches, because those are only available in\n // `cacheComponents`, where every route is PPR.\n const fetchStrategy =\n task.fetchStrategy === FetchStrategy.PPR\n ? route.isPPREnabled\n ? FetchStrategy.PPR\n : FetchStrategy.LoadingBoundary\n : task.fetchStrategy\n\n switch (fetchStrategy) {\n case FetchStrategy.PPR: {\n // For Cache Components pages, each segment may be prefetched\n // statically or using a runtime request, based on various\n // configurations and heuristics. We'll do this in two passes: first\n // traverse the tree and perform all the static prefetches.\n //\n // Then, if there are any segments that need a runtime request,\n // do another pass to perform a runtime prefetch.\n pingStaticHead(now, task, route)\n const exitStatus = pingSharedPartOfCacheComponentsTree(\n now,\n task,\n route,\n task.treeAtTimeOfPrefetch,\n tree\n )\n if (exitStatus === PrefetchTaskExitStatus.InProgress) {\n // Child yielded without finishing.\n return PrefetchTaskExitStatus.InProgress\n }\n const spawnedRuntimePrefetches = task.spawnedRuntimePrefetches\n if (spawnedRuntimePrefetches !== null) {\n // During the first pass, we discovered segments that require a\n // runtime prefetch. Do a second pass to construct a request tree.\n const spawnedEntries = new Map<\n SegmentRequestKey,\n PendingSegmentCacheEntry\n >()\n pingRuntimeHead(\n now,\n task,\n route,\n spawnedEntries,\n FetchStrategy.PPRRuntime\n )\n const requestTree = pingRuntimePrefetches(\n now,\n task,\n route,\n tree,\n spawnedRuntimePrefetches,\n spawnedEntries\n )\n let needsDynamicRequest = spawnedEntries.size > 0\n if (needsDynamicRequest) {\n // Perform a dynamic prefetch request and populate the cache with\n // the result.\n spawnPrefetchSubtask(\n fetchSegmentPrefetchesUsingDynamicRequest(\n task,\n route,\n FetchStrategy.PPRRuntime,\n requestTree,\n spawnedEntries\n )\n )\n }\n }\n return PrefetchTaskExitStatus.Done\n }\n case FetchStrategy.Full:\n case FetchStrategy.PPRRuntime:\n case FetchStrategy.LoadingBoundary: {\n // Prefetch multiple segments using a single dynamic request.\n // TODO: We can consolidate this branch with previous one by modeling\n // it as if the first segment in the new tree has runtime prefetching\n // enabled. Will do this as a follow-up refactor. Might want to remove\n // the special metatdata case below first. In the meantime, it's not\n // really that much duplication, just would be nice to remove one of\n // these codepaths.\n const spawnedEntries = new Map<\n SegmentRequestKey,\n PendingSegmentCacheEntry\n >()\n pingRuntimeHead(now, task, route, spawnedEntries, fetchStrategy)\n const dynamicRequestTree = diffRouteTreeAgainstCurrent(\n now,\n task,\n route,\n task.treeAtTimeOfPrefetch,\n tree,\n spawnedEntries,\n fetchStrategy\n )\n let needsDynamicRequest = spawnedEntries.size > 0\n if (needsDynamicRequest) {\n spawnPrefetchSubtask(\n fetchSegmentPrefetchesUsingDynamicRequest(\n task,\n route,\n fetchStrategy,\n dynamicRequestTree,\n spawnedEntries\n )\n )\n }\n return PrefetchTaskExitStatus.Done\n }\n default:\n fetchStrategy satisfies never\n }\n break\n }\n default: {\n route satisfies never\n }\n }\n return PrefetchTaskExitStatus.Done\n}\n\nfunction pingStaticHead(\n now: number,\n task: PrefetchTask,\n route: FulfilledRouteCacheEntry\n): void {\n // The Head data for a page (metadata, viewport) is not really a route\n // segment, in the sense that it doesn't appear in the route tree. But we\n // store it in the cache as if it were, using a special key.\n pingStaticSegmentData(\n now,\n task,\n route,\n readOrCreateSegmentCacheEntry(\n now,\n FetchStrategy.PPR,\n route,\n route.metadata\n ),\n task.key,\n route.metadata\n )\n}\n\nfunction pingRuntimeHead(\n now: number,\n task: PrefetchTask,\n route: FulfilledRouteCacheEntry,\n spawnedEntries: Map,\n fetchStrategy:\n | FetchStrategy.Full\n | FetchStrategy.PPRRuntime\n | FetchStrategy.LoadingBoundary\n): void {\n pingRouteTreeAndIncludeDynamicData(\n now,\n task,\n route,\n route.metadata,\n false,\n spawnedEntries,\n // When prefetching the head, there's no difference between Full\n // and LoadingBoundary\n fetchStrategy === FetchStrategy.LoadingBoundary\n ? FetchStrategy.Full\n : fetchStrategy\n )\n}\n\n// TODO: Rename dynamic -> runtime throughout this module\n\nfunction pingSharedPartOfCacheComponentsTree(\n now: number,\n task: PrefetchTask,\n route: FulfilledRouteCacheEntry,\n oldTree: FlightRouterState,\n newTree: RouteTree\n): PrefetchTaskExitStatus {\n // When Cache Components is enabled (or PPR, or a fully static route when PPR\n // is disabled; those cases are treated equivalently to Cache Components), we\n // start by prefetching each segment individually. Once we reach the \"new\"\n // part of the tree — the part that doesn't exist on the current page — we\n // may choose to switch to a runtime prefetch instead, based on the\n // information sent by the server in the route tree.\n //\n // The traversal starts in the \"shared\" part of the tree. Once we reach the\n // \"new\" part of the tree, we switch to a different traversal,\n // pingNewPartOfCacheComponentsTree.\n\n // Prefetch this segment's static data.\n const segment = readOrCreateSegmentCacheEntry(\n now,\n task.fetchStrategy,\n route,\n newTree\n )\n pingStaticSegmentData(now, task, route, segment, task.key, newTree)\n\n // Recursively ping the children.\n const oldTreeChildren = oldTree[1]\n const newTreeChildren = newTree.slots\n if (newTreeChildren !== null) {\n for (const parallelRouteKey in newTreeChildren) {\n if (!hasNetworkBandwidth(task)) {\n // Stop prefetching segments until there's more bandwidth.\n return PrefetchTaskExitStatus.InProgress\n }\n const newTreeChild = newTreeChildren[parallelRouteKey]\n const newTreeChildSegment = newTreeChild.segment\n const oldTreeChild: FlightRouterState | void =\n oldTreeChildren[parallelRouteKey]\n const oldTreeChildSegment: FlightRouterStateSegment | void =\n oldTreeChild?.[0]\n let childExitStatus\n if (\n oldTreeChildSegment !== undefined &&\n doesCurrentSegmentMatchCachedSegment(\n route,\n newTreeChildSegment,\n oldTreeChildSegment\n )\n ) {\n // We're still in the \"shared\" part of the tree.\n childExitStatus = pingSharedPartOfCacheComponentsTree(\n now,\n task,\n route,\n oldTreeChild,\n newTreeChild\n )\n } else {\n // We've entered the \"new\" part of the tree. Switch\n // traversal functions.\n childExitStatus = pingNewPartOfCacheComponentsTree(\n now,\n task,\n route,\n newTreeChild\n )\n }\n if (childExitStatus === PrefetchTaskExitStatus.InProgress) {\n // Child yielded without finishing.\n return PrefetchTaskExitStatus.InProgress\n }\n }\n }\n\n return PrefetchTaskExitStatus.Done\n}\n\nfunction pingNewPartOfCacheComponentsTree(\n now: number,\n task: PrefetchTask,\n route: FulfilledRouteCacheEntry,\n tree: RouteTree\n): PrefetchTaskExitStatus.InProgress | PrefetchTaskExitStatus.Done {\n // We're now prefetching in the \"new\" part of the tree, the part that doesn't\n // exist on the current page. (In other words, we're deeper than the\n // shared layouts.) Segments in here default to being prefetched statically.\n // However, if the server instructs us to, we may switch to a runtime\n // prefetch instead. Traverse the tree and check at each segment.\n if (tree.hasRuntimePrefetch) {\n // This route has a runtime prefetch response. Since we're below the shared\n // layout, everything from this point should be prefetched using a single,\n // combined runtime request, rather than using per-segment static requests.\n // This is true even if some of the child segments are known to be fully\n // static — once we've decided to perform a runtime prefetch, we might as\n // well respond with the static segments in the same roundtrip. (That's how\n // regular navigations work, too.) We'll still skip over segments that are\n // already cached, though.\n //\n // It's the server's responsibility to set a reasonable value of\n // `hasRuntimePrefetch`. Currently it's user-defined, but eventually, the\n // server may send a value of `false` even if the user opts in, if it\n // determines during build that the route is always fully static. There are\n // more optimizations we can do once we implement fallback param\n // tracking, too.\n //\n // Use the task object to collect the segments that need a runtime prefetch.\n // This will signal to the outer task queue that a second traversal is\n // required to construct a request tree.\n if (task.spawnedRuntimePrefetches === null) {\n task.spawnedRuntimePrefetches = new Set([tree.requestKey])\n } else {\n task.spawnedRuntimePrefetches.add(tree.requestKey)\n }\n // Then exit the traversal without prefetching anything further.\n return PrefetchTaskExitStatus.Done\n }\n\n // This segment should not be runtime prefetched. Prefetch its static data.\n const segment = readOrCreateSegmentCacheEntry(\n now,\n task.fetchStrategy,\n route,\n tree\n )\n pingStaticSegmentData(now, task, route, segment, task.key, tree)\n if (tree.slots !== null) {\n if (!hasNetworkBandwidth(task)) {\n // Stop prefetching segments until there's more bandwidth.\n return PrefetchTaskExitStatus.InProgress\n }\n // Recursively ping the children.\n for (const parallelRouteKey in tree.slots) {\n const childTree = tree.slots[parallelRouteKey]\n const childExitStatus = pingNewPartOfCacheComponentsTree(\n now,\n task,\n route,\n childTree\n )\n if (childExitStatus === PrefetchTaskExitStatus.InProgress) {\n // Child yielded without finishing.\n return PrefetchTaskExitStatus.InProgress\n }\n }\n }\n // This segment and all its children have finished prefetching.\n return PrefetchTaskExitStatus.Done\n}\n\nfunction diffRouteTreeAgainstCurrent(\n now: number,\n task: PrefetchTask,\n route: FulfilledRouteCacheEntry,\n oldTree: FlightRouterState,\n newTree: RouteTree,\n spawnedEntries: Map,\n fetchStrategy:\n | FetchStrategy.Full\n | FetchStrategy.PPRRuntime\n | FetchStrategy.LoadingBoundary\n): FlightRouterState {\n // This is a single recursive traversal that does multiple things:\n // - Finds the parts of the target route (newTree) that are not part of\n // of the current page (oldTree) by diffing them, using the same algorithm\n // as a real navigation.\n // - Constructs a request tree (FlightRouterState) that describes which\n // segments need to be prefetched and which ones are already cached.\n // - Creates a set of pending cache entries for the segments that need to\n // be prefetched, so that a subsequent prefetch task does not request the\n // same segments again.\n const oldTreeChildren = oldTree[1]\n const newTreeChildren = newTree.slots\n let requestTreeChildren: Record = {}\n if (newTreeChildren !== null) {\n for (const parallelRouteKey in newTreeChildren) {\n const newTreeChild = newTreeChildren[parallelRouteKey]\n const newTreeChildSegment = newTreeChild.segment\n const oldTreeChild: FlightRouterState | void =\n oldTreeChildren[parallelRouteKey]\n const oldTreeChildSegment: FlightRouterStateSegment | void =\n oldTreeChild?.[0]\n if (\n oldTreeChildSegment !== undefined &&\n doesCurrentSegmentMatchCachedSegment(\n route,\n newTreeChildSegment,\n oldTreeChildSegment\n )\n ) {\n // This segment is already part of the current route. Keep traversing.\n const requestTreeChild = diffRouteTreeAgainstCurrent(\n now,\n task,\n route,\n oldTreeChild,\n newTreeChild,\n spawnedEntries,\n fetchStrategy\n )\n requestTreeChildren[parallelRouteKey] = requestTreeChild\n } else {\n // This segment is not part of the current route. We're entering a\n // part of the tree that we need to prefetch (unless everything is\n // already cached).\n switch (fetchStrategy) {\n case FetchStrategy.LoadingBoundary: {\n // When PPR is disabled, we can't prefetch per segment. We must\n // fallback to the old prefetch behavior and send a dynamic request.\n // Only routes that include a loading boundary can be prefetched in\n // this way.\n //\n // This is simlar to a \"full\" prefetch, but we're much more\n // conservative about which segments to include in the request.\n //\n // The server will only render up to the first loading boundary\n // inside new part of the tree. If there's no loading boundary\n // anywhere in the tree, the server will never return any data, so\n // we can skip the request.\n const subtreeHasLoadingBoundary =\n newTreeChild.hasLoadingBoundary !==\n HasLoadingBoundary.SubtreeHasNoLoadingBoundary\n const requestTreeChild = subtreeHasLoadingBoundary\n ? pingPPRDisabledRouteTreeUpToLoadingBoundary(\n now,\n task,\n route,\n newTreeChild,\n null,\n spawnedEntries\n )\n : // There's no loading boundary within this tree. Bail out.\n convertRouteTreeToFlightRouterState(newTreeChild)\n requestTreeChildren[parallelRouteKey] = requestTreeChild\n break\n }\n case FetchStrategy.PPRRuntime: {\n // This is a runtime prefetch. Fetch all cacheable data in the tree,\n // not just the static PPR shell.\n const requestTreeChild = pingRouteTreeAndIncludeDynamicData(\n now,\n task,\n route,\n newTreeChild,\n false,\n spawnedEntries,\n fetchStrategy\n )\n requestTreeChildren[parallelRouteKey] = requestTreeChild\n break\n }\n case FetchStrategy.Full: {\n // This is a \"full\" prefetch. Fetch all the data in the tree, both\n // static and dynamic. We issue roughly the same request that we\n // would during a real navigation. The goal is that once the\n // navigation occurs, the router should not have to fetch any\n // additional data.\n //\n // Although the response will include dynamic data, opting into a\n // Full prefetch — via — implicitly\n // instructs the cache to treat the response as \"static\", or non-\n // dynamic, since the whole point is to cache it for\n // future navigations.\n //\n // Construct a tree (currently a FlightRouterState) that represents\n // which segments need to be prefetched and which ones are already\n // cached. If the tree is empty, then we can exit. Otherwise, we'll\n // send the request tree to the server and use the response to\n // populate the segment cache.\n const requestTreeChild = pingRouteTreeAndIncludeDynamicData(\n now,\n task,\n route,\n newTreeChild,\n false,\n spawnedEntries,\n fetchStrategy\n )\n requestTreeChildren[parallelRouteKey] = requestTreeChild\n break\n }\n default:\n fetchStrategy satisfies never\n }\n }\n }\n }\n const requestTree: FlightRouterState = [\n newTree.segment,\n requestTreeChildren,\n null,\n null,\n newTree.isRootLayout,\n ]\n return requestTree\n}\n\nfunction pingPPRDisabledRouteTreeUpToLoadingBoundary(\n now: number,\n task: PrefetchTask,\n route: FulfilledRouteCacheEntry,\n tree: RouteTree,\n refetchMarkerContext: 'refetch' | 'inside-shared-layout' | null,\n spawnedEntries: Map\n): FlightRouterState {\n // This function is similar to pingRouteTreeAndIncludeDynamicData, except the\n // server is only going to return a minimal loading state — it will stop\n // rendering at the first loading boundary. Whereas a Full prefetch is\n // intentionally aggressive and tries to pretfetch all the data that will be\n // needed for a navigation, a LoadingBoundary prefetch is much more\n // conservative. For example, it will omit from the request tree any segment\n // that is already cached, regardles of whether it's partial or full. By\n // contrast, a Full prefetch will refetch partial segments.\n\n // \"inside-shared-layout\" tells the server where to start looking for a\n // loading boundary.\n let refetchMarker: 'refetch' | 'inside-shared-layout' | null =\n refetchMarkerContext === null ? 'inside-shared-layout' : null\n\n const segment = readOrCreateSegmentCacheEntry(\n now,\n task.fetchStrategy,\n route,\n tree\n )\n switch (segment.status) {\n case EntryStatus.Empty: {\n // This segment is not cached. Add a refetch marker so the server knows\n // to start rendering here.\n // TODO: Instead of a \"refetch\" marker, we could just omit this subtree's\n // FlightRouterState from the request tree. I think this would probably\n // already work even without any updates to the server. For consistency,\n // though, I'll send the full tree and we'll look into this later as part\n // of a larger redesign of the request protocol.\n\n // Add the pending cache entry to the result map.\n spawnedEntries.set(\n tree.requestKey,\n upgradeToPendingSegment(\n segment,\n // Set the fetch strategy to LoadingBoundary to indicate that the server\n // might not include it in the pending response. If another route is able\n // to issue a per-segment request, we'll do that in the background.\n FetchStrategy.LoadingBoundary\n )\n )\n if (refetchMarkerContext !== 'refetch') {\n refetchMarker = refetchMarkerContext = 'refetch'\n } else {\n // There's already a parent with a refetch marker, so we don't need\n // to add another one.\n }\n break\n }\n case EntryStatus.Fulfilled: {\n // The segment is already cached.\n const segmentHasLoadingBoundary =\n tree.hasLoadingBoundary === HasLoadingBoundary.SegmentHasLoadingBoundary\n if (segmentHasLoadingBoundary) {\n // This segment has a loading boundary, which means the server won't\n // render its children. So there's nothing left to prefetch along this\n // path. We can bail out.\n return convertRouteTreeToFlightRouterState(tree)\n }\n // NOTE: If the cached segment were fetched using PPR, then it might be\n // partial. We could get a more complete version of the segment by\n // including it in this non-PPR request.\n //\n // We're intentionally choosing not to, though, because it's generally\n // better to avoid doing a full prefetch whenever possible.\n break\n }\n case EntryStatus.Pending: {\n // There's another prefetch currently in progress. Don't add the refetch\n // marker yet, so the server knows it can skip rendering this segment.\n break\n }\n case EntryStatus.Rejected: {\n // The segment failed to load. We shouldn't issue another request until\n // the stale time has elapsed.\n break\n }\n default:\n segment satisfies never\n }\n const requestTreeChildren: Record = {}\n if (tree.slots !== null) {\n for (const parallelRouteKey in tree.slots) {\n const childTree = tree.slots[parallelRouteKey]\n requestTreeChildren[parallelRouteKey] =\n pingPPRDisabledRouteTreeUpToLoadingBoundary(\n now,\n task,\n route,\n childTree,\n refetchMarkerContext,\n spawnedEntries\n )\n }\n }\n const requestTree: FlightRouterState = [\n tree.segment,\n requestTreeChildren,\n null,\n refetchMarker,\n tree.isRootLayout,\n ]\n return requestTree\n}\n\nfunction pingRouteTreeAndIncludeDynamicData(\n now: number,\n task: PrefetchTask,\n route: FulfilledRouteCacheEntry,\n tree: RouteTree,\n isInsideRefetchingParent: boolean,\n spawnedEntries: Map,\n fetchStrategy: FetchStrategy.Full | FetchStrategy.PPRRuntime\n): FlightRouterState {\n // The tree we're constructing is the same shape as the tree we're navigating\n // to. But even though this is a \"new\" tree, some of the individual segments\n // may be cached as a result of other route prefetches.\n //\n // So we need to find the first uncached segment along each path add an\n // explicit \"refetch\" marker so the server knows where to start rendering.\n // Once the server starts rendering along a path, it keeps rendering the\n // entire subtree.\n const segment = readOrCreateSegmentCacheEntry(\n now,\n // Note that `fetchStrategy` might be different from `task.fetchStrategy`,\n // and we have to use the former here.\n // We can have a task with `FetchStrategy.PPR` where some of its segments are configured to\n // always use runtime prefetching (via `export const prefetch`), and those should check for\n // entries that include search params.\n fetchStrategy,\n route,\n tree\n )\n\n let spawnedSegment: PendingSegmentCacheEntry | null = null\n\n switch (segment.status) {\n case EntryStatus.Empty: {\n // This segment is not cached. Include it in the request.\n spawnedSegment = upgradeToPendingSegment(segment, fetchStrategy)\n break\n }\n case EntryStatus.Fulfilled: {\n // The segment is already cached.\n if (\n segment.isPartial &&\n canNewFetchStrategyProvideMoreContent(\n segment.fetchStrategy,\n fetchStrategy\n )\n ) {\n // The cached segment contains dynamic holes, and was prefetched using a less specific strategy than the current one.\n // This means we're in one of these cases:\n // - we have a static prefetch, and we're doing a runtime prefetch\n // - we have a static or runtime prefetch, and we're doing a Full prefetch (or a navigation).\n // In either case, we need to include it in the request to get a more specific (or full) version.\n spawnedSegment = pingFullSegmentRevalidation(\n now,\n route,\n tree,\n fetchStrategy\n )\n }\n break\n }\n case EntryStatus.Pending:\n case EntryStatus.Rejected: {\n // There's either another prefetch currently in progress, or the previous\n // attempt failed. If the new strategy can provide more content, fetch it again.\n if (\n canNewFetchStrategyProvideMoreContent(\n segment.fetchStrategy,\n fetchStrategy\n )\n ) {\n spawnedSegment = pingFullSegmentRevalidation(\n now,\n route,\n tree,\n fetchStrategy\n )\n }\n break\n }\n default:\n segment satisfies never\n }\n const requestTreeChildren: Record = {}\n if (tree.slots !== null) {\n for (const parallelRouteKey in tree.slots) {\n const childTree = tree.slots[parallelRouteKey]\n requestTreeChildren[parallelRouteKey] =\n pingRouteTreeAndIncludeDynamicData(\n now,\n task,\n route,\n childTree,\n isInsideRefetchingParent || spawnedSegment !== null,\n spawnedEntries,\n fetchStrategy\n )\n }\n }\n\n if (spawnedSegment !== null) {\n // Add the pending entry to the result map.\n spawnedEntries.set(tree.requestKey, spawnedSegment)\n }\n\n // Don't bother to add a refetch marker if one is already present in a parent.\n const refetchMarker =\n !isInsideRefetchingParent && spawnedSegment !== null ? 'refetch' : null\n\n const requestTree: FlightRouterState = [\n tree.segment,\n requestTreeChildren,\n null,\n refetchMarker,\n tree.isRootLayout,\n ]\n return requestTree\n}\n\nfunction pingRuntimePrefetches(\n now: number,\n task: PrefetchTask,\n route: FulfilledRouteCacheEntry,\n tree: RouteTree,\n spawnedRuntimePrefetches: Set,\n spawnedEntries: Map\n): FlightRouterState {\n // Construct a request tree (FlightRouterState) for a runtime prefetch. If\n // a segment is part of the runtime prefetch, the tree is constructed by\n // diffing against what's already in the prefetch cache. Otherwise, we send\n // a regular FlightRouterState with no special markers.\n //\n // See pingRouteTreeAndIncludeDynamicData for details.\n if (spawnedRuntimePrefetches.has(tree.requestKey)) {\n // This segment needs a runtime prefetch.\n return pingRouteTreeAndIncludeDynamicData(\n now,\n task,\n route,\n tree,\n false,\n spawnedEntries,\n FetchStrategy.PPRRuntime\n )\n }\n let requestTreeChildren: Record = {}\n const slots = tree.slots\n if (slots !== null) {\n for (const parallelRouteKey in slots) {\n const childTree = slots[parallelRouteKey]\n requestTreeChildren[parallelRouteKey] = pingRuntimePrefetches(\n now,\n task,\n route,\n childTree,\n spawnedRuntimePrefetches,\n spawnedEntries\n )\n }\n }\n\n // This segment is not part of the runtime prefetch. Clone the base tree.\n const requestTree: FlightRouterState = [\n tree.segment,\n requestTreeChildren,\n null,\n null,\n ]\n return requestTree\n}\n\nfunction pingStaticSegmentData(\n now: number,\n task: PrefetchTask,\n route: FulfilledRouteCacheEntry,\n segment: SegmentCacheEntry,\n routeKey: RouteCacheKey,\n tree: RouteTree\n): void {\n switch (segment.status) {\n case EntryStatus.Empty:\n // Upgrade to Pending so we know there's already a request in progress\n spawnPrefetchSubtask(\n fetchSegmentOnCacheMiss(\n route,\n upgradeToPendingSegment(segment, FetchStrategy.PPR),\n routeKey,\n tree\n )\n )\n break\n case EntryStatus.Pending: {\n // There's already a request in progress. Depending on what kind of\n // request it is, we may want to revalidate it.\n switch (segment.fetchStrategy) {\n case FetchStrategy.PPR:\n case FetchStrategy.PPRRuntime:\n case FetchStrategy.Full:\n // There's already a request in progress. Don't do anything.\n break\n case FetchStrategy.LoadingBoundary:\n // There's a pending request, but because it's using the old\n // prefetching strategy, we can't be sure if it will be fulfilled by\n // the response — it might be inside the loading boundary. Perform\n // a revalidation, but because it's speculative, wait to do it at\n // background priority.\n if (background(task)) {\n // TODO: Instead of speculatively revalidating, consider including\n // `hasLoading` in the route tree prefetch response.\n pingPPRSegmentRevalidation(now, route, routeKey, tree)\n }\n break\n default:\n segment.fetchStrategy satisfies never\n }\n break\n }\n case EntryStatus.Rejected: {\n // The existing entry in the cache was rejected. Depending on how it\n // was originally fetched, we may or may not want to revalidate it.\n switch (segment.fetchStrategy) {\n case FetchStrategy.PPR:\n case FetchStrategy.PPRRuntime:\n case FetchStrategy.Full:\n // The previous attempt to fetch this entry failed. Don't attempt to\n // fetch it again until the entry expires.\n break\n case FetchStrategy.LoadingBoundary:\n // There's a rejected entry, but it was fetched using the loading\n // boundary strategy. So the reason it wasn't returned by the server\n // might just be because it was inside a loading boundary. Or because\n // there was a dynamic rewrite. Revalidate it using the per-\n // segment strategy.\n //\n // Because a rejected segment will definitely prevent the segment (and\n // all of its children) from rendering, we perform this revalidation\n // immediately instead of deferring it to a background task.\n pingPPRSegmentRevalidation(now, route, routeKey, tree)\n break\n default:\n segment.fetchStrategy satisfies never\n }\n break\n }\n case EntryStatus.Fulfilled:\n // Segment is already cached. There's nothing left to prefetch.\n break\n default:\n segment satisfies never\n }\n\n // Segments do not have dependent tasks, so once the prefetch is initiated,\n // there's nothing else for us to do (except write the server data into the\n // entry, which is handled by `fetchSegmentOnCacheMiss`).\n}\n\nfunction pingPPRSegmentRevalidation(\n now: number,\n route: FulfilledRouteCacheEntry,\n routeKey: RouteCacheKey,\n tree: RouteTree\n): void {\n const revalidatingSegment = readOrCreateRevalidatingSegmentEntry(\n now,\n FetchStrategy.PPR,\n route,\n tree\n )\n switch (revalidatingSegment.status) {\n case EntryStatus.Empty:\n // Spawn a prefetch request and upsert the segment into the cache\n // upon completion.\n upsertSegmentOnCompletion(\n spawnPrefetchSubtask(\n fetchSegmentOnCacheMiss(\n route,\n upgradeToPendingSegment(revalidatingSegment, FetchStrategy.PPR),\n routeKey,\n tree\n )\n ),\n getSegmentVaryPathForRequest(FetchStrategy.PPR, tree)\n )\n break\n case EntryStatus.Pending:\n // There's already a revalidation in progress.\n break\n case EntryStatus.Fulfilled:\n case EntryStatus.Rejected:\n // A previous revalidation attempt finished, but we chose not to replace\n // the existing entry in the cache. Don't try again until or unless the\n // revalidation entry expires.\n break\n default:\n revalidatingSegment satisfies never\n }\n}\n\nfunction pingFullSegmentRevalidation(\n now: number,\n route: FulfilledRouteCacheEntry,\n tree: RouteTree,\n fetchStrategy: FetchStrategy.Full | FetchStrategy.PPRRuntime\n): PendingSegmentCacheEntry | null {\n const revalidatingSegment = readOrCreateRevalidatingSegmentEntry(\n now,\n fetchStrategy,\n route,\n tree\n )\n if (revalidatingSegment.status === EntryStatus.Empty) {\n // During a Full/PPRRuntime prefetch, a single dynamic request is made for all the\n // segments that we need. So we don't initiate a request here directly. By\n // returning a pending entry from this function, it signals to the caller\n // that this segment should be included in the request that's sent to\n // the server.\n const pendingSegment = upgradeToPendingSegment(\n revalidatingSegment,\n fetchStrategy\n )\n upsertSegmentOnCompletion(\n waitForSegmentCacheEntry(pendingSegment),\n getSegmentVaryPathForRequest(fetchStrategy, tree)\n )\n return pendingSegment\n } else {\n // There's already a revalidation in progress.\n const nonEmptyRevalidatingSegment = revalidatingSegment\n if (\n canNewFetchStrategyProvideMoreContent(\n nonEmptyRevalidatingSegment.fetchStrategy,\n fetchStrategy\n )\n ) {\n // The existing revalidation was fetched using a less specific strategy.\n // Reset it and start a new revalidation.\n const emptySegment = overwriteRevalidatingSegmentCacheEntry(\n fetchStrategy,\n route,\n tree\n )\n const pendingSegment = upgradeToPendingSegment(\n emptySegment,\n fetchStrategy\n )\n upsertSegmentOnCompletion(\n waitForSegmentCacheEntry(pendingSegment),\n getSegmentVaryPathForRequest(fetchStrategy, tree)\n )\n return pendingSegment\n }\n switch (nonEmptyRevalidatingSegment.status) {\n case EntryStatus.Pending:\n // There's already an in-progress prefetch that includes this segment.\n return null\n case EntryStatus.Fulfilled:\n case EntryStatus.Rejected:\n // A previous revalidation attempt finished, but we chose not to replace\n // the existing entry in the cache. Don't try again until or unless the\n // revalidation entry expires.\n return null\n default:\n nonEmptyRevalidatingSegment satisfies never\n return null\n }\n }\n}\n\nconst noop = () => {}\n\nfunction upsertSegmentOnCompletion(\n promise: Promise,\n varyPath: SegmentVaryPath\n) {\n // Wait for a segment to finish loading, then upsert it into the cache\n promise.then((fulfilled) => {\n if (fulfilled !== null) {\n // Received new data. Attempt to replace the existing entry in the cache.\n upsertSegmentEntry(Date.now(), varyPath, fulfilled)\n }\n }, noop)\n}\n\nfunction doesCurrentSegmentMatchCachedSegment(\n route: FulfilledRouteCacheEntry,\n currentSegment: Segment,\n cachedSegment: Segment\n): boolean {\n if (cachedSegment === PAGE_SEGMENT_KEY) {\n // In the FlightRouterState stored by the router, the page segment has the\n // rendered search params appended to the name of the segment. In the\n // prefetch cache, however, this is stored separately. So, when comparing\n // the router's current FlightRouterState to the cached FlightRouterState,\n // we need to make sure we compare both parts of the segment.\n // TODO: This is not modeled clearly. We use the same type,\n // FlightRouterState, for both the CacheNode tree _and_ the prefetch cache\n // _and_ the server response format, when conceptually those are three\n // different things and treated in different ways. We should encode more of\n // this information into the type design so mistakes are less likely.\n return (\n currentSegment ===\n addSearchParamsIfPageSegment(\n PAGE_SEGMENT_KEY,\n Object.fromEntries(new URLSearchParams(route.renderedSearch))\n )\n )\n }\n // Non-page segments are compared using the same function as the server\n return matchSegment(cachedSegment, currentSegment)\n}\n\n// -----------------------------------------------------------------------------\n// The remainder of the module is a MinHeap implementation. Try not to put any\n// logic below here unless it's related to the heap algorithm. We can extract\n// this to a separate module if/when we need multiple kinds of heaps.\n// -----------------------------------------------------------------------------\n\nfunction compareQueuePriority(a: PrefetchTask, b: PrefetchTask) {\n // Since the queue is a MinHeap, this should return a positive number if b is\n // higher priority than a, and a negative number if a is higher priority\n // than b.\n\n // `priority` is an integer, where higher numbers are higher priority.\n const priorityDiff = b.priority - a.priority\n if (priorityDiff !== 0) {\n return priorityDiff\n }\n\n // If the priority is the same, check which phase the prefetch is in — is it\n // prefetching the route tree, or the segments? Route trees are prioritized.\n const phaseDiff = b.phase - a.phase\n if (phaseDiff !== 0) {\n return phaseDiff\n }\n\n // Finally, check the insertion order. `sortId` is an incrementing counter\n // assigned to prefetches. We want to process the newest prefetches first.\n return b.sortId - a.sortId\n}\n\nfunction heapPush(heap: Array, node: PrefetchTask): void {\n const index = heap.length\n heap.push(node)\n node._heapIndex = index\n heapSiftUp(heap, node, index)\n}\n\nfunction heapPeek(heap: Array): PrefetchTask | null {\n return heap.length === 0 ? null : heap[0]\n}\n\nfunction heapPop(heap: Array): PrefetchTask | null {\n if (heap.length === 0) {\n return null\n }\n const first = heap[0]\n first._heapIndex = -1\n const last = heap.pop() as PrefetchTask\n if (last !== first) {\n heap[0] = last\n last._heapIndex = 0\n heapSiftDown(heap, last, 0)\n }\n return first\n}\n\nfunction heapDelete(heap: Array, node: PrefetchTask): void {\n const index = node._heapIndex\n if (index !== -1) {\n node._heapIndex = -1\n if (heap.length !== 0) {\n const last = heap.pop() as PrefetchTask\n if (last !== node) {\n heap[index] = last\n last._heapIndex = index\n heapSiftDown(heap, last, index)\n }\n }\n }\n}\n\nfunction heapResift(heap: Array, node: PrefetchTask): void {\n const index = node._heapIndex\n if (index !== -1) {\n if (index === 0) {\n heapSiftDown(heap, node, 0)\n } else {\n const parentIndex = (index - 1) >>> 1\n const parent = heap[parentIndex]\n if (compareQueuePriority(parent, node) > 0) {\n // The parent is larger. Sift up.\n heapSiftUp(heap, node, index)\n } else {\n // The parent is smaller (or equal). Sift down.\n heapSiftDown(heap, node, index)\n }\n }\n }\n}\n\nfunction heapSiftUp(\n heap: Array,\n node: PrefetchTask,\n i: number\n): void {\n let index = i\n while (index > 0) {\n const parentIndex = (index - 1) >>> 1\n const parent = heap[parentIndex]\n if (compareQueuePriority(parent, node) > 0) {\n // The parent is larger. Swap positions.\n heap[parentIndex] = node\n node._heapIndex = parentIndex\n heap[index] = parent\n parent._heapIndex = index\n\n index = parentIndex\n } else {\n // The parent is smaller. Exit.\n return\n }\n }\n}\n\nfunction heapSiftDown(\n heap: Array,\n node: PrefetchTask,\n i: number\n): void {\n let index = i\n const length = heap.length\n const halfLength = length >>> 1\n while (index < halfLength) {\n const leftIndex = (index + 1) * 2 - 1\n const left = heap[leftIndex]\n const rightIndex = leftIndex + 1\n const right = heap[rightIndex]\n\n // If the left or right node is smaller, swap with the smaller of those.\n if (compareQueuePriority(left, node) < 0) {\n if (rightIndex < length && compareQueuePriority(right, left) < 0) {\n heap[index] = right\n right._heapIndex = index\n heap[rightIndex] = node\n node._heapIndex = rightIndex\n\n index = rightIndex\n } else {\n heap[index] = left\n left._heapIndex = index\n heap[leftIndex] = node\n node._heapIndex = leftIndex\n\n index = leftIndex\n }\n } else if (rightIndex < length && compareQueuePriority(right, node) < 0) {\n heap[index] = right\n right._heapIndex = index\n heap[rightIndex] = node\n node._heapIndex = rightIndex\n\n index = rightIndex\n } else {\n // Neither child is smaller. Exit.\n return\n }\n }\n}\n"],"names":["cancelPrefetchTask","isPrefetchTaskDirty","pingPrefetchTask","reschedulePrefetchTask","schedulePrefetchTask","startRevalidationCooldown","scheduleMicrotask","queueMicrotask","fn","Promise","resolve","then","catch","error","setTimeout","taskHeap","inProgressRequests","sortIdCounter","didScheduleMicrotask","mostRecentlyHoveredLink","REVALIDATION_COOLDOWN_MS","revalidationCooldownTimeoutHandle","clearTimeout","ensureWorkIsScheduled","key","treeAtTimeOfPrefetch","fetchStrategy","priority","onInvalidate","task","cacheVersion","getCurrentCacheVersion","phase","hasBackgroundWork","spawnedRuntimePrefetches","sortId","isCanceled","_heapIndex","trackMostRecentlyHoveredLink","heapPush","heapDelete","PrefetchPriority","Intent","heapResift","nextUrl","tree","currentCacheVersion","Background","Default","processQueueInMicrotask","hasNetworkBandwidth","spawnPrefetchSubtask","prefetchSubtask","result","onPrefetchConnectionClosed","closed","value","now","Date","heapPeek","exitStatus","pingRoute","heapPop","background","route","readOrCreateRouteCacheEntry","pingRootRouteTree","search","url","URL","pathname","location","origin","keyWithoutSearch","createCacheKey","href","routeWithoutSearch","status","EntryStatus","Empty","Pending","fetchRouteOnCacheMiss","Fulfilled","Rejected","staleAt","blockedTasks","Set","add","FetchStrategy","PPR","isPPREnabled","LoadingBoundary","pingStaticHead","pingSharedPartOfCacheComponentsTree","spawnedEntries","Map","pingRuntimeHead","PPRRuntime","requestTree","pingRuntimePrefetches","needsDynamicRequest","size","fetchSegmentPrefetchesUsingDynamicRequest","Full","dynamicRequestTree","diffRouteTreeAgainstCurrent","pingStaticSegmentData","readOrCreateSegmentCacheEntry","metadata","pingRouteTreeAndIncludeDynamicData","oldTree","newTree","segment","oldTreeChildren","newTreeChildren","slots","parallelRouteKey","newTreeChild","newTreeChildSegment","oldTreeChild","oldTreeChildSegment","childExitStatus","undefined","doesCurrentSegmentMatchCachedSegment","pingNewPartOfCacheComponentsTree","hasRuntimePrefetch","requestKey","childTree","requestTreeChildren","requestTreeChild","subtreeHasLoadingBoundary","hasLoadingBoundary","HasLoadingBoundary","SubtreeHasNoLoadingBoundary","pingPPRDisabledRouteTreeUpToLoadingBoundary","convertRouteTreeToFlightRouterState","isRootLayout","refetchMarkerContext","refetchMarker","set","upgradeToPendingSegment","segmentHasLoadingBoundary","SegmentHasLoadingBoundary","isInsideRefetchingParent","spawnedSegment","isPartial","canNewFetchStrategyProvideMoreContent","pingFullSegmentRevalidation","has","routeKey","fetchSegmentOnCacheMiss","pingPPRSegmentRevalidation","revalidatingSegment","readOrCreateRevalidatingSegmentEntry","upsertSegmentOnCompletion","getSegmentVaryPathForRequest","pendingSegment","waitForSegmentCacheEntry","nonEmptyRevalidatingSegment","emptySegment","overwriteRevalidatingSegmentCacheEntry","noop","promise","varyPath","fulfilled","upsertSegmentEntry","currentSegment","cachedSegment","PAGE_SEGMENT_KEY","addSearchParamsIfPageSegment","Object","fromEntries","URLSearchParams","renderedSearch","matchSegment","compareQueuePriority","a","b","priorityDiff","phaseDiff","heap","node","index","length","push","heapSiftUp","first","last","pop","heapSiftDown","parentIndex","parent","i","halfLength","leftIndex","left","rightIndex","right"],"mappings":"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","ignoreList":[0]}}, - {"offset": {"line": 5838, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/normalize-trailing-slash.ts"],"sourcesContent":["import { removeTrailingSlash } from '../shared/lib/router/utils/remove-trailing-slash'\nimport { parsePath } from '../shared/lib/router/utils/parse-path'\n\n/**\n * Normalizes the trailing slash of a path according to the `trailingSlash` option\n * in `next.config.js`.\n */\nexport const normalizePathTrailingSlash = (path: string) => {\n if (!path.startsWith('/') || process.env.__NEXT_MANUAL_TRAILING_SLASH) {\n return path\n }\n\n const { pathname, query, hash } = parsePath(path)\n if (process.env.__NEXT_TRAILING_SLASH) {\n if (/\\.[^/]+\\/?$/.test(pathname)) {\n return `${removeTrailingSlash(pathname)}${query}${hash}`\n } else if (pathname.endsWith('/')) {\n return `${pathname}${query}${hash}`\n } else {\n return `${pathname}/${query}${hash}`\n }\n }\n\n return `${removeTrailingSlash(pathname)}${query}${hash}`\n}\n"],"names":["normalizePathTrailingSlash","path","startsWith","process","env","__NEXT_MANUAL_TRAILING_SLASH","pathname","query","hash","parsePath","__NEXT_TRAILING_SLASH","test","removeTrailingSlash","endsWith"],"mappings":"AAQ+BG,QAAQC,GAAG,CAACC,4BAA4B;;;;;+BAD1DL,8BAAAA;;;eAAAA;;;qCAPuB;2BACV;AAMnB,MAAMA,6BAA6B,CAACC;IACzC,IAAI,CAACA,KAAKC,UAAU,CAAC,kDAAkD;QACrE,OAAOD;IACT;IAEA,MAAM,EAAEK,QAAQ,EAAEC,KAAK,EAAEC,IAAI,EAAE,GAAGC,CAAAA,GAAAA,WAAAA,SAAS,EAACR;IAC5C,IAAIE,QAAQC,GAAG,CAACM,qBAAqB,EAAE;;IAUvC,OAAO,GAAGE,CAAAA,GAAAA,qBAAAA,mBAAmB,EAACN,YAAYC,QAAQC,MAAM;AAC1D","ignoreList":[0]}}, - {"offset": {"line": 5871, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/add-base-path.ts"],"sourcesContent":["import { addPathPrefix } from '../shared/lib/router/utils/add-path-prefix'\nimport { normalizePathTrailingSlash } from './normalize-trailing-slash'\n\nconst basePath = (process.env.__NEXT_ROUTER_BASEPATH as string) || ''\n\nexport function addBasePath(path: string, required?: boolean): string {\n return normalizePathTrailingSlash(\n process.env.__NEXT_MANUAL_CLIENT_BASE_PATH && !required\n ? path\n : addPathPrefix(path, basePath)\n )\n}\n"],"names":["addBasePath","basePath","process","env","__NEXT_ROUTER_BASEPATH","path","required","normalizePathTrailingSlash","__NEXT_MANUAL_CLIENT_BASE_PATH","addPathPrefix"],"mappings":"AAGkBE,QAAQC,GAAG,CAACC,sBAAsB;;;;;+BAEpCJ,eAAAA;;;eAAAA;;;+BALc;wCACa;AAE3C,MAAMC,mDAA6D;AAE5D,SAASD,YAAYK,IAAY,EAAEC,QAAkB;IAC1D,OAAOC,CAAAA,GAAAA,wBAAAA,0BAA0B,EAC/BL,QAAQC,GAAG,CAACK,0BACRH,IADsC,IAAI,CAACC,iBAE3CG,CAAAA,GAAAA,eAAAA,aAAa,EAACJ,MAAMJ;AAE5B","ignoreList":[0]}}, - {"offset": {"line": 5899, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/app-router-utils.ts"],"sourcesContent":["import { isBot } from '../../shared/lib/router/utils/is-bot'\nimport { addBasePath } from '../add-base-path'\n\nexport function isExternalURL(url: URL) {\n return url.origin !== window.location.origin\n}\n\n/**\n * Given a link href, constructs the URL that should be prefetched. Returns null\n * in cases where prefetching should be disabled, like external URLs, or\n * during development.\n * @param href The href passed to , router.prefetch(), or similar\n * @returns A URL object to prefetch, or null if prefetching should be disabled\n */\nexport function createPrefetchURL(href: string): URL | null {\n // Don't prefetch for bots as they don't navigate.\n if (isBot(window.navigator.userAgent)) {\n return null\n }\n\n let url: URL\n try {\n url = new URL(addBasePath(href), window.location.href)\n } catch (_) {\n // TODO: Does this need to throw or can we just console.error instead? Does\n // anyone rely on this throwing? (Seems unlikely.)\n throw new Error(\n `Cannot prefetch '${href}' because it cannot be converted to a URL.`\n )\n }\n\n // Don't prefetch during development (improves compilation performance)\n if (process.env.NODE_ENV === 'development') {\n return null\n }\n\n // External urls can't be prefetched in the same way.\n if (isExternalURL(url)) {\n return null\n }\n\n return url\n}\n"],"names":["createPrefetchURL","isExternalURL","url","origin","window","location","href","isBot","navigator","userAgent","URL","addBasePath","_","Error","process","env","NODE_ENV"],"mappings":"AAgCMc,QAAQC,GAAG,CAACC,QAAQ,KAAK;;;;;;;;;;;;;;;;IAlBfhB,iBAAiB,EAAA;eAAjBA;;IAXAC,aAAa,EAAA;eAAbA;;;uBAHM;6BACM;AAErB,SAASA,cAAcC,GAAQ;IACpC,OAAOA,IAAIC,MAAM,KAAKC,OAAOC,QAAQ,CAACF,MAAM;AAC9C;AASO,SAASH,kBAAkBM,IAAY;IAC5C,kDAAkD;IAClD,IAAIC,CAAAA,GAAAA,OAAAA,KAAK,EAACH,OAAOI,SAAS,CAACC,SAAS,GAAG;QACrC,OAAO;IACT;IAEA,IAAIP;IACJ,IAAI;QACFA,MAAM,IAAIQ,IAAIC,CAAAA,GAAAA,aAAAA,WAAW,EAACL,OAAOF,OAAOC,QAAQ,CAACC,IAAI;IACvD,EAAE,OAAOM,GAAG;QACV,2EAA2E;QAC3E,kDAAkD;QAClD,MAAM,OAAA,cAEL,CAFK,IAAIC,MACR,CAAC,iBAAiB,EAAEP,KAAK,0CAA0C,CAAC,GADhE,qBAAA;mBAAA;wBAAA;0BAAA;QAEN;IACF;IAEA,uEAAuE;IACvE,wCAA4C;QAC1C,OAAO;IACT;;;AAQF","ignoreList":[0]}}, - {"offset": {"line": 5962, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/links.ts"],"sourcesContent":["import type { FlightRouterState } from '../../shared/lib/app-router-types'\nimport type { AppRouterInstance } from '../../shared/lib/app-router-context.shared-runtime'\nimport {\n FetchStrategy,\n type PrefetchTaskFetchStrategy,\n PrefetchPriority,\n} from './segment-cache/types'\nimport { createCacheKey } from './segment-cache/cache-key'\nimport {\n type PrefetchTask,\n schedulePrefetchTask as scheduleSegmentPrefetchTask,\n cancelPrefetchTask,\n reschedulePrefetchTask,\n isPrefetchTaskDirty,\n} from './segment-cache/scheduler'\nimport { startTransition } from 'react'\n\ntype LinkElement = HTMLAnchorElement | SVGAElement\n\ntype Element = LinkElement | HTMLFormElement\n\n// Properties that are shared between Link and Form instances. We use the same\n// shape for both to prevent a polymorphic de-opt in the VM.\ntype LinkOrFormInstanceShared = {\n router: AppRouterInstance\n fetchStrategy: PrefetchTaskFetchStrategy\n\n isVisible: boolean\n\n // The most recently initiated prefetch task. It may or may not have\n // already completed. The same prefetch task object can be reused across\n // multiple prefetches of the same link.\n prefetchTask: PrefetchTask | null\n}\n\nexport type FormInstance = LinkOrFormInstanceShared & {\n prefetchHref: string\n setOptimisticLinkStatus: null\n}\n\ntype PrefetchableLinkInstance = LinkOrFormInstanceShared & {\n prefetchHref: string\n setOptimisticLinkStatus: (status: { pending: boolean }) => void\n}\n\ntype NonPrefetchableLinkInstance = LinkOrFormInstanceShared & {\n prefetchHref: null\n setOptimisticLinkStatus: (status: { pending: boolean }) => void\n}\n\ntype PrefetchableInstance = PrefetchableLinkInstance | FormInstance\n\nexport type LinkInstance =\n | PrefetchableLinkInstance\n | NonPrefetchableLinkInstance\n\n// Tracks the most recently navigated link instance. When null, indicates\n// the current navigation was not initiated by a link click.\nlet linkForMostRecentNavigation: LinkInstance | null = null\n\n// Status object indicating link is pending\nexport const PENDING_LINK_STATUS = { pending: true }\n\n// Status object indicating link is idle\nexport const IDLE_LINK_STATUS = { pending: false }\n\n// Updates the loading state when navigating between links\n// - Resets the previous link's loading state\n// - Sets the new link's loading state\n// - Updates tracking of current navigation\nexport function setLinkForCurrentNavigation(link: LinkInstance | null) {\n startTransition(() => {\n linkForMostRecentNavigation?.setOptimisticLinkStatus(IDLE_LINK_STATUS)\n link?.setOptimisticLinkStatus(PENDING_LINK_STATUS)\n linkForMostRecentNavigation = link\n })\n}\n\n// Unmounts the current link instance from navigation tracking\nexport function unmountLinkForCurrentNavigation(link: LinkInstance) {\n if (linkForMostRecentNavigation === link) {\n linkForMostRecentNavigation = null\n }\n}\n\n// Use a WeakMap to associate a Link instance with its DOM element. This is\n// used by the IntersectionObserver to track the link's visibility.\nconst prefetchable:\n | WeakMap\n | Map =\n typeof WeakMap === 'function' ? new WeakMap() : new Map()\n\n// A Set of the currently visible links. We re-prefetch visible links after a\n// cache invalidation, or when the current URL changes. It's a separate data\n// structure from the WeakMap above because only the visible links need to\n// be enumerated.\nconst prefetchableAndVisible: Set = new Set()\n\n// A single IntersectionObserver instance shared by all components.\nconst observer: IntersectionObserver | null =\n typeof IntersectionObserver === 'function'\n ? new IntersectionObserver(handleIntersect, {\n rootMargin: '200px',\n })\n : null\n\nfunction observeVisibility(element: Element, instance: PrefetchableInstance) {\n const existingInstance = prefetchable.get(element)\n if (existingInstance !== undefined) {\n // This shouldn't happen because each component should have its own\n // anchor tag instance, but it's defensive coding to avoid a memory leak in\n // case there's a logical error somewhere else.\n unmountPrefetchableInstance(element)\n }\n // Only track prefetchable links that have a valid prefetch URL\n prefetchable.set(element, instance)\n if (observer !== null) {\n observer.observe(element)\n }\n}\n\nfunction coercePrefetchableUrl(href: string): URL | null {\n if (typeof window !== 'undefined') {\n const { createPrefetchURL } =\n require('./app-router-utils') as typeof import('./app-router-utils')\n\n try {\n return createPrefetchURL(href)\n } catch {\n // createPrefetchURL sometimes throws an error if an invalid URL is\n // provided, though I'm not sure if it's actually necessary.\n // TODO: Consider removing the throw from the inner function, or change it\n // to reportError. Or maybe the error isn't even necessary for automatic\n // prefetches, just navigations.\n const reportErrorFn =\n typeof reportError === 'function' ? reportError : console.error\n reportErrorFn(\n `Cannot prefetch '${href}' because it cannot be converted to a URL.`\n )\n return null\n }\n } else {\n return null\n }\n}\n\nexport function mountLinkInstance(\n element: LinkElement,\n href: string,\n router: AppRouterInstance,\n fetchStrategy: PrefetchTaskFetchStrategy,\n prefetchEnabled: boolean,\n setOptimisticLinkStatus: (status: { pending: boolean }) => void\n): LinkInstance {\n if (prefetchEnabled) {\n const prefetchURL = coercePrefetchableUrl(href)\n if (prefetchURL !== null) {\n const instance: PrefetchableLinkInstance = {\n router,\n fetchStrategy,\n isVisible: false,\n prefetchTask: null,\n prefetchHref: prefetchURL.href,\n setOptimisticLinkStatus,\n }\n // We only observe the link's visibility if it's prefetchable. For\n // example, this excludes links to external URLs.\n observeVisibility(element, instance)\n return instance\n }\n }\n // If the link is not prefetchable, we still create an instance so we can\n // track its optimistic state (i.e. useLinkStatus).\n const instance: NonPrefetchableLinkInstance = {\n router,\n fetchStrategy,\n isVisible: false,\n prefetchTask: null,\n prefetchHref: null,\n setOptimisticLinkStatus,\n }\n return instance\n}\n\nexport function mountFormInstance(\n element: HTMLFormElement,\n href: string,\n router: AppRouterInstance,\n fetchStrategy: PrefetchTaskFetchStrategy\n): void {\n const prefetchURL = coercePrefetchableUrl(href)\n if (prefetchURL === null) {\n // This href is not prefetchable, so we don't track it.\n // TODO: We currently observe/unobserve a form every time its href changes.\n // For Links, this isn't a big deal because the href doesn't usually change,\n // but for forms it's extremely common. We should optimize this.\n return\n }\n const instance: FormInstance = {\n router,\n fetchStrategy,\n isVisible: false,\n prefetchTask: null,\n prefetchHref: prefetchURL.href,\n setOptimisticLinkStatus: null,\n }\n observeVisibility(element, instance)\n}\n\nexport function unmountPrefetchableInstance(element: Element) {\n const instance = prefetchable.get(element)\n if (instance !== undefined) {\n prefetchable.delete(element)\n prefetchableAndVisible.delete(instance)\n const prefetchTask = instance.prefetchTask\n if (prefetchTask !== null) {\n cancelPrefetchTask(prefetchTask)\n }\n }\n if (observer !== null) {\n observer.unobserve(element)\n }\n}\n\nfunction handleIntersect(entries: Array) {\n for (const entry of entries) {\n // Some extremely old browsers or polyfills don't reliably support\n // isIntersecting so we check intersectionRatio instead. (Do we care? Not\n // really. But whatever this is fine.)\n const isVisible = entry.intersectionRatio > 0\n onLinkVisibilityChanged(entry.target as HTMLAnchorElement, isVisible)\n }\n}\n\nexport function onLinkVisibilityChanged(element: Element, isVisible: boolean) {\n if (process.env.NODE_ENV !== 'production') {\n // Prefetching on viewport is disabled in development for performance\n // reasons, because it requires compiling the target page.\n // TODO: Investigate re-enabling this.\n return\n }\n\n const instance = prefetchable.get(element)\n if (instance === undefined) {\n return\n }\n\n instance.isVisible = isVisible\n if (isVisible) {\n prefetchableAndVisible.add(instance)\n } else {\n prefetchableAndVisible.delete(instance)\n }\n rescheduleLinkPrefetch(instance, PrefetchPriority.Default)\n}\n\nexport function onNavigationIntent(\n element: HTMLAnchorElement | SVGAElement,\n unstable_upgradeToDynamicPrefetch: boolean\n) {\n const instance = prefetchable.get(element)\n if (instance === undefined) {\n return\n }\n // Prefetch the link on hover/touchstart.\n if (instance !== undefined) {\n if (\n process.env.__NEXT_DYNAMIC_ON_HOVER &&\n unstable_upgradeToDynamicPrefetch\n ) {\n // Switch to a full prefetch\n instance.fetchStrategy = FetchStrategy.Full\n }\n rescheduleLinkPrefetch(instance, PrefetchPriority.Intent)\n }\n}\n\nfunction rescheduleLinkPrefetch(\n instance: PrefetchableInstance,\n priority: PrefetchPriority.Default | PrefetchPriority.Intent\n) {\n // Ensures that app-router-instance is not compiled in the server bundle\n if (typeof window !== 'undefined') {\n const existingPrefetchTask = instance.prefetchTask\n\n if (!instance.isVisible) {\n // Cancel any in-progress prefetch task. (If it already finished then this\n // is a no-op.)\n if (existingPrefetchTask !== null) {\n cancelPrefetchTask(existingPrefetchTask)\n }\n // We don't need to reset the prefetchTask to null upon cancellation; an\n // old task object can be rescheduled with reschedulePrefetchTask. This is a\n // micro-optimization but also makes the code simpler (don't need to\n // worry about whether an old task object is stale).\n return\n }\n\n const { getCurrentAppRouterState } =\n require('./app-router-instance') as typeof import('./app-router-instance')\n\n const appRouterState = getCurrentAppRouterState()\n if (appRouterState !== null) {\n const treeAtTimeOfPrefetch = appRouterState.tree\n if (existingPrefetchTask === null) {\n // Initiate a prefetch task.\n const nextUrl = appRouterState.nextUrl\n const cacheKey = createCacheKey(instance.prefetchHref, nextUrl)\n instance.prefetchTask = scheduleSegmentPrefetchTask(\n cacheKey,\n treeAtTimeOfPrefetch,\n instance.fetchStrategy,\n priority,\n null\n )\n } else {\n // We already have an old task object that we can reschedule. This is\n // effectively the same as canceling the old task and creating a new one.\n reschedulePrefetchTask(\n existingPrefetchTask,\n treeAtTimeOfPrefetch,\n instance.fetchStrategy,\n priority\n )\n }\n }\n }\n}\n\nexport function pingVisibleLinks(\n nextUrl: string | null,\n tree: FlightRouterState\n) {\n // For each currently visible link, cancel the existing prefetch task (if it\n // exists) and schedule a new one. This is effectively the same as if all the\n // visible links left and then re-entered the viewport.\n //\n // This is called when the Next-Url or the base tree changes, since those\n // may affect the result of a prefetch task. It's also called after a\n // cache invalidation.\n for (const instance of prefetchableAndVisible) {\n const task = instance.prefetchTask\n if (task !== null && !isPrefetchTaskDirty(task, nextUrl, tree)) {\n // The cache has not been invalidated, and none of the inputs have\n // changed. Bail out.\n continue\n }\n // Something changed. Cancel the existing prefetch task and schedule a\n // new one.\n if (task !== null) {\n cancelPrefetchTask(task)\n }\n const cacheKey = createCacheKey(instance.prefetchHref, nextUrl)\n instance.prefetchTask = scheduleSegmentPrefetchTask(\n cacheKey,\n tree,\n instance.fetchStrategy,\n PrefetchPriority.Default,\n null\n )\n }\n}\n"],"names":["IDLE_LINK_STATUS","PENDING_LINK_STATUS","mountFormInstance","mountLinkInstance","onLinkVisibilityChanged","onNavigationIntent","pingVisibleLinks","setLinkForCurrentNavigation","unmountLinkForCurrentNavigation","unmountPrefetchableInstance","linkForMostRecentNavigation","pending","link","startTransition","setOptimisticLinkStatus","prefetchable","WeakMap","Map","prefetchableAndVisible","Set","observer","IntersectionObserver","handleIntersect","rootMargin","observeVisibility","element","instance","existingInstance","get","undefined","set","observe","coercePrefetchableUrl","href","window","createPrefetchURL","require","reportErrorFn","reportError","console","error","router","fetchStrategy","prefetchEnabled","prefetchURL","isVisible","prefetchTask","prefetchHref","delete","cancelPrefetchTask","unobserve","entries","entry","intersectionRatio","target","process","env","NODE_ENV","add","rescheduleLinkPrefetch","PrefetchPriority","Default","unstable_upgradeToDynamicPrefetch","__NEXT_DYNAMIC_ON_HOVER","FetchStrategy","Full","Intent","priority","existingPrefetchTask","getCurrentAppRouterState","appRouterState","treeAtTimeOfPrefetch","tree","nextUrl","cacheKey","createCacheKey","scheduleSegmentPrefetchTask","reschedulePrefetchTask","task","isPrefetchTaskDirty"],"mappings":"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","ignoreList":[0]}}, - {"offset": {"line": 6248, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/segment-cache/cache.ts"],"sourcesContent":["import type {\n TreePrefetch,\n RootTreePrefetch,\n SegmentPrefetch,\n} from '../../../server/app-render/collect-segment-data'\nimport type { LoadingModuleData } from '../../../shared/lib/app-router-types'\nimport type {\n CacheNodeSeedData,\n Segment as FlightRouterStateSegment,\n} from '../../../shared/lib/app-router-types'\nimport { HasLoadingBoundary } from '../../../shared/lib/app-router-types'\nimport {\n NEXT_DID_POSTPONE_HEADER,\n NEXT_ROUTER_PREFETCH_HEADER,\n NEXT_ROUTER_SEGMENT_PREFETCH_HEADER,\n NEXT_ROUTER_STALE_TIME_HEADER,\n NEXT_ROUTER_STATE_TREE_HEADER,\n NEXT_URL,\n RSC_CONTENT_TYPE_HEADER,\n RSC_HEADER,\n} from '../app-router-headers'\nimport {\n createFetch,\n createFromNextReadableStream,\n type RSCResponse,\n type RequestHeaders,\n} from '../router-reducer/fetch-server-response'\nimport {\n pingPrefetchTask,\n isPrefetchTaskDirty,\n type PrefetchTask,\n type PrefetchSubtaskResult,\n startRevalidationCooldown,\n} from './scheduler'\nimport {\n type RouteVaryPath,\n type SegmentVaryPath,\n type PartialSegmentVaryPath,\n getRouteVaryPath,\n getFulfilledRouteVaryPath,\n getSegmentVaryPathForRequest,\n appendLayoutVaryPath,\n finalizeLayoutVaryPath,\n finalizePageVaryPath,\n clonePageVaryPathWithNewSearchParams,\n type PageVaryPath,\n finalizeMetadataVaryPath,\n} from './vary-path'\nimport { getAppBuildId } from '../../app-build-id'\nimport { createHrefFromUrl } from '../router-reducer/create-href-from-url'\nimport type { NormalizedSearch, RouteCacheKey } from './cache-key'\n// TODO: Rename this module to avoid confusion with other types of cache keys\nimport { createCacheKey as createPrefetchRequestKey } from './cache-key'\nimport {\n doesStaticSegmentAppearInURL,\n getCacheKeyForDynamicParam,\n getRenderedPathname,\n getRenderedSearch,\n parseDynamicParamFromURLPart,\n} from '../../route-params'\nimport {\n createCacheMap,\n getFromCacheMap,\n setInCacheMap,\n setSizeInCacheMap,\n deleteFromCacheMap,\n isValueExpired,\n type CacheMap,\n type UnknownMapEntry,\n} from './cache-map'\nimport {\n appendSegmentRequestKeyPart,\n convertSegmentPathToStaticExportFilename,\n createSegmentRequestKeyPart,\n HEAD_REQUEST_KEY,\n ROOT_SEGMENT_REQUEST_KEY,\n type SegmentRequestKey,\n} from '../../../shared/lib/segment-cache/segment-value-encoding'\nimport type {\n FlightRouterState,\n NavigationFlightResponse,\n} from '../../../shared/lib/app-router-types'\nimport {\n normalizeFlightData,\n prepareFlightRouterStateForRequest,\n} from '../../flight-data-helpers'\nimport { STATIC_STALETIME_MS } from '../router-reducer/reducers/navigate-reducer'\nimport { pingVisibleLinks } from '../links'\nimport { PAGE_SEGMENT_KEY } from '../../../shared/lib/segment'\nimport { FetchStrategy } from './types'\nimport { createPromiseWithResolvers } from '../../../shared/lib/promise-with-resolvers'\n\n/**\n * Ensures a minimum stale time of 30s to avoid issues where the server sends a too\n * short-lived stale time, which would prevent anything from being prefetched.\n */\nexport function getStaleTimeMs(staleTimeSeconds: number): number {\n return Math.max(staleTimeSeconds, 30) * 1000\n}\n\n// A note on async/await when working in the prefetch cache:\n//\n// Most async operations in the prefetch cache should *not* use async/await,\n// Instead, spawn a subtask that writes the results to a cache entry, and attach\n// a \"ping\" listener to notify the prefetch queue to try again.\n//\n// The reason is we need to be able to access the segment cache and traverse its\n// data structures synchronously. For example, if there's a synchronous update\n// we can take an immediate snapshot of the cache to produce something we can\n// render. Limiting the use of async/await also makes it easier to avoid race\n// conditions, which is especially important because is cache is mutable.\n//\n// Another reason is that while we're performing async work, it's possible for\n// existing entries to become stale, or for Link prefetches to be removed from\n// the queue. For optimal scheduling, we need to be able to \"cancel\" subtasks\n// that are no longer needed. So, when a segment is received from the server, we\n// restart from the root of the tree that's being prefetched, to confirm all the\n// parent segments are still cached. If the segment is no longer reachable from\n// the root, then it's effectively canceled. This is similar to the design of\n// Rust Futures, or React Suspense.\n\ntype RouteTreeShared = {\n requestKey: SegmentRequestKey\n // TODO: Remove the `segment` field, now that it can be reconstructed\n // from `param`.\n segment: FlightRouterStateSegment\n slots: null | {\n [parallelRouteKey: string]: RouteTree\n }\n isRootLayout: boolean\n\n // If this is a dynamic route, indicates whether there is a loading boundary\n // somewhere in the tree. If not, we can skip the prefetch for the data,\n // because we know it would be an empty response. (For a static/PPR route,\n // this value is disregarded, because in that model `loading.tsx` is treated\n // like any other Suspense boundary.)\n hasLoadingBoundary: HasLoadingBoundary\n\n // Indicates whether this route has a runtime prefetch that we can request.\n // This is determined by the server; it's not purely a user configuration\n // because the server may determine that a route is fully static and doesn't\n // need runtime prefetching regardless of the configuration.\n hasRuntimePrefetch: boolean\n}\n\ntype LayoutRouteTree = RouteTreeShared & {\n isPage: false\n varyPath: SegmentVaryPath\n}\n\ntype PageRouteTree = RouteTreeShared & {\n isPage: true\n varyPath: PageVaryPath\n}\n\nexport type RouteTree = LayoutRouteTree | PageRouteTree\n\ntype RouteCacheEntryShared = {\n // This is false only if we're certain the route cannot be intercepted. It's\n // true in all other cases, including on initialization when we haven't yet\n // received a response from the server.\n couldBeIntercepted: boolean\n\n // Map-related fields.\n ref: UnknownMapEntry | null\n size: number\n staleAt: number\n version: number\n}\n\n/**\n * Tracks the status of a cache entry as it progresses from no data (Empty),\n * waiting for server data (Pending), and finished (either Fulfilled or\n * Rejected depending on the response from the server.\n */\nexport const enum EntryStatus {\n Empty = 0,\n Pending = 1,\n Fulfilled = 2,\n Rejected = 3,\n}\n\ntype PendingRouteCacheEntry = RouteCacheEntryShared & {\n status: EntryStatus.Empty | EntryStatus.Pending\n blockedTasks: Set | null\n canonicalUrl: null\n renderedSearch: null\n tree: null\n metadata: null\n isPPREnabled: false\n}\n\ntype RejectedRouteCacheEntry = RouteCacheEntryShared & {\n status: EntryStatus.Rejected\n blockedTasks: Set | null\n canonicalUrl: null\n renderedSearch: null\n tree: null\n metadata: null\n isPPREnabled: boolean\n}\n\nexport type FulfilledRouteCacheEntry = RouteCacheEntryShared & {\n status: EntryStatus.Fulfilled\n blockedTasks: null\n canonicalUrl: string\n renderedSearch: NormalizedSearch\n tree: RouteTree\n metadata: RouteTree\n isPPREnabled: boolean\n}\n\nexport type RouteCacheEntry =\n | PendingRouteCacheEntry\n | FulfilledRouteCacheEntry\n | RejectedRouteCacheEntry\n\ntype SegmentCacheEntryShared = {\n fetchStrategy: FetchStrategy\n\n // Map-related fields.\n ref: UnknownMapEntry | null\n size: number\n staleAt: number\n version: number\n}\n\nexport type EmptySegmentCacheEntry = SegmentCacheEntryShared & {\n status: EntryStatus.Empty\n rsc: null\n loading: null\n isPartial: true\n promise: null\n}\n\nexport type PendingSegmentCacheEntry = SegmentCacheEntryShared & {\n status: EntryStatus.Pending\n rsc: null\n loading: null\n isPartial: boolean\n promise: null | PromiseWithResolvers\n}\n\ntype RejectedSegmentCacheEntry = SegmentCacheEntryShared & {\n status: EntryStatus.Rejected\n rsc: null\n loading: null\n isPartial: true\n promise: null\n}\n\nexport type FulfilledSegmentCacheEntry = SegmentCacheEntryShared & {\n status: EntryStatus.Fulfilled\n rsc: React.ReactNode | null\n loading: LoadingModuleData | Promise\n isPartial: boolean\n promise: null\n}\n\nexport type SegmentCacheEntry =\n | EmptySegmentCacheEntry\n | PendingSegmentCacheEntry\n | RejectedSegmentCacheEntry\n | FulfilledSegmentCacheEntry\n\nexport type NonEmptySegmentCacheEntry = Exclude<\n SegmentCacheEntry,\n EmptySegmentCacheEntry\n>\n\nconst isOutputExportMode =\n process.env.NODE_ENV === 'production' &&\n process.env.__NEXT_CONFIG_OUTPUT === 'export'\n\nconst MetadataOnlyRequestTree: FlightRouterState = [\n '',\n {},\n null,\n 'metadata-only',\n]\n\nlet routeCacheMap: CacheMap = createCacheMap()\nlet segmentCacheMap: CacheMap = createCacheMap()\n\n// All invalidation listeners for the whole cache are tracked in single set.\n// Since we don't yet support tag or path-based invalidation, there's no point\n// tracking them any more granularly than this. Once we add granular\n// invalidation, that may change, though generally the model is to just notify\n// the listeners and allow the caller to poll the prefetch cache with a new\n// prefetch task if desired.\nlet invalidationListeners: Set | null = null\n\n// Incrementing counter used to track cache invalidations.\nlet currentCacheVersion = 0\n\nexport function getCurrentCacheVersion(): number {\n return currentCacheVersion\n}\n\n/**\n * Used to clear the client prefetch cache when a server action calls\n * revalidatePath or revalidateTag. Eventually we will support only clearing the\n * segments that were actually affected, but there's more work to be done on the\n * server before the client is able to do this correctly.\n */\nexport function revalidateEntireCache(\n nextUrl: string | null,\n tree: FlightRouterState\n) {\n // Increment the current cache version. This does not eagerly evict anything\n // from the cache, but because all the entries are versioned, and we check\n // the version when reading from the cache, this effectively causes all\n // entries to be evicted lazily. We do it lazily because in the future,\n // actions like revalidateTag or refresh will not evict the entire cache,\n // but rather some subset of the entries.\n currentCacheVersion++\n\n // Start a cooldown before re-prefetching to allow CDN cache propagation.\n startRevalidationCooldown()\n\n // Prefetch all the currently visible links again, to re-fill the cache.\n pingVisibleLinks(nextUrl, tree)\n\n // Similarly, notify all invalidation listeners (i.e. those passed to\n // `router.prefetch(onInvalidate)`), so they can trigger a new prefetch\n // if needed.\n pingInvalidationListeners(nextUrl, tree)\n}\n\nfunction attachInvalidationListener(task: PrefetchTask): void {\n // This function is called whenever a prefetch task reads a cache entry. If\n // the task has an onInvalidate function associated with it — i.e. the one\n // optionally passed to router.prefetch(onInvalidate) — then we attach that\n // listener to the every cache entry that the task reads. Then, if an entry\n // is invalidated, we call the function.\n if (task.onInvalidate !== null) {\n if (invalidationListeners === null) {\n invalidationListeners = new Set([task])\n } else {\n invalidationListeners.add(task)\n }\n }\n}\n\nfunction notifyInvalidationListener(task: PrefetchTask): void {\n const onInvalidate = task.onInvalidate\n if (onInvalidate !== null) {\n // Clear the callback from the task object to guarantee it's not called more\n // than once.\n task.onInvalidate = null\n\n // This is a user-space function, so we must wrap in try/catch.\n try {\n onInvalidate()\n } catch (error) {\n if (typeof reportError === 'function') {\n reportError(error)\n } else {\n console.error(error)\n }\n }\n }\n}\n\nexport function pingInvalidationListeners(\n nextUrl: string | null,\n tree: FlightRouterState\n): void {\n // The rough equivalent of pingVisibleLinks, but for onInvalidate callbacks.\n // This is called when the Next-Url or the base tree changes, since those\n // may affect the result of a prefetch task. It's also called after a\n // cache invalidation.\n if (invalidationListeners !== null) {\n const tasks = invalidationListeners\n invalidationListeners = null\n for (const task of tasks) {\n if (isPrefetchTaskDirty(task, nextUrl, tree)) {\n notifyInvalidationListener(task)\n }\n }\n }\n}\n\nexport function readRouteCacheEntry(\n now: number,\n key: RouteCacheKey\n): RouteCacheEntry | null {\n const varyPath: RouteVaryPath = getRouteVaryPath(\n key.pathname,\n key.search,\n key.nextUrl\n )\n const isRevalidation = false\n return getFromCacheMap(\n now,\n getCurrentCacheVersion(),\n routeCacheMap,\n varyPath,\n isRevalidation\n )\n}\n\nexport function readSegmentCacheEntry(\n now: number,\n varyPath: SegmentVaryPath\n): SegmentCacheEntry | null {\n const isRevalidation = false\n return getFromCacheMap(\n now,\n getCurrentCacheVersion(),\n segmentCacheMap,\n varyPath,\n isRevalidation\n )\n}\n\nfunction readRevalidatingSegmentCacheEntry(\n now: number,\n varyPath: SegmentVaryPath\n): SegmentCacheEntry | null {\n const isRevalidation = true\n return getFromCacheMap(\n now,\n getCurrentCacheVersion(),\n segmentCacheMap,\n varyPath,\n isRevalidation\n )\n}\n\nexport function waitForSegmentCacheEntry(\n pendingEntry: PendingSegmentCacheEntry\n): Promise {\n // Because the entry is pending, there's already a in-progress request.\n // Attach a promise to the entry that will resolve when the server responds.\n let promiseWithResolvers = pendingEntry.promise\n if (promiseWithResolvers === null) {\n promiseWithResolvers = pendingEntry.promise =\n createPromiseWithResolvers()\n } else {\n // There's already a promise we can use\n }\n return promiseWithResolvers.promise\n}\n\n/**\n * Checks if an entry for a route exists in the cache. If so, it returns the\n * entry, If not, it adds an empty entry to the cache and returns it.\n */\nexport function readOrCreateRouteCacheEntry(\n now: number,\n task: PrefetchTask,\n key: RouteCacheKey\n): RouteCacheEntry {\n attachInvalidationListener(task)\n\n const existingEntry = readRouteCacheEntry(now, key)\n if (existingEntry !== null) {\n return existingEntry\n }\n // Create a pending entry and add it to the cache.\n const pendingEntry: PendingRouteCacheEntry = {\n canonicalUrl: null,\n status: EntryStatus.Empty,\n blockedTasks: null,\n tree: null,\n metadata: null,\n // This is initialized to true because we don't know yet whether the route\n // could be intercepted. It's only set to false once we receive a response\n // from the server.\n couldBeIntercepted: true,\n // Similarly, we don't yet know if the route supports PPR.\n isPPREnabled: false,\n renderedSearch: null,\n\n // Map-related fields\n ref: null,\n size: 0,\n // Since this is an empty entry, there's no reason to ever evict it. It will\n // be updated when the data is populated.\n staleAt: Infinity,\n version: getCurrentCacheVersion(),\n }\n const varyPath: RouteVaryPath = getRouteVaryPath(\n key.pathname,\n key.search,\n key.nextUrl\n )\n const isRevalidation = false\n setInCacheMap(routeCacheMap, varyPath, pendingEntry, isRevalidation)\n return pendingEntry\n}\n\nexport function requestOptimisticRouteCacheEntry(\n now: number,\n requestedUrl: URL,\n nextUrl: string | null\n): FulfilledRouteCacheEntry | null {\n // This function is called during a navigation when there was no matching\n // route tree in the prefetch cache. Before de-opting to a blocking,\n // unprefetched navigation, we will first attempt to construct an \"optimistic\"\n // route tree by checking the cache for similar routes.\n //\n // Check if there's a route with the same pathname, but with different\n // search params. We can then base our optimistic route tree on this entry.\n //\n // Conceptually, we are simulating what would happen if we did perform a\n // prefetch the requested URL, under the assumption that the server will\n // not redirect or rewrite the request in a different manner than the\n // base route tree. This assumption might not hold, in which case we'll have\n // to recover when we perform the dynamic navigation request. However, this\n // is what would happen if a route were dynamically rewritten/redirected\n // in between the prefetch and the navigation. So the logic needs to exist\n // to handle this case regardless.\n\n // Look for a route with the same pathname, but with an empty search string.\n // TODO: There's nothing inherently special about the empty search string;\n // it's chosen somewhat arbitrarily, with the rationale that it's the most\n // likely one to exist. But we should update this to match _any_ search\n // string. The plan is to generalize this logic alongside other improvements\n // related to \"fallback\" cache entries.\n const requestedSearch = requestedUrl.search as NormalizedSearch\n if (requestedSearch === '') {\n // The caller would have already checked if a route with an empty search\n // string is in the cache. So we can bail out here.\n return null\n }\n const urlWithoutSearchParams = new URL(requestedUrl)\n urlWithoutSearchParams.search = ''\n const routeWithNoSearchParams = readRouteCacheEntry(\n now,\n createPrefetchRequestKey(urlWithoutSearchParams.href, nextUrl)\n )\n\n if (\n routeWithNoSearchParams === null ||\n routeWithNoSearchParams.status !== EntryStatus.Fulfilled\n ) {\n // Bail out of constructing an optimistic route tree. This will result in\n // a blocking, unprefetched navigation.\n return null\n }\n\n // Now we have a base route tree we can \"patch\" with our optimistic values.\n\n // Optimistically assume that redirects for the requested pathname do\n // not vary on the search string. Therefore, if the base route was\n // redirected to a different search string, then the optimistic route\n // should be redirected to the same search string. Otherwise, we use\n // the requested search string.\n const canonicalUrlForRouteWithNoSearchParams = new URL(\n routeWithNoSearchParams.canonicalUrl,\n requestedUrl.origin\n )\n const optimisticCanonicalSearch =\n canonicalUrlForRouteWithNoSearchParams.search !== ''\n ? // Base route was redirected. Reuse the same redirected search string.\n canonicalUrlForRouteWithNoSearchParams.search\n : requestedSearch\n\n // Similarly, optimistically assume that rewrites for the requested\n // pathname do not vary on the search string. Therefore, if the base\n // route was rewritten to a different search string, then the optimistic\n // route should be rewritten to the same search string. Otherwise, we use\n // the requested search string.\n const optimisticRenderedSearch =\n routeWithNoSearchParams.renderedSearch !== ''\n ? // Base route was rewritten. Reuse the same rewritten search string.\n routeWithNoSearchParams.renderedSearch\n : requestedSearch\n\n const optimisticUrl = new URL(\n routeWithNoSearchParams.canonicalUrl,\n location.origin\n )\n optimisticUrl.search = optimisticCanonicalSearch\n const optimisticCanonicalUrl = createHrefFromUrl(optimisticUrl)\n\n const optimisticRouteTree = createOptimisticRouteTree(\n routeWithNoSearchParams.tree,\n optimisticRenderedSearch\n )\n const optimisticMetadataTree = createOptimisticRouteTree(\n routeWithNoSearchParams.metadata,\n optimisticRenderedSearch\n )\n\n // Clone the base route tree, and override the relevant fields with our\n // optimistic values.\n const optimisticEntry: FulfilledRouteCacheEntry = {\n canonicalUrl: optimisticCanonicalUrl,\n\n status: EntryStatus.Fulfilled,\n // This isn't cloned because it's instance-specific\n blockedTasks: null,\n tree: optimisticRouteTree,\n metadata: optimisticMetadataTree,\n couldBeIntercepted: routeWithNoSearchParams.couldBeIntercepted,\n isPPREnabled: routeWithNoSearchParams.isPPREnabled,\n\n // Override the rendered search with the optimistic value.\n renderedSearch: optimisticRenderedSearch,\n\n // Map-related fields\n ref: null,\n size: 0,\n staleAt: routeWithNoSearchParams.staleAt,\n version: routeWithNoSearchParams.version,\n }\n\n // Do not insert this entry into the cache. It only exists so we can\n // perform the current navigation. Just return it to the caller.\n return optimisticEntry\n}\n\nfunction createOptimisticRouteTree(\n tree: RouteTree,\n newRenderedSearch: NormalizedSearch\n): RouteTree {\n // Create a new route tree that identical to the original one except for\n // the rendered search string, which is contained in the vary path.\n\n let clonedSlots: Record | null = null\n const originalSlots = tree.slots\n if (originalSlots !== null) {\n clonedSlots = {}\n for (const parallelRouteKey in originalSlots) {\n const childTree = originalSlots[parallelRouteKey]\n clonedSlots[parallelRouteKey] = createOptimisticRouteTree(\n childTree,\n newRenderedSearch\n )\n }\n }\n\n // We only need to clone the vary path if the route is a page.\n if (tree.isPage) {\n return {\n requestKey: tree.requestKey,\n segment: tree.segment,\n varyPath: clonePageVaryPathWithNewSearchParams(\n tree.varyPath,\n newRenderedSearch\n ),\n isPage: true,\n slots: clonedSlots,\n isRootLayout: tree.isRootLayout,\n hasLoadingBoundary: tree.hasLoadingBoundary,\n hasRuntimePrefetch: tree.hasRuntimePrefetch,\n }\n }\n\n return {\n requestKey: tree.requestKey,\n segment: tree.segment,\n varyPath: tree.varyPath,\n isPage: false,\n slots: clonedSlots,\n isRootLayout: tree.isRootLayout,\n hasLoadingBoundary: tree.hasLoadingBoundary,\n hasRuntimePrefetch: tree.hasRuntimePrefetch,\n }\n}\n\n/**\n * Checks if an entry for a segment exists in the cache. If so, it returns the\n * entry, If not, it adds an empty entry to the cache and returns it.\n */\nexport function readOrCreateSegmentCacheEntry(\n now: number,\n fetchStrategy: FetchStrategy,\n route: FulfilledRouteCacheEntry,\n tree: RouteTree\n): SegmentCacheEntry {\n const existingEntry = readSegmentCacheEntry(now, tree.varyPath)\n if (existingEntry !== null) {\n return existingEntry\n }\n // Create a pending entry and add it to the cache.\n const varyPathForRequest = getSegmentVaryPathForRequest(fetchStrategy, tree)\n const pendingEntry = createDetachedSegmentCacheEntry(route.staleAt)\n const isRevalidation = false\n setInCacheMap(\n segmentCacheMap,\n varyPathForRequest,\n pendingEntry,\n isRevalidation\n )\n return pendingEntry\n}\n\nexport function readOrCreateRevalidatingSegmentEntry(\n now: number,\n fetchStrategy: FetchStrategy,\n route: FulfilledRouteCacheEntry,\n tree: RouteTree\n): SegmentCacheEntry {\n // This function is called when we've already confirmed that a particular\n // segment is cached, but we want to perform another request anyway in case it\n // returns more complete and/or fresher data than we already have. The logic\n // for deciding whether to replace the existing entry is handled elsewhere;\n // this function just handles retrieving a cache entry that we can use to\n // track the revalidation.\n //\n // The reason revalidations are stored in the cache is because we need to be\n // able to dedupe multiple revalidation requests. The reason they have to be\n // handled specially is because we shouldn't overwrite a \"normal\" entry if\n // one exists at the same keypath. So, for each internal cache location, there\n // is a special \"revalidation\" slot that is used solely for this purpose.\n //\n // You can think of it as if all the revalidation entries were stored in a\n // separate cache map from the canonical entries, and then transfered to the\n // canonical cache map once the request is complete — this isn't how it's\n // actually implemented, since it's more efficient to store them in the same\n // data structure as the normal entries, but that's how it's modeled\n // conceptually.\n\n // TODO: Once we implement Fallback behavior for params, where an entry is\n // re-keyed based on response information, we'll need to account for the\n // possibility that the keypath of the previous entry is more generic than\n // the keypath of the revalidating entry. In other words, the server could\n // return a less generic entry upon revalidation. For now, though, this isn't\n // a concern because the keypath is based solely on the prefetch strategy,\n // not on data contained in the response.\n const existingEntry = readRevalidatingSegmentCacheEntry(now, tree.varyPath)\n if (existingEntry !== null) {\n return existingEntry\n }\n // Create a pending entry and add it to the cache.\n const varyPathForRequest = getSegmentVaryPathForRequest(fetchStrategy, tree)\n const pendingEntry = createDetachedSegmentCacheEntry(route.staleAt)\n const isRevalidation = true\n setInCacheMap(\n segmentCacheMap,\n varyPathForRequest,\n pendingEntry,\n isRevalidation\n )\n return pendingEntry\n}\n\nexport function overwriteRevalidatingSegmentCacheEntry(\n fetchStrategy: FetchStrategy,\n route: FulfilledRouteCacheEntry,\n tree: RouteTree\n) {\n // This function is called when we've already decided to replace an existing\n // revalidation entry. Create a new entry and write it into the cache,\n // overwriting the previous value.\n const varyPathForRequest = getSegmentVaryPathForRequest(fetchStrategy, tree)\n const pendingEntry = createDetachedSegmentCacheEntry(route.staleAt)\n const isRevalidation = true\n setInCacheMap(\n segmentCacheMap,\n varyPathForRequest,\n pendingEntry,\n isRevalidation\n )\n return pendingEntry\n}\n\nexport function upsertSegmentEntry(\n now: number,\n varyPath: SegmentVaryPath,\n candidateEntry: SegmentCacheEntry\n): SegmentCacheEntry | null {\n // We have a new entry that has not yet been inserted into the cache. Before\n // we do so, we need to confirm whether it takes precedence over the existing\n // entry (if one exists).\n // TODO: We should not upsert an entry if its key was invalidated in the time\n // since the request was made. We can do that by passing the \"owner\" entry to\n // this function and confirming it's the same as `existingEntry`.\n\n if (isValueExpired(now, getCurrentCacheVersion(), candidateEntry)) {\n // The entry is expired. We cannot upsert it.\n return null\n }\n\n const existingEntry = readSegmentCacheEntry(now, varyPath)\n if (existingEntry !== null) {\n // Don't replace a more specific segment with a less-specific one. A case where this\n // might happen is if the existing segment was fetched via\n // ``.\n if (\n // We fetched the new segment using a different, less specific fetch strategy\n // than the segment we already have in the cache, so it can't have more content.\n (candidateEntry.fetchStrategy !== existingEntry.fetchStrategy &&\n !canNewFetchStrategyProvideMoreContent(\n existingEntry.fetchStrategy,\n candidateEntry.fetchStrategy\n )) ||\n // The existing entry isn't partial, but the new one is.\n // (TODO: can this be true if `candidateEntry.fetchStrategy >= existingEntry.fetchStrategy`?)\n (!existingEntry.isPartial && candidateEntry.isPartial)\n ) {\n // We're going to leave revalidating entry in the cache so that it doesn't\n // get revalidated again unnecessarily. Downgrade the Fulfilled entry to\n // Rejected and null out the data so it can be garbage collected. We leave\n // `staleAt` intact to prevent subsequent revalidation attempts only until\n // the entry expires.\n const rejectedEntry: RejectedSegmentCacheEntry = candidateEntry as any\n rejectedEntry.status = EntryStatus.Rejected\n rejectedEntry.loading = null\n rejectedEntry.rsc = null\n return null\n }\n\n // Evict the existing entry from the cache.\n deleteFromCacheMap(existingEntry)\n }\n\n const isRevalidation = false\n setInCacheMap(segmentCacheMap, varyPath, candidateEntry, isRevalidation)\n return candidateEntry\n}\n\nexport function createDetachedSegmentCacheEntry(\n staleAt: number\n): EmptySegmentCacheEntry {\n const emptyEntry: EmptySegmentCacheEntry = {\n status: EntryStatus.Empty,\n // Default to assuming the fetch strategy will be PPR. This will be updated\n // when a fetch is actually initiated.\n fetchStrategy: FetchStrategy.PPR,\n rsc: null,\n loading: null,\n isPartial: true,\n promise: null,\n\n // Map-related fields\n ref: null,\n size: 0,\n staleAt,\n version: 0,\n }\n return emptyEntry\n}\n\nexport function upgradeToPendingSegment(\n emptyEntry: EmptySegmentCacheEntry,\n fetchStrategy: FetchStrategy\n): PendingSegmentCacheEntry {\n const pendingEntry: PendingSegmentCacheEntry = emptyEntry as any\n pendingEntry.status = EntryStatus.Pending\n pendingEntry.fetchStrategy = fetchStrategy\n\n if (fetchStrategy === FetchStrategy.Full) {\n // We can assume the response will contain the full segment data. Set this\n // to false so we know it's OK to omit this segment from any navigation\n // requests that may happen while the data is still pending.\n pendingEntry.isPartial = false\n }\n\n // Set the version here, since this is right before the request is initiated.\n // The next time the global cache version is incremented, the entry will\n // effectively be evicted. This happens before initiating the request, rather\n // than when receiving the response, because it's guaranteed to happen\n // before the data is read on the server.\n pendingEntry.version = getCurrentCacheVersion()\n return pendingEntry\n}\n\nfunction pingBlockedTasks(entry: {\n blockedTasks: Set | null\n}): void {\n const blockedTasks = entry.blockedTasks\n if (blockedTasks !== null) {\n for (const task of blockedTasks) {\n pingPrefetchTask(task)\n }\n entry.blockedTasks = null\n }\n}\n\nfunction fulfillRouteCacheEntry(\n entry: RouteCacheEntry,\n tree: RouteTree,\n metadataVaryPath: PageVaryPath,\n staleAt: number,\n couldBeIntercepted: boolean,\n canonicalUrl: string,\n renderedSearch: NormalizedSearch,\n isPPREnabled: boolean\n): FulfilledRouteCacheEntry {\n // The Head is not actually part of the route tree, but other than that, it's\n // fetched and cached like a segment. Some functions expect a RouteTree\n // object, so rather than fork the logic in all those places, we use this\n // \"fake\" one.\n const metadata: RouteTree = {\n requestKey: HEAD_REQUEST_KEY,\n segment: HEAD_REQUEST_KEY,\n varyPath: metadataVaryPath,\n // The metadata isn't really a \"page\" (though it isn't really a \"segment\"\n // either) but for the purposes of how this field is used, it behaves like\n // one. If this logic ever gets more complex we can change this to an enum.\n isPage: true,\n slots: null,\n isRootLayout: false,\n hasLoadingBoundary: HasLoadingBoundary.SubtreeHasNoLoadingBoundary,\n hasRuntimePrefetch: false,\n }\n const fulfilledEntry: FulfilledRouteCacheEntry = entry as any\n fulfilledEntry.status = EntryStatus.Fulfilled\n fulfilledEntry.tree = tree\n fulfilledEntry.metadata = metadata\n fulfilledEntry.staleAt = staleAt\n fulfilledEntry.couldBeIntercepted = couldBeIntercepted\n fulfilledEntry.canonicalUrl = canonicalUrl\n fulfilledEntry.renderedSearch = renderedSearch\n fulfilledEntry.isPPREnabled = isPPREnabled\n pingBlockedTasks(entry)\n return fulfilledEntry\n}\n\nfunction fulfillSegmentCacheEntry(\n segmentCacheEntry: PendingSegmentCacheEntry,\n rsc: React.ReactNode,\n loading: LoadingModuleData | Promise,\n staleAt: number,\n isPartial: boolean\n): FulfilledSegmentCacheEntry {\n const fulfilledEntry: FulfilledSegmentCacheEntry = segmentCacheEntry as any\n fulfilledEntry.status = EntryStatus.Fulfilled\n fulfilledEntry.rsc = rsc\n fulfilledEntry.loading = loading\n fulfilledEntry.staleAt = staleAt\n fulfilledEntry.isPartial = isPartial\n // Resolve any listeners that were waiting for this data.\n if (segmentCacheEntry.promise !== null) {\n segmentCacheEntry.promise.resolve(fulfilledEntry)\n // Free the promise for garbage collection.\n fulfilledEntry.promise = null\n }\n return fulfilledEntry\n}\n\nfunction rejectRouteCacheEntry(\n entry: PendingRouteCacheEntry,\n staleAt: number\n): void {\n const rejectedEntry: RejectedRouteCacheEntry = entry as any\n rejectedEntry.status = EntryStatus.Rejected\n rejectedEntry.staleAt = staleAt\n pingBlockedTasks(entry)\n}\n\nfunction rejectSegmentCacheEntry(\n entry: PendingSegmentCacheEntry,\n staleAt: number\n): void {\n const rejectedEntry: RejectedSegmentCacheEntry = entry as any\n rejectedEntry.status = EntryStatus.Rejected\n rejectedEntry.staleAt = staleAt\n if (entry.promise !== null) {\n // NOTE: We don't currently propagate the reason the prefetch was canceled\n // but we could by accepting a `reason` argument.\n entry.promise.resolve(null)\n entry.promise = null\n }\n}\n\ntype RouteTreeAccumulator = {\n metadataVaryPath: PageVaryPath | null\n}\n\nfunction convertRootTreePrefetchToRouteTree(\n rootTree: RootTreePrefetch,\n renderedPathname: string,\n renderedSearch: NormalizedSearch,\n acc: RouteTreeAccumulator\n) {\n // Remove trailing and leading slashes\n const pathnameParts = renderedPathname.split('/').filter((p) => p !== '')\n const index = 0\n const rootSegment = ROOT_SEGMENT_REQUEST_KEY\n return convertTreePrefetchToRouteTree(\n rootTree.tree,\n rootSegment,\n null,\n ROOT_SEGMENT_REQUEST_KEY,\n pathnameParts,\n index,\n renderedSearch,\n acc\n )\n}\n\nfunction convertTreePrefetchToRouteTree(\n prefetch: TreePrefetch,\n segment: FlightRouterStateSegment,\n partialVaryPath: PartialSegmentVaryPath | null,\n requestKey: SegmentRequestKey,\n pathnameParts: Array,\n pathnamePartsIndex: number,\n renderedSearch: NormalizedSearch,\n acc: RouteTreeAccumulator\n): RouteTree {\n // Converts the route tree sent by the server into the format used by the\n // cache. The cached version of the tree includes additional fields, such as a\n // cache key for each segment. Since this is frequently accessed, we compute\n // it once instead of on every access. This same cache key is also used to\n // request the segment from the server.\n\n let slots: { [parallelRouteKey: string]: RouteTree } | null = null\n let isPage: boolean\n let varyPath: SegmentVaryPath\n const prefetchSlots = prefetch.slots\n if (prefetchSlots !== null) {\n isPage = false\n varyPath = finalizeLayoutVaryPath(requestKey, partialVaryPath)\n\n slots = {}\n for (let parallelRouteKey in prefetchSlots) {\n const childPrefetch = prefetchSlots[parallelRouteKey]\n const childParamName = childPrefetch.name\n const childParamType = childPrefetch.paramType\n const childServerSentParamKey = childPrefetch.paramKey\n\n let childDoesAppearInURL: boolean\n let childSegment: FlightRouterStateSegment\n let childPartialVaryPath: PartialSegmentVaryPath | null\n if (childParamType !== null) {\n // This segment is parameterized. Get the param from the pathname.\n const childParamValue = parseDynamicParamFromURLPart(\n childParamType,\n pathnameParts,\n pathnamePartsIndex\n )\n\n // Assign a cache key to the segment, based on the param value. In the\n // pre-Segment Cache implementation, the server computes this and sends\n // it in the body of the response. In the Segment Cache implementation,\n // the server sends an empty string and we fill it in here.\n\n // TODO: We're intentionally not adding the search param to page\n // segments here; it's tracked separately and added back during a read.\n // This would clearer if we waited to construct the segment until it's\n // read from the cache, since that's effectively what we're\n // doing anyway.\n const childParamKey =\n // The server omits this field from the prefetch response when\n // cacheComponents is enabled.\n childServerSentParamKey !== null\n ? childServerSentParamKey\n : // If no param key was sent, use the value parsed on the client.\n getCacheKeyForDynamicParam(\n childParamValue,\n '' as NormalizedSearch\n )\n\n childPartialVaryPath = appendLayoutVaryPath(\n partialVaryPath,\n childParamKey\n )\n childSegment = [childParamName, childParamKey, childParamType]\n childDoesAppearInURL = true\n } else {\n // This segment does not have a param. Inherit the partial vary path of\n // the parent.\n childPartialVaryPath = partialVaryPath\n childSegment = childParamName\n childDoesAppearInURL = doesStaticSegmentAppearInURL(childParamName)\n }\n\n // Only increment the index if the segment appears in the URL. If it's a\n // \"virtual\" segment, like a route group, it remains the same.\n const childPathnamePartsIndex = childDoesAppearInURL\n ? pathnamePartsIndex + 1\n : pathnamePartsIndex\n\n const childRequestKeyPart = createSegmentRequestKeyPart(childSegment)\n const childRequestKey = appendSegmentRequestKeyPart(\n requestKey,\n parallelRouteKey,\n childRequestKeyPart\n )\n slots[parallelRouteKey] = convertTreePrefetchToRouteTree(\n childPrefetch,\n childSegment,\n childPartialVaryPath,\n childRequestKey,\n pathnameParts,\n childPathnamePartsIndex,\n renderedSearch,\n acc\n )\n }\n } else {\n if (requestKey.endsWith(PAGE_SEGMENT_KEY)) {\n // This is a page segment.\n isPage = true\n varyPath = finalizePageVaryPath(\n requestKey,\n renderedSearch,\n partialVaryPath\n )\n // The metadata \"segment\" is not part the route tree, but it has the same\n // conceptual params as a page segment. Write the vary path into the\n // accumulator object. If there are multiple parallel pages, we use the\n // first one. Which page we choose is arbitrary as long as it's\n // consistently the same one every time every time. See\n // finalizeMetadataVaryPath for more details.\n if (acc.metadataVaryPath === null) {\n acc.metadataVaryPath = finalizeMetadataVaryPath(\n requestKey,\n renderedSearch,\n partialVaryPath\n )\n }\n } else {\n // This is a layout segment.\n isPage = false\n varyPath = finalizeLayoutVaryPath(requestKey, partialVaryPath)\n }\n }\n\n return {\n requestKey,\n segment,\n varyPath,\n // TODO: Cheating the type system here a bit because TypeScript can't tell\n // that the type of isPage and varyPath are consistent. The fix would be to\n // create separate constructors and call the appropriate one from each of\n // the branches above. Just seems a bit overkill only for one field so I'll\n // leave it as-is for now. If isPage were wrong it would break the behavior\n // and we'd catch it quickly, anyway.\n isPage: isPage as boolean as any,\n slots,\n isRootLayout: prefetch.isRootLayout,\n // This field is only relevant to dynamic routes. For a PPR/static route,\n // there's always some partial loading state we can fetch.\n hasLoadingBoundary: HasLoadingBoundary.SegmentHasLoadingBoundary,\n hasRuntimePrefetch: prefetch.hasRuntimePrefetch,\n }\n}\n\nfunction convertRootFlightRouterStateToRouteTree(\n flightRouterState: FlightRouterState,\n renderedSearch: NormalizedSearch,\n acc: RouteTreeAccumulator\n): RouteTree {\n return convertFlightRouterStateToRouteTree(\n flightRouterState,\n ROOT_SEGMENT_REQUEST_KEY,\n null,\n renderedSearch,\n acc\n )\n}\n\nfunction convertFlightRouterStateToRouteTree(\n flightRouterState: FlightRouterState,\n requestKey: SegmentRequestKey,\n parentPartialVaryPath: PartialSegmentVaryPath | null,\n renderedSearch: NormalizedSearch,\n acc: RouteTreeAccumulator\n): RouteTree {\n const originalSegment = flightRouterState[0]\n\n let segment: FlightRouterStateSegment\n let partialVaryPath: PartialSegmentVaryPath | null\n let isPage: boolean\n let varyPath: SegmentVaryPath\n if (Array.isArray(originalSegment)) {\n isPage = false\n const paramCacheKey = originalSegment[1]\n partialVaryPath = appendLayoutVaryPath(parentPartialVaryPath, paramCacheKey)\n varyPath = finalizeLayoutVaryPath(requestKey, partialVaryPath)\n segment = originalSegment\n } else {\n // This segment does not have a param. Inherit the partial vary path of\n // the parent.\n partialVaryPath = parentPartialVaryPath\n if (requestKey.endsWith(PAGE_SEGMENT_KEY)) {\n // This is a page segment.\n isPage = true\n\n // The navigation implementation expects the search params to be included\n // in the segment. However, in the case of a static response, the search\n // params are omitted. So the client needs to add them back in when reading\n // from the Segment Cache.\n //\n // For consistency, we'll do this for dynamic responses, too.\n //\n // TODO: We should move search params out of FlightRouterState and handle\n // them entirely on the client, similar to our plan for dynamic params.\n segment = PAGE_SEGMENT_KEY\n varyPath = finalizePageVaryPath(\n requestKey,\n renderedSearch,\n partialVaryPath\n )\n // The metadata \"segment\" is not part the route tree, but it has the same\n // conceptual params as a page segment. Write the vary path into the\n // accumulator object. If there are multiple parallel pages, we use the\n // first one. Which page we choose is arbitrary as long as it's\n // consistently the same one every time every time. See\n // finalizeMetadataVaryPath for more details.\n if (acc.metadataVaryPath === null) {\n acc.metadataVaryPath = finalizeMetadataVaryPath(\n requestKey,\n renderedSearch,\n partialVaryPath\n )\n }\n } else {\n // This is a layout segment.\n isPage = false\n segment = originalSegment\n varyPath = finalizeLayoutVaryPath(requestKey, partialVaryPath)\n }\n }\n\n let slots: { [parallelRouteKey: string]: RouteTree } | null = null\n\n const parallelRoutes = flightRouterState[1]\n for (let parallelRouteKey in parallelRoutes) {\n const childRouterState = parallelRoutes[parallelRouteKey]\n const childSegment = childRouterState[0]\n // TODO: Eventually, the param values will not be included in the response\n // from the server. We'll instead fill them in on the client by parsing\n // the URL. This is where we'll do that.\n const childRequestKeyPart = createSegmentRequestKeyPart(childSegment)\n const childRequestKey = appendSegmentRequestKeyPart(\n requestKey,\n parallelRouteKey,\n childRequestKeyPart\n )\n const childTree = convertFlightRouterStateToRouteTree(\n childRouterState,\n childRequestKey,\n partialVaryPath,\n renderedSearch,\n acc\n )\n if (slots === null) {\n slots = {\n [parallelRouteKey]: childTree,\n }\n } else {\n slots[parallelRouteKey] = childTree\n }\n }\n\n return {\n requestKey,\n segment,\n varyPath,\n // TODO: Cheating the type system here a bit because TypeScript can't tell\n // that the type of isPage and varyPath are consistent. The fix would be to\n // create separate constructors and call the appropriate one from each of\n // the branches above. Just seems a bit overkill only for one field so I'll\n // leave it as-is for now. If isPage were wrong it would break the behavior\n // and we'd catch it quickly, anyway.\n isPage: isPage as boolean as any,\n slots,\n isRootLayout: flightRouterState[4] === true,\n hasLoadingBoundary:\n flightRouterState[5] !== undefined\n ? flightRouterState[5]\n : HasLoadingBoundary.SubtreeHasNoLoadingBoundary,\n\n // Non-static tree responses are only used by apps that haven't adopted\n // Cache Components. So this is always false.\n hasRuntimePrefetch: false,\n }\n}\n\nexport function convertRouteTreeToFlightRouterState(\n routeTree: RouteTree\n): FlightRouterState {\n const parallelRoutes: Record = {}\n if (routeTree.slots !== null) {\n for (const parallelRouteKey in routeTree.slots) {\n parallelRoutes[parallelRouteKey] = convertRouteTreeToFlightRouterState(\n routeTree.slots[parallelRouteKey]\n )\n }\n }\n const flightRouterState: FlightRouterState = [\n routeTree.segment,\n parallelRoutes,\n null,\n null,\n routeTree.isRootLayout,\n ]\n return flightRouterState\n}\n\nexport async function fetchRouteOnCacheMiss(\n entry: PendingRouteCacheEntry,\n task: PrefetchTask,\n key: RouteCacheKey\n): Promise | null> {\n // This function is allowed to use async/await because it contains the actual\n // fetch that gets issued on a cache miss. Notice it writes the result to the\n // cache entry directly, rather than return data that is then written by\n // the caller.\n const pathname = key.pathname\n const search = key.search\n const nextUrl = key.nextUrl\n const segmentPath = '/_tree' as SegmentRequestKey\n\n const headers: RequestHeaders = {\n [RSC_HEADER]: '1',\n [NEXT_ROUTER_PREFETCH_HEADER]: '1',\n [NEXT_ROUTER_SEGMENT_PREFETCH_HEADER]: segmentPath,\n }\n if (nextUrl !== null) {\n headers[NEXT_URL] = nextUrl\n }\n\n try {\n const url = new URL(pathname + search, location.origin)\n let response\n let urlAfterRedirects\n if (isOutputExportMode) {\n // In output: \"export\" mode, we can't use headers to request a particular\n // segment. Instead, we encode the extra request information into the URL.\n // This is not part of the \"public\" interface of the app; it's an internal\n // Next.js implementation detail that the app developer should not need to\n // concern themselves with.\n //\n // For example, to request a segment:\n //\n // Path passed to : /path/to/page\n // Path passed to fetch: /path/to/page/__next-segments/_tree\n //\n // (This is not the exact protocol, just an illustration.)\n //\n // Before we do that, though, we need to account for redirects. Even in\n // output: \"export\" mode, a proxy might redirect the page to a different\n // location, but we shouldn't assume or expect that they also redirect all\n // the segment files, too.\n //\n // To check whether the page is redirected, previously we perform a range\n // request of 64 bytes of the HTML document to check if the target page\n // is part of this app (by checking if build id matches). Only if the target\n // page is part of this app do we determine the final canonical URL.\n //\n // However, as mentioned in https://github.com/vercel/next.js/pull/85903,\n // some popular static hosting providers (like Cloudflare Pages or Render.com)\n // do not support range requests, in the worst case, the entire HTML instead\n // of 64 bytes could be returned, which is wasteful.\n //\n // So instead, we drops the check for build id here, and simply perform\n // a HEAD request to rejects 1xx/4xx/5xx responses, and then determine the\n // final URL after redirects.\n //\n // NOTE: We could embed the route tree into the HTML document, to avoid\n // a second request. We're not doing that currently because it would make\n // the HTML document larger and affect normal page loads.\n const headResponse = await fetch(url, {\n method: 'HEAD',\n })\n if (headResponse.status < 200 || headResponse.status >= 400) {\n // The target page responded w/o a successful status code\n // Could be a WAF serving a 403, or a 5xx from a backend\n //\n // Note that we can't use headResponse.ok here, because\n // Response#ok returns `false` with 3xx responses.\n rejectRouteCacheEntry(entry, Date.now() + 10 * 1000)\n return null\n }\n\n urlAfterRedirects = headResponse.redirected\n ? new URL(headResponse.url)\n : url\n\n response = await fetchPrefetchResponse(\n addSegmentPathToUrlInOutputExportMode(urlAfterRedirects, segmentPath),\n headers\n )\n } else {\n // \"Server\" mode. We can use request headers instead of the pathname.\n // TODO: The eventual plan is to get rid of our custom request headers and\n // encode everything into the URL, using a similar strategy to the\n // \"output: export\" block above.\n response = await fetchPrefetchResponse(url, headers)\n urlAfterRedirects =\n response !== null && response.redirected ? new URL(response.url) : url\n }\n\n if (\n !response ||\n !response.ok ||\n // 204 is a Cache miss. Though theoretically this shouldn't happen when\n // PPR is enabled, because we always respond to route tree requests, even\n // if it needs to be blockingly generated on demand.\n response.status === 204 ||\n !response.body\n ) {\n // Server responded with an error, or with a miss. We should still cache\n // the response, but we can try again after 10 seconds.\n rejectRouteCacheEntry(entry, Date.now() + 10 * 1000)\n return null\n }\n\n // TODO: The canonical URL is the href without the origin. I think\n // historically the reason for this is because the initial canonical URL\n // gets passed as a prop to the top-level React component, which means it\n // needs to be computed during SSR. If it were to include the origin, it\n // would need to always be same as location.origin on the client, to prevent\n // a hydration mismatch. To sidestep this complexity, we omit the origin.\n //\n // However, since this is neither a native URL object nor a fully qualified\n // URL string, we need to be careful about how we use it. To prevent subtle\n // mistakes, we should create a special type for it, instead of just string.\n // Or, we should just use a (readonly) URL object instead. The type of the\n // prop that we pass to seed the initial state does not need to be the same\n // type as the state itself.\n const canonicalUrl = createHrefFromUrl(urlAfterRedirects)\n\n // Check whether the response varies based on the Next-Url header.\n const varyHeader = response.headers.get('vary')\n const couldBeIntercepted =\n varyHeader !== null && varyHeader.includes(NEXT_URL)\n\n // Track when the network connection closes.\n const closed = createPromiseWithResolvers()\n\n // This checks whether the response was served from the per-segment cache,\n // rather than the old prefetching flow. If it fails, it implies that PPR\n // is disabled on this route.\n const routeIsPPREnabled =\n response.headers.get(NEXT_DID_POSTPONE_HEADER) === '2' ||\n // In output: \"export\" mode, we can't rely on response headers. But if we\n // receive a well-formed response, we can assume it's a static response,\n // because all data is static in this mode.\n isOutputExportMode\n\n if (routeIsPPREnabled) {\n const prefetchStream = createPrefetchResponseStream(\n response.body,\n closed.resolve,\n function onResponseSizeUpdate(size) {\n setSizeInCacheMap(entry, size)\n }\n )\n const serverData = await createFromNextReadableStream(\n prefetchStream,\n headers\n )\n if (serverData.buildId !== getAppBuildId()) {\n // The server build does not match the client. Treat as a 404. During\n // an actual navigation, the router will trigger an MPA navigation.\n // TODO: Consider moving the build ID to a response header so we can check\n // it before decoding the response, and so there's one way of checking\n // across all response types.\n // TODO: We should cache the fact that this is an MPA navigation.\n rejectRouteCacheEntry(entry, Date.now() + 10 * 1000)\n return null\n }\n\n // Get the params that were used to render the target page. These may\n // be different from the params in the request URL, if the page\n // was rewritten.\n const renderedPathname = getRenderedPathname(response)\n const renderedSearch = getRenderedSearch(response)\n\n // Convert the server-sent data into the RouteTree format used by the\n // client cache.\n //\n // During this traversal, we accumulate additional data into this\n // \"accumulator\" object.\n const acc: RouteTreeAccumulator = { metadataVaryPath: null }\n const routeTree = convertRootTreePrefetchToRouteTree(\n serverData,\n renderedPathname,\n renderedSearch,\n acc\n )\n const metadataVaryPath = acc.metadataVaryPath\n if (metadataVaryPath === null) {\n rejectRouteCacheEntry(entry, Date.now() + 10 * 1000)\n return null\n }\n\n const staleTimeMs = getStaleTimeMs(serverData.staleTime)\n fulfillRouteCacheEntry(\n entry,\n routeTree,\n metadataVaryPath,\n Date.now() + staleTimeMs,\n couldBeIntercepted,\n canonicalUrl,\n renderedSearch,\n routeIsPPREnabled\n )\n } else {\n // PPR is not enabled for this route. The server responds with a\n // different format (FlightRouterState) that we need to convert.\n // TODO: We will unify the responses eventually. I'm keeping the types\n // separate for now because FlightRouterState has so many\n // overloaded concerns.\n const prefetchStream = createPrefetchResponseStream(\n response.body,\n closed.resolve,\n function onResponseSizeUpdate(size) {\n setSizeInCacheMap(entry, size)\n }\n )\n const serverData =\n await createFromNextReadableStream(\n prefetchStream,\n headers\n )\n if (serverData.b !== getAppBuildId()) {\n // The server build does not match the client. Treat as a 404. During\n // an actual navigation, the router will trigger an MPA navigation.\n // TODO: Consider moving the build ID to a response header so we can check\n // it before decoding the response, and so there's one way of checking\n // across all response types.\n // TODO: We should cache the fact that this is an MPA navigation.\n rejectRouteCacheEntry(entry, Date.now() + 10 * 1000)\n return null\n }\n\n writeDynamicTreeResponseIntoCache(\n Date.now(),\n task,\n // The non-PPR response format is what we'd get if we prefetched these segments\n // using the LoadingBoundary fetch strategy, so mark their cache entries accordingly.\n FetchStrategy.LoadingBoundary,\n response as RSCResponse,\n serverData,\n entry,\n couldBeIntercepted,\n canonicalUrl,\n routeIsPPREnabled\n )\n }\n\n if (!couldBeIntercepted) {\n // This route will never be intercepted. So we can use this entry for all\n // requests to this route, regardless of the Next-Url header. This works\n // because when reading the cache we always check for a valid\n // non-intercepted entry first.\n\n // Re-key the entry. The `set` implementation handles removing it from\n // its previous position in the cache. We don't need to do anything to\n // update the LRU, because the entry is already in it.\n // TODO: Treat this as an upsert — should check if an entry already\n // exists at the new keypath, and if so, whether we should keep that\n // one instead.\n const fulfilledVaryPath: RouteVaryPath = getFulfilledRouteVaryPath(\n pathname,\n search,\n nextUrl,\n couldBeIntercepted\n )\n const isRevalidation = false\n setInCacheMap(routeCacheMap, fulfilledVaryPath, entry, isRevalidation)\n }\n // Return a promise that resolves when the network connection closes, so\n // the scheduler can track the number of concurrent network connections.\n return { value: null, closed: closed.promise }\n } catch (error) {\n // Either the connection itself failed, or something bad happened while\n // decoding the response.\n rejectRouteCacheEntry(entry, Date.now() + 10 * 1000)\n return null\n }\n}\n\nexport async function fetchSegmentOnCacheMiss(\n route: FulfilledRouteCacheEntry,\n segmentCacheEntry: PendingSegmentCacheEntry,\n routeKey: RouteCacheKey,\n tree: RouteTree\n): Promise | null> {\n // This function is allowed to use async/await because it contains the actual\n // fetch that gets issued on a cache miss. Notice it writes the result to the\n // cache entry directly, rather than return data that is then written by\n // the caller.\n //\n // Segment fetches are non-blocking so we don't need to ping the scheduler\n // on completion.\n\n // Use the canonical URL to request the segment, not the original URL. These\n // are usually the same, but the canonical URL will be different if the route\n // tree response was redirected. To avoid an extra waterfall on every segment\n // request, we pass the redirected URL instead of the original one.\n const url = new URL(route.canonicalUrl, location.origin)\n const nextUrl = routeKey.nextUrl\n\n const requestKey = tree.requestKey\n const normalizedRequestKey =\n requestKey === ROOT_SEGMENT_REQUEST_KEY\n ? // The root segment is a special case. To simplify the server-side\n // handling of these requests, we encode the root segment path as\n // `_index` instead of as an empty string. This should be treated as\n // an implementation detail and not as a stable part of the protocol.\n // It just needs to match the equivalent logic that happens when\n // prerendering the responses. It should not leak outside of Next.js.\n ('/_index' as SegmentRequestKey)\n : requestKey\n\n const headers: RequestHeaders = {\n [RSC_HEADER]: '1',\n [NEXT_ROUTER_PREFETCH_HEADER]: '1',\n [NEXT_ROUTER_SEGMENT_PREFETCH_HEADER]: normalizedRequestKey,\n }\n if (nextUrl !== null) {\n headers[NEXT_URL] = nextUrl\n }\n\n const requestUrl = isOutputExportMode\n ? // In output: \"export\" mode, we need to add the segment path to the URL.\n addSegmentPathToUrlInOutputExportMode(url, normalizedRequestKey)\n : url\n try {\n const response = await fetchPrefetchResponse(requestUrl, headers)\n if (\n !response ||\n !response.ok ||\n response.status === 204 || // Cache miss\n // This checks whether the response was served from the per-segment cache,\n // rather than the old prefetching flow. If it fails, it implies that PPR\n // is disabled on this route. Theoretically this should never happen\n // because we only issue requests for segments once we've verified that\n // the route supports PPR.\n (response.headers.get(NEXT_DID_POSTPONE_HEADER) !== '2' &&\n // In output: \"export\" mode, we can't rely on response headers. But if\n // we receive a well-formed response, we can assume it's a static\n // response, because all data is static in this mode.\n !isOutputExportMode) ||\n !response.body\n ) {\n // Server responded with an error, or with a miss. We should still cache\n // the response, but we can try again after 10 seconds.\n rejectSegmentCacheEntry(segmentCacheEntry, Date.now() + 10 * 1000)\n return null\n }\n\n // Track when the network connection closes.\n const closed = createPromiseWithResolvers()\n\n // Wrap the original stream in a new stream that never closes. That way the\n // Flight client doesn't error if there's a hanging promise.\n const prefetchStream = createPrefetchResponseStream(\n response.body,\n closed.resolve,\n function onResponseSizeUpdate(size) {\n setSizeInCacheMap(segmentCacheEntry, size)\n }\n )\n const serverData = await (createFromNextReadableStream(\n prefetchStream,\n headers\n ) as Promise)\n if (serverData.buildId !== getAppBuildId()) {\n // The server build does not match the client. Treat as a 404. During\n // an actual navigation, the router will trigger an MPA navigation.\n // TODO: Consider moving the build ID to a response header so we can check\n // it before decoding the response, and so there's one way of checking\n // across all response types.\n rejectSegmentCacheEntry(segmentCacheEntry, Date.now() + 10 * 1000)\n return null\n }\n return {\n value: fulfillSegmentCacheEntry(\n segmentCacheEntry,\n serverData.rsc,\n serverData.loading,\n // TODO: The server does not currently provide per-segment stale time.\n // So we use the stale time of the route.\n route.staleAt,\n serverData.isPartial\n ),\n // Return a promise that resolves when the network connection closes, so\n // the scheduler can track the number of concurrent network connections.\n closed: closed.promise,\n }\n } catch (error) {\n // Either the connection itself failed, or something bad happened while\n // decoding the response.\n rejectSegmentCacheEntry(segmentCacheEntry, Date.now() + 10 * 1000)\n return null\n }\n}\n\nexport async function fetchSegmentPrefetchesUsingDynamicRequest(\n task: PrefetchTask,\n route: FulfilledRouteCacheEntry,\n fetchStrategy:\n | FetchStrategy.LoadingBoundary\n | FetchStrategy.PPRRuntime\n | FetchStrategy.Full,\n dynamicRequestTree: FlightRouterState,\n spawnedEntries: Map\n): Promise | null> {\n const key = task.key\n const url = new URL(route.canonicalUrl, location.origin)\n const nextUrl = key.nextUrl\n\n if (\n spawnedEntries.size === 1 &&\n spawnedEntries.has(route.metadata.requestKey)\n ) {\n // The only thing pending is the head. Instruct the server to\n // skip over everything else.\n dynamicRequestTree = MetadataOnlyRequestTree\n }\n\n const headers: RequestHeaders = {\n [RSC_HEADER]: '1',\n [NEXT_ROUTER_STATE_TREE_HEADER]:\n prepareFlightRouterStateForRequest(dynamicRequestTree),\n }\n if (nextUrl !== null) {\n headers[NEXT_URL] = nextUrl\n }\n switch (fetchStrategy) {\n case FetchStrategy.Full: {\n // We omit the prefetch header from a full prefetch because it's essentially\n // just a navigation request that happens ahead of time — it should include\n // all the same data in the response.\n break\n }\n case FetchStrategy.PPRRuntime: {\n headers[NEXT_ROUTER_PREFETCH_HEADER] = '2'\n break\n }\n case FetchStrategy.LoadingBoundary: {\n headers[NEXT_ROUTER_PREFETCH_HEADER] = '1'\n break\n }\n default: {\n fetchStrategy satisfies never\n }\n }\n\n try {\n const response = await fetchPrefetchResponse(url, headers)\n if (!response || !response.ok || !response.body) {\n // Server responded with an error, or with a miss. We should still cache\n // the response, but we can try again after 10 seconds.\n rejectSegmentEntriesIfStillPending(spawnedEntries, Date.now() + 10 * 1000)\n return null\n }\n\n const renderedSearch = getRenderedSearch(response)\n if (renderedSearch !== route.renderedSearch) {\n // The search params that were used to render the target page are\n // different from the search params in the request URL. This only happens\n // when there's a dynamic rewrite in between the tree prefetch and the\n // data prefetch.\n // TODO: For now, since this is an edge case, we reject the prefetch, but\n // the proper way to handle this is to evict the stale route tree entry\n // then fill the cache with the new response.\n rejectSegmentEntriesIfStillPending(spawnedEntries, Date.now() + 10 * 1000)\n return null\n }\n\n // Track when the network connection closes.\n const closed = createPromiseWithResolvers()\n\n let fulfilledEntries: Array | null = null\n const prefetchStream = createPrefetchResponseStream(\n response.body,\n closed.resolve,\n function onResponseSizeUpdate(totalBytesReceivedSoFar) {\n // When processing a dynamic response, we don't know how large each\n // individual segment is, so approximate by assiging each segment\n // the average of the total response size.\n if (fulfilledEntries === null) {\n // Haven't received enough data yet to know which segments\n // were included.\n return\n }\n const averageSize = totalBytesReceivedSoFar / fulfilledEntries.length\n for (const entry of fulfilledEntries) {\n setSizeInCacheMap(entry, averageSize)\n }\n }\n )\n const serverData = await (createFromNextReadableStream(\n prefetchStream,\n headers\n ) as Promise)\n\n const isResponsePartial =\n fetchStrategy === FetchStrategy.PPRRuntime\n ? // A runtime prefetch may have holes.\n serverData.rp?.[0] === true\n : // Full and LoadingBoundary prefetches cannot have holes.\n // (even if we did set the prefetch header, we only use this codepath for non-PPR-enabled routes)\n false\n\n // Aside from writing the data into the cache, this function also returns\n // the entries that were fulfilled, so we can streamingly update their sizes\n // in the LRU as more data comes in.\n fulfilledEntries = writeDynamicRenderResponseIntoCache(\n Date.now(),\n task,\n fetchStrategy,\n response as RSCResponse,\n serverData,\n isResponsePartial,\n route,\n spawnedEntries\n )\n\n // Return a promise that resolves when the network connection closes, so\n // the scheduler can track the number of concurrent network connections.\n return { value: null, closed: closed.promise }\n } catch (error) {\n rejectSegmentEntriesIfStillPending(spawnedEntries, Date.now() + 10 * 1000)\n return null\n }\n}\n\nfunction writeDynamicTreeResponseIntoCache(\n now: number,\n task: PrefetchTask,\n fetchStrategy:\n | FetchStrategy.LoadingBoundary\n | FetchStrategy.PPRRuntime\n | FetchStrategy.Full,\n response: RSCResponse,\n serverData: NavigationFlightResponse,\n entry: PendingRouteCacheEntry,\n couldBeIntercepted: boolean,\n canonicalUrl: string,\n routeIsPPREnabled: boolean\n) {\n // Get the URL that was used to render the target page. This may be different\n // from the URL in the request URL, if the page was rewritten.\n const renderedSearch = getRenderedSearch(response)\n\n const normalizedFlightDataResult = normalizeFlightData(serverData.f)\n if (\n // A string result means navigating to this route will result in an\n // MPA navigation.\n typeof normalizedFlightDataResult === 'string' ||\n normalizedFlightDataResult.length !== 1\n ) {\n rejectRouteCacheEntry(entry, now + 10 * 1000)\n return\n }\n const flightData = normalizedFlightDataResult[0]\n if (!flightData.isRootRender) {\n // Unexpected response format.\n rejectRouteCacheEntry(entry, now + 10 * 1000)\n return\n }\n\n const flightRouterState = flightData.tree\n // For runtime prefetches, stale time is in the payload at rp[1].\n // For other responses, fall back to the header.\n const staleTimeSeconds =\n typeof serverData.rp?.[1] === 'number'\n ? serverData.rp[1]\n : parseInt(response.headers.get(NEXT_ROUTER_STALE_TIME_HEADER) ?? '', 10)\n const staleTimeMs = !isNaN(staleTimeSeconds)\n ? getStaleTimeMs(staleTimeSeconds)\n : STATIC_STALETIME_MS\n\n // If the response contains dynamic holes, then we must conservatively assume\n // that any individual segment might contain dynamic holes, and also the\n // head. If it did not contain dynamic holes, then we can assume every segment\n // and the head is completely static.\n const isResponsePartial =\n response.headers.get(NEXT_DID_POSTPONE_HEADER) === '1'\n\n // Convert the server-sent data into the RouteTree format used by the\n // client cache.\n //\n // During this traversal, we accumulate additional data into this\n // \"accumulator\" object.\n const acc: RouteTreeAccumulator = { metadataVaryPath: null }\n const routeTree = convertRootFlightRouterStateToRouteTree(\n flightRouterState,\n renderedSearch,\n acc\n )\n const metadataVaryPath = acc.metadataVaryPath\n if (metadataVaryPath === null) {\n rejectRouteCacheEntry(entry, now + 10 * 1000)\n return\n }\n\n const fulfilledEntry = fulfillRouteCacheEntry(\n entry,\n routeTree,\n metadataVaryPath,\n now + staleTimeMs,\n couldBeIntercepted,\n canonicalUrl,\n renderedSearch,\n routeIsPPREnabled\n )\n\n // If the server sent segment data as part of the response, we should write\n // it into the cache to prevent a second, redundant prefetch request.\n //\n // TODO: When `clientSegmentCache` is enabled, the server does not include\n // segment data when responding to a route tree prefetch request. However,\n // when `clientSegmentCache` is set to \"client-only\", and PPR is enabled (or\n // the page is fully static), the normal check is bypassed and the server\n // responds with the full page. This is a temporary situation until we can\n // remove the \"client-only\" option. Then, we can delete this function call.\n writeDynamicRenderResponseIntoCache(\n now,\n task,\n fetchStrategy,\n response,\n serverData,\n isResponsePartial,\n fulfilledEntry,\n null\n )\n}\n\nfunction rejectSegmentEntriesIfStillPending(\n entries: Map,\n staleAt: number\n): Array {\n const fulfilledEntries = []\n for (const entry of entries.values()) {\n if (entry.status === EntryStatus.Pending) {\n rejectSegmentCacheEntry(entry, staleAt)\n } else if (entry.status === EntryStatus.Fulfilled) {\n fulfilledEntries.push(entry)\n }\n }\n return fulfilledEntries\n}\n\nfunction writeDynamicRenderResponseIntoCache(\n now: number,\n task: PrefetchTask,\n fetchStrategy:\n | FetchStrategy.LoadingBoundary\n | FetchStrategy.PPRRuntime\n | FetchStrategy.Full,\n response: RSCResponse,\n serverData: NavigationFlightResponse,\n isResponsePartial: boolean,\n route: FulfilledRouteCacheEntry,\n spawnedEntries: Map | null\n): Array | null {\n if (serverData.b !== getAppBuildId()) {\n // The server build does not match the client. Treat as a 404. During\n // an actual navigation, the router will trigger an MPA navigation.\n // TODO: Consider moving the build ID to a response header so we can check\n // it before decoding the response, and so there's one way of checking\n // across all response types.\n if (spawnedEntries !== null) {\n rejectSegmentEntriesIfStillPending(spawnedEntries, now + 10 * 1000)\n }\n return null\n }\n\n const flightDatas = normalizeFlightData(serverData.f)\n if (typeof flightDatas === 'string') {\n // This means navigating to this route will result in an MPA navigation.\n // TODO: We should cache this, too, so that the MPA navigation is immediate.\n return null\n }\n\n // For runtime prefetches, stale time is in the payload at rp[1].\n // For other responses, fall back to the header.\n const staleTimeSeconds =\n typeof serverData.rp?.[1] === 'number'\n ? serverData.rp[1]\n : parseInt(response.headers.get(NEXT_ROUTER_STALE_TIME_HEADER) ?? '', 10)\n const staleTimeMs = !isNaN(staleTimeSeconds)\n ? getStaleTimeMs(staleTimeSeconds)\n : STATIC_STALETIME_MS\n const staleAt = now + staleTimeMs\n\n for (const flightData of flightDatas) {\n const seedData = flightData.seedData\n if (seedData !== null) {\n // The data sent by the server represents only a subtree of the app. We\n // need to find the part of the task tree that matches the response.\n //\n // segmentPath represents the parent path of subtree. It's a repeating\n // pattern of parallel route key and segment:\n //\n // [string, Segment, string, Segment, string, Segment, ...]\n const segmentPath = flightData.segmentPath\n let tree = route.tree\n for (let i = 0; i < segmentPath.length; i += 2) {\n const parallelRouteKey: string = segmentPath[i]\n if (tree?.slots?.[parallelRouteKey] !== undefined) {\n tree = tree.slots[parallelRouteKey]\n } else {\n if (spawnedEntries !== null) {\n rejectSegmentEntriesIfStillPending(spawnedEntries, now + 10 * 1000)\n }\n return null\n }\n }\n\n writeSeedDataIntoCache(\n now,\n task,\n fetchStrategy,\n route,\n tree,\n staleAt,\n seedData,\n isResponsePartial,\n spawnedEntries\n )\n }\n\n const head = flightData.head\n if (head !== null) {\n fulfillEntrySpawnedByRuntimePrefetch(\n now,\n fetchStrategy,\n route,\n head,\n null,\n flightData.isHeadPartial,\n staleAt,\n route.metadata,\n spawnedEntries\n )\n }\n }\n // Any entry that's still pending was intentionally not rendered by the\n // server, because it was inside the loading boundary. Mark them as rejected\n // so we know not to fetch them again.\n // TODO: If PPR is enabled on some routes but not others, then it's possible\n // that a different page is able to do a per-segment prefetch of one of the\n // segments we're marking as rejected here. We should mark on the segment\n // somehow that the reason for the rejection is because of a non-PPR prefetch.\n // That way a per-segment prefetch knows to disregard the rejection.\n if (spawnedEntries !== null) {\n const fulfilledEntries = rejectSegmentEntriesIfStillPending(\n spawnedEntries,\n now + 10 * 1000\n )\n return fulfilledEntries\n }\n return null\n}\n\nfunction writeSeedDataIntoCache(\n now: number,\n task: PrefetchTask,\n fetchStrategy:\n | FetchStrategy.LoadingBoundary\n | FetchStrategy.PPRRuntime\n | FetchStrategy.Full,\n route: FulfilledRouteCacheEntry,\n tree: RouteTree,\n staleAt: number,\n seedData: CacheNodeSeedData,\n isResponsePartial: boolean,\n entriesOwnedByCurrentTask: Map<\n SegmentRequestKey,\n PendingSegmentCacheEntry\n > | null\n) {\n // This function is used to write the result of a runtime server request\n // (CacheNodeSeedData) into the prefetch cache.\n const rsc = seedData[0]\n const loading = seedData[2]\n const isPartial = rsc === null || isResponsePartial\n fulfillEntrySpawnedByRuntimePrefetch(\n now,\n fetchStrategy,\n route,\n rsc,\n loading,\n isPartial,\n staleAt,\n tree,\n entriesOwnedByCurrentTask\n )\n\n // Recursively write the child data into the cache.\n const slots = tree.slots\n if (slots !== null) {\n const seedDataChildren = seedData[1]\n for (const parallelRouteKey in slots) {\n const childTree = slots[parallelRouteKey]\n const childSeedData: CacheNodeSeedData | null | void =\n seedDataChildren[parallelRouteKey]\n if (childSeedData !== null && childSeedData !== undefined) {\n writeSeedDataIntoCache(\n now,\n task,\n fetchStrategy,\n route,\n childTree,\n staleAt,\n childSeedData,\n isResponsePartial,\n entriesOwnedByCurrentTask\n )\n }\n }\n }\n}\n\nfunction fulfillEntrySpawnedByRuntimePrefetch(\n now: number,\n fetchStrategy:\n | FetchStrategy.LoadingBoundary\n | FetchStrategy.PPRRuntime\n | FetchStrategy.Full,\n route: FulfilledRouteCacheEntry,\n rsc: React.ReactNode,\n loading: LoadingModuleData | Promise,\n isPartial: boolean,\n staleAt: number,\n tree: RouteTree,\n entriesOwnedByCurrentTask: Map<\n SegmentRequestKey,\n PendingSegmentCacheEntry\n > | null\n) {\n // We should only write into cache entries that are owned by us. Or create\n // a new one and write into that. We must never write over an entry that was\n // created by a different task, because that causes data races.\n const ownedEntry =\n entriesOwnedByCurrentTask !== null\n ? entriesOwnedByCurrentTask.get(tree.requestKey)\n : undefined\n if (ownedEntry !== undefined) {\n fulfillSegmentCacheEntry(ownedEntry, rsc, loading, staleAt, isPartial)\n } else {\n // There's no matching entry. Attempt to create a new one.\n const possiblyNewEntry = readOrCreateSegmentCacheEntry(\n now,\n fetchStrategy,\n route,\n tree\n )\n if (possiblyNewEntry.status === EntryStatus.Empty) {\n // Confirmed this is a new entry. We can fulfill it.\n const newEntry = possiblyNewEntry\n fulfillSegmentCacheEntry(\n upgradeToPendingSegment(newEntry, fetchStrategy),\n rsc,\n loading,\n staleAt,\n isPartial\n )\n } else {\n // There was already an entry in the cache. But we may be able to\n // replace it with the new one from the server.\n const newEntry = fulfillSegmentCacheEntry(\n upgradeToPendingSegment(\n createDetachedSegmentCacheEntry(staleAt),\n fetchStrategy\n ),\n rsc,\n loading,\n staleAt,\n isPartial\n )\n upsertSegmentEntry(\n now,\n getSegmentVaryPathForRequest(fetchStrategy, tree),\n newEntry\n )\n }\n }\n}\n\nasync function fetchPrefetchResponse(\n url: URL,\n headers: RequestHeaders\n): Promise | null> {\n const fetchPriority = 'low'\n // When issuing a prefetch request, don't immediately decode the response; we\n // use the lower level `createFromResponse` API instead because we need to do\n // some extra processing of the response stream. See\n // `createPrefetchResponseStream` for more details.\n const shouldImmediatelyDecode = false\n const response = await createFetch(\n url,\n headers,\n fetchPriority,\n shouldImmediatelyDecode\n )\n if (!response.ok) {\n return null\n }\n\n // Check the content type\n if (isOutputExportMode) {\n // In output: \"export\" mode, we relaxed about the content type, since it's\n // not Next.js that's serving the response. If the status is OK, assume the\n // response is valid. If it's not a valid response, the Flight client won't\n // be able to decode it, and we'll treat it as a miss.\n } else {\n const contentType = response.headers.get('content-type')\n const isFlightResponse =\n contentType && contentType.startsWith(RSC_CONTENT_TYPE_HEADER)\n if (!isFlightResponse) {\n return null\n }\n }\n return response\n}\n\nfunction createPrefetchResponseStream(\n originalFlightStream: ReadableStream,\n onStreamClose: () => void,\n onResponseSizeUpdate: (size: number) => void\n): ReadableStream {\n // When PPR is enabled, prefetch streams may contain references that never\n // resolve, because that's how we encode dynamic data access. In the decoded\n // object returned by the Flight client, these are reified into hanging\n // promises that suspend during render, which is effectively what we want.\n // The UI resolves when it switches to the dynamic data stream\n // (via useDeferredValue(dynamic, static)).\n //\n // However, the Flight implementation currently errors if the server closes\n // the response before all the references are resolved. As a cheat to work\n // around this, we wrap the original stream in a new stream that never closes,\n // and therefore doesn't error.\n //\n // While processing the original stream, we also incrementally update the size\n // of the cache entry in the LRU.\n let totalByteLength = 0\n const reader = originalFlightStream.getReader()\n return new ReadableStream({\n async pull(controller) {\n while (true) {\n const { done, value } = await reader.read()\n if (!done) {\n // Pass to the target stream and keep consuming the Flight response\n // from the server.\n controller.enqueue(value)\n\n // Incrementally update the size of the cache entry in the LRU.\n // NOTE: Since prefetch responses are delivered in a single chunk,\n // it's not really necessary to do this streamingly, but I'm doing it\n // anyway in case this changes in the future.\n totalByteLength += value.byteLength\n onResponseSizeUpdate(totalByteLength)\n continue\n }\n // The server stream has closed. Exit, but intentionally do not close\n // the target stream. We do notify the caller, though.\n onStreamClose()\n return\n }\n },\n })\n}\n\nfunction addSegmentPathToUrlInOutputExportMode(\n url: URL,\n segmentPath: SegmentRequestKey\n): URL {\n if (isOutputExportMode) {\n // In output: \"export\" mode, we cannot use a header to encode the segment\n // path. Instead, we append it to the end of the pathname.\n const staticUrl = new URL(url)\n const routeDir = staticUrl.pathname.endsWith('/')\n ? staticUrl.pathname.slice(0, -1)\n : staticUrl.pathname\n const staticExportFilename =\n convertSegmentPathToStaticExportFilename(segmentPath)\n staticUrl.pathname = `${routeDir}/${staticExportFilename}`\n return staticUrl\n }\n return url\n}\n\n/**\n * Checks whether the new fetch strategy is likely to provide more content than the old one.\n *\n * Generally, when an app uses dynamic data, a \"more specific\" fetch strategy is expected to provide more content:\n * - `LoadingBoundary` only provides static layouts\n * - `PPR` can provide shells for each segment (even for segments that use dynamic data)\n * - `PPRRuntime` can additionally include content that uses searchParams, params, or cookies\n * - `Full` includes all the content, even if it uses dynamic data\n *\n * However, it's possible that a more specific fetch strategy *won't* give us more content if:\n * - a segment is fully static\n * (then, `PPR`/`PPRRuntime`/`Full` will all yield equivalent results)\n * - providing searchParams/params/cookies doesn't reveal any more content, e.g. because of an `await connection()`\n * (then, `PPR` and `PPRRuntime` will yield equivalent results, only `Full` will give us more)\n * Because of this, when comparing two segments, we should also check if the existing segment is partial.\n * If it's not partial, then there's no need to prefetch it again, even using a \"more specific\" strategy.\n * There's currently no way to know if `PPRRuntime` will yield more data that `PPR`, so we have to assume it will.\n *\n * Also note that, in practice, we don't expect to be comparing `LoadingBoundary` to `PPR`/`PPRRuntime`,\n * because a non-PPR-enabled route wouldn't ever use the latter strategies. It might however use `Full`.\n */\nexport function canNewFetchStrategyProvideMoreContent(\n currentStrategy: FetchStrategy,\n newStrategy: FetchStrategy\n): boolean {\n return currentStrategy < newStrategy\n}\n"],"names":["EntryStatus","canNewFetchStrategyProvideMoreContent","convertRouteTreeToFlightRouterState","createDetachedSegmentCacheEntry","fetchRouteOnCacheMiss","fetchSegmentOnCacheMiss","fetchSegmentPrefetchesUsingDynamicRequest","getCurrentCacheVersion","getStaleTimeMs","overwriteRevalidatingSegmentCacheEntry","pingInvalidationListeners","readOrCreateRevalidatingSegmentEntry","readOrCreateRouteCacheEntry","readOrCreateSegmentCacheEntry","readRouteCacheEntry","readSegmentCacheEntry","requestOptimisticRouteCacheEntry","revalidateEntireCache","upgradeToPendingSegment","upsertSegmentEntry","waitForSegmentCacheEntry","staleTimeSeconds","Math","max","isOutputExportMode","process","env","NODE_ENV","__NEXT_CONFIG_OUTPUT","MetadataOnlyRequestTree","routeCacheMap","createCacheMap","segmentCacheMap","invalidationListeners","currentCacheVersion","nextUrl","tree","startRevalidationCooldown","pingVisibleLinks","attachInvalidationListener","task","onInvalidate","Set","add","notifyInvalidationListener","error","reportError","console","tasks","isPrefetchTaskDirty","now","key","varyPath","getRouteVaryPath","pathname","search","isRevalidation","getFromCacheMap","readRevalidatingSegmentCacheEntry","pendingEntry","promiseWithResolvers","promise","createPromiseWithResolvers","existingEntry","canonicalUrl","status","blockedTasks","metadata","couldBeIntercepted","isPPREnabled","renderedSearch","ref","size","staleAt","Infinity","version","setInCacheMap","requestedUrl","requestedSearch","urlWithoutSearchParams","URL","routeWithNoSearchParams","createPrefetchRequestKey","href","canonicalUrlForRouteWithNoSearchParams","origin","optimisticCanonicalSearch","optimisticRenderedSearch","optimisticUrl","location","optimisticCanonicalUrl","createHrefFromUrl","optimisticRouteTree","createOptimisticRouteTree","optimisticMetadataTree","optimisticEntry","newRenderedSearch","clonedSlots","originalSlots","slots","parallelRouteKey","childTree","isPage","requestKey","segment","clonePageVaryPathWithNewSearchParams","isRootLayout","hasLoadingBoundary","hasRuntimePrefetch","fetchStrategy","route","varyPathForRequest","getSegmentVaryPathForRequest","candidateEntry","isValueExpired","isPartial","rejectedEntry","loading","rsc","deleteFromCacheMap","emptyEntry","FetchStrategy","PPR","Full","pingBlockedTasks","entry","pingPrefetchTask","fulfillRouteCacheEntry","metadataVaryPath","HEAD_REQUEST_KEY","HasLoadingBoundary","SubtreeHasNoLoadingBoundary","fulfilledEntry","fulfillSegmentCacheEntry","segmentCacheEntry","resolve","rejectRouteCacheEntry","rejectSegmentCacheEntry","convertRootTreePrefetchToRouteTree","rootTree","renderedPathname","acc","pathnameParts","split","filter","p","index","rootSegment","ROOT_SEGMENT_REQUEST_KEY","convertTreePrefetchToRouteTree","prefetch","partialVaryPath","pathnamePartsIndex","prefetchSlots","finalizeLayoutVaryPath","childPrefetch","childParamName","name","childParamType","paramType","childServerSentParamKey","paramKey","childDoesAppearInURL","childSegment","childPartialVaryPath","childParamValue","parseDynamicParamFromURLPart","childParamKey","getCacheKeyForDynamicParam","appendLayoutVaryPath","doesStaticSegmentAppearInURL","childPathnamePartsIndex","childRequestKeyPart","createSegmentRequestKeyPart","childRequestKey","appendSegmentRequestKeyPart","endsWith","PAGE_SEGMENT_KEY","finalizePageVaryPath","finalizeMetadataVaryPath","SegmentHasLoadingBoundary","convertRootFlightRouterStateToRouteTree","flightRouterState","convertFlightRouterStateToRouteTree","parentPartialVaryPath","originalSegment","Array","isArray","paramCacheKey","parallelRoutes","childRouterState","undefined","routeTree","segmentPath","headers","RSC_HEADER","NEXT_ROUTER_PREFETCH_HEADER","NEXT_ROUTER_SEGMENT_PREFETCH_HEADER","NEXT_URL","url","response","urlAfterRedirects","headResponse","fetch","method","Date","redirected","fetchPrefetchResponse","addSegmentPathToUrlInOutputExportMode","ok","body","varyHeader","get","includes","closed","routeIsPPREnabled","NEXT_DID_POSTPONE_HEADER","prefetchStream","createPrefetchResponseStream","onResponseSizeUpdate","setSizeInCacheMap","serverData","createFromNextReadableStream","buildId","getAppBuildId","getRenderedPathname","getRenderedSearch","staleTimeMs","staleTime","b","writeDynamicTreeResponseIntoCache","LoadingBoundary","fulfilledVaryPath","getFulfilledRouteVaryPath","value","routeKey","normalizedRequestKey","requestUrl","dynamicRequestTree","spawnedEntries","has","NEXT_ROUTER_STATE_TREE_HEADER","prepareFlightRouterStateForRequest","PPRRuntime","rejectSegmentEntriesIfStillPending","fulfilledEntries","totalBytesReceivedSoFar","averageSize","length","isResponsePartial","rp","writeDynamicRenderResponseIntoCache","normalizedFlightDataResult","normalizeFlightData","f","flightData","isRootRender","parseInt","NEXT_ROUTER_STALE_TIME_HEADER","isNaN","STATIC_STALETIME_MS","entries","values","push","flightDatas","seedData","i","writeSeedDataIntoCache","head","fulfillEntrySpawnedByRuntimePrefetch","isHeadPartial","entriesOwnedByCurrentTask","seedDataChildren","childSeedData","ownedEntry","possiblyNewEntry","newEntry","fetchPriority","shouldImmediatelyDecode","createFetch","contentType","isFlightResponse","startsWith","RSC_CONTENT_TYPE_HEADER","originalFlightStream","onStreamClose","totalByteLength","reader","getReader","ReadableStream","pull","controller","done","read","enqueue","byteLength","staticUrl","routeDir","slice","staticExportFilename","convertSegmentPathToStaticExportFilename","currentStrategy","newStrategy"],"mappings":"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","ignoreList":[0]}}, - {"offset": {"line": 7622, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/segment-cache/navigation.ts"],"sourcesContent":["import type {\n CacheNodeSeedData,\n FlightRouterState,\n FlightSegmentPath,\n} from '../../../shared/lib/app-router-types'\nimport type { CacheNode } from '../../../shared/lib/app-router-types'\nimport type {\n HeadData,\n LoadingModuleData,\n} from '../../../shared/lib/app-router-types'\nimport type { NormalizedFlightData } from '../../flight-data-helpers'\nimport { fetchServerResponse } from '../router-reducer/fetch-server-response'\nimport {\n startPPRNavigation,\n spawnDynamicRequests,\n FreshnessPolicy,\n type NavigationTask,\n type NavigationRequestAccumulation,\n} from '../router-reducer/ppr-navigations'\nimport { createHrefFromUrl } from '../router-reducer/create-href-from-url'\nimport {\n EntryStatus,\n readRouteCacheEntry,\n readSegmentCacheEntry,\n waitForSegmentCacheEntry,\n requestOptimisticRouteCacheEntry,\n type RouteTree,\n type FulfilledRouteCacheEntry,\n} from './cache'\nimport { createCacheKey } from './cache-key'\nimport { addSearchParamsIfPageSegment } from '../../../shared/lib/segment'\nimport { NavigationResultTag } from './types'\n\ntype MPANavigationResult = {\n tag: NavigationResultTag.MPA\n data: string\n}\n\ntype SuccessfulNavigationResult = {\n tag: NavigationResultTag.Success\n data: {\n flightRouterState: FlightRouterState\n cacheNode: CacheNode\n canonicalUrl: string\n renderedSearch: string\n scrollableSegments: Array | null\n shouldScroll: boolean\n hash: string\n }\n}\n\ntype AsyncNavigationResult = {\n tag: NavigationResultTag.Async\n data: Promise\n}\n\nexport type NavigationResult =\n | MPANavigationResult\n | SuccessfulNavigationResult\n | AsyncNavigationResult\n\n/**\n * Navigate to a new URL, using the Segment Cache to construct a response.\n *\n * To allow for synchronous navigations whenever possible, this is not an async\n * function. It returns a promise only if there's no matching prefetch in\n * the cache. Otherwise it returns an immediate result and uses Suspense/RSC to\n * stream in any missing data.\n */\nexport function navigate(\n url: URL,\n currentUrl: URL,\n currentCacheNode: CacheNode | null,\n currentFlightRouterState: FlightRouterState,\n nextUrl: string | null,\n freshnessPolicy: FreshnessPolicy,\n shouldScroll: boolean,\n accumulation: { collectedDebugInfo?: Array }\n): NavigationResult {\n const now = Date.now()\n const href = url.href\n\n // We special case navigations to the exact same URL as the current location.\n // It's a common UI pattern for apps to refresh when you click a link to the\n // current page. So when this happens, we refresh the dynamic data in the page\n // segments.\n //\n // Note that this does not apply if the any part of the hash or search query\n // has changed. This might feel a bit weird but it makes more sense when you\n // consider that the way to trigger this behavior is to click the same link\n // multiple times.\n //\n // TODO: We should probably refresh the *entire* route when this case occurs,\n // not just the page segments. Essentially treating it the same as a refresh()\n // triggered by an action, which is the more explicit way of modeling the UI\n // pattern described above.\n //\n // Also note that this only refreshes the dynamic data, not static/ cached\n // data. If the page segment is fully static and prefetched, the request is\n // skipped. (This is also how refresh() works.)\n const isSamePageNavigation = href === currentUrl.href\n\n const cacheKey = createCacheKey(href, nextUrl)\n const route = readRouteCacheEntry(now, cacheKey)\n if (route !== null && route.status === EntryStatus.Fulfilled) {\n // We have a matching prefetch.\n const snapshot = readRenderSnapshotFromCache(now, route, route.tree)\n const prefetchFlightRouterState = snapshot.flightRouterState\n const prefetchSeedData = snapshot.seedData\n const headSnapshot = readHeadSnapshotFromCache(now, route)\n const prefetchHead = headSnapshot.rsc\n const isPrefetchHeadPartial = headSnapshot.isPartial\n // TODO: The \"canonicalUrl\" stored in the cache doesn't include the hash,\n // because hash entries do not vary by hash fragment. However, the one\n // we set in the router state *does* include the hash, and it's used to\n // sync with the actual browser location. To make this less of a refactor\n // hazard, we should always track the hash separately from the rest of\n // the URL.\n const newCanonicalUrl = route.canonicalUrl + url.hash\n const renderedSearch = route.renderedSearch\n return navigateUsingPrefetchedRouteTree(\n now,\n url,\n currentUrl,\n nextUrl,\n isSamePageNavigation,\n currentCacheNode,\n currentFlightRouterState,\n prefetchFlightRouterState,\n prefetchSeedData,\n prefetchHead,\n isPrefetchHeadPartial,\n newCanonicalUrl,\n renderedSearch,\n freshnessPolicy,\n shouldScroll\n )\n }\n\n // There was no matching route tree in the cache. Let's see if we can\n // construct an \"optimistic\" route tree.\n //\n // Do not construct an optimistic route tree if there was a cache hit, but\n // the entry has a rejected status, since it may have been rejected due to a\n // rewrite or redirect based on the search params.\n //\n // TODO: There are multiple reasons a prefetch might be rejected; we should\n // track them explicitly and choose what to do here based on that.\n if (route === null || route.status !== EntryStatus.Rejected) {\n const optimisticRoute = requestOptimisticRouteCacheEntry(now, url, nextUrl)\n if (optimisticRoute !== null) {\n // We have an optimistic route tree. Proceed with the normal flow.\n const snapshot = readRenderSnapshotFromCache(\n now,\n optimisticRoute,\n optimisticRoute.tree\n )\n const prefetchFlightRouterState = snapshot.flightRouterState\n const prefetchSeedData = snapshot.seedData\n const headSnapshot = readHeadSnapshotFromCache(now, optimisticRoute)\n const prefetchHead = headSnapshot.rsc\n const isPrefetchHeadPartial = headSnapshot.isPartial\n const newCanonicalUrl = optimisticRoute.canonicalUrl + url.hash\n const newRenderedSearch = optimisticRoute.renderedSearch\n return navigateUsingPrefetchedRouteTree(\n now,\n url,\n currentUrl,\n nextUrl,\n isSamePageNavigation,\n currentCacheNode,\n currentFlightRouterState,\n prefetchFlightRouterState,\n prefetchSeedData,\n prefetchHead,\n isPrefetchHeadPartial,\n newCanonicalUrl,\n newRenderedSearch,\n freshnessPolicy,\n shouldScroll\n )\n }\n }\n\n // There's no matching prefetch for this route in the cache.\n let collectedDebugInfo = accumulation.collectedDebugInfo ?? []\n if (accumulation.collectedDebugInfo === undefined) {\n collectedDebugInfo = accumulation.collectedDebugInfo = []\n }\n return {\n tag: NavigationResultTag.Async,\n data: navigateDynamicallyWithNoPrefetch(\n now,\n url,\n currentUrl,\n nextUrl,\n currentCacheNode,\n currentFlightRouterState,\n freshnessPolicy,\n shouldScroll,\n collectedDebugInfo\n ),\n }\n}\n\nexport function navigateToSeededRoute(\n now: number,\n url: URL,\n canonicalUrl: string,\n navigationSeed: NavigationSeed,\n currentUrl: URL,\n currentCacheNode: CacheNode | null,\n currentFlightRouterState: FlightRouterState,\n freshnessPolicy: FreshnessPolicy,\n nextUrl: string | null,\n shouldScroll: boolean\n): SuccessfulNavigationResult | MPANavigationResult {\n // A version of navigate() that accepts the target route tree as an argument\n // rather than reading it from the prefetch cache.\n const accumulation: NavigationRequestAccumulation = {\n scrollableSegments: null,\n separateRefreshUrls: null,\n }\n const isSamePageNavigation = url.href === currentUrl.href\n const task = startPPRNavigation(\n now,\n currentUrl,\n currentCacheNode,\n currentFlightRouterState,\n navigationSeed.tree,\n freshnessPolicy,\n navigationSeed.data,\n navigationSeed.head,\n null,\n null,\n false,\n isSamePageNavigation,\n accumulation\n )\n if (task !== null) {\n spawnDynamicRequests(task, url, nextUrl, freshnessPolicy, accumulation)\n return navigationTaskToResult(\n task,\n canonicalUrl,\n navigationSeed.renderedSearch,\n accumulation.scrollableSegments,\n shouldScroll,\n url.hash\n )\n }\n // Could not perform a SPA navigation. Revert to a full-page (MPA) navigation.\n return {\n tag: NavigationResultTag.MPA,\n data: canonicalUrl,\n }\n}\n\nfunction navigateUsingPrefetchedRouteTree(\n now: number,\n url: URL,\n currentUrl: URL,\n nextUrl: string | null,\n isSamePageNavigation: boolean,\n currentCacheNode: CacheNode | null,\n currentFlightRouterState: FlightRouterState,\n prefetchFlightRouterState: FlightRouterState,\n prefetchSeedData: CacheNodeSeedData | null,\n prefetchHead: HeadData | null,\n isPrefetchHeadPartial: boolean,\n canonicalUrl: string,\n renderedSearch: string,\n freshnessPolicy: FreshnessPolicy,\n shouldScroll: boolean\n): SuccessfulNavigationResult | MPANavigationResult {\n // Recursively construct a prefetch tree by reading from the Segment Cache. To\n // maintain compatibility, we output the same data structures as the old\n // prefetching implementation: FlightRouterState and CacheNodeSeedData.\n // TODO: Eventually updateCacheNodeOnNavigation (or the equivalent) should\n // read from the Segment Cache directly. It's only structured this way for now\n // so we can share code with the old prefetching implementation.\n const accumulation: NavigationRequestAccumulation = {\n scrollableSegments: null,\n separateRefreshUrls: null,\n }\n const seedData = null\n const seedHead = null\n const task = startPPRNavigation(\n now,\n currentUrl,\n currentCacheNode,\n currentFlightRouterState,\n prefetchFlightRouterState,\n freshnessPolicy,\n seedData,\n seedHead,\n prefetchSeedData,\n prefetchHead,\n isPrefetchHeadPartial,\n isSamePageNavigation,\n accumulation\n )\n if (task !== null) {\n spawnDynamicRequests(task, url, nextUrl, freshnessPolicy, accumulation)\n return navigationTaskToResult(\n task,\n canonicalUrl,\n renderedSearch,\n accumulation.scrollableSegments,\n shouldScroll,\n url.hash\n )\n }\n // Could not perform a SPA navigation. Revert to a full-page (MPA) navigation.\n return {\n tag: NavigationResultTag.MPA,\n data: canonicalUrl,\n }\n}\n\nfunction navigationTaskToResult(\n task: NavigationTask,\n canonicalUrl: string,\n renderedSearch: string,\n scrollableSegments: Array | null,\n shouldScroll: boolean,\n hash: string\n): SuccessfulNavigationResult | MPANavigationResult {\n return {\n tag: NavigationResultTag.Success,\n data: {\n flightRouterState: task.route,\n cacheNode: task.node,\n canonicalUrl,\n renderedSearch,\n scrollableSegments,\n shouldScroll,\n hash,\n },\n }\n}\n\nfunction readRenderSnapshotFromCache(\n now: number,\n route: FulfilledRouteCacheEntry,\n tree: RouteTree\n): { flightRouterState: FlightRouterState; seedData: CacheNodeSeedData } {\n let childRouterStates: { [parallelRouteKey: string]: FlightRouterState } = {}\n let childSeedDatas: {\n [parallelRouteKey: string]: CacheNodeSeedData | null\n } = {}\n const slots = tree.slots\n if (slots !== null) {\n for (const parallelRouteKey in slots) {\n const childTree = slots[parallelRouteKey]\n const childResult = readRenderSnapshotFromCache(now, route, childTree)\n childRouterStates[parallelRouteKey] = childResult.flightRouterState\n childSeedDatas[parallelRouteKey] = childResult.seedData\n }\n }\n\n let rsc: React.ReactNode | null = null\n let loading: LoadingModuleData | Promise = null\n let isPartial: boolean = true\n\n const segmentEntry = readSegmentCacheEntry(now, tree.varyPath)\n if (segmentEntry !== null) {\n switch (segmentEntry.status) {\n case EntryStatus.Fulfilled: {\n // Happy path: a cache hit\n rsc = segmentEntry.rsc\n loading = segmentEntry.loading\n isPartial = segmentEntry.isPartial\n break\n }\n case EntryStatus.Pending: {\n // We haven't received data for this segment yet, but there's already\n // an in-progress request. Since it's extremely likely to arrive\n // before the dynamic data response, we might as well use it.\n const promiseForFulfilledEntry = waitForSegmentCacheEntry(segmentEntry)\n rsc = promiseForFulfilledEntry.then((entry) =>\n entry !== null ? entry.rsc : null\n )\n loading = promiseForFulfilledEntry.then((entry) =>\n entry !== null ? entry.loading : null\n )\n // Because the request is still pending, we typically don't know yet\n // whether the response will be partial. We shouldn't skip this segment\n // during the dynamic navigation request. Otherwise, we might need to\n // do yet another request to fill in the remaining data, creating\n // a waterfall.\n //\n // The one exception is if this segment is being fetched with via\n // prefetch={true} (i.e. the \"force stale\" or \"full\" strategy). If so,\n // we can assume the response will be full. This field is set to `false`\n // for such segments.\n isPartial = segmentEntry.isPartial\n break\n }\n case EntryStatus.Empty:\n case EntryStatus.Rejected:\n break\n default:\n segmentEntry satisfies never\n }\n }\n\n // The navigation implementation expects the search params to be\n // included in the segment. However, the Segment Cache tracks search\n // params separately from the rest of the segment key. So we need to\n // add them back here.\n //\n // See corresponding comment in convertFlightRouterStateToTree.\n //\n // TODO: What we should do instead is update the navigation diffing\n // logic to compare search params explicitly. This is a temporary\n // solution until more of the Segment Cache implementation has settled.\n const segment = addSearchParamsIfPageSegment(\n tree.segment,\n Object.fromEntries(new URLSearchParams(route.renderedSearch))\n )\n\n // We don't need this information in a render snapshot, so this can just be a placeholder.\n const hasRuntimePrefetch = false\n\n return {\n flightRouterState: [\n segment,\n childRouterStates,\n null,\n null,\n tree.isRootLayout,\n ],\n seedData: [rsc, childSeedDatas, loading, isPartial, hasRuntimePrefetch],\n }\n}\n\nfunction readHeadSnapshotFromCache(\n now: number,\n route: FulfilledRouteCacheEntry\n): { rsc: HeadData; isPartial: boolean } {\n // Same as readRenderSnapshotFromCache, but for the head\n let rsc: React.ReactNode | null = null\n let isPartial: boolean = true\n const segmentEntry = readSegmentCacheEntry(now, route.metadata.varyPath)\n if (segmentEntry !== null) {\n switch (segmentEntry.status) {\n case EntryStatus.Fulfilled: {\n rsc = segmentEntry.rsc\n isPartial = segmentEntry.isPartial\n break\n }\n case EntryStatus.Pending: {\n const promiseForFulfilledEntry = waitForSegmentCacheEntry(segmentEntry)\n rsc = promiseForFulfilledEntry.then((entry) =>\n entry !== null ? entry.rsc : null\n )\n isPartial = segmentEntry.isPartial\n break\n }\n case EntryStatus.Empty:\n case EntryStatus.Rejected:\n break\n default:\n segmentEntry satisfies never\n }\n }\n return { rsc, isPartial }\n}\n\n// Used to request all the dynamic data for a route, rather than just a subset,\n// e.g. during a refresh or a revalidation. Typically this gets constructed\n// during the normal flow when diffing the route tree, but for an unprefetched\n// navigation, where we don't know the structure of the target route, we use\n// this instead.\nconst DynamicRequestTreeForEntireRoute: FlightRouterState = [\n '',\n {},\n null,\n 'refetch',\n]\n\nasync function navigateDynamicallyWithNoPrefetch(\n now: number,\n url: URL,\n currentUrl: URL,\n nextUrl: string | null,\n currentCacheNode: CacheNode | null,\n currentFlightRouterState: FlightRouterState,\n freshnessPolicy: FreshnessPolicy,\n shouldScroll: boolean,\n collectedDebugInfo: Array\n): Promise {\n // Runs when a navigation happens but there's no cached prefetch we can use.\n // Don't bother to wait for a prefetch response; go straight to a full\n // navigation that contains both static and dynamic data in a single stream.\n // (This is unlike the old navigation implementation, which instead blocks\n // the dynamic request until a prefetch request is received.)\n //\n // To avoid duplication of logic, we're going to pretend that the tree\n // returned by the dynamic request is, in fact, a prefetch tree. Then we can\n // use the same server response to write the actual data into the CacheNode\n // tree. So it's the same flow as the \"happy path\" (prefetch, then\n // navigation), except we use a single server response for both stages.\n\n let dynamicRequestTree: FlightRouterState\n switch (freshnessPolicy) {\n case FreshnessPolicy.Default:\n case FreshnessPolicy.HistoryTraversal:\n dynamicRequestTree = currentFlightRouterState\n break\n case FreshnessPolicy.Hydration: // <- shouldn't happen during client nav\n case FreshnessPolicy.RefreshAll:\n case FreshnessPolicy.HMRRefresh:\n dynamicRequestTree = DynamicRequestTreeForEntireRoute\n break\n default:\n freshnessPolicy satisfies never\n dynamicRequestTree = currentFlightRouterState\n break\n }\n\n const promiseForDynamicServerResponse = fetchServerResponse(url, {\n flightRouterState: dynamicRequestTree,\n nextUrl,\n })\n const result = await promiseForDynamicServerResponse\n if (typeof result === 'string') {\n // This is an MPA navigation.\n const newUrl = result\n return {\n tag: NavigationResultTag.MPA,\n data: newUrl,\n }\n }\n\n const {\n flightData,\n canonicalUrl,\n renderedSearch,\n debugInfo: debugInfoFromResponse,\n } = result\n if (debugInfoFromResponse !== null) {\n collectedDebugInfo.push(...debugInfoFromResponse)\n }\n\n // Since the response format of dynamic requests and prefetches is slightly\n // different, we'll need to massage the data a bit. Create FlightRouterState\n // tree that simulates what we'd receive as the result of a prefetch.\n const navigationSeed = convertServerPatchToFullTree(\n currentFlightRouterState,\n flightData,\n renderedSearch\n )\n\n return navigateToSeededRoute(\n now,\n url,\n createHrefFromUrl(canonicalUrl),\n navigationSeed,\n currentUrl,\n currentCacheNode,\n currentFlightRouterState,\n freshnessPolicy,\n nextUrl,\n shouldScroll\n )\n}\n\nexport type NavigationSeed = {\n tree: FlightRouterState\n renderedSearch: string\n data: CacheNodeSeedData | null\n head: HeadData | null\n}\n\nexport function convertServerPatchToFullTree(\n currentTree: FlightRouterState,\n flightData: Array,\n renderedSearch: string\n): NavigationSeed {\n // During a client navigation or prefetch, the server sends back only a patch\n // for the parts of the tree that have changed.\n //\n // This applies the patch to the base tree to create a full representation of\n // the resulting tree.\n //\n // The return type includes a full FlightRouterState tree and a full\n // CacheNodeSeedData tree. (Conceptually these are the same tree, and should\n // eventually be unified, but there's still lots of existing code that\n // operates on FlightRouterState trees alone without the CacheNodeSeedData.)\n //\n // TODO: This similar to what apply-router-state-patch-to-tree does. It\n // will eventually fully replace it. We should get rid of all the remaining\n // places where we iterate over the server patch format. This should also\n // eventually replace normalizeFlightData.\n\n let baseTree: FlightRouterState = currentTree\n let baseData: CacheNodeSeedData | null = null\n let head: HeadData | null = null\n for (const {\n segmentPath,\n tree: treePatch,\n seedData: dataPatch,\n head: headPatch,\n } of flightData) {\n const result = convertServerPatchToFullTreeImpl(\n baseTree,\n baseData,\n treePatch,\n dataPatch,\n segmentPath,\n 0\n )\n baseTree = result.tree\n baseData = result.data\n // This is the same for all patches per response, so just pick an\n // arbitrary one\n head = headPatch\n }\n\n return {\n tree: baseTree,\n data: baseData,\n renderedSearch,\n head,\n }\n}\n\nfunction convertServerPatchToFullTreeImpl(\n baseRouterState: FlightRouterState,\n baseData: CacheNodeSeedData | null,\n treePatch: FlightRouterState,\n dataPatch: CacheNodeSeedData | null,\n segmentPath: FlightSegmentPath,\n index: number\n): { tree: FlightRouterState; data: CacheNodeSeedData | null } {\n if (index === segmentPath.length) {\n // We reached the part of the tree that we need to patch.\n return {\n tree: treePatch,\n data: dataPatch,\n }\n }\n\n // segmentPath represents the parent path of subtree. It's a repeating\n // pattern of parallel route key and segment:\n //\n // [string, Segment, string, Segment, string, Segment, ...]\n //\n // This path tells us which part of the base tree to apply the tree patch.\n //\n // NOTE: We receive the FlightRouterState patch in the same request as the\n // seed data patch. Therefore we don't need to worry about diffing the segment\n // values; we can assume the server sent us a correct result.\n const updatedParallelRouteKey: string = segmentPath[index]\n // const segment: Segment = segmentPath[index + 1] <-- Not used, see note above\n\n const baseTreeChildren = baseRouterState[1]\n const baseSeedDataChildren = baseData !== null ? baseData[1] : null\n const newTreeChildren: Record = {}\n const newSeedDataChildren: Record = {}\n for (const parallelRouteKey in baseTreeChildren) {\n const childBaseRouterState = baseTreeChildren[parallelRouteKey]\n const childBaseSeedData =\n baseSeedDataChildren !== null\n ? (baseSeedDataChildren[parallelRouteKey] ?? null)\n : null\n if (parallelRouteKey === updatedParallelRouteKey) {\n const result = convertServerPatchToFullTreeImpl(\n childBaseRouterState,\n childBaseSeedData,\n treePatch,\n dataPatch,\n segmentPath,\n // Advance the index by two and keep cloning until we reach\n // the end of the segment path.\n index + 2\n )\n\n newTreeChildren[parallelRouteKey] = result.tree\n newSeedDataChildren[parallelRouteKey] = result.data\n } else {\n // This child is not being patched. Copy it over as-is.\n newTreeChildren[parallelRouteKey] = childBaseRouterState\n newSeedDataChildren[parallelRouteKey] = childBaseSeedData\n }\n }\n\n let clonedTree: FlightRouterState\n let clonedSeedData: CacheNodeSeedData\n // Clone all the fields except the children.\n\n // Clone the FlightRouterState tree. Based on equivalent logic in\n // apply-router-state-patch-to-tree, but should confirm whether we need to\n // copy all of these fields. Not sure the server ever sends, e.g. the\n // refetch marker.\n clonedTree = [baseRouterState[0], newTreeChildren]\n if (2 in baseRouterState) {\n clonedTree[2] = baseRouterState[2]\n }\n if (3 in baseRouterState) {\n clonedTree[3] = baseRouterState[3]\n }\n if (4 in baseRouterState) {\n clonedTree[4] = baseRouterState[4]\n }\n\n // Clone the CacheNodeSeedData tree.\n const isEmptySeedDataPartial = true\n clonedSeedData = [\n null,\n newSeedDataChildren,\n null,\n isEmptySeedDataPartial,\n false,\n ]\n\n return {\n tree: clonedTree,\n data: clonedSeedData,\n }\n}\n"],"names":["convertServerPatchToFullTree","navigate","navigateToSeededRoute","url","currentUrl","currentCacheNode","currentFlightRouterState","nextUrl","freshnessPolicy","shouldScroll","accumulation","now","Date","href","isSamePageNavigation","cacheKey","createCacheKey","route","readRouteCacheEntry","status","EntryStatus","Fulfilled","snapshot","readRenderSnapshotFromCache","tree","prefetchFlightRouterState","flightRouterState","prefetchSeedData","seedData","headSnapshot","readHeadSnapshotFromCache","prefetchHead","rsc","isPrefetchHeadPartial","isPartial","newCanonicalUrl","canonicalUrl","hash","renderedSearch","navigateUsingPrefetchedRouteTree","Rejected","optimisticRoute","requestOptimisticRouteCacheEntry","newRenderedSearch","collectedDebugInfo","undefined","tag","NavigationResultTag","Async","data","navigateDynamicallyWithNoPrefetch","navigationSeed","scrollableSegments","separateRefreshUrls","task","startPPRNavigation","head","spawnDynamicRequests","navigationTaskToResult","MPA","seedHead","Success","cacheNode","node","childRouterStates","childSeedDatas","slots","parallelRouteKey","childTree","childResult","loading","segmentEntry","readSegmentCacheEntry","varyPath","Pending","promiseForFulfilledEntry","waitForSegmentCacheEntry","then","entry","Empty","segment","addSearchParamsIfPageSegment","Object","fromEntries","URLSearchParams","hasRuntimePrefetch","isRootLayout","metadata","DynamicRequestTreeForEntireRoute","dynamicRequestTree","FreshnessPolicy","Default","HistoryTraversal","Hydration","RefreshAll","HMRRefresh","promiseForDynamicServerResponse","fetchServerResponse","result","newUrl","flightData","debugInfo","debugInfoFromResponse","push","createHrefFromUrl","currentTree","baseTree","baseData","segmentPath","treePatch","dataPatch","headPatch","convertServerPatchToFullTreeImpl","baseRouterState","index","length","updatedParallelRouteKey","baseTreeChildren","baseSeedDataChildren","newTreeChildren","newSeedDataChildren","childBaseRouterState","childBaseSeedData","clonedTree","clonedSeedData","isEmptySeedDataPartial"],"mappings":"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","ignoreList":[0]}}, - {"offset": {"line": 8082, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/router-reducer/reducers/navigate-reducer.ts"],"sourcesContent":["import type {\n FlightRouterState,\n FlightSegmentPath,\n} from '../../../../shared/lib/app-router-types'\nimport { createHrefFromUrl } from '../create-href-from-url'\nimport type {\n Mutable,\n NavigateAction,\n ReadonlyReducerState,\n ReducerState,\n} from '../router-reducer-types'\nimport { handleMutable } from '../handle-mutable'\n\nimport {\n navigate as navigateUsingSegmentCache,\n type NavigationResult,\n} from '../../segment-cache/navigation'\nimport { NavigationResultTag } from '../../segment-cache/types'\nimport { getStaleTimeMs } from '../../segment-cache/cache'\nimport { FreshnessPolicy } from '../ppr-navigations'\n\n// These values are set by `define-env-plugin` (based on `nextConfig.experimental.staleTimes`)\n// and default to 5 minutes (static) / 0 seconds (dynamic)\nexport const DYNAMIC_STALETIME_MS =\n Number(process.env.__NEXT_CLIENT_ROUTER_DYNAMIC_STALETIME) * 1000\n\nexport const STATIC_STALETIME_MS = getStaleTimeMs(\n Number(process.env.__NEXT_CLIENT_ROUTER_STATIC_STALETIME)\n)\n\nexport function handleExternalUrl(\n state: ReadonlyReducerState,\n mutable: Mutable,\n url: string,\n pendingPush: boolean\n) {\n mutable.mpaNavigation = true\n mutable.canonicalUrl = url\n mutable.pendingPush = pendingPush\n mutable.scrollableSegments = undefined\n\n return handleMutable(state, mutable)\n}\n\nexport function generateSegmentsFromPatch(\n flightRouterPatch: FlightRouterState\n): FlightSegmentPath[] {\n const segments: FlightSegmentPath[] = []\n const [segment, parallelRoutes] = flightRouterPatch\n\n if (Object.keys(parallelRoutes).length === 0) {\n return [[segment]]\n }\n\n for (const [parallelRouteKey, parallelRoute] of Object.entries(\n parallelRoutes\n )) {\n for (const childSegment of generateSegmentsFromPatch(parallelRoute)) {\n // If the segment is empty, it means we are at the root of the tree\n if (segment === '') {\n segments.push([parallelRouteKey, ...childSegment])\n } else {\n segments.push([segment, parallelRouteKey, ...childSegment])\n }\n }\n }\n\n return segments\n}\n\nexport function handleNavigationResult(\n url: URL,\n state: ReadonlyReducerState,\n mutable: Mutable,\n pendingPush: boolean,\n result: NavigationResult\n): ReducerState {\n switch (result.tag) {\n case NavigationResultTag.MPA: {\n // Perform an MPA navigation.\n const newUrl = result.data\n return handleExternalUrl(state, mutable, newUrl, pendingPush)\n }\n case NavigationResultTag.Success: {\n // Received a new result.\n mutable.cache = result.data.cacheNode\n mutable.patchedTree = result.data.flightRouterState\n mutable.renderedSearch = result.data.renderedSearch\n mutable.canonicalUrl = result.data.canonicalUrl\n // TODO: During a refresh, we don't set the `scrollableSegments`. There's\n // some confusing and subtle logic in `handleMutable` that decides what\n // to do when `shouldScroll` is set but `scrollableSegments` is not. I'm\n // not convinced it's totally coherent but the tests assert on this\n // particular behavior so I've ported the logic as-is from the previous\n // router implementation, for now.\n mutable.scrollableSegments = result.data.scrollableSegments ?? undefined\n mutable.shouldScroll = result.data.shouldScroll\n mutable.hashFragment = result.data.hash\n\n // Check if the only thing that changed was the hash fragment.\n const oldUrl = new URL(state.canonicalUrl, url)\n const onlyHashChange =\n // We don't need to compare the origins, because client-driven\n // navigations are always same-origin.\n url.pathname === oldUrl.pathname &&\n url.search === oldUrl.search &&\n url.hash !== oldUrl.hash\n if (onlyHashChange) {\n // The only updated part of the URL is the hash.\n mutable.onlyHashChange = true\n mutable.shouldScroll = result.data.shouldScroll\n mutable.hashFragment = url.hash\n // Setting this to an empty array triggers a scroll for all new and\n // updated segments. See `ScrollAndFocusHandler` for more details.\n mutable.scrollableSegments = []\n }\n\n return handleMutable(state, mutable)\n }\n case NavigationResultTag.Async: {\n return result.data.then(\n (asyncResult) =>\n handleNavigationResult(url, state, mutable, pendingPush, asyncResult),\n // If the navigation failed, return the current state.\n // TODO: This matches the current behavior but we need to do something\n // better here if the network fails.\n () => {\n return state\n }\n )\n }\n default: {\n result satisfies never\n return state\n }\n }\n}\n\nexport function navigateReducer(\n state: ReadonlyReducerState,\n action: NavigateAction\n): ReducerState {\n const { url, isExternalUrl, navigateType, shouldScroll } = action\n const mutable: Mutable = {}\n const href = createHrefFromUrl(url)\n const pendingPush = navigateType === 'push'\n\n mutable.preserveCustomHistoryState = false\n mutable.pendingPush = pendingPush\n\n if (isExternalUrl) {\n return handleExternalUrl(state, mutable, url.toString(), pendingPush)\n }\n\n // Handles case where `` tag is present,\n // which will trigger an MPA navigation.\n if (document.getElementById('__next-page-redirect')) {\n return handleExternalUrl(state, mutable, href, pendingPush)\n }\n\n // Temporary glue code between the router reducer and the new navigation\n // implementation. Eventually we'll rewrite the router reducer to a\n // state machine.\n const currentUrl = new URL(state.canonicalUrl, location.origin)\n const result = navigateUsingSegmentCache(\n url,\n currentUrl,\n state.cache,\n state.tree,\n state.nextUrl,\n FreshnessPolicy.Default,\n shouldScroll,\n mutable\n )\n return handleNavigationResult(url, state, mutable, pendingPush, result)\n}\n"],"names":["DYNAMIC_STALETIME_MS","STATIC_STALETIME_MS","generateSegmentsFromPatch","handleExternalUrl","handleNavigationResult","navigateReducer","Number","process","env","__NEXT_CLIENT_ROUTER_DYNAMIC_STALETIME","getStaleTimeMs","__NEXT_CLIENT_ROUTER_STATIC_STALETIME","state","mutable","url","pendingPush","mpaNavigation","canonicalUrl","scrollableSegments","undefined","handleMutable","flightRouterPatch","segments","segment","parallelRoutes","Object","keys","length","parallelRouteKey","parallelRoute","entries","childSegment","push","result","tag","NavigationResultTag","MPA","newUrl","data","Success","cache","cacheNode","patchedTree","flightRouterState","renderedSearch","shouldScroll","hashFragment","hash","oldUrl","URL","onlyHashChange","pathname","search","Async","then","asyncResult","action","isExternalUrl","navigateType","href","createHrefFromUrl","preserveCustomHistoryState","toString","document","getElementById","currentUrl","location","origin","navigateUsingSegmentCache","tree","nextUrl","FreshnessPolicy","Default"],"mappings":"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","ignoreList":[0]}}, - {"offset": {"line": 8252, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/router-reducer/reducers/has-interception-route-in-current-tree.ts"],"sourcesContent":["import type { FlightRouterState } from '../../../../shared/lib/app-router-types'\nimport { isInterceptionRouteAppPath } from '../../../../shared/lib/router/utils/interception-routes'\n\nexport function hasInterceptionRouteInCurrentTree([\n segment,\n parallelRoutes,\n]: FlightRouterState): boolean {\n // If we have a dynamic segment, it's marked as an interception route by the presence of the `i` suffix.\n if (\n Array.isArray(segment) &&\n (segment[2] === 'di(..)(..)' ||\n segment[2] === 'ci(..)(..)' ||\n segment[2] === 'di(.)' ||\n segment[2] === 'ci(.)' ||\n segment[2] === 'di(..)' ||\n segment[2] === 'ci(..)' ||\n segment[2] === 'di(...)' ||\n segment[2] === 'ci(...)')\n ) {\n return true\n }\n\n // If segment is not an array, apply the existing string-based check\n if (typeof segment === 'string' && isInterceptionRouteAppPath(segment)) {\n return true\n }\n\n // Iterate through parallelRoutes if they exist\n if (parallelRoutes) {\n for (const key in parallelRoutes) {\n if (hasInterceptionRouteInCurrentTree(parallelRoutes[key])) {\n return true\n }\n }\n }\n\n return false\n}\n"],"names":["hasInterceptionRouteInCurrentTree","segment","parallelRoutes","Array","isArray","isInterceptionRouteAppPath","key"],"mappings":";;;+BAGgBA,qCAAAA;;;eAAAA;;;oCAF2B;AAEpC,SAASA,kCAAkC,CAChDC,SACAC,eACkB;IAClB,wGAAwG;IACxG,IACEC,MAAMC,OAAO,CAACH,YACbA,CAAAA,OAAO,CAAC,EAAE,KAAK,gBACdA,OAAO,CAAC,EAAE,KAAK,gBACfA,OAAO,CAAC,EAAE,KAAK,WACfA,OAAO,CAAC,EAAE,KAAK,WACfA,OAAO,CAAC,EAAE,KAAK,YACfA,OAAO,CAAC,EAAE,KAAK,YACfA,OAAO,CAAC,EAAE,KAAK,aACfA,OAAO,CAAC,EAAE,KAAK,SAAQ,GACzB;QACA,OAAO;IACT;IAEA,oEAAoE;IACpE,IAAI,OAAOA,YAAY,YAAYI,CAAAA,GAAAA,oBAAAA,0BAA0B,EAACJ,UAAU;QACtE,OAAO;IACT;IAEA,+CAA+C;IAC/C,IAAIC,gBAAgB;QAClB,IAAK,MAAMI,OAAOJ,eAAgB;YAChC,IAAIF,kCAAkCE,cAAc,CAACI,IAAI,GAAG;gBAC1D,OAAO;YACT;QACF;IACF;IAEA,OAAO;AACT","ignoreList":[0]}}, - {"offset": {"line": 8292, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/router-reducer/reducers/refresh-reducer.ts"],"sourcesContent":["import type {\n Mutable,\n ReadonlyReducerState,\n ReducerState,\n} from '../router-reducer-types'\nimport { handleNavigationResult } from './navigate-reducer'\nimport { navigateToSeededRoute } from '../../segment-cache/navigation'\nimport { revalidateEntireCache } from '../../segment-cache/cache'\nimport { hasInterceptionRouteInCurrentTree } from './has-interception-route-in-current-tree'\nimport { FreshnessPolicy } from '../ppr-navigations'\n\nexport function refreshReducer(state: ReadonlyReducerState): ReducerState {\n // TODO: Currently, all refreshes purge the prefetch cache. In the future,\n // only client-side refreshes will have this behavior; the server-side\n // `refresh` should send new data without purging the prefetch cache.\n const currentNextUrl = state.nextUrl\n const currentRouterState = state.tree\n revalidateEntireCache(currentNextUrl, currentRouterState)\n return refreshDynamicData(state, FreshnessPolicy.RefreshAll)\n}\n\nexport function refreshDynamicData(\n state: ReadonlyReducerState,\n freshnessPolicy: FreshnessPolicy.RefreshAll | FreshnessPolicy.HMRRefresh\n): ReducerState {\n const currentNextUrl = state.nextUrl\n\n // We always send the last next-url, not the current when performing a dynamic\n // request. This is because we update the next-url after a navigation, but we\n // want the same interception route to be matched that used the last next-url.\n const nextUrlForRefresh = hasInterceptionRouteInCurrentTree(state.tree)\n ? state.previousNextUrl || currentNextUrl\n : null\n\n // A refresh is modeled as a navigation to the current URL, but where any\n // existing dynamic data (including in shared layouts) is re-fetched.\n const currentCanonicalUrl = state.canonicalUrl\n const currentUrl = new URL(currentCanonicalUrl, location.origin)\n const currentFlightRouterState = state.tree\n const shouldScroll = true\n\n const navigationSeed = {\n tree: state.tree,\n renderedSearch: state.renderedSearch,\n data: null,\n head: null,\n }\n\n const now = Date.now()\n const result = navigateToSeededRoute(\n now,\n currentUrl,\n currentCanonicalUrl,\n navigationSeed,\n currentUrl,\n state.cache,\n currentFlightRouterState,\n freshnessPolicy,\n nextUrlForRefresh,\n shouldScroll\n )\n\n const mutable: Mutable = {}\n mutable.preserveCustomHistoryState = false\n\n return handleNavigationResult(currentUrl, state, mutable, false, result)\n}\n"],"names":["refreshDynamicData","refreshReducer","state","currentNextUrl","nextUrl","currentRouterState","tree","revalidateEntireCache","FreshnessPolicy","RefreshAll","freshnessPolicy","nextUrlForRefresh","hasInterceptionRouteInCurrentTree","previousNextUrl","currentCanonicalUrl","canonicalUrl","currentUrl","URL","location","origin","currentFlightRouterState","shouldScroll","navigationSeed","renderedSearch","data","head","now","Date","result","navigateToSeededRoute","cache","mutable","preserveCustomHistoryState","handleNavigationResult"],"mappings":";;;;;;;;;;;;;;IAqBgBA,kBAAkB,EAAA;eAAlBA;;IAVAC,cAAc,EAAA;eAAdA;;;iCANuB;4BACD;uBACA;mDACY;gCAClB;AAEzB,SAASA,eAAeC,KAA2B;IACxD,0EAA0E;IAC1E,sEAAsE;IACtE,qEAAqE;IACrE,MAAMC,iBAAiBD,MAAME,OAAO;IACpC,MAAMC,qBAAqBH,MAAMI,IAAI;IACrCC,CAAAA,GAAAA,OAAAA,qBAAqB,EAACJ,gBAAgBE;IACtC,OAAOL,mBAAmBE,OAAOM,gBAAAA,eAAe,CAACC,UAAU;AAC7D;AAEO,SAAST,mBACdE,KAA2B,EAC3BQ,eAAwE;IAExE,MAAMP,iBAAiBD,MAAME,OAAO;IAEpC,8EAA8E;IAC9E,6EAA6E;IAC7E,8EAA8E;IAC9E,MAAMO,oBAAoBC,CAAAA,GAAAA,mCAAAA,iCAAiC,EAACV,MAAMI,IAAI,IAClEJ,MAAMW,eAAe,IAAIV,iBACzB;IAEJ,yEAAyE;IACzE,qEAAqE;IACrE,MAAMW,sBAAsBZ,MAAMa,YAAY;IAC9C,MAAMC,aAAa,IAAIC,IAAIH,qBAAqBI,SAASC,MAAM;IAC/D,MAAMC,2BAA2BlB,MAAMI,IAAI;IAC3C,MAAMe,eAAe;IAErB,MAAMC,iBAAiB;QACrBhB,MAAMJ,MAAMI,IAAI;QAChBiB,gBAAgBrB,MAAMqB,cAAc;QACpCC,MAAM;QACNC,MAAM;IACR;IAEA,MAAMC,MAAMC,KAAKD,GAAG;IACpB,MAAME,SAASC,CAAAA,GAAAA,YAAAA,qBAAqB,EAClCH,KACAV,YACAF,qBACAQ,gBACAN,YACAd,MAAM4B,KAAK,EACXV,0BACAV,iBACAC,mBACAU;IAGF,MAAMU,UAAmB,CAAC;IAC1BA,QAAQC,0BAA0B,GAAG;IAErC,OAAOC,CAAAA,GAAAA,iBAAAA,sBAAsB,EAACjB,YAAYd,OAAO6B,SAAS,OAAOH;AACnE","ignoreList":[0]}}, - {"offset": {"line": 8362, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/router-reducer/reducers/server-patch-reducer.ts"],"sourcesContent":["import { createHrefFromUrl } from '../create-href-from-url'\nimport type {\n ServerPatchAction,\n ReducerState,\n ReadonlyReducerState,\n Mutable,\n} from '../router-reducer-types'\nimport { handleExternalUrl, handleNavigationResult } from './navigate-reducer'\nimport { navigateToSeededRoute } from '../../segment-cache/navigation'\nimport { refreshReducer } from './refresh-reducer'\nimport { FreshnessPolicy } from '../ppr-navigations'\n\nexport function serverPatchReducer(\n state: ReadonlyReducerState,\n action: ServerPatchAction\n): ReducerState {\n const mutable: Mutable = {}\n mutable.preserveCustomHistoryState = false\n\n // A \"retry\" is a navigation that happens due to a route mismatch. It's\n // similar to a refresh, because we will omit any existing dynamic data on\n // the page. But we seed the retry navigation with the exact tree that the\n // server just responded with.\n const retryMpa = action.mpa\n const retryUrl = new URL(action.url, location.origin)\n const retrySeed = action.seed\n if (retryMpa || retrySeed === null) {\n // If the server did not send back data during the mismatch, fall back to\n // an MPA navigation.\n return handleExternalUrl(state, mutable, retryUrl.href, false)\n }\n const currentUrl = new URL(state.canonicalUrl, location.origin)\n if (action.previousTree !== state.tree) {\n // There was another, more recent navigation since the once that\n // mismatched. We can abort the retry, but we still need to refresh the\n // page to evict any stale dynamic data.\n return refreshReducer(state)\n }\n // There have been no new navigations since the mismatched one. Refresh,\n // using the tree we just received from the server.\n const retryCanonicalUrl = createHrefFromUrl(retryUrl)\n const retryNextUrl = action.nextUrl\n // A retry should not create a new history entry.\n const pendingPush = false\n const shouldScroll = true\n const now = Date.now()\n const result = navigateToSeededRoute(\n now,\n retryUrl,\n retryCanonicalUrl,\n retrySeed,\n currentUrl,\n state.cache,\n state.tree,\n FreshnessPolicy.RefreshAll,\n retryNextUrl,\n shouldScroll\n )\n return handleNavigationResult(retryUrl, state, mutable, pendingPush, result)\n}\n"],"names":["serverPatchReducer","state","action","mutable","preserveCustomHistoryState","retryMpa","mpa","retryUrl","URL","url","location","origin","retrySeed","seed","handleExternalUrl","href","currentUrl","canonicalUrl","previousTree","tree","refreshReducer","retryCanonicalUrl","createHrefFromUrl","retryNextUrl","nextUrl","pendingPush","shouldScroll","now","Date","result","navigateToSeededRoute","cache","FreshnessPolicy","RefreshAll","handleNavigationResult"],"mappings":";;;+BAYgBA,sBAAAA;;;eAAAA;;;mCAZkB;iCAOwB;4BACpB;gCACP;gCACC;AAEzB,SAASA,mBACdC,KAA2B,EAC3BC,MAAyB;IAEzB,MAAMC,UAAmB,CAAC;IAC1BA,QAAQC,0BAA0B,GAAG;IAErC,uEAAuE;IACvE,0EAA0E;IAC1E,0EAA0E;IAC1E,8BAA8B;IAC9B,MAAMC,WAAWH,OAAOI,GAAG;IAC3B,MAAMC,WAAW,IAAIC,IAAIN,OAAOO,GAAG,EAAEC,SAASC,MAAM;IACpD,MAAMC,YAAYV,OAAOW,IAAI;IAC7B,IAAIR,YAAYO,cAAc,MAAM;QAClC,yEAAyE;QACzE,qBAAqB;QACrB,OAAOE,CAAAA,GAAAA,iBAAAA,iBAAiB,EAACb,OAAOE,SAASI,SAASQ,IAAI,EAAE;IAC1D;IACA,MAAMC,aAAa,IAAIR,IAAIP,MAAMgB,YAAY,EAAEP,SAASC,MAAM;IAC9D,IAAIT,OAAOgB,YAAY,KAAKjB,MAAMkB,IAAI,EAAE;QACtC,gEAAgE;QAChE,uEAAuE;QACvE,wCAAwC;QACxC,OAAOC,CAAAA,GAAAA,gBAAAA,cAAc,EAACnB;IACxB;IACA,wEAAwE;IACxE,mDAAmD;IACnD,MAAMoB,oBAAoBC,CAAAA,GAAAA,mBAAAA,iBAAiB,EAACf;IAC5C,MAAMgB,eAAerB,OAAOsB,OAAO;IACnC,iDAAiD;IACjD,MAAMC,cAAc;IACpB,MAAMC,eAAe;IACrB,MAAMC,MAAMC,KAAKD,GAAG;IACpB,MAAME,SAASC,CAAAA,GAAAA,YAAAA,qBAAqB,EAClCH,KACApB,UACAc,mBACAT,WACAI,YACAf,MAAM8B,KAAK,EACX9B,MAAMkB,IAAI,EACVa,gBAAAA,eAAe,CAACC,UAAU,EAC1BV,cACAG;IAEF,OAAOQ,CAAAA,GAAAA,iBAAAA,sBAAsB,EAAC3B,UAAUN,OAAOE,SAASsB,aAAaI;AACvE","ignoreList":[0]}}, - {"offset": {"line": 8420, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/router-reducer/reducers/restore-reducer.ts"],"sourcesContent":["import { createHrefFromUrl } from '../create-href-from-url'\nimport type {\n ReadonlyReducerState,\n ReducerState,\n RestoreAction,\n} from '../router-reducer-types'\nimport { extractPathFromFlightRouterState } from '../compute-changed-path'\nimport {\n FreshnessPolicy,\n spawnDynamicRequests,\n startPPRNavigation,\n type NavigationRequestAccumulation,\n} from '../ppr-navigations'\nimport type { FlightRouterState } from '../../../../shared/lib/app-router-types'\nimport { handleExternalUrl } from './navigate-reducer'\nimport type { Mutable } from '../router-reducer-types'\n\nexport function restoreReducer(\n state: ReadonlyReducerState,\n action: RestoreAction\n): ReducerState {\n // This action is used to restore the router state from the history state.\n // However, it's possible that the history state no longer contains the `FlightRouterState`.\n // We will copy over the internal state on pushState/replaceState events, but if a history entry\n // occurred before hydration, or if the user navigated to a hash using a regular anchor link,\n // the history state will not contain the `FlightRouterState`.\n // In this case, we'll continue to use the existing tree so the router doesn't get into an invalid state.\n let treeToRestore: FlightRouterState | undefined\n let renderedSearch: string | undefined\n const historyState = action.historyState\n if (historyState) {\n treeToRestore = historyState.tree\n renderedSearch = historyState.renderedSearch\n } else {\n treeToRestore = state.tree\n renderedSearch = state.renderedSearch\n }\n\n const currentUrl = new URL(state.canonicalUrl, location.origin)\n const restoredUrl = action.url\n const restoredCanonicalUrl = createHrefFromUrl(restoredUrl)\n const restoredNextUrl =\n extractPathFromFlightRouterState(treeToRestore) ?? restoredUrl.pathname\n\n const now = Date.now()\n const accumulation: NavigationRequestAccumulation = {\n scrollableSegments: null,\n separateRefreshUrls: null,\n }\n const task = startPPRNavigation(\n now,\n currentUrl,\n state.cache,\n state.tree,\n treeToRestore,\n FreshnessPolicy.HistoryTraversal,\n null,\n null,\n null,\n null,\n false,\n false,\n accumulation\n )\n\n if (task === null) {\n const mutable: Mutable = {\n preserveCustomHistoryState: true,\n }\n return handleExternalUrl(state, mutable, restoredCanonicalUrl, false)\n }\n\n spawnDynamicRequests(\n task,\n restoredUrl,\n restoredNextUrl,\n FreshnessPolicy.HistoryTraversal,\n accumulation\n )\n\n return {\n // Set canonical url\n canonicalUrl: restoredCanonicalUrl,\n renderedSearch,\n pushRef: {\n pendingPush: false,\n mpaNavigation: false,\n // Ensures that the custom history state that was set is preserved when applying this update.\n preserveCustomHistoryState: true,\n },\n focusAndScrollRef: state.focusAndScrollRef,\n cache: task.node,\n // Restore provided tree\n tree: treeToRestore,\n\n nextUrl: restoredNextUrl,\n // TODO: We need to restore previousNextUrl, too, which represents the\n // Next-Url that was used to fetch the data. Anywhere we fetch using the\n // canonical URL, there should be a corresponding Next-Url.\n previousNextUrl: null,\n debugInfo: null,\n }\n}\n"],"names":["restoreReducer","state","action","treeToRestore","renderedSearch","historyState","tree","currentUrl","URL","canonicalUrl","location","origin","restoredUrl","url","restoredCanonicalUrl","createHrefFromUrl","restoredNextUrl","extractPathFromFlightRouterState","pathname","now","Date","accumulation","scrollableSegments","separateRefreshUrls","task","startPPRNavigation","cache","FreshnessPolicy","HistoryTraversal","mutable","preserveCustomHistoryState","handleExternalUrl","spawnDynamicRequests","pushRef","pendingPush","mpaNavigation","focusAndScrollRef","node","nextUrl","previousNextUrl","debugInfo"],"mappings":";;;+BAiBgBA,kBAAAA;;;eAAAA;;;mCAjBkB;oCAMe;gCAM1C;iCAE2B;AAG3B,SAASA,eACdC,KAA2B,EAC3BC,MAAqB;IAErB,0EAA0E;IAC1E,4FAA4F;IAC5F,gGAAgG;IAChG,6FAA6F;IAC7F,8DAA8D;IAC9D,yGAAyG;IACzG,IAAIC;IACJ,IAAIC;IACJ,MAAMC,eAAeH,OAAOG,YAAY;IACxC,IAAIA,cAAc;QAChBF,gBAAgBE,aAAaC,IAAI;QACjCF,iBAAiBC,aAAaD,cAAc;IAC9C,OAAO;QACLD,gBAAgBF,MAAMK,IAAI;QAC1BF,iBAAiBH,MAAMG,cAAc;IACvC;IAEA,MAAMG,aAAa,IAAIC,IAAIP,MAAMQ,YAAY,EAAEC,SAASC,MAAM;IAC9D,MAAMC,cAAcV,OAAOW,GAAG;IAC9B,MAAMC,uBAAuBC,CAAAA,GAAAA,mBAAAA,iBAAiB,EAACH;IAC/C,MAAMI,kBACJC,CAAAA,GAAAA,oBAAAA,gCAAgC,EAACd,kBAAkBS,YAAYM,QAAQ;IAEzE,MAAMC,MAAMC,KAAKD,GAAG;IACpB,MAAME,eAA8C;QAClDC,oBAAoB;QACpBC,qBAAqB;IACvB;IACA,MAAMC,OAAOC,CAAAA,GAAAA,gBAAAA,kBAAkB,EAC7BN,KACAZ,YACAN,MAAMyB,KAAK,EACXzB,MAAMK,IAAI,EACVH,eACAwB,gBAAAA,eAAe,CAACC,gBAAgB,EAChC,MACA,MACA,MACA,MACA,OACA,OACAP;IAGF,IAAIG,SAAS,MAAM;QACjB,MAAMK,UAAmB;YACvBC,4BAA4B;QAC9B;QACA,OAAOC,CAAAA,GAAAA,iBAAAA,iBAAiB,EAAC9B,OAAO4B,SAASf,sBAAsB;IACjE;IAEAkB,CAAAA,GAAAA,gBAAAA,oBAAoB,EAClBR,MACAZ,aACAI,iBACAW,gBAAAA,eAAe,CAACC,gBAAgB,EAChCP;IAGF,OAAO;QACL,oBAAoB;QACpBZ,cAAcK;QACdV;QACA6B,SAAS;YACPC,aAAa;YACbC,eAAe;YACf,6FAA6F;YAC7FL,4BAA4B;QAC9B;QACAM,mBAAmBnC,MAAMmC,iBAAiB;QAC1CV,OAAOF,KAAKa,IAAI;QAChB,wBAAwB;QACxB/B,MAAMH;QAENmC,SAAStB;QACT,sEAAsE;QACtE,wEAAwE;QACxE,2DAA2D;QAC3DuB,iBAAiB;QACjBC,WAAW;IACb;AACF","ignoreList":[0]}}, - {"offset": {"line": 8500, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/router-reducer/reducers/hmr-refresh-reducer.ts"],"sourcesContent":["import type {\n ReadonlyReducerState,\n ReducerState,\n} from '../router-reducer-types'\nimport { refreshDynamicData } from './refresh-reducer'\nimport { FreshnessPolicy } from '../ppr-navigations'\n\nexport function hmrRefreshReducer(state: ReadonlyReducerState): ReducerState {\n return refreshDynamicData(state, FreshnessPolicy.HMRRefresh)\n}\n"],"names":["hmrRefreshReducer","state","refreshDynamicData","FreshnessPolicy","HMRRefresh"],"mappings":";;;+BAOgBA,qBAAAA;;;eAAAA;;;gCAHmB;gCACH;AAEzB,SAASA,kBAAkBC,KAA2B;IAC3D,OAAOC,CAAAA,GAAAA,gBAAAA,kBAAkB,EAACD,OAAOE,gBAAAA,eAAe,CAACC,UAAU;AAC7D","ignoreList":[0]}}, - {"offset": {"line": 8525, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/unrecognized-action-error.ts"],"sourcesContent":["export class UnrecognizedActionError extends Error {\n constructor(...args: ConstructorParameters) {\n super(...args)\n this.name = 'UnrecognizedActionError'\n }\n}\n\n/**\n * Check whether a server action call failed because the server action was not recognized by the server.\n * This can happen if the client and the server are not from the same deployment.\n *\n * Example usage:\n * ```ts\n * try {\n * await myServerAction();\n * } catch (err) {\n * if (unstable_isUnrecognizedActionError(err)) {\n * // The client is from a different deployment than the server.\n * // Reloading the page will fix this mismatch.\n * window.alert(\"Please refresh the page and try again\");\n * return;\n * }\n * }\n * ```\n * */\nexport function unstable_isUnrecognizedActionError(\n error: unknown\n): error is UnrecognizedActionError {\n return !!(\n error &&\n typeof error === 'object' &&\n error instanceof UnrecognizedActionError\n )\n}\n"],"names":["UnrecognizedActionError","unstable_isUnrecognizedActionError","Error","constructor","args","name","error"],"mappings":";;;;;;;;;;;;;;IAAaA,uBAAuB,EAAA;eAAvBA;;IAyBGC,kCAAkC,EAAA;eAAlCA;;;AAzBT,MAAMD,gCAAgCE;IAC3CC,YAAY,GAAGC,IAAyC,CAAE;QACxD,KAAK,IAAIA;QACT,IAAI,CAACC,IAAI,GAAG;IACd;AACF;AAoBO,SAASJ,mCACdK,KAAc;IAEd,OAAO,CAAC,CACNA,CAAAA,SACA,OAAOA,UAAU,YACjBA,iBAAiBN,uBAAsB;AAE3C","ignoreList":[0]}}, - {"offset": {"line": 8566, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/assign-location.ts"],"sourcesContent":["import { addBasePath } from './add-base-path'\n\n/**\n * Function to correctly assign location to URL\n *\n * The method will add basePath, and will also correctly add location (including if it is a relative path)\n * @param location Location that should be added to the url\n * @param url Base URL to which the location should be assigned\n */\nexport function assignLocation(location: string, url: URL): URL {\n if (location.startsWith('.')) {\n const urlBase = url.origin + url.pathname\n return new URL(\n // In order for a relative path to be added to the current url correctly, the current url must end with a slash\n // new URL('./relative', 'https://example.com/subdir').href -> 'https://example.com/relative'\n // new URL('./relative', 'https://example.com/subdir/').href -> 'https://example.com/subdir/relative'\n (urlBase.endsWith('/') ? urlBase : urlBase + '/') + location\n )\n }\n\n return new URL(addBasePath(location), url.href)\n}\n"],"names":["assignLocation","location","url","startsWith","urlBase","origin","pathname","URL","endsWith","addBasePath","href"],"mappings":";;;+BASgBA,kBAAAA;;;eAAAA;;;6BATY;AASrB,SAASA,eAAeC,QAAgB,EAAEC,GAAQ;IACvD,IAAID,SAASE,UAAU,CAAC,MAAM;QAC5B,MAAMC,UAAUF,IAAIG,MAAM,GAAGH,IAAII,QAAQ;QACzC,OAAO,IAAIC,IACT,AAGA,AAFA,6FAA6F,kBADkB;QAE/G,qGAAqG;QACpGH,CAAAA,QAAQI,QAAQ,CAAC,OAAOJ,UAAUA,UAAU,GAAE,IAAKH;IAExD;IAEA,OAAO,IAAIM,IAAIE,CAAAA,GAAAA,aAAAA,WAAW,EAACR,WAAWC,IAAIQ,IAAI;AAChD","ignoreList":[0]}}, - {"offset": {"line": 8596, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/redirect.ts"],"sourcesContent":["import { RedirectStatusCode } from './redirect-status-code'\nimport {\n RedirectType,\n type RedirectError,\n isRedirectError,\n REDIRECT_ERROR_CODE,\n} from './redirect-error'\n\nconst actionAsyncStorage =\n typeof window === 'undefined'\n ? (\n require('../../server/app-render/action-async-storage.external') as typeof import('../../server/app-render/action-async-storage.external')\n ).actionAsyncStorage\n : undefined\n\nexport function getRedirectError(\n url: string,\n type: RedirectType,\n statusCode: RedirectStatusCode = RedirectStatusCode.TemporaryRedirect\n): RedirectError {\n const error = new Error(REDIRECT_ERROR_CODE) as RedirectError\n error.digest = `${REDIRECT_ERROR_CODE};${type};${url};${statusCode};`\n return error\n}\n\n/**\n * This function allows you to redirect the user to another URL. It can be used in\n * [Server Components](https://nextjs.org/docs/app/building-your-application/rendering/server-components),\n * [Route Handlers](https://nextjs.org/docs/app/building-your-application/routing/route-handlers), and\n * [Server Actions](https://nextjs.org/docs/app/building-your-application/data-fetching/server-actions-and-mutations).\n *\n * - In a Server Component, this will insert a meta tag to redirect the user to the target page.\n * - In a Route Handler or Server Action, it will serve a 307/303 to the caller.\n * - In a Server Action, type defaults to 'push' and 'replace' elsewhere.\n *\n * Read more: [Next.js Docs: `redirect`](https://nextjs.org/docs/app/api-reference/functions/redirect)\n */\nexport function redirect(\n /** The URL to redirect to */\n url: string,\n type?: RedirectType\n): never {\n type ??= actionAsyncStorage?.getStore()?.isAction\n ? RedirectType.push\n : RedirectType.replace\n\n throw getRedirectError(url, type, RedirectStatusCode.TemporaryRedirect)\n}\n\n/**\n * This function allows you to redirect the user to another URL. It can be used in\n * [Server Components](https://nextjs.org/docs/app/building-your-application/rendering/server-components),\n * [Route Handlers](https://nextjs.org/docs/app/building-your-application/routing/route-handlers), and\n * [Server Actions](https://nextjs.org/docs/app/building-your-application/data-fetching/server-actions-and-mutations).\n *\n * - In a Server Component, this will insert a meta tag to redirect the user to the target page.\n * - In a Route Handler or Server Action, it will serve a 308/303 to the caller.\n *\n * Read more: [Next.js Docs: `redirect`](https://nextjs.org/docs/app/api-reference/functions/redirect)\n */\nexport function permanentRedirect(\n /** The URL to redirect to */\n url: string,\n type: RedirectType = RedirectType.replace\n): never {\n throw getRedirectError(url, type, RedirectStatusCode.PermanentRedirect)\n}\n\n/**\n * Returns the encoded URL from the error if it's a RedirectError, null\n * otherwise. Note that this does not validate the URL returned.\n *\n * @param error the error that may be a redirect error\n * @return the url if the error was a redirect error\n */\nexport function getURLFromRedirectError(error: RedirectError): string\nexport function getURLFromRedirectError(error: unknown): string | null {\n if (!isRedirectError(error)) return null\n\n // Slices off the beginning of the digest that contains the code and the\n // separating ';'.\n return error.digest.split(';').slice(2, -2).join(';')\n}\n\nexport function getRedirectTypeFromError(error: RedirectError): RedirectType {\n if (!isRedirectError(error)) {\n throw new Error('Not a redirect error')\n }\n\n return error.digest.split(';', 2)[1] as RedirectType\n}\n\nexport function getRedirectStatusCodeFromError(error: RedirectError): number {\n if (!isRedirectError(error)) {\n throw new Error('Not a redirect error')\n }\n\n return Number(error.digest.split(';').at(-2))\n}\n"],"names":["getRedirectError","getRedirectStatusCodeFromError","getRedirectTypeFromError","getURLFromRedirectError","permanentRedirect","redirect","actionAsyncStorage","window","require","undefined","url","type","statusCode","RedirectStatusCode","TemporaryRedirect","error","Error","REDIRECT_ERROR_CODE","digest","getStore","isAction","RedirectType","push","replace","PermanentRedirect","isRedirectError","split","slice","join","Number","at"],"mappings":";;;;;;;;;;;;;;;;;;IAegBA,gBAAgB,EAAA;eAAhBA;;IA6EAC,8BAA8B,EAAA;eAA9BA;;IARAC,wBAAwB,EAAA;eAAxBA;;IARAC,uBAAuB,EAAA;eAAvBA;;IAhBAC,iBAAiB,EAAA;eAAjBA;;IAvBAC,QAAQ,EAAA;eAARA;;;oCArCmB;+BAM5B;AAEP,MAAMC,qBACJ,OAAOC,WAAW,cAEZC,QAAQ,iIACRF,kBAAkB,GACpBG;AAEC,SAAST,iBACdU,GAAW,EACXC,IAAkB,EAClBC,aAAiCC,oBAAAA,kBAAkB,CAACC,iBAAiB;IAErE,MAAMC,QAAQ,OAAA,cAA8B,CAA9B,IAAIC,MAAMC,eAAAA,mBAAmB,GAA7B,qBAAA;eAAA;oBAAA;sBAAA;IAA6B;IAC3CF,MAAMG,MAAM,GAAG,GAAGD,eAAAA,mBAAmB,CAAC,CAAC,EAAEN,KAAK,CAAC,EAAED,IAAI,CAAC,EAAEE,WAAW,CAAC,CAAC;IACrE,OAAOG;AACT;AAcO,SAASV,SACd,2BAA2B,GAC3BK,GAAW,EACXC,IAAmB;IAEnBA,SAASL,oBAAoBa,YAAYC,WACrCC,eAAAA,YAAY,CAACC,IAAI,GACjBD,eAAAA,YAAY,CAACE,OAAO;IAExB,MAAMvB,iBAAiBU,KAAKC,MAAME,oBAAAA,kBAAkB,CAACC,iBAAiB;AACxE;AAaO,SAASV,kBACd,2BAA2B,GAC3BM,GAAW,EACXC,OAAqBU,eAAAA,YAAY,CAACE,OAAO;IAEzC,MAAMvB,iBAAiBU,KAAKC,MAAME,oBAAAA,kBAAkB,CAACW,iBAAiB;AACxE;AAUO,SAASrB,wBAAwBY,KAAc;IACpD,IAAI,CAACU,CAAAA,GAAAA,eAAAA,eAAe,EAACV,QAAQ,OAAO;IAEpC,wEAAwE;IACxE,kBAAkB;IAClB,OAAOA,MAAMG,MAAM,CAACQ,KAAK,CAAC,KAAKC,KAAK,CAAC,GAAG,CAAC,GAAGC,IAAI,CAAC;AACnD;AAEO,SAAS1B,yBAAyBa,KAAoB;IAC3D,IAAI,CAACU,CAAAA,GAAAA,eAAAA,eAAe,EAACV,QAAQ;QAC3B,MAAM,OAAA,cAAiC,CAAjC,IAAIC,MAAM,yBAAV,qBAAA;mBAAA;wBAAA;0BAAA;QAAgC;IACxC;IAEA,OAAOD,MAAMG,MAAM,CAACQ,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE;AACtC;AAEO,SAASzB,+BAA+Bc,KAAoB;IACjE,IAAI,CAACU,CAAAA,GAAAA,eAAAA,eAAe,EAACV,QAAQ;QAC3B,MAAM,OAAA,cAAiC,CAAjC,IAAIC,MAAM,yBAAV,qBAAA;mBAAA;wBAAA;0BAAA;QAAgC;IACxC;IAEA,OAAOa,OAAOd,MAAMG,MAAM,CAACQ,KAAK,CAAC,KAAKI,EAAE,CAAC,CAAC;AAC5C","ignoreList":[0]}}, - {"offset": {"line": 8689, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/has-base-path.ts"],"sourcesContent":["import { pathHasPrefix } from '../shared/lib/router/utils/path-has-prefix'\n\nconst basePath = (process.env.__NEXT_ROUTER_BASEPATH as string) || ''\n\nexport function hasBasePath(path: string): boolean {\n return pathHasPrefix(path, basePath)\n}\n"],"names":["hasBasePath","basePath","process","env","__NEXT_ROUTER_BASEPATH","path","pathHasPrefix"],"mappings":"AAEkBE,QAAQC,GAAG,CAACC,sBAAsB;;;;;+BAEpCJ,eAAAA;;;eAAAA;;;+BAJc;AAE9B,MAAMC,mDAA6D;AAE5D,SAASD,YAAYK,IAAY;IACtC,OAAOC,CAAAA,GAAAA,eAAAA,aAAa,EAACD,MAAMJ;AAC7B","ignoreList":[0]}}, - {"offset": {"line": 8716, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/remove-base-path.ts"],"sourcesContent":["import { hasBasePath } from './has-base-path'\n\nconst basePath = (process.env.__NEXT_ROUTER_BASEPATH as string) || ''\n\nexport function removeBasePath(path: string): string {\n if (process.env.__NEXT_MANUAL_CLIENT_BASE_PATH) {\n if (!hasBasePath(path)) {\n return path\n }\n }\n\n // Can't trim the basePath if it has zero length!\n if (basePath.length === 0) return path\n\n path = path.slice(basePath.length)\n if (!path.startsWith('/')) path = `/${path}`\n return path\n}\n"],"names":["removeBasePath","basePath","process","env","__NEXT_ROUTER_BASEPATH","path","__NEXT_MANUAL_CLIENT_BASE_PATH","hasBasePath","length","slice","startsWith"],"mappings":"AAEkBE,QAAQC,GAAG,CAACC,sBAAsB;;;;;+BAEpCJ,kBAAAA;;;eAAAA;;;6BAJY;AAE5B,MAAMC,mDAA6D;AAE5D,SAASD,eAAeK,IAAY;IACzC,IAAIH,QAAQC,GAAG,CAACG,8BAA8B,EAAE;;IAMhD,iDAAiD;IACjD,IAAIL,SAASO,MAAM,KAAK,GAAG,OAAOH;IAElCA,OAAOA,KAAKI,KAAK,CAACR,SAASO,MAAM;IACjC,IAAI,CAACH,KAAKK,UAAU,CAAC,MAAML,OAAO,CAAC,CAAC,EAAEA,MAAM;IAC5C,OAAOA;AACT","ignoreList":[0]}}, - {"offset": {"line": 8749, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/router-reducer/reducers/server-action-reducer.ts"],"sourcesContent":["import type {\n ActionFlightResponse,\n ActionResult,\n} from '../../../../shared/lib/app-router-types'\nimport { callServer } from '../../../app-call-server'\nimport { findSourceMapURL } from '../../../app-find-source-map-url'\nimport {\n ACTION_HEADER,\n NEXT_ACTION_NOT_FOUND_HEADER,\n NEXT_IS_PRERENDER_HEADER,\n NEXT_HTML_REQUEST_ID_HEADER,\n NEXT_ROUTER_STATE_TREE_HEADER,\n NEXT_URL,\n RSC_CONTENT_TYPE_HEADER,\n NEXT_REQUEST_ID_HEADER,\n} from '../../app-router-headers'\nimport { UnrecognizedActionError } from '../../unrecognized-action-error'\n\n// TODO: Explicitly import from client.browser\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport {\n createFromFetch as createFromFetchBrowser,\n createTemporaryReferenceSet,\n encodeReply,\n} from 'react-server-dom-webpack/client'\n\nimport type {\n ReadonlyReducerState,\n ReducerState,\n ServerActionAction,\n ServerActionMutable,\n} from '../router-reducer-types'\nimport { assignLocation } from '../../../assign-location'\nimport { createHrefFromUrl } from '../create-href-from-url'\nimport { handleExternalUrl, handleNavigationResult } from './navigate-reducer'\nimport { hasInterceptionRouteInCurrentTree } from './has-interception-route-in-current-tree'\nimport {\n normalizeFlightData,\n prepareFlightRouterStateForRequest,\n type NormalizedFlightData,\n} from '../../../flight-data-helpers'\nimport { getRedirectError } from '../../redirect'\nimport { RedirectType } from '../../redirect-error'\nimport { removeBasePath } from '../../../remove-base-path'\nimport { hasBasePath } from '../../../has-base-path'\nimport {\n extractInfoFromServerReferenceId,\n omitUnusedArgs,\n} from '../../../../shared/lib/server-reference-info'\nimport { revalidateEntireCache } from '../../segment-cache/cache'\nimport { getDeploymentId } from '../../../../shared/lib/deployment-id'\nimport {\n navigateToSeededRoute,\n navigate as navigateUsingSegmentCache,\n} from '../../segment-cache/navigation'\nimport type { NormalizedSearch } from '../../segment-cache/cache-key'\nimport {\n ActionDidNotRevalidate,\n ActionDidRevalidateDynamicOnly,\n ActionDidRevalidateStaticAndDynamic,\n type ActionRevalidationKind,\n} from '../../../../shared/lib/action-revalidation-kind'\nimport { isExternalURL } from '../../app-router-utils'\nimport { FreshnessPolicy } from '../ppr-navigations'\n\nconst createFromFetch =\n createFromFetchBrowser as (typeof import('react-server-dom-webpack/client.browser'))['createFromFetch']\n\nlet createDebugChannel:\n | typeof import('../../../dev/debug-channel').createDebugChannel\n | undefined\n\nif (\n process.env.NODE_ENV !== 'production' &&\n process.env.__NEXT_REACT_DEBUG_CHANNEL\n) {\n createDebugChannel = (\n require('../../../dev/debug-channel') as typeof import('../../../dev/debug-channel')\n ).createDebugChannel\n}\n\n// TODO: Refactor to be a discriminated union. Or just get rid of it;\n// fetchServerAction only has one caller, no reason this intermediate type has\n// to exist.\ntype FetchServerActionResult = {\n redirectLocation: URL | undefined\n redirectType: RedirectType | undefined\n revalidationKind: ActionRevalidationKind\n actionResult: ActionResult | undefined\n actionFlightData: NormalizedFlightData[] | string | undefined\n actionFlightDataRenderedSearch: NormalizedSearch | undefined\n actionFlightDataCouldBeIntercepted: boolean | undefined\n isPrerender: boolean\n}\n\nasync function fetchServerAction(\n state: ReadonlyReducerState,\n nextUrl: ReadonlyReducerState['nextUrl'],\n { actionId, actionArgs }: ServerActionAction\n): Promise {\n const temporaryReferences = createTemporaryReferenceSet()\n const info = extractInfoFromServerReferenceId(actionId)\n\n // TODO: Currently, we're only omitting unused args for the experimental \"use\n // cache\" functions. Once the server reference info byte feature is stable, we\n // should apply this to server actions as well.\n const usedArgs =\n info.type === 'use-cache' ? omitUnusedArgs(actionArgs, info) : actionArgs\n\n const body = await encodeReply(usedArgs, { temporaryReferences })\n\n const headers: Record = {\n Accept: RSC_CONTENT_TYPE_HEADER,\n [ACTION_HEADER]: actionId,\n [NEXT_ROUTER_STATE_TREE_HEADER]: prepareFlightRouterStateForRequest(\n state.tree\n ),\n }\n\n const deploymentId = getDeploymentId()\n if (deploymentId) {\n headers['x-deployment-id'] = deploymentId\n }\n\n if (nextUrl) {\n headers[NEXT_URL] = nextUrl\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if (self.__next_r) {\n headers[NEXT_HTML_REQUEST_ID_HEADER] = self.__next_r\n }\n\n // Create a new request ID for the server action request. The server uses\n // this to tag debug information sent via WebSocket to the client, which\n // then routes those chunks to the debug channel associated with this ID.\n headers[NEXT_REQUEST_ID_HEADER] = crypto\n .getRandomValues(new Uint32Array(1))[0]\n .toString(16)\n }\n\n const res = await fetch(state.canonicalUrl, { method: 'POST', headers, body })\n\n // Handle server actions that the server didn't recognize.\n const unrecognizedActionHeader = res.headers.get(NEXT_ACTION_NOT_FOUND_HEADER)\n if (unrecognizedActionHeader === '1') {\n throw new UnrecognizedActionError(\n `Server Action \"${actionId}\" was not found on the server. \\nRead more: https://nextjs.org/docs/messages/failed-to-find-server-action`\n )\n }\n\n const redirectHeader = res.headers.get('x-action-redirect')\n const [location, _redirectType] = redirectHeader?.split(';') || []\n let redirectType: RedirectType | undefined\n switch (_redirectType) {\n case 'push':\n redirectType = RedirectType.push\n break\n case 'replace':\n redirectType = RedirectType.replace\n break\n default:\n redirectType = undefined\n }\n\n const isPrerender = !!res.headers.get(NEXT_IS_PRERENDER_HEADER)\n\n let revalidationKind: ActionRevalidationKind = ActionDidNotRevalidate\n try {\n const revalidationHeader = res.headers.get('x-action-revalidated')\n if (revalidationHeader) {\n const parsedKind = JSON.parse(revalidationHeader)\n if (\n parsedKind === ActionDidRevalidateStaticAndDynamic ||\n parsedKind === ActionDidRevalidateDynamicOnly\n ) {\n revalidationKind = parsedKind\n }\n }\n } catch {}\n\n const redirectLocation = location\n ? assignLocation(\n location,\n new URL(state.canonicalUrl, window.location.href)\n )\n : undefined\n\n const contentType = res.headers.get('content-type')\n const isRscResponse = !!(\n contentType && contentType.startsWith(RSC_CONTENT_TYPE_HEADER)\n )\n\n // Handle invalid server action responses.\n // A valid response must have `content-type: text/x-component`, unless it's an external redirect.\n // (external redirects have an 'x-action-redirect' header, but the body is an empty 'text/plain')\n if (!isRscResponse && !redirectLocation) {\n // The server can respond with a text/plain error message, but we'll fallback to something generic\n // if there isn't one.\n const message =\n res.status >= 400 && contentType === 'text/plain'\n ? await res.text()\n : 'An unexpected response was received from the server.'\n\n throw new Error(message)\n }\n\n let actionResult: FetchServerActionResult['actionResult']\n let actionFlightData: FetchServerActionResult['actionFlightData']\n let actionFlightDataRenderedSearch: FetchServerActionResult['actionFlightDataRenderedSearch']\n let actionFlightDataCouldBeIntercepted: FetchServerActionResult['actionFlightDataCouldBeIntercepted']\n\n if (isRscResponse) {\n const response: ActionFlightResponse = await createFromFetch(\n Promise.resolve(res),\n {\n callServer,\n findSourceMapURL,\n temporaryReferences,\n debugChannel: createDebugChannel && createDebugChannel(headers),\n }\n )\n\n // An internal redirect can send an RSC response, but does not have a useful `actionResult`.\n actionResult = redirectLocation ? undefined : response.a\n const maybeFlightData = normalizeFlightData(response.f)\n if (maybeFlightData !== '') {\n actionFlightData = maybeFlightData\n actionFlightDataRenderedSearch = response.q as NormalizedSearch\n actionFlightDataCouldBeIntercepted = response.i\n }\n } else {\n // An external redirect doesn't contain RSC data.\n actionResult = undefined\n actionFlightData = undefined\n actionFlightDataRenderedSearch = undefined\n actionFlightDataCouldBeIntercepted = undefined\n }\n\n return {\n actionResult,\n actionFlightData,\n actionFlightDataRenderedSearch,\n actionFlightDataCouldBeIntercepted,\n redirectLocation,\n redirectType,\n revalidationKind,\n isPrerender,\n }\n}\n\n/*\n * This reducer is responsible for calling the server action and processing any side-effects from the server action.\n * It does not mutate the state by itself but rather delegates to other reducers to do the actual mutation.\n */\nexport function serverActionReducer(\n state: ReadonlyReducerState,\n action: ServerActionAction\n): ReducerState {\n const { resolve, reject } = action\n const mutable: ServerActionMutable = {}\n\n mutable.preserveCustomHistoryState = false\n\n // only pass along the `nextUrl` param (used for interception routes) if the current route was intercepted.\n // If the route has been intercepted, the action should be as well.\n // Otherwise the server action might be intercepted with the wrong action id\n // (ie, one that corresponds with the intercepted route)\n const nextUrl =\n // We always send the last next-url, not the current when\n // performing a dynamic request. This is because we update\n // the next-url after a navigation, but we want the same\n // interception route to be matched that used the last\n // next-url.\n (state.previousNextUrl || state.nextUrl) &&\n hasInterceptionRouteInCurrentTree(state.tree)\n ? state.previousNextUrl || state.nextUrl\n : null\n\n return fetchServerAction(state, nextUrl, action).then(\n async ({\n revalidationKind,\n actionResult,\n actionFlightData: flightData,\n actionFlightDataRenderedSearch: flightDataRenderedSearch,\n actionFlightDataCouldBeIntercepted: flightDataCouldBeIntercepted,\n redirectLocation,\n redirectType,\n }) => {\n if (revalidationKind !== ActionDidNotRevalidate) {\n // Store whether this action triggered any revalidation\n // The action queue will use this information to potentially\n // trigger a refresh action if the action was discarded\n // (ie, due to a navigation, before the action completed)\n action.didRevalidate = true\n\n // If there was a revalidation, evict the entire prefetch cache.\n // TODO: Evict only segments with matching tags and/or paths.\n if (revalidationKind === ActionDidRevalidateStaticAndDynamic) {\n revalidateEntireCache(nextUrl, state.tree)\n }\n }\n\n const pendingPush = redirectType !== RedirectType.replace\n state.pushRef.pendingPush = pendingPush\n mutable.pendingPush = pendingPush\n\n if (redirectLocation !== undefined) {\n // If the action triggered a redirect, the action promise will be rejected with\n // a redirect so that it's handled by RedirectBoundary as we won't have a valid\n // action result to resolve the promise with. This will effectively reset the state of\n // the component that called the action as the error boundary will remount the tree.\n // The status code doesn't matter here as the action handler will have already sent\n // a response with the correct status code.\n const resolvedRedirectType = redirectType || RedirectType.push\n\n if (isExternalURL(redirectLocation)) {\n // External redirect. Triggers an MPA navigation.\n const redirectHref = redirectLocation.href\n const redirectError = createRedirectErrorForAction(\n redirectHref,\n resolvedRedirectType\n )\n reject(redirectError)\n return handleExternalUrl(state, mutable, redirectHref, pendingPush)\n } else {\n // Internal redirect. Triggers an SPA navigation.\n const redirectWithBasepath = createHrefFromUrl(\n redirectLocation,\n false\n )\n const redirectHref = hasBasePath(redirectWithBasepath)\n ? removeBasePath(redirectWithBasepath)\n : redirectWithBasepath\n const redirectError = createRedirectErrorForAction(\n redirectHref,\n resolvedRedirectType\n )\n reject(redirectError)\n }\n } else {\n // If there's no redirect, resolve the action with the result.\n resolve(actionResult)\n }\n\n // Check if we can bail out without updating any state.\n if (\n // Did the action trigger a redirect?\n redirectLocation === undefined &&\n // Did the action revalidate any data?\n revalidationKind === ActionDidNotRevalidate &&\n // Did the server render new data?\n flightData === undefined\n ) {\n // The action did not trigger any revalidations or redirects. No\n // navigation is required.\n return state\n }\n\n if (flightData === undefined && redirectLocation !== undefined) {\n // The server redirected, but did not send any Flight data. This implies\n // an external redirect.\n // TODO: We should refactor the action response type to be more explicit\n // about the various response types.\n return handleExternalUrl(\n state,\n mutable,\n redirectLocation.href,\n pendingPush\n )\n }\n\n if (typeof flightData === 'string') {\n // If the flight data is just a string, something earlier in the\n // response handling triggered an external redirect.\n return handleExternalUrl(state, mutable, flightData, pendingPush)\n }\n\n // The action triggered a navigation — either a redirect, a revalidation,\n // or both.\n\n // If there was no redirect, then the target URL is the same as the\n // current URL.\n const currentUrl = new URL(state.canonicalUrl, location.origin)\n const redirectUrl =\n redirectLocation !== undefined ? redirectLocation : currentUrl\n const currentFlightRouterState = state.tree\n const shouldScroll = true\n\n // If the action triggered a revalidation of the cache, we should also\n // refresh all the dynamic data.\n const freshnessPolicy =\n revalidationKind === ActionDidNotRevalidate\n ? FreshnessPolicy.Default\n : FreshnessPolicy.RefreshAll\n\n // The server may have sent back new data. If so, we will perform a\n // \"seeded\" navigation that uses the data from the response.\n if (flightData !== undefined) {\n const normalizedFlightData = flightData[0]\n if (\n normalizedFlightData !== undefined &&\n // TODO: Currently the server always renders from the root in\n // response to a Server Action. In the case of a normal redirect\n // with no revalidation, it should skip over the shared layouts.\n normalizedFlightData.isRootRender &&\n flightDataRenderedSearch !== undefined &&\n flightDataCouldBeIntercepted !== undefined\n ) {\n // The server sent back new route data as part of the response. We\n // will use this to render the new page. If this happens to be only a\n // subset of the data needed to render the new page, we'll initiate a\n // new fetch, like we would for a normal navigation.\n const redirectCanonicalUrl = createHrefFromUrl(redirectUrl)\n const navigationSeed = {\n tree: normalizedFlightData.tree,\n renderedSearch: flightDataRenderedSearch,\n data: normalizedFlightData.seedData,\n head: normalizedFlightData.head,\n }\n const now = Date.now()\n const result = navigateToSeededRoute(\n now,\n redirectUrl,\n redirectCanonicalUrl,\n navigationSeed,\n currentUrl,\n state.cache,\n currentFlightRouterState,\n freshnessPolicy,\n nextUrl,\n shouldScroll\n )\n return handleNavigationResult(\n redirectUrl,\n state,\n mutable,\n pendingPush,\n result\n )\n }\n }\n\n // The server did not send back new data. We'll perform a regular, non-\n // seeded navigation — effectively the same as or router.push().\n const result = navigateUsingSegmentCache(\n redirectUrl,\n currentUrl,\n state.cache,\n currentFlightRouterState,\n nextUrl,\n freshnessPolicy,\n shouldScroll,\n mutable\n )\n return handleNavigationResult(\n redirectUrl,\n state,\n mutable,\n pendingPush,\n result\n )\n },\n (e: any) => {\n // When the server action is rejected we don't update the state and instead call the reject handler of the promise.\n reject(e)\n\n return state\n }\n )\n}\n\nfunction createRedirectErrorForAction(\n redirectHref: string,\n resolvedRedirectType: RedirectType\n) {\n const redirectError = getRedirectError(redirectHref, resolvedRedirectType)\n // We mark the error as handled because we don't want the redirect to be tried later by\n // the RedirectBoundary, in case the user goes back and `Activity` triggers the redirect\n // again, as it's run within an effect.\n // We don't actually need the RedirectBoundary to do a router.push because we already\n // have all the necessary RSC data to render the new page within a single roundtrip.\n ;(redirectError as any).handled = true\n return redirectError\n}\n"],"names":["serverActionReducer","createFromFetch","createFromFetchBrowser","createDebugChannel","process","env","NODE_ENV","__NEXT_REACT_DEBUG_CHANNEL","require","fetchServerAction","state","nextUrl","actionId","actionArgs","temporaryReferences","createTemporaryReferenceSet","info","extractInfoFromServerReferenceId","usedArgs","type","omitUnusedArgs","body","encodeReply","headers","Accept","RSC_CONTENT_TYPE_HEADER","ACTION_HEADER","NEXT_ROUTER_STATE_TREE_HEADER","prepareFlightRouterStateForRequest","tree","deploymentId","getDeploymentId","NEXT_URL","self","__next_r","NEXT_HTML_REQUEST_ID_HEADER","NEXT_REQUEST_ID_HEADER","crypto","getRandomValues","Uint32Array","toString","res","fetch","canonicalUrl","method","unrecognizedActionHeader","get","NEXT_ACTION_NOT_FOUND_HEADER","UnrecognizedActionError","redirectHeader","location","_redirectType","split","redirectType","RedirectType","push","replace","undefined","isPrerender","NEXT_IS_PRERENDER_HEADER","revalidationKind","ActionDidNotRevalidate","revalidationHeader","parsedKind","JSON","parse","ActionDidRevalidateStaticAndDynamic","ActionDidRevalidateDynamicOnly","redirectLocation","assignLocation","URL","window","href","contentType","isRscResponse","startsWith","message","status","text","Error","actionResult","actionFlightData","actionFlightDataRenderedSearch","actionFlightDataCouldBeIntercepted","response","Promise","resolve","callServer","findSourceMapURL","debugChannel","a","maybeFlightData","normalizeFlightData","f","q","i","action","reject","mutable","preserveCustomHistoryState","previousNextUrl","hasInterceptionRouteInCurrentTree","then","flightData","flightDataRenderedSearch","flightDataCouldBeIntercepted","didRevalidate","revalidateEntireCache","pendingPush","pushRef","resolvedRedirectType","isExternalURL","redirectHref","redirectError","createRedirectErrorForAction","handleExternalUrl","redirectWithBasepath","createHrefFromUrl","hasBasePath","removeBasePath","currentUrl","origin","redirectUrl","currentFlightRouterState","shouldScroll","freshnessPolicy","FreshnessPolicy","Default","RefreshAll","normalizedFlightData","isRootRender","redirectCanonicalUrl","navigationSeed","renderedSearch","data","seedData","head","now","Date","result","navigateToSeededRoute","cache","handleNavigationResult","navigateUsingSegmentCache","e","getRedirectError","handled"],"mappings":"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","ignoreList":[0]}}, - {"offset": {"line": 9042, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/router-reducer/router-reducer.ts"],"sourcesContent":["import {\n ACTION_NAVIGATE,\n ACTION_SERVER_PATCH,\n ACTION_RESTORE,\n ACTION_REFRESH,\n ACTION_HMR_REFRESH,\n ACTION_SERVER_ACTION,\n} from './router-reducer-types'\nimport type {\n ReducerActions,\n ReducerState,\n ReadonlyReducerState,\n} from './router-reducer-types'\nimport { navigateReducer } from './reducers/navigate-reducer'\nimport { serverPatchReducer } from './reducers/server-patch-reducer'\nimport { restoreReducer } from './reducers/restore-reducer'\nimport { refreshReducer } from './reducers/refresh-reducer'\nimport { hmrRefreshReducer } from './reducers/hmr-refresh-reducer'\nimport { serverActionReducer } from './reducers/server-action-reducer'\n\n/**\n * Reducer that handles the app-router state updates.\n */\nfunction clientReducer(\n state: ReadonlyReducerState,\n action: ReducerActions\n): ReducerState {\n switch (action.type) {\n case ACTION_NAVIGATE: {\n return navigateReducer(state, action)\n }\n case ACTION_SERVER_PATCH: {\n return serverPatchReducer(state, action)\n }\n case ACTION_RESTORE: {\n return restoreReducer(state, action)\n }\n case ACTION_REFRESH: {\n return refreshReducer(state)\n }\n case ACTION_HMR_REFRESH: {\n return hmrRefreshReducer(state)\n }\n case ACTION_SERVER_ACTION: {\n return serverActionReducer(state, action)\n }\n // This case should never be hit as dispatch is strongly typed.\n default:\n throw new Error('Unknown action')\n }\n}\n\nfunction serverReducer(\n state: ReadonlyReducerState,\n _action: ReducerActions\n): ReducerState {\n return state\n}\n\n// we don't run the client reducer on the server, so we use a noop function for better tree shaking\nexport const reducer =\n typeof window === 'undefined' ? serverReducer : clientReducer\n"],"names":["reducer","clientReducer","state","action","type","ACTION_NAVIGATE","navigateReducer","ACTION_SERVER_PATCH","serverPatchReducer","ACTION_RESTORE","restoreReducer","ACTION_REFRESH","refreshReducer","ACTION_HMR_REFRESH","hmrRefreshReducer","ACTION_SERVER_ACTION","serverActionReducer","Error","serverReducer","_action","window"],"mappings":";;;+BA4DaA,WAAAA;;;eAAAA;;;oCArDN;iCAMyB;oCACG;gCACJ;gCACA;mCACG;qCACE;AAEpC;;CAEC,GACD,SAASC,cACPC,KAA2B,EAC3BC,MAAsB;IAEtB,OAAQA,OAAOC,IAAI;QACjB,KAAKC,oBAAAA,eAAe;YAAE;gBACpB,OAAOC,CAAAA,GAAAA,iBAAAA,eAAe,EAACJ,OAAOC;YAChC;QACA,KAAKI,oBAAAA,mBAAmB;YAAE;gBACxB,OAAOC,CAAAA,GAAAA,oBAAAA,kBAAkB,EAACN,OAAOC;YACnC;QACA,KAAKM,oBAAAA,cAAc;YAAE;gBACnB,OAAOC,CAAAA,GAAAA,gBAAAA,cAAc,EAACR,OAAOC;YAC/B;QACA,KAAKQ,oBAAAA,cAAc;YAAE;gBACnB,OAAOC,CAAAA,GAAAA,gBAAAA,cAAc,EAACV;YACxB;QACA,KAAKW,oBAAAA,kBAAkB;YAAE;gBACvB,OAAOC,CAAAA,GAAAA,mBAAAA,iBAAiB,EAACZ;YAC3B;QACA,KAAKa,oBAAAA,oBAAoB;YAAE;gBACzB,OAAOC,CAAAA,GAAAA,qBAAAA,mBAAmB,EAACd,OAAOC;YACpC;QACA,+DAA+D;QAC/D;YACE,MAAM,OAAA,cAA2B,CAA3B,IAAIc,MAAM,mBAAV,qBAAA;uBAAA;4BAAA;8BAAA;YAA0B;IACpC;AACF;AAEA,SAASC,cACPhB,KAA2B,EAC3BiB,OAAuB;IAEvB,OAAOjB;AACT;AAGO,MAAMF,UACX,OAAOoB,WAAW,cAAcF,gBAAgBjB","ignoreList":[0]}}, - {"offset": {"line": 9110, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/segment-cache/prefetch.ts"],"sourcesContent":["import type { FlightRouterState } from '../../../shared/lib/app-router-types'\nimport { createPrefetchURL } from '../app-router-utils'\nimport { createCacheKey } from './cache-key'\nimport { schedulePrefetchTask } from './scheduler'\nimport { PrefetchPriority, type PrefetchTaskFetchStrategy } from './types'\n\n/**\n * Entrypoint for prefetching a URL into the Segment Cache.\n * @param href - The URL to prefetch. Typically this will come from a ,\n * or router.prefetch. It must be validated before we attempt to prefetch it.\n * @param nextUrl - A special header used by the server for interception routes.\n * Roughly corresponds to the current URL.\n * @param treeAtTimeOfPrefetch - The FlightRouterState at the time the prefetch\n * was requested. This is only used when PPR is disabled.\n * @param fetchStrategy - Whether to prefetch dynamic data, in addition to\n * static data. This is used by ``.\n * @param onInvalidate - A callback that will be called when the prefetch cache\n * When called, it signals to the listener that the data associated with the\n * prefetch may have been invalidated from the cache. This is not a live\n * subscription — it's called at most once per `prefetch` call. The only\n * supported use case is to trigger a new prefetch inside the listener, if\n * desired. It also may be called even in cases where the associated data is\n * still cached. Prefetching is a poll-based (pull) operation, not an event-\n * based (push) one. Rather than subscribe to specific cache entries, you\n * occasionally poll the prefetch cache to check if anything is missing.\n */\nexport function prefetch(\n href: string,\n nextUrl: string | null,\n treeAtTimeOfPrefetch: FlightRouterState,\n fetchStrategy: PrefetchTaskFetchStrategy,\n onInvalidate: null | (() => void)\n) {\n const url = createPrefetchURL(href)\n if (url === null) {\n // This href should not be prefetched.\n return\n }\n const cacheKey = createCacheKey(url.href, nextUrl)\n schedulePrefetchTask(\n cacheKey,\n treeAtTimeOfPrefetch,\n fetchStrategy,\n PrefetchPriority.Default,\n onInvalidate\n )\n}\n"],"names":["prefetch","href","nextUrl","treeAtTimeOfPrefetch","fetchStrategy","onInvalidate","url","createPrefetchURL","cacheKey","createCacheKey","schedulePrefetchTask","PrefetchPriority","Default"],"mappings":";;;+BA0BgBA,YAAAA;;;eAAAA;;;gCAzBkB;0BACH;2BACM;uBAC4B;AAsB1D,SAASA,SACdC,IAAY,EACZC,OAAsB,EACtBC,oBAAuC,EACvCC,aAAwC,EACxCC,YAAiC;IAEjC,MAAMC,MAAMC,CAAAA,GAAAA,gBAAAA,iBAAiB,EAACN;IAC9B,IAAIK,QAAQ,MAAM;QAChB,sCAAsC;QACtC;IACF;IACA,MAAME,WAAWC,CAAAA,GAAAA,UAAAA,cAAc,EAACH,IAAIL,IAAI,EAAEC;IAC1CQ,CAAAA,GAAAA,WAAAA,oBAAoB,EAClBF,UACAL,sBACAC,eACAO,OAAAA,gBAAgB,CAACC,OAAO,EACxBP;AAEJ","ignoreList":[0]}}, - {"offset": {"line": 9143, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/app-router-instance.ts"],"sourcesContent":["import {\n type AppRouterState,\n type ReducerActions,\n type ReducerState,\n ACTION_REFRESH,\n ACTION_SERVER_ACTION,\n ACTION_NAVIGATE,\n ACTION_RESTORE,\n type NavigateAction,\n ACTION_HMR_REFRESH,\n PrefetchKind,\n type AppHistoryState,\n} from './router-reducer/router-reducer-types'\nimport { reducer } from './router-reducer/router-reducer'\nimport { startTransition } from 'react'\nimport { isThenable } from '../../shared/lib/is-thenable'\nimport {\n FetchStrategy,\n type PrefetchTaskFetchStrategy,\n} from './segment-cache/types'\nimport { prefetch as prefetchWithSegmentCache } from './segment-cache/prefetch'\nimport { dispatchAppRouterAction } from './use-action-queue'\nimport { addBasePath } from '../add-base-path'\nimport { isExternalURL } from './app-router-utils'\nimport type {\n AppRouterInstance,\n NavigateOptions,\n PrefetchOptions,\n} from '../../shared/lib/app-router-context.shared-runtime'\nimport { setLinkForCurrentNavigation, type LinkInstance } from './links'\nimport type { ClientInstrumentationHooks } from '../app-index'\nimport type { GlobalErrorComponent } from './builtin/global-error'\n\nexport type DispatchStatePromise = React.Dispatch\n\nexport type AppRouterActionQueue = {\n state: AppRouterState\n dispatch: (payload: ReducerActions, setState: DispatchStatePromise) => void\n action: (state: AppRouterState, action: ReducerActions) => ReducerState\n\n onRouterTransitionStart:\n | ((url: string, type: 'push' | 'replace' | 'traverse') => void)\n | null\n\n pending: ActionQueueNode | null\n needsRefresh?: boolean\n last: ActionQueueNode | null\n}\n\nexport type GlobalErrorState = [\n GlobalError: GlobalErrorComponent,\n styles: React.ReactNode,\n]\n\nexport type ActionQueueNode = {\n payload: ReducerActions\n next: ActionQueueNode | null\n resolve: (value: ReducerState) => void\n reject: (err: Error) => void\n discarded?: boolean\n}\n\nfunction runRemainingActions(\n actionQueue: AppRouterActionQueue,\n setState: DispatchStatePromise\n) {\n if (actionQueue.pending !== null) {\n actionQueue.pending = actionQueue.pending.next\n if (actionQueue.pending !== null) {\n runAction({\n actionQueue,\n action: actionQueue.pending,\n setState,\n })\n }\n } else {\n // Check for refresh when pending is already null\n // This handles the case where a discarded server action completes\n // after the navigation has already finished and the queue is empty\n if (actionQueue.needsRefresh) {\n actionQueue.needsRefresh = false\n actionQueue.dispatch({ type: ACTION_REFRESH }, setState)\n }\n }\n}\n\nasync function runAction({\n actionQueue,\n action,\n setState,\n}: {\n actionQueue: AppRouterActionQueue\n action: ActionQueueNode\n setState: DispatchStatePromise\n}) {\n const prevState = actionQueue.state\n\n actionQueue.pending = action\n\n const payload = action.payload\n const actionResult = actionQueue.action(prevState, payload)\n\n function handleResult(nextState: AppRouterState) {\n // if we discarded this action, the state should also be discarded\n if (action.discarded) {\n // Check if the discarded server action revalidated data\n if (\n action.payload.type === ACTION_SERVER_ACTION &&\n action.payload.didRevalidate\n ) {\n // The server action was discarded but it revalidated data,\n // mark that we need to refresh after all actions complete\n actionQueue.needsRefresh = true\n }\n // Still need to run remaining actions even for discarded actions\n // to potentially trigger the refresh\n runRemainingActions(actionQueue, setState)\n return\n }\n\n actionQueue.state = nextState\n\n runRemainingActions(actionQueue, setState)\n action.resolve(nextState)\n }\n\n // if the action is a promise, set up a callback to resolve it\n if (isThenable(actionResult)) {\n actionResult.then(handleResult, (err) => {\n runRemainingActions(actionQueue, setState)\n action.reject(err)\n })\n } else {\n handleResult(actionResult)\n }\n}\n\nfunction dispatchAction(\n actionQueue: AppRouterActionQueue,\n payload: ReducerActions,\n setState: DispatchStatePromise\n) {\n let resolvers: {\n resolve: (value: ReducerState) => void\n reject: (reason: any) => void\n } = { resolve: setState, reject: () => {} }\n\n // most of the action types are async with the exception of restore\n // it's important that restore is handled quickly since it's fired on the popstate event\n // and we don't want to add any delay on a back/forward nav\n // this only creates a promise for the async actions\n if (payload.type !== ACTION_RESTORE) {\n // Create the promise and assign the resolvers to the object.\n const deferredPromise = new Promise((resolve, reject) => {\n resolvers = { resolve, reject }\n })\n\n startTransition(() => {\n // we immediately notify React of the pending promise -- the resolver is attached to the action node\n // and will be called when the associated action promise resolves\n setState(deferredPromise)\n })\n }\n\n const newAction: ActionQueueNode = {\n payload,\n next: null,\n resolve: resolvers.resolve,\n reject: resolvers.reject,\n }\n\n // Check if the queue is empty\n if (actionQueue.pending === null) {\n // The queue is empty, so add the action and start it immediately\n // Mark this action as the last in the queue\n actionQueue.last = newAction\n\n runAction({\n actionQueue,\n action: newAction,\n setState,\n })\n } else if (\n payload.type === ACTION_NAVIGATE ||\n payload.type === ACTION_RESTORE\n ) {\n // Navigations (including back/forward) take priority over any pending actions.\n // Mark the pending action as discarded (so the state is never applied) and start the navigation action immediately.\n actionQueue.pending.discarded = true\n\n // The rest of the current queue should still execute after this navigation.\n // (Note that it can't contain any earlier navigations, because we always put those into `actionQueue.pending` by calling `runAction`)\n newAction.next = actionQueue.pending.next\n\n runAction({\n actionQueue,\n action: newAction,\n setState,\n })\n } else {\n // The queue is not empty, so add the action to the end of the queue\n // It will be started by runRemainingActions after the previous action finishes\n if (actionQueue.last !== null) {\n actionQueue.last.next = newAction\n }\n actionQueue.last = newAction\n }\n}\n\nlet globalActionQueue: AppRouterActionQueue | null = null\n\nexport function createMutableActionQueue(\n initialState: AppRouterState,\n instrumentationHooks: ClientInstrumentationHooks | null\n): AppRouterActionQueue {\n const actionQueue: AppRouterActionQueue = {\n state: initialState,\n dispatch: (payload: ReducerActions, setState: DispatchStatePromise) =>\n dispatchAction(actionQueue, payload, setState),\n action: async (state: AppRouterState, action: ReducerActions) => {\n const result = reducer(state, action)\n return result\n },\n pending: null,\n last: null,\n onRouterTransitionStart:\n instrumentationHooks !== null &&\n typeof instrumentationHooks.onRouterTransitionStart === 'function'\n ? // This profiling hook will be called at the start of every navigation.\n instrumentationHooks.onRouterTransitionStart\n : null,\n }\n\n if (typeof window !== 'undefined') {\n // The action queue is lazily created on hydration, but after that point\n // it doesn't change. So we can store it in a global rather than pass\n // it around everywhere via props/context.\n if (globalActionQueue !== null) {\n throw new Error(\n 'Internal Next.js Error: createMutableActionQueue was called more ' +\n 'than once'\n )\n }\n globalActionQueue = actionQueue\n }\n\n return actionQueue\n}\n\nexport function getCurrentAppRouterState(): AppRouterState | null {\n return globalActionQueue !== null ? globalActionQueue.state : null\n}\n\nfunction getAppRouterActionQueue(): AppRouterActionQueue {\n if (globalActionQueue === null) {\n throw new Error(\n 'Internal Next.js error: Router action dispatched before initialization.'\n )\n }\n return globalActionQueue\n}\n\nfunction getProfilingHookForOnNavigationStart() {\n if (globalActionQueue !== null) {\n return globalActionQueue.onRouterTransitionStart\n }\n return null\n}\n\nexport function dispatchNavigateAction(\n href: string,\n navigateType: NavigateAction['navigateType'],\n shouldScroll: boolean,\n linkInstanceRef: LinkInstance | null\n): void {\n // TODO: This stuff could just go into the reducer. Leaving as-is for now\n // since we're about to rewrite all the router reducer stuff anyway.\n const url = new URL(addBasePath(href), location.href)\n if (process.env.__NEXT_APP_NAV_FAIL_HANDLING) {\n window.next.__pendingUrl = url\n }\n\n setLinkForCurrentNavigation(linkInstanceRef)\n\n const onRouterTransitionStart = getProfilingHookForOnNavigationStart()\n if (onRouterTransitionStart !== null) {\n onRouterTransitionStart(href, navigateType)\n }\n\n dispatchAppRouterAction({\n type: ACTION_NAVIGATE,\n url,\n isExternalUrl: isExternalURL(url),\n locationSearch: location.search,\n shouldScroll,\n navigateType,\n })\n}\n\nexport function dispatchTraverseAction(\n href: string,\n historyState: AppHistoryState | undefined\n) {\n const onRouterTransitionStart = getProfilingHookForOnNavigationStart()\n if (onRouterTransitionStart !== null) {\n onRouterTransitionStart(href, 'traverse')\n }\n dispatchAppRouterAction({\n type: ACTION_RESTORE,\n url: new URL(href),\n historyState,\n })\n}\n\n/**\n * The app router that is exposed through `useRouter`. These are public API\n * methods. Internal Next.js code should call the lower level methods directly\n * (although there's lots of existing code that doesn't do that).\n */\nexport const publicAppRouterInstance: AppRouterInstance = {\n back: () => window.history.back(),\n forward: () => window.history.forward(),\n prefetch:\n // Unlike the old implementation, the Segment Cache doesn't store its\n // data in the router reducer state; it writes into a global mutable\n // cache. So we don't need to dispatch an action.\n (href: string, options?: PrefetchOptions) => {\n const actionQueue = getAppRouterActionQueue()\n const prefetchKind = options?.kind ?? PrefetchKind.AUTO\n\n // We don't currently offer a way to issue a runtime prefetch via `router.prefetch()`.\n // This will be possible when we update its API to not take a PrefetchKind.\n let fetchStrategy: PrefetchTaskFetchStrategy\n switch (prefetchKind) {\n case PrefetchKind.AUTO: {\n // We default to PPR. We'll discover whether or not the route supports it with the initial prefetch.\n fetchStrategy = FetchStrategy.PPR\n break\n }\n case PrefetchKind.FULL: {\n fetchStrategy = FetchStrategy.Full\n break\n }\n default: {\n prefetchKind satisfies never\n // Despite typescript thinking that this can't happen,\n // we might get an unexpected value from user code.\n // We don't know what they want, but we know they want a prefetch,\n // so use the default.\n fetchStrategy = FetchStrategy.PPR\n }\n }\n\n prefetchWithSegmentCache(\n href,\n actionQueue.state.nextUrl,\n actionQueue.state.tree,\n fetchStrategy,\n options?.onInvalidate ?? null\n )\n },\n replace: (href: string, options?: NavigateOptions) => {\n startTransition(() => {\n dispatchNavigateAction(href, 'replace', options?.scroll ?? true, null)\n })\n },\n push: (href: string, options?: NavigateOptions) => {\n startTransition(() => {\n dispatchNavigateAction(href, 'push', options?.scroll ?? true, null)\n })\n },\n refresh: () => {\n startTransition(() => {\n dispatchAppRouterAction({\n type: ACTION_REFRESH,\n })\n })\n },\n hmrRefresh: () => {\n if (process.env.NODE_ENV !== 'development') {\n throw new Error(\n 'hmrRefresh can only be used in development mode. Please use refresh instead.'\n )\n } else {\n startTransition(() => {\n dispatchAppRouterAction({\n type: ACTION_HMR_REFRESH,\n })\n })\n }\n },\n}\n\n// Exists for debugging purposes. Don't use in application code.\nif (typeof window !== 'undefined' && window.next) {\n window.next.router = publicAppRouterInstance\n}\n"],"names":["createMutableActionQueue","dispatchNavigateAction","dispatchTraverseAction","getCurrentAppRouterState","publicAppRouterInstance","runRemainingActions","actionQueue","setState","pending","next","runAction","action","needsRefresh","dispatch","type","ACTION_REFRESH","prevState","state","payload","actionResult","handleResult","nextState","discarded","ACTION_SERVER_ACTION","didRevalidate","resolve","isThenable","then","err","reject","dispatchAction","resolvers","ACTION_RESTORE","deferredPromise","Promise","startTransition","newAction","last","ACTION_NAVIGATE","globalActionQueue","initialState","instrumentationHooks","result","reducer","onRouterTransitionStart","window","Error","getAppRouterActionQueue","getProfilingHookForOnNavigationStart","href","navigateType","shouldScroll","linkInstanceRef","url","URL","addBasePath","location","process","env","__NEXT_APP_NAV_FAIL_HANDLING","__pendingUrl","setLinkForCurrentNavigation","dispatchAppRouterAction","isExternalUrl","isExternalURL","locationSearch","search","historyState","back","history","forward","prefetch","options","prefetchKind","kind","PrefetchKind","AUTO","fetchStrategy","FetchStrategy","PPR","FULL","Full","prefetchWithSegmentCache","nextUrl","tree","onInvalidate","replace","scroll","push","refresh","hmrRefresh","NODE_ENV","ACTION_HMR_REFRESH","router"],"mappings":"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","ignoreList":[0]}}, - {"offset": {"line": 9460, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/app-router-announcer.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from 'react'\nimport { createPortal } from 'react-dom'\nimport type { FlightRouterState } from '../../shared/lib/app-router-types'\n\nconst ANNOUNCER_TYPE = 'next-route-announcer'\nconst ANNOUNCER_ID = '__next-route-announcer__'\n\nfunction getAnnouncerNode() {\n const existingAnnouncer = document.getElementsByName(ANNOUNCER_TYPE)[0]\n if (existingAnnouncer?.shadowRoot?.childNodes[0]) {\n return existingAnnouncer.shadowRoot.childNodes[0] as HTMLElement\n } else {\n const container = document.createElement(ANNOUNCER_TYPE)\n container.style.cssText = 'position:absolute'\n const announcer = document.createElement('div')\n announcer.ariaLive = 'assertive'\n announcer.id = ANNOUNCER_ID\n announcer.role = 'alert'\n announcer.style.cssText =\n 'position:absolute;border:0;height:1px;margin:-1px;padding:0;width:1px;clip:rect(0 0 0 0);overflow:hidden;white-space:nowrap;word-wrap:normal'\n\n // Use shadow DOM here to avoid any potential CSS bleed\n const shadow = container.attachShadow({ mode: 'open' })\n shadow.appendChild(announcer)\n document.body.appendChild(container)\n return announcer\n }\n}\n\nexport function AppRouterAnnouncer({ tree }: { tree: FlightRouterState }) {\n const [portalNode, setPortalNode] = useState(null)\n\n useEffect(() => {\n const announcer = getAnnouncerNode()\n setPortalNode(announcer)\n return () => {\n const container = document.getElementsByTagName(ANNOUNCER_TYPE)[0]\n if (container?.isConnected) {\n document.body.removeChild(container)\n }\n }\n }, [])\n\n const [routeAnnouncement, setRouteAnnouncement] = useState('')\n const previousTitle = useRef(undefined)\n\n useEffect(() => {\n let currentTitle = ''\n if (document.title) {\n currentTitle = document.title\n } else {\n const pageHeader = document.querySelector('h1')\n if (pageHeader) {\n currentTitle = pageHeader.innerText || pageHeader.textContent || ''\n }\n }\n\n // Only announce the title change, but not for the first load because screen\n // readers do that automatically.\n if (\n previousTitle.current !== undefined &&\n previousTitle.current !== currentTitle\n ) {\n setRouteAnnouncement(currentTitle)\n }\n previousTitle.current = currentTitle\n }, [tree])\n\n return portalNode ? createPortal(routeAnnouncement, portalNode) : null\n}\n"],"names":["AppRouterAnnouncer","ANNOUNCER_TYPE","ANNOUNCER_ID","getAnnouncerNode","existingAnnouncer","document","getElementsByName","shadowRoot","childNodes","container","createElement","style","cssText","announcer","ariaLive","id","role","shadow","attachShadow","mode","appendChild","body","tree","portalNode","setPortalNode","useState","useEffect","getElementsByTagName","isConnected","removeChild","routeAnnouncement","setRouteAnnouncement","previousTitle","useRef","undefined","currentTitle","title","pageHeader","querySelector","innerText","textContent","current","createPortal"],"mappings":";;;+BA6BgBA,sBAAAA;;;eAAAA;;;uBA7B4B;0BACf;AAG7B,MAAMC,iBAAiB;AACvB,MAAMC,eAAe;AAErB,SAASC;IACP,MAAMC,oBAAoBC,SAASC,iBAAiB,CAACL,eAAe,CAAC,EAAE;IACvE,IAAIG,mBAAmBG,YAAYC,UAAU,CAAC,EAAE,EAAE;QAChD,OAAOJ,kBAAkBG,UAAU,CAACC,UAAU,CAAC,EAAE;IACnD,OAAO;QACL,MAAMC,YAAYJ,SAASK,aAAa,CAACT;QACzCQ,UAAUE,KAAK,CAACC,OAAO,GAAG;QAC1B,MAAMC,YAAYR,SAASK,aAAa,CAAC;QACzCG,UAAUC,QAAQ,GAAG;QACrBD,UAAUE,EAAE,GAAGb;QACfW,UAAUG,IAAI,GAAG;QACjBH,UAAUF,KAAK,CAACC,OAAO,GACrB;QAEF,uDAAuD;QACvD,MAAMK,SAASR,UAAUS,YAAY,CAAC;YAAEC,MAAM;QAAO;QACrDF,OAAOG,WAAW,CAACP;QACnBR,SAASgB,IAAI,CAACD,WAAW,CAACX;QAC1B,OAAOI;IACT;AACF;AAEO,SAASb,mBAAmB,EAAEsB,IAAI,EAA+B;IACtE,MAAM,CAACC,YAAYC,cAAc,GAAGC,CAAAA,GAAAA,OAAAA,QAAQ,EAAqB;IAEjEC,CAAAA,GAAAA,OAAAA,SAAS,EAAC;QACR,MAAMb,YAAYV;QAClBqB,cAAcX;QACd,OAAO;YACL,MAAMJ,YAAYJ,SAASsB,oBAAoB,CAAC1B,eAAe,CAAC,EAAE;YAClE,IAAIQ,WAAWmB,aAAa;gBAC1BvB,SAASgB,IAAI,CAACQ,WAAW,CAACpB;YAC5B;QACF;IACF,GAAG,EAAE;IAEL,MAAM,CAACqB,mBAAmBC,qBAAqB,GAAGN,CAAAA,GAAAA,OAAAA,QAAQ,EAAC;IAC3D,MAAMO,gBAAgBC,CAAAA,GAAAA,OAAAA,MAAM,EAAqBC;IAEjDR,CAAAA,GAAAA,OAAAA,SAAS,EAAC;QACR,IAAIS,eAAe;QACnB,IAAI9B,SAAS+B,KAAK,EAAE;YAClBD,eAAe9B,SAAS+B,KAAK;QAC/B,OAAO;YACL,MAAMC,aAAahC,SAASiC,aAAa,CAAC;YAC1C,IAAID,YAAY;gBACdF,eAAeE,WAAWE,SAAS,IAAIF,WAAWG,WAAW,IAAI;YACnE;QACF;QAEA,4EAA4E;QAC5E,iCAAiC;QACjC,IACER,cAAcS,OAAO,KAAKP,aAC1BF,cAAcS,OAAO,KAAKN,cAC1B;YACAJ,qBAAqBI;QACvB;QACAH,cAAcS,OAAO,GAAGN;IAC1B,GAAG;QAACb;KAAK;IAET,OAAOC,aAAAA,WAAAA,GAAamB,CAAAA,GAAAA,UAAAA,YAAY,EAACZ,mBAAmBP,cAAc;AACpE","ignoreList":[0]}}, - {"offset": {"line": 9540, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/forbidden.ts"],"sourcesContent":["import {\n HTTP_ERROR_FALLBACK_ERROR_CODE,\n type HTTPAccessFallbackError,\n} from './http-access-fallback/http-access-fallback'\n\n// TODO: Add `forbidden` docs\n/**\n * @experimental\n * This function allows you to render the [forbidden.js file](https://nextjs.org/docs/app/api-reference/file-conventions/forbidden)\n * within a route segment as well as inject a tag.\n *\n * `forbidden()` can be used in\n * [Server Components](https://nextjs.org/docs/app/building-your-application/rendering/server-components),\n * [Route Handlers](https://nextjs.org/docs/app/building-your-application/routing/route-handlers), and\n * [Server Actions](https://nextjs.org/docs/app/building-your-application/data-fetching/server-actions-and-mutations).\n *\n * Read more: [Next.js Docs: `forbidden`](https://nextjs.org/docs/app/api-reference/functions/forbidden)\n */\n\nconst DIGEST = `${HTTP_ERROR_FALLBACK_ERROR_CODE};403`\n\nexport function forbidden(): never {\n if (!process.env.__NEXT_EXPERIMENTAL_AUTH_INTERRUPTS) {\n throw new Error(\n `\\`forbidden()\\` is experimental and only allowed to be enabled when \\`experimental.authInterrupts\\` is enabled.`\n )\n }\n\n const error = new Error(DIGEST) as HTTPAccessFallbackError\n ;(error as HTTPAccessFallbackError).digest = DIGEST\n throw error\n}\n"],"names":["forbidden","DIGEST","HTTP_ERROR_FALLBACK_ERROR_CODE","process","env","__NEXT_EXPERIMENTAL_AUTH_INTERRUPTS","Error","error","digest"],"mappings":"AAsBOG,QAAQC,GAAG,CAACC,mCAAmC;;;;;+BADtCL,aAAAA;;;eAAAA;;;oCAlBT;AAEP,6BAA6B;AAC7B;;;;;;;;;;;CAWC,GAED,MAAMC,SAAS,GAAGC,oBAAAA,8BAA8B,CAAC,IAAI,CAAC;AAE/C,SAASF;IACd,IAAI,oCAAkD;QACpD,MAAM,OAAA,cAEL,CAFK,IAAIM,MACR,CAAC,+GAA+G,CAAC,GAD7G,qBAAA;mBAAA;wBAAA;0BAAA;QAEN;IACF;IAEA,MAAMC,QAAQ,OAAA,cAAiB,CAAjB,IAAID,MAAML,SAAV,qBAAA;eAAA;oBAAA;sBAAA;IAAgB;IAC5BM,MAAkCC,MAAM,GAAGP;IAC7C,MAAMM;AACR","ignoreList":[0]}}, - {"offset": {"line": 9592, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/unauthorized.ts"],"sourcesContent":["import {\n HTTP_ERROR_FALLBACK_ERROR_CODE,\n type HTTPAccessFallbackError,\n} from './http-access-fallback/http-access-fallback'\n\n// TODO: Add `unauthorized` docs\n/**\n * @experimental\n * This function allows you to render the [unauthorized.js file](https://nextjs.org/docs/app/api-reference/file-conventions/unauthorized)\n * within a route segment as well as inject a tag.\n *\n * `unauthorized()` can be used in\n * [Server Components](https://nextjs.org/docs/app/building-your-application/rendering/server-components),\n * [Route Handlers](https://nextjs.org/docs/app/building-your-application/routing/route-handlers), and\n * [Server Actions](https://nextjs.org/docs/app/building-your-application/data-fetching/server-actions-and-mutations).\n *\n *\n * Read more: [Next.js Docs: `unauthorized`](https://nextjs.org/docs/app/api-reference/functions/unauthorized)\n */\n\nconst DIGEST = `${HTTP_ERROR_FALLBACK_ERROR_CODE};401`\n\nexport function unauthorized(): never {\n if (!process.env.__NEXT_EXPERIMENTAL_AUTH_INTERRUPTS) {\n throw new Error(\n `\\`unauthorized()\\` is experimental and only allowed to be used when \\`experimental.authInterrupts\\` is enabled.`\n )\n }\n\n const error = new Error(DIGEST) as HTTPAccessFallbackError\n ;(error as HTTPAccessFallbackError).digest = DIGEST\n throw error\n}\n"],"names":["unauthorized","DIGEST","HTTP_ERROR_FALLBACK_ERROR_CODE","process","env","__NEXT_EXPERIMENTAL_AUTH_INTERRUPTS","Error","error","digest"],"mappings":"AAuBOG,QAAQC,GAAG,CAACC,mCAAmC;;;;;+BADtCL,gBAAAA;;;eAAAA;;;oCAnBT;AAEP,gCAAgC;AAChC;;;;;;;;;;;;CAYC,GAED,MAAMC,SAAS,GAAGC,oBAAAA,8BAA8B,CAAC,IAAI,CAAC;AAE/C,SAASF;IACd,IAAI,oCAAkD;QACpD,MAAM,OAAA,cAEL,CAFK,IAAIM,MACR,CAAC,+GAA+G,CAAC,GAD7G,qBAAA;mBAAA;wBAAA;0BAAA;QAEN;IACF;IAEA,MAAMC,QAAQ,OAAA,cAAiB,CAAjB,IAAID,MAAML,SAAV,qBAAA;eAAA;oBAAA;sBAAA;IAAgB;IAC5BM,MAAkCC,MAAM,GAAGP;IAC7C,MAAMM;AACR","ignoreList":[0]}}, - {"offset": {"line": 9645, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/unstable-rethrow.browser.ts"],"sourcesContent":["import { isBailoutToCSRError } from '../../shared/lib/lazy-dynamic/bailout-to-csr'\nimport { isNextRouterError } from './is-next-router-error'\n\nexport function unstable_rethrow(error: unknown): void {\n if (isNextRouterError(error) || isBailoutToCSRError(error)) {\n throw error\n }\n\n if (error instanceof Error && 'cause' in error) {\n unstable_rethrow(error.cause)\n }\n}\n"],"names":["unstable_rethrow","error","isNextRouterError","isBailoutToCSRError","Error","cause"],"mappings":";;;+BAGgBA,oBAAAA;;;eAAAA;;;8BAHoB;mCACF;AAE3B,SAASA,iBAAiBC,KAAc;IAC7C,IAAIC,CAAAA,GAAAA,mBAAAA,iBAAiB,EAACD,UAAUE,CAAAA,GAAAA,cAAAA,mBAAmB,EAACF,QAAQ;QAC1D,MAAMA;IACR;IAEA,IAAIA,iBAAiBG,SAAS,WAAWH,OAAO;QAC9CD,iBAAiBC,MAAMI,KAAK;IAC9B;AACF","ignoreList":[0]}}, - {"offset": {"line": 9675, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/hooks-server-context.ts"],"sourcesContent":["const DYNAMIC_ERROR_CODE = 'DYNAMIC_SERVER_USAGE'\n\nexport class DynamicServerError extends Error {\n digest: typeof DYNAMIC_ERROR_CODE = DYNAMIC_ERROR_CODE\n\n constructor(public readonly description: string) {\n super(`Dynamic server usage: ${description}`)\n }\n}\n\nexport function isDynamicServerError(err: unknown): err is DynamicServerError {\n if (\n typeof err !== 'object' ||\n err === null ||\n !('digest' in err) ||\n typeof err.digest !== 'string'\n ) {\n return false\n }\n\n return err.digest === DYNAMIC_ERROR_CODE\n}\n"],"names":["DynamicServerError","isDynamicServerError","DYNAMIC_ERROR_CODE","Error","constructor","description","digest","err"],"mappings":";;;;;;;;;;;;;;IAEaA,kBAAkB,EAAA;eAAlBA;;IAQGC,oBAAoB,EAAA;eAApBA;;;AAVhB,MAAMC,qBAAqB;AAEpB,MAAMF,2BAA2BG;IAGtCC,YAA4BC,WAAmB,CAAE;QAC/C,KAAK,CAAC,CAAC,sBAAsB,EAAEA,aAAa,GAAA,IAAA,CADlBA,WAAAA,GAAAA,aAAAA,IAAAA,CAF5BC,MAAAA,GAAoCJ;IAIpC;AACF;AAEO,SAASD,qBAAqBM,GAAY;IAC/C,IACE,OAAOA,QAAQ,YACfA,QAAQ,QACR,CAAE,CAAA,YAAYA,GAAE,KAChB,OAAOA,IAAID,MAAM,KAAK,UACtB;QACA,OAAO;IACT;IAEA,OAAOC,IAAID,MAAM,KAAKJ;AACxB","ignoreList":[0]}}, - {"offset": {"line": 9719, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/static-generation-bailout.ts"],"sourcesContent":["const NEXT_STATIC_GEN_BAILOUT = 'NEXT_STATIC_GEN_BAILOUT'\n\nexport class StaticGenBailoutError extends Error {\n public readonly code = NEXT_STATIC_GEN_BAILOUT\n}\n\nexport function isStaticGenBailoutError(\n error: unknown\n): error is StaticGenBailoutError {\n if (typeof error !== 'object' || error === null || !('code' in error)) {\n return false\n }\n\n return error.code === NEXT_STATIC_GEN_BAILOUT\n}\n"],"names":["StaticGenBailoutError","isStaticGenBailoutError","NEXT_STATIC_GEN_BAILOUT","Error","code","error"],"mappings":";;;;;;;;;;;;;;IAEaA,qBAAqB,EAAA;eAArBA;;IAIGC,uBAAuB,EAAA;eAAvBA;;;AANhB,MAAMC,0BAA0B;AAEzB,MAAMF,8BAA8BG;;QAApC,KAAA,IAAA,OAAA,IAAA,CACWC,IAAAA,GAAOF;;AACzB;AAEO,SAASD,wBACdI,KAAc;IAEd,IAAI,OAAOA,UAAU,YAAYA,UAAU,QAAQ,CAAE,CAAA,UAAUA,KAAI,GAAI;QACrE,OAAO;IACT;IAEA,OAAOA,MAAMD,IAAI,KAAKF;AACxB","ignoreList":[0]}}, - {"offset": {"line": 9763, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/unstable-rethrow.server.ts"],"sourcesContent":["import { isHangingPromiseRejectionError } from '../../server/dynamic-rendering-utils'\nimport { isPostpone } from '../../server/lib/router-utils/is-postpone'\nimport { isBailoutToCSRError } from '../../shared/lib/lazy-dynamic/bailout-to-csr'\nimport { isNextRouterError } from './is-next-router-error'\nimport {\n isDynamicPostpone,\n isPrerenderInterruptedError,\n} from '../../server/app-render/dynamic-rendering'\nimport { isDynamicServerError } from './hooks-server-context'\n\nexport function unstable_rethrow(error: unknown): void {\n if (\n isNextRouterError(error) ||\n isBailoutToCSRError(error) ||\n isDynamicServerError(error) ||\n isDynamicPostpone(error) ||\n isPostpone(error) ||\n isHangingPromiseRejectionError(error) ||\n isPrerenderInterruptedError(error)\n ) {\n throw error\n }\n\n if (error instanceof Error && 'cause' in error) {\n unstable_rethrow(error.cause)\n }\n}\n"],"names":["unstable_rethrow","error","isNextRouterError","isBailoutToCSRError","isDynamicServerError","isDynamicPostpone","isPostpone","isHangingPromiseRejectionError","isPrerenderInterruptedError","Error","cause"],"mappings":";;;+BAUgBA,oBAAAA;;;eAAAA;;;uCAV+B;4BACpB;8BACS;mCACF;kCAI3B;oCAC8B;AAE9B,SAASA,iBAAiBC,KAAc;IAC7C,IACEC,CAAAA,GAAAA,mBAAAA,iBAAiB,EAACD,UAClBE,CAAAA,GAAAA,cAAAA,mBAAmB,EAACF,UACpBG,CAAAA,GAAAA,oBAAAA,oBAAoB,EAACH,UACrBI,CAAAA,GAAAA,kBAAAA,iBAAiB,EAACJ,UAClBK,CAAAA,GAAAA,YAAAA,UAAU,EAACL,UACXM,CAAAA,GAAAA,uBAAAA,8BAA8B,EAACN,UAC/BO,CAAAA,GAAAA,kBAAAA,2BAA2B,EAACP,QAC5B;QACA,MAAMA;IACR;IAEA,IAAIA,iBAAiBQ,SAAS,WAAWR,OAAO;QAC9CD,iBAAiBC,MAAMS,KAAK;IAC9B;AACF","ignoreList":[0]}}, - {"offset": {"line": 9797, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/unstable-rethrow.ts"],"sourcesContent":["/**\n * This function should be used to rethrow internal Next.js errors so that they can be handled by the framework.\n * When wrapping an API that uses errors to interrupt control flow, you should use this function before you do any error handling.\n * This function will rethrow the error if it is a Next.js error so it can be handled, otherwise it will do nothing.\n *\n * Read more: [Next.js Docs: `unstable_rethrow`](https://nextjs.org/docs/app/api-reference/functions/unstable_rethrow)\n */\nexport const unstable_rethrow =\n typeof window === 'undefined'\n ? (\n require('./unstable-rethrow.server') as typeof import('./unstable-rethrow.server')\n ).unstable_rethrow\n : (\n require('./unstable-rethrow.browser') as typeof import('./unstable-rethrow.browser')\n ).unstable_rethrow\n"],"names":["unstable_rethrow","window","require"],"mappings":"AAAA;;;;;;CAMC;;;+BACYA,oBAAAA;;;eAAAA;;;AAAN,MAAMA,mBACX,OAAOC,WAAW,cAEZC,QAAQ,2HACRF,gBAAgB,GAEhBE,QAAQ,4HACRF,gBAAgB","ignoreList":[0]}}, - {"offset": {"line": 9824, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/navigation.react-server.ts"],"sourcesContent":["import { ReadonlyURLSearchParams } from './readonly-url-search-params'\n\nexport function unstable_isUnrecognizedActionError(): boolean {\n throw new Error(\n '`unstable_isUnrecognizedActionError` can only be used on the client.'\n )\n}\n\nexport { redirect, permanentRedirect } from './redirect'\nexport { RedirectType } from './redirect-error'\nexport { notFound } from './not-found'\nexport { forbidden } from './forbidden'\nexport { unauthorized } from './unauthorized'\nexport { unstable_rethrow } from './unstable-rethrow'\nexport { ReadonlyURLSearchParams }\n"],"names":["ReadonlyURLSearchParams","RedirectType","forbidden","notFound","permanentRedirect","redirect","unauthorized","unstable_isUnrecognizedActionError","unstable_rethrow","Error"],"mappings":";;;;;;;;;;;;;;;;;;;;;IAcSA,uBAAuB,EAAA;eAAvBA,yBAAAA,uBAAuB;;IALvBC,YAAY,EAAA;eAAZA,eAAAA,YAAY;;IAEZC,SAAS,EAAA;eAATA,WAAAA,SAAS;;IADTC,QAAQ,EAAA;eAARA,UAAAA,QAAQ;;IAFEC,iBAAiB,EAAA;eAAjBA,UAAAA,iBAAiB;;IAA3BC,QAAQ,EAAA;eAARA,UAAAA,QAAQ;;IAIRC,YAAY,EAAA;eAAZA,cAAAA,YAAY;;IAVLC,kCAAkC,EAAA;eAAlCA;;IAWPC,gBAAgB,EAAA;eAAhBA,iBAAAA,gBAAgB;;;yCAbe;0BAQI;+BACf;0BACJ;2BACC;8BACG;iCACI;AAX1B,SAASD;IACd,MAAM,OAAA,cAEL,CAFK,IAAIE,MACR,yEADI,qBAAA;eAAA;oBAAA;sBAAA;IAEN;AACF","ignoreList":[0]}}, - {"offset": {"line": 9898, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/navigation.ts"],"sourcesContent":["import type { Params } from '../../server/request/params'\n\nimport React, { useContext, useMemo, use } from 'react'\nimport {\n AppRouterContext,\n LayoutRouterContext,\n type AppRouterInstance,\n} from '../../shared/lib/app-router-context.shared-runtime'\nimport {\n SearchParamsContext,\n PathnameContext,\n PathParamsContext,\n NavigationPromisesContext,\n ReadonlyURLSearchParams,\n} from '../../shared/lib/hooks-client-context.shared-runtime'\nimport {\n computeSelectedLayoutSegment,\n getSelectedLayoutSegmentPath,\n} from '../../shared/lib/segment'\n\nconst useDynamicRouteParams =\n typeof window === 'undefined'\n ? (\n require('../../server/app-render/dynamic-rendering') as typeof import('../../server/app-render/dynamic-rendering')\n ).useDynamicRouteParams\n : undefined\n\nconst useDynamicSearchParams =\n typeof window === 'undefined'\n ? (\n require('../../server/app-render/dynamic-rendering') as typeof import('../../server/app-render/dynamic-rendering')\n ).useDynamicSearchParams\n : undefined\n\n/**\n * A [Client Component](https://nextjs.org/docs/app/building-your-application/rendering/client-components) hook\n * that lets you *read* the current URL's search parameters.\n *\n * Learn more about [`URLSearchParams` on MDN](https://developer.mozilla.org/docs/Web/API/URLSearchParams)\n *\n * @example\n * ```ts\n * \"use client\"\n * import { useSearchParams } from 'next/navigation'\n *\n * export default function Page() {\n * const searchParams = useSearchParams()\n * searchParams.get('foo') // returns 'bar' when ?foo=bar\n * // ...\n * }\n * ```\n *\n * Read more: [Next.js Docs: `useSearchParams`](https://nextjs.org/docs/app/api-reference/functions/use-search-params)\n */\n// Client components API\nexport function useSearchParams(): ReadonlyURLSearchParams {\n useDynamicSearchParams?.('useSearchParams()')\n\n const searchParams = useContext(SearchParamsContext)\n\n // In the case where this is `null`, the compat types added in\n // `next-env.d.ts` will add a new overload that changes the return type to\n // include `null`.\n const readonlySearchParams = useMemo((): ReadonlyURLSearchParams => {\n if (!searchParams) {\n // When the router is not ready in pages, we won't have the search params\n // available.\n return null!\n }\n\n return new ReadonlyURLSearchParams(searchParams)\n }, [searchParams])\n\n // Instrument with Suspense DevTools (dev-only)\n if (process.env.NODE_ENV !== 'production' && 'use' in React) {\n const navigationPromises = use(NavigationPromisesContext)\n if (navigationPromises) {\n return use(navigationPromises.searchParams)\n }\n }\n\n return readonlySearchParams\n}\n\n/**\n * A [Client Component](https://nextjs.org/docs/app/building-your-application/rendering/client-components) hook\n * that lets you read the current URL's pathname.\n *\n * @example\n * ```ts\n * \"use client\"\n * import { usePathname } from 'next/navigation'\n *\n * export default function Page() {\n * const pathname = usePathname() // returns \"/dashboard\" on /dashboard?foo=bar\n * // ...\n * }\n * ```\n *\n * Read more: [Next.js Docs: `usePathname`](https://nextjs.org/docs/app/api-reference/functions/use-pathname)\n */\n// Client components API\nexport function usePathname(): string {\n useDynamicRouteParams?.('usePathname()')\n\n // In the case where this is `null`, the compat types added in `next-env.d.ts`\n // will add a new overload that changes the return type to include `null`.\n const pathname = useContext(PathnameContext) as string\n\n // Instrument with Suspense DevTools (dev-only)\n if (process.env.NODE_ENV !== 'production' && 'use' in React) {\n const navigationPromises = use(NavigationPromisesContext)\n if (navigationPromises) {\n return use(navigationPromises.pathname)\n }\n }\n\n return pathname\n}\n\n// Client components API\nexport {\n ServerInsertedHTMLContext,\n useServerInsertedHTML,\n} from '../../shared/lib/server-inserted-html.shared-runtime'\n\n/**\n *\n * This hook allows you to programmatically change routes inside [Client Component](https://nextjs.org/docs/app/building-your-application/rendering/client-components).\n *\n * @example\n * ```ts\n * \"use client\"\n * import { useRouter } from 'next/navigation'\n *\n * export default function Page() {\n * const router = useRouter()\n * // ...\n * router.push('/dashboard') // Navigate to /dashboard\n * }\n * ```\n *\n * Read more: [Next.js Docs: `useRouter`](https://nextjs.org/docs/app/api-reference/functions/use-router)\n */\n// Client components API\nexport function useRouter(): AppRouterInstance {\n const router = useContext(AppRouterContext)\n if (router === null) {\n throw new Error('invariant expected app router to be mounted')\n }\n\n return router\n}\n\n/**\n * A [Client Component](https://nextjs.org/docs/app/building-your-application/rendering/client-components) hook\n * that lets you read a route's dynamic params filled in by the current URL.\n *\n * @example\n * ```ts\n * \"use client\"\n * import { useParams } from 'next/navigation'\n *\n * export default function Page() {\n * // on /dashboard/[team] where pathname is /dashboard/nextjs\n * const { team } = useParams() // team === \"nextjs\"\n * }\n * ```\n *\n * Read more: [Next.js Docs: `useParams`](https://nextjs.org/docs/app/api-reference/functions/use-params)\n */\n// Client components API\nexport function useParams(): T {\n useDynamicRouteParams?.('useParams()')\n\n const params = useContext(PathParamsContext) as T\n\n // Instrument with Suspense DevTools (dev-only)\n if (process.env.NODE_ENV !== 'production' && 'use' in React) {\n const navigationPromises = use(NavigationPromisesContext)\n if (navigationPromises) {\n return use(navigationPromises.params) as T\n }\n }\n\n return params\n}\n\n/**\n * A [Client Component](https://nextjs.org/docs/app/building-your-application/rendering/client-components) hook\n * that lets you read the active route segments **below** the Layout it is called from.\n *\n * @example\n * ```ts\n * 'use client'\n *\n * import { useSelectedLayoutSegments } from 'next/navigation'\n *\n * export default function ExampleClientComponent() {\n * const segments = useSelectedLayoutSegments()\n *\n * return (\n *
    \n * {segments.map((segment, index) => (\n *
  • {segment}
  • \n * ))}\n *
\n * )\n * }\n * ```\n *\n * Read more: [Next.js Docs: `useSelectedLayoutSegments`](https://nextjs.org/docs/app/api-reference/functions/use-selected-layout-segments)\n */\n// Client components API\nexport function useSelectedLayoutSegments(\n parallelRouteKey: string = 'children'\n): string[] {\n useDynamicRouteParams?.('useSelectedLayoutSegments()')\n\n const context = useContext(LayoutRouterContext)\n // @ts-expect-error This only happens in `pages`. Type is overwritten in navigation.d.ts\n if (!context) return null\n\n // Instrument with Suspense DevTools (dev-only)\n if (process.env.NODE_ENV !== 'production' && 'use' in React) {\n const navigationPromises = use(NavigationPromisesContext)\n if (navigationPromises) {\n const promise =\n navigationPromises.selectedLayoutSegmentsPromises?.get(parallelRouteKey)\n if (promise) {\n // We should always have a promise here, but if we don't, it's not worth erroring over.\n // We just won't be able to instrument it, but can still provide the value.\n return use(promise)\n }\n }\n }\n\n return getSelectedLayoutSegmentPath(context.parentTree, parallelRouteKey)\n}\n\n/**\n * A [Client Component](https://nextjs.org/docs/app/building-your-application/rendering/client-components) hook\n * that lets you read the active route segment **one level below** the Layout it is called from.\n *\n * @example\n * ```ts\n * 'use client'\n * import { useSelectedLayoutSegment } from 'next/navigation'\n *\n * export default function ExampleClientComponent() {\n * const segment = useSelectedLayoutSegment()\n *\n * return

Active segment: {segment}

\n * }\n * ```\n *\n * Read more: [Next.js Docs: `useSelectedLayoutSegment`](https://nextjs.org/docs/app/api-reference/functions/use-selected-layout-segment)\n */\n// Client components API\nexport function useSelectedLayoutSegment(\n parallelRouteKey: string = 'children'\n): string | null {\n useDynamicRouteParams?.('useSelectedLayoutSegment()')\n const navigationPromises = useContext(NavigationPromisesContext)\n const selectedLayoutSegments = useSelectedLayoutSegments(parallelRouteKey)\n\n // Instrument with Suspense DevTools (dev-only)\n if (\n process.env.NODE_ENV !== 'production' &&\n navigationPromises &&\n 'use' in React\n ) {\n const promise =\n navigationPromises.selectedLayoutSegmentPromises?.get(parallelRouteKey)\n if (promise) {\n // We should always have a promise here, but if we don't, it's not worth erroring over.\n // We just won't be able to instrument it, but can still provide the value.\n return use(promise)\n }\n }\n\n return computeSelectedLayoutSegment(selectedLayoutSegments, parallelRouteKey)\n}\n\nexport { unstable_isUnrecognizedActionError } from './unrecognized-action-error'\n\n// Shared components APIs\nexport {\n // We need the same class that was used to instantiate the context value\n // Otherwise instanceof checks will fail in usercode\n ReadonlyURLSearchParams,\n}\nexport {\n notFound,\n forbidden,\n unauthorized,\n redirect,\n permanentRedirect,\n RedirectType,\n unstable_rethrow,\n} from './navigation.react-server'\n"],"names":["ReadonlyURLSearchParams","RedirectType","ServerInsertedHTMLContext","forbidden","notFound","permanentRedirect","redirect","unauthorized","unstable_isUnrecognizedActionError","unstable_rethrow","useParams","usePathname","useRouter","useSearchParams","useSelectedLayoutSegment","useSelectedLayoutSegments","useServerInsertedHTML","useDynamicRouteParams","window","require","undefined","useDynamicSearchParams","searchParams","useContext","SearchParamsContext","readonlySearchParams","useMemo","process","env","NODE_ENV","React","navigationPromises","use","NavigationPromisesContext","pathname","PathnameContext","router","AppRouterContext","Error","params","PathParamsContext","parallelRouteKey","context","LayoutRouterContext","promise","selectedLayoutSegmentsPromises","get","getSelectedLayoutSegmentPath","parentTree","selectedLayoutSegments","selectedLayoutSegmentPromises","computeSelectedLayoutSegment"],"mappings":"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","ignoreList":[0]}}, - {"offset": {"line": 10100, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/redirect-boundary.tsx"],"sourcesContent":["'use client'\nimport React, { useEffect } from 'react'\nimport type { AppRouterInstance } from '../../shared/lib/app-router-context.shared-runtime'\nimport { useRouter } from './navigation'\nimport { getRedirectTypeFromError, getURLFromRedirectError } from './redirect'\nimport { RedirectType, isRedirectError } from './redirect-error'\n\ninterface RedirectBoundaryProps {\n router: AppRouterInstance\n children: React.ReactNode\n}\n\nfunction HandleRedirect({\n redirect,\n reset,\n redirectType,\n}: {\n redirect: string\n redirectType: RedirectType\n reset: () => void\n}) {\n const router = useRouter()\n\n useEffect(() => {\n React.startTransition(() => {\n if (redirectType === RedirectType.push) {\n router.push(redirect, {})\n } else {\n router.replace(redirect, {})\n }\n reset()\n })\n }, [redirect, redirectType, reset, router])\n\n return null\n}\n\nexport class RedirectErrorBoundary extends React.Component<\n RedirectBoundaryProps,\n { redirect: string | null; redirectType: RedirectType | null }\n> {\n constructor(props: RedirectBoundaryProps) {\n super(props)\n this.state = { redirect: null, redirectType: null }\n }\n\n static getDerivedStateFromError(error: any) {\n if (isRedirectError(error)) {\n const url = getURLFromRedirectError(error)\n const redirectType = getRedirectTypeFromError(error)\n if ('handled' in error) {\n // The redirect was already handled. We'll still catch the redirect error\n // so that we can remount the subtree, but we don't actually need to trigger the\n // router.push.\n return { redirect: null, redirectType: null }\n }\n\n return { redirect: url, redirectType }\n }\n // Re-throw if error is not for redirect\n throw error\n }\n\n // Explicit type is needed to avoid the generated `.d.ts` having a wide return type that could be specific to the `@types/react` version.\n render(): React.ReactNode {\n const { redirect, redirectType } = this.state\n if (redirect !== null && redirectType !== null) {\n return (\n this.setState({ redirect: null })}\n />\n )\n }\n\n return this.props.children\n }\n}\n\nexport function RedirectBoundary({ children }: { children: React.ReactNode }) {\n const router = useRouter()\n return (\n {children}\n )\n}\n"],"names":["RedirectBoundary","RedirectErrorBoundary","HandleRedirect","redirect","reset","redirectType","router","useRouter","useEffect","React","startTransition","RedirectType","push","replace","Component","constructor","props","state","getDerivedStateFromError","error","isRedirectError","url","getURLFromRedirectError","getRedirectTypeFromError","render","setState","children"],"mappings":";;;;;;;;;;;;;;IAgFgBA,gBAAgB,EAAA;eAAhBA;;IA3CHC,qBAAqB,EAAA;eAArBA;;;;;iEApCoB;4BAEP;0BACwC;+BACpB;AAO9C,SAASC,eAAe,EACtBC,QAAQ,EACRC,KAAK,EACLC,YAAY,EAKb;IACC,MAAMC,SAASC,CAAAA,GAAAA,YAAAA,SAAS;IAExBC,CAAAA,GAAAA,OAAAA,SAAS,EAAC;QACRC,OAAAA,OAAK,CAACC,eAAe,CAAC;YACpB,IAAIL,iBAAiBM,eAAAA,YAAY,CAACC,IAAI,EAAE;gBACtCN,OAAOM,IAAI,CAACT,UAAU,CAAC;YACzB,OAAO;gBACLG,OAAOO,OAAO,CAACV,UAAU,CAAC;YAC5B;YACAC;QACF;IACF,GAAG;QAACD;QAAUE;QAAcD;QAAOE;KAAO;IAE1C,OAAO;AACT;AAEO,MAAML,8BAA8BQ,OAAAA,OAAK,CAACK,SAAS;IAIxDC,YAAYC,KAA4B,CAAE;QACxC,KAAK,CAACA;QACN,IAAI,CAACC,KAAK,GAAG;YAAEd,UAAU;YAAME,cAAc;QAAK;IACpD;IAEA,OAAOa,yBAAyBC,KAAU,EAAE;QAC1C,IAAIC,CAAAA,GAAAA,eAAAA,eAAe,EAACD,QAAQ;YAC1B,MAAME,MAAMC,CAAAA,GAAAA,UAAAA,uBAAuB,EAACH;YACpC,MAAMd,eAAekB,CAAAA,GAAAA,UAAAA,wBAAwB,EAACJ;YAC9C,IAAI,aAAaA,OAAO;gBACtB,yEAAyE;gBACzE,gFAAgF;gBAChF,eAAe;gBACf,OAAO;oBAAEhB,UAAU;oBAAME,cAAc;gBAAK;YAC9C;YAEA,OAAO;gBAAEF,UAAUkB;gBAAKhB;YAAa;QACvC;QACA,wCAAwC;QACxC,MAAMc;IACR;IAEA,yIAAyI;IACzIK,SAA0B;QACxB,MAAM,EAAErB,QAAQ,EAAEE,YAAY,EAAE,GAAG,IAAI,CAACY,KAAK;QAC7C,IAAId,aAAa,QAAQE,iBAAiB,MAAM;YAC9C,OAAA,WAAA,GACE,CAAA,GAAA,YAAA,GAAA,EAACH,gBAAAA;gBACCC,UAAUA;gBACVE,cAAcA;gBACdD,OAAO,IAAM,IAAI,CAACqB,QAAQ,CAAC;wBAAEtB,UAAU;oBAAK;;QAGlD;QAEA,OAAO,IAAI,CAACa,KAAK,CAACU,QAAQ;IAC5B;AACF;AAEO,SAAS1B,iBAAiB,EAAE0B,QAAQ,EAAiC;IAC1E,MAAMpB,SAASC,CAAAA,GAAAA,YAAAA,SAAS;IACxB,OAAA,WAAA,GACE,CAAA,GAAA,YAAA,GAAA,EAACN,uBAAAA;QAAsBK,QAAQA;kBAASoB;;AAE5C","ignoreList":[0]}}, - {"offset": {"line": 10208, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/router-reducer/reducers/find-head-in-cache.ts"],"sourcesContent":["import type {\n FlightRouterState,\n CacheNode,\n} from '../../../../shared/lib/app-router-types'\nimport { DEFAULT_SEGMENT_KEY } from '../../../../shared/lib/segment'\nimport { createRouterCacheKey } from '../create-router-cache-key'\n\nexport function findHeadInCache(\n cache: CacheNode,\n parallelRoutes: FlightRouterState[1]\n): [CacheNode, string, string] | null {\n return findHeadInCacheImpl(cache, parallelRoutes, '', '')\n}\n\nfunction findHeadInCacheImpl(\n cache: CacheNode,\n parallelRoutes: FlightRouterState[1],\n keyPrefix: string,\n keyPrefixWithoutSearchParams: string\n): [CacheNode, string, string] | null {\n const isLastItem = Object.keys(parallelRoutes).length === 0\n if (isLastItem) {\n // Returns the entire Cache Node of the segment whose head we will render.\n return [cache, keyPrefix, keyPrefixWithoutSearchParams]\n }\n\n // First try the 'children' parallel route if it exists\n // when starting from the \"root\", this corresponds with the main page component\n const parallelRoutesKeys = Object.keys(parallelRoutes).filter(\n (key) => key !== 'children'\n )\n\n // if we are at the root, we need to check the children slot first\n if ('children' in parallelRoutes) {\n parallelRoutesKeys.unshift('children')\n }\n\n for (const key of parallelRoutesKeys) {\n const [segment, childParallelRoutes] = parallelRoutes[key]\n // If the parallel is not matched and using the default segment,\n // skip searching the head from it.\n if (segment === DEFAULT_SEGMENT_KEY) {\n continue\n }\n const childSegmentMap = cache.parallelRoutes.get(key)\n if (!childSegmentMap) {\n continue\n }\n\n const cacheKey = createRouterCacheKey(segment)\n const cacheKeyWithoutSearchParams = createRouterCacheKey(segment, true)\n\n const cacheNode = childSegmentMap.get(cacheKey)\n if (!cacheNode) {\n continue\n }\n\n const item = findHeadInCacheImpl(\n cacheNode,\n childParallelRoutes,\n keyPrefix + '/' + cacheKey,\n keyPrefix + '/' + cacheKeyWithoutSearchParams\n )\n\n if (item) {\n return item\n }\n }\n\n return null\n}\n"],"names":["findHeadInCache","cache","parallelRoutes","findHeadInCacheImpl","keyPrefix","keyPrefixWithoutSearchParams","isLastItem","Object","keys","length","parallelRoutesKeys","filter","key","unshift","segment","childParallelRoutes","DEFAULT_SEGMENT_KEY","childSegmentMap","get","cacheKey","createRouterCacheKey","cacheKeyWithoutSearchParams","cacheNode","item"],"mappings":";;;+BAOgBA,mBAAAA;;;eAAAA;;;yBAHoB;sCACC;AAE9B,SAASA,gBACdC,KAAgB,EAChBC,cAAoC;IAEpC,OAAOC,oBAAoBF,OAAOC,gBAAgB,IAAI;AACxD;AAEA,SAASC,oBACPF,KAAgB,EAChBC,cAAoC,EACpCE,SAAiB,EACjBC,4BAAoC;IAEpC,MAAMC,aAAaC,OAAOC,IAAI,CAACN,gBAAgBO,MAAM,KAAK;IAC1D,IAAIH,YAAY;QACd,0EAA0E;QAC1E,OAAO;YAACL;YAAOG;YAAWC;SAA6B;IACzD;IAEA,uDAAuD;IACvD,+EAA+E;IAC/E,MAAMK,qBAAqBH,OAAOC,IAAI,CAACN,gBAAgBS,MAAM,CAC3D,CAACC,MAAQA,QAAQ;IAGnB,kEAAkE;IAClE,IAAI,cAAcV,gBAAgB;QAChCQ,mBAAmBG,OAAO,CAAC;IAC7B;IAEA,KAAK,MAAMD,OAAOF,mBAAoB;QACpC,MAAM,CAACI,SAASC,oBAAoB,GAAGb,cAAc,CAACU,IAAI;QAC1D,gEAAgE;QAChE,mCAAmC;QACnC,IAAIE,YAAYE,SAAAA,mBAAmB,EAAE;YACnC;QACF;QACA,MAAMC,kBAAkBhB,MAAMC,cAAc,CAACgB,GAAG,CAACN;QACjD,IAAI,CAACK,iBAAiB;YACpB;QACF;QAEA,MAAME,WAAWC,CAAAA,GAAAA,sBAAAA,oBAAoB,EAACN;QACtC,MAAMO,8BAA8BD,CAAAA,GAAAA,sBAAAA,oBAAoB,EAACN,SAAS;QAElE,MAAMQ,YAAYL,gBAAgBC,GAAG,CAACC;QACtC,IAAI,CAACG,WAAW;YACd;QACF;QAEA,MAAMC,OAAOpB,oBACXmB,WACAP,qBACAX,YAAY,MAAMe,UAClBf,YAAY,MAAMiB;QAGpB,IAAIE,MAAM;YACR,OAAOA;QACT;IACF;IAEA,OAAO;AACT","ignoreList":[0]}}, - {"offset": {"line": 10274, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/unresolved-thenable.ts"],"sourcesContent":["/**\n * Create a \"Thenable\" that does not resolve. This is used to suspend indefinitely when data is not available yet.\n */\nexport const unresolvedThenable = {\n then: () => {},\n} as PromiseLike\n"],"names":["unresolvedThenable","then"],"mappings":"AAAA;;CAEC;;;+BACYA,sBAAAA;;;eAAAA;;;AAAN,MAAMA,qBAAqB;IAChCC,MAAM,KAAO;AACf","ignoreList":[0]}}, - {"offset": {"line": 10299, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/errors/graceful-degrade-boundary.tsx"],"sourcesContent":["'use client'\n\nimport { Component, createRef, type ReactNode } from 'react'\n\ninterface ErrorBoundaryProps {\n children: ReactNode\n}\n\ninterface ErrorBoundaryState {\n hasError: boolean\n}\n\nfunction getDomNodeAttributes(node: HTMLElement): Record {\n const result: Record = {}\n for (let i = 0; i < node.attributes.length; i++) {\n const attr = node.attributes[i]\n result[attr.name] = attr.value\n }\n return result\n}\n\nexport class GracefulDegradeBoundary extends Component<\n ErrorBoundaryProps,\n ErrorBoundaryState\n> {\n private rootHtml: string\n private htmlAttributes: Record\n private htmlRef: React.RefObject\n\n constructor(props: ErrorBoundaryProps) {\n super(props)\n this.state = { hasError: false }\n this.rootHtml = ''\n this.htmlAttributes = {}\n this.htmlRef = createRef()\n }\n\n static getDerivedStateFromError(_: unknown): ErrorBoundaryState {\n return { hasError: true }\n }\n\n componentDidMount() {\n const htmlNode = this.htmlRef.current\n if (this.state.hasError && htmlNode) {\n // Reapply the cached HTML attributes to the root element\n Object.entries(this.htmlAttributes).forEach(([key, value]) => {\n htmlNode.setAttribute(key, value)\n })\n }\n }\n\n render() {\n const { hasError } = this.state\n // Cache the root HTML content on the first render\n if (typeof window !== 'undefined' && !this.rootHtml) {\n this.rootHtml = document.documentElement.innerHTML\n this.htmlAttributes = getDomNodeAttributes(document.documentElement)\n }\n\n if (hasError) {\n // Render the current HTML content without hydration\n return (\n \n )\n }\n\n return this.props.children\n }\n}\n\nexport default GracefulDegradeBoundary\n"],"names":["GracefulDegradeBoundary","getDomNodeAttributes","node","result","i","attributes","length","attr","name","value","Component","constructor","props","state","hasError","rootHtml","htmlAttributes","htmlRef","createRef","getDerivedStateFromError","_","componentDidMount","htmlNode","current","Object","entries","forEach","key","setAttribute","render","window","document","documentElement","innerHTML","html","ref","suppressHydrationWarning","dangerouslySetInnerHTML","__html","children"],"mappings":";;;;;;;;;;;;;;IAqBaA,uBAAuB,EAAA;eAAvBA;;IAuDb,OAAsC,EAAA;eAAtC;;;;uBA1EqD;AAUrD,SAASC,qBAAqBC,IAAiB;IAC7C,MAAMC,SAAiC,CAAC;IACxC,IAAK,IAAIC,IAAI,GAAGA,IAAIF,KAAKG,UAAU,CAACC,MAAM,EAAEF,IAAK;QAC/C,MAAMG,OAAOL,KAAKG,UAAU,CAACD,EAAE;QAC/BD,MAAM,CAACI,KAAKC,IAAI,CAAC,GAAGD,KAAKE,KAAK;IAChC;IACA,OAAON;AACT;AAEO,MAAMH,gCAAgCU,OAAAA,SAAS;IAQpDC,YAAYC,KAAyB,CAAE;QACrC,KAAK,CAACA;QACN,IAAI,CAACC,KAAK,GAAG;YAAEC,UAAU;QAAM;QAC/B,IAAI,CAACC,QAAQ,GAAG;QAChB,IAAI,CAACC,cAAc,GAAG,CAAC;QACvB,IAAI,CAACC,OAAO,GAAA,WAAA,GAAGC,CAAAA,GAAAA,OAAAA,SAAS;IAC1B;IAEA,OAAOC,yBAAyBC,CAAU,EAAsB;QAC9D,OAAO;YAAEN,UAAU;QAAK;IAC1B;IAEAO,oBAAoB;QAClB,MAAMC,WAAW,IAAI,CAACL,OAAO,CAACM,OAAO;QACrC,IAAI,IAAI,CAACV,KAAK,CAACC,QAAQ,IAAIQ,UAAU;YACnC,yDAAyD;YACzDE,OAAOC,OAAO,CAAC,IAAI,CAACT,cAAc,EAAEU,OAAO,CAAC,CAAC,CAACC,KAAKlB,MAAM;gBACvDa,SAASM,YAAY,CAACD,KAAKlB;YAC7B;QACF;IACF;IAEAoB,SAAS;QACP,MAAM,EAAEf,QAAQ,EAAE,GAAG,IAAI,CAACD,KAAK;QAC/B,kDAAkD;QAClD,IAAI,OAAOiB,WAAW,eAAe,CAAC,IAAI,CAACf,QAAQ,EAAE;YACnD,IAAI,CAACA,QAAQ,GAAGgB,SAASC,eAAe,CAACC,SAAS;YAClD,IAAI,CAACjB,cAAc,GAAGf,qBAAqB8B,SAASC,eAAe;QACrE;QAEA,IAAIlB,UAAU;YACZ,oDAAoD;YACpD,OAAA,WAAA,GACE,CAAA,GAAA,YAAA,GAAA,EAACoB,QAAAA;gBACCC,KAAK,IAAI,CAAClB,OAAO;gBACjBmB,wBAAwB,EAAA;gBACxBC,yBAAyB;oBACvBC,QAAQ,IAAI,CAACvB,QAAQ;gBACvB;;QAGN;QAEA,OAAO,IAAI,CAACH,KAAK,CAAC2B,QAAQ;IAC5B;AACF;MAEA,WAAevC","ignoreList":[0]}}, - {"offset": {"line": 10386, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/errors/root-error-boundary.tsx"],"sourcesContent":["'use client'\n\nimport React, { type JSX } from 'react'\nimport GracefulDegradeBoundary from './graceful-degrade-boundary'\nimport { ErrorBoundary, type ErrorBoundaryProps } from '../error-boundary'\nimport { isBot } from '../../../shared/lib/router/utils/is-bot'\n\nconst isBotUserAgent =\n typeof window !== 'undefined' && isBot(window.navigator.userAgent)\n\nexport default function RootErrorBoundary({\n children,\n errorComponent,\n errorStyles,\n errorScripts,\n}: ErrorBoundaryProps & { children: React.ReactNode }): JSX.Element {\n if (isBotUserAgent) {\n // Preserve existing DOM/HTML for bots to avoid replacing content with an error UI\n // and to keep the original SSR output intact.\n return {children}\n }\n\n return (\n \n {children}\n \n )\n}\n"],"names":["RootErrorBoundary","isBotUserAgent","window","isBot","navigator","userAgent","children","errorComponent","errorStyles","errorScripts","GracefulDegradeBoundary","ErrorBoundary"],"mappings":";;;+BAUA,WAAA;;;eAAwBA;;;;;gEARQ;kFACI;+BACmB;uBACjC;AAEtB,MAAMC,iBACJ,OAAOC,WAAW,eAAeC,CAAAA,GAAAA,OAAAA,KAAK,EAACD,OAAOE,SAAS,CAACC,SAAS;AAEpD,SAASL,kBAAkB,EACxCM,QAAQ,EACRC,cAAc,EACdC,WAAW,EACXC,YAAY,EACuC;IACnD,IAAIR,gBAAgB;QAClB,kFAAkF;QAClF,8CAA8C;QAC9C,OAAA,WAAA,GAAO,CAAA,GAAA,YAAA,GAAA,EAACS,yBAAAA,OAAuB,EAAA;sBAAEJ;;IACnC;IAEA,OAAA,WAAA,GACE,CAAA,GAAA,YAAA,GAAA,EAACK,eAAAA,aAAa,EAAA;QACZJ,gBAAgBA;QAChBC,aAAaA;QACbC,cAAcA;kBAEbH;;AAGP","ignoreList":[0]}}, - {"offset": {"line": 10428, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/navigation-devtools.ts"],"sourcesContent":["import type { FlightRouterState } from '../../shared/lib/app-router-types'\nimport type { Params } from '../../server/request/params'\nimport {\n createDevToolsInstrumentedPromise,\n ReadonlyURLSearchParams,\n type InstrumentedPromise,\n type NavigationPromises,\n} from '../../shared/lib/hooks-client-context.shared-runtime'\nimport {\n computeSelectedLayoutSegment,\n getSelectedLayoutSegmentPath,\n} from '../../shared/lib/segment'\n\n/**\n * Promises are cached by tree to ensure stability across suspense retries.\n */\ntype LayoutSegmentPromisesCache = {\n selectedLayoutSegmentPromises: Map>\n selectedLayoutSegmentsPromises: Map>\n}\n\nconst layoutSegmentPromisesCache = new WeakMap<\n FlightRouterState,\n LayoutSegmentPromisesCache\n>()\n\n/**\n * Creates instrumented promises for layout segment hooks at a given tree level.\n * This is dev-only code for React Suspense DevTools instrumentation.\n */\nfunction createLayoutSegmentPromises(\n tree: FlightRouterState\n): LayoutSegmentPromisesCache | null {\n if (process.env.NODE_ENV === 'production') {\n return null\n }\n\n // Check if we already have cached promises for this tree\n const cached = layoutSegmentPromisesCache.get(tree)\n if (cached) {\n return cached\n }\n\n // Create new promises and cache them\n const segmentPromises = new Map>()\n const segmentsPromises = new Map>()\n\n const parallelRoutes = tree[1]\n for (const parallelRouteKey of Object.keys(parallelRoutes)) {\n const segments = getSelectedLayoutSegmentPath(tree, parallelRouteKey)\n\n // Use the shared logic to compute the segment value\n const segment = computeSelectedLayoutSegment(segments, parallelRouteKey)\n\n segmentPromises.set(\n parallelRouteKey,\n createDevToolsInstrumentedPromise('useSelectedLayoutSegment', segment)\n )\n segmentsPromises.set(\n parallelRouteKey,\n createDevToolsInstrumentedPromise('useSelectedLayoutSegments', segments)\n )\n }\n\n const result: LayoutSegmentPromisesCache = {\n selectedLayoutSegmentPromises: segmentPromises,\n selectedLayoutSegmentsPromises: segmentsPromises,\n }\n\n // Cache the result for future renders\n layoutSegmentPromisesCache.set(tree, result)\n\n return result\n}\n\nconst rootNavigationPromisesCache = new WeakMap<\n FlightRouterState,\n Map\n>()\n\n/**\n * Creates instrumented navigation promises for the root app-router.\n */\nexport function createRootNavigationPromises(\n tree: FlightRouterState,\n pathname: string,\n searchParams: URLSearchParams,\n pathParams: Params\n): NavigationPromises | null {\n if (process.env.NODE_ENV === 'production') {\n return null\n }\n\n // Create stable cache keys from the values\n const searchParamsString = searchParams.toString()\n const pathParamsString = JSON.stringify(pathParams)\n const cacheKey = `${pathname}:${searchParamsString}:${pathParamsString}`\n\n // Get or create the cache for this tree\n let treeCache = rootNavigationPromisesCache.get(tree)\n if (!treeCache) {\n treeCache = new Map()\n rootNavigationPromisesCache.set(tree, treeCache)\n }\n\n // Check if we have cached promises for this combination\n const cached = treeCache.get(cacheKey)\n if (cached) {\n return cached\n }\n\n const readonlySearchParams = new ReadonlyURLSearchParams(searchParams)\n\n const layoutSegmentPromises = createLayoutSegmentPromises(tree)\n\n const promises: NavigationPromises = {\n pathname: createDevToolsInstrumentedPromise('usePathname', pathname),\n searchParams: createDevToolsInstrumentedPromise(\n 'useSearchParams',\n readonlySearchParams\n ),\n params: createDevToolsInstrumentedPromise('useParams', pathParams),\n ...layoutSegmentPromises,\n }\n\n treeCache.set(cacheKey, promises)\n\n return promises\n}\n\nconst nestedLayoutPromisesCache = new WeakMap<\n FlightRouterState,\n Map\n>()\n\n/**\n * Creates merged navigation promises for nested layouts.\n * Merges parent promises with layout-specific segment promises.\n */\nexport function createNestedLayoutNavigationPromises(\n tree: FlightRouterState,\n parentNavPromises: NavigationPromises | null\n): NavigationPromises | null {\n if (process.env.NODE_ENV === 'production') {\n return null\n }\n\n const parallelRoutes = tree[1]\n const parallelRouteKeys = Object.keys(parallelRoutes)\n\n // Only create promises if there are parallel routes at this level\n if (parallelRouteKeys.length === 0) {\n return null\n }\n\n // Get or create the cache for this tree\n let treeCache = nestedLayoutPromisesCache.get(tree)\n if (!treeCache) {\n treeCache = new Map()\n nestedLayoutPromisesCache.set(tree, treeCache)\n }\n\n // Check if we have cached promises for this parent combination\n const cached = treeCache.get(parentNavPromises)\n if (cached) {\n return cached\n }\n\n // Create merged promises\n const layoutSegmentPromises = createLayoutSegmentPromises(tree)\n const promises: NavigationPromises = {\n ...parentNavPromises!,\n ...layoutSegmentPromises,\n }\n\n treeCache.set(parentNavPromises, promises)\n\n return promises\n}\n"],"names":["createNestedLayoutNavigationPromises","createRootNavigationPromises","layoutSegmentPromisesCache","WeakMap","createLayoutSegmentPromises","tree","process","env","NODE_ENV","cached","get","segmentPromises","Map","segmentsPromises","parallelRoutes","parallelRouteKey","Object","keys","segments","getSelectedLayoutSegmentPath","segment","computeSelectedLayoutSegment","set","createDevToolsInstrumentedPromise","result","selectedLayoutSegmentPromises","selectedLayoutSegmentsPromises","rootNavigationPromisesCache","pathname","searchParams","pathParams","searchParamsString","toString","pathParamsString","JSON","stringify","cacheKey","treeCache","readonlySearchParams","ReadonlyURLSearchParams","layoutSegmentPromises","promises","params","nestedLayoutPromisesCache","parentNavPromises","parallelRouteKeys","length"],"mappings":"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","ignoreList":[0]}}, - {"offset": {"line": 10555, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/http-access-fallback/error-boundary.tsx"],"sourcesContent":["'use client'\n\n/**\n * HTTPAccessFallbackBoundary is a boundary that catches errors and renders a\n * fallback component for HTTP errors.\n *\n * It receives the status code, and determine if it should render fallbacks for few HTTP 4xx errors.\n *\n * e.g. 404\n * 404 represents not found, and the fallback component pair contains the component and its styles.\n *\n */\n\nimport React, { useContext } from 'react'\nimport { useUntrackedPathname } from '../navigation-untracked'\nimport {\n HTTPAccessErrorStatus,\n getAccessFallbackHTTPStatus,\n getAccessFallbackErrorTypeByStatus,\n isHTTPAccessFallbackError,\n} from './http-access-fallback'\nimport { warnOnce } from '../../../shared/lib/utils/warn-once'\nimport { MissingSlotContext } from '../../../shared/lib/app-router-context.shared-runtime'\n\ninterface HTTPAccessFallbackBoundaryProps {\n notFound?: React.ReactNode\n forbidden?: React.ReactNode\n unauthorized?: React.ReactNode\n // TODO: Make this required once `React.createElement` understands that positional args go into children\n children?: React.ReactNode\n missingSlots?: Set\n}\n\ninterface HTTPAccessFallbackErrorBoundaryProps\n extends HTTPAccessFallbackBoundaryProps {\n pathname: string | null\n missingSlots?: Set\n}\n\ninterface HTTPAccessBoundaryState {\n triggeredStatus: number | undefined\n previousPathname: string | null\n}\n\nclass HTTPAccessFallbackErrorBoundary extends React.Component<\n HTTPAccessFallbackErrorBoundaryProps,\n HTTPAccessBoundaryState\n> {\n constructor(props: HTTPAccessFallbackErrorBoundaryProps) {\n super(props)\n this.state = {\n triggeredStatus: undefined,\n previousPathname: props.pathname,\n }\n }\n\n componentDidCatch(): void {\n if (\n process.env.NODE_ENV === 'development' &&\n this.props.missingSlots &&\n this.props.missingSlots.size > 0 &&\n // A missing children slot is the typical not-found case, so no need to warn\n !this.props.missingSlots.has('children')\n ) {\n let warningMessage =\n 'No default component was found for a parallel route rendered on this page. Falling back to nearest NotFound boundary.\\n' +\n 'Learn more: https://nextjs.org/docs/app/building-your-application/routing/parallel-routes#defaultjs\\n\\n'\n\n const formattedSlots = Array.from(this.props.missingSlots)\n .sort((a, b) => a.localeCompare(b))\n .map((slot) => `@${slot}`)\n .join(', ')\n\n warningMessage += 'Missing slots: ' + formattedSlots\n\n warnOnce(warningMessage)\n }\n }\n\n static getDerivedStateFromError(error: any) {\n if (isHTTPAccessFallbackError(error)) {\n const httpStatus = getAccessFallbackHTTPStatus(error)\n return {\n triggeredStatus: httpStatus,\n }\n }\n // Re-throw if error is not for 404\n throw error\n }\n\n static getDerivedStateFromProps(\n props: HTTPAccessFallbackErrorBoundaryProps,\n state: HTTPAccessBoundaryState\n ): HTTPAccessBoundaryState | null {\n /**\n * Handles reset of the error boundary when a navigation happens.\n * Ensures the error boundary does not stay enabled when navigating to a new page.\n * Approach of setState in render is safe as it checks the previous pathname and then overrides\n * it as outlined in https://react.dev/reference/react/useState#storing-information-from-previous-renders\n */\n if (props.pathname !== state.previousPathname && state.triggeredStatus) {\n return {\n triggeredStatus: undefined,\n previousPathname: props.pathname,\n }\n }\n return {\n triggeredStatus: state.triggeredStatus,\n previousPathname: props.pathname,\n }\n }\n\n render() {\n const { notFound, forbidden, unauthorized, children } = this.props\n const { triggeredStatus } = this.state\n const errorComponents = {\n [HTTPAccessErrorStatus.NOT_FOUND]: notFound,\n [HTTPAccessErrorStatus.FORBIDDEN]: forbidden,\n [HTTPAccessErrorStatus.UNAUTHORIZED]: unauthorized,\n }\n\n if (triggeredStatus) {\n const isNotFound =\n triggeredStatus === HTTPAccessErrorStatus.NOT_FOUND && notFound\n const isForbidden =\n triggeredStatus === HTTPAccessErrorStatus.FORBIDDEN && forbidden\n const isUnauthorized =\n triggeredStatus === HTTPAccessErrorStatus.UNAUTHORIZED && unauthorized\n\n // If there's no matched boundary in this layer, keep throwing the error by rendering the children\n if (!(isNotFound || isForbidden || isUnauthorized)) {\n return children\n }\n\n return (\n <>\n \n {process.env.NODE_ENV === 'development' && (\n \n )}\n {errorComponents[triggeredStatus]}\n \n )\n }\n\n return children\n }\n}\n\nexport function HTTPAccessFallbackBoundary({\n notFound,\n forbidden,\n unauthorized,\n children,\n}: HTTPAccessFallbackBoundaryProps) {\n // When we're rendering the missing params shell, this will return null. This\n // is because we won't be rendering any not found boundaries or error\n // boundaries for the missing params shell. When this runs on the client\n // (where these error can occur), we will get the correct pathname.\n const pathname = useUntrackedPathname()\n const missingSlots = useContext(MissingSlotContext)\n const hasErrorFallback = !!(notFound || forbidden || unauthorized)\n\n if (hasErrorFallback) {\n return (\n \n {children}\n \n )\n }\n\n return <>{children}\n}\n"],"names":["HTTPAccessFallbackBoundary","HTTPAccessFallbackErrorBoundary","React","Component","constructor","props","state","triggeredStatus","undefined","previousPathname","pathname","componentDidCatch","process","env","NODE_ENV","missingSlots","size","has","warningMessage","formattedSlots","Array","from","sort","a","b","localeCompare","map","slot","join","warnOnce","getDerivedStateFromError","error","isHTTPAccessFallbackError","httpStatus","getAccessFallbackHTTPStatus","getDerivedStateFromProps","render","notFound","forbidden","unauthorized","children","errorComponents","HTTPAccessErrorStatus","NOT_FOUND","FORBIDDEN","UNAUTHORIZED","isNotFound","isForbidden","isUnauthorized","meta","name","content","getAccessFallbackErrorTypeByStatus","useUntrackedPathname","useContext","MissingSlotContext","hasErrorFallback"],"mappings":"AA0DMY,QAAQC,GAAG,CAACC,QAAQ;AA1D1B;;;;;+BAwJgBd,8BAAAA;;;eAAAA;;;;;iEA3IkB;qCACG;oCAM9B;0BACkB;+CACU;AAsBnC,MAAMC,wCAAwCC,OAAAA,OAAK,CAACC,SAAS;IAI3DC,YAAYC,KAA2C,CAAE;QACvD,KAAK,CAACA;QACN,IAAI,CAACC,KAAK,GAAG;YACXC,iBAAiBC;YACjBC,kBAAkBJ,MAAMK,QAAQ;QAClC;IACF;IAEAC,oBAA0B;QACxB,wDAC2B,iBACzB,IAAI,CAACN,KAAK,CAACU,YAAY,IACvB,IAAI,CAACV,KAAK,CAACU,YAAY,CAACC,IAAI,GAAG,KAC/B,4EAA4E;QAC5E,CAAC,IAAI,CAACX,KAAK,CAACU,YAAY,CAACE,GAAG,CAAC,aAC7B;YACA,IAAIC,iBACF,4HACA;YAEF,MAAMC,iBAAiBC,MAAMC,IAAI,CAAC,IAAI,CAAChB,KAAK,CAACU,YAAY,EACtDO,IAAI,CAAC,CAACC,GAAGC,IAAMD,EAAEE,aAAa,CAACD,IAC/BE,GAAG,CAAC,CAACC,OAAS,CAAC,CAAC,EAAEA,MAAM,EACxBC,IAAI,CAAC;YAERV,kBAAkB,oBAAoBC;YAEtCU,CAAAA,GAAAA,UAAAA,QAAQ,EAACX;QACX;IACF;IAEA,OAAOY,yBAAyBC,KAAU,EAAE;QAC1C,IAAIC,CAAAA,GAAAA,oBAAAA,yBAAyB,EAACD,QAAQ;YACpC,MAAME,aAAaC,CAAAA,GAAAA,oBAAAA,2BAA2B,EAACH;YAC/C,OAAO;gBACLxB,iBAAiB0B;YACnB;QACF;QACA,mCAAmC;QACnC,MAAMF;IACR;IAEA,OAAOI,yBACL9B,KAA2C,EAC3CC,KAA8B,EACE;QAChC;;;;;KAKC,GACD,IAAID,MAAMK,QAAQ,KAAKJ,MAAMG,gBAAgB,IAAIH,MAAMC,eAAe,EAAE;YACtE,OAAO;gBACLA,iBAAiBC;gBACjBC,kBAAkBJ,MAAMK,QAAQ;YAClC;QACF;QACA,OAAO;YACLH,iBAAiBD,MAAMC,eAAe;YACtCE,kBAAkBJ,MAAMK,QAAQ;QAClC;IACF;IAEA0B,SAAS;QACP,MAAM,EAAEC,QAAQ,EAAEC,SAAS,EAAEC,YAAY,EAAEC,QAAQ,EAAE,GAAG,IAAI,CAACnC,KAAK;QAClE,MAAM,EAAEE,eAAe,EAAE,GAAG,IAAI,CAACD,KAAK;QACtC,MAAMmC,kBAAkB;YACtB,CAACC,oBAAAA,qBAAqB,CAACC,SAAS,CAAC,EAAEN;YACnC,CAACK,oBAAAA,qBAAqB,CAACE,SAAS,CAAC,EAAEN;YACnC,CAACI,oBAAAA,qBAAqB,CAACG,YAAY,CAAC,EAAEN;QACxC;QAEA,IAAIhC,iBAAiB;YACnB,MAAMuC,aACJvC,oBAAoBmC,oBAAAA,qBAAqB,CAACC,SAAS,IAAIN;YACzD,MAAMU,cACJxC,oBAAoBmC,oBAAAA,qBAAqB,CAACE,SAAS,IAAIN;YACzD,MAAMU,iBACJzC,oBAAoBmC,oBAAAA,qBAAqB,CAACG,YAAY,IAAIN;YAE5D,kGAAkG;YAClG,IAAI,CAAEO,CAAAA,cAAcC,eAAeC,cAAa,GAAI;gBAClD,OAAOR;YACT;YAEA,OAAA,WAAA,GACE,CAAA,GAAA,YAAA,IAAA,EAAA,YAAA,QAAA,EAAA;;kCACE,CAAA,GAAA,YAAA,GAAA,EAACS,QAAAA;wBAAKC,MAAK;wBAASC,SAAQ;;oBAC3BvC,QAAQC,GAAG,CAACC,QAAQ,gCAAK,iBAAA,WAAA,GACxB,CAAA,GAAA,YAAA,GAAA,EAACmC,QAAAA;wBACCC,MAAK;wBACLC,SAASC,CAAAA,GAAAA,oBAAAA,kCAAkC,EAAC7C;;oBAG/CkC,eAAe,CAAClC,gBAAgB;;;QAGvC;QAEA,OAAOiC;IACT;AACF;AAEO,SAASxC,2BAA2B,EACzCqC,QAAQ,EACRC,SAAS,EACTC,YAAY,EACZC,QAAQ,EACwB;IAChC,6EAA6E;IAC7E,qEAAqE;IACrE,wEAAwE;IACxE,mEAAmE;IACnE,MAAM9B,WAAW2C,CAAAA,GAAAA,qBAAAA,oBAAoB;IACrC,MAAMtC,eAAeuC,CAAAA,GAAAA,OAAAA,UAAU,EAACC,+BAAAA,kBAAkB;IAClD,MAAMC,mBAAmB,CAAC,CAAEnB,CAAAA,YAAYC,aAAaC,YAAW;IAEhE,IAAIiB,kBAAkB;QACpB,OAAA,WAAA,GACE,CAAA,GAAA,YAAA,GAAA,EAACvD,iCAAAA;YACCS,UAAUA;YACV2B,UAAUA;YACVC,WAAWA;YACXC,cAAcA;YACdxB,cAAcA;sBAEbyB;;IAGP;IAEA,OAAA,WAAA,GAAO,CAAA,GAAA,YAAA,GAAA,EAAA,YAAA,QAAA,EAAA;kBAAGA;;AACZ","ignoreList":[0]}}, - {"offset": {"line": 10684, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/dev-root-http-access-fallback-boundary.tsx"],"sourcesContent":["'use client'\n\nimport React from 'react'\nimport { HTTPAccessFallbackBoundary } from './http-access-fallback/error-boundary'\n\n// TODO: error on using forbidden and unauthorized in root layout\nexport function bailOnRootNotFound() {\n throw new Error('notFound() is not allowed to use in root layout')\n}\n\nfunction NotAllowedRootHTTPFallbackError() {\n bailOnRootNotFound()\n return null\n}\n\nexport function DevRootHTTPAccessFallbackBoundary({\n children,\n}: {\n children: React.ReactNode\n}) {\n return (\n }>\n {children}\n \n )\n}\n"],"names":["DevRootHTTPAccessFallbackBoundary","bailOnRootNotFound","Error","NotAllowedRootHTTPFallbackError","children","HTTPAccessFallbackBoundary","notFound"],"mappings":";;;;;;;;;;;;;;IAegBA,iCAAiC,EAAA;eAAjCA;;IATAC,kBAAkB,EAAA;eAAlBA;;;;;gEAJE;+BACyB;AAGpC,SAASA;IACd,MAAM,OAAA,cAA4D,CAA5D,IAAIC,MAAM,oDAAV,qBAAA;eAAA;oBAAA;sBAAA;IAA2D;AACnE;AAEA,SAASC;IACPF;IACA,OAAO;AACT;AAEO,SAASD,kCAAkC,EAChDI,QAAQ,EAGT;IACC,OAAA,WAAA,GACE,CAAA,GAAA,YAAA,GAAA,EAACC,eAAAA,0BAA0B,EAAA;QAACC,UAAAA,WAAAA,GAAU,CAAA,GAAA,YAAA,GAAA,EAACH,iCAAAA,CAAAA;kBACpCC;;AAGP","ignoreList":[0]}}, - {"offset": {"line": 10737, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/dev/hot-reloader/shared.ts"],"sourcesContent":["import type { HmrMessageSentToBrowser } from '../../../server/dev/hot-reloader-types'\n\nexport const REACT_REFRESH_FULL_RELOAD =\n '[Fast Refresh] performing full reload\\n\\n' +\n \"Fast Refresh will perform a full reload when you edit a file that's imported by modules outside of the React rendering tree.\\n\" +\n 'You might have a file which exports a React component but also exports a value that is imported by a non-React component file.\\n' +\n 'Consider migrating the non-React component export to a separate file and importing it into both files.\\n\\n' +\n 'It is also possible the parent component of the component you edited is a class component, which disables Fast Refresh.\\n' +\n 'Fast Refresh requires at least one parent function component in your React tree.'\n\nexport const REACT_REFRESH_FULL_RELOAD_FROM_ERROR =\n '[Fast Refresh] performing full reload because your application had an unrecoverable error'\n\nexport function reportInvalidHmrMessage(\n message: HmrMessageSentToBrowser | MessageEvent,\n err: unknown\n) {\n console.warn(\n '[HMR] Invalid message: ' +\n JSON.stringify(message) +\n '\\n' +\n ((err instanceof Error && err?.stack) || '')\n )\n}\n"],"names":["REACT_REFRESH_FULL_RELOAD","REACT_REFRESH_FULL_RELOAD_FROM_ERROR","reportInvalidHmrMessage","message","err","console","warn","JSON","stringify","Error","stack"],"mappings":";;;;;;;;;;;;;;;IAEaA,yBAAyB,EAAA;eAAzBA;;IAQAC,oCAAoC,EAAA;eAApCA;;IAGGC,uBAAuB,EAAA;eAAvBA;;;AAXT,MAAMF,4BACX,8CACA,mIACA,qIACA,+GACA,8HACA;AAEK,MAAMC,uCACX;AAEK,SAASC,wBACdC,OAAwD,EACxDC,GAAY;IAEZC,QAAQC,IAAI,CACV,4BACEC,KAAKC,SAAS,CAACL,WACf,OACC,CAACC,eAAeK,SAASL,KAAKM,SAAU,EAAC;AAEhD","ignoreList":[0]}}, - {"offset": {"line": 10778, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/dev/hot-reloader/get-socket-url.ts"],"sourcesContent":["import { normalizedAssetPrefix } from '../../../shared/lib/normalized-asset-prefix'\n\nfunction getSocketProtocol(assetPrefix: string): string {\n let protocol = window.location.protocol\n\n try {\n // assetPrefix is a url\n protocol = new URL(assetPrefix).protocol\n } catch {}\n\n return protocol === 'http:' ? 'ws:' : 'wss:'\n}\n\nexport function getSocketUrl(assetPrefix: string | undefined): string {\n const prefix = normalizedAssetPrefix(assetPrefix)\n const protocol = getSocketProtocol(assetPrefix || '')\n\n if (URL.canParse(prefix)) {\n // since normalized asset prefix is ensured to be a URL format,\n // we can safely replace the protocol\n return prefix.replace(/^http/, 'ws')\n }\n\n const { hostname, port } = window.location\n return `${protocol}//${hostname}${port ? `:${port}` : ''}${prefix}`\n}\n"],"names":["getSocketUrl","getSocketProtocol","assetPrefix","protocol","window","location","URL","prefix","normalizedAssetPrefix","canParse","replace","hostname","port"],"mappings":";;;+BAagBA,gBAAAA;;;eAAAA;;;uCAbsB;AAEtC,SAASC,kBAAkBC,WAAmB;IAC5C,IAAIC,WAAWC,OAAOC,QAAQ,CAACF,QAAQ;IAEvC,IAAI;QACF,uBAAuB;QACvBA,WAAW,IAAIG,IAAIJ,aAAaC,QAAQ;IAC1C,EAAE,OAAM,CAAC;IAET,OAAOA,aAAa,UAAU,QAAQ;AACxC;AAEO,SAASH,aAAaE,WAA+B;IAC1D,MAAMK,SAASC,CAAAA,GAAAA,uBAAAA,qBAAqB,EAACN;IACrC,MAAMC,WAAWF,kBAAkBC,eAAe;IAElD,IAAII,IAAIG,QAAQ,CAACF,SAAS;QACxB,+DAA+D;QAC/D,qCAAqC;QACrC,OAAOA,OAAOG,OAAO,CAAC,SAAS;IACjC;IAEA,MAAM,EAAEC,QAAQ,EAAEC,IAAI,EAAE,GAAGR,OAAOC,QAAQ;IAC1C,OAAO,GAAGF,SAAS,EAAE,EAAEQ,WAAWC,OAAO,CAAC,CAAC,EAAEA,MAAM,GAAG,KAAKL,QAAQ;AACrE","ignoreList":[0]}}, - {"offset": {"line": 10818, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/dev/hot-reloader/app/web-socket.ts"],"sourcesContent":["import { useContext, useEffect } from 'react'\nimport { GlobalLayoutRouterContext } from '../../../../shared/lib/app-router-context.shared-runtime'\nimport { getSocketUrl } from '../get-socket-url'\nimport {\n HMR_MESSAGE_SENT_TO_BROWSER,\n type HmrMessageSentToBrowser,\n type TurbopackMessageSentToBrowser,\n} from '../../../../server/dev/hot-reloader-types'\nimport { reportInvalidHmrMessage } from '../shared'\nimport {\n performFullReload,\n processMessage,\n type StaticIndicatorState,\n} from './hot-reloader-app'\nimport { logQueue } from '../../../../next-devtools/userspace/app/forward-logs'\nimport { InvariantError } from '../../../../shared/lib/invariant-error'\nimport { WEB_SOCKET_MAX_RECONNECTIONS } from '../../../../lib/constants'\n\nlet reconnections = 0\nlet reloading = false\nlet serverSessionId: number | null = null\nlet mostRecentCompilationHash: string | null = null\n\nexport function createWebSocket(\n assetPrefix: string,\n staticIndicatorState: StaticIndicatorState\n) {\n if (!self.__next_r) {\n throw new InvariantError(\n `Expected a request ID to be defined for the document via self.__next_r.`\n )\n }\n\n let webSocket: WebSocket\n let timer: ReturnType\n\n const sendMessage = (data: string) => {\n if (webSocket && webSocket.readyState === webSocket.OPEN) {\n webSocket.send(data)\n }\n }\n\n const processTurbopackMessage = createProcessTurbopackMessage(sendMessage)\n\n function init() {\n if (webSocket) {\n webSocket.close()\n }\n\n const newWebSocket = new window.WebSocket(\n `${getSocketUrl(assetPrefix)}/_next/webpack-hmr?id=${self.__next_r}`\n )\n\n newWebSocket.binaryType = 'arraybuffer'\n\n function handleOnline() {\n logQueue.onSocketReady(newWebSocket)\n\n reconnections = 0\n window.console.log('[HMR] connected')\n }\n\n function handleMessage(event: MessageEvent) {\n // While the page is reloading, don't respond to any more messages.\n if (reloading) {\n return\n }\n\n try {\n const message: HmrMessageSentToBrowser =\n event.data instanceof ArrayBuffer\n ? parseBinaryMessage(event.data)\n : JSON.parse(event.data)\n\n // Check for server restart in Turbopack mode\n if (message.type === HMR_MESSAGE_SENT_TO_BROWSER.TURBOPACK_CONNECTED) {\n if (\n serverSessionId !== null &&\n serverSessionId !== message.data.sessionId\n ) {\n // Either the server's session id has changed and it's a new server, or\n // it's been too long since we disconnected and we should reload the page.\n window.location.reload()\n reloading = true\n return\n }\n serverSessionId = message.data.sessionId\n }\n\n // Track webpack compilation hash for server restart detection\n if (\n message.type === HMR_MESSAGE_SENT_TO_BROWSER.SYNC &&\n 'hash' in message\n ) {\n // If we had previously reconnected and the hash changed, the server may have restarted\n if (\n mostRecentCompilationHash !== null &&\n mostRecentCompilationHash !== message.hash\n ) {\n window.location.reload()\n reloading = true\n return\n }\n mostRecentCompilationHash = message.hash\n }\n\n processMessage(\n message,\n sendMessage,\n processTurbopackMessage,\n staticIndicatorState\n )\n } catch (err: unknown) {\n reportInvalidHmrMessage(event, err)\n }\n }\n\n function handleDisconnect() {\n newWebSocket.onerror = null\n newWebSocket.onclose = null\n newWebSocket.close()\n reconnections++\n\n // After 25 reconnects we'll want to reload the page as it indicates the dev server is no longer running.\n if (reconnections > WEB_SOCKET_MAX_RECONNECTIONS) {\n reloading = true\n window.location.reload()\n return\n }\n\n clearTimeout(timer)\n // Try again after 5 seconds\n timer = setTimeout(init, reconnections > 5 ? 5000 : 1000)\n }\n\n newWebSocket.onopen = handleOnline\n newWebSocket.onerror = handleDisconnect\n newWebSocket.onclose = handleDisconnect\n newWebSocket.onmessage = handleMessage\n\n webSocket = newWebSocket\n return newWebSocket\n }\n\n return init()\n}\n\nexport function createProcessTurbopackMessage(\n sendMessage: (data: string) => void\n): (msg: TurbopackMessageSentToBrowser) => void {\n if (!process.env.TURBOPACK) {\n return () => {}\n }\n\n let queue: TurbopackMessageSentToBrowser[] = []\n let callback: ((msg: TurbopackMessageSentToBrowser) => void) | undefined\n\n const processTurbopackMessage = (msg: TurbopackMessageSentToBrowser) => {\n if (callback) {\n callback(msg)\n } else {\n queue.push(msg)\n }\n }\n\n import(\n // @ts-expect-error requires \"moduleResolution\": \"node16\" in tsconfig.json and not .ts extension\n '@vercel/turbopack-ecmascript-runtime/browser/dev/hmr-client/hmr-client.ts'\n ).then(({ connect }) => {\n connect({\n addMessageListener(cb: (msg: TurbopackMessageSentToBrowser) => void) {\n callback = cb\n\n // Replay all Turbopack messages before we were able to establish the HMR client.\n for (const msg of queue) {\n cb(msg)\n }\n queue.length = 0\n },\n sendMessage,\n onUpdateError: (err: unknown) => performFullReload(err, sendMessage),\n })\n })\n\n return processTurbopackMessage\n}\n\nexport function useWebSocketPing(webSocket: WebSocket | undefined) {\n const { tree } = useContext(GlobalLayoutRouterContext)\n\n useEffect(() => {\n if (!webSocket) {\n throw new InvariantError('Expected webSocket to be defined in dev mode.')\n }\n\n // Never send pings when using Turbopack as it's not used.\n // Pings were originally used to keep track of active routes in on-demand-entries with webpack.\n if (process.env.TURBOPACK) {\n return\n }\n\n // Taken from on-demand-entries-client.js\n const interval = setInterval(() => {\n if (webSocket.readyState === webSocket.OPEN) {\n webSocket.send(\n JSON.stringify({\n event: 'ping',\n tree,\n appDirRoute: true,\n })\n )\n }\n }, 2500)\n return () => clearInterval(interval)\n }, [tree, webSocket])\n}\n\nconst textDecoder = new TextDecoder()\n\nfunction parseBinaryMessage(data: ArrayBuffer): HmrMessageSentToBrowser {\n assertByteLength(data, 1)\n const view = new DataView(data)\n const messageType = view.getUint8(0)\n\n switch (messageType) {\n case HMR_MESSAGE_SENT_TO_BROWSER.ERRORS_TO_SHOW_IN_BROWSER: {\n const serializedErrors = new Uint8Array(data, 1)\n\n return {\n type: HMR_MESSAGE_SENT_TO_BROWSER.ERRORS_TO_SHOW_IN_BROWSER,\n serializedErrors,\n }\n }\n case HMR_MESSAGE_SENT_TO_BROWSER.REACT_DEBUG_CHUNK: {\n assertByteLength(data, 2)\n const requestIdLength = view.getUint8(1)\n assertByteLength(data, 2 + requestIdLength)\n\n const requestId = textDecoder.decode(\n new Uint8Array(data, 2, requestIdLength)\n )\n\n const chunk =\n data.byteLength > 2 + requestIdLength\n ? new Uint8Array(data, 2 + requestIdLength)\n : null\n\n return {\n type: HMR_MESSAGE_SENT_TO_BROWSER.REACT_DEBUG_CHUNK,\n requestId,\n chunk,\n }\n }\n default: {\n throw new InvariantError(\n `Invalid binary HMR message of type ${messageType}`\n )\n }\n }\n}\n\nfunction assertByteLength(data: ArrayBuffer, expectedLength: number) {\n if (data.byteLength < expectedLength) {\n throw new InvariantError(\n `Invalid binary HMR message: insufficient data (expected ${expectedLength} bytes, got ${data.byteLength})`\n )\n }\n}\n"],"names":["createProcessTurbopackMessage","createWebSocket","useWebSocketPing","reconnections","reloading","serverSessionId","mostRecentCompilationHash","assetPrefix","staticIndicatorState","self","__next_r","InvariantError","webSocket","timer","sendMessage","data","readyState","OPEN","send","processTurbopackMessage","init","close","newWebSocket","window","WebSocket","getSocketUrl","binaryType","handleOnline","logQueue","onSocketReady","console","log","handleMessage","event","message","ArrayBuffer","parseBinaryMessage","JSON","parse","type","HMR_MESSAGE_SENT_TO_BROWSER","TURBOPACK_CONNECTED","sessionId","location","reload","SYNC","hash","processMessage","err","reportInvalidHmrMessage","handleDisconnect","onerror","onclose","WEB_SOCKET_MAX_RECONNECTIONS","clearTimeout","setTimeout","onopen","onmessage","process","env","TURBOPACK","queue","callback","msg","push","then","connect","addMessageListener","cb","length","onUpdateError","performFullReload","tree","useContext","GlobalLayoutRouterContext","useEffect","interval","setInterval","stringify","appDirRoute","clearInterval","textDecoder","TextDecoder","assertByteLength","view","DataView","messageType","getUint8","ERRORS_TO_SHOW_IN_BROWSER","serializedErrors","Uint8Array","REACT_DEBUG_CHUNK","requestIdLength","requestId","decode","chunk","byteLength","expectedLength"],"mappings":"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","ignoreList":[0]}}, - {"offset": {"line": 11051, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/dev/report-hmr-latency.ts"],"sourcesContent":["declare global {\n interface Window {\n __NEXT_HMR_LATENCY_CB: ((latencyMs: number) => void) | undefined\n }\n}\n\n/**\n * Logs information about a completed HMR to the console, the server (via a\n * `client-hmr-latency` event), and to `self.__NEXT_HMR_LATENCY_CB` (a debugging\n * hook).\n *\n * @param hasUpdate Set this to `false` to avoid reporting the HMR event via a\n * `client-hmr-latency` event or to `self.__NEXT_HMR_LATENCY_CB`. Used by\n * turbopack when we must report a message to the browser console (because we\n * already logged a \"rebuilding\" message), but it's not a real HMR, so we\n * don't want to impact our telemetry.\n */\nexport default function reportHmrLatency(\n sendMessage: (message: string) => void,\n updatedModules: ReadonlyArray,\n startMsSinceEpoch: number,\n endMsSinceEpoch: number,\n hasUpdate: boolean = true\n) {\n const latencyMs = endMsSinceEpoch - startMsSinceEpoch\n console.log(`[Fast Refresh] done in ${latencyMs}ms`)\n if (!hasUpdate) {\n return\n }\n sendMessage(\n JSON.stringify({\n event: 'client-hmr-latency',\n id: window.__nextDevClientId,\n startTime: startMsSinceEpoch,\n endTime: endMsSinceEpoch,\n page: window.location.pathname,\n updatedModules,\n // Whether the page (tab) was hidden at the time the event occurred.\n // This can impact the accuracy of the event's timing.\n isPageHidden: document.visibilityState === 'hidden',\n })\n )\n if (self.__NEXT_HMR_LATENCY_CB) {\n self.__NEXT_HMR_LATENCY_CB(latencyMs)\n }\n}\n"],"names":["reportHmrLatency","sendMessage","updatedModules","startMsSinceEpoch","endMsSinceEpoch","hasUpdate","latencyMs","console","log","JSON","stringify","event","id","window","__nextDevClientId","startTime","endTime","page","location","pathname","isPageHidden","document","visibilityState","self","__NEXT_HMR_LATENCY_CB"],"mappings":";;;+BAMA;;;;;;;;;;CAUC,GACD,WAAA;;;eAAwBA;;;AAAT,SAASA,iBACtBC,WAAsC,EACtCC,cAA8C,EAC9CC,iBAAyB,EACzBC,eAAuB,EACvBC,YAAqB,IAAI;IAEzB,MAAMC,YAAYF,kBAAkBD;IACpCI,QAAQC,GAAG,CAAC,CAAC,uBAAuB,EAAEF,UAAU,EAAE,CAAC;IACnD,IAAI,CAACD,WAAW;QACd;IACF;IACAJ,YACEQ,KAAKC,SAAS,CAAC;QACbC,OAAO;QACPC,IAAIC,OAAOC,iBAAiB;QAC5BC,WAAWZ;QACXa,SAASZ;QACTa,MAAMJ,OAAOK,QAAQ,CAACC,QAAQ;QAC9BjB;QACA,oEAAoE;QACpE,sDAAsD;QACtDkB,cAAcC,SAASC,eAAe,KAAK;IAC7C;IAEF,IAAIC,KAAKC,qBAAqB,EAAE;QAC9BD,KAAKC,qBAAqB,CAAClB;IAC7B;AACF","ignoreList":[0]}}, - {"offset": {"line": 11102, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/dev/hot-reloader/turbopack-hot-reloader-common.ts"],"sourcesContent":["import type { TurbopackMessage } from '../../../server/dev/hot-reloader-types'\nimport type { Update as TurbopackUpdate } from '../../../build/swc/types'\n\ndeclare global {\n interface Window {\n __NEXT_HMR_TURBOPACK_REPORT_NOISY_NOOP_EVENTS: boolean | undefined\n }\n}\n\n// How long to wait before reporting the HMR start, used to suppress irrelevant\n// `BUILDING` events. Does not impact reported latency.\nconst TURBOPACK_HMR_START_DELAY_MS = 100\n\ninterface HmrUpdate {\n hasUpdates: boolean\n updatedModules: Set\n startMsSinceEpoch: number\n endMsSinceEpoch: number\n}\n\nexport class TurbopackHmr {\n #updatedModules: Set\n #startMsSinceEpoch: number | undefined\n #lastUpdateMsSinceEpoch: number | undefined\n #deferredReportHmrStartId: ReturnType | undefined\n #reportedHmrStart: boolean\n\n constructor() {\n this.#updatedModules = new Set()\n this.#reportedHmrStart = false\n }\n\n // HACK: Turbopack tends to generate a lot of irrelevant \"BUILDING\" actions,\n // as it reports *any* compilation, including fully no-op/cached compilations\n // and those unrelated to HMR. Fixing this would require significant\n // architectural changes.\n //\n // Work around this by deferring any \"rebuilding\" message by 100ms. If we get\n // a BUILT event within that threshold and nothing has changed, just suppress\n // the message entirely.\n #runDeferredReportHmrStart() {\n if (this.#deferredReportHmrStartId != null) {\n console.log('[Fast Refresh] rebuilding')\n this.#reportedHmrStart = true\n this.#cancelDeferredReportHmrStart()\n }\n }\n\n #cancelDeferredReportHmrStart() {\n clearTimeout(this.#deferredReportHmrStartId)\n this.#deferredReportHmrStartId = undefined\n }\n\n onBuilding() {\n this.#lastUpdateMsSinceEpoch = undefined\n this.#cancelDeferredReportHmrStart()\n this.#startMsSinceEpoch = Date.now()\n\n // report the HMR start after a short delay\n this.#deferredReportHmrStartId = setTimeout(\n () => this.#runDeferredReportHmrStart(),\n // debugging feature: don't defer/suppress noisy no-op HMR update messages\n self.__NEXT_HMR_TURBOPACK_REPORT_NOISY_NOOP_EVENTS\n ? 0\n : TURBOPACK_HMR_START_DELAY_MS\n )\n }\n\n /** Helper for other `onEvent` methods. */\n #onUpdate() {\n this.#runDeferredReportHmrStart()\n this.#lastUpdateMsSinceEpoch = Date.now()\n }\n\n onTurbopackMessage(msg: TurbopackMessage) {\n this.#onUpdate()\n const updatedModules = extractModulesFromTurbopackMessage(msg.data)\n for (const module of updatedModules) {\n this.#updatedModules.add(module)\n }\n }\n\n onServerComponentChanges() {\n this.#onUpdate()\n }\n\n onReloadPage() {\n this.#onUpdate()\n }\n\n onPageAddRemove() {\n this.#onUpdate()\n }\n\n /**\n * @returns `null` if the caller should ignore the update entirely. Returns an\n * object with `hasUpdates: false` if the caller should report the end of\n * the HMR in the browser console, but the HMR was a no-op.\n */\n onBuilt(): HmrUpdate | null {\n // Check that we got *any* `TurbopackMessage`, even if\n // `updatedModules` is empty (not everything gets recorded there).\n //\n // There's also a case where `onBuilt` gets called before `onBuilding`,\n // which can happen during initial page load. Ignore that too!\n const hasUpdates =\n this.#lastUpdateMsSinceEpoch != null && this.#startMsSinceEpoch != null\n if (!hasUpdates && !this.#reportedHmrStart) {\n // suppress the update entirely\n this.#cancelDeferredReportHmrStart()\n return null\n }\n this.#runDeferredReportHmrStart()\n\n const result = {\n hasUpdates,\n updatedModules: this.#updatedModules,\n startMsSinceEpoch: this.#startMsSinceEpoch!,\n endMsSinceEpoch: this.#lastUpdateMsSinceEpoch ?? Date.now(),\n }\n this.#updatedModules = new Set()\n this.#reportedHmrStart = false\n return result\n }\n}\n\nfunction extractModulesFromTurbopackMessage(\n data: TurbopackUpdate | TurbopackUpdate[]\n): Set {\n const updatedModules: Set = new Set()\n\n const updates = Array.isArray(data) ? data : [data]\n for (const update of updates) {\n // TODO this won't capture changes to CSS since they don't result in a \"merged\" update\n if (\n update.type !== 'partial' ||\n update.instruction.type !== 'ChunkListUpdate' ||\n update.instruction.merged === undefined\n ) {\n continue\n }\n\n for (const mergedUpdate of update.instruction.merged) {\n for (const name of Object.keys(mergedUpdate.entries)) {\n const res = /(.*)\\s+[([].*/.exec(name)\n if (res === null) {\n continue\n }\n\n updatedModules.add(res[1])\n }\n }\n }\n\n return updatedModules\n}\n"],"names":["TurbopackHmr","TURBOPACK_HMR_START_DELAY_MS","constructor","Set","console","log","clearTimeout","undefined","onBuilding","Date","now","setTimeout","self","__NEXT_HMR_TURBOPACK_REPORT_NOISY_NOOP_EVENTS","onTurbopackMessage","msg","updatedModules","extractModulesFromTurbopackMessage","data","module","add","onServerComponentChanges","onReloadPage","onPageAddRemove","onBuilt","hasUpdates","result","startMsSinceEpoch","endMsSinceEpoch","updates","Array","isArray","update","type","instruction","merged","mergedUpdate","name","Object","keys","entries","res","exec"],"mappings":"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","ignoreList":[0]}}, - {"offset": {"line": 11231, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/dev/debug-channel.ts"],"sourcesContent":["import { NEXT_REQUEST_ID_HEADER } from '../components/app-router-headers'\nimport { InvariantError } from '../../shared/lib/invariant-error'\n\nexport interface DebugChannelReadableWriterPair {\n readonly readable: ReadableStream\n readonly writer: WritableStreamDefaultWriter\n}\n\nconst pairs = new Map()\n\nexport function getOrCreateDebugChannelReadableWriterPair(\n requestId: string\n): DebugChannelReadableWriterPair {\n let pair = pairs.get(requestId)\n\n if (!pair) {\n const { readable, writable } = new TransformStream()\n pair = { readable, writer: writable.getWriter() }\n pairs.set(requestId, pair)\n pair.writer.closed.finally(() => pairs.delete(requestId))\n }\n\n return pair\n}\n\nexport function createDebugChannel(\n requestHeaders: Record | undefined\n): {\n writable?: WritableStream\n readable?: ReadableStream\n} {\n let requestId: string | undefined\n\n if (requestHeaders) {\n requestId = requestHeaders[NEXT_REQUEST_ID_HEADER] ?? undefined\n\n if (!requestId) {\n throw new InvariantError(\n `Expected a ${JSON.stringify(NEXT_REQUEST_ID_HEADER)} request header.`\n )\n }\n } else {\n requestId = self.__next_r\n\n if (!requestId) {\n throw new InvariantError(\n `Expected a request ID to be defined for the document via self.__next_r.`\n )\n }\n }\n\n const { readable } = getOrCreateDebugChannelReadableWriterPair(requestId)\n\n return { readable }\n}\n"],"names":["createDebugChannel","getOrCreateDebugChannelReadableWriterPair","pairs","Map","requestId","pair","get","readable","writable","TransformStream","writer","getWriter","set","closed","finally","delete","requestHeaders","NEXT_REQUEST_ID_HEADER","undefined","InvariantError","JSON","stringify","self","__next_r"],"mappings":";;;;;;;;;;;;;;IAyBgBA,kBAAkB,EAAA;eAAlBA;;IAfAC,yCAAyC,EAAA;eAAzCA;;;kCAVuB;gCACR;AAO/B,MAAMC,QAAQ,IAAIC;AAEX,SAASF,0CACdG,SAAiB;IAEjB,IAAIC,OAAOH,MAAMI,GAAG,CAACF;IAErB,IAAI,CAACC,MAAM;QACT,MAAM,EAAEE,QAAQ,EAAEC,QAAQ,EAAE,GAAG,IAAIC;QACnCJ,OAAO;YAAEE;YAAUG,QAAQF,SAASG,SAAS;QAAG;QAChDT,MAAMU,GAAG,CAACR,WAAWC;QACrBA,KAAKK,MAAM,CAACG,MAAM,CAACC,OAAO,CAAC,IAAMZ,MAAMa,MAAM,CAACX;IAChD;IAEA,OAAOC;AACT;AAEO,SAASL,mBACdgB,cAAkD;IAKlD,IAAIZ;IAEJ,IAAIY,gBAAgB;QAClBZ,YAAYY,cAAc,CAACC,kBAAAA,sBAAsB,CAAC,IAAIC;QAEtD,IAAI,CAACd,WAAW;YACd,MAAM,OAAA,cAEL,CAFK,IAAIe,gBAAAA,cAAc,CACtB,CAAC,WAAW,EAAEC,KAAKC,SAAS,CAACJ,kBAAAA,sBAAsB,EAAE,gBAAgB,CAAC,GADlE,qBAAA;uBAAA;4BAAA;8BAAA;YAEN;QACF;IACF,OAAO;QACLb,YAAYkB,KAAKC,QAAQ;QAEzB,IAAI,CAACnB,WAAW;YACd,MAAM,OAAA,cAEL,CAFK,IAAIe,gBAAAA,cAAc,CACtB,CAAC,uEAAuE,CAAC,GADrE,qBAAA;uBAAA;4BAAA;8BAAA;YAEN;QACF;IACF;IAEA,MAAM,EAAEZ,QAAQ,EAAE,GAAGN,0CAA0CG;IAE/D,OAAO;QAAEG;IAAS;AACpB","ignoreList":[0]}}, - {"offset": {"line": 11305, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/dev/hot-reloader/app/hot-reloader-app.tsx"],"sourcesContent":["/// \n\nimport type { ReactNode } from 'react'\nimport { useEffect, startTransition } from 'react'\nimport stripAnsi from 'next/dist/compiled/strip-ansi'\nimport formatWebpackMessages from '../../../../shared/lib/format-webpack-messages'\nimport {\n REACT_REFRESH_FULL_RELOAD,\n REACT_REFRESH_FULL_RELOAD_FROM_ERROR,\n} from '../shared'\nimport {\n dispatcher,\n getSerializedOverlayState,\n getSegmentTrieData,\n} from 'next/dist/compiled/next-devtools'\nimport { ReplaySsrOnlyErrors } from '../../../../next-devtools/userspace/app/errors/replay-ssr-only-errors'\nimport { AppDevOverlayErrorBoundary } from '../../../../next-devtools/userspace/app/app-dev-overlay-error-boundary'\nimport { useErrorHandler } from '../../../../next-devtools/userspace/app/errors/use-error-handler'\nimport { RuntimeErrorHandler } from '../../runtime-error-handler'\nimport { useWebSocketPing } from './web-socket'\nimport {\n HMR_MESSAGE_SENT_TO_BROWSER,\n HMR_MESSAGE_SENT_TO_SERVER,\n} from '../../../../server/dev/hot-reloader-types'\nimport type {\n HmrMessageSentToBrowser,\n TurbopackMessageSentToBrowser,\n} from '../../../../server/dev/hot-reloader-types'\nimport type { McpErrorStateResponse } from '../../../../shared/lib/mcp-error-types'\nimport type { McpPageMetadataResponse } from '../../../../shared/lib/mcp-page-metadata-types'\nimport { useUntrackedPathname } from '../../../components/navigation-untracked'\nimport reportHmrLatency from '../../report-hmr-latency'\nimport { TurbopackHmr } from '../turbopack-hot-reloader-common'\nimport { NEXT_HMR_REFRESH_HASH_COOKIE } from '../../../components/app-router-headers'\nimport {\n publicAppRouterInstance,\n type GlobalErrorState,\n} from '../../../components/app-router-instance'\nimport { InvariantError } from '../../../../shared/lib/invariant-error'\nimport { getOrCreateDebugChannelReadableWriterPair } from '../../debug-channel'\n// TODO: Explicitly import from client.browser (doesn't work with Webpack).\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport { createFromReadableStream as createFromReadableStreamBrowser } from 'react-server-dom-webpack/client'\nimport { findSourceMapURL } from '../../../app-find-source-map-url'\n\nexport interface StaticIndicatorState {\n pathname: string | null\n appIsrManifest: Record | null\n}\n\nconst createFromReadableStream =\n createFromReadableStreamBrowser as (typeof import('react-server-dom-webpack/client.browser'))['createFromReadableStream']\n\nlet mostRecentCompilationHash: any = null\nlet __nextDevClientId = Math.round(Math.random() * 100 + Date.now())\nlet reloading = false\nlet webpackStartMsSinceEpoch: number | null = null\nconst turbopackHmr: TurbopackHmr | null = process.env.TURBOPACK\n ? new TurbopackHmr()\n : null\n\nlet pendingHotUpdateWebpack = Promise.resolve()\nlet resolvePendingHotUpdateWebpack: () => void = () => {}\nfunction setPendingHotUpdateWebpack() {\n pendingHotUpdateWebpack = new Promise((resolve) => {\n resolvePendingHotUpdateWebpack = () => {\n resolve()\n }\n })\n}\n\nexport function waitForWebpackRuntimeHotUpdate() {\n return pendingHotUpdateWebpack\n}\n\n// There is a newer version of the code available.\nfunction handleAvailableHash(hash: string) {\n // Update last known compilation hash.\n mostRecentCompilationHash = hash\n}\n\n/**\n * Is there a newer version of this code available?\n * For webpack: Check if the hash changed compared to __webpack_hash__\n * For Turbopack: Always true because it doesn't have __webpack_hash__\n */\nfunction isUpdateAvailable() {\n if (process.env.TURBOPACK) {\n return true\n }\n\n /* globals __webpack_hash__ */\n // __webpack_hash__ is the hash of the current compilation.\n // It's a global variable injected by Webpack.\n return mostRecentCompilationHash !== __webpack_hash__\n}\n\n// Webpack disallows updates in other states.\nfunction canApplyUpdates() {\n return module.hot.status() === 'idle'\n}\nfunction afterApplyUpdates(fn: any) {\n if (canApplyUpdates()) {\n fn()\n } else {\n function handler(status: any) {\n if (status === 'idle') {\n module.hot.removeStatusHandler(handler)\n fn()\n }\n }\n module.hot.addStatusHandler(handler)\n }\n}\n\nexport function performFullReload(\n err: any,\n sendMessage: (data: string) => void\n) {\n const stackTrace =\n err &&\n ((err.stack && err.stack.split('\\n').slice(0, 5).join('\\n')) ||\n err.message ||\n err + '')\n\n sendMessage(\n JSON.stringify({\n event: 'client-full-reload',\n stackTrace,\n hadRuntimeError: !!RuntimeErrorHandler.hadRuntimeError,\n dependencyChain: err ? err.dependencyChain : undefined,\n })\n )\n\n if (reloading) return\n reloading = true\n window.location.reload()\n}\n\n// Attempt to update code on the fly, fall back to a hard reload.\nfunction tryApplyUpdatesWebpack(sendMessage: (message: string) => void) {\n if (!isUpdateAvailable() || !canApplyUpdates()) {\n resolvePendingHotUpdateWebpack()\n dispatcher.onBuildOk()\n reportHmrLatency(sendMessage, [], webpackStartMsSinceEpoch!, Date.now())\n return\n }\n\n function handleApplyUpdates(\n err: any,\n updatedModules: (string | number)[] | null\n ) {\n if (err || RuntimeErrorHandler.hadRuntimeError || updatedModules == null) {\n if (err) {\n console.warn(REACT_REFRESH_FULL_RELOAD)\n } else if (RuntimeErrorHandler.hadRuntimeError) {\n console.warn(REACT_REFRESH_FULL_RELOAD_FROM_ERROR)\n }\n performFullReload(err, sendMessage)\n return\n }\n\n dispatcher.onBuildOk()\n\n if (isUpdateAvailable()) {\n // While we were updating, there was a new update! Do it again.\n tryApplyUpdatesWebpack(sendMessage)\n return\n }\n\n dispatcher.onRefresh()\n resolvePendingHotUpdateWebpack()\n reportHmrLatency(\n sendMessage,\n updatedModules,\n webpackStartMsSinceEpoch!,\n Date.now()\n )\n\n if (process.env.__NEXT_TEST_MODE) {\n afterApplyUpdates(() => {\n if (self.__NEXT_HMR_CB) {\n self.__NEXT_HMR_CB()\n self.__NEXT_HMR_CB = null\n }\n })\n }\n }\n\n // https://webpack.js.org/api/hot-module-replacement/#check\n module.hot\n .check(/* autoApply */ false)\n .then((updatedModules: (string | number)[] | null) => {\n if (updatedModules == null) {\n return null\n }\n\n // We should always handle an update, even if updatedModules is empty (but\n // non-null) for any reason. That's what webpack would normally do:\n // https://github.com/webpack/webpack/blob/3aa6b6bc3a64/lib/hmr/HotModuleReplacement.runtime.js#L296-L298\n dispatcher.onBeforeRefresh()\n // https://webpack.js.org/api/hot-module-replacement/#apply\n return module.hot.apply()\n })\n .then(\n (updatedModules: (string | number)[] | null) => {\n handleApplyUpdates(null, updatedModules)\n },\n (err: any) => {\n handleApplyUpdates(err, null)\n }\n )\n}\n\n/** Handles messages from the server for the App Router. */\nexport function processMessage(\n message: HmrMessageSentToBrowser,\n sendMessage: (message: string) => void,\n processTurbopackMessage: (msg: TurbopackMessageSentToBrowser) => void,\n staticIndicatorState: StaticIndicatorState\n) {\n function handleErrors(errors: ReadonlyArray) {\n // \"Massage\" webpack messages.\n const formatted = formatWebpackMessages({\n errors: errors,\n warnings: [],\n })\n\n // Only show the first error.\n dispatcher.onBuildError(formatted.errors[0])\n\n // Also log them to the console.\n for (let i = 0; i < formatted.errors.length; i++) {\n console.error(stripAnsi(formatted.errors[i]))\n }\n\n // Do not attempt to reload now.\n // We will reload on next success instead.\n if (process.env.__NEXT_TEST_MODE) {\n if (self.__NEXT_HMR_CB) {\n self.__NEXT_HMR_CB(formatted.errors[0])\n self.__NEXT_HMR_CB = null\n }\n }\n }\n\n function handleHotUpdate() {\n if (process.env.TURBOPACK) {\n const hmrUpdate = turbopackHmr!.onBuilt()\n if (hmrUpdate != null) {\n reportHmrLatency(\n sendMessage,\n [...hmrUpdate.updatedModules],\n hmrUpdate.startMsSinceEpoch,\n hmrUpdate.endMsSinceEpoch,\n // suppress the `client-hmr-latency` event if the update was a no-op:\n hmrUpdate.hasUpdates\n )\n }\n dispatcher.onBuildOk()\n } else {\n tryApplyUpdatesWebpack(sendMessage)\n }\n }\n\n switch (message.type) {\n case HMR_MESSAGE_SENT_TO_BROWSER.ISR_MANIFEST: {\n if (process.env.__NEXT_DEV_INDICATOR) {\n staticIndicatorState.appIsrManifest = message.data\n\n // Handle the initial static indicator status on receiving the ISR\n // manifest. Navigation is handled in an effect inside HotReload for\n // pathname changes as we'll receive the updated manifest before\n // usePathname triggers for a new value.\n\n const isStatic = staticIndicatorState.pathname\n ? message.data[staticIndicatorState.pathname]\n : undefined\n\n dispatcher.onStaticIndicator(\n isStatic === undefined ? 'pending' : isStatic ? 'static' : 'dynamic'\n )\n }\n break\n }\n case HMR_MESSAGE_SENT_TO_BROWSER.BUILDING: {\n dispatcher.buildingIndicatorShow()\n\n if (process.env.TURBOPACK) {\n turbopackHmr!.onBuilding()\n } else {\n webpackStartMsSinceEpoch = Date.now()\n setPendingHotUpdateWebpack()\n console.log('[Fast Refresh] rebuilding')\n }\n break\n }\n case HMR_MESSAGE_SENT_TO_BROWSER.BUILT:\n case HMR_MESSAGE_SENT_TO_BROWSER.SYNC: {\n dispatcher.buildingIndicatorHide()\n\n if (message.hash) {\n handleAvailableHash(message.hash)\n }\n\n const { errors, warnings } = message\n\n // Is undefined when it's a 'built' event\n if ('versionInfo' in message)\n dispatcher.onVersionInfo(message.versionInfo)\n if ('debug' in message && message.debug)\n dispatcher.onDebugInfo(message.debug)\n if ('devIndicator' in message)\n dispatcher.onDevIndicator(message.devIndicator)\n if ('devToolsConfig' in message)\n dispatcher.onDevToolsConfig(message.devToolsConfig)\n\n const hasErrors = Boolean(errors && errors.length)\n // Compilation with errors (e.g. syntax error or missing modules).\n if (hasErrors) {\n sendMessage(\n JSON.stringify({\n event: 'client-error',\n errorCount: errors.length,\n clientId: __nextDevClientId,\n })\n )\n\n handleErrors(errors)\n return\n }\n\n const hasWarnings = Boolean(warnings && warnings.length)\n if (hasWarnings) {\n sendMessage(\n JSON.stringify({\n event: 'client-warning',\n warningCount: warnings.length,\n clientId: __nextDevClientId,\n })\n )\n\n // Print warnings to the console.\n const formattedMessages = formatWebpackMessages({\n warnings: warnings,\n errors: [],\n })\n\n for (let i = 0; i < formattedMessages.warnings.length; i++) {\n if (i === 5) {\n console.warn(\n 'There were more warnings in other files.\\n' +\n 'You can find a complete log in the terminal.'\n )\n break\n }\n console.warn(stripAnsi(formattedMessages.warnings[i]))\n }\n\n // No early return here as we need to apply modules in the same way between warnings only and compiles without warnings\n }\n\n sendMessage(\n JSON.stringify({\n event: 'client-success',\n clientId: __nextDevClientId,\n })\n )\n\n if (message.type === HMR_MESSAGE_SENT_TO_BROWSER.BUILT) {\n handleHotUpdate()\n }\n return\n }\n case HMR_MESSAGE_SENT_TO_BROWSER.TURBOPACK_CONNECTED: {\n processTurbopackMessage({\n type: HMR_MESSAGE_SENT_TO_BROWSER.TURBOPACK_CONNECTED,\n data: {\n sessionId: message.data.sessionId,\n },\n })\n break\n }\n case HMR_MESSAGE_SENT_TO_BROWSER.TURBOPACK_MESSAGE: {\n turbopackHmr!.onTurbopackMessage(message)\n dispatcher.onBeforeRefresh()\n processTurbopackMessage({\n type: HMR_MESSAGE_SENT_TO_BROWSER.TURBOPACK_MESSAGE,\n data: message.data,\n })\n if (RuntimeErrorHandler.hadRuntimeError) {\n console.warn(REACT_REFRESH_FULL_RELOAD_FROM_ERROR)\n performFullReload(null, sendMessage)\n }\n dispatcher.onRefresh()\n break\n }\n // TODO-APP: make server component change more granular\n case HMR_MESSAGE_SENT_TO_BROWSER.SERVER_COMPONENT_CHANGES: {\n turbopackHmr?.onServerComponentChanges()\n sendMessage(\n JSON.stringify({\n event: 'server-component-reload-page',\n clientId: __nextDevClientId,\n hash: message.hash,\n })\n )\n\n // Store the latest hash in a session cookie so that it's sent back to the\n // server with any subsequent requests.\n document.cookie = `${NEXT_HMR_REFRESH_HASH_COOKIE}=${message.hash};path=/`\n\n if (\n RuntimeErrorHandler.hadRuntimeError ||\n document.documentElement.id === '__next_error__'\n ) {\n if (reloading) return\n reloading = true\n return window.location.reload()\n }\n\n startTransition(() => {\n publicAppRouterInstance.hmrRefresh()\n dispatcher.onRefresh()\n })\n\n if (process.env.__NEXT_TEST_MODE) {\n if (self.__NEXT_HMR_CB) {\n self.__NEXT_HMR_CB()\n self.__NEXT_HMR_CB = null\n }\n }\n\n return\n }\n case HMR_MESSAGE_SENT_TO_BROWSER.RELOAD_PAGE: {\n turbopackHmr?.onReloadPage()\n sendMessage(\n JSON.stringify({\n event: 'client-reload-page',\n clientId: __nextDevClientId,\n })\n )\n if (reloading) return\n reloading = true\n return window.location.reload()\n }\n case HMR_MESSAGE_SENT_TO_BROWSER.ADDED_PAGE:\n case HMR_MESSAGE_SENT_TO_BROWSER.REMOVED_PAGE: {\n turbopackHmr?.onPageAddRemove()\n // TODO-APP: potentially only refresh if the currently viewed page was added/removed.\n return publicAppRouterInstance.hmrRefresh()\n }\n case HMR_MESSAGE_SENT_TO_BROWSER.SERVER_ERROR: {\n const { errorJSON } = message\n if (errorJSON) {\n const errorObject = JSON.parse(errorJSON)\n const error = new Error(errorObject.message)\n error.stack = errorObject.stack\n handleErrors([error])\n }\n return\n }\n case HMR_MESSAGE_SENT_TO_BROWSER.DEV_PAGES_MANIFEST_UPDATE: {\n return\n }\n case HMR_MESSAGE_SENT_TO_BROWSER.DEVTOOLS_CONFIG: {\n dispatcher.onDevToolsConfig(message.data)\n return\n }\n case HMR_MESSAGE_SENT_TO_BROWSER.REACT_DEBUG_CHUNK: {\n const { requestId, chunk } = message\n const { writer } = getOrCreateDebugChannelReadableWriterPair(requestId)\n\n if (chunk) {\n writer.ready.then(() => writer.write(chunk)).catch(console.error)\n } else {\n // A null chunk signals that no more chunks will be sent, which allows\n // us to close the writer.\n // TODO: Revisit this cleanup logic when we integrate the return channel\n // that keeps the connection open to be able to lazily retrieve debug\n // objects.\n writer.ready.then(() => writer.close()).catch(console.error)\n }\n\n return\n }\n case HMR_MESSAGE_SENT_TO_BROWSER.REQUEST_CURRENT_ERROR_STATE: {\n const errorState = getSerializedOverlayState()\n const response: McpErrorStateResponse = {\n event: HMR_MESSAGE_SENT_TO_SERVER.MCP_ERROR_STATE_RESPONSE,\n requestId: message.requestId,\n errorState,\n url: window.location.href,\n }\n sendMessage(JSON.stringify(response))\n return\n }\n case HMR_MESSAGE_SENT_TO_BROWSER.REQUEST_PAGE_METADATA: {\n const segmentTrieData = getSegmentTrieData()\n const response: McpPageMetadataResponse = {\n event: HMR_MESSAGE_SENT_TO_SERVER.MCP_PAGE_METADATA_RESPONSE,\n requestId: message.requestId,\n segmentTrieData,\n url: window.location.href,\n }\n sendMessage(JSON.stringify(response))\n return\n }\n case HMR_MESSAGE_SENT_TO_BROWSER.CACHE_INDICATOR: {\n dispatcher.onCacheIndicator(message.state)\n return\n }\n case HMR_MESSAGE_SENT_TO_BROWSER.ERRORS_TO_SHOW_IN_BROWSER: {\n createFromReadableStream(\n new ReadableStream({\n start(controller) {\n controller.enqueue(message.serializedErrors)\n controller.close()\n },\n }),\n { findSourceMapURL }\n ).then(\n (errors) => {\n for (const error of errors) {\n console.error(error)\n }\n },\n (err) => {\n console.error(\n new Error('Failed to deserialize errors.', { cause: err })\n )\n }\n )\n return\n }\n case HMR_MESSAGE_SENT_TO_BROWSER.MIDDLEWARE_CHANGES:\n case HMR_MESSAGE_SENT_TO_BROWSER.CLIENT_CHANGES:\n case HMR_MESSAGE_SENT_TO_BROWSER.SERVER_ONLY_CHANGES:\n // These action types are handled in src/client/page-bootstrap.ts\n break\n default: {\n message satisfies never\n }\n }\n}\n\nexport default function HotReload({\n children,\n globalError,\n webSocket,\n staticIndicatorState,\n}: {\n children: ReactNode\n globalError: GlobalErrorState\n webSocket: WebSocket | undefined\n staticIndicatorState: StaticIndicatorState | undefined\n}) {\n useErrorHandler(dispatcher.onUnhandledError, dispatcher.onUnhandledRejection)\n useWebSocketPing(webSocket)\n\n // We don't want access of the pathname for the dev tools to trigger a dynamic\n // access (as the dev overlay will never be present in production).\n const pathname = useUntrackedPathname()\n\n if (process.env.__NEXT_DEV_INDICATOR) {\n // this conditional is only for dead-code elimination which\n // isn't a runtime conditional only build-time so ignore hooks rule\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useEffect(() => {\n if (!staticIndicatorState) {\n throw new InvariantError(\n 'Expected staticIndicatorState to be defined in dev mode.'\n )\n }\n\n staticIndicatorState.pathname = pathname\n\n if (staticIndicatorState.appIsrManifest) {\n const isStatic = pathname\n ? staticIndicatorState.appIsrManifest[pathname]\n : undefined\n\n dispatcher.onStaticIndicator(\n isStatic === undefined ? 'pending' : isStatic ? 'static' : 'dynamic'\n )\n }\n }, [pathname, staticIndicatorState])\n }\n\n return (\n \n \n {children}\n \n )\n}\n"],"names":["HotReload","performFullReload","processMessage","waitForWebpackRuntimeHotUpdate","createFromReadableStream","createFromReadableStreamBrowser","mostRecentCompilationHash","__nextDevClientId","Math","round","random","Date","now","reloading","webpackStartMsSinceEpoch","turbopackHmr","process","env","TURBOPACK","TurbopackHmr","pendingHotUpdateWebpack","Promise","resolve","resolvePendingHotUpdateWebpack","setPendingHotUpdateWebpack","handleAvailableHash","hash","isUpdateAvailable","__webpack_hash__","canApplyUpdates","module","hot","status","afterApplyUpdates","fn","handler","removeStatusHandler","addStatusHandler","err","sendMessage","stackTrace","stack","split","slice","join","message","JSON","stringify","event","hadRuntimeError","RuntimeErrorHandler","dependencyChain","undefined","window","location","reload","tryApplyUpdatesWebpack","dispatcher","onBuildOk","reportHmrLatency","handleApplyUpdates","updatedModules","console","warn","REACT_REFRESH_FULL_RELOAD","REACT_REFRESH_FULL_RELOAD_FROM_ERROR","onRefresh","__NEXT_TEST_MODE","self","__NEXT_HMR_CB","check","then","onBeforeRefresh","apply","processTurbopackMessage","staticIndicatorState","handleErrors","errors","formatted","formatWebpackMessages","warnings","onBuildError","i","length","error","stripAnsi","handleHotUpdate","hmrUpdate","onBuilt","startMsSinceEpoch","endMsSinceEpoch","hasUpdates","type","HMR_MESSAGE_SENT_TO_BROWSER","ISR_MANIFEST","__NEXT_DEV_INDICATOR","appIsrManifest","data","isStatic","pathname","onStaticIndicator","BUILDING","buildingIndicatorShow","onBuilding","log","BUILT","SYNC","buildingIndicatorHide","onVersionInfo","versionInfo","debug","onDebugInfo","onDevIndicator","devIndicator","onDevToolsConfig","devToolsConfig","hasErrors","Boolean","errorCount","clientId","hasWarnings","warningCount","formattedMessages","TURBOPACK_CONNECTED","sessionId","TURBOPACK_MESSAGE","onTurbopackMessage","SERVER_COMPONENT_CHANGES","onServerComponentChanges","document","cookie","NEXT_HMR_REFRESH_HASH_COOKIE","documentElement","id","startTransition","publicAppRouterInstance","hmrRefresh","RELOAD_PAGE","onReloadPage","ADDED_PAGE","REMOVED_PAGE","onPageAddRemove","SERVER_ERROR","errorJSON","errorObject","parse","Error","DEV_PAGES_MANIFEST_UPDATE","DEVTOOLS_CONFIG","REACT_DEBUG_CHUNK","requestId","chunk","writer","getOrCreateDebugChannelReadableWriterPair","ready","write","catch","close","REQUEST_CURRENT_ERROR_STATE","errorState","getSerializedOverlayState","response","HMR_MESSAGE_SENT_TO_SERVER","MCP_ERROR_STATE_RESPONSE","url","href","REQUEST_PAGE_METADATA","segmentTrieData","getSegmentTrieData","MCP_PAGE_METADATA_RESPONSE","CACHE_INDICATOR","onCacheIndicator","state","ERRORS_TO_SHOW_IN_BROWSER","ReadableStream","start","controller","enqueue","serializedErrors","findSourceMapURL","cause","MIDDLEWARE_CHANGES","CLIENT_CHANGES","SERVER_ONLY_CHANGES","children","globalError","webSocket","useErrorHandler","onUnhandledError","onUnhandledRejection","useWebSocketPing","useUntrackedPathname","useEffect","InvariantError","AppDevOverlayErrorBoundary","ReplaySsrOnlyErrors","onBlockingError","openErrorOverlay"],"mappings":"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","ignoreList":[0]}}, - {"offset": {"line": 11798, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/app-router.tsx"],"sourcesContent":["import React, {\n useEffect,\n useMemo,\n startTransition,\n useInsertionEffect,\n useDeferredValue,\n} from 'react'\nimport {\n AppRouterContext,\n LayoutRouterContext,\n GlobalLayoutRouterContext,\n} from '../../shared/lib/app-router-context.shared-runtime'\nimport type { CacheNode } from '../../shared/lib/app-router-types'\nimport { ACTION_RESTORE } from './router-reducer/router-reducer-types'\nimport type {\n AppHistoryState,\n AppRouterState,\n} from './router-reducer/router-reducer-types'\nimport { createHrefFromUrl } from './router-reducer/create-href-from-url'\nimport {\n SearchParamsContext,\n PathnameContext,\n PathParamsContext,\n NavigationPromisesContext,\n type NavigationPromises,\n} from '../../shared/lib/hooks-client-context.shared-runtime'\nimport { dispatchAppRouterAction, useActionQueue } from './use-action-queue'\nimport { AppRouterAnnouncer } from './app-router-announcer'\nimport { RedirectBoundary } from './redirect-boundary'\nimport { findHeadInCache } from './router-reducer/reducers/find-head-in-cache'\nimport { unresolvedThenable } from './unresolved-thenable'\nimport { removeBasePath } from '../remove-base-path'\nimport { hasBasePath } from '../has-base-path'\nimport { getSelectedParams } from './router-reducer/compute-changed-path'\nimport { useNavFailureHandler } from './nav-failure-handler'\nimport {\n dispatchTraverseAction,\n publicAppRouterInstance,\n type AppRouterActionQueue,\n type GlobalErrorState,\n} from './app-router-instance'\nimport { getRedirectTypeFromError, getURLFromRedirectError } from './redirect'\nimport { isRedirectError, RedirectType } from './redirect-error'\nimport { pingVisibleLinks } from './links'\nimport RootErrorBoundary from './errors/root-error-boundary'\nimport DefaultGlobalError from './builtin/global-error'\nimport { RootLayoutBoundary } from '../../lib/framework/boundary-components'\nimport type { StaticIndicatorState } from '../dev/hot-reloader/app/hot-reloader-app'\nimport { getDeploymentIdQueryOrEmptyString } from '../../shared/lib/deployment-id'\n\nconst globalMutable: {\n pendingMpaPath?: string\n} = {}\n\nfunction HistoryUpdater({\n appRouterState,\n}: {\n appRouterState: AppRouterState\n}) {\n useInsertionEffect(() => {\n if (process.env.__NEXT_APP_NAV_FAIL_HANDLING) {\n // clear pending URL as navigation is no longer\n // in flight\n window.next.__pendingUrl = undefined\n }\n\n const { tree, pushRef, canonicalUrl, renderedSearch } = appRouterState\n\n const appHistoryState: AppHistoryState = {\n tree,\n renderedSearch,\n }\n\n // TODO: Use Navigation API if available\n const historyState = {\n ...(pushRef.preserveCustomHistoryState ? window.history.state : {}),\n // Identifier is shortened intentionally.\n // __NA is used to identify if the history entry can be handled by the app-router.\n // __N is used to identify if the history entry can be handled by the old router.\n __NA: true,\n __PRIVATE_NEXTJS_INTERNALS_TREE: appHistoryState,\n }\n if (\n pushRef.pendingPush &&\n // Skip pushing an additional history entry if the canonicalUrl is the same as the current url.\n // This mirrors the browser behavior for normal navigation.\n createHrefFromUrl(new URL(window.location.href)) !== canonicalUrl\n ) {\n // This intentionally mutates React state, pushRef is overwritten to ensure additional push/replace calls do not trigger an additional history entry.\n pushRef.pendingPush = false\n window.history.pushState(historyState, '', canonicalUrl)\n } else {\n window.history.replaceState(historyState, '', canonicalUrl)\n }\n }, [appRouterState])\n\n useEffect(() => {\n // The Next-Url and the base tree may affect the result of a prefetch\n // task. Re-prefetch all visible links with the updated values. In most\n // cases, this will not result in any new network requests, only if\n // the prefetch result actually varies on one of these inputs.\n pingVisibleLinks(appRouterState.nextUrl, appRouterState.tree)\n }, [appRouterState.nextUrl, appRouterState.tree])\n\n return null\n}\n\nfunction copyNextJsInternalHistoryState(data: any) {\n if (data == null) data = {}\n const currentState = window.history.state\n const __NA = currentState?.__NA\n if (__NA) {\n data.__NA = __NA\n }\n const __PRIVATE_NEXTJS_INTERNALS_TREE =\n currentState?.__PRIVATE_NEXTJS_INTERNALS_TREE\n if (__PRIVATE_NEXTJS_INTERNALS_TREE) {\n data.__PRIVATE_NEXTJS_INTERNALS_TREE = __PRIVATE_NEXTJS_INTERNALS_TREE\n }\n\n return data\n}\n\nfunction Head({\n headCacheNode,\n}: {\n headCacheNode: CacheNode | null\n}): React.ReactNode {\n // If this segment has a `prefetchHead`, it's the statically prefetched data.\n // We should use that on initial render instead of `head`. Then we'll switch\n // to `head` when the dynamic response streams in.\n const head = headCacheNode !== null ? headCacheNode.head : null\n const prefetchHead =\n headCacheNode !== null ? headCacheNode.prefetchHead : null\n\n // If no prefetch data is available, then we go straight to rendering `head`.\n const resolvedPrefetchRsc = prefetchHead !== null ? prefetchHead : head\n\n // We use `useDeferredValue` to handle switching between the prefetched and\n // final values. The second argument is returned on initial render, then it\n // re-renders with the first argument.\n return useDeferredValue(head, resolvedPrefetchRsc)\n}\n\n/**\n * The global router that wraps the application components.\n */\nfunction Router({\n actionQueue,\n globalError,\n webSocket,\n staticIndicatorState,\n}: {\n actionQueue: AppRouterActionQueue\n globalError: GlobalErrorState\n webSocket: WebSocket | undefined\n staticIndicatorState: StaticIndicatorState | undefined\n}) {\n const state = useActionQueue(actionQueue)\n const { canonicalUrl } = state\n // Add memoized pathname/query for useSearchParams and usePathname.\n const { searchParams, pathname } = useMemo(() => {\n const url = new URL(\n canonicalUrl,\n typeof window === 'undefined' ? 'http://n' : window.location.href\n )\n\n return {\n // This is turned into a readonly class in `useSearchParams`\n searchParams: url.searchParams,\n pathname: hasBasePath(url.pathname)\n ? removeBasePath(url.pathname)\n : url.pathname,\n }\n }, [canonicalUrl])\n\n if (process.env.NODE_ENV !== 'production') {\n const { cache, tree } = state\n\n // This hook is in a conditional but that is ok because `process.env.NODE_ENV` never changes\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useEffect(() => {\n // Add `window.nd` for debugging purposes.\n // This is not meant for use in applications as concurrent rendering will affect the cache/tree/router.\n // @ts-ignore this is for debugging\n window.nd = {\n router: publicAppRouterInstance,\n cache,\n tree,\n }\n }, [cache, tree])\n }\n\n useEffect(() => {\n // If the app is restored from bfcache, it's possible that\n // pushRef.mpaNavigation is true, which would mean that any re-render of this component\n // would trigger the mpa navigation logic again from the lines below.\n // This will restore the router to the initial state in the event that the app is restored from bfcache.\n function handlePageShow(event: PageTransitionEvent) {\n if (\n !event.persisted ||\n !window.history.state?.__PRIVATE_NEXTJS_INTERNALS_TREE\n ) {\n return\n }\n\n // Clear the pendingMpaPath value so that a subsequent MPA navigation to the same URL can be triggered.\n // This is necessary because if the browser restored from bfcache, the pendingMpaPath would still be set to the value\n // of the last MPA navigation.\n globalMutable.pendingMpaPath = undefined\n\n dispatchAppRouterAction({\n type: ACTION_RESTORE,\n url: new URL(window.location.href),\n historyState: window.history.state.__PRIVATE_NEXTJS_INTERNALS_TREE,\n })\n }\n\n window.addEventListener('pageshow', handlePageShow)\n\n return () => {\n window.removeEventListener('pageshow', handlePageShow)\n }\n }, [])\n\n useEffect(() => {\n // Ensure that any redirect errors that bubble up outside of the RedirectBoundary\n // are caught and handled by the router.\n function handleUnhandledRedirect(\n event: ErrorEvent | PromiseRejectionEvent\n ) {\n const error = 'reason' in event ? event.reason : event.error\n if (isRedirectError(error)) {\n event.preventDefault()\n const url = getURLFromRedirectError(error)\n const redirectType = getRedirectTypeFromError(error)\n // TODO: This should access the router methods directly, rather than\n // go through the public interface.\n if (redirectType === RedirectType.push) {\n publicAppRouterInstance.push(url, {})\n } else {\n publicAppRouterInstance.replace(url, {})\n }\n }\n }\n window.addEventListener('error', handleUnhandledRedirect)\n window.addEventListener('unhandledrejection', handleUnhandledRedirect)\n\n return () => {\n window.removeEventListener('error', handleUnhandledRedirect)\n window.removeEventListener('unhandledrejection', handleUnhandledRedirect)\n }\n }, [])\n\n // When mpaNavigation flag is set do a hard navigation to the new url.\n // Infinitely suspend because we don't actually want to rerender any child\n // components with the new URL and any entangled state updates shouldn't\n // commit either (eg: useTransition isPending should stay true until the page\n // unloads).\n //\n // This is a side effect in render. Don't try this at home, kids. It's\n // probably safe because we know this is a singleton component and it's never\n // in . At least I hope so. (It will run twice in dev strict mode,\n // but that's... fine?)\n const { pushRef } = state\n if (pushRef.mpaNavigation) {\n // if there's a re-render, we don't want to trigger another redirect if one is already in flight to the same URL\n if (globalMutable.pendingMpaPath !== canonicalUrl) {\n const location = window.location\n if (pushRef.pendingPush) {\n location.assign(canonicalUrl)\n } else {\n location.replace(canonicalUrl)\n }\n\n globalMutable.pendingMpaPath = canonicalUrl\n }\n // TODO-APP: Should we listen to navigateerror here to catch failed\n // navigations somehow? And should we call window.stop() if a SPA navigation\n // should interrupt an MPA one?\n // NOTE: This is intentionally using `throw` instead of `use` because we're\n // inside an externally mutable condition (pushRef.mpaNavigation), which\n // violates the rules of hooks.\n throw unresolvedThenable\n }\n\n useEffect(() => {\n const originalPushState = window.history.pushState.bind(window.history)\n const originalReplaceState = window.history.replaceState.bind(\n window.history\n )\n\n // Ensure the canonical URL in the Next.js Router is updated when the URL is changed so that `usePathname` and `useSearchParams` hold the pushed values.\n const applyUrlFromHistoryPushReplace = (\n url: string | URL | null | undefined\n ) => {\n const href = window.location.href\n const appHistoryState: AppHistoryState | undefined =\n window.history.state?.__PRIVATE_NEXTJS_INTERNALS_TREE\n\n startTransition(() => {\n dispatchAppRouterAction({\n type: ACTION_RESTORE,\n url: new URL(url ?? href, href),\n historyState: appHistoryState,\n })\n })\n }\n\n /**\n * Patch pushState to ensure external changes to the history are reflected in the Next.js Router.\n * Ensures Next.js internal history state is copied to the new history entry.\n * Ensures usePathname and useSearchParams hold the newly provided url.\n */\n window.history.pushState = function pushState(\n data: any,\n _unused: string,\n url?: string | URL | null\n ): void {\n // TODO: Warn when Navigation API is available (navigation.navigate() should be used)\n // Avoid a loop when Next.js internals trigger pushState/replaceState\n if (data?.__NA || data?._N) {\n return originalPushState(data, _unused, url)\n }\n\n data = copyNextJsInternalHistoryState(data)\n\n if (url) {\n applyUrlFromHistoryPushReplace(url)\n }\n\n return originalPushState(data, _unused, url)\n }\n\n /**\n * Patch replaceState to ensure external changes to the history are reflected in the Next.js Router.\n * Ensures Next.js internal history state is copied to the new history entry.\n * Ensures usePathname and useSearchParams hold the newly provided url.\n */\n window.history.replaceState = function replaceState(\n data: any,\n _unused: string,\n url?: string | URL | null\n ): void {\n // TODO: Warn when Navigation API is available (navigation.navigate() should be used)\n // Avoid a loop when Next.js internals trigger pushState/replaceState\n if (data?.__NA || data?._N) {\n return originalReplaceState(data, _unused, url)\n }\n data = copyNextJsInternalHistoryState(data)\n\n if (url) {\n applyUrlFromHistoryPushReplace(url)\n }\n return originalReplaceState(data, _unused, url)\n }\n\n /**\n * Handle popstate event, this is used to handle back/forward in the browser.\n * By default dispatches ACTION_RESTORE, however if the history entry was not pushed/replaced by app-router it will reload the page.\n * That case can happen when the old router injected the history entry.\n */\n const onPopState = (event: PopStateEvent) => {\n if (!event.state) {\n // TODO-APP: this case only happens when pushState/replaceState was called outside of Next.js. It should probably reload the page in this case.\n return\n }\n\n // This case happens when the history entry was pushed by the `pages` router.\n if (!event.state.__NA) {\n window.location.reload()\n return\n }\n\n // TODO-APP: Ideally the back button should not use startTransition as it should apply the updates synchronously\n // Without startTransition works if the cache is there for this path\n startTransition(() => {\n dispatchTraverseAction(\n window.location.href,\n event.state.__PRIVATE_NEXTJS_INTERNALS_TREE\n )\n })\n }\n\n // Register popstate event to call onPopstate.\n window.addEventListener('popstate', onPopState)\n return () => {\n window.history.pushState = originalPushState\n window.history.replaceState = originalReplaceState\n window.removeEventListener('popstate', onPopState)\n }\n }, [])\n\n const { cache, tree, nextUrl, focusAndScrollRef, previousNextUrl } = state\n\n const matchingHead = useMemo(() => {\n return findHeadInCache(cache, tree[1])\n }, [cache, tree])\n\n // Add memoized pathParams for useParams.\n const pathParams = useMemo(() => {\n return getSelectedParams(tree)\n }, [tree])\n\n // Create instrumented promises for navigation hooks (dev-only)\n // These are specially instrumented promises to show in the Suspense DevTools\n // Promises are cached outside of render to survive suspense retries.\n let instrumentedNavigationPromises: NavigationPromises | null = null\n if (process.env.NODE_ENV !== 'production') {\n const { createRootNavigationPromises } =\n require('./navigation-devtools') as typeof import('./navigation-devtools')\n\n instrumentedNavigationPromises = createRootNavigationPromises(\n tree,\n pathname,\n searchParams,\n pathParams\n )\n }\n\n const layoutRouterContext = useMemo(() => {\n return {\n parentTree: tree,\n parentCacheNode: cache,\n parentSegmentPath: null,\n parentParams: {},\n // This is the \"name\" that shows up in the Suspense DevTools.\n // It represents the root of the app.\n debugNameContext: '/',\n // Root node always has `url`\n // Provided in AppTreeContext to ensure it can be overwritten in layout-router\n url: canonicalUrl,\n // Root segment is always active\n isActive: true,\n }\n }, [tree, cache, canonicalUrl])\n\n const globalLayoutRouterContext = useMemo(() => {\n return {\n tree,\n focusAndScrollRef,\n nextUrl,\n previousNextUrl,\n }\n }, [tree, focusAndScrollRef, nextUrl, previousNextUrl])\n\n let head\n if (matchingHead !== null) {\n // The head is wrapped in an extra component so we can use\n // `useDeferredValue` to swap between the prefetched and final versions of\n // the head. (This is what LayoutRouter does for segment data, too.)\n //\n // The `key` is used to remount the component whenever the head moves to\n // a different segment.\n const [headCacheNode, headKey, headKeyWithoutSearchParams] = matchingHead\n\n head = (\n \n )\n } else {\n head = null\n }\n\n let content = (\n \n {head}\n {/* RootLayoutBoundary enables detection of Suspense boundaries around the root layout.\n When users wrap their layout in , this creates the component stack pattern\n \"Suspense -> RootLayoutBoundary\" which dynamic-rendering.ts uses to allow dynamic rendering. */}\n {cache.rsc}\n \n \n )\n\n if (process.env.NODE_ENV !== 'production') {\n // In development, we apply few error boundaries and hot-reloader:\n // - DevRootHTTPAccessFallbackBoundary: avoid using navigation API like notFound() in root layout\n // - HotReloader:\n // - hot-reload the app when the code changes\n // - render dev overlay\n // - catch runtime errors and display global-error when necessary\n if (typeof window !== 'undefined') {\n const { DevRootHTTPAccessFallbackBoundary } =\n require('./dev-root-http-access-fallback-boundary') as typeof import('./dev-root-http-access-fallback-boundary')\n content = (\n \n {content}\n \n )\n }\n const HotReloader: typeof import('../dev/hot-reloader/app/hot-reloader-app').default =\n (\n require('../dev/hot-reloader/app/hot-reloader-app') as typeof import('../dev/hot-reloader/app/hot-reloader-app')\n ).default\n\n content = (\n \n {content}\n \n )\n } else {\n content = (\n \n {content}\n \n )\n }\n\n return (\n <>\n \n \n \n \n \n \n \n {/* TODO: We should be able to remove this context. useRouter\n should import from app-router-instance instead. It's only\n necessary because useRouter is shared between Pages and\n App Router. We should fork that module, then remove this\n context provider. */}\n \n \n {content}\n \n \n \n \n \n \n \n \n )\n}\n\nexport default function AppRouter({\n actionQueue,\n globalErrorState,\n webSocket,\n staticIndicatorState,\n}: {\n actionQueue: AppRouterActionQueue\n globalErrorState: GlobalErrorState\n webSocket?: WebSocket\n staticIndicatorState?: StaticIndicatorState\n}) {\n useNavFailureHandler()\n\n const router = (\n \n )\n\n // At the very top level, use the default GlobalError component as the final fallback.\n // When the app router itself fails, which means the framework itself fails, we show the default error.\n return (\n \n {router}\n \n )\n}\n\nconst runtimeStyles = new Set()\nlet runtimeStyleChanged = new Set<() => void>()\n\nglobalThis._N_E_STYLE_LOAD = function (href: string) {\n let len = runtimeStyles.size\n runtimeStyles.add(href)\n if (runtimeStyles.size !== len) {\n runtimeStyleChanged.forEach((cb) => cb())\n }\n // TODO figure out how to get a promise here\n // But maybe it's not necessary as react would block rendering until it's loaded\n return Promise.resolve()\n}\n\nfunction RuntimeStyles() {\n const [, forceUpdate] = React.useState(0)\n const renderedStylesSize = runtimeStyles.size\n useEffect(() => {\n const changed = () => forceUpdate((c) => c + 1)\n runtimeStyleChanged.add(changed)\n if (renderedStylesSize !== runtimeStyles.size) {\n changed()\n }\n return () => {\n runtimeStyleChanged.delete(changed)\n }\n }, [renderedStylesSize, forceUpdate])\n\n const dplId = getDeploymentIdQueryOrEmptyString()\n return [...runtimeStyles].map((href, i) => (\n \n ))\n}\n"],"names":["AppRouter","globalMutable","HistoryUpdater","appRouterState","useInsertionEffect","process","env","__NEXT_APP_NAV_FAIL_HANDLING","window","next","__pendingUrl","undefined","tree","pushRef","canonicalUrl","renderedSearch","appHistoryState","historyState","preserveCustomHistoryState","history","state","__NA","__PRIVATE_NEXTJS_INTERNALS_TREE","pendingPush","createHrefFromUrl","URL","location","href","pushState","replaceState","useEffect","pingVisibleLinks","nextUrl","copyNextJsInternalHistoryState","data","currentState","Head","headCacheNode","head","prefetchHead","resolvedPrefetchRsc","useDeferredValue","Router","actionQueue","globalError","webSocket","staticIndicatorState","useActionQueue","searchParams","pathname","useMemo","url","hasBasePath","removeBasePath","NODE_ENV","cache","nd","router","publicAppRouterInstance","handlePageShow","event","persisted","pendingMpaPath","dispatchAppRouterAction","type","ACTION_RESTORE","addEventListener","removeEventListener","handleUnhandledRedirect","error","reason","isRedirectError","preventDefault","getURLFromRedirectError","redirectType","getRedirectTypeFromError","RedirectType","push","replace","mpaNavigation","assign","unresolvedThenable","originalPushState","bind","originalReplaceState","applyUrlFromHistoryPushReplace","startTransition","_unused","_N","onPopState","reload","dispatchTraverseAction","focusAndScrollRef","previousNextUrl","matchingHead","findHeadInCache","pathParams","getSelectedParams","instrumentedNavigationPromises","createRootNavigationPromises","require","layoutRouterContext","parentTree","parentCacheNode","parentSegmentPath","parentParams","debugNameContext","isActive","globalLayoutRouterContext","headKey","headKeyWithoutSearchParams","content","RedirectBoundary","RootLayoutBoundary","rsc","AppRouterAnnouncer","DevRootHTTPAccessFallbackBoundary","HotReloader","default","RootErrorBoundary","errorComponent","errorStyles","RuntimeStyles","NavigationPromisesContext","Provider","value","PathParamsContext","PathnameContext","SearchParamsContext","GlobalLayoutRouterContext","AppRouterContext","LayoutRouterContext","globalErrorState","useNavFailureHandler","DefaultGlobalError","runtimeStyles","Set","runtimeStyleChanged","globalThis","_N_E_STYLE_LOAD","len","size","add","forEach","cb","Promise","resolve","forceUpdate","React","useState","renderedStylesSize","changed","c","delete","dplId","getDeploymentIdQueryOrEmptyString","map","i","link","rel","precedence"],"mappings":"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","ignoreList":[0]}}, - {"offset": {"line": 12288, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/router-reducer/create-initial-router-state.ts"],"sourcesContent":["import type { FlightDataPath } from '../../../shared/lib/app-router-types'\n\nimport { createHrefFromUrl } from './create-href-from-url'\nimport { extractPathFromFlightRouterState } from './compute-changed-path'\n\nimport type { AppRouterState } from './router-reducer-types'\nimport { getFlightDataPartsFromPath } from '../../flight-data-helpers'\nimport { createInitialCacheNodeForHydration } from './ppr-navigations'\n\nexport interface InitialRouterStateParameters {\n navigatedAt: number\n initialCanonicalUrlParts: string[]\n initialRenderedSearch: string\n initialFlightData: FlightDataPath[]\n location: Location | null\n}\n\nexport function createInitialRouterState({\n navigatedAt,\n initialFlightData,\n initialCanonicalUrlParts,\n initialRenderedSearch,\n location,\n}: InitialRouterStateParameters): AppRouterState {\n // When initialized on the server, the canonical URL is provided as an array of parts.\n // This is to ensure that when the RSC payload streamed to the client, crawlers don't interpret it\n // as a URL that should be crawled.\n const initialCanonicalUrl = initialCanonicalUrlParts.join('/')\n\n const normalizedFlightData = getFlightDataPartsFromPath(initialFlightData[0])\n const {\n tree: initialTree,\n seedData: initialSeedData,\n head: initialHead,\n } = normalizedFlightData\n // For the SSR render, seed data should always be available (we only send back a `null` response\n // in the case of a `loading` segment, pre-PPR.)\n\n const canonicalUrl =\n // location.href is read as the initial value for canonicalUrl in the browser\n // This is safe to do as canonicalUrl can't be rendered, it's only used to control the history updates in the useEffect further down in this file.\n location\n ? // window.location does not have the same type as URL but has all the fields createHrefFromUrl needs.\n createHrefFromUrl(location)\n : initialCanonicalUrl\n\n const initialState = {\n tree: initialTree,\n cache: createInitialCacheNodeForHydration(\n navigatedAt,\n initialTree,\n initialSeedData,\n initialHead\n ),\n pushRef: {\n pendingPush: false,\n mpaNavigation: false,\n // First render needs to preserve the previous window.history.state\n // to avoid it being overwritten on navigation back/forward with MPA Navigation.\n preserveCustomHistoryState: true,\n },\n focusAndScrollRef: {\n apply: false,\n onlyHashChange: false,\n hashFragment: null,\n segmentPaths: [],\n },\n canonicalUrl,\n renderedSearch: initialRenderedSearch,\n nextUrl:\n // the || operator is intentional, the pathname can be an empty string\n (extractPathFromFlightRouterState(initialTree) || location?.pathname) ??\n null,\n previousNextUrl: null,\n debugInfo: null,\n }\n\n return initialState\n}\n"],"names":["createInitialRouterState","navigatedAt","initialFlightData","initialCanonicalUrlParts","initialRenderedSearch","location","initialCanonicalUrl","join","normalizedFlightData","getFlightDataPartsFromPath","tree","initialTree","seedData","initialSeedData","head","initialHead","canonicalUrl","createHrefFromUrl","initialState","cache","createInitialCacheNodeForHydration","pushRef","pendingPush","mpaNavigation","preserveCustomHistoryState","focusAndScrollRef","apply","onlyHashChange","hashFragment","segmentPaths","renderedSearch","nextUrl","extractPathFromFlightRouterState","pathname","previousNextUrl","debugInfo"],"mappings":";;;+BAiBgBA,4BAAAA;;;eAAAA;;;mCAfkB;oCACe;mCAGN;gCACQ;AAU5C,SAASA,yBAAyB,EACvCC,WAAW,EACXC,iBAAiB,EACjBC,wBAAwB,EACxBC,qBAAqB,EACrBC,QAAQ,EACqB;IAC7B,sFAAsF;IACtF,kGAAkG;IAClG,mCAAmC;IACnC,MAAMC,sBAAsBH,yBAAyBI,IAAI,CAAC;IAE1D,MAAMC,uBAAuBC,CAAAA,GAAAA,mBAAAA,0BAA0B,EAACP,iBAAiB,CAAC,EAAE;IAC5E,MAAM,EACJQ,MAAMC,WAAW,EACjBC,UAAUC,eAAe,EACzBC,MAAMC,WAAW,EAClB,GAAGP;IACJ,gGAAgG;IAChG,gDAAgD;IAEhD,MAAMQ,eACJ,AACA,6EAD6E,qEACqE;IAClJX,WAEIY,CAAAA,GAAAA,mBAAAA,iBAAiB,EAACZ,YAClBC;IAEN,MAAMY,eAAe;QACnBR,MAAMC;QACNQ,OAAOC,CAAAA,GAAAA,gBAAAA,kCAAkC,EACvCnB,aACAU,aACAE,iBACAE;QAEFM,SAAS;YACPC,aAAa;YACbC,eAAe;YACf,mEAAmE;YACnE,gFAAgF;YAChFC,4BAA4B;QAC9B;QACAC,mBAAmB;YACjBC,OAAO;YACPC,gBAAgB;YAChBC,cAAc;YACdC,cAAc,EAAE;QAClB;QACAb;QACAc,gBAAgB1B;QAChB2B,SAEE,AADA,AACCC,CAAAA,CAAAA,GAAAA,oBAAAA,gCAAgC,EAACrB,WADoC,KACpBN,UAAU4B,QAAO,KACnE;QACFC,iBAAiB;QACjBC,WAAW;IACb;IAEA,OAAOjB;AACT","ignoreList":[0]}}, - {"offset": {"line": 12347, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/app-link-gc.ts"],"sourcesContent":["export function linkGc() {\n // TODO-APP: Remove this logic when Float has GC built-in in development.\n if (process.env.NODE_ENV !== 'production') {\n const callback = (mutationList: MutationRecord[]) => {\n for (const mutation of mutationList) {\n if (mutation.type === 'childList') {\n for (const node of mutation.addedNodes) {\n if (\n 'tagName' in node &&\n (node as HTMLLinkElement).tagName === 'LINK'\n ) {\n const link = node as HTMLLinkElement\n if (link.dataset.precedence?.startsWith('next')) {\n const href = link.getAttribute('href')\n if (href) {\n const [resource, version] = href.split('?v=', 2)\n if (version) {\n const currentOrigin = window.location.origin\n const allLinks = [\n ...document.querySelectorAll(\n 'link[href^=\"' + resource + '\"]'\n ),\n // It's possible that the resource is a full URL or only pathname,\n // so we need to remove the alternative href as well.\n ...document.querySelectorAll(\n 'link[href^=\"' +\n (resource.startsWith(currentOrigin)\n ? resource.slice(currentOrigin.length)\n : currentOrigin + resource) +\n '\"]'\n ),\n ] as HTMLLinkElement[]\n\n for (const otherLink of allLinks) {\n if (otherLink.dataset.precedence?.startsWith('next')) {\n const otherHref = otherLink.getAttribute('href')\n if (otherHref) {\n const [, otherVersion] = otherHref.split('?v=', 2)\n if (!otherVersion || +otherVersion < +version) {\n // Delay the removal of the stylesheet to avoid FOUC\n // caused by `@font-face` rules, as they seem to be\n // a couple of ticks delayed between the old and new\n // styles being swapped even if the font is cached.\n setTimeout(() => {\n otherLink.remove()\n }, 5)\n const preloadLink = document.querySelector(\n `link[rel=\"preload\"][as=\"style\"][href=\"${otherHref}\"]`\n )\n if (preloadLink) {\n preloadLink.remove()\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n\n // Create an observer instance linked to the callback function\n const observer = new MutationObserver(callback)\n observer.observe(document.head, {\n childList: true,\n })\n }\n}\n"],"names":["linkGc","process","env","NODE_ENV","callback","mutationList","mutation","type","node","addedNodes","tagName","link","dataset","precedence","startsWith","href","getAttribute","resource","version","split","currentOrigin","window","location","origin","allLinks","document","querySelectorAll","slice","length","otherLink","otherHref","otherVersion","setTimeout","remove","preloadLink","querySelector","observer","MutationObserver","observe","head","childList"],"mappings":"AAEMC,QAAQC,GAAG,CAACC,QAAQ,KAAK;;;;;+BAFfH,UAAAA;;;eAAAA;;;AAAT,SAASA;IACd,yEAAyE;IACzE,wCAA2C;QACzC,MAAMI,WAAW,CAACC;YAChB,KAAK,MAAMC,YAAYD,aAAc;gBACnC,IAAIC,SAASC,IAAI,KAAK,aAAa;oBACjC,KAAK,MAAMC,QAAQF,SAASG,UAAU,CAAE;wBACtC,IACE,aAAaD,QACZA,KAAyBE,OAAO,KAAK,QACtC;4BACA,MAAMC,OAAOH;4BACb,IAAIG,KAAKC,OAAO,CAACC,UAAU,EAAEC,WAAW,SAAS;gCAC/C,MAAMC,OAAOJ,KAAKK,YAAY,CAAC;gCAC/B,IAAID,MAAM;oCACR,MAAM,CAACE,UAAUC,QAAQ,GAAGH,KAAKI,KAAK,CAAC,OAAO;oCAC9C,IAAID,SAAS;wCACX,MAAME,gBAAgBC,OAAOC,QAAQ,CAACC,MAAM;wCAC5C,MAAMC,WAAW;+CACZC,SAASC,gBAAgB,CAC1B,iBAAiBT,WAAW;4CAE9B,kEAAkE;4CAClE,qDAAqD;+CAClDQ,SAASC,gBAAgB,CAC1B,iBACGT,CAAAA,SAASH,UAAU,CAACM,iBACjBH,SAASU,KAAK,CAACP,cAAcQ,MAAM,IACnCR,gBAAgBH,QAAO,IAC3B;yCAEL;wCAED,KAAK,MAAMY,aAAaL,SAAU;4CAChC,IAAIK,UAAUjB,OAAO,CAACC,UAAU,EAAEC,WAAW,SAAS;gDACpD,MAAMgB,YAAYD,UAAUb,YAAY,CAAC;gDACzC,IAAIc,WAAW;oDACb,MAAM,GAAGC,aAAa,GAAGD,UAAUX,KAAK,CAAC,OAAO;oDAChD,IAAI,CAACY,gBAAgB,CAACA,eAAe,CAACb,SAAS;wDAC7C,oDAAoD;wDACpD,mDAAmD;wDACnD,oDAAoD;wDACpD,mDAAmD;wDACnDc,WAAW;4DACTH,UAAUI,MAAM;wDAClB,GAAG;wDACH,MAAMC,cAAcT,SAASU,aAAa,CACxC,CAAC,sCAAsC,EAAEL,UAAU,EAAE,CAAC;wDAExD,IAAII,aAAa;4DACfA,YAAYD,MAAM;wDACpB;oDACF;gDACF;4CACF;wCACF;oCACF;gCACF;4BACF;wBACF;oBACF;gBACF;YACF;QACF;QAEA,8DAA8D;QAC9D,MAAMG,WAAW,IAAIC,iBAAiBjC;QACtCgC,SAASE,OAAO,CAACb,SAASc,IAAI,EAAE;YAC9BC,WAAW;QACb;IACF;AACF","ignoreList":[0]}}, - {"offset": {"line": 12426, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/app-index.tsx"],"sourcesContent":["import './app-globals'\nimport ReactDOMClient from 'react-dom/client'\nimport React from 'react'\n// TODO: Explicitly import from client.browser\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport {\n createFromReadableStream as createFromReadableStreamBrowser,\n createFromFetch as createFromFetchBrowser,\n} from 'react-server-dom-webpack/client'\nimport { HeadManagerContext } from '../shared/lib/head-manager-context.shared-runtime'\nimport { onRecoverableError } from './react-client-callbacks/on-recoverable-error'\nimport {\n onCaughtError,\n onUncaughtError,\n} from './react-client-callbacks/error-boundary-callbacks'\nimport { callServer } from './app-call-server'\nimport { findSourceMapURL } from './app-find-source-map-url'\nimport {\n type AppRouterActionQueue,\n createMutableActionQueue,\n} from './components/app-router-instance'\nimport AppRouter from './components/app-router'\nimport type { InitialRSCPayload } from '../shared/lib/app-router-types'\nimport { createInitialRouterState } from './components/router-reducer/create-initial-router-state'\nimport { MissingSlotContext } from '../shared/lib/app-router-context.shared-runtime'\nimport { setAppBuildId } from './app-build-id'\nimport type { StaticIndicatorState } from './dev/hot-reloader/app/hot-reloader-app'\nimport { createInitialRSCPayloadFromFallbackPrerender } from './flight-data-helpers'\n\n/// \n\nconst createFromReadableStream =\n createFromReadableStreamBrowser as (typeof import('react-server-dom-webpack/client.browser'))['createFromReadableStream']\nconst createFromFetch =\n createFromFetchBrowser as (typeof import('react-server-dom-webpack/client.browser'))['createFromFetch']\n\nconst appElement: HTMLElement | Document = document\n\nconst encoder = new TextEncoder()\n\nlet initialServerDataBuffer: (string | Uint8Array)[] | undefined = undefined\nlet initialServerDataWriter: ReadableStreamDefaultController | undefined =\n undefined\nlet initialServerDataLoaded = false\nlet initialServerDataFlushed = false\n\nlet initialFormStateData: null | any = null\n\ntype FlightSegment =\n | [isBootStrap: 0]\n | [isNotBootstrap: 1, responsePartial: string]\n | [isFormState: 2, formState: any]\n | [isBinary: 3, responseBase64Partial: string]\n\ntype NextFlight = Omit, 'push'> & {\n push: (seg: FlightSegment) => void\n}\n\ndeclare global {\n // If you're working in a browser environment\n interface Window {\n /**\n * request ID, dev-only\n */\n __next_r?: string\n __next_f: NextFlight\n }\n}\n\nfunction nextServerDataCallback(seg: FlightSegment): void {\n if (seg[0] === 0) {\n initialServerDataBuffer = []\n } else if (seg[0] === 1) {\n if (!initialServerDataBuffer)\n throw new Error('Unexpected server data: missing bootstrap script.')\n\n if (initialServerDataWriter) {\n initialServerDataWriter.enqueue(encoder.encode(seg[1]))\n } else {\n initialServerDataBuffer.push(seg[1])\n }\n } else if (seg[0] === 2) {\n initialFormStateData = seg[1]\n } else if (seg[0] === 3) {\n if (!initialServerDataBuffer)\n throw new Error('Unexpected server data: missing bootstrap script.')\n\n // Decode the base64 string back to binary data.\n const binaryString = atob(seg[1])\n const decodedChunk = new Uint8Array(binaryString.length)\n for (var i = 0; i < binaryString.length; i++) {\n decodedChunk[i] = binaryString.charCodeAt(i)\n }\n\n if (initialServerDataWriter) {\n initialServerDataWriter.enqueue(decodedChunk)\n } else {\n initialServerDataBuffer.push(decodedChunk)\n }\n }\n}\n\nfunction isStreamErrorOrUnfinished(ctr: ReadableStreamDefaultController) {\n // If `desiredSize` is null, it means the stream is closed or errored. If it is lower than 0, the stream is still unfinished.\n return ctr.desiredSize === null || ctr.desiredSize < 0\n}\n\n// There might be race conditions between `nextServerDataRegisterWriter` and\n// `DOMContentLoaded`. The former will be called when React starts to hydrate\n// the root, the latter will be called when the DOM is fully loaded.\n// For streaming, the former is called first due to partial hydration.\n// For non-streaming, the latter can be called first.\n// Hence, we use two variables `initialServerDataLoaded` and\n// `initialServerDataFlushed` to make sure the writer will be closed and\n// `initialServerDataBuffer` will be cleared in the right time.\nfunction nextServerDataRegisterWriter(ctr: ReadableStreamDefaultController) {\n if (initialServerDataBuffer) {\n initialServerDataBuffer.forEach((val) => {\n ctr.enqueue(typeof val === 'string' ? encoder.encode(val) : val)\n })\n if (initialServerDataLoaded && !initialServerDataFlushed) {\n if (isStreamErrorOrUnfinished(ctr)) {\n ctr.error(\n new Error(\n 'The connection to the page was unexpectedly closed, possibly due to the stop button being clicked, loss of Wi-Fi, or an unstable internet connection.'\n )\n )\n } else {\n ctr.close()\n }\n initialServerDataFlushed = true\n initialServerDataBuffer = undefined\n }\n }\n\n initialServerDataWriter = ctr\n}\n\n// When `DOMContentLoaded`, we can close all pending writers to finish hydration.\nconst DOMContentLoaded = function () {\n if (initialServerDataWriter && !initialServerDataFlushed) {\n initialServerDataWriter.close()\n initialServerDataFlushed = true\n initialServerDataBuffer = undefined\n }\n initialServerDataLoaded = true\n}\n\n// It's possible that the DOM is already loaded.\nif (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', DOMContentLoaded, false)\n} else {\n // Delayed in marco task to ensure it's executed later than hydration\n setTimeout(DOMContentLoaded)\n}\n\nconst nextServerDataLoadingGlobal = (self.__next_f = self.__next_f || [])\n\n// Consume all buffered chunks and clear the global data array right after to release memory.\n// Otherwise it will be retained indefinitely.\nnextServerDataLoadingGlobal.forEach(nextServerDataCallback)\nnextServerDataLoadingGlobal.length = 0\n\n// Patch its push method so subsequent chunks are handled (but not actually pushed to the array).\nnextServerDataLoadingGlobal.push = nextServerDataCallback\n\nconst readable = new ReadableStream({\n start(controller) {\n nextServerDataRegisterWriter(controller)\n },\n})\nif (process.env.NODE_ENV !== 'production') {\n // @ts-expect-error\n readable.name = 'hydration'\n}\n\nlet debugChannel:\n | { readable?: ReadableStream; writable?: WritableStream }\n | undefined\n\nif (\n process.env.NODE_ENV !== 'production' &&\n process.env.__NEXT_REACT_DEBUG_CHANNEL &&\n typeof window !== 'undefined'\n) {\n const { createDebugChannel } =\n require('./dev/debug-channel') as typeof import('./dev/debug-channel')\n\n debugChannel = createDebugChannel(undefined)\n}\n\nconst clientResumeFetch: Promise | undefined =\n // @ts-expect-error\n window.__NEXT_CLIENT_RESUME\n\nlet initialServerResponse: Promise\nif (clientResumeFetch) {\n initialServerResponse = Promise.resolve(\n createFromFetch(clientResumeFetch, {\n callServer,\n findSourceMapURL,\n debugChannel,\n })\n ).then(async (fallbackInitialRSCPayload) =>\n createInitialRSCPayloadFromFallbackPrerender(\n await clientResumeFetch,\n fallbackInitialRSCPayload\n )\n )\n} else {\n initialServerResponse = createFromReadableStream(\n readable,\n {\n callServer,\n findSourceMapURL,\n debugChannel,\n startTime: 0,\n }\n )\n}\n\nfunction ServerRoot({\n initialRSCPayload,\n actionQueue,\n webSocket,\n staticIndicatorState,\n}: {\n initialRSCPayload: InitialRSCPayload\n actionQueue: AppRouterActionQueue\n webSocket: WebSocket | undefined\n staticIndicatorState: StaticIndicatorState | undefined\n}): React.ReactNode {\n const router = (\n \n )\n\n if (process.env.NODE_ENV === 'development' && initialRSCPayload.m) {\n // We provide missing slot information in a context provider only during development\n // as we log some additional information about the missing slots in the console.\n return (\n \n {router}\n \n )\n }\n\n return router\n}\n\nconst StrictModeIfEnabled = process.env.__NEXT_STRICT_MODE_APP\n ? React.StrictMode\n : React.Fragment\n\nfunction Root({ children }: React.PropsWithChildren<{}>) {\n if (process.env.__NEXT_TEST_MODE) {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n React.useEffect(() => {\n window.__NEXT_HYDRATED = true\n window.__NEXT_HYDRATED_AT = performance.now()\n window.__NEXT_HYDRATED_CB?.()\n }, [])\n }\n\n return children\n}\n\nconst enableTransitionIndicator = process.env.__NEXT_TRANSITION_INDICATOR\n\nfunction noDefaultTransitionIndicator() {\n return () => {}\n}\n\nconst reactRootOptions: ReactDOMClient.RootOptions = {\n onDefaultTransitionIndicator: enableTransitionIndicator\n ? // TODO: Compose default with user-configureable (e.g. nprogress)\n undefined\n : noDefaultTransitionIndicator,\n onRecoverableError,\n onCaughtError,\n onUncaughtError,\n}\n\nexport type ClientInstrumentationHooks = {\n onRouterTransitionStart?: (\n url: string,\n navigationType: 'push' | 'replace' | 'traverse'\n ) => void\n}\n\nexport async function hydrate(\n instrumentationHooks: ClientInstrumentationHooks | null,\n assetPrefix: string\n) {\n let staticIndicatorState: StaticIndicatorState | undefined\n let webSocket: WebSocket | undefined\n\n if (process.env.NODE_ENV !== 'production') {\n const { createWebSocket } =\n require('./dev/hot-reloader/app/web-socket') as typeof import('./dev/hot-reloader/app/web-socket')\n\n staticIndicatorState = { pathname: null, appIsrManifest: null }\n webSocket = createWebSocket(assetPrefix, staticIndicatorState)\n }\n const initialRSCPayload = await initialServerResponse\n // setAppBuildId should be called only once, during JS initialization\n // and before any components have hydrated.\n setAppBuildId(initialRSCPayload.b)\n\n const initialTimestamp = Date.now()\n const actionQueue: AppRouterActionQueue = createMutableActionQueue(\n createInitialRouterState({\n navigatedAt: initialTimestamp,\n initialFlightData: initialRSCPayload.f,\n initialCanonicalUrlParts: initialRSCPayload.c,\n initialRenderedSearch: initialRSCPayload.q,\n location: window.location,\n }),\n instrumentationHooks\n )\n\n const reactEl = (\n \n \n \n \n \n \n \n )\n\n if (document.documentElement.id === '__next_error__') {\n let element = reactEl\n // Server rendering failed, fall back to client-side rendering\n if (process.env.NODE_ENV !== 'production') {\n const { RootLevelDevOverlayElement } =\n require('../next-devtools/userspace/app/client-entry') as typeof import('../next-devtools/userspace/app/client-entry')\n\n // Note this won't cause hydration mismatch because we are doing CSR w/o hydration\n element = (\n {element}\n )\n }\n\n ReactDOMClient.createRoot(appElement, reactRootOptions).render(element)\n } else {\n React.startTransition(() => {\n ReactDOMClient.hydrateRoot(appElement, reactEl, {\n ...reactRootOptions,\n formState: initialFormStateData,\n })\n })\n }\n\n // TODO-APP: Remove this logic when Float has GC built-in in development.\n if (process.env.NODE_ENV !== 'production') {\n const { linkGc } =\n require('./app-link-gc') as typeof import('./app-link-gc')\n linkGc()\n }\n}\n"],"names":["hydrate","createFromReadableStream","createFromReadableStreamBrowser","createFromFetch","createFromFetchBrowser","appElement","document","encoder","TextEncoder","initialServerDataBuffer","undefined","initialServerDataWriter","initialServerDataLoaded","initialServerDataFlushed","initialFormStateData","nextServerDataCallback","seg","Error","enqueue","encode","push","binaryString","atob","decodedChunk","Uint8Array","length","i","charCodeAt","isStreamErrorOrUnfinished","ctr","desiredSize","nextServerDataRegisterWriter","forEach","val","error","close","DOMContentLoaded","readyState","addEventListener","setTimeout","nextServerDataLoadingGlobal","self","__next_f","readable","ReadableStream","start","controller","process","env","NODE_ENV","name","debugChannel","__NEXT_REACT_DEBUG_CHANNEL","window","createDebugChannel","require","clientResumeFetch","__NEXT_CLIENT_RESUME","initialServerResponse","Promise","resolve","callServer","findSourceMapURL","then","fallbackInitialRSCPayload","createInitialRSCPayloadFromFallbackPrerender","startTime","ServerRoot","initialRSCPayload","actionQueue","webSocket","staticIndicatorState","router","AppRouter","globalErrorState","G","m","MissingSlotContext","value","StrictModeIfEnabled","__NEXT_STRICT_MODE_APP","React","StrictMode","Fragment","Root","children","__NEXT_TEST_MODE","useEffect","__NEXT_HYDRATED","__NEXT_HYDRATED_AT","performance","now","__NEXT_HYDRATED_CB","enableTransitionIndicator","__NEXT_TRANSITION_INDICATOR","noDefaultTransitionIndicator","reactRootOptions","onDefaultTransitionIndicator","onRecoverableError","onCaughtError","onUncaughtError","instrumentationHooks","assetPrefix","createWebSocket","pathname","appIsrManifest","setAppBuildId","b","initialTimestamp","Date","createMutableActionQueue","createInitialRouterState","navigatedAt","initialFlightData","f","initialCanonicalUrlParts","c","initialRenderedSearch","q","location","reactEl","HeadManagerContext","Provider","appDir","documentElement","id","element","RootLevelDevOverlayElement","ReactDOMClient","createRoot","render","startTransition","hydrateRoot","formState","linkGc"],"mappings":"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","ignoreList":[0]}}, - {"offset": {"line": 12690, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/app-next-turbopack.ts"],"sourcesContent":["import { appBootstrap } from './app-bootstrap'\nimport { isRecoverableError } from './react-client-callbacks/on-recoverable-error'\n\nwindow.next.turbopack = true\n;(self as any).__webpack_hash__ = ''\n\n// eslint-disable-next-line @next/internal/typechecked-require\nconst instrumentationHooks = require('../lib/require-instrumentation-client')\n\nappBootstrap((assetPrefix) => {\n const { hydrate } = require('./app-index') as typeof import('./app-index')\n try {\n hydrate(instrumentationHooks, assetPrefix)\n } finally {\n if (process.env.NODE_ENV !== 'production') {\n const enableCacheIndicator = process.env.__NEXT_CACHE_COMPONENTS\n const { getOwnerStack } =\n require('../next-devtools/userspace/app/errors/stitched-error') as typeof import('../next-devtools/userspace/app/errors/stitched-error')\n const { renderAppDevOverlay } =\n require('next/dist/compiled/next-devtools') as typeof import('next/dist/compiled/next-devtools')\n renderAppDevOverlay(\n getOwnerStack,\n isRecoverableError,\n enableCacheIndicator\n )\n }\n }\n})\n"],"names":["window","next","turbopack","self","__webpack_hash__","instrumentationHooks","require","appBootstrap","assetPrefix","hydrate","process","env","NODE_ENV","enableCacheIndicator","__NEXT_CACHE_COMPONENTS","getOwnerStack","renderAppDevOverlay","isRecoverableError"],"mappings":"AAcQU,QAAQC,GAAG,CAACC,QAAQ,KAAK;;;;;8BAdJ;oCACM;AAEnCZ,OAAOC,IAAI,CAACC,SAAS,GAAG;AACtBC,KAAaC,gBAAgB,GAAG;AAElC,8DAA8D;AAC9D,MAAMC,uBAAuBC,QAAQ;AAErCC,CAAAA,GAAAA,cAAAA,YAAY,EAAC,CAACC;IACZ,MAAM,EAAEC,OAAO,EAAE,GAAGH,QAAQ;IAC5B,IAAI;QACFG,QAAQJ,sBAAsBG;IAChC,SAAU;QACR,wCAA2C;YACzC,MAAMK,uBAAuBH,QAAQC,GAAG,CAACG,uBAAuB;YAChE,MAAM,EAAEC,aAAa,EAAE,GACrBT,QAAQ;YACV,MAAM,EAAEU,mBAAmB,EAAE,GAC3BV,QAAQ;YACVU,oBACED,eACAE,oBAAAA,kBAAkB,EAClBJ;QAEJ;IACF;AACF","ignoreList":[0]}}] + {"offset": {"line": 5838, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/normalize-trailing-slash.ts"],"sourcesContent":["import { removeTrailingSlash } from '../shared/lib/router/utils/remove-trailing-slash'\nimport { parsePath } from '../shared/lib/router/utils/parse-path'\n\n/**\n * Normalizes the trailing slash of a path according to the `trailingSlash` option\n * in `next.config.js`.\n */\nexport const normalizePathTrailingSlash = (path: string) => {\n if (!path.startsWith('/') || process.env.__NEXT_MANUAL_TRAILING_SLASH) {\n return path\n }\n\n const { pathname, query, hash } = parsePath(path)\n if (process.env.__NEXT_TRAILING_SLASH) {\n if (/\\.[^/]+\\/?$/.test(pathname)) {\n return `${removeTrailingSlash(pathname)}${query}${hash}`\n } else if (pathname.endsWith('/')) {\n return `${pathname}${query}${hash}`\n } else {\n return `${pathname}/${query}${hash}`\n }\n }\n\n return `${removeTrailingSlash(pathname)}${query}${hash}`\n}\n"],"names":["normalizePathTrailingSlash","path","startsWith","process","env","__NEXT_MANUAL_TRAILING_SLASH","pathname","query","hash","parsePath","__NEXT_TRAILING_SLASH","test","removeTrailingSlash","endsWith"],"mappings":"AAQ+BG,QAAQC,GAAG,CAACC,4BAA4B;;;;;+BAD1DL,8BAAAA;;;eAAAA;;;qCAPuB;2BACV;AAMnB,MAAMA,6BAA6B,CAACC;IACzC,IAAI,CAACA,KAAKC,UAAU,CAAC,kDAAkD;QACrE,OAAOD;IACT;IAEA,MAAM,EAAEK,QAAQ,EAAEC,KAAK,EAAEC,IAAI,EAAE,GAAGC,CAAAA,GAAAA,WAAAA,SAAS,EAACR;IAC5C,IAAIE,QAAQC,GAAG,CAACM,qBAAqB,GAAE;QACrC,IAAI,cAAcC,IAAI,CAACL,WAAW;YAChC,OAAO,GAAGM,CAAAA,GAAAA,qBAAAA,mBAAmB,EAACN,YAAYC,QAAQC,MAAM;QAC1D,OAAO,IAAIF,SAASO,QAAQ,CAAC,MAAM;YACjC,OAAO,GAAGP,WAAWC,QAAQC,MAAM;QACrC,OAAO;YACL,OAAO,GAAGF,SAAS,CAAC,EAAEC,QAAQC,MAAM;QACtC;IACF;;;AAGF","ignoreList":[0]}}, + {"offset": {"line": 5879, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/add-base-path.ts"],"sourcesContent":["import { addPathPrefix } from '../shared/lib/router/utils/add-path-prefix'\nimport { normalizePathTrailingSlash } from './normalize-trailing-slash'\n\nconst basePath = (process.env.__NEXT_ROUTER_BASEPATH as string) || ''\n\nexport function addBasePath(path: string, required?: boolean): string {\n return normalizePathTrailingSlash(\n process.env.__NEXT_MANUAL_CLIENT_BASE_PATH && !required\n ? path\n : addPathPrefix(path, basePath)\n )\n}\n"],"names":["addBasePath","basePath","process","env","__NEXT_ROUTER_BASEPATH","path","required","normalizePathTrailingSlash","__NEXT_MANUAL_CLIENT_BASE_PATH","addPathPrefix"],"mappings":"AAGkBE,QAAQC,GAAG,CAACC,sBAAsB;;;;;+BAEpCJ,eAAAA;;;eAAAA;;;+BALc;wCACa;AAE3C,MAAMC,mDAA6D;AAE5D,SAASD,YAAYK,IAAY,EAAEC,QAAkB;IAC1D,OAAOC,CAAAA,GAAAA,wBAAAA,0BAA0B,EAC/BL,QAAQC,GAAG,CAACK,0BACRH,IADsC,IAAI,CAACC,iBAE3CG,CAAAA,GAAAA,eAAAA,aAAa,EAACJ,MAAMJ;AAE5B","ignoreList":[0]}}, + {"offset": {"line": 5907, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/app-router-utils.ts"],"sourcesContent":["import { isBot } from '../../shared/lib/router/utils/is-bot'\nimport { addBasePath } from '../add-base-path'\n\nexport function isExternalURL(url: URL) {\n return url.origin !== window.location.origin\n}\n\n/**\n * Given a link href, constructs the URL that should be prefetched. Returns null\n * in cases where prefetching should be disabled, like external URLs, or\n * during development.\n * @param href The href passed to , router.prefetch(), or similar\n * @returns A URL object to prefetch, or null if prefetching should be disabled\n */\nexport function createPrefetchURL(href: string): URL | null {\n // Don't prefetch for bots as they don't navigate.\n if (isBot(window.navigator.userAgent)) {\n return null\n }\n\n let url: URL\n try {\n url = new URL(addBasePath(href), window.location.href)\n } catch (_) {\n // TODO: Does this need to throw or can we just console.error instead? Does\n // anyone rely on this throwing? (Seems unlikely.)\n throw new Error(\n `Cannot prefetch '${href}' because it cannot be converted to a URL.`\n )\n }\n\n // Don't prefetch during development (improves compilation performance)\n if (process.env.NODE_ENV === 'development') {\n return null\n }\n\n // External urls can't be prefetched in the same way.\n if (isExternalURL(url)) {\n return null\n }\n\n return url\n}\n"],"names":["createPrefetchURL","isExternalURL","url","origin","window","location","href","isBot","navigator","userAgent","URL","addBasePath","_","Error","process","env","NODE_ENV"],"mappings":"AAgCMc,QAAQC,GAAG,CAACC,QAAQ,KAAK;;;;;;;;;;;;;;;;IAlBfhB,iBAAiB,EAAA;eAAjBA;;IAXAC,aAAa,EAAA;eAAbA;;;uBAHM;6BACM;AAErB,SAASA,cAAcC,GAAQ;IACpC,OAAOA,IAAIC,MAAM,KAAKC,OAAOC,QAAQ,CAACF,MAAM;AAC9C;AASO,SAASH,kBAAkBM,IAAY;IAC5C,kDAAkD;IAClD,IAAIC,CAAAA,GAAAA,OAAAA,KAAK,EAACH,OAAOI,SAAS,CAACC,SAAS,GAAG;QACrC,OAAO;IACT;IAEA,IAAIP;IACJ,IAAI;QACFA,MAAM,IAAIQ,IAAIC,CAAAA,GAAAA,aAAAA,WAAW,EAACL,OAAOF,OAAOC,QAAQ,CAACC,IAAI;IACvD,EAAE,OAAOM,GAAG;QACV,2EAA2E;QAC3E,kDAAkD;QAClD,MAAM,OAAA,cAEL,CAFK,IAAIC,MACR,CAAC,iBAAiB,EAAEP,KAAK,0CAA0C,CAAC,GADhE,qBAAA;mBAAA;wBAAA;0BAAA;QAEN;IACF;IAEA,uEAAuE;IACvE,wCAA4C;QAC1C,OAAO;IACT;;;AAQF","ignoreList":[0]}}, + {"offset": {"line": 5970, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/links.ts"],"sourcesContent":["import type { FlightRouterState } from '../../shared/lib/app-router-types'\nimport type { AppRouterInstance } from '../../shared/lib/app-router-context.shared-runtime'\nimport {\n FetchStrategy,\n type PrefetchTaskFetchStrategy,\n PrefetchPriority,\n} from './segment-cache/types'\nimport { createCacheKey } from './segment-cache/cache-key'\nimport {\n type PrefetchTask,\n schedulePrefetchTask as scheduleSegmentPrefetchTask,\n cancelPrefetchTask,\n reschedulePrefetchTask,\n isPrefetchTaskDirty,\n} from './segment-cache/scheduler'\nimport { startTransition } from 'react'\n\ntype LinkElement = HTMLAnchorElement | SVGAElement\n\ntype Element = LinkElement | HTMLFormElement\n\n// Properties that are shared between Link and Form instances. We use the same\n// shape for both to prevent a polymorphic de-opt in the VM.\ntype LinkOrFormInstanceShared = {\n router: AppRouterInstance\n fetchStrategy: PrefetchTaskFetchStrategy\n\n isVisible: boolean\n\n // The most recently initiated prefetch task. It may or may not have\n // already completed. The same prefetch task object can be reused across\n // multiple prefetches of the same link.\n prefetchTask: PrefetchTask | null\n}\n\nexport type FormInstance = LinkOrFormInstanceShared & {\n prefetchHref: string\n setOptimisticLinkStatus: null\n}\n\ntype PrefetchableLinkInstance = LinkOrFormInstanceShared & {\n prefetchHref: string\n setOptimisticLinkStatus: (status: { pending: boolean }) => void\n}\n\ntype NonPrefetchableLinkInstance = LinkOrFormInstanceShared & {\n prefetchHref: null\n setOptimisticLinkStatus: (status: { pending: boolean }) => void\n}\n\ntype PrefetchableInstance = PrefetchableLinkInstance | FormInstance\n\nexport type LinkInstance =\n | PrefetchableLinkInstance\n | NonPrefetchableLinkInstance\n\n// Tracks the most recently navigated link instance. When null, indicates\n// the current navigation was not initiated by a link click.\nlet linkForMostRecentNavigation: LinkInstance | null = null\n\n// Status object indicating link is pending\nexport const PENDING_LINK_STATUS = { pending: true }\n\n// Status object indicating link is idle\nexport const IDLE_LINK_STATUS = { pending: false }\n\n// Updates the loading state when navigating between links\n// - Resets the previous link's loading state\n// - Sets the new link's loading state\n// - Updates tracking of current navigation\nexport function setLinkForCurrentNavigation(link: LinkInstance | null) {\n startTransition(() => {\n linkForMostRecentNavigation?.setOptimisticLinkStatus(IDLE_LINK_STATUS)\n link?.setOptimisticLinkStatus(PENDING_LINK_STATUS)\n linkForMostRecentNavigation = link\n })\n}\n\n// Unmounts the current link instance from navigation tracking\nexport function unmountLinkForCurrentNavigation(link: LinkInstance) {\n if (linkForMostRecentNavigation === link) {\n linkForMostRecentNavigation = null\n }\n}\n\n// Use a WeakMap to associate a Link instance with its DOM element. This is\n// used by the IntersectionObserver to track the link's visibility.\nconst prefetchable:\n | WeakMap\n | Map =\n typeof WeakMap === 'function' ? new WeakMap() : new Map()\n\n// A Set of the currently visible links. We re-prefetch visible links after a\n// cache invalidation, or when the current URL changes. It's a separate data\n// structure from the WeakMap above because only the visible links need to\n// be enumerated.\nconst prefetchableAndVisible: Set = new Set()\n\n// A single IntersectionObserver instance shared by all components.\nconst observer: IntersectionObserver | null =\n typeof IntersectionObserver === 'function'\n ? new IntersectionObserver(handleIntersect, {\n rootMargin: '200px',\n })\n : null\n\nfunction observeVisibility(element: Element, instance: PrefetchableInstance) {\n const existingInstance = prefetchable.get(element)\n if (existingInstance !== undefined) {\n // This shouldn't happen because each component should have its own\n // anchor tag instance, but it's defensive coding to avoid a memory leak in\n // case there's a logical error somewhere else.\n unmountPrefetchableInstance(element)\n }\n // Only track prefetchable links that have a valid prefetch URL\n prefetchable.set(element, instance)\n if (observer !== null) {\n observer.observe(element)\n }\n}\n\nfunction coercePrefetchableUrl(href: string): URL | null {\n if (typeof window !== 'undefined') {\n const { createPrefetchURL } =\n require('./app-router-utils') as typeof import('./app-router-utils')\n\n try {\n return createPrefetchURL(href)\n } catch {\n // createPrefetchURL sometimes throws an error if an invalid URL is\n // provided, though I'm not sure if it's actually necessary.\n // TODO: Consider removing the throw from the inner function, or change it\n // to reportError. Or maybe the error isn't even necessary for automatic\n // prefetches, just navigations.\n const reportErrorFn =\n typeof reportError === 'function' ? reportError : console.error\n reportErrorFn(\n `Cannot prefetch '${href}' because it cannot be converted to a URL.`\n )\n return null\n }\n } else {\n return null\n }\n}\n\nexport function mountLinkInstance(\n element: LinkElement,\n href: string,\n router: AppRouterInstance,\n fetchStrategy: PrefetchTaskFetchStrategy,\n prefetchEnabled: boolean,\n setOptimisticLinkStatus: (status: { pending: boolean }) => void\n): LinkInstance {\n if (prefetchEnabled) {\n const prefetchURL = coercePrefetchableUrl(href)\n if (prefetchURL !== null) {\n const instance: PrefetchableLinkInstance = {\n router,\n fetchStrategy,\n isVisible: false,\n prefetchTask: null,\n prefetchHref: prefetchURL.href,\n setOptimisticLinkStatus,\n }\n // We only observe the link's visibility if it's prefetchable. For\n // example, this excludes links to external URLs.\n observeVisibility(element, instance)\n return instance\n }\n }\n // If the link is not prefetchable, we still create an instance so we can\n // track its optimistic state (i.e. useLinkStatus).\n const instance: NonPrefetchableLinkInstance = {\n router,\n fetchStrategy,\n isVisible: false,\n prefetchTask: null,\n prefetchHref: null,\n setOptimisticLinkStatus,\n }\n return instance\n}\n\nexport function mountFormInstance(\n element: HTMLFormElement,\n href: string,\n router: AppRouterInstance,\n fetchStrategy: PrefetchTaskFetchStrategy\n): void {\n const prefetchURL = coercePrefetchableUrl(href)\n if (prefetchURL === null) {\n // This href is not prefetchable, so we don't track it.\n // TODO: We currently observe/unobserve a form every time its href changes.\n // For Links, this isn't a big deal because the href doesn't usually change,\n // but for forms it's extremely common. We should optimize this.\n return\n }\n const instance: FormInstance = {\n router,\n fetchStrategy,\n isVisible: false,\n prefetchTask: null,\n prefetchHref: prefetchURL.href,\n setOptimisticLinkStatus: null,\n }\n observeVisibility(element, instance)\n}\n\nexport function unmountPrefetchableInstance(element: Element) {\n const instance = prefetchable.get(element)\n if (instance !== undefined) {\n prefetchable.delete(element)\n prefetchableAndVisible.delete(instance)\n const prefetchTask = instance.prefetchTask\n if (prefetchTask !== null) {\n cancelPrefetchTask(prefetchTask)\n }\n }\n if (observer !== null) {\n observer.unobserve(element)\n }\n}\n\nfunction handleIntersect(entries: Array) {\n for (const entry of entries) {\n // Some extremely old browsers or polyfills don't reliably support\n // isIntersecting so we check intersectionRatio instead. (Do we care? Not\n // really. But whatever this is fine.)\n const isVisible = entry.intersectionRatio > 0\n onLinkVisibilityChanged(entry.target as HTMLAnchorElement, isVisible)\n }\n}\n\nexport function onLinkVisibilityChanged(element: Element, isVisible: boolean) {\n if (process.env.NODE_ENV !== 'production') {\n // Prefetching on viewport is disabled in development for performance\n // reasons, because it requires compiling the target page.\n // TODO: Investigate re-enabling this.\n return\n }\n\n const instance = prefetchable.get(element)\n if (instance === undefined) {\n return\n }\n\n instance.isVisible = isVisible\n if (isVisible) {\n prefetchableAndVisible.add(instance)\n } else {\n prefetchableAndVisible.delete(instance)\n }\n rescheduleLinkPrefetch(instance, PrefetchPriority.Default)\n}\n\nexport function onNavigationIntent(\n element: HTMLAnchorElement | SVGAElement,\n unstable_upgradeToDynamicPrefetch: boolean\n) {\n const instance = prefetchable.get(element)\n if (instance === undefined) {\n return\n }\n // Prefetch the link on hover/touchstart.\n if (instance !== undefined) {\n if (\n process.env.__NEXT_DYNAMIC_ON_HOVER &&\n unstable_upgradeToDynamicPrefetch\n ) {\n // Switch to a full prefetch\n instance.fetchStrategy = FetchStrategy.Full\n }\n rescheduleLinkPrefetch(instance, PrefetchPriority.Intent)\n }\n}\n\nfunction rescheduleLinkPrefetch(\n instance: PrefetchableInstance,\n priority: PrefetchPriority.Default | PrefetchPriority.Intent\n) {\n // Ensures that app-router-instance is not compiled in the server bundle\n if (typeof window !== 'undefined') {\n const existingPrefetchTask = instance.prefetchTask\n\n if (!instance.isVisible) {\n // Cancel any in-progress prefetch task. (If it already finished then this\n // is a no-op.)\n if (existingPrefetchTask !== null) {\n cancelPrefetchTask(existingPrefetchTask)\n }\n // We don't need to reset the prefetchTask to null upon cancellation; an\n // old task object can be rescheduled with reschedulePrefetchTask. This is a\n // micro-optimization but also makes the code simpler (don't need to\n // worry about whether an old task object is stale).\n return\n }\n\n const { getCurrentAppRouterState } =\n require('./app-router-instance') as typeof import('./app-router-instance')\n\n const appRouterState = getCurrentAppRouterState()\n if (appRouterState !== null) {\n const treeAtTimeOfPrefetch = appRouterState.tree\n if (existingPrefetchTask === null) {\n // Initiate a prefetch task.\n const nextUrl = appRouterState.nextUrl\n const cacheKey = createCacheKey(instance.prefetchHref, nextUrl)\n instance.prefetchTask = scheduleSegmentPrefetchTask(\n cacheKey,\n treeAtTimeOfPrefetch,\n instance.fetchStrategy,\n priority,\n null\n )\n } else {\n // We already have an old task object that we can reschedule. This is\n // effectively the same as canceling the old task and creating a new one.\n reschedulePrefetchTask(\n existingPrefetchTask,\n treeAtTimeOfPrefetch,\n instance.fetchStrategy,\n priority\n )\n }\n }\n }\n}\n\nexport function pingVisibleLinks(\n nextUrl: string | null,\n tree: FlightRouterState\n) {\n // For each currently visible link, cancel the existing prefetch task (if it\n // exists) and schedule a new one. This is effectively the same as if all the\n // visible links left and then re-entered the viewport.\n //\n // This is called when the Next-Url or the base tree changes, since those\n // may affect the result of a prefetch task. It's also called after a\n // cache invalidation.\n for (const instance of prefetchableAndVisible) {\n const task = instance.prefetchTask\n if (task !== null && !isPrefetchTaskDirty(task, nextUrl, tree)) {\n // The cache has not been invalidated, and none of the inputs have\n // changed. Bail out.\n continue\n }\n // Something changed. Cancel the existing prefetch task and schedule a\n // new one.\n if (task !== null) {\n cancelPrefetchTask(task)\n }\n const cacheKey = createCacheKey(instance.prefetchHref, nextUrl)\n instance.prefetchTask = scheduleSegmentPrefetchTask(\n cacheKey,\n tree,\n instance.fetchStrategy,\n PrefetchPriority.Default,\n null\n )\n }\n}\n"],"names":["IDLE_LINK_STATUS","PENDING_LINK_STATUS","mountFormInstance","mountLinkInstance","onLinkVisibilityChanged","onNavigationIntent","pingVisibleLinks","setLinkForCurrentNavigation","unmountLinkForCurrentNavigation","unmountPrefetchableInstance","linkForMostRecentNavigation","pending","link","startTransition","setOptimisticLinkStatus","prefetchable","WeakMap","Map","prefetchableAndVisible","Set","observer","IntersectionObserver","handleIntersect","rootMargin","observeVisibility","element","instance","existingInstance","get","undefined","set","observe","coercePrefetchableUrl","href","window","createPrefetchURL","require","reportErrorFn","reportError","console","error","router","fetchStrategy","prefetchEnabled","prefetchURL","isVisible","prefetchTask","prefetchHref","delete","cancelPrefetchTask","unobserve","entries","entry","intersectionRatio","target","process","env","NODE_ENV","add","rescheduleLinkPrefetch","PrefetchPriority","Default","unstable_upgradeToDynamicPrefetch","__NEXT_DYNAMIC_ON_HOVER","FetchStrategy","Full","Intent","priority","existingPrefetchTask","getCurrentAppRouterState","appRouterState","treeAtTimeOfPrefetch","tree","nextUrl","cacheKey","createCacheKey","scheduleSegmentPrefetchTask","reschedulePrefetchTask","task","isPrefetchTaskDirty"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 6256, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/segment-cache/cache.ts"],"sourcesContent":["import type {\n TreePrefetch,\n RootTreePrefetch,\n SegmentPrefetch,\n} from '../../../server/app-render/collect-segment-data'\nimport type { LoadingModuleData } from '../../../shared/lib/app-router-types'\nimport type {\n CacheNodeSeedData,\n Segment as FlightRouterStateSegment,\n} from '../../../shared/lib/app-router-types'\nimport { HasLoadingBoundary } from '../../../shared/lib/app-router-types'\nimport {\n NEXT_DID_POSTPONE_HEADER,\n NEXT_ROUTER_PREFETCH_HEADER,\n NEXT_ROUTER_SEGMENT_PREFETCH_HEADER,\n NEXT_ROUTER_STALE_TIME_HEADER,\n NEXT_ROUTER_STATE_TREE_HEADER,\n NEXT_URL,\n RSC_CONTENT_TYPE_HEADER,\n RSC_HEADER,\n} from '../app-router-headers'\nimport {\n createFetch,\n createFromNextReadableStream,\n type RSCResponse,\n type RequestHeaders,\n} from '../router-reducer/fetch-server-response'\nimport {\n pingPrefetchTask,\n isPrefetchTaskDirty,\n type PrefetchTask,\n type PrefetchSubtaskResult,\n startRevalidationCooldown,\n} from './scheduler'\nimport {\n type RouteVaryPath,\n type SegmentVaryPath,\n type PartialSegmentVaryPath,\n getRouteVaryPath,\n getFulfilledRouteVaryPath,\n getSegmentVaryPathForRequest,\n appendLayoutVaryPath,\n finalizeLayoutVaryPath,\n finalizePageVaryPath,\n clonePageVaryPathWithNewSearchParams,\n type PageVaryPath,\n finalizeMetadataVaryPath,\n} from './vary-path'\nimport { getAppBuildId } from '../../app-build-id'\nimport { createHrefFromUrl } from '../router-reducer/create-href-from-url'\nimport type { NormalizedSearch, RouteCacheKey } from './cache-key'\n// TODO: Rename this module to avoid confusion with other types of cache keys\nimport { createCacheKey as createPrefetchRequestKey } from './cache-key'\nimport {\n doesStaticSegmentAppearInURL,\n getCacheKeyForDynamicParam,\n getRenderedPathname,\n getRenderedSearch,\n parseDynamicParamFromURLPart,\n} from '../../route-params'\nimport {\n createCacheMap,\n getFromCacheMap,\n setInCacheMap,\n setSizeInCacheMap,\n deleteFromCacheMap,\n isValueExpired,\n type CacheMap,\n type UnknownMapEntry,\n} from './cache-map'\nimport {\n appendSegmentRequestKeyPart,\n convertSegmentPathToStaticExportFilename,\n createSegmentRequestKeyPart,\n HEAD_REQUEST_KEY,\n ROOT_SEGMENT_REQUEST_KEY,\n type SegmentRequestKey,\n} from '../../../shared/lib/segment-cache/segment-value-encoding'\nimport type {\n FlightRouterState,\n NavigationFlightResponse,\n} from '../../../shared/lib/app-router-types'\nimport {\n normalizeFlightData,\n prepareFlightRouterStateForRequest,\n} from '../../flight-data-helpers'\nimport { STATIC_STALETIME_MS } from '../router-reducer/reducers/navigate-reducer'\nimport { pingVisibleLinks } from '../links'\nimport { PAGE_SEGMENT_KEY } from '../../../shared/lib/segment'\nimport { FetchStrategy } from './types'\nimport { createPromiseWithResolvers } from '../../../shared/lib/promise-with-resolvers'\n\n/**\n * Ensures a minimum stale time of 30s to avoid issues where the server sends a too\n * short-lived stale time, which would prevent anything from being prefetched.\n */\nexport function getStaleTimeMs(staleTimeSeconds: number): number {\n return Math.max(staleTimeSeconds, 30) * 1000\n}\n\n// A note on async/await when working in the prefetch cache:\n//\n// Most async operations in the prefetch cache should *not* use async/await,\n// Instead, spawn a subtask that writes the results to a cache entry, and attach\n// a \"ping\" listener to notify the prefetch queue to try again.\n//\n// The reason is we need to be able to access the segment cache and traverse its\n// data structures synchronously. For example, if there's a synchronous update\n// we can take an immediate snapshot of the cache to produce something we can\n// render. Limiting the use of async/await also makes it easier to avoid race\n// conditions, which is especially important because is cache is mutable.\n//\n// Another reason is that while we're performing async work, it's possible for\n// existing entries to become stale, or for Link prefetches to be removed from\n// the queue. For optimal scheduling, we need to be able to \"cancel\" subtasks\n// that are no longer needed. So, when a segment is received from the server, we\n// restart from the root of the tree that's being prefetched, to confirm all the\n// parent segments are still cached. If the segment is no longer reachable from\n// the root, then it's effectively canceled. This is similar to the design of\n// Rust Futures, or React Suspense.\n\ntype RouteTreeShared = {\n requestKey: SegmentRequestKey\n // TODO: Remove the `segment` field, now that it can be reconstructed\n // from `param`.\n segment: FlightRouterStateSegment\n slots: null | {\n [parallelRouteKey: string]: RouteTree\n }\n isRootLayout: boolean\n\n // If this is a dynamic route, indicates whether there is a loading boundary\n // somewhere in the tree. If not, we can skip the prefetch for the data,\n // because we know it would be an empty response. (For a static/PPR route,\n // this value is disregarded, because in that model `loading.tsx` is treated\n // like any other Suspense boundary.)\n hasLoadingBoundary: HasLoadingBoundary\n\n // Indicates whether this route has a runtime prefetch that we can request.\n // This is determined by the server; it's not purely a user configuration\n // because the server may determine that a route is fully static and doesn't\n // need runtime prefetching regardless of the configuration.\n hasRuntimePrefetch: boolean\n}\n\ntype LayoutRouteTree = RouteTreeShared & {\n isPage: false\n varyPath: SegmentVaryPath\n}\n\ntype PageRouteTree = RouteTreeShared & {\n isPage: true\n varyPath: PageVaryPath\n}\n\nexport type RouteTree = LayoutRouteTree | PageRouteTree\n\ntype RouteCacheEntryShared = {\n // This is false only if we're certain the route cannot be intercepted. It's\n // true in all other cases, including on initialization when we haven't yet\n // received a response from the server.\n couldBeIntercepted: boolean\n\n // Map-related fields.\n ref: UnknownMapEntry | null\n size: number\n staleAt: number\n version: number\n}\n\n/**\n * Tracks the status of a cache entry as it progresses from no data (Empty),\n * waiting for server data (Pending), and finished (either Fulfilled or\n * Rejected depending on the response from the server.\n */\nexport const enum EntryStatus {\n Empty = 0,\n Pending = 1,\n Fulfilled = 2,\n Rejected = 3,\n}\n\ntype PendingRouteCacheEntry = RouteCacheEntryShared & {\n status: EntryStatus.Empty | EntryStatus.Pending\n blockedTasks: Set | null\n canonicalUrl: null\n renderedSearch: null\n tree: null\n metadata: null\n isPPREnabled: false\n}\n\ntype RejectedRouteCacheEntry = RouteCacheEntryShared & {\n status: EntryStatus.Rejected\n blockedTasks: Set | null\n canonicalUrl: null\n renderedSearch: null\n tree: null\n metadata: null\n isPPREnabled: boolean\n}\n\nexport type FulfilledRouteCacheEntry = RouteCacheEntryShared & {\n status: EntryStatus.Fulfilled\n blockedTasks: null\n canonicalUrl: string\n renderedSearch: NormalizedSearch\n tree: RouteTree\n metadata: RouteTree\n isPPREnabled: boolean\n}\n\nexport type RouteCacheEntry =\n | PendingRouteCacheEntry\n | FulfilledRouteCacheEntry\n | RejectedRouteCacheEntry\n\ntype SegmentCacheEntryShared = {\n fetchStrategy: FetchStrategy\n\n // Map-related fields.\n ref: UnknownMapEntry | null\n size: number\n staleAt: number\n version: number\n}\n\nexport type EmptySegmentCacheEntry = SegmentCacheEntryShared & {\n status: EntryStatus.Empty\n rsc: null\n loading: null\n isPartial: true\n promise: null\n}\n\nexport type PendingSegmentCacheEntry = SegmentCacheEntryShared & {\n status: EntryStatus.Pending\n rsc: null\n loading: null\n isPartial: boolean\n promise: null | PromiseWithResolvers\n}\n\ntype RejectedSegmentCacheEntry = SegmentCacheEntryShared & {\n status: EntryStatus.Rejected\n rsc: null\n loading: null\n isPartial: true\n promise: null\n}\n\nexport type FulfilledSegmentCacheEntry = SegmentCacheEntryShared & {\n status: EntryStatus.Fulfilled\n rsc: React.ReactNode | null\n loading: LoadingModuleData | Promise\n isPartial: boolean\n promise: null\n}\n\nexport type SegmentCacheEntry =\n | EmptySegmentCacheEntry\n | PendingSegmentCacheEntry\n | RejectedSegmentCacheEntry\n | FulfilledSegmentCacheEntry\n\nexport type NonEmptySegmentCacheEntry = Exclude<\n SegmentCacheEntry,\n EmptySegmentCacheEntry\n>\n\nconst isOutputExportMode =\n process.env.NODE_ENV === 'production' &&\n process.env.__NEXT_CONFIG_OUTPUT === 'export'\n\nconst MetadataOnlyRequestTree: FlightRouterState = [\n '',\n {},\n null,\n 'metadata-only',\n]\n\nlet routeCacheMap: CacheMap = createCacheMap()\nlet segmentCacheMap: CacheMap = createCacheMap()\n\n// All invalidation listeners for the whole cache are tracked in single set.\n// Since we don't yet support tag or path-based invalidation, there's no point\n// tracking them any more granularly than this. Once we add granular\n// invalidation, that may change, though generally the model is to just notify\n// the listeners and allow the caller to poll the prefetch cache with a new\n// prefetch task if desired.\nlet invalidationListeners: Set | null = null\n\n// Incrementing counter used to track cache invalidations.\nlet currentCacheVersion = 0\n\nexport function getCurrentCacheVersion(): number {\n return currentCacheVersion\n}\n\n/**\n * Used to clear the client prefetch cache when a server action calls\n * revalidatePath or revalidateTag. Eventually we will support only clearing the\n * segments that were actually affected, but there's more work to be done on the\n * server before the client is able to do this correctly.\n */\nexport function revalidateEntireCache(\n nextUrl: string | null,\n tree: FlightRouterState\n) {\n // Increment the current cache version. This does not eagerly evict anything\n // from the cache, but because all the entries are versioned, and we check\n // the version when reading from the cache, this effectively causes all\n // entries to be evicted lazily. We do it lazily because in the future,\n // actions like revalidateTag or refresh will not evict the entire cache,\n // but rather some subset of the entries.\n currentCacheVersion++\n\n // Start a cooldown before re-prefetching to allow CDN cache propagation.\n startRevalidationCooldown()\n\n // Prefetch all the currently visible links again, to re-fill the cache.\n pingVisibleLinks(nextUrl, tree)\n\n // Similarly, notify all invalidation listeners (i.e. those passed to\n // `router.prefetch(onInvalidate)`), so they can trigger a new prefetch\n // if needed.\n pingInvalidationListeners(nextUrl, tree)\n}\n\nfunction attachInvalidationListener(task: PrefetchTask): void {\n // This function is called whenever a prefetch task reads a cache entry. If\n // the task has an onInvalidate function associated with it — i.e. the one\n // optionally passed to router.prefetch(onInvalidate) — then we attach that\n // listener to the every cache entry that the task reads. Then, if an entry\n // is invalidated, we call the function.\n if (task.onInvalidate !== null) {\n if (invalidationListeners === null) {\n invalidationListeners = new Set([task])\n } else {\n invalidationListeners.add(task)\n }\n }\n}\n\nfunction notifyInvalidationListener(task: PrefetchTask): void {\n const onInvalidate = task.onInvalidate\n if (onInvalidate !== null) {\n // Clear the callback from the task object to guarantee it's not called more\n // than once.\n task.onInvalidate = null\n\n // This is a user-space function, so we must wrap in try/catch.\n try {\n onInvalidate()\n } catch (error) {\n if (typeof reportError === 'function') {\n reportError(error)\n } else {\n console.error(error)\n }\n }\n }\n}\n\nexport function pingInvalidationListeners(\n nextUrl: string | null,\n tree: FlightRouterState\n): void {\n // The rough equivalent of pingVisibleLinks, but for onInvalidate callbacks.\n // This is called when the Next-Url or the base tree changes, since those\n // may affect the result of a prefetch task. It's also called after a\n // cache invalidation.\n if (invalidationListeners !== null) {\n const tasks = invalidationListeners\n invalidationListeners = null\n for (const task of tasks) {\n if (isPrefetchTaskDirty(task, nextUrl, tree)) {\n notifyInvalidationListener(task)\n }\n }\n }\n}\n\nexport function readRouteCacheEntry(\n now: number,\n key: RouteCacheKey\n): RouteCacheEntry | null {\n const varyPath: RouteVaryPath = getRouteVaryPath(\n key.pathname,\n key.search,\n key.nextUrl\n )\n const isRevalidation = false\n return getFromCacheMap(\n now,\n getCurrentCacheVersion(),\n routeCacheMap,\n varyPath,\n isRevalidation\n )\n}\n\nexport function readSegmentCacheEntry(\n now: number,\n varyPath: SegmentVaryPath\n): SegmentCacheEntry | null {\n const isRevalidation = false\n return getFromCacheMap(\n now,\n getCurrentCacheVersion(),\n segmentCacheMap,\n varyPath,\n isRevalidation\n )\n}\n\nfunction readRevalidatingSegmentCacheEntry(\n now: number,\n varyPath: SegmentVaryPath\n): SegmentCacheEntry | null {\n const isRevalidation = true\n return getFromCacheMap(\n now,\n getCurrentCacheVersion(),\n segmentCacheMap,\n varyPath,\n isRevalidation\n )\n}\n\nexport function waitForSegmentCacheEntry(\n pendingEntry: PendingSegmentCacheEntry\n): Promise {\n // Because the entry is pending, there's already a in-progress request.\n // Attach a promise to the entry that will resolve when the server responds.\n let promiseWithResolvers = pendingEntry.promise\n if (promiseWithResolvers === null) {\n promiseWithResolvers = pendingEntry.promise =\n createPromiseWithResolvers()\n } else {\n // There's already a promise we can use\n }\n return promiseWithResolvers.promise\n}\n\n/**\n * Checks if an entry for a route exists in the cache. If so, it returns the\n * entry, If not, it adds an empty entry to the cache and returns it.\n */\nexport function readOrCreateRouteCacheEntry(\n now: number,\n task: PrefetchTask,\n key: RouteCacheKey\n): RouteCacheEntry {\n attachInvalidationListener(task)\n\n const existingEntry = readRouteCacheEntry(now, key)\n if (existingEntry !== null) {\n return existingEntry\n }\n // Create a pending entry and add it to the cache.\n const pendingEntry: PendingRouteCacheEntry = {\n canonicalUrl: null,\n status: EntryStatus.Empty,\n blockedTasks: null,\n tree: null,\n metadata: null,\n // This is initialized to true because we don't know yet whether the route\n // could be intercepted. It's only set to false once we receive a response\n // from the server.\n couldBeIntercepted: true,\n // Similarly, we don't yet know if the route supports PPR.\n isPPREnabled: false,\n renderedSearch: null,\n\n // Map-related fields\n ref: null,\n size: 0,\n // Since this is an empty entry, there's no reason to ever evict it. It will\n // be updated when the data is populated.\n staleAt: Infinity,\n version: getCurrentCacheVersion(),\n }\n const varyPath: RouteVaryPath = getRouteVaryPath(\n key.pathname,\n key.search,\n key.nextUrl\n )\n const isRevalidation = false\n setInCacheMap(routeCacheMap, varyPath, pendingEntry, isRevalidation)\n return pendingEntry\n}\n\nexport function requestOptimisticRouteCacheEntry(\n now: number,\n requestedUrl: URL,\n nextUrl: string | null\n): FulfilledRouteCacheEntry | null {\n // This function is called during a navigation when there was no matching\n // route tree in the prefetch cache. Before de-opting to a blocking,\n // unprefetched navigation, we will first attempt to construct an \"optimistic\"\n // route tree by checking the cache for similar routes.\n //\n // Check if there's a route with the same pathname, but with different\n // search params. We can then base our optimistic route tree on this entry.\n //\n // Conceptually, we are simulating what would happen if we did perform a\n // prefetch the requested URL, under the assumption that the server will\n // not redirect or rewrite the request in a different manner than the\n // base route tree. This assumption might not hold, in which case we'll have\n // to recover when we perform the dynamic navigation request. However, this\n // is what would happen if a route were dynamically rewritten/redirected\n // in between the prefetch and the navigation. So the logic needs to exist\n // to handle this case regardless.\n\n // Look for a route with the same pathname, but with an empty search string.\n // TODO: There's nothing inherently special about the empty search string;\n // it's chosen somewhat arbitrarily, with the rationale that it's the most\n // likely one to exist. But we should update this to match _any_ search\n // string. The plan is to generalize this logic alongside other improvements\n // related to \"fallback\" cache entries.\n const requestedSearch = requestedUrl.search as NormalizedSearch\n if (requestedSearch === '') {\n // The caller would have already checked if a route with an empty search\n // string is in the cache. So we can bail out here.\n return null\n }\n const urlWithoutSearchParams = new URL(requestedUrl)\n urlWithoutSearchParams.search = ''\n const routeWithNoSearchParams = readRouteCacheEntry(\n now,\n createPrefetchRequestKey(urlWithoutSearchParams.href, nextUrl)\n )\n\n if (\n routeWithNoSearchParams === null ||\n routeWithNoSearchParams.status !== EntryStatus.Fulfilled\n ) {\n // Bail out of constructing an optimistic route tree. This will result in\n // a blocking, unprefetched navigation.\n return null\n }\n\n // Now we have a base route tree we can \"patch\" with our optimistic values.\n\n // Optimistically assume that redirects for the requested pathname do\n // not vary on the search string. Therefore, if the base route was\n // redirected to a different search string, then the optimistic route\n // should be redirected to the same search string. Otherwise, we use\n // the requested search string.\n const canonicalUrlForRouteWithNoSearchParams = new URL(\n routeWithNoSearchParams.canonicalUrl,\n requestedUrl.origin\n )\n const optimisticCanonicalSearch =\n canonicalUrlForRouteWithNoSearchParams.search !== ''\n ? // Base route was redirected. Reuse the same redirected search string.\n canonicalUrlForRouteWithNoSearchParams.search\n : requestedSearch\n\n // Similarly, optimistically assume that rewrites for the requested\n // pathname do not vary on the search string. Therefore, if the base\n // route was rewritten to a different search string, then the optimistic\n // route should be rewritten to the same search string. Otherwise, we use\n // the requested search string.\n const optimisticRenderedSearch =\n routeWithNoSearchParams.renderedSearch !== ''\n ? // Base route was rewritten. Reuse the same rewritten search string.\n routeWithNoSearchParams.renderedSearch\n : requestedSearch\n\n const optimisticUrl = new URL(\n routeWithNoSearchParams.canonicalUrl,\n location.origin\n )\n optimisticUrl.search = optimisticCanonicalSearch\n const optimisticCanonicalUrl = createHrefFromUrl(optimisticUrl)\n\n const optimisticRouteTree = createOptimisticRouteTree(\n routeWithNoSearchParams.tree,\n optimisticRenderedSearch\n )\n const optimisticMetadataTree = createOptimisticRouteTree(\n routeWithNoSearchParams.metadata,\n optimisticRenderedSearch\n )\n\n // Clone the base route tree, and override the relevant fields with our\n // optimistic values.\n const optimisticEntry: FulfilledRouteCacheEntry = {\n canonicalUrl: optimisticCanonicalUrl,\n\n status: EntryStatus.Fulfilled,\n // This isn't cloned because it's instance-specific\n blockedTasks: null,\n tree: optimisticRouteTree,\n metadata: optimisticMetadataTree,\n couldBeIntercepted: routeWithNoSearchParams.couldBeIntercepted,\n isPPREnabled: routeWithNoSearchParams.isPPREnabled,\n\n // Override the rendered search with the optimistic value.\n renderedSearch: optimisticRenderedSearch,\n\n // Map-related fields\n ref: null,\n size: 0,\n staleAt: routeWithNoSearchParams.staleAt,\n version: routeWithNoSearchParams.version,\n }\n\n // Do not insert this entry into the cache. It only exists so we can\n // perform the current navigation. Just return it to the caller.\n return optimisticEntry\n}\n\nfunction createOptimisticRouteTree(\n tree: RouteTree,\n newRenderedSearch: NormalizedSearch\n): RouteTree {\n // Create a new route tree that identical to the original one except for\n // the rendered search string, which is contained in the vary path.\n\n let clonedSlots: Record | null = null\n const originalSlots = tree.slots\n if (originalSlots !== null) {\n clonedSlots = {}\n for (const parallelRouteKey in originalSlots) {\n const childTree = originalSlots[parallelRouteKey]\n clonedSlots[parallelRouteKey] = createOptimisticRouteTree(\n childTree,\n newRenderedSearch\n )\n }\n }\n\n // We only need to clone the vary path if the route is a page.\n if (tree.isPage) {\n return {\n requestKey: tree.requestKey,\n segment: tree.segment,\n varyPath: clonePageVaryPathWithNewSearchParams(\n tree.varyPath,\n newRenderedSearch\n ),\n isPage: true,\n slots: clonedSlots,\n isRootLayout: tree.isRootLayout,\n hasLoadingBoundary: tree.hasLoadingBoundary,\n hasRuntimePrefetch: tree.hasRuntimePrefetch,\n }\n }\n\n return {\n requestKey: tree.requestKey,\n segment: tree.segment,\n varyPath: tree.varyPath,\n isPage: false,\n slots: clonedSlots,\n isRootLayout: tree.isRootLayout,\n hasLoadingBoundary: tree.hasLoadingBoundary,\n hasRuntimePrefetch: tree.hasRuntimePrefetch,\n }\n}\n\n/**\n * Checks if an entry for a segment exists in the cache. If so, it returns the\n * entry, If not, it adds an empty entry to the cache and returns it.\n */\nexport function readOrCreateSegmentCacheEntry(\n now: number,\n fetchStrategy: FetchStrategy,\n route: FulfilledRouteCacheEntry,\n tree: RouteTree\n): SegmentCacheEntry {\n const existingEntry = readSegmentCacheEntry(now, tree.varyPath)\n if (existingEntry !== null) {\n return existingEntry\n }\n // Create a pending entry and add it to the cache.\n const varyPathForRequest = getSegmentVaryPathForRequest(fetchStrategy, tree)\n const pendingEntry = createDetachedSegmentCacheEntry(route.staleAt)\n const isRevalidation = false\n setInCacheMap(\n segmentCacheMap,\n varyPathForRequest,\n pendingEntry,\n isRevalidation\n )\n return pendingEntry\n}\n\nexport function readOrCreateRevalidatingSegmentEntry(\n now: number,\n fetchStrategy: FetchStrategy,\n route: FulfilledRouteCacheEntry,\n tree: RouteTree\n): SegmentCacheEntry {\n // This function is called when we've already confirmed that a particular\n // segment is cached, but we want to perform another request anyway in case it\n // returns more complete and/or fresher data than we already have. The logic\n // for deciding whether to replace the existing entry is handled elsewhere;\n // this function just handles retrieving a cache entry that we can use to\n // track the revalidation.\n //\n // The reason revalidations are stored in the cache is because we need to be\n // able to dedupe multiple revalidation requests. The reason they have to be\n // handled specially is because we shouldn't overwrite a \"normal\" entry if\n // one exists at the same keypath. So, for each internal cache location, there\n // is a special \"revalidation\" slot that is used solely for this purpose.\n //\n // You can think of it as if all the revalidation entries were stored in a\n // separate cache map from the canonical entries, and then transfered to the\n // canonical cache map once the request is complete — this isn't how it's\n // actually implemented, since it's more efficient to store them in the same\n // data structure as the normal entries, but that's how it's modeled\n // conceptually.\n\n // TODO: Once we implement Fallback behavior for params, where an entry is\n // re-keyed based on response information, we'll need to account for the\n // possibility that the keypath of the previous entry is more generic than\n // the keypath of the revalidating entry. In other words, the server could\n // return a less generic entry upon revalidation. For now, though, this isn't\n // a concern because the keypath is based solely on the prefetch strategy,\n // not on data contained in the response.\n const existingEntry = readRevalidatingSegmentCacheEntry(now, tree.varyPath)\n if (existingEntry !== null) {\n return existingEntry\n }\n // Create a pending entry and add it to the cache.\n const varyPathForRequest = getSegmentVaryPathForRequest(fetchStrategy, tree)\n const pendingEntry = createDetachedSegmentCacheEntry(route.staleAt)\n const isRevalidation = true\n setInCacheMap(\n segmentCacheMap,\n varyPathForRequest,\n pendingEntry,\n isRevalidation\n )\n return pendingEntry\n}\n\nexport function overwriteRevalidatingSegmentCacheEntry(\n fetchStrategy: FetchStrategy,\n route: FulfilledRouteCacheEntry,\n tree: RouteTree\n) {\n // This function is called when we've already decided to replace an existing\n // revalidation entry. Create a new entry and write it into the cache,\n // overwriting the previous value.\n const varyPathForRequest = getSegmentVaryPathForRequest(fetchStrategy, tree)\n const pendingEntry = createDetachedSegmentCacheEntry(route.staleAt)\n const isRevalidation = true\n setInCacheMap(\n segmentCacheMap,\n varyPathForRequest,\n pendingEntry,\n isRevalidation\n )\n return pendingEntry\n}\n\nexport function upsertSegmentEntry(\n now: number,\n varyPath: SegmentVaryPath,\n candidateEntry: SegmentCacheEntry\n): SegmentCacheEntry | null {\n // We have a new entry that has not yet been inserted into the cache. Before\n // we do so, we need to confirm whether it takes precedence over the existing\n // entry (if one exists).\n // TODO: We should not upsert an entry if its key was invalidated in the time\n // since the request was made. We can do that by passing the \"owner\" entry to\n // this function and confirming it's the same as `existingEntry`.\n\n if (isValueExpired(now, getCurrentCacheVersion(), candidateEntry)) {\n // The entry is expired. We cannot upsert it.\n return null\n }\n\n const existingEntry = readSegmentCacheEntry(now, varyPath)\n if (existingEntry !== null) {\n // Don't replace a more specific segment with a less-specific one. A case where this\n // might happen is if the existing segment was fetched via\n // ``.\n if (\n // We fetched the new segment using a different, less specific fetch strategy\n // than the segment we already have in the cache, so it can't have more content.\n (candidateEntry.fetchStrategy !== existingEntry.fetchStrategy &&\n !canNewFetchStrategyProvideMoreContent(\n existingEntry.fetchStrategy,\n candidateEntry.fetchStrategy\n )) ||\n // The existing entry isn't partial, but the new one is.\n // (TODO: can this be true if `candidateEntry.fetchStrategy >= existingEntry.fetchStrategy`?)\n (!existingEntry.isPartial && candidateEntry.isPartial)\n ) {\n // We're going to leave revalidating entry in the cache so that it doesn't\n // get revalidated again unnecessarily. Downgrade the Fulfilled entry to\n // Rejected and null out the data so it can be garbage collected. We leave\n // `staleAt` intact to prevent subsequent revalidation attempts only until\n // the entry expires.\n const rejectedEntry: RejectedSegmentCacheEntry = candidateEntry as any\n rejectedEntry.status = EntryStatus.Rejected\n rejectedEntry.loading = null\n rejectedEntry.rsc = null\n return null\n }\n\n // Evict the existing entry from the cache.\n deleteFromCacheMap(existingEntry)\n }\n\n const isRevalidation = false\n setInCacheMap(segmentCacheMap, varyPath, candidateEntry, isRevalidation)\n return candidateEntry\n}\n\nexport function createDetachedSegmentCacheEntry(\n staleAt: number\n): EmptySegmentCacheEntry {\n const emptyEntry: EmptySegmentCacheEntry = {\n status: EntryStatus.Empty,\n // Default to assuming the fetch strategy will be PPR. This will be updated\n // when a fetch is actually initiated.\n fetchStrategy: FetchStrategy.PPR,\n rsc: null,\n loading: null,\n isPartial: true,\n promise: null,\n\n // Map-related fields\n ref: null,\n size: 0,\n staleAt,\n version: 0,\n }\n return emptyEntry\n}\n\nexport function upgradeToPendingSegment(\n emptyEntry: EmptySegmentCacheEntry,\n fetchStrategy: FetchStrategy\n): PendingSegmentCacheEntry {\n const pendingEntry: PendingSegmentCacheEntry = emptyEntry as any\n pendingEntry.status = EntryStatus.Pending\n pendingEntry.fetchStrategy = fetchStrategy\n\n if (fetchStrategy === FetchStrategy.Full) {\n // We can assume the response will contain the full segment data. Set this\n // to false so we know it's OK to omit this segment from any navigation\n // requests that may happen while the data is still pending.\n pendingEntry.isPartial = false\n }\n\n // Set the version here, since this is right before the request is initiated.\n // The next time the global cache version is incremented, the entry will\n // effectively be evicted. This happens before initiating the request, rather\n // than when receiving the response, because it's guaranteed to happen\n // before the data is read on the server.\n pendingEntry.version = getCurrentCacheVersion()\n return pendingEntry\n}\n\nfunction pingBlockedTasks(entry: {\n blockedTasks: Set | null\n}): void {\n const blockedTasks = entry.blockedTasks\n if (blockedTasks !== null) {\n for (const task of blockedTasks) {\n pingPrefetchTask(task)\n }\n entry.blockedTasks = null\n }\n}\n\nfunction fulfillRouteCacheEntry(\n entry: RouteCacheEntry,\n tree: RouteTree,\n metadataVaryPath: PageVaryPath,\n staleAt: number,\n couldBeIntercepted: boolean,\n canonicalUrl: string,\n renderedSearch: NormalizedSearch,\n isPPREnabled: boolean\n): FulfilledRouteCacheEntry {\n // The Head is not actually part of the route tree, but other than that, it's\n // fetched and cached like a segment. Some functions expect a RouteTree\n // object, so rather than fork the logic in all those places, we use this\n // \"fake\" one.\n const metadata: RouteTree = {\n requestKey: HEAD_REQUEST_KEY,\n segment: HEAD_REQUEST_KEY,\n varyPath: metadataVaryPath,\n // The metadata isn't really a \"page\" (though it isn't really a \"segment\"\n // either) but for the purposes of how this field is used, it behaves like\n // one. If this logic ever gets more complex we can change this to an enum.\n isPage: true,\n slots: null,\n isRootLayout: false,\n hasLoadingBoundary: HasLoadingBoundary.SubtreeHasNoLoadingBoundary,\n hasRuntimePrefetch: false,\n }\n const fulfilledEntry: FulfilledRouteCacheEntry = entry as any\n fulfilledEntry.status = EntryStatus.Fulfilled\n fulfilledEntry.tree = tree\n fulfilledEntry.metadata = metadata\n fulfilledEntry.staleAt = staleAt\n fulfilledEntry.couldBeIntercepted = couldBeIntercepted\n fulfilledEntry.canonicalUrl = canonicalUrl\n fulfilledEntry.renderedSearch = renderedSearch\n fulfilledEntry.isPPREnabled = isPPREnabled\n pingBlockedTasks(entry)\n return fulfilledEntry\n}\n\nfunction fulfillSegmentCacheEntry(\n segmentCacheEntry: PendingSegmentCacheEntry,\n rsc: React.ReactNode,\n loading: LoadingModuleData | Promise,\n staleAt: number,\n isPartial: boolean\n): FulfilledSegmentCacheEntry {\n const fulfilledEntry: FulfilledSegmentCacheEntry = segmentCacheEntry as any\n fulfilledEntry.status = EntryStatus.Fulfilled\n fulfilledEntry.rsc = rsc\n fulfilledEntry.loading = loading\n fulfilledEntry.staleAt = staleAt\n fulfilledEntry.isPartial = isPartial\n // Resolve any listeners that were waiting for this data.\n if (segmentCacheEntry.promise !== null) {\n segmentCacheEntry.promise.resolve(fulfilledEntry)\n // Free the promise for garbage collection.\n fulfilledEntry.promise = null\n }\n return fulfilledEntry\n}\n\nfunction rejectRouteCacheEntry(\n entry: PendingRouteCacheEntry,\n staleAt: number\n): void {\n const rejectedEntry: RejectedRouteCacheEntry = entry as any\n rejectedEntry.status = EntryStatus.Rejected\n rejectedEntry.staleAt = staleAt\n pingBlockedTasks(entry)\n}\n\nfunction rejectSegmentCacheEntry(\n entry: PendingSegmentCacheEntry,\n staleAt: number\n): void {\n const rejectedEntry: RejectedSegmentCacheEntry = entry as any\n rejectedEntry.status = EntryStatus.Rejected\n rejectedEntry.staleAt = staleAt\n if (entry.promise !== null) {\n // NOTE: We don't currently propagate the reason the prefetch was canceled\n // but we could by accepting a `reason` argument.\n entry.promise.resolve(null)\n entry.promise = null\n }\n}\n\ntype RouteTreeAccumulator = {\n metadataVaryPath: PageVaryPath | null\n}\n\nfunction convertRootTreePrefetchToRouteTree(\n rootTree: RootTreePrefetch,\n renderedPathname: string,\n renderedSearch: NormalizedSearch,\n acc: RouteTreeAccumulator\n) {\n // Remove trailing and leading slashes\n const pathnameParts = renderedPathname.split('/').filter((p) => p !== '')\n const index = 0\n const rootSegment = ROOT_SEGMENT_REQUEST_KEY\n return convertTreePrefetchToRouteTree(\n rootTree.tree,\n rootSegment,\n null,\n ROOT_SEGMENT_REQUEST_KEY,\n pathnameParts,\n index,\n renderedSearch,\n acc\n )\n}\n\nfunction convertTreePrefetchToRouteTree(\n prefetch: TreePrefetch,\n segment: FlightRouterStateSegment,\n partialVaryPath: PartialSegmentVaryPath | null,\n requestKey: SegmentRequestKey,\n pathnameParts: Array,\n pathnamePartsIndex: number,\n renderedSearch: NormalizedSearch,\n acc: RouteTreeAccumulator\n): RouteTree {\n // Converts the route tree sent by the server into the format used by the\n // cache. The cached version of the tree includes additional fields, such as a\n // cache key for each segment. Since this is frequently accessed, we compute\n // it once instead of on every access. This same cache key is also used to\n // request the segment from the server.\n\n let slots: { [parallelRouteKey: string]: RouteTree } | null = null\n let isPage: boolean\n let varyPath: SegmentVaryPath\n const prefetchSlots = prefetch.slots\n if (prefetchSlots !== null) {\n isPage = false\n varyPath = finalizeLayoutVaryPath(requestKey, partialVaryPath)\n\n slots = {}\n for (let parallelRouteKey in prefetchSlots) {\n const childPrefetch = prefetchSlots[parallelRouteKey]\n const childParamName = childPrefetch.name\n const childParamType = childPrefetch.paramType\n const childServerSentParamKey = childPrefetch.paramKey\n\n let childDoesAppearInURL: boolean\n let childSegment: FlightRouterStateSegment\n let childPartialVaryPath: PartialSegmentVaryPath | null\n if (childParamType !== null) {\n // This segment is parameterized. Get the param from the pathname.\n const childParamValue = parseDynamicParamFromURLPart(\n childParamType,\n pathnameParts,\n pathnamePartsIndex\n )\n\n // Assign a cache key to the segment, based on the param value. In the\n // pre-Segment Cache implementation, the server computes this and sends\n // it in the body of the response. In the Segment Cache implementation,\n // the server sends an empty string and we fill it in here.\n\n // TODO: We're intentionally not adding the search param to page\n // segments here; it's tracked separately and added back during a read.\n // This would clearer if we waited to construct the segment until it's\n // read from the cache, since that's effectively what we're\n // doing anyway.\n const childParamKey =\n // The server omits this field from the prefetch response when\n // cacheComponents is enabled.\n childServerSentParamKey !== null\n ? childServerSentParamKey\n : // If no param key was sent, use the value parsed on the client.\n getCacheKeyForDynamicParam(\n childParamValue,\n '' as NormalizedSearch\n )\n\n childPartialVaryPath = appendLayoutVaryPath(\n partialVaryPath,\n childParamKey\n )\n childSegment = [childParamName, childParamKey, childParamType]\n childDoesAppearInURL = true\n } else {\n // This segment does not have a param. Inherit the partial vary path of\n // the parent.\n childPartialVaryPath = partialVaryPath\n childSegment = childParamName\n childDoesAppearInURL = doesStaticSegmentAppearInURL(childParamName)\n }\n\n // Only increment the index if the segment appears in the URL. If it's a\n // \"virtual\" segment, like a route group, it remains the same.\n const childPathnamePartsIndex = childDoesAppearInURL\n ? pathnamePartsIndex + 1\n : pathnamePartsIndex\n\n const childRequestKeyPart = createSegmentRequestKeyPart(childSegment)\n const childRequestKey = appendSegmentRequestKeyPart(\n requestKey,\n parallelRouteKey,\n childRequestKeyPart\n )\n slots[parallelRouteKey] = convertTreePrefetchToRouteTree(\n childPrefetch,\n childSegment,\n childPartialVaryPath,\n childRequestKey,\n pathnameParts,\n childPathnamePartsIndex,\n renderedSearch,\n acc\n )\n }\n } else {\n if (requestKey.endsWith(PAGE_SEGMENT_KEY)) {\n // This is a page segment.\n isPage = true\n varyPath = finalizePageVaryPath(\n requestKey,\n renderedSearch,\n partialVaryPath\n )\n // The metadata \"segment\" is not part the route tree, but it has the same\n // conceptual params as a page segment. Write the vary path into the\n // accumulator object. If there are multiple parallel pages, we use the\n // first one. Which page we choose is arbitrary as long as it's\n // consistently the same one every time every time. See\n // finalizeMetadataVaryPath for more details.\n if (acc.metadataVaryPath === null) {\n acc.metadataVaryPath = finalizeMetadataVaryPath(\n requestKey,\n renderedSearch,\n partialVaryPath\n )\n }\n } else {\n // This is a layout segment.\n isPage = false\n varyPath = finalizeLayoutVaryPath(requestKey, partialVaryPath)\n }\n }\n\n return {\n requestKey,\n segment,\n varyPath,\n // TODO: Cheating the type system here a bit because TypeScript can't tell\n // that the type of isPage and varyPath are consistent. The fix would be to\n // create separate constructors and call the appropriate one from each of\n // the branches above. Just seems a bit overkill only for one field so I'll\n // leave it as-is for now. If isPage were wrong it would break the behavior\n // and we'd catch it quickly, anyway.\n isPage: isPage as boolean as any,\n slots,\n isRootLayout: prefetch.isRootLayout,\n // This field is only relevant to dynamic routes. For a PPR/static route,\n // there's always some partial loading state we can fetch.\n hasLoadingBoundary: HasLoadingBoundary.SegmentHasLoadingBoundary,\n hasRuntimePrefetch: prefetch.hasRuntimePrefetch,\n }\n}\n\nfunction convertRootFlightRouterStateToRouteTree(\n flightRouterState: FlightRouterState,\n renderedSearch: NormalizedSearch,\n acc: RouteTreeAccumulator\n): RouteTree {\n return convertFlightRouterStateToRouteTree(\n flightRouterState,\n ROOT_SEGMENT_REQUEST_KEY,\n null,\n renderedSearch,\n acc\n )\n}\n\nfunction convertFlightRouterStateToRouteTree(\n flightRouterState: FlightRouterState,\n requestKey: SegmentRequestKey,\n parentPartialVaryPath: PartialSegmentVaryPath | null,\n renderedSearch: NormalizedSearch,\n acc: RouteTreeAccumulator\n): RouteTree {\n const originalSegment = flightRouterState[0]\n\n let segment: FlightRouterStateSegment\n let partialVaryPath: PartialSegmentVaryPath | null\n let isPage: boolean\n let varyPath: SegmentVaryPath\n if (Array.isArray(originalSegment)) {\n isPage = false\n const paramCacheKey = originalSegment[1]\n partialVaryPath = appendLayoutVaryPath(parentPartialVaryPath, paramCacheKey)\n varyPath = finalizeLayoutVaryPath(requestKey, partialVaryPath)\n segment = originalSegment\n } else {\n // This segment does not have a param. Inherit the partial vary path of\n // the parent.\n partialVaryPath = parentPartialVaryPath\n if (requestKey.endsWith(PAGE_SEGMENT_KEY)) {\n // This is a page segment.\n isPage = true\n\n // The navigation implementation expects the search params to be included\n // in the segment. However, in the case of a static response, the search\n // params are omitted. So the client needs to add them back in when reading\n // from the Segment Cache.\n //\n // For consistency, we'll do this for dynamic responses, too.\n //\n // TODO: We should move search params out of FlightRouterState and handle\n // them entirely on the client, similar to our plan for dynamic params.\n segment = PAGE_SEGMENT_KEY\n varyPath = finalizePageVaryPath(\n requestKey,\n renderedSearch,\n partialVaryPath\n )\n // The metadata \"segment\" is not part the route tree, but it has the same\n // conceptual params as a page segment. Write the vary path into the\n // accumulator object. If there are multiple parallel pages, we use the\n // first one. Which page we choose is arbitrary as long as it's\n // consistently the same one every time every time. See\n // finalizeMetadataVaryPath for more details.\n if (acc.metadataVaryPath === null) {\n acc.metadataVaryPath = finalizeMetadataVaryPath(\n requestKey,\n renderedSearch,\n partialVaryPath\n )\n }\n } else {\n // This is a layout segment.\n isPage = false\n segment = originalSegment\n varyPath = finalizeLayoutVaryPath(requestKey, partialVaryPath)\n }\n }\n\n let slots: { [parallelRouteKey: string]: RouteTree } | null = null\n\n const parallelRoutes = flightRouterState[1]\n for (let parallelRouteKey in parallelRoutes) {\n const childRouterState = parallelRoutes[parallelRouteKey]\n const childSegment = childRouterState[0]\n // TODO: Eventually, the param values will not be included in the response\n // from the server. We'll instead fill them in on the client by parsing\n // the URL. This is where we'll do that.\n const childRequestKeyPart = createSegmentRequestKeyPart(childSegment)\n const childRequestKey = appendSegmentRequestKeyPart(\n requestKey,\n parallelRouteKey,\n childRequestKeyPart\n )\n const childTree = convertFlightRouterStateToRouteTree(\n childRouterState,\n childRequestKey,\n partialVaryPath,\n renderedSearch,\n acc\n )\n if (slots === null) {\n slots = {\n [parallelRouteKey]: childTree,\n }\n } else {\n slots[parallelRouteKey] = childTree\n }\n }\n\n return {\n requestKey,\n segment,\n varyPath,\n // TODO: Cheating the type system here a bit because TypeScript can't tell\n // that the type of isPage and varyPath are consistent. The fix would be to\n // create separate constructors and call the appropriate one from each of\n // the branches above. Just seems a bit overkill only for one field so I'll\n // leave it as-is for now. If isPage were wrong it would break the behavior\n // and we'd catch it quickly, anyway.\n isPage: isPage as boolean as any,\n slots,\n isRootLayout: flightRouterState[4] === true,\n hasLoadingBoundary:\n flightRouterState[5] !== undefined\n ? flightRouterState[5]\n : HasLoadingBoundary.SubtreeHasNoLoadingBoundary,\n\n // Non-static tree responses are only used by apps that haven't adopted\n // Cache Components. So this is always false.\n hasRuntimePrefetch: false,\n }\n}\n\nexport function convertRouteTreeToFlightRouterState(\n routeTree: RouteTree\n): FlightRouterState {\n const parallelRoutes: Record = {}\n if (routeTree.slots !== null) {\n for (const parallelRouteKey in routeTree.slots) {\n parallelRoutes[parallelRouteKey] = convertRouteTreeToFlightRouterState(\n routeTree.slots[parallelRouteKey]\n )\n }\n }\n const flightRouterState: FlightRouterState = [\n routeTree.segment,\n parallelRoutes,\n null,\n null,\n routeTree.isRootLayout,\n ]\n return flightRouterState\n}\n\nexport async function fetchRouteOnCacheMiss(\n entry: PendingRouteCacheEntry,\n task: PrefetchTask,\n key: RouteCacheKey\n): Promise | null> {\n // This function is allowed to use async/await because it contains the actual\n // fetch that gets issued on a cache miss. Notice it writes the result to the\n // cache entry directly, rather than return data that is then written by\n // the caller.\n const pathname = key.pathname\n const search = key.search\n const nextUrl = key.nextUrl\n const segmentPath = '/_tree' as SegmentRequestKey\n\n const headers: RequestHeaders = {\n [RSC_HEADER]: '1',\n [NEXT_ROUTER_PREFETCH_HEADER]: '1',\n [NEXT_ROUTER_SEGMENT_PREFETCH_HEADER]: segmentPath,\n }\n if (nextUrl !== null) {\n headers[NEXT_URL] = nextUrl\n }\n\n try {\n const url = new URL(pathname + search, location.origin)\n let response\n let urlAfterRedirects\n if (isOutputExportMode) {\n // In output: \"export\" mode, we can't use headers to request a particular\n // segment. Instead, we encode the extra request information into the URL.\n // This is not part of the \"public\" interface of the app; it's an internal\n // Next.js implementation detail that the app developer should not need to\n // concern themselves with.\n //\n // For example, to request a segment:\n //\n // Path passed to : /path/to/page\n // Path passed to fetch: /path/to/page/__next-segments/_tree\n //\n // (This is not the exact protocol, just an illustration.)\n //\n // Before we do that, though, we need to account for redirects. Even in\n // output: \"export\" mode, a proxy might redirect the page to a different\n // location, but we shouldn't assume or expect that they also redirect all\n // the segment files, too.\n //\n // To check whether the page is redirected, previously we perform a range\n // request of 64 bytes of the HTML document to check if the target page\n // is part of this app (by checking if build id matches). Only if the target\n // page is part of this app do we determine the final canonical URL.\n //\n // However, as mentioned in https://github.com/vercel/next.js/pull/85903,\n // some popular static hosting providers (like Cloudflare Pages or Render.com)\n // do not support range requests, in the worst case, the entire HTML instead\n // of 64 bytes could be returned, which is wasteful.\n //\n // So instead, we drops the check for build id here, and simply perform\n // a HEAD request to rejects 1xx/4xx/5xx responses, and then determine the\n // final URL after redirects.\n //\n // NOTE: We could embed the route tree into the HTML document, to avoid\n // a second request. We're not doing that currently because it would make\n // the HTML document larger and affect normal page loads.\n const headResponse = await fetch(url, {\n method: 'HEAD',\n })\n if (headResponse.status < 200 || headResponse.status >= 400) {\n // The target page responded w/o a successful status code\n // Could be a WAF serving a 403, or a 5xx from a backend\n //\n // Note that we can't use headResponse.ok here, because\n // Response#ok returns `false` with 3xx responses.\n rejectRouteCacheEntry(entry, Date.now() + 10 * 1000)\n return null\n }\n\n urlAfterRedirects = headResponse.redirected\n ? new URL(headResponse.url)\n : url\n\n response = await fetchPrefetchResponse(\n addSegmentPathToUrlInOutputExportMode(urlAfterRedirects, segmentPath),\n headers\n )\n } else {\n // \"Server\" mode. We can use request headers instead of the pathname.\n // TODO: The eventual plan is to get rid of our custom request headers and\n // encode everything into the URL, using a similar strategy to the\n // \"output: export\" block above.\n response = await fetchPrefetchResponse(url, headers)\n urlAfterRedirects =\n response !== null && response.redirected ? new URL(response.url) : url\n }\n\n if (\n !response ||\n !response.ok ||\n // 204 is a Cache miss. Though theoretically this shouldn't happen when\n // PPR is enabled, because we always respond to route tree requests, even\n // if it needs to be blockingly generated on demand.\n response.status === 204 ||\n !response.body\n ) {\n // Server responded with an error, or with a miss. We should still cache\n // the response, but we can try again after 10 seconds.\n rejectRouteCacheEntry(entry, Date.now() + 10 * 1000)\n return null\n }\n\n // TODO: The canonical URL is the href without the origin. I think\n // historically the reason for this is because the initial canonical URL\n // gets passed as a prop to the top-level React component, which means it\n // needs to be computed during SSR. If it were to include the origin, it\n // would need to always be same as location.origin on the client, to prevent\n // a hydration mismatch. To sidestep this complexity, we omit the origin.\n //\n // However, since this is neither a native URL object nor a fully qualified\n // URL string, we need to be careful about how we use it. To prevent subtle\n // mistakes, we should create a special type for it, instead of just string.\n // Or, we should just use a (readonly) URL object instead. The type of the\n // prop that we pass to seed the initial state does not need to be the same\n // type as the state itself.\n const canonicalUrl = createHrefFromUrl(urlAfterRedirects)\n\n // Check whether the response varies based on the Next-Url header.\n const varyHeader = response.headers.get('vary')\n const couldBeIntercepted =\n varyHeader !== null && varyHeader.includes(NEXT_URL)\n\n // Track when the network connection closes.\n const closed = createPromiseWithResolvers()\n\n // This checks whether the response was served from the per-segment cache,\n // rather than the old prefetching flow. If it fails, it implies that PPR\n // is disabled on this route.\n const routeIsPPREnabled =\n response.headers.get(NEXT_DID_POSTPONE_HEADER) === '2' ||\n // In output: \"export\" mode, we can't rely on response headers. But if we\n // receive a well-formed response, we can assume it's a static response,\n // because all data is static in this mode.\n isOutputExportMode\n\n if (routeIsPPREnabled) {\n const prefetchStream = createPrefetchResponseStream(\n response.body,\n closed.resolve,\n function onResponseSizeUpdate(size) {\n setSizeInCacheMap(entry, size)\n }\n )\n const serverData = await createFromNextReadableStream(\n prefetchStream,\n headers\n )\n if (serverData.buildId !== getAppBuildId()) {\n // The server build does not match the client. Treat as a 404. During\n // an actual navigation, the router will trigger an MPA navigation.\n // TODO: Consider moving the build ID to a response header so we can check\n // it before decoding the response, and so there's one way of checking\n // across all response types.\n // TODO: We should cache the fact that this is an MPA navigation.\n rejectRouteCacheEntry(entry, Date.now() + 10 * 1000)\n return null\n }\n\n // Get the params that were used to render the target page. These may\n // be different from the params in the request URL, if the page\n // was rewritten.\n const renderedPathname = getRenderedPathname(response)\n const renderedSearch = getRenderedSearch(response)\n\n // Convert the server-sent data into the RouteTree format used by the\n // client cache.\n //\n // During this traversal, we accumulate additional data into this\n // \"accumulator\" object.\n const acc: RouteTreeAccumulator = { metadataVaryPath: null }\n const routeTree = convertRootTreePrefetchToRouteTree(\n serverData,\n renderedPathname,\n renderedSearch,\n acc\n )\n const metadataVaryPath = acc.metadataVaryPath\n if (metadataVaryPath === null) {\n rejectRouteCacheEntry(entry, Date.now() + 10 * 1000)\n return null\n }\n\n const staleTimeMs = getStaleTimeMs(serverData.staleTime)\n fulfillRouteCacheEntry(\n entry,\n routeTree,\n metadataVaryPath,\n Date.now() + staleTimeMs,\n couldBeIntercepted,\n canonicalUrl,\n renderedSearch,\n routeIsPPREnabled\n )\n } else {\n // PPR is not enabled for this route. The server responds with a\n // different format (FlightRouterState) that we need to convert.\n // TODO: We will unify the responses eventually. I'm keeping the types\n // separate for now because FlightRouterState has so many\n // overloaded concerns.\n const prefetchStream = createPrefetchResponseStream(\n response.body,\n closed.resolve,\n function onResponseSizeUpdate(size) {\n setSizeInCacheMap(entry, size)\n }\n )\n const serverData =\n await createFromNextReadableStream(\n prefetchStream,\n headers\n )\n if (serverData.b !== getAppBuildId()) {\n // The server build does not match the client. Treat as a 404. During\n // an actual navigation, the router will trigger an MPA navigation.\n // TODO: Consider moving the build ID to a response header so we can check\n // it before decoding the response, and so there's one way of checking\n // across all response types.\n // TODO: We should cache the fact that this is an MPA navigation.\n rejectRouteCacheEntry(entry, Date.now() + 10 * 1000)\n return null\n }\n\n writeDynamicTreeResponseIntoCache(\n Date.now(),\n task,\n // The non-PPR response format is what we'd get if we prefetched these segments\n // using the LoadingBoundary fetch strategy, so mark their cache entries accordingly.\n FetchStrategy.LoadingBoundary,\n response as RSCResponse,\n serverData,\n entry,\n couldBeIntercepted,\n canonicalUrl,\n routeIsPPREnabled\n )\n }\n\n if (!couldBeIntercepted) {\n // This route will never be intercepted. So we can use this entry for all\n // requests to this route, regardless of the Next-Url header. This works\n // because when reading the cache we always check for a valid\n // non-intercepted entry first.\n\n // Re-key the entry. The `set` implementation handles removing it from\n // its previous position in the cache. We don't need to do anything to\n // update the LRU, because the entry is already in it.\n // TODO: Treat this as an upsert — should check if an entry already\n // exists at the new keypath, and if so, whether we should keep that\n // one instead.\n const fulfilledVaryPath: RouteVaryPath = getFulfilledRouteVaryPath(\n pathname,\n search,\n nextUrl,\n couldBeIntercepted\n )\n const isRevalidation = false\n setInCacheMap(routeCacheMap, fulfilledVaryPath, entry, isRevalidation)\n }\n // Return a promise that resolves when the network connection closes, so\n // the scheduler can track the number of concurrent network connections.\n return { value: null, closed: closed.promise }\n } catch (error) {\n // Either the connection itself failed, or something bad happened while\n // decoding the response.\n rejectRouteCacheEntry(entry, Date.now() + 10 * 1000)\n return null\n }\n}\n\nexport async function fetchSegmentOnCacheMiss(\n route: FulfilledRouteCacheEntry,\n segmentCacheEntry: PendingSegmentCacheEntry,\n routeKey: RouteCacheKey,\n tree: RouteTree\n): Promise | null> {\n // This function is allowed to use async/await because it contains the actual\n // fetch that gets issued on a cache miss. Notice it writes the result to the\n // cache entry directly, rather than return data that is then written by\n // the caller.\n //\n // Segment fetches are non-blocking so we don't need to ping the scheduler\n // on completion.\n\n // Use the canonical URL to request the segment, not the original URL. These\n // are usually the same, but the canonical URL will be different if the route\n // tree response was redirected. To avoid an extra waterfall on every segment\n // request, we pass the redirected URL instead of the original one.\n const url = new URL(route.canonicalUrl, location.origin)\n const nextUrl = routeKey.nextUrl\n\n const requestKey = tree.requestKey\n const normalizedRequestKey =\n requestKey === ROOT_SEGMENT_REQUEST_KEY\n ? // The root segment is a special case. To simplify the server-side\n // handling of these requests, we encode the root segment path as\n // `_index` instead of as an empty string. This should be treated as\n // an implementation detail and not as a stable part of the protocol.\n // It just needs to match the equivalent logic that happens when\n // prerendering the responses. It should not leak outside of Next.js.\n ('/_index' as SegmentRequestKey)\n : requestKey\n\n const headers: RequestHeaders = {\n [RSC_HEADER]: '1',\n [NEXT_ROUTER_PREFETCH_HEADER]: '1',\n [NEXT_ROUTER_SEGMENT_PREFETCH_HEADER]: normalizedRequestKey,\n }\n if (nextUrl !== null) {\n headers[NEXT_URL] = nextUrl\n }\n\n const requestUrl = isOutputExportMode\n ? // In output: \"export\" mode, we need to add the segment path to the URL.\n addSegmentPathToUrlInOutputExportMode(url, normalizedRequestKey)\n : url\n try {\n const response = await fetchPrefetchResponse(requestUrl, headers)\n if (\n !response ||\n !response.ok ||\n response.status === 204 || // Cache miss\n // This checks whether the response was served from the per-segment cache,\n // rather than the old prefetching flow. If it fails, it implies that PPR\n // is disabled on this route. Theoretically this should never happen\n // because we only issue requests for segments once we've verified that\n // the route supports PPR.\n (response.headers.get(NEXT_DID_POSTPONE_HEADER) !== '2' &&\n // In output: \"export\" mode, we can't rely on response headers. But if\n // we receive a well-formed response, we can assume it's a static\n // response, because all data is static in this mode.\n !isOutputExportMode) ||\n !response.body\n ) {\n // Server responded with an error, or with a miss. We should still cache\n // the response, but we can try again after 10 seconds.\n rejectSegmentCacheEntry(segmentCacheEntry, Date.now() + 10 * 1000)\n return null\n }\n\n // Track when the network connection closes.\n const closed = createPromiseWithResolvers()\n\n // Wrap the original stream in a new stream that never closes. That way the\n // Flight client doesn't error if there's a hanging promise.\n const prefetchStream = createPrefetchResponseStream(\n response.body,\n closed.resolve,\n function onResponseSizeUpdate(size) {\n setSizeInCacheMap(segmentCacheEntry, size)\n }\n )\n const serverData = await (createFromNextReadableStream(\n prefetchStream,\n headers\n ) as Promise)\n if (serverData.buildId !== getAppBuildId()) {\n // The server build does not match the client. Treat as a 404. During\n // an actual navigation, the router will trigger an MPA navigation.\n // TODO: Consider moving the build ID to a response header so we can check\n // it before decoding the response, and so there's one way of checking\n // across all response types.\n rejectSegmentCacheEntry(segmentCacheEntry, Date.now() + 10 * 1000)\n return null\n }\n return {\n value: fulfillSegmentCacheEntry(\n segmentCacheEntry,\n serverData.rsc,\n serverData.loading,\n // TODO: The server does not currently provide per-segment stale time.\n // So we use the stale time of the route.\n route.staleAt,\n serverData.isPartial\n ),\n // Return a promise that resolves when the network connection closes, so\n // the scheduler can track the number of concurrent network connections.\n closed: closed.promise,\n }\n } catch (error) {\n // Either the connection itself failed, or something bad happened while\n // decoding the response.\n rejectSegmentCacheEntry(segmentCacheEntry, Date.now() + 10 * 1000)\n return null\n }\n}\n\nexport async function fetchSegmentPrefetchesUsingDynamicRequest(\n task: PrefetchTask,\n route: FulfilledRouteCacheEntry,\n fetchStrategy:\n | FetchStrategy.LoadingBoundary\n | FetchStrategy.PPRRuntime\n | FetchStrategy.Full,\n dynamicRequestTree: FlightRouterState,\n spawnedEntries: Map\n): Promise | null> {\n const key = task.key\n const url = new URL(route.canonicalUrl, location.origin)\n const nextUrl = key.nextUrl\n\n if (\n spawnedEntries.size === 1 &&\n spawnedEntries.has(route.metadata.requestKey)\n ) {\n // The only thing pending is the head. Instruct the server to\n // skip over everything else.\n dynamicRequestTree = MetadataOnlyRequestTree\n }\n\n const headers: RequestHeaders = {\n [RSC_HEADER]: '1',\n [NEXT_ROUTER_STATE_TREE_HEADER]:\n prepareFlightRouterStateForRequest(dynamicRequestTree),\n }\n if (nextUrl !== null) {\n headers[NEXT_URL] = nextUrl\n }\n switch (fetchStrategy) {\n case FetchStrategy.Full: {\n // We omit the prefetch header from a full prefetch because it's essentially\n // just a navigation request that happens ahead of time — it should include\n // all the same data in the response.\n break\n }\n case FetchStrategy.PPRRuntime: {\n headers[NEXT_ROUTER_PREFETCH_HEADER] = '2'\n break\n }\n case FetchStrategy.LoadingBoundary: {\n headers[NEXT_ROUTER_PREFETCH_HEADER] = '1'\n break\n }\n default: {\n fetchStrategy satisfies never\n }\n }\n\n try {\n const response = await fetchPrefetchResponse(url, headers)\n if (!response || !response.ok || !response.body) {\n // Server responded with an error, or with a miss. We should still cache\n // the response, but we can try again after 10 seconds.\n rejectSegmentEntriesIfStillPending(spawnedEntries, Date.now() + 10 * 1000)\n return null\n }\n\n const renderedSearch = getRenderedSearch(response)\n if (renderedSearch !== route.renderedSearch) {\n // The search params that were used to render the target page are\n // different from the search params in the request URL. This only happens\n // when there's a dynamic rewrite in between the tree prefetch and the\n // data prefetch.\n // TODO: For now, since this is an edge case, we reject the prefetch, but\n // the proper way to handle this is to evict the stale route tree entry\n // then fill the cache with the new response.\n rejectSegmentEntriesIfStillPending(spawnedEntries, Date.now() + 10 * 1000)\n return null\n }\n\n // Track when the network connection closes.\n const closed = createPromiseWithResolvers()\n\n let fulfilledEntries: Array | null = null\n const prefetchStream = createPrefetchResponseStream(\n response.body,\n closed.resolve,\n function onResponseSizeUpdate(totalBytesReceivedSoFar) {\n // When processing a dynamic response, we don't know how large each\n // individual segment is, so approximate by assiging each segment\n // the average of the total response size.\n if (fulfilledEntries === null) {\n // Haven't received enough data yet to know which segments\n // were included.\n return\n }\n const averageSize = totalBytesReceivedSoFar / fulfilledEntries.length\n for (const entry of fulfilledEntries) {\n setSizeInCacheMap(entry, averageSize)\n }\n }\n )\n const serverData = await (createFromNextReadableStream(\n prefetchStream,\n headers\n ) as Promise)\n\n const isResponsePartial =\n fetchStrategy === FetchStrategy.PPRRuntime\n ? // A runtime prefetch may have holes.\n serverData.rp?.[0] === true\n : // Full and LoadingBoundary prefetches cannot have holes.\n // (even if we did set the prefetch header, we only use this codepath for non-PPR-enabled routes)\n false\n\n // Aside from writing the data into the cache, this function also returns\n // the entries that were fulfilled, so we can streamingly update their sizes\n // in the LRU as more data comes in.\n fulfilledEntries = writeDynamicRenderResponseIntoCache(\n Date.now(),\n task,\n fetchStrategy,\n response as RSCResponse,\n serverData,\n isResponsePartial,\n route,\n spawnedEntries\n )\n\n // Return a promise that resolves when the network connection closes, so\n // the scheduler can track the number of concurrent network connections.\n return { value: null, closed: closed.promise }\n } catch (error) {\n rejectSegmentEntriesIfStillPending(spawnedEntries, Date.now() + 10 * 1000)\n return null\n }\n}\n\nfunction writeDynamicTreeResponseIntoCache(\n now: number,\n task: PrefetchTask,\n fetchStrategy:\n | FetchStrategy.LoadingBoundary\n | FetchStrategy.PPRRuntime\n | FetchStrategy.Full,\n response: RSCResponse,\n serverData: NavigationFlightResponse,\n entry: PendingRouteCacheEntry,\n couldBeIntercepted: boolean,\n canonicalUrl: string,\n routeIsPPREnabled: boolean\n) {\n // Get the URL that was used to render the target page. This may be different\n // from the URL in the request URL, if the page was rewritten.\n const renderedSearch = getRenderedSearch(response)\n\n const normalizedFlightDataResult = normalizeFlightData(serverData.f)\n if (\n // A string result means navigating to this route will result in an\n // MPA navigation.\n typeof normalizedFlightDataResult === 'string' ||\n normalizedFlightDataResult.length !== 1\n ) {\n rejectRouteCacheEntry(entry, now + 10 * 1000)\n return\n }\n const flightData = normalizedFlightDataResult[0]\n if (!flightData.isRootRender) {\n // Unexpected response format.\n rejectRouteCacheEntry(entry, now + 10 * 1000)\n return\n }\n\n const flightRouterState = flightData.tree\n // For runtime prefetches, stale time is in the payload at rp[1].\n // For other responses, fall back to the header.\n const staleTimeSeconds =\n typeof serverData.rp?.[1] === 'number'\n ? serverData.rp[1]\n : parseInt(response.headers.get(NEXT_ROUTER_STALE_TIME_HEADER) ?? '', 10)\n const staleTimeMs = !isNaN(staleTimeSeconds)\n ? getStaleTimeMs(staleTimeSeconds)\n : STATIC_STALETIME_MS\n\n // If the response contains dynamic holes, then we must conservatively assume\n // that any individual segment might contain dynamic holes, and also the\n // head. If it did not contain dynamic holes, then we can assume every segment\n // and the head is completely static.\n const isResponsePartial =\n response.headers.get(NEXT_DID_POSTPONE_HEADER) === '1'\n\n // Convert the server-sent data into the RouteTree format used by the\n // client cache.\n //\n // During this traversal, we accumulate additional data into this\n // \"accumulator\" object.\n const acc: RouteTreeAccumulator = { metadataVaryPath: null }\n const routeTree = convertRootFlightRouterStateToRouteTree(\n flightRouterState,\n renderedSearch,\n acc\n )\n const metadataVaryPath = acc.metadataVaryPath\n if (metadataVaryPath === null) {\n rejectRouteCacheEntry(entry, now + 10 * 1000)\n return\n }\n\n const fulfilledEntry = fulfillRouteCacheEntry(\n entry,\n routeTree,\n metadataVaryPath,\n now + staleTimeMs,\n couldBeIntercepted,\n canonicalUrl,\n renderedSearch,\n routeIsPPREnabled\n )\n\n // If the server sent segment data as part of the response, we should write\n // it into the cache to prevent a second, redundant prefetch request.\n //\n // TODO: When `clientSegmentCache` is enabled, the server does not include\n // segment data when responding to a route tree prefetch request. However,\n // when `clientSegmentCache` is set to \"client-only\", and PPR is enabled (or\n // the page is fully static), the normal check is bypassed and the server\n // responds with the full page. This is a temporary situation until we can\n // remove the \"client-only\" option. Then, we can delete this function call.\n writeDynamicRenderResponseIntoCache(\n now,\n task,\n fetchStrategy,\n response,\n serverData,\n isResponsePartial,\n fulfilledEntry,\n null\n )\n}\n\nfunction rejectSegmentEntriesIfStillPending(\n entries: Map,\n staleAt: number\n): Array {\n const fulfilledEntries = []\n for (const entry of entries.values()) {\n if (entry.status === EntryStatus.Pending) {\n rejectSegmentCacheEntry(entry, staleAt)\n } else if (entry.status === EntryStatus.Fulfilled) {\n fulfilledEntries.push(entry)\n }\n }\n return fulfilledEntries\n}\n\nfunction writeDynamicRenderResponseIntoCache(\n now: number,\n task: PrefetchTask,\n fetchStrategy:\n | FetchStrategy.LoadingBoundary\n | FetchStrategy.PPRRuntime\n | FetchStrategy.Full,\n response: RSCResponse,\n serverData: NavigationFlightResponse,\n isResponsePartial: boolean,\n route: FulfilledRouteCacheEntry,\n spawnedEntries: Map | null\n): Array | null {\n if (serverData.b !== getAppBuildId()) {\n // The server build does not match the client. Treat as a 404. During\n // an actual navigation, the router will trigger an MPA navigation.\n // TODO: Consider moving the build ID to a response header so we can check\n // it before decoding the response, and so there's one way of checking\n // across all response types.\n if (spawnedEntries !== null) {\n rejectSegmentEntriesIfStillPending(spawnedEntries, now + 10 * 1000)\n }\n return null\n }\n\n const flightDatas = normalizeFlightData(serverData.f)\n if (typeof flightDatas === 'string') {\n // This means navigating to this route will result in an MPA navigation.\n // TODO: We should cache this, too, so that the MPA navigation is immediate.\n return null\n }\n\n // For runtime prefetches, stale time is in the payload at rp[1].\n // For other responses, fall back to the header.\n const staleTimeSeconds =\n typeof serverData.rp?.[1] === 'number'\n ? serverData.rp[1]\n : parseInt(response.headers.get(NEXT_ROUTER_STALE_TIME_HEADER) ?? '', 10)\n const staleTimeMs = !isNaN(staleTimeSeconds)\n ? getStaleTimeMs(staleTimeSeconds)\n : STATIC_STALETIME_MS\n const staleAt = now + staleTimeMs\n\n for (const flightData of flightDatas) {\n const seedData = flightData.seedData\n if (seedData !== null) {\n // The data sent by the server represents only a subtree of the app. We\n // need to find the part of the task tree that matches the response.\n //\n // segmentPath represents the parent path of subtree. It's a repeating\n // pattern of parallel route key and segment:\n //\n // [string, Segment, string, Segment, string, Segment, ...]\n const segmentPath = flightData.segmentPath\n let tree = route.tree\n for (let i = 0; i < segmentPath.length; i += 2) {\n const parallelRouteKey: string = segmentPath[i]\n if (tree?.slots?.[parallelRouteKey] !== undefined) {\n tree = tree.slots[parallelRouteKey]\n } else {\n if (spawnedEntries !== null) {\n rejectSegmentEntriesIfStillPending(spawnedEntries, now + 10 * 1000)\n }\n return null\n }\n }\n\n writeSeedDataIntoCache(\n now,\n task,\n fetchStrategy,\n route,\n tree,\n staleAt,\n seedData,\n isResponsePartial,\n spawnedEntries\n )\n }\n\n const head = flightData.head\n if (head !== null) {\n fulfillEntrySpawnedByRuntimePrefetch(\n now,\n fetchStrategy,\n route,\n head,\n null,\n flightData.isHeadPartial,\n staleAt,\n route.metadata,\n spawnedEntries\n )\n }\n }\n // Any entry that's still pending was intentionally not rendered by the\n // server, because it was inside the loading boundary. Mark them as rejected\n // so we know not to fetch them again.\n // TODO: If PPR is enabled on some routes but not others, then it's possible\n // that a different page is able to do a per-segment prefetch of one of the\n // segments we're marking as rejected here. We should mark on the segment\n // somehow that the reason for the rejection is because of a non-PPR prefetch.\n // That way a per-segment prefetch knows to disregard the rejection.\n if (spawnedEntries !== null) {\n const fulfilledEntries = rejectSegmentEntriesIfStillPending(\n spawnedEntries,\n now + 10 * 1000\n )\n return fulfilledEntries\n }\n return null\n}\n\nfunction writeSeedDataIntoCache(\n now: number,\n task: PrefetchTask,\n fetchStrategy:\n | FetchStrategy.LoadingBoundary\n | FetchStrategy.PPRRuntime\n | FetchStrategy.Full,\n route: FulfilledRouteCacheEntry,\n tree: RouteTree,\n staleAt: number,\n seedData: CacheNodeSeedData,\n isResponsePartial: boolean,\n entriesOwnedByCurrentTask: Map<\n SegmentRequestKey,\n PendingSegmentCacheEntry\n > | null\n) {\n // This function is used to write the result of a runtime server request\n // (CacheNodeSeedData) into the prefetch cache.\n const rsc = seedData[0]\n const loading = seedData[2]\n const isPartial = rsc === null || isResponsePartial\n fulfillEntrySpawnedByRuntimePrefetch(\n now,\n fetchStrategy,\n route,\n rsc,\n loading,\n isPartial,\n staleAt,\n tree,\n entriesOwnedByCurrentTask\n )\n\n // Recursively write the child data into the cache.\n const slots = tree.slots\n if (slots !== null) {\n const seedDataChildren = seedData[1]\n for (const parallelRouteKey in slots) {\n const childTree = slots[parallelRouteKey]\n const childSeedData: CacheNodeSeedData | null | void =\n seedDataChildren[parallelRouteKey]\n if (childSeedData !== null && childSeedData !== undefined) {\n writeSeedDataIntoCache(\n now,\n task,\n fetchStrategy,\n route,\n childTree,\n staleAt,\n childSeedData,\n isResponsePartial,\n entriesOwnedByCurrentTask\n )\n }\n }\n }\n}\n\nfunction fulfillEntrySpawnedByRuntimePrefetch(\n now: number,\n fetchStrategy:\n | FetchStrategy.LoadingBoundary\n | FetchStrategy.PPRRuntime\n | FetchStrategy.Full,\n route: FulfilledRouteCacheEntry,\n rsc: React.ReactNode,\n loading: LoadingModuleData | Promise,\n isPartial: boolean,\n staleAt: number,\n tree: RouteTree,\n entriesOwnedByCurrentTask: Map<\n SegmentRequestKey,\n PendingSegmentCacheEntry\n > | null\n) {\n // We should only write into cache entries that are owned by us. Or create\n // a new one and write into that. We must never write over an entry that was\n // created by a different task, because that causes data races.\n const ownedEntry =\n entriesOwnedByCurrentTask !== null\n ? entriesOwnedByCurrentTask.get(tree.requestKey)\n : undefined\n if (ownedEntry !== undefined) {\n fulfillSegmentCacheEntry(ownedEntry, rsc, loading, staleAt, isPartial)\n } else {\n // There's no matching entry. Attempt to create a new one.\n const possiblyNewEntry = readOrCreateSegmentCacheEntry(\n now,\n fetchStrategy,\n route,\n tree\n )\n if (possiblyNewEntry.status === EntryStatus.Empty) {\n // Confirmed this is a new entry. We can fulfill it.\n const newEntry = possiblyNewEntry\n fulfillSegmentCacheEntry(\n upgradeToPendingSegment(newEntry, fetchStrategy),\n rsc,\n loading,\n staleAt,\n isPartial\n )\n } else {\n // There was already an entry in the cache. But we may be able to\n // replace it with the new one from the server.\n const newEntry = fulfillSegmentCacheEntry(\n upgradeToPendingSegment(\n createDetachedSegmentCacheEntry(staleAt),\n fetchStrategy\n ),\n rsc,\n loading,\n staleAt,\n isPartial\n )\n upsertSegmentEntry(\n now,\n getSegmentVaryPathForRequest(fetchStrategy, tree),\n newEntry\n )\n }\n }\n}\n\nasync function fetchPrefetchResponse(\n url: URL,\n headers: RequestHeaders\n): Promise | null> {\n const fetchPriority = 'low'\n // When issuing a prefetch request, don't immediately decode the response; we\n // use the lower level `createFromResponse` API instead because we need to do\n // some extra processing of the response stream. See\n // `createPrefetchResponseStream` for more details.\n const shouldImmediatelyDecode = false\n const response = await createFetch(\n url,\n headers,\n fetchPriority,\n shouldImmediatelyDecode\n )\n if (!response.ok) {\n return null\n }\n\n // Check the content type\n if (isOutputExportMode) {\n // In output: \"export\" mode, we relaxed about the content type, since it's\n // not Next.js that's serving the response. If the status is OK, assume the\n // response is valid. If it's not a valid response, the Flight client won't\n // be able to decode it, and we'll treat it as a miss.\n } else {\n const contentType = response.headers.get('content-type')\n const isFlightResponse =\n contentType && contentType.startsWith(RSC_CONTENT_TYPE_HEADER)\n if (!isFlightResponse) {\n return null\n }\n }\n return response\n}\n\nfunction createPrefetchResponseStream(\n originalFlightStream: ReadableStream,\n onStreamClose: () => void,\n onResponseSizeUpdate: (size: number) => void\n): ReadableStream {\n // When PPR is enabled, prefetch streams may contain references that never\n // resolve, because that's how we encode dynamic data access. In the decoded\n // object returned by the Flight client, these are reified into hanging\n // promises that suspend during render, which is effectively what we want.\n // The UI resolves when it switches to the dynamic data stream\n // (via useDeferredValue(dynamic, static)).\n //\n // However, the Flight implementation currently errors if the server closes\n // the response before all the references are resolved. As a cheat to work\n // around this, we wrap the original stream in a new stream that never closes,\n // and therefore doesn't error.\n //\n // While processing the original stream, we also incrementally update the size\n // of the cache entry in the LRU.\n let totalByteLength = 0\n const reader = originalFlightStream.getReader()\n return new ReadableStream({\n async pull(controller) {\n while (true) {\n const { done, value } = await reader.read()\n if (!done) {\n // Pass to the target stream and keep consuming the Flight response\n // from the server.\n controller.enqueue(value)\n\n // Incrementally update the size of the cache entry in the LRU.\n // NOTE: Since prefetch responses are delivered in a single chunk,\n // it's not really necessary to do this streamingly, but I'm doing it\n // anyway in case this changes in the future.\n totalByteLength += value.byteLength\n onResponseSizeUpdate(totalByteLength)\n continue\n }\n // The server stream has closed. Exit, but intentionally do not close\n // the target stream. We do notify the caller, though.\n onStreamClose()\n return\n }\n },\n })\n}\n\nfunction addSegmentPathToUrlInOutputExportMode(\n url: URL,\n segmentPath: SegmentRequestKey\n): URL {\n if (isOutputExportMode) {\n // In output: \"export\" mode, we cannot use a header to encode the segment\n // path. Instead, we append it to the end of the pathname.\n const staticUrl = new URL(url)\n const routeDir = staticUrl.pathname.endsWith('/')\n ? staticUrl.pathname.slice(0, -1)\n : staticUrl.pathname\n const staticExportFilename =\n convertSegmentPathToStaticExportFilename(segmentPath)\n staticUrl.pathname = `${routeDir}/${staticExportFilename}`\n return staticUrl\n }\n return url\n}\n\n/**\n * Checks whether the new fetch strategy is likely to provide more content than the old one.\n *\n * Generally, when an app uses dynamic data, a \"more specific\" fetch strategy is expected to provide more content:\n * - `LoadingBoundary` only provides static layouts\n * - `PPR` can provide shells for each segment (even for segments that use dynamic data)\n * - `PPRRuntime` can additionally include content that uses searchParams, params, or cookies\n * - `Full` includes all the content, even if it uses dynamic data\n *\n * However, it's possible that a more specific fetch strategy *won't* give us more content if:\n * - a segment is fully static\n * (then, `PPR`/`PPRRuntime`/`Full` will all yield equivalent results)\n * - providing searchParams/params/cookies doesn't reveal any more content, e.g. because of an `await connection()`\n * (then, `PPR` and `PPRRuntime` will yield equivalent results, only `Full` will give us more)\n * Because of this, when comparing two segments, we should also check if the existing segment is partial.\n * If it's not partial, then there's no need to prefetch it again, even using a \"more specific\" strategy.\n * There's currently no way to know if `PPRRuntime` will yield more data that `PPR`, so we have to assume it will.\n *\n * Also note that, in practice, we don't expect to be comparing `LoadingBoundary` to `PPR`/`PPRRuntime`,\n * because a non-PPR-enabled route wouldn't ever use the latter strategies. It might however use `Full`.\n */\nexport function canNewFetchStrategyProvideMoreContent(\n currentStrategy: FetchStrategy,\n newStrategy: FetchStrategy\n): boolean {\n return currentStrategy < newStrategy\n}\n"],"names":["EntryStatus","canNewFetchStrategyProvideMoreContent","convertRouteTreeToFlightRouterState","createDetachedSegmentCacheEntry","fetchRouteOnCacheMiss","fetchSegmentOnCacheMiss","fetchSegmentPrefetchesUsingDynamicRequest","getCurrentCacheVersion","getStaleTimeMs","overwriteRevalidatingSegmentCacheEntry","pingInvalidationListeners","readOrCreateRevalidatingSegmentEntry","readOrCreateRouteCacheEntry","readOrCreateSegmentCacheEntry","readRouteCacheEntry","readSegmentCacheEntry","requestOptimisticRouteCacheEntry","revalidateEntireCache","upgradeToPendingSegment","upsertSegmentEntry","waitForSegmentCacheEntry","staleTimeSeconds","Math","max","isOutputExportMode","process","env","NODE_ENV","__NEXT_CONFIG_OUTPUT","MetadataOnlyRequestTree","routeCacheMap","createCacheMap","segmentCacheMap","invalidationListeners","currentCacheVersion","nextUrl","tree","startRevalidationCooldown","pingVisibleLinks","attachInvalidationListener","task","onInvalidate","Set","add","notifyInvalidationListener","error","reportError","console","tasks","isPrefetchTaskDirty","now","key","varyPath","getRouteVaryPath","pathname","search","isRevalidation","getFromCacheMap","readRevalidatingSegmentCacheEntry","pendingEntry","promiseWithResolvers","promise","createPromiseWithResolvers","existingEntry","canonicalUrl","status","blockedTasks","metadata","couldBeIntercepted","isPPREnabled","renderedSearch","ref","size","staleAt","Infinity","version","setInCacheMap","requestedUrl","requestedSearch","urlWithoutSearchParams","URL","routeWithNoSearchParams","createPrefetchRequestKey","href","canonicalUrlForRouteWithNoSearchParams","origin","optimisticCanonicalSearch","optimisticRenderedSearch","optimisticUrl","location","optimisticCanonicalUrl","createHrefFromUrl","optimisticRouteTree","createOptimisticRouteTree","optimisticMetadataTree","optimisticEntry","newRenderedSearch","clonedSlots","originalSlots","slots","parallelRouteKey","childTree","isPage","requestKey","segment","clonePageVaryPathWithNewSearchParams","isRootLayout","hasLoadingBoundary","hasRuntimePrefetch","fetchStrategy","route","varyPathForRequest","getSegmentVaryPathForRequest","candidateEntry","isValueExpired","isPartial","rejectedEntry","loading","rsc","deleteFromCacheMap","emptyEntry","FetchStrategy","PPR","Full","pingBlockedTasks","entry","pingPrefetchTask","fulfillRouteCacheEntry","metadataVaryPath","HEAD_REQUEST_KEY","HasLoadingBoundary","SubtreeHasNoLoadingBoundary","fulfilledEntry","fulfillSegmentCacheEntry","segmentCacheEntry","resolve","rejectRouteCacheEntry","rejectSegmentCacheEntry","convertRootTreePrefetchToRouteTree","rootTree","renderedPathname","acc","pathnameParts","split","filter","p","index","rootSegment","ROOT_SEGMENT_REQUEST_KEY","convertTreePrefetchToRouteTree","prefetch","partialVaryPath","pathnamePartsIndex","prefetchSlots","finalizeLayoutVaryPath","childPrefetch","childParamName","name","childParamType","paramType","childServerSentParamKey","paramKey","childDoesAppearInURL","childSegment","childPartialVaryPath","childParamValue","parseDynamicParamFromURLPart","childParamKey","getCacheKeyForDynamicParam","appendLayoutVaryPath","doesStaticSegmentAppearInURL","childPathnamePartsIndex","childRequestKeyPart","createSegmentRequestKeyPart","childRequestKey","appendSegmentRequestKeyPart","endsWith","PAGE_SEGMENT_KEY","finalizePageVaryPath","finalizeMetadataVaryPath","SegmentHasLoadingBoundary","convertRootFlightRouterStateToRouteTree","flightRouterState","convertFlightRouterStateToRouteTree","parentPartialVaryPath","originalSegment","Array","isArray","paramCacheKey","parallelRoutes","childRouterState","undefined","routeTree","segmentPath","headers","RSC_HEADER","NEXT_ROUTER_PREFETCH_HEADER","NEXT_ROUTER_SEGMENT_PREFETCH_HEADER","NEXT_URL","url","response","urlAfterRedirects","headResponse","fetch","method","Date","redirected","fetchPrefetchResponse","addSegmentPathToUrlInOutputExportMode","ok","body","varyHeader","get","includes","closed","routeIsPPREnabled","NEXT_DID_POSTPONE_HEADER","prefetchStream","createPrefetchResponseStream","onResponseSizeUpdate","setSizeInCacheMap","serverData","createFromNextReadableStream","buildId","getAppBuildId","getRenderedPathname","getRenderedSearch","staleTimeMs","staleTime","b","writeDynamicTreeResponseIntoCache","LoadingBoundary","fulfilledVaryPath","getFulfilledRouteVaryPath","value","routeKey","normalizedRequestKey","requestUrl","dynamicRequestTree","spawnedEntries","has","NEXT_ROUTER_STATE_TREE_HEADER","prepareFlightRouterStateForRequest","PPRRuntime","rejectSegmentEntriesIfStillPending","fulfilledEntries","totalBytesReceivedSoFar","averageSize","length","isResponsePartial","rp","writeDynamicRenderResponseIntoCache","normalizedFlightDataResult","normalizeFlightData","f","flightData","isRootRender","parseInt","NEXT_ROUTER_STALE_TIME_HEADER","isNaN","STATIC_STALETIME_MS","entries","values","push","flightDatas","seedData","i","writeSeedDataIntoCache","head","fulfillEntrySpawnedByRuntimePrefetch","isHeadPartial","entriesOwnedByCurrentTask","seedDataChildren","childSeedData","ownedEntry","possiblyNewEntry","newEntry","fetchPriority","shouldImmediatelyDecode","createFetch","contentType","isFlightResponse","startsWith","RSC_CONTENT_TYPE_HEADER","originalFlightStream","onStreamClose","totalByteLength","reader","getReader","ReadableStream","pull","controller","done","read","enqueue","byteLength","staticUrl","routeDir","slice","staticExportFilename","convertSegmentPathToStaticExportFilename","currentStrategy","newStrategy"],"mappings":"AA+QEyB,QAAQC,GAAG,CAACC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAhGJ3B,WAAW,EAAA;eAAXA;;IAqkEFC,qCAAqC,EAAA;eAArCA;;IAhgCAC,mCAAmC,EAAA;eAAnCA;;IApcAC,+BAA+B,EAAA;eAA/BA;;IAydMC,qBAAqB,EAAA;eAArBA;;IAoRAC,uBAAuB,EAAA;eAAvBA;;IAqHAC,yCAAyC,EAAA;eAAzCA;;IA32CNC,sBAAsB,EAAA;eAAtBA;;IAvMAC,cAAc,EAAA;eAAdA;;IAqoBAC,sCAAsC,EAAA;eAAtCA;;IAzXAC,yBAAyB,EAAA;eAAzBA;;IAuUAC,oCAAoC,EAAA;eAApCA;;IAlPAC,2BAA2B,EAAA;eAA3BA;;IA2NAC,6BAA6B,EAAA;eAA7BA;;IA7RAC,mBAAmB,EAAA;eAAnBA;;IAmBAC,qBAAqB,EAAA;eAArBA;;IA2FAC,gCAAgC,EAAA;eAAhCA;;IA5LAC,qBAAqB,EAAA;eAArBA;;IAqhBAC,uBAAuB,EAAA;eAAvBA;;IA7EAC,kBAAkB,EAAA;eAAlBA;;IA3UAC,wBAAwB,EAAA;eAAxBA;;;gCApamB;kCAU5B;qCAMA;2BAOA;0BAcA;4BACuB;mCACI;0BAGyB;6BAOpD;0BAUA;sCAQA;mCAQA;iCAC6B;uBACH;yBACA;uBACH;sCACa;AAMpC,SAASZ,eAAea,gBAAwB;IACrD,OAAOC,KAAKC,GAAG,CAACF,kBAAkB,MAAM;AAC1C;AA6EO,IAAWrB,cAAAA,WAAAA,GAAAA,SAAAA,WAAAA;;;;;WAAAA;;AA+FlB,MAAMwB,yEACqB,gBACzBC,QAAQC,GAAG,CAACE,oBAAoB,mBAAK;AAEvC,MAAMC,0BAA6C;IACjD;IACA,CAAC;IACD;IACA;CACD;AAED,IAAIC,gBAA2CC,CAAAA,GAAAA,UAAAA,cAAc;AAC7D,IAAIC,kBAA+CD,CAAAA,GAAAA,UAAAA,cAAc;AAEjE,4EAA4E;AAC5E,8EAA8E;AAC9E,oEAAoE;AACpE,8EAA8E;AAC9E,2EAA2E;AAC3E,4BAA4B;AAC5B,IAAIE,wBAAkD;AAEtD,0DAA0D;AAC1D,IAAIC,sBAAsB;AAEnB,SAAS3B;IACd,OAAO2B;AACT;AAQO,SAASjB,sBACdkB,OAAsB,EACtBC,IAAuB;IAEvB,4EAA4E;IAC5E,0EAA0E;IAC1E,uEAAuE;IACvE,uEAAuE;IACvE,yEAAyE;IACzE,yCAAyC;IACzCF;IAEA,yEAAyE;IACzEG,CAAAA,GAAAA,WAAAA,yBAAyB;IAEzB,wEAAwE;IACxEC,CAAAA,GAAAA,OAAAA,gBAAgB,EAACH,SAASC;IAE1B,qEAAqE;IACrE,uEAAuE;IACvE,aAAa;IACb1B,0BAA0ByB,SAASC;AACrC;AAEA,SAASG,2BAA2BC,IAAkB;IACpD,2EAA2E;IAC3E,0EAA0E;IAC1E,2EAA2E;IAC3E,2EAA2E;IAC3E,wCAAwC;IACxC,IAAIA,KAAKC,YAAY,KAAK,MAAM;QAC9B,IAAIR,0BAA0B,MAAM;YAClCA,wBAAwB,IAAIS,IAAI;gBAACF;aAAK;QACxC,OAAO;YACLP,sBAAsBU,GAAG,CAACH;QAC5B;IACF;AACF;AAEA,SAASI,2BAA2BJ,IAAkB;IACpD,MAAMC,eAAeD,KAAKC,YAAY;IACtC,IAAIA,iBAAiB,MAAM;QACzB,4EAA4E;QAC5E,aAAa;QACbD,KAAKC,YAAY,GAAG;QAEpB,+DAA+D;QAC/D,IAAI;YACFA;QACF,EAAE,OAAOI,OAAO;YACd,IAAI,OAAOC,gBAAgB,YAAY;gBACrCA,YAAYD;YACd,OAAO;gBACLE,QAAQF,KAAK,CAACA;YAChB;QACF;IACF;AACF;AAEO,SAASnC,0BACdyB,OAAsB,EACtBC,IAAuB;IAEvB,4EAA4E;IAC5E,yEAAyE;IACzE,qEAAqE;IACrE,sBAAsB;IACtB,IAAIH,0BAA0B,MAAM;QAClC,MAAMe,QAAQf;QACdA,wBAAwB;QACxB,KAAK,MAAMO,QAAQQ,MAAO;YACxB,IAAIC,CAAAA,GAAAA,WAAAA,mBAAmB,EAACT,MAAML,SAASC,OAAO;gBAC5CQ,2BAA2BJ;YAC7B;QACF;IACF;AACF;AAEO,SAAS1B,oBACdoC,GAAW,EACXC,GAAkB;IAElB,MAAMC,WAA0BC,CAAAA,GAAAA,UAAAA,gBAAgB,EAC9CF,IAAIG,QAAQ,EACZH,IAAII,MAAM,EACVJ,IAAIhB,OAAO;IAEb,MAAMqB,iBAAiB;IACvB,OAAOC,CAAAA,GAAAA,UAAAA,eAAe,EACpBP,KACA3C,0BACAuB,eACAsB,UACAI;AAEJ;AAEO,SAASzC,sBACdmC,GAAW,EACXE,QAAyB;IAEzB,MAAMI,iBAAiB;IACvB,OAAOC,CAAAA,GAAAA,UAAAA,eAAe,EACpBP,KACA3C,0BACAyB,iBACAoB,UACAI;AAEJ;AAEA,SAASE,kCACPR,GAAW,EACXE,QAAyB;IAEzB,MAAMI,iBAAiB;IACvB,OAAOC,CAAAA,GAAAA,UAAAA,eAAe,EACpBP,KACA3C,0BACAyB,iBACAoB,UACAI;AAEJ;AAEO,SAASpC,yBACduC,YAAsC;IAEtC,uEAAuE;IACvE,4EAA4E;IAC5E,IAAIC,uBAAuBD,aAAaE,OAAO;IAC/C,IAAID,yBAAyB,MAAM;QACjCA,uBAAuBD,aAAaE,OAAO,GACzCC,CAAAA,GAAAA,sBAAAA,0BAA0B;IAC9B,OAAO;IACL,uCAAuC;IACzC;IACA,OAAOF,qBAAqBC,OAAO;AACrC;AAMO,SAASjD,4BACdsC,GAAW,EACXV,IAAkB,EAClBW,GAAkB;IAElBZ,2BAA2BC;IAE3B,MAAMuB,gBAAgBjD,oBAAoBoC,KAAKC;IAC/C,IAAIY,kBAAkB,MAAM;QAC1B,OAAOA;IACT;IACA,kDAAkD;IAClD,MAAMJ,eAAuC;QAC3CK,cAAc;QACdC,MAAM,EAAA;QACNC,cAAc;QACd9B,MAAM;QACN+B,UAAU;QACV,0EAA0E;QAC1E,0EAA0E;QAC1E,mBAAmB;QACnBC,oBAAoB;QACpB,0DAA0D;QAC1DC,cAAc;QACdC,gBAAgB;QAEhB,qBAAqB;QACrBC,KAAK;QACLC,MAAM;QACN,4EAA4E;QAC5E,yCAAyC;QACzCC,SAASC;QACTC,SAASpE;IACX;IACA,MAAM6C,WAA0BC,CAAAA,GAAAA,UAAAA,gBAAgB,EAC9CF,IAAIG,QAAQ,EACZH,IAAII,MAAM,EACVJ,IAAIhB,OAAO;IAEb,MAAMqB,iBAAiB;IACvBoB,CAAAA,GAAAA,UAAAA,aAAa,EAAC9C,eAAesB,UAAUO,cAAcH;IACrD,OAAOG;AACT;AAEO,SAAS3C,iCACdkC,GAAW,EACX2B,YAAiB,EACjB1C,OAAsB;IAEtB,yEAAyE;IACzE,oEAAoE;IACpE,8EAA8E;IAC9E,uDAAuD;IACvD,EAAE;IACF,sEAAsE;IACtE,2EAA2E;IAC3E,EAAE;IACF,wEAAwE;IACxE,wEAAwE;IACxE,qEAAqE;IACrE,4EAA4E;IAC5E,2EAA2E;IAC3E,wEAAwE;IACxE,0EAA0E;IAC1E,kCAAkC;IAElC,4EAA4E;IAC5E,0EAA0E;IAC1E,0EAA0E;IAC1E,uEAAuE;IACvE,4EAA4E;IAC5E,uCAAuC;IACvC,MAAM2C,kBAAkBD,aAAatB,MAAM;IAC3C,IAAIuB,oBAAoB,IAAI;QAC1B,wEAAwE;QACxE,mDAAmD;QACnD,OAAO;IACT;IACA,MAAMC,yBAAyB,IAAIC,IAAIH;IACvCE,uBAAuBxB,MAAM,GAAG;IAChC,MAAM0B,0BAA0BnE,oBAC9BoC,KACAgC,CAAAA,GAAAA,UAAAA,cAAwB,EAACH,uBAAuBI,IAAI,EAAEhD;IAGxD,IACE8C,4BAA4B,QAC5BA,wBAAwBhB,MAAM,KAAA,GAC9B;QACA,yEAAyE;QACzE,uCAAuC;QACvC,OAAO;IACT;IAEA,2EAA2E;IAE3E,qEAAqE;IACrE,kEAAkE;IAClE,qEAAqE;IACrE,oEAAoE;IACpE,+BAA+B;IAC/B,MAAMmB,yCAAyC,IAAIJ,IACjDC,wBAAwBjB,YAAY,EACpCa,aAAaQ,MAAM;IAErB,MAAMC,4BACJF,uCAAuC7B,MAAM,KAAK,KAE9C6B,uCAAuC7B,MAAM,GAC7CuB;IAEN,mEAAmE;IACnE,oEAAoE;IACpE,wEAAwE;IACxE,yEAAyE;IACzE,+BAA+B;IAC/B,MAAMS,2BACJN,wBAAwBX,cAAc,KAAK,KAEvCW,wBAAwBX,cAAc,GACtCQ;IAEN,MAAMU,gBAAgB,IAAIR,IACxBC,wBAAwBjB,YAAY,EACpCyB,SAASJ,MAAM;IAEjBG,cAAcjC,MAAM,GAAG+B;IACvB,MAAMI,yBAAyBC,CAAAA,GAAAA,mBAAAA,iBAAiB,EAACH;IAEjD,MAAMI,sBAAsBC,0BAC1BZ,wBAAwB7C,IAAI,EAC5BmD;IAEF,MAAMO,yBAAyBD,0BAC7BZ,wBAAwBd,QAAQ,EAChCoB;IAGF,uEAAuE;IACvE,qBAAqB;IACrB,MAAMQ,kBAA4C;QAChD/B,cAAc0B;QAEdzB,MAAM,EAAA;QACN,mDAAmD;QACnDC,cAAc;QACd9B,MAAMwD;QACNzB,UAAU2B;QACV1B,oBAAoBa,wBAAwBb,kBAAkB;QAC9DC,cAAcY,wBAAwBZ,YAAY;QAElD,0DAA0D;QAC1DC,gBAAgBiB;QAEhB,qBAAqB;QACrBhB,KAAK;QACLC,MAAM;QACNC,SAASQ,wBAAwBR,OAAO;QACxCE,SAASM,wBAAwBN,OAAO;IAC1C;IAEA,oEAAoE;IACpE,gEAAgE;IAChE,OAAOoB;AACT;AAEA,SAASF,0BACPzD,IAAe,EACf4D,iBAAmC;IAEnC,wEAAwE;IACxE,mEAAmE;IAEnE,IAAIC,cAAgD;IACpD,MAAMC,gBAAgB9D,KAAK+D,KAAK;IAChC,IAAID,kBAAkB,MAAM;QAC1BD,cAAc,CAAC;QACf,IAAK,MAAMG,oBAAoBF,cAAe;YAC5C,MAAMG,YAAYH,aAAa,CAACE,iBAAiB;YACjDH,WAAW,CAACG,iBAAiB,GAAGP,0BAC9BQ,WACAL;QAEJ;IACF;IAEA,8DAA8D;IAC9D,IAAI5D,KAAKkE,MAAM,EAAE;QACf,OAAO;YACLC,YAAYnE,KAAKmE,UAAU;YAC3BC,SAASpE,KAAKoE,OAAO;YACrBpD,UAAUqD,CAAAA,GAAAA,UAAAA,oCAAoC,EAC5CrE,KAAKgB,QAAQ,EACb4C;YAEFM,QAAQ;YACRH,OAAOF;YACPS,cAActE,KAAKsE,YAAY;YAC/BC,oBAAoBvE,KAAKuE,kBAAkB;YAC3CC,oBAAoBxE,KAAKwE,kBAAkB;QAC7C;IACF;IAEA,OAAO;QACLL,YAAYnE,KAAKmE,UAAU;QAC3BC,SAASpE,KAAKoE,OAAO;QACrBpD,UAAUhB,KAAKgB,QAAQ;QACvBkD,QAAQ;QACRH,OAAOF;QACPS,cAActE,KAAKsE,YAAY;QAC/BC,oBAAoBvE,KAAKuE,kBAAkB;QAC3CC,oBAAoBxE,KAAKwE,kBAAkB;IAC7C;AACF;AAMO,SAAS/F,8BACdqC,GAAW,EACX2D,aAA4B,EAC5BC,KAA+B,EAC/B1E,IAAe;IAEf,MAAM2B,gBAAgBhD,sBAAsBmC,KAAKd,KAAKgB,QAAQ;IAC9D,IAAIW,kBAAkB,MAAM;QAC1B,OAAOA;IACT;IACA,kDAAkD;IAClD,MAAMgD,qBAAqBC,CAAAA,GAAAA,UAAAA,4BAA4B,EAACH,eAAezE;IACvE,MAAMuB,eAAexD,gCAAgC2G,MAAMrC,OAAO;IAClE,MAAMjB,iBAAiB;IACvBoB,CAAAA,GAAAA,UAAAA,aAAa,EACX5C,iBACA+E,oBACApD,cACAH;IAEF,OAAOG;AACT;AAEO,SAAShD,qCACduC,GAAW,EACX2D,aAA4B,EAC5BC,KAA+B,EAC/B1E,IAAe;IAEf,yEAAyE;IACzE,8EAA8E;IAC9E,4EAA4E;IAC5E,2EAA2E;IAC3E,yEAAyE;IACzE,0BAA0B;IAC1B,EAAE;IACF,4EAA4E;IAC5E,4EAA4E;IAC5E,0EAA0E;IAC1E,8EAA8E;IAC9E,yEAAyE;IACzE,EAAE;IACF,0EAA0E;IAC1E,4EAA4E;IAC5E,yEAAyE;IACzE,4EAA4E;IAC5E,oEAAoE;IACpE,gBAAgB;IAEhB,0EAA0E;IAC1E,wEAAwE;IACxE,0EAA0E;IAC1E,0EAA0E;IAC1E,6EAA6E;IAC7E,0EAA0E;IAC1E,yCAAyC;IACzC,MAAM2B,gBAAgBL,kCAAkCR,KAAKd,KAAKgB,QAAQ;IAC1E,IAAIW,kBAAkB,MAAM;QAC1B,OAAOA;IACT;IACA,kDAAkD;IAClD,MAAMgD,qBAAqBC,CAAAA,GAAAA,UAAAA,4BAA4B,EAACH,eAAezE;IACvE,MAAMuB,eAAexD,gCAAgC2G,MAAMrC,OAAO;IAClE,MAAMjB,iBAAiB;IACvBoB,CAAAA,GAAAA,UAAAA,aAAa,EACX5C,iBACA+E,oBACApD,cACAH;IAEF,OAAOG;AACT;AAEO,SAASlD,uCACdoG,aAA4B,EAC5BC,KAA+B,EAC/B1E,IAAe;IAEf,4EAA4E;IAC5E,sEAAsE;IACtE,kCAAkC;IAClC,MAAM2E,qBAAqBC,CAAAA,GAAAA,UAAAA,4BAA4B,EAACH,eAAezE;IACvE,MAAMuB,eAAexD,gCAAgC2G,MAAMrC,OAAO;IAClE,MAAMjB,iBAAiB;IACvBoB,CAAAA,GAAAA,UAAAA,aAAa,EACX5C,iBACA+E,oBACApD,cACAH;IAEF,OAAOG;AACT;AAEO,SAASxC,mBACd+B,GAAW,EACXE,QAAyB,EACzB6D,cAAiC;IAEjC,4EAA4E;IAC5E,6EAA6E;IAC7E,yBAAyB;IACzB,6EAA6E;IAC7E,6EAA6E;IAC7E,iEAAiE;IAEjE,IAAIC,CAAAA,GAAAA,UAAAA,cAAc,EAAChE,KAAK3C,0BAA0B0G,iBAAiB;QACjE,6CAA6C;QAC7C,OAAO;IACT;IAEA,MAAMlD,gBAAgBhD,sBAAsBmC,KAAKE;IACjD,IAAIW,kBAAkB,MAAM;QAC1B,oFAAoF;QACpF,0DAA0D;QAC1D,4BAA4B;QAC5B,IAGE,AAFA,AACA,6EAD6E,GACG;QAC/EkD,eAAeJ,aAAa,KAAK9C,cAAc8C,aAAa,IAC3D,CAAC5G,sCACC8D,cAAc8C,aAAa,EAC3BI,eAAeJ,aAAa,KAEhC,wDAAwD;QACxD,6FAA6F;QAC5F,CAAC9C,cAAcoD,SAAS,IAAIF,eAAeE,SAAS,EACrD;YACA,0EAA0E;YAC1E,wEAAwE;YACxE,0EAA0E;YAC1E,0EAA0E;YAC1E,qBAAqB;YACrB,MAAMC,gBAA2CH;YACjDG,cAAcnD,MAAM,GAAA;YACpBmD,cAAcC,OAAO,GAAG;YACxBD,cAAcE,GAAG,GAAG;YACpB,OAAO;QACT;QAEA,2CAA2C;QAC3CC,CAAAA,GAAAA,UAAAA,kBAAkB,EAACxD;IACrB;IAEA,MAAMP,iBAAiB;IACvBoB,CAAAA,GAAAA,UAAAA,aAAa,EAAC5C,iBAAiBoB,UAAU6D,gBAAgBzD;IACzD,OAAOyD;AACT;AAEO,SAAS9G,gCACdsE,OAAe;IAEf,MAAM+C,aAAqC;QACzCvD,MAAM,EAAA;QACN,2EAA2E;QAC3E,sCAAsC;QACtC4C,eAAeY,OAAAA,aAAa,CAACC,GAAG;QAChCJ,KAAK;QACLD,SAAS;QACTF,WAAW;QACXtD,SAAS;QAET,qBAAqB;QACrBU,KAAK;QACLC,MAAM;QACNC;QACAE,SAAS;IACX;IACA,OAAO6C;AACT;AAEO,SAAStG,wBACdsG,UAAkC,EAClCX,aAA4B;IAE5B,MAAMlD,eAAyC6D;IAC/C7D,aAAaM,MAAM,GAAA;IACnBN,aAAakD,aAAa,GAAGA;IAE7B,IAAIA,kBAAkBY,OAAAA,aAAa,CAACE,IAAI,EAAE;QACxC,0EAA0E;QAC1E,uEAAuE;QACvE,4DAA4D;QAC5DhE,aAAawD,SAAS,GAAG;IAC3B;IAEA,6EAA6E;IAC7E,wEAAwE;IACxE,6EAA6E;IAC7E,sEAAsE;IACtE,yCAAyC;IACzCxD,aAAagB,OAAO,GAAGpE;IACvB,OAAOoD;AACT;AAEA,SAASiE,iBAAiBC,KAEzB;IACC,MAAM3D,eAAe2D,MAAM3D,YAAY;IACvC,IAAIA,iBAAiB,MAAM;QACzB,KAAK,MAAM1B,QAAQ0B,aAAc;YAC/B4D,CAAAA,GAAAA,WAAAA,gBAAgB,EAACtF;QACnB;QACAqF,MAAM3D,YAAY,GAAG;IACvB;AACF;AAEA,SAAS6D,uBACPF,KAAsB,EACtBzF,IAAe,EACf4F,gBAA8B,EAC9BvD,OAAe,EACfL,kBAA2B,EAC3BJ,YAAoB,EACpBM,cAAgC,EAChCD,YAAqB;IAErB,6EAA6E;IAC7E,uEAAuE;IACvE,yEAAyE;IACzE,cAAc;IACd,MAAMF,WAAsB;QAC1BoC,YAAY0B,sBAAAA,gBAAgB;QAC5BzB,SAASyB,sBAAAA,gBAAgB;QACzB7E,UAAU4E;QACV,yEAAyE;QACzE,0EAA0E;QAC1E,2EAA2E;QAC3E1B,QAAQ;QACRH,OAAO;QACPO,cAAc;QACdC,oBAAoBuB,gBAAAA,kBAAkB,CAACC,2BAA2B;QAClEvB,oBAAoB;IACtB;IACA,MAAMwB,iBAA2CP;IACjDO,eAAenE,MAAM,GAAA;IACrBmE,eAAehG,IAAI,GAAGA;IACtBgG,eAAejE,QAAQ,GAAGA;IAC1BiE,eAAe3D,OAAO,GAAGA;IACzB2D,eAAehE,kBAAkB,GAAGA;IACpCgE,eAAepE,YAAY,GAAGA;IAC9BoE,eAAe9D,cAAc,GAAGA;IAChC8D,eAAe/D,YAAY,GAAGA;IAC9BuD,iBAAiBC;IACjB,OAAOO;AACT;AAEA,SAASC,yBACPC,iBAA2C,EAC3ChB,GAAoB,EACpBD,OAAuD,EACvD5C,OAAe,EACf0C,SAAkB;IAElB,MAAMiB,iBAA6CE;IACnDF,eAAenE,MAAM,GAAA;IACrBmE,eAAed,GAAG,GAAGA;IACrBc,eAAef,OAAO,GAAGA;IACzBe,eAAe3D,OAAO,GAAGA;IACzB2D,eAAejB,SAAS,GAAGA;IAC3B,yDAAyD;IACzD,IAAImB,kBAAkBzE,OAAO,KAAK,MAAM;QACtCyE,kBAAkBzE,OAAO,CAAC0E,OAAO,CAACH;QAClC,2CAA2C;QAC3CA,eAAevE,OAAO,GAAG;IAC3B;IACA,OAAOuE;AACT;AAEA,SAASI,sBACPX,KAA6B,EAC7BpD,OAAe;IAEf,MAAM2C,gBAAyCS;IAC/CT,cAAcnD,MAAM,GAAA;IACpBmD,cAAc3C,OAAO,GAAGA;IACxBmD,iBAAiBC;AACnB;AAEA,SAASY,wBACPZ,KAA+B,EAC/BpD,OAAe;IAEf,MAAM2C,gBAA2CS;IACjDT,cAAcnD,MAAM,GAAA;IACpBmD,cAAc3C,OAAO,GAAGA;IACxB,IAAIoD,MAAMhE,OAAO,KAAK,MAAM;QAC1B,0EAA0E;QAC1E,iDAAiD;QACjDgE,MAAMhE,OAAO,CAAC0E,OAAO,CAAC;QACtBV,MAAMhE,OAAO,GAAG;IAClB;AACF;AAMA,SAAS6E,mCACPC,QAA0B,EAC1BC,gBAAwB,EACxBtE,cAAgC,EAChCuE,GAAyB;IAEzB,sCAAsC;IACtC,MAAMC,gBAAgBF,iBAAiBG,KAAK,CAAC,KAAKC,MAAM,CAAC,CAACC,IAAMA,MAAM;IACtE,MAAMC,QAAQ;IACd,MAAMC,cAAcC,sBAAAA,wBAAwB;IAC5C,OAAOC,+BACLV,SAASvG,IAAI,EACb+G,aACA,MACAC,sBAAAA,wBAAwB,EACxBN,eACAI,OACA5E,gBACAuE;AAEJ;AAEA,SAASQ,+BACPC,QAAsB,EACtB9C,OAAiC,EACjC+C,eAA8C,EAC9ChD,UAA6B,EAC7BuC,aAA4B,EAC5BU,kBAA0B,EAC1BlF,cAAgC,EAChCuE,GAAyB;IAEzB,yEAAyE;IACzE,8EAA8E;IAC9E,4EAA4E;IAC5E,0EAA0E;IAC1E,uCAAuC;IAEvC,IAAI1C,QAA0D;IAC9D,IAAIG;IACJ,IAAIlD;IACJ,MAAMqG,gBAAgBH,SAASnD,KAAK;IACpC,IAAIsD,kBAAkB,MAAM;QAC1BnD,SAAS;QACTlD,WAAWsG,CAAAA,GAAAA,UAAAA,sBAAsB,EAACnD,YAAYgD;QAE9CpD,QAAQ,CAAC;QACT,IAAK,IAAIC,oBAAoBqD,cAAe;YAC1C,MAAME,gBAAgBF,aAAa,CAACrD,iBAAiB;YACrD,MAAMwD,iBAAiBD,cAAcE,IAAI;YACzC,MAAMC,iBAAiBH,cAAcI,SAAS;YAC9C,MAAMC,0BAA0BL,cAAcM,QAAQ;YAEtD,IAAIC;YACJ,IAAIC;YACJ,IAAIC;YACJ,IAAIN,mBAAmB,MAAM;gBAC3B,kEAAkE;gBAClE,MAAMO,kBAAkBC,CAAAA,GAAAA,aAAAA,4BAA4B,EAClDR,gBACAhB,eACAU;gBAGF,sEAAsE;gBACtE,uEAAuE;gBACvE,uEAAuE;gBACvE,2DAA2D;gBAE3D,gEAAgE;gBAChE,uEAAuE;gBACvE,sEAAsE;gBACtE,2DAA2D;gBAC3D,gBAAgB;gBAChB,MAAMe,gBACJ,AACA,8BAA8B,gCADgC;gBAE9DP,4BAA4B,OACxBA,0BAEAQ,CAAAA,GAAAA,aAAAA,0BAA0B,EACxBH,iBACA;gBAGRD,uBAAuBK,CAAAA,GAAAA,UAAAA,oBAAoB,EACzClB,iBACAgB;gBAEFJ,eAAe;oBAACP;oBAAgBW;oBAAeT;iBAAe;gBAC9DI,uBAAuB;YACzB,OAAO;gBACL,uEAAuE;gBACvE,cAAc;gBACdE,uBAAuBb;gBACvBY,eAAeP;gBACfM,uBAAuBQ,CAAAA,GAAAA,aAAAA,4BAA4B,EAACd;YACtD;YAEA,wEAAwE;YACxE,8DAA8D;YAC9D,MAAMe,0BAA0BT,uBAC5BV,qBAAqB,IACrBA;YAEJ,MAAMoB,sBAAsBC,CAAAA,GAAAA,sBAAAA,2BAA2B,EAACV;YACxD,MAAMW,kBAAkBC,CAAAA,GAAAA,sBAAAA,2BAA2B,EACjDxE,YACAH,kBACAwE;YAEFzE,KAAK,CAACC,iBAAiB,GAAGiD,+BACxBM,eACAQ,cACAC,sBACAU,iBACAhC,eACA6B,yBACArG,gBACAuE;QAEJ;IACF,OAAO;QACL,IAAItC,WAAWyE,QAAQ,CAACC,SAAAA,gBAAgB,GAAG;YACzC,0BAA0B;YAC1B3E,SAAS;YACTlD,WAAW8H,CAAAA,GAAAA,UAAAA,oBAAoB,EAC7B3E,YACAjC,gBACAiF;YAEF,yEAAyE;YACzE,oEAAoE;YACpE,uEAAuE;YACvE,+DAA+D;YAC/D,uDAAuD;YACvD,6CAA6C;YAC7C,IAAIV,IAAIb,gBAAgB,KAAK,MAAM;gBACjCa,IAAIb,gBAAgB,GAAGmD,CAAAA,GAAAA,UAAAA,wBAAwB,EAC7C5E,YACAjC,gBACAiF;YAEJ;QACF,OAAO;YACL,4BAA4B;YAC5BjD,SAAS;YACTlD,WAAWsG,CAAAA,GAAAA,UAAAA,sBAAsB,EAACnD,YAAYgD;QAChD;IACF;IAEA,OAAO;QACLhD;QACAC;QACApD;QACA,0EAA0E;QAC1E,2EAA2E;QAC3E,yEAAyE;QACzE,2EAA2E;QAC3E,2EAA2E;QAC3E,qCAAqC;QACrCkD,QAAQA;QACRH;QACAO,cAAc4C,SAAS5C,YAAY;QACnC,yEAAyE;QACzE,0DAA0D;QAC1DC,oBAAoBuB,gBAAAA,kBAAkB,CAACkD,yBAAyB;QAChExE,oBAAoB0C,SAAS1C,kBAAkB;IACjD;AACF;AAEA,SAASyE,wCACPC,iBAAoC,EACpChH,cAAgC,EAChCuE,GAAyB;IAEzB,OAAO0C,oCACLD,mBACAlC,sBAAAA,wBAAwB,EACxB,MACA9E,gBACAuE;AAEJ;AAEA,SAAS0C,oCACPD,iBAAoC,EACpC/E,UAA6B,EAC7BiF,qBAAoD,EACpDlH,cAAgC,EAChCuE,GAAyB;IAEzB,MAAM4C,kBAAkBH,iBAAiB,CAAC,EAAE;IAE5C,IAAI9E;IACJ,IAAI+C;IACJ,IAAIjD;IACJ,IAAIlD;IACJ,IAAIsI,MAAMC,OAAO,CAACF,kBAAkB;QAClCnF,SAAS;QACT,MAAMsF,gBAAgBH,eAAe,CAAC,EAAE;QACxClC,kBAAkBkB,CAAAA,GAAAA,UAAAA,oBAAoB,EAACe,uBAAuBI;QAC9DxI,WAAWsG,CAAAA,GAAAA,UAAAA,sBAAsB,EAACnD,YAAYgD;QAC9C/C,UAAUiF;IACZ,OAAO;QACL,uEAAuE;QACvE,cAAc;QACdlC,kBAAkBiC;QAClB,IAAIjF,WAAWyE,QAAQ,CAACC,SAAAA,gBAAgB,GAAG;YACzC,0BAA0B;YAC1B3E,SAAS;YAET,yEAAyE;YACzE,wEAAwE;YACxE,2EAA2E;YAC3E,0BAA0B;YAC1B,EAAE;YACF,6DAA6D;YAC7D,EAAE;YACF,yEAAyE;YACzE,uEAAuE;YACvEE,UAAUyE,SAAAA,gBAAgB;YAC1B7H,WAAW8H,CAAAA,GAAAA,UAAAA,oBAAoB,EAC7B3E,YACAjC,gBACAiF;YAEF,yEAAyE;YACzE,oEAAoE;YACpE,uEAAuE;YACvE,+DAA+D;YAC/D,uDAAuD;YACvD,6CAA6C;YAC7C,IAAIV,IAAIb,gBAAgB,KAAK,MAAM;gBACjCa,IAAIb,gBAAgB,GAAGmD,CAAAA,GAAAA,UAAAA,wBAAwB,EAC7C5E,YACAjC,gBACAiF;YAEJ;QACF,OAAO;YACL,4BAA4B;YAC5BjD,SAAS;YACTE,UAAUiF;YACVrI,WAAWsG,CAAAA,GAAAA,UAAAA,sBAAsB,EAACnD,YAAYgD;QAChD;IACF;IAEA,IAAIpD,QAA0D;IAE9D,MAAM0F,iBAAiBP,iBAAiB,CAAC,EAAE;IAC3C,IAAK,IAAIlF,oBAAoByF,eAAgB;QAC3C,MAAMC,mBAAmBD,cAAc,CAACzF,iBAAiB;QACzD,MAAM+D,eAAe2B,gBAAgB,CAAC,EAAE;QACxC,0EAA0E;QAC1E,uEAAuE;QACvE,wCAAwC;QACxC,MAAMlB,sBAAsBC,CAAAA,GAAAA,sBAAAA,2BAA2B,EAACV;QACxD,MAAMW,kBAAkBC,CAAAA,GAAAA,sBAAAA,2BAA2B,EACjDxE,YACAH,kBACAwE;QAEF,MAAMvE,YAAYkF,oCAChBO,kBACAhB,iBACAvB,iBACAjF,gBACAuE;QAEF,IAAI1C,UAAU,MAAM;YAClBA,QAAQ;gBACN,CAACC,iBAAiB,EAAEC;YACtB;QACF,OAAO;YACLF,KAAK,CAACC,iBAAiB,GAAGC;QAC5B;IACF;IAEA,OAAO;QACLE;QACAC;QACApD;QACA,0EAA0E;QAC1E,2EAA2E;QAC3E,yEAAyE;QACzE,2EAA2E;QAC3E,2EAA2E;QAC3E,qCAAqC;QACrCkD,QAAQA;QACRH;QACAO,cAAc4E,iBAAiB,CAAC,EAAE,KAAK;QACvC3E,oBACE2E,iBAAiB,CAAC,EAAE,KAAKS,YACrBT,iBAAiB,CAAC,EAAE,GACpBpD,gBAAAA,kBAAkB,CAACC,2BAA2B;QAEpD,uEAAuE;QACvE,6CAA6C;QAC7CvB,oBAAoB;IACtB;AACF;AAEO,SAAS1G,oCACd8L,SAAoB;IAEpB,MAAMH,iBAAoD,CAAC;IAC3D,IAAIG,UAAU7F,KAAK,KAAK,MAAM;QAC5B,IAAK,MAAMC,oBAAoB4F,UAAU7F,KAAK,CAAE;YAC9C0F,cAAc,CAACzF,iBAAiB,GAAGlG,oCACjC8L,UAAU7F,KAAK,CAACC,iBAAiB;QAErC;IACF;IACA,MAAMkF,oBAAuC;QAC3CU,UAAUxF,OAAO;QACjBqF;QACA;QACA;QACAG,UAAUtF,YAAY;KACvB;IACD,OAAO4E;AACT;AAEO,eAAelL,sBACpByH,KAA6B,EAC7BrF,IAAkB,EAClBW,GAAkB;IAElB,6EAA6E;IAC7E,6EAA6E;IAC7E,wEAAwE;IACxE,cAAc;IACd,MAAMG,WAAWH,IAAIG,QAAQ;IAC7B,MAAMC,SAASJ,IAAII,MAAM;IACzB,MAAMpB,UAAUgB,IAAIhB,OAAO;IAC3B,MAAM8J,cAAc;IAEpB,MAAMC,UAA0B;QAC9B,CAACC,kBAAAA,UAAU,CAAC,EAAE;QACd,CAACC,kBAAAA,2BAA2B,CAAC,EAAE;QAC/B,CAACC,kBAAAA,mCAAmC,CAAC,EAAEJ;IACzC;IACA,IAAI9J,YAAY,MAAM;QACpB+J,OAAO,CAACI,kBAAAA,QAAQ,CAAC,GAAGnK;IACtB;IAEA,IAAI;QACF,MAAMoK,MAAM,IAAIvH,IAAI1B,WAAWC,QAAQkC,SAASJ,MAAM;QACtD,IAAImH;QACJ,IAAIC;QACJ,IAAIjL,oBAAoB;;aAyDjB;YACL,qEAAqE;YACrE,0EAA0E;YAC1E,kEAAkE;YAClE,gCAAgC;YAChCgL,WAAW,MAAMO,sBAAsBR,KAAKL;YAC5CO,oBACED,aAAa,QAAQA,SAASM,UAAU,GAAG,IAAI9H,IAAIwH,SAASD,GAAG,IAAIA;QACvE;QAEA,IACE,CAACC,YACD,CAACA,SAASS,EAAE,IACZ,uEAAuE;QACvE,yEAAyE;QACzE,oDAAoD;QACpDT,SAASvI,MAAM,KAAK,OACpB,CAACuI,SAASU,IAAI,EACd;YACA,wEAAwE;YACxE,uDAAuD;YACvD1E,sBAAsBX,OAAOgF,KAAK3J,GAAG,KAAK,KAAK;YAC/C,OAAO;QACT;QAEA,kEAAkE;QAClE,wEAAwE;QACxE,yEAAyE;QACzE,wEAAwE;QACxE,4EAA4E;QAC5E,yEAAyE;QACzE,EAAE;QACF,2EAA2E;QAC3E,2EAA2E;QAC3E,4EAA4E;QAC5E,0EAA0E;QAC1E,2EAA2E;QAC3E,4BAA4B;QAC5B,MAAMc,eAAe2B,CAAAA,GAAAA,mBAAAA,iBAAiB,EAAC8G;QAEvC,kEAAkE;QAClE,MAAMU,aAAaX,SAASN,OAAO,CAACkB,GAAG,CAAC;QACxC,MAAMhJ,qBACJ+I,eAAe,QAAQA,WAAWE,QAAQ,CAACf,kBAAAA,QAAQ;QAErD,4CAA4C;QAC5C,MAAMgB,SAASxJ,CAAAA,GAAAA,sBAAAA,0BAA0B;QAEzC,0EAA0E;QAC1E,yEAAyE;QACzE,6BAA6B;QAC7B,MAAMyJ,oBACJf,SAASN,OAAO,CAACkB,GAAG,CAACI,kBAAAA,wBAAwB,MAAM,OACnD,yEAAyE;QACzE,wEAAwE;QACxE,2CAA2C;QAC3ChM;QAEF,IAAI+L,mBAAmB;YACrB,MAAME,iBAAiBC,6BACrBlB,SAASU,IAAI,EACbI,OAAO/E,OAAO,EACd,SAASoF,qBAAqBnJ,IAAI;gBAChCoJ,CAAAA,GAAAA,UAAAA,iBAAiB,EAAC/F,OAAOrD;YAC3B;YAEF,MAAMqJ,aAAa,MAAMC,CAAAA,GAAAA,qBAAAA,4BAA4B,EACnDL,gBACAvB;YAEF,IAAI2B,WAAWE,OAAO,KAAKC,CAAAA,GAAAA,YAAAA,aAAa,KAAI;gBAC1C,qEAAqE;gBACrE,mEAAmE;gBACnE,0EAA0E;gBAC1E,sEAAsE;gBACtE,6BAA6B;gBAC7B,iEAAiE;gBACjExF,sBAAsBX,OAAOgF,KAAK3J,GAAG,KAAK,KAAK;gBAC/C,OAAO;YACT;YAEA,qEAAqE;YACrE,+DAA+D;YAC/D,iBAAiB;YACjB,MAAM0F,mBAAmBqF,CAAAA,GAAAA,aAAAA,mBAAmB,EAACzB;YAC7C,MAAMlI,iBAAiB4J,CAAAA,GAAAA,aAAAA,iBAAiB,EAAC1B;YAEzC,qEAAqE;YACrE,gBAAgB;YAChB,EAAE;YACF,iEAAiE;YACjE,wBAAwB;YACxB,MAAM3D,MAA4B;gBAAEb,kBAAkB;YAAK;YAC3D,MAAMgE,YAAYtD,mCAChBmF,YACAjF,kBACAtE,gBACAuE;YAEF,MAAMb,mBAAmBa,IAAIb,gBAAgB;YAC7C,IAAIA,qBAAqB,MAAM;gBAC7BQ,sBAAsBX,OAAOgF,KAAK3J,GAAG,KAAK,KAAK;gBAC/C,OAAO;YACT;YAEA,MAAMiL,cAAc3N,eAAeqN,WAAWO,SAAS;YACvDrG,uBACEF,OACAmE,WACAhE,kBACA6E,KAAK3J,GAAG,KAAKiL,aACb/J,oBACAJ,cACAM,gBACAiJ;QAEJ,OAAO;YACL,gEAAgE;YAChE,gEAAgE;YAChE,sEAAsE;YACtE,yDAAyD;YACzD,uBAAuB;YACvB,MAAME,iBAAiBC,6BACrBlB,SAASU,IAAI,EACbI,OAAO/E,OAAO,EACd,SAASoF,qBAAqBnJ,IAAI;gBAChCoJ,CAAAA,GAAAA,UAAAA,iBAAiB,EAAC/F,OAAOrD;YAC3B;YAEF,MAAMqJ,aACJ,MAAMC,CAAAA,GAAAA,qBAAAA,4BAA4B,EAChCL,gBACAvB;YAEJ,IAAI2B,WAAWQ,CAAC,KAAKL,CAAAA,GAAAA,YAAAA,aAAa,KAAI;gBACpC,qEAAqE;gBACrE,mEAAmE;gBACnE,0EAA0E;gBAC1E,sEAAsE;gBACtE,6BAA6B;gBAC7B,iEAAiE;gBACjExF,sBAAsBX,OAAOgF,KAAK3J,GAAG,KAAK,KAAK;gBAC/C,OAAO;YACT;YAEAoL,kCACEzB,KAAK3J,GAAG,IACRV,MACA,AACA,+EAD+E,MACM;YACrFiF,OAAAA,aAAa,CAAC8G,eAAe,EAC7B/B,UACAqB,YACAhG,OACAzD,oBACAJ,cACAuJ;QAEJ;QAEA,IAAI,CAACnJ,oBAAoB;YACvB,yEAAyE;YACzE,wEAAwE;YACxE,6DAA6D;YAC7D,+BAA+B;YAE/B,sEAAsE;YACtE,sEAAsE;YACtE,sDAAsD;YACtD,mEAAmE;YACnE,oEAAoE;YACpE,eAAe;YACf,MAAMoK,oBAAmCC,CAAAA,GAAAA,UAAAA,yBAAyB,EAChEnL,UACAC,QACApB,SACAiC;YAEF,MAAMZ,iBAAiB;YACvBoB,CAAAA,GAAAA,UAAAA,aAAa,EAAC9C,eAAe0M,mBAAmB3G,OAAOrE;QACzD;QACA,wEAAwE;QACxE,wEAAwE;QACxE,OAAO;YAAEkL,OAAO;YAAMpB,QAAQA,OAAOzJ,OAAO;QAAC;IAC/C,EAAE,OAAOhB,OAAO;QACd,uEAAuE;QACvE,yBAAyB;QACzB2F,sBAAsBX,OAAOgF,KAAK3J,GAAG,KAAK,KAAK;QAC/C,OAAO;IACT;AACF;AAEO,eAAe7C,wBACpByG,KAA+B,EAC/BwB,iBAA2C,EAC3CqG,QAAuB,EACvBvM,IAAe;IAEf,6EAA6E;IAC7E,6EAA6E;IAC7E,wEAAwE;IACxE,cAAc;IACd,EAAE;IACF,0EAA0E;IAC1E,iBAAiB;IAEjB,4EAA4E;IAC5E,6EAA6E;IAC7E,6EAA6E;IAC7E,mEAAmE;IACnE,MAAMmK,MAAM,IAAIvH,IAAI8B,MAAM9C,YAAY,EAAEyB,SAASJ,MAAM;IACvD,MAAMlD,UAAUwM,SAASxM,OAAO;IAEhC,MAAMoE,aAAanE,KAAKmE,UAAU;IAClC,MAAMqI,uBACJrI,eAAe6C,sBAAAA,wBAAwB,GAEnC,AACA,iEADiE,GACG;IACpE,qEAAqE;IACrE,gEAAgE;IAChE,qEAAqE;IACpE,YACD7C;IAEN,MAAM2F,UAA0B;QAC9B,CAACC,kBAAAA,UAAU,CAAC,EAAE;QACd,CAACC,kBAAAA,2BAA2B,CAAC,EAAE;QAC/B,CAACC,kBAAAA,mCAAmC,CAAC,EAAEuC;IACzC;IACA,IAAIzM,YAAY,MAAM;QACpB+J,OAAO,CAACI,kBAAAA,QAAQ,CAAC,GAAGnK;IACtB;IAEA,MAAM0M,aAAarN,sCAEfwL,0BACAT,YADsCA,KAAKqC;IAE/C,IAAI;QACF,MAAMpC,WAAW,MAAMO,sBAAsB8B,YAAY3C;QACzD,IACE,CAACM,YACD,CAACA,SAASS,EAAE,IACZT,SAASvI,MAAM,KAAK,OAAO,aAAa;QACxC,0EAA0E;QAC1E,yEAAyE;QACzE,oEAAoE;QACpE,uEAAuE;QACvE,0BAA0B;QACzBuI,SAASN,OAAO,CAACkB,GAAG,CAACI,kBAAAA,wBAAwB,MAAM,OAClD,sEAAsE;QACtE,iEAAiE;QACjE,qDAAqD;QACrD,CAAChM,sBACH,CAACgL,SAASU,IAAI,EACd;YACA,wEAAwE;YACxE,uDAAuD;YACvDzE,wBAAwBH,mBAAmBuE,KAAK3J,GAAG,KAAK,KAAK;YAC7D,OAAO;QACT;QAEA,4CAA4C;QAC5C,MAAMoK,SAASxJ,CAAAA,GAAAA,sBAAAA,0BAA0B;QAEzC,2EAA2E;QAC3E,4DAA4D;QAC5D,MAAM2J,iBAAiBC,6BACrBlB,SAASU,IAAI,EACbI,OAAO/E,OAAO,EACd,SAASoF,qBAAqBnJ,IAAI;YAChCoJ,CAAAA,GAAAA,UAAAA,iBAAiB,EAACtF,mBAAmB9D;QACvC;QAEF,MAAMqJ,aAAa,MAAOC,CAAAA,GAAAA,qBAAAA,4BAA4B,EACpDL,gBACAvB;QAEF,IAAI2B,WAAWE,OAAO,KAAKC,CAAAA,GAAAA,YAAAA,aAAa,KAAI;YAC1C,qEAAqE;YACrE,mEAAmE;YACnE,0EAA0E;YAC1E,sEAAsE;YACtE,6BAA6B;YAC7BvF,wBAAwBH,mBAAmBuE,KAAK3J,GAAG,KAAK,KAAK;YAC7D,OAAO;QACT;QACA,OAAO;YACLwL,OAAOrG,yBACLC,mBACAuF,WAAWvG,GAAG,EACduG,WAAWxG,OAAO,EAElB,AADA,yCACyC,6BAD6B;YAEtEP,MAAMrC,OAAO,EACboJ,WAAW1G,SAAS;YAEtB,wEAAwE;YACxE,wEAAwE;YACxEmG,QAAQA,OAAOzJ,OAAO;QACxB;IACF,EAAE,OAAOhB,OAAO;QACd,uEAAuE;QACvE,yBAAyB;QACzB4F,wBAAwBH,mBAAmBuE,KAAK3J,GAAG,KAAK,KAAK;QAC7D,OAAO;IACT;AACF;AAEO,eAAe5C,0CACpBkC,IAAkB,EAClBsE,KAA+B,EAC/BD,aAGsB,EACtBiI,kBAAqC,EACrCC,cAAgE;IAEhE,MAAM5L,MAAMX,KAAKW,GAAG;IACpB,MAAMoJ,MAAM,IAAIvH,IAAI8B,MAAM9C,YAAY,EAAEyB,SAASJ,MAAM;IACvD,MAAMlD,UAAUgB,IAAIhB,OAAO;IAE3B,IACE4M,eAAevK,IAAI,KAAK,KACxBuK,eAAeC,GAAG,CAAClI,MAAM3C,QAAQ,CAACoC,UAAU,GAC5C;QACA,6DAA6D;QAC7D,6BAA6B;QAC7BuI,qBAAqBjN;IACvB;IAEA,MAAMqK,UAA0B;QAC9B,CAACC,kBAAAA,UAAU,CAAC,EAAE;QACd,CAAC8C,kBAAAA,6BAA6B,CAAC,EAC7BC,CAAAA,GAAAA,mBAAAA,kCAAkC,EAACJ;IACvC;IACA,IAAI3M,YAAY,MAAM;QACpB+J,OAAO,CAACI,kBAAAA,QAAQ,CAAC,GAAGnK;IACtB;IACA,OAAQ0E;QACN,KAAKY,OAAAA,aAAa,CAACE,IAAI;YAAE;gBAIvB;YACF;QACA,KAAKF,OAAAA,aAAa,CAAC0H,UAAU;YAAE;gBAC7BjD,OAAO,CAACE,kBAAAA,2BAA2B,CAAC,GAAG;gBACvC;YACF;QACA,KAAK3E,OAAAA,aAAa,CAAC8G,eAAe;YAAE;gBAClCrC,OAAO,CAACE,kBAAAA,2BAA2B,CAAC,GAAG;gBACvC;YACF;QACA;YAAS;gBACPvF;YACF;IACF;IAEA,IAAI;QACF,MAAM2F,WAAW,MAAMO,sBAAsBR,KAAKL;QAClD,IAAI,CAACM,YAAY,CAACA,SAASS,EAAE,IAAI,CAACT,SAASU,IAAI,EAAE;YAC/C,wEAAwE;YACxE,uDAAuD;YACvDkC,mCAAmCL,gBAAgBlC,KAAK3J,GAAG,KAAK,KAAK;YACrE,OAAO;QACT;QAEA,MAAMoB,iBAAiB4J,CAAAA,GAAAA,aAAAA,iBAAiB,EAAC1B;QACzC,IAAIlI,mBAAmBwC,MAAMxC,cAAc,EAAE;YAC3C,iEAAiE;YACjE,yEAAyE;YACzE,sEAAsE;YACtE,iBAAiB;YACjB,yEAAyE;YACzE,uEAAuE;YACvE,6CAA6C;YAC7C8K,mCAAmCL,gBAAgBlC,KAAK3J,GAAG,KAAK,KAAK;YACrE,OAAO;QACT;QAEA,4CAA4C;QAC5C,MAAMoK,SAASxJ,CAAAA,GAAAA,sBAAAA,0BAA0B;QAEzC,IAAIuL,mBAA6D;QACjE,MAAM5B,iBAAiBC,6BACrBlB,SAASU,IAAI,EACbI,OAAO/E,OAAO,EACd,SAASoF,qBAAqB2B,uBAAuB;YACnD,mEAAmE;YACnE,iEAAiE;YACjE,0CAA0C;YAC1C,IAAID,qBAAqB,MAAM;gBAC7B,0DAA0D;gBAC1D,iBAAiB;gBACjB;YACF;YACA,MAAME,cAAcD,0BAA0BD,iBAAiBG,MAAM;YACrE,KAAK,MAAM3H,SAASwH,iBAAkB;gBACpCzB,CAAAA,GAAAA,UAAAA,iBAAiB,EAAC/F,OAAO0H;YAC3B;QACF;QAEF,MAAM1B,aAAa,MAAOC,CAAAA,GAAAA,qBAAAA,4BAA4B,EACpDL,gBACAvB;QAGF,MAAMuD,oBACJ5I,kBAAkBY,OAAAA,aAAa,CAAC0H,UAAU,GAEtCtB,WAAW6B,EAAE,EAAE,CAAC,EAAE,KAAK,OAEvB,AACA,iGADiG;QAGvG,yEAAyE;QACzE,4EAA4E;QAC5E,oCAAoC;QACpCL,mBAAmBM,oCACjB9C,KAAK3J,GAAG,IACRV,MACAqE,eACA2F,UACAqB,YACA4B,mBACA3I,OACAiI;QAGF,wEAAwE;QACxE,wEAAwE;QACxE,OAAO;YAAEL,OAAO;YAAMpB,QAAQA,OAAOzJ,OAAO;QAAC;IAC/C,EAAE,OAAOhB,OAAO;QACduM,mCAAmCL,gBAAgBlC,KAAK3J,GAAG,KAAK,KAAK;QACrE,OAAO;IACT;AACF;AAEA,SAASoL,kCACPpL,GAAW,EACXV,IAAkB,EAClBqE,aAGsB,EACtB2F,QAA+C,EAC/CqB,UAAoC,EACpChG,KAA6B,EAC7BzD,kBAA2B,EAC3BJ,YAAoB,EACpBuJ,iBAA0B;IAE1B,6EAA6E;IAC7E,8DAA8D;IAC9D,MAAMjJ,iBAAiB4J,CAAAA,GAAAA,aAAAA,iBAAiB,EAAC1B;IAEzC,MAAMoD,6BAA6BC,CAAAA,GAAAA,mBAAAA,mBAAmB,EAAChC,WAAWiC,CAAC;IACnE,IACE,AACA,kBAAkB,iDADiD;IAEnE,OAAOF,+BAA+B,YACtCA,2BAA2BJ,MAAM,KAAK,GACtC;QACAhH,sBAAsBX,OAAO3E,MAAM,KAAK;QACxC;IACF;IACA,MAAM6M,aAAaH,0BAA0B,CAAC,EAAE;IAChD,IAAI,CAACG,WAAWC,YAAY,EAAE;QAC5B,8BAA8B;QAC9BxH,sBAAsBX,OAAO3E,MAAM,KAAK;QACxC;IACF;IAEA,MAAMoI,oBAAoByE,WAAW3N,IAAI;IACzC,iEAAiE;IACjE,gDAAgD;IAChD,MAAMf,mBACJ,OAAOwM,WAAW6B,EAAE,EAAE,CAAC,EAAE,KAAK,WAC1B7B,WAAW6B,EAAE,CAAC,EAAE,GAChBO,SAASzD,SAASN,OAAO,CAACkB,GAAG,CAAC8C,kBAAAA,6BAA6B,KAAK,IAAI;IAC1E,MAAM/B,cAAc,CAACgC,MAAM9O,oBACvBb,eAAea,oBACf+O,iBAAAA,mBAAmB;IAEvB,6EAA6E;IAC7E,wEAAwE;IACxE,8EAA8E;IAC9E,qCAAqC;IACrC,MAAMX,oBACJjD,SAASN,OAAO,CAACkB,GAAG,CAACI,kBAAAA,wBAAwB,MAAM;IAErD,qEAAqE;IACrE,gBAAgB;IAChB,EAAE;IACF,iEAAiE;IACjE,wBAAwB;IACxB,MAAM3E,MAA4B;QAAEb,kBAAkB;IAAK;IAC3D,MAAMgE,YAAYX,wCAChBC,mBACAhH,gBACAuE;IAEF,MAAMb,mBAAmBa,IAAIb,gBAAgB;IAC7C,IAAIA,qBAAqB,MAAM;QAC7BQ,sBAAsBX,OAAO3E,MAAM,KAAK;QACxC;IACF;IAEA,MAAMkF,iBAAiBL,uBACrBF,OACAmE,WACAhE,kBACA9E,MAAMiL,aACN/J,oBACAJ,cACAM,gBACAiJ;IAGF,2EAA2E;IAC3E,qEAAqE;IACrE,EAAE;IACF,0EAA0E;IAC1E,0EAA0E;IAC1E,4EAA4E;IAC5E,yEAAyE;IACzE,0EAA0E;IAC1E,2EAA2E;IAC3EoC,oCACEzM,KACAV,MACAqE,eACA2F,UACAqB,YACA4B,mBACArH,gBACA;AAEJ;AAEA,SAASgH,mCACPiB,OAAkD,EAClD5L,OAAe;IAEf,MAAM4K,mBAAmB,EAAE;IAC3B,KAAK,MAAMxH,SAASwI,QAAQC,MAAM,GAAI;QACpC,IAAIzI,MAAM5D,MAAM,KAAA,GAA0B;YACxCwE,wBAAwBZ,OAAOpD;QACjC,OAAO,IAAIoD,MAAM5D,MAAM,KAAA,GAA4B;YACjDoL,iBAAiBkB,IAAI,CAAC1I;QACxB;IACF;IACA,OAAOwH;AACT;AAEA,SAASM,oCACPzM,GAAW,EACXV,IAAkB,EAClBqE,aAGsB,EACtB2F,QAA+C,EAC/CqB,UAAoC,EACpC4B,iBAA0B,EAC1B3I,KAA+B,EAC/BiI,cAAuE;IAEvE,IAAIlB,WAAWQ,CAAC,KAAKL,CAAAA,GAAAA,YAAAA,aAAa,KAAI;QACpC,qEAAqE;QACrE,mEAAmE;QACnE,0EAA0E;QAC1E,sEAAsE;QACtE,6BAA6B;QAC7B,IAAIe,mBAAmB,MAAM;YAC3BK,mCAAmCL,gBAAgB7L,MAAM,KAAK;QAChE;QACA,OAAO;IACT;IAEA,MAAMsN,cAAcX,CAAAA,GAAAA,mBAAAA,mBAAmB,EAAChC,WAAWiC,CAAC;IACpD,IAAI,OAAOU,gBAAgB,UAAU;QACnC,wEAAwE;QACxE,4EAA4E;QAC5E,OAAO;IACT;IAEA,iEAAiE;IACjE,gDAAgD;IAChD,MAAMnP,mBACJ,OAAOwM,WAAW6B,EAAE,EAAE,CAAC,EAAE,KAAK,WAC1B7B,WAAW6B,EAAE,CAAC,EAAE,GAChBO,SAASzD,SAASN,OAAO,CAACkB,GAAG,CAAC8C,kBAAAA,6BAA6B,KAAK,IAAI;IAC1E,MAAM/B,cAAc,CAACgC,MAAM9O,oBACvBb,eAAea,oBACf+O,iBAAAA,mBAAmB;IACvB,MAAM3L,UAAUvB,MAAMiL;IAEtB,KAAK,MAAM4B,cAAcS,YAAa;QACpC,MAAMC,WAAWV,WAAWU,QAAQ;QACpC,IAAIA,aAAa,MAAM;YACrB,uEAAuE;YACvE,oEAAoE;YACpE,EAAE;YACF,sEAAsE;YACtE,6CAA6C;YAC7C,EAAE;YACF,6DAA6D;YAC7D,MAAMxE,cAAc8D,WAAW9D,WAAW;YAC1C,IAAI7J,OAAO0E,MAAM1E,IAAI;YACrB,IAAK,IAAIsO,IAAI,GAAGA,IAAIzE,YAAYuD,MAAM,EAAEkB,KAAK,EAAG;gBAC9C,MAAMtK,mBAA2B6F,WAAW,CAACyE,EAAE;gBAC/C,IAAItO,MAAM+D,OAAO,CAACC,iBAAiB,KAAK2F,WAAW;oBACjD3J,OAAOA,KAAK+D,KAAK,CAACC,iBAAiB;gBACrC,OAAO;oBACL,IAAI2I,mBAAmB,MAAM;wBAC3BK,mCAAmCL,gBAAgB7L,MAAM,KAAK;oBAChE;oBACA,OAAO;gBACT;YACF;YAEAyN,uBACEzN,KACAV,MACAqE,eACAC,OACA1E,MACAqC,SACAgM,UACAhB,mBACAV;QAEJ;QAEA,MAAM6B,OAAOb,WAAWa,IAAI;QAC5B,IAAIA,SAAS,MAAM;YACjBC,qCACE3N,KACA2D,eACAC,OACA8J,MACA,MACAb,WAAWe,aAAa,EACxBrM,SACAqC,MAAM3C,QAAQ,EACd4K;QAEJ;IACF;IACA,uEAAuE;IACvE,4EAA4E;IAC5E,sCAAsC;IACtC,4EAA4E;IAC5E,2EAA2E;IAC3E,yEAAyE;IACzE,8EAA8E;IAC9E,oEAAoE;IACpE,IAAIA,mBAAmB,MAAM;QAC3B,MAAMM,mBAAmBD,mCACvBL,gBACA7L,MAAM,KAAK;QAEb,OAAOmM;IACT;IACA,OAAO;AACT;AAEA,SAASsB,uBACPzN,GAAW,EACXV,IAAkB,EAClBqE,aAGsB,EACtBC,KAA+B,EAC/B1E,IAAe,EACfqC,OAAe,EACfgM,QAA2B,EAC3BhB,iBAA0B,EAC1BsB,yBAGQ;IAER,wEAAwE;IACxE,+CAA+C;IAC/C,MAAMzJ,MAAMmJ,QAAQ,CAAC,EAAE;IACvB,MAAMpJ,UAAUoJ,QAAQ,CAAC,EAAE;IAC3B,MAAMtJ,YAAYG,QAAQ,QAAQmI;IAClCoB,qCACE3N,KACA2D,eACAC,OACAQ,KACAD,SACAF,WACA1C,SACArC,MACA2O;IAGF,mDAAmD;IACnD,MAAM5K,QAAQ/D,KAAK+D,KAAK;IACxB,IAAIA,UAAU,MAAM;QAClB,MAAM6K,mBAAmBP,QAAQ,CAAC,EAAE;QACpC,IAAK,MAAMrK,oBAAoBD,MAAO;YACpC,MAAME,YAAYF,KAAK,CAACC,iBAAiB;YACzC,MAAM6K,gBACJD,gBAAgB,CAAC5K,iBAAiB;YACpC,IAAI6K,kBAAkB,QAAQA,kBAAkBlF,WAAW;gBACzD4E,uBACEzN,KACAV,MACAqE,eACAC,OACAT,WACA5B,SACAwM,eACAxB,mBACAsB;YAEJ;QACF;IACF;AACF;AAEA,SAASF,qCACP3N,GAAW,EACX2D,aAGsB,EACtBC,KAA+B,EAC/BQ,GAAoB,EACpBD,OAAuD,EACvDF,SAAkB,EAClB1C,OAAe,EACfrC,IAAe,EACf2O,yBAGQ;IAER,0EAA0E;IAC1E,4EAA4E;IAC5E,+DAA+D;IAC/D,MAAMG,aACJH,8BAA8B,OAC1BA,0BAA0B3D,GAAG,CAAChL,KAAKmE,UAAU,IAC7CwF;IACN,IAAImF,eAAenF,WAAW;QAC5B1D,yBAAyB6I,YAAY5J,KAAKD,SAAS5C,SAAS0C;IAC9D,OAAO;QACL,0DAA0D;QAC1D,MAAMgK,mBAAmBtQ,8BACvBqC,KACA2D,eACAC,OACA1E;QAEF,IAAI+O,iBAAiBlN,MAAM,KAAA,GAAwB;YACjD,oDAAoD;YACpD,MAAMmN,WAAWD;YACjB9I,yBACEnH,wBAAwBkQ,UAAUvK,gBAClCS,KACAD,SACA5C,SACA0C;QAEJ,OAAO;YACL,iEAAiE;YACjE,+CAA+C;YAC/C,MAAMiK,WAAW/I,yBACfnH,wBACEf,gCAAgCsE,UAChCoC,gBAEFS,KACAD,SACA5C,SACA0C;YAEFhG,mBACE+B,KACA8D,CAAAA,GAAAA,UAAAA,4BAA4B,EAACH,eAAezE,OAC5CgP;QAEJ;IACF;AACF;AAEA,eAAerE,sBACbR,GAAQ,EACRL,OAAuB;IAEvB,MAAMmF,gBAAgB;IACtB,6EAA6E;IAC7E,6EAA6E;IAC7E,oDAAoD;IACpD,mDAAmD;IACnD,MAAMC,0BAA0B;IAChC,MAAM9E,WAAW,MAAM+E,CAAAA,GAAAA,qBAAAA,WAAW,EAChChF,KACAL,SACAmF,eACAC;IAEF,IAAI,CAAC9E,SAASS,EAAE,EAAE;QAChB,OAAO;IACT;IAEA,yBAAyB;IACzB,IAAIzL,mCAAoB;IACtB,0EAA0E;IAC1E,2EAA2E;IAC3E,2EAA2E;IAC3E,sDAAsD;IACxD,OAAO;QACL,MAAMgQ,cAAchF,SAASN,OAAO,CAACkB,GAAG,CAAC;QACzC,MAAMqE,mBACJD,eAAeA,YAAYE,UAAU,CAACC,kBAAAA,uBAAuB;QAC/D,IAAI,CAACF,kBAAkB;YACrB,OAAO;QACT;IACF;IACA,OAAOjF;AACT;AAEA,SAASkB,6BACPkE,oBAAgD,EAChDC,aAAyB,EACzBlE,oBAA4C;IAE5C,0EAA0E;IAC1E,4EAA4E;IAC5E,uEAAuE;IACvE,0EAA0E;IAC1E,8DAA8D;IAC9D,2CAA2C;IAC3C,EAAE;IACF,2EAA2E;IAC3E,0EAA0E;IAC1E,8EAA8E;IAC9E,+BAA+B;IAC/B,EAAE;IACF,8EAA8E;IAC9E,iCAAiC;IACjC,IAAImE,kBAAkB;IACtB,MAAMC,SAASH,qBAAqBI,SAAS;IAC7C,OAAO,IAAIC,eAAe;QACxB,MAAMC,MAAKC,UAAU;YACnB,MAAO,KAAM;gBACX,MAAM,EAAEC,IAAI,EAAE1D,KAAK,EAAE,GAAG,MAAMqD,OAAOM,IAAI;gBACzC,IAAI,CAACD,MAAM;oBACT,mEAAmE;oBACnE,mBAAmB;oBACnBD,WAAWG,OAAO,CAAC5D;oBAEnB,+DAA+D;oBAC/D,kEAAkE;oBAClE,qEAAqE;oBACrE,6CAA6C;oBAC7CoD,mBAAmBpD,MAAM6D,UAAU;oBACnC5E,qBAAqBmE;oBACrB;gBACF;gBACA,qEAAqE;gBACrE,sDAAsD;gBACtDD;gBACA;YACF;QACF;IACF;AACF;AAEA,SAAS7E,sCACPT,GAAQ,EACRN,WAA8B;IAE9B,IAAIzK,oBAAoB;;IAYxB,OAAO+K;AACT;AAuBO,SAAStM,sCACd4S,eAA8B,EAC9BC,WAA0B;IAE1B,OAAOD,kBAAkBC;AAC3B","ignoreList":[0]}}, + {"offset": {"line": 7630, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/segment-cache/navigation.ts"],"sourcesContent":["import type {\n CacheNodeSeedData,\n FlightRouterState,\n FlightSegmentPath,\n} from '../../../shared/lib/app-router-types'\nimport type { CacheNode } from '../../../shared/lib/app-router-types'\nimport type {\n HeadData,\n LoadingModuleData,\n} from '../../../shared/lib/app-router-types'\nimport type { NormalizedFlightData } from '../../flight-data-helpers'\nimport { fetchServerResponse } from '../router-reducer/fetch-server-response'\nimport {\n startPPRNavigation,\n spawnDynamicRequests,\n FreshnessPolicy,\n type NavigationTask,\n type NavigationRequestAccumulation,\n} from '../router-reducer/ppr-navigations'\nimport { createHrefFromUrl } from '../router-reducer/create-href-from-url'\nimport {\n EntryStatus,\n readRouteCacheEntry,\n readSegmentCacheEntry,\n waitForSegmentCacheEntry,\n requestOptimisticRouteCacheEntry,\n type RouteTree,\n type FulfilledRouteCacheEntry,\n} from './cache'\nimport { createCacheKey } from './cache-key'\nimport { addSearchParamsIfPageSegment } from '../../../shared/lib/segment'\nimport { NavigationResultTag } from './types'\n\ntype MPANavigationResult = {\n tag: NavigationResultTag.MPA\n data: string\n}\n\ntype SuccessfulNavigationResult = {\n tag: NavigationResultTag.Success\n data: {\n flightRouterState: FlightRouterState\n cacheNode: CacheNode\n canonicalUrl: string\n renderedSearch: string\n scrollableSegments: Array | null\n shouldScroll: boolean\n hash: string\n }\n}\n\ntype AsyncNavigationResult = {\n tag: NavigationResultTag.Async\n data: Promise\n}\n\nexport type NavigationResult =\n | MPANavigationResult\n | SuccessfulNavigationResult\n | AsyncNavigationResult\n\n/**\n * Navigate to a new URL, using the Segment Cache to construct a response.\n *\n * To allow for synchronous navigations whenever possible, this is not an async\n * function. It returns a promise only if there's no matching prefetch in\n * the cache. Otherwise it returns an immediate result and uses Suspense/RSC to\n * stream in any missing data.\n */\nexport function navigate(\n url: URL,\n currentUrl: URL,\n currentCacheNode: CacheNode | null,\n currentFlightRouterState: FlightRouterState,\n nextUrl: string | null,\n freshnessPolicy: FreshnessPolicy,\n shouldScroll: boolean,\n accumulation: { collectedDebugInfo?: Array }\n): NavigationResult {\n const now = Date.now()\n const href = url.href\n\n // We special case navigations to the exact same URL as the current location.\n // It's a common UI pattern for apps to refresh when you click a link to the\n // current page. So when this happens, we refresh the dynamic data in the page\n // segments.\n //\n // Note that this does not apply if the any part of the hash or search query\n // has changed. This might feel a bit weird but it makes more sense when you\n // consider that the way to trigger this behavior is to click the same link\n // multiple times.\n //\n // TODO: We should probably refresh the *entire* route when this case occurs,\n // not just the page segments. Essentially treating it the same as a refresh()\n // triggered by an action, which is the more explicit way of modeling the UI\n // pattern described above.\n //\n // Also note that this only refreshes the dynamic data, not static/ cached\n // data. If the page segment is fully static and prefetched, the request is\n // skipped. (This is also how refresh() works.)\n const isSamePageNavigation = href === currentUrl.href\n\n const cacheKey = createCacheKey(href, nextUrl)\n const route = readRouteCacheEntry(now, cacheKey)\n if (route !== null && route.status === EntryStatus.Fulfilled) {\n // We have a matching prefetch.\n const snapshot = readRenderSnapshotFromCache(now, route, route.tree)\n const prefetchFlightRouterState = snapshot.flightRouterState\n const prefetchSeedData = snapshot.seedData\n const headSnapshot = readHeadSnapshotFromCache(now, route)\n const prefetchHead = headSnapshot.rsc\n const isPrefetchHeadPartial = headSnapshot.isPartial\n // TODO: The \"canonicalUrl\" stored in the cache doesn't include the hash,\n // because hash entries do not vary by hash fragment. However, the one\n // we set in the router state *does* include the hash, and it's used to\n // sync with the actual browser location. To make this less of a refactor\n // hazard, we should always track the hash separately from the rest of\n // the URL.\n const newCanonicalUrl = route.canonicalUrl + url.hash\n const renderedSearch = route.renderedSearch\n return navigateUsingPrefetchedRouteTree(\n now,\n url,\n currentUrl,\n nextUrl,\n isSamePageNavigation,\n currentCacheNode,\n currentFlightRouterState,\n prefetchFlightRouterState,\n prefetchSeedData,\n prefetchHead,\n isPrefetchHeadPartial,\n newCanonicalUrl,\n renderedSearch,\n freshnessPolicy,\n shouldScroll\n )\n }\n\n // There was no matching route tree in the cache. Let's see if we can\n // construct an \"optimistic\" route tree.\n //\n // Do not construct an optimistic route tree if there was a cache hit, but\n // the entry has a rejected status, since it may have been rejected due to a\n // rewrite or redirect based on the search params.\n //\n // TODO: There are multiple reasons a prefetch might be rejected; we should\n // track them explicitly and choose what to do here based on that.\n if (route === null || route.status !== EntryStatus.Rejected) {\n const optimisticRoute = requestOptimisticRouteCacheEntry(now, url, nextUrl)\n if (optimisticRoute !== null) {\n // We have an optimistic route tree. Proceed with the normal flow.\n const snapshot = readRenderSnapshotFromCache(\n now,\n optimisticRoute,\n optimisticRoute.tree\n )\n const prefetchFlightRouterState = snapshot.flightRouterState\n const prefetchSeedData = snapshot.seedData\n const headSnapshot = readHeadSnapshotFromCache(now, optimisticRoute)\n const prefetchHead = headSnapshot.rsc\n const isPrefetchHeadPartial = headSnapshot.isPartial\n const newCanonicalUrl = optimisticRoute.canonicalUrl + url.hash\n const newRenderedSearch = optimisticRoute.renderedSearch\n return navigateUsingPrefetchedRouteTree(\n now,\n url,\n currentUrl,\n nextUrl,\n isSamePageNavigation,\n currentCacheNode,\n currentFlightRouterState,\n prefetchFlightRouterState,\n prefetchSeedData,\n prefetchHead,\n isPrefetchHeadPartial,\n newCanonicalUrl,\n newRenderedSearch,\n freshnessPolicy,\n shouldScroll\n )\n }\n }\n\n // There's no matching prefetch for this route in the cache.\n let collectedDebugInfo = accumulation.collectedDebugInfo ?? []\n if (accumulation.collectedDebugInfo === undefined) {\n collectedDebugInfo = accumulation.collectedDebugInfo = []\n }\n return {\n tag: NavigationResultTag.Async,\n data: navigateDynamicallyWithNoPrefetch(\n now,\n url,\n currentUrl,\n nextUrl,\n currentCacheNode,\n currentFlightRouterState,\n freshnessPolicy,\n shouldScroll,\n collectedDebugInfo\n ),\n }\n}\n\nexport function navigateToSeededRoute(\n now: number,\n url: URL,\n canonicalUrl: string,\n navigationSeed: NavigationSeed,\n currentUrl: URL,\n currentCacheNode: CacheNode | null,\n currentFlightRouterState: FlightRouterState,\n freshnessPolicy: FreshnessPolicy,\n nextUrl: string | null,\n shouldScroll: boolean\n): SuccessfulNavigationResult | MPANavigationResult {\n // A version of navigate() that accepts the target route tree as an argument\n // rather than reading it from the prefetch cache.\n const accumulation: NavigationRequestAccumulation = {\n scrollableSegments: null,\n separateRefreshUrls: null,\n }\n const isSamePageNavigation = url.href === currentUrl.href\n const task = startPPRNavigation(\n now,\n currentUrl,\n currentCacheNode,\n currentFlightRouterState,\n navigationSeed.tree,\n freshnessPolicy,\n navigationSeed.data,\n navigationSeed.head,\n null,\n null,\n false,\n isSamePageNavigation,\n accumulation\n )\n if (task !== null) {\n spawnDynamicRequests(task, url, nextUrl, freshnessPolicy, accumulation)\n return navigationTaskToResult(\n task,\n canonicalUrl,\n navigationSeed.renderedSearch,\n accumulation.scrollableSegments,\n shouldScroll,\n url.hash\n )\n }\n // Could not perform a SPA navigation. Revert to a full-page (MPA) navigation.\n return {\n tag: NavigationResultTag.MPA,\n data: canonicalUrl,\n }\n}\n\nfunction navigateUsingPrefetchedRouteTree(\n now: number,\n url: URL,\n currentUrl: URL,\n nextUrl: string | null,\n isSamePageNavigation: boolean,\n currentCacheNode: CacheNode | null,\n currentFlightRouterState: FlightRouterState,\n prefetchFlightRouterState: FlightRouterState,\n prefetchSeedData: CacheNodeSeedData | null,\n prefetchHead: HeadData | null,\n isPrefetchHeadPartial: boolean,\n canonicalUrl: string,\n renderedSearch: string,\n freshnessPolicy: FreshnessPolicy,\n shouldScroll: boolean\n): SuccessfulNavigationResult | MPANavigationResult {\n // Recursively construct a prefetch tree by reading from the Segment Cache. To\n // maintain compatibility, we output the same data structures as the old\n // prefetching implementation: FlightRouterState and CacheNodeSeedData.\n // TODO: Eventually updateCacheNodeOnNavigation (or the equivalent) should\n // read from the Segment Cache directly. It's only structured this way for now\n // so we can share code with the old prefetching implementation.\n const accumulation: NavigationRequestAccumulation = {\n scrollableSegments: null,\n separateRefreshUrls: null,\n }\n const seedData = null\n const seedHead = null\n const task = startPPRNavigation(\n now,\n currentUrl,\n currentCacheNode,\n currentFlightRouterState,\n prefetchFlightRouterState,\n freshnessPolicy,\n seedData,\n seedHead,\n prefetchSeedData,\n prefetchHead,\n isPrefetchHeadPartial,\n isSamePageNavigation,\n accumulation\n )\n if (task !== null) {\n spawnDynamicRequests(task, url, nextUrl, freshnessPolicy, accumulation)\n return navigationTaskToResult(\n task,\n canonicalUrl,\n renderedSearch,\n accumulation.scrollableSegments,\n shouldScroll,\n url.hash\n )\n }\n // Could not perform a SPA navigation. Revert to a full-page (MPA) navigation.\n return {\n tag: NavigationResultTag.MPA,\n data: canonicalUrl,\n }\n}\n\nfunction navigationTaskToResult(\n task: NavigationTask,\n canonicalUrl: string,\n renderedSearch: string,\n scrollableSegments: Array | null,\n shouldScroll: boolean,\n hash: string\n): SuccessfulNavigationResult | MPANavigationResult {\n return {\n tag: NavigationResultTag.Success,\n data: {\n flightRouterState: task.route,\n cacheNode: task.node,\n canonicalUrl,\n renderedSearch,\n scrollableSegments,\n shouldScroll,\n hash,\n },\n }\n}\n\nfunction readRenderSnapshotFromCache(\n now: number,\n route: FulfilledRouteCacheEntry,\n tree: RouteTree\n): { flightRouterState: FlightRouterState; seedData: CacheNodeSeedData } {\n let childRouterStates: { [parallelRouteKey: string]: FlightRouterState } = {}\n let childSeedDatas: {\n [parallelRouteKey: string]: CacheNodeSeedData | null\n } = {}\n const slots = tree.slots\n if (slots !== null) {\n for (const parallelRouteKey in slots) {\n const childTree = slots[parallelRouteKey]\n const childResult = readRenderSnapshotFromCache(now, route, childTree)\n childRouterStates[parallelRouteKey] = childResult.flightRouterState\n childSeedDatas[parallelRouteKey] = childResult.seedData\n }\n }\n\n let rsc: React.ReactNode | null = null\n let loading: LoadingModuleData | Promise = null\n let isPartial: boolean = true\n\n const segmentEntry = readSegmentCacheEntry(now, tree.varyPath)\n if (segmentEntry !== null) {\n switch (segmentEntry.status) {\n case EntryStatus.Fulfilled: {\n // Happy path: a cache hit\n rsc = segmentEntry.rsc\n loading = segmentEntry.loading\n isPartial = segmentEntry.isPartial\n break\n }\n case EntryStatus.Pending: {\n // We haven't received data for this segment yet, but there's already\n // an in-progress request. Since it's extremely likely to arrive\n // before the dynamic data response, we might as well use it.\n const promiseForFulfilledEntry = waitForSegmentCacheEntry(segmentEntry)\n rsc = promiseForFulfilledEntry.then((entry) =>\n entry !== null ? entry.rsc : null\n )\n loading = promiseForFulfilledEntry.then((entry) =>\n entry !== null ? entry.loading : null\n )\n // Because the request is still pending, we typically don't know yet\n // whether the response will be partial. We shouldn't skip this segment\n // during the dynamic navigation request. Otherwise, we might need to\n // do yet another request to fill in the remaining data, creating\n // a waterfall.\n //\n // The one exception is if this segment is being fetched with via\n // prefetch={true} (i.e. the \"force stale\" or \"full\" strategy). If so,\n // we can assume the response will be full. This field is set to `false`\n // for such segments.\n isPartial = segmentEntry.isPartial\n break\n }\n case EntryStatus.Empty:\n case EntryStatus.Rejected:\n break\n default:\n segmentEntry satisfies never\n }\n }\n\n // The navigation implementation expects the search params to be\n // included in the segment. However, the Segment Cache tracks search\n // params separately from the rest of the segment key. So we need to\n // add them back here.\n //\n // See corresponding comment in convertFlightRouterStateToTree.\n //\n // TODO: What we should do instead is update the navigation diffing\n // logic to compare search params explicitly. This is a temporary\n // solution until more of the Segment Cache implementation has settled.\n const segment = addSearchParamsIfPageSegment(\n tree.segment,\n Object.fromEntries(new URLSearchParams(route.renderedSearch))\n )\n\n // We don't need this information in a render snapshot, so this can just be a placeholder.\n const hasRuntimePrefetch = false\n\n return {\n flightRouterState: [\n segment,\n childRouterStates,\n null,\n null,\n tree.isRootLayout,\n ],\n seedData: [rsc, childSeedDatas, loading, isPartial, hasRuntimePrefetch],\n }\n}\n\nfunction readHeadSnapshotFromCache(\n now: number,\n route: FulfilledRouteCacheEntry\n): { rsc: HeadData; isPartial: boolean } {\n // Same as readRenderSnapshotFromCache, but for the head\n let rsc: React.ReactNode | null = null\n let isPartial: boolean = true\n const segmentEntry = readSegmentCacheEntry(now, route.metadata.varyPath)\n if (segmentEntry !== null) {\n switch (segmentEntry.status) {\n case EntryStatus.Fulfilled: {\n rsc = segmentEntry.rsc\n isPartial = segmentEntry.isPartial\n break\n }\n case EntryStatus.Pending: {\n const promiseForFulfilledEntry = waitForSegmentCacheEntry(segmentEntry)\n rsc = promiseForFulfilledEntry.then((entry) =>\n entry !== null ? entry.rsc : null\n )\n isPartial = segmentEntry.isPartial\n break\n }\n case EntryStatus.Empty:\n case EntryStatus.Rejected:\n break\n default:\n segmentEntry satisfies never\n }\n }\n return { rsc, isPartial }\n}\n\n// Used to request all the dynamic data for a route, rather than just a subset,\n// e.g. during a refresh or a revalidation. Typically this gets constructed\n// during the normal flow when diffing the route tree, but for an unprefetched\n// navigation, where we don't know the structure of the target route, we use\n// this instead.\nconst DynamicRequestTreeForEntireRoute: FlightRouterState = [\n '',\n {},\n null,\n 'refetch',\n]\n\nasync function navigateDynamicallyWithNoPrefetch(\n now: number,\n url: URL,\n currentUrl: URL,\n nextUrl: string | null,\n currentCacheNode: CacheNode | null,\n currentFlightRouterState: FlightRouterState,\n freshnessPolicy: FreshnessPolicy,\n shouldScroll: boolean,\n collectedDebugInfo: Array\n): Promise {\n // Runs when a navigation happens but there's no cached prefetch we can use.\n // Don't bother to wait for a prefetch response; go straight to a full\n // navigation that contains both static and dynamic data in a single stream.\n // (This is unlike the old navigation implementation, which instead blocks\n // the dynamic request until a prefetch request is received.)\n //\n // To avoid duplication of logic, we're going to pretend that the tree\n // returned by the dynamic request is, in fact, a prefetch tree. Then we can\n // use the same server response to write the actual data into the CacheNode\n // tree. So it's the same flow as the \"happy path\" (prefetch, then\n // navigation), except we use a single server response for both stages.\n\n let dynamicRequestTree: FlightRouterState\n switch (freshnessPolicy) {\n case FreshnessPolicy.Default:\n case FreshnessPolicy.HistoryTraversal:\n dynamicRequestTree = currentFlightRouterState\n break\n case FreshnessPolicy.Hydration: // <- shouldn't happen during client nav\n case FreshnessPolicy.RefreshAll:\n case FreshnessPolicy.HMRRefresh:\n dynamicRequestTree = DynamicRequestTreeForEntireRoute\n break\n default:\n freshnessPolicy satisfies never\n dynamicRequestTree = currentFlightRouterState\n break\n }\n\n const promiseForDynamicServerResponse = fetchServerResponse(url, {\n flightRouterState: dynamicRequestTree,\n nextUrl,\n })\n const result = await promiseForDynamicServerResponse\n if (typeof result === 'string') {\n // This is an MPA navigation.\n const newUrl = result\n return {\n tag: NavigationResultTag.MPA,\n data: newUrl,\n }\n }\n\n const {\n flightData,\n canonicalUrl,\n renderedSearch,\n debugInfo: debugInfoFromResponse,\n } = result\n if (debugInfoFromResponse !== null) {\n collectedDebugInfo.push(...debugInfoFromResponse)\n }\n\n // Since the response format of dynamic requests and prefetches is slightly\n // different, we'll need to massage the data a bit. Create FlightRouterState\n // tree that simulates what we'd receive as the result of a prefetch.\n const navigationSeed = convertServerPatchToFullTree(\n currentFlightRouterState,\n flightData,\n renderedSearch\n )\n\n return navigateToSeededRoute(\n now,\n url,\n createHrefFromUrl(canonicalUrl),\n navigationSeed,\n currentUrl,\n currentCacheNode,\n currentFlightRouterState,\n freshnessPolicy,\n nextUrl,\n shouldScroll\n )\n}\n\nexport type NavigationSeed = {\n tree: FlightRouterState\n renderedSearch: string\n data: CacheNodeSeedData | null\n head: HeadData | null\n}\n\nexport function convertServerPatchToFullTree(\n currentTree: FlightRouterState,\n flightData: Array,\n renderedSearch: string\n): NavigationSeed {\n // During a client navigation or prefetch, the server sends back only a patch\n // for the parts of the tree that have changed.\n //\n // This applies the patch to the base tree to create a full representation of\n // the resulting tree.\n //\n // The return type includes a full FlightRouterState tree and a full\n // CacheNodeSeedData tree. (Conceptually these are the same tree, and should\n // eventually be unified, but there's still lots of existing code that\n // operates on FlightRouterState trees alone without the CacheNodeSeedData.)\n //\n // TODO: This similar to what apply-router-state-patch-to-tree does. It\n // will eventually fully replace it. We should get rid of all the remaining\n // places where we iterate over the server patch format. This should also\n // eventually replace normalizeFlightData.\n\n let baseTree: FlightRouterState = currentTree\n let baseData: CacheNodeSeedData | null = null\n let head: HeadData | null = null\n for (const {\n segmentPath,\n tree: treePatch,\n seedData: dataPatch,\n head: headPatch,\n } of flightData) {\n const result = convertServerPatchToFullTreeImpl(\n baseTree,\n baseData,\n treePatch,\n dataPatch,\n segmentPath,\n 0\n )\n baseTree = result.tree\n baseData = result.data\n // This is the same for all patches per response, so just pick an\n // arbitrary one\n head = headPatch\n }\n\n return {\n tree: baseTree,\n data: baseData,\n renderedSearch,\n head,\n }\n}\n\nfunction convertServerPatchToFullTreeImpl(\n baseRouterState: FlightRouterState,\n baseData: CacheNodeSeedData | null,\n treePatch: FlightRouterState,\n dataPatch: CacheNodeSeedData | null,\n segmentPath: FlightSegmentPath,\n index: number\n): { tree: FlightRouterState; data: CacheNodeSeedData | null } {\n if (index === segmentPath.length) {\n // We reached the part of the tree that we need to patch.\n return {\n tree: treePatch,\n data: dataPatch,\n }\n }\n\n // segmentPath represents the parent path of subtree. It's a repeating\n // pattern of parallel route key and segment:\n //\n // [string, Segment, string, Segment, string, Segment, ...]\n //\n // This path tells us which part of the base tree to apply the tree patch.\n //\n // NOTE: We receive the FlightRouterState patch in the same request as the\n // seed data patch. Therefore we don't need to worry about diffing the segment\n // values; we can assume the server sent us a correct result.\n const updatedParallelRouteKey: string = segmentPath[index]\n // const segment: Segment = segmentPath[index + 1] <-- Not used, see note above\n\n const baseTreeChildren = baseRouterState[1]\n const baseSeedDataChildren = baseData !== null ? baseData[1] : null\n const newTreeChildren: Record = {}\n const newSeedDataChildren: Record = {}\n for (const parallelRouteKey in baseTreeChildren) {\n const childBaseRouterState = baseTreeChildren[parallelRouteKey]\n const childBaseSeedData =\n baseSeedDataChildren !== null\n ? (baseSeedDataChildren[parallelRouteKey] ?? null)\n : null\n if (parallelRouteKey === updatedParallelRouteKey) {\n const result = convertServerPatchToFullTreeImpl(\n childBaseRouterState,\n childBaseSeedData,\n treePatch,\n dataPatch,\n segmentPath,\n // Advance the index by two and keep cloning until we reach\n // the end of the segment path.\n index + 2\n )\n\n newTreeChildren[parallelRouteKey] = result.tree\n newSeedDataChildren[parallelRouteKey] = result.data\n } else {\n // This child is not being patched. Copy it over as-is.\n newTreeChildren[parallelRouteKey] = childBaseRouterState\n newSeedDataChildren[parallelRouteKey] = childBaseSeedData\n }\n }\n\n let clonedTree: FlightRouterState\n let clonedSeedData: CacheNodeSeedData\n // Clone all the fields except the children.\n\n // Clone the FlightRouterState tree. Based on equivalent logic in\n // apply-router-state-patch-to-tree, but should confirm whether we need to\n // copy all of these fields. Not sure the server ever sends, e.g. the\n // refetch marker.\n clonedTree = [baseRouterState[0], newTreeChildren]\n if (2 in baseRouterState) {\n clonedTree[2] = baseRouterState[2]\n }\n if (3 in baseRouterState) {\n clonedTree[3] = baseRouterState[3]\n }\n if (4 in baseRouterState) {\n clonedTree[4] = baseRouterState[4]\n }\n\n // Clone the CacheNodeSeedData tree.\n const isEmptySeedDataPartial = true\n clonedSeedData = [\n null,\n newSeedDataChildren,\n null,\n isEmptySeedDataPartial,\n false,\n ]\n\n return {\n tree: clonedTree,\n data: clonedSeedData,\n }\n}\n"],"names":["convertServerPatchToFullTree","navigate","navigateToSeededRoute","url","currentUrl","currentCacheNode","currentFlightRouterState","nextUrl","freshnessPolicy","shouldScroll","accumulation","now","Date","href","isSamePageNavigation","cacheKey","createCacheKey","route","readRouteCacheEntry","status","EntryStatus","Fulfilled","snapshot","readRenderSnapshotFromCache","tree","prefetchFlightRouterState","flightRouterState","prefetchSeedData","seedData","headSnapshot","readHeadSnapshotFromCache","prefetchHead","rsc","isPrefetchHeadPartial","isPartial","newCanonicalUrl","canonicalUrl","hash","renderedSearch","navigateUsingPrefetchedRouteTree","Rejected","optimisticRoute","requestOptimisticRouteCacheEntry","newRenderedSearch","collectedDebugInfo","undefined","tag","NavigationResultTag","Async","data","navigateDynamicallyWithNoPrefetch","navigationSeed","scrollableSegments","separateRefreshUrls","task","startPPRNavigation","head","spawnDynamicRequests","navigationTaskToResult","MPA","seedHead","Success","cacheNode","node","childRouterStates","childSeedDatas","slots","parallelRouteKey","childTree","childResult","loading","segmentEntry","readSegmentCacheEntry","varyPath","Pending","promiseForFulfilledEntry","waitForSegmentCacheEntry","then","entry","Empty","segment","addSearchParamsIfPageSegment","Object","fromEntries","URLSearchParams","hasRuntimePrefetch","isRootLayout","metadata","DynamicRequestTreeForEntireRoute","dynamicRequestTree","FreshnessPolicy","Default","HistoryTraversal","Hydration","RefreshAll","HMRRefresh","promiseForDynamicServerResponse","fetchServerResponse","result","newUrl","flightData","debugInfo","debugInfoFromResponse","push","createHrefFromUrl","currentTree","baseTree","baseData","segmentPath","treePatch","dataPatch","headPatch","convertServerPatchToFullTreeImpl","baseRouterState","index","length","updatedParallelRouteKey","baseTreeChildren","baseSeedDataChildren","newTreeChildren","newSeedDataChildren","childBaseRouterState","childBaseSeedData","clonedTree","clonedSeedData","isEmptySeedDataPartial"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 8090, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/router-reducer/reducers/navigate-reducer.ts"],"sourcesContent":["import type {\n FlightRouterState,\n FlightSegmentPath,\n} from '../../../../shared/lib/app-router-types'\nimport { createHrefFromUrl } from '../create-href-from-url'\nimport type {\n Mutable,\n NavigateAction,\n ReadonlyReducerState,\n ReducerState,\n} from '../router-reducer-types'\nimport { handleMutable } from '../handle-mutable'\n\nimport {\n navigate as navigateUsingSegmentCache,\n type NavigationResult,\n} from '../../segment-cache/navigation'\nimport { NavigationResultTag } from '../../segment-cache/types'\nimport { getStaleTimeMs } from '../../segment-cache/cache'\nimport { FreshnessPolicy } from '../ppr-navigations'\n\n// These values are set by `define-env-plugin` (based on `nextConfig.experimental.staleTimes`)\n// and default to 5 minutes (static) / 0 seconds (dynamic)\nexport const DYNAMIC_STALETIME_MS =\n Number(process.env.__NEXT_CLIENT_ROUTER_DYNAMIC_STALETIME) * 1000\n\nexport const STATIC_STALETIME_MS = getStaleTimeMs(\n Number(process.env.__NEXT_CLIENT_ROUTER_STATIC_STALETIME)\n)\n\nexport function handleExternalUrl(\n state: ReadonlyReducerState,\n mutable: Mutable,\n url: string,\n pendingPush: boolean\n) {\n mutable.mpaNavigation = true\n mutable.canonicalUrl = url\n mutable.pendingPush = pendingPush\n mutable.scrollableSegments = undefined\n\n return handleMutable(state, mutable)\n}\n\nexport function generateSegmentsFromPatch(\n flightRouterPatch: FlightRouterState\n): FlightSegmentPath[] {\n const segments: FlightSegmentPath[] = []\n const [segment, parallelRoutes] = flightRouterPatch\n\n if (Object.keys(parallelRoutes).length === 0) {\n return [[segment]]\n }\n\n for (const [parallelRouteKey, parallelRoute] of Object.entries(\n parallelRoutes\n )) {\n for (const childSegment of generateSegmentsFromPatch(parallelRoute)) {\n // If the segment is empty, it means we are at the root of the tree\n if (segment === '') {\n segments.push([parallelRouteKey, ...childSegment])\n } else {\n segments.push([segment, parallelRouteKey, ...childSegment])\n }\n }\n }\n\n return segments\n}\n\nexport function handleNavigationResult(\n url: URL,\n state: ReadonlyReducerState,\n mutable: Mutable,\n pendingPush: boolean,\n result: NavigationResult\n): ReducerState {\n switch (result.tag) {\n case NavigationResultTag.MPA: {\n // Perform an MPA navigation.\n const newUrl = result.data\n return handleExternalUrl(state, mutable, newUrl, pendingPush)\n }\n case NavigationResultTag.Success: {\n // Received a new result.\n mutable.cache = result.data.cacheNode\n mutable.patchedTree = result.data.flightRouterState\n mutable.renderedSearch = result.data.renderedSearch\n mutable.canonicalUrl = result.data.canonicalUrl\n // TODO: During a refresh, we don't set the `scrollableSegments`. There's\n // some confusing and subtle logic in `handleMutable` that decides what\n // to do when `shouldScroll` is set but `scrollableSegments` is not. I'm\n // not convinced it's totally coherent but the tests assert on this\n // particular behavior so I've ported the logic as-is from the previous\n // router implementation, for now.\n mutable.scrollableSegments = result.data.scrollableSegments ?? undefined\n mutable.shouldScroll = result.data.shouldScroll\n mutable.hashFragment = result.data.hash\n\n // Check if the only thing that changed was the hash fragment.\n const oldUrl = new URL(state.canonicalUrl, url)\n const onlyHashChange =\n // We don't need to compare the origins, because client-driven\n // navigations are always same-origin.\n url.pathname === oldUrl.pathname &&\n url.search === oldUrl.search &&\n url.hash !== oldUrl.hash\n if (onlyHashChange) {\n // The only updated part of the URL is the hash.\n mutable.onlyHashChange = true\n mutable.shouldScroll = result.data.shouldScroll\n mutable.hashFragment = url.hash\n // Setting this to an empty array triggers a scroll for all new and\n // updated segments. See `ScrollAndFocusHandler` for more details.\n mutable.scrollableSegments = []\n }\n\n return handleMutable(state, mutable)\n }\n case NavigationResultTag.Async: {\n return result.data.then(\n (asyncResult) =>\n handleNavigationResult(url, state, mutable, pendingPush, asyncResult),\n // If the navigation failed, return the current state.\n // TODO: This matches the current behavior but we need to do something\n // better here if the network fails.\n () => {\n return state\n }\n )\n }\n default: {\n result satisfies never\n return state\n }\n }\n}\n\nexport function navigateReducer(\n state: ReadonlyReducerState,\n action: NavigateAction\n): ReducerState {\n const { url, isExternalUrl, navigateType, shouldScroll } = action\n const mutable: Mutable = {}\n const href = createHrefFromUrl(url)\n const pendingPush = navigateType === 'push'\n\n mutable.preserveCustomHistoryState = false\n mutable.pendingPush = pendingPush\n\n if (isExternalUrl) {\n return handleExternalUrl(state, mutable, url.toString(), pendingPush)\n }\n\n // Handles case where `` tag is present,\n // which will trigger an MPA navigation.\n if (document.getElementById('__next-page-redirect')) {\n return handleExternalUrl(state, mutable, href, pendingPush)\n }\n\n // Temporary glue code between the router reducer and the new navigation\n // implementation. Eventually we'll rewrite the router reducer to a\n // state machine.\n const currentUrl = new URL(state.canonicalUrl, location.origin)\n const result = navigateUsingSegmentCache(\n url,\n currentUrl,\n state.cache,\n state.tree,\n state.nextUrl,\n FreshnessPolicy.Default,\n shouldScroll,\n mutable\n )\n return handleNavigationResult(url, state, mutable, pendingPush, result)\n}\n"],"names":["DYNAMIC_STALETIME_MS","STATIC_STALETIME_MS","generateSegmentsFromPatch","handleExternalUrl","handleNavigationResult","navigateReducer","Number","process","env","__NEXT_CLIENT_ROUTER_DYNAMIC_STALETIME","getStaleTimeMs","__NEXT_CLIENT_ROUTER_STATIC_STALETIME","state","mutable","url","pendingPush","mpaNavigation","canonicalUrl","scrollableSegments","undefined","handleMutable","flightRouterPatch","segments","segment","parallelRoutes","Object","keys","length","parallelRouteKey","parallelRoute","entries","childSegment","push","result","tag","NavigationResultTag","MPA","newUrl","data","Success","cache","cacheNode","patchedTree","flightRouterState","renderedSearch","shouldScroll","hashFragment","hash","oldUrl","URL","onlyHashChange","pathname","search","Async","then","asyncResult","action","isExternalUrl","navigateType","href","createHrefFromUrl","preserveCustomHistoryState","toString","document","getElementById","currentUrl","location","origin","navigateUsingSegmentCache","tree","nextUrl","FreshnessPolicy","Default"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 8260, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/router-reducer/reducers/has-interception-route-in-current-tree.ts"],"sourcesContent":["import type { FlightRouterState } from '../../../../shared/lib/app-router-types'\nimport { isInterceptionRouteAppPath } from '../../../../shared/lib/router/utils/interception-routes'\n\nexport function hasInterceptionRouteInCurrentTree([\n segment,\n parallelRoutes,\n]: FlightRouterState): boolean {\n // If we have a dynamic segment, it's marked as an interception route by the presence of the `i` suffix.\n if (\n Array.isArray(segment) &&\n (segment[2] === 'di(..)(..)' ||\n segment[2] === 'ci(..)(..)' ||\n segment[2] === 'di(.)' ||\n segment[2] === 'ci(.)' ||\n segment[2] === 'di(..)' ||\n segment[2] === 'ci(..)' ||\n segment[2] === 'di(...)' ||\n segment[2] === 'ci(...)')\n ) {\n return true\n }\n\n // If segment is not an array, apply the existing string-based check\n if (typeof segment === 'string' && isInterceptionRouteAppPath(segment)) {\n return true\n }\n\n // Iterate through parallelRoutes if they exist\n if (parallelRoutes) {\n for (const key in parallelRoutes) {\n if (hasInterceptionRouteInCurrentTree(parallelRoutes[key])) {\n return true\n }\n }\n }\n\n return false\n}\n"],"names":["hasInterceptionRouteInCurrentTree","segment","parallelRoutes","Array","isArray","isInterceptionRouteAppPath","key"],"mappings":";;;+BAGgBA,qCAAAA;;;eAAAA;;;oCAF2B;AAEpC,SAASA,kCAAkC,CAChDC,SACAC,eACkB;IAClB,wGAAwG;IACxG,IACEC,MAAMC,OAAO,CAACH,YACbA,CAAAA,OAAO,CAAC,EAAE,KAAK,gBACdA,OAAO,CAAC,EAAE,KAAK,gBACfA,OAAO,CAAC,EAAE,KAAK,WACfA,OAAO,CAAC,EAAE,KAAK,WACfA,OAAO,CAAC,EAAE,KAAK,YACfA,OAAO,CAAC,EAAE,KAAK,YACfA,OAAO,CAAC,EAAE,KAAK,aACfA,OAAO,CAAC,EAAE,KAAK,SAAQ,GACzB;QACA,OAAO;IACT;IAEA,oEAAoE;IACpE,IAAI,OAAOA,YAAY,YAAYI,CAAAA,GAAAA,oBAAAA,0BAA0B,EAACJ,UAAU;QACtE,OAAO;IACT;IAEA,+CAA+C;IAC/C,IAAIC,gBAAgB;QAClB,IAAK,MAAMI,OAAOJ,eAAgB;YAChC,IAAIF,kCAAkCE,cAAc,CAACI,IAAI,GAAG;gBAC1D,OAAO;YACT;QACF;IACF;IAEA,OAAO;AACT","ignoreList":[0]}}, + {"offset": {"line": 8300, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/router-reducer/reducers/refresh-reducer.ts"],"sourcesContent":["import type {\n Mutable,\n ReadonlyReducerState,\n ReducerState,\n} from '../router-reducer-types'\nimport { handleNavigationResult } from './navigate-reducer'\nimport { navigateToSeededRoute } from '../../segment-cache/navigation'\nimport { revalidateEntireCache } from '../../segment-cache/cache'\nimport { hasInterceptionRouteInCurrentTree } from './has-interception-route-in-current-tree'\nimport { FreshnessPolicy } from '../ppr-navigations'\n\nexport function refreshReducer(state: ReadonlyReducerState): ReducerState {\n // TODO: Currently, all refreshes purge the prefetch cache. In the future,\n // only client-side refreshes will have this behavior; the server-side\n // `refresh` should send new data without purging the prefetch cache.\n const currentNextUrl = state.nextUrl\n const currentRouterState = state.tree\n revalidateEntireCache(currentNextUrl, currentRouterState)\n return refreshDynamicData(state, FreshnessPolicy.RefreshAll)\n}\n\nexport function refreshDynamicData(\n state: ReadonlyReducerState,\n freshnessPolicy: FreshnessPolicy.RefreshAll | FreshnessPolicy.HMRRefresh\n): ReducerState {\n const currentNextUrl = state.nextUrl\n\n // We always send the last next-url, not the current when performing a dynamic\n // request. This is because we update the next-url after a navigation, but we\n // want the same interception route to be matched that used the last next-url.\n const nextUrlForRefresh = hasInterceptionRouteInCurrentTree(state.tree)\n ? state.previousNextUrl || currentNextUrl\n : null\n\n // A refresh is modeled as a navigation to the current URL, but where any\n // existing dynamic data (including in shared layouts) is re-fetched.\n const currentCanonicalUrl = state.canonicalUrl\n const currentUrl = new URL(currentCanonicalUrl, location.origin)\n const currentFlightRouterState = state.tree\n const shouldScroll = true\n\n const navigationSeed = {\n tree: state.tree,\n renderedSearch: state.renderedSearch,\n data: null,\n head: null,\n }\n\n const now = Date.now()\n const result = navigateToSeededRoute(\n now,\n currentUrl,\n currentCanonicalUrl,\n navigationSeed,\n currentUrl,\n state.cache,\n currentFlightRouterState,\n freshnessPolicy,\n nextUrlForRefresh,\n shouldScroll\n )\n\n const mutable: Mutable = {}\n mutable.preserveCustomHistoryState = false\n\n return handleNavigationResult(currentUrl, state, mutable, false, result)\n}\n"],"names":["refreshDynamicData","refreshReducer","state","currentNextUrl","nextUrl","currentRouterState","tree","revalidateEntireCache","FreshnessPolicy","RefreshAll","freshnessPolicy","nextUrlForRefresh","hasInterceptionRouteInCurrentTree","previousNextUrl","currentCanonicalUrl","canonicalUrl","currentUrl","URL","location","origin","currentFlightRouterState","shouldScroll","navigationSeed","renderedSearch","data","head","now","Date","result","navigateToSeededRoute","cache","mutable","preserveCustomHistoryState","handleNavigationResult"],"mappings":";;;;;;;;;;;;;;IAqBgBA,kBAAkB,EAAA;eAAlBA;;IAVAC,cAAc,EAAA;eAAdA;;;iCANuB;4BACD;uBACA;mDACY;gCAClB;AAEzB,SAASA,eAAeC,KAA2B;IACxD,0EAA0E;IAC1E,sEAAsE;IACtE,qEAAqE;IACrE,MAAMC,iBAAiBD,MAAME,OAAO;IACpC,MAAMC,qBAAqBH,MAAMI,IAAI;IACrCC,CAAAA,GAAAA,OAAAA,qBAAqB,EAACJ,gBAAgBE;IACtC,OAAOL,mBAAmBE,OAAOM,gBAAAA,eAAe,CAACC,UAAU;AAC7D;AAEO,SAAST,mBACdE,KAA2B,EAC3BQ,eAAwE;IAExE,MAAMP,iBAAiBD,MAAME,OAAO;IAEpC,8EAA8E;IAC9E,6EAA6E;IAC7E,8EAA8E;IAC9E,MAAMO,oBAAoBC,CAAAA,GAAAA,mCAAAA,iCAAiC,EAACV,MAAMI,IAAI,IAClEJ,MAAMW,eAAe,IAAIV,iBACzB;IAEJ,yEAAyE;IACzE,qEAAqE;IACrE,MAAMW,sBAAsBZ,MAAMa,YAAY;IAC9C,MAAMC,aAAa,IAAIC,IAAIH,qBAAqBI,SAASC,MAAM;IAC/D,MAAMC,2BAA2BlB,MAAMI,IAAI;IAC3C,MAAMe,eAAe;IAErB,MAAMC,iBAAiB;QACrBhB,MAAMJ,MAAMI,IAAI;QAChBiB,gBAAgBrB,MAAMqB,cAAc;QACpCC,MAAM;QACNC,MAAM;IACR;IAEA,MAAMC,MAAMC,KAAKD,GAAG;IACpB,MAAME,SAASC,CAAAA,GAAAA,YAAAA,qBAAqB,EAClCH,KACAV,YACAF,qBACAQ,gBACAN,YACAd,MAAM4B,KAAK,EACXV,0BACAV,iBACAC,mBACAU;IAGF,MAAMU,UAAmB,CAAC;IAC1BA,QAAQC,0BAA0B,GAAG;IAErC,OAAOC,CAAAA,GAAAA,iBAAAA,sBAAsB,EAACjB,YAAYd,OAAO6B,SAAS,OAAOH;AACnE","ignoreList":[0]}}, + {"offset": {"line": 8370, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/router-reducer/reducers/server-patch-reducer.ts"],"sourcesContent":["import { createHrefFromUrl } from '../create-href-from-url'\nimport type {\n ServerPatchAction,\n ReducerState,\n ReadonlyReducerState,\n Mutable,\n} from '../router-reducer-types'\nimport { handleExternalUrl, handleNavigationResult } from './navigate-reducer'\nimport { navigateToSeededRoute } from '../../segment-cache/navigation'\nimport { refreshReducer } from './refresh-reducer'\nimport { FreshnessPolicy } from '../ppr-navigations'\n\nexport function serverPatchReducer(\n state: ReadonlyReducerState,\n action: ServerPatchAction\n): ReducerState {\n const mutable: Mutable = {}\n mutable.preserveCustomHistoryState = false\n\n // A \"retry\" is a navigation that happens due to a route mismatch. It's\n // similar to a refresh, because we will omit any existing dynamic data on\n // the page. But we seed the retry navigation with the exact tree that the\n // server just responded with.\n const retryMpa = action.mpa\n const retryUrl = new URL(action.url, location.origin)\n const retrySeed = action.seed\n if (retryMpa || retrySeed === null) {\n // If the server did not send back data during the mismatch, fall back to\n // an MPA navigation.\n return handleExternalUrl(state, mutable, retryUrl.href, false)\n }\n const currentUrl = new URL(state.canonicalUrl, location.origin)\n if (action.previousTree !== state.tree) {\n // There was another, more recent navigation since the once that\n // mismatched. We can abort the retry, but we still need to refresh the\n // page to evict any stale dynamic data.\n return refreshReducer(state)\n }\n // There have been no new navigations since the mismatched one. Refresh,\n // using the tree we just received from the server.\n const retryCanonicalUrl = createHrefFromUrl(retryUrl)\n const retryNextUrl = action.nextUrl\n // A retry should not create a new history entry.\n const pendingPush = false\n const shouldScroll = true\n const now = Date.now()\n const result = navigateToSeededRoute(\n now,\n retryUrl,\n retryCanonicalUrl,\n retrySeed,\n currentUrl,\n state.cache,\n state.tree,\n FreshnessPolicy.RefreshAll,\n retryNextUrl,\n shouldScroll\n )\n return handleNavigationResult(retryUrl, state, mutable, pendingPush, result)\n}\n"],"names":["serverPatchReducer","state","action","mutable","preserveCustomHistoryState","retryMpa","mpa","retryUrl","URL","url","location","origin","retrySeed","seed","handleExternalUrl","href","currentUrl","canonicalUrl","previousTree","tree","refreshReducer","retryCanonicalUrl","createHrefFromUrl","retryNextUrl","nextUrl","pendingPush","shouldScroll","now","Date","result","navigateToSeededRoute","cache","FreshnessPolicy","RefreshAll","handleNavigationResult"],"mappings":";;;+BAYgBA,sBAAAA;;;eAAAA;;;mCAZkB;iCAOwB;4BACpB;gCACP;gCACC;AAEzB,SAASA,mBACdC,KAA2B,EAC3BC,MAAyB;IAEzB,MAAMC,UAAmB,CAAC;IAC1BA,QAAQC,0BAA0B,GAAG;IAErC,uEAAuE;IACvE,0EAA0E;IAC1E,0EAA0E;IAC1E,8BAA8B;IAC9B,MAAMC,WAAWH,OAAOI,GAAG;IAC3B,MAAMC,WAAW,IAAIC,IAAIN,OAAOO,GAAG,EAAEC,SAASC,MAAM;IACpD,MAAMC,YAAYV,OAAOW,IAAI;IAC7B,IAAIR,YAAYO,cAAc,MAAM;QAClC,yEAAyE;QACzE,qBAAqB;QACrB,OAAOE,CAAAA,GAAAA,iBAAAA,iBAAiB,EAACb,OAAOE,SAASI,SAASQ,IAAI,EAAE;IAC1D;IACA,MAAMC,aAAa,IAAIR,IAAIP,MAAMgB,YAAY,EAAEP,SAASC,MAAM;IAC9D,IAAIT,OAAOgB,YAAY,KAAKjB,MAAMkB,IAAI,EAAE;QACtC,gEAAgE;QAChE,uEAAuE;QACvE,wCAAwC;QACxC,OAAOC,CAAAA,GAAAA,gBAAAA,cAAc,EAACnB;IACxB;IACA,wEAAwE;IACxE,mDAAmD;IACnD,MAAMoB,oBAAoBC,CAAAA,GAAAA,mBAAAA,iBAAiB,EAACf;IAC5C,MAAMgB,eAAerB,OAAOsB,OAAO;IACnC,iDAAiD;IACjD,MAAMC,cAAc;IACpB,MAAMC,eAAe;IACrB,MAAMC,MAAMC,KAAKD,GAAG;IACpB,MAAME,SAASC,CAAAA,GAAAA,YAAAA,qBAAqB,EAClCH,KACApB,UACAc,mBACAT,WACAI,YACAf,MAAM8B,KAAK,EACX9B,MAAMkB,IAAI,EACVa,gBAAAA,eAAe,CAACC,UAAU,EAC1BV,cACAG;IAEF,OAAOQ,CAAAA,GAAAA,iBAAAA,sBAAsB,EAAC3B,UAAUN,OAAOE,SAASsB,aAAaI;AACvE","ignoreList":[0]}}, + {"offset": {"line": 8428, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/router-reducer/reducers/restore-reducer.ts"],"sourcesContent":["import { createHrefFromUrl } from '../create-href-from-url'\nimport type {\n ReadonlyReducerState,\n ReducerState,\n RestoreAction,\n} from '../router-reducer-types'\nimport { extractPathFromFlightRouterState } from '../compute-changed-path'\nimport {\n FreshnessPolicy,\n spawnDynamicRequests,\n startPPRNavigation,\n type NavigationRequestAccumulation,\n} from '../ppr-navigations'\nimport type { FlightRouterState } from '../../../../shared/lib/app-router-types'\nimport { handleExternalUrl } from './navigate-reducer'\nimport type { Mutable } from '../router-reducer-types'\n\nexport function restoreReducer(\n state: ReadonlyReducerState,\n action: RestoreAction\n): ReducerState {\n // This action is used to restore the router state from the history state.\n // However, it's possible that the history state no longer contains the `FlightRouterState`.\n // We will copy over the internal state on pushState/replaceState events, but if a history entry\n // occurred before hydration, or if the user navigated to a hash using a regular anchor link,\n // the history state will not contain the `FlightRouterState`.\n // In this case, we'll continue to use the existing tree so the router doesn't get into an invalid state.\n let treeToRestore: FlightRouterState | undefined\n let renderedSearch: string | undefined\n const historyState = action.historyState\n if (historyState) {\n treeToRestore = historyState.tree\n renderedSearch = historyState.renderedSearch\n } else {\n treeToRestore = state.tree\n renderedSearch = state.renderedSearch\n }\n\n const currentUrl = new URL(state.canonicalUrl, location.origin)\n const restoredUrl = action.url\n const restoredCanonicalUrl = createHrefFromUrl(restoredUrl)\n const restoredNextUrl =\n extractPathFromFlightRouterState(treeToRestore) ?? restoredUrl.pathname\n\n const now = Date.now()\n const accumulation: NavigationRequestAccumulation = {\n scrollableSegments: null,\n separateRefreshUrls: null,\n }\n const task = startPPRNavigation(\n now,\n currentUrl,\n state.cache,\n state.tree,\n treeToRestore,\n FreshnessPolicy.HistoryTraversal,\n null,\n null,\n null,\n null,\n false,\n false,\n accumulation\n )\n\n if (task === null) {\n const mutable: Mutable = {\n preserveCustomHistoryState: true,\n }\n return handleExternalUrl(state, mutable, restoredCanonicalUrl, false)\n }\n\n spawnDynamicRequests(\n task,\n restoredUrl,\n restoredNextUrl,\n FreshnessPolicy.HistoryTraversal,\n accumulation\n )\n\n return {\n // Set canonical url\n canonicalUrl: restoredCanonicalUrl,\n renderedSearch,\n pushRef: {\n pendingPush: false,\n mpaNavigation: false,\n // Ensures that the custom history state that was set is preserved when applying this update.\n preserveCustomHistoryState: true,\n },\n focusAndScrollRef: state.focusAndScrollRef,\n cache: task.node,\n // Restore provided tree\n tree: treeToRestore,\n\n nextUrl: restoredNextUrl,\n // TODO: We need to restore previousNextUrl, too, which represents the\n // Next-Url that was used to fetch the data. Anywhere we fetch using the\n // canonical URL, there should be a corresponding Next-Url.\n previousNextUrl: null,\n debugInfo: null,\n }\n}\n"],"names":["restoreReducer","state","action","treeToRestore","renderedSearch","historyState","tree","currentUrl","URL","canonicalUrl","location","origin","restoredUrl","url","restoredCanonicalUrl","createHrefFromUrl","restoredNextUrl","extractPathFromFlightRouterState","pathname","now","Date","accumulation","scrollableSegments","separateRefreshUrls","task","startPPRNavigation","cache","FreshnessPolicy","HistoryTraversal","mutable","preserveCustomHistoryState","handleExternalUrl","spawnDynamicRequests","pushRef","pendingPush","mpaNavigation","focusAndScrollRef","node","nextUrl","previousNextUrl","debugInfo"],"mappings":";;;+BAiBgBA,kBAAAA;;;eAAAA;;;mCAjBkB;oCAMe;gCAM1C;iCAE2B;AAG3B,SAASA,eACdC,KAA2B,EAC3BC,MAAqB;IAErB,0EAA0E;IAC1E,4FAA4F;IAC5F,gGAAgG;IAChG,6FAA6F;IAC7F,8DAA8D;IAC9D,yGAAyG;IACzG,IAAIC;IACJ,IAAIC;IACJ,MAAMC,eAAeH,OAAOG,YAAY;IACxC,IAAIA,cAAc;QAChBF,gBAAgBE,aAAaC,IAAI;QACjCF,iBAAiBC,aAAaD,cAAc;IAC9C,OAAO;QACLD,gBAAgBF,MAAMK,IAAI;QAC1BF,iBAAiBH,MAAMG,cAAc;IACvC;IAEA,MAAMG,aAAa,IAAIC,IAAIP,MAAMQ,YAAY,EAAEC,SAASC,MAAM;IAC9D,MAAMC,cAAcV,OAAOW,GAAG;IAC9B,MAAMC,uBAAuBC,CAAAA,GAAAA,mBAAAA,iBAAiB,EAACH;IAC/C,MAAMI,kBACJC,CAAAA,GAAAA,oBAAAA,gCAAgC,EAACd,kBAAkBS,YAAYM,QAAQ;IAEzE,MAAMC,MAAMC,KAAKD,GAAG;IACpB,MAAME,eAA8C;QAClDC,oBAAoB;QACpBC,qBAAqB;IACvB;IACA,MAAMC,OAAOC,CAAAA,GAAAA,gBAAAA,kBAAkB,EAC7BN,KACAZ,YACAN,MAAMyB,KAAK,EACXzB,MAAMK,IAAI,EACVH,eACAwB,gBAAAA,eAAe,CAACC,gBAAgB,EAChC,MACA,MACA,MACA,MACA,OACA,OACAP;IAGF,IAAIG,SAAS,MAAM;QACjB,MAAMK,UAAmB;YACvBC,4BAA4B;QAC9B;QACA,OAAOC,CAAAA,GAAAA,iBAAAA,iBAAiB,EAAC9B,OAAO4B,SAASf,sBAAsB;IACjE;IAEAkB,CAAAA,GAAAA,gBAAAA,oBAAoB,EAClBR,MACAZ,aACAI,iBACAW,gBAAAA,eAAe,CAACC,gBAAgB,EAChCP;IAGF,OAAO;QACL,oBAAoB;QACpBZ,cAAcK;QACdV;QACA6B,SAAS;YACPC,aAAa;YACbC,eAAe;YACf,6FAA6F;YAC7FL,4BAA4B;QAC9B;QACAM,mBAAmBnC,MAAMmC,iBAAiB;QAC1CV,OAAOF,KAAKa,IAAI;QAChB,wBAAwB;QACxB/B,MAAMH;QAENmC,SAAStB;QACT,sEAAsE;QACtE,wEAAwE;QACxE,2DAA2D;QAC3DuB,iBAAiB;QACjBC,WAAW;IACb;AACF","ignoreList":[0]}}, + {"offset": {"line": 8508, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/router-reducer/reducers/hmr-refresh-reducer.ts"],"sourcesContent":["import type {\n ReadonlyReducerState,\n ReducerState,\n} from '../router-reducer-types'\nimport { refreshDynamicData } from './refresh-reducer'\nimport { FreshnessPolicy } from '../ppr-navigations'\n\nexport function hmrRefreshReducer(state: ReadonlyReducerState): ReducerState {\n return refreshDynamicData(state, FreshnessPolicy.HMRRefresh)\n}\n"],"names":["hmrRefreshReducer","state","refreshDynamicData","FreshnessPolicy","HMRRefresh"],"mappings":";;;+BAOgBA,qBAAAA;;;eAAAA;;;gCAHmB;gCACH;AAEzB,SAASA,kBAAkBC,KAA2B;IAC3D,OAAOC,CAAAA,GAAAA,gBAAAA,kBAAkB,EAACD,OAAOE,gBAAAA,eAAe,CAACC,UAAU;AAC7D","ignoreList":[0]}}, + {"offset": {"line": 8533, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/unrecognized-action-error.ts"],"sourcesContent":["export class UnrecognizedActionError extends Error {\n constructor(...args: ConstructorParameters) {\n super(...args)\n this.name = 'UnrecognizedActionError'\n }\n}\n\n/**\n * Check whether a server action call failed because the server action was not recognized by the server.\n * This can happen if the client and the server are not from the same deployment.\n *\n * Example usage:\n * ```ts\n * try {\n * await myServerAction();\n * } catch (err) {\n * if (unstable_isUnrecognizedActionError(err)) {\n * // The client is from a different deployment than the server.\n * // Reloading the page will fix this mismatch.\n * window.alert(\"Please refresh the page and try again\");\n * return;\n * }\n * }\n * ```\n * */\nexport function unstable_isUnrecognizedActionError(\n error: unknown\n): error is UnrecognizedActionError {\n return !!(\n error &&\n typeof error === 'object' &&\n error instanceof UnrecognizedActionError\n )\n}\n"],"names":["UnrecognizedActionError","unstable_isUnrecognizedActionError","Error","constructor","args","name","error"],"mappings":";;;;;;;;;;;;;;IAAaA,uBAAuB,EAAA;eAAvBA;;IAyBGC,kCAAkC,EAAA;eAAlCA;;;AAzBT,MAAMD,gCAAgCE;IAC3CC,YAAY,GAAGC,IAAyC,CAAE;QACxD,KAAK,IAAIA;QACT,IAAI,CAACC,IAAI,GAAG;IACd;AACF;AAoBO,SAASJ,mCACdK,KAAc;IAEd,OAAO,CAAC,CACNA,CAAAA,SACA,OAAOA,UAAU,YACjBA,iBAAiBN,uBAAsB;AAE3C","ignoreList":[0]}}, + {"offset": {"line": 8574, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/assign-location.ts"],"sourcesContent":["import { addBasePath } from './add-base-path'\n\n/**\n * Function to correctly assign location to URL\n *\n * The method will add basePath, and will also correctly add location (including if it is a relative path)\n * @param location Location that should be added to the url\n * @param url Base URL to which the location should be assigned\n */\nexport function assignLocation(location: string, url: URL): URL {\n if (location.startsWith('.')) {\n const urlBase = url.origin + url.pathname\n return new URL(\n // In order for a relative path to be added to the current url correctly, the current url must end with a slash\n // new URL('./relative', 'https://example.com/subdir').href -> 'https://example.com/relative'\n // new URL('./relative', 'https://example.com/subdir/').href -> 'https://example.com/subdir/relative'\n (urlBase.endsWith('/') ? urlBase : urlBase + '/') + location\n )\n }\n\n return new URL(addBasePath(location), url.href)\n}\n"],"names":["assignLocation","location","url","startsWith","urlBase","origin","pathname","URL","endsWith","addBasePath","href"],"mappings":";;;+BASgBA,kBAAAA;;;eAAAA;;;6BATY;AASrB,SAASA,eAAeC,QAAgB,EAAEC,GAAQ;IACvD,IAAID,SAASE,UAAU,CAAC,MAAM;QAC5B,MAAMC,UAAUF,IAAIG,MAAM,GAAGH,IAAII,QAAQ;QACzC,OAAO,IAAIC,IACT,AAGA,AAFA,6FAA6F,kBADkB;QAE/G,qGAAqG;QACpGH,CAAAA,QAAQI,QAAQ,CAAC,OAAOJ,UAAUA,UAAU,GAAE,IAAKH;IAExD;IAEA,OAAO,IAAIM,IAAIE,CAAAA,GAAAA,aAAAA,WAAW,EAACR,WAAWC,IAAIQ,IAAI;AAChD","ignoreList":[0]}}, + {"offset": {"line": 8604, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/redirect.ts"],"sourcesContent":["import { RedirectStatusCode } from './redirect-status-code'\nimport {\n RedirectType,\n type RedirectError,\n isRedirectError,\n REDIRECT_ERROR_CODE,\n} from './redirect-error'\n\nconst actionAsyncStorage =\n typeof window === 'undefined'\n ? (\n require('../../server/app-render/action-async-storage.external') as typeof import('../../server/app-render/action-async-storage.external')\n ).actionAsyncStorage\n : undefined\n\nexport function getRedirectError(\n url: string,\n type: RedirectType,\n statusCode: RedirectStatusCode = RedirectStatusCode.TemporaryRedirect\n): RedirectError {\n const error = new Error(REDIRECT_ERROR_CODE) as RedirectError\n error.digest = `${REDIRECT_ERROR_CODE};${type};${url};${statusCode};`\n return error\n}\n\n/**\n * This function allows you to redirect the user to another URL. It can be used in\n * [Server Components](https://nextjs.org/docs/app/building-your-application/rendering/server-components),\n * [Route Handlers](https://nextjs.org/docs/app/building-your-application/routing/route-handlers), and\n * [Server Actions](https://nextjs.org/docs/app/building-your-application/data-fetching/server-actions-and-mutations).\n *\n * - In a Server Component, this will insert a meta tag to redirect the user to the target page.\n * - In a Route Handler or Server Action, it will serve a 307/303 to the caller.\n * - In a Server Action, type defaults to 'push' and 'replace' elsewhere.\n *\n * Read more: [Next.js Docs: `redirect`](https://nextjs.org/docs/app/api-reference/functions/redirect)\n */\nexport function redirect(\n /** The URL to redirect to */\n url: string,\n type?: RedirectType\n): never {\n type ??= actionAsyncStorage?.getStore()?.isAction\n ? RedirectType.push\n : RedirectType.replace\n\n throw getRedirectError(url, type, RedirectStatusCode.TemporaryRedirect)\n}\n\n/**\n * This function allows you to redirect the user to another URL. It can be used in\n * [Server Components](https://nextjs.org/docs/app/building-your-application/rendering/server-components),\n * [Route Handlers](https://nextjs.org/docs/app/building-your-application/routing/route-handlers), and\n * [Server Actions](https://nextjs.org/docs/app/building-your-application/data-fetching/server-actions-and-mutations).\n *\n * - In a Server Component, this will insert a meta tag to redirect the user to the target page.\n * - In a Route Handler or Server Action, it will serve a 308/303 to the caller.\n *\n * Read more: [Next.js Docs: `redirect`](https://nextjs.org/docs/app/api-reference/functions/redirect)\n */\nexport function permanentRedirect(\n /** The URL to redirect to */\n url: string,\n type: RedirectType = RedirectType.replace\n): never {\n throw getRedirectError(url, type, RedirectStatusCode.PermanentRedirect)\n}\n\n/**\n * Returns the encoded URL from the error if it's a RedirectError, null\n * otherwise. Note that this does not validate the URL returned.\n *\n * @param error the error that may be a redirect error\n * @return the url if the error was a redirect error\n */\nexport function getURLFromRedirectError(error: RedirectError): string\nexport function getURLFromRedirectError(error: unknown): string | null {\n if (!isRedirectError(error)) return null\n\n // Slices off the beginning of the digest that contains the code and the\n // separating ';'.\n return error.digest.split(';').slice(2, -2).join(';')\n}\n\nexport function getRedirectTypeFromError(error: RedirectError): RedirectType {\n if (!isRedirectError(error)) {\n throw new Error('Not a redirect error')\n }\n\n return error.digest.split(';', 2)[1] as RedirectType\n}\n\nexport function getRedirectStatusCodeFromError(error: RedirectError): number {\n if (!isRedirectError(error)) {\n throw new Error('Not a redirect error')\n }\n\n return Number(error.digest.split(';').at(-2))\n}\n"],"names":["getRedirectError","getRedirectStatusCodeFromError","getRedirectTypeFromError","getURLFromRedirectError","permanentRedirect","redirect","actionAsyncStorage","window","require","undefined","url","type","statusCode","RedirectStatusCode","TemporaryRedirect","error","Error","REDIRECT_ERROR_CODE","digest","getStore","isAction","RedirectType","push","replace","PermanentRedirect","isRedirectError","split","slice","join","Number","at"],"mappings":";;;;;;;;;;;;;;;;;;IAegBA,gBAAgB,EAAA;eAAhBA;;IA6EAC,8BAA8B,EAAA;eAA9BA;;IARAC,wBAAwB,EAAA;eAAxBA;;IARAC,uBAAuB,EAAA;eAAvBA;;IAhBAC,iBAAiB,EAAA;eAAjBA;;IAvBAC,QAAQ,EAAA;eAARA;;;oCArCmB;+BAM5B;AAEP,MAAMC,qBACJ,OAAOC,WAAW,cAEZC,QAAQ,iIACRF,kBAAkB,GACpBG;AAEC,SAAST,iBACdU,GAAW,EACXC,IAAkB,EAClBC,aAAiCC,oBAAAA,kBAAkB,CAACC,iBAAiB;IAErE,MAAMC,QAAQ,OAAA,cAA8B,CAA9B,IAAIC,MAAMC,eAAAA,mBAAmB,GAA7B,qBAAA;eAAA;oBAAA;sBAAA;IAA6B;IAC3CF,MAAMG,MAAM,GAAG,GAAGD,eAAAA,mBAAmB,CAAC,CAAC,EAAEN,KAAK,CAAC,EAAED,IAAI,CAAC,EAAEE,WAAW,CAAC,CAAC;IACrE,OAAOG;AACT;AAcO,SAASV,SACd,2BAA2B,GAC3BK,GAAW,EACXC,IAAmB;IAEnBA,SAASL,oBAAoBa,YAAYC,WACrCC,eAAAA,YAAY,CAACC,IAAI,GACjBD,eAAAA,YAAY,CAACE,OAAO;IAExB,MAAMvB,iBAAiBU,KAAKC,MAAME,oBAAAA,kBAAkB,CAACC,iBAAiB;AACxE;AAaO,SAASV,kBACd,2BAA2B,GAC3BM,GAAW,EACXC,OAAqBU,eAAAA,YAAY,CAACE,OAAO;IAEzC,MAAMvB,iBAAiBU,KAAKC,MAAME,oBAAAA,kBAAkB,CAACW,iBAAiB;AACxE;AAUO,SAASrB,wBAAwBY,KAAc;IACpD,IAAI,CAACU,CAAAA,GAAAA,eAAAA,eAAe,EAACV,QAAQ,OAAO;IAEpC,wEAAwE;IACxE,kBAAkB;IAClB,OAAOA,MAAMG,MAAM,CAACQ,KAAK,CAAC,KAAKC,KAAK,CAAC,GAAG,CAAC,GAAGC,IAAI,CAAC;AACnD;AAEO,SAAS1B,yBAAyBa,KAAoB;IAC3D,IAAI,CAACU,CAAAA,GAAAA,eAAAA,eAAe,EAACV,QAAQ;QAC3B,MAAM,OAAA,cAAiC,CAAjC,IAAIC,MAAM,yBAAV,qBAAA;mBAAA;wBAAA;0BAAA;QAAgC;IACxC;IAEA,OAAOD,MAAMG,MAAM,CAACQ,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE;AACtC;AAEO,SAASzB,+BAA+Bc,KAAoB;IACjE,IAAI,CAACU,CAAAA,GAAAA,eAAAA,eAAe,EAACV,QAAQ;QAC3B,MAAM,OAAA,cAAiC,CAAjC,IAAIC,MAAM,yBAAV,qBAAA;mBAAA;wBAAA;0BAAA;QAAgC;IACxC;IAEA,OAAOa,OAAOd,MAAMG,MAAM,CAACQ,KAAK,CAAC,KAAKI,EAAE,CAAC,CAAC;AAC5C","ignoreList":[0]}}, + {"offset": {"line": 8697, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/has-base-path.ts"],"sourcesContent":["import { pathHasPrefix } from '../shared/lib/router/utils/path-has-prefix'\n\nconst basePath = (process.env.__NEXT_ROUTER_BASEPATH as string) || ''\n\nexport function hasBasePath(path: string): boolean {\n return pathHasPrefix(path, basePath)\n}\n"],"names":["hasBasePath","basePath","process","env","__NEXT_ROUTER_BASEPATH","path","pathHasPrefix"],"mappings":"AAEkBE,QAAQC,GAAG,CAACC,sBAAsB;;;;;+BAEpCJ,eAAAA;;;eAAAA;;;+BAJc;AAE9B,MAAMC,mDAA6D;AAE5D,SAASD,YAAYK,IAAY;IACtC,OAAOC,CAAAA,GAAAA,eAAAA,aAAa,EAACD,MAAMJ;AAC7B","ignoreList":[0]}}, + {"offset": {"line": 8724, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/remove-base-path.ts"],"sourcesContent":["import { hasBasePath } from './has-base-path'\n\nconst basePath = (process.env.__NEXT_ROUTER_BASEPATH as string) || ''\n\nexport function removeBasePath(path: string): string {\n if (process.env.__NEXT_MANUAL_CLIENT_BASE_PATH) {\n if (!hasBasePath(path)) {\n return path\n }\n }\n\n // Can't trim the basePath if it has zero length!\n if (basePath.length === 0) return path\n\n path = path.slice(basePath.length)\n if (!path.startsWith('/')) path = `/${path}`\n return path\n}\n"],"names":["removeBasePath","basePath","process","env","__NEXT_ROUTER_BASEPATH","path","__NEXT_MANUAL_CLIENT_BASE_PATH","hasBasePath","length","slice","startsWith"],"mappings":"AAEkBE,QAAQC,GAAG,CAACC,sBAAsB;;;;;+BAEpCJ,kBAAAA;;;eAAAA;;;6BAJY;AAE5B,MAAMC,mDAA6D;AAE5D,SAASD,eAAeK,IAAY;IACzC,IAAIH,QAAQC,GAAG,CAACG,8BAA8B,EAAE;;IAMhD,iDAAiD;IACjD,IAAIL,SAASO,MAAM,KAAK,GAAG,OAAOH;IAElCA,OAAOA,KAAKI,KAAK,CAACR,SAASO,MAAM;IACjC,IAAI,CAACH,KAAKK,UAAU,CAAC,MAAML,OAAO,CAAC,CAAC,EAAEA,MAAM;IAC5C,OAAOA;AACT","ignoreList":[0]}}, + {"offset": {"line": 8757, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/router-reducer/reducers/server-action-reducer.ts"],"sourcesContent":["import type {\n ActionFlightResponse,\n ActionResult,\n} from '../../../../shared/lib/app-router-types'\nimport { callServer } from '../../../app-call-server'\nimport { findSourceMapURL } from '../../../app-find-source-map-url'\nimport {\n ACTION_HEADER,\n NEXT_ACTION_NOT_FOUND_HEADER,\n NEXT_IS_PRERENDER_HEADER,\n NEXT_HTML_REQUEST_ID_HEADER,\n NEXT_ROUTER_STATE_TREE_HEADER,\n NEXT_URL,\n RSC_CONTENT_TYPE_HEADER,\n NEXT_REQUEST_ID_HEADER,\n} from '../../app-router-headers'\nimport { UnrecognizedActionError } from '../../unrecognized-action-error'\n\n// TODO: Explicitly import from client.browser\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport {\n createFromFetch as createFromFetchBrowser,\n createTemporaryReferenceSet,\n encodeReply,\n} from 'react-server-dom-webpack/client'\n\nimport type {\n ReadonlyReducerState,\n ReducerState,\n ServerActionAction,\n ServerActionMutable,\n} from '../router-reducer-types'\nimport { assignLocation } from '../../../assign-location'\nimport { createHrefFromUrl } from '../create-href-from-url'\nimport { handleExternalUrl, handleNavigationResult } from './navigate-reducer'\nimport { hasInterceptionRouteInCurrentTree } from './has-interception-route-in-current-tree'\nimport {\n normalizeFlightData,\n prepareFlightRouterStateForRequest,\n type NormalizedFlightData,\n} from '../../../flight-data-helpers'\nimport { getRedirectError } from '../../redirect'\nimport { RedirectType } from '../../redirect-error'\nimport { removeBasePath } from '../../../remove-base-path'\nimport { hasBasePath } from '../../../has-base-path'\nimport {\n extractInfoFromServerReferenceId,\n omitUnusedArgs,\n} from '../../../../shared/lib/server-reference-info'\nimport { revalidateEntireCache } from '../../segment-cache/cache'\nimport { getDeploymentId } from '../../../../shared/lib/deployment-id'\nimport {\n navigateToSeededRoute,\n navigate as navigateUsingSegmentCache,\n} from '../../segment-cache/navigation'\nimport type { NormalizedSearch } from '../../segment-cache/cache-key'\nimport {\n ActionDidNotRevalidate,\n ActionDidRevalidateDynamicOnly,\n ActionDidRevalidateStaticAndDynamic,\n type ActionRevalidationKind,\n} from '../../../../shared/lib/action-revalidation-kind'\nimport { isExternalURL } from '../../app-router-utils'\nimport { FreshnessPolicy } from '../ppr-navigations'\n\nconst createFromFetch =\n createFromFetchBrowser as (typeof import('react-server-dom-webpack/client.browser'))['createFromFetch']\n\nlet createDebugChannel:\n | typeof import('../../../dev/debug-channel').createDebugChannel\n | undefined\n\nif (\n process.env.NODE_ENV !== 'production' &&\n process.env.__NEXT_REACT_DEBUG_CHANNEL\n) {\n createDebugChannel = (\n require('../../../dev/debug-channel') as typeof import('../../../dev/debug-channel')\n ).createDebugChannel\n}\n\n// TODO: Refactor to be a discriminated union. Or just get rid of it;\n// fetchServerAction only has one caller, no reason this intermediate type has\n// to exist.\ntype FetchServerActionResult = {\n redirectLocation: URL | undefined\n redirectType: RedirectType | undefined\n revalidationKind: ActionRevalidationKind\n actionResult: ActionResult | undefined\n actionFlightData: NormalizedFlightData[] | string | undefined\n actionFlightDataRenderedSearch: NormalizedSearch | undefined\n actionFlightDataCouldBeIntercepted: boolean | undefined\n isPrerender: boolean\n}\n\nasync function fetchServerAction(\n state: ReadonlyReducerState,\n nextUrl: ReadonlyReducerState['nextUrl'],\n { actionId, actionArgs }: ServerActionAction\n): Promise {\n const temporaryReferences = createTemporaryReferenceSet()\n const info = extractInfoFromServerReferenceId(actionId)\n\n // TODO: Currently, we're only omitting unused args for the experimental \"use\n // cache\" functions. Once the server reference info byte feature is stable, we\n // should apply this to server actions as well.\n const usedArgs =\n info.type === 'use-cache' ? omitUnusedArgs(actionArgs, info) : actionArgs\n\n const body = await encodeReply(usedArgs, { temporaryReferences })\n\n const headers: Record = {\n Accept: RSC_CONTENT_TYPE_HEADER,\n [ACTION_HEADER]: actionId,\n [NEXT_ROUTER_STATE_TREE_HEADER]: prepareFlightRouterStateForRequest(\n state.tree\n ),\n }\n\n const deploymentId = getDeploymentId()\n if (deploymentId) {\n headers['x-deployment-id'] = deploymentId\n }\n\n if (nextUrl) {\n headers[NEXT_URL] = nextUrl\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if (self.__next_r) {\n headers[NEXT_HTML_REQUEST_ID_HEADER] = self.__next_r\n }\n\n // Create a new request ID for the server action request. The server uses\n // this to tag debug information sent via WebSocket to the client, which\n // then routes those chunks to the debug channel associated with this ID.\n headers[NEXT_REQUEST_ID_HEADER] = crypto\n .getRandomValues(new Uint32Array(1))[0]\n .toString(16)\n }\n\n const res = await fetch(state.canonicalUrl, { method: 'POST', headers, body })\n\n // Handle server actions that the server didn't recognize.\n const unrecognizedActionHeader = res.headers.get(NEXT_ACTION_NOT_FOUND_HEADER)\n if (unrecognizedActionHeader === '1') {\n throw new UnrecognizedActionError(\n `Server Action \"${actionId}\" was not found on the server. \\nRead more: https://nextjs.org/docs/messages/failed-to-find-server-action`\n )\n }\n\n const redirectHeader = res.headers.get('x-action-redirect')\n const [location, _redirectType] = redirectHeader?.split(';') || []\n let redirectType: RedirectType | undefined\n switch (_redirectType) {\n case 'push':\n redirectType = RedirectType.push\n break\n case 'replace':\n redirectType = RedirectType.replace\n break\n default:\n redirectType = undefined\n }\n\n const isPrerender = !!res.headers.get(NEXT_IS_PRERENDER_HEADER)\n\n let revalidationKind: ActionRevalidationKind = ActionDidNotRevalidate\n try {\n const revalidationHeader = res.headers.get('x-action-revalidated')\n if (revalidationHeader) {\n const parsedKind = JSON.parse(revalidationHeader)\n if (\n parsedKind === ActionDidRevalidateStaticAndDynamic ||\n parsedKind === ActionDidRevalidateDynamicOnly\n ) {\n revalidationKind = parsedKind\n }\n }\n } catch {}\n\n const redirectLocation = location\n ? assignLocation(\n location,\n new URL(state.canonicalUrl, window.location.href)\n )\n : undefined\n\n const contentType = res.headers.get('content-type')\n const isRscResponse = !!(\n contentType && contentType.startsWith(RSC_CONTENT_TYPE_HEADER)\n )\n\n // Handle invalid server action responses.\n // A valid response must have `content-type: text/x-component`, unless it's an external redirect.\n // (external redirects have an 'x-action-redirect' header, but the body is an empty 'text/plain')\n if (!isRscResponse && !redirectLocation) {\n // The server can respond with a text/plain error message, but we'll fallback to something generic\n // if there isn't one.\n const message =\n res.status >= 400 && contentType === 'text/plain'\n ? await res.text()\n : 'An unexpected response was received from the server.'\n\n throw new Error(message)\n }\n\n let actionResult: FetchServerActionResult['actionResult']\n let actionFlightData: FetchServerActionResult['actionFlightData']\n let actionFlightDataRenderedSearch: FetchServerActionResult['actionFlightDataRenderedSearch']\n let actionFlightDataCouldBeIntercepted: FetchServerActionResult['actionFlightDataCouldBeIntercepted']\n\n if (isRscResponse) {\n const response: ActionFlightResponse = await createFromFetch(\n Promise.resolve(res),\n {\n callServer,\n findSourceMapURL,\n temporaryReferences,\n debugChannel: createDebugChannel && createDebugChannel(headers),\n }\n )\n\n // An internal redirect can send an RSC response, but does not have a useful `actionResult`.\n actionResult = redirectLocation ? undefined : response.a\n const maybeFlightData = normalizeFlightData(response.f)\n if (maybeFlightData !== '') {\n actionFlightData = maybeFlightData\n actionFlightDataRenderedSearch = response.q as NormalizedSearch\n actionFlightDataCouldBeIntercepted = response.i\n }\n } else {\n // An external redirect doesn't contain RSC data.\n actionResult = undefined\n actionFlightData = undefined\n actionFlightDataRenderedSearch = undefined\n actionFlightDataCouldBeIntercepted = undefined\n }\n\n return {\n actionResult,\n actionFlightData,\n actionFlightDataRenderedSearch,\n actionFlightDataCouldBeIntercepted,\n redirectLocation,\n redirectType,\n revalidationKind,\n isPrerender,\n }\n}\n\n/*\n * This reducer is responsible for calling the server action and processing any side-effects from the server action.\n * It does not mutate the state by itself but rather delegates to other reducers to do the actual mutation.\n */\nexport function serverActionReducer(\n state: ReadonlyReducerState,\n action: ServerActionAction\n): ReducerState {\n const { resolve, reject } = action\n const mutable: ServerActionMutable = {}\n\n mutable.preserveCustomHistoryState = false\n\n // only pass along the `nextUrl` param (used for interception routes) if the current route was intercepted.\n // If the route has been intercepted, the action should be as well.\n // Otherwise the server action might be intercepted with the wrong action id\n // (ie, one that corresponds with the intercepted route)\n const nextUrl =\n // We always send the last next-url, not the current when\n // performing a dynamic request. This is because we update\n // the next-url after a navigation, but we want the same\n // interception route to be matched that used the last\n // next-url.\n (state.previousNextUrl || state.nextUrl) &&\n hasInterceptionRouteInCurrentTree(state.tree)\n ? state.previousNextUrl || state.nextUrl\n : null\n\n return fetchServerAction(state, nextUrl, action).then(\n async ({\n revalidationKind,\n actionResult,\n actionFlightData: flightData,\n actionFlightDataRenderedSearch: flightDataRenderedSearch,\n actionFlightDataCouldBeIntercepted: flightDataCouldBeIntercepted,\n redirectLocation,\n redirectType,\n }) => {\n if (revalidationKind !== ActionDidNotRevalidate) {\n // Store whether this action triggered any revalidation\n // The action queue will use this information to potentially\n // trigger a refresh action if the action was discarded\n // (ie, due to a navigation, before the action completed)\n action.didRevalidate = true\n\n // If there was a revalidation, evict the entire prefetch cache.\n // TODO: Evict only segments with matching tags and/or paths.\n if (revalidationKind === ActionDidRevalidateStaticAndDynamic) {\n revalidateEntireCache(nextUrl, state.tree)\n }\n }\n\n const pendingPush = redirectType !== RedirectType.replace\n state.pushRef.pendingPush = pendingPush\n mutable.pendingPush = pendingPush\n\n if (redirectLocation !== undefined) {\n // If the action triggered a redirect, the action promise will be rejected with\n // a redirect so that it's handled by RedirectBoundary as we won't have a valid\n // action result to resolve the promise with. This will effectively reset the state of\n // the component that called the action as the error boundary will remount the tree.\n // The status code doesn't matter here as the action handler will have already sent\n // a response with the correct status code.\n const resolvedRedirectType = redirectType || RedirectType.push\n\n if (isExternalURL(redirectLocation)) {\n // External redirect. Triggers an MPA navigation.\n const redirectHref = redirectLocation.href\n const redirectError = createRedirectErrorForAction(\n redirectHref,\n resolvedRedirectType\n )\n reject(redirectError)\n return handleExternalUrl(state, mutable, redirectHref, pendingPush)\n } else {\n // Internal redirect. Triggers an SPA navigation.\n const redirectWithBasepath = createHrefFromUrl(\n redirectLocation,\n false\n )\n const redirectHref = hasBasePath(redirectWithBasepath)\n ? removeBasePath(redirectWithBasepath)\n : redirectWithBasepath\n const redirectError = createRedirectErrorForAction(\n redirectHref,\n resolvedRedirectType\n )\n reject(redirectError)\n }\n } else {\n // If there's no redirect, resolve the action with the result.\n resolve(actionResult)\n }\n\n // Check if we can bail out without updating any state.\n if (\n // Did the action trigger a redirect?\n redirectLocation === undefined &&\n // Did the action revalidate any data?\n revalidationKind === ActionDidNotRevalidate &&\n // Did the server render new data?\n flightData === undefined\n ) {\n // The action did not trigger any revalidations or redirects. No\n // navigation is required.\n return state\n }\n\n if (flightData === undefined && redirectLocation !== undefined) {\n // The server redirected, but did not send any Flight data. This implies\n // an external redirect.\n // TODO: We should refactor the action response type to be more explicit\n // about the various response types.\n return handleExternalUrl(\n state,\n mutable,\n redirectLocation.href,\n pendingPush\n )\n }\n\n if (typeof flightData === 'string') {\n // If the flight data is just a string, something earlier in the\n // response handling triggered an external redirect.\n return handleExternalUrl(state, mutable, flightData, pendingPush)\n }\n\n // The action triggered a navigation — either a redirect, a revalidation,\n // or both.\n\n // If there was no redirect, then the target URL is the same as the\n // current URL.\n const currentUrl = new URL(state.canonicalUrl, location.origin)\n const redirectUrl =\n redirectLocation !== undefined ? redirectLocation : currentUrl\n const currentFlightRouterState = state.tree\n const shouldScroll = true\n\n // If the action triggered a revalidation of the cache, we should also\n // refresh all the dynamic data.\n const freshnessPolicy =\n revalidationKind === ActionDidNotRevalidate\n ? FreshnessPolicy.Default\n : FreshnessPolicy.RefreshAll\n\n // The server may have sent back new data. If so, we will perform a\n // \"seeded\" navigation that uses the data from the response.\n if (flightData !== undefined) {\n const normalizedFlightData = flightData[0]\n if (\n normalizedFlightData !== undefined &&\n // TODO: Currently the server always renders from the root in\n // response to a Server Action. In the case of a normal redirect\n // with no revalidation, it should skip over the shared layouts.\n normalizedFlightData.isRootRender &&\n flightDataRenderedSearch !== undefined &&\n flightDataCouldBeIntercepted !== undefined\n ) {\n // The server sent back new route data as part of the response. We\n // will use this to render the new page. If this happens to be only a\n // subset of the data needed to render the new page, we'll initiate a\n // new fetch, like we would for a normal navigation.\n const redirectCanonicalUrl = createHrefFromUrl(redirectUrl)\n const navigationSeed = {\n tree: normalizedFlightData.tree,\n renderedSearch: flightDataRenderedSearch,\n data: normalizedFlightData.seedData,\n head: normalizedFlightData.head,\n }\n const now = Date.now()\n const result = navigateToSeededRoute(\n now,\n redirectUrl,\n redirectCanonicalUrl,\n navigationSeed,\n currentUrl,\n state.cache,\n currentFlightRouterState,\n freshnessPolicy,\n nextUrl,\n shouldScroll\n )\n return handleNavigationResult(\n redirectUrl,\n state,\n mutable,\n pendingPush,\n result\n )\n }\n }\n\n // The server did not send back new data. We'll perform a regular, non-\n // seeded navigation — effectively the same as or router.push().\n const result = navigateUsingSegmentCache(\n redirectUrl,\n currentUrl,\n state.cache,\n currentFlightRouterState,\n nextUrl,\n freshnessPolicy,\n shouldScroll,\n mutable\n )\n return handleNavigationResult(\n redirectUrl,\n state,\n mutable,\n pendingPush,\n result\n )\n },\n (e: any) => {\n // When the server action is rejected we don't update the state and instead call the reject handler of the promise.\n reject(e)\n\n return state\n }\n )\n}\n\nfunction createRedirectErrorForAction(\n redirectHref: string,\n resolvedRedirectType: RedirectType\n) {\n const redirectError = getRedirectError(redirectHref, resolvedRedirectType)\n // We mark the error as handled because we don't want the redirect to be tried later by\n // the RedirectBoundary, in case the user goes back and `Activity` triggers the redirect\n // again, as it's run within an effect.\n // We don't actually need the RedirectBoundary to do a router.push because we already\n // have all the necessary RSC data to render the new page within a single roundtrip.\n ;(redirectError as any).handled = true\n return redirectError\n}\n"],"names":["serverActionReducer","createFromFetch","createFromFetchBrowser","createDebugChannel","process","env","NODE_ENV","__NEXT_REACT_DEBUG_CHANNEL","require","fetchServerAction","state","nextUrl","actionId","actionArgs","temporaryReferences","createTemporaryReferenceSet","info","extractInfoFromServerReferenceId","usedArgs","type","omitUnusedArgs","body","encodeReply","headers","Accept","RSC_CONTENT_TYPE_HEADER","ACTION_HEADER","NEXT_ROUTER_STATE_TREE_HEADER","prepareFlightRouterStateForRequest","tree","deploymentId","getDeploymentId","NEXT_URL","self","__next_r","NEXT_HTML_REQUEST_ID_HEADER","NEXT_REQUEST_ID_HEADER","crypto","getRandomValues","Uint32Array","toString","res","fetch","canonicalUrl","method","unrecognizedActionHeader","get","NEXT_ACTION_NOT_FOUND_HEADER","UnrecognizedActionError","redirectHeader","location","_redirectType","split","redirectType","RedirectType","push","replace","undefined","isPrerender","NEXT_IS_PRERENDER_HEADER","revalidationKind","ActionDidNotRevalidate","revalidationHeader","parsedKind","JSON","parse","ActionDidRevalidateStaticAndDynamic","ActionDidRevalidateDynamicOnly","redirectLocation","assignLocation","URL","window","href","contentType","isRscResponse","startsWith","message","status","text","Error","actionResult","actionFlightData","actionFlightDataRenderedSearch","actionFlightDataCouldBeIntercepted","response","Promise","resolve","callServer","findSourceMapURL","debugChannel","a","maybeFlightData","normalizeFlightData","f","q","i","action","reject","mutable","preserveCustomHistoryState","previousNextUrl","hasInterceptionRouteInCurrentTree","then","flightData","flightDataRenderedSearch","flightDataCouldBeIntercepted","didRevalidate","revalidateEntireCache","pendingPush","pushRef","resolvedRedirectType","isExternalURL","redirectHref","redirectError","createRedirectErrorForAction","handleExternalUrl","redirectWithBasepath","createHrefFromUrl","hasBasePath","removeBasePath","currentUrl","origin","redirectUrl","currentFlightRouterState","shouldScroll","freshnessPolicy","FreshnessPolicy","Default","RefreshAll","normalizedFlightData","isRootRender","redirectCanonicalUrl","navigationSeed","renderedSearch","data","seedData","head","now","Date","result","navigateToSeededRoute","cache","handleNavigationResult","navigateUsingSegmentCache","e","getRedirectError","handled"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 9050, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/router-reducer/router-reducer.ts"],"sourcesContent":["import {\n ACTION_NAVIGATE,\n ACTION_SERVER_PATCH,\n ACTION_RESTORE,\n ACTION_REFRESH,\n ACTION_HMR_REFRESH,\n ACTION_SERVER_ACTION,\n} from './router-reducer-types'\nimport type {\n ReducerActions,\n ReducerState,\n ReadonlyReducerState,\n} from './router-reducer-types'\nimport { navigateReducer } from './reducers/navigate-reducer'\nimport { serverPatchReducer } from './reducers/server-patch-reducer'\nimport { restoreReducer } from './reducers/restore-reducer'\nimport { refreshReducer } from './reducers/refresh-reducer'\nimport { hmrRefreshReducer } from './reducers/hmr-refresh-reducer'\nimport { serverActionReducer } from './reducers/server-action-reducer'\n\n/**\n * Reducer that handles the app-router state updates.\n */\nfunction clientReducer(\n state: ReadonlyReducerState,\n action: ReducerActions\n): ReducerState {\n switch (action.type) {\n case ACTION_NAVIGATE: {\n return navigateReducer(state, action)\n }\n case ACTION_SERVER_PATCH: {\n return serverPatchReducer(state, action)\n }\n case ACTION_RESTORE: {\n return restoreReducer(state, action)\n }\n case ACTION_REFRESH: {\n return refreshReducer(state)\n }\n case ACTION_HMR_REFRESH: {\n return hmrRefreshReducer(state)\n }\n case ACTION_SERVER_ACTION: {\n return serverActionReducer(state, action)\n }\n // This case should never be hit as dispatch is strongly typed.\n default:\n throw new Error('Unknown action')\n }\n}\n\nfunction serverReducer(\n state: ReadonlyReducerState,\n _action: ReducerActions\n): ReducerState {\n return state\n}\n\n// we don't run the client reducer on the server, so we use a noop function for better tree shaking\nexport const reducer =\n typeof window === 'undefined' ? serverReducer : clientReducer\n"],"names":["reducer","clientReducer","state","action","type","ACTION_NAVIGATE","navigateReducer","ACTION_SERVER_PATCH","serverPatchReducer","ACTION_RESTORE","restoreReducer","ACTION_REFRESH","refreshReducer","ACTION_HMR_REFRESH","hmrRefreshReducer","ACTION_SERVER_ACTION","serverActionReducer","Error","serverReducer","_action","window"],"mappings":";;;+BA4DaA,WAAAA;;;eAAAA;;;oCArDN;iCAMyB;oCACG;gCACJ;gCACA;mCACG;qCACE;AAEpC;;CAEC,GACD,SAASC,cACPC,KAA2B,EAC3BC,MAAsB;IAEtB,OAAQA,OAAOC,IAAI;QACjB,KAAKC,oBAAAA,eAAe;YAAE;gBACpB,OAAOC,CAAAA,GAAAA,iBAAAA,eAAe,EAACJ,OAAOC;YAChC;QACA,KAAKI,oBAAAA,mBAAmB;YAAE;gBACxB,OAAOC,CAAAA,GAAAA,oBAAAA,kBAAkB,EAACN,OAAOC;YACnC;QACA,KAAKM,oBAAAA,cAAc;YAAE;gBACnB,OAAOC,CAAAA,GAAAA,gBAAAA,cAAc,EAACR,OAAOC;YAC/B;QACA,KAAKQ,oBAAAA,cAAc;YAAE;gBACnB,OAAOC,CAAAA,GAAAA,gBAAAA,cAAc,EAACV;YACxB;QACA,KAAKW,oBAAAA,kBAAkB;YAAE;gBACvB,OAAOC,CAAAA,GAAAA,mBAAAA,iBAAiB,EAACZ;YAC3B;QACA,KAAKa,oBAAAA,oBAAoB;YAAE;gBACzB,OAAOC,CAAAA,GAAAA,qBAAAA,mBAAmB,EAACd,OAAOC;YACpC;QACA,+DAA+D;QAC/D;YACE,MAAM,OAAA,cAA2B,CAA3B,IAAIc,MAAM,mBAAV,qBAAA;uBAAA;4BAAA;8BAAA;YAA0B;IACpC;AACF;AAEA,SAASC,cACPhB,KAA2B,EAC3BiB,OAAuB;IAEvB,OAAOjB;AACT;AAGO,MAAMF,UACX,OAAOoB,WAAW,cAAcF,gBAAgBjB","ignoreList":[0]}}, + {"offset": {"line": 9118, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/segment-cache/prefetch.ts"],"sourcesContent":["import type { FlightRouterState } from '../../../shared/lib/app-router-types'\nimport { createPrefetchURL } from '../app-router-utils'\nimport { createCacheKey } from './cache-key'\nimport { schedulePrefetchTask } from './scheduler'\nimport { PrefetchPriority, type PrefetchTaskFetchStrategy } from './types'\n\n/**\n * Entrypoint for prefetching a URL into the Segment Cache.\n * @param href - The URL to prefetch. Typically this will come from a ,\n * or router.prefetch. It must be validated before we attempt to prefetch it.\n * @param nextUrl - A special header used by the server for interception routes.\n * Roughly corresponds to the current URL.\n * @param treeAtTimeOfPrefetch - The FlightRouterState at the time the prefetch\n * was requested. This is only used when PPR is disabled.\n * @param fetchStrategy - Whether to prefetch dynamic data, in addition to\n * static data. This is used by ``.\n * @param onInvalidate - A callback that will be called when the prefetch cache\n * When called, it signals to the listener that the data associated with the\n * prefetch may have been invalidated from the cache. This is not a live\n * subscription — it's called at most once per `prefetch` call. The only\n * supported use case is to trigger a new prefetch inside the listener, if\n * desired. It also may be called even in cases where the associated data is\n * still cached. Prefetching is a poll-based (pull) operation, not an event-\n * based (push) one. Rather than subscribe to specific cache entries, you\n * occasionally poll the prefetch cache to check if anything is missing.\n */\nexport function prefetch(\n href: string,\n nextUrl: string | null,\n treeAtTimeOfPrefetch: FlightRouterState,\n fetchStrategy: PrefetchTaskFetchStrategy,\n onInvalidate: null | (() => void)\n) {\n const url = createPrefetchURL(href)\n if (url === null) {\n // This href should not be prefetched.\n return\n }\n const cacheKey = createCacheKey(url.href, nextUrl)\n schedulePrefetchTask(\n cacheKey,\n treeAtTimeOfPrefetch,\n fetchStrategy,\n PrefetchPriority.Default,\n onInvalidate\n )\n}\n"],"names":["prefetch","href","nextUrl","treeAtTimeOfPrefetch","fetchStrategy","onInvalidate","url","createPrefetchURL","cacheKey","createCacheKey","schedulePrefetchTask","PrefetchPriority","Default"],"mappings":";;;+BA0BgBA,YAAAA;;;eAAAA;;;gCAzBkB;0BACH;2BACM;uBAC4B;AAsB1D,SAASA,SACdC,IAAY,EACZC,OAAsB,EACtBC,oBAAuC,EACvCC,aAAwC,EACxCC,YAAiC;IAEjC,MAAMC,MAAMC,CAAAA,GAAAA,gBAAAA,iBAAiB,EAACN;IAC9B,IAAIK,QAAQ,MAAM;QAChB,sCAAsC;QACtC;IACF;IACA,MAAME,WAAWC,CAAAA,GAAAA,UAAAA,cAAc,EAACH,IAAIL,IAAI,EAAEC;IAC1CQ,CAAAA,GAAAA,WAAAA,oBAAoB,EAClBF,UACAL,sBACAC,eACAO,OAAAA,gBAAgB,CAACC,OAAO,EACxBP;AAEJ","ignoreList":[0]}}, + {"offset": {"line": 9151, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/app-router-instance.ts"],"sourcesContent":["import {\n type AppRouterState,\n type ReducerActions,\n type ReducerState,\n ACTION_REFRESH,\n ACTION_SERVER_ACTION,\n ACTION_NAVIGATE,\n ACTION_RESTORE,\n type NavigateAction,\n ACTION_HMR_REFRESH,\n PrefetchKind,\n type AppHistoryState,\n} from './router-reducer/router-reducer-types'\nimport { reducer } from './router-reducer/router-reducer'\nimport { startTransition } from 'react'\nimport { isThenable } from '../../shared/lib/is-thenable'\nimport {\n FetchStrategy,\n type PrefetchTaskFetchStrategy,\n} from './segment-cache/types'\nimport { prefetch as prefetchWithSegmentCache } from './segment-cache/prefetch'\nimport { dispatchAppRouterAction } from './use-action-queue'\nimport { addBasePath } from '../add-base-path'\nimport { isExternalURL } from './app-router-utils'\nimport type {\n AppRouterInstance,\n NavigateOptions,\n PrefetchOptions,\n} from '../../shared/lib/app-router-context.shared-runtime'\nimport { setLinkForCurrentNavigation, type LinkInstance } from './links'\nimport type { ClientInstrumentationHooks } from '../app-index'\nimport type { GlobalErrorComponent } from './builtin/global-error'\n\nexport type DispatchStatePromise = React.Dispatch\n\nexport type AppRouterActionQueue = {\n state: AppRouterState\n dispatch: (payload: ReducerActions, setState: DispatchStatePromise) => void\n action: (state: AppRouterState, action: ReducerActions) => ReducerState\n\n onRouterTransitionStart:\n | ((url: string, type: 'push' | 'replace' | 'traverse') => void)\n | null\n\n pending: ActionQueueNode | null\n needsRefresh?: boolean\n last: ActionQueueNode | null\n}\n\nexport type GlobalErrorState = [\n GlobalError: GlobalErrorComponent,\n styles: React.ReactNode,\n]\n\nexport type ActionQueueNode = {\n payload: ReducerActions\n next: ActionQueueNode | null\n resolve: (value: ReducerState) => void\n reject: (err: Error) => void\n discarded?: boolean\n}\n\nfunction runRemainingActions(\n actionQueue: AppRouterActionQueue,\n setState: DispatchStatePromise\n) {\n if (actionQueue.pending !== null) {\n actionQueue.pending = actionQueue.pending.next\n if (actionQueue.pending !== null) {\n runAction({\n actionQueue,\n action: actionQueue.pending,\n setState,\n })\n }\n } else {\n // Check for refresh when pending is already null\n // This handles the case where a discarded server action completes\n // after the navigation has already finished and the queue is empty\n if (actionQueue.needsRefresh) {\n actionQueue.needsRefresh = false\n actionQueue.dispatch({ type: ACTION_REFRESH }, setState)\n }\n }\n}\n\nasync function runAction({\n actionQueue,\n action,\n setState,\n}: {\n actionQueue: AppRouterActionQueue\n action: ActionQueueNode\n setState: DispatchStatePromise\n}) {\n const prevState = actionQueue.state\n\n actionQueue.pending = action\n\n const payload = action.payload\n const actionResult = actionQueue.action(prevState, payload)\n\n function handleResult(nextState: AppRouterState) {\n // if we discarded this action, the state should also be discarded\n if (action.discarded) {\n // Check if the discarded server action revalidated data\n if (\n action.payload.type === ACTION_SERVER_ACTION &&\n action.payload.didRevalidate\n ) {\n // The server action was discarded but it revalidated data,\n // mark that we need to refresh after all actions complete\n actionQueue.needsRefresh = true\n }\n // Still need to run remaining actions even for discarded actions\n // to potentially trigger the refresh\n runRemainingActions(actionQueue, setState)\n return\n }\n\n actionQueue.state = nextState\n\n runRemainingActions(actionQueue, setState)\n action.resolve(nextState)\n }\n\n // if the action is a promise, set up a callback to resolve it\n if (isThenable(actionResult)) {\n actionResult.then(handleResult, (err) => {\n runRemainingActions(actionQueue, setState)\n action.reject(err)\n })\n } else {\n handleResult(actionResult)\n }\n}\n\nfunction dispatchAction(\n actionQueue: AppRouterActionQueue,\n payload: ReducerActions,\n setState: DispatchStatePromise\n) {\n let resolvers: {\n resolve: (value: ReducerState) => void\n reject: (reason: any) => void\n } = { resolve: setState, reject: () => {} }\n\n // most of the action types are async with the exception of restore\n // it's important that restore is handled quickly since it's fired on the popstate event\n // and we don't want to add any delay on a back/forward nav\n // this only creates a promise for the async actions\n if (payload.type !== ACTION_RESTORE) {\n // Create the promise and assign the resolvers to the object.\n const deferredPromise = new Promise((resolve, reject) => {\n resolvers = { resolve, reject }\n })\n\n startTransition(() => {\n // we immediately notify React of the pending promise -- the resolver is attached to the action node\n // and will be called when the associated action promise resolves\n setState(deferredPromise)\n })\n }\n\n const newAction: ActionQueueNode = {\n payload,\n next: null,\n resolve: resolvers.resolve,\n reject: resolvers.reject,\n }\n\n // Check if the queue is empty\n if (actionQueue.pending === null) {\n // The queue is empty, so add the action and start it immediately\n // Mark this action as the last in the queue\n actionQueue.last = newAction\n\n runAction({\n actionQueue,\n action: newAction,\n setState,\n })\n } else if (\n payload.type === ACTION_NAVIGATE ||\n payload.type === ACTION_RESTORE\n ) {\n // Navigations (including back/forward) take priority over any pending actions.\n // Mark the pending action as discarded (so the state is never applied) and start the navigation action immediately.\n actionQueue.pending.discarded = true\n\n // The rest of the current queue should still execute after this navigation.\n // (Note that it can't contain any earlier navigations, because we always put those into `actionQueue.pending` by calling `runAction`)\n newAction.next = actionQueue.pending.next\n\n runAction({\n actionQueue,\n action: newAction,\n setState,\n })\n } else {\n // The queue is not empty, so add the action to the end of the queue\n // It will be started by runRemainingActions after the previous action finishes\n if (actionQueue.last !== null) {\n actionQueue.last.next = newAction\n }\n actionQueue.last = newAction\n }\n}\n\nlet globalActionQueue: AppRouterActionQueue | null = null\n\nexport function createMutableActionQueue(\n initialState: AppRouterState,\n instrumentationHooks: ClientInstrumentationHooks | null\n): AppRouterActionQueue {\n const actionQueue: AppRouterActionQueue = {\n state: initialState,\n dispatch: (payload: ReducerActions, setState: DispatchStatePromise) =>\n dispatchAction(actionQueue, payload, setState),\n action: async (state: AppRouterState, action: ReducerActions) => {\n const result = reducer(state, action)\n return result\n },\n pending: null,\n last: null,\n onRouterTransitionStart:\n instrumentationHooks !== null &&\n typeof instrumentationHooks.onRouterTransitionStart === 'function'\n ? // This profiling hook will be called at the start of every navigation.\n instrumentationHooks.onRouterTransitionStart\n : null,\n }\n\n if (typeof window !== 'undefined') {\n // The action queue is lazily created on hydration, but after that point\n // it doesn't change. So we can store it in a global rather than pass\n // it around everywhere via props/context.\n if (globalActionQueue !== null) {\n throw new Error(\n 'Internal Next.js Error: createMutableActionQueue was called more ' +\n 'than once'\n )\n }\n globalActionQueue = actionQueue\n }\n\n return actionQueue\n}\n\nexport function getCurrentAppRouterState(): AppRouterState | null {\n return globalActionQueue !== null ? globalActionQueue.state : null\n}\n\nfunction getAppRouterActionQueue(): AppRouterActionQueue {\n if (globalActionQueue === null) {\n throw new Error(\n 'Internal Next.js error: Router action dispatched before initialization.'\n )\n }\n return globalActionQueue\n}\n\nfunction getProfilingHookForOnNavigationStart() {\n if (globalActionQueue !== null) {\n return globalActionQueue.onRouterTransitionStart\n }\n return null\n}\n\nexport function dispatchNavigateAction(\n href: string,\n navigateType: NavigateAction['navigateType'],\n shouldScroll: boolean,\n linkInstanceRef: LinkInstance | null\n): void {\n // TODO: This stuff could just go into the reducer. Leaving as-is for now\n // since we're about to rewrite all the router reducer stuff anyway.\n const url = new URL(addBasePath(href), location.href)\n if (process.env.__NEXT_APP_NAV_FAIL_HANDLING) {\n window.next.__pendingUrl = url\n }\n\n setLinkForCurrentNavigation(linkInstanceRef)\n\n const onRouterTransitionStart = getProfilingHookForOnNavigationStart()\n if (onRouterTransitionStart !== null) {\n onRouterTransitionStart(href, navigateType)\n }\n\n dispatchAppRouterAction({\n type: ACTION_NAVIGATE,\n url,\n isExternalUrl: isExternalURL(url),\n locationSearch: location.search,\n shouldScroll,\n navigateType,\n })\n}\n\nexport function dispatchTraverseAction(\n href: string,\n historyState: AppHistoryState | undefined\n) {\n const onRouterTransitionStart = getProfilingHookForOnNavigationStart()\n if (onRouterTransitionStart !== null) {\n onRouterTransitionStart(href, 'traverse')\n }\n dispatchAppRouterAction({\n type: ACTION_RESTORE,\n url: new URL(href),\n historyState,\n })\n}\n\n/**\n * The app router that is exposed through `useRouter`. These are public API\n * methods. Internal Next.js code should call the lower level methods directly\n * (although there's lots of existing code that doesn't do that).\n */\nexport const publicAppRouterInstance: AppRouterInstance = {\n back: () => window.history.back(),\n forward: () => window.history.forward(),\n prefetch:\n // Unlike the old implementation, the Segment Cache doesn't store its\n // data in the router reducer state; it writes into a global mutable\n // cache. So we don't need to dispatch an action.\n (href: string, options?: PrefetchOptions) => {\n const actionQueue = getAppRouterActionQueue()\n const prefetchKind = options?.kind ?? PrefetchKind.AUTO\n\n // We don't currently offer a way to issue a runtime prefetch via `router.prefetch()`.\n // This will be possible when we update its API to not take a PrefetchKind.\n let fetchStrategy: PrefetchTaskFetchStrategy\n switch (prefetchKind) {\n case PrefetchKind.AUTO: {\n // We default to PPR. We'll discover whether or not the route supports it with the initial prefetch.\n fetchStrategy = FetchStrategy.PPR\n break\n }\n case PrefetchKind.FULL: {\n fetchStrategy = FetchStrategy.Full\n break\n }\n default: {\n prefetchKind satisfies never\n // Despite typescript thinking that this can't happen,\n // we might get an unexpected value from user code.\n // We don't know what they want, but we know they want a prefetch,\n // so use the default.\n fetchStrategy = FetchStrategy.PPR\n }\n }\n\n prefetchWithSegmentCache(\n href,\n actionQueue.state.nextUrl,\n actionQueue.state.tree,\n fetchStrategy,\n options?.onInvalidate ?? null\n )\n },\n replace: (href: string, options?: NavigateOptions) => {\n startTransition(() => {\n dispatchNavigateAction(href, 'replace', options?.scroll ?? true, null)\n })\n },\n push: (href: string, options?: NavigateOptions) => {\n startTransition(() => {\n dispatchNavigateAction(href, 'push', options?.scroll ?? true, null)\n })\n },\n refresh: () => {\n startTransition(() => {\n dispatchAppRouterAction({\n type: ACTION_REFRESH,\n })\n })\n },\n hmrRefresh: () => {\n if (process.env.NODE_ENV !== 'development') {\n throw new Error(\n 'hmrRefresh can only be used in development mode. Please use refresh instead.'\n )\n } else {\n startTransition(() => {\n dispatchAppRouterAction({\n type: ACTION_HMR_REFRESH,\n })\n })\n }\n },\n}\n\n// Exists for debugging purposes. Don't use in application code.\nif (typeof window !== 'undefined' && window.next) {\n window.next.router = publicAppRouterInstance\n}\n"],"names":["createMutableActionQueue","dispatchNavigateAction","dispatchTraverseAction","getCurrentAppRouterState","publicAppRouterInstance","runRemainingActions","actionQueue","setState","pending","next","runAction","action","needsRefresh","dispatch","type","ACTION_REFRESH","prevState","state","payload","actionResult","handleResult","nextState","discarded","ACTION_SERVER_ACTION","didRevalidate","resolve","isThenable","then","err","reject","dispatchAction","resolvers","ACTION_RESTORE","deferredPromise","Promise","startTransition","newAction","last","ACTION_NAVIGATE","globalActionQueue","initialState","instrumentationHooks","result","reducer","onRouterTransitionStart","window","Error","getAppRouterActionQueue","getProfilingHookForOnNavigationStart","href","navigateType","shouldScroll","linkInstanceRef","url","URL","addBasePath","location","process","env","__NEXT_APP_NAV_FAIL_HANDLING","__pendingUrl","setLinkForCurrentNavigation","dispatchAppRouterAction","isExternalUrl","isExternalURL","locationSearch","search","historyState","back","history","forward","prefetch","options","prefetchKind","kind","PrefetchKind","AUTO","fetchStrategy","FetchStrategy","PPR","FULL","Full","prefetchWithSegmentCache","nextUrl","tree","onInvalidate","replace","scroll","push","refresh","hmrRefresh","NODE_ENV","ACTION_HMR_REFRESH","router"],"mappings":"AA2XQyD,QAAQC,GAAG,CAACiC,QAAQ,KAAK,eAAe;;;;;;;;;;;;;;;;;;;IAxKhC3F,wBAAwB,EAAA;eAAxBA;;IA0DAC,sBAAsB,EAAA;eAAtBA;;IA8BAC,sBAAsB,EAAA;eAAtBA;;IAlDAC,wBAAwB,EAAA;eAAxBA;;IAsEHC,uBAAuB,EAAA;eAAvBA;;;oCAnTN;+BACiB;uBACQ;4BACL;uBAIpB;0BAC8C;gCACb;6BACZ;gCACE;uBAMiC;AAiC/D,SAASC,oBACPC,WAAiC,EACjCC,QAA8B;IAE9B,IAAID,YAAYE,OAAO,KAAK,MAAM;QAChCF,YAAYE,OAAO,GAAGF,YAAYE,OAAO,CAACC,IAAI;QAC9C,IAAIH,YAAYE,OAAO,KAAK,MAAM;YAChCE,UAAU;gBACRJ;gBACAK,QAAQL,YAAYE,OAAO;gBAC3BD;YACF;QACF;IACF,OAAO;QACL,iDAAiD;QACjD,kEAAkE;QAClE,mEAAmE;QACnE,IAAID,YAAYM,YAAY,EAAE;YAC5BN,YAAYM,YAAY,GAAG;YAC3BN,YAAYO,QAAQ,CAAC;gBAAEC,MAAMC,oBAAAA,cAAc;YAAC,GAAGR;QACjD;IACF;AACF;AAEA,eAAeG,UAAU,EACvBJ,WAAW,EACXK,MAAM,EACNJ,QAAQ,EAKT;IACC,MAAMS,YAAYV,YAAYW,KAAK;IAEnCX,YAAYE,OAAO,GAAGG;IAEtB,MAAMO,UAAUP,OAAOO,OAAO;IAC9B,MAAMC,eAAeb,YAAYK,MAAM,CAACK,WAAWE;IAEnD,SAASE,aAAaC,SAAyB;QAC7C,kEAAkE;QAClE,IAAIV,OAAOW,SAAS,EAAE;YACpB,wDAAwD;YACxD,IACEX,OAAOO,OAAO,CAACJ,IAAI,KAAKS,oBAAAA,oBAAoB,IAC5CZ,OAAOO,OAAO,CAACM,aAAa,EAC5B;gBACA,2DAA2D;gBAC3D,0DAA0D;gBAC1DlB,YAAYM,YAAY,GAAG;YAC7B;YACA,iEAAiE;YACjE,qCAAqC;YACrCP,oBAAoBC,aAAaC;YACjC;QACF;QAEAD,YAAYW,KAAK,GAAGI;QAEpBhB,oBAAoBC,aAAaC;QACjCI,OAAOc,OAAO,CAACJ;IACjB;IAEA,8DAA8D;IAC9D,IAAIK,CAAAA,GAAAA,YAAAA,UAAU,EAACP,eAAe;QAC5BA,aAAaQ,IAAI,CAACP,cAAc,CAACQ;YAC/BvB,oBAAoBC,aAAaC;YACjCI,OAAOkB,MAAM,CAACD;QAChB;IACF,OAAO;QACLR,aAAaD;IACf;AACF;AAEA,SAASW,eACPxB,WAAiC,EACjCY,OAAuB,EACvBX,QAA8B;IAE9B,IAAIwB,YAGA;QAAEN,SAASlB;QAAUsB,QAAQ,KAAO;IAAE;IAE1C,mEAAmE;IACnE,wFAAwF;IACxF,2DAA2D;IAC3D,oDAAoD;IACpD,IAAIX,QAAQJ,IAAI,KAAKkB,oBAAAA,cAAc,EAAE;QACnC,6DAA6D;QAC7D,MAAMC,kBAAkB,IAAIC,QAAwB,CAACT,SAASI;YAC5DE,YAAY;gBAAEN;gBAASI;YAAO;QAChC;QAEAM,CAAAA,GAAAA,OAAAA,eAAe,EAAC;YACd,oGAAoG;YACpG,iEAAiE;YACjE5B,SAAS0B;QACX;IACF;IAEA,MAAMG,YAA6B;QACjClB;QACAT,MAAM;QACNgB,SAASM,UAAUN,OAAO;QAC1BI,QAAQE,UAAUF,MAAM;IAC1B;IAEA,8BAA8B;IAC9B,IAAIvB,YAAYE,OAAO,KAAK,MAAM;QAChC,iEAAiE;QACjE,4CAA4C;QAC5CF,YAAY+B,IAAI,GAAGD;QAEnB1B,UAAU;YACRJ;YACAK,QAAQyB;YACR7B;QACF;IACF,OAAO,IACLW,QAAQJ,IAAI,KAAKwB,oBAAAA,eAAe,IAChCpB,QAAQJ,IAAI,KAAKkB,oBAAAA,cAAc,EAC/B;QACA,+EAA+E;QAC/E,oHAAoH;QACpH1B,YAAYE,OAAO,CAACc,SAAS,GAAG;QAEhC,4EAA4E;QAC5E,sIAAsI;QACtIc,UAAU3B,IAAI,GAAGH,YAAYE,OAAO,CAACC,IAAI;QAEzCC,UAAU;YACRJ;YACAK,QAAQyB;YACR7B;QACF;IACF,OAAO;QACL,oEAAoE;QACpE,+EAA+E;QAC/E,IAAID,YAAY+B,IAAI,KAAK,MAAM;YAC7B/B,YAAY+B,IAAI,CAAC5B,IAAI,GAAG2B;QAC1B;QACA9B,YAAY+B,IAAI,GAAGD;IACrB;AACF;AAEA,IAAIG,oBAAiD;AAE9C,SAASvC,yBACdwC,YAA4B,EAC5BC,oBAAuD;IAEvD,MAAMnC,cAAoC;QACxCW,OAAOuB;QACP3B,UAAU,CAACK,SAAyBX,WAClCuB,eAAexB,aAAaY,SAASX;QACvCI,QAAQ,OAAOM,OAAuBN;YACpC,MAAM+B,SAASC,CAAAA,GAAAA,eAAAA,OAAO,EAAC1B,OAAON;YAC9B,OAAO+B;QACT;QACAlC,SAAS;QACT6B,MAAM;QACNO,yBACEH,yBAAyB,QACzB,OAAOA,qBAAqBG,uBAAuB,KAAK,aAEpDH,qBAAqBG,uBAAuB,GAC5C;IACR;IAEA,IAAI,OAAOC,WAAW,aAAa;QACjC,wEAAwE;QACxE,qEAAqE;QACrE,0CAA0C;QAC1C,IAAIN,sBAAsB,MAAM;YAC9B,MAAM,OAAA,cAGL,CAHK,IAAIO,MACR,sEACE,cAFE,qBAAA;uBAAA;4BAAA;8BAAA;YAGN;QACF;QACAP,oBAAoBjC;IACtB;IAEA,OAAOA;AACT;AAEO,SAASH;IACd,OAAOoC,sBAAsB,OAAOA,kBAAkBtB,KAAK,GAAG;AAChE;AAEA,SAAS8B;IACP,IAAIR,sBAAsB,MAAM;QAC9B,MAAM,OAAA,cAEL,CAFK,IAAIO,MACR,4EADI,qBAAA;mBAAA;wBAAA;0BAAA;QAEN;IACF;IACA,OAAOP;AACT;AAEA,SAASS;IACP,IAAIT,sBAAsB,MAAM;QAC9B,OAAOA,kBAAkBK,uBAAuB;IAClD;IACA,OAAO;AACT;AAEO,SAAS3C,uBACdgD,IAAY,EACZC,YAA4C,EAC5CC,YAAqB,EACrBC,eAAoC;IAEpC,yEAAyE;IACzE,oEAAoE;IACpE,MAAMC,MAAM,IAAIC,IAAIC,CAAAA,GAAAA,aAAAA,WAAW,EAACN,OAAOO,SAASP,IAAI;IACpD,IAAIQ,QAAQC,GAAG,CAACC,4BAA4B,EAAE;;IAI9CE,CAAAA,GAAAA,OAAAA,2BAA2B,EAACT;IAE5B,MAAMR,0BAA0BI;IAChC,IAAIJ,4BAA4B,MAAM;QACpCA,wBAAwBK,MAAMC;IAChC;IAEAY,CAAAA,GAAAA,gBAAAA,uBAAuB,EAAC;QACtBhD,MAAMwB,oBAAAA,eAAe;QACrBe;QACAU,eAAeC,CAAAA,GAAAA,gBAAAA,aAAa,EAACX;QAC7BY,gBAAgBT,SAASU,MAAM;QAC/Bf;QACAD;IACF;AACF;AAEO,SAAShD,uBACd+C,IAAY,EACZkB,YAAyC;IAEzC,MAAMvB,0BAA0BI;IAChC,IAAIJ,4BAA4B,MAAM;QACpCA,wBAAwBK,MAAM;IAChC;IACAa,CAAAA,GAAAA,gBAAAA,uBAAuB,EAAC;QACtBhD,MAAMkB,oBAAAA,cAAc;QACpBqB,KAAK,IAAIC,IAAIL;QACbkB;IACF;AACF;AAOO,MAAM/D,0BAA6C;IACxDgE,MAAM,IAAMvB,OAAOwB,OAAO,CAACD,IAAI;IAC/BE,SAAS,IAAMzB,OAAOwB,OAAO,CAACC,OAAO;IACrCC,UAEE,AADA,oEACoE,CADC;IAErE,iDAAiD;IACjD,CAACtB,MAAcuB;QACb,MAAMlE,cAAcyC;QACpB,MAAM0B,eAAeD,SAASE,QAAQC,oBAAAA,YAAY,CAACC,IAAI;QAEvD,sFAAsF;QACtF,2EAA2E;QAC3E,IAAIC;QACJ,OAAQJ;YACN,KAAKE,oBAAAA,YAAY,CAACC,IAAI;gBAAE;oBACtB,oGAAoG;oBACpGC,gBAAgBC,OAAAA,aAAa,CAACC,GAAG;oBACjC;gBACF;YACA,KAAKJ,oBAAAA,YAAY,CAACK,IAAI;gBAAE;oBACtBH,gBAAgBC,OAAAA,aAAa,CAACG,IAAI;oBAClC;gBACF;YACA;gBAAS;oBACPR;oBACA,sDAAsD;oBACtD,mDAAmD;oBACnD,kEAAkE;oBAClE,sBAAsB;oBACtBI,gBAAgBC,OAAAA,aAAa,CAACC,GAAG;gBACnC;QACF;QAEAG,CAAAA,GAAAA,UAAAA,QAAwB,EACtBjC,MACA3C,YAAYW,KAAK,CAACkE,OAAO,EACzB7E,YAAYW,KAAK,CAACmE,IAAI,EACtBP,eACAL,SAASa,gBAAgB;IAE7B;IACFC,SAAS,CAACrC,MAAcuB;QACtBrC,CAAAA,GAAAA,OAAAA,eAAe,EAAC;YACdlC,uBAAuBgD,MAAM,WAAWuB,SAASe,UAAU,MAAM;QACnE;IACF;IACAC,MAAM,CAACvC,MAAcuB;QACnBrC,CAAAA,GAAAA,OAAAA,eAAe,EAAC;YACdlC,uBAAuBgD,MAAM,QAAQuB,SAASe,UAAU,MAAM;QAChE;IACF;IACAE,SAAS;QACPtD,CAAAA,GAAAA,OAAAA,eAAe,EAAC;YACd2B,CAAAA,GAAAA,gBAAAA,uBAAuB,EAAC;gBACtBhD,MAAMC,oBAAAA,cAAc;YACtB;QACF;IACF;IACA2E,YAAY;QACV;;aAIO;YACLvD,CAAAA,GAAAA,OAAAA,eAAe,EAAC;gBACd2B,CAAAA,GAAAA,gBAAAA,uBAAuB,EAAC;oBACtBhD,MAAM8E,oBAAAA,kBAAkB;gBAC1B;YACF;QACF;IACF;AACF;AAEA,gEAAgE;AAChE,IAAI,OAAO/C,WAAW,eAAeA,OAAOpC,IAAI,EAAE;IAChDoC,OAAOpC,IAAI,CAACoF,MAAM,GAAGzF;AACvB","ignoreList":[0]}}, + {"offset": {"line": 9468, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/app-router-announcer.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from 'react'\nimport { createPortal } from 'react-dom'\nimport type { FlightRouterState } from '../../shared/lib/app-router-types'\n\nconst ANNOUNCER_TYPE = 'next-route-announcer'\nconst ANNOUNCER_ID = '__next-route-announcer__'\n\nfunction getAnnouncerNode() {\n const existingAnnouncer = document.getElementsByName(ANNOUNCER_TYPE)[0]\n if (existingAnnouncer?.shadowRoot?.childNodes[0]) {\n return existingAnnouncer.shadowRoot.childNodes[0] as HTMLElement\n } else {\n const container = document.createElement(ANNOUNCER_TYPE)\n container.style.cssText = 'position:absolute'\n const announcer = document.createElement('div')\n announcer.ariaLive = 'assertive'\n announcer.id = ANNOUNCER_ID\n announcer.role = 'alert'\n announcer.style.cssText =\n 'position:absolute;border:0;height:1px;margin:-1px;padding:0;width:1px;clip:rect(0 0 0 0);overflow:hidden;white-space:nowrap;word-wrap:normal'\n\n // Use shadow DOM here to avoid any potential CSS bleed\n const shadow = container.attachShadow({ mode: 'open' })\n shadow.appendChild(announcer)\n document.body.appendChild(container)\n return announcer\n }\n}\n\nexport function AppRouterAnnouncer({ tree }: { tree: FlightRouterState }) {\n const [portalNode, setPortalNode] = useState(null)\n\n useEffect(() => {\n const announcer = getAnnouncerNode()\n setPortalNode(announcer)\n return () => {\n const container = document.getElementsByTagName(ANNOUNCER_TYPE)[0]\n if (container?.isConnected) {\n document.body.removeChild(container)\n }\n }\n }, [])\n\n const [routeAnnouncement, setRouteAnnouncement] = useState('')\n const previousTitle = useRef(undefined)\n\n useEffect(() => {\n let currentTitle = ''\n if (document.title) {\n currentTitle = document.title\n } else {\n const pageHeader = document.querySelector('h1')\n if (pageHeader) {\n currentTitle = pageHeader.innerText || pageHeader.textContent || ''\n }\n }\n\n // Only announce the title change, but not for the first load because screen\n // readers do that automatically.\n if (\n previousTitle.current !== undefined &&\n previousTitle.current !== currentTitle\n ) {\n setRouteAnnouncement(currentTitle)\n }\n previousTitle.current = currentTitle\n }, [tree])\n\n return portalNode ? createPortal(routeAnnouncement, portalNode) : null\n}\n"],"names":["AppRouterAnnouncer","ANNOUNCER_TYPE","ANNOUNCER_ID","getAnnouncerNode","existingAnnouncer","document","getElementsByName","shadowRoot","childNodes","container","createElement","style","cssText","announcer","ariaLive","id","role","shadow","attachShadow","mode","appendChild","body","tree","portalNode","setPortalNode","useState","useEffect","getElementsByTagName","isConnected","removeChild","routeAnnouncement","setRouteAnnouncement","previousTitle","useRef","undefined","currentTitle","title","pageHeader","querySelector","innerText","textContent","current","createPortal"],"mappings":";;;+BA6BgBA,sBAAAA;;;eAAAA;;;uBA7B4B;0BACf;AAG7B,MAAMC,iBAAiB;AACvB,MAAMC,eAAe;AAErB,SAASC;IACP,MAAMC,oBAAoBC,SAASC,iBAAiB,CAACL,eAAe,CAAC,EAAE;IACvE,IAAIG,mBAAmBG,YAAYC,UAAU,CAAC,EAAE,EAAE;QAChD,OAAOJ,kBAAkBG,UAAU,CAACC,UAAU,CAAC,EAAE;IACnD,OAAO;QACL,MAAMC,YAAYJ,SAASK,aAAa,CAACT;QACzCQ,UAAUE,KAAK,CAACC,OAAO,GAAG;QAC1B,MAAMC,YAAYR,SAASK,aAAa,CAAC;QACzCG,UAAUC,QAAQ,GAAG;QACrBD,UAAUE,EAAE,GAAGb;QACfW,UAAUG,IAAI,GAAG;QACjBH,UAAUF,KAAK,CAACC,OAAO,GACrB;QAEF,uDAAuD;QACvD,MAAMK,SAASR,UAAUS,YAAY,CAAC;YAAEC,MAAM;QAAO;QACrDF,OAAOG,WAAW,CAACP;QACnBR,SAASgB,IAAI,CAACD,WAAW,CAACX;QAC1B,OAAOI;IACT;AACF;AAEO,SAASb,mBAAmB,EAAEsB,IAAI,EAA+B;IACtE,MAAM,CAACC,YAAYC,cAAc,GAAGC,CAAAA,GAAAA,OAAAA,QAAQ,EAAqB;IAEjEC,CAAAA,GAAAA,OAAAA,SAAS,EAAC;QACR,MAAMb,YAAYV;QAClBqB,cAAcX;QACd,OAAO;YACL,MAAMJ,YAAYJ,SAASsB,oBAAoB,CAAC1B,eAAe,CAAC,EAAE;YAClE,IAAIQ,WAAWmB,aAAa;gBAC1BvB,SAASgB,IAAI,CAACQ,WAAW,CAACpB;YAC5B;QACF;IACF,GAAG,EAAE;IAEL,MAAM,CAACqB,mBAAmBC,qBAAqB,GAAGN,CAAAA,GAAAA,OAAAA,QAAQ,EAAC;IAC3D,MAAMO,gBAAgBC,CAAAA,GAAAA,OAAAA,MAAM,EAAqBC;IAEjDR,CAAAA,GAAAA,OAAAA,SAAS,EAAC;QACR,IAAIS,eAAe;QACnB,IAAI9B,SAAS+B,KAAK,EAAE;YAClBD,eAAe9B,SAAS+B,KAAK;QAC/B,OAAO;YACL,MAAMC,aAAahC,SAASiC,aAAa,CAAC;YAC1C,IAAID,YAAY;gBACdF,eAAeE,WAAWE,SAAS,IAAIF,WAAWG,WAAW,IAAI;YACnE;QACF;QAEA,4EAA4E;QAC5E,iCAAiC;QACjC,IACER,cAAcS,OAAO,KAAKP,aAC1BF,cAAcS,OAAO,KAAKN,cAC1B;YACAJ,qBAAqBI;QACvB;QACAH,cAAcS,OAAO,GAAGN;IAC1B,GAAG;QAACb;KAAK;IAET,OAAOC,aAAAA,WAAAA,GAAamB,CAAAA,GAAAA,UAAAA,YAAY,EAACZ,mBAAmBP,cAAc;AACpE","ignoreList":[0]}}, + {"offset": {"line": 9548, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/forbidden.ts"],"sourcesContent":["import {\n HTTP_ERROR_FALLBACK_ERROR_CODE,\n type HTTPAccessFallbackError,\n} from './http-access-fallback/http-access-fallback'\n\n// TODO: Add `forbidden` docs\n/**\n * @experimental\n * This function allows you to render the [forbidden.js file](https://nextjs.org/docs/app/api-reference/file-conventions/forbidden)\n * within a route segment as well as inject a tag.\n *\n * `forbidden()` can be used in\n * [Server Components](https://nextjs.org/docs/app/building-your-application/rendering/server-components),\n * [Route Handlers](https://nextjs.org/docs/app/building-your-application/routing/route-handlers), and\n * [Server Actions](https://nextjs.org/docs/app/building-your-application/data-fetching/server-actions-and-mutations).\n *\n * Read more: [Next.js Docs: `forbidden`](https://nextjs.org/docs/app/api-reference/functions/forbidden)\n */\n\nconst DIGEST = `${HTTP_ERROR_FALLBACK_ERROR_CODE};403`\n\nexport function forbidden(): never {\n if (!process.env.__NEXT_EXPERIMENTAL_AUTH_INTERRUPTS) {\n throw new Error(\n `\\`forbidden()\\` is experimental and only allowed to be enabled when \\`experimental.authInterrupts\\` is enabled.`\n )\n }\n\n const error = new Error(DIGEST) as HTTPAccessFallbackError\n ;(error as HTTPAccessFallbackError).digest = DIGEST\n throw error\n}\n"],"names":["forbidden","DIGEST","HTTP_ERROR_FALLBACK_ERROR_CODE","process","env","__NEXT_EXPERIMENTAL_AUTH_INTERRUPTS","Error","error","digest"],"mappings":"AAsBOG,QAAQC,GAAG,CAACC,mCAAmC;;;;;+BADtCL,aAAAA;;;eAAAA;;;oCAlBT;AAEP,6BAA6B;AAC7B;;;;;;;;;;;CAWC,GAED,MAAMC,SAAS,GAAGC,oBAAAA,8BAA8B,CAAC,IAAI,CAAC;AAE/C,SAASF;IACd,IAAI,oCAAkD;QACpD,MAAM,OAAA,cAEL,CAFK,IAAIM,MACR,CAAC,+GAA+G,CAAC,GAD7G,qBAAA;mBAAA;wBAAA;0BAAA;QAEN;IACF;IAEA,MAAMC,QAAQ,OAAA,cAAiB,CAAjB,IAAID,MAAML,SAAV,qBAAA;eAAA;oBAAA;sBAAA;IAAgB;IAC5BM,MAAkCC,MAAM,GAAGP;IAC7C,MAAMM;AACR","ignoreList":[0]}}, + {"offset": {"line": 9600, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/unauthorized.ts"],"sourcesContent":["import {\n HTTP_ERROR_FALLBACK_ERROR_CODE,\n type HTTPAccessFallbackError,\n} from './http-access-fallback/http-access-fallback'\n\n// TODO: Add `unauthorized` docs\n/**\n * @experimental\n * This function allows you to render the [unauthorized.js file](https://nextjs.org/docs/app/api-reference/file-conventions/unauthorized)\n * within a route segment as well as inject a tag.\n *\n * `unauthorized()` can be used in\n * [Server Components](https://nextjs.org/docs/app/building-your-application/rendering/server-components),\n * [Route Handlers](https://nextjs.org/docs/app/building-your-application/routing/route-handlers), and\n * [Server Actions](https://nextjs.org/docs/app/building-your-application/data-fetching/server-actions-and-mutations).\n *\n *\n * Read more: [Next.js Docs: `unauthorized`](https://nextjs.org/docs/app/api-reference/functions/unauthorized)\n */\n\nconst DIGEST = `${HTTP_ERROR_FALLBACK_ERROR_CODE};401`\n\nexport function unauthorized(): never {\n if (!process.env.__NEXT_EXPERIMENTAL_AUTH_INTERRUPTS) {\n throw new Error(\n `\\`unauthorized()\\` is experimental and only allowed to be used when \\`experimental.authInterrupts\\` is enabled.`\n )\n }\n\n const error = new Error(DIGEST) as HTTPAccessFallbackError\n ;(error as HTTPAccessFallbackError).digest = DIGEST\n throw error\n}\n"],"names":["unauthorized","DIGEST","HTTP_ERROR_FALLBACK_ERROR_CODE","process","env","__NEXT_EXPERIMENTAL_AUTH_INTERRUPTS","Error","error","digest"],"mappings":"AAuBOG,QAAQC,GAAG,CAACC,mCAAmC;;;;;+BADtCL,gBAAAA;;;eAAAA;;;oCAnBT;AAEP,gCAAgC;AAChC;;;;;;;;;;;;CAYC,GAED,MAAMC,SAAS,GAAGC,oBAAAA,8BAA8B,CAAC,IAAI,CAAC;AAE/C,SAASF;IACd,IAAI,oCAAkD;QACpD,MAAM,OAAA,cAEL,CAFK,IAAIM,MACR,CAAC,+GAA+G,CAAC,GAD7G,qBAAA;mBAAA;wBAAA;0BAAA;QAEN;IACF;IAEA,MAAMC,QAAQ,OAAA,cAAiB,CAAjB,IAAID,MAAML,SAAV,qBAAA;eAAA;oBAAA;sBAAA;IAAgB;IAC5BM,MAAkCC,MAAM,GAAGP;IAC7C,MAAMM;AACR","ignoreList":[0]}}, + {"offset": {"line": 9653, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/unstable-rethrow.browser.ts"],"sourcesContent":["import { isBailoutToCSRError } from '../../shared/lib/lazy-dynamic/bailout-to-csr'\nimport { isNextRouterError } from './is-next-router-error'\n\nexport function unstable_rethrow(error: unknown): void {\n if (isNextRouterError(error) || isBailoutToCSRError(error)) {\n throw error\n }\n\n if (error instanceof Error && 'cause' in error) {\n unstable_rethrow(error.cause)\n }\n}\n"],"names":["unstable_rethrow","error","isNextRouterError","isBailoutToCSRError","Error","cause"],"mappings":";;;+BAGgBA,oBAAAA;;;eAAAA;;;8BAHoB;mCACF;AAE3B,SAASA,iBAAiBC,KAAc;IAC7C,IAAIC,CAAAA,GAAAA,mBAAAA,iBAAiB,EAACD,UAAUE,CAAAA,GAAAA,cAAAA,mBAAmB,EAACF,QAAQ;QAC1D,MAAMA;IACR;IAEA,IAAIA,iBAAiBG,SAAS,WAAWH,OAAO;QAC9CD,iBAAiBC,MAAMI,KAAK;IAC9B;AACF","ignoreList":[0]}}, + {"offset": {"line": 9683, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/hooks-server-context.ts"],"sourcesContent":["const DYNAMIC_ERROR_CODE = 'DYNAMIC_SERVER_USAGE'\n\nexport class DynamicServerError extends Error {\n digest: typeof DYNAMIC_ERROR_CODE = DYNAMIC_ERROR_CODE\n\n constructor(public readonly description: string) {\n super(`Dynamic server usage: ${description}`)\n }\n}\n\nexport function isDynamicServerError(err: unknown): err is DynamicServerError {\n if (\n typeof err !== 'object' ||\n err === null ||\n !('digest' in err) ||\n typeof err.digest !== 'string'\n ) {\n return false\n }\n\n return err.digest === DYNAMIC_ERROR_CODE\n}\n"],"names":["DynamicServerError","isDynamicServerError","DYNAMIC_ERROR_CODE","Error","constructor","description","digest","err"],"mappings":";;;;;;;;;;;;;;IAEaA,kBAAkB,EAAA;eAAlBA;;IAQGC,oBAAoB,EAAA;eAApBA;;;AAVhB,MAAMC,qBAAqB;AAEpB,MAAMF,2BAA2BG;IAGtCC,YAA4BC,WAAmB,CAAE;QAC/C,KAAK,CAAC,CAAC,sBAAsB,EAAEA,aAAa,GAAA,IAAA,CADlBA,WAAAA,GAAAA,aAAAA,IAAAA,CAF5BC,MAAAA,GAAoCJ;IAIpC;AACF;AAEO,SAASD,qBAAqBM,GAAY;IAC/C,IACE,OAAOA,QAAQ,YACfA,QAAQ,QACR,CAAE,CAAA,YAAYA,GAAE,KAChB,OAAOA,IAAID,MAAM,KAAK,UACtB;QACA,OAAO;IACT;IAEA,OAAOC,IAAID,MAAM,KAAKJ;AACxB","ignoreList":[0]}}, + {"offset": {"line": 9727, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/static-generation-bailout.ts"],"sourcesContent":["const NEXT_STATIC_GEN_BAILOUT = 'NEXT_STATIC_GEN_BAILOUT'\n\nexport class StaticGenBailoutError extends Error {\n public readonly code = NEXT_STATIC_GEN_BAILOUT\n}\n\nexport function isStaticGenBailoutError(\n error: unknown\n): error is StaticGenBailoutError {\n if (typeof error !== 'object' || error === null || !('code' in error)) {\n return false\n }\n\n return error.code === NEXT_STATIC_GEN_BAILOUT\n}\n"],"names":["StaticGenBailoutError","isStaticGenBailoutError","NEXT_STATIC_GEN_BAILOUT","Error","code","error"],"mappings":";;;;;;;;;;;;;;IAEaA,qBAAqB,EAAA;eAArBA;;IAIGC,uBAAuB,EAAA;eAAvBA;;;AANhB,MAAMC,0BAA0B;AAEzB,MAAMF,8BAA8BG;;QAApC,KAAA,IAAA,OAAA,IAAA,CACWC,IAAAA,GAAOF;;AACzB;AAEO,SAASD,wBACdI,KAAc;IAEd,IAAI,OAAOA,UAAU,YAAYA,UAAU,QAAQ,CAAE,CAAA,UAAUA,KAAI,GAAI;QACrE,OAAO;IACT;IAEA,OAAOA,MAAMD,IAAI,KAAKF;AACxB","ignoreList":[0]}}, + {"offset": {"line": 9771, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/unstable-rethrow.server.ts"],"sourcesContent":["import { isHangingPromiseRejectionError } from '../../server/dynamic-rendering-utils'\nimport { isPostpone } from '../../server/lib/router-utils/is-postpone'\nimport { isBailoutToCSRError } from '../../shared/lib/lazy-dynamic/bailout-to-csr'\nimport { isNextRouterError } from './is-next-router-error'\nimport {\n isDynamicPostpone,\n isPrerenderInterruptedError,\n} from '../../server/app-render/dynamic-rendering'\nimport { isDynamicServerError } from './hooks-server-context'\n\nexport function unstable_rethrow(error: unknown): void {\n if (\n isNextRouterError(error) ||\n isBailoutToCSRError(error) ||\n isDynamicServerError(error) ||\n isDynamicPostpone(error) ||\n isPostpone(error) ||\n isHangingPromiseRejectionError(error) ||\n isPrerenderInterruptedError(error)\n ) {\n throw error\n }\n\n if (error instanceof Error && 'cause' in error) {\n unstable_rethrow(error.cause)\n }\n}\n"],"names":["unstable_rethrow","error","isNextRouterError","isBailoutToCSRError","isDynamicServerError","isDynamicPostpone","isPostpone","isHangingPromiseRejectionError","isPrerenderInterruptedError","Error","cause"],"mappings":";;;+BAUgBA,oBAAAA;;;eAAAA;;;uCAV+B;4BACpB;8BACS;mCACF;kCAI3B;oCAC8B;AAE9B,SAASA,iBAAiBC,KAAc;IAC7C,IACEC,CAAAA,GAAAA,mBAAAA,iBAAiB,EAACD,UAClBE,CAAAA,GAAAA,cAAAA,mBAAmB,EAACF,UACpBG,CAAAA,GAAAA,oBAAAA,oBAAoB,EAACH,UACrBI,CAAAA,GAAAA,kBAAAA,iBAAiB,EAACJ,UAClBK,CAAAA,GAAAA,YAAAA,UAAU,EAACL,UACXM,CAAAA,GAAAA,uBAAAA,8BAA8B,EAACN,UAC/BO,CAAAA,GAAAA,kBAAAA,2BAA2B,EAACP,QAC5B;QACA,MAAMA;IACR;IAEA,IAAIA,iBAAiBQ,SAAS,WAAWR,OAAO;QAC9CD,iBAAiBC,MAAMS,KAAK;IAC9B;AACF","ignoreList":[0]}}, + {"offset": {"line": 9805, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/unstable-rethrow.ts"],"sourcesContent":["/**\n * This function should be used to rethrow internal Next.js errors so that they can be handled by the framework.\n * When wrapping an API that uses errors to interrupt control flow, you should use this function before you do any error handling.\n * This function will rethrow the error if it is a Next.js error so it can be handled, otherwise it will do nothing.\n *\n * Read more: [Next.js Docs: `unstable_rethrow`](https://nextjs.org/docs/app/api-reference/functions/unstable_rethrow)\n */\nexport const unstable_rethrow =\n typeof window === 'undefined'\n ? (\n require('./unstable-rethrow.server') as typeof import('./unstable-rethrow.server')\n ).unstable_rethrow\n : (\n require('./unstable-rethrow.browser') as typeof import('./unstable-rethrow.browser')\n ).unstable_rethrow\n"],"names":["unstable_rethrow","window","require"],"mappings":"AAAA;;;;;;CAMC;;;+BACYA,oBAAAA;;;eAAAA;;;AAAN,MAAMA,mBACX,OAAOC,WAAW,cAEZC,QAAQ,2HACRF,gBAAgB,GAEhBE,QAAQ,4HACRF,gBAAgB","ignoreList":[0]}}, + {"offset": {"line": 9832, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/navigation.react-server.ts"],"sourcesContent":["import { ReadonlyURLSearchParams } from './readonly-url-search-params'\n\nexport function unstable_isUnrecognizedActionError(): boolean {\n throw new Error(\n '`unstable_isUnrecognizedActionError` can only be used on the client.'\n )\n}\n\nexport { redirect, permanentRedirect } from './redirect'\nexport { RedirectType } from './redirect-error'\nexport { notFound } from './not-found'\nexport { forbidden } from './forbidden'\nexport { unauthorized } from './unauthorized'\nexport { unstable_rethrow } from './unstable-rethrow'\nexport { ReadonlyURLSearchParams }\n"],"names":["ReadonlyURLSearchParams","RedirectType","forbidden","notFound","permanentRedirect","redirect","unauthorized","unstable_isUnrecognizedActionError","unstable_rethrow","Error"],"mappings":";;;;;;;;;;;;;;;;;;;;;IAcSA,uBAAuB,EAAA;eAAvBA,yBAAAA,uBAAuB;;IALvBC,YAAY,EAAA;eAAZA,eAAAA,YAAY;;IAEZC,SAAS,EAAA;eAATA,WAAAA,SAAS;;IADTC,QAAQ,EAAA;eAARA,UAAAA,QAAQ;;IAFEC,iBAAiB,EAAA;eAAjBA,UAAAA,iBAAiB;;IAA3BC,QAAQ,EAAA;eAARA,UAAAA,QAAQ;;IAIRC,YAAY,EAAA;eAAZA,cAAAA,YAAY;;IAVLC,kCAAkC,EAAA;eAAlCA;;IAWPC,gBAAgB,EAAA;eAAhBA,iBAAAA,gBAAgB;;;yCAbe;0BAQI;+BACf;0BACJ;2BACC;8BACG;iCACI;AAX1B,SAASD;IACd,MAAM,OAAA,cAEL,CAFK,IAAIE,MACR,yEADI,qBAAA;eAAA;oBAAA;sBAAA;IAEN;AACF","ignoreList":[0]}}, + {"offset": {"line": 9906, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/navigation.ts"],"sourcesContent":["import type { Params } from '../../server/request/params'\n\nimport React, { useContext, useMemo, use } from 'react'\nimport {\n AppRouterContext,\n LayoutRouterContext,\n type AppRouterInstance,\n} from '../../shared/lib/app-router-context.shared-runtime'\nimport {\n SearchParamsContext,\n PathnameContext,\n PathParamsContext,\n NavigationPromisesContext,\n ReadonlyURLSearchParams,\n} from '../../shared/lib/hooks-client-context.shared-runtime'\nimport {\n computeSelectedLayoutSegment,\n getSelectedLayoutSegmentPath,\n} from '../../shared/lib/segment'\n\nconst useDynamicRouteParams =\n typeof window === 'undefined'\n ? (\n require('../../server/app-render/dynamic-rendering') as typeof import('../../server/app-render/dynamic-rendering')\n ).useDynamicRouteParams\n : undefined\n\nconst useDynamicSearchParams =\n typeof window === 'undefined'\n ? (\n require('../../server/app-render/dynamic-rendering') as typeof import('../../server/app-render/dynamic-rendering')\n ).useDynamicSearchParams\n : undefined\n\n/**\n * A [Client Component](https://nextjs.org/docs/app/building-your-application/rendering/client-components) hook\n * that lets you *read* the current URL's search parameters.\n *\n * Learn more about [`URLSearchParams` on MDN](https://developer.mozilla.org/docs/Web/API/URLSearchParams)\n *\n * @example\n * ```ts\n * \"use client\"\n * import { useSearchParams } from 'next/navigation'\n *\n * export default function Page() {\n * const searchParams = useSearchParams()\n * searchParams.get('foo') // returns 'bar' when ?foo=bar\n * // ...\n * }\n * ```\n *\n * Read more: [Next.js Docs: `useSearchParams`](https://nextjs.org/docs/app/api-reference/functions/use-search-params)\n */\n// Client components API\nexport function useSearchParams(): ReadonlyURLSearchParams {\n useDynamicSearchParams?.('useSearchParams()')\n\n const searchParams = useContext(SearchParamsContext)\n\n // In the case where this is `null`, the compat types added in\n // `next-env.d.ts` will add a new overload that changes the return type to\n // include `null`.\n const readonlySearchParams = useMemo((): ReadonlyURLSearchParams => {\n if (!searchParams) {\n // When the router is not ready in pages, we won't have the search params\n // available.\n return null!\n }\n\n return new ReadonlyURLSearchParams(searchParams)\n }, [searchParams])\n\n // Instrument with Suspense DevTools (dev-only)\n if (process.env.NODE_ENV !== 'production' && 'use' in React) {\n const navigationPromises = use(NavigationPromisesContext)\n if (navigationPromises) {\n return use(navigationPromises.searchParams)\n }\n }\n\n return readonlySearchParams\n}\n\n/**\n * A [Client Component](https://nextjs.org/docs/app/building-your-application/rendering/client-components) hook\n * that lets you read the current URL's pathname.\n *\n * @example\n * ```ts\n * \"use client\"\n * import { usePathname } from 'next/navigation'\n *\n * export default function Page() {\n * const pathname = usePathname() // returns \"/dashboard\" on /dashboard?foo=bar\n * // ...\n * }\n * ```\n *\n * Read more: [Next.js Docs: `usePathname`](https://nextjs.org/docs/app/api-reference/functions/use-pathname)\n */\n// Client components API\nexport function usePathname(): string {\n useDynamicRouteParams?.('usePathname()')\n\n // In the case where this is `null`, the compat types added in `next-env.d.ts`\n // will add a new overload that changes the return type to include `null`.\n const pathname = useContext(PathnameContext) as string\n\n // Instrument with Suspense DevTools (dev-only)\n if (process.env.NODE_ENV !== 'production' && 'use' in React) {\n const navigationPromises = use(NavigationPromisesContext)\n if (navigationPromises) {\n return use(navigationPromises.pathname)\n }\n }\n\n return pathname\n}\n\n// Client components API\nexport {\n ServerInsertedHTMLContext,\n useServerInsertedHTML,\n} from '../../shared/lib/server-inserted-html.shared-runtime'\n\n/**\n *\n * This hook allows you to programmatically change routes inside [Client Component](https://nextjs.org/docs/app/building-your-application/rendering/client-components).\n *\n * @example\n * ```ts\n * \"use client\"\n * import { useRouter } from 'next/navigation'\n *\n * export default function Page() {\n * const router = useRouter()\n * // ...\n * router.push('/dashboard') // Navigate to /dashboard\n * }\n * ```\n *\n * Read more: [Next.js Docs: `useRouter`](https://nextjs.org/docs/app/api-reference/functions/use-router)\n */\n// Client components API\nexport function useRouter(): AppRouterInstance {\n const router = useContext(AppRouterContext)\n if (router === null) {\n throw new Error('invariant expected app router to be mounted')\n }\n\n return router\n}\n\n/**\n * A [Client Component](https://nextjs.org/docs/app/building-your-application/rendering/client-components) hook\n * that lets you read a route's dynamic params filled in by the current URL.\n *\n * @example\n * ```ts\n * \"use client\"\n * import { useParams } from 'next/navigation'\n *\n * export default function Page() {\n * // on /dashboard/[team] where pathname is /dashboard/nextjs\n * const { team } = useParams() // team === \"nextjs\"\n * }\n * ```\n *\n * Read more: [Next.js Docs: `useParams`](https://nextjs.org/docs/app/api-reference/functions/use-params)\n */\n// Client components API\nexport function useParams(): T {\n useDynamicRouteParams?.('useParams()')\n\n const params = useContext(PathParamsContext) as T\n\n // Instrument with Suspense DevTools (dev-only)\n if (process.env.NODE_ENV !== 'production' && 'use' in React) {\n const navigationPromises = use(NavigationPromisesContext)\n if (navigationPromises) {\n return use(navigationPromises.params) as T\n }\n }\n\n return params\n}\n\n/**\n * A [Client Component](https://nextjs.org/docs/app/building-your-application/rendering/client-components) hook\n * that lets you read the active route segments **below** the Layout it is called from.\n *\n * @example\n * ```ts\n * 'use client'\n *\n * import { useSelectedLayoutSegments } from 'next/navigation'\n *\n * export default function ExampleClientComponent() {\n * const segments = useSelectedLayoutSegments()\n *\n * return (\n *
    \n * {segments.map((segment, index) => (\n *
  • {segment}
  • \n * ))}\n *
\n * )\n * }\n * ```\n *\n * Read more: [Next.js Docs: `useSelectedLayoutSegments`](https://nextjs.org/docs/app/api-reference/functions/use-selected-layout-segments)\n */\n// Client components API\nexport function useSelectedLayoutSegments(\n parallelRouteKey: string = 'children'\n): string[] {\n useDynamicRouteParams?.('useSelectedLayoutSegments()')\n\n const context = useContext(LayoutRouterContext)\n // @ts-expect-error This only happens in `pages`. Type is overwritten in navigation.d.ts\n if (!context) return null\n\n // Instrument with Suspense DevTools (dev-only)\n if (process.env.NODE_ENV !== 'production' && 'use' in React) {\n const navigationPromises = use(NavigationPromisesContext)\n if (navigationPromises) {\n const promise =\n navigationPromises.selectedLayoutSegmentsPromises?.get(parallelRouteKey)\n if (promise) {\n // We should always have a promise here, but if we don't, it's not worth erroring over.\n // We just won't be able to instrument it, but can still provide the value.\n return use(promise)\n }\n }\n }\n\n return getSelectedLayoutSegmentPath(context.parentTree, parallelRouteKey)\n}\n\n/**\n * A [Client Component](https://nextjs.org/docs/app/building-your-application/rendering/client-components) hook\n * that lets you read the active route segment **one level below** the Layout it is called from.\n *\n * @example\n * ```ts\n * 'use client'\n * import { useSelectedLayoutSegment } from 'next/navigation'\n *\n * export default function ExampleClientComponent() {\n * const segment = useSelectedLayoutSegment()\n *\n * return

Active segment: {segment}

\n * }\n * ```\n *\n * Read more: [Next.js Docs: `useSelectedLayoutSegment`](https://nextjs.org/docs/app/api-reference/functions/use-selected-layout-segment)\n */\n// Client components API\nexport function useSelectedLayoutSegment(\n parallelRouteKey: string = 'children'\n): string | null {\n useDynamicRouteParams?.('useSelectedLayoutSegment()')\n const navigationPromises = useContext(NavigationPromisesContext)\n const selectedLayoutSegments = useSelectedLayoutSegments(parallelRouteKey)\n\n // Instrument with Suspense DevTools (dev-only)\n if (\n process.env.NODE_ENV !== 'production' &&\n navigationPromises &&\n 'use' in React\n ) {\n const promise =\n navigationPromises.selectedLayoutSegmentPromises?.get(parallelRouteKey)\n if (promise) {\n // We should always have a promise here, but if we don't, it's not worth erroring over.\n // We just won't be able to instrument it, but can still provide the value.\n return use(promise)\n }\n }\n\n return computeSelectedLayoutSegment(selectedLayoutSegments, parallelRouteKey)\n}\n\nexport { unstable_isUnrecognizedActionError } from './unrecognized-action-error'\n\n// Shared components APIs\nexport {\n // We need the same class that was used to instantiate the context value\n // Otherwise instanceof checks will fail in usercode\n ReadonlyURLSearchParams,\n}\nexport {\n notFound,\n forbidden,\n unauthorized,\n redirect,\n permanentRedirect,\n RedirectType,\n unstable_rethrow,\n} from './navigation.react-server'\n"],"names":["ReadonlyURLSearchParams","RedirectType","ServerInsertedHTMLContext","forbidden","notFound","permanentRedirect","redirect","unauthorized","unstable_isUnrecognizedActionError","unstable_rethrow","useParams","usePathname","useRouter","useSearchParams","useSelectedLayoutSegment","useSelectedLayoutSegments","useServerInsertedHTML","useDynamicRouteParams","window","require","undefined","useDynamicSearchParams","searchParams","useContext","SearchParamsContext","readonlySearchParams","useMemo","process","env","NODE_ENV","React","navigationPromises","use","NavigationPromisesContext","pathname","PathnameContext","router","AppRouterContext","Error","params","PathParamsContext","parallelRouteKey","context","LayoutRouterContext","promise","selectedLayoutSegmentsPromises","get","getSelectedLayoutSegmentPath","parentTree","selectedLayoutSegments","selectedLayoutSegmentPromises","computeSelectedLayoutSegment"],"mappings":"AA0EM2B,QAAQC,GAAG,CAACC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAsNxB,wEAAwE;IACxE,oDAAoD;IACpD7B,uBAAuB,EAAA;eAAvBA,iCAAAA,uBAAuB;;IAQvBC,YAAY,EAAA;eAAZA,uBAAAA,YAAY;;IAhLZC,yBAAyB,EAAA;eAAzBA,iCAAAA,yBAAyB;;IA4KzBC,SAAS,EAAA;eAATA,uBAAAA,SAAS;;IADTC,QAAQ,EAAA;eAARA,uBAAAA,QAAQ;;IAIRC,iBAAiB,EAAA;eAAjBA,uBAAAA,iBAAiB;;IADjBC,QAAQ,EAAA;eAARA,uBAAAA,QAAQ;;IADRC,YAAY,EAAA;eAAZA,uBAAAA,YAAY;;IAXLC,kCAAkC,EAAA;eAAlCA,yBAAAA,kCAAkC;;IAezCC,gBAAgB,EAAA;eAAhBA,uBAAAA,gBAAgB;;IA/HFC,SAAS,EAAA;eAATA;;IAtEAC,WAAW,EAAA;eAAXA;;IA2CAC,SAAS,EAAA;eAATA;;IA1FAC,eAAe,EAAA;eAAfA;;IA4MAC,wBAAwB,EAAA;eAAxBA;;IA7CAC,yBAAyB,EAAA;eAAzBA;;IA3FdC,qBAAqB,EAAA;eAArBA,iCAAAA,qBAAqB;;;;iEAzHyB;+CAKzC;iDAOA;yBAIA;iDA0GA;yCAgK4C;uCAgB5C;AAxRP,MAAMC,wBACJ,OAAOC,WAAW,cAEZC,QAAQ,qHACRF,qBAAqB,GACvBG;AAEN,MAAMC,yBACJ,OAAOH,WAAW,cAEZC,QAAQ,qHACRE,sBAAsB,GACxBD;AAuBC,SAASP;IACdQ,yBAAyB;IAEzB,MAAMC,eAAeC,CAAAA,GAAAA,OAAAA,UAAU,EAACC,iCAAAA,mBAAmB;IAEnD,8DAA8D;IAC9D,0EAA0E;IAC1E,kBAAkB;IAClB,MAAMC,uBAAuBC,CAAAA,GAAAA,OAAAA,OAAO,EAAC;QACnC,IAAI,CAACJ,cAAc;YACjB,yEAAyE;YACzE,aAAa;YACb,OAAO;QACT;QAEA,OAAO,IAAItB,iCAAAA,uBAAuB,CAACsB;IACrC,GAAG;QAACA;KAAa;IAEjB,+CAA+C;IAC/C,wDAA6B,gBAAgB,SAASQ,OAAAA,OAAK,EAAE;QAC3D,MAAMC,qBAAqBC,CAAAA,GAAAA,OAAAA,GAAG,EAACC,iCAAAA,yBAAyB;QACxD,IAAIF,oBAAoB;YACtB,OAAOC,CAAAA,GAAAA,OAAAA,GAAG,EAACD,mBAAmBT,YAAY;QAC5C;IACF;IAEA,OAAOG;AACT;AAoBO,SAASd;IACdM,wBAAwB;IAExB,8EAA8E;IAC9E,0EAA0E;IAC1E,MAAMiB,WAAWX,CAAAA,GAAAA,OAAAA,UAAU,EAACY,iCAAAA,eAAe;IAE3C,+CAA+C;IAC/C,IAAIR,QAAQC,GAAG,CAACC,QAAQ,gCAAK,gBAAgB,SAASC,OAAAA,OAAK,EAAE;QAC3D,MAAMC,qBAAqBC,CAAAA,GAAAA,OAAAA,GAAG,EAACC,iCAAAA,yBAAyB;QACxD,IAAIF,oBAAoB;YACtB,OAAOC,CAAAA,GAAAA,OAAAA,GAAG,EAACD,mBAAmBG,QAAQ;QACxC;IACF;IAEA,OAAOA;AACT;AA2BO,SAAStB;IACd,MAAMwB,SAASb,CAAAA,GAAAA,OAAAA,UAAU,EAACc,+BAAAA,gBAAgB;IAC1C,IAAID,WAAW,MAAM;QACnB,MAAM,OAAA,cAAwD,CAAxD,IAAIE,MAAM,gDAAV,qBAAA;mBAAA;wBAAA;0BAAA;QAAuD;IAC/D;IAEA,OAAOF;AACT;AAoBO,SAAS1B;IACdO,wBAAwB;IAExB,MAAMsB,SAAShB,CAAAA,GAAAA,OAAAA,UAAU,EAACiB,iCAAAA,iBAAiB;IAE3C,+CAA+C;IAC/C,IAAIb,QAAQC,GAAG,CAACC,QAAQ,gCAAK,gBAAgB,SAASC,OAAAA,OAAK,EAAE;QAC3D,MAAMC,qBAAqBC,CAAAA,GAAAA,OAAAA,GAAG,EAACC,iCAAAA,yBAAyB;QACxD,IAAIF,oBAAoB;YACtB,OAAOC,CAAAA,GAAAA,OAAAA,GAAG,EAACD,mBAAmBQ,MAAM;QACtC;IACF;IAEA,OAAOA;AACT;AA4BO,SAASxB,0BACd0B,mBAA2B,UAAU;IAErCxB,wBAAwB;IAExB,MAAMyB,UAAUnB,CAAAA,GAAAA,OAAAA,UAAU,EAACoB,+BAAAA,mBAAmB;IAC9C,wFAAwF;IACxF,IAAI,CAACD,SAAS,OAAO;IAErB,+CAA+C;IAC/C,IAAIf,QAAQC,GAAG,CAACC,QAAQ,gCAAK,gBAAgB,SAASC,OAAAA,OAAK,EAAE;QAC3D,MAAMC,qBAAqBC,CAAAA,GAAAA,OAAAA,GAAG,EAACC,iCAAAA,yBAAyB;QACxD,IAAIF,oBAAoB;YACtB,MAAMa,UACJb,mBAAmBc,8BAA8B,EAAEC,IAAIL;YACzD,IAAIG,SAAS;gBACX,uFAAuF;gBACvF,2EAA2E;gBAC3E,OAAOZ,CAAAA,GAAAA,OAAAA,GAAG,EAACY;YACb;QACF;IACF;IAEA,OAAOG,CAAAA,GAAAA,SAAAA,4BAA4B,EAACL,QAAQM,UAAU,EAAEP;AAC1D;AAqBO,SAAS3B,yBACd2B,mBAA2B,UAAU;IAErCxB,wBAAwB;IACxB,MAAMc,qBAAqBR,CAAAA,GAAAA,OAAAA,UAAU,EAACU,iCAAAA,yBAAyB;IAC/D,MAAMgB,yBAAyBlC,0BAA0B0B;IAEzD,+CAA+C;IAC/C,IACEd,QAAQC,GAAG,CAACC,QAAQ,gCAAK,gBACzBE,sBACA,SAASD,OAAAA,OAAK,EACd;QACA,MAAMc,UACJb,mBAAmBmB,6BAA6B,EAAEJ,IAAIL;QACxD,IAAIG,SAAS;YACX,uFAAuF;YACvF,2EAA2E;YAC3E,OAAOZ,CAAAA,GAAAA,OAAAA,GAAG,EAACY;QACb;IACF;IAEA,OAAOO,CAAAA,GAAAA,SAAAA,4BAA4B,EAACF,wBAAwBR;AAC9D","ignoreList":[0]}}, + {"offset": {"line": 10108, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/redirect-boundary.tsx"],"sourcesContent":["'use client'\nimport React, { useEffect } from 'react'\nimport type { AppRouterInstance } from '../../shared/lib/app-router-context.shared-runtime'\nimport { useRouter } from './navigation'\nimport { getRedirectTypeFromError, getURLFromRedirectError } from './redirect'\nimport { RedirectType, isRedirectError } from './redirect-error'\n\ninterface RedirectBoundaryProps {\n router: AppRouterInstance\n children: React.ReactNode\n}\n\nfunction HandleRedirect({\n redirect,\n reset,\n redirectType,\n}: {\n redirect: string\n redirectType: RedirectType\n reset: () => void\n}) {\n const router = useRouter()\n\n useEffect(() => {\n React.startTransition(() => {\n if (redirectType === RedirectType.push) {\n router.push(redirect, {})\n } else {\n router.replace(redirect, {})\n }\n reset()\n })\n }, [redirect, redirectType, reset, router])\n\n return null\n}\n\nexport class RedirectErrorBoundary extends React.Component<\n RedirectBoundaryProps,\n { redirect: string | null; redirectType: RedirectType | null }\n> {\n constructor(props: RedirectBoundaryProps) {\n super(props)\n this.state = { redirect: null, redirectType: null }\n }\n\n static getDerivedStateFromError(error: any) {\n if (isRedirectError(error)) {\n const url = getURLFromRedirectError(error)\n const redirectType = getRedirectTypeFromError(error)\n if ('handled' in error) {\n // The redirect was already handled. We'll still catch the redirect error\n // so that we can remount the subtree, but we don't actually need to trigger the\n // router.push.\n return { redirect: null, redirectType: null }\n }\n\n return { redirect: url, redirectType }\n }\n // Re-throw if error is not for redirect\n throw error\n }\n\n // Explicit type is needed to avoid the generated `.d.ts` having a wide return type that could be specific to the `@types/react` version.\n render(): React.ReactNode {\n const { redirect, redirectType } = this.state\n if (redirect !== null && redirectType !== null) {\n return (\n this.setState({ redirect: null })}\n />\n )\n }\n\n return this.props.children\n }\n}\n\nexport function RedirectBoundary({ children }: { children: React.ReactNode }) {\n const router = useRouter()\n return (\n {children}\n )\n}\n"],"names":["RedirectBoundary","RedirectErrorBoundary","HandleRedirect","redirect","reset","redirectType","router","useRouter","useEffect","React","startTransition","RedirectType","push","replace","Component","constructor","props","state","getDerivedStateFromError","error","isRedirectError","url","getURLFromRedirectError","getRedirectTypeFromError","render","setState","children"],"mappings":";;;;;;;;;;;;;;IAgFgBA,gBAAgB,EAAA;eAAhBA;;IA3CHC,qBAAqB,EAAA;eAArBA;;;;;iEApCoB;4BAEP;0BACwC;+BACpB;AAO9C,SAASC,eAAe,EACtBC,QAAQ,EACRC,KAAK,EACLC,YAAY,EAKb;IACC,MAAMC,SAASC,CAAAA,GAAAA,YAAAA,SAAS;IAExBC,CAAAA,GAAAA,OAAAA,SAAS,EAAC;QACRC,OAAAA,OAAK,CAACC,eAAe,CAAC;YACpB,IAAIL,iBAAiBM,eAAAA,YAAY,CAACC,IAAI,EAAE;gBACtCN,OAAOM,IAAI,CAACT,UAAU,CAAC;YACzB,OAAO;gBACLG,OAAOO,OAAO,CAACV,UAAU,CAAC;YAC5B;YACAC;QACF;IACF,GAAG;QAACD;QAAUE;QAAcD;QAAOE;KAAO;IAE1C,OAAO;AACT;AAEO,MAAML,8BAA8BQ,OAAAA,OAAK,CAACK,SAAS;IAIxDC,YAAYC,KAA4B,CAAE;QACxC,KAAK,CAACA;QACN,IAAI,CAACC,KAAK,GAAG;YAAEd,UAAU;YAAME,cAAc;QAAK;IACpD;IAEA,OAAOa,yBAAyBC,KAAU,EAAE;QAC1C,IAAIC,CAAAA,GAAAA,eAAAA,eAAe,EAACD,QAAQ;YAC1B,MAAME,MAAMC,CAAAA,GAAAA,UAAAA,uBAAuB,EAACH;YACpC,MAAMd,eAAekB,CAAAA,GAAAA,UAAAA,wBAAwB,EAACJ;YAC9C,IAAI,aAAaA,OAAO;gBACtB,yEAAyE;gBACzE,gFAAgF;gBAChF,eAAe;gBACf,OAAO;oBAAEhB,UAAU;oBAAME,cAAc;gBAAK;YAC9C;YAEA,OAAO;gBAAEF,UAAUkB;gBAAKhB;YAAa;QACvC;QACA,wCAAwC;QACxC,MAAMc;IACR;IAEA,yIAAyI;IACzIK,SAA0B;QACxB,MAAM,EAAErB,QAAQ,EAAEE,YAAY,EAAE,GAAG,IAAI,CAACY,KAAK;QAC7C,IAAId,aAAa,QAAQE,iBAAiB,MAAM;YAC9C,OAAA,WAAA,GACE,CAAA,GAAA,YAAA,GAAA,EAACH,gBAAAA;gBACCC,UAAUA;gBACVE,cAAcA;gBACdD,OAAO,IAAM,IAAI,CAACqB,QAAQ,CAAC;wBAAEtB,UAAU;oBAAK;;QAGlD;QAEA,OAAO,IAAI,CAACa,KAAK,CAACU,QAAQ;IAC5B;AACF;AAEO,SAAS1B,iBAAiB,EAAE0B,QAAQ,EAAiC;IAC1E,MAAMpB,SAASC,CAAAA,GAAAA,YAAAA,SAAS;IACxB,OAAA,WAAA,GACE,CAAA,GAAA,YAAA,GAAA,EAACN,uBAAAA;QAAsBK,QAAQA;kBAASoB;;AAE5C","ignoreList":[0]}}, + {"offset": {"line": 10216, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/router-reducer/reducers/find-head-in-cache.ts"],"sourcesContent":["import type {\n FlightRouterState,\n CacheNode,\n} from '../../../../shared/lib/app-router-types'\nimport { DEFAULT_SEGMENT_KEY } from '../../../../shared/lib/segment'\nimport { createRouterCacheKey } from '../create-router-cache-key'\n\nexport function findHeadInCache(\n cache: CacheNode,\n parallelRoutes: FlightRouterState[1]\n): [CacheNode, string, string] | null {\n return findHeadInCacheImpl(cache, parallelRoutes, '', '')\n}\n\nfunction findHeadInCacheImpl(\n cache: CacheNode,\n parallelRoutes: FlightRouterState[1],\n keyPrefix: string,\n keyPrefixWithoutSearchParams: string\n): [CacheNode, string, string] | null {\n const isLastItem = Object.keys(parallelRoutes).length === 0\n if (isLastItem) {\n // Returns the entire Cache Node of the segment whose head we will render.\n return [cache, keyPrefix, keyPrefixWithoutSearchParams]\n }\n\n // First try the 'children' parallel route if it exists\n // when starting from the \"root\", this corresponds with the main page component\n const parallelRoutesKeys = Object.keys(parallelRoutes).filter(\n (key) => key !== 'children'\n )\n\n // if we are at the root, we need to check the children slot first\n if ('children' in parallelRoutes) {\n parallelRoutesKeys.unshift('children')\n }\n\n for (const key of parallelRoutesKeys) {\n const [segment, childParallelRoutes] = parallelRoutes[key]\n // If the parallel is not matched and using the default segment,\n // skip searching the head from it.\n if (segment === DEFAULT_SEGMENT_KEY) {\n continue\n }\n const childSegmentMap = cache.parallelRoutes.get(key)\n if (!childSegmentMap) {\n continue\n }\n\n const cacheKey = createRouterCacheKey(segment)\n const cacheKeyWithoutSearchParams = createRouterCacheKey(segment, true)\n\n const cacheNode = childSegmentMap.get(cacheKey)\n if (!cacheNode) {\n continue\n }\n\n const item = findHeadInCacheImpl(\n cacheNode,\n childParallelRoutes,\n keyPrefix + '/' + cacheKey,\n keyPrefix + '/' + cacheKeyWithoutSearchParams\n )\n\n if (item) {\n return item\n }\n }\n\n return null\n}\n"],"names":["findHeadInCache","cache","parallelRoutes","findHeadInCacheImpl","keyPrefix","keyPrefixWithoutSearchParams","isLastItem","Object","keys","length","parallelRoutesKeys","filter","key","unshift","segment","childParallelRoutes","DEFAULT_SEGMENT_KEY","childSegmentMap","get","cacheKey","createRouterCacheKey","cacheKeyWithoutSearchParams","cacheNode","item"],"mappings":";;;+BAOgBA,mBAAAA;;;eAAAA;;;yBAHoB;sCACC;AAE9B,SAASA,gBACdC,KAAgB,EAChBC,cAAoC;IAEpC,OAAOC,oBAAoBF,OAAOC,gBAAgB,IAAI;AACxD;AAEA,SAASC,oBACPF,KAAgB,EAChBC,cAAoC,EACpCE,SAAiB,EACjBC,4BAAoC;IAEpC,MAAMC,aAAaC,OAAOC,IAAI,CAACN,gBAAgBO,MAAM,KAAK;IAC1D,IAAIH,YAAY;QACd,0EAA0E;QAC1E,OAAO;YAACL;YAAOG;YAAWC;SAA6B;IACzD;IAEA,uDAAuD;IACvD,+EAA+E;IAC/E,MAAMK,qBAAqBH,OAAOC,IAAI,CAACN,gBAAgBS,MAAM,CAC3D,CAACC,MAAQA,QAAQ;IAGnB,kEAAkE;IAClE,IAAI,cAAcV,gBAAgB;QAChCQ,mBAAmBG,OAAO,CAAC;IAC7B;IAEA,KAAK,MAAMD,OAAOF,mBAAoB;QACpC,MAAM,CAACI,SAASC,oBAAoB,GAAGb,cAAc,CAACU,IAAI;QAC1D,gEAAgE;QAChE,mCAAmC;QACnC,IAAIE,YAAYE,SAAAA,mBAAmB,EAAE;YACnC;QACF;QACA,MAAMC,kBAAkBhB,MAAMC,cAAc,CAACgB,GAAG,CAACN;QACjD,IAAI,CAACK,iBAAiB;YACpB;QACF;QAEA,MAAME,WAAWC,CAAAA,GAAAA,sBAAAA,oBAAoB,EAACN;QACtC,MAAMO,8BAA8BD,CAAAA,GAAAA,sBAAAA,oBAAoB,EAACN,SAAS;QAElE,MAAMQ,YAAYL,gBAAgBC,GAAG,CAACC;QACtC,IAAI,CAACG,WAAW;YACd;QACF;QAEA,MAAMC,OAAOpB,oBACXmB,WACAP,qBACAX,YAAY,MAAMe,UAClBf,YAAY,MAAMiB;QAGpB,IAAIE,MAAM;YACR,OAAOA;QACT;IACF;IAEA,OAAO;AACT","ignoreList":[0]}}, + {"offset": {"line": 10282, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/unresolved-thenable.ts"],"sourcesContent":["/**\n * Create a \"Thenable\" that does not resolve. This is used to suspend indefinitely when data is not available yet.\n */\nexport const unresolvedThenable = {\n then: () => {},\n} as PromiseLike\n"],"names":["unresolvedThenable","then"],"mappings":"AAAA;;CAEC;;;+BACYA,sBAAAA;;;eAAAA;;;AAAN,MAAMA,qBAAqB;IAChCC,MAAM,KAAO;AACf","ignoreList":[0]}}, + {"offset": {"line": 10307, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/errors/graceful-degrade-boundary.tsx"],"sourcesContent":["'use client'\n\nimport { Component, createRef, type ReactNode } from 'react'\n\ninterface ErrorBoundaryProps {\n children: ReactNode\n}\n\ninterface ErrorBoundaryState {\n hasError: boolean\n}\n\nfunction getDomNodeAttributes(node: HTMLElement): Record {\n const result: Record = {}\n for (let i = 0; i < node.attributes.length; i++) {\n const attr = node.attributes[i]\n result[attr.name] = attr.value\n }\n return result\n}\n\nexport class GracefulDegradeBoundary extends Component<\n ErrorBoundaryProps,\n ErrorBoundaryState\n> {\n private rootHtml: string\n private htmlAttributes: Record\n private htmlRef: React.RefObject\n\n constructor(props: ErrorBoundaryProps) {\n super(props)\n this.state = { hasError: false }\n this.rootHtml = ''\n this.htmlAttributes = {}\n this.htmlRef = createRef()\n }\n\n static getDerivedStateFromError(_: unknown): ErrorBoundaryState {\n return { hasError: true }\n }\n\n componentDidMount() {\n const htmlNode = this.htmlRef.current\n if (this.state.hasError && htmlNode) {\n // Reapply the cached HTML attributes to the root element\n Object.entries(this.htmlAttributes).forEach(([key, value]) => {\n htmlNode.setAttribute(key, value)\n })\n }\n }\n\n render() {\n const { hasError } = this.state\n // Cache the root HTML content on the first render\n if (typeof window !== 'undefined' && !this.rootHtml) {\n this.rootHtml = document.documentElement.innerHTML\n this.htmlAttributes = getDomNodeAttributes(document.documentElement)\n }\n\n if (hasError) {\n // Render the current HTML content without hydration\n return (\n \n )\n }\n\n return this.props.children\n }\n}\n\nexport default GracefulDegradeBoundary\n"],"names":["GracefulDegradeBoundary","getDomNodeAttributes","node","result","i","attributes","length","attr","name","value","Component","constructor","props","state","hasError","rootHtml","htmlAttributes","htmlRef","createRef","getDerivedStateFromError","_","componentDidMount","htmlNode","current","Object","entries","forEach","key","setAttribute","render","window","document","documentElement","innerHTML","html","ref","suppressHydrationWarning","dangerouslySetInnerHTML","__html","children"],"mappings":";;;;;;;;;;;;;;IAqBaA,uBAAuB,EAAA;eAAvBA;;IAuDb,OAAsC,EAAA;eAAtC;;;;uBA1EqD;AAUrD,SAASC,qBAAqBC,IAAiB;IAC7C,MAAMC,SAAiC,CAAC;IACxC,IAAK,IAAIC,IAAI,GAAGA,IAAIF,KAAKG,UAAU,CAACC,MAAM,EAAEF,IAAK;QAC/C,MAAMG,OAAOL,KAAKG,UAAU,CAACD,EAAE;QAC/BD,MAAM,CAACI,KAAKC,IAAI,CAAC,GAAGD,KAAKE,KAAK;IAChC;IACA,OAAON;AACT;AAEO,MAAMH,gCAAgCU,OAAAA,SAAS;IAQpDC,YAAYC,KAAyB,CAAE;QACrC,KAAK,CAACA;QACN,IAAI,CAACC,KAAK,GAAG;YAAEC,UAAU;QAAM;QAC/B,IAAI,CAACC,QAAQ,GAAG;QAChB,IAAI,CAACC,cAAc,GAAG,CAAC;QACvB,IAAI,CAACC,OAAO,GAAA,WAAA,GAAGC,CAAAA,GAAAA,OAAAA,SAAS;IAC1B;IAEA,OAAOC,yBAAyBC,CAAU,EAAsB;QAC9D,OAAO;YAAEN,UAAU;QAAK;IAC1B;IAEAO,oBAAoB;QAClB,MAAMC,WAAW,IAAI,CAACL,OAAO,CAACM,OAAO;QACrC,IAAI,IAAI,CAACV,KAAK,CAACC,QAAQ,IAAIQ,UAAU;YACnC,yDAAyD;YACzDE,OAAOC,OAAO,CAAC,IAAI,CAACT,cAAc,EAAEU,OAAO,CAAC,CAAC,CAACC,KAAKlB,MAAM;gBACvDa,SAASM,YAAY,CAACD,KAAKlB;YAC7B;QACF;IACF;IAEAoB,SAAS;QACP,MAAM,EAAEf,QAAQ,EAAE,GAAG,IAAI,CAACD,KAAK;QAC/B,kDAAkD;QAClD,IAAI,OAAOiB,WAAW,eAAe,CAAC,IAAI,CAACf,QAAQ,EAAE;YACnD,IAAI,CAACA,QAAQ,GAAGgB,SAASC,eAAe,CAACC,SAAS;YAClD,IAAI,CAACjB,cAAc,GAAGf,qBAAqB8B,SAASC,eAAe;QACrE;QAEA,IAAIlB,UAAU;YACZ,oDAAoD;YACpD,OAAA,WAAA,GACE,CAAA,GAAA,YAAA,GAAA,EAACoB,QAAAA;gBACCC,KAAK,IAAI,CAAClB,OAAO;gBACjBmB,wBAAwB,EAAA;gBACxBC,yBAAyB;oBACvBC,QAAQ,IAAI,CAACvB,QAAQ;gBACvB;;QAGN;QAEA,OAAO,IAAI,CAACH,KAAK,CAAC2B,QAAQ;IAC5B;AACF;MAEA,WAAevC","ignoreList":[0]}}, + {"offset": {"line": 10394, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/errors/root-error-boundary.tsx"],"sourcesContent":["'use client'\n\nimport React, { type JSX } from 'react'\nimport GracefulDegradeBoundary from './graceful-degrade-boundary'\nimport { ErrorBoundary, type ErrorBoundaryProps } from '../error-boundary'\nimport { isBot } from '../../../shared/lib/router/utils/is-bot'\n\nconst isBotUserAgent =\n typeof window !== 'undefined' && isBot(window.navigator.userAgent)\n\nexport default function RootErrorBoundary({\n children,\n errorComponent,\n errorStyles,\n errorScripts,\n}: ErrorBoundaryProps & { children: React.ReactNode }): JSX.Element {\n if (isBotUserAgent) {\n // Preserve existing DOM/HTML for bots to avoid replacing content with an error UI\n // and to keep the original SSR output intact.\n return {children}\n }\n\n return (\n \n {children}\n \n )\n}\n"],"names":["RootErrorBoundary","isBotUserAgent","window","isBot","navigator","userAgent","children","errorComponent","errorStyles","errorScripts","GracefulDegradeBoundary","ErrorBoundary"],"mappings":";;;+BAUA,WAAA;;;eAAwBA;;;;;gEARQ;kFACI;+BACmB;uBACjC;AAEtB,MAAMC,iBACJ,OAAOC,WAAW,eAAeC,CAAAA,GAAAA,OAAAA,KAAK,EAACD,OAAOE,SAAS,CAACC,SAAS;AAEpD,SAASL,kBAAkB,EACxCM,QAAQ,EACRC,cAAc,EACdC,WAAW,EACXC,YAAY,EACuC;IACnD,IAAIR,gBAAgB;QAClB,kFAAkF;QAClF,8CAA8C;QAC9C,OAAA,WAAA,GAAO,CAAA,GAAA,YAAA,GAAA,EAACS,yBAAAA,OAAuB,EAAA;sBAAEJ;;IACnC;IAEA,OAAA,WAAA,GACE,CAAA,GAAA,YAAA,GAAA,EAACK,eAAAA,aAAa,EAAA;QACZJ,gBAAgBA;QAChBC,aAAaA;QACbC,cAAcA;kBAEbH;;AAGP","ignoreList":[0]}}, + {"offset": {"line": 10436, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/navigation-devtools.ts"],"sourcesContent":["import type { FlightRouterState } from '../../shared/lib/app-router-types'\nimport type { Params } from '../../server/request/params'\nimport {\n createDevToolsInstrumentedPromise,\n ReadonlyURLSearchParams,\n type InstrumentedPromise,\n type NavigationPromises,\n} from '../../shared/lib/hooks-client-context.shared-runtime'\nimport {\n computeSelectedLayoutSegment,\n getSelectedLayoutSegmentPath,\n} from '../../shared/lib/segment'\n\n/**\n * Promises are cached by tree to ensure stability across suspense retries.\n */\ntype LayoutSegmentPromisesCache = {\n selectedLayoutSegmentPromises: Map>\n selectedLayoutSegmentsPromises: Map>\n}\n\nconst layoutSegmentPromisesCache = new WeakMap<\n FlightRouterState,\n LayoutSegmentPromisesCache\n>()\n\n/**\n * Creates instrumented promises for layout segment hooks at a given tree level.\n * This is dev-only code for React Suspense DevTools instrumentation.\n */\nfunction createLayoutSegmentPromises(\n tree: FlightRouterState\n): LayoutSegmentPromisesCache | null {\n if (process.env.NODE_ENV === 'production') {\n return null\n }\n\n // Check if we already have cached promises for this tree\n const cached = layoutSegmentPromisesCache.get(tree)\n if (cached) {\n return cached\n }\n\n // Create new promises and cache them\n const segmentPromises = new Map>()\n const segmentsPromises = new Map>()\n\n const parallelRoutes = tree[1]\n for (const parallelRouteKey of Object.keys(parallelRoutes)) {\n const segments = getSelectedLayoutSegmentPath(tree, parallelRouteKey)\n\n // Use the shared logic to compute the segment value\n const segment = computeSelectedLayoutSegment(segments, parallelRouteKey)\n\n segmentPromises.set(\n parallelRouteKey,\n createDevToolsInstrumentedPromise('useSelectedLayoutSegment', segment)\n )\n segmentsPromises.set(\n parallelRouteKey,\n createDevToolsInstrumentedPromise('useSelectedLayoutSegments', segments)\n )\n }\n\n const result: LayoutSegmentPromisesCache = {\n selectedLayoutSegmentPromises: segmentPromises,\n selectedLayoutSegmentsPromises: segmentsPromises,\n }\n\n // Cache the result for future renders\n layoutSegmentPromisesCache.set(tree, result)\n\n return result\n}\n\nconst rootNavigationPromisesCache = new WeakMap<\n FlightRouterState,\n Map\n>()\n\n/**\n * Creates instrumented navigation promises for the root app-router.\n */\nexport function createRootNavigationPromises(\n tree: FlightRouterState,\n pathname: string,\n searchParams: URLSearchParams,\n pathParams: Params\n): NavigationPromises | null {\n if (process.env.NODE_ENV === 'production') {\n return null\n }\n\n // Create stable cache keys from the values\n const searchParamsString = searchParams.toString()\n const pathParamsString = JSON.stringify(pathParams)\n const cacheKey = `${pathname}:${searchParamsString}:${pathParamsString}`\n\n // Get or create the cache for this tree\n let treeCache = rootNavigationPromisesCache.get(tree)\n if (!treeCache) {\n treeCache = new Map()\n rootNavigationPromisesCache.set(tree, treeCache)\n }\n\n // Check if we have cached promises for this combination\n const cached = treeCache.get(cacheKey)\n if (cached) {\n return cached\n }\n\n const readonlySearchParams = new ReadonlyURLSearchParams(searchParams)\n\n const layoutSegmentPromises = createLayoutSegmentPromises(tree)\n\n const promises: NavigationPromises = {\n pathname: createDevToolsInstrumentedPromise('usePathname', pathname),\n searchParams: createDevToolsInstrumentedPromise(\n 'useSearchParams',\n readonlySearchParams\n ),\n params: createDevToolsInstrumentedPromise('useParams', pathParams),\n ...layoutSegmentPromises,\n }\n\n treeCache.set(cacheKey, promises)\n\n return promises\n}\n\nconst nestedLayoutPromisesCache = new WeakMap<\n FlightRouterState,\n Map\n>()\n\n/**\n * Creates merged navigation promises for nested layouts.\n * Merges parent promises with layout-specific segment promises.\n */\nexport function createNestedLayoutNavigationPromises(\n tree: FlightRouterState,\n parentNavPromises: NavigationPromises | null\n): NavigationPromises | null {\n if (process.env.NODE_ENV === 'production') {\n return null\n }\n\n const parallelRoutes = tree[1]\n const parallelRouteKeys = Object.keys(parallelRoutes)\n\n // Only create promises if there are parallel routes at this level\n if (parallelRouteKeys.length === 0) {\n return null\n }\n\n // Get or create the cache for this tree\n let treeCache = nestedLayoutPromisesCache.get(tree)\n if (!treeCache) {\n treeCache = new Map()\n nestedLayoutPromisesCache.set(tree, treeCache)\n }\n\n // Check if we have cached promises for this parent combination\n const cached = treeCache.get(parentNavPromises)\n if (cached) {\n return cached\n }\n\n // Create merged promises\n const layoutSegmentPromises = createLayoutSegmentPromises(tree)\n const promises: NavigationPromises = {\n ...parentNavPromises!,\n ...layoutSegmentPromises,\n }\n\n treeCache.set(parentNavPromises, promises)\n\n return promises\n}\n"],"names":["createNestedLayoutNavigationPromises","createRootNavigationPromises","layoutSegmentPromisesCache","WeakMap","createLayoutSegmentPromises","tree","process","env","NODE_ENV","cached","get","segmentPromises","Map","segmentsPromises","parallelRoutes","parallelRouteKey","Object","keys","segments","getSelectedLayoutSegmentPath","segment","computeSelectedLayoutSegment","set","createDevToolsInstrumentedPromise","result","selectedLayoutSegmentPromises","selectedLayoutSegmentsPromises","rootNavigationPromisesCache","pathname","searchParams","pathParams","searchParamsString","toString","pathParamsString","JSON","stringify","cacheKey","treeCache","readonlySearchParams","ReadonlyURLSearchParams","layoutSegmentPromises","promises","params","nestedLayoutPromisesCache","parentNavPromises","parallelRouteKeys","length"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 10563, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/http-access-fallback/error-boundary.tsx"],"sourcesContent":["'use client'\n\n/**\n * HTTPAccessFallbackBoundary is a boundary that catches errors and renders a\n * fallback component for HTTP errors.\n *\n * It receives the status code, and determine if it should render fallbacks for few HTTP 4xx errors.\n *\n * e.g. 404\n * 404 represents not found, and the fallback component pair contains the component and its styles.\n *\n */\n\nimport React, { useContext } from 'react'\nimport { useUntrackedPathname } from '../navigation-untracked'\nimport {\n HTTPAccessErrorStatus,\n getAccessFallbackHTTPStatus,\n getAccessFallbackErrorTypeByStatus,\n isHTTPAccessFallbackError,\n} from './http-access-fallback'\nimport { warnOnce } from '../../../shared/lib/utils/warn-once'\nimport { MissingSlotContext } from '../../../shared/lib/app-router-context.shared-runtime'\n\ninterface HTTPAccessFallbackBoundaryProps {\n notFound?: React.ReactNode\n forbidden?: React.ReactNode\n unauthorized?: React.ReactNode\n // TODO: Make this required once `React.createElement` understands that positional args go into children\n children?: React.ReactNode\n missingSlots?: Set\n}\n\ninterface HTTPAccessFallbackErrorBoundaryProps\n extends HTTPAccessFallbackBoundaryProps {\n pathname: string | null\n missingSlots?: Set\n}\n\ninterface HTTPAccessBoundaryState {\n triggeredStatus: number | undefined\n previousPathname: string | null\n}\n\nclass HTTPAccessFallbackErrorBoundary extends React.Component<\n HTTPAccessFallbackErrorBoundaryProps,\n HTTPAccessBoundaryState\n> {\n constructor(props: HTTPAccessFallbackErrorBoundaryProps) {\n super(props)\n this.state = {\n triggeredStatus: undefined,\n previousPathname: props.pathname,\n }\n }\n\n componentDidCatch(): void {\n if (\n process.env.NODE_ENV === 'development' &&\n this.props.missingSlots &&\n this.props.missingSlots.size > 0 &&\n // A missing children slot is the typical not-found case, so no need to warn\n !this.props.missingSlots.has('children')\n ) {\n let warningMessage =\n 'No default component was found for a parallel route rendered on this page. Falling back to nearest NotFound boundary.\\n' +\n 'Learn more: https://nextjs.org/docs/app/building-your-application/routing/parallel-routes#defaultjs\\n\\n'\n\n const formattedSlots = Array.from(this.props.missingSlots)\n .sort((a, b) => a.localeCompare(b))\n .map((slot) => `@${slot}`)\n .join(', ')\n\n warningMessage += 'Missing slots: ' + formattedSlots\n\n warnOnce(warningMessage)\n }\n }\n\n static getDerivedStateFromError(error: any) {\n if (isHTTPAccessFallbackError(error)) {\n const httpStatus = getAccessFallbackHTTPStatus(error)\n return {\n triggeredStatus: httpStatus,\n }\n }\n // Re-throw if error is not for 404\n throw error\n }\n\n static getDerivedStateFromProps(\n props: HTTPAccessFallbackErrorBoundaryProps,\n state: HTTPAccessBoundaryState\n ): HTTPAccessBoundaryState | null {\n /**\n * Handles reset of the error boundary when a navigation happens.\n * Ensures the error boundary does not stay enabled when navigating to a new page.\n * Approach of setState in render is safe as it checks the previous pathname and then overrides\n * it as outlined in https://react.dev/reference/react/useState#storing-information-from-previous-renders\n */\n if (props.pathname !== state.previousPathname && state.triggeredStatus) {\n return {\n triggeredStatus: undefined,\n previousPathname: props.pathname,\n }\n }\n return {\n triggeredStatus: state.triggeredStatus,\n previousPathname: props.pathname,\n }\n }\n\n render() {\n const { notFound, forbidden, unauthorized, children } = this.props\n const { triggeredStatus } = this.state\n const errorComponents = {\n [HTTPAccessErrorStatus.NOT_FOUND]: notFound,\n [HTTPAccessErrorStatus.FORBIDDEN]: forbidden,\n [HTTPAccessErrorStatus.UNAUTHORIZED]: unauthorized,\n }\n\n if (triggeredStatus) {\n const isNotFound =\n triggeredStatus === HTTPAccessErrorStatus.NOT_FOUND && notFound\n const isForbidden =\n triggeredStatus === HTTPAccessErrorStatus.FORBIDDEN && forbidden\n const isUnauthorized =\n triggeredStatus === HTTPAccessErrorStatus.UNAUTHORIZED && unauthorized\n\n // If there's no matched boundary in this layer, keep throwing the error by rendering the children\n if (!(isNotFound || isForbidden || isUnauthorized)) {\n return children\n }\n\n return (\n <>\n \n {process.env.NODE_ENV === 'development' && (\n \n )}\n {errorComponents[triggeredStatus]}\n \n )\n }\n\n return children\n }\n}\n\nexport function HTTPAccessFallbackBoundary({\n notFound,\n forbidden,\n unauthorized,\n children,\n}: HTTPAccessFallbackBoundaryProps) {\n // When we're rendering the missing params shell, this will return null. This\n // is because we won't be rendering any not found boundaries or error\n // boundaries for the missing params shell. When this runs on the client\n // (where these error can occur), we will get the correct pathname.\n const pathname = useUntrackedPathname()\n const missingSlots = useContext(MissingSlotContext)\n const hasErrorFallback = !!(notFound || forbidden || unauthorized)\n\n if (hasErrorFallback) {\n return (\n \n {children}\n \n )\n }\n\n return <>{children}\n}\n"],"names":["HTTPAccessFallbackBoundary","HTTPAccessFallbackErrorBoundary","React","Component","constructor","props","state","triggeredStatus","undefined","previousPathname","pathname","componentDidCatch","process","env","NODE_ENV","missingSlots","size","has","warningMessage","formattedSlots","Array","from","sort","a","b","localeCompare","map","slot","join","warnOnce","getDerivedStateFromError","error","isHTTPAccessFallbackError","httpStatus","getAccessFallbackHTTPStatus","getDerivedStateFromProps","render","notFound","forbidden","unauthorized","children","errorComponents","HTTPAccessErrorStatus","NOT_FOUND","FORBIDDEN","UNAUTHORIZED","isNotFound","isForbidden","isUnauthorized","meta","name","content","getAccessFallbackErrorTypeByStatus","useUntrackedPathname","useContext","MissingSlotContext","hasErrorFallback"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 10692, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/dev-root-http-access-fallback-boundary.tsx"],"sourcesContent":["'use client'\n\nimport React from 'react'\nimport { HTTPAccessFallbackBoundary } from './http-access-fallback/error-boundary'\n\n// TODO: error on using forbidden and unauthorized in root layout\nexport function bailOnRootNotFound() {\n throw new Error('notFound() is not allowed to use in root layout')\n}\n\nfunction NotAllowedRootHTTPFallbackError() {\n bailOnRootNotFound()\n return null\n}\n\nexport function DevRootHTTPAccessFallbackBoundary({\n children,\n}: {\n children: React.ReactNode\n}) {\n return (\n }>\n {children}\n \n )\n}\n"],"names":["DevRootHTTPAccessFallbackBoundary","bailOnRootNotFound","Error","NotAllowedRootHTTPFallbackError","children","HTTPAccessFallbackBoundary","notFound"],"mappings":";;;;;;;;;;;;;;IAegBA,iCAAiC,EAAA;eAAjCA;;IATAC,kBAAkB,EAAA;eAAlBA;;;;;gEAJE;+BACyB;AAGpC,SAASA;IACd,MAAM,OAAA,cAA4D,CAA5D,IAAIC,MAAM,oDAAV,qBAAA;eAAA;oBAAA;sBAAA;IAA2D;AACnE;AAEA,SAASC;IACPF;IACA,OAAO;AACT;AAEO,SAASD,kCAAkC,EAChDI,QAAQ,EAGT;IACC,OAAA,WAAA,GACE,CAAA,GAAA,YAAA,GAAA,EAACC,eAAAA,0BAA0B,EAAA;QAACC,UAAAA,WAAAA,GAAU,CAAA,GAAA,YAAA,GAAA,EAACH,iCAAAA,CAAAA;kBACpCC;;AAGP","ignoreList":[0]}}, + {"offset": {"line": 10745, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/dev/hot-reloader/shared.ts"],"sourcesContent":["import type { HmrMessageSentToBrowser } from '../../../server/dev/hot-reloader-types'\n\nexport const REACT_REFRESH_FULL_RELOAD =\n '[Fast Refresh] performing full reload\\n\\n' +\n \"Fast Refresh will perform a full reload when you edit a file that's imported by modules outside of the React rendering tree.\\n\" +\n 'You might have a file which exports a React component but also exports a value that is imported by a non-React component file.\\n' +\n 'Consider migrating the non-React component export to a separate file and importing it into both files.\\n\\n' +\n 'It is also possible the parent component of the component you edited is a class component, which disables Fast Refresh.\\n' +\n 'Fast Refresh requires at least one parent function component in your React tree.'\n\nexport const REACT_REFRESH_FULL_RELOAD_FROM_ERROR =\n '[Fast Refresh] performing full reload because your application had an unrecoverable error'\n\nexport function reportInvalidHmrMessage(\n message: HmrMessageSentToBrowser | MessageEvent,\n err: unknown\n) {\n console.warn(\n '[HMR] Invalid message: ' +\n JSON.stringify(message) +\n '\\n' +\n ((err instanceof Error && err?.stack) || '')\n )\n}\n"],"names":["REACT_REFRESH_FULL_RELOAD","REACT_REFRESH_FULL_RELOAD_FROM_ERROR","reportInvalidHmrMessage","message","err","console","warn","JSON","stringify","Error","stack"],"mappings":";;;;;;;;;;;;;;;IAEaA,yBAAyB,EAAA;eAAzBA;;IAQAC,oCAAoC,EAAA;eAApCA;;IAGGC,uBAAuB,EAAA;eAAvBA;;;AAXT,MAAMF,4BACX,8CACA,mIACA,qIACA,+GACA,8HACA;AAEK,MAAMC,uCACX;AAEK,SAASC,wBACdC,OAAwD,EACxDC,GAAY;IAEZC,QAAQC,IAAI,CACV,4BACEC,KAAKC,SAAS,CAACL,WACf,OACC,CAACC,eAAeK,SAASL,KAAKM,SAAU,EAAC;AAEhD","ignoreList":[0]}}, + {"offset": {"line": 10786, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/dev/hot-reloader/get-socket-url.ts"],"sourcesContent":["import { normalizedAssetPrefix } from '../../../shared/lib/normalized-asset-prefix'\n\nfunction getSocketProtocol(assetPrefix: string): string {\n let protocol = window.location.protocol\n\n try {\n // assetPrefix is a url\n protocol = new URL(assetPrefix).protocol\n } catch {}\n\n return protocol === 'http:' ? 'ws:' : 'wss:'\n}\n\nexport function getSocketUrl(assetPrefix: string | undefined): string {\n const prefix = normalizedAssetPrefix(assetPrefix)\n const protocol = getSocketProtocol(assetPrefix || '')\n\n if (URL.canParse(prefix)) {\n // since normalized asset prefix is ensured to be a URL format,\n // we can safely replace the protocol\n return prefix.replace(/^http/, 'ws')\n }\n\n const { hostname, port } = window.location\n return `${protocol}//${hostname}${port ? `:${port}` : ''}${prefix}`\n}\n"],"names":["getSocketUrl","getSocketProtocol","assetPrefix","protocol","window","location","URL","prefix","normalizedAssetPrefix","canParse","replace","hostname","port"],"mappings":";;;+BAagBA,gBAAAA;;;eAAAA;;;uCAbsB;AAEtC,SAASC,kBAAkBC,WAAmB;IAC5C,IAAIC,WAAWC,OAAOC,QAAQ,CAACF,QAAQ;IAEvC,IAAI;QACF,uBAAuB;QACvBA,WAAW,IAAIG,IAAIJ,aAAaC,QAAQ;IAC1C,EAAE,OAAM,CAAC;IAET,OAAOA,aAAa,UAAU,QAAQ;AACxC;AAEO,SAASH,aAAaE,WAA+B;IAC1D,MAAMK,SAASC,CAAAA,GAAAA,uBAAAA,qBAAqB,EAACN;IACrC,MAAMC,WAAWF,kBAAkBC,eAAe;IAElD,IAAII,IAAIG,QAAQ,CAACF,SAAS;QACxB,+DAA+D;QAC/D,qCAAqC;QACrC,OAAOA,OAAOG,OAAO,CAAC,SAAS;IACjC;IAEA,MAAM,EAAEC,QAAQ,EAAEC,IAAI,EAAE,GAAGR,OAAOC,QAAQ;IAC1C,OAAO,GAAGF,SAAS,EAAE,EAAEQ,WAAWC,OAAO,CAAC,CAAC,EAAEA,MAAM,GAAG,KAAKL,QAAQ;AACrE","ignoreList":[0]}}, + {"offset": {"line": 10826, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/dev/hot-reloader/app/web-socket.ts"],"sourcesContent":["import { useContext, useEffect } from 'react'\nimport { GlobalLayoutRouterContext } from '../../../../shared/lib/app-router-context.shared-runtime'\nimport { getSocketUrl } from '../get-socket-url'\nimport {\n HMR_MESSAGE_SENT_TO_BROWSER,\n type HmrMessageSentToBrowser,\n type TurbopackMessageSentToBrowser,\n} from '../../../../server/dev/hot-reloader-types'\nimport { reportInvalidHmrMessage } from '../shared'\nimport {\n performFullReload,\n processMessage,\n type StaticIndicatorState,\n} from './hot-reloader-app'\nimport { logQueue } from '../../../../next-devtools/userspace/app/forward-logs'\nimport { InvariantError } from '../../../../shared/lib/invariant-error'\nimport { WEB_SOCKET_MAX_RECONNECTIONS } from '../../../../lib/constants'\n\nlet reconnections = 0\nlet reloading = false\nlet serverSessionId: number | null = null\nlet mostRecentCompilationHash: string | null = null\n\nexport function createWebSocket(\n assetPrefix: string,\n staticIndicatorState: StaticIndicatorState\n) {\n if (!self.__next_r) {\n throw new InvariantError(\n `Expected a request ID to be defined for the document via self.__next_r.`\n )\n }\n\n let webSocket: WebSocket\n let timer: ReturnType\n\n const sendMessage = (data: string) => {\n if (webSocket && webSocket.readyState === webSocket.OPEN) {\n webSocket.send(data)\n }\n }\n\n const processTurbopackMessage = createProcessTurbopackMessage(sendMessage)\n\n function init() {\n if (webSocket) {\n webSocket.close()\n }\n\n const newWebSocket = new window.WebSocket(\n `${getSocketUrl(assetPrefix)}/_next/webpack-hmr?id=${self.__next_r}`\n )\n\n newWebSocket.binaryType = 'arraybuffer'\n\n function handleOnline() {\n logQueue.onSocketReady(newWebSocket)\n\n reconnections = 0\n window.console.log('[HMR] connected')\n }\n\n function handleMessage(event: MessageEvent) {\n // While the page is reloading, don't respond to any more messages.\n if (reloading) {\n return\n }\n\n try {\n const message: HmrMessageSentToBrowser =\n event.data instanceof ArrayBuffer\n ? parseBinaryMessage(event.data)\n : JSON.parse(event.data)\n\n // Check for server restart in Turbopack mode\n if (message.type === HMR_MESSAGE_SENT_TO_BROWSER.TURBOPACK_CONNECTED) {\n if (\n serverSessionId !== null &&\n serverSessionId !== message.data.sessionId\n ) {\n // Either the server's session id has changed and it's a new server, or\n // it's been too long since we disconnected and we should reload the page.\n window.location.reload()\n reloading = true\n return\n }\n serverSessionId = message.data.sessionId\n }\n\n // Track webpack compilation hash for server restart detection\n if (\n message.type === HMR_MESSAGE_SENT_TO_BROWSER.SYNC &&\n 'hash' in message\n ) {\n // If we had previously reconnected and the hash changed, the server may have restarted\n if (\n mostRecentCompilationHash !== null &&\n mostRecentCompilationHash !== message.hash\n ) {\n window.location.reload()\n reloading = true\n return\n }\n mostRecentCompilationHash = message.hash\n }\n\n processMessage(\n message,\n sendMessage,\n processTurbopackMessage,\n staticIndicatorState\n )\n } catch (err: unknown) {\n reportInvalidHmrMessage(event, err)\n }\n }\n\n function handleDisconnect() {\n newWebSocket.onerror = null\n newWebSocket.onclose = null\n newWebSocket.close()\n reconnections++\n\n // After 25 reconnects we'll want to reload the page as it indicates the dev server is no longer running.\n if (reconnections > WEB_SOCKET_MAX_RECONNECTIONS) {\n reloading = true\n window.location.reload()\n return\n }\n\n clearTimeout(timer)\n // Try again after 5 seconds\n timer = setTimeout(init, reconnections > 5 ? 5000 : 1000)\n }\n\n newWebSocket.onopen = handleOnline\n newWebSocket.onerror = handleDisconnect\n newWebSocket.onclose = handleDisconnect\n newWebSocket.onmessage = handleMessage\n\n webSocket = newWebSocket\n return newWebSocket\n }\n\n return init()\n}\n\nexport function createProcessTurbopackMessage(\n sendMessage: (data: string) => void\n): (msg: TurbopackMessageSentToBrowser) => void {\n if (!process.env.TURBOPACK) {\n return () => {}\n }\n\n let queue: TurbopackMessageSentToBrowser[] = []\n let callback: ((msg: TurbopackMessageSentToBrowser) => void) | undefined\n\n const processTurbopackMessage = (msg: TurbopackMessageSentToBrowser) => {\n if (callback) {\n callback(msg)\n } else {\n queue.push(msg)\n }\n }\n\n import(\n // @ts-expect-error requires \"moduleResolution\": \"node16\" in tsconfig.json and not .ts extension\n '@vercel/turbopack-ecmascript-runtime/browser/dev/hmr-client/hmr-client.ts'\n ).then(({ connect }) => {\n connect({\n addMessageListener(cb: (msg: TurbopackMessageSentToBrowser) => void) {\n callback = cb\n\n // Replay all Turbopack messages before we were able to establish the HMR client.\n for (const msg of queue) {\n cb(msg)\n }\n queue.length = 0\n },\n sendMessage,\n onUpdateError: (err: unknown) => performFullReload(err, sendMessage),\n })\n })\n\n return processTurbopackMessage\n}\n\nexport function useWebSocketPing(webSocket: WebSocket | undefined) {\n const { tree } = useContext(GlobalLayoutRouterContext)\n\n useEffect(() => {\n if (!webSocket) {\n throw new InvariantError('Expected webSocket to be defined in dev mode.')\n }\n\n // Never send pings when using Turbopack as it's not used.\n // Pings were originally used to keep track of active routes in on-demand-entries with webpack.\n if (process.env.TURBOPACK) {\n return\n }\n\n // Taken from on-demand-entries-client.js\n const interval = setInterval(() => {\n if (webSocket.readyState === webSocket.OPEN) {\n webSocket.send(\n JSON.stringify({\n event: 'ping',\n tree,\n appDirRoute: true,\n })\n )\n }\n }, 2500)\n return () => clearInterval(interval)\n }, [tree, webSocket])\n}\n\nconst textDecoder = new TextDecoder()\n\nfunction parseBinaryMessage(data: ArrayBuffer): HmrMessageSentToBrowser {\n assertByteLength(data, 1)\n const view = new DataView(data)\n const messageType = view.getUint8(0)\n\n switch (messageType) {\n case HMR_MESSAGE_SENT_TO_BROWSER.ERRORS_TO_SHOW_IN_BROWSER: {\n const serializedErrors = new Uint8Array(data, 1)\n\n return {\n type: HMR_MESSAGE_SENT_TO_BROWSER.ERRORS_TO_SHOW_IN_BROWSER,\n serializedErrors,\n }\n }\n case HMR_MESSAGE_SENT_TO_BROWSER.REACT_DEBUG_CHUNK: {\n assertByteLength(data, 2)\n const requestIdLength = view.getUint8(1)\n assertByteLength(data, 2 + requestIdLength)\n\n const requestId = textDecoder.decode(\n new Uint8Array(data, 2, requestIdLength)\n )\n\n const chunk =\n data.byteLength > 2 + requestIdLength\n ? new Uint8Array(data, 2 + requestIdLength)\n : null\n\n return {\n type: HMR_MESSAGE_SENT_TO_BROWSER.REACT_DEBUG_CHUNK,\n requestId,\n chunk,\n }\n }\n default: {\n throw new InvariantError(\n `Invalid binary HMR message of type ${messageType}`\n )\n }\n }\n}\n\nfunction assertByteLength(data: ArrayBuffer, expectedLength: number) {\n if (data.byteLength < expectedLength) {\n throw new InvariantError(\n `Invalid binary HMR message: insufficient data (expected ${expectedLength} bytes, got ${data.byteLength})`\n )\n }\n}\n"],"names":["createProcessTurbopackMessage","createWebSocket","useWebSocketPing","reconnections","reloading","serverSessionId","mostRecentCompilationHash","assetPrefix","staticIndicatorState","self","__next_r","InvariantError","webSocket","timer","sendMessage","data","readyState","OPEN","send","processTurbopackMessage","init","close","newWebSocket","window","WebSocket","getSocketUrl","binaryType","handleOnline","logQueue","onSocketReady","console","log","handleMessage","event","message","ArrayBuffer","parseBinaryMessage","JSON","parse","type","HMR_MESSAGE_SENT_TO_BROWSER","TURBOPACK_CONNECTED","sessionId","location","reload","SYNC","hash","processMessage","err","reportInvalidHmrMessage","handleDisconnect","onerror","onclose","WEB_SOCKET_MAX_RECONNECTIONS","clearTimeout","setTimeout","onopen","onmessage","process","env","TURBOPACK","queue","callback","msg","push","then","connect","addMessageListener","cb","length","onUpdateError","performFullReload","tree","useContext","GlobalLayoutRouterContext","useEffect","interval","setInterval","stringify","appDirRoute","clearInterval","textDecoder","TextDecoder","assertByteLength","view","DataView","messageType","getUint8","ERRORS_TO_SHOW_IN_BROWSER","serializedErrors","Uint8Array","REACT_DEBUG_CHUNK","requestIdLength","requestId","decode","chunk","byteLength","expectedLength"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 11059, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/dev/report-hmr-latency.ts"],"sourcesContent":["declare global {\n interface Window {\n __NEXT_HMR_LATENCY_CB: ((latencyMs: number) => void) | undefined\n }\n}\n\n/**\n * Logs information about a completed HMR to the console, the server (via a\n * `client-hmr-latency` event), and to `self.__NEXT_HMR_LATENCY_CB` (a debugging\n * hook).\n *\n * @param hasUpdate Set this to `false` to avoid reporting the HMR event via a\n * `client-hmr-latency` event or to `self.__NEXT_HMR_LATENCY_CB`. Used by\n * turbopack when we must report a message to the browser console (because we\n * already logged a \"rebuilding\" message), but it's not a real HMR, so we\n * don't want to impact our telemetry.\n */\nexport default function reportHmrLatency(\n sendMessage: (message: string) => void,\n updatedModules: ReadonlyArray,\n startMsSinceEpoch: number,\n endMsSinceEpoch: number,\n hasUpdate: boolean = true\n) {\n const latencyMs = endMsSinceEpoch - startMsSinceEpoch\n console.log(`[Fast Refresh] done in ${latencyMs}ms`)\n if (!hasUpdate) {\n return\n }\n sendMessage(\n JSON.stringify({\n event: 'client-hmr-latency',\n id: window.__nextDevClientId,\n startTime: startMsSinceEpoch,\n endTime: endMsSinceEpoch,\n page: window.location.pathname,\n updatedModules,\n // Whether the page (tab) was hidden at the time the event occurred.\n // This can impact the accuracy of the event's timing.\n isPageHidden: document.visibilityState === 'hidden',\n })\n )\n if (self.__NEXT_HMR_LATENCY_CB) {\n self.__NEXT_HMR_LATENCY_CB(latencyMs)\n }\n}\n"],"names":["reportHmrLatency","sendMessage","updatedModules","startMsSinceEpoch","endMsSinceEpoch","hasUpdate","latencyMs","console","log","JSON","stringify","event","id","window","__nextDevClientId","startTime","endTime","page","location","pathname","isPageHidden","document","visibilityState","self","__NEXT_HMR_LATENCY_CB"],"mappings":";;;+BAMA;;;;;;;;;;CAUC,GACD,WAAA;;;eAAwBA;;;AAAT,SAASA,iBACtBC,WAAsC,EACtCC,cAA8C,EAC9CC,iBAAyB,EACzBC,eAAuB,EACvBC,YAAqB,IAAI;IAEzB,MAAMC,YAAYF,kBAAkBD;IACpCI,QAAQC,GAAG,CAAC,CAAC,uBAAuB,EAAEF,UAAU,EAAE,CAAC;IACnD,IAAI,CAACD,WAAW;QACd;IACF;IACAJ,YACEQ,KAAKC,SAAS,CAAC;QACbC,OAAO;QACPC,IAAIC,OAAOC,iBAAiB;QAC5BC,WAAWZ;QACXa,SAASZ;QACTa,MAAMJ,OAAOK,QAAQ,CAACC,QAAQ;QAC9BjB;QACA,oEAAoE;QACpE,sDAAsD;QACtDkB,cAAcC,SAASC,eAAe,KAAK;IAC7C;IAEF,IAAIC,KAAKC,qBAAqB,EAAE;QAC9BD,KAAKC,qBAAqB,CAAClB;IAC7B;AACF","ignoreList":[0]}}, + {"offset": {"line": 11110, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/dev/hot-reloader/turbopack-hot-reloader-common.ts"],"sourcesContent":["import type { TurbopackMessage } from '../../../server/dev/hot-reloader-types'\nimport type { Update as TurbopackUpdate } from '../../../build/swc/types'\n\ndeclare global {\n interface Window {\n __NEXT_HMR_TURBOPACK_REPORT_NOISY_NOOP_EVENTS: boolean | undefined\n }\n}\n\n// How long to wait before reporting the HMR start, used to suppress irrelevant\n// `BUILDING` events. Does not impact reported latency.\nconst TURBOPACK_HMR_START_DELAY_MS = 100\n\ninterface HmrUpdate {\n hasUpdates: boolean\n updatedModules: Set\n startMsSinceEpoch: number\n endMsSinceEpoch: number\n}\n\nexport class TurbopackHmr {\n #updatedModules: Set\n #startMsSinceEpoch: number | undefined\n #lastUpdateMsSinceEpoch: number | undefined\n #deferredReportHmrStartId: ReturnType | undefined\n #reportedHmrStart: boolean\n\n constructor() {\n this.#updatedModules = new Set()\n this.#reportedHmrStart = false\n }\n\n // HACK: Turbopack tends to generate a lot of irrelevant \"BUILDING\" actions,\n // as it reports *any* compilation, including fully no-op/cached compilations\n // and those unrelated to HMR. Fixing this would require significant\n // architectural changes.\n //\n // Work around this by deferring any \"rebuilding\" message by 100ms. If we get\n // a BUILT event within that threshold and nothing has changed, just suppress\n // the message entirely.\n #runDeferredReportHmrStart() {\n if (this.#deferredReportHmrStartId != null) {\n console.log('[Fast Refresh] rebuilding')\n this.#reportedHmrStart = true\n this.#cancelDeferredReportHmrStart()\n }\n }\n\n #cancelDeferredReportHmrStart() {\n clearTimeout(this.#deferredReportHmrStartId)\n this.#deferredReportHmrStartId = undefined\n }\n\n onBuilding() {\n this.#lastUpdateMsSinceEpoch = undefined\n this.#cancelDeferredReportHmrStart()\n this.#startMsSinceEpoch = Date.now()\n\n // report the HMR start after a short delay\n this.#deferredReportHmrStartId = setTimeout(\n () => this.#runDeferredReportHmrStart(),\n // debugging feature: don't defer/suppress noisy no-op HMR update messages\n self.__NEXT_HMR_TURBOPACK_REPORT_NOISY_NOOP_EVENTS\n ? 0\n : TURBOPACK_HMR_START_DELAY_MS\n )\n }\n\n /** Helper for other `onEvent` methods. */\n #onUpdate() {\n this.#runDeferredReportHmrStart()\n this.#lastUpdateMsSinceEpoch = Date.now()\n }\n\n onTurbopackMessage(msg: TurbopackMessage) {\n this.#onUpdate()\n const updatedModules = extractModulesFromTurbopackMessage(msg.data)\n for (const module of updatedModules) {\n this.#updatedModules.add(module)\n }\n }\n\n onServerComponentChanges() {\n this.#onUpdate()\n }\n\n onReloadPage() {\n this.#onUpdate()\n }\n\n onPageAddRemove() {\n this.#onUpdate()\n }\n\n /**\n * @returns `null` if the caller should ignore the update entirely. Returns an\n * object with `hasUpdates: false` if the caller should report the end of\n * the HMR in the browser console, but the HMR was a no-op.\n */\n onBuilt(): HmrUpdate | null {\n // Check that we got *any* `TurbopackMessage`, even if\n // `updatedModules` is empty (not everything gets recorded there).\n //\n // There's also a case where `onBuilt` gets called before `onBuilding`,\n // which can happen during initial page load. Ignore that too!\n const hasUpdates =\n this.#lastUpdateMsSinceEpoch != null && this.#startMsSinceEpoch != null\n if (!hasUpdates && !this.#reportedHmrStart) {\n // suppress the update entirely\n this.#cancelDeferredReportHmrStart()\n return null\n }\n this.#runDeferredReportHmrStart()\n\n const result = {\n hasUpdates,\n updatedModules: this.#updatedModules,\n startMsSinceEpoch: this.#startMsSinceEpoch!,\n endMsSinceEpoch: this.#lastUpdateMsSinceEpoch ?? Date.now(),\n }\n this.#updatedModules = new Set()\n this.#reportedHmrStart = false\n return result\n }\n}\n\nfunction extractModulesFromTurbopackMessage(\n data: TurbopackUpdate | TurbopackUpdate[]\n): Set {\n const updatedModules: Set = new Set()\n\n const updates = Array.isArray(data) ? data : [data]\n for (const update of updates) {\n // TODO this won't capture changes to CSS since they don't result in a \"merged\" update\n if (\n update.type !== 'partial' ||\n update.instruction.type !== 'ChunkListUpdate' ||\n update.instruction.merged === undefined\n ) {\n continue\n }\n\n for (const mergedUpdate of update.instruction.merged) {\n for (const name of Object.keys(mergedUpdate.entries)) {\n const res = /(.*)\\s+[([].*/.exec(name)\n if (res === null) {\n continue\n }\n\n updatedModules.add(res[1])\n }\n }\n }\n\n return updatedModules\n}\n"],"names":["TurbopackHmr","TURBOPACK_HMR_START_DELAY_MS","constructor","Set","console","log","clearTimeout","undefined","onBuilding","Date","now","setTimeout","self","__NEXT_HMR_TURBOPACK_REPORT_NOISY_NOOP_EVENTS","onTurbopackMessage","msg","updatedModules","extractModulesFromTurbopackMessage","data","module","add","onServerComponentChanges","onReloadPage","onPageAddRemove","onBuilt","hasUpdates","result","startMsSinceEpoch","endMsSinceEpoch","updates","Array","isArray","update","type","instruction","merged","mergedUpdate","name","Object","keys","entries","res","exec"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 11239, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/dev/debug-channel.ts"],"sourcesContent":["import { NEXT_REQUEST_ID_HEADER } from '../components/app-router-headers'\nimport { InvariantError } from '../../shared/lib/invariant-error'\n\nexport interface DebugChannelReadableWriterPair {\n readonly readable: ReadableStream\n readonly writer: WritableStreamDefaultWriter\n}\n\nconst pairs = new Map()\n\nexport function getOrCreateDebugChannelReadableWriterPair(\n requestId: string\n): DebugChannelReadableWriterPair {\n let pair = pairs.get(requestId)\n\n if (!pair) {\n const { readable, writable } = new TransformStream()\n pair = { readable, writer: writable.getWriter() }\n pairs.set(requestId, pair)\n pair.writer.closed.finally(() => pairs.delete(requestId))\n }\n\n return pair\n}\n\nexport function createDebugChannel(\n requestHeaders: Record | undefined\n): {\n writable?: WritableStream\n readable?: ReadableStream\n} {\n let requestId: string | undefined\n\n if (requestHeaders) {\n requestId = requestHeaders[NEXT_REQUEST_ID_HEADER] ?? undefined\n\n if (!requestId) {\n throw new InvariantError(\n `Expected a ${JSON.stringify(NEXT_REQUEST_ID_HEADER)} request header.`\n )\n }\n } else {\n requestId = self.__next_r\n\n if (!requestId) {\n throw new InvariantError(\n `Expected a request ID to be defined for the document via self.__next_r.`\n )\n }\n }\n\n const { readable } = getOrCreateDebugChannelReadableWriterPair(requestId)\n\n return { readable }\n}\n"],"names":["createDebugChannel","getOrCreateDebugChannelReadableWriterPair","pairs","Map","requestId","pair","get","readable","writable","TransformStream","writer","getWriter","set","closed","finally","delete","requestHeaders","NEXT_REQUEST_ID_HEADER","undefined","InvariantError","JSON","stringify","self","__next_r"],"mappings":";;;;;;;;;;;;;;IAyBgBA,kBAAkB,EAAA;eAAlBA;;IAfAC,yCAAyC,EAAA;eAAzCA;;;kCAVuB;gCACR;AAO/B,MAAMC,QAAQ,IAAIC;AAEX,SAASF,0CACdG,SAAiB;IAEjB,IAAIC,OAAOH,MAAMI,GAAG,CAACF;IAErB,IAAI,CAACC,MAAM;QACT,MAAM,EAAEE,QAAQ,EAAEC,QAAQ,EAAE,GAAG,IAAIC;QACnCJ,OAAO;YAAEE;YAAUG,QAAQF,SAASG,SAAS;QAAG;QAChDT,MAAMU,GAAG,CAACR,WAAWC;QACrBA,KAAKK,MAAM,CAACG,MAAM,CAACC,OAAO,CAAC,IAAMZ,MAAMa,MAAM,CAACX;IAChD;IAEA,OAAOC;AACT;AAEO,SAASL,mBACdgB,cAAkD;IAKlD,IAAIZ;IAEJ,IAAIY,gBAAgB;QAClBZ,YAAYY,cAAc,CAACC,kBAAAA,sBAAsB,CAAC,IAAIC;QAEtD,IAAI,CAACd,WAAW;YACd,MAAM,OAAA,cAEL,CAFK,IAAIe,gBAAAA,cAAc,CACtB,CAAC,WAAW,EAAEC,KAAKC,SAAS,CAACJ,kBAAAA,sBAAsB,EAAE,gBAAgB,CAAC,GADlE,qBAAA;uBAAA;4BAAA;8BAAA;YAEN;QACF;IACF,OAAO;QACLb,YAAYkB,KAAKC,QAAQ;QAEzB,IAAI,CAACnB,WAAW;YACd,MAAM,OAAA,cAEL,CAFK,IAAIe,gBAAAA,cAAc,CACtB,CAAC,uEAAuE,CAAC,GADrE,qBAAA;uBAAA;4BAAA;8BAAA;YAEN;QACF;IACF;IAEA,MAAM,EAAEZ,QAAQ,EAAE,GAAGN,0CAA0CG;IAE/D,OAAO;QAAEG;IAAS;AACpB","ignoreList":[0]}}, + {"offset": {"line": 11313, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/dev/hot-reloader/app/hot-reloader-app.tsx"],"sourcesContent":["/// \n\nimport type { ReactNode } from 'react'\nimport { useEffect, startTransition } from 'react'\nimport stripAnsi from 'next/dist/compiled/strip-ansi'\nimport formatWebpackMessages from '../../../../shared/lib/format-webpack-messages'\nimport {\n REACT_REFRESH_FULL_RELOAD,\n REACT_REFRESH_FULL_RELOAD_FROM_ERROR,\n} from '../shared'\nimport {\n dispatcher,\n getSerializedOverlayState,\n getSegmentTrieData,\n} from 'next/dist/compiled/next-devtools'\nimport { ReplaySsrOnlyErrors } from '../../../../next-devtools/userspace/app/errors/replay-ssr-only-errors'\nimport { AppDevOverlayErrorBoundary } from '../../../../next-devtools/userspace/app/app-dev-overlay-error-boundary'\nimport { useErrorHandler } from '../../../../next-devtools/userspace/app/errors/use-error-handler'\nimport { RuntimeErrorHandler } from '../../runtime-error-handler'\nimport { useWebSocketPing } from './web-socket'\nimport {\n HMR_MESSAGE_SENT_TO_BROWSER,\n HMR_MESSAGE_SENT_TO_SERVER,\n} from '../../../../server/dev/hot-reloader-types'\nimport type {\n HmrMessageSentToBrowser,\n TurbopackMessageSentToBrowser,\n} from '../../../../server/dev/hot-reloader-types'\nimport type { McpErrorStateResponse } from '../../../../shared/lib/mcp-error-types'\nimport type { McpPageMetadataResponse } from '../../../../shared/lib/mcp-page-metadata-types'\nimport { useUntrackedPathname } from '../../../components/navigation-untracked'\nimport reportHmrLatency from '../../report-hmr-latency'\nimport { TurbopackHmr } from '../turbopack-hot-reloader-common'\nimport { NEXT_HMR_REFRESH_HASH_COOKIE } from '../../../components/app-router-headers'\nimport {\n publicAppRouterInstance,\n type GlobalErrorState,\n} from '../../../components/app-router-instance'\nimport { InvariantError } from '../../../../shared/lib/invariant-error'\nimport { getOrCreateDebugChannelReadableWriterPair } from '../../debug-channel'\n// TODO: Explicitly import from client.browser (doesn't work with Webpack).\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport { createFromReadableStream as createFromReadableStreamBrowser } from 'react-server-dom-webpack/client'\nimport { findSourceMapURL } from '../../../app-find-source-map-url'\n\nexport interface StaticIndicatorState {\n pathname: string | null\n appIsrManifest: Record | null\n}\n\nconst createFromReadableStream =\n createFromReadableStreamBrowser as (typeof import('react-server-dom-webpack/client.browser'))['createFromReadableStream']\n\nlet mostRecentCompilationHash: any = null\nlet __nextDevClientId = Math.round(Math.random() * 100 + Date.now())\nlet reloading = false\nlet webpackStartMsSinceEpoch: number | null = null\nconst turbopackHmr: TurbopackHmr | null = process.env.TURBOPACK\n ? new TurbopackHmr()\n : null\n\nlet pendingHotUpdateWebpack = Promise.resolve()\nlet resolvePendingHotUpdateWebpack: () => void = () => {}\nfunction setPendingHotUpdateWebpack() {\n pendingHotUpdateWebpack = new Promise((resolve) => {\n resolvePendingHotUpdateWebpack = () => {\n resolve()\n }\n })\n}\n\nexport function waitForWebpackRuntimeHotUpdate() {\n return pendingHotUpdateWebpack\n}\n\n// There is a newer version of the code available.\nfunction handleAvailableHash(hash: string) {\n // Update last known compilation hash.\n mostRecentCompilationHash = hash\n}\n\n/**\n * Is there a newer version of this code available?\n * For webpack: Check if the hash changed compared to __webpack_hash__\n * For Turbopack: Always true because it doesn't have __webpack_hash__\n */\nfunction isUpdateAvailable() {\n if (process.env.TURBOPACK) {\n return true\n }\n\n /* globals __webpack_hash__ */\n // __webpack_hash__ is the hash of the current compilation.\n // It's a global variable injected by Webpack.\n return mostRecentCompilationHash !== __webpack_hash__\n}\n\n// Webpack disallows updates in other states.\nfunction canApplyUpdates() {\n return module.hot.status() === 'idle'\n}\nfunction afterApplyUpdates(fn: any) {\n if (canApplyUpdates()) {\n fn()\n } else {\n function handler(status: any) {\n if (status === 'idle') {\n module.hot.removeStatusHandler(handler)\n fn()\n }\n }\n module.hot.addStatusHandler(handler)\n }\n}\n\nexport function performFullReload(\n err: any,\n sendMessage: (data: string) => void\n) {\n const stackTrace =\n err &&\n ((err.stack && err.stack.split('\\n').slice(0, 5).join('\\n')) ||\n err.message ||\n err + '')\n\n sendMessage(\n JSON.stringify({\n event: 'client-full-reload',\n stackTrace,\n hadRuntimeError: !!RuntimeErrorHandler.hadRuntimeError,\n dependencyChain: err ? err.dependencyChain : undefined,\n })\n )\n\n if (reloading) return\n reloading = true\n window.location.reload()\n}\n\n// Attempt to update code on the fly, fall back to a hard reload.\nfunction tryApplyUpdatesWebpack(sendMessage: (message: string) => void) {\n if (!isUpdateAvailable() || !canApplyUpdates()) {\n resolvePendingHotUpdateWebpack()\n dispatcher.onBuildOk()\n reportHmrLatency(sendMessage, [], webpackStartMsSinceEpoch!, Date.now())\n return\n }\n\n function handleApplyUpdates(\n err: any,\n updatedModules: (string | number)[] | null\n ) {\n if (err || RuntimeErrorHandler.hadRuntimeError || updatedModules == null) {\n if (err) {\n console.warn(REACT_REFRESH_FULL_RELOAD)\n } else if (RuntimeErrorHandler.hadRuntimeError) {\n console.warn(REACT_REFRESH_FULL_RELOAD_FROM_ERROR)\n }\n performFullReload(err, sendMessage)\n return\n }\n\n dispatcher.onBuildOk()\n\n if (isUpdateAvailable()) {\n // While we were updating, there was a new update! Do it again.\n tryApplyUpdatesWebpack(sendMessage)\n return\n }\n\n dispatcher.onRefresh()\n resolvePendingHotUpdateWebpack()\n reportHmrLatency(\n sendMessage,\n updatedModules,\n webpackStartMsSinceEpoch!,\n Date.now()\n )\n\n if (process.env.__NEXT_TEST_MODE) {\n afterApplyUpdates(() => {\n if (self.__NEXT_HMR_CB) {\n self.__NEXT_HMR_CB()\n self.__NEXT_HMR_CB = null\n }\n })\n }\n }\n\n // https://webpack.js.org/api/hot-module-replacement/#check\n module.hot\n .check(/* autoApply */ false)\n .then((updatedModules: (string | number)[] | null) => {\n if (updatedModules == null) {\n return null\n }\n\n // We should always handle an update, even if updatedModules is empty (but\n // non-null) for any reason. That's what webpack would normally do:\n // https://github.com/webpack/webpack/blob/3aa6b6bc3a64/lib/hmr/HotModuleReplacement.runtime.js#L296-L298\n dispatcher.onBeforeRefresh()\n // https://webpack.js.org/api/hot-module-replacement/#apply\n return module.hot.apply()\n })\n .then(\n (updatedModules: (string | number)[] | null) => {\n handleApplyUpdates(null, updatedModules)\n },\n (err: any) => {\n handleApplyUpdates(err, null)\n }\n )\n}\n\n/** Handles messages from the server for the App Router. */\nexport function processMessage(\n message: HmrMessageSentToBrowser,\n sendMessage: (message: string) => void,\n processTurbopackMessage: (msg: TurbopackMessageSentToBrowser) => void,\n staticIndicatorState: StaticIndicatorState\n) {\n function handleErrors(errors: ReadonlyArray) {\n // \"Massage\" webpack messages.\n const formatted = formatWebpackMessages({\n errors: errors,\n warnings: [],\n })\n\n // Only show the first error.\n dispatcher.onBuildError(formatted.errors[0])\n\n // Also log them to the console.\n for (let i = 0; i < formatted.errors.length; i++) {\n console.error(stripAnsi(formatted.errors[i]))\n }\n\n // Do not attempt to reload now.\n // We will reload on next success instead.\n if (process.env.__NEXT_TEST_MODE) {\n if (self.__NEXT_HMR_CB) {\n self.__NEXT_HMR_CB(formatted.errors[0])\n self.__NEXT_HMR_CB = null\n }\n }\n }\n\n function handleHotUpdate() {\n if (process.env.TURBOPACK) {\n const hmrUpdate = turbopackHmr!.onBuilt()\n if (hmrUpdate != null) {\n reportHmrLatency(\n sendMessage,\n [...hmrUpdate.updatedModules],\n hmrUpdate.startMsSinceEpoch,\n hmrUpdate.endMsSinceEpoch,\n // suppress the `client-hmr-latency` event if the update was a no-op:\n hmrUpdate.hasUpdates\n )\n }\n dispatcher.onBuildOk()\n } else {\n tryApplyUpdatesWebpack(sendMessage)\n }\n }\n\n switch (message.type) {\n case HMR_MESSAGE_SENT_TO_BROWSER.ISR_MANIFEST: {\n if (process.env.__NEXT_DEV_INDICATOR) {\n staticIndicatorState.appIsrManifest = message.data\n\n // Handle the initial static indicator status on receiving the ISR\n // manifest. Navigation is handled in an effect inside HotReload for\n // pathname changes as we'll receive the updated manifest before\n // usePathname triggers for a new value.\n\n const isStatic = staticIndicatorState.pathname\n ? message.data[staticIndicatorState.pathname]\n : undefined\n\n dispatcher.onStaticIndicator(\n isStatic === undefined ? 'pending' : isStatic ? 'static' : 'dynamic'\n )\n }\n break\n }\n case HMR_MESSAGE_SENT_TO_BROWSER.BUILDING: {\n dispatcher.buildingIndicatorShow()\n\n if (process.env.TURBOPACK) {\n turbopackHmr!.onBuilding()\n } else {\n webpackStartMsSinceEpoch = Date.now()\n setPendingHotUpdateWebpack()\n console.log('[Fast Refresh] rebuilding')\n }\n break\n }\n case HMR_MESSAGE_SENT_TO_BROWSER.BUILT:\n case HMR_MESSAGE_SENT_TO_BROWSER.SYNC: {\n dispatcher.buildingIndicatorHide()\n\n if (message.hash) {\n handleAvailableHash(message.hash)\n }\n\n const { errors, warnings } = message\n\n // Is undefined when it's a 'built' event\n if ('versionInfo' in message)\n dispatcher.onVersionInfo(message.versionInfo)\n if ('debug' in message && message.debug)\n dispatcher.onDebugInfo(message.debug)\n if ('devIndicator' in message)\n dispatcher.onDevIndicator(message.devIndicator)\n if ('devToolsConfig' in message)\n dispatcher.onDevToolsConfig(message.devToolsConfig)\n\n const hasErrors = Boolean(errors && errors.length)\n // Compilation with errors (e.g. syntax error or missing modules).\n if (hasErrors) {\n sendMessage(\n JSON.stringify({\n event: 'client-error',\n errorCount: errors.length,\n clientId: __nextDevClientId,\n })\n )\n\n handleErrors(errors)\n return\n }\n\n const hasWarnings = Boolean(warnings && warnings.length)\n if (hasWarnings) {\n sendMessage(\n JSON.stringify({\n event: 'client-warning',\n warningCount: warnings.length,\n clientId: __nextDevClientId,\n })\n )\n\n // Print warnings to the console.\n const formattedMessages = formatWebpackMessages({\n warnings: warnings,\n errors: [],\n })\n\n for (let i = 0; i < formattedMessages.warnings.length; i++) {\n if (i === 5) {\n console.warn(\n 'There were more warnings in other files.\\n' +\n 'You can find a complete log in the terminal.'\n )\n break\n }\n console.warn(stripAnsi(formattedMessages.warnings[i]))\n }\n\n // No early return here as we need to apply modules in the same way between warnings only and compiles without warnings\n }\n\n sendMessage(\n JSON.stringify({\n event: 'client-success',\n clientId: __nextDevClientId,\n })\n )\n\n if (message.type === HMR_MESSAGE_SENT_TO_BROWSER.BUILT) {\n handleHotUpdate()\n }\n return\n }\n case HMR_MESSAGE_SENT_TO_BROWSER.TURBOPACK_CONNECTED: {\n processTurbopackMessage({\n type: HMR_MESSAGE_SENT_TO_BROWSER.TURBOPACK_CONNECTED,\n data: {\n sessionId: message.data.sessionId,\n },\n })\n break\n }\n case HMR_MESSAGE_SENT_TO_BROWSER.TURBOPACK_MESSAGE: {\n turbopackHmr!.onTurbopackMessage(message)\n dispatcher.onBeforeRefresh()\n processTurbopackMessage({\n type: HMR_MESSAGE_SENT_TO_BROWSER.TURBOPACK_MESSAGE,\n data: message.data,\n })\n if (RuntimeErrorHandler.hadRuntimeError) {\n console.warn(REACT_REFRESH_FULL_RELOAD_FROM_ERROR)\n performFullReload(null, sendMessage)\n }\n dispatcher.onRefresh()\n break\n }\n // TODO-APP: make server component change more granular\n case HMR_MESSAGE_SENT_TO_BROWSER.SERVER_COMPONENT_CHANGES: {\n turbopackHmr?.onServerComponentChanges()\n sendMessage(\n JSON.stringify({\n event: 'server-component-reload-page',\n clientId: __nextDevClientId,\n hash: message.hash,\n })\n )\n\n // Store the latest hash in a session cookie so that it's sent back to the\n // server with any subsequent requests.\n document.cookie = `${NEXT_HMR_REFRESH_HASH_COOKIE}=${message.hash};path=/`\n\n if (\n RuntimeErrorHandler.hadRuntimeError ||\n document.documentElement.id === '__next_error__'\n ) {\n if (reloading) return\n reloading = true\n return window.location.reload()\n }\n\n startTransition(() => {\n publicAppRouterInstance.hmrRefresh()\n dispatcher.onRefresh()\n })\n\n if (process.env.__NEXT_TEST_MODE) {\n if (self.__NEXT_HMR_CB) {\n self.__NEXT_HMR_CB()\n self.__NEXT_HMR_CB = null\n }\n }\n\n return\n }\n case HMR_MESSAGE_SENT_TO_BROWSER.RELOAD_PAGE: {\n turbopackHmr?.onReloadPage()\n sendMessage(\n JSON.stringify({\n event: 'client-reload-page',\n clientId: __nextDevClientId,\n })\n )\n if (reloading) return\n reloading = true\n return window.location.reload()\n }\n case HMR_MESSAGE_SENT_TO_BROWSER.ADDED_PAGE:\n case HMR_MESSAGE_SENT_TO_BROWSER.REMOVED_PAGE: {\n turbopackHmr?.onPageAddRemove()\n // TODO-APP: potentially only refresh if the currently viewed page was added/removed.\n return publicAppRouterInstance.hmrRefresh()\n }\n case HMR_MESSAGE_SENT_TO_BROWSER.SERVER_ERROR: {\n const { errorJSON } = message\n if (errorJSON) {\n const errorObject = JSON.parse(errorJSON)\n const error = new Error(errorObject.message)\n error.stack = errorObject.stack\n handleErrors([error])\n }\n return\n }\n case HMR_MESSAGE_SENT_TO_BROWSER.DEV_PAGES_MANIFEST_UPDATE: {\n return\n }\n case HMR_MESSAGE_SENT_TO_BROWSER.DEVTOOLS_CONFIG: {\n dispatcher.onDevToolsConfig(message.data)\n return\n }\n case HMR_MESSAGE_SENT_TO_BROWSER.REACT_DEBUG_CHUNK: {\n const { requestId, chunk } = message\n const { writer } = getOrCreateDebugChannelReadableWriterPair(requestId)\n\n if (chunk) {\n writer.ready.then(() => writer.write(chunk)).catch(console.error)\n } else {\n // A null chunk signals that no more chunks will be sent, which allows\n // us to close the writer.\n // TODO: Revisit this cleanup logic when we integrate the return channel\n // that keeps the connection open to be able to lazily retrieve debug\n // objects.\n writer.ready.then(() => writer.close()).catch(console.error)\n }\n\n return\n }\n case HMR_MESSAGE_SENT_TO_BROWSER.REQUEST_CURRENT_ERROR_STATE: {\n const errorState = getSerializedOverlayState()\n const response: McpErrorStateResponse = {\n event: HMR_MESSAGE_SENT_TO_SERVER.MCP_ERROR_STATE_RESPONSE,\n requestId: message.requestId,\n errorState,\n url: window.location.href,\n }\n sendMessage(JSON.stringify(response))\n return\n }\n case HMR_MESSAGE_SENT_TO_BROWSER.REQUEST_PAGE_METADATA: {\n const segmentTrieData = getSegmentTrieData()\n const response: McpPageMetadataResponse = {\n event: HMR_MESSAGE_SENT_TO_SERVER.MCP_PAGE_METADATA_RESPONSE,\n requestId: message.requestId,\n segmentTrieData,\n url: window.location.href,\n }\n sendMessage(JSON.stringify(response))\n return\n }\n case HMR_MESSAGE_SENT_TO_BROWSER.CACHE_INDICATOR: {\n dispatcher.onCacheIndicator(message.state)\n return\n }\n case HMR_MESSAGE_SENT_TO_BROWSER.ERRORS_TO_SHOW_IN_BROWSER: {\n createFromReadableStream(\n new ReadableStream({\n start(controller) {\n controller.enqueue(message.serializedErrors)\n controller.close()\n },\n }),\n { findSourceMapURL }\n ).then(\n (errors) => {\n for (const error of errors) {\n console.error(error)\n }\n },\n (err) => {\n console.error(\n new Error('Failed to deserialize errors.', { cause: err })\n )\n }\n )\n return\n }\n case HMR_MESSAGE_SENT_TO_BROWSER.MIDDLEWARE_CHANGES:\n case HMR_MESSAGE_SENT_TO_BROWSER.CLIENT_CHANGES:\n case HMR_MESSAGE_SENT_TO_BROWSER.SERVER_ONLY_CHANGES:\n // These action types are handled in src/client/page-bootstrap.ts\n break\n default: {\n message satisfies never\n }\n }\n}\n\nexport default function HotReload({\n children,\n globalError,\n webSocket,\n staticIndicatorState,\n}: {\n children: ReactNode\n globalError: GlobalErrorState\n webSocket: WebSocket | undefined\n staticIndicatorState: StaticIndicatorState | undefined\n}) {\n useErrorHandler(dispatcher.onUnhandledError, dispatcher.onUnhandledRejection)\n useWebSocketPing(webSocket)\n\n // We don't want access of the pathname for the dev tools to trigger a dynamic\n // access (as the dev overlay will never be present in production).\n const pathname = useUntrackedPathname()\n\n if (process.env.__NEXT_DEV_INDICATOR) {\n // this conditional is only for dead-code elimination which\n // isn't a runtime conditional only build-time so ignore hooks rule\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useEffect(() => {\n if (!staticIndicatorState) {\n throw new InvariantError(\n 'Expected staticIndicatorState to be defined in dev mode.'\n )\n }\n\n staticIndicatorState.pathname = pathname\n\n if (staticIndicatorState.appIsrManifest) {\n const isStatic = pathname\n ? staticIndicatorState.appIsrManifest[pathname]\n : undefined\n\n dispatcher.onStaticIndicator(\n isStatic === undefined ? 'pending' : isStatic ? 'static' : 'dynamic'\n )\n }\n }, [pathname, staticIndicatorState])\n }\n\n return (\n \n \n {children}\n \n )\n}\n"],"names":["HotReload","performFullReload","processMessage","waitForWebpackRuntimeHotUpdate","createFromReadableStream","createFromReadableStreamBrowser","mostRecentCompilationHash","__nextDevClientId","Math","round","random","Date","now","reloading","webpackStartMsSinceEpoch","turbopackHmr","process","env","TURBOPACK","TurbopackHmr","pendingHotUpdateWebpack","Promise","resolve","resolvePendingHotUpdateWebpack","setPendingHotUpdateWebpack","handleAvailableHash","hash","isUpdateAvailable","__webpack_hash__","canApplyUpdates","module","hot","status","afterApplyUpdates","fn","handler","removeStatusHandler","addStatusHandler","err","sendMessage","stackTrace","stack","split","slice","join","message","JSON","stringify","event","hadRuntimeError","RuntimeErrorHandler","dependencyChain","undefined","window","location","reload","tryApplyUpdatesWebpack","dispatcher","onBuildOk","reportHmrLatency","handleApplyUpdates","updatedModules","console","warn","REACT_REFRESH_FULL_RELOAD","REACT_REFRESH_FULL_RELOAD_FROM_ERROR","onRefresh","__NEXT_TEST_MODE","self","__NEXT_HMR_CB","check","then","onBeforeRefresh","apply","processTurbopackMessage","staticIndicatorState","handleErrors","errors","formatted","formatWebpackMessages","warnings","onBuildError","i","length","error","stripAnsi","handleHotUpdate","hmrUpdate","onBuilt","startMsSinceEpoch","endMsSinceEpoch","hasUpdates","type","HMR_MESSAGE_SENT_TO_BROWSER","ISR_MANIFEST","__NEXT_DEV_INDICATOR","appIsrManifest","data","isStatic","pathname","onStaticIndicator","BUILDING","buildingIndicatorShow","onBuilding","log","BUILT","SYNC","buildingIndicatorHide","onVersionInfo","versionInfo","debug","onDebugInfo","onDevIndicator","devIndicator","onDevToolsConfig","devToolsConfig","hasErrors","Boolean","errorCount","clientId","hasWarnings","warningCount","formattedMessages","TURBOPACK_CONNECTED","sessionId","TURBOPACK_MESSAGE","onTurbopackMessage","SERVER_COMPONENT_CHANGES","onServerComponentChanges","document","cookie","NEXT_HMR_REFRESH_HASH_COOKIE","documentElement","id","startTransition","publicAppRouterInstance","hmrRefresh","RELOAD_PAGE","onReloadPage","ADDED_PAGE","REMOVED_PAGE","onPageAddRemove","SERVER_ERROR","errorJSON","errorObject","parse","Error","DEV_PAGES_MANIFEST_UPDATE","DEVTOOLS_CONFIG","REACT_DEBUG_CHUNK","requestId","chunk","writer","getOrCreateDebugChannelReadableWriterPair","ready","write","catch","close","REQUEST_CURRENT_ERROR_STATE","errorState","getSerializedOverlayState","response","HMR_MESSAGE_SENT_TO_SERVER","MCP_ERROR_STATE_RESPONSE","url","href","REQUEST_PAGE_METADATA","segmentTrieData","getSegmentTrieData","MCP_PAGE_METADATA_RESPONSE","CACHE_INDICATOR","onCacheIndicator","state","ERRORS_TO_SHOW_IN_BROWSER","ReadableStream","start","controller","enqueue","serializedErrors","findSourceMapURL","cause","MIDDLEWARE_CHANGES","CLIENT_CHANGES","SERVER_ONLY_CHANGES","children","globalError","webSocket","useErrorHandler","onUnhandledError","onUnhandledRejection","useWebSocketPing","useUntrackedPathname","useEffect","InvariantError","AppDevOverlayErrorBoundary","ReplaySsrOnlyErrors","onBlockingError","openErrorOverlay"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 11806, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/app-router.tsx"],"sourcesContent":["import React, {\n useEffect,\n useMemo,\n startTransition,\n useInsertionEffect,\n useDeferredValue,\n} from 'react'\nimport {\n AppRouterContext,\n LayoutRouterContext,\n GlobalLayoutRouterContext,\n} from '../../shared/lib/app-router-context.shared-runtime'\nimport type { CacheNode } from '../../shared/lib/app-router-types'\nimport { ACTION_RESTORE } from './router-reducer/router-reducer-types'\nimport type {\n AppHistoryState,\n AppRouterState,\n} from './router-reducer/router-reducer-types'\nimport { createHrefFromUrl } from './router-reducer/create-href-from-url'\nimport {\n SearchParamsContext,\n PathnameContext,\n PathParamsContext,\n NavigationPromisesContext,\n type NavigationPromises,\n} from '../../shared/lib/hooks-client-context.shared-runtime'\nimport { dispatchAppRouterAction, useActionQueue } from './use-action-queue'\nimport { AppRouterAnnouncer } from './app-router-announcer'\nimport { RedirectBoundary } from './redirect-boundary'\nimport { findHeadInCache } from './router-reducer/reducers/find-head-in-cache'\nimport { unresolvedThenable } from './unresolved-thenable'\nimport { removeBasePath } from '../remove-base-path'\nimport { hasBasePath } from '../has-base-path'\nimport { getSelectedParams } from './router-reducer/compute-changed-path'\nimport { useNavFailureHandler } from './nav-failure-handler'\nimport {\n dispatchTraverseAction,\n publicAppRouterInstance,\n type AppRouterActionQueue,\n type GlobalErrorState,\n} from './app-router-instance'\nimport { getRedirectTypeFromError, getURLFromRedirectError } from './redirect'\nimport { isRedirectError, RedirectType } from './redirect-error'\nimport { pingVisibleLinks } from './links'\nimport RootErrorBoundary from './errors/root-error-boundary'\nimport DefaultGlobalError from './builtin/global-error'\nimport { RootLayoutBoundary } from '../../lib/framework/boundary-components'\nimport type { StaticIndicatorState } from '../dev/hot-reloader/app/hot-reloader-app'\nimport { getDeploymentIdQueryOrEmptyString } from '../../shared/lib/deployment-id'\n\nconst globalMutable: {\n pendingMpaPath?: string\n} = {}\n\nfunction HistoryUpdater({\n appRouterState,\n}: {\n appRouterState: AppRouterState\n}) {\n useInsertionEffect(() => {\n if (process.env.__NEXT_APP_NAV_FAIL_HANDLING) {\n // clear pending URL as navigation is no longer\n // in flight\n window.next.__pendingUrl = undefined\n }\n\n const { tree, pushRef, canonicalUrl, renderedSearch } = appRouterState\n\n const appHistoryState: AppHistoryState = {\n tree,\n renderedSearch,\n }\n\n // TODO: Use Navigation API if available\n const historyState = {\n ...(pushRef.preserveCustomHistoryState ? window.history.state : {}),\n // Identifier is shortened intentionally.\n // __NA is used to identify if the history entry can be handled by the app-router.\n // __N is used to identify if the history entry can be handled by the old router.\n __NA: true,\n __PRIVATE_NEXTJS_INTERNALS_TREE: appHistoryState,\n }\n if (\n pushRef.pendingPush &&\n // Skip pushing an additional history entry if the canonicalUrl is the same as the current url.\n // This mirrors the browser behavior for normal navigation.\n createHrefFromUrl(new URL(window.location.href)) !== canonicalUrl\n ) {\n // This intentionally mutates React state, pushRef is overwritten to ensure additional push/replace calls do not trigger an additional history entry.\n pushRef.pendingPush = false\n window.history.pushState(historyState, '', canonicalUrl)\n } else {\n window.history.replaceState(historyState, '', canonicalUrl)\n }\n }, [appRouterState])\n\n useEffect(() => {\n // The Next-Url and the base tree may affect the result of a prefetch\n // task. Re-prefetch all visible links with the updated values. In most\n // cases, this will not result in any new network requests, only if\n // the prefetch result actually varies on one of these inputs.\n pingVisibleLinks(appRouterState.nextUrl, appRouterState.tree)\n }, [appRouterState.nextUrl, appRouterState.tree])\n\n return null\n}\n\nfunction copyNextJsInternalHistoryState(data: any) {\n if (data == null) data = {}\n const currentState = window.history.state\n const __NA = currentState?.__NA\n if (__NA) {\n data.__NA = __NA\n }\n const __PRIVATE_NEXTJS_INTERNALS_TREE =\n currentState?.__PRIVATE_NEXTJS_INTERNALS_TREE\n if (__PRIVATE_NEXTJS_INTERNALS_TREE) {\n data.__PRIVATE_NEXTJS_INTERNALS_TREE = __PRIVATE_NEXTJS_INTERNALS_TREE\n }\n\n return data\n}\n\nfunction Head({\n headCacheNode,\n}: {\n headCacheNode: CacheNode | null\n}): React.ReactNode {\n // If this segment has a `prefetchHead`, it's the statically prefetched data.\n // We should use that on initial render instead of `head`. Then we'll switch\n // to `head` when the dynamic response streams in.\n const head = headCacheNode !== null ? headCacheNode.head : null\n const prefetchHead =\n headCacheNode !== null ? headCacheNode.prefetchHead : null\n\n // If no prefetch data is available, then we go straight to rendering `head`.\n const resolvedPrefetchRsc = prefetchHead !== null ? prefetchHead : head\n\n // We use `useDeferredValue` to handle switching between the prefetched and\n // final values. The second argument is returned on initial render, then it\n // re-renders with the first argument.\n return useDeferredValue(head, resolvedPrefetchRsc)\n}\n\n/**\n * The global router that wraps the application components.\n */\nfunction Router({\n actionQueue,\n globalError,\n webSocket,\n staticIndicatorState,\n}: {\n actionQueue: AppRouterActionQueue\n globalError: GlobalErrorState\n webSocket: WebSocket | undefined\n staticIndicatorState: StaticIndicatorState | undefined\n}) {\n const state = useActionQueue(actionQueue)\n const { canonicalUrl } = state\n // Add memoized pathname/query for useSearchParams and usePathname.\n const { searchParams, pathname } = useMemo(() => {\n const url = new URL(\n canonicalUrl,\n typeof window === 'undefined' ? 'http://n' : window.location.href\n )\n\n return {\n // This is turned into a readonly class in `useSearchParams`\n searchParams: url.searchParams,\n pathname: hasBasePath(url.pathname)\n ? removeBasePath(url.pathname)\n : url.pathname,\n }\n }, [canonicalUrl])\n\n if (process.env.NODE_ENV !== 'production') {\n const { cache, tree } = state\n\n // This hook is in a conditional but that is ok because `process.env.NODE_ENV` never changes\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useEffect(() => {\n // Add `window.nd` for debugging purposes.\n // This is not meant for use in applications as concurrent rendering will affect the cache/tree/router.\n // @ts-ignore this is for debugging\n window.nd = {\n router: publicAppRouterInstance,\n cache,\n tree,\n }\n }, [cache, tree])\n }\n\n useEffect(() => {\n // If the app is restored from bfcache, it's possible that\n // pushRef.mpaNavigation is true, which would mean that any re-render of this component\n // would trigger the mpa navigation logic again from the lines below.\n // This will restore the router to the initial state in the event that the app is restored from bfcache.\n function handlePageShow(event: PageTransitionEvent) {\n if (\n !event.persisted ||\n !window.history.state?.__PRIVATE_NEXTJS_INTERNALS_TREE\n ) {\n return\n }\n\n // Clear the pendingMpaPath value so that a subsequent MPA navigation to the same URL can be triggered.\n // This is necessary because if the browser restored from bfcache, the pendingMpaPath would still be set to the value\n // of the last MPA navigation.\n globalMutable.pendingMpaPath = undefined\n\n dispatchAppRouterAction({\n type: ACTION_RESTORE,\n url: new URL(window.location.href),\n historyState: window.history.state.__PRIVATE_NEXTJS_INTERNALS_TREE,\n })\n }\n\n window.addEventListener('pageshow', handlePageShow)\n\n return () => {\n window.removeEventListener('pageshow', handlePageShow)\n }\n }, [])\n\n useEffect(() => {\n // Ensure that any redirect errors that bubble up outside of the RedirectBoundary\n // are caught and handled by the router.\n function handleUnhandledRedirect(\n event: ErrorEvent | PromiseRejectionEvent\n ) {\n const error = 'reason' in event ? event.reason : event.error\n if (isRedirectError(error)) {\n event.preventDefault()\n const url = getURLFromRedirectError(error)\n const redirectType = getRedirectTypeFromError(error)\n // TODO: This should access the router methods directly, rather than\n // go through the public interface.\n if (redirectType === RedirectType.push) {\n publicAppRouterInstance.push(url, {})\n } else {\n publicAppRouterInstance.replace(url, {})\n }\n }\n }\n window.addEventListener('error', handleUnhandledRedirect)\n window.addEventListener('unhandledrejection', handleUnhandledRedirect)\n\n return () => {\n window.removeEventListener('error', handleUnhandledRedirect)\n window.removeEventListener('unhandledrejection', handleUnhandledRedirect)\n }\n }, [])\n\n // When mpaNavigation flag is set do a hard navigation to the new url.\n // Infinitely suspend because we don't actually want to rerender any child\n // components with the new URL and any entangled state updates shouldn't\n // commit either (eg: useTransition isPending should stay true until the page\n // unloads).\n //\n // This is a side effect in render. Don't try this at home, kids. It's\n // probably safe because we know this is a singleton component and it's never\n // in . At least I hope so. (It will run twice in dev strict mode,\n // but that's... fine?)\n const { pushRef } = state\n if (pushRef.mpaNavigation) {\n // if there's a re-render, we don't want to trigger another redirect if one is already in flight to the same URL\n if (globalMutable.pendingMpaPath !== canonicalUrl) {\n const location = window.location\n if (pushRef.pendingPush) {\n location.assign(canonicalUrl)\n } else {\n location.replace(canonicalUrl)\n }\n\n globalMutable.pendingMpaPath = canonicalUrl\n }\n // TODO-APP: Should we listen to navigateerror here to catch failed\n // navigations somehow? And should we call window.stop() if a SPA navigation\n // should interrupt an MPA one?\n // NOTE: This is intentionally using `throw` instead of `use` because we're\n // inside an externally mutable condition (pushRef.mpaNavigation), which\n // violates the rules of hooks.\n throw unresolvedThenable\n }\n\n useEffect(() => {\n const originalPushState = window.history.pushState.bind(window.history)\n const originalReplaceState = window.history.replaceState.bind(\n window.history\n )\n\n // Ensure the canonical URL in the Next.js Router is updated when the URL is changed so that `usePathname` and `useSearchParams` hold the pushed values.\n const applyUrlFromHistoryPushReplace = (\n url: string | URL | null | undefined\n ) => {\n const href = window.location.href\n const appHistoryState: AppHistoryState | undefined =\n window.history.state?.__PRIVATE_NEXTJS_INTERNALS_TREE\n\n startTransition(() => {\n dispatchAppRouterAction({\n type: ACTION_RESTORE,\n url: new URL(url ?? href, href),\n historyState: appHistoryState,\n })\n })\n }\n\n /**\n * Patch pushState to ensure external changes to the history are reflected in the Next.js Router.\n * Ensures Next.js internal history state is copied to the new history entry.\n * Ensures usePathname and useSearchParams hold the newly provided url.\n */\n window.history.pushState = function pushState(\n data: any,\n _unused: string,\n url?: string | URL | null\n ): void {\n // TODO: Warn when Navigation API is available (navigation.navigate() should be used)\n // Avoid a loop when Next.js internals trigger pushState/replaceState\n if (data?.__NA || data?._N) {\n return originalPushState(data, _unused, url)\n }\n\n data = copyNextJsInternalHistoryState(data)\n\n if (url) {\n applyUrlFromHistoryPushReplace(url)\n }\n\n return originalPushState(data, _unused, url)\n }\n\n /**\n * Patch replaceState to ensure external changes to the history are reflected in the Next.js Router.\n * Ensures Next.js internal history state is copied to the new history entry.\n * Ensures usePathname and useSearchParams hold the newly provided url.\n */\n window.history.replaceState = function replaceState(\n data: any,\n _unused: string,\n url?: string | URL | null\n ): void {\n // TODO: Warn when Navigation API is available (navigation.navigate() should be used)\n // Avoid a loop when Next.js internals trigger pushState/replaceState\n if (data?.__NA || data?._N) {\n return originalReplaceState(data, _unused, url)\n }\n data = copyNextJsInternalHistoryState(data)\n\n if (url) {\n applyUrlFromHistoryPushReplace(url)\n }\n return originalReplaceState(data, _unused, url)\n }\n\n /**\n * Handle popstate event, this is used to handle back/forward in the browser.\n * By default dispatches ACTION_RESTORE, however if the history entry was not pushed/replaced by app-router it will reload the page.\n * That case can happen when the old router injected the history entry.\n */\n const onPopState = (event: PopStateEvent) => {\n if (!event.state) {\n // TODO-APP: this case only happens when pushState/replaceState was called outside of Next.js. It should probably reload the page in this case.\n return\n }\n\n // This case happens when the history entry was pushed by the `pages` router.\n if (!event.state.__NA) {\n window.location.reload()\n return\n }\n\n // TODO-APP: Ideally the back button should not use startTransition as it should apply the updates synchronously\n // Without startTransition works if the cache is there for this path\n startTransition(() => {\n dispatchTraverseAction(\n window.location.href,\n event.state.__PRIVATE_NEXTJS_INTERNALS_TREE\n )\n })\n }\n\n // Register popstate event to call onPopstate.\n window.addEventListener('popstate', onPopState)\n return () => {\n window.history.pushState = originalPushState\n window.history.replaceState = originalReplaceState\n window.removeEventListener('popstate', onPopState)\n }\n }, [])\n\n const { cache, tree, nextUrl, focusAndScrollRef, previousNextUrl } = state\n\n const matchingHead = useMemo(() => {\n return findHeadInCache(cache, tree[1])\n }, [cache, tree])\n\n // Add memoized pathParams for useParams.\n const pathParams = useMemo(() => {\n return getSelectedParams(tree)\n }, [tree])\n\n // Create instrumented promises for navigation hooks (dev-only)\n // These are specially instrumented promises to show in the Suspense DevTools\n // Promises are cached outside of render to survive suspense retries.\n let instrumentedNavigationPromises: NavigationPromises | null = null\n if (process.env.NODE_ENV !== 'production') {\n const { createRootNavigationPromises } =\n require('./navigation-devtools') as typeof import('./navigation-devtools')\n\n instrumentedNavigationPromises = createRootNavigationPromises(\n tree,\n pathname,\n searchParams,\n pathParams\n )\n }\n\n const layoutRouterContext = useMemo(() => {\n return {\n parentTree: tree,\n parentCacheNode: cache,\n parentSegmentPath: null,\n parentParams: {},\n // This is the \"name\" that shows up in the Suspense DevTools.\n // It represents the root of the app.\n debugNameContext: '/',\n // Root node always has `url`\n // Provided in AppTreeContext to ensure it can be overwritten in layout-router\n url: canonicalUrl,\n // Root segment is always active\n isActive: true,\n }\n }, [tree, cache, canonicalUrl])\n\n const globalLayoutRouterContext = useMemo(() => {\n return {\n tree,\n focusAndScrollRef,\n nextUrl,\n previousNextUrl,\n }\n }, [tree, focusAndScrollRef, nextUrl, previousNextUrl])\n\n let head\n if (matchingHead !== null) {\n // The head is wrapped in an extra component so we can use\n // `useDeferredValue` to swap between the prefetched and final versions of\n // the head. (This is what LayoutRouter does for segment data, too.)\n //\n // The `key` is used to remount the component whenever the head moves to\n // a different segment.\n const [headCacheNode, headKey, headKeyWithoutSearchParams] = matchingHead\n\n head = (\n \n )\n } else {\n head = null\n }\n\n let content = (\n \n {head}\n {/* RootLayoutBoundary enables detection of Suspense boundaries around the root layout.\n When users wrap their layout in , this creates the component stack pattern\n \"Suspense -> RootLayoutBoundary\" which dynamic-rendering.ts uses to allow dynamic rendering. */}\n {cache.rsc}\n \n \n )\n\n if (process.env.NODE_ENV !== 'production') {\n // In development, we apply few error boundaries and hot-reloader:\n // - DevRootHTTPAccessFallbackBoundary: avoid using navigation API like notFound() in root layout\n // - HotReloader:\n // - hot-reload the app when the code changes\n // - render dev overlay\n // - catch runtime errors and display global-error when necessary\n if (typeof window !== 'undefined') {\n const { DevRootHTTPAccessFallbackBoundary } =\n require('./dev-root-http-access-fallback-boundary') as typeof import('./dev-root-http-access-fallback-boundary')\n content = (\n \n {content}\n \n )\n }\n const HotReloader: typeof import('../dev/hot-reloader/app/hot-reloader-app').default =\n (\n require('../dev/hot-reloader/app/hot-reloader-app') as typeof import('../dev/hot-reloader/app/hot-reloader-app')\n ).default\n\n content = (\n \n {content}\n \n )\n } else {\n content = (\n \n {content}\n \n )\n }\n\n return (\n <>\n \n \n \n \n \n \n \n {/* TODO: We should be able to remove this context. useRouter\n should import from app-router-instance instead. It's only\n necessary because useRouter is shared between Pages and\n App Router. We should fork that module, then remove this\n context provider. */}\n \n \n {content}\n \n \n \n \n \n \n \n \n )\n}\n\nexport default function AppRouter({\n actionQueue,\n globalErrorState,\n webSocket,\n staticIndicatorState,\n}: {\n actionQueue: AppRouterActionQueue\n globalErrorState: GlobalErrorState\n webSocket?: WebSocket\n staticIndicatorState?: StaticIndicatorState\n}) {\n useNavFailureHandler()\n\n const router = (\n \n )\n\n // At the very top level, use the default GlobalError component as the final fallback.\n // When the app router itself fails, which means the framework itself fails, we show the default error.\n return (\n \n {router}\n \n )\n}\n\nconst runtimeStyles = new Set()\nlet runtimeStyleChanged = new Set<() => void>()\n\nglobalThis._N_E_STYLE_LOAD = function (href: string) {\n let len = runtimeStyles.size\n runtimeStyles.add(href)\n if (runtimeStyles.size !== len) {\n runtimeStyleChanged.forEach((cb) => cb())\n }\n // TODO figure out how to get a promise here\n // But maybe it's not necessary as react would block rendering until it's loaded\n return Promise.resolve()\n}\n\nfunction RuntimeStyles() {\n const [, forceUpdate] = React.useState(0)\n const renderedStylesSize = runtimeStyles.size\n useEffect(() => {\n const changed = () => forceUpdate((c) => c + 1)\n runtimeStyleChanged.add(changed)\n if (renderedStylesSize !== runtimeStyles.size) {\n changed()\n }\n return () => {\n runtimeStyleChanged.delete(changed)\n }\n }, [renderedStylesSize, forceUpdate])\n\n const dplId = getDeploymentIdQueryOrEmptyString()\n return [...runtimeStyles].map((href, i) => (\n \n ))\n}\n"],"names":["AppRouter","globalMutable","HistoryUpdater","appRouterState","useInsertionEffect","process","env","__NEXT_APP_NAV_FAIL_HANDLING","window","next","__pendingUrl","undefined","tree","pushRef","canonicalUrl","renderedSearch","appHistoryState","historyState","preserveCustomHistoryState","history","state","__NA","__PRIVATE_NEXTJS_INTERNALS_TREE","pendingPush","createHrefFromUrl","URL","location","href","pushState","replaceState","useEffect","pingVisibleLinks","nextUrl","copyNextJsInternalHistoryState","data","currentState","Head","headCacheNode","head","prefetchHead","resolvedPrefetchRsc","useDeferredValue","Router","actionQueue","globalError","webSocket","staticIndicatorState","useActionQueue","searchParams","pathname","useMemo","url","hasBasePath","removeBasePath","NODE_ENV","cache","nd","router","publicAppRouterInstance","handlePageShow","event","persisted","pendingMpaPath","dispatchAppRouterAction","type","ACTION_RESTORE","addEventListener","removeEventListener","handleUnhandledRedirect","error","reason","isRedirectError","preventDefault","getURLFromRedirectError","redirectType","getRedirectTypeFromError","RedirectType","push","replace","mpaNavigation","assign","unresolvedThenable","originalPushState","bind","originalReplaceState","applyUrlFromHistoryPushReplace","startTransition","_unused","_N","onPopState","reload","dispatchTraverseAction","focusAndScrollRef","previousNextUrl","matchingHead","findHeadInCache","pathParams","getSelectedParams","instrumentedNavigationPromises","createRootNavigationPromises","require","layoutRouterContext","parentTree","parentCacheNode","parentSegmentPath","parentParams","debugNameContext","isActive","globalLayoutRouterContext","headKey","headKeyWithoutSearchParams","content","RedirectBoundary","RootLayoutBoundary","rsc","AppRouterAnnouncer","DevRootHTTPAccessFallbackBoundary","HotReloader","default","RootErrorBoundary","errorComponent","errorStyles","RuntimeStyles","NavigationPromisesContext","Provider","value","PathParamsContext","PathnameContext","SearchParamsContext","GlobalLayoutRouterContext","AppRouterContext","LayoutRouterContext","globalErrorState","useNavFailureHandler","DefaultGlobalError","runtimeStyles","Set","runtimeStyleChanged","globalThis","_N_E_STYLE_LOAD","len","size","add","forEach","cb","Promise","resolve","forceUpdate","React","useState","renderedStylesSize","changed","c","delete","dplId","getDeploymentIdQueryOrEmptyString","map","i","link","rel","precedence"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 12296, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/components/router-reducer/create-initial-router-state.ts"],"sourcesContent":["import type { FlightDataPath } from '../../../shared/lib/app-router-types'\n\nimport { createHrefFromUrl } from './create-href-from-url'\nimport { extractPathFromFlightRouterState } from './compute-changed-path'\n\nimport type { AppRouterState } from './router-reducer-types'\nimport { getFlightDataPartsFromPath } from '../../flight-data-helpers'\nimport { createInitialCacheNodeForHydration } from './ppr-navigations'\n\nexport interface InitialRouterStateParameters {\n navigatedAt: number\n initialCanonicalUrlParts: string[]\n initialRenderedSearch: string\n initialFlightData: FlightDataPath[]\n location: Location | null\n}\n\nexport function createInitialRouterState({\n navigatedAt,\n initialFlightData,\n initialCanonicalUrlParts,\n initialRenderedSearch,\n location,\n}: InitialRouterStateParameters): AppRouterState {\n // When initialized on the server, the canonical URL is provided as an array of parts.\n // This is to ensure that when the RSC payload streamed to the client, crawlers don't interpret it\n // as a URL that should be crawled.\n const initialCanonicalUrl = initialCanonicalUrlParts.join('/')\n\n const normalizedFlightData = getFlightDataPartsFromPath(initialFlightData[0])\n const {\n tree: initialTree,\n seedData: initialSeedData,\n head: initialHead,\n } = normalizedFlightData\n // For the SSR render, seed data should always be available (we only send back a `null` response\n // in the case of a `loading` segment, pre-PPR.)\n\n const canonicalUrl =\n // location.href is read as the initial value for canonicalUrl in the browser\n // This is safe to do as canonicalUrl can't be rendered, it's only used to control the history updates in the useEffect further down in this file.\n location\n ? // window.location does not have the same type as URL but has all the fields createHrefFromUrl needs.\n createHrefFromUrl(location)\n : initialCanonicalUrl\n\n const initialState = {\n tree: initialTree,\n cache: createInitialCacheNodeForHydration(\n navigatedAt,\n initialTree,\n initialSeedData,\n initialHead\n ),\n pushRef: {\n pendingPush: false,\n mpaNavigation: false,\n // First render needs to preserve the previous window.history.state\n // to avoid it being overwritten on navigation back/forward with MPA Navigation.\n preserveCustomHistoryState: true,\n },\n focusAndScrollRef: {\n apply: false,\n onlyHashChange: false,\n hashFragment: null,\n segmentPaths: [],\n },\n canonicalUrl,\n renderedSearch: initialRenderedSearch,\n nextUrl:\n // the || operator is intentional, the pathname can be an empty string\n (extractPathFromFlightRouterState(initialTree) || location?.pathname) ??\n null,\n previousNextUrl: null,\n debugInfo: null,\n }\n\n return initialState\n}\n"],"names":["createInitialRouterState","navigatedAt","initialFlightData","initialCanonicalUrlParts","initialRenderedSearch","location","initialCanonicalUrl","join","normalizedFlightData","getFlightDataPartsFromPath","tree","initialTree","seedData","initialSeedData","head","initialHead","canonicalUrl","createHrefFromUrl","initialState","cache","createInitialCacheNodeForHydration","pushRef","pendingPush","mpaNavigation","preserveCustomHistoryState","focusAndScrollRef","apply","onlyHashChange","hashFragment","segmentPaths","renderedSearch","nextUrl","extractPathFromFlightRouterState","pathname","previousNextUrl","debugInfo"],"mappings":";;;+BAiBgBA,4BAAAA;;;eAAAA;;;mCAfkB;oCACe;mCAGN;gCACQ;AAU5C,SAASA,yBAAyB,EACvCC,WAAW,EACXC,iBAAiB,EACjBC,wBAAwB,EACxBC,qBAAqB,EACrBC,QAAQ,EACqB;IAC7B,sFAAsF;IACtF,kGAAkG;IAClG,mCAAmC;IACnC,MAAMC,sBAAsBH,yBAAyBI,IAAI,CAAC;IAE1D,MAAMC,uBAAuBC,CAAAA,GAAAA,mBAAAA,0BAA0B,EAACP,iBAAiB,CAAC,EAAE;IAC5E,MAAM,EACJQ,MAAMC,WAAW,EACjBC,UAAUC,eAAe,EACzBC,MAAMC,WAAW,EAClB,GAAGP;IACJ,gGAAgG;IAChG,gDAAgD;IAEhD,MAAMQ,eACJ,AACA,6EAD6E,qEACqE;IAClJX,WAEIY,CAAAA,GAAAA,mBAAAA,iBAAiB,EAACZ,YAClBC;IAEN,MAAMY,eAAe;QACnBR,MAAMC;QACNQ,OAAOC,CAAAA,GAAAA,gBAAAA,kCAAkC,EACvCnB,aACAU,aACAE,iBACAE;QAEFM,SAAS;YACPC,aAAa;YACbC,eAAe;YACf,mEAAmE;YACnE,gFAAgF;YAChFC,4BAA4B;QAC9B;QACAC,mBAAmB;YACjBC,OAAO;YACPC,gBAAgB;YAChBC,cAAc;YACdC,cAAc,EAAE;QAClB;QACAb;QACAc,gBAAgB1B;QAChB2B,SAEE,AADA,AACCC,CAAAA,CAAAA,GAAAA,oBAAAA,gCAAgC,EAACrB,WADoC,KACpBN,UAAU4B,QAAO,KACnE;QACFC,iBAAiB;QACjBC,WAAW;IACb;IAEA,OAAOjB;AACT","ignoreList":[0]}}, + {"offset": {"line": 12355, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/app-link-gc.ts"],"sourcesContent":["export function linkGc() {\n // TODO-APP: Remove this logic when Float has GC built-in in development.\n if (process.env.NODE_ENV !== 'production') {\n const callback = (mutationList: MutationRecord[]) => {\n for (const mutation of mutationList) {\n if (mutation.type === 'childList') {\n for (const node of mutation.addedNodes) {\n if (\n 'tagName' in node &&\n (node as HTMLLinkElement).tagName === 'LINK'\n ) {\n const link = node as HTMLLinkElement\n if (link.dataset.precedence?.startsWith('next')) {\n const href = link.getAttribute('href')\n if (href) {\n const [resource, version] = href.split('?v=', 2)\n if (version) {\n const currentOrigin = window.location.origin\n const allLinks = [\n ...document.querySelectorAll(\n 'link[href^=\"' + resource + '\"]'\n ),\n // It's possible that the resource is a full URL or only pathname,\n // so we need to remove the alternative href as well.\n ...document.querySelectorAll(\n 'link[href^=\"' +\n (resource.startsWith(currentOrigin)\n ? resource.slice(currentOrigin.length)\n : currentOrigin + resource) +\n '\"]'\n ),\n ] as HTMLLinkElement[]\n\n for (const otherLink of allLinks) {\n if (otherLink.dataset.precedence?.startsWith('next')) {\n const otherHref = otherLink.getAttribute('href')\n if (otherHref) {\n const [, otherVersion] = otherHref.split('?v=', 2)\n if (!otherVersion || +otherVersion < +version) {\n // Delay the removal of the stylesheet to avoid FOUC\n // caused by `@font-face` rules, as they seem to be\n // a couple of ticks delayed between the old and new\n // styles being swapped even if the font is cached.\n setTimeout(() => {\n otherLink.remove()\n }, 5)\n const preloadLink = document.querySelector(\n `link[rel=\"preload\"][as=\"style\"][href=\"${otherHref}\"]`\n )\n if (preloadLink) {\n preloadLink.remove()\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n\n // Create an observer instance linked to the callback function\n const observer = new MutationObserver(callback)\n observer.observe(document.head, {\n childList: true,\n })\n }\n}\n"],"names":["linkGc","process","env","NODE_ENV","callback","mutationList","mutation","type","node","addedNodes","tagName","link","dataset","precedence","startsWith","href","getAttribute","resource","version","split","currentOrigin","window","location","origin","allLinks","document","querySelectorAll","slice","length","otherLink","otherHref","otherVersion","setTimeout","remove","preloadLink","querySelector","observer","MutationObserver","observe","head","childList"],"mappings":"AAEMC,QAAQC,GAAG,CAACC,QAAQ,KAAK;;;;;+BAFfH,UAAAA;;;eAAAA;;;AAAT,SAASA;IACd,yEAAyE;IACzE,wCAA2C;QACzC,MAAMI,WAAW,CAACC;YAChB,KAAK,MAAMC,YAAYD,aAAc;gBACnC,IAAIC,SAASC,IAAI,KAAK,aAAa;oBACjC,KAAK,MAAMC,QAAQF,SAASG,UAAU,CAAE;wBACtC,IACE,aAAaD,QACZA,KAAyBE,OAAO,KAAK,QACtC;4BACA,MAAMC,OAAOH;4BACb,IAAIG,KAAKC,OAAO,CAACC,UAAU,EAAEC,WAAW,SAAS;gCAC/C,MAAMC,OAAOJ,KAAKK,YAAY,CAAC;gCAC/B,IAAID,MAAM;oCACR,MAAM,CAACE,UAAUC,QAAQ,GAAGH,KAAKI,KAAK,CAAC,OAAO;oCAC9C,IAAID,SAAS;wCACX,MAAME,gBAAgBC,OAAOC,QAAQ,CAACC,MAAM;wCAC5C,MAAMC,WAAW;+CACZC,SAASC,gBAAgB,CAC1B,iBAAiBT,WAAW;4CAE9B,kEAAkE;4CAClE,qDAAqD;+CAClDQ,SAASC,gBAAgB,CAC1B,iBACGT,CAAAA,SAASH,UAAU,CAACM,iBACjBH,SAASU,KAAK,CAACP,cAAcQ,MAAM,IACnCR,gBAAgBH,QAAO,IAC3B;yCAEL;wCAED,KAAK,MAAMY,aAAaL,SAAU;4CAChC,IAAIK,UAAUjB,OAAO,CAACC,UAAU,EAAEC,WAAW,SAAS;gDACpD,MAAMgB,YAAYD,UAAUb,YAAY,CAAC;gDACzC,IAAIc,WAAW;oDACb,MAAM,GAAGC,aAAa,GAAGD,UAAUX,KAAK,CAAC,OAAO;oDAChD,IAAI,CAACY,gBAAgB,CAACA,eAAe,CAACb,SAAS;wDAC7C,oDAAoD;wDACpD,mDAAmD;wDACnD,oDAAoD;wDACpD,mDAAmD;wDACnDc,WAAW;4DACTH,UAAUI,MAAM;wDAClB,GAAG;wDACH,MAAMC,cAAcT,SAASU,aAAa,CACxC,CAAC,sCAAsC,EAAEL,UAAU,EAAE,CAAC;wDAExD,IAAII,aAAa;4DACfA,YAAYD,MAAM;wDACpB;oDACF;gDACF;4CACF;wCACF;oCACF;gCACF;4BACF;wBACF;oBACF;gBACF;YACF;QACF;QAEA,8DAA8D;QAC9D,MAAMG,WAAW,IAAIC,iBAAiBjC;QACtCgC,SAASE,OAAO,CAACb,SAASc,IAAI,EAAE;YAC9BC,WAAW;QACb;IACF;AACF","ignoreList":[0]}}, + {"offset": {"line": 12434, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/app-index.tsx"],"sourcesContent":["import './app-globals'\nimport ReactDOMClient from 'react-dom/client'\nimport React from 'react'\n// TODO: Explicitly import from client.browser\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport {\n createFromReadableStream as createFromReadableStreamBrowser,\n createFromFetch as createFromFetchBrowser,\n} from 'react-server-dom-webpack/client'\nimport { HeadManagerContext } from '../shared/lib/head-manager-context.shared-runtime'\nimport { onRecoverableError } from './react-client-callbacks/on-recoverable-error'\nimport {\n onCaughtError,\n onUncaughtError,\n} from './react-client-callbacks/error-boundary-callbacks'\nimport { callServer } from './app-call-server'\nimport { findSourceMapURL } from './app-find-source-map-url'\nimport {\n type AppRouterActionQueue,\n createMutableActionQueue,\n} from './components/app-router-instance'\nimport AppRouter from './components/app-router'\nimport type { InitialRSCPayload } from '../shared/lib/app-router-types'\nimport { createInitialRouterState } from './components/router-reducer/create-initial-router-state'\nimport { MissingSlotContext } from '../shared/lib/app-router-context.shared-runtime'\nimport { setAppBuildId } from './app-build-id'\nimport type { StaticIndicatorState } from './dev/hot-reloader/app/hot-reloader-app'\nimport { createInitialRSCPayloadFromFallbackPrerender } from './flight-data-helpers'\n\n/// \n\nconst createFromReadableStream =\n createFromReadableStreamBrowser as (typeof import('react-server-dom-webpack/client.browser'))['createFromReadableStream']\nconst createFromFetch =\n createFromFetchBrowser as (typeof import('react-server-dom-webpack/client.browser'))['createFromFetch']\n\nconst appElement: HTMLElement | Document = document\n\nconst encoder = new TextEncoder()\n\nlet initialServerDataBuffer: (string | Uint8Array)[] | undefined = undefined\nlet initialServerDataWriter: ReadableStreamDefaultController | undefined =\n undefined\nlet initialServerDataLoaded = false\nlet initialServerDataFlushed = false\n\nlet initialFormStateData: null | any = null\n\ntype FlightSegment =\n | [isBootStrap: 0]\n | [isNotBootstrap: 1, responsePartial: string]\n | [isFormState: 2, formState: any]\n | [isBinary: 3, responseBase64Partial: string]\n\ntype NextFlight = Omit, 'push'> & {\n push: (seg: FlightSegment) => void\n}\n\ndeclare global {\n // If you're working in a browser environment\n interface Window {\n /**\n * request ID, dev-only\n */\n __next_r?: string\n __next_f: NextFlight\n }\n}\n\nfunction nextServerDataCallback(seg: FlightSegment): void {\n if (seg[0] === 0) {\n initialServerDataBuffer = []\n } else if (seg[0] === 1) {\n if (!initialServerDataBuffer)\n throw new Error('Unexpected server data: missing bootstrap script.')\n\n if (initialServerDataWriter) {\n initialServerDataWriter.enqueue(encoder.encode(seg[1]))\n } else {\n initialServerDataBuffer.push(seg[1])\n }\n } else if (seg[0] === 2) {\n initialFormStateData = seg[1]\n } else if (seg[0] === 3) {\n if (!initialServerDataBuffer)\n throw new Error('Unexpected server data: missing bootstrap script.')\n\n // Decode the base64 string back to binary data.\n const binaryString = atob(seg[1])\n const decodedChunk = new Uint8Array(binaryString.length)\n for (var i = 0; i < binaryString.length; i++) {\n decodedChunk[i] = binaryString.charCodeAt(i)\n }\n\n if (initialServerDataWriter) {\n initialServerDataWriter.enqueue(decodedChunk)\n } else {\n initialServerDataBuffer.push(decodedChunk)\n }\n }\n}\n\nfunction isStreamErrorOrUnfinished(ctr: ReadableStreamDefaultController) {\n // If `desiredSize` is null, it means the stream is closed or errored. If it is lower than 0, the stream is still unfinished.\n return ctr.desiredSize === null || ctr.desiredSize < 0\n}\n\n// There might be race conditions between `nextServerDataRegisterWriter` and\n// `DOMContentLoaded`. The former will be called when React starts to hydrate\n// the root, the latter will be called when the DOM is fully loaded.\n// For streaming, the former is called first due to partial hydration.\n// For non-streaming, the latter can be called first.\n// Hence, we use two variables `initialServerDataLoaded` and\n// `initialServerDataFlushed` to make sure the writer will be closed and\n// `initialServerDataBuffer` will be cleared in the right time.\nfunction nextServerDataRegisterWriter(ctr: ReadableStreamDefaultController) {\n if (initialServerDataBuffer) {\n initialServerDataBuffer.forEach((val) => {\n ctr.enqueue(typeof val === 'string' ? encoder.encode(val) : val)\n })\n if (initialServerDataLoaded && !initialServerDataFlushed) {\n if (isStreamErrorOrUnfinished(ctr)) {\n ctr.error(\n new Error(\n 'The connection to the page was unexpectedly closed, possibly due to the stop button being clicked, loss of Wi-Fi, or an unstable internet connection.'\n )\n )\n } else {\n ctr.close()\n }\n initialServerDataFlushed = true\n initialServerDataBuffer = undefined\n }\n }\n\n initialServerDataWriter = ctr\n}\n\n// When `DOMContentLoaded`, we can close all pending writers to finish hydration.\nconst DOMContentLoaded = function () {\n if (initialServerDataWriter && !initialServerDataFlushed) {\n initialServerDataWriter.close()\n initialServerDataFlushed = true\n initialServerDataBuffer = undefined\n }\n initialServerDataLoaded = true\n}\n\n// It's possible that the DOM is already loaded.\nif (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', DOMContentLoaded, false)\n} else {\n // Delayed in marco task to ensure it's executed later than hydration\n setTimeout(DOMContentLoaded)\n}\n\nconst nextServerDataLoadingGlobal = (self.__next_f = self.__next_f || [])\n\n// Consume all buffered chunks and clear the global data array right after to release memory.\n// Otherwise it will be retained indefinitely.\nnextServerDataLoadingGlobal.forEach(nextServerDataCallback)\nnextServerDataLoadingGlobal.length = 0\n\n// Patch its push method so subsequent chunks are handled (but not actually pushed to the array).\nnextServerDataLoadingGlobal.push = nextServerDataCallback\n\nconst readable = new ReadableStream({\n start(controller) {\n nextServerDataRegisterWriter(controller)\n },\n})\nif (process.env.NODE_ENV !== 'production') {\n // @ts-expect-error\n readable.name = 'hydration'\n}\n\nlet debugChannel:\n | { readable?: ReadableStream; writable?: WritableStream }\n | undefined\n\nif (\n process.env.NODE_ENV !== 'production' &&\n process.env.__NEXT_REACT_DEBUG_CHANNEL &&\n typeof window !== 'undefined'\n) {\n const { createDebugChannel } =\n require('./dev/debug-channel') as typeof import('./dev/debug-channel')\n\n debugChannel = createDebugChannel(undefined)\n}\n\nconst clientResumeFetch: Promise | undefined =\n // @ts-expect-error\n window.__NEXT_CLIENT_RESUME\n\nlet initialServerResponse: Promise\nif (clientResumeFetch) {\n initialServerResponse = Promise.resolve(\n createFromFetch(clientResumeFetch, {\n callServer,\n findSourceMapURL,\n debugChannel,\n })\n ).then(async (fallbackInitialRSCPayload) =>\n createInitialRSCPayloadFromFallbackPrerender(\n await clientResumeFetch,\n fallbackInitialRSCPayload\n )\n )\n} else {\n initialServerResponse = createFromReadableStream(\n readable,\n {\n callServer,\n findSourceMapURL,\n debugChannel,\n startTime: 0,\n }\n )\n}\n\nfunction ServerRoot({\n initialRSCPayload,\n actionQueue,\n webSocket,\n staticIndicatorState,\n}: {\n initialRSCPayload: InitialRSCPayload\n actionQueue: AppRouterActionQueue\n webSocket: WebSocket | undefined\n staticIndicatorState: StaticIndicatorState | undefined\n}): React.ReactNode {\n const router = (\n \n )\n\n if (process.env.NODE_ENV === 'development' && initialRSCPayload.m) {\n // We provide missing slot information in a context provider only during development\n // as we log some additional information about the missing slots in the console.\n return (\n \n {router}\n \n )\n }\n\n return router\n}\n\nconst StrictModeIfEnabled = process.env.__NEXT_STRICT_MODE_APP\n ? React.StrictMode\n : React.Fragment\n\nfunction Root({ children }: React.PropsWithChildren<{}>) {\n if (process.env.__NEXT_TEST_MODE) {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n React.useEffect(() => {\n window.__NEXT_HYDRATED = true\n window.__NEXT_HYDRATED_AT = performance.now()\n window.__NEXT_HYDRATED_CB?.()\n }, [])\n }\n\n return children\n}\n\nconst enableTransitionIndicator = process.env.__NEXT_TRANSITION_INDICATOR\n\nfunction noDefaultTransitionIndicator() {\n return () => {}\n}\n\nconst reactRootOptions: ReactDOMClient.RootOptions = {\n onDefaultTransitionIndicator: enableTransitionIndicator\n ? // TODO: Compose default with user-configureable (e.g. nprogress)\n undefined\n : noDefaultTransitionIndicator,\n onRecoverableError,\n onCaughtError,\n onUncaughtError,\n}\n\nexport type ClientInstrumentationHooks = {\n onRouterTransitionStart?: (\n url: string,\n navigationType: 'push' | 'replace' | 'traverse'\n ) => void\n}\n\nexport async function hydrate(\n instrumentationHooks: ClientInstrumentationHooks | null,\n assetPrefix: string\n) {\n let staticIndicatorState: StaticIndicatorState | undefined\n let webSocket: WebSocket | undefined\n\n if (process.env.NODE_ENV !== 'production') {\n const { createWebSocket } =\n require('./dev/hot-reloader/app/web-socket') as typeof import('./dev/hot-reloader/app/web-socket')\n\n staticIndicatorState = { pathname: null, appIsrManifest: null }\n webSocket = createWebSocket(assetPrefix, staticIndicatorState)\n }\n const initialRSCPayload = await initialServerResponse\n // setAppBuildId should be called only once, during JS initialization\n // and before any components have hydrated.\n setAppBuildId(initialRSCPayload.b)\n\n const initialTimestamp = Date.now()\n const actionQueue: AppRouterActionQueue = createMutableActionQueue(\n createInitialRouterState({\n navigatedAt: initialTimestamp,\n initialFlightData: initialRSCPayload.f,\n initialCanonicalUrlParts: initialRSCPayload.c,\n initialRenderedSearch: initialRSCPayload.q,\n location: window.location,\n }),\n instrumentationHooks\n )\n\n const reactEl = (\n \n \n \n \n \n \n \n )\n\n if (document.documentElement.id === '__next_error__') {\n let element = reactEl\n // Server rendering failed, fall back to client-side rendering\n if (process.env.NODE_ENV !== 'production') {\n const { RootLevelDevOverlayElement } =\n require('../next-devtools/userspace/app/client-entry') as typeof import('../next-devtools/userspace/app/client-entry')\n\n // Note this won't cause hydration mismatch because we are doing CSR w/o hydration\n element = (\n {element}\n )\n }\n\n ReactDOMClient.createRoot(appElement, reactRootOptions).render(element)\n } else {\n React.startTransition(() => {\n ReactDOMClient.hydrateRoot(appElement, reactEl, {\n ...reactRootOptions,\n formState: initialFormStateData,\n })\n })\n }\n\n // TODO-APP: Remove this logic when Float has GC built-in in development.\n if (process.env.NODE_ENV !== 'production') {\n const { linkGc } =\n require('./app-link-gc') as typeof import('./app-link-gc')\n linkGc()\n }\n}\n"],"names":["hydrate","createFromReadableStream","createFromReadableStreamBrowser","createFromFetch","createFromFetchBrowser","appElement","document","encoder","TextEncoder","initialServerDataBuffer","undefined","initialServerDataWriter","initialServerDataLoaded","initialServerDataFlushed","initialFormStateData","nextServerDataCallback","seg","Error","enqueue","encode","push","binaryString","atob","decodedChunk","Uint8Array","length","i","charCodeAt","isStreamErrorOrUnfinished","ctr","desiredSize","nextServerDataRegisterWriter","forEach","val","error","close","DOMContentLoaded","readyState","addEventListener","setTimeout","nextServerDataLoadingGlobal","self","__next_f","readable","ReadableStream","start","controller","process","env","NODE_ENV","name","debugChannel","__NEXT_REACT_DEBUG_CHANNEL","window","createDebugChannel","require","clientResumeFetch","__NEXT_CLIENT_RESUME","initialServerResponse","Promise","resolve","callServer","findSourceMapURL","then","fallbackInitialRSCPayload","createInitialRSCPayloadFromFallbackPrerender","startTime","ServerRoot","initialRSCPayload","actionQueue","webSocket","staticIndicatorState","router","AppRouter","globalErrorState","G","m","MissingSlotContext","value","StrictModeIfEnabled","__NEXT_STRICT_MODE_APP","React","StrictMode","Fragment","Root","children","__NEXT_TEST_MODE","useEffect","__NEXT_HYDRATED","__NEXT_HYDRATED_AT","performance","now","__NEXT_HYDRATED_CB","enableTransitionIndicator","__NEXT_TRANSITION_INDICATOR","noDefaultTransitionIndicator","reactRootOptions","onDefaultTransitionIndicator","onRecoverableError","onCaughtError","onUncaughtError","instrumentationHooks","assetPrefix","createWebSocket","pathname","appIsrManifest","setAppBuildId","b","initialTimestamp","Date","createMutableActionQueue","createInitialRouterState","navigatedAt","initialFlightData","f","initialCanonicalUrlParts","c","initialRenderedSearch","q","location","reactEl","HeadManagerContext","Provider","appDir","documentElement","id","element","RootLevelDevOverlayElement","ReactDOMClient","createRoot","render","startTransition","hydrateRoot","formState","linkGc"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 12698, "column": 0}, "map": {"version":3,"sources":["file:///home/rusty/Documents/SaintBarthVolley/saintBarthVolleyApp/frontend/node_modules/next/src/client/app-next-turbopack.ts"],"sourcesContent":["import { appBootstrap } from './app-bootstrap'\nimport { isRecoverableError } from './react-client-callbacks/on-recoverable-error'\n\nwindow.next.turbopack = true\n;(self as any).__webpack_hash__ = ''\n\n// eslint-disable-next-line @next/internal/typechecked-require\nconst instrumentationHooks = require('../lib/require-instrumentation-client')\n\nappBootstrap((assetPrefix) => {\n const { hydrate } = require('./app-index') as typeof import('./app-index')\n try {\n hydrate(instrumentationHooks, assetPrefix)\n } finally {\n if (process.env.NODE_ENV !== 'production') {\n const enableCacheIndicator = process.env.__NEXT_CACHE_COMPONENTS\n const { getOwnerStack } =\n require('../next-devtools/userspace/app/errors/stitched-error') as typeof import('../next-devtools/userspace/app/errors/stitched-error')\n const { renderAppDevOverlay } =\n require('next/dist/compiled/next-devtools') as typeof import('next/dist/compiled/next-devtools')\n renderAppDevOverlay(\n getOwnerStack,\n isRecoverableError,\n enableCacheIndicator\n )\n }\n }\n})\n"],"names":["window","next","turbopack","self","__webpack_hash__","instrumentationHooks","require","appBootstrap","assetPrefix","hydrate","process","env","NODE_ENV","enableCacheIndicator","__NEXT_CACHE_COMPONENTS","getOwnerStack","renderAppDevOverlay","isRecoverableError"],"mappings":"AAcQU,QAAQC,GAAG,CAACC,QAAQ,KAAK;;;;;8BAdJ;oCACM;AAEnCZ,OAAOC,IAAI,CAACC,SAAS,GAAG;AACtBC,KAAaC,gBAAgB,GAAG;AAElC,8DAA8D;AAC9D,MAAMC,uBAAuBC,QAAQ;AAErCC,CAAAA,GAAAA,cAAAA,YAAY,EAAC,CAACC;IACZ,MAAM,EAAEC,OAAO,EAAE,GAAGH,QAAQ;IAC5B,IAAI;QACFG,QAAQJ,sBAAsBG;IAChC,SAAU;QACR,wCAA2C;YACzC,MAAMK,uBAAuBH,QAAQC,GAAG,CAACG,uBAAuB;YAChE,MAAM,EAAEC,aAAa,EAAE,GACrBT,QAAQ;YACV,MAAM,EAAEU,mBAAmB,EAAE,GAC3BV,QAAQ;YACVU,oBACED,eACAE,oBAAAA,kBAAkB,EAClBJ;QAEJ;IACF;AACF","ignoreList":[0]}}] } \ No newline at end of file diff --git a/saintBarthVolleyApp/frontend/.next/dev/static/chunks/src_app_globals_css_bad6b30c._.single.css b/saintBarthVolleyApp/frontend/.next/dev/static/chunks/src_app_globals_css_bad6b30c._.single.css index 195b31b..6d281f5 100644 --- a/saintBarthVolleyApp/frontend/.next/dev/static/chunks/src_app_globals_css_bad6b30c._.single.css +++ b/saintBarthVolleyApp/frontend/.next/dev/static/chunks/src_app_globals_css_bad6b30c._.single.css @@ -88,7 +88,6 @@ --color-orange-600: #f05100; --color-orange-700: #c53c00; --color-amber-50: #fffbeb; - --color-amber-100: #fef3c6; --color-amber-200: #fee685; --color-amber-400: #fcbb00; --color-amber-700: #b75000; @@ -109,8 +108,6 @@ --color-green-900: #0d542b; --color-green-950: #032e15; --color-teal-500: #00baa7; - --color-sky-100: #dff2fe; - --color-sky-700: #0069a4; --color-blue-50: #eff6ff; --color-blue-100: #dbeafe; --color-blue-200: #bedbff; @@ -120,10 +117,8 @@ --color-purple-100: #f3e8ff; --color-purple-500: #ac4bff; --color-purple-700: #8200da; - --color-pink-100: #fce7f3; --color-pink-500: #f6339a; --color-pink-600: #e30076; - --color-pink-700: #c4005c; --color-gray-50: #f9fafb; --color-gray-100: #f3f4f6; --color-gray-200: #e5e7eb; @@ -214,7 +209,6 @@ --color-orange-600: lab(57.1026% 64.2584 89.8886); --color-orange-700: lab(46.4615% 57.7275 70.8507); --color-amber-50: lab(98.6252% -.635922 8.42309); - --color-amber-100: lab(95.916% -1.21653 23.111); --color-amber-200: lab(91.7203% -.505269 49.9084); --color-amber-400: lab(80.1641% 16.6016 99.2089); --color-amber-700: lab(47.2709% 42.9082 69.2966); @@ -235,8 +229,6 @@ --color-green-900: lab(30.797% -29.6927 17.382); --color-green-950: lab(15.6845% -20.4225 11.7249); --color-teal-500: lab(67.3859% -49.0983 -2.63511); - --color-sky-100: lab(94.3709% -4.56053 -8.23453); - --color-sky-700: lab(41.6013% -9.10804 -42.5647); --color-blue-50: lab(96.492% -1.14644 -5.11479); --color-blue-100: lab(92.0301% -2.24757 -11.6453); --color-blue-200: lab(86.15% -4.04379 -21.0797); @@ -246,10 +238,8 @@ --color-purple-100: lab(93.3333% 6.97437 -9.83434); --color-purple-500: lab(52.0183% 66.11 -78.2316); --color-purple-700: lab(36.1758% 69.8525 -80.0381); - --color-pink-100: lab(93.5864% 9.01193 -3.15079); --color-pink-500: lab(56.9303% 76.8162 -8.07021); --color-pink-600: lab(49.5493% 79.8381 2.31768); - --color-pink-700: lab(42.1737% 71.8009 7.42233); --color-gray-50: lab(98.2596% -.247031 -.706708); --color-gray-100: lab(96.1596% -.0823438 -1.13575); --color-gray-200: lab(91.6229% -.159115 -2.26791); @@ -772,10 +762,6 @@ margin-top: calc(var(--spacing) * 1); } - .mt-1\.5 { - margin-top: calc(var(--spacing) * 1.5); - } - .mt-2 { margin-top: calc(var(--spacing) * 2); } @@ -804,10 +790,6 @@ margin-top: calc(var(--spacing) * 12); } - .mt-20 { - margin-top: calc(var(--spacing) * 20); - } - .mt-auto { margin-top: auto; } @@ -844,26 +826,10 @@ margin-bottom: calc(var(--spacing) * 8); } - .mb-10 { - margin-bottom: calc(var(--spacing) * 10); - } - - .mb-12 { - margin-bottom: calc(var(--spacing) * 12); - } - - .mb-16 { - margin-bottom: calc(var(--spacing) * 16); - } - .-ml-1 { margin-left: calc(var(--spacing) * -1); } - .ml-1 { - margin-left: calc(var(--spacing) * 1); - } - .ml-2 { margin-left: calc(var(--spacing) * 2); } @@ -1120,10 +1086,6 @@ height: calc(var(--spacing) * 72); } - .h-80 { - height: calc(var(--spacing) * 80); - } - .h-\[calc\(100\%-1px\)\] { height: calc(100% - 1px); } @@ -1320,14 +1282,6 @@ width: calc(var(--spacing) * 28); } - .w-36 { - width: calc(var(--spacing) * 36); - } - - .w-48 { - width: calc(var(--spacing) * 48); - } - .w-\[100px\] { width: 100px; } @@ -1677,10 +1631,6 @@ gap: calc(var(--spacing) * 10); } - .gap-12 { - gap: calc(var(--spacing) * 12); - } - :where(.space-y-1\.5 > :not(:last-child)) { --tw-space-y-reverse: 0; margin-block-start: calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse)); @@ -1723,20 +1673,12 @@ margin-block-end: calc(calc(var(--spacing) * 10) * calc(1 - var(--tw-space-y-reverse))); } - .gap-x-6 { - column-gap: calc(var(--spacing) * 6); - } - :where(.-space-x-2 > :not(:last-child)) { --tw-space-x-reverse: 0; margin-inline-start: calc(calc(var(--spacing) * -2) * var(--tw-space-x-reverse)); margin-inline-end: calc(calc(var(--spacing) * -2) * calc(1 - var(--tw-space-x-reverse))); } - .gap-y-1 { - row-gap: calc(var(--spacing) * 1); - } - :where(.divide-y > :not(:last-child)) { --tw-divide-y-reverse: 0; border-bottom-style: var(--tw-border-style); @@ -1919,18 +1861,6 @@ border-color: var(--color-gray-200); } - .border-gray-600 { - border-color: var(--color-gray-600); - } - - .border-gray-800 { - border-color: var(--color-gray-800); - } - - .border-green-100 { - border-color: var(--color-green-100); - } - .border-green-200 { border-color: var(--color-green-200); } @@ -1953,10 +1883,6 @@ border-color: var(--color-green-700); } - .border-green-800 { - border-color: var(--color-green-800); - } - .border-green-800\/60 { border-color: #01663099; } @@ -2001,16 +1927,6 @@ border-color: var(--color-white); } - .border-white\/5 { - border-color: #ffffff0d; - } - - @supports (color: color-mix(in lab, red, red)) { - .border-white\/5 { - border-color: color-mix(in oklab, var(--color-white) 5%, transparent); - } - } - .border-white\/10 { border-color: #ffffff1a; } @@ -2057,10 +1973,6 @@ background-color: var(--color-amber-50); } - .bg-amber-100 { - background-color: var(--color-amber-100); - } - .bg-amber-400 { background-color: var(--color-amber-400); } @@ -2165,16 +2077,6 @@ } } - .bg-gray-50\/50 { - background-color: #f9fafb80; - } - - @supports (color: color-mix(in lab, red, red)) { - .bg-gray-50\/50 { - background-color: color-mix(in oklab, var(--color-gray-50) 50%, transparent); - } - } - .bg-gray-100 { background-color: var(--color-gray-100); } @@ -2191,18 +2093,10 @@ background-color: var(--color-gray-500); } - .bg-gray-800 { - background-color: var(--color-gray-800); - } - .bg-gray-900 { background-color: var(--color-gray-900); } - .bg-gray-950 { - background-color: var(--color-gray-950); - } - .bg-green-50 { background-color: var(--color-green-50); } @@ -2221,10 +2115,6 @@ background-color: var(--color-green-100); } - .bg-green-300 { - background-color: var(--color-green-300); - } - .bg-green-400 { background-color: var(--color-green-400); } @@ -2241,16 +2131,6 @@ background-color: var(--color-green-700); } - .bg-green-700\/20 { - background-color: #00813833; - } - - @supports (color: color-mix(in lab, red, red)) { - .bg-green-700\/20 { - background-color: color-mix(in oklab, var(--color-green-700) 20%, transparent); - } - } - .bg-green-700\/30 { background-color: #0081384d; } @@ -2261,16 +2141,6 @@ } } - .bg-green-700\/80 { - background-color: #008138cc; - } - - @supports (color: color-mix(in lab, red, red)) { - .bg-green-700\/80 { - background-color: color-mix(in oklab, var(--color-green-700) 80%, transparent); - } - } - .bg-green-700\/90 { background-color: #008138e6; } @@ -2281,10 +2151,6 @@ } } - .bg-green-800 { - background-color: var(--color-green-800); - } - .bg-green-800\/60 { background-color: #01663099; } @@ -2379,10 +2245,6 @@ background-color: var(--color-orange-600); } - .bg-pink-100 { - background-color: var(--color-pink-100); - } - .bg-pink-500 { background-color: var(--color-pink-500); } @@ -2427,10 +2289,6 @@ background-color: var(--sidebar-border); } - .bg-sky-100 { - background-color: var(--color-sky-100); - } - .bg-teal-500 { background-color: var(--color-teal-500); } @@ -2443,16 +2301,6 @@ background-color: var(--color-white); } - .bg-white\/5 { - background-color: #ffffff0d; - } - - @supports (color: color-mix(in lab, red, red)) { - .bg-white\/5 { - background-color: color-mix(in oklab, var(--color-white) 5%, transparent); - } - } - .bg-white\/10 { background-color: #ffffff1a; } @@ -2473,16 +2321,6 @@ } } - .bg-white\/20 { - background-color: #fff3; - } - - @supports (color: color-mix(in lab, red, red)) { - .bg-white\/20 { - background-color: color-mix(in oklab, var(--color-white) 20%, transparent); - } - } - .bg-white\/30 { background-color: #ffffff4d; } @@ -2541,20 +2379,6 @@ background-image: linear-gradient(var(--tw-gradient-stops)); } - .from-black\/10 { - --tw-gradient-from: #0000001a; - } - - @supports (color: color-mix(in lab, red, red)) { - .from-black\/10 { - --tw-gradient-from: color-mix(in oklab, var(--color-black) 10%, transparent); - } - } - - .from-black\/10 { - --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); - } - .from-black\/30 { --tw-gradient-from: #0000004d; } @@ -2588,11 +2412,6 @@ --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); } - .from-gray-200 { - --tw-gradient-from: var(--color-gray-200); - --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); - } - .from-gray-900 { --tw-gradient-from: var(--color-gray-900); --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); @@ -2612,20 +2431,6 @@ --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); } - .from-gray-900\/70 { - --tw-gradient-from: #101828b3; - } - - @supports (color: color-mix(in lab, red, red)) { - .from-gray-900\/70 { - --tw-gradient-from: color-mix(in oklab, var(--color-gray-900) 70%, transparent); - } - } - - .from-gray-900\/70 { - --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); - } - .from-gray-950 { --tw-gradient-from: var(--color-gray-950); --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); @@ -2677,21 +2482,6 @@ --tw-gradient-stops: var(--tw-gradient-via-stops); } - .via-gray-950\/30 { - --tw-gradient-via: #0307124d; - } - - @supports (color: color-mix(in lab, red, red)) { - .via-gray-950\/30 { - --tw-gradient-via: color-mix(in oklab, var(--color-gray-950) 30%, transparent); - } - } - - .via-gray-950\/30 { - --tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position); - --tw-gradient-stops: var(--tw-gradient-via-stops); - } - .via-green-900 { --tw-gradient-via: var(--color-green-900); --tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position); @@ -2713,26 +2503,6 @@ --tw-gradient-stops: var(--tw-gradient-via-stops); } - .via-transparent { - --tw-gradient-via: transparent; - --tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position); - --tw-gradient-stops: var(--tw-gradient-via-stops); - } - - .to-black\/20 { - --tw-gradient-to: #0003; - } - - @supports (color: color-mix(in lab, red, red)) { - .to-black\/20 { - --tw-gradient-to: color-mix(in oklab, var(--color-black) 20%, transparent); - } - } - - .to-black\/20 { - --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); - } - .to-black\/50 { --tw-gradient-to: #00000080; } @@ -2761,11 +2531,6 @@ --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); } - .to-gray-300 { - --tw-gradient-to: var(--color-gray-300); - --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); - } - .to-gray-900 { --tw-gradient-to: var(--color-gray-900); --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); @@ -2859,10 +2624,6 @@ padding: calc(var(--spacing) * 6); } - .p-8 { - padding: calc(var(--spacing) * 8); - } - .p-\[3px\] { padding: 3px; } @@ -3320,10 +3081,6 @@ color: var(--color-green-400); } - .text-green-500 { - color: var(--color-green-500); - } - .text-green-600 { color: var(--color-green-600); } @@ -3352,10 +3109,6 @@ color: var(--color-orange-700); } - .text-pink-700 { - color: var(--color-pink-700); - } - .text-popover-foreground { color: var(--popover-foreground); } @@ -3406,10 +3159,6 @@ } } - .text-sky-700 { - color: var(--color-sky-700); - } - .text-white { color: var(--color-white); } @@ -3434,16 +3183,6 @@ } } - .text-white\/60 { - color: #fff9; - } - - @supports (color: color-mix(in lab, red, red)) { - .text-white\/60 { - color: color-mix(in oklab, var(--color-white) 60%, transparent); - } - } - .text-white\/70 { color: #ffffffb3; } @@ -3759,18 +3498,6 @@ } } - @media (hover: hover) { - .group-hover\:w-6:is(:where(.group):hover *) { - width: calc(var(--spacing) * 6); - } - } - - @media (hover: hover) { - .group-hover\:border-green-300:is(:where(.group):hover *) { - border-color: var(--color-green-300); - } - } - @media (hover: hover) { .group-hover\:border-green-400:is(:where(.group):hover *) { border-color: var(--color-green-400); @@ -3789,12 +3516,6 @@ } } - @media (hover: hover) { - .group-hover\:bg-green-700:is(:where(.group):hover *) { - background-color: var(--color-green-700); - } - } - @media (hover: hover) { .group-hover\:bg-green-800:is(:where(.group):hover *) { background-color: var(--color-green-800); @@ -3813,12 +3534,6 @@ } } - @media (hover: hover) { - .group-hover\:text-white:is(:where(.group):hover *) { - color: var(--color-white); - } - } - @media (hover: hover) { .group-hover\:opacity-100:is(:where(.group):hover *) { opacity: 1; @@ -4228,24 +3943,6 @@ } } - @media (hover: hover) { - .hover\:border-green-500\/40:hover { - border-color: #00c75866; - } - - @supports (color: color-mix(in lab, red, red)) { - .hover\:border-green-500\/40:hover { - border-color: color-mix(in oklab, var(--color-green-500) 40%, transparent); - } - } - } - - @media (hover: hover) { - .hover\:border-green-600:hover { - border-color: var(--color-green-600); - } - } - @media (hover: hover) { .hover\:border-pink-500:hover { border-color: var(--color-pink-500); @@ -4342,18 +4039,6 @@ } } - @media (hover: hover) { - .hover\:bg-gray-700:hover { - background-color: var(--color-gray-700); - } - } - - @media (hover: hover) { - .hover\:bg-gray-800:hover { - background-color: var(--color-gray-800); - } - } - @media (hover: hover) { .hover\:bg-green-50:hover { background-color: var(--color-green-50); @@ -4570,12 +4255,6 @@ } } - @media (hover: hover) { - .hover\:text-green-300:hover { - color: var(--color-green-300); - } - } - @media (hover: hover) { .hover\:text-green-400:hover { color: var(--color-green-400); @@ -5438,12 +5117,6 @@ } } - @media (min-width: 40rem) { - .sm\:grid-cols-1 { - grid-template-columns: repeat(1, minmax(0, 1fr)); - } - } - @media (min-width: 40rem) { .sm\:grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); @@ -5474,12 +5147,6 @@ } } - @media (min-width: 40rem) { - .sm\:items-end { - align-items: flex-end; - } - } - @media (min-width: 40rem) { .sm\:justify-end { justify-content: flex-end; @@ -5516,12 +5183,6 @@ } } - @media (min-width: 40rem) { - .sm\:p-10 { - padding: calc(var(--spacing) * 10); - } - } - @media (min-width: 40rem) { .sm\:px-6 { padding-inline: calc(var(--spacing) * 6); @@ -5649,12 +5310,6 @@ } } - @media (min-width: 48rem) { - .md\:grid-cols-3 { - grid-template-columns: repeat(3, minmax(0, 1fr)); - } - } - @media (min-width: 48rem) { .md\:grid-cols-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); @@ -5755,12 +5410,6 @@ } } - @media (min-width: 64rem) { - .lg\:table-cell { - display: table-cell; - } - } - @media (min-width: 64rem) { .lg\:h-80 { height: calc(var(--spacing) * 80); @@ -5785,12 +5434,6 @@ } } - @media (min-width: 64rem) { - .lg\:grid-cols-4 { - grid-template-columns: repeat(4, minmax(0, 1fr)); - } - } - @media (min-width: 64rem) { .lg\:grid-cols-5 { grid-template-columns: repeat(5, minmax(0, 1fr)); diff --git a/saintBarthVolleyApp/frontend/.next/dev/static/chunks/src_app_globals_css_bad6b30c._.single.css.map b/saintBarthVolleyApp/frontend/.next/dev/static/chunks/src_app_globals_css_bad6b30c._.single.css.map index a784d57..fd2e3b5 100644 --- a/saintBarthVolleyApp/frontend/.next/dev/static/chunks/src_app_globals_css_bad6b30c._.single.css.map +++ b/saintBarthVolleyApp/frontend/.next/dev/static/chunks/src_app_globals_css_bad6b30c._.single.css.map @@ -2,5 +2,5 @@ "version": 3, "sources": [], "sections": [ - {"offset": {"line": 1, "column": 0}, "map": {"version":3,"sources":["turbopack:///[project]/src/app/globals.css"],"sourcesContent":["/*! tailwindcss v4.2.1 | MIT License | https://tailwindcss.com */\n@layer properties;\n@layer theme, base, components, utilities;\n@layer theme {\n :root, :host {\n --color-red-50: oklch(97.1% 0.013 17.38);\n --color-red-100: oklch(93.6% 0.032 17.717);\n --color-red-200: oklch(88.5% 0.062 18.334);\n --color-red-400: oklch(70.4% 0.191 22.216);\n --color-red-500: oklch(63.7% 0.237 25.331);\n --color-red-600: oklch(57.7% 0.245 27.325);\n --color-red-700: oklch(50.5% 0.213 27.518);\n --color-orange-100: oklch(95.4% 0.038 75.164);\n --color-orange-500: oklch(70.5% 0.213 47.604);\n --color-orange-600: oklch(64.6% 0.222 41.116);\n --color-orange-700: oklch(55.3% 0.195 38.402);\n --color-amber-50: oklch(98.7% 0.022 95.277);\n --color-amber-100: oklch(96.2% 0.059 95.617);\n --color-amber-200: oklch(92.4% 0.12 95.746);\n --color-amber-400: oklch(82.8% 0.189 84.429);\n --color-amber-700: oklch(55.5% 0.163 48.998);\n --color-yellow-50: oklch(98.7% 0.026 102.212);\n --color-yellow-100: oklch(97.3% 0.071 103.193);\n --color-yellow-500: oklch(79.5% 0.184 86.047);\n --color-yellow-600: oklch(68.1% 0.162 75.834);\n --color-yellow-700: oklch(55.4% 0.135 66.442);\n --color-green-50: oklch(98.2% 0.018 155.826);\n --color-green-100: oklch(96.2% 0.044 156.743);\n --color-green-200: oklch(92.5% 0.084 155.995);\n --color-green-300: oklch(87.1% 0.15 154.449);\n --color-green-400: oklch(79.2% 0.209 151.711);\n --color-green-500: oklch(72.3% 0.219 149.579);\n --color-green-600: oklch(62.7% 0.194 149.214);\n --color-green-700: oklch(52.7% 0.154 150.069);\n --color-green-800: oklch(44.8% 0.119 151.328);\n --color-green-900: oklch(39.3% 0.095 152.535);\n --color-green-950: oklch(26.6% 0.065 152.934);\n --color-teal-500: oklch(70.4% 0.14 182.503);\n --color-sky-100: oklch(95.1% 0.026 236.824);\n --color-sky-700: oklch(50% 0.134 242.749);\n --color-blue-50: oklch(97% 0.014 254.604);\n --color-blue-100: oklch(93.2% 0.032 255.585);\n --color-blue-200: oklch(88.2% 0.059 254.128);\n --color-blue-500: oklch(62.3% 0.214 259.815);\n --color-blue-600: oklch(54.6% 0.245 262.881);\n --color-blue-700: oklch(48.8% 0.243 264.376);\n --color-purple-100: oklch(94.6% 0.033 307.174);\n --color-purple-500: oklch(62.7% 0.265 303.9);\n --color-purple-700: oklch(49.6% 0.265 301.924);\n --color-pink-100: oklch(94.8% 0.028 342.258);\n --color-pink-500: oklch(65.6% 0.241 354.308);\n --color-pink-600: oklch(59.2% 0.249 0.584);\n --color-pink-700: oklch(52.5% 0.223 3.958);\n --color-gray-50: oklch(98.5% 0.002 247.839);\n --color-gray-100: oklch(96.7% 0.003 264.542);\n --color-gray-200: oklch(92.8% 0.006 264.531);\n --color-gray-300: oklch(87.2% 0.01 258.338);\n --color-gray-400: oklch(70.7% 0.022 261.325);\n --color-gray-500: oklch(55.1% 0.027 264.364);\n --color-gray-600: oklch(44.6% 0.03 256.802);\n --color-gray-700: oklch(37.3% 0.034 259.733);\n --color-gray-800: oklch(27.8% 0.033 256.848);\n --color-gray-900: oklch(21% 0.034 264.665);\n --color-gray-950: oklch(13% 0.028 261.692);\n --color-zinc-100: oklch(96.7% 0.001 286.375);\n --color-zinc-200: oklch(92% 0.004 286.32);\n --color-zinc-300: oklch(87.1% 0.006 286.286);\n --color-zinc-500: oklch(55.2% 0.016 285.938);\n --color-zinc-600: oklch(44.2% 0.017 285.786);\n --color-zinc-900: oklch(21% 0.006 285.885);\n --color-black: #000;\n --color-white: #fff;\n --spacing: 0.25rem;\n --container-xs: 20rem;\n --container-sm: 24rem;\n --container-md: 28rem;\n --container-lg: 32rem;\n --container-xl: 36rem;\n --container-2xl: 42rem;\n --container-3xl: 48rem;\n --container-4xl: 56rem;\n --container-5xl: 64rem;\n --container-6xl: 72rem;\n --container-7xl: 80rem;\n --text-xs: 0.75rem;\n --text-xs--line-height: calc(1 / 0.75);\n --text-sm: 0.875rem;\n --text-sm--line-height: calc(1.25 / 0.875);\n --text-base: 1rem;\n --text-base--line-height: calc(1.5 / 1);\n --text-lg: 1.125rem;\n --text-lg--line-height: calc(1.75 / 1.125);\n --text-xl: 1.25rem;\n --text-xl--line-height: calc(1.75 / 1.25);\n --text-2xl: 1.5rem;\n --text-2xl--line-height: calc(2 / 1.5);\n --text-3xl: 1.875rem;\n --text-3xl--line-height: calc(2.25 / 1.875);\n --text-4xl: 2.25rem;\n --text-4xl--line-height: calc(2.5 / 2.25);\n --text-5xl: 3rem;\n --text-5xl--line-height: 1;\n --text-6xl: 3.75rem;\n --text-6xl--line-height: 1;\n --font-weight-normal: 400;\n --font-weight-medium: 500;\n --font-weight-semibold: 600;\n --font-weight-bold: 700;\n --tracking-tight: -0.025em;\n --tracking-wide: 0.025em;\n --tracking-wider: 0.05em;\n --tracking-widest: 0.1em;\n --leading-tight: 1.25;\n --leading-snug: 1.375;\n --leading-normal: 1.5;\n --leading-relaxed: 1.625;\n --radius-xs: 0.125rem;\n --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);\n --animate-spin: spin 1s linear infinite;\n --animate-pulse: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n --blur-sm: 8px;\n --aspect-video: 16 / 9;\n --default-transition-duration: 150ms;\n --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n --default-font-family: var(--font-geist-sans);\n --default-mono-font-family: var(--font-geist-mono);\n --color-border: var(--border);\n }\n}\n@layer base {\n *, ::after, ::before, ::backdrop, ::file-selector-button {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n border: 0 solid;\n }\n html, :host {\n line-height: 1.5;\n -webkit-text-size-adjust: 100%;\n tab-size: 4;\n font-family: var(--default-font-family, ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\");\n font-feature-settings: var(--default-font-feature-settings, normal);\n font-variation-settings: var(--default-font-variation-settings, normal);\n -webkit-tap-highlight-color: transparent;\n }\n hr {\n height: 0;\n color: inherit;\n border-top-width: 1px;\n }\n abbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n }\n h1, h2, h3, h4, h5, h6 {\n font-size: inherit;\n font-weight: inherit;\n }\n a {\n color: inherit;\n -webkit-text-decoration: inherit;\n text-decoration: inherit;\n }\n b, strong {\n font-weight: bolder;\n }\n code, kbd, samp, pre {\n font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace);\n font-feature-settings: var(--default-mono-font-feature-settings, normal);\n font-variation-settings: var(--default-mono-font-variation-settings, normal);\n font-size: 1em;\n }\n small {\n font-size: 80%;\n }\n sub, sup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n }\n sub {\n bottom: -0.25em;\n }\n sup {\n top: -0.5em;\n }\n table {\n text-indent: 0;\n border-color: inherit;\n border-collapse: collapse;\n }\n :-moz-focusring {\n outline: auto;\n }\n progress {\n vertical-align: baseline;\n }\n summary {\n display: list-item;\n }\n ol, ul, menu {\n list-style: none;\n }\n img, svg, video, canvas, audio, iframe, embed, object {\n display: block;\n vertical-align: middle;\n }\n img, video {\n max-width: 100%;\n height: auto;\n }\n button, input, select, optgroup, textarea, ::file-selector-button {\n font: inherit;\n font-feature-settings: inherit;\n font-variation-settings: inherit;\n letter-spacing: inherit;\n color: inherit;\n border-radius: 0;\n background-color: transparent;\n opacity: 1;\n }\n :where(select:is([multiple], [size])) optgroup {\n font-weight: bolder;\n }\n :where(select:is([multiple], [size])) optgroup option {\n padding-inline-start: 20px;\n }\n ::file-selector-button {\n margin-inline-end: 4px;\n }\n ::placeholder {\n opacity: 1;\n }\n @supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) {\n ::placeholder {\n color: currentcolor;\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, currentcolor 50%, transparent);\n }\n }\n }\n textarea {\n resize: vertical;\n }\n ::-webkit-search-decoration {\n -webkit-appearance: none;\n }\n ::-webkit-date-and-time-value {\n min-height: 1lh;\n text-align: inherit;\n }\n ::-webkit-datetime-edit {\n display: inline-flex;\n }\n ::-webkit-datetime-edit-fields-wrapper {\n padding: 0;\n }\n ::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field {\n padding-block: 0;\n }\n ::-webkit-calendar-picker-indicator {\n line-height: 1;\n }\n :-moz-ui-invalid {\n box-shadow: none;\n }\n button, input:where([type=\"button\"], [type=\"reset\"], [type=\"submit\"]), ::file-selector-button {\n appearance: button;\n }\n ::-webkit-inner-spin-button, ::-webkit-outer-spin-button {\n height: auto;\n }\n [hidden]:where(:not([hidden=\"until-found\"])) {\n display: none !important;\n }\n}\n@layer utilities {\n .\\@container\\/card-header {\n container-type: inline-size;\n container-name: card-header;\n }\n .\\@container\\/field-group {\n container-type: inline-size;\n container-name: field-group;\n }\n .pointer-events-none {\n pointer-events: none;\n }\n .visible {\n visibility: visible;\n }\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n border-width: 0;\n }\n .absolute {\n position: absolute;\n }\n .fixed {\n position: fixed;\n }\n .relative {\n position: relative;\n }\n .sticky {\n position: sticky;\n }\n .inset-0 {\n inset: calc(var(--spacing) * 0);\n }\n .inset-x-0 {\n inset-inline: calc(var(--spacing) * 0);\n }\n .inset-y-0 {\n inset-block: calc(var(--spacing) * 0);\n }\n .start {\n inset-inline-start: var(--spacing);\n }\n .end {\n inset-inline-end: var(--spacing);\n }\n .-top-1 {\n top: calc(var(--spacing) * -1);\n }\n .top-0 {\n top: calc(var(--spacing) * 0);\n }\n .top-1\\.5 {\n top: calc(var(--spacing) * 1.5);\n }\n .top-1\\/2 {\n top: calc(1 / 2 * 100%);\n }\n .top-2 {\n top: calc(var(--spacing) * 2);\n }\n .top-3 {\n top: calc(var(--spacing) * 3);\n }\n .top-3\\.5 {\n top: calc(var(--spacing) * 3.5);\n }\n .top-4 {\n top: calc(var(--spacing) * 4);\n }\n .top-6 {\n top: calc(var(--spacing) * 6);\n }\n .top-16 {\n top: calc(var(--spacing) * 16);\n }\n .top-\\[50\\%\\] {\n top: 50%;\n }\n .-right-1 {\n right: calc(var(--spacing) * -1);\n }\n .right-0 {\n right: calc(var(--spacing) * 0);\n }\n .right-1 {\n right: calc(var(--spacing) * 1);\n }\n .right-2 {\n right: calc(var(--spacing) * 2);\n }\n .right-2\\.5 {\n right: calc(var(--spacing) * 2.5);\n }\n .right-3 {\n right: calc(var(--spacing) * 3);\n }\n .right-4 {\n right: calc(var(--spacing) * 4);\n }\n .-bottom-1 {\n bottom: calc(var(--spacing) * -1);\n }\n .bottom-0 {\n bottom: calc(var(--spacing) * 0);\n }\n .bottom-2 {\n bottom: calc(var(--spacing) * 2);\n }\n .bottom-3 {\n bottom: calc(var(--spacing) * 3);\n }\n .left-0 {\n left: calc(var(--spacing) * 0);\n }\n .left-2 {\n left: calc(var(--spacing) * 2);\n }\n .left-3 {\n left: calc(var(--spacing) * 3);\n }\n .left-\\[50\\%\\] {\n left: 50%;\n }\n .z-10 {\n z-index: 10;\n }\n .z-20 {\n z-index: 20;\n }\n .z-40 {\n z-index: 40;\n }\n .z-50 {\n z-index: 50;\n }\n .col-start-2 {\n grid-column-start: 2;\n }\n .row-span-2 {\n grid-row: span 2 / span 2;\n }\n .row-start-1 {\n grid-row-start: 1;\n }\n .-mx-1 {\n margin-inline: calc(var(--spacing) * -1);\n }\n .mx-2 {\n margin-inline: calc(var(--spacing) * 2);\n }\n .mx-3\\.5 {\n margin-inline: calc(var(--spacing) * 3.5);\n }\n .mx-auto {\n margin-inline: auto;\n }\n .-my-2 {\n margin-block: calc(var(--spacing) * -2);\n }\n .my-0\\.5 {\n margin-block: calc(var(--spacing) * 0.5);\n }\n .my-1 {\n margin-block: calc(var(--spacing) * 1);\n }\n .-mt-1 {\n margin-top: calc(var(--spacing) * -1);\n }\n .mt-0\\.5 {\n margin-top: calc(var(--spacing) * 0.5);\n }\n .mt-1 {\n margin-top: calc(var(--spacing) * 1);\n }\n .mt-1\\.5 {\n margin-top: calc(var(--spacing) * 1.5);\n }\n .mt-2 {\n margin-top: calc(var(--spacing) * 2);\n }\n .mt-3 {\n margin-top: calc(var(--spacing) * 3);\n }\n .mt-4 {\n margin-top: calc(var(--spacing) * 4);\n }\n .mt-5 {\n margin-top: calc(var(--spacing) * 5);\n }\n .mt-6 {\n margin-top: calc(var(--spacing) * 6);\n }\n .mt-8 {\n margin-top: calc(var(--spacing) * 8);\n }\n .mt-12 {\n margin-top: calc(var(--spacing) * 12);\n }\n .mt-20 {\n margin-top: calc(var(--spacing) * 20);\n }\n .mt-auto {\n margin-top: auto;\n }\n .mr-0\\.5 {\n margin-right: calc(var(--spacing) * 0.5);\n }\n .mb-1 {\n margin-bottom: calc(var(--spacing) * 1);\n }\n .mb-2 {\n margin-bottom: calc(var(--spacing) * 2);\n }\n .mb-3 {\n margin-bottom: calc(var(--spacing) * 3);\n }\n .mb-4 {\n margin-bottom: calc(var(--spacing) * 4);\n }\n .mb-5 {\n margin-bottom: calc(var(--spacing) * 5);\n }\n .mb-6 {\n margin-bottom: calc(var(--spacing) * 6);\n }\n .mb-8 {\n margin-bottom: calc(var(--spacing) * 8);\n }\n .mb-10 {\n margin-bottom: calc(var(--spacing) * 10);\n }\n .mb-12 {\n margin-bottom: calc(var(--spacing) * 12);\n }\n .mb-16 {\n margin-bottom: calc(var(--spacing) * 16);\n }\n .-ml-1 {\n margin-left: calc(var(--spacing) * -1);\n }\n .ml-1 {\n margin-left: calc(var(--spacing) * 1);\n }\n .ml-2 {\n margin-left: calc(var(--spacing) * 2);\n }\n .ml-4 {\n margin-left: calc(var(--spacing) * 4);\n }\n .ml-auto {\n margin-left: auto;\n }\n .line-clamp-2 {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n }\n .line-clamp-3 {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 3;\n }\n .line-clamp-4 {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 4;\n }\n .block {\n display: block;\n }\n .flex {\n display: flex;\n }\n .grid {\n display: grid;\n }\n .hidden {\n display: none;\n }\n .inline {\n display: inline;\n }\n .inline-block {\n display: inline-block;\n }\n .inline-flex {\n display: inline-flex;\n }\n .table {\n display: table;\n }\n .table-caption {\n display: table-caption;\n }\n .table-cell {\n display: table-cell;\n }\n .table-row {\n display: table-row;\n }\n .field-sizing-content {\n field-sizing: content;\n }\n .aspect-square {\n aspect-ratio: 1 / 1;\n }\n .aspect-video {\n aspect-ratio: var(--aspect-video);\n }\n .size-2 {\n width: calc(var(--spacing) * 2);\n height: calc(var(--spacing) * 2);\n }\n .size-2\\.5 {\n width: calc(var(--spacing) * 2.5);\n height: calc(var(--spacing) * 2.5);\n }\n .size-3\\.5 {\n width: calc(var(--spacing) * 3.5);\n height: calc(var(--spacing) * 3.5);\n }\n .size-4 {\n width: calc(var(--spacing) * 4);\n height: calc(var(--spacing) * 4);\n }\n .size-5\\! {\n width: calc(var(--spacing) * 5) !important;\n height: calc(var(--spacing) * 5) !important;\n }\n .size-6 {\n width: calc(var(--spacing) * 6);\n height: calc(var(--spacing) * 6);\n }\n .size-7 {\n width: calc(var(--spacing) * 7);\n height: calc(var(--spacing) * 7);\n }\n .size-8 {\n width: calc(var(--spacing) * 8);\n height: calc(var(--spacing) * 8);\n }\n .size-9 {\n width: calc(var(--spacing) * 9);\n height: calc(var(--spacing) * 9);\n }\n .size-10 {\n width: calc(var(--spacing) * 10);\n height: calc(var(--spacing) * 10);\n }\n .size-full {\n width: 100%;\n height: 100%;\n }\n .h-\\(--header-height\\) {\n height: var(--header-height);\n }\n .h-1 {\n height: calc(var(--spacing) * 1);\n }\n .h-1\\.5 {\n height: calc(var(--spacing) * 1.5);\n }\n .h-2 {\n height: calc(var(--spacing) * 2);\n }\n .h-2\\.5 {\n height: calc(var(--spacing) * 2.5);\n }\n .h-3 {\n height: calc(var(--spacing) * 3);\n }\n .h-3\\.5 {\n height: calc(var(--spacing) * 3.5);\n }\n .h-4 {\n height: calc(var(--spacing) * 4);\n }\n .h-5 {\n height: calc(var(--spacing) * 5);\n }\n .h-6 {\n height: calc(var(--spacing) * 6);\n }\n .h-7 {\n height: calc(var(--spacing) * 7);\n }\n .h-8 {\n height: calc(var(--spacing) * 8);\n }\n .h-9 {\n height: calc(var(--spacing) * 9);\n }\n .h-10 {\n height: calc(var(--spacing) * 10);\n }\n .h-12 {\n height: calc(var(--spacing) * 12);\n }\n .h-14 {\n height: calc(var(--spacing) * 14);\n }\n .h-16 {\n height: calc(var(--spacing) * 16);\n }\n .h-20 {\n height: calc(var(--spacing) * 20);\n }\n .h-24 {\n height: calc(var(--spacing) * 24);\n }\n .h-32 {\n height: calc(var(--spacing) * 32);\n }\n .h-36 {\n height: calc(var(--spacing) * 36);\n }\n .h-40 {\n height: calc(var(--spacing) * 40);\n }\n .h-44 {\n height: calc(var(--spacing) * 44);\n }\n .h-48 {\n height: calc(var(--spacing) * 48);\n }\n .h-56 {\n height: calc(var(--spacing) * 56);\n }\n .h-60 {\n height: calc(var(--spacing) * 60);\n }\n .h-64 {\n height: calc(var(--spacing) * 64);\n }\n .h-72 {\n height: calc(var(--spacing) * 72);\n }\n .h-80 {\n height: calc(var(--spacing) * 80);\n }\n .h-\\[calc\\(100\\%-1px\\)\\] {\n height: calc(100% - 1px);\n }\n .h-\\[var\\(--radix-select-trigger-height\\)\\] {\n height: var(--radix-select-trigger-height);\n }\n .h-auto {\n height: auto;\n }\n .h-fit {\n height: fit-content;\n }\n .h-full {\n height: 100%;\n }\n .h-px {\n height: 1px;\n }\n .h-svh {\n height: 100svh;\n }\n .max-h-\\(--radix-dropdown-menu-content-available-height\\) {\n max-height: var(--radix-dropdown-menu-content-available-height);\n }\n .max-h-\\(--radix-select-content-available-height\\) {\n max-height: var(--radix-select-content-available-height);\n }\n .max-h-14 {\n max-height: calc(var(--spacing) * 14);\n }\n .max-h-32 {\n max-height: calc(var(--spacing) * 32);\n }\n .max-h-48 {\n max-height: calc(var(--spacing) * 48);\n }\n .max-h-\\[85vh\\] {\n max-height: 85vh;\n }\n .max-h-\\[90vh\\] {\n max-height: 90vh;\n }\n .max-h-full {\n max-height: 100%;\n }\n .min-h-0 {\n min-height: calc(var(--spacing) * 0);\n }\n .min-h-16 {\n min-height: calc(var(--spacing) * 16);\n }\n .min-h-20 {\n min-height: calc(var(--spacing) * 20);\n }\n .min-h-24 {\n min-height: calc(var(--spacing) * 24);\n }\n .min-h-48 {\n min-height: calc(var(--spacing) * 48);\n }\n .min-h-\\[40vh\\] {\n min-height: 40vh;\n }\n .min-h-\\[220px\\] {\n min-height: 220px;\n }\n .min-h-\\[calc\\(100vh-60px\\)\\] {\n min-height: calc(100vh - 60px);\n }\n .min-h-screen {\n min-height: 100vh;\n }\n .min-h-svh {\n min-height: 100svh;\n }\n .w-\\(--radix-dropdown-menu-trigger-width\\) {\n width: var(--radix-dropdown-menu-trigger-width);\n }\n .w-\\(--sidebar-width\\) {\n width: var(--sidebar-width);\n }\n .w-0 {\n width: calc(var(--spacing) * 0);\n }\n .w-1 {\n width: calc(var(--spacing) * 1);\n }\n .w-1\\.5 {\n width: calc(var(--spacing) * 1.5);\n }\n .w-2 {\n width: calc(var(--spacing) * 2);\n }\n .w-2\\.5 {\n width: calc(var(--spacing) * 2.5);\n }\n .w-3 {\n width: calc(var(--spacing) * 3);\n }\n .w-3\\.5 {\n width: calc(var(--spacing) * 3.5);\n }\n .w-3\\/4 {\n width: calc(3 / 4 * 100%);\n }\n .w-4 {\n width: calc(var(--spacing) * 4);\n }\n .w-5 {\n width: calc(var(--spacing) * 5);\n }\n .w-6 {\n width: calc(var(--spacing) * 6);\n }\n .w-7 {\n width: calc(var(--spacing) * 7);\n }\n .w-8 {\n width: calc(var(--spacing) * 8);\n }\n .w-9 {\n width: calc(var(--spacing) * 9);\n }\n .w-10 {\n width: calc(var(--spacing) * 10);\n }\n .w-11 {\n width: calc(var(--spacing) * 11);\n }\n .w-12 {\n width: calc(var(--spacing) * 12);\n }\n .w-14 {\n width: calc(var(--spacing) * 14);\n }\n .w-16 {\n width: calc(var(--spacing) * 16);\n }\n .w-20 {\n width: calc(var(--spacing) * 20);\n }\n .w-24 {\n width: calc(var(--spacing) * 24);\n }\n .w-28 {\n width: calc(var(--spacing) * 28);\n }\n .w-36 {\n width: calc(var(--spacing) * 36);\n }\n .w-48 {\n width: calc(var(--spacing) * 48);\n }\n .w-\\[100px\\] {\n width: 100px;\n }\n .w-auto {\n width: auto;\n }\n .w-fit {\n width: fit-content;\n }\n .w-full {\n width: 100%;\n }\n .w-px {\n width: 1px;\n }\n .max-w-\\(--skeleton-width\\) {\n max-width: var(--skeleton-width);\n }\n .max-w-2xl {\n max-width: var(--container-2xl);\n }\n .max-w-3xl {\n max-width: var(--container-3xl);\n }\n .max-w-4xl {\n max-width: var(--container-4xl);\n }\n .max-w-5xl {\n max-width: var(--container-5xl);\n }\n .max-w-6xl {\n max-width: var(--container-6xl);\n }\n .max-w-7xl {\n max-width: var(--container-7xl);\n }\n .max-w-\\[120px\\] {\n max-width: 120px;\n }\n .max-w-\\[140px\\] {\n max-width: 140px;\n }\n .max-w-\\[calc\\(100\\%-2rem\\)\\] {\n max-width: calc(100% - 2rem);\n }\n .max-w-full {\n max-width: 100%;\n }\n .max-w-lg {\n max-width: var(--container-lg);\n }\n .max-w-md {\n max-width: var(--container-md);\n }\n .max-w-sm {\n max-width: var(--container-sm);\n }\n .max-w-xl {\n max-width: var(--container-xl);\n }\n .max-w-xs {\n max-width: var(--container-xs);\n }\n .min-w-0 {\n min-width: calc(var(--spacing) * 0);\n }\n .min-w-5 {\n min-width: calc(var(--spacing) * 5);\n }\n .min-w-56 {\n min-width: calc(var(--spacing) * 56);\n }\n .min-w-\\[8rem\\] {\n min-width: 8rem;\n }\n .min-w-\\[var\\(--radix-select-trigger-width\\)\\] {\n min-width: var(--radix-select-trigger-width);\n }\n .min-w-fit {\n min-width: fit-content;\n }\n .flex-1 {\n flex: 1;\n }\n .shrink-0 {\n flex-shrink: 0;\n }\n .caption-bottom {\n caption-side: bottom;\n }\n .origin-\\(--radix-dropdown-menu-content-transform-origin\\) {\n transform-origin: var(--radix-dropdown-menu-content-transform-origin);\n }\n .origin-\\(--radix-select-content-transform-origin\\) {\n transform-origin: var(--radix-select-content-transform-origin);\n }\n .origin-\\(--radix-tooltip-content-transform-origin\\) {\n transform-origin: var(--radix-tooltip-content-transform-origin);\n }\n .-translate-x-1\\/2 {\n --tw-translate-x: calc(calc(1 / 2 * 100%) * -1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .-translate-x-px {\n --tw-translate-x: -1px;\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .translate-x-1 {\n --tw-translate-x: calc(var(--spacing) * 1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .translate-x-6 {\n --tw-translate-x: calc(var(--spacing) * 6);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .translate-x-\\[-50\\%\\] {\n --tw-translate-x: -50%;\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .translate-x-px {\n --tw-translate-x: 1px;\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .-translate-y-1\\/2 {\n --tw-translate-y: calc(calc(1 / 2 * 100%) * -1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .translate-y-\\[-50\\%\\] {\n --tw-translate-y: -50%;\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .translate-y-\\[calc\\(-50\\%_-_2px\\)\\] {\n --tw-translate-y: calc(-50% - 2px);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .rotate-45 {\n rotate: 45deg;\n }\n .rotate-180 {\n rotate: 180deg;\n }\n .animate-in {\n animation: enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none);\n }\n .animate-pulse {\n animation: var(--animate-pulse);\n }\n .animate-spin {\n animation: var(--animate-spin);\n }\n .cursor-default {\n cursor: default;\n }\n .cursor-pointer {\n cursor: pointer;\n }\n .resize-none {\n resize: none;\n }\n .resize-y {\n resize: vertical;\n }\n .scroll-my-1 {\n scroll-margin-block: calc(var(--spacing) * 1);\n }\n .list-disc {\n list-style-type: disc;\n }\n .appearance-none {\n appearance: none;\n }\n .auto-rows-min {\n grid-auto-rows: min-content;\n }\n .grid-cols-1 {\n grid-template-columns: repeat(1, minmax(0, 1fr));\n }\n .grid-cols-2 {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n .grid-cols-3 {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n .grid-cols-\\[3rem_1fr_1fr_auto\\] {\n grid-template-columns: 3rem 1fr 1fr auto;\n }\n .grid-rows-\\[auto_auto\\] {\n grid-template-rows: auto auto;\n }\n .flex-col {\n flex-direction: column;\n }\n .flex-col-reverse {\n flex-direction: column-reverse;\n }\n .flex-row {\n flex-direction: row;\n }\n .flex-wrap {\n flex-wrap: wrap;\n }\n .place-content-center {\n place-content: center;\n }\n .items-center {\n align-items: center;\n }\n .items-end {\n align-items: flex-end;\n }\n .items-start {\n align-items: flex-start;\n }\n .items-stretch {\n align-items: stretch;\n }\n .justify-between {\n justify-content: space-between;\n }\n .justify-center {\n justify-content: center;\n }\n .justify-end {\n justify-content: flex-end;\n }\n .justify-start {\n justify-content: flex-start;\n }\n .gap-0\\.5 {\n gap: calc(var(--spacing) * 0.5);\n }\n .gap-1 {\n gap: calc(var(--spacing) * 1);\n }\n .gap-1\\.5 {\n gap: calc(var(--spacing) * 1.5);\n }\n .gap-2 {\n gap: calc(var(--spacing) * 2);\n }\n .gap-2\\.5 {\n gap: calc(var(--spacing) * 2.5);\n }\n .gap-3 {\n gap: calc(var(--spacing) * 3);\n }\n .gap-4 {\n gap: calc(var(--spacing) * 4);\n }\n .gap-5 {\n gap: calc(var(--spacing) * 5);\n }\n .gap-6 {\n gap: calc(var(--spacing) * 6);\n }\n .gap-7 {\n gap: calc(var(--spacing) * 7);\n }\n .gap-8 {\n gap: calc(var(--spacing) * 8);\n }\n .gap-10 {\n gap: calc(var(--spacing) * 10);\n }\n .gap-12 {\n gap: calc(var(--spacing) * 12);\n }\n .space-y-1\\.5 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .space-y-2 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .space-y-2\\.5 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 2.5) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 2.5) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .space-y-3 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .space-y-4 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .space-y-8 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 8) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 8) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .space-y-10 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 10) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 10) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .gap-x-6 {\n column-gap: calc(var(--spacing) * 6);\n }\n .-space-x-2 {\n :where(& > :not(:last-child)) {\n --tw-space-x-reverse: 0;\n margin-inline-start: calc(calc(var(--spacing) * -2) * var(--tw-space-x-reverse));\n margin-inline-end: calc(calc(var(--spacing) * -2) * calc(1 - var(--tw-space-x-reverse)));\n }\n }\n .gap-y-1 {\n row-gap: calc(var(--spacing) * 1);\n }\n .divide-y {\n :where(& > :not(:last-child)) {\n --tw-divide-y-reverse: 0;\n border-bottom-style: var(--tw-border-style);\n border-top-style: var(--tw-border-style);\n border-top-width: calc(1px * var(--tw-divide-y-reverse));\n border-bottom-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));\n }\n }\n .divide-gray-50 {\n :where(& > :not(:last-child)) {\n border-color: var(--color-gray-50);\n }\n }\n .self-center {\n align-self: center;\n }\n .self-end {\n align-self: flex-end;\n }\n .self-start {\n align-self: flex-start;\n }\n .justify-self-end {\n justify-self: flex-end;\n }\n .truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .overflow-auto {\n overflow: auto;\n }\n .overflow-hidden {\n overflow: hidden;\n }\n .overflow-x-auto {\n overflow-x: auto;\n }\n .overflow-x-hidden {\n overflow-x: hidden;\n }\n .overflow-y-auto {\n overflow-y: auto;\n }\n .rounded {\n border-radius: 0.25rem;\n }\n .rounded-2xl {\n border-radius: calc(var(--radius) + 8px);\n }\n .rounded-\\[2px\\] {\n border-radius: 2px;\n }\n .rounded-\\[4px\\] {\n border-radius: 4px;\n }\n .rounded-full {\n border-radius: calc(infinity * 1px);\n }\n .rounded-lg {\n border-radius: var(--radius);\n }\n .rounded-md {\n border-radius: calc(var(--radius) - 2px);\n }\n .rounded-sm {\n border-radius: calc(var(--radius) - 4px);\n }\n .rounded-xl {\n border-radius: calc(var(--radius) + 4px);\n }\n .rounded-xs {\n border-radius: var(--radius-xs);\n }\n .border {\n border-style: var(--tw-border-style);\n border-width: 1px;\n }\n .border-0 {\n border-style: var(--tw-border-style);\n border-width: 0px;\n }\n .border-2 {\n border-style: var(--tw-border-style);\n border-width: 2px;\n }\n .border-\\[1\\.5px\\] {\n border-style: var(--tw-border-style);\n border-width: 1.5px;\n }\n .border-t {\n border-top-style: var(--tw-border-style);\n border-top-width: 1px;\n }\n .border-r {\n border-right-style: var(--tw-border-style);\n border-right-width: 1px;\n }\n .border-b {\n border-bottom-style: var(--tw-border-style);\n border-bottom-width: 1px;\n }\n .border-b-2 {\n border-bottom-style: var(--tw-border-style);\n border-bottom-width: 2px;\n }\n .border-l {\n border-left-style: var(--tw-border-style);\n border-left-width: 1px;\n }\n .border-dashed {\n --tw-border-style: dashed;\n border-style: dashed;\n }\n .border-\\(--color-border\\) {\n border-color: var(--color-border);\n }\n .border-amber-200 {\n border-color: var(--color-amber-200);\n }\n .border-blue-100 {\n border-color: var(--color-blue-100);\n }\n .border-border {\n border-color: var(--border);\n }\n .border-border\\/50 {\n border-color: var(--border);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--border) 50%, transparent);\n }\n }\n .border-gray-50 {\n border-color: var(--color-gray-50);\n }\n .border-gray-100 {\n border-color: var(--color-gray-100);\n }\n .border-gray-200 {\n border-color: var(--color-gray-200);\n }\n .border-gray-600 {\n border-color: var(--color-gray-600);\n }\n .border-gray-800 {\n border-color: var(--color-gray-800);\n }\n .border-green-100 {\n border-color: var(--color-green-100);\n }\n .border-green-200 {\n border-color: var(--color-green-200);\n }\n .border-green-600 {\n border-color: var(--color-green-600);\n }\n .border-green-600\\/40 {\n border-color: color-mix(in srgb, oklch(62.7% 0.194 149.214) 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-green-600) 40%, transparent);\n }\n }\n .border-green-700 {\n border-color: var(--color-green-700);\n }\n .border-green-800 {\n border-color: var(--color-green-800);\n }\n .border-green-800\\/60 {\n border-color: color-mix(in srgb, oklch(44.8% 0.119 151.328) 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-green-800) 60%, transparent);\n }\n }\n .border-input {\n border-color: var(--input);\n }\n .border-muted-foreground\\/30 {\n border-color: var(--muted-foreground);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--muted-foreground) 30%, transparent);\n }\n }\n .border-red-100 {\n border-color: var(--color-red-100);\n }\n .border-red-200 {\n border-color: var(--color-red-200);\n }\n .border-sidebar-border {\n border-color: var(--sidebar-border);\n }\n .border-transparent {\n border-color: transparent;\n }\n .border-white {\n border-color: var(--color-white);\n }\n .border-white\\/5 {\n border-color: color-mix(in srgb, #fff 5%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-white) 5%, transparent);\n }\n }\n .border-white\\/10 {\n border-color: color-mix(in srgb, #fff 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-white) 10%, transparent);\n }\n }\n .border-white\\/20 {\n border-color: color-mix(in srgb, #fff 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-white) 20%, transparent);\n }\n }\n .border-white\\/30 {\n border-color: color-mix(in srgb, #fff 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-white) 30%, transparent);\n }\n }\n .border-t-transparent {\n border-top-color: transparent;\n }\n .bg-\\(--color-bg\\) {\n background-color: var(--color-bg);\n }\n .bg-accent {\n background-color: var(--accent);\n }\n .bg-amber-50 {\n background-color: var(--color-amber-50);\n }\n .bg-amber-100 {\n background-color: var(--color-amber-100);\n }\n .bg-amber-400 {\n background-color: var(--color-amber-400);\n }\n .bg-background {\n background-color: var(--background);\n }\n .bg-black {\n background-color: var(--color-black);\n }\n .bg-black\\/0 {\n background-color: color-mix(in srgb, #000 0%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 0%, transparent);\n }\n }\n .bg-black\\/30 {\n background-color: color-mix(in srgb, #000 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 30%, transparent);\n }\n }\n .bg-black\\/40 {\n background-color: color-mix(in srgb, #000 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 40%, transparent);\n }\n }\n .bg-black\\/50 {\n background-color: color-mix(in srgb, #000 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 50%, transparent);\n }\n }\n .bg-blue-50 {\n background-color: var(--color-blue-50);\n }\n .bg-blue-100 {\n background-color: var(--color-blue-100);\n }\n .bg-blue-500 {\n background-color: var(--color-blue-500);\n }\n .bg-border {\n background-color: var(--border);\n }\n .bg-card {\n background-color: var(--card);\n }\n .bg-destructive {\n background-color: var(--destructive);\n }\n .bg-destructive\\/10 {\n background-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--destructive) 10%, transparent);\n }\n }\n .bg-foreground {\n background-color: var(--foreground);\n }\n .bg-gray-50 {\n background-color: var(--color-gray-50);\n }\n .bg-gray-50\\/40 {\n background-color: color-mix(in srgb, oklch(98.5% 0.002 247.839) 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-gray-50) 40%, transparent);\n }\n }\n .bg-gray-50\\/50 {\n background-color: color-mix(in srgb, oklch(98.5% 0.002 247.839) 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-gray-50) 50%, transparent);\n }\n }\n .bg-gray-100 {\n background-color: var(--color-gray-100);\n }\n .bg-gray-200 {\n background-color: var(--color-gray-200);\n }\n .bg-gray-300 {\n background-color: var(--color-gray-300);\n }\n .bg-gray-500 {\n background-color: var(--color-gray-500);\n }\n .bg-gray-800 {\n background-color: var(--color-gray-800);\n }\n .bg-gray-900 {\n background-color: var(--color-gray-900);\n }\n .bg-gray-950 {\n background-color: var(--color-gray-950);\n }\n .bg-green-50 {\n background-color: var(--color-green-50);\n }\n .bg-green-50\\/50 {\n background-color: color-mix(in srgb, oklch(98.2% 0.018 155.826) 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-green-50) 50%, transparent);\n }\n }\n .bg-green-100 {\n background-color: var(--color-green-100);\n }\n .bg-green-300 {\n background-color: var(--color-green-300);\n }\n .bg-green-400 {\n background-color: var(--color-green-400);\n }\n .bg-green-500 {\n background-color: var(--color-green-500);\n }\n .bg-green-600 {\n background-color: var(--color-green-600);\n }\n .bg-green-700 {\n background-color: var(--color-green-700);\n }\n .bg-green-700\\/20 {\n background-color: color-mix(in srgb, oklch(52.7% 0.154 150.069) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-green-700) 20%, transparent);\n }\n }\n .bg-green-700\\/30 {\n background-color: color-mix(in srgb, oklch(52.7% 0.154 150.069) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-green-700) 30%, transparent);\n }\n }\n .bg-green-700\\/80 {\n background-color: color-mix(in srgb, oklch(52.7% 0.154 150.069) 80%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-green-700) 80%, transparent);\n }\n }\n .bg-green-700\\/90 {\n background-color: color-mix(in srgb, oklch(52.7% 0.154 150.069) 90%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-green-700) 90%, transparent);\n }\n }\n .bg-green-800 {\n background-color: var(--color-green-800);\n }\n .bg-green-800\\/60 {\n background-color: color-mix(in srgb, oklch(44.8% 0.119 151.328) 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-green-800) 60%, transparent);\n }\n }\n .bg-green-900 {\n background-color: var(--color-green-900);\n }\n .bg-green-900\\/60 {\n background-color: color-mix(in srgb, oklch(39.3% 0.095 152.535) 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-green-900) 60%, transparent);\n }\n }\n .bg-green-950 {\n background-color: var(--color-green-950);\n }\n .bg-muted {\n background-color: var(--muted);\n }\n .bg-muted\\/10 {\n background-color: var(--muted);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--muted) 10%, transparent);\n }\n }\n .bg-muted\\/20 {\n background-color: var(--muted);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--muted) 20%, transparent);\n }\n }\n .bg-muted\\/30 {\n background-color: var(--muted);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--muted) 30%, transparent);\n }\n }\n .bg-muted\\/40 {\n background-color: var(--muted);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--muted) 40%, transparent);\n }\n }\n .bg-muted\\/50 {\n background-color: var(--muted);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--muted) 50%, transparent);\n }\n }\n .bg-orange-100 {\n background-color: var(--color-orange-100);\n }\n .bg-orange-500 {\n background-color: var(--color-orange-500);\n }\n .bg-orange-600 {\n background-color: var(--color-orange-600);\n }\n .bg-pink-100 {\n background-color: var(--color-pink-100);\n }\n .bg-pink-500 {\n background-color: var(--color-pink-500);\n }\n .bg-popover {\n background-color: var(--popover);\n }\n .bg-primary {\n background-color: var(--primary);\n }\n .bg-purple-100 {\n background-color: var(--color-purple-100);\n }\n .bg-purple-500 {\n background-color: var(--color-purple-500);\n }\n .bg-red-50 {\n background-color: var(--color-red-50);\n }\n .bg-red-100 {\n background-color: var(--color-red-100);\n }\n .bg-red-600 {\n background-color: var(--color-red-600);\n }\n .bg-secondary {\n background-color: var(--secondary);\n }\n .bg-sidebar {\n background-color: var(--sidebar);\n }\n .bg-sidebar-border {\n background-color: var(--sidebar-border);\n }\n .bg-sky-100 {\n background-color: var(--color-sky-100);\n }\n .bg-teal-500 {\n background-color: var(--color-teal-500);\n }\n .bg-transparent {\n background-color: transparent;\n }\n .bg-white {\n background-color: var(--color-white);\n }\n .bg-white\\/5 {\n background-color: color-mix(in srgb, #fff 5%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 5%, transparent);\n }\n }\n .bg-white\\/10 {\n background-color: color-mix(in srgb, #fff 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 10%, transparent);\n }\n }\n .bg-white\\/15 {\n background-color: color-mix(in srgb, #fff 15%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 15%, transparent);\n }\n }\n .bg-white\\/20 {\n background-color: color-mix(in srgb, #fff 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 20%, transparent);\n }\n }\n .bg-white\\/30 {\n background-color: color-mix(in srgb, #fff 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 30%, transparent);\n }\n }\n .bg-yellow-50 {\n background-color: var(--color-yellow-50);\n }\n .bg-yellow-100 {\n background-color: var(--color-yellow-100);\n }\n .bg-yellow-500 {\n background-color: var(--color-yellow-500);\n }\n .bg-zinc-100 {\n background-color: var(--color-zinc-100);\n }\n .bg-zinc-200 {\n background-color: var(--color-zinc-200);\n }\n .bg-zinc-300 {\n background-color: var(--color-zinc-300);\n }\n .bg-zinc-500 {\n background-color: var(--color-zinc-500);\n }\n .bg-gradient-to-b {\n --tw-gradient-position: to bottom in oklab;\n background-image: linear-gradient(var(--tw-gradient-stops));\n }\n .bg-gradient-to-br {\n --tw-gradient-position: to bottom right in oklab;\n background-image: linear-gradient(var(--tw-gradient-stops));\n }\n .bg-gradient-to-r {\n --tw-gradient-position: to right in oklab;\n background-image: linear-gradient(var(--tw-gradient-stops));\n }\n .bg-gradient-to-t {\n --tw-gradient-position: to top in oklab;\n background-image: linear-gradient(var(--tw-gradient-stops));\n }\n .from-black\\/10 {\n --tw-gradient-from: color-mix(in srgb, #000 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-from: color-mix(in oklab, var(--color-black) 10%, transparent);\n }\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .from-black\\/30 {\n --tw-gradient-from: color-mix(in srgb, #000 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-from: color-mix(in oklab, var(--color-black) 30%, transparent);\n }\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .from-black\\/60 {\n --tw-gradient-from: color-mix(in srgb, #000 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-from: color-mix(in oklab, var(--color-black) 60%, transparent);\n }\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .from-gray-100 {\n --tw-gradient-from: var(--color-gray-100);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .from-gray-200 {\n --tw-gradient-from: var(--color-gray-200);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .from-gray-900 {\n --tw-gradient-from: var(--color-gray-900);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .from-gray-900\\/40 {\n --tw-gradient-from: color-mix(in srgb, oklch(21% 0.034 264.665) 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-from: color-mix(in oklab, var(--color-gray-900) 40%, transparent);\n }\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .from-gray-900\\/70 {\n --tw-gradient-from: color-mix(in srgb, oklch(21% 0.034 264.665) 70%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-from: color-mix(in oklab, var(--color-gray-900) 70%, transparent);\n }\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .from-gray-950 {\n --tw-gradient-from: var(--color-gray-950);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .from-green-100 {\n --tw-gradient-from: var(--color-green-100);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .from-green-500 {\n --tw-gradient-from: var(--color-green-500);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .from-green-800 {\n --tw-gradient-from: var(--color-green-800);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .from-green-900 {\n --tw-gradient-from: var(--color-green-900);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .from-green-950 {\n --tw-gradient-from: var(--color-green-950);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .via-black\\/20 {\n --tw-gradient-via: color-mix(in srgb, #000 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-via: color-mix(in oklab, var(--color-black) 20%, transparent);\n }\n --tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-via-stops);\n }\n .via-gray-900 {\n --tw-gradient-via: var(--color-gray-900);\n --tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-via-stops);\n }\n .via-gray-950\\/30 {\n --tw-gradient-via: color-mix(in srgb, oklch(13% 0.028 261.692) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-via: color-mix(in oklab, var(--color-gray-950) 30%, transparent);\n }\n --tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-via-stops);\n }\n .via-green-900 {\n --tw-gradient-via: var(--color-green-900);\n --tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-via-stops);\n }\n .via-green-950\\/30 {\n --tw-gradient-via: color-mix(in srgb, oklch(26.6% 0.065 152.934) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-via: color-mix(in oklab, var(--color-green-950) 30%, transparent);\n }\n --tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-via-stops);\n }\n .via-transparent {\n --tw-gradient-via: transparent;\n --tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-via-stops);\n }\n .to-black\\/20 {\n --tw-gradient-to: color-mix(in srgb, #000 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-to: color-mix(in oklab, var(--color-black) 20%, transparent);\n }\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-black\\/50 {\n --tw-gradient-to: color-mix(in srgb, #000 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-to: color-mix(in oklab, var(--color-black) 50%, transparent);\n }\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-black\\/60 {\n --tw-gradient-to: color-mix(in srgb, #000 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-to: color-mix(in oklab, var(--color-black) 60%, transparent);\n }\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-gray-300 {\n --tw-gradient-to: var(--color-gray-300);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-gray-900 {\n --tw-gradient-to: var(--color-gray-900);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-gray-950 {\n --tw-gradient-to: var(--color-gray-950);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-green-100 {\n --tw-gradient-to: var(--color-green-100);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-green-200 {\n --tw-gradient-to: var(--color-green-200);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-green-700 {\n --tw-gradient-to: var(--color-green-700);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-green-800 {\n --tw-gradient-to: var(--color-green-800);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-green-900 {\n --tw-gradient-to: var(--color-green-900);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-green-950 {\n --tw-gradient-to: var(--color-green-950);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-transparent {\n --tw-gradient-to: transparent;\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .fill-current {\n fill: currentcolor;\n }\n .fill-foreground {\n fill: var(--foreground);\n }\n .object-contain {\n object-fit: contain;\n }\n .object-cover {\n object-fit: cover;\n }\n .p-0 {\n padding: calc(var(--spacing) * 0);\n }\n .p-1 {\n padding: calc(var(--spacing) * 1);\n }\n .p-1\\.5 {\n padding: calc(var(--spacing) * 1.5);\n }\n .p-2 {\n padding: calc(var(--spacing) * 2);\n }\n .p-3 {\n padding: calc(var(--spacing) * 3);\n }\n .p-4 {\n padding: calc(var(--spacing) * 4);\n }\n .p-5 {\n padding: calc(var(--spacing) * 5);\n }\n .p-6 {\n padding: calc(var(--spacing) * 6);\n }\n .p-8 {\n padding: calc(var(--spacing) * 8);\n }\n .p-\\[3px\\] {\n padding: 3px;\n }\n .px-1 {\n padding-inline: calc(var(--spacing) * 1);\n }\n .px-1\\.5 {\n padding-inline: calc(var(--spacing) * 1.5);\n }\n .px-2 {\n padding-inline: calc(var(--spacing) * 2);\n }\n .px-2\\.5 {\n padding-inline: calc(var(--spacing) * 2.5);\n }\n .px-3 {\n padding-inline: calc(var(--spacing) * 3);\n }\n .px-4 {\n padding-inline: calc(var(--spacing) * 4);\n }\n .px-5 {\n padding-inline: calc(var(--spacing) * 5);\n }\n .px-6 {\n padding-inline: calc(var(--spacing) * 6);\n }\n .py-0\\.5 {\n padding-block: calc(var(--spacing) * 0.5);\n }\n .py-1 {\n padding-block: calc(var(--spacing) * 1);\n }\n .py-1\\.5 {\n padding-block: calc(var(--spacing) * 1.5);\n }\n .py-2 {\n padding-block: calc(var(--spacing) * 2);\n }\n .py-2\\.5 {\n padding-block: calc(var(--spacing) * 2.5);\n }\n .py-3 {\n padding-block: calc(var(--spacing) * 3);\n }\n .py-3\\.5 {\n padding-block: calc(var(--spacing) * 3.5);\n }\n .py-4 {\n padding-block: calc(var(--spacing) * 4);\n }\n .py-5 {\n padding-block: calc(var(--spacing) * 5);\n }\n .py-6 {\n padding-block: calc(var(--spacing) * 6);\n }\n .py-8 {\n padding-block: calc(var(--spacing) * 8);\n }\n .py-10 {\n padding-block: calc(var(--spacing) * 10);\n }\n .py-12 {\n padding-block: calc(var(--spacing) * 12);\n }\n .py-16 {\n padding-block: calc(var(--spacing) * 16);\n }\n .py-20 {\n padding-block: calc(var(--spacing) * 20);\n }\n .py-24 {\n padding-block: calc(var(--spacing) * 24);\n }\n .py-32 {\n padding-block: calc(var(--spacing) * 32);\n }\n .pt-1 {\n padding-top: calc(var(--spacing) * 1);\n }\n .pt-2 {\n padding-top: calc(var(--spacing) * 2);\n }\n .pt-3 {\n padding-top: calc(var(--spacing) * 3);\n }\n .pt-4 {\n padding-top: calc(var(--spacing) * 4);\n }\n .pt-5 {\n padding-top: calc(var(--spacing) * 5);\n }\n .pt-8 {\n padding-top: calc(var(--spacing) * 8);\n }\n .pt-16 {\n padding-top: calc(var(--spacing) * 16);\n }\n .pr-2 {\n padding-right: calc(var(--spacing) * 2);\n }\n .pr-3 {\n padding-right: calc(var(--spacing) * 3);\n }\n .pr-8 {\n padding-right: calc(var(--spacing) * 8);\n }\n .pb-0 {\n padding-bottom: calc(var(--spacing) * 0);\n }\n .pb-2 {\n padding-bottom: calc(var(--spacing) * 2);\n }\n .pb-3 {\n padding-bottom: calc(var(--spacing) * 3);\n }\n .pb-4 {\n padding-bottom: calc(var(--spacing) * 4);\n }\n .pb-6 {\n padding-bottom: calc(var(--spacing) * 6);\n }\n .pb-8 {\n padding-bottom: calc(var(--spacing) * 8);\n }\n .pb-10 {\n padding-bottom: calc(var(--spacing) * 10);\n }\n .pl-2 {\n padding-left: calc(var(--spacing) * 2);\n }\n .pl-3 {\n padding-left: calc(var(--spacing) * 3);\n }\n .pl-8 {\n padding-left: calc(var(--spacing) * 8);\n }\n .pl-9 {\n padding-left: calc(var(--spacing) * 9);\n }\n .text-center {\n text-align: center;\n }\n .text-left {\n text-align: left;\n }\n .text-right {\n text-align: right;\n }\n .align-middle {\n vertical-align: middle;\n }\n .font-mono {\n font-family: var(--font-geist-mono);\n }\n .font-sans {\n font-family: var(--font-geist-sans);\n }\n .text-2xl {\n font-size: var(--text-2xl);\n line-height: var(--tw-leading, var(--text-2xl--line-height));\n }\n .text-3xl {\n font-size: var(--text-3xl);\n line-height: var(--tw-leading, var(--text-3xl--line-height));\n }\n .text-4xl {\n font-size: var(--text-4xl);\n line-height: var(--tw-leading, var(--text-4xl--line-height));\n }\n .text-5xl {\n font-size: var(--text-5xl);\n line-height: var(--tw-leading, var(--text-5xl--line-height));\n }\n .text-6xl {\n font-size: var(--text-6xl);\n line-height: var(--tw-leading, var(--text-6xl--line-height));\n }\n .text-base {\n font-size: var(--text-base);\n line-height: var(--tw-leading, var(--text-base--line-height));\n }\n .text-lg {\n font-size: var(--text-lg);\n line-height: var(--tw-leading, var(--text-lg--line-height));\n }\n .text-sm {\n font-size: var(--text-sm);\n line-height: var(--tw-leading, var(--text-sm--line-height));\n }\n .text-xl {\n font-size: var(--text-xl);\n line-height: var(--tw-leading, var(--text-xl--line-height));\n }\n .text-xs {\n font-size: var(--text-xs);\n line-height: var(--tw-leading, var(--text-xs--line-height));\n }\n .text-\\[10px\\] {\n font-size: 10px;\n }\n .leading-none {\n --tw-leading: 1;\n line-height: 1;\n }\n .leading-normal {\n --tw-leading: var(--leading-normal);\n line-height: var(--leading-normal);\n }\n .leading-relaxed {\n --tw-leading: var(--leading-relaxed);\n line-height: var(--leading-relaxed);\n }\n .leading-snug {\n --tw-leading: var(--leading-snug);\n line-height: var(--leading-snug);\n }\n .leading-tight {\n --tw-leading: var(--leading-tight);\n line-height: var(--leading-tight);\n }\n .font-bold {\n --tw-font-weight: var(--font-weight-bold);\n font-weight: var(--font-weight-bold);\n }\n .font-medium {\n --tw-font-weight: var(--font-weight-medium);\n font-weight: var(--font-weight-medium);\n }\n .font-normal {\n --tw-font-weight: var(--font-weight-normal);\n font-weight: var(--font-weight-normal);\n }\n .font-semibold {\n --tw-font-weight: var(--font-weight-semibold);\n font-weight: var(--font-weight-semibold);\n }\n .tracking-tight {\n --tw-tracking: var(--tracking-tight);\n letter-spacing: var(--tracking-tight);\n }\n .tracking-wide {\n --tw-tracking: var(--tracking-wide);\n letter-spacing: var(--tracking-wide);\n }\n .tracking-wider {\n --tw-tracking: var(--tracking-wider);\n letter-spacing: var(--tracking-wider);\n }\n .tracking-widest {\n --tw-tracking: var(--tracking-widest);\n letter-spacing: var(--tracking-widest);\n }\n .text-balance {\n text-wrap: balance;\n }\n .whitespace-nowrap {\n white-space: nowrap;\n }\n .whitespace-pre-line {\n white-space: pre-line;\n }\n .whitespace-pre-wrap {\n white-space: pre-wrap;\n }\n .text-amber-700 {\n color: var(--color-amber-700);\n }\n .text-background {\n color: var(--background);\n }\n .text-blue-600 {\n color: var(--color-blue-600);\n }\n .text-blue-700 {\n color: var(--color-blue-700);\n }\n .text-card-foreground {\n color: var(--card-foreground);\n }\n .text-current {\n color: currentcolor;\n }\n .text-destructive {\n color: var(--destructive);\n }\n .text-foreground {\n color: var(--foreground);\n }\n .text-foreground\\/60 {\n color: var(--foreground);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--foreground) 60%, transparent);\n }\n }\n .text-gray-200 {\n color: var(--color-gray-200);\n }\n .text-gray-300 {\n color: var(--color-gray-300);\n }\n .text-gray-400 {\n color: var(--color-gray-400);\n }\n .text-gray-500 {\n color: var(--color-gray-500);\n }\n .text-gray-600 {\n color: var(--color-gray-600);\n }\n .text-gray-700 {\n color: var(--color-gray-700);\n }\n .text-gray-800 {\n color: var(--color-gray-800);\n }\n .text-gray-900 {\n color: var(--color-gray-900);\n }\n .text-green-100 {\n color: var(--color-green-100);\n }\n .text-green-200 {\n color: var(--color-green-200);\n }\n .text-green-300 {\n color: var(--color-green-300);\n }\n .text-green-300\\/60 {\n color: color-mix(in srgb, oklch(87.1% 0.15 154.449) 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-green-300) 60%, transparent);\n }\n }\n .text-green-300\\/70 {\n color: color-mix(in srgb, oklch(87.1% 0.15 154.449) 70%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-green-300) 70%, transparent);\n }\n }\n .text-green-400 {\n color: var(--color-green-400);\n }\n .text-green-500 {\n color: var(--color-green-500);\n }\n .text-green-600 {\n color: var(--color-green-600);\n }\n .text-green-700 {\n color: var(--color-green-700);\n }\n .text-green-800 {\n color: var(--color-green-800);\n }\n .text-green-900 {\n color: var(--color-green-900);\n }\n .text-muted-foreground {\n color: var(--muted-foreground);\n }\n .text-orange-600 {\n color: var(--color-orange-600);\n }\n .text-orange-700 {\n color: var(--color-orange-700);\n }\n .text-pink-700 {\n color: var(--color-pink-700);\n }\n .text-popover-foreground {\n color: var(--popover-foreground);\n }\n .text-primary {\n color: var(--primary);\n }\n .text-primary-foreground {\n color: var(--primary-foreground);\n }\n .text-purple-700 {\n color: var(--color-purple-700);\n }\n .text-red-400 {\n color: var(--color-red-400);\n }\n .text-red-500 {\n color: var(--color-red-500);\n }\n .text-red-600 {\n color: var(--color-red-600);\n }\n .text-red-700 {\n color: var(--color-red-700);\n }\n .text-secondary-foreground {\n color: var(--secondary-foreground);\n }\n .text-sidebar-foreground {\n color: var(--sidebar-foreground);\n }\n .text-sidebar-foreground\\/70 {\n color: var(--sidebar-foreground);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--sidebar-foreground) 70%, transparent);\n }\n }\n .text-sky-700 {\n color: var(--color-sky-700);\n }\n .text-white {\n color: var(--color-white);\n }\n .text-white\\/20 {\n color: color-mix(in srgb, #fff 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 20%, transparent);\n }\n }\n .text-white\\/50 {\n color: color-mix(in srgb, #fff 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 50%, transparent);\n }\n }\n .text-white\\/60 {\n color: color-mix(in srgb, #fff 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 60%, transparent);\n }\n }\n .text-white\\/70 {\n color: color-mix(in srgb, #fff 70%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 70%, transparent);\n }\n }\n .text-white\\/80 {\n color: color-mix(in srgb, #fff 80%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 80%, transparent);\n }\n }\n .text-white\\/85 {\n color: color-mix(in srgb, #fff 85%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 85%, transparent);\n }\n }\n .text-yellow-600 {\n color: var(--color-yellow-600);\n }\n .text-yellow-700 {\n color: var(--color-yellow-700);\n }\n .text-zinc-500 {\n color: var(--color-zinc-500);\n }\n .text-zinc-600 {\n color: var(--color-zinc-600);\n }\n .capitalize {\n text-transform: capitalize;\n }\n .uppercase {\n text-transform: uppercase;\n }\n .italic {\n font-style: italic;\n }\n .tabular-nums {\n --tw-numeric-spacing: tabular-nums;\n font-variant-numeric: var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,);\n }\n .underline {\n text-decoration-line: underline;\n }\n .underline-offset-4 {\n text-underline-offset: 4px;\n }\n .antialiased {\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n }\n .opacity-0 {\n opacity: 0%;\n }\n .opacity-20 {\n opacity: 20%;\n }\n .opacity-30 {\n opacity: 30%;\n }\n .opacity-40 {\n opacity: 40%;\n }\n .opacity-50 {\n opacity: 50%;\n }\n .opacity-60 {\n opacity: 60%;\n }\n .opacity-70 {\n opacity: 70%;\n }\n .opacity-80 {\n opacity: 80%;\n }\n .shadow {\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-\\[0_0_0_1px_hsl\\(var\\(--sidebar-border\\)\\)\\] {\n --tw-shadow: 0 0 0 1px var(--tw-shadow-color, hsl(var(--sidebar-border)));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-lg {\n --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-md {\n --tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 2px 4px -2px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-none {\n --tw-shadow: 0 0 #0000;\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-sm {\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-xl {\n --tw-shadow: 0 20px 25px -5px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 8px 10px -6px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-xs {\n --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .ring-1 {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .ring-2 {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .ring-background {\n --tw-ring-color: var(--background);\n }\n .ring-current {\n --tw-ring-color: currentcolor;\n }\n .ring-sidebar-ring {\n --tw-ring-color: var(--sidebar-ring);\n }\n .ring-offset-background {\n --tw-ring-offset-color: var(--background);\n }\n .outline-hidden {\n --tw-outline-style: none;\n outline-style: none;\n @media (forced-colors: active) {\n outline: 2px solid transparent;\n outline-offset: 2px;\n }\n }\n .outline {\n outline-style: var(--tw-outline-style);\n outline-width: 1px;\n }\n .backdrop-blur-sm {\n --tw-backdrop-blur: blur(var(--blur-sm));\n -webkit-backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);\n backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);\n }\n .transition {\n transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter, display, content-visibility, overlay, pointer-events;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-\\[color\\,box-shadow\\] {\n transition-property: color,box-shadow;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-\\[left\\,right\\,width\\] {\n transition-property: left,right,width;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-\\[margin\\,opacity\\] {\n transition-property: margin,opacity;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-\\[width\\,height\\,padding\\] {\n transition-property: width,height,padding;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-\\[width\\] {\n transition-property: width;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-all {\n transition-property: all;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-colors {\n transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-opacity {\n transition-property: opacity;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-shadow {\n transition-property: box-shadow;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-transform {\n transition-property: transform, translate, scale, rotate;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-none {\n transition-property: none;\n }\n .duration-200 {\n --tw-duration: 200ms;\n transition-duration: 200ms;\n }\n .duration-300 {\n --tw-duration: 300ms;\n transition-duration: 300ms;\n }\n .ease-in-out {\n --tw-ease: var(--ease-in-out);\n transition-timing-function: var(--ease-in-out);\n }\n .ease-linear {\n --tw-ease: linear;\n transition-timing-function: linear;\n }\n .fade-in-0 {\n --tw-enter-opacity: calc(0/100);\n --tw-enter-opacity: 0;\n }\n .outline-none {\n --tw-outline-style: none;\n outline-style: none;\n }\n .select-none {\n -webkit-user-select: none;\n user-select: none;\n }\n .zoom-in-95 {\n --tw-enter-scale: calc(95*1%);\n --tw-enter-scale: .95;\n }\n .group-focus-within\\/menu-item\\:opacity-100 {\n &:is(:where(.group\\/menu-item):focus-within *) {\n opacity: 100%;\n }\n }\n .group-hover\\:w-5 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n width: calc(var(--spacing) * 5);\n }\n }\n }\n .group-hover\\:w-6 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n width: calc(var(--spacing) * 6);\n }\n }\n }\n .group-hover\\:border-green-300 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n border-color: var(--color-green-300);\n }\n }\n }\n .group-hover\\:border-green-400 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n border-color: var(--color-green-400);\n }\n }\n }\n .group-hover\\:bg-black\\/40 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n background-color: color-mix(in srgb, #000 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 40%, transparent);\n }\n }\n }\n }\n .group-hover\\:bg-green-700 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n background-color: var(--color-green-700);\n }\n }\n }\n .group-hover\\:bg-green-800 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n background-color: var(--color-green-800);\n }\n }\n }\n .group-hover\\:text-green-600 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n color: var(--color-green-600);\n }\n }\n }\n .group-hover\\:text-green-800 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n color: var(--color-green-800);\n }\n }\n }\n .group-hover\\:text-white {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n color: var(--color-white);\n }\n }\n }\n .group-hover\\:opacity-100 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n opacity: 100%;\n }\n }\n }\n .group-hover\\/menu-item\\:opacity-100 {\n &:is(:where(.group\\/menu-item):hover *) {\n @media (hover: hover) {\n opacity: 100%;\n }\n }\n }\n .group-has-data-\\[orientation\\=horizontal\\]\\/field\\:text-balance {\n &:is(:where(.group\\/field):has(*[data-orientation=\"horizontal\"]) *) {\n text-wrap: balance;\n }\n }\n .group-has-data-\\[sidebar\\=menu-action\\]\\/menu-item\\:pr-8 {\n &:is(:where(.group\\/menu-item):has(*[data-sidebar=\"menu-action\"]) *) {\n padding-right: calc(var(--spacing) * 8);\n }\n }\n .group-has-data-\\[size\\=lg\\]\\/avatar-group\\:size-10 {\n &:is(:where(.group\\/avatar-group):has(*[data-size=\"lg\"]) *) {\n width: calc(var(--spacing) * 10);\n height: calc(var(--spacing) * 10);\n }\n }\n .group-has-data-\\[size\\=sm\\]\\/avatar-group\\:size-6 {\n &:is(:where(.group\\/avatar-group):has(*[data-size=\"sm\"]) *) {\n width: calc(var(--spacing) * 6);\n height: calc(var(--spacing) * 6);\n }\n }\n .group-data-\\[collapsible\\=icon\\]\\:-mt-8 {\n &:is(:where(.group)[data-collapsible=\"icon\"] *) {\n margin-top: calc(var(--spacing) * -8);\n }\n }\n .group-data-\\[collapsible\\=icon\\]\\:hidden {\n &:is(:where(.group)[data-collapsible=\"icon\"] *) {\n display: none;\n }\n }\n .group-data-\\[collapsible\\=icon\\]\\:size-8\\! {\n &:is(:where(.group)[data-collapsible=\"icon\"] *) {\n width: calc(var(--spacing) * 8) !important;\n height: calc(var(--spacing) * 8) !important;\n }\n }\n .group-data-\\[collapsible\\=icon\\]\\:w-\\(--sidebar-width-icon\\) {\n &:is(:where(.group)[data-collapsible=\"icon\"] *) {\n width: var(--sidebar-width-icon);\n }\n }\n .group-data-\\[collapsible\\=icon\\]\\:w-\\[calc\\(var\\(--sidebar-width-icon\\)\\+\\(--spacing\\(4\\)\\)\\)\\] {\n &:is(:where(.group)[data-collapsible=\"icon\"] *) {\n width: calc(var(--sidebar-width-icon) + (calc(var(--spacing) * 4)));\n }\n }\n .group-data-\\[collapsible\\=icon\\]\\:w-\\[calc\\(var\\(--sidebar-width-icon\\)\\+\\(--spacing\\(4\\)\\)\\+2px\\)\\] {\n &:is(:where(.group)[data-collapsible=\"icon\"] *) {\n width: calc(var(--sidebar-width-icon) + (calc(var(--spacing) * 4)) + 2px);\n }\n }\n .group-data-\\[collapsible\\=icon\\]\\:overflow-hidden {\n &:is(:where(.group)[data-collapsible=\"icon\"] *) {\n overflow: hidden;\n }\n }\n .group-data-\\[collapsible\\=icon\\]\\:p-0\\! {\n &:is(:where(.group)[data-collapsible=\"icon\"] *) {\n padding: calc(var(--spacing) * 0) !important;\n }\n }\n .group-data-\\[collapsible\\=icon\\]\\:p-2\\! {\n &:is(:where(.group)[data-collapsible=\"icon\"] *) {\n padding: calc(var(--spacing) * 2) !important;\n }\n }\n .group-data-\\[collapsible\\=icon\\]\\:opacity-0 {\n &:is(:where(.group)[data-collapsible=\"icon\"] *) {\n opacity: 0%;\n }\n }\n .group-data-\\[collapsible\\=offcanvas\\]\\:right-\\[calc\\(var\\(--sidebar-width\\)\\*-1\\)\\] {\n &:is(:where(.group)[data-collapsible=\"offcanvas\"] *) {\n right: calc(var(--sidebar-width) * -1);\n }\n }\n .group-data-\\[collapsible\\=offcanvas\\]\\:left-\\[calc\\(var\\(--sidebar-width\\)\\*-1\\)\\] {\n &:is(:where(.group)[data-collapsible=\"offcanvas\"] *) {\n left: calc(var(--sidebar-width) * -1);\n }\n }\n .group-data-\\[collapsible\\=offcanvas\\]\\:w-0 {\n &:is(:where(.group)[data-collapsible=\"offcanvas\"] *) {\n width: calc(var(--spacing) * 0);\n }\n }\n .group-data-\\[collapsible\\=offcanvas\\]\\:translate-x-0 {\n &:is(:where(.group)[data-collapsible=\"offcanvas\"] *) {\n --tw-translate-x: calc(var(--spacing) * 0);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n }\n .group-data-\\[disabled\\=true\\]\\:pointer-events-none {\n &:is(:where(.group)[data-disabled=\"true\"] *) {\n pointer-events: none;\n }\n }\n .group-data-\\[disabled\\=true\\]\\:opacity-50 {\n &:is(:where(.group)[data-disabled=\"true\"] *) {\n opacity: 50%;\n }\n }\n .group-data-\\[disabled\\=true\\]\\/field\\:opacity-50 {\n &:is(:where(.group\\/field)[data-disabled=\"true\"] *) {\n opacity: 50%;\n }\n }\n .group-data-\\[orientation\\=horizontal\\]\\/tabs\\:h-9 {\n &:is(:where(.group\\/tabs)[data-orientation=\"horizontal\"] *) {\n height: calc(var(--spacing) * 9);\n }\n }\n .group-data-\\[orientation\\=vertical\\]\\/tabs\\:h-fit {\n &:is(:where(.group\\/tabs)[data-orientation=\"vertical\"] *) {\n height: fit-content;\n }\n }\n .group-data-\\[orientation\\=vertical\\]\\/tabs\\:w-full {\n &:is(:where(.group\\/tabs)[data-orientation=\"vertical\"] *) {\n width: 100%;\n }\n }\n .group-data-\\[orientation\\=vertical\\]\\/tabs\\:flex-col {\n &:is(:where(.group\\/tabs)[data-orientation=\"vertical\"] *) {\n flex-direction: column;\n }\n }\n .group-data-\\[orientation\\=vertical\\]\\/tabs\\:justify-start {\n &:is(:where(.group\\/tabs)[data-orientation=\"vertical\"] *) {\n justify-content: flex-start;\n }\n }\n .group-data-\\[side\\=left\\]\\:-right-4 {\n &:is(:where(.group)[data-side=\"left\"] *) {\n right: calc(var(--spacing) * -4);\n }\n }\n .group-data-\\[side\\=left\\]\\:border-r {\n &:is(:where(.group)[data-side=\"left\"] *) {\n border-right-style: var(--tw-border-style);\n border-right-width: 1px;\n }\n }\n .group-data-\\[side\\=right\\]\\:left-0 {\n &:is(:where(.group)[data-side=\"right\"] *) {\n left: calc(var(--spacing) * 0);\n }\n }\n .group-data-\\[side\\=right\\]\\:rotate-180 {\n &:is(:where(.group)[data-side=\"right\"] *) {\n rotate: 180deg;\n }\n }\n .group-data-\\[side\\=right\\]\\:border-l {\n &:is(:where(.group)[data-side=\"right\"] *) {\n border-left-style: var(--tw-border-style);\n border-left-width: 1px;\n }\n }\n .group-data-\\[size\\=default\\]\\/avatar\\:size-2\\.5 {\n &:is(:where(.group\\/avatar)[data-size=\"default\"] *) {\n width: calc(var(--spacing) * 2.5);\n height: calc(var(--spacing) * 2.5);\n }\n }\n .group-data-\\[size\\=lg\\]\\/avatar\\:size-3 {\n &:is(:where(.group\\/avatar)[data-size=\"lg\"] *) {\n width: calc(var(--spacing) * 3);\n height: calc(var(--spacing) * 3);\n }\n }\n .group-data-\\[size\\=sm\\]\\/avatar\\:size-2 {\n &:is(:where(.group\\/avatar)[data-size=\"sm\"] *) {\n width: calc(var(--spacing) * 2);\n height: calc(var(--spacing) * 2);\n }\n }\n .group-data-\\[size\\=sm\\]\\/avatar\\:text-xs {\n &:is(:where(.group\\/avatar)[data-size=\"sm\"] *) {\n font-size: var(--text-xs);\n line-height: var(--tw-leading, var(--text-xs--line-height));\n }\n }\n .group-data-\\[variant\\=floating\\]\\:rounded-lg {\n &:is(:where(.group)[data-variant=\"floating\"] *) {\n border-radius: var(--radius);\n }\n }\n .group-data-\\[variant\\=floating\\]\\:border {\n &:is(:where(.group)[data-variant=\"floating\"] *) {\n border-style: var(--tw-border-style);\n border-width: 1px;\n }\n }\n .group-data-\\[variant\\=floating\\]\\:border-sidebar-border {\n &:is(:where(.group)[data-variant=\"floating\"] *) {\n border-color: var(--sidebar-border);\n }\n }\n .group-data-\\[variant\\=floating\\]\\:shadow-sm {\n &:is(:where(.group)[data-variant=\"floating\"] *) {\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n .group-data-\\[variant\\=line\\]\\/tabs-list\\:bg-transparent {\n &:is(:where(.group\\/tabs-list)[data-variant=\"line\"] *) {\n background-color: transparent;\n }\n }\n .group-data-\\[variant\\=outline\\]\\/field-group\\:-mb-2 {\n &:is(:where(.group\\/field-group)[data-variant=\"outline\"] *) {\n margin-bottom: calc(var(--spacing) * -2);\n }\n }\n .group-data-\\[vaul-drawer-direction\\=bottom\\]\\/drawer-content\\:block {\n &:is(:where(.group\\/drawer-content)[data-vaul-drawer-direction=\"bottom\"] *) {\n display: block;\n }\n }\n .group-data-\\[vaul-drawer-direction\\=bottom\\]\\/drawer-content\\:text-center {\n &:is(:where(.group\\/drawer-content)[data-vaul-drawer-direction=\"bottom\"] *) {\n text-align: center;\n }\n }\n .group-data-\\[vaul-drawer-direction\\=top\\]\\/drawer-content\\:text-center {\n &:is(:where(.group\\/drawer-content)[data-vaul-drawer-direction=\"top\"] *) {\n text-align: center;\n }\n }\n .peer-hover\\/menu-button\\:text-sidebar-accent-foreground {\n &:is(:where(.peer\\/menu-button):hover ~ *) {\n @media (hover: hover) {\n color: var(--sidebar-accent-foreground);\n }\n }\n }\n .peer-disabled\\:cursor-not-allowed {\n &:is(:where(.peer):disabled ~ *) {\n cursor: not-allowed;\n }\n }\n .peer-disabled\\:opacity-50 {\n &:is(:where(.peer):disabled ~ *) {\n opacity: 50%;\n }\n }\n .peer-data-\\[active\\=true\\]\\/menu-button\\:text-sidebar-accent-foreground {\n &:is(:where(.peer\\/menu-button)[data-active=\"true\"] ~ *) {\n color: var(--sidebar-accent-foreground);\n }\n }\n .peer-data-\\[size\\=default\\]\\/menu-button\\:top-1\\.5 {\n &:is(:where(.peer\\/menu-button)[data-size=\"default\"] ~ *) {\n top: calc(var(--spacing) * 1.5);\n }\n }\n .peer-data-\\[size\\=lg\\]\\/menu-button\\:top-2\\.5 {\n &:is(:where(.peer\\/menu-button)[data-size=\"lg\"] ~ *) {\n top: calc(var(--spacing) * 2.5);\n }\n }\n .peer-data-\\[size\\=sm\\]\\/menu-button\\:top-1 {\n &:is(:where(.peer\\/menu-button)[data-size=\"sm\"] ~ *) {\n top: calc(var(--spacing) * 1);\n }\n }\n .selection\\:bg-primary {\n & *::selection {\n background-color: var(--primary);\n }\n &::selection {\n background-color: var(--primary);\n }\n }\n .selection\\:text-primary-foreground {\n & *::selection {\n color: var(--primary-foreground);\n }\n &::selection {\n color: var(--primary-foreground);\n }\n }\n .file\\:inline-flex {\n &::file-selector-button {\n display: inline-flex;\n }\n }\n .file\\:h-7 {\n &::file-selector-button {\n height: calc(var(--spacing) * 7);\n }\n }\n .file\\:border-0 {\n &::file-selector-button {\n border-style: var(--tw-border-style);\n border-width: 0px;\n }\n }\n .file\\:bg-transparent {\n &::file-selector-button {\n background-color: transparent;\n }\n }\n .file\\:text-sm {\n &::file-selector-button {\n font-size: var(--text-sm);\n line-height: var(--tw-leading, var(--text-sm--line-height));\n }\n }\n .file\\:font-medium {\n &::file-selector-button {\n --tw-font-weight: var(--font-weight-medium);\n font-weight: var(--font-weight-medium);\n }\n }\n .file\\:text-foreground {\n &::file-selector-button {\n color: var(--foreground);\n }\n }\n .placeholder\\:text-muted-foreground {\n &::placeholder {\n color: var(--muted-foreground);\n }\n }\n .after\\:absolute {\n &::after {\n content: var(--tw-content);\n position: absolute;\n }\n }\n .after\\:-inset-2 {\n &::after {\n content: var(--tw-content);\n inset: calc(var(--spacing) * -2);\n }\n }\n .after\\:inset-y-0 {\n &::after {\n content: var(--tw-content);\n inset-block: calc(var(--spacing) * 0);\n }\n }\n .after\\:left-1\\/2 {\n &::after {\n content: var(--tw-content);\n left: calc(1 / 2 * 100%);\n }\n }\n .after\\:w-0\\.5 {\n &::after {\n content: var(--tw-content);\n width: calc(var(--spacing) * 0.5);\n }\n }\n .after\\:bg-foreground {\n &::after {\n content: var(--tw-content);\n background-color: var(--foreground);\n }\n }\n .after\\:opacity-0 {\n &::after {\n content: var(--tw-content);\n opacity: 0%;\n }\n }\n .after\\:transition-opacity {\n &::after {\n content: var(--tw-content);\n transition-property: opacity;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n }\n .group-data-\\[collapsible\\=offcanvas\\]\\:after\\:left-full {\n &:is(:where(.group)[data-collapsible=\"offcanvas\"] *) {\n &::after {\n content: var(--tw-content);\n left: 100%;\n }\n }\n }\n .group-data-\\[orientation\\=horizontal\\]\\/tabs\\:after\\:inset-x-0 {\n &:is(:where(.group\\/tabs)[data-orientation=\"horizontal\"] *) {\n &::after {\n content: var(--tw-content);\n inset-inline: calc(var(--spacing) * 0);\n }\n }\n }\n .group-data-\\[orientation\\=horizontal\\]\\/tabs\\:after\\:bottom-\\[-5px\\] {\n &:is(:where(.group\\/tabs)[data-orientation=\"horizontal\"] *) {\n &::after {\n content: var(--tw-content);\n bottom: -5px;\n }\n }\n }\n .group-data-\\[orientation\\=horizontal\\]\\/tabs\\:after\\:h-0\\.5 {\n &:is(:where(.group\\/tabs)[data-orientation=\"horizontal\"] *) {\n &::after {\n content: var(--tw-content);\n height: calc(var(--spacing) * 0.5);\n }\n }\n }\n .group-data-\\[orientation\\=vertical\\]\\/tabs\\:after\\:inset-y-0 {\n &:is(:where(.group\\/tabs)[data-orientation=\"vertical\"] *) {\n &::after {\n content: var(--tw-content);\n inset-block: calc(var(--spacing) * 0);\n }\n }\n }\n .group-data-\\[orientation\\=vertical\\]\\/tabs\\:after\\:-right-1 {\n &:is(:where(.group\\/tabs)[data-orientation=\"vertical\"] *) {\n &::after {\n content: var(--tw-content);\n right: calc(var(--spacing) * -1);\n }\n }\n }\n .group-data-\\[orientation\\=vertical\\]\\/tabs\\:after\\:w-0\\.5 {\n &:is(:where(.group\\/tabs)[data-orientation=\"vertical\"] *) {\n &::after {\n content: var(--tw-content);\n width: calc(var(--spacing) * 0.5);\n }\n }\n }\n .last\\:mt-0 {\n &:last-child {\n margin-top: calc(var(--spacing) * 0);\n }\n }\n .hover\\:-translate-y-0\\.5 {\n &:hover {\n @media (hover: hover) {\n --tw-translate-y: calc(var(--spacing) * -0.5);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n }\n }\n .hover\\:border-blue-200 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-blue-200);\n }\n }\n }\n .hover\\:border-blue-500 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-blue-500);\n }\n }\n }\n .hover\\:border-gray-200 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-gray-200);\n }\n }\n }\n .hover\\:border-gray-300 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-gray-300);\n }\n }\n }\n .hover\\:border-green-200 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-green-200);\n }\n }\n }\n .hover\\:border-green-300 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-green-300);\n }\n }\n }\n .hover\\:border-green-400 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-green-400);\n }\n }\n }\n .hover\\:border-green-500 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-green-500);\n }\n }\n }\n .hover\\:border-green-500\\/40 {\n &:hover {\n @media (hover: hover) {\n border-color: color-mix(in srgb, oklch(72.3% 0.219 149.579) 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-green-500) 40%, transparent);\n }\n }\n }\n }\n .hover\\:border-green-600 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-green-600);\n }\n }\n }\n .hover\\:border-pink-500 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-pink-500);\n }\n }\n }\n .hover\\:border-primary\\/50 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--primary);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--primary) 50%, transparent);\n }\n }\n }\n }\n .hover\\:border-red-200 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-red-200);\n }\n }\n }\n .hover\\:bg-accent {\n &:hover {\n @media (hover: hover) {\n background-color: var(--accent);\n }\n }\n }\n .hover\\:bg-black\\/70 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, #000 70%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 70%, transparent);\n }\n }\n }\n }\n .hover\\:bg-blue-600\\/80 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, oklch(54.6% 0.245 262.881) 80%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-blue-600) 80%, transparent);\n }\n }\n }\n }\n .hover\\:bg-destructive\\/90 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--destructive) 90%, transparent);\n }\n }\n }\n }\n .hover\\:bg-gray-50 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-gray-50);\n }\n }\n }\n .hover\\:bg-gray-100 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-gray-100);\n }\n }\n }\n .hover\\:bg-gray-200 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-gray-200);\n }\n }\n }\n .hover\\:bg-gray-300 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-gray-300);\n }\n }\n }\n .hover\\:bg-gray-400 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-gray-400);\n }\n }\n }\n .hover\\:bg-gray-700 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-gray-700);\n }\n }\n }\n .hover\\:bg-gray-800 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-gray-800);\n }\n }\n }\n .hover\\:bg-green-50 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-green-50);\n }\n }\n }\n .hover\\:bg-green-50\\/40 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, oklch(98.2% 0.018 155.826) 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-green-50) 40%, transparent);\n }\n }\n }\n }\n .hover\\:bg-green-50\\/50 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, oklch(98.2% 0.018 155.826) 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-green-50) 50%, transparent);\n }\n }\n }\n }\n .hover\\:bg-green-600 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-green-600);\n }\n }\n }\n .hover\\:bg-green-600\\/80 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, oklch(62.7% 0.194 149.214) 80%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-green-600) 80%, transparent);\n }\n }\n }\n }\n .hover\\:bg-green-700 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-green-700);\n }\n }\n }\n .hover\\:bg-green-700\\/60 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, oklch(52.7% 0.154 150.069) 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-green-700) 60%, transparent);\n }\n }\n }\n }\n .hover\\:bg-green-800 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-green-800);\n }\n }\n }\n .hover\\:bg-muted {\n &:hover {\n @media (hover: hover) {\n background-color: var(--muted);\n }\n }\n }\n .hover\\:bg-muted\\/30 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--muted);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--muted) 30%, transparent);\n }\n }\n }\n }\n .hover\\:bg-muted\\/50 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--muted);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--muted) 50%, transparent);\n }\n }\n }\n }\n .hover\\:bg-orange-700 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-orange-700);\n }\n }\n }\n .hover\\:bg-pink-600\\/80 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, oklch(59.2% 0.249 0.584) 80%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-pink-600) 80%, transparent);\n }\n }\n }\n }\n .hover\\:bg-primary\\/90 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--primary);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--primary) 90%, transparent);\n }\n }\n }\n }\n .hover\\:bg-red-700 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-red-700);\n }\n }\n }\n .hover\\:bg-secondary\\/80 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--secondary);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--secondary) 80%, transparent);\n }\n }\n }\n }\n .hover\\:bg-sidebar-accent {\n &:hover {\n @media (hover: hover) {\n background-color: var(--sidebar-accent);\n }\n }\n }\n .hover\\:bg-white\\/10 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, #fff 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 10%, transparent);\n }\n }\n }\n }\n .hover\\:bg-white\\/20 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, #fff 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 20%, transparent);\n }\n }\n }\n }\n .hover\\:bg-white\\/25 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, #fff 25%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 25%, transparent);\n }\n }\n }\n }\n .hover\\:text-accent-foreground {\n &:hover {\n @media (hover: hover) {\n color: var(--accent-foreground);\n }\n }\n }\n .hover\\:text-foreground {\n &:hover {\n @media (hover: hover) {\n color: var(--foreground);\n }\n }\n }\n .hover\\:text-gray-700 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-gray-700);\n }\n }\n }\n .hover\\:text-green-200 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-green-200);\n }\n }\n }\n .hover\\:text-green-300 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-green-300);\n }\n }\n }\n .hover\\:text-green-400 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-green-400);\n }\n }\n }\n .hover\\:text-green-700 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-green-700);\n }\n }\n }\n .hover\\:text-green-800 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-green-800);\n }\n }\n }\n .hover\\:text-green-900 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-green-900);\n }\n }\n }\n .hover\\:text-red-500 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-red-500);\n }\n }\n }\n .hover\\:text-red-700 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-red-700);\n }\n }\n }\n .hover\\:text-sidebar-accent-foreground {\n &:hover {\n @media (hover: hover) {\n color: var(--sidebar-accent-foreground);\n }\n }\n }\n .hover\\:text-white {\n &:hover {\n @media (hover: hover) {\n color: var(--color-white);\n }\n }\n }\n .hover\\:underline {\n &:hover {\n @media (hover: hover) {\n text-decoration-line: underline;\n }\n }\n }\n .hover\\:opacity-100 {\n &:hover {\n @media (hover: hover) {\n opacity: 100%;\n }\n }\n }\n .hover\\:shadow-\\[0_0_0_1px_hsl\\(var\\(--sidebar-accent\\)\\)\\] {\n &:hover {\n @media (hover: hover) {\n --tw-shadow: 0 0 0 1px var(--tw-shadow-color, hsl(var(--sidebar-accent)));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n }\n .hover\\:shadow-md {\n &:hover {\n @media (hover: hover) {\n --tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 2px 4px -2px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n }\n .hover\\:shadow-sm {\n &:hover {\n @media (hover: hover) {\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n }\n .hover\\:shadow-xl {\n &:hover {\n @media (hover: hover) {\n --tw-shadow: 0 20px 25px -5px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 8px 10px -6px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n }\n .hover\\:group-data-\\[collapsible\\=offcanvas\\]\\:bg-sidebar {\n &:hover {\n @media (hover: hover) {\n &:is(:where(.group)[data-collapsible=\"offcanvas\"] *) {\n background-color: var(--sidebar);\n }\n }\n }\n }\n .hover\\:after\\:bg-sidebar-border {\n &:hover {\n @media (hover: hover) {\n &::after {\n content: var(--tw-content);\n background-color: var(--sidebar-border);\n }\n }\n }\n }\n .focus\\:border-transparent {\n &:focus {\n border-color: transparent;\n }\n }\n .focus\\:bg-accent {\n &:focus {\n background-color: var(--accent);\n }\n }\n .focus\\:text-accent-foreground {\n &:focus {\n color: var(--accent-foreground);\n }\n }\n .focus\\:ring-2 {\n &:focus {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n .focus\\:ring-green-500 {\n &:focus {\n --tw-ring-color: var(--color-green-500);\n }\n }\n .focus\\:ring-green-600 {\n &:focus {\n --tw-ring-color: var(--color-green-600);\n }\n }\n .focus\\:ring-ring {\n &:focus {\n --tw-ring-color: var(--ring);\n }\n }\n .focus\\:ring-offset-2 {\n &:focus {\n --tw-ring-offset-width: 2px;\n --tw-ring-offset-shadow: var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n }\n }\n .focus\\:outline-hidden {\n &:focus {\n --tw-outline-style: none;\n outline-style: none;\n @media (forced-colors: active) {\n outline: 2px solid transparent;\n outline-offset: 2px;\n }\n }\n }\n .focus\\:outline-none {\n &:focus {\n --tw-outline-style: none;\n outline-style: none;\n }\n }\n .focus-visible\\:border-ring {\n &:focus-visible {\n border-color: var(--ring);\n }\n }\n .focus-visible\\:ring-2 {\n &:focus-visible {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n .focus-visible\\:ring-\\[3px\\] {\n &:focus-visible {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n .focus-visible\\:ring-destructive\\/20 {\n &:focus-visible {\n --tw-ring-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--destructive) 20%, transparent);\n }\n }\n }\n .focus-visible\\:ring-ring\\/50 {\n &:focus-visible {\n --tw-ring-color: var(--ring);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--ring) 50%, transparent);\n }\n }\n }\n .focus-visible\\:outline-1 {\n &:focus-visible {\n outline-style: var(--tw-outline-style);\n outline-width: 1px;\n }\n }\n .focus-visible\\:outline-ring {\n &:focus-visible {\n outline-color: var(--ring);\n }\n }\n .active\\:bg-sidebar-accent {\n &:active {\n background-color: var(--sidebar-accent);\n }\n }\n .active\\:text-sidebar-accent-foreground {\n &:active {\n color: var(--sidebar-accent-foreground);\n }\n }\n .disabled\\:pointer-events-none {\n &:disabled {\n pointer-events: none;\n }\n }\n .disabled\\:cursor-not-allowed {\n &:disabled {\n cursor: not-allowed;\n }\n }\n .disabled\\:opacity-30 {\n &:disabled {\n opacity: 30%;\n }\n }\n .disabled\\:opacity-50 {\n &:disabled {\n opacity: 50%;\n }\n }\n .in-data-\\[side\\=left\\]\\:cursor-w-resize {\n :where(*[data-side=\"left\"]) & {\n cursor: w-resize;\n }\n }\n .in-data-\\[side\\=right\\]\\:cursor-e-resize {\n :where(*[data-side=\"right\"]) & {\n cursor: e-resize;\n }\n }\n .has-data-\\[slot\\=card-action\\]\\:grid-cols-\\[1fr_auto\\] {\n &:has(*[data-slot=\"card-action\"]) {\n grid-template-columns: 1fr auto;\n }\n }\n .has-data-\\[state\\=checked\\]\\:border-primary {\n &:has(*[data-state=\"checked\"]) {\n border-color: var(--primary);\n }\n }\n .has-data-\\[state\\=checked\\]\\:bg-primary\\/5 {\n &:has(*[data-state=\"checked\"]) {\n background-color: var(--primary);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--primary) 5%, transparent);\n }\n }\n }\n .has-data-\\[variant\\=inset\\]\\:bg-sidebar {\n &:has(*[data-variant=\"inset\"]) {\n background-color: var(--sidebar);\n }\n }\n .has-\\[\\>\\[data-slot\\=checkbox-group\\]\\]\\:gap-3 {\n &:has(>[data-slot=checkbox-group]) {\n gap: calc(var(--spacing) * 3);\n }\n }\n .has-\\[\\>\\[data-slot\\=field-content\\]\\]\\:items-start {\n &:has(>[data-slot=field-content]) {\n align-items: flex-start;\n }\n }\n .has-\\[\\>\\[data-slot\\=field\\]\\]\\:w-full {\n &:has(>[data-slot=field]) {\n width: 100%;\n }\n }\n .has-\\[\\>\\[data-slot\\=field\\]\\]\\:flex-col {\n &:has(>[data-slot=field]) {\n flex-direction: column;\n }\n }\n .has-\\[\\>\\[data-slot\\=field\\]\\]\\:rounded-md {\n &:has(>[data-slot=field]) {\n border-radius: calc(var(--radius) - 2px);\n }\n }\n .has-\\[\\>\\[data-slot\\=field\\]\\]\\:border {\n &:has(>[data-slot=field]) {\n border-style: var(--tw-border-style);\n border-width: 1px;\n }\n }\n .has-\\[\\>\\[data-slot\\=radio-group\\]\\]\\:gap-3 {\n &:has(>[data-slot=radio-group]) {\n gap: calc(var(--spacing) * 3);\n }\n }\n .has-\\[\\>svg\\]\\:px-1\\.5 {\n &:has(>svg) {\n padding-inline: calc(var(--spacing) * 1.5);\n }\n }\n .has-\\[\\>svg\\]\\:px-2\\.5 {\n &:has(>svg) {\n padding-inline: calc(var(--spacing) * 2.5);\n }\n }\n .has-\\[\\>svg\\]\\:px-3 {\n &:has(>svg) {\n padding-inline: calc(var(--spacing) * 3);\n }\n }\n .has-\\[\\>svg\\]\\:px-4 {\n &:has(>svg) {\n padding-inline: calc(var(--spacing) * 4);\n }\n }\n .aria-disabled\\:pointer-events-none {\n &[aria-disabled=\"true\"] {\n pointer-events: none;\n }\n }\n .aria-disabled\\:opacity-50 {\n &[aria-disabled=\"true\"] {\n opacity: 50%;\n }\n }\n .aria-invalid\\:border-destructive {\n &[aria-invalid=\"true\"] {\n border-color: var(--destructive);\n }\n }\n .aria-invalid\\:ring-destructive\\/20 {\n &[aria-invalid=\"true\"] {\n --tw-ring-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--destructive) 20%, transparent);\n }\n }\n }\n .data-\\[active\\=true\\]\\:bg-sidebar-accent {\n &[data-active=\"true\"] {\n background-color: var(--sidebar-accent);\n }\n }\n .data-\\[active\\=true\\]\\:font-medium {\n &[data-active=\"true\"] {\n --tw-font-weight: var(--font-weight-medium);\n font-weight: var(--font-weight-medium);\n }\n }\n .data-\\[active\\=true\\]\\:text-sidebar-accent-foreground {\n &[data-active=\"true\"] {\n color: var(--sidebar-accent-foreground);\n }\n }\n .data-\\[disabled\\]\\:pointer-events-none {\n &[data-disabled] {\n pointer-events: none;\n }\n }\n .data-\\[disabled\\]\\:opacity-50 {\n &[data-disabled] {\n opacity: 50%;\n }\n }\n .data-\\[inset\\]\\:pl-8 {\n &[data-inset] {\n padding-left: calc(var(--spacing) * 8);\n }\n }\n .data-\\[invalid\\=true\\]\\:text-destructive {\n &[data-invalid=\"true\"] {\n color: var(--destructive);\n }\n }\n .data-\\[orientation\\=horizontal\\]\\:h-px {\n &[data-orientation=\"horizontal\"] {\n height: 1px;\n }\n }\n .data-\\[orientation\\=horizontal\\]\\:w-full {\n &[data-orientation=\"horizontal\"] {\n width: 100%;\n }\n }\n .data-\\[orientation\\=horizontal\\]\\:flex-col {\n &[data-orientation=\"horizontal\"] {\n flex-direction: column;\n }\n }\n .data-\\[orientation\\=vertical\\]\\:h-4 {\n &[data-orientation=\"vertical\"] {\n height: calc(var(--spacing) * 4);\n }\n }\n .data-\\[orientation\\=vertical\\]\\:h-full {\n &[data-orientation=\"vertical\"] {\n height: 100%;\n }\n }\n .data-\\[orientation\\=vertical\\]\\:w-px {\n &[data-orientation=\"vertical\"] {\n width: 1px;\n }\n }\n .data-\\[placeholder\\]\\:text-muted-foreground {\n &[data-placeholder] {\n color: var(--muted-foreground);\n }\n }\n .data-\\[side\\=bottom\\]\\:translate-y-1 {\n &[data-side=\"bottom\"] {\n --tw-translate-y: calc(var(--spacing) * 1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n }\n .data-\\[side\\=bottom\\]\\:slide-in-from-top-2 {\n &[data-side=\"bottom\"] {\n --tw-enter-translate-y: calc(2*var(--spacing)*-1);\n }\n }\n .data-\\[side\\=left\\]\\:-translate-x-1 {\n &[data-side=\"left\"] {\n --tw-translate-x: calc(var(--spacing) * -1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n }\n .data-\\[side\\=left\\]\\:slide-in-from-right-2 {\n &[data-side=\"left\"] {\n --tw-enter-translate-x: calc(2*var(--spacing));\n }\n }\n .data-\\[side\\=right\\]\\:translate-x-1 {\n &[data-side=\"right\"] {\n --tw-translate-x: calc(var(--spacing) * 1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n }\n .data-\\[side\\=right\\]\\:slide-in-from-left-2 {\n &[data-side=\"right\"] {\n --tw-enter-translate-x: calc(2*var(--spacing)*-1);\n }\n }\n .data-\\[side\\=top\\]\\:-translate-y-1 {\n &[data-side=\"top\"] {\n --tw-translate-y: calc(var(--spacing) * -1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n }\n .data-\\[side\\=top\\]\\:slide-in-from-bottom-2 {\n &[data-side=\"top\"] {\n --tw-enter-translate-y: calc(2*var(--spacing));\n }\n }\n .data-\\[size\\=default\\]\\:h-9 {\n &[data-size=\"default\"] {\n height: calc(var(--spacing) * 9);\n }\n }\n .data-\\[size\\=lg\\]\\:size-10 {\n &[data-size=\"lg\"] {\n width: calc(var(--spacing) * 10);\n height: calc(var(--spacing) * 10);\n }\n }\n .data-\\[size\\=sm\\]\\:size-6 {\n &[data-size=\"sm\"] {\n width: calc(var(--spacing) * 6);\n height: calc(var(--spacing) * 6);\n }\n }\n .data-\\[size\\=sm\\]\\:h-8 {\n &[data-size=\"sm\"] {\n height: calc(var(--spacing) * 8);\n }\n }\n .\\*\\:data-\\[slot\\=avatar\\]\\:ring-2 {\n :is(& > *) {\n &[data-slot=\"avatar\"] {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n }\n .\\*\\:data-\\[slot\\=avatar\\]\\:ring-background {\n :is(& > *) {\n &[data-slot=\"avatar\"] {\n --tw-ring-color: var(--background);\n }\n }\n }\n .data-\\[slot\\=checkbox-group\\]\\:gap-3 {\n &[data-slot=\"checkbox-group\"] {\n gap: calc(var(--spacing) * 3);\n }\n }\n .\\*\\:data-\\[slot\\=field\\]\\:p-4 {\n :is(& > *) {\n &[data-slot=\"field\"] {\n padding: calc(var(--spacing) * 4);\n }\n }\n }\n .\\*\\:data-\\[slot\\=field-group\\]\\:gap-4 {\n :is(& > *) {\n &[data-slot=\"field-group\"] {\n gap: calc(var(--spacing) * 4);\n }\n }\n }\n .\\*\\:data-\\[slot\\=select-value\\]\\:line-clamp-1 {\n :is(& > *) {\n &[data-slot=\"select-value\"] {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 1;\n }\n }\n }\n .\\*\\:data-\\[slot\\=select-value\\]\\:flex {\n :is(& > *) {\n &[data-slot=\"select-value\"] {\n display: flex;\n }\n }\n }\n .\\*\\:data-\\[slot\\=select-value\\]\\:items-center {\n :is(& > *) {\n &[data-slot=\"select-value\"] {\n align-items: center;\n }\n }\n }\n .\\*\\:data-\\[slot\\=select-value\\]\\:gap-2 {\n :is(& > *) {\n &[data-slot=\"select-value\"] {\n gap: calc(var(--spacing) * 2);\n }\n }\n }\n .data-\\[slot\\=sidebar-menu-button\\]\\:p-1\\.5\\! {\n &[data-slot=\"sidebar-menu-button\"] {\n padding: calc(var(--spacing) * 1.5) !important;\n }\n }\n .data-\\[state\\=active\\]\\:bg-background {\n &[data-state=\"active\"] {\n background-color: var(--background);\n }\n }\n .data-\\[state\\=active\\]\\:text-foreground {\n &[data-state=\"active\"] {\n color: var(--foreground);\n }\n }\n .group-data-\\[variant\\=default\\]\\/tabs-list\\:data-\\[state\\=active\\]\\:shadow-sm {\n &:is(:where(.group\\/tabs-list)[data-variant=\"default\"] *) {\n &[data-state=\"active\"] {\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n }\n .group-data-\\[variant\\=line\\]\\/tabs-list\\:data-\\[state\\=active\\]\\:bg-transparent {\n &:is(:where(.group\\/tabs-list)[data-variant=\"line\"] *) {\n &[data-state=\"active\"] {\n background-color: transparent;\n }\n }\n }\n .group-data-\\[variant\\=line\\]\\/tabs-list\\:data-\\[state\\=active\\]\\:shadow-none {\n &:is(:where(.group\\/tabs-list)[data-variant=\"line\"] *) {\n &[data-state=\"active\"] {\n --tw-shadow: 0 0 #0000;\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n }\n .group-data-\\[variant\\=line\\]\\/tabs-list\\:data-\\[state\\=active\\]\\:after\\:opacity-100 {\n &:is(:where(.group\\/tabs-list)[data-variant=\"line\"] *) {\n &[data-state=\"active\"] {\n &::after {\n content: var(--tw-content);\n opacity: 100%;\n }\n }\n }\n }\n .data-\\[state\\=checked\\]\\:border-primary {\n &[data-state=\"checked\"] {\n border-color: var(--primary);\n }\n }\n .data-\\[state\\=checked\\]\\:bg-primary {\n &[data-state=\"checked\"] {\n background-color: var(--primary);\n }\n }\n .data-\\[state\\=checked\\]\\:text-primary-foreground {\n &[data-state=\"checked\"] {\n color: var(--primary-foreground);\n }\n }\n .data-\\[state\\=closed\\]\\:animate-out {\n &[data-state=\"closed\"] {\n animation: exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none);\n }\n }\n .data-\\[state\\=closed\\]\\:duration-300 {\n &[data-state=\"closed\"] {\n --tw-duration: 300ms;\n transition-duration: 300ms;\n }\n }\n .data-\\[state\\=closed\\]\\:fade-out-0 {\n &[data-state=\"closed\"] {\n --tw-exit-opacity: calc(0/100);\n --tw-exit-opacity: 0;\n }\n }\n .data-\\[state\\=closed\\]\\:zoom-out-95 {\n &[data-state=\"closed\"] {\n --tw-exit-scale: calc(95*1%);\n --tw-exit-scale: .95;\n }\n }\n .data-\\[state\\=closed\\]\\:slide-out-to-bottom {\n &[data-state=\"closed\"] {\n --tw-exit-translate-y: 100%;\n }\n }\n .data-\\[state\\=closed\\]\\:slide-out-to-left {\n &[data-state=\"closed\"] {\n --tw-exit-translate-x: -100%;\n }\n }\n .data-\\[state\\=closed\\]\\:slide-out-to-right {\n &[data-state=\"closed\"] {\n --tw-exit-translate-x: 100%;\n }\n }\n .data-\\[state\\=closed\\]\\:slide-out-to-top {\n &[data-state=\"closed\"] {\n --tw-exit-translate-y: -100%;\n }\n }\n .data-\\[state\\=open\\]\\:animate-in {\n &[data-state=\"open\"] {\n animation: enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none);\n }\n }\n .data-\\[state\\=open\\]\\:bg-accent {\n &[data-state=\"open\"] {\n background-color: var(--accent);\n }\n }\n .data-\\[state\\=open\\]\\:bg-secondary {\n &[data-state=\"open\"] {\n background-color: var(--secondary);\n }\n }\n .data-\\[state\\=open\\]\\:bg-sidebar-accent {\n &[data-state=\"open\"] {\n background-color: var(--sidebar-accent);\n }\n }\n .data-\\[state\\=open\\]\\:text-accent-foreground {\n &[data-state=\"open\"] {\n color: var(--accent-foreground);\n }\n }\n .data-\\[state\\=open\\]\\:text-muted-foreground {\n &[data-state=\"open\"] {\n color: var(--muted-foreground);\n }\n }\n .data-\\[state\\=open\\]\\:text-sidebar-accent-foreground {\n &[data-state=\"open\"] {\n color: var(--sidebar-accent-foreground);\n }\n }\n .data-\\[state\\=open\\]\\:opacity-100 {\n &[data-state=\"open\"] {\n opacity: 100%;\n }\n }\n .data-\\[state\\=open\\]\\:duration-500 {\n &[data-state=\"open\"] {\n --tw-duration: 500ms;\n transition-duration: 500ms;\n }\n }\n .data-\\[state\\=open\\]\\:fade-in-0 {\n &[data-state=\"open\"] {\n --tw-enter-opacity: calc(0/100);\n --tw-enter-opacity: 0;\n }\n }\n .data-\\[state\\=open\\]\\:zoom-in-95 {\n &[data-state=\"open\"] {\n --tw-enter-scale: calc(95*1%);\n --tw-enter-scale: .95;\n }\n }\n .data-\\[state\\=open\\]\\:slide-in-from-bottom {\n &[data-state=\"open\"] {\n --tw-enter-translate-y: 100%;\n }\n }\n .data-\\[state\\=open\\]\\:slide-in-from-left {\n &[data-state=\"open\"] {\n --tw-enter-translate-x: -100%;\n }\n }\n .data-\\[state\\=open\\]\\:slide-in-from-right {\n &[data-state=\"open\"] {\n --tw-enter-translate-x: 100%;\n }\n }\n .data-\\[state\\=open\\]\\:slide-in-from-top {\n &[data-state=\"open\"] {\n --tw-enter-translate-y: -100%;\n }\n }\n .data-\\[state\\=open\\]\\:hover\\:bg-sidebar-accent {\n &[data-state=\"open\"] {\n &:hover {\n @media (hover: hover) {\n background-color: var(--sidebar-accent);\n }\n }\n }\n }\n .data-\\[state\\=open\\]\\:hover\\:text-sidebar-accent-foreground {\n &[data-state=\"open\"] {\n &:hover {\n @media (hover: hover) {\n color: var(--sidebar-accent-foreground);\n }\n }\n }\n }\n .data-\\[state\\=selected\\]\\:bg-muted {\n &[data-state=\"selected\"] {\n background-color: var(--muted);\n }\n }\n .data-\\[variant\\=destructive\\]\\:text-destructive {\n &[data-variant=\"destructive\"] {\n color: var(--destructive);\n }\n }\n .data-\\[variant\\=destructive\\]\\:focus\\:bg-destructive\\/10 {\n &[data-variant=\"destructive\"] {\n &:focus {\n background-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--destructive) 10%, transparent);\n }\n }\n }\n }\n .data-\\[variant\\=destructive\\]\\:focus\\:text-destructive {\n &[data-variant=\"destructive\"] {\n &:focus {\n color: var(--destructive);\n }\n }\n }\n .data-\\[variant\\=label\\]\\:text-sm {\n &[data-variant=\"label\"] {\n font-size: var(--text-sm);\n line-height: var(--tw-leading, var(--text-sm--line-height));\n }\n }\n .data-\\[variant\\=legend\\]\\:text-base {\n &[data-variant=\"legend\"] {\n font-size: var(--text-base);\n line-height: var(--tw-leading, var(--text-base--line-height));\n }\n }\n .data-\\[variant\\=line\\]\\:rounded-none {\n &[data-variant=\"line\"] {\n border-radius: 0;\n }\n }\n .data-\\[vaul-drawer-direction\\=bottom\\]\\:inset-x-0 {\n &[data-vaul-drawer-direction=\"bottom\"] {\n inset-inline: calc(var(--spacing) * 0);\n }\n }\n .data-\\[vaul-drawer-direction\\=bottom\\]\\:bottom-0 {\n &[data-vaul-drawer-direction=\"bottom\"] {\n bottom: calc(var(--spacing) * 0);\n }\n }\n .data-\\[vaul-drawer-direction\\=bottom\\]\\:mt-24 {\n &[data-vaul-drawer-direction=\"bottom\"] {\n margin-top: calc(var(--spacing) * 24);\n }\n }\n .data-\\[vaul-drawer-direction\\=bottom\\]\\:max-h-\\[80vh\\] {\n &[data-vaul-drawer-direction=\"bottom\"] {\n max-height: 80vh;\n }\n }\n .data-\\[vaul-drawer-direction\\=bottom\\]\\:rounded-t-lg {\n &[data-vaul-drawer-direction=\"bottom\"] {\n border-top-left-radius: var(--radius);\n border-top-right-radius: var(--radius);\n }\n }\n .data-\\[vaul-drawer-direction\\=bottom\\]\\:border-t {\n &[data-vaul-drawer-direction=\"bottom\"] {\n border-top-style: var(--tw-border-style);\n border-top-width: 1px;\n }\n }\n .data-\\[vaul-drawer-direction\\=left\\]\\:inset-y-0 {\n &[data-vaul-drawer-direction=\"left\"] {\n inset-block: calc(var(--spacing) * 0);\n }\n }\n .data-\\[vaul-drawer-direction\\=left\\]\\:left-0 {\n &[data-vaul-drawer-direction=\"left\"] {\n left: calc(var(--spacing) * 0);\n }\n }\n .data-\\[vaul-drawer-direction\\=left\\]\\:w-3\\/4 {\n &[data-vaul-drawer-direction=\"left\"] {\n width: calc(3 / 4 * 100%);\n }\n }\n .data-\\[vaul-drawer-direction\\=left\\]\\:border-r {\n &[data-vaul-drawer-direction=\"left\"] {\n border-right-style: var(--tw-border-style);\n border-right-width: 1px;\n }\n }\n .data-\\[vaul-drawer-direction\\=right\\]\\:inset-y-0 {\n &[data-vaul-drawer-direction=\"right\"] {\n inset-block: calc(var(--spacing) * 0);\n }\n }\n .data-\\[vaul-drawer-direction\\=right\\]\\:right-0 {\n &[data-vaul-drawer-direction=\"right\"] {\n right: calc(var(--spacing) * 0);\n }\n }\n .data-\\[vaul-drawer-direction\\=right\\]\\:w-3\\/4 {\n &[data-vaul-drawer-direction=\"right\"] {\n width: calc(3 / 4 * 100%);\n }\n }\n .data-\\[vaul-drawer-direction\\=right\\]\\:border-l {\n &[data-vaul-drawer-direction=\"right\"] {\n border-left-style: var(--tw-border-style);\n border-left-width: 1px;\n }\n }\n .data-\\[vaul-drawer-direction\\=top\\]\\:inset-x-0 {\n &[data-vaul-drawer-direction=\"top\"] {\n inset-inline: calc(var(--spacing) * 0);\n }\n }\n .data-\\[vaul-drawer-direction\\=top\\]\\:top-0 {\n &[data-vaul-drawer-direction=\"top\"] {\n top: calc(var(--spacing) * 0);\n }\n }\n .data-\\[vaul-drawer-direction\\=top\\]\\:mb-24 {\n &[data-vaul-drawer-direction=\"top\"] {\n margin-bottom: calc(var(--spacing) * 24);\n }\n }\n .data-\\[vaul-drawer-direction\\=top\\]\\:max-h-\\[80vh\\] {\n &[data-vaul-drawer-direction=\"top\"] {\n max-height: 80vh;\n }\n }\n .data-\\[vaul-drawer-direction\\=top\\]\\:rounded-b-lg {\n &[data-vaul-drawer-direction=\"top\"] {\n border-bottom-right-radius: var(--radius);\n border-bottom-left-radius: var(--radius);\n }\n }\n .data-\\[vaul-drawer-direction\\=top\\]\\:border-b {\n &[data-vaul-drawer-direction=\"top\"] {\n border-bottom-style: var(--tw-border-style);\n border-bottom-width: 1px;\n }\n }\n .nth-last-2\\:-mt-1 {\n &:nth-last-child(2) {\n margin-top: calc(var(--spacing) * -1);\n }\n }\n .sm\\:mt-16 {\n @media (width >= 40rem) {\n margin-top: calc(var(--spacing) * 16);\n }\n }\n .sm\\:mb-8 {\n @media (width >= 40rem) {\n margin-bottom: calc(var(--spacing) * 8);\n }\n }\n .sm\\:mb-12 {\n @media (width >= 40rem) {\n margin-bottom: calc(var(--spacing) * 12);\n }\n }\n .sm\\:ml-auto {\n @media (width >= 40rem) {\n margin-left: auto;\n }\n }\n .sm\\:block {\n @media (width >= 40rem) {\n display: block;\n }\n }\n .sm\\:flex {\n @media (width >= 40rem) {\n display: flex;\n }\n }\n .sm\\:inline {\n @media (width >= 40rem) {\n display: inline;\n }\n }\n .sm\\:table-cell {\n @media (width >= 40rem) {\n display: table-cell;\n }\n }\n .sm\\:h-20 {\n @media (width >= 40rem) {\n height: calc(var(--spacing) * 20);\n }\n }\n .sm\\:h-28 {\n @media (width >= 40rem) {\n height: calc(var(--spacing) * 28);\n }\n }\n .sm\\:h-72 {\n @media (width >= 40rem) {\n height: calc(var(--spacing) * 72);\n }\n }\n .sm\\:h-80 {\n @media (width >= 40rem) {\n height: calc(var(--spacing) * 80);\n }\n }\n .sm\\:w-40 {\n @media (width >= 40rem) {\n width: calc(var(--spacing) * 40);\n }\n }\n .sm\\:w-48 {\n @media (width >= 40rem) {\n width: calc(var(--spacing) * 48);\n }\n }\n .sm\\:w-52 {\n @media (width >= 40rem) {\n width: calc(var(--spacing) * 52);\n }\n }\n .sm\\:w-64 {\n @media (width >= 40rem) {\n width: calc(var(--spacing) * 64);\n }\n }\n .sm\\:w-auto {\n @media (width >= 40rem) {\n width: auto;\n }\n }\n .sm\\:max-w-lg {\n @media (width >= 40rem) {\n max-width: var(--container-lg);\n }\n }\n .sm\\:max-w-sm {\n @media (width >= 40rem) {\n max-width: var(--container-sm);\n }\n }\n .sm\\:flex-none {\n @media (width >= 40rem) {\n flex: none;\n }\n }\n .sm\\:grid-cols-1 {\n @media (width >= 40rem) {\n grid-template-columns: repeat(1, minmax(0, 1fr));\n }\n }\n .sm\\:grid-cols-2 {\n @media (width >= 40rem) {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n }\n .sm\\:grid-cols-3 {\n @media (width >= 40rem) {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n }\n .sm\\:grid-cols-4 {\n @media (width >= 40rem) {\n grid-template-columns: repeat(4, minmax(0, 1fr));\n }\n }\n .sm\\:flex-row {\n @media (width >= 40rem) {\n flex-direction: row;\n }\n }\n .sm\\:items-center {\n @media (width >= 40rem) {\n align-items: center;\n }\n }\n .sm\\:items-end {\n @media (width >= 40rem) {\n align-items: flex-end;\n }\n }\n .sm\\:justify-end {\n @media (width >= 40rem) {\n justify-content: flex-end;\n }\n }\n .sm\\:gap-3 {\n @media (width >= 40rem) {\n gap: calc(var(--spacing) * 3);\n }\n }\n .sm\\:gap-6 {\n @media (width >= 40rem) {\n gap: calc(var(--spacing) * 6);\n }\n }\n .sm\\:p-4 {\n @media (width >= 40rem) {\n padding: calc(var(--spacing) * 4);\n }\n }\n .sm\\:p-6 {\n @media (width >= 40rem) {\n padding: calc(var(--spacing) * 6);\n }\n }\n .sm\\:p-8 {\n @media (width >= 40rem) {\n padding: calc(var(--spacing) * 8);\n }\n }\n .sm\\:p-10 {\n @media (width >= 40rem) {\n padding: calc(var(--spacing) * 10);\n }\n }\n .sm\\:px-6 {\n @media (width >= 40rem) {\n padding-inline: calc(var(--spacing) * 6);\n }\n }\n .sm\\:px-8 {\n @media (width >= 40rem) {\n padding-inline: calc(var(--spacing) * 8);\n }\n }\n .sm\\:py-10 {\n @media (width >= 40rem) {\n padding-block: calc(var(--spacing) * 10);\n }\n }\n .sm\\:py-16 {\n @media (width >= 40rem) {\n padding-block: calc(var(--spacing) * 16);\n }\n }\n .sm\\:py-20 {\n @media (width >= 40rem) {\n padding-block: calc(var(--spacing) * 20);\n }\n }\n .sm\\:text-left {\n @media (width >= 40rem) {\n text-align: left;\n }\n }\n .sm\\:text-2xl {\n @media (width >= 40rem) {\n font-size: var(--text-2xl);\n line-height: var(--tw-leading, var(--text-2xl--line-height));\n }\n }\n .sm\\:text-3xl {\n @media (width >= 40rem) {\n font-size: var(--text-3xl);\n line-height: var(--tw-leading, var(--text-3xl--line-height));\n }\n }\n .sm\\:text-4xl {\n @media (width >= 40rem) {\n font-size: var(--text-4xl);\n line-height: var(--tw-leading, var(--text-4xl--line-height));\n }\n }\n .sm\\:text-5xl {\n @media (width >= 40rem) {\n font-size: var(--text-5xl);\n line-height: var(--tw-leading, var(--text-5xl--line-height));\n }\n }\n .sm\\:text-base {\n @media (width >= 40rem) {\n font-size: var(--text-base);\n line-height: var(--tw-leading, var(--text-base--line-height));\n }\n }\n .sm\\:text-lg {\n @media (width >= 40rem) {\n font-size: var(--text-lg);\n line-height: var(--tw-leading, var(--text-lg--line-height));\n }\n }\n .sm\\:text-sm {\n @media (width >= 40rem) {\n font-size: var(--text-sm);\n line-height: var(--tw-leading, var(--text-sm--line-height));\n }\n }\n .data-\\[vaul-drawer-direction\\=left\\]\\:sm\\:max-w-sm {\n &[data-vaul-drawer-direction=\"left\"] {\n @media (width >= 40rem) {\n max-width: var(--container-sm);\n }\n }\n }\n .data-\\[vaul-drawer-direction\\=right\\]\\:sm\\:max-w-sm {\n &[data-vaul-drawer-direction=\"right\"] {\n @media (width >= 40rem) {\n max-width: var(--container-sm);\n }\n }\n }\n .md\\:block {\n @media (width >= 48rem) {\n display: block;\n }\n }\n .md\\:flex {\n @media (width >= 48rem) {\n display: flex;\n }\n }\n .md\\:hidden {\n @media (width >= 48rem) {\n display: none;\n }\n }\n .md\\:table-cell {\n @media (width >= 48rem) {\n display: table-cell;\n }\n }\n .md\\:grid-cols-2 {\n @media (width >= 48rem) {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n }\n .md\\:grid-cols-3 {\n @media (width >= 48rem) {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n }\n .md\\:grid-cols-4 {\n @media (width >= 48rem) {\n grid-template-columns: repeat(4, minmax(0, 1fr));\n }\n }\n .md\\:grid-cols-5 {\n @media (width >= 48rem) {\n grid-template-columns: repeat(5, minmax(0, 1fr));\n }\n }\n .md\\:gap-1\\.5 {\n @media (width >= 48rem) {\n gap: calc(var(--spacing) * 1.5);\n }\n }\n .md\\:p-6 {\n @media (width >= 48rem) {\n padding: calc(var(--spacing) * 6);\n }\n }\n .md\\:text-left {\n @media (width >= 48rem) {\n text-align: left;\n }\n }\n .md\\:text-6xl {\n @media (width >= 48rem) {\n font-size: var(--text-6xl);\n line-height: var(--tw-leading, var(--text-6xl--line-height));\n }\n }\n .md\\:text-sm {\n @media (width >= 48rem) {\n font-size: var(--text-sm);\n line-height: var(--tw-leading, var(--text-sm--line-height));\n }\n }\n .md\\:opacity-0 {\n @media (width >= 48rem) {\n opacity: 0%;\n }\n }\n .md\\:peer-data-\\[variant\\=inset\\]\\:m-2 {\n @media (width >= 48rem) {\n &:is(:where(.peer)[data-variant=\"inset\"] ~ *) {\n margin: calc(var(--spacing) * 2);\n }\n }\n }\n .md\\:peer-data-\\[variant\\=inset\\]\\:ml-0 {\n @media (width >= 48rem) {\n &:is(:where(.peer)[data-variant=\"inset\"] ~ *) {\n margin-left: calc(var(--spacing) * 0);\n }\n }\n }\n .md\\:peer-data-\\[variant\\=inset\\]\\:rounded-xl {\n @media (width >= 48rem) {\n &:is(:where(.peer)[data-variant=\"inset\"] ~ *) {\n border-radius: calc(var(--radius) + 4px);\n }\n }\n }\n .md\\:peer-data-\\[variant\\=inset\\]\\:shadow-sm {\n @media (width >= 48rem) {\n &:is(:where(.peer)[data-variant=\"inset\"] ~ *) {\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n }\n .md\\:peer-data-\\[variant\\=inset\\]\\:peer-data-\\[state\\=collapsed\\]\\:ml-2 {\n @media (width >= 48rem) {\n &:is(:where(.peer)[data-variant=\"inset\"] ~ *) {\n &:is(:where(.peer)[data-state=\"collapsed\"] ~ *) {\n margin-left: calc(var(--spacing) * 2);\n }\n }\n }\n }\n .md\\:after\\:hidden {\n @media (width >= 48rem) {\n &::after {\n content: var(--tw-content);\n display: none;\n }\n }\n }\n .lg\\:flex {\n @media (width >= 64rem) {\n display: flex;\n }\n }\n .lg\\:hidden {\n @media (width >= 64rem) {\n display: none;\n }\n }\n .lg\\:table-cell {\n @media (width >= 64rem) {\n display: table-cell;\n }\n }\n .lg\\:h-80 {\n @media (width >= 64rem) {\n height: calc(var(--spacing) * 80);\n }\n }\n .lg\\:h-96 {\n @media (width >= 64rem) {\n height: calc(var(--spacing) * 96);\n }\n }\n .lg\\:grid-cols-2 {\n @media (width >= 64rem) {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n }\n .lg\\:grid-cols-3 {\n @media (width >= 64rem) {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n }\n .lg\\:grid-cols-4 {\n @media (width >= 64rem) {\n grid-template-columns: repeat(4, minmax(0, 1fr));\n }\n }\n .lg\\:grid-cols-5 {\n @media (width >= 64rem) {\n grid-template-columns: repeat(5, minmax(0, 1fr));\n }\n }\n .lg\\:gap-12 {\n @media (width >= 64rem) {\n gap: calc(var(--spacing) * 12);\n }\n }\n .lg\\:px-8 {\n @media (width >= 64rem) {\n padding-inline: calc(var(--spacing) * 8);\n }\n }\n .xl\\:grid-cols-4 {\n @media (width >= 80rem) {\n grid-template-columns: repeat(4, minmax(0, 1fr));\n }\n }\n .\\@md\\/field-group\\:flex-row {\n @container field-group (width >= 28rem) {\n flex-direction: row;\n }\n }\n .\\@md\\/field-group\\:items-center {\n @container field-group (width >= 28rem) {\n align-items: center;\n }\n }\n .\\@md\\/field-group\\:has-\\[\\>\\[data-slot\\=field-content\\]\\]\\:items-start {\n @container field-group (width >= 28rem) {\n &:has(>[data-slot=field-content]) {\n align-items: flex-start;\n }\n }\n }\n .dark\\:border-input {\n &:is(.dark *) {\n border-color: var(--input);\n }\n }\n .dark\\:bg-destructive\\/60 {\n &:is(.dark *) {\n background-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--destructive) 60%, transparent);\n }\n }\n }\n .dark\\:bg-input\\/30 {\n &:is(.dark *) {\n background-color: var(--input);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--input) 30%, transparent);\n }\n }\n }\n .dark\\:bg-zinc-900 {\n &:is(.dark *) {\n background-color: var(--color-zinc-900);\n }\n }\n .dark\\:text-muted-foreground {\n &:is(.dark *) {\n color: var(--muted-foreground);\n }\n }\n .dark\\:hover\\:bg-accent\\/50 {\n &:is(.dark *) {\n &:hover {\n @media (hover: hover) {\n background-color: var(--accent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--accent) 50%, transparent);\n }\n }\n }\n }\n }\n .dark\\:hover\\:bg-input\\/50 {\n &:is(.dark *) {\n &:hover {\n @media (hover: hover) {\n background-color: var(--input);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--input) 50%, transparent);\n }\n }\n }\n }\n }\n .dark\\:hover\\:text-foreground {\n &:is(.dark *) {\n &:hover {\n @media (hover: hover) {\n color: var(--foreground);\n }\n }\n }\n }\n .dark\\:focus-visible\\:ring-destructive\\/40 {\n &:is(.dark *) {\n &:focus-visible {\n --tw-ring-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--destructive) 40%, transparent);\n }\n }\n }\n }\n .dark\\:has-data-\\[state\\=checked\\]\\:bg-primary\\/10 {\n &:is(.dark *) {\n &:has(*[data-state=\"checked\"]) {\n background-color: var(--primary);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--primary) 10%, transparent);\n }\n }\n }\n }\n .dark\\:aria-invalid\\:ring-destructive\\/40 {\n &:is(.dark *) {\n &[aria-invalid=\"true\"] {\n --tw-ring-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--destructive) 40%, transparent);\n }\n }\n }\n }\n .dark\\:data-\\[state\\=active\\]\\:border-input {\n &:is(.dark *) {\n &[data-state=\"active\"] {\n border-color: var(--input);\n }\n }\n }\n .dark\\:data-\\[state\\=active\\]\\:bg-input\\/30 {\n &:is(.dark *) {\n &[data-state=\"active\"] {\n background-color: var(--input);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--input) 30%, transparent);\n }\n }\n }\n }\n .dark\\:data-\\[state\\=active\\]\\:text-foreground {\n &:is(.dark *) {\n &[data-state=\"active\"] {\n color: var(--foreground);\n }\n }\n }\n .dark\\:group-data-\\[variant\\=line\\]\\/tabs-list\\:data-\\[state\\=active\\]\\:border-transparent {\n &:is(.dark *) {\n &:is(:where(.group\\/tabs-list)[data-variant=\"line\"] *) {\n &[data-state=\"active\"] {\n border-color: transparent;\n }\n }\n }\n }\n .dark\\:group-data-\\[variant\\=line\\]\\/tabs-list\\:data-\\[state\\=active\\]\\:bg-transparent {\n &:is(.dark *) {\n &:is(:where(.group\\/tabs-list)[data-variant=\"line\"] *) {\n &[data-state=\"active\"] {\n background-color: transparent;\n }\n }\n }\n }\n .dark\\:data-\\[state\\=checked\\]\\:bg-primary {\n &:is(.dark *) {\n &[data-state=\"checked\"] {\n background-color: var(--primary);\n }\n }\n }\n .dark\\:data-\\[variant\\=destructive\\]\\:focus\\:bg-destructive\\/20 {\n &:is(.dark *) {\n &[data-variant=\"destructive\"] {\n &:focus {\n background-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--destructive) 20%, transparent);\n }\n }\n }\n }\n }\n .\\[\\&_\\.recharts-cartesian-axis-tick_text\\]\\:fill-muted-foreground {\n & .recharts-cartesian-axis-tick text {\n fill: var(--muted-foreground);\n }\n }\n .\\[\\&_\\.recharts-cartesian-grid_line\\[stroke\\=\\'\\#ccc\\'\\]\\]\\:stroke-border\\/50 {\n & .recharts-cartesian-grid line[stroke='#ccc'] {\n stroke: var(--border);\n @supports (color: color-mix(in lab, red, red)) {\n stroke: color-mix(in oklab, var(--border) 50%, transparent);\n }\n }\n }\n .\\[\\&_\\.recharts-curve\\.recharts-tooltip-cursor\\]\\:stroke-border {\n & .recharts-curve.recharts-tooltip-cursor {\n stroke: var(--border);\n }\n }\n .\\[\\&_\\.recharts-dot\\[stroke\\=\\'\\#fff\\'\\]\\]\\:stroke-transparent {\n & .recharts-dot[stroke='#fff'] {\n stroke: transparent;\n }\n }\n .\\[\\&_\\.recharts-layer\\]\\:outline-hidden {\n & .recharts-layer {\n --tw-outline-style: none;\n outline-style: none;\n @media (forced-colors: active) {\n outline: 2px solid transparent;\n outline-offset: 2px;\n }\n }\n }\n .\\[\\&_\\.recharts-polar-grid_\\[stroke\\=\\'\\#ccc\\'\\]\\]\\:stroke-border {\n & .recharts-polar-grid [stroke='#ccc'] {\n stroke: var(--border);\n }\n }\n .\\[\\&_\\.recharts-radial-bar-background-sector\\]\\:fill-muted {\n & .recharts-radial-bar-background-sector {\n fill: var(--muted);\n }\n }\n .\\[\\&_\\.recharts-rectangle\\.recharts-tooltip-cursor\\]\\:fill-muted {\n & .recharts-rectangle.recharts-tooltip-cursor {\n fill: var(--muted);\n }\n }\n .\\[\\&_\\.recharts-reference-line_\\[stroke\\=\\'\\#ccc\\'\\]\\]\\:stroke-border {\n & .recharts-reference-line [stroke='#ccc'] {\n stroke: var(--border);\n }\n }\n .\\[\\&_\\.recharts-sector\\]\\:outline-hidden {\n & .recharts-sector {\n --tw-outline-style: none;\n outline-style: none;\n @media (forced-colors: active) {\n outline: 2px solid transparent;\n outline-offset: 2px;\n }\n }\n }\n .\\[\\&_\\.recharts-sector\\[stroke\\=\\'\\#fff\\'\\]\\]\\:stroke-transparent {\n & .recharts-sector[stroke='#fff'] {\n stroke: transparent;\n }\n }\n .\\[\\&_\\.recharts-surface\\]\\:outline-hidden {\n & .recharts-surface {\n --tw-outline-style: none;\n outline-style: none;\n @media (forced-colors: active) {\n outline: 2px solid transparent;\n outline-offset: 2px;\n }\n }\n }\n .\\[\\&_svg\\]\\:pointer-events-none {\n & svg {\n pointer-events: none;\n }\n }\n .\\[\\&_svg\\]\\:shrink-0 {\n & svg {\n flex-shrink: 0;\n }\n }\n .\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-3 {\n & svg:not([class*='size-']) {\n width: calc(var(--spacing) * 3);\n height: calc(var(--spacing) * 3);\n }\n }\n .\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-4 {\n & svg:not([class*='size-']) {\n width: calc(var(--spacing) * 4);\n height: calc(var(--spacing) * 4);\n }\n }\n .\\[\\&_svg\\:not\\(\\[class\\*\\=\\'text-\\'\\]\\)\\]\\:text-muted-foreground {\n & svg:not([class*='text-']) {\n color: var(--muted-foreground);\n }\n }\n .\\[\\&_tr\\]\\:border-b {\n & tr {\n border-bottom-style: var(--tw-border-style);\n border-bottom-width: 1px;\n }\n }\n .\\[\\&_tr\\:last-child\\]\\:border-0 {\n & tr:last-child {\n border-style: var(--tw-border-style);\n border-width: 0px;\n }\n }\n .\\[\\&\\:has\\(\\[role\\=checkbox\\]\\)\\]\\:pr-0 {\n &:has([role=checkbox]) {\n padding-right: calc(var(--spacing) * 0);\n }\n }\n .\\[\\.border-b\\]\\:pb-6 {\n &:is(.border-b) {\n padding-bottom: calc(var(--spacing) * 6);\n }\n }\n .\\[\\.border-t\\]\\:pt-6 {\n &:is(.border-t) {\n padding-top: calc(var(--spacing) * 6);\n }\n }\n .\\*\\:\\[span\\]\\:last\\:flex {\n :is(& > *) {\n &:is(span) {\n &:last-child {\n display: flex;\n }\n }\n }\n }\n .\\*\\:\\[span\\]\\:last\\:items-center {\n :is(& > *) {\n &:is(span) {\n &:last-child {\n align-items: center;\n }\n }\n }\n }\n .\\*\\:\\[span\\]\\:last\\:gap-2 {\n :is(& > *) {\n &:is(span) {\n &:last-child {\n gap: calc(var(--spacing) * 2);\n }\n }\n }\n }\n .data-\\[variant\\=destructive\\]\\:\\*\\:\\[svg\\]\\:\\!text-destructive {\n &[data-variant=\"destructive\"] {\n :is(& > *) {\n &:is(svg) {\n color: var(--destructive) !important;\n }\n }\n }\n }\n .\\[\\&\\>\\*\\]\\:w-full {\n &>* {\n width: 100%;\n }\n }\n .\\@md\\/field-group\\:\\[\\&\\>\\*\\]\\:w-auto {\n @container field-group (width >= 28rem) {\n &>* {\n width: auto;\n }\n }\n }\n .\\[\\&\\>\\.sr-only\\]\\:w-auto {\n &>.sr-only {\n width: auto;\n }\n }\n .\\[\\&\\>\\[data-slot\\=field-label\\]\\]\\:flex-auto {\n &>[data-slot=field-label] {\n flex: auto;\n }\n }\n .\\@md\\/field-group\\:\\[\\&\\>\\[data-slot\\=field-label\\]\\]\\:flex-auto {\n @container field-group (width >= 28rem) {\n &>[data-slot=field-label] {\n flex: auto;\n }\n }\n }\n .\\[\\&\\>\\[role\\=checkbox\\]\\]\\:translate-y-\\[2px\\] {\n &>[role=checkbox] {\n --tw-translate-y: 2px;\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n }\n .has-\\[\\>\\[data-slot\\=field-content\\]\\]\\:\\[\\&\\>\\[role\\=checkbox\\]\\,\\[role\\=radio\\]\\]\\:mt-px {\n &:has(>[data-slot=field-content]) {\n &>[role=checkbox],[role=radio] {\n margin-top: 1px;\n }\n }\n }\n .\\@md\\/field-group\\:has-\\[\\>\\[data-slot\\=field-content\\]\\]\\:\\[\\&\\>\\[role\\=checkbox\\]\\,\\[role\\=radio\\]\\]\\:mt-px {\n @container field-group (width >= 28rem) {\n &:has(>[data-slot=field-content]) {\n &>[role=checkbox],[role=radio] {\n margin-top: 1px;\n }\n }\n }\n }\n .\\[\\&\\>a\\]\\:underline {\n &>a {\n text-decoration-line: underline;\n }\n }\n .\\[\\&\\>a\\]\\:underline-offset-4 {\n &>a {\n text-underline-offset: 4px;\n }\n }\n .\\[\\&\\>a\\:hover\\]\\:text-primary {\n &>a:hover {\n color: var(--primary);\n }\n }\n .\\[\\&\\>button\\]\\:hidden {\n &>button {\n display: none;\n }\n }\n .\\[\\&\\>span\\:last-child\\]\\:truncate {\n &>span:last-child {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n }\n .\\[\\&\\>svg\\]\\:pointer-events-none {\n &>svg {\n pointer-events: none;\n }\n }\n .\\[\\&\\>svg\\]\\:size-3 {\n &>svg {\n width: calc(var(--spacing) * 3);\n height: calc(var(--spacing) * 3);\n }\n }\n .\\[\\&\\>svg\\]\\:size-4 {\n &>svg {\n width: calc(var(--spacing) * 4);\n height: calc(var(--spacing) * 4);\n }\n }\n .\\[\\&\\>svg\\]\\:h-2\\.5 {\n &>svg {\n height: calc(var(--spacing) * 2.5);\n }\n }\n .\\[\\&\\>svg\\]\\:h-3 {\n &>svg {\n height: calc(var(--spacing) * 3);\n }\n }\n .\\[\\&\\>svg\\]\\:w-2\\.5 {\n &>svg {\n width: calc(var(--spacing) * 2.5);\n }\n }\n .\\[\\&\\>svg\\]\\:w-3 {\n &>svg {\n width: calc(var(--spacing) * 3);\n }\n }\n .\\[\\&\\>svg\\]\\:shrink-0 {\n &>svg {\n flex-shrink: 0;\n }\n }\n .\\[\\&\\>svg\\]\\:text-muted-foreground {\n &>svg {\n color: var(--muted-foreground);\n }\n }\n .\\[\\&\\>svg\\]\\:text-sidebar-accent-foreground {\n &>svg {\n color: var(--sidebar-accent-foreground);\n }\n }\n .group-has-data-\\[size\\=lg\\]\\/avatar-group\\:\\[\\&\\>svg\\]\\:size-5 {\n &:is(:where(.group\\/avatar-group):has(*[data-size=\"lg\"]) *) {\n &>svg {\n width: calc(var(--spacing) * 5);\n height: calc(var(--spacing) * 5);\n }\n }\n }\n .group-has-data-\\[size\\=sm\\]\\/avatar-group\\:\\[\\&\\>svg\\]\\:size-3 {\n &:is(:where(.group\\/avatar-group):has(*[data-size=\"sm\"]) *) {\n &>svg {\n width: calc(var(--spacing) * 3);\n height: calc(var(--spacing) * 3);\n }\n }\n }\n .group-data-\\[size\\=default\\]\\/avatar\\:\\[\\&\\>svg\\]\\:size-2 {\n &:is(:where(.group\\/avatar)[data-size=\"default\"] *) {\n &>svg {\n width: calc(var(--spacing) * 2);\n height: calc(var(--spacing) * 2);\n }\n }\n }\n .group-data-\\[size\\=lg\\]\\/avatar\\:\\[\\&\\>svg\\]\\:size-2 {\n &:is(:where(.group\\/avatar)[data-size=\"lg\"] *) {\n &>svg {\n width: calc(var(--spacing) * 2);\n height: calc(var(--spacing) * 2);\n }\n }\n }\n .group-data-\\[size\\=sm\\]\\/avatar\\:\\[\\&\\>svg\\]\\:hidden {\n &:is(:where(.group\\/avatar)[data-size=\"sm\"] *) {\n &>svg {\n display: none;\n }\n }\n }\n .\\[\\&\\>tr\\]\\:last\\:border-b-0 {\n &>tr {\n &:last-child {\n border-bottom-style: var(--tw-border-style);\n border-bottom-width: 0px;\n }\n }\n }\n .\\[\\[data-side\\=left\\]\\[data-collapsible\\=offcanvas\\]_\\&\\]\\:-right-2 {\n [data-side=left][data-collapsible=offcanvas] & {\n right: calc(var(--spacing) * -2);\n }\n }\n .\\[\\[data-side\\=left\\]\\[data-state\\=collapsed\\]_\\&\\]\\:cursor-e-resize {\n [data-side=left][data-state=collapsed] & {\n cursor: e-resize;\n }\n }\n .\\[\\[data-side\\=right\\]\\[data-collapsible\\=offcanvas\\]_\\&\\]\\:-left-2 {\n [data-side=right][data-collapsible=offcanvas] & {\n left: calc(var(--spacing) * -2);\n }\n }\n .\\[\\[data-side\\=right\\]\\[data-state\\=collapsed\\]_\\&\\]\\:cursor-w-resize {\n [data-side=right][data-state=collapsed] & {\n cursor: w-resize;\n }\n }\n .\\[\\[data-variant\\=legend\\]\\+\\&\\]\\:-mt-1\\.5 {\n [data-variant=legend]+& {\n margin-top: calc(var(--spacing) * -1.5);\n }\n }\n .\\[a\\&\\]\\:hover\\:bg-accent {\n a& {\n &:hover {\n @media (hover: hover) {\n background-color: var(--accent);\n }\n }\n }\n }\n .\\[a\\&\\]\\:hover\\:bg-destructive\\/90 {\n a& {\n &:hover {\n @media (hover: hover) {\n background-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--destructive) 90%, transparent);\n }\n }\n }\n }\n }\n .\\[a\\&\\]\\:hover\\:bg-primary\\/90 {\n a& {\n &:hover {\n @media (hover: hover) {\n background-color: var(--primary);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--primary) 90%, transparent);\n }\n }\n }\n }\n }\n .\\[a\\&\\]\\:hover\\:bg-secondary\\/90 {\n a& {\n &:hover {\n @media (hover: hover) {\n background-color: var(--secondary);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--secondary) 90%, transparent);\n }\n }\n }\n }\n }\n .\\[a\\&\\]\\:hover\\:text-accent-foreground {\n a& {\n &:hover {\n @media (hover: hover) {\n color: var(--accent-foreground);\n }\n }\n }\n }\n .\\[a\\&\\]\\:hover\\:underline {\n a& {\n &:hover {\n @media (hover: hover) {\n text-decoration-line: underline;\n }\n }\n }\n }\n}\n@property --tw-animation-delay {\n syntax: \"*\";\n inherits: false;\n initial-value: 0s;\n}\n@property --tw-animation-direction {\n syntax: \"*\";\n inherits: false;\n initial-value: normal;\n}\n@property --tw-animation-duration {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-animation-fill-mode {\n syntax: \"*\";\n inherits: false;\n initial-value: none;\n}\n@property --tw-animation-iteration-count {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-enter-blur {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-enter-opacity {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-enter-rotate {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-enter-scale {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-enter-translate-x {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-enter-translate-y {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-exit-blur {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-exit-opacity {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-exit-rotate {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-exit-scale {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-exit-translate-x {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-exit-translate-y {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n:root {\n --radius: 0.625rem;\n --background: oklch(1 0 0);\n --foreground: oklch(0.145 0 0);\n --card: oklch(1 0 0);\n --card-foreground: oklch(0.145 0 0);\n --popover: oklch(1 0 0);\n --popover-foreground: oklch(0.145 0 0);\n --primary: oklch(0.205 0 0);\n --primary-foreground: oklch(0.985 0 0);\n --secondary: oklch(0.97 0 0);\n --secondary-foreground: oklch(0.205 0 0);\n --muted: oklch(0.97 0 0);\n --muted-foreground: oklch(0.556 0 0);\n --accent: oklch(0.97 0 0);\n --accent-foreground: oklch(0.205 0 0);\n --destructive: oklch(0.577 0.245 27.325);\n --border: oklch(0.922 0 0);\n --input: oklch(0.922 0 0);\n --ring: oklch(0.708 0 0);\n --chart-1: oklch(0.646 0.222 41.116);\n --chart-2: oklch(0.6 0.118 184.704);\n --chart-3: oklch(0.398 0.07 227.392);\n --chart-4: oklch(0.828 0.189 84.429);\n --chart-5: oklch(0.769 0.188 70.08);\n --sidebar: oklch(0.985 0 0);\n --sidebar-foreground: oklch(0.145 0 0);\n --sidebar-primary: oklch(0.205 0 0);\n --sidebar-primary-foreground: oklch(0.985 0 0);\n --sidebar-accent: oklch(0.97 0 0);\n --sidebar-accent-foreground: oklch(0.205 0 0);\n --sidebar-border: oklch(0.922 0 0);\n --sidebar-ring: oklch(0.708 0 0);\n}\n.dark {\n --background: oklch(0.145 0 0);\n --foreground: oklch(0.985 0 0);\n --card: oklch(0.205 0 0);\n --card-foreground: oklch(0.985 0 0);\n --popover: oklch(0.205 0 0);\n --popover-foreground: oklch(0.985 0 0);\n --primary: oklch(0.922 0 0);\n --primary-foreground: oklch(0.205 0 0);\n --secondary: oklch(0.269 0 0);\n --secondary-foreground: oklch(0.985 0 0);\n --muted: oklch(0.269 0 0);\n --muted-foreground: oklch(0.708 0 0);\n --accent: oklch(0.269 0 0);\n --accent-foreground: oklch(0.985 0 0);\n --destructive: oklch(0.704 0.191 22.216);\n --border: oklch(1 0 0 / 10%);\n --input: oklch(1 0 0 / 15%);\n --ring: oklch(0.556 0 0);\n --chart-1: oklch(0.488 0.243 264.376);\n --chart-2: oklch(0.696 0.17 162.48);\n --chart-3: oklch(0.769 0.188 70.08);\n --chart-4: oklch(0.627 0.265 303.9);\n --chart-5: oklch(0.645 0.246 16.439);\n --sidebar: oklch(0.205 0 0);\n --sidebar-foreground: oklch(0.985 0 0);\n --sidebar-primary: oklch(0.488 0.243 264.376);\n --sidebar-primary-foreground: oklch(0.985 0 0);\n --sidebar-accent: oklch(0.269 0 0);\n --sidebar-accent-foreground: oklch(0.985 0 0);\n --sidebar-border: oklch(1 0 0 / 10%);\n --sidebar-ring: oklch(0.556 0 0);\n}\n@layer base {\n * {\n border-color: var(--border);\n outline-color: var(--ring);\n @supports (color: color-mix(in lab, red, red)) {\n outline-color: color-mix(in oklab, var(--ring) 50%, transparent);\n }\n }\n body {\n background-color: var(--background);\n color: var(--foreground);\n }\n}\n@property --tw-translate-x {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-translate-y {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-translate-z {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-space-y-reverse {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-space-x-reverse {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-divide-y-reverse {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-border-style {\n syntax: \"*\";\n inherits: false;\n initial-value: solid;\n}\n@property --tw-gradient-position {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-gradient-from {\n syntax: \"\";\n inherits: false;\n initial-value: #0000;\n}\n@property --tw-gradient-via {\n syntax: \"\";\n inherits: false;\n initial-value: #0000;\n}\n@property --tw-gradient-to {\n syntax: \"\";\n inherits: false;\n initial-value: #0000;\n}\n@property --tw-gradient-stops {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-gradient-via-stops {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-gradient-from-position {\n syntax: \"\";\n inherits: false;\n initial-value: 0%;\n}\n@property --tw-gradient-via-position {\n syntax: \"\";\n inherits: false;\n initial-value: 50%;\n}\n@property --tw-gradient-to-position {\n syntax: \"\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-leading {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-font-weight {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-tracking {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ordinal {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-slashed-zero {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-numeric-figure {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-numeric-spacing {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-numeric-fraction {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-shadow-alpha {\n syntax: \"\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-inset-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-inset-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-inset-shadow-alpha {\n syntax: \"\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-ring-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ring-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-inset-ring-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-inset-ring-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-ring-inset {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ring-offset-width {\n syntax: \"\";\n inherits: false;\n initial-value: 0px;\n}\n@property --tw-ring-offset-color {\n syntax: \"*\";\n inherits: false;\n initial-value: #fff;\n}\n@property --tw-ring-offset-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-outline-style {\n syntax: \"*\";\n inherits: false;\n initial-value: solid;\n}\n@property --tw-backdrop-blur {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-brightness {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-contrast {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-grayscale {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-hue-rotate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-invert {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-opacity {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-saturate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-sepia {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-duration {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ease {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-content {\n syntax: \"*\";\n initial-value: \"\";\n inherits: false;\n}\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n@keyframes pulse {\n 50% {\n opacity: 0.5;\n }\n}\n@keyframes enter {\n from {\n opacity: var(--tw-enter-opacity,1);\n transform: translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0));\n filter: blur(var(--tw-enter-blur,0));\n }\n}\n@keyframes exit {\n to {\n opacity: var(--tw-exit-opacity,1);\n transform: translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0));\n filter: blur(var(--tw-exit-blur,0));\n }\n}\n@layer properties {\n @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {\n *, ::before, ::after, ::backdrop {\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-translate-z: 0;\n --tw-space-y-reverse: 0;\n --tw-space-x-reverse: 0;\n --tw-divide-y-reverse: 0;\n --tw-border-style: solid;\n --tw-gradient-position: initial;\n --tw-gradient-from: #0000;\n --tw-gradient-via: #0000;\n --tw-gradient-to: #0000;\n --tw-gradient-stops: initial;\n --tw-gradient-via-stops: initial;\n --tw-gradient-from-position: 0%;\n --tw-gradient-via-position: 50%;\n --tw-gradient-to-position: 100%;\n --tw-leading: initial;\n --tw-font-weight: initial;\n --tw-tracking: initial;\n --tw-ordinal: initial;\n --tw-slashed-zero: initial;\n --tw-numeric-figure: initial;\n --tw-numeric-spacing: initial;\n --tw-numeric-fraction: initial;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-color: initial;\n --tw-shadow-alpha: 100%;\n --tw-inset-shadow: 0 0 #0000;\n --tw-inset-shadow-color: initial;\n --tw-inset-shadow-alpha: 100%;\n --tw-ring-color: initial;\n --tw-ring-shadow: 0 0 #0000;\n --tw-inset-ring-color: initial;\n --tw-inset-ring-shadow: 0 0 #0000;\n --tw-ring-inset: initial;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-outline-style: solid;\n --tw-backdrop-blur: initial;\n --tw-backdrop-brightness: initial;\n --tw-backdrop-contrast: initial;\n --tw-backdrop-grayscale: initial;\n --tw-backdrop-hue-rotate: initial;\n --tw-backdrop-invert: initial;\n --tw-backdrop-opacity: initial;\n --tw-backdrop-saturate: initial;\n --tw-backdrop-sepia: initial;\n --tw-duration: initial;\n --tw-ease: initial;\n --tw-content: \"\";\n --tw-animation-delay: 0s;\n --tw-animation-direction: normal;\n --tw-animation-duration: initial;\n --tw-animation-fill-mode: none;\n --tw-animation-iteration-count: 1;\n --tw-enter-blur: 0;\n --tw-enter-opacity: 1;\n --tw-enter-rotate: 0;\n --tw-enter-scale: 1;\n --tw-enter-translate-x: 0;\n --tw-enter-translate-y: 0;\n --tw-exit-blur: 0;\n --tw-exit-opacity: 1;\n --tw-exit-rotate: 0;\n --tw-exit-scale: 1;\n --tw-exit-translate-x: 0;\n --tw-exit-translate-y: 0;\n }\n }\n}\n"],"names":[],"mappings":"AACA;EA40LE;IACE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA50LJ;EAEE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAA;IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAFF;EAgIE;;;;;;;EAAA;;;;;;;EAMA;;;;;;;;;;EASA;;;;;;EAKA;;;;;EAIA;;;;;EAIA;;;;;;;EAKA;;;;EAGA;;;;;;;EAMA;;;;EAGA;;;;;;;EAMA;;;;EAGA;;;;EAGA;;;;;;EAKA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;;EAIA;;;;;EAIA;;;;;;;;;;;EAAA;;;;;;;;;;;EAUA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;IACE;;;;IAEE;MAAgD;;;;;;EAKpD;;;;EAGA;;;;EAGA;;;;;EAIA;;;;EAGA;;;;EAGA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAAA;;;;EAGA;;;;EAAA;;;;EAGA;;;;EAmzKA;;;;;EAGE;IAAgD;;;;;EAIlD;;;;;;AAzkLF;;AAAA;EAoRE;;;;EAIA;;;;EAIA;;;;EAGA;;;;EAGA;;;;;;;;;;;;EAWA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;;;;EAMA;;;;;;;EAMA;;;;;;;EAMA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAIE;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;;EAMF;;;;EAIE;;;;;;EAMF;;;;EAIE;;;;;;;;EASA;;;;EAIF;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;;;EAKA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;EAEE;IAAgD;;;;;EAG5B;;;;EAEtB;;;;EAEE;IAAgD;;;;;EAG5B;;;;EAEtB;;;;EAEE;IAAgD;;;;;EAG5B;;;;EAEtB;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;EAEE;IAAgD;;;;;EAG5B;;;;EAEtB;;;;EAEE;IAAgD;;;;;EAG5B;;;;EAEtB;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;EAEE;IAAgD;;;;;EAGxB;;;;;EAG1B;;;;;;EAKA;;;;EAEE;IAAgD;;;;;EAGxB;;;;;EAG1B;;;;;;EAKA;;;;EAEE;IAAgD;;;;;EAGxB;;;;;EAG1B;;;;;;EAKA;;;;EAEE;IAAgD;;;;;EAG5B;;;;EAEtB;;;;EAEE;IAAgD;;;;;EAG5B;;;;EAEtB;;;;EAEE;IAAgD;;;;;EAG5B;;;;EAEtB;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;EAGA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;;EAIA;;;;EAGA;;;;EAGA;;;;;EAIA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;;EAGE;IAAgC;;;;;;EAKlC;;;;;EAIA;;;;;;EAKA;;;;;;EAKA;;;;;;EAKA;;;;;;EAKA;;;;;;EAKA;;;;;;EAKA;;;;;;EAKA;;;;;;EAKA;;;;;;EAKA;;;;;;EAK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A;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;AAIA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;AAIA;;;;;AAIA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;;AAKA;;;;;AAIA;;;;;;AAKA;;;;;;AAKA;;;;;AAIA;;;;;;AAKA;;;;;AAIA;;;;;;AAKA;;;;;AAIA;;;;;;AAKA;;;;;AAIA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;;;AAOA"}}] + {"offset": {"line": 1, "column": 0}, "map": {"version":3,"sources":["turbopack:///[project]/src/app/globals.css"],"sourcesContent":["/*! tailwindcss v4.2.1 | MIT License | https://tailwindcss.com */\n@layer properties;\n@layer theme, base, components, utilities;\n@layer theme {\n :root, :host {\n --color-red-50: oklch(97.1% 0.013 17.38);\n --color-red-100: oklch(93.6% 0.032 17.717);\n --color-red-200: oklch(88.5% 0.062 18.334);\n --color-red-400: oklch(70.4% 0.191 22.216);\n --color-red-500: oklch(63.7% 0.237 25.331);\n --color-red-600: oklch(57.7% 0.245 27.325);\n --color-red-700: oklch(50.5% 0.213 27.518);\n --color-orange-100: oklch(95.4% 0.038 75.164);\n --color-orange-500: oklch(70.5% 0.213 47.604);\n --color-orange-600: oklch(64.6% 0.222 41.116);\n --color-orange-700: oklch(55.3% 0.195 38.402);\n --color-amber-50: oklch(98.7% 0.022 95.277);\n --color-amber-200: oklch(92.4% 0.12 95.746);\n --color-amber-400: oklch(82.8% 0.189 84.429);\n --color-amber-700: oklch(55.5% 0.163 48.998);\n --color-yellow-50: oklch(98.7% 0.026 102.212);\n --color-yellow-100: oklch(97.3% 0.071 103.193);\n --color-yellow-500: oklch(79.5% 0.184 86.047);\n --color-yellow-600: oklch(68.1% 0.162 75.834);\n --color-yellow-700: oklch(55.4% 0.135 66.442);\n --color-green-50: oklch(98.2% 0.018 155.826);\n --color-green-100: oklch(96.2% 0.044 156.743);\n --color-green-200: oklch(92.5% 0.084 155.995);\n --color-green-300: oklch(87.1% 0.15 154.449);\n --color-green-400: oklch(79.2% 0.209 151.711);\n --color-green-500: oklch(72.3% 0.219 149.579);\n --color-green-600: oklch(62.7% 0.194 149.214);\n --color-green-700: oklch(52.7% 0.154 150.069);\n --color-green-800: oklch(44.8% 0.119 151.328);\n --color-green-900: oklch(39.3% 0.095 152.535);\n --color-green-950: oklch(26.6% 0.065 152.934);\n --color-teal-500: oklch(70.4% 0.14 182.503);\n --color-blue-50: oklch(97% 0.014 254.604);\n --color-blue-100: oklch(93.2% 0.032 255.585);\n --color-blue-200: oklch(88.2% 0.059 254.128);\n --color-blue-500: oklch(62.3% 0.214 259.815);\n --color-blue-600: oklch(54.6% 0.245 262.881);\n --color-blue-700: oklch(48.8% 0.243 264.376);\n --color-purple-100: oklch(94.6% 0.033 307.174);\n --color-purple-500: oklch(62.7% 0.265 303.9);\n --color-purple-700: oklch(49.6% 0.265 301.924);\n --color-pink-500: oklch(65.6% 0.241 354.308);\n --color-pink-600: oklch(59.2% 0.249 0.584);\n --color-gray-50: oklch(98.5% 0.002 247.839);\n --color-gray-100: oklch(96.7% 0.003 264.542);\n --color-gray-200: oklch(92.8% 0.006 264.531);\n --color-gray-300: oklch(87.2% 0.01 258.338);\n --color-gray-400: oklch(70.7% 0.022 261.325);\n --color-gray-500: oklch(55.1% 0.027 264.364);\n --color-gray-600: oklch(44.6% 0.03 256.802);\n --color-gray-700: oklch(37.3% 0.034 259.733);\n --color-gray-800: oklch(27.8% 0.033 256.848);\n --color-gray-900: oklch(21% 0.034 264.665);\n --color-gray-950: oklch(13% 0.028 261.692);\n --color-zinc-100: oklch(96.7% 0.001 286.375);\n --color-zinc-200: oklch(92% 0.004 286.32);\n --color-zinc-300: oklch(87.1% 0.006 286.286);\n --color-zinc-500: oklch(55.2% 0.016 285.938);\n --color-zinc-600: oklch(44.2% 0.017 285.786);\n --color-zinc-900: oklch(21% 0.006 285.885);\n --color-black: #000;\n --color-white: #fff;\n --spacing: 0.25rem;\n --container-xs: 20rem;\n --container-sm: 24rem;\n --container-md: 28rem;\n --container-lg: 32rem;\n --container-xl: 36rem;\n --container-2xl: 42rem;\n --container-3xl: 48rem;\n --container-4xl: 56rem;\n --container-5xl: 64rem;\n --container-6xl: 72rem;\n --container-7xl: 80rem;\n --text-xs: 0.75rem;\n --text-xs--line-height: calc(1 / 0.75);\n --text-sm: 0.875rem;\n --text-sm--line-height: calc(1.25 / 0.875);\n --text-base: 1rem;\n --text-base--line-height: calc(1.5 / 1);\n --text-lg: 1.125rem;\n --text-lg--line-height: calc(1.75 / 1.125);\n --text-xl: 1.25rem;\n --text-xl--line-height: calc(1.75 / 1.25);\n --text-2xl: 1.5rem;\n --text-2xl--line-height: calc(2 / 1.5);\n --text-3xl: 1.875rem;\n --text-3xl--line-height: calc(2.25 / 1.875);\n --text-4xl: 2.25rem;\n --text-4xl--line-height: calc(2.5 / 2.25);\n --text-5xl: 3rem;\n --text-5xl--line-height: 1;\n --text-6xl: 3.75rem;\n --text-6xl--line-height: 1;\n --font-weight-normal: 400;\n --font-weight-medium: 500;\n --font-weight-semibold: 600;\n --font-weight-bold: 700;\n --tracking-tight: -0.025em;\n --tracking-wide: 0.025em;\n --tracking-wider: 0.05em;\n --tracking-widest: 0.1em;\n --leading-tight: 1.25;\n --leading-snug: 1.375;\n --leading-normal: 1.5;\n --leading-relaxed: 1.625;\n --radius-xs: 0.125rem;\n --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);\n --animate-spin: spin 1s linear infinite;\n --animate-pulse: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n --blur-sm: 8px;\n --aspect-video: 16 / 9;\n --default-transition-duration: 150ms;\n --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n --default-font-family: var(--font-geist-sans);\n --default-mono-font-family: var(--font-geist-mono);\n --color-border: var(--border);\n }\n}\n@layer base {\n *, ::after, ::before, ::backdrop, ::file-selector-button {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n border: 0 solid;\n }\n html, :host {\n line-height: 1.5;\n -webkit-text-size-adjust: 100%;\n tab-size: 4;\n font-family: var(--default-font-family, ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\");\n font-feature-settings: var(--default-font-feature-settings, normal);\n font-variation-settings: var(--default-font-variation-settings, normal);\n -webkit-tap-highlight-color: transparent;\n }\n hr {\n height: 0;\n color: inherit;\n border-top-width: 1px;\n }\n abbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n }\n h1, h2, h3, h4, h5, h6 {\n font-size: inherit;\n font-weight: inherit;\n }\n a {\n color: inherit;\n -webkit-text-decoration: inherit;\n text-decoration: inherit;\n }\n b, strong {\n font-weight: bolder;\n }\n code, kbd, samp, pre {\n font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace);\n font-feature-settings: var(--default-mono-font-feature-settings, normal);\n font-variation-settings: var(--default-mono-font-variation-settings, normal);\n font-size: 1em;\n }\n small {\n font-size: 80%;\n }\n sub, sup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n }\n sub {\n bottom: -0.25em;\n }\n sup {\n top: -0.5em;\n }\n table {\n text-indent: 0;\n border-color: inherit;\n border-collapse: collapse;\n }\n :-moz-focusring {\n outline: auto;\n }\n progress {\n vertical-align: baseline;\n }\n summary {\n display: list-item;\n }\n ol, ul, menu {\n list-style: none;\n }\n img, svg, video, canvas, audio, iframe, embed, object {\n display: block;\n vertical-align: middle;\n }\n img, video {\n max-width: 100%;\n height: auto;\n }\n button, input, select, optgroup, textarea, ::file-selector-button {\n font: inherit;\n font-feature-settings: inherit;\n font-variation-settings: inherit;\n letter-spacing: inherit;\n color: inherit;\n border-radius: 0;\n background-color: transparent;\n opacity: 1;\n }\n :where(select:is([multiple], [size])) optgroup {\n font-weight: bolder;\n }\n :where(select:is([multiple], [size])) optgroup option {\n padding-inline-start: 20px;\n }\n ::file-selector-button {\n margin-inline-end: 4px;\n }\n ::placeholder {\n opacity: 1;\n }\n @supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) {\n ::placeholder {\n color: currentcolor;\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, currentcolor 50%, transparent);\n }\n }\n }\n textarea {\n resize: vertical;\n }\n ::-webkit-search-decoration {\n -webkit-appearance: none;\n }\n ::-webkit-date-and-time-value {\n min-height: 1lh;\n text-align: inherit;\n }\n ::-webkit-datetime-edit {\n display: inline-flex;\n }\n ::-webkit-datetime-edit-fields-wrapper {\n padding: 0;\n }\n ::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field {\n padding-block: 0;\n }\n ::-webkit-calendar-picker-indicator {\n line-height: 1;\n }\n :-moz-ui-invalid {\n box-shadow: none;\n }\n button, input:where([type=\"button\"], [type=\"reset\"], [type=\"submit\"]), ::file-selector-button {\n appearance: button;\n }\n ::-webkit-inner-spin-button, ::-webkit-outer-spin-button {\n height: auto;\n }\n [hidden]:where(:not([hidden=\"until-found\"])) {\n display: none !important;\n }\n}\n@layer utilities {\n .\\@container\\/card-header {\n container-type: inline-size;\n container-name: card-header;\n }\n .\\@container\\/field-group {\n container-type: inline-size;\n container-name: field-group;\n }\n .pointer-events-none {\n pointer-events: none;\n }\n .visible {\n visibility: visible;\n }\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n border-width: 0;\n }\n .absolute {\n position: absolute;\n }\n .fixed {\n position: fixed;\n }\n .relative {\n position: relative;\n }\n .sticky {\n position: sticky;\n }\n .inset-0 {\n inset: calc(var(--spacing) * 0);\n }\n .inset-x-0 {\n inset-inline: calc(var(--spacing) * 0);\n }\n .inset-y-0 {\n inset-block: calc(var(--spacing) * 0);\n }\n .start {\n inset-inline-start: var(--spacing);\n }\n .end {\n inset-inline-end: var(--spacing);\n }\n .-top-1 {\n top: calc(var(--spacing) * -1);\n }\n .top-0 {\n top: calc(var(--spacing) * 0);\n }\n .top-1\\.5 {\n top: calc(var(--spacing) * 1.5);\n }\n .top-1\\/2 {\n top: calc(1 / 2 * 100%);\n }\n .top-2 {\n top: calc(var(--spacing) * 2);\n }\n .top-3 {\n top: calc(var(--spacing) * 3);\n }\n .top-3\\.5 {\n top: calc(var(--spacing) * 3.5);\n }\n .top-4 {\n top: calc(var(--spacing) * 4);\n }\n .top-6 {\n top: calc(var(--spacing) * 6);\n }\n .top-16 {\n top: calc(var(--spacing) * 16);\n }\n .top-\\[50\\%\\] {\n top: 50%;\n }\n .-right-1 {\n right: calc(var(--spacing) * -1);\n }\n .right-0 {\n right: calc(var(--spacing) * 0);\n }\n .right-1 {\n right: calc(var(--spacing) * 1);\n }\n .right-2 {\n right: calc(var(--spacing) * 2);\n }\n .right-2\\.5 {\n right: calc(var(--spacing) * 2.5);\n }\n .right-3 {\n right: calc(var(--spacing) * 3);\n }\n .right-4 {\n right: calc(var(--spacing) * 4);\n }\n .-bottom-1 {\n bottom: calc(var(--spacing) * -1);\n }\n .bottom-0 {\n bottom: calc(var(--spacing) * 0);\n }\n .bottom-2 {\n bottom: calc(var(--spacing) * 2);\n }\n .bottom-3 {\n bottom: calc(var(--spacing) * 3);\n }\n .left-0 {\n left: calc(var(--spacing) * 0);\n }\n .left-2 {\n left: calc(var(--spacing) * 2);\n }\n .left-3 {\n left: calc(var(--spacing) * 3);\n }\n .left-\\[50\\%\\] {\n left: 50%;\n }\n .z-10 {\n z-index: 10;\n }\n .z-20 {\n z-index: 20;\n }\n .z-40 {\n z-index: 40;\n }\n .z-50 {\n z-index: 50;\n }\n .col-start-2 {\n grid-column-start: 2;\n }\n .row-span-2 {\n grid-row: span 2 / span 2;\n }\n .row-start-1 {\n grid-row-start: 1;\n }\n .-mx-1 {\n margin-inline: calc(var(--spacing) * -1);\n }\n .mx-2 {\n margin-inline: calc(var(--spacing) * 2);\n }\n .mx-3\\.5 {\n margin-inline: calc(var(--spacing) * 3.5);\n }\n .mx-auto {\n margin-inline: auto;\n }\n .-my-2 {\n margin-block: calc(var(--spacing) * -2);\n }\n .my-0\\.5 {\n margin-block: calc(var(--spacing) * 0.5);\n }\n .my-1 {\n margin-block: calc(var(--spacing) * 1);\n }\n .-mt-1 {\n margin-top: calc(var(--spacing) * -1);\n }\n .mt-0\\.5 {\n margin-top: calc(var(--spacing) * 0.5);\n }\n .mt-1 {\n margin-top: calc(var(--spacing) * 1);\n }\n .mt-2 {\n margin-top: calc(var(--spacing) * 2);\n }\n .mt-3 {\n margin-top: calc(var(--spacing) * 3);\n }\n .mt-4 {\n margin-top: calc(var(--spacing) * 4);\n }\n .mt-5 {\n margin-top: calc(var(--spacing) * 5);\n }\n .mt-6 {\n margin-top: calc(var(--spacing) * 6);\n }\n .mt-8 {\n margin-top: calc(var(--spacing) * 8);\n }\n .mt-12 {\n margin-top: calc(var(--spacing) * 12);\n }\n .mt-auto {\n margin-top: auto;\n }\n .mr-0\\.5 {\n margin-right: calc(var(--spacing) * 0.5);\n }\n .mb-1 {\n margin-bottom: calc(var(--spacing) * 1);\n }\n .mb-2 {\n margin-bottom: calc(var(--spacing) * 2);\n }\n .mb-3 {\n margin-bottom: calc(var(--spacing) * 3);\n }\n .mb-4 {\n margin-bottom: calc(var(--spacing) * 4);\n }\n .mb-5 {\n margin-bottom: calc(var(--spacing) * 5);\n }\n .mb-6 {\n margin-bottom: calc(var(--spacing) * 6);\n }\n .mb-8 {\n margin-bottom: calc(var(--spacing) * 8);\n }\n .-ml-1 {\n margin-left: calc(var(--spacing) * -1);\n }\n .ml-2 {\n margin-left: calc(var(--spacing) * 2);\n }\n .ml-4 {\n margin-left: calc(var(--spacing) * 4);\n }\n .ml-auto {\n margin-left: auto;\n }\n .line-clamp-2 {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n }\n .line-clamp-3 {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 3;\n }\n .line-clamp-4 {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 4;\n }\n .block {\n display: block;\n }\n .flex {\n display: flex;\n }\n .grid {\n display: grid;\n }\n .hidden {\n display: none;\n }\n .inline {\n display: inline;\n }\n .inline-block {\n display: inline-block;\n }\n .inline-flex {\n display: inline-flex;\n }\n .table {\n display: table;\n }\n .table-caption {\n display: table-caption;\n }\n .table-cell {\n display: table-cell;\n }\n .table-row {\n display: table-row;\n }\n .field-sizing-content {\n field-sizing: content;\n }\n .aspect-square {\n aspect-ratio: 1 / 1;\n }\n .aspect-video {\n aspect-ratio: var(--aspect-video);\n }\n .size-2 {\n width: calc(var(--spacing) * 2);\n height: calc(var(--spacing) * 2);\n }\n .size-2\\.5 {\n width: calc(var(--spacing) * 2.5);\n height: calc(var(--spacing) * 2.5);\n }\n .size-3\\.5 {\n width: calc(var(--spacing) * 3.5);\n height: calc(var(--spacing) * 3.5);\n }\n .size-4 {\n width: calc(var(--spacing) * 4);\n height: calc(var(--spacing) * 4);\n }\n .size-5\\! {\n width: calc(var(--spacing) * 5) !important;\n height: calc(var(--spacing) * 5) !important;\n }\n .size-6 {\n width: calc(var(--spacing) * 6);\n height: calc(var(--spacing) * 6);\n }\n .size-7 {\n width: calc(var(--spacing) * 7);\n height: calc(var(--spacing) * 7);\n }\n .size-8 {\n width: calc(var(--spacing) * 8);\n height: calc(var(--spacing) * 8);\n }\n .size-9 {\n width: calc(var(--spacing) * 9);\n height: calc(var(--spacing) * 9);\n }\n .size-10 {\n width: calc(var(--spacing) * 10);\n height: calc(var(--spacing) * 10);\n }\n .size-full {\n width: 100%;\n height: 100%;\n }\n .h-\\(--header-height\\) {\n height: var(--header-height);\n }\n .h-1 {\n height: calc(var(--spacing) * 1);\n }\n .h-1\\.5 {\n height: calc(var(--spacing) * 1.5);\n }\n .h-2 {\n height: calc(var(--spacing) * 2);\n }\n .h-2\\.5 {\n height: calc(var(--spacing) * 2.5);\n }\n .h-3 {\n height: calc(var(--spacing) * 3);\n }\n .h-3\\.5 {\n height: calc(var(--spacing) * 3.5);\n }\n .h-4 {\n height: calc(var(--spacing) * 4);\n }\n .h-5 {\n height: calc(var(--spacing) * 5);\n }\n .h-6 {\n height: calc(var(--spacing) * 6);\n }\n .h-7 {\n height: calc(var(--spacing) * 7);\n }\n .h-8 {\n height: calc(var(--spacing) * 8);\n }\n .h-9 {\n height: calc(var(--spacing) * 9);\n }\n .h-10 {\n height: calc(var(--spacing) * 10);\n }\n .h-12 {\n height: calc(var(--spacing) * 12);\n }\n .h-14 {\n height: calc(var(--spacing) * 14);\n }\n .h-16 {\n height: calc(var(--spacing) * 16);\n }\n .h-20 {\n height: calc(var(--spacing) * 20);\n }\n .h-24 {\n height: calc(var(--spacing) * 24);\n }\n .h-32 {\n height: calc(var(--spacing) * 32);\n }\n .h-36 {\n height: calc(var(--spacing) * 36);\n }\n .h-40 {\n height: calc(var(--spacing) * 40);\n }\n .h-44 {\n height: calc(var(--spacing) * 44);\n }\n .h-48 {\n height: calc(var(--spacing) * 48);\n }\n .h-56 {\n height: calc(var(--spacing) * 56);\n }\n .h-60 {\n height: calc(var(--spacing) * 60);\n }\n .h-64 {\n height: calc(var(--spacing) * 64);\n }\n .h-72 {\n height: calc(var(--spacing) * 72);\n }\n .h-\\[calc\\(100\\%-1px\\)\\] {\n height: calc(100% - 1px);\n }\n .h-\\[var\\(--radix-select-trigger-height\\)\\] {\n height: var(--radix-select-trigger-height);\n }\n .h-auto {\n height: auto;\n }\n .h-fit {\n height: fit-content;\n }\n .h-full {\n height: 100%;\n }\n .h-px {\n height: 1px;\n }\n .h-svh {\n height: 100svh;\n }\n .max-h-\\(--radix-dropdown-menu-content-available-height\\) {\n max-height: var(--radix-dropdown-menu-content-available-height);\n }\n .max-h-\\(--radix-select-content-available-height\\) {\n max-height: var(--radix-select-content-available-height);\n }\n .max-h-14 {\n max-height: calc(var(--spacing) * 14);\n }\n .max-h-32 {\n max-height: calc(var(--spacing) * 32);\n }\n .max-h-48 {\n max-height: calc(var(--spacing) * 48);\n }\n .max-h-\\[85vh\\] {\n max-height: 85vh;\n }\n .max-h-\\[90vh\\] {\n max-height: 90vh;\n }\n .max-h-full {\n max-height: 100%;\n }\n .min-h-0 {\n min-height: calc(var(--spacing) * 0);\n }\n .min-h-16 {\n min-height: calc(var(--spacing) * 16);\n }\n .min-h-20 {\n min-height: calc(var(--spacing) * 20);\n }\n .min-h-24 {\n min-height: calc(var(--spacing) * 24);\n }\n .min-h-48 {\n min-height: calc(var(--spacing) * 48);\n }\n .min-h-\\[40vh\\] {\n min-height: 40vh;\n }\n .min-h-\\[220px\\] {\n min-height: 220px;\n }\n .min-h-\\[calc\\(100vh-60px\\)\\] {\n min-height: calc(100vh - 60px);\n }\n .min-h-screen {\n min-height: 100vh;\n }\n .min-h-svh {\n min-height: 100svh;\n }\n .w-\\(--radix-dropdown-menu-trigger-width\\) {\n width: var(--radix-dropdown-menu-trigger-width);\n }\n .w-\\(--sidebar-width\\) {\n width: var(--sidebar-width);\n }\n .w-0 {\n width: calc(var(--spacing) * 0);\n }\n .w-1 {\n width: calc(var(--spacing) * 1);\n }\n .w-1\\.5 {\n width: calc(var(--spacing) * 1.5);\n }\n .w-2 {\n width: calc(var(--spacing) * 2);\n }\n .w-2\\.5 {\n width: calc(var(--spacing) * 2.5);\n }\n .w-3 {\n width: calc(var(--spacing) * 3);\n }\n .w-3\\.5 {\n width: calc(var(--spacing) * 3.5);\n }\n .w-3\\/4 {\n width: calc(3 / 4 * 100%);\n }\n .w-4 {\n width: calc(var(--spacing) * 4);\n }\n .w-5 {\n width: calc(var(--spacing) * 5);\n }\n .w-6 {\n width: calc(var(--spacing) * 6);\n }\n .w-7 {\n width: calc(var(--spacing) * 7);\n }\n .w-8 {\n width: calc(var(--spacing) * 8);\n }\n .w-9 {\n width: calc(var(--spacing) * 9);\n }\n .w-10 {\n width: calc(var(--spacing) * 10);\n }\n .w-11 {\n width: calc(var(--spacing) * 11);\n }\n .w-12 {\n width: calc(var(--spacing) * 12);\n }\n .w-14 {\n width: calc(var(--spacing) * 14);\n }\n .w-16 {\n width: calc(var(--spacing) * 16);\n }\n .w-20 {\n width: calc(var(--spacing) * 20);\n }\n .w-24 {\n width: calc(var(--spacing) * 24);\n }\n .w-28 {\n width: calc(var(--spacing) * 28);\n }\n .w-\\[100px\\] {\n width: 100px;\n }\n .w-auto {\n width: auto;\n }\n .w-fit {\n width: fit-content;\n }\n .w-full {\n width: 100%;\n }\n .w-px {\n width: 1px;\n }\n .max-w-\\(--skeleton-width\\) {\n max-width: var(--skeleton-width);\n }\n .max-w-2xl {\n max-width: var(--container-2xl);\n }\n .max-w-3xl {\n max-width: var(--container-3xl);\n }\n .max-w-4xl {\n max-width: var(--container-4xl);\n }\n .max-w-5xl {\n max-width: var(--container-5xl);\n }\n .max-w-6xl {\n max-width: var(--container-6xl);\n }\n .max-w-7xl {\n max-width: var(--container-7xl);\n }\n .max-w-\\[120px\\] {\n max-width: 120px;\n }\n .max-w-\\[140px\\] {\n max-width: 140px;\n }\n .max-w-\\[calc\\(100\\%-2rem\\)\\] {\n max-width: calc(100% - 2rem);\n }\n .max-w-full {\n max-width: 100%;\n }\n .max-w-lg {\n max-width: var(--container-lg);\n }\n .max-w-md {\n max-width: var(--container-md);\n }\n .max-w-sm {\n max-width: var(--container-sm);\n }\n .max-w-xl {\n max-width: var(--container-xl);\n }\n .max-w-xs {\n max-width: var(--container-xs);\n }\n .min-w-0 {\n min-width: calc(var(--spacing) * 0);\n }\n .min-w-5 {\n min-width: calc(var(--spacing) * 5);\n }\n .min-w-56 {\n min-width: calc(var(--spacing) * 56);\n }\n .min-w-\\[8rem\\] {\n min-width: 8rem;\n }\n .min-w-\\[var\\(--radix-select-trigger-width\\)\\] {\n min-width: var(--radix-select-trigger-width);\n }\n .min-w-fit {\n min-width: fit-content;\n }\n .flex-1 {\n flex: 1;\n }\n .shrink-0 {\n flex-shrink: 0;\n }\n .caption-bottom {\n caption-side: bottom;\n }\n .origin-\\(--radix-dropdown-menu-content-transform-origin\\) {\n transform-origin: var(--radix-dropdown-menu-content-transform-origin);\n }\n .origin-\\(--radix-select-content-transform-origin\\) {\n transform-origin: var(--radix-select-content-transform-origin);\n }\n .origin-\\(--radix-tooltip-content-transform-origin\\) {\n transform-origin: var(--radix-tooltip-content-transform-origin);\n }\n .-translate-x-1\\/2 {\n --tw-translate-x: calc(calc(1 / 2 * 100%) * -1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .-translate-x-px {\n --tw-translate-x: -1px;\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .translate-x-1 {\n --tw-translate-x: calc(var(--spacing) * 1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .translate-x-6 {\n --tw-translate-x: calc(var(--spacing) * 6);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .translate-x-\\[-50\\%\\] {\n --tw-translate-x: -50%;\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .translate-x-px {\n --tw-translate-x: 1px;\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .-translate-y-1\\/2 {\n --tw-translate-y: calc(calc(1 / 2 * 100%) * -1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .translate-y-\\[-50\\%\\] {\n --tw-translate-y: -50%;\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .translate-y-\\[calc\\(-50\\%_-_2px\\)\\] {\n --tw-translate-y: calc(-50% - 2px);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .rotate-45 {\n rotate: 45deg;\n }\n .rotate-180 {\n rotate: 180deg;\n }\n .animate-in {\n animation: enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none);\n }\n .animate-pulse {\n animation: var(--animate-pulse);\n }\n .animate-spin {\n animation: var(--animate-spin);\n }\n .cursor-default {\n cursor: default;\n }\n .cursor-pointer {\n cursor: pointer;\n }\n .resize-none {\n resize: none;\n }\n .resize-y {\n resize: vertical;\n }\n .scroll-my-1 {\n scroll-margin-block: calc(var(--spacing) * 1);\n }\n .list-disc {\n list-style-type: disc;\n }\n .appearance-none {\n appearance: none;\n }\n .auto-rows-min {\n grid-auto-rows: min-content;\n }\n .grid-cols-1 {\n grid-template-columns: repeat(1, minmax(0, 1fr));\n }\n .grid-cols-2 {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n .grid-cols-3 {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n .grid-cols-\\[3rem_1fr_1fr_auto\\] {\n grid-template-columns: 3rem 1fr 1fr auto;\n }\n .grid-rows-\\[auto_auto\\] {\n grid-template-rows: auto auto;\n }\n .flex-col {\n flex-direction: column;\n }\n .flex-col-reverse {\n flex-direction: column-reverse;\n }\n .flex-row {\n flex-direction: row;\n }\n .flex-wrap {\n flex-wrap: wrap;\n }\n .place-content-center {\n place-content: center;\n }\n .items-center {\n align-items: center;\n }\n .items-end {\n align-items: flex-end;\n }\n .items-start {\n align-items: flex-start;\n }\n .items-stretch {\n align-items: stretch;\n }\n .justify-between {\n justify-content: space-between;\n }\n .justify-center {\n justify-content: center;\n }\n .justify-end {\n justify-content: flex-end;\n }\n .justify-start {\n justify-content: flex-start;\n }\n .gap-0\\.5 {\n gap: calc(var(--spacing) * 0.5);\n }\n .gap-1 {\n gap: calc(var(--spacing) * 1);\n }\n .gap-1\\.5 {\n gap: calc(var(--spacing) * 1.5);\n }\n .gap-2 {\n gap: calc(var(--spacing) * 2);\n }\n .gap-2\\.5 {\n gap: calc(var(--spacing) * 2.5);\n }\n .gap-3 {\n gap: calc(var(--spacing) * 3);\n }\n .gap-4 {\n gap: calc(var(--spacing) * 4);\n }\n .gap-5 {\n gap: calc(var(--spacing) * 5);\n }\n .gap-6 {\n gap: calc(var(--spacing) * 6);\n }\n .gap-7 {\n gap: calc(var(--spacing) * 7);\n }\n .gap-8 {\n gap: calc(var(--spacing) * 8);\n }\n .gap-10 {\n gap: calc(var(--spacing) * 10);\n }\n .space-y-1\\.5 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .space-y-2 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .space-y-2\\.5 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 2.5) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 2.5) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .space-y-3 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .space-y-4 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .space-y-8 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 8) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 8) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .space-y-10 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 10) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 10) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .-space-x-2 {\n :where(& > :not(:last-child)) {\n --tw-space-x-reverse: 0;\n margin-inline-start: calc(calc(var(--spacing) * -2) * var(--tw-space-x-reverse));\n margin-inline-end: calc(calc(var(--spacing) * -2) * calc(1 - var(--tw-space-x-reverse)));\n }\n }\n .divide-y {\n :where(& > :not(:last-child)) {\n --tw-divide-y-reverse: 0;\n border-bottom-style: var(--tw-border-style);\n border-top-style: var(--tw-border-style);\n border-top-width: calc(1px * var(--tw-divide-y-reverse));\n border-bottom-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));\n }\n }\n .divide-gray-50 {\n :where(& > :not(:last-child)) {\n border-color: var(--color-gray-50);\n }\n }\n .self-center {\n align-self: center;\n }\n .self-end {\n align-self: flex-end;\n }\n .self-start {\n align-self: flex-start;\n }\n .justify-self-end {\n justify-self: flex-end;\n }\n .truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .overflow-auto {\n overflow: auto;\n }\n .overflow-hidden {\n overflow: hidden;\n }\n .overflow-x-auto {\n overflow-x: auto;\n }\n .overflow-x-hidden {\n overflow-x: hidden;\n }\n .overflow-y-auto {\n overflow-y: auto;\n }\n .rounded {\n border-radius: 0.25rem;\n }\n .rounded-2xl {\n border-radius: calc(var(--radius) + 8px);\n }\n .rounded-\\[2px\\] {\n border-radius: 2px;\n }\n .rounded-\\[4px\\] {\n border-radius: 4px;\n }\n .rounded-full {\n border-radius: calc(infinity * 1px);\n }\n .rounded-lg {\n border-radius: var(--radius);\n }\n .rounded-md {\n border-radius: calc(var(--radius) - 2px);\n }\n .rounded-sm {\n border-radius: calc(var(--radius) - 4px);\n }\n .rounded-xl {\n border-radius: calc(var(--radius) + 4px);\n }\n .rounded-xs {\n border-radius: var(--radius-xs);\n }\n .border {\n border-style: var(--tw-border-style);\n border-width: 1px;\n }\n .border-0 {\n border-style: var(--tw-border-style);\n border-width: 0px;\n }\n .border-2 {\n border-style: var(--tw-border-style);\n border-width: 2px;\n }\n .border-\\[1\\.5px\\] {\n border-style: var(--tw-border-style);\n border-width: 1.5px;\n }\n .border-t {\n border-top-style: var(--tw-border-style);\n border-top-width: 1px;\n }\n .border-r {\n border-right-style: var(--tw-border-style);\n border-right-width: 1px;\n }\n .border-b {\n border-bottom-style: var(--tw-border-style);\n border-bottom-width: 1px;\n }\n .border-b-2 {\n border-bottom-style: var(--tw-border-style);\n border-bottom-width: 2px;\n }\n .border-l {\n border-left-style: var(--tw-border-style);\n border-left-width: 1px;\n }\n .border-dashed {\n --tw-border-style: dashed;\n border-style: dashed;\n }\n .border-\\(--color-border\\) {\n border-color: var(--color-border);\n }\n .border-amber-200 {\n border-color: var(--color-amber-200);\n }\n .border-blue-100 {\n border-color: var(--color-blue-100);\n }\n .border-border {\n border-color: var(--border);\n }\n .border-border\\/50 {\n border-color: var(--border);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--border) 50%, transparent);\n }\n }\n .border-gray-50 {\n border-color: var(--color-gray-50);\n }\n .border-gray-100 {\n border-color: var(--color-gray-100);\n }\n .border-gray-200 {\n border-color: var(--color-gray-200);\n }\n .border-green-200 {\n border-color: var(--color-green-200);\n }\n .border-green-600 {\n border-color: var(--color-green-600);\n }\n .border-green-600\\/40 {\n border-color: color-mix(in srgb, oklch(62.7% 0.194 149.214) 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-green-600) 40%, transparent);\n }\n }\n .border-green-700 {\n border-color: var(--color-green-700);\n }\n .border-green-800\\/60 {\n border-color: color-mix(in srgb, oklch(44.8% 0.119 151.328) 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-green-800) 60%, transparent);\n }\n }\n .border-input {\n border-color: var(--input);\n }\n .border-muted-foreground\\/30 {\n border-color: var(--muted-foreground);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--muted-foreground) 30%, transparent);\n }\n }\n .border-red-100 {\n border-color: var(--color-red-100);\n }\n .border-red-200 {\n border-color: var(--color-red-200);\n }\n .border-sidebar-border {\n border-color: var(--sidebar-border);\n }\n .border-transparent {\n border-color: transparent;\n }\n .border-white {\n border-color: var(--color-white);\n }\n .border-white\\/10 {\n border-color: color-mix(in srgb, #fff 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-white) 10%, transparent);\n }\n }\n .border-white\\/20 {\n border-color: color-mix(in srgb, #fff 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-white) 20%, transparent);\n }\n }\n .border-white\\/30 {\n border-color: color-mix(in srgb, #fff 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-white) 30%, transparent);\n }\n }\n .border-t-transparent {\n border-top-color: transparent;\n }\n .bg-\\(--color-bg\\) {\n background-color: var(--color-bg);\n }\n .bg-accent {\n background-color: var(--accent);\n }\n .bg-amber-50 {\n background-color: var(--color-amber-50);\n }\n .bg-amber-400 {\n background-color: var(--color-amber-400);\n }\n .bg-background {\n background-color: var(--background);\n }\n .bg-black {\n background-color: var(--color-black);\n }\n .bg-black\\/0 {\n background-color: color-mix(in srgb, #000 0%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 0%, transparent);\n }\n }\n .bg-black\\/30 {\n background-color: color-mix(in srgb, #000 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 30%, transparent);\n }\n }\n .bg-black\\/40 {\n background-color: color-mix(in srgb, #000 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 40%, transparent);\n }\n }\n .bg-black\\/50 {\n background-color: color-mix(in srgb, #000 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 50%, transparent);\n }\n }\n .bg-blue-50 {\n background-color: var(--color-blue-50);\n }\n .bg-blue-100 {\n background-color: var(--color-blue-100);\n }\n .bg-blue-500 {\n background-color: var(--color-blue-500);\n }\n .bg-border {\n background-color: var(--border);\n }\n .bg-card {\n background-color: var(--card);\n }\n .bg-destructive {\n background-color: var(--destructive);\n }\n .bg-destructive\\/10 {\n background-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--destructive) 10%, transparent);\n }\n }\n .bg-foreground {\n background-color: var(--foreground);\n }\n .bg-gray-50 {\n background-color: var(--color-gray-50);\n }\n .bg-gray-50\\/40 {\n background-color: color-mix(in srgb, oklch(98.5% 0.002 247.839) 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-gray-50) 40%, transparent);\n }\n }\n .bg-gray-100 {\n background-color: var(--color-gray-100);\n }\n .bg-gray-200 {\n background-color: var(--color-gray-200);\n }\n .bg-gray-300 {\n background-color: var(--color-gray-300);\n }\n .bg-gray-500 {\n background-color: var(--color-gray-500);\n }\n .bg-gray-900 {\n background-color: var(--color-gray-900);\n }\n .bg-green-50 {\n background-color: var(--color-green-50);\n }\n .bg-green-50\\/50 {\n background-color: color-mix(in srgb, oklch(98.2% 0.018 155.826) 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-green-50) 50%, transparent);\n }\n }\n .bg-green-100 {\n background-color: var(--color-green-100);\n }\n .bg-green-400 {\n background-color: var(--color-green-400);\n }\n .bg-green-500 {\n background-color: var(--color-green-500);\n }\n .bg-green-600 {\n background-color: var(--color-green-600);\n }\n .bg-green-700 {\n background-color: var(--color-green-700);\n }\n .bg-green-700\\/30 {\n background-color: color-mix(in srgb, oklch(52.7% 0.154 150.069) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-green-700) 30%, transparent);\n }\n }\n .bg-green-700\\/90 {\n background-color: color-mix(in srgb, oklch(52.7% 0.154 150.069) 90%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-green-700) 90%, transparent);\n }\n }\n .bg-green-800\\/60 {\n background-color: color-mix(in srgb, oklch(44.8% 0.119 151.328) 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-green-800) 60%, transparent);\n }\n }\n .bg-green-900 {\n background-color: var(--color-green-900);\n }\n .bg-green-900\\/60 {\n background-color: color-mix(in srgb, oklch(39.3% 0.095 152.535) 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-green-900) 60%, transparent);\n }\n }\n .bg-green-950 {\n background-color: var(--color-green-950);\n }\n .bg-muted {\n background-color: var(--muted);\n }\n .bg-muted\\/10 {\n background-color: var(--muted);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--muted) 10%, transparent);\n }\n }\n .bg-muted\\/20 {\n background-color: var(--muted);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--muted) 20%, transparent);\n }\n }\n .bg-muted\\/30 {\n background-color: var(--muted);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--muted) 30%, transparent);\n }\n }\n .bg-muted\\/40 {\n background-color: var(--muted);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--muted) 40%, transparent);\n }\n }\n .bg-muted\\/50 {\n background-color: var(--muted);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--muted) 50%, transparent);\n }\n }\n .bg-orange-100 {\n background-color: var(--color-orange-100);\n }\n .bg-orange-500 {\n background-color: var(--color-orange-500);\n }\n .bg-orange-600 {\n background-color: var(--color-orange-600);\n }\n .bg-pink-500 {\n background-color: var(--color-pink-500);\n }\n .bg-popover {\n background-color: var(--popover);\n }\n .bg-primary {\n background-color: var(--primary);\n }\n .bg-purple-100 {\n background-color: var(--color-purple-100);\n }\n .bg-purple-500 {\n background-color: var(--color-purple-500);\n }\n .bg-red-50 {\n background-color: var(--color-red-50);\n }\n .bg-red-100 {\n background-color: var(--color-red-100);\n }\n .bg-red-600 {\n background-color: var(--color-red-600);\n }\n .bg-secondary {\n background-color: var(--secondary);\n }\n .bg-sidebar {\n background-color: var(--sidebar);\n }\n .bg-sidebar-border {\n background-color: var(--sidebar-border);\n }\n .bg-teal-500 {\n background-color: var(--color-teal-500);\n }\n .bg-transparent {\n background-color: transparent;\n }\n .bg-white {\n background-color: var(--color-white);\n }\n .bg-white\\/10 {\n background-color: color-mix(in srgb, #fff 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 10%, transparent);\n }\n }\n .bg-white\\/15 {\n background-color: color-mix(in srgb, #fff 15%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 15%, transparent);\n }\n }\n .bg-white\\/30 {\n background-color: color-mix(in srgb, #fff 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 30%, transparent);\n }\n }\n .bg-yellow-50 {\n background-color: var(--color-yellow-50);\n }\n .bg-yellow-100 {\n background-color: var(--color-yellow-100);\n }\n .bg-yellow-500 {\n background-color: var(--color-yellow-500);\n }\n .bg-zinc-100 {\n background-color: var(--color-zinc-100);\n }\n .bg-zinc-200 {\n background-color: var(--color-zinc-200);\n }\n .bg-zinc-300 {\n background-color: var(--color-zinc-300);\n }\n .bg-zinc-500 {\n background-color: var(--color-zinc-500);\n }\n .bg-gradient-to-b {\n --tw-gradient-position: to bottom in oklab;\n background-image: linear-gradient(var(--tw-gradient-stops));\n }\n .bg-gradient-to-br {\n --tw-gradient-position: to bottom right in oklab;\n background-image: linear-gradient(var(--tw-gradient-stops));\n }\n .bg-gradient-to-r {\n --tw-gradient-position: to right in oklab;\n background-image: linear-gradient(var(--tw-gradient-stops));\n }\n .bg-gradient-to-t {\n --tw-gradient-position: to top in oklab;\n background-image: linear-gradient(var(--tw-gradient-stops));\n }\n .from-black\\/30 {\n --tw-gradient-from: color-mix(in srgb, #000 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-from: color-mix(in oklab, var(--color-black) 30%, transparent);\n }\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .from-black\\/60 {\n --tw-gradient-from: color-mix(in srgb, #000 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-from: color-mix(in oklab, var(--color-black) 60%, transparent);\n }\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .from-gray-100 {\n --tw-gradient-from: var(--color-gray-100);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .from-gray-900 {\n --tw-gradient-from: var(--color-gray-900);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .from-gray-900\\/40 {\n --tw-gradient-from: color-mix(in srgb, oklch(21% 0.034 264.665) 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-from: color-mix(in oklab, var(--color-gray-900) 40%, transparent);\n }\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .from-gray-950 {\n --tw-gradient-from: var(--color-gray-950);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .from-green-100 {\n --tw-gradient-from: var(--color-green-100);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .from-green-500 {\n --tw-gradient-from: var(--color-green-500);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .from-green-800 {\n --tw-gradient-from: var(--color-green-800);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .from-green-900 {\n --tw-gradient-from: var(--color-green-900);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .from-green-950 {\n --tw-gradient-from: var(--color-green-950);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .via-black\\/20 {\n --tw-gradient-via: color-mix(in srgb, #000 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-via: color-mix(in oklab, var(--color-black) 20%, transparent);\n }\n --tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-via-stops);\n }\n .via-gray-900 {\n --tw-gradient-via: var(--color-gray-900);\n --tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-via-stops);\n }\n .via-green-900 {\n --tw-gradient-via: var(--color-green-900);\n --tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-via-stops);\n }\n .via-green-950\\/30 {\n --tw-gradient-via: color-mix(in srgb, oklch(26.6% 0.065 152.934) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-via: color-mix(in oklab, var(--color-green-950) 30%, transparent);\n }\n --tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-via-stops);\n }\n .to-black\\/50 {\n --tw-gradient-to: color-mix(in srgb, #000 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-to: color-mix(in oklab, var(--color-black) 50%, transparent);\n }\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-black\\/60 {\n --tw-gradient-to: color-mix(in srgb, #000 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-to: color-mix(in oklab, var(--color-black) 60%, transparent);\n }\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-gray-900 {\n --tw-gradient-to: var(--color-gray-900);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-gray-950 {\n --tw-gradient-to: var(--color-gray-950);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-green-100 {\n --tw-gradient-to: var(--color-green-100);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-green-200 {\n --tw-gradient-to: var(--color-green-200);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-green-700 {\n --tw-gradient-to: var(--color-green-700);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-green-800 {\n --tw-gradient-to: var(--color-green-800);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-green-900 {\n --tw-gradient-to: var(--color-green-900);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-green-950 {\n --tw-gradient-to: var(--color-green-950);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-transparent {\n --tw-gradient-to: transparent;\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .fill-current {\n fill: currentcolor;\n }\n .fill-foreground {\n fill: var(--foreground);\n }\n .object-contain {\n object-fit: contain;\n }\n .object-cover {\n object-fit: cover;\n }\n .p-0 {\n padding: calc(var(--spacing) * 0);\n }\n .p-1 {\n padding: calc(var(--spacing) * 1);\n }\n .p-1\\.5 {\n padding: calc(var(--spacing) * 1.5);\n }\n .p-2 {\n padding: calc(var(--spacing) * 2);\n }\n .p-3 {\n padding: calc(var(--spacing) * 3);\n }\n .p-4 {\n padding: calc(var(--spacing) * 4);\n }\n .p-5 {\n padding: calc(var(--spacing) * 5);\n }\n .p-6 {\n padding: calc(var(--spacing) * 6);\n }\n .p-\\[3px\\] {\n padding: 3px;\n }\n .px-1 {\n padding-inline: calc(var(--spacing) * 1);\n }\n .px-1\\.5 {\n padding-inline: calc(var(--spacing) * 1.5);\n }\n .px-2 {\n padding-inline: calc(var(--spacing) * 2);\n }\n .px-2\\.5 {\n padding-inline: calc(var(--spacing) * 2.5);\n }\n .px-3 {\n padding-inline: calc(var(--spacing) * 3);\n }\n .px-4 {\n padding-inline: calc(var(--spacing) * 4);\n }\n .px-5 {\n padding-inline: calc(var(--spacing) * 5);\n }\n .px-6 {\n padding-inline: calc(var(--spacing) * 6);\n }\n .py-0\\.5 {\n padding-block: calc(var(--spacing) * 0.5);\n }\n .py-1 {\n padding-block: calc(var(--spacing) * 1);\n }\n .py-1\\.5 {\n padding-block: calc(var(--spacing) * 1.5);\n }\n .py-2 {\n padding-block: calc(var(--spacing) * 2);\n }\n .py-2\\.5 {\n padding-block: calc(var(--spacing) * 2.5);\n }\n .py-3 {\n padding-block: calc(var(--spacing) * 3);\n }\n .py-3\\.5 {\n padding-block: calc(var(--spacing) * 3.5);\n }\n .py-4 {\n padding-block: calc(var(--spacing) * 4);\n }\n .py-5 {\n padding-block: calc(var(--spacing) * 5);\n }\n .py-6 {\n padding-block: calc(var(--spacing) * 6);\n }\n .py-8 {\n padding-block: calc(var(--spacing) * 8);\n }\n .py-10 {\n padding-block: calc(var(--spacing) * 10);\n }\n .py-12 {\n padding-block: calc(var(--spacing) * 12);\n }\n .py-16 {\n padding-block: calc(var(--spacing) * 16);\n }\n .py-20 {\n padding-block: calc(var(--spacing) * 20);\n }\n .py-24 {\n padding-block: calc(var(--spacing) * 24);\n }\n .py-32 {\n padding-block: calc(var(--spacing) * 32);\n }\n .pt-1 {\n padding-top: calc(var(--spacing) * 1);\n }\n .pt-2 {\n padding-top: calc(var(--spacing) * 2);\n }\n .pt-3 {\n padding-top: calc(var(--spacing) * 3);\n }\n .pt-4 {\n padding-top: calc(var(--spacing) * 4);\n }\n .pt-5 {\n padding-top: calc(var(--spacing) * 5);\n }\n .pt-8 {\n padding-top: calc(var(--spacing) * 8);\n }\n .pt-16 {\n padding-top: calc(var(--spacing) * 16);\n }\n .pr-2 {\n padding-right: calc(var(--spacing) * 2);\n }\n .pr-3 {\n padding-right: calc(var(--spacing) * 3);\n }\n .pr-8 {\n padding-right: calc(var(--spacing) * 8);\n }\n .pb-0 {\n padding-bottom: calc(var(--spacing) * 0);\n }\n .pb-2 {\n padding-bottom: calc(var(--spacing) * 2);\n }\n .pb-3 {\n padding-bottom: calc(var(--spacing) * 3);\n }\n .pb-4 {\n padding-bottom: calc(var(--spacing) * 4);\n }\n .pb-6 {\n padding-bottom: calc(var(--spacing) * 6);\n }\n .pb-8 {\n padding-bottom: calc(var(--spacing) * 8);\n }\n .pb-10 {\n padding-bottom: calc(var(--spacing) * 10);\n }\n .pl-2 {\n padding-left: calc(var(--spacing) * 2);\n }\n .pl-3 {\n padding-left: calc(var(--spacing) * 3);\n }\n .pl-8 {\n padding-left: calc(var(--spacing) * 8);\n }\n .pl-9 {\n padding-left: calc(var(--spacing) * 9);\n }\n .text-center {\n text-align: center;\n }\n .text-left {\n text-align: left;\n }\n .text-right {\n text-align: right;\n }\n .align-middle {\n vertical-align: middle;\n }\n .font-mono {\n font-family: var(--font-geist-mono);\n }\n .font-sans {\n font-family: var(--font-geist-sans);\n }\n .text-2xl {\n font-size: var(--text-2xl);\n line-height: var(--tw-leading, var(--text-2xl--line-height));\n }\n .text-3xl {\n font-size: var(--text-3xl);\n line-height: var(--tw-leading, var(--text-3xl--line-height));\n }\n .text-4xl {\n font-size: var(--text-4xl);\n line-height: var(--tw-leading, var(--text-4xl--line-height));\n }\n .text-5xl {\n font-size: var(--text-5xl);\n line-height: var(--tw-leading, var(--text-5xl--line-height));\n }\n .text-6xl {\n font-size: var(--text-6xl);\n line-height: var(--tw-leading, var(--text-6xl--line-height));\n }\n .text-base {\n font-size: var(--text-base);\n line-height: var(--tw-leading, var(--text-base--line-height));\n }\n .text-lg {\n font-size: var(--text-lg);\n line-height: var(--tw-leading, var(--text-lg--line-height));\n }\n .text-sm {\n font-size: var(--text-sm);\n line-height: var(--tw-leading, var(--text-sm--line-height));\n }\n .text-xl {\n font-size: var(--text-xl);\n line-height: var(--tw-leading, var(--text-xl--line-height));\n }\n .text-xs {\n font-size: var(--text-xs);\n line-height: var(--tw-leading, var(--text-xs--line-height));\n }\n .text-\\[10px\\] {\n font-size: 10px;\n }\n .leading-none {\n --tw-leading: 1;\n line-height: 1;\n }\n .leading-normal {\n --tw-leading: var(--leading-normal);\n line-height: var(--leading-normal);\n }\n .leading-relaxed {\n --tw-leading: var(--leading-relaxed);\n line-height: var(--leading-relaxed);\n }\n .leading-snug {\n --tw-leading: var(--leading-snug);\n line-height: var(--leading-snug);\n }\n .leading-tight {\n --tw-leading: var(--leading-tight);\n line-height: var(--leading-tight);\n }\n .font-bold {\n --tw-font-weight: var(--font-weight-bold);\n font-weight: var(--font-weight-bold);\n }\n .font-medium {\n --tw-font-weight: var(--font-weight-medium);\n font-weight: var(--font-weight-medium);\n }\n .font-normal {\n --tw-font-weight: var(--font-weight-normal);\n font-weight: var(--font-weight-normal);\n }\n .font-semibold {\n --tw-font-weight: var(--font-weight-semibold);\n font-weight: var(--font-weight-semibold);\n }\n .tracking-tight {\n --tw-tracking: var(--tracking-tight);\n letter-spacing: var(--tracking-tight);\n }\n .tracking-wide {\n --tw-tracking: var(--tracking-wide);\n letter-spacing: var(--tracking-wide);\n }\n .tracking-wider {\n --tw-tracking: var(--tracking-wider);\n letter-spacing: var(--tracking-wider);\n }\n .tracking-widest {\n --tw-tracking: var(--tracking-widest);\n letter-spacing: var(--tracking-widest);\n }\n .text-balance {\n text-wrap: balance;\n }\n .whitespace-nowrap {\n white-space: nowrap;\n }\n .whitespace-pre-line {\n white-space: pre-line;\n }\n .whitespace-pre-wrap {\n white-space: pre-wrap;\n }\n .text-amber-700 {\n color: var(--color-amber-700);\n }\n .text-background {\n color: var(--background);\n }\n .text-blue-600 {\n color: var(--color-blue-600);\n }\n .text-blue-700 {\n color: var(--color-blue-700);\n }\n .text-card-foreground {\n color: var(--card-foreground);\n }\n .text-current {\n color: currentcolor;\n }\n .text-destructive {\n color: var(--destructive);\n }\n .text-foreground {\n color: var(--foreground);\n }\n .text-foreground\\/60 {\n color: var(--foreground);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--foreground) 60%, transparent);\n }\n }\n .text-gray-200 {\n color: var(--color-gray-200);\n }\n .text-gray-300 {\n color: var(--color-gray-300);\n }\n .text-gray-400 {\n color: var(--color-gray-400);\n }\n .text-gray-500 {\n color: var(--color-gray-500);\n }\n .text-gray-600 {\n color: var(--color-gray-600);\n }\n .text-gray-700 {\n color: var(--color-gray-700);\n }\n .text-gray-800 {\n color: var(--color-gray-800);\n }\n .text-gray-900 {\n color: var(--color-gray-900);\n }\n .text-green-100 {\n color: var(--color-green-100);\n }\n .text-green-200 {\n color: var(--color-green-200);\n }\n .text-green-300 {\n color: var(--color-green-300);\n }\n .text-green-300\\/60 {\n color: color-mix(in srgb, oklch(87.1% 0.15 154.449) 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-green-300) 60%, transparent);\n }\n }\n .text-green-300\\/70 {\n color: color-mix(in srgb, oklch(87.1% 0.15 154.449) 70%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-green-300) 70%, transparent);\n }\n }\n .text-green-400 {\n color: var(--color-green-400);\n }\n .text-green-600 {\n color: var(--color-green-600);\n }\n .text-green-700 {\n color: var(--color-green-700);\n }\n .text-green-800 {\n color: var(--color-green-800);\n }\n .text-green-900 {\n color: var(--color-green-900);\n }\n .text-muted-foreground {\n color: var(--muted-foreground);\n }\n .text-orange-600 {\n color: var(--color-orange-600);\n }\n .text-orange-700 {\n color: var(--color-orange-700);\n }\n .text-popover-foreground {\n color: var(--popover-foreground);\n }\n .text-primary {\n color: var(--primary);\n }\n .text-primary-foreground {\n color: var(--primary-foreground);\n }\n .text-purple-700 {\n color: var(--color-purple-700);\n }\n .text-red-400 {\n color: var(--color-red-400);\n }\n .text-red-500 {\n color: var(--color-red-500);\n }\n .text-red-600 {\n color: var(--color-red-600);\n }\n .text-red-700 {\n color: var(--color-red-700);\n }\n .text-secondary-foreground {\n color: var(--secondary-foreground);\n }\n .text-sidebar-foreground {\n color: var(--sidebar-foreground);\n }\n .text-sidebar-foreground\\/70 {\n color: var(--sidebar-foreground);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--sidebar-foreground) 70%, transparent);\n }\n }\n .text-white {\n color: var(--color-white);\n }\n .text-white\\/20 {\n color: color-mix(in srgb, #fff 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 20%, transparent);\n }\n }\n .text-white\\/50 {\n color: color-mix(in srgb, #fff 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 50%, transparent);\n }\n }\n .text-white\\/70 {\n color: color-mix(in srgb, #fff 70%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 70%, transparent);\n }\n }\n .text-white\\/80 {\n color: color-mix(in srgb, #fff 80%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 80%, transparent);\n }\n }\n .text-white\\/85 {\n color: color-mix(in srgb, #fff 85%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 85%, transparent);\n }\n }\n .text-yellow-600 {\n color: var(--color-yellow-600);\n }\n .text-yellow-700 {\n color: var(--color-yellow-700);\n }\n .text-zinc-500 {\n color: var(--color-zinc-500);\n }\n .text-zinc-600 {\n color: var(--color-zinc-600);\n }\n .capitalize {\n text-transform: capitalize;\n }\n .uppercase {\n text-transform: uppercase;\n }\n .italic {\n font-style: italic;\n }\n .tabular-nums {\n --tw-numeric-spacing: tabular-nums;\n font-variant-numeric: var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,);\n }\n .underline {\n text-decoration-line: underline;\n }\n .underline-offset-4 {\n text-underline-offset: 4px;\n }\n .antialiased {\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n }\n .opacity-0 {\n opacity: 0%;\n }\n .opacity-20 {\n opacity: 20%;\n }\n .opacity-30 {\n opacity: 30%;\n }\n .opacity-40 {\n opacity: 40%;\n }\n .opacity-50 {\n opacity: 50%;\n }\n .opacity-60 {\n opacity: 60%;\n }\n .opacity-70 {\n opacity: 70%;\n }\n .opacity-80 {\n opacity: 80%;\n }\n .shadow {\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-\\[0_0_0_1px_hsl\\(var\\(--sidebar-border\\)\\)\\] {\n --tw-shadow: 0 0 0 1px var(--tw-shadow-color, hsl(var(--sidebar-border)));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-lg {\n --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-md {\n --tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 2px 4px -2px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-none {\n --tw-shadow: 0 0 #0000;\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-sm {\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-xl {\n --tw-shadow: 0 20px 25px -5px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 8px 10px -6px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-xs {\n --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .ring-1 {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .ring-2 {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .ring-background {\n --tw-ring-color: var(--background);\n }\n .ring-current {\n --tw-ring-color: currentcolor;\n }\n .ring-sidebar-ring {\n --tw-ring-color: var(--sidebar-ring);\n }\n .ring-offset-background {\n --tw-ring-offset-color: var(--background);\n }\n .outline-hidden {\n --tw-outline-style: none;\n outline-style: none;\n @media (forced-colors: active) {\n outline: 2px solid transparent;\n outline-offset: 2px;\n }\n }\n .outline {\n outline-style: var(--tw-outline-style);\n outline-width: 1px;\n }\n .backdrop-blur-sm {\n --tw-backdrop-blur: blur(var(--blur-sm));\n -webkit-backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);\n backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);\n }\n .transition {\n transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter, display, content-visibility, overlay, pointer-events;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-\\[color\\,box-shadow\\] {\n transition-property: color,box-shadow;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-\\[left\\,right\\,width\\] {\n transition-property: left,right,width;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-\\[margin\\,opacity\\] {\n transition-property: margin,opacity;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-\\[width\\,height\\,padding\\] {\n transition-property: width,height,padding;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-\\[width\\] {\n transition-property: width;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-all {\n transition-property: all;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-colors {\n transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-opacity {\n transition-property: opacity;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-shadow {\n transition-property: box-shadow;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-transform {\n transition-property: transform, translate, scale, rotate;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-none {\n transition-property: none;\n }\n .duration-200 {\n --tw-duration: 200ms;\n transition-duration: 200ms;\n }\n .duration-300 {\n --tw-duration: 300ms;\n transition-duration: 300ms;\n }\n .ease-in-out {\n --tw-ease: var(--ease-in-out);\n transition-timing-function: var(--ease-in-out);\n }\n .ease-linear {\n --tw-ease: linear;\n transition-timing-function: linear;\n }\n .fade-in-0 {\n --tw-enter-opacity: calc(0/100);\n --tw-enter-opacity: 0;\n }\n .outline-none {\n --tw-outline-style: none;\n outline-style: none;\n }\n .select-none {\n -webkit-user-select: none;\n user-select: none;\n }\n .zoom-in-95 {\n --tw-enter-scale: calc(95*1%);\n --tw-enter-scale: .95;\n }\n .group-focus-within\\/menu-item\\:opacity-100 {\n &:is(:where(.group\\/menu-item):focus-within *) {\n opacity: 100%;\n }\n }\n .group-hover\\:w-5 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n width: calc(var(--spacing) * 5);\n }\n }\n }\n .group-hover\\:border-green-400 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n border-color: var(--color-green-400);\n }\n }\n }\n .group-hover\\:bg-black\\/40 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n background-color: color-mix(in srgb, #000 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 40%, transparent);\n }\n }\n }\n }\n .group-hover\\:bg-green-800 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n background-color: var(--color-green-800);\n }\n }\n }\n .group-hover\\:text-green-600 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n color: var(--color-green-600);\n }\n }\n }\n .group-hover\\:text-green-800 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n color: var(--color-green-800);\n }\n }\n }\n .group-hover\\:opacity-100 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n opacity: 100%;\n }\n }\n }\n .group-hover\\/menu-item\\:opacity-100 {\n &:is(:where(.group\\/menu-item):hover *) {\n @media (hover: hover) {\n opacity: 100%;\n }\n }\n }\n .group-has-data-\\[orientation\\=horizontal\\]\\/field\\:text-balance {\n &:is(:where(.group\\/field):has(*[data-orientation=\"horizontal\"]) *) {\n text-wrap: balance;\n }\n }\n .group-has-data-\\[sidebar\\=menu-action\\]\\/menu-item\\:pr-8 {\n &:is(:where(.group\\/menu-item):has(*[data-sidebar=\"menu-action\"]) *) {\n padding-right: calc(var(--spacing) * 8);\n }\n }\n .group-has-data-\\[size\\=lg\\]\\/avatar-group\\:size-10 {\n &:is(:where(.group\\/avatar-group):has(*[data-size=\"lg\"]) *) {\n width: calc(var(--spacing) * 10);\n height: calc(var(--spacing) * 10);\n }\n }\n .group-has-data-\\[size\\=sm\\]\\/avatar-group\\:size-6 {\n &:is(:where(.group\\/avatar-group):has(*[data-size=\"sm\"]) *) {\n width: calc(var(--spacing) * 6);\n height: calc(var(--spacing) * 6);\n }\n }\n .group-data-\\[collapsible\\=icon\\]\\:-mt-8 {\n &:is(:where(.group)[data-collapsible=\"icon\"] *) {\n margin-top: calc(var(--spacing) * -8);\n }\n }\n .group-data-\\[collapsible\\=icon\\]\\:hidden {\n &:is(:where(.group)[data-collapsible=\"icon\"] *) {\n display: none;\n }\n }\n .group-data-\\[collapsible\\=icon\\]\\:size-8\\! {\n &:is(:where(.group)[data-collapsible=\"icon\"] *) {\n width: calc(var(--spacing) * 8) !important;\n height: calc(var(--spacing) * 8) !important;\n }\n }\n .group-data-\\[collapsible\\=icon\\]\\:w-\\(--sidebar-width-icon\\) {\n &:is(:where(.group)[data-collapsible=\"icon\"] *) {\n width: var(--sidebar-width-icon);\n }\n }\n .group-data-\\[collapsible\\=icon\\]\\:w-\\[calc\\(var\\(--sidebar-width-icon\\)\\+\\(--spacing\\(4\\)\\)\\)\\] {\n &:is(:where(.group)[data-collapsible=\"icon\"] *) {\n width: calc(var(--sidebar-width-icon) + (calc(var(--spacing) * 4)));\n }\n }\n .group-data-\\[collapsible\\=icon\\]\\:w-\\[calc\\(var\\(--sidebar-width-icon\\)\\+\\(--spacing\\(4\\)\\)\\+2px\\)\\] {\n &:is(:where(.group)[data-collapsible=\"icon\"] *) {\n width: calc(var(--sidebar-width-icon) + (calc(var(--spacing) * 4)) + 2px);\n }\n }\n .group-data-\\[collapsible\\=icon\\]\\:overflow-hidden {\n &:is(:where(.group)[data-collapsible=\"icon\"] *) {\n overflow: hidden;\n }\n }\n .group-data-\\[collapsible\\=icon\\]\\:p-0\\! {\n &:is(:where(.group)[data-collapsible=\"icon\"] *) {\n padding: calc(var(--spacing) * 0) !important;\n }\n }\n .group-data-\\[collapsible\\=icon\\]\\:p-2\\! {\n &:is(:where(.group)[data-collapsible=\"icon\"] *) {\n padding: calc(var(--spacing) * 2) !important;\n }\n }\n .group-data-\\[collapsible\\=icon\\]\\:opacity-0 {\n &:is(:where(.group)[data-collapsible=\"icon\"] *) {\n opacity: 0%;\n }\n }\n .group-data-\\[collapsible\\=offcanvas\\]\\:right-\\[calc\\(var\\(--sidebar-width\\)\\*-1\\)\\] {\n &:is(:where(.group)[data-collapsible=\"offcanvas\"] *) {\n right: calc(var(--sidebar-width) * -1);\n }\n }\n .group-data-\\[collapsible\\=offcanvas\\]\\:left-\\[calc\\(var\\(--sidebar-width\\)\\*-1\\)\\] {\n &:is(:where(.group)[data-collapsible=\"offcanvas\"] *) {\n left: calc(var(--sidebar-width) * -1);\n }\n }\n .group-data-\\[collapsible\\=offcanvas\\]\\:w-0 {\n &:is(:where(.group)[data-collapsible=\"offcanvas\"] *) {\n width: calc(var(--spacing) * 0);\n }\n }\n .group-data-\\[collapsible\\=offcanvas\\]\\:translate-x-0 {\n &:is(:where(.group)[data-collapsible=\"offcanvas\"] *) {\n --tw-translate-x: calc(var(--spacing) * 0);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n }\n .group-data-\\[disabled\\=true\\]\\:pointer-events-none {\n &:is(:where(.group)[data-disabled=\"true\"] *) {\n pointer-events: none;\n }\n }\n .group-data-\\[disabled\\=true\\]\\:opacity-50 {\n &:is(:where(.group)[data-disabled=\"true\"] *) {\n opacity: 50%;\n }\n }\n .group-data-\\[disabled\\=true\\]\\/field\\:opacity-50 {\n &:is(:where(.group\\/field)[data-disabled=\"true\"] *) {\n opacity: 50%;\n }\n }\n .group-data-\\[orientation\\=horizontal\\]\\/tabs\\:h-9 {\n &:is(:where(.group\\/tabs)[data-orientation=\"horizontal\"] *) {\n height: calc(var(--spacing) * 9);\n }\n }\n .group-data-\\[orientation\\=vertical\\]\\/tabs\\:h-fit {\n &:is(:where(.group\\/tabs)[data-orientation=\"vertical\"] *) {\n height: fit-content;\n }\n }\n .group-data-\\[orientation\\=vertical\\]\\/tabs\\:w-full {\n &:is(:where(.group\\/tabs)[data-orientation=\"vertical\"] *) {\n width: 100%;\n }\n }\n .group-data-\\[orientation\\=vertical\\]\\/tabs\\:flex-col {\n &:is(:where(.group\\/tabs)[data-orientation=\"vertical\"] *) {\n flex-direction: column;\n }\n }\n .group-data-\\[orientation\\=vertical\\]\\/tabs\\:justify-start {\n &:is(:where(.group\\/tabs)[data-orientation=\"vertical\"] *) {\n justify-content: flex-start;\n }\n }\n .group-data-\\[side\\=left\\]\\:-right-4 {\n &:is(:where(.group)[data-side=\"left\"] *) {\n right: calc(var(--spacing) * -4);\n }\n }\n .group-data-\\[side\\=left\\]\\:border-r {\n &:is(:where(.group)[data-side=\"left\"] *) {\n border-right-style: var(--tw-border-style);\n border-right-width: 1px;\n }\n }\n .group-data-\\[side\\=right\\]\\:left-0 {\n &:is(:where(.group)[data-side=\"right\"] *) {\n left: calc(var(--spacing) * 0);\n }\n }\n .group-data-\\[side\\=right\\]\\:rotate-180 {\n &:is(:where(.group)[data-side=\"right\"] *) {\n rotate: 180deg;\n }\n }\n .group-data-\\[side\\=right\\]\\:border-l {\n &:is(:where(.group)[data-side=\"right\"] *) {\n border-left-style: var(--tw-border-style);\n border-left-width: 1px;\n }\n }\n .group-data-\\[size\\=default\\]\\/avatar\\:size-2\\.5 {\n &:is(:where(.group\\/avatar)[data-size=\"default\"] *) {\n width: calc(var(--spacing) * 2.5);\n height: calc(var(--spacing) * 2.5);\n }\n }\n .group-data-\\[size\\=lg\\]\\/avatar\\:size-3 {\n &:is(:where(.group\\/avatar)[data-size=\"lg\"] *) {\n width: calc(var(--spacing) * 3);\n height: calc(var(--spacing) * 3);\n }\n }\n .group-data-\\[size\\=sm\\]\\/avatar\\:size-2 {\n &:is(:where(.group\\/avatar)[data-size=\"sm\"] *) {\n width: calc(var(--spacing) * 2);\n height: calc(var(--spacing) * 2);\n }\n }\n .group-data-\\[size\\=sm\\]\\/avatar\\:text-xs {\n &:is(:where(.group\\/avatar)[data-size=\"sm\"] *) {\n font-size: var(--text-xs);\n line-height: var(--tw-leading, var(--text-xs--line-height));\n }\n }\n .group-data-\\[variant\\=floating\\]\\:rounded-lg {\n &:is(:where(.group)[data-variant=\"floating\"] *) {\n border-radius: var(--radius);\n }\n }\n .group-data-\\[variant\\=floating\\]\\:border {\n &:is(:where(.group)[data-variant=\"floating\"] *) {\n border-style: var(--tw-border-style);\n border-width: 1px;\n }\n }\n .group-data-\\[variant\\=floating\\]\\:border-sidebar-border {\n &:is(:where(.group)[data-variant=\"floating\"] *) {\n border-color: var(--sidebar-border);\n }\n }\n .group-data-\\[variant\\=floating\\]\\:shadow-sm {\n &:is(:where(.group)[data-variant=\"floating\"] *) {\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n .group-data-\\[variant\\=line\\]\\/tabs-list\\:bg-transparent {\n &:is(:where(.group\\/tabs-list)[data-variant=\"line\"] *) {\n background-color: transparent;\n }\n }\n .group-data-\\[variant\\=outline\\]\\/field-group\\:-mb-2 {\n &:is(:where(.group\\/field-group)[data-variant=\"outline\"] *) {\n margin-bottom: calc(var(--spacing) * -2);\n }\n }\n .group-data-\\[vaul-drawer-direction\\=bottom\\]\\/drawer-content\\:block {\n &:is(:where(.group\\/drawer-content)[data-vaul-drawer-direction=\"bottom\"] *) {\n display: block;\n }\n }\n .group-data-\\[vaul-drawer-direction\\=bottom\\]\\/drawer-content\\:text-center {\n &:is(:where(.group\\/drawer-content)[data-vaul-drawer-direction=\"bottom\"] *) {\n text-align: center;\n }\n }\n .group-data-\\[vaul-drawer-direction\\=top\\]\\/drawer-content\\:text-center {\n &:is(:where(.group\\/drawer-content)[data-vaul-drawer-direction=\"top\"] *) {\n text-align: center;\n }\n }\n .peer-hover\\/menu-button\\:text-sidebar-accent-foreground {\n &:is(:where(.peer\\/menu-button):hover ~ *) {\n @media (hover: hover) {\n color: var(--sidebar-accent-foreground);\n }\n }\n }\n .peer-disabled\\:cursor-not-allowed {\n &:is(:where(.peer):disabled ~ *) {\n cursor: not-allowed;\n }\n }\n .peer-disabled\\:opacity-50 {\n &:is(:where(.peer):disabled ~ *) {\n opacity: 50%;\n }\n }\n .peer-data-\\[active\\=true\\]\\/menu-button\\:text-sidebar-accent-foreground {\n &:is(:where(.peer\\/menu-button)[data-active=\"true\"] ~ *) {\n color: var(--sidebar-accent-foreground);\n }\n }\n .peer-data-\\[size\\=default\\]\\/menu-button\\:top-1\\.5 {\n &:is(:where(.peer\\/menu-button)[data-size=\"default\"] ~ *) {\n top: calc(var(--spacing) * 1.5);\n }\n }\n .peer-data-\\[size\\=lg\\]\\/menu-button\\:top-2\\.5 {\n &:is(:where(.peer\\/menu-button)[data-size=\"lg\"] ~ *) {\n top: calc(var(--spacing) * 2.5);\n }\n }\n .peer-data-\\[size\\=sm\\]\\/menu-button\\:top-1 {\n &:is(:where(.peer\\/menu-button)[data-size=\"sm\"] ~ *) {\n top: calc(var(--spacing) * 1);\n }\n }\n .selection\\:bg-primary {\n & *::selection {\n background-color: var(--primary);\n }\n &::selection {\n background-color: var(--primary);\n }\n }\n .selection\\:text-primary-foreground {\n & *::selection {\n color: var(--primary-foreground);\n }\n &::selection {\n color: var(--primary-foreground);\n }\n }\n .file\\:inline-flex {\n &::file-selector-button {\n display: inline-flex;\n }\n }\n .file\\:h-7 {\n &::file-selector-button {\n height: calc(var(--spacing) * 7);\n }\n }\n .file\\:border-0 {\n &::file-selector-button {\n border-style: var(--tw-border-style);\n border-width: 0px;\n }\n }\n .file\\:bg-transparent {\n &::file-selector-button {\n background-color: transparent;\n }\n }\n .file\\:text-sm {\n &::file-selector-button {\n font-size: var(--text-sm);\n line-height: var(--tw-leading, var(--text-sm--line-height));\n }\n }\n .file\\:font-medium {\n &::file-selector-button {\n --tw-font-weight: var(--font-weight-medium);\n font-weight: var(--font-weight-medium);\n }\n }\n .file\\:text-foreground {\n &::file-selector-button {\n color: var(--foreground);\n }\n }\n .placeholder\\:text-muted-foreground {\n &::placeholder {\n color: var(--muted-foreground);\n }\n }\n .after\\:absolute {\n &::after {\n content: var(--tw-content);\n position: absolute;\n }\n }\n .after\\:-inset-2 {\n &::after {\n content: var(--tw-content);\n inset: calc(var(--spacing) * -2);\n }\n }\n .after\\:inset-y-0 {\n &::after {\n content: var(--tw-content);\n inset-block: calc(var(--spacing) * 0);\n }\n }\n .after\\:left-1\\/2 {\n &::after {\n content: var(--tw-content);\n left: calc(1 / 2 * 100%);\n }\n }\n .after\\:w-0\\.5 {\n &::after {\n content: var(--tw-content);\n width: calc(var(--spacing) * 0.5);\n }\n }\n .after\\:bg-foreground {\n &::after {\n content: var(--tw-content);\n background-color: var(--foreground);\n }\n }\n .after\\:opacity-0 {\n &::after {\n content: var(--tw-content);\n opacity: 0%;\n }\n }\n .after\\:transition-opacity {\n &::after {\n content: var(--tw-content);\n transition-property: opacity;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n }\n .group-data-\\[collapsible\\=offcanvas\\]\\:after\\:left-full {\n &:is(:where(.group)[data-collapsible=\"offcanvas\"] *) {\n &::after {\n content: var(--tw-content);\n left: 100%;\n }\n }\n }\n .group-data-\\[orientation\\=horizontal\\]\\/tabs\\:after\\:inset-x-0 {\n &:is(:where(.group\\/tabs)[data-orientation=\"horizontal\"] *) {\n &::after {\n content: var(--tw-content);\n inset-inline: calc(var(--spacing) * 0);\n }\n }\n }\n .group-data-\\[orientation\\=horizontal\\]\\/tabs\\:after\\:bottom-\\[-5px\\] {\n &:is(:where(.group\\/tabs)[data-orientation=\"horizontal\"] *) {\n &::after {\n content: var(--tw-content);\n bottom: -5px;\n }\n }\n }\n .group-data-\\[orientation\\=horizontal\\]\\/tabs\\:after\\:h-0\\.5 {\n &:is(:where(.group\\/tabs)[data-orientation=\"horizontal\"] *) {\n &::after {\n content: var(--tw-content);\n height: calc(var(--spacing) * 0.5);\n }\n }\n }\n .group-data-\\[orientation\\=vertical\\]\\/tabs\\:after\\:inset-y-0 {\n &:is(:where(.group\\/tabs)[data-orientation=\"vertical\"] *) {\n &::after {\n content: var(--tw-content);\n inset-block: calc(var(--spacing) * 0);\n }\n }\n }\n .group-data-\\[orientation\\=vertical\\]\\/tabs\\:after\\:-right-1 {\n &:is(:where(.group\\/tabs)[data-orientation=\"vertical\"] *) {\n &::after {\n content: var(--tw-content);\n right: calc(var(--spacing) * -1);\n }\n }\n }\n .group-data-\\[orientation\\=vertical\\]\\/tabs\\:after\\:w-0\\.5 {\n &:is(:where(.group\\/tabs)[data-orientation=\"vertical\"] *) {\n &::after {\n content: var(--tw-content);\n width: calc(var(--spacing) * 0.5);\n }\n }\n }\n .last\\:mt-0 {\n &:last-child {\n margin-top: calc(var(--spacing) * 0);\n }\n }\n .hover\\:-translate-y-0\\.5 {\n &:hover {\n @media (hover: hover) {\n --tw-translate-y: calc(var(--spacing) * -0.5);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n }\n }\n .hover\\:border-blue-200 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-blue-200);\n }\n }\n }\n .hover\\:border-blue-500 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-blue-500);\n }\n }\n }\n .hover\\:border-gray-200 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-gray-200);\n }\n }\n }\n .hover\\:border-gray-300 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-gray-300);\n }\n }\n }\n .hover\\:border-green-200 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-green-200);\n }\n }\n }\n .hover\\:border-green-300 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-green-300);\n }\n }\n }\n .hover\\:border-green-400 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-green-400);\n }\n }\n }\n .hover\\:border-green-500 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-green-500);\n }\n }\n }\n .hover\\:border-pink-500 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-pink-500);\n }\n }\n }\n .hover\\:border-primary\\/50 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--primary);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--primary) 50%, transparent);\n }\n }\n }\n }\n .hover\\:border-red-200 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-red-200);\n }\n }\n }\n .hover\\:bg-accent {\n &:hover {\n @media (hover: hover) {\n background-color: var(--accent);\n }\n }\n }\n .hover\\:bg-black\\/70 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, #000 70%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 70%, transparent);\n }\n }\n }\n }\n .hover\\:bg-blue-600\\/80 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, oklch(54.6% 0.245 262.881) 80%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-blue-600) 80%, transparent);\n }\n }\n }\n }\n .hover\\:bg-destructive\\/90 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--destructive) 90%, transparent);\n }\n }\n }\n }\n .hover\\:bg-gray-50 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-gray-50);\n }\n }\n }\n .hover\\:bg-gray-100 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-gray-100);\n }\n }\n }\n .hover\\:bg-gray-200 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-gray-200);\n }\n }\n }\n .hover\\:bg-gray-300 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-gray-300);\n }\n }\n }\n .hover\\:bg-gray-400 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-gray-400);\n }\n }\n }\n .hover\\:bg-green-50 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-green-50);\n }\n }\n }\n .hover\\:bg-green-50\\/40 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, oklch(98.2% 0.018 155.826) 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-green-50) 40%, transparent);\n }\n }\n }\n }\n .hover\\:bg-green-50\\/50 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, oklch(98.2% 0.018 155.826) 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-green-50) 50%, transparent);\n }\n }\n }\n }\n .hover\\:bg-green-600 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-green-600);\n }\n }\n }\n .hover\\:bg-green-600\\/80 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, oklch(62.7% 0.194 149.214) 80%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-green-600) 80%, transparent);\n }\n }\n }\n }\n .hover\\:bg-green-700 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-green-700);\n }\n }\n }\n .hover\\:bg-green-700\\/60 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, oklch(52.7% 0.154 150.069) 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-green-700) 60%, transparent);\n }\n }\n }\n }\n .hover\\:bg-green-800 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-green-800);\n }\n }\n }\n .hover\\:bg-muted {\n &:hover {\n @media (hover: hover) {\n background-color: var(--muted);\n }\n }\n }\n .hover\\:bg-muted\\/30 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--muted);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--muted) 30%, transparent);\n }\n }\n }\n }\n .hover\\:bg-muted\\/50 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--muted);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--muted) 50%, transparent);\n }\n }\n }\n }\n .hover\\:bg-orange-700 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-orange-700);\n }\n }\n }\n .hover\\:bg-pink-600\\/80 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, oklch(59.2% 0.249 0.584) 80%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-pink-600) 80%, transparent);\n }\n }\n }\n }\n .hover\\:bg-primary\\/90 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--primary);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--primary) 90%, transparent);\n }\n }\n }\n }\n .hover\\:bg-red-700 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-red-700);\n }\n }\n }\n .hover\\:bg-secondary\\/80 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--secondary);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--secondary) 80%, transparent);\n }\n }\n }\n }\n .hover\\:bg-sidebar-accent {\n &:hover {\n @media (hover: hover) {\n background-color: var(--sidebar-accent);\n }\n }\n }\n .hover\\:bg-white\\/10 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, #fff 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 10%, transparent);\n }\n }\n }\n }\n .hover\\:bg-white\\/20 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, #fff 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 20%, transparent);\n }\n }\n }\n }\n .hover\\:bg-white\\/25 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, #fff 25%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 25%, transparent);\n }\n }\n }\n }\n .hover\\:text-accent-foreground {\n &:hover {\n @media (hover: hover) {\n color: var(--accent-foreground);\n }\n }\n }\n .hover\\:text-foreground {\n &:hover {\n @media (hover: hover) {\n color: var(--foreground);\n }\n }\n }\n .hover\\:text-gray-700 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-gray-700);\n }\n }\n }\n .hover\\:text-green-200 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-green-200);\n }\n }\n }\n .hover\\:text-green-400 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-green-400);\n }\n }\n }\n .hover\\:text-green-700 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-green-700);\n }\n }\n }\n .hover\\:text-green-800 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-green-800);\n }\n }\n }\n .hover\\:text-green-900 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-green-900);\n }\n }\n }\n .hover\\:text-red-500 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-red-500);\n }\n }\n }\n .hover\\:text-red-700 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-red-700);\n }\n }\n }\n .hover\\:text-sidebar-accent-foreground {\n &:hover {\n @media (hover: hover) {\n color: var(--sidebar-accent-foreground);\n }\n }\n }\n .hover\\:text-white {\n &:hover {\n @media (hover: hover) {\n color: var(--color-white);\n }\n }\n }\n .hover\\:underline {\n &:hover {\n @media (hover: hover) {\n text-decoration-line: underline;\n }\n }\n }\n .hover\\:opacity-100 {\n &:hover {\n @media (hover: hover) {\n opacity: 100%;\n }\n }\n }\n .hover\\:shadow-\\[0_0_0_1px_hsl\\(var\\(--sidebar-accent\\)\\)\\] {\n &:hover {\n @media (hover: hover) {\n --tw-shadow: 0 0 0 1px var(--tw-shadow-color, hsl(var(--sidebar-accent)));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n }\n .hover\\:shadow-md {\n &:hover {\n @media (hover: hover) {\n --tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 2px 4px -2px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n }\n .hover\\:shadow-sm {\n &:hover {\n @media (hover: hover) {\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n }\n .hover\\:shadow-xl {\n &:hover {\n @media (hover: hover) {\n --tw-shadow: 0 20px 25px -5px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 8px 10px -6px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n }\n .hover\\:group-data-\\[collapsible\\=offcanvas\\]\\:bg-sidebar {\n &:hover {\n @media (hover: hover) {\n &:is(:where(.group)[data-collapsible=\"offcanvas\"] *) {\n background-color: var(--sidebar);\n }\n }\n }\n }\n .hover\\:after\\:bg-sidebar-border {\n &:hover {\n @media (hover: hover) {\n &::after {\n content: var(--tw-content);\n background-color: var(--sidebar-border);\n }\n }\n }\n }\n .focus\\:border-transparent {\n &:focus {\n border-color: transparent;\n }\n }\n .focus\\:bg-accent {\n &:focus {\n background-color: var(--accent);\n }\n }\n .focus\\:text-accent-foreground {\n &:focus {\n color: var(--accent-foreground);\n }\n }\n .focus\\:ring-2 {\n &:focus {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n .focus\\:ring-green-500 {\n &:focus {\n --tw-ring-color: var(--color-green-500);\n }\n }\n .focus\\:ring-green-600 {\n &:focus {\n --tw-ring-color: var(--color-green-600);\n }\n }\n .focus\\:ring-ring {\n &:focus {\n --tw-ring-color: var(--ring);\n }\n }\n .focus\\:ring-offset-2 {\n &:focus {\n --tw-ring-offset-width: 2px;\n --tw-ring-offset-shadow: var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n }\n }\n .focus\\:outline-hidden {\n &:focus {\n --tw-outline-style: none;\n outline-style: none;\n @media (forced-colors: active) {\n outline: 2px solid transparent;\n outline-offset: 2px;\n }\n }\n }\n .focus\\:outline-none {\n &:focus {\n --tw-outline-style: none;\n outline-style: none;\n }\n }\n .focus-visible\\:border-ring {\n &:focus-visible {\n border-color: var(--ring);\n }\n }\n .focus-visible\\:ring-2 {\n &:focus-visible {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n .focus-visible\\:ring-\\[3px\\] {\n &:focus-visible {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n .focus-visible\\:ring-destructive\\/20 {\n &:focus-visible {\n --tw-ring-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--destructive) 20%, transparent);\n }\n }\n }\n .focus-visible\\:ring-ring\\/50 {\n &:focus-visible {\n --tw-ring-color: var(--ring);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--ring) 50%, transparent);\n }\n }\n }\n .focus-visible\\:outline-1 {\n &:focus-visible {\n outline-style: var(--tw-outline-style);\n outline-width: 1px;\n }\n }\n .focus-visible\\:outline-ring {\n &:focus-visible {\n outline-color: var(--ring);\n }\n }\n .active\\:bg-sidebar-accent {\n &:active {\n background-color: var(--sidebar-accent);\n }\n }\n .active\\:text-sidebar-accent-foreground {\n &:active {\n color: var(--sidebar-accent-foreground);\n }\n }\n .disabled\\:pointer-events-none {\n &:disabled {\n pointer-events: none;\n }\n }\n .disabled\\:cursor-not-allowed {\n &:disabled {\n cursor: not-allowed;\n }\n }\n .disabled\\:opacity-30 {\n &:disabled {\n opacity: 30%;\n }\n }\n .disabled\\:opacity-50 {\n &:disabled {\n opacity: 50%;\n }\n }\n .in-data-\\[side\\=left\\]\\:cursor-w-resize {\n :where(*[data-side=\"left\"]) & {\n cursor: w-resize;\n }\n }\n .in-data-\\[side\\=right\\]\\:cursor-e-resize {\n :where(*[data-side=\"right\"]) & {\n cursor: e-resize;\n }\n }\n .has-data-\\[slot\\=card-action\\]\\:grid-cols-\\[1fr_auto\\] {\n &:has(*[data-slot=\"card-action\"]) {\n grid-template-columns: 1fr auto;\n }\n }\n .has-data-\\[state\\=checked\\]\\:border-primary {\n &:has(*[data-state=\"checked\"]) {\n border-color: var(--primary);\n }\n }\n .has-data-\\[state\\=checked\\]\\:bg-primary\\/5 {\n &:has(*[data-state=\"checked\"]) {\n background-color: var(--primary);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--primary) 5%, transparent);\n }\n }\n }\n .has-data-\\[variant\\=inset\\]\\:bg-sidebar {\n &:has(*[data-variant=\"inset\"]) {\n background-color: var(--sidebar);\n }\n }\n .has-\\[\\>\\[data-slot\\=checkbox-group\\]\\]\\:gap-3 {\n &:has(>[data-slot=checkbox-group]) {\n gap: calc(var(--spacing) * 3);\n }\n }\n .has-\\[\\>\\[data-slot\\=field-content\\]\\]\\:items-start {\n &:has(>[data-slot=field-content]) {\n align-items: flex-start;\n }\n }\n .has-\\[\\>\\[data-slot\\=field\\]\\]\\:w-full {\n &:has(>[data-slot=field]) {\n width: 100%;\n }\n }\n .has-\\[\\>\\[data-slot\\=field\\]\\]\\:flex-col {\n &:has(>[data-slot=field]) {\n flex-direction: column;\n }\n }\n .has-\\[\\>\\[data-slot\\=field\\]\\]\\:rounded-md {\n &:has(>[data-slot=field]) {\n border-radius: calc(var(--radius) - 2px);\n }\n }\n .has-\\[\\>\\[data-slot\\=field\\]\\]\\:border {\n &:has(>[data-slot=field]) {\n border-style: var(--tw-border-style);\n border-width: 1px;\n }\n }\n .has-\\[\\>\\[data-slot\\=radio-group\\]\\]\\:gap-3 {\n &:has(>[data-slot=radio-group]) {\n gap: calc(var(--spacing) * 3);\n }\n }\n .has-\\[\\>svg\\]\\:px-1\\.5 {\n &:has(>svg) {\n padding-inline: calc(var(--spacing) * 1.5);\n }\n }\n .has-\\[\\>svg\\]\\:px-2\\.5 {\n &:has(>svg) {\n padding-inline: calc(var(--spacing) * 2.5);\n }\n }\n .has-\\[\\>svg\\]\\:px-3 {\n &:has(>svg) {\n padding-inline: calc(var(--spacing) * 3);\n }\n }\n .has-\\[\\>svg\\]\\:px-4 {\n &:has(>svg) {\n padding-inline: calc(var(--spacing) * 4);\n }\n }\n .aria-disabled\\:pointer-events-none {\n &[aria-disabled=\"true\"] {\n pointer-events: none;\n }\n }\n .aria-disabled\\:opacity-50 {\n &[aria-disabled=\"true\"] {\n opacity: 50%;\n }\n }\n .aria-invalid\\:border-destructive {\n &[aria-invalid=\"true\"] {\n border-color: var(--destructive);\n }\n }\n .aria-invalid\\:ring-destructive\\/20 {\n &[aria-invalid=\"true\"] {\n --tw-ring-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--destructive) 20%, transparent);\n }\n }\n }\n .data-\\[active\\=true\\]\\:bg-sidebar-accent {\n &[data-active=\"true\"] {\n background-color: var(--sidebar-accent);\n }\n }\n .data-\\[active\\=true\\]\\:font-medium {\n &[data-active=\"true\"] {\n --tw-font-weight: var(--font-weight-medium);\n font-weight: var(--font-weight-medium);\n }\n }\n .data-\\[active\\=true\\]\\:text-sidebar-accent-foreground {\n &[data-active=\"true\"] {\n color: var(--sidebar-accent-foreground);\n }\n }\n .data-\\[disabled\\]\\:pointer-events-none {\n &[data-disabled] {\n pointer-events: none;\n }\n }\n .data-\\[disabled\\]\\:opacity-50 {\n &[data-disabled] {\n opacity: 50%;\n }\n }\n .data-\\[inset\\]\\:pl-8 {\n &[data-inset] {\n padding-left: calc(var(--spacing) * 8);\n }\n }\n .data-\\[invalid\\=true\\]\\:text-destructive {\n &[data-invalid=\"true\"] {\n color: var(--destructive);\n }\n }\n .data-\\[orientation\\=horizontal\\]\\:h-px {\n &[data-orientation=\"horizontal\"] {\n height: 1px;\n }\n }\n .data-\\[orientation\\=horizontal\\]\\:w-full {\n &[data-orientation=\"horizontal\"] {\n width: 100%;\n }\n }\n .data-\\[orientation\\=horizontal\\]\\:flex-col {\n &[data-orientation=\"horizontal\"] {\n flex-direction: column;\n }\n }\n .data-\\[orientation\\=vertical\\]\\:h-4 {\n &[data-orientation=\"vertical\"] {\n height: calc(var(--spacing) * 4);\n }\n }\n .data-\\[orientation\\=vertical\\]\\:h-full {\n &[data-orientation=\"vertical\"] {\n height: 100%;\n }\n }\n .data-\\[orientation\\=vertical\\]\\:w-px {\n &[data-orientation=\"vertical\"] {\n width: 1px;\n }\n }\n .data-\\[placeholder\\]\\:text-muted-foreground {\n &[data-placeholder] {\n color: var(--muted-foreground);\n }\n }\n .data-\\[side\\=bottom\\]\\:translate-y-1 {\n &[data-side=\"bottom\"] {\n --tw-translate-y: calc(var(--spacing) * 1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n }\n .data-\\[side\\=bottom\\]\\:slide-in-from-top-2 {\n &[data-side=\"bottom\"] {\n --tw-enter-translate-y: calc(2*var(--spacing)*-1);\n }\n }\n .data-\\[side\\=left\\]\\:-translate-x-1 {\n &[data-side=\"left\"] {\n --tw-translate-x: calc(var(--spacing) * -1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n }\n .data-\\[side\\=left\\]\\:slide-in-from-right-2 {\n &[data-side=\"left\"] {\n --tw-enter-translate-x: calc(2*var(--spacing));\n }\n }\n .data-\\[side\\=right\\]\\:translate-x-1 {\n &[data-side=\"right\"] {\n --tw-translate-x: calc(var(--spacing) * 1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n }\n .data-\\[side\\=right\\]\\:slide-in-from-left-2 {\n &[data-side=\"right\"] {\n --tw-enter-translate-x: calc(2*var(--spacing)*-1);\n }\n }\n .data-\\[side\\=top\\]\\:-translate-y-1 {\n &[data-side=\"top\"] {\n --tw-translate-y: calc(var(--spacing) * -1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n }\n .data-\\[side\\=top\\]\\:slide-in-from-bottom-2 {\n &[data-side=\"top\"] {\n --tw-enter-translate-y: calc(2*var(--spacing));\n }\n }\n .data-\\[size\\=default\\]\\:h-9 {\n &[data-size=\"default\"] {\n height: calc(var(--spacing) * 9);\n }\n }\n .data-\\[size\\=lg\\]\\:size-10 {\n &[data-size=\"lg\"] {\n width: calc(var(--spacing) * 10);\n height: calc(var(--spacing) * 10);\n }\n }\n .data-\\[size\\=sm\\]\\:size-6 {\n &[data-size=\"sm\"] {\n width: calc(var(--spacing) * 6);\n height: calc(var(--spacing) * 6);\n }\n }\n .data-\\[size\\=sm\\]\\:h-8 {\n &[data-size=\"sm\"] {\n height: calc(var(--spacing) * 8);\n }\n }\n .\\*\\:data-\\[slot\\=avatar\\]\\:ring-2 {\n :is(& > *) {\n &[data-slot=\"avatar\"] {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n }\n .\\*\\:data-\\[slot\\=avatar\\]\\:ring-background {\n :is(& > *) {\n &[data-slot=\"avatar\"] {\n --tw-ring-color: var(--background);\n }\n }\n }\n .data-\\[slot\\=checkbox-group\\]\\:gap-3 {\n &[data-slot=\"checkbox-group\"] {\n gap: calc(var(--spacing) * 3);\n }\n }\n .\\*\\:data-\\[slot\\=field\\]\\:p-4 {\n :is(& > *) {\n &[data-slot=\"field\"] {\n padding: calc(var(--spacing) * 4);\n }\n }\n }\n .\\*\\:data-\\[slot\\=field-group\\]\\:gap-4 {\n :is(& > *) {\n &[data-slot=\"field-group\"] {\n gap: calc(var(--spacing) * 4);\n }\n }\n }\n .\\*\\:data-\\[slot\\=select-value\\]\\:line-clamp-1 {\n :is(& > *) {\n &[data-slot=\"select-value\"] {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 1;\n }\n }\n }\n .\\*\\:data-\\[slot\\=select-value\\]\\:flex {\n :is(& > *) {\n &[data-slot=\"select-value\"] {\n display: flex;\n }\n }\n }\n .\\*\\:data-\\[slot\\=select-value\\]\\:items-center {\n :is(& > *) {\n &[data-slot=\"select-value\"] {\n align-items: center;\n }\n }\n }\n .\\*\\:data-\\[slot\\=select-value\\]\\:gap-2 {\n :is(& > *) {\n &[data-slot=\"select-value\"] {\n gap: calc(var(--spacing) * 2);\n }\n }\n }\n .data-\\[slot\\=sidebar-menu-button\\]\\:p-1\\.5\\! {\n &[data-slot=\"sidebar-menu-button\"] {\n padding: calc(var(--spacing) * 1.5) !important;\n }\n }\n .data-\\[state\\=active\\]\\:bg-background {\n &[data-state=\"active\"] {\n background-color: var(--background);\n }\n }\n .data-\\[state\\=active\\]\\:text-foreground {\n &[data-state=\"active\"] {\n color: var(--foreground);\n }\n }\n .group-data-\\[variant\\=default\\]\\/tabs-list\\:data-\\[state\\=active\\]\\:shadow-sm {\n &:is(:where(.group\\/tabs-list)[data-variant=\"default\"] *) {\n &[data-state=\"active\"] {\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n }\n .group-data-\\[variant\\=line\\]\\/tabs-list\\:data-\\[state\\=active\\]\\:bg-transparent {\n &:is(:where(.group\\/tabs-list)[data-variant=\"line\"] *) {\n &[data-state=\"active\"] {\n background-color: transparent;\n }\n }\n }\n .group-data-\\[variant\\=line\\]\\/tabs-list\\:data-\\[state\\=active\\]\\:shadow-none {\n &:is(:where(.group\\/tabs-list)[data-variant=\"line\"] *) {\n &[data-state=\"active\"] {\n --tw-shadow: 0 0 #0000;\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n }\n .group-data-\\[variant\\=line\\]\\/tabs-list\\:data-\\[state\\=active\\]\\:after\\:opacity-100 {\n &:is(:where(.group\\/tabs-list)[data-variant=\"line\"] *) {\n &[data-state=\"active\"] {\n &::after {\n content: var(--tw-content);\n opacity: 100%;\n }\n }\n }\n }\n .data-\\[state\\=checked\\]\\:border-primary {\n &[data-state=\"checked\"] {\n border-color: var(--primary);\n }\n }\n .data-\\[state\\=checked\\]\\:bg-primary {\n &[data-state=\"checked\"] {\n background-color: var(--primary);\n }\n }\n .data-\\[state\\=checked\\]\\:text-primary-foreground {\n &[data-state=\"checked\"] {\n color: var(--primary-foreground);\n }\n }\n .data-\\[state\\=closed\\]\\:animate-out {\n &[data-state=\"closed\"] {\n animation: exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none);\n }\n }\n .data-\\[state\\=closed\\]\\:duration-300 {\n &[data-state=\"closed\"] {\n --tw-duration: 300ms;\n transition-duration: 300ms;\n }\n }\n .data-\\[state\\=closed\\]\\:fade-out-0 {\n &[data-state=\"closed\"] {\n --tw-exit-opacity: calc(0/100);\n --tw-exit-opacity: 0;\n }\n }\n .data-\\[state\\=closed\\]\\:zoom-out-95 {\n &[data-state=\"closed\"] {\n --tw-exit-scale: calc(95*1%);\n --tw-exit-scale: .95;\n }\n }\n .data-\\[state\\=closed\\]\\:slide-out-to-bottom {\n &[data-state=\"closed\"] {\n --tw-exit-translate-y: 100%;\n }\n }\n .data-\\[state\\=closed\\]\\:slide-out-to-left {\n &[data-state=\"closed\"] {\n --tw-exit-translate-x: -100%;\n }\n }\n .data-\\[state\\=closed\\]\\:slide-out-to-right {\n &[data-state=\"closed\"] {\n --tw-exit-translate-x: 100%;\n }\n }\n .data-\\[state\\=closed\\]\\:slide-out-to-top {\n &[data-state=\"closed\"] {\n --tw-exit-translate-y: -100%;\n }\n }\n .data-\\[state\\=open\\]\\:animate-in {\n &[data-state=\"open\"] {\n animation: enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none);\n }\n }\n .data-\\[state\\=open\\]\\:bg-accent {\n &[data-state=\"open\"] {\n background-color: var(--accent);\n }\n }\n .data-\\[state\\=open\\]\\:bg-secondary {\n &[data-state=\"open\"] {\n background-color: var(--secondary);\n }\n }\n .data-\\[state\\=open\\]\\:bg-sidebar-accent {\n &[data-state=\"open\"] {\n background-color: var(--sidebar-accent);\n }\n }\n .data-\\[state\\=open\\]\\:text-accent-foreground {\n &[data-state=\"open\"] {\n color: var(--accent-foreground);\n }\n }\n .data-\\[state\\=open\\]\\:text-muted-foreground {\n &[data-state=\"open\"] {\n color: var(--muted-foreground);\n }\n }\n .data-\\[state\\=open\\]\\:text-sidebar-accent-foreground {\n &[data-state=\"open\"] {\n color: var(--sidebar-accent-foreground);\n }\n }\n .data-\\[state\\=open\\]\\:opacity-100 {\n &[data-state=\"open\"] {\n opacity: 100%;\n }\n }\n .data-\\[state\\=open\\]\\:duration-500 {\n &[data-state=\"open\"] {\n --tw-duration: 500ms;\n transition-duration: 500ms;\n }\n }\n .data-\\[state\\=open\\]\\:fade-in-0 {\n &[data-state=\"open\"] {\n --tw-enter-opacity: calc(0/100);\n --tw-enter-opacity: 0;\n }\n }\n .data-\\[state\\=open\\]\\:zoom-in-95 {\n &[data-state=\"open\"] {\n --tw-enter-scale: calc(95*1%);\n --tw-enter-scale: .95;\n }\n }\n .data-\\[state\\=open\\]\\:slide-in-from-bottom {\n &[data-state=\"open\"] {\n --tw-enter-translate-y: 100%;\n }\n }\n .data-\\[state\\=open\\]\\:slide-in-from-left {\n &[data-state=\"open\"] {\n --tw-enter-translate-x: -100%;\n }\n }\n .data-\\[state\\=open\\]\\:slide-in-from-right {\n &[data-state=\"open\"] {\n --tw-enter-translate-x: 100%;\n }\n }\n .data-\\[state\\=open\\]\\:slide-in-from-top {\n &[data-state=\"open\"] {\n --tw-enter-translate-y: -100%;\n }\n }\n .data-\\[state\\=open\\]\\:hover\\:bg-sidebar-accent {\n &[data-state=\"open\"] {\n &:hover {\n @media (hover: hover) {\n background-color: var(--sidebar-accent);\n }\n }\n }\n }\n .data-\\[state\\=open\\]\\:hover\\:text-sidebar-accent-foreground {\n &[data-state=\"open\"] {\n &:hover {\n @media (hover: hover) {\n color: var(--sidebar-accent-foreground);\n }\n }\n }\n }\n .data-\\[state\\=selected\\]\\:bg-muted {\n &[data-state=\"selected\"] {\n background-color: var(--muted);\n }\n }\n .data-\\[variant\\=destructive\\]\\:text-destructive {\n &[data-variant=\"destructive\"] {\n color: var(--destructive);\n }\n }\n .data-\\[variant\\=destructive\\]\\:focus\\:bg-destructive\\/10 {\n &[data-variant=\"destructive\"] {\n &:focus {\n background-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--destructive) 10%, transparent);\n }\n }\n }\n }\n .data-\\[variant\\=destructive\\]\\:focus\\:text-destructive {\n &[data-variant=\"destructive\"] {\n &:focus {\n color: var(--destructive);\n }\n }\n }\n .data-\\[variant\\=label\\]\\:text-sm {\n &[data-variant=\"label\"] {\n font-size: var(--text-sm);\n line-height: var(--tw-leading, var(--text-sm--line-height));\n }\n }\n .data-\\[variant\\=legend\\]\\:text-base {\n &[data-variant=\"legend\"] {\n font-size: var(--text-base);\n line-height: var(--tw-leading, var(--text-base--line-height));\n }\n }\n .data-\\[variant\\=line\\]\\:rounded-none {\n &[data-variant=\"line\"] {\n border-radius: 0;\n }\n }\n .data-\\[vaul-drawer-direction\\=bottom\\]\\:inset-x-0 {\n &[data-vaul-drawer-direction=\"bottom\"] {\n inset-inline: calc(var(--spacing) * 0);\n }\n }\n .data-\\[vaul-drawer-direction\\=bottom\\]\\:bottom-0 {\n &[data-vaul-drawer-direction=\"bottom\"] {\n bottom: calc(var(--spacing) * 0);\n }\n }\n .data-\\[vaul-drawer-direction\\=bottom\\]\\:mt-24 {\n &[data-vaul-drawer-direction=\"bottom\"] {\n margin-top: calc(var(--spacing) * 24);\n }\n }\n .data-\\[vaul-drawer-direction\\=bottom\\]\\:max-h-\\[80vh\\] {\n &[data-vaul-drawer-direction=\"bottom\"] {\n max-height: 80vh;\n }\n }\n .data-\\[vaul-drawer-direction\\=bottom\\]\\:rounded-t-lg {\n &[data-vaul-drawer-direction=\"bottom\"] {\n border-top-left-radius: var(--radius);\n border-top-right-radius: var(--radius);\n }\n }\n .data-\\[vaul-drawer-direction\\=bottom\\]\\:border-t {\n &[data-vaul-drawer-direction=\"bottom\"] {\n border-top-style: var(--tw-border-style);\n border-top-width: 1px;\n }\n }\n .data-\\[vaul-drawer-direction\\=left\\]\\:inset-y-0 {\n &[data-vaul-drawer-direction=\"left\"] {\n inset-block: calc(var(--spacing) * 0);\n }\n }\n .data-\\[vaul-drawer-direction\\=left\\]\\:left-0 {\n &[data-vaul-drawer-direction=\"left\"] {\n left: calc(var(--spacing) * 0);\n }\n }\n .data-\\[vaul-drawer-direction\\=left\\]\\:w-3\\/4 {\n &[data-vaul-drawer-direction=\"left\"] {\n width: calc(3 / 4 * 100%);\n }\n }\n .data-\\[vaul-drawer-direction\\=left\\]\\:border-r {\n &[data-vaul-drawer-direction=\"left\"] {\n border-right-style: var(--tw-border-style);\n border-right-width: 1px;\n }\n }\n .data-\\[vaul-drawer-direction\\=right\\]\\:inset-y-0 {\n &[data-vaul-drawer-direction=\"right\"] {\n inset-block: calc(var(--spacing) * 0);\n }\n }\n .data-\\[vaul-drawer-direction\\=right\\]\\:right-0 {\n &[data-vaul-drawer-direction=\"right\"] {\n right: calc(var(--spacing) * 0);\n }\n }\n .data-\\[vaul-drawer-direction\\=right\\]\\:w-3\\/4 {\n &[data-vaul-drawer-direction=\"right\"] {\n width: calc(3 / 4 * 100%);\n }\n }\n .data-\\[vaul-drawer-direction\\=right\\]\\:border-l {\n &[data-vaul-drawer-direction=\"right\"] {\n border-left-style: var(--tw-border-style);\n border-left-width: 1px;\n }\n }\n .data-\\[vaul-drawer-direction\\=top\\]\\:inset-x-0 {\n &[data-vaul-drawer-direction=\"top\"] {\n inset-inline: calc(var(--spacing) * 0);\n }\n }\n .data-\\[vaul-drawer-direction\\=top\\]\\:top-0 {\n &[data-vaul-drawer-direction=\"top\"] {\n top: calc(var(--spacing) * 0);\n }\n }\n .data-\\[vaul-drawer-direction\\=top\\]\\:mb-24 {\n &[data-vaul-drawer-direction=\"top\"] {\n margin-bottom: calc(var(--spacing) * 24);\n }\n }\n .data-\\[vaul-drawer-direction\\=top\\]\\:max-h-\\[80vh\\] {\n &[data-vaul-drawer-direction=\"top\"] {\n max-height: 80vh;\n }\n }\n .data-\\[vaul-drawer-direction\\=top\\]\\:rounded-b-lg {\n &[data-vaul-drawer-direction=\"top\"] {\n border-bottom-right-radius: var(--radius);\n border-bottom-left-radius: var(--radius);\n }\n }\n .data-\\[vaul-drawer-direction\\=top\\]\\:border-b {\n &[data-vaul-drawer-direction=\"top\"] {\n border-bottom-style: var(--tw-border-style);\n border-bottom-width: 1px;\n }\n }\n .nth-last-2\\:-mt-1 {\n &:nth-last-child(2) {\n margin-top: calc(var(--spacing) * -1);\n }\n }\n .sm\\:mt-16 {\n @media (width >= 40rem) {\n margin-top: calc(var(--spacing) * 16);\n }\n }\n .sm\\:mb-8 {\n @media (width >= 40rem) {\n margin-bottom: calc(var(--spacing) * 8);\n }\n }\n .sm\\:mb-12 {\n @media (width >= 40rem) {\n margin-bottom: calc(var(--spacing) * 12);\n }\n }\n .sm\\:ml-auto {\n @media (width >= 40rem) {\n margin-left: auto;\n }\n }\n .sm\\:block {\n @media (width >= 40rem) {\n display: block;\n }\n }\n .sm\\:flex {\n @media (width >= 40rem) {\n display: flex;\n }\n }\n .sm\\:inline {\n @media (width >= 40rem) {\n display: inline;\n }\n }\n .sm\\:table-cell {\n @media (width >= 40rem) {\n display: table-cell;\n }\n }\n .sm\\:h-20 {\n @media (width >= 40rem) {\n height: calc(var(--spacing) * 20);\n }\n }\n .sm\\:h-28 {\n @media (width >= 40rem) {\n height: calc(var(--spacing) * 28);\n }\n }\n .sm\\:h-72 {\n @media (width >= 40rem) {\n height: calc(var(--spacing) * 72);\n }\n }\n .sm\\:h-80 {\n @media (width >= 40rem) {\n height: calc(var(--spacing) * 80);\n }\n }\n .sm\\:w-40 {\n @media (width >= 40rem) {\n width: calc(var(--spacing) * 40);\n }\n }\n .sm\\:w-48 {\n @media (width >= 40rem) {\n width: calc(var(--spacing) * 48);\n }\n }\n .sm\\:w-52 {\n @media (width >= 40rem) {\n width: calc(var(--spacing) * 52);\n }\n }\n .sm\\:w-64 {\n @media (width >= 40rem) {\n width: calc(var(--spacing) * 64);\n }\n }\n .sm\\:w-auto {\n @media (width >= 40rem) {\n width: auto;\n }\n }\n .sm\\:max-w-lg {\n @media (width >= 40rem) {\n max-width: var(--container-lg);\n }\n }\n .sm\\:max-w-sm {\n @media (width >= 40rem) {\n max-width: var(--container-sm);\n }\n }\n .sm\\:flex-none {\n @media (width >= 40rem) {\n flex: none;\n }\n }\n .sm\\:grid-cols-2 {\n @media (width >= 40rem) {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n }\n .sm\\:grid-cols-3 {\n @media (width >= 40rem) {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n }\n .sm\\:grid-cols-4 {\n @media (width >= 40rem) {\n grid-template-columns: repeat(4, minmax(0, 1fr));\n }\n }\n .sm\\:flex-row {\n @media (width >= 40rem) {\n flex-direction: row;\n }\n }\n .sm\\:items-center {\n @media (width >= 40rem) {\n align-items: center;\n }\n }\n .sm\\:justify-end {\n @media (width >= 40rem) {\n justify-content: flex-end;\n }\n }\n .sm\\:gap-3 {\n @media (width >= 40rem) {\n gap: calc(var(--spacing) * 3);\n }\n }\n .sm\\:gap-6 {\n @media (width >= 40rem) {\n gap: calc(var(--spacing) * 6);\n }\n }\n .sm\\:p-4 {\n @media (width >= 40rem) {\n padding: calc(var(--spacing) * 4);\n }\n }\n .sm\\:p-6 {\n @media (width >= 40rem) {\n padding: calc(var(--spacing) * 6);\n }\n }\n .sm\\:p-8 {\n @media (width >= 40rem) {\n padding: calc(var(--spacing) * 8);\n }\n }\n .sm\\:px-6 {\n @media (width >= 40rem) {\n padding-inline: calc(var(--spacing) * 6);\n }\n }\n .sm\\:px-8 {\n @media (width >= 40rem) {\n padding-inline: calc(var(--spacing) * 8);\n }\n }\n .sm\\:py-10 {\n @media (width >= 40rem) {\n padding-block: calc(var(--spacing) * 10);\n }\n }\n .sm\\:py-16 {\n @media (width >= 40rem) {\n padding-block: calc(var(--spacing) * 16);\n }\n }\n .sm\\:py-20 {\n @media (width >= 40rem) {\n padding-block: calc(var(--spacing) * 20);\n }\n }\n .sm\\:text-left {\n @media (width >= 40rem) {\n text-align: left;\n }\n }\n .sm\\:text-2xl {\n @media (width >= 40rem) {\n font-size: var(--text-2xl);\n line-height: var(--tw-leading, var(--text-2xl--line-height));\n }\n }\n .sm\\:text-3xl {\n @media (width >= 40rem) {\n font-size: var(--text-3xl);\n line-height: var(--tw-leading, var(--text-3xl--line-height));\n }\n }\n .sm\\:text-4xl {\n @media (width >= 40rem) {\n font-size: var(--text-4xl);\n line-height: var(--tw-leading, var(--text-4xl--line-height));\n }\n }\n .sm\\:text-5xl {\n @media (width >= 40rem) {\n font-size: var(--text-5xl);\n line-height: var(--tw-leading, var(--text-5xl--line-height));\n }\n }\n .sm\\:text-base {\n @media (width >= 40rem) {\n font-size: var(--text-base);\n line-height: var(--tw-leading, var(--text-base--line-height));\n }\n }\n .sm\\:text-lg {\n @media (width >= 40rem) {\n font-size: var(--text-lg);\n line-height: var(--tw-leading, var(--text-lg--line-height));\n }\n }\n .sm\\:text-sm {\n @media (width >= 40rem) {\n font-size: var(--text-sm);\n line-height: var(--tw-leading, var(--text-sm--line-height));\n }\n }\n .data-\\[vaul-drawer-direction\\=left\\]\\:sm\\:max-w-sm {\n &[data-vaul-drawer-direction=\"left\"] {\n @media (width >= 40rem) {\n max-width: var(--container-sm);\n }\n }\n }\n .data-\\[vaul-drawer-direction\\=right\\]\\:sm\\:max-w-sm {\n &[data-vaul-drawer-direction=\"right\"] {\n @media (width >= 40rem) {\n max-width: var(--container-sm);\n }\n }\n }\n .md\\:block {\n @media (width >= 48rem) {\n display: block;\n }\n }\n .md\\:flex {\n @media (width >= 48rem) {\n display: flex;\n }\n }\n .md\\:hidden {\n @media (width >= 48rem) {\n display: none;\n }\n }\n .md\\:table-cell {\n @media (width >= 48rem) {\n display: table-cell;\n }\n }\n .md\\:grid-cols-2 {\n @media (width >= 48rem) {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n }\n .md\\:grid-cols-4 {\n @media (width >= 48rem) {\n grid-template-columns: repeat(4, minmax(0, 1fr));\n }\n }\n .md\\:grid-cols-5 {\n @media (width >= 48rem) {\n grid-template-columns: repeat(5, minmax(0, 1fr));\n }\n }\n .md\\:gap-1\\.5 {\n @media (width >= 48rem) {\n gap: calc(var(--spacing) * 1.5);\n }\n }\n .md\\:p-6 {\n @media (width >= 48rem) {\n padding: calc(var(--spacing) * 6);\n }\n }\n .md\\:text-left {\n @media (width >= 48rem) {\n text-align: left;\n }\n }\n .md\\:text-6xl {\n @media (width >= 48rem) {\n font-size: var(--text-6xl);\n line-height: var(--tw-leading, var(--text-6xl--line-height));\n }\n }\n .md\\:text-sm {\n @media (width >= 48rem) {\n font-size: var(--text-sm);\n line-height: var(--tw-leading, var(--text-sm--line-height));\n }\n }\n .md\\:opacity-0 {\n @media (width >= 48rem) {\n opacity: 0%;\n }\n }\n .md\\:peer-data-\\[variant\\=inset\\]\\:m-2 {\n @media (width >= 48rem) {\n &:is(:where(.peer)[data-variant=\"inset\"] ~ *) {\n margin: calc(var(--spacing) * 2);\n }\n }\n }\n .md\\:peer-data-\\[variant\\=inset\\]\\:ml-0 {\n @media (width >= 48rem) {\n &:is(:where(.peer)[data-variant=\"inset\"] ~ *) {\n margin-left: calc(var(--spacing) * 0);\n }\n }\n }\n .md\\:peer-data-\\[variant\\=inset\\]\\:rounded-xl {\n @media (width >= 48rem) {\n &:is(:where(.peer)[data-variant=\"inset\"] ~ *) {\n border-radius: calc(var(--radius) + 4px);\n }\n }\n }\n .md\\:peer-data-\\[variant\\=inset\\]\\:shadow-sm {\n @media (width >= 48rem) {\n &:is(:where(.peer)[data-variant=\"inset\"] ~ *) {\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n }\n .md\\:peer-data-\\[variant\\=inset\\]\\:peer-data-\\[state\\=collapsed\\]\\:ml-2 {\n @media (width >= 48rem) {\n &:is(:where(.peer)[data-variant=\"inset\"] ~ *) {\n &:is(:where(.peer)[data-state=\"collapsed\"] ~ *) {\n margin-left: calc(var(--spacing) * 2);\n }\n }\n }\n }\n .md\\:after\\:hidden {\n @media (width >= 48rem) {\n &::after {\n content: var(--tw-content);\n display: none;\n }\n }\n }\n .lg\\:flex {\n @media (width >= 64rem) {\n display: flex;\n }\n }\n .lg\\:hidden {\n @media (width >= 64rem) {\n display: none;\n }\n }\n .lg\\:h-80 {\n @media (width >= 64rem) {\n height: calc(var(--spacing) * 80);\n }\n }\n .lg\\:h-96 {\n @media (width >= 64rem) {\n height: calc(var(--spacing) * 96);\n }\n }\n .lg\\:grid-cols-2 {\n @media (width >= 64rem) {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n }\n .lg\\:grid-cols-3 {\n @media (width >= 64rem) {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n }\n .lg\\:grid-cols-5 {\n @media (width >= 64rem) {\n grid-template-columns: repeat(5, minmax(0, 1fr));\n }\n }\n .lg\\:gap-12 {\n @media (width >= 64rem) {\n gap: calc(var(--spacing) * 12);\n }\n }\n .lg\\:px-8 {\n @media (width >= 64rem) {\n padding-inline: calc(var(--spacing) * 8);\n }\n }\n .xl\\:grid-cols-4 {\n @media (width >= 80rem) {\n grid-template-columns: repeat(4, minmax(0, 1fr));\n }\n }\n .\\@md\\/field-group\\:flex-row {\n @container field-group (width >= 28rem) {\n flex-direction: row;\n }\n }\n .\\@md\\/field-group\\:items-center {\n @container field-group (width >= 28rem) {\n align-items: center;\n }\n }\n .\\@md\\/field-group\\:has-\\[\\>\\[data-slot\\=field-content\\]\\]\\:items-start {\n @container field-group (width >= 28rem) {\n &:has(>[data-slot=field-content]) {\n align-items: flex-start;\n }\n }\n }\n .dark\\:border-input {\n &:is(.dark *) {\n border-color: var(--input);\n }\n }\n .dark\\:bg-destructive\\/60 {\n &:is(.dark *) {\n background-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--destructive) 60%, transparent);\n }\n }\n }\n .dark\\:bg-input\\/30 {\n &:is(.dark *) {\n background-color: var(--input);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--input) 30%, transparent);\n }\n }\n }\n .dark\\:bg-zinc-900 {\n &:is(.dark *) {\n background-color: var(--color-zinc-900);\n }\n }\n .dark\\:text-muted-foreground {\n &:is(.dark *) {\n color: var(--muted-foreground);\n }\n }\n .dark\\:hover\\:bg-accent\\/50 {\n &:is(.dark *) {\n &:hover {\n @media (hover: hover) {\n background-color: var(--accent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--accent) 50%, transparent);\n }\n }\n }\n }\n }\n .dark\\:hover\\:bg-input\\/50 {\n &:is(.dark *) {\n &:hover {\n @media (hover: hover) {\n background-color: var(--input);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--input) 50%, transparent);\n }\n }\n }\n }\n }\n .dark\\:hover\\:text-foreground {\n &:is(.dark *) {\n &:hover {\n @media (hover: hover) {\n color: var(--foreground);\n }\n }\n }\n }\n .dark\\:focus-visible\\:ring-destructive\\/40 {\n &:is(.dark *) {\n &:focus-visible {\n --tw-ring-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--destructive) 40%, transparent);\n }\n }\n }\n }\n .dark\\:has-data-\\[state\\=checked\\]\\:bg-primary\\/10 {\n &:is(.dark *) {\n &:has(*[data-state=\"checked\"]) {\n background-color: var(--primary);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--primary) 10%, transparent);\n }\n }\n }\n }\n .dark\\:aria-invalid\\:ring-destructive\\/40 {\n &:is(.dark *) {\n &[aria-invalid=\"true\"] {\n --tw-ring-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--destructive) 40%, transparent);\n }\n }\n }\n }\n .dark\\:data-\\[state\\=active\\]\\:border-input {\n &:is(.dark *) {\n &[data-state=\"active\"] {\n border-color: var(--input);\n }\n }\n }\n .dark\\:data-\\[state\\=active\\]\\:bg-input\\/30 {\n &:is(.dark *) {\n &[data-state=\"active\"] {\n background-color: var(--input);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--input) 30%, transparent);\n }\n }\n }\n }\n .dark\\:data-\\[state\\=active\\]\\:text-foreground {\n &:is(.dark *) {\n &[data-state=\"active\"] {\n color: var(--foreground);\n }\n }\n }\n .dark\\:group-data-\\[variant\\=line\\]\\/tabs-list\\:data-\\[state\\=active\\]\\:border-transparent {\n &:is(.dark *) {\n &:is(:where(.group\\/tabs-list)[data-variant=\"line\"] *) {\n &[data-state=\"active\"] {\n border-color: transparent;\n }\n }\n }\n }\n .dark\\:group-data-\\[variant\\=line\\]\\/tabs-list\\:data-\\[state\\=active\\]\\:bg-transparent {\n &:is(.dark *) {\n &:is(:where(.group\\/tabs-list)[data-variant=\"line\"] *) {\n &[data-state=\"active\"] {\n background-color: transparent;\n }\n }\n }\n }\n .dark\\:data-\\[state\\=checked\\]\\:bg-primary {\n &:is(.dark *) {\n &[data-state=\"checked\"] {\n background-color: var(--primary);\n }\n }\n }\n .dark\\:data-\\[variant\\=destructive\\]\\:focus\\:bg-destructive\\/20 {\n &:is(.dark *) {\n &[data-variant=\"destructive\"] {\n &:focus {\n background-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--destructive) 20%, transparent);\n }\n }\n }\n }\n }\n .\\[\\&_\\.recharts-cartesian-axis-tick_text\\]\\:fill-muted-foreground {\n & .recharts-cartesian-axis-tick text {\n fill: var(--muted-foreground);\n }\n }\n .\\[\\&_\\.recharts-cartesian-grid_line\\[stroke\\=\\'\\#ccc\\'\\]\\]\\:stroke-border\\/50 {\n & .recharts-cartesian-grid line[stroke='#ccc'] {\n stroke: var(--border);\n @supports (color: color-mix(in lab, red, red)) {\n stroke: color-mix(in oklab, var(--border) 50%, transparent);\n }\n }\n }\n .\\[\\&_\\.recharts-curve\\.recharts-tooltip-cursor\\]\\:stroke-border {\n & .recharts-curve.recharts-tooltip-cursor {\n stroke: var(--border);\n }\n }\n .\\[\\&_\\.recharts-dot\\[stroke\\=\\'\\#fff\\'\\]\\]\\:stroke-transparent {\n & .recharts-dot[stroke='#fff'] {\n stroke: transparent;\n }\n }\n .\\[\\&_\\.recharts-layer\\]\\:outline-hidden {\n & .recharts-layer {\n --tw-outline-style: none;\n outline-style: none;\n @media (forced-colors: active) {\n outline: 2px solid transparent;\n outline-offset: 2px;\n }\n }\n }\n .\\[\\&_\\.recharts-polar-grid_\\[stroke\\=\\'\\#ccc\\'\\]\\]\\:stroke-border {\n & .recharts-polar-grid [stroke='#ccc'] {\n stroke: var(--border);\n }\n }\n .\\[\\&_\\.recharts-radial-bar-background-sector\\]\\:fill-muted {\n & .recharts-radial-bar-background-sector {\n fill: var(--muted);\n }\n }\n .\\[\\&_\\.recharts-rectangle\\.recharts-tooltip-cursor\\]\\:fill-muted {\n & .recharts-rectangle.recharts-tooltip-cursor {\n fill: var(--muted);\n }\n }\n .\\[\\&_\\.recharts-reference-line_\\[stroke\\=\\'\\#ccc\\'\\]\\]\\:stroke-border {\n & .recharts-reference-line [stroke='#ccc'] {\n stroke: var(--border);\n }\n }\n .\\[\\&_\\.recharts-sector\\]\\:outline-hidden {\n & .recharts-sector {\n --tw-outline-style: none;\n outline-style: none;\n @media (forced-colors: active) {\n outline: 2px solid transparent;\n outline-offset: 2px;\n }\n }\n }\n .\\[\\&_\\.recharts-sector\\[stroke\\=\\'\\#fff\\'\\]\\]\\:stroke-transparent {\n & .recharts-sector[stroke='#fff'] {\n stroke: transparent;\n }\n }\n .\\[\\&_\\.recharts-surface\\]\\:outline-hidden {\n & .recharts-surface {\n --tw-outline-style: none;\n outline-style: none;\n @media (forced-colors: active) {\n outline: 2px solid transparent;\n outline-offset: 2px;\n }\n }\n }\n .\\[\\&_svg\\]\\:pointer-events-none {\n & svg {\n pointer-events: none;\n }\n }\n .\\[\\&_svg\\]\\:shrink-0 {\n & svg {\n flex-shrink: 0;\n }\n }\n .\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-3 {\n & svg:not([class*='size-']) {\n width: calc(var(--spacing) * 3);\n height: calc(var(--spacing) * 3);\n }\n }\n .\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-4 {\n & svg:not([class*='size-']) {\n width: calc(var(--spacing) * 4);\n height: calc(var(--spacing) * 4);\n }\n }\n .\\[\\&_svg\\:not\\(\\[class\\*\\=\\'text-\\'\\]\\)\\]\\:text-muted-foreground {\n & svg:not([class*='text-']) {\n color: var(--muted-foreground);\n }\n }\n .\\[\\&_tr\\]\\:border-b {\n & tr {\n border-bottom-style: var(--tw-border-style);\n border-bottom-width: 1px;\n }\n }\n .\\[\\&_tr\\:last-child\\]\\:border-0 {\n & tr:last-child {\n border-style: var(--tw-border-style);\n border-width: 0px;\n }\n }\n .\\[\\&\\:has\\(\\[role\\=checkbox\\]\\)\\]\\:pr-0 {\n &:has([role=checkbox]) {\n padding-right: calc(var(--spacing) * 0);\n }\n }\n .\\[\\.border-b\\]\\:pb-6 {\n &:is(.border-b) {\n padding-bottom: calc(var(--spacing) * 6);\n }\n }\n .\\[\\.border-t\\]\\:pt-6 {\n &:is(.border-t) {\n padding-top: calc(var(--spacing) * 6);\n }\n }\n .\\*\\:\\[span\\]\\:last\\:flex {\n :is(& > *) {\n &:is(span) {\n &:last-child {\n display: flex;\n }\n }\n }\n }\n .\\*\\:\\[span\\]\\:last\\:items-center {\n :is(& > *) {\n &:is(span) {\n &:last-child {\n align-items: center;\n }\n }\n }\n }\n .\\*\\:\\[span\\]\\:last\\:gap-2 {\n :is(& > *) {\n &:is(span) {\n &:last-child {\n gap: calc(var(--spacing) * 2);\n }\n }\n }\n }\n .data-\\[variant\\=destructive\\]\\:\\*\\:\\[svg\\]\\:\\!text-destructive {\n &[data-variant=\"destructive\"] {\n :is(& > *) {\n &:is(svg) {\n color: var(--destructive) !important;\n }\n }\n }\n }\n .\\[\\&\\>\\*\\]\\:w-full {\n &>* {\n width: 100%;\n }\n }\n .\\@md\\/field-group\\:\\[\\&\\>\\*\\]\\:w-auto {\n @container field-group (width >= 28rem) {\n &>* {\n width: auto;\n }\n }\n }\n .\\[\\&\\>\\.sr-only\\]\\:w-auto {\n &>.sr-only {\n width: auto;\n }\n }\n .\\[\\&\\>\\[data-slot\\=field-label\\]\\]\\:flex-auto {\n &>[data-slot=field-label] {\n flex: auto;\n }\n }\n .\\@md\\/field-group\\:\\[\\&\\>\\[data-slot\\=field-label\\]\\]\\:flex-auto {\n @container field-group (width >= 28rem) {\n &>[data-slot=field-label] {\n flex: auto;\n }\n }\n }\n .\\[\\&\\>\\[role\\=checkbox\\]\\]\\:translate-y-\\[2px\\] {\n &>[role=checkbox] {\n --tw-translate-y: 2px;\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n }\n .has-\\[\\>\\[data-slot\\=field-content\\]\\]\\:\\[\\&\\>\\[role\\=checkbox\\]\\,\\[role\\=radio\\]\\]\\:mt-px {\n &:has(>[data-slot=field-content]) {\n &>[role=checkbox],[role=radio] {\n margin-top: 1px;\n }\n }\n }\n .\\@md\\/field-group\\:has-\\[\\>\\[data-slot\\=field-content\\]\\]\\:\\[\\&\\>\\[role\\=checkbox\\]\\,\\[role\\=radio\\]\\]\\:mt-px {\n @container field-group (width >= 28rem) {\n &:has(>[data-slot=field-content]) {\n &>[role=checkbox],[role=radio] {\n margin-top: 1px;\n }\n }\n }\n }\n .\\[\\&\\>a\\]\\:underline {\n &>a {\n text-decoration-line: underline;\n }\n }\n .\\[\\&\\>a\\]\\:underline-offset-4 {\n &>a {\n text-underline-offset: 4px;\n }\n }\n .\\[\\&\\>a\\:hover\\]\\:text-primary {\n &>a:hover {\n color: var(--primary);\n }\n }\n .\\[\\&\\>button\\]\\:hidden {\n &>button {\n display: none;\n }\n }\n .\\[\\&\\>span\\:last-child\\]\\:truncate {\n &>span:last-child {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n }\n .\\[\\&\\>svg\\]\\:pointer-events-none {\n &>svg {\n pointer-events: none;\n }\n }\n .\\[\\&\\>svg\\]\\:size-3 {\n &>svg {\n width: calc(var(--spacing) * 3);\n height: calc(var(--spacing) * 3);\n }\n }\n .\\[\\&\\>svg\\]\\:size-4 {\n &>svg {\n width: calc(var(--spacing) * 4);\n height: calc(var(--spacing) * 4);\n }\n }\n .\\[\\&\\>svg\\]\\:h-2\\.5 {\n &>svg {\n height: calc(var(--spacing) * 2.5);\n }\n }\n .\\[\\&\\>svg\\]\\:h-3 {\n &>svg {\n height: calc(var(--spacing) * 3);\n }\n }\n .\\[\\&\\>svg\\]\\:w-2\\.5 {\n &>svg {\n width: calc(var(--spacing) * 2.5);\n }\n }\n .\\[\\&\\>svg\\]\\:w-3 {\n &>svg {\n width: calc(var(--spacing) * 3);\n }\n }\n .\\[\\&\\>svg\\]\\:shrink-0 {\n &>svg {\n flex-shrink: 0;\n }\n }\n .\\[\\&\\>svg\\]\\:text-muted-foreground {\n &>svg {\n color: var(--muted-foreground);\n }\n }\n .\\[\\&\\>svg\\]\\:text-sidebar-accent-foreground {\n &>svg {\n color: var(--sidebar-accent-foreground);\n }\n }\n .group-has-data-\\[size\\=lg\\]\\/avatar-group\\:\\[\\&\\>svg\\]\\:size-5 {\n &:is(:where(.group\\/avatar-group):has(*[data-size=\"lg\"]) *) {\n &>svg {\n width: calc(var(--spacing) * 5);\n height: calc(var(--spacing) * 5);\n }\n }\n }\n .group-has-data-\\[size\\=sm\\]\\/avatar-group\\:\\[\\&\\>svg\\]\\:size-3 {\n &:is(:where(.group\\/avatar-group):has(*[data-size=\"sm\"]) *) {\n &>svg {\n width: calc(var(--spacing) * 3);\n height: calc(var(--spacing) * 3);\n }\n }\n }\n .group-data-\\[size\\=default\\]\\/avatar\\:\\[\\&\\>svg\\]\\:size-2 {\n &:is(:where(.group\\/avatar)[data-size=\"default\"] *) {\n &>svg {\n width: calc(var(--spacing) * 2);\n height: calc(var(--spacing) * 2);\n }\n }\n }\n .group-data-\\[size\\=lg\\]\\/avatar\\:\\[\\&\\>svg\\]\\:size-2 {\n &:is(:where(.group\\/avatar)[data-size=\"lg\"] *) {\n &>svg {\n width: calc(var(--spacing) * 2);\n height: calc(var(--spacing) * 2);\n }\n }\n }\n .group-data-\\[size\\=sm\\]\\/avatar\\:\\[\\&\\>svg\\]\\:hidden {\n &:is(:where(.group\\/avatar)[data-size=\"sm\"] *) {\n &>svg {\n display: none;\n }\n }\n }\n .\\[\\&\\>tr\\]\\:last\\:border-b-0 {\n &>tr {\n &:last-child {\n border-bottom-style: var(--tw-border-style);\n border-bottom-width: 0px;\n }\n }\n }\n .\\[\\[data-side\\=left\\]\\[data-collapsible\\=offcanvas\\]_\\&\\]\\:-right-2 {\n [data-side=left][data-collapsible=offcanvas] & {\n right: calc(var(--spacing) * -2);\n }\n }\n .\\[\\[data-side\\=left\\]\\[data-state\\=collapsed\\]_\\&\\]\\:cursor-e-resize {\n [data-side=left][data-state=collapsed] & {\n cursor: e-resize;\n }\n }\n .\\[\\[data-side\\=right\\]\\[data-collapsible\\=offcanvas\\]_\\&\\]\\:-left-2 {\n [data-side=right][data-collapsible=offcanvas] & {\n left: calc(var(--spacing) * -2);\n }\n }\n .\\[\\[data-side\\=right\\]\\[data-state\\=collapsed\\]_\\&\\]\\:cursor-w-resize {\n [data-side=right][data-state=collapsed] & {\n cursor: w-resize;\n }\n }\n .\\[\\[data-variant\\=legend\\]\\+\\&\\]\\:-mt-1\\.5 {\n [data-variant=legend]+& {\n margin-top: calc(var(--spacing) * -1.5);\n }\n }\n .\\[a\\&\\]\\:hover\\:bg-accent {\n a& {\n &:hover {\n @media (hover: hover) {\n background-color: var(--accent);\n }\n }\n }\n }\n .\\[a\\&\\]\\:hover\\:bg-destructive\\/90 {\n a& {\n &:hover {\n @media (hover: hover) {\n background-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--destructive) 90%, transparent);\n }\n }\n }\n }\n }\n .\\[a\\&\\]\\:hover\\:bg-primary\\/90 {\n a& {\n &:hover {\n @media (hover: hover) {\n background-color: var(--primary);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--primary) 90%, transparent);\n }\n }\n }\n }\n }\n .\\[a\\&\\]\\:hover\\:bg-secondary\\/90 {\n a& {\n &:hover {\n @media (hover: hover) {\n background-color: var(--secondary);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--secondary) 90%, transparent);\n }\n }\n }\n }\n }\n .\\[a\\&\\]\\:hover\\:text-accent-foreground {\n a& {\n &:hover {\n @media (hover: hover) {\n color: var(--accent-foreground);\n }\n }\n }\n }\n .\\[a\\&\\]\\:hover\\:underline {\n a& {\n &:hover {\n @media (hover: hover) {\n text-decoration-line: underline;\n }\n }\n }\n }\n}\n@property --tw-animation-delay {\n syntax: \"*\";\n inherits: false;\n initial-value: 0s;\n}\n@property --tw-animation-direction {\n syntax: \"*\";\n inherits: false;\n initial-value: normal;\n}\n@property --tw-animation-duration {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-animation-fill-mode {\n syntax: \"*\";\n inherits: false;\n initial-value: none;\n}\n@property --tw-animation-iteration-count {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-enter-blur {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-enter-opacity {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-enter-rotate {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-enter-scale {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-enter-translate-x {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-enter-translate-y {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-exit-blur {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-exit-opacity {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-exit-rotate {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-exit-scale {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-exit-translate-x {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-exit-translate-y {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n:root {\n --radius: 0.625rem;\n --background: oklch(1 0 0);\n --foreground: oklch(0.145 0 0);\n --card: oklch(1 0 0);\n --card-foreground: oklch(0.145 0 0);\n --popover: oklch(1 0 0);\n --popover-foreground: oklch(0.145 0 0);\n --primary: oklch(0.205 0 0);\n --primary-foreground: oklch(0.985 0 0);\n --secondary: oklch(0.97 0 0);\n --secondary-foreground: oklch(0.205 0 0);\n --muted: oklch(0.97 0 0);\n --muted-foreground: oklch(0.556 0 0);\n --accent: oklch(0.97 0 0);\n --accent-foreground: oklch(0.205 0 0);\n --destructive: oklch(0.577 0.245 27.325);\n --border: oklch(0.922 0 0);\n --input: oklch(0.922 0 0);\n --ring: oklch(0.708 0 0);\n --chart-1: oklch(0.646 0.222 41.116);\n --chart-2: oklch(0.6 0.118 184.704);\n --chart-3: oklch(0.398 0.07 227.392);\n --chart-4: oklch(0.828 0.189 84.429);\n --chart-5: oklch(0.769 0.188 70.08);\n --sidebar: oklch(0.985 0 0);\n --sidebar-foreground: oklch(0.145 0 0);\n --sidebar-primary: oklch(0.205 0 0);\n --sidebar-primary-foreground: oklch(0.985 0 0);\n --sidebar-accent: oklch(0.97 0 0);\n --sidebar-accent-foreground: oklch(0.205 0 0);\n --sidebar-border: oklch(0.922 0 0);\n --sidebar-ring: oklch(0.708 0 0);\n}\n.dark {\n --background: oklch(0.145 0 0);\n --foreground: oklch(0.985 0 0);\n --card: oklch(0.205 0 0);\n --card-foreground: oklch(0.985 0 0);\n --popover: oklch(0.205 0 0);\n --popover-foreground: oklch(0.985 0 0);\n --primary: oklch(0.922 0 0);\n --primary-foreground: oklch(0.205 0 0);\n --secondary: oklch(0.269 0 0);\n --secondary-foreground: oklch(0.985 0 0);\n --muted: oklch(0.269 0 0);\n --muted-foreground: oklch(0.708 0 0);\n --accent: oklch(0.269 0 0);\n --accent-foreground: oklch(0.985 0 0);\n --destructive: oklch(0.704 0.191 22.216);\n --border: oklch(1 0 0 / 10%);\n --input: oklch(1 0 0 / 15%);\n --ring: oklch(0.556 0 0);\n --chart-1: oklch(0.488 0.243 264.376);\n --chart-2: oklch(0.696 0.17 162.48);\n --chart-3: oklch(0.769 0.188 70.08);\n --chart-4: oklch(0.627 0.265 303.9);\n --chart-5: oklch(0.645 0.246 16.439);\n --sidebar: oklch(0.205 0 0);\n --sidebar-foreground: oklch(0.985 0 0);\n --sidebar-primary: oklch(0.488 0.243 264.376);\n --sidebar-primary-foreground: oklch(0.985 0 0);\n --sidebar-accent: oklch(0.269 0 0);\n --sidebar-accent-foreground: oklch(0.985 0 0);\n --sidebar-border: oklch(1 0 0 / 10%);\n --sidebar-ring: oklch(0.556 0 0);\n}\n@layer base {\n * {\n border-color: var(--border);\n outline-color: var(--ring);\n @supports (color: color-mix(in lab, red, red)) {\n outline-color: color-mix(in oklab, var(--ring) 50%, transparent);\n }\n }\n body {\n background-color: var(--background);\n color: var(--foreground);\n }\n}\n@property --tw-translate-x {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-translate-y {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-translate-z {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-space-y-reverse {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-space-x-reverse {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-divide-y-reverse {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-border-style {\n syntax: \"*\";\n inherits: false;\n initial-value: solid;\n}\n@property --tw-gradient-position {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-gradient-from {\n syntax: \"\";\n inherits: false;\n initial-value: #0000;\n}\n@property --tw-gradient-via {\n syntax: \"\";\n inherits: false;\n initial-value: #0000;\n}\n@property --tw-gradient-to {\n syntax: \"\";\n inherits: false;\n initial-value: #0000;\n}\n@property --tw-gradient-stops {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-gradient-via-stops {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-gradient-from-position {\n syntax: \"\";\n inherits: false;\n initial-value: 0%;\n}\n@property --tw-gradient-via-position {\n syntax: \"\";\n inherits: false;\n initial-value: 50%;\n}\n@property --tw-gradient-to-position {\n syntax: \"\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-leading {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-font-weight {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-tracking {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ordinal {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-slashed-zero {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-numeric-figure {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-numeric-spacing {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-numeric-fraction {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-shadow-alpha {\n syntax: \"\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-inset-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-inset-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-inset-shadow-alpha {\n syntax: \"\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-ring-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ring-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-inset-ring-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-inset-ring-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-ring-inset {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ring-offset-width {\n syntax: \"\";\n inherits: false;\n initial-value: 0px;\n}\n@property --tw-ring-offset-color {\n syntax: \"*\";\n inherits: false;\n initial-value: #fff;\n}\n@property --tw-ring-offset-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-outline-style {\n syntax: \"*\";\n inherits: false;\n initial-value: solid;\n}\n@property --tw-backdrop-blur {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-brightness {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-contrast {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-grayscale {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-hue-rotate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-invert {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-opacity {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-saturate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-sepia {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-duration {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ease {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-content {\n syntax: \"*\";\n initial-value: \"\";\n inherits: false;\n}\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n@keyframes pulse {\n 50% {\n opacity: 0.5;\n }\n}\n@keyframes enter {\n from {\n opacity: var(--tw-enter-opacity,1);\n transform: translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0));\n filter: blur(var(--tw-enter-blur,0));\n }\n}\n@keyframes exit {\n to {\n opacity: var(--tw-exit-opacity,1);\n transform: translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0));\n filter: blur(var(--tw-exit-blur,0));\n }\n}\n@layer properties {\n @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {\n *, ::before, ::after, ::backdrop {\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-translate-z: 0;\n --tw-space-y-reverse: 0;\n --tw-space-x-reverse: 0;\n --tw-divide-y-reverse: 0;\n --tw-border-style: solid;\n --tw-gradient-position: initial;\n --tw-gradient-from: #0000;\n --tw-gradient-via: #0000;\n --tw-gradient-to: #0000;\n --tw-gradient-stops: initial;\n --tw-gradient-via-stops: initial;\n --tw-gradient-from-position: 0%;\n --tw-gradient-via-position: 50%;\n --tw-gradient-to-position: 100%;\n --tw-leading: initial;\n --tw-font-weight: initial;\n --tw-tracking: initial;\n --tw-ordinal: initial;\n --tw-slashed-zero: initial;\n --tw-numeric-figure: initial;\n --tw-numeric-spacing: initial;\n --tw-numeric-fraction: initial;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-color: initial;\n --tw-shadow-alpha: 100%;\n --tw-inset-shadow: 0 0 #0000;\n --tw-inset-shadow-color: initial;\n --tw-inset-shadow-alpha: 100%;\n --tw-ring-color: initial;\n --tw-ring-shadow: 0 0 #0000;\n --tw-inset-ring-color: initial;\n --tw-inset-ring-shadow: 0 0 #0000;\n --tw-ring-inset: initial;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-outline-style: solid;\n --tw-backdrop-blur: initial;\n --tw-backdrop-brightness: initial;\n --tw-backdrop-contrast: initial;\n --tw-backdrop-grayscale: initial;\n --tw-backdrop-hue-rotate: initial;\n --tw-backdrop-invert: initial;\n --tw-backdrop-opacity: initial;\n --tw-backdrop-saturate: initial;\n --tw-backdrop-sepia: initial;\n --tw-duration: initial;\n --tw-ease: initial;\n --tw-content: \"\";\n --tw-animation-delay: 0s;\n --tw-animation-direction: normal;\n --tw-animation-duration: initial;\n --tw-animation-fill-mode: none;\n --tw-animation-iteration-count: 1;\n --tw-enter-blur: 0;\n --tw-enter-opacity: 1;\n --tw-enter-rotate: 0;\n --tw-enter-scale: 1;\n --tw-enter-translate-x: 0;\n --tw-enter-translate-y: 0;\n --tw-exit-blur: 0;\n --tw-exit-opacity: 1;\n --tw-exit-rotate: 0;\n --tw-exit-scale: 1;\n --tw-exit-translate-x: 0;\n --tw-exit-translate-y: 0;\n }\n }\n}\n"],"names":[],"mappings":"AACA;EAkkLE;IACE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAlkLJ;EAEE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAA;IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAFF;EA2HE;;;;;;;EAAA;;;;;;;EAMA;;;;;;;;;;EASA;;;;;;EAKA;;;;;EAIA;;;;;EAIA;;;;;;;EAKA;;;;EAGA;;;;;;;EAMA;;;;EAGA;;;;;;;EAMA;;;;EAGA;;;;EAGA;;;;;;EAKA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;;EAIA;;;;;EAIA;;;;;;;;;;;EAAA;;;;;;;;;;;EAUA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;IACE;;;;IAEE;MAAgD;;;;;;EAKpD;;;;EAGA;;;;EAGA;;;;;EAIA;;;;EAGA;;;;EAGA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAAA;;;;EAGA;;;;EAAA;;;;EAGA;;;;EA8iKA;;;;;EAGE;IAAgD;;;;;EAIlD;;;;;;AA/zKF;;AAAA;EA+QE;;;;EAIA;;;;EAIA;;;;EAGA;;;;EAGA;;;;;;;;;;;;EAWA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;;;;EAMA;;;;;;;EAMA;;;;;;;EAMA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAG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B;;;;EAEE;IAAgD;;;;;EAG5B;;;;EAEtB;;;;EAEE;IAAgD;;;;;EAG5B;;;;EAEtB;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;EAGA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;E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"}}] } \ No newline at end of file diff --git a/saintBarthVolleyApp/frontend/.next/dev/trace b/saintBarthVolleyApp/frontend/.next/dev/trace index 410b385..6a27a13 100644 --- a/saintBarthVolleyApp/frontend/.next/dev/trace +++ b/saintBarthVolleyApp/frontend/.next/dev/trace @@ -182,3 +182,5 @@ [{"name":"ensure-page","duration":447738,"timestamp":30480564565,"id":4221,"parentId":3,"tags":{"inputPage":"/admin/news/page"},"startTime":1777463288758,"traceId":"c0137d3015d52559"},{"name":"ensure-page","duration":364358,"timestamp":30480711738,"id":4230,"parentId":3,"tags":{"inputPage":"/(visitor)/partenaires/page"},"startTime":1777463288905,"traceId":"c0137d3015d52559"},{"name":"ensure-page","duration":449366,"timestamp":30480713090,"id":4232,"parentId":3,"tags":{"inputPage":"/(visitor)/partenaires/page"},"startTime":1777463288906,"traceId":"c0137d3015d52559"},{"name":"handle-request","duration":730327,"timestamp":30480564037,"id":4220,"tags":{"url":"/admin/news?_rsc=1lx13"},"startTime":1777463288757,"traceId":"c0137d3015d52559"},{"name":"memory-usage","duration":6,"timestamp":30481294504,"id":4233,"parentId":4220,"tags":{"url":"/admin/news?_rsc=1lx13","memory.rss":"1878466560","memory.heapUsed":"1212091440","memory.heapTotal":"1253117952"},"startTime":1777463289488,"traceId":"c0137d3015d52559"},{"name":"handle-request","duration":623639,"timestamp":30480688679,"id":4225,"tags":{"url":"/partenaires?_rsc=e1at6"},"startTime":1777463288882,"traceId":"c0137d3015d52559"},{"name":"memory-usage","duration":7,"timestamp":30481312474,"id":4234,"parentId":4225,"tags":{"url":"/partenaires?_rsc=e1at6","memory.rss":"1878990848","memory.heapUsed":"1212221824","memory.heapTotal":"1253117952"},"startTime":1777463289506,"traceId":"c0137d3015d52559"},{"name":"handle-request","duration":607580,"timestamp":30480710913,"id":4229,"tags":{"url":"/partenaires?_rsc=e1at6"},"startTime":1777463288904,"traceId":"c0137d3015d52559"},{"name":"memory-usage","duration":15,"timestamp":30481318701,"id":4235,"parentId":4229,"tags":{"url":"/partenaires?_rsc=e1at6","memory.rss":"1878990848","memory.heapUsed":"1212267920","memory.heapTotal":"1253117952"},"startTime":1777463289512,"traceId":"c0137d3015d52559"},{"name":"handle-request","duration":611192,"timestamp":30480712387,"id":4231,"tags":{"url":"/partenaires?_rsc=e1at6"},"startTime":1777463288906,"traceId":"c0137d3015d52559"},{"name":"memory-usage","duration":5,"timestamp":30481323717,"id":4236,"parentId":4231,"tags":{"url":"/partenaires?_rsc=e1at6","memory.rss":"1879121920","memory.heapUsed":"1212312040","memory.heapTotal":"1253117952"},"startTime":1777463289517,"traceId":"c0137d3015d52559"},{"name":"client-hmr-latency","duration":262000,"timestamp":30481263497,"id":4237,"parentId":3,"tags":{"updatedModules":["[project]/src/app/admin/albums/page.tsx [app-client]","[project]/src/app/admin/events/page.tsx [app-client]","[project]/src/app/admin/members/page.tsx [app-client]"],"page":"/admin/news","isPageHidden":true},"startTime":1777463289746,"traceId":"c0137d3015d52559"},{"name":"client-hmr-latency","duration":266000,"timestamp":30481262508,"id":4238,"parentId":3,"tags":{"updatedModules":["[project]/src/app/admin/albums/page.tsx [app-client]","[project]/src/app/admin/events/page.tsx [app-client]","[project]/src/app/admin/members/page.tsx [app-client]"],"page":"/partenaires","isPageHidden":false},"startTime":1777463289751,"traceId":"c0137d3015d52559"},{"name":"client-hmr-latency","duration":83000,"timestamp":30481551273,"id":4239,"parentId":3,"tags":{"updatedModules":["[project]/src/app/admin/page.tsx [app-client]"],"page":"/admin/news","isPageHidden":true},"startTime":1777463289857,"traceId":"c0137d3015d52559"},{"name":"client-hmr-latency","duration":83000,"timestamp":30481552406,"id":4240,"parentId":3,"tags":{"updatedModules":["[project]/src/app/admin/page.tsx [app-client]"],"page":"/partenaires","isPageHidden":false},"startTime":1777463289857,"traceId":"c0137d3015d52559"},{"name":"ensure-page","duration":261538,"timestamp":30482633506,"id":4242,"parentId":3,"tags":{"inputPage":"/(visitor)/partenaires/page"},"startTime":1777463290827,"traceId":"c0137d3015d52559"},{"name":"compile-path","duration":398841,"timestamp":30482633625,"id":4243,"tags":{"trigger":"/partenaires"},"startTime":1777463290827,"traceId":"c0137d3015d52559"}] [{"name":"client-hmr-latency","duration":320000,"timestamp":30482354806,"id":4246,"parentId":3,"tags":{"updatedModules":[],"page":"/partenaires","isPageHidden":false},"startTime":1777463291303,"traceId":"c0137d3015d52559"},{"name":"client-hmr-latency","duration":319000,"timestamp":30482354271,"id":4255,"parentId":3,"tags":{"updatedModules":[],"page":"/admin/news","isPageHidden":true},"startTime":1777463291314,"traceId":"c0137d3015d52559"},{"name":"ensure-page","duration":19467,"timestamp":30483110800,"id":4248,"parentId":3,"tags":{"inputPage":"/admin/news/page"},"startTime":1777463291304,"traceId":"c0137d3015d52559"},{"name":"ensure-page","duration":83263,"timestamp":30483111843,"id":4250,"parentId":3,"tags":{"inputPage":"/admin/news/page"},"startTime":1777463291305,"traceId":"c0137d3015d52559"},{"name":"ensure-page","duration":102971,"timestamp":30483112741,"id":4252,"parentId":3,"tags":{"inputPage":"/admin/news/page"},"startTime":1777463291306,"traceId":"c0137d3015d52559"},{"name":"ensure-page","duration":132564,"timestamp":30483113467,"id":4254,"parentId":3,"tags":{"inputPage":"/(visitor)/partenaires/page"},"startTime":1777463291307,"traceId":"c0137d3015d52559"},{"name":"client-hmr-latency","duration":9000,"timestamp":30483115543,"id":4256,"parentId":3,"tags":{"updatedModules":["[project]/src/components/dashboard/admin/nav-main.tsx [app-client]","[project]/src/components/dashboard/admin/app-sidebar.tsx [app-client]","[project]/src/components/dashboard/admin/club-form.tsx [app-client]"],"page":"/partenaires","isPageHidden":false},"startTime":1777463291482,"traceId":"c0137d3015d52559"},{"name":"client-hmr-latency","duration":7000,"timestamp":30483116632,"id":4257,"parentId":3,"tags":{"updatedModules":["[project]/src/components/dashboard/admin/nav-main.tsx [app-client]","[project]/src/components/dashboard/admin/app-sidebar.tsx [app-client]","[project]/src/components/dashboard/admin/club-form.tsx [app-client]"],"page":"/admin/news","isPageHidden":true},"startTime":1777463291482,"traceId":"c0137d3015d52559"},{"name":"handle-request","duration":666345,"timestamp":30482634266,"id":4244,"tags":{"url":"/admin/news?_rsc=1lx13"},"startTime":1777463290828,"traceId":"c0137d3015d52559"},{"name":"memory-usage","duration":3,"timestamp":30483300703,"id":4258,"parentId":4244,"tags":{"url":"/admin/news?_rsc=1lx13","memory.rss":"1923006464","memory.heapUsed":"1175642536","memory.heapTotal":"1247338496"},"startTime":1777463291494,"traceId":"c0137d3015d52559"},{"name":"handle-request","duration":190716,"timestamp":30483112325,"id":4251,"tags":{"url":"/admin/news?_rsc=1lx13"},"startTime":1777463291306,"traceId":"c0137d3015d52559"},{"name":"memory-usage","duration":4,"timestamp":30483303150,"id":4259,"parentId":4251,"tags":{"url":"/admin/news?_rsc=1lx13","memory.rss":"1923006464","memory.heapUsed":"1175773344","memory.heapTotal":"1247338496"},"startTime":1777463291496,"traceId":"c0137d3015d52559"},{"name":"handle-request","duration":194243,"timestamp":30483110251,"id":4247,"tags":{"url":"/admin/news?_rsc=1lx13"},"startTime":1777463291304,"traceId":"c0137d3015d52559"},{"name":"memory-usage","duration":3,"timestamp":30483304600,"id":4260,"parentId":4247,"tags":{"url":"/admin/news?_rsc=1lx13","memory.rss":"1923006464","memory.heapUsed":"1175831248","memory.heapTotal":"1247338496"},"startTime":1777463291498,"traceId":"c0137d3015d52559"},{"name":"handle-request","duration":194211,"timestamp":30483111279,"id":4249,"tags":{"url":"/admin/news?_rsc=1lx13"},"startTime":1777463291305,"traceId":"c0137d3015d52559"},{"name":"memory-usage","duration":6,"timestamp":30483305707,"id":4261,"parentId":4249,"tags":{"url":"/admin/news?_rsc=1lx13","memory.rss":"1923006464","memory.heapUsed":"1175873496","memory.heapTotal":"1247338496"},"startTime":1777463291499,"traceId":"c0137d3015d52559"},{"name":"handle-request","duration":695908,"timestamp":30482627533,"id":4241,"tags":{"url":"/partenaires?_rsc=e1at6"},"startTime":1777463290821,"traceId":"c0137d3015d52559"},{"name":"memory-usage","duration":3,"timestamp":30483323552,"id":4270,"parentId":4241,"tags":{"url":"/partenaires?_rsc=e1at6","memory.rss":"1923137536","memory.heapUsed":"1176572640","memory.heapTotal":"1247600640"},"startTime":1777463291517,"traceId":"c0137d3015d52559"},{"name":"handle-request","duration":212283,"timestamp":30483113096,"id":4253,"tags":{"url":"/partenaires?_rsc=e1at6"},"startTime":1777463291306,"traceId":"c0137d3015d52559"},{"name":"memory-usage","duration":6,"timestamp":30483325537,"id":4271,"parentId":4253,"tags":{"url":"/partenaires?_rsc=e1at6","memory.rss":"1923137536","memory.heapUsed":"1176702600","memory.heapTotal":"1247600640"},"startTime":1777463291519,"traceId":"c0137d3015d52559"},{"name":"ensure-page","duration":128408,"timestamp":30483331296,"id":4275,"parentId":3,"tags":{"inputPage":"/(visitor)/partenaires/page"},"startTime":1777463291525,"traceId":"c0137d3015d52559"},{"name":"ensure-page","duration":228934,"timestamp":30483326841,"id":4273,"parentId":3,"tags":{"inputPage":"/(visitor)/partenaires/page"},"startTime":1777463291520,"traceId":"c0137d3015d52559"},{"name":"ensure-page","duration":283215,"timestamp":30483311999,"id":4265,"parentId":3,"tags":{"inputPage":"/(visitor)/partenaires/page"},"startTime":1777463291505,"traceId":"c0137d3015d52559"},{"name":"ensure-page","duration":319988,"timestamp":30483313386,"id":4267,"parentId":3,"tags":{"inputPage":"/(visitor)/partenaires/page"},"startTime":1777463291507,"traceId":"c0137d3015d52559"},{"name":"ensure-page","duration":353947,"timestamp":30483314486,"id":4269,"parentId":3,"tags":{"inputPage":"/(visitor)/partenaires/page"},"startTime":1777463291508,"traceId":"c0137d3015d52559"},{"name":"ensure-page","duration":401678,"timestamp":30483307807,"id":4263,"parentId":3,"tags":{"inputPage":"/(visitor)/partenaires/page"},"startTime":1777463291501,"traceId":"c0137d3015d52559"},{"name":"client-hmr-latency","duration":463000,"timestamp":30483279913,"id":4276,"parentId":3,"tags":{"updatedModules":["[project]/src/components/visitor/navbar.tsx [app-client]","[project]/src/components/visitor/visitor-footer.tsx [app-client]","[project]/src/components/visitor/page-hero.tsx [app-client]"],"page":"/admin/news","isPageHidden":true},"startTime":1777463291946,"traceId":"c0137d3015d52559"},{"name":"handle-request","duration":432318,"timestamp":30483330731,"id":4274,"tags":{"url":"/partenaires?_rsc=e1at6"},"startTime":1777463291524,"traceId":"c0137d3015d52559"},{"name":"memory-usage","duration":2,"timestamp":30483763140,"id":4277,"parentId":4274,"tags":{"url":"/partenaires?_rsc=e1at6","memory.rss":"1943003136","memory.heapUsed":"1189250896","memory.heapTotal":"1254805504"},"startTime":1777463291956,"traceId":"c0137d3015d52559"},{"name":"handle-request","duration":451401,"timestamp":30483312704,"id":4266,"tags":{"url":"/partenaires?_rsc=e1at6"},"startTime":1777463291506,"traceId":"c0137d3015d52559"},{"name":"memory-usage","duration":3,"timestamp":30483764194,"id":4278,"parentId":4266,"tags":{"url":"/partenaires?_rsc=e1at6","memory.rss":"1943003136","memory.heapUsed":"1189297784","memory.heapTotal":"1254805504"},"startTime":1777463291957,"traceId":"c0137d3015d52559"},{"name":"handle-request","duration":457673,"timestamp":30483307273,"id":4262,"tags":{"url":"/partenaires?_rsc=e1at6"},"startTime":1777463291501,"traceId":"c0137d3015d52559"},{"name":"memory-usage","duration":4,"timestamp":30483765062,"id":4279,"parentId":4262,"tags":{"url":"/partenaires?_rsc=e1at6","memory.rss":"1943003136","memory.heapUsed":"1189340696","memory.heapTotal":"1254805504"},"startTime":1777463291958,"traceId":"c0137d3015d52559"},{"name":"handle-request","duration":440858,"timestamp":30483326353,"id":4272,"tags":{"url":"/partenaires?_rsc=e1at6"},"startTime":1777463291520,"traceId":"c0137d3015d52559"},{"name":"memory-usage","duration":4,"timestamp":30483767326,"id":4280,"parentId":4272,"tags":{"url":"/partenaires?_rsc=e1at6","memory.rss":"1943003136","memory.heapUsed":"1189457200","memory.heapTotal":"1254805504"},"startTime":1777463291961,"traceId":"c0137d3015d52559"},{"name":"handle-request","duration":458897,"timestamp":30483311379,"id":4264,"tags":{"url":"/partenaires?_rsc=e1at6"},"startTime":1777463291505,"traceId":"c0137d3015d52559"},{"name":"memory-usage","duration":3,"timestamp":30483770378,"id":4281,"parentId":4264,"tags":{"url":"/partenaires?_rsc=e1at6","memory.rss":"1943003136","memory.heapUsed":"1189655744","memory.heapTotal":"1254805504"},"startTime":1777463291964,"traceId":"c0137d3015d52559"},{"name":"handle-request","duration":460090,"timestamp":30483313873,"id":4268,"tags":{"url":"/partenaires?_rsc=e1at6"},"startTime":1777463291507,"traceId":"c0137d3015d52559"},{"name":"memory-usage","duration":6,"timestamp":30483774094,"id":4284,"parentId":4268,"tags":{"url":"/partenaires?_rsc=e1at6","memory.rss":"1943003136","memory.heapUsed":"1189887392","memory.heapTotal":"1254805504"},"startTime":1777463291967,"traceId":"c0137d3015d52559"},{"name":"ensure-page","duration":6273,"timestamp":30483771250,"id":4283,"parentId":3,"tags":{"inputPage":"/(visitor)/partenaires/page"},"startTime":1777463291965,"traceId":"c0137d3015d52559"},{"name":"ensure-page","duration":37979,"timestamp":30483775107,"id":4286,"parentId":3,"tags":{"inputPage":"/(visitor)/partenaires/page"},"startTime":1777463291968,"traceId":"c0137d3015d52559"},{"name":"ensure-page","duration":77993,"timestamp":30483776319,"id":4288,"parentId":3,"tags":{"inputPage":"/(visitor)/partenaires/page"},"startTime":1777463291970,"traceId":"c0137d3015d52559"},{"name":"client-hmr-latency","duration":464000,"timestamp":30483280037,"id":4291,"parentId":3,"tags":{"updatedModules":["[project]/src/components/visitor/navbar.tsx [app-client]","[project]/src/components/visitor/visitor-footer.tsx [app-client]","[project]/src/components/visitor/page-hero.tsx [app-client]"],"page":"/partenaires","isPageHidden":false},"startTime":1777463292079,"traceId":"c0137d3015d52559"},{"name":"ensure-page","duration":76164,"timestamp":30483811871,"id":4290,"parentId":3,"tags":{"inputPage":"/(visitor)/partenaires/page"},"startTime":1777463292005,"traceId":"c0137d3015d52559"},{"name":"ensure-page","duration":30732,"timestamp":30483886904,"id":4293,"parentId":3,"tags":{"inputPage":"/(visitor)/partenaires/page"},"startTime":1777463292080,"traceId":"c0137d3015d52559"},{"name":"ensure-page","duration":40797,"timestamp":30483916659,"id":4295,"parentId":3,"tags":{"inputPage":"/(visitor)/partenaires/page"},"startTime":1777463292110,"traceId":"c0137d3015d52559"},{"name":"handle-request","duration":223721,"timestamp":30483770678,"id":4282,"tags":{"url":"/partenaires?_rsc=e1at6"},"startTime":1777463291964,"traceId":"c0137d3015d52559"},{"name":"memory-usage","duration":4,"timestamp":30483994504,"id":4296,"parentId":4282,"tags":{"url":"/partenaires?_rsc=e1at6","memory.rss":"1945411584","memory.heapUsed":"1191052344","memory.heapTotal":"1257410560"},"startTime":1777463292188,"traceId":"c0137d3015d52559"},{"name":"handle-request","duration":220006,"timestamp":30483775684,"id":4287,"tags":{"url":"/partenaires?_rsc=e1at6"},"startTime":1777463291969,"traceId":"c0137d3015d52559"},{"name":"memory-usage","duration":2,"timestamp":30483995776,"id":4297,"parentId":4287,"tags":{"url":"/partenaires?_rsc=e1at6","memory.rss":"1945411584","memory.heapUsed":"1191108424","memory.heapTotal":"1257410560"},"startTime":1777463292189,"traceId":"c0137d3015d52559"},{"name":"handle-request","duration":223712,"timestamp":30483774454,"id":4285,"tags":{"url":"/partenaires?_rsc=e1at6"},"startTime":1777463291968,"traceId":"c0137d3015d52559"},{"name":"memory-usage","duration":2,"timestamp":30483998255,"id":4298,"parentId":4285,"tags":{"url":"/partenaires?_rsc=e1at6","memory.rss":"1945411584","memory.heapUsed":"1191262912","memory.heapTotal":"1257672704"},"startTime":1777463292192,"traceId":"c0137d3015d52559"},{"name":"handle-request","duration":188612,"timestamp":30483811481,"id":4289,"tags":{"url":"/partenaires?_rsc=e1at6"},"startTime":1777463292005,"traceId":"c0137d3015d52559"},{"name":"memory-usage","duration":4,"timestamp":30484000212,"id":4299,"parentId":4289,"tags":{"url":"/partenaires?_rsc=e1at6","memory.rss":"1945542656","memory.heapUsed":"1191390984","memory.heapTotal":"1257672704"},"startTime":1777463292193,"traceId":"c0137d3015d52559"},{"name":"ensure-page","duration":1767,"timestamp":30484001472,"id":4301,"parentId":3,"tags":{"inputPage":"/(visitor)/partenaires/page"},"startTime":1777463292195,"traceId":"c0137d3015d52559"},{"name":"handle-request","duration":170426,"timestamp":30483886536,"id":4292,"tags":{"url":"/partenaires?_rsc=e1at6"},"startTime":1777463292080,"traceId":"c0137d3015d52559"},{"name":"memory-usage","duration":5,"timestamp":30484057094,"id":4304,"parentId":4292,"tags":{"url":"/partenaires?_rsc=e1at6","memory.rss":"1940787200","memory.heapUsed":"1197354984","memory.heapTotal":"1259515904"},"startTime":1777463292250,"traceId":"c0137d3015d52559"},{"name":"handle-request","duration":141918,"timestamp":30483916044,"id":4294,"tags":{"url":"/partenaires?_rsc=e1at6"},"startTime":1777463292109,"traceId":"c0137d3015d52559"},{"name":"memory-usage","duration":4,"timestamp":30484058078,"id":4305,"parentId":4294,"tags":{"url":"/partenaires?_rsc=e1at6","memory.rss":"1940787200","memory.heapUsed":"1197397576","memory.heapTotal":"1259515904"},"startTime":1777463292251,"traceId":"c0137d3015d52559"},{"name":"ensure-page","duration":10771,"timestamp":30484055769,"id":4303,"parentId":3,"tags":{"inputPage":"/(visitor)/partenaires/page"},"startTime":1777463292249,"traceId":"c0137d3015d52559"},{"name":"ensure-page","duration":76375,"timestamp":30484058964,"id":4307,"parentId":3,"tags":{"inputPage":"/(visitor)/partenaires/page"},"startTime":1777463292252,"traceId":"c0137d3015d52559"},{"name":"ensure-page","duration":135849,"timestamp":30484065600,"id":4309,"parentId":3,"tags":{"inputPage":"/(visitor)/partenaires/page"},"startTime":1777463292259,"traceId":"c0137d3015d52559"},{"name":"ensure-page","duration":2269,"timestamp":30484246127,"id":4311,"parentId":3,"tags":{"inputPage":"/(visitor)/partenaires/page"},"startTime":1777463292439,"traceId":"c0137d3015d52559"},{"name":"ensure-page","duration":57735,"timestamp":30484246994,"id":4313,"parentId":3,"tags":{"inputPage":"/(visitor)/partenaires/page"},"startTime":1777463292440,"traceId":"c0137d3015d52559"},{"name":"handle-request","duration":379925,"timestamp":30484000816,"id":4300,"tags":{"url":"/partenaires?_rsc=e1at6"},"startTime":1777463292194,"traceId":"c0137d3015d52559"},{"name":"memory-usage","duration":4,"timestamp":30484380874,"id":4314,"parentId":4300,"tags":{"url":"/partenaires?_rsc=e1at6","memory.rss":"1944195072","memory.heapUsed":"1195702640","memory.heapTotal":"1263185920"},"startTime":1777463292574,"traceId":"c0137d3015d52559"},{"name":"handle-request","duration":326837,"timestamp":30484058379,"id":4306,"tags":{"url":"/partenaires?_rsc=e1at6"},"startTime":1777463292252,"traceId":"c0137d3015d52559"},{"name":"memory-usage","duration":5,"timestamp":30484385355,"id":4315,"parentId":4306,"tags":{"url":"/partenaires?_rsc=e1at6","memory.rss":"1944195072","memory.heapUsed":"1195851768","memory.heapTotal":"1263185920"},"startTime":1777463292579,"traceId":"c0137d3015d52559"},{"name":"handle-request","duration":324430,"timestamp":30484064969,"id":4308,"tags":{"url":"/partenaires?_rsc=e1at6"},"startTime":1777463292258,"traceId":"c0137d3015d52559"},{"name":"memory-usage","duration":5,"timestamp":30484389575,"id":4318,"parentId":4308,"tags":{"url":"/partenaires?_rsc=e1at6","memory.rss":"1944326144","memory.heapUsed":"1195991672","memory.heapTotal":"1263185920"},"startTime":1777463292583,"traceId":"c0137d3015d52559"},{"name":"handle-request","duration":337089,"timestamp":30484055229,"id":4302,"tags":{"url":"/partenaires?_rsc=e1at6"},"startTime":1777463292249,"traceId":"c0137d3015d52559"},{"name":"memory-usage","duration":5,"timestamp":30484392467,"id":4319,"parentId":4302,"tags":{"url":"/partenaires?_rsc=e1at6","memory.rss":"1944457216","memory.heapUsed":"1196107952","memory.heapTotal":"1263185920"},"startTime":1777463292586,"traceId":"c0137d3015d52559"},{"name":"ensure-page","duration":6777,"timestamp":30484387329,"id":4317,"parentId":3,"tags":{"inputPage":"/(visitor)/partenaires/page"},"startTime":1777463292581,"traceId":"c0137d3015d52559"},{"name":"handle-request","duration":191607,"timestamp":30484245460,"id":4310,"tags":{"url":"/partenaires?_rsc=e1at6"},"startTime":1777463292439,"traceId":"c0137d3015d52559"},{"name":"memory-usage","duration":3,"timestamp":30484437176,"id":4320,"parentId":4310,"tags":{"url":"/partenaires?_rsc=e1at6","memory.rss":"1944588288","memory.heapUsed":"1199966536","memory.heapTotal":"1263448064"},"startTime":1777463292630,"traceId":"c0137d3015d52559"},{"name":"ensure-page","duration":3585,"timestamp":30484438073,"id":4322,"parentId":3,"tags":{"inputPage":"/admin/news/page"},"startTime":1777463292631,"traceId":"c0137d3015d52559"},{"name":"ensure-page","duration":23090,"timestamp":30484440809,"id":4324,"parentId":3,"tags":{"inputPage":"/admin/news/page"},"startTime":1777463292634,"traceId":"c0137d3015d52559"},{"name":"handle-request","duration":236814,"timestamp":30484246594,"id":4312,"tags":{"url":"/partenaires?_rsc=e1at6"},"startTime":1777463292440,"traceId":"c0137d3015d52559"},{"name":"memory-usage","duration":3,"timestamp":30484483513,"id":4327,"parentId":4312,"tags":{"url":"/partenaires?_rsc=e1at6","memory.rss":"1945243648","memory.heapUsed":"1205285440","memory.heapTotal":"1263972352"},"startTime":1777463292677,"traceId":"c0137d3015d52559"},{"name":"ensure-page","duration":22773,"timestamp":30484462821,"id":4326,"parentId":3,"tags":{"inputPage":"/admin/news/page"},"startTime":1777463292656,"traceId":"c0137d3015d52559"},{"name":"ensure-page","duration":29943,"timestamp":30484484652,"id":4329,"parentId":3,"tags":{"inputPage":"/admin/news/page"},"startTime":1777463292678,"traceId":"c0137d3015d52559"},{"name":"ensure-page","duration":1332,"timestamp":30484537331,"id":4331,"parentId":3,"tags":{"inputPage":"/admin/news/page"},"startTime":1777463292731,"traceId":"c0137d3015d52559"},{"name":"handle-request","duration":127574,"timestamp":30484437612,"id":4321,"tags":{"url":"/admin/news?_rsc=1lx13"},"startTime":1777463292631,"traceId":"c0137d3015d52559"},{"name":"memory-usage","duration":4,"timestamp":30484565329,"id":4332,"parentId":4321,"tags":{"url":"/admin/news?_rsc=1lx13","memory.rss":"1946816512","memory.heapUsed":"1203719208","memory.heapTotal":"1265545216"},"startTime":1777463292759,"traceId":"c0137d3015d52559"},{"name":"handle-request","duration":89902,"timestamp":30484484117,"id":4328,"tags":{"url":"/admin/news?_rsc=1lx13"},"startTime":1777463292677,"traceId":"c0137d3015d52559"},{"name":"memory-usage","duration":5,"timestamp":30484574149,"id":4335,"parentId":4328,"tags":{"url":"/admin/news?_rsc=1lx13","memory.rss":"1946816512","memory.heapUsed":"1203984408","memory.heapTotal":"1265545216"},"startTime":1777463292767,"traceId":"c0137d3015d52559"},{"name":"handle-request","duration":112559,"timestamp":30484462464,"id":4325,"tags":{"url":"/admin/news?_rsc=1lx13"},"startTime":1777463292656,"traceId":"c0137d3015d52559"},{"name":"memory-usage","duration":4,"timestamp":30484575143,"id":4336,"parentId":4325,"tags":{"url":"/admin/news?_rsc=1lx13","memory.rss":"1946816512","memory.heapUsed":"1204026640","memory.heapTotal":"1265545216"},"startTime":1777463292768,"traceId":"c0137d3015d52559"},{"name":"handle-request","duration":136123,"timestamp":30484440361,"id":4323,"tags":{"url":"/admin/news?_rsc=1lx13"},"startTime":1777463292634,"traceId":"c0137d3015d52559"},{"name":"memory-usage","duration":5,"timestamp":30484576624,"id":4337,"parentId":4323,"tags":{"url":"/admin/news?_rsc=1lx13","memory.rss":"1946816512","memory.heapUsed":"1204078744","memory.heapTotal":"1265545216"},"startTime":1777463292770,"traceId":"c0137d3015d52559"},{"name":"ensure-page","duration":4764,"timestamp":30484572915,"id":4334,"parentId":3,"tags":{"inputPage":"/admin/news/page"},"startTime":1777463292766,"traceId":"c0137d3015d52559"},{"name":"handle-request","duration":73256,"timestamp":30484536785,"id":4330,"tags":{"url":"/admin/news?_rsc=1lx13"},"startTime":1777463292730,"traceId":"c0137d3015d52559"},{"name":"memory-usage","duration":5,"timestamp":30484610175,"id":4338,"parentId":4330,"tags":{"url":"/admin/news?_rsc=1lx13","memory.rss":"1946947584","memory.heapUsed":"1206794032","memory.heapTotal":"1265807360"},"startTime":1777463292803,"traceId":"c0137d3015d52559"},{"name":"ensure-page","duration":3156,"timestamp":30484611330,"id":4340,"parentId":3,"tags":{"inputPage":"/admin/news/page"},"startTime":1777463292805,"traceId":"c0137d3015d52559"},{"name":"ensure-page","duration":25357,"timestamp":30484612375,"id":4342,"parentId":3,"tags":{"inputPage":"/admin/news/page"},"startTime":1777463292806,"traceId":"c0137d3015d52559"},{"name":"ensure-page","duration":55973,"timestamp":30484613762,"id":4344,"parentId":3,"tags":{"inputPage":"/admin/news/page"},"startTime":1777463292807,"traceId":"c0137d3015d52559"},{"name":"ensure-page","duration":2559,"timestamp":30484701176,"id":4346,"parentId":3,"tags":{"inputPage":"/admin/news/page"},"startTime":1777463292894,"traceId":"c0137d3015d52559"},{"name":"handle-request","duration":347192,"timestamp":30484386448,"id":4316,"tags":{"url":"/partenaires?_rsc=e1at6"},"startTime":1777463292580,"traceId":"c0137d3015d52559"},{"name":"memory-usage","duration":10,"timestamp":30484733783,"id":4347,"parentId":4316,"tags":{"url":"/partenaires?_rsc=e1at6","memory.rss":"1948913664","memory.heapUsed":"1207212864","memory.heapTotal":"1267642368"},"startTime":1777463292927,"traceId":"c0137d3015d52559"},{"name":"ensure-page","duration":1777,"timestamp":30484739888,"id":4349,"parentId":3,"tags":{"inputPage":"/admin/news/page"},"startTime":1777463292933,"traceId":"c0137d3015d52559"},{"name":"handle-request","duration":201024,"timestamp":30484572345,"id":4333,"tags":{"url":"/admin/news?_rsc=1lx13"},"startTime":1777463292766,"traceId":"c0137d3015d52559"}] [{"name":"memory-usage","duration":5,"timestamp":30484774267,"id":4350,"parentId":4333,"tags":{"url":"/admin/news?_rsc=1lx13","memory.rss":"1949044736","memory.heapUsed":"1209986432","memory.heapTotal":"1267904512"},"startTime":1777463292968,"traceId":"c0137d3015d52559"},{"name":"handle-request","duration":170581,"timestamp":30484611881,"id":4341,"tags":{"url":"/admin/news?_rsc=1lx13"},"startTime":1777463292805,"traceId":"c0137d3015d52559"},{"name":"memory-usage","duration":8,"timestamp":30484783062,"id":4351,"parentId":4341,"tags":{"url":"/admin/news?_rsc=1lx13","memory.rss":"1949175808","memory.heapUsed":"1210142488","memory.heapTotal":"1267904512"},"startTime":1777463292976,"traceId":"c0137d3015d52559"},{"name":"handle-request","duration":175837,"timestamp":30484610774,"id":4339,"tags":{"url":"/admin/news?_rsc=1lx13"},"startTime":1777463292804,"traceId":"c0137d3015d52559"},{"name":"memory-usage","duration":4,"timestamp":30484786732,"id":4354,"parentId":4339,"tags":{"url":"/admin/news?_rsc=1lx13","memory.rss":"1949175808","memory.heapUsed":"1210275400","memory.heapTotal":"1267904512"},"startTime":1777463292980,"traceId":"c0137d3015d52559"},{"name":"handle-request","duration":174343,"timestamp":30484613282,"id":4343,"tags":{"url":"/admin/news?_rsc=1lx13"},"startTime":1777463292807,"traceId":"c0137d3015d52559"},{"name":"memory-usage","duration":3,"timestamp":30484787736,"id":4355,"parentId":4343,"tags":{"url":"/admin/news?_rsc=1lx13","memory.rss":"1949175808","memory.heapUsed":"1210321144","memory.heapTotal":"1267904512"},"startTime":1777463292981,"traceId":"c0137d3015d52559"},{"name":"ensure-page","duration":3539,"timestamp":30484784895,"id":4353,"parentId":3,"tags":{"inputPage":"/admin/news/page"},"startTime":1777463292978,"traceId":"c0137d3015d52559"},{"name":"handle-request","duration":126591,"timestamp":30484700622,"id":4345,"tags":{"url":"/admin/news?_rsc=1lx13"},"startTime":1777463292894,"traceId":"c0137d3015d52559"},{"name":"memory-usage","duration":5,"timestamp":30484827357,"id":4358,"parentId":4345,"tags":{"url":"/admin/news?_rsc=1lx13","memory.rss":"1949306880","memory.heapUsed":"1213133088","memory.heapTotal":"1268166656"},"startTime":1777463293021,"traceId":"c0137d3015d52559"},{"name":"ensure-page","duration":5414,"timestamp":30484824900,"id":4357,"parentId":3,"tags":{"inputPage":"/admin/news/page"},"startTime":1777463293018,"traceId":"c0137d3015d52559"},{"name":"ensure-page","duration":41161,"timestamp":30484828321,"id":4360,"parentId":3,"tags":{"inputPage":"/admin/news/page"},"startTime":1777463293022,"traceId":"c0137d3015d52559"},{"name":"ensure-page","duration":63022,"timestamp":30484829347,"id":4362,"parentId":3,"tags":{"inputPage":"/admin/news/page"},"startTime":1777463293023,"traceId":"c0137d3015d52559"},{"name":"ensure-page","duration":1939,"timestamp":30484919655,"id":4364,"parentId":3,"tags":{"inputPage":"/admin/news/page"},"startTime":1777463293113,"traceId":"c0137d3015d52559"},{"name":"handle-request","duration":203786,"timestamp":30484739225,"id":4348,"tags":{"url":"/admin/news?_rsc=1lx13"},"startTime":1777463292933,"traceId":"c0137d3015d52559"},{"name":"memory-usage","duration":4,"timestamp":30484943126,"id":4365,"parentId":4348,"tags":{"url":"/admin/news?_rsc=1lx13","memory.rss":"1950748672","memory.heapUsed":"1213268952","memory.heapTotal":"1269739520"},"startTime":1777463293136,"traceId":"c0137d3015d52559"},{"name":"ensure-page","duration":1651,"timestamp":30484949725,"id":4367,"parentId":3,"tags":{"inputPage":"/admin/news/page"},"startTime":1777463293143,"traceId":"c0137d3015d52559"},{"name":"handle-request","duration":196196,"timestamp":30484783681,"id":4352,"tags":{"url":"/admin/news?_rsc=1lx13"},"startTime":1777463292977,"traceId":"c0137d3015d52559"},{"name":"memory-usage","duration":6,"timestamp":30484980019,"id":4368,"parentId":4352,"tags":{"url":"/admin/news?_rsc=1lx13","memory.rss":"1951010816","memory.heapUsed":"1215913848","memory.heapTotal":"1270001664"},"startTime":1777463293173,"traceId":"c0137d3015d52559"},{"name":"handle-request","duration":157584,"timestamp":30484824307,"id":4356,"tags":{"url":"/admin/news?_rsc=1lx13"},"startTime":1777463293018,"traceId":"c0137d3015d52559"},{"name":"memory-usage","duration":5,"timestamp":30484982018,"id":4369,"parentId":4356,"tags":{"url":"/admin/news?_rsc=1lx13","memory.rss":"1951010816","memory.heapUsed":"1215980744","memory.heapTotal":"1270001664"},"startTime":1777463293175,"traceId":"c0137d3015d52559"},{"name":"handle-request","duration":155579,"timestamp":30484827729,"id":4359,"tags":{"url":"/admin/news?_rsc=1lx13"},"startTime":1777463293021,"traceId":"c0137d3015d52559"},{"name":"memory-usage","duration":7,"timestamp":30484983442,"id":4370,"parentId":4359,"tags":{"url":"/admin/news?_rsc=1lx13","memory.rss":"1951010816","memory.heapUsed":"1216046480","memory.heapTotal":"1270001664"},"startTime":1777463293177,"traceId":"c0137d3015d52559"},{"name":"handle-request","duration":155779,"timestamp":30484828870,"id":4361,"tags":{"url":"/admin/news?_rsc=1lx13"},"startTime":1777463293022,"traceId":"c0137d3015d52559"},{"name":"memory-usage","duration":17,"timestamp":30484985089,"id":4371,"parentId":4361,"tags":{"url":"/admin/news?_rsc=1lx13","memory.rss":"1951010816","memory.heapUsed":"1216094648","memory.heapTotal":"1270001664"},"startTime":1777463293178,"traceId":"c0137d3015d52559"},{"name":"handle-request","duration":73448,"timestamp":30484919207,"id":4363,"tags":{"url":"/admin/news?_rsc=1lx13"},"startTime":1777463293112,"traceId":"c0137d3015d52559"},{"name":"memory-usage","duration":14,"timestamp":30484993083,"id":4372,"parentId":4363,"tags":{"url":"/admin/news?_rsc=1lx13","memory.rss":"1951010816","memory.heapUsed":"1216154696","memory.heapTotal":"1270001664"},"startTime":1777463293186,"traceId":"c0137d3015d52559"},{"name":"handle-request","duration":51799,"timestamp":30484949172,"id":4366,"tags":{"url":"/admin/news?_rsc=1lx13"},"startTime":1777463293142,"traceId":"c0137d3015d52559"},{"name":"memory-usage","duration":5,"timestamp":30485001140,"id":4373,"parentId":4366,"tags":{"url":"/admin/news?_rsc=1lx13","memory.rss":"1951010816","memory.heapUsed":"1216211760","memory.heapTotal":"1270001664"},"startTime":1777463293194,"traceId":"c0137d3015d52559"},{"name":"client-hmr-latency","duration":133000,"timestamp":30539457435,"id":4374,"parentId":3,"tags":{"updatedModules":["[project]/src/components/visitor/navbar.tsx [app-client]","[project]/src/components/visitor/visitor-footer.tsx [app-client]","[project]/src/components/visitor/featured-news-carousel.tsx [app-client]","[project]/src/components/visitor/partners-carousel.tsx [app-client]","[project]/src/components/visitor/page-hero.tsx [app-client]","[project]/src/components/visitor/volunteers-carousel.tsx [app-client]"],"page":"/admin/news","isPageHidden":true},"startTime":1777463347801,"traceId":"c0137d3015d52559"},{"name":"client-hmr-latency","duration":133000,"timestamp":30539458921,"id":4375,"parentId":3,"tags":{"updatedModules":["[project]/src/components/visitor/navbar.tsx [app-client]"],"page":"/partenaires","isPageHidden":false},"startTime":1777463347813,"traceId":"c0137d3015d52559"},{"name":"client-hmr-latency","duration":116000,"timestamp":30577638379,"id":4376,"parentId":3,"tags":{"updatedModules":["[project]/src/app/(visitor)/actualites/actualites-client.tsx [app-client]"],"page":"/partenaires","isPageHidden":false},"startTime":1777463385968,"traceId":"c0137d3015d52559"},{"name":"client-hmr-latency","duration":112000,"timestamp":30577639726,"id":4377,"parentId":3,"tags":{"updatedModules":["[project]/src/app/(visitor)/actualites/actualites-client.tsx [app-client]"],"page":"/admin/news","isPageHidden":true},"startTime":1777463385968,"traceId":"c0137d3015d52559"},{"name":"client-hmr-latency","duration":125000,"timestamp":30585428574,"id":4378,"parentId":3,"tags":{"updatedModules":["[project]/src/app/(visitor)/actualites/actualites-client.tsx [app-client]"],"page":"/admin/news","isPageHidden":true},"startTime":1777463393779,"traceId":"c0137d3015d52559"},{"name":"client-hmr-latency","duration":133000,"timestamp":30585427367,"id":4379,"parentId":3,"tags":{"updatedModules":["[project]/src/app/(visitor)/actualites/actualites-client.tsx [app-client]"],"page":"/partenaires","isPageHidden":false},"startTime":1777463393780,"traceId":"c0137d3015d52559"},{"name":"client-hmr-latency","duration":112000,"timestamp":30594974420,"id":4380,"parentId":3,"tags":{"updatedModules":["[project]/src/app/(visitor)/actualites/actualites-client.tsx [app-client]"],"page":"/admin/news","isPageHidden":true},"startTime":1777463403304,"traceId":"c0137d3015d52559"},{"name":"client-hmr-latency","duration":115000,"timestamp":30594974533,"id":4381,"parentId":3,"tags":{"updatedModules":["[project]/src/app/(visitor)/actualites/actualites-client.tsx [app-client]"],"page":"/partenaires","isPageHidden":false},"startTime":1777463403304,"traceId":"c0137d3015d52559"},{"name":"ensure-page","duration":3490,"timestamp":31224155099,"id":4383,"parentId":3,"tags":{"inputPage":"/admin/news/page"},"startTime":1777464032348,"traceId":"c0137d3015d52559"},{"name":"compile-path","duration":62854,"timestamp":31224156973,"id":4386,"tags":{"trigger":"/partenaires"},"startTime":1777464032350,"traceId":"c0137d3015d52559"}] +[{"name":"hot-reloader","duration":202,"timestamp":33577059849,"id":3,"tags":{"version":"16.1.6"},"startTime":1777466385253,"traceId":"c0137d3015d52559"},{"name":"compile-path","duration":128575,"timestamp":33577530185,"id":4,"tags":{"trigger":"middleware"},"startTime":1777466385723,"traceId":"c0137d3015d52559"}] +[{"name":"setup-dev-bundler","duration":918474,"timestamp":33576833739,"id":2,"parentId":1,"tags":{},"startTime":1777466385027,"traceId":"c0137d3015d52559"},{"name":"start-dev-server","duration":2285520,"timestamp":33575702112,"id":1,"tags":{"cpus":"8","platform":"linux","memory.freeMem":"4710563840","memory.totalMem":"16408363008","memory.heapSizeLimit":"8254390272","memory.rss":"435150848","memory.heapTotal":"89591808","memory.heapUsed":"67323888"},"startTime":1777466383896,"traceId":"c0137d3015d52559"},{"name":"ensure-page","duration":1384880,"timestamp":33578093350,"id":6,"parentId":3,"tags":{"inputPage":"/(visitor)/partenaires/page"},"startTime":1777466386287,"traceId":"c0137d3015d52559"},{"name":"compile-path","duration":1696966,"timestamp":33578093833,"id":7,"tags":{"trigger":"/partenaires"},"startTime":1777466386287,"traceId":"c0137d3015d52559"}] diff --git a/saintBarthVolleyApp/frontend/next.config.ts b/saintBarthVolleyApp/frontend/next.config.ts index bbdc950..ee31326 100644 --- a/saintBarthVolleyApp/frontend/next.config.ts +++ b/saintBarthVolleyApp/frontend/next.config.ts @@ -5,6 +5,7 @@ const basePath = process.env.NEXT_BASE_PATH || ""; const nextConfig: NextConfig = { output: "standalone", basePath, + trailingSlash: true, images: { remotePatterns: [ {